Use tsx to run gulp

This commit is contained in:
Wendelin 2025-05-28 14:50:25 +02:00
parent 62f2b286ae
commit 1b67a6f358
No known key found for this signature in database
46 changed files with 754 additions and 856 deletions

View File

@ -35,7 +35,7 @@ jobs:
run: yarn install --immutable run: yarn install --immutable
- name: Build Cast - name: Build Cast
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp build-cast run: yarn run-task build-cast
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@ -70,7 +70,7 @@ jobs:
run: yarn install --immutable run: yarn install --immutable
- name: Build Cast - name: Build Cast
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp build-cast run: yarn run-task build-cast
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -35,7 +35,7 @@ jobs:
- name: Check for duplicate dependencies - name: Check for duplicate dependencies
run: yarn dedupe --check run: yarn dedupe --check
- name: Build resources - name: Build resources
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp gen-icons-json build-translations build-locale-data gather-gallery-pages run: yarn run-task gen-icons-json build-translations build-locale-data gather-gallery-pages
- name: Setup lint cache - name: Setup lint cache
uses: actions/cache@v4.2.3 uses: actions/cache@v4.2.3
with: with:
@ -67,7 +67,7 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: yarn install --immutable run: yarn install --immutable
- name: Build resources - name: Build resources
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp gen-icons-json build-translations build-locale-data run: yarn run-task gen-icons-json build-translations build-locale-data
- name: Run Tests - name: Run Tests
run: yarn run test run: yarn run test
build: build:
@ -85,7 +85,7 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: yarn install --immutable run: yarn install --immutable
- name: Build Application - name: Build Application
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp build-app run: yarn run-task build-app
env: env:
IS_TEST: "true" IS_TEST: "true"
- name: Upload bundle stats - name: Upload bundle stats
@ -109,7 +109,7 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: yarn install --immutable run: yarn install --immutable
- name: Build Application - name: Build Application
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp build-hassio run: yarn run-task build-hassio
env: env:
IS_TEST: "true" IS_TEST: "true"
- name: Upload bundle stats - name: Upload bundle stats

View File

@ -36,7 +36,7 @@ jobs:
run: yarn install --immutable run: yarn install --immutable
- name: Build Demo - name: Build Demo
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp build-demo run: yarn run-task build-demo
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@ -71,7 +71,7 @@ jobs:
run: yarn install --immutable run: yarn install --immutable
- name: Build Demo - name: Build Demo
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp build-demo run: yarn run-task build-demo
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -28,7 +28,7 @@ jobs:
run: yarn install --immutable run: yarn install --immutable
- name: Build Gallery - name: Build Gallery
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp build-gallery run: yarn run-task build-gallery
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -33,7 +33,7 @@ jobs:
run: yarn install --immutable run: yarn install --immutable
- name: Build Gallery - name: Build Gallery
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp build-gallery run: yarn run-task build-gallery
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,6 +1,6 @@
import defineProvider from "@babel/helper-define-polyfill-provider"; import defineProvider from "@babel/helper-define-polyfill-provider";
import { join } from "node:path"; import { join } from "node:path";
import paths from "../paths.cjs"; import paths from "../paths";
const POLYFILL_DIR = join(paths.root_dir, "src/resources/polyfills"); const POLYFILL_DIR = join(paths.root_dir, "src/resources/polyfills");

View File

@ -1,7 +1,7 @@
import path from "node:path"; import path from "node:path";
import packageJson from "../package.json" assert { type: "json" }; import packageJson from "../package.json" assert { type: "json" };
import paths, { dirname } from "./paths.ts";
import { version } from "./env.ts"; import { version } from "./env.ts";
import paths, { dirname } from "./paths.ts";
const dependencies = packageJson.dependencies; const dependencies = packageJson.dependencies;
@ -164,7 +164,7 @@ export const babelOptions = ({
// themselves to prevent self-injection. // themselves to prevent self-injection.
plugins: [ plugins: [
[ [
path.join(BABEL_PLUGINS, "custom-polyfill-plugin.js"), path.join(BABEL_PLUGINS, "custom-polyfill-plugin.ts"),
{ method: "usage-global" }, { method: "usage-global" },
], ],
], ],

View File

@ -1,57 +1,54 @@
import { parallel, series, task } from "gulp"; import { parallel, series } from "gulp";
import { isStatsBuild, isTestBuild } from "../env.ts"; import { isStatsBuild, isTestBuild } from "../env.ts";
import "./clean.ts"; import { clean } from "./clean.ts";
import "./compress.ts"; import { compressApp } from "./compress.ts";
import "./entry-html.ts"; import { genPagesAppDev, genPagesAppProd } from "./entry-html.ts";
import "./gather-static.ts"; import { copyStaticApp } from "./gather-static.ts";
import "./gen-icons-json.ts"; import { genIconsJson } from "./gen-icons-json.ts";
import "./locale-data.ts"; import { buildLocaleData } from "./locale-data.ts";
import "./rspack.ts"; import { rspackProdApp, rspackWatchApp } from "./rspack.ts";
import "./service-worker.ts"; import {
import "./translations.ts"; genServiceWorkerAppDev,
genServiceWorkerAppProd,
} from "./service-worker.ts";
import { buildTranslations } from "./translations.ts";
task( // develop-app
"develop-app", export const developApp = series(
series( async () => {
async () => { process.env.NODE_ENV = "development";
process.env.NODE_ENV = "development"; },
}, clean,
"clean", parallel(
parallel( genServiceWorkerAppDev,
"gen-service-worker-app-dev", genIconsJson,
"gen-icons-json", genPagesAppDev,
"gen-pages-app-dev", buildTranslations,
"build-translations", buildLocaleData
"build-locale-data" ),
), copyStaticApp,
"copy-static-app", rspackWatchApp
"rspack-watch-app"
)
); );
task( // build-app
"build-app", export const buildApp = series(
series( async () => {
async () => { process.env.NODE_ENV = "production";
process.env.NODE_ENV = "production"; },
}, clean,
"clean", parallel(genIconsJson, buildTranslations, buildLocaleData),
parallel("gen-icons-json", "build-translations", "build-locale-data"), copyStaticApp,
"copy-static-app", rspackProdApp,
"rspack-prod-app", parallel(genPagesAppProd, genServiceWorkerAppProd),
parallel("gen-pages-app-prod", "gen-service-worker-app-prod"), // Don't compress running tests
// Don't compress running tests ...(isTestBuild() || isStatsBuild() ? [] : [compressApp])
...(isTestBuild() || isStatsBuild() ? [] : ["compress-app"])
)
); );
task( // analyze-app
"analyze-app", export const analyzeApp = series(
series( async () => {
async () => { process.env.STATS = "1";
process.env.STATS = "1"; },
}, clean,
"clean", rspackProdApp
"rspack-prod-app"
)
); );

View File

@ -1,37 +1,38 @@
import { parallel, series, task } from "gulp"; import { parallel, series } from "gulp";
import "./clean.ts"; import { cleanCast } from "./clean.ts";
import "./entry-html.ts"; import { genPagesCastDev, genPagesCastProd } from "./entry-html.ts";
import "./gather-static.ts"; import { copyStaticCast } from "./gather-static.ts";
import "./rspack.ts"; import { genIconsJson } from "./gen-icons-json.ts";
import { buildLocaleData } from "./locale-data.ts";
import { rspackDevServerCast, rspackProdCast } from "./rspack.ts";
import "./service-worker.ts"; import "./service-worker.ts";
import "./translations.ts"; import {
buildTranslations,
translationsEnableMergeBackend,
} from "./translations.ts";
task( // develop-cast
"develop-cast", export const developCast = series(
series( async () => {
async () => { process.env.NODE_ENV = "development";
process.env.NODE_ENV = "development"; },
}, cleanCast,
"clean-cast", translationsEnableMergeBackend,
"translations-enable-merge-backend", parallel(genIconsJson, buildTranslations, buildLocaleData),
parallel("gen-icons-json", "build-translations", "build-locale-data"), copyStaticCast,
"copy-static-cast", genPagesCastDev,
"gen-pages-cast-dev", rspackDevServerCast
"rspack-dev-server-cast"
)
); );
task( // build-cast
"build-cast", export const buildCast = series(
series( async () => {
async () => { process.env.NODE_ENV = "production";
process.env.NODE_ENV = "production"; },
}, cleanCast,
"clean-cast", translationsEnableMergeBackend,
"translations-enable-merge-backend", parallel(genIconsJson, buildTranslations, buildLocaleData),
parallel("gen-icons-json", "build-translations", "build-locale-data"), copyStaticCast,
"copy-static-cast", rspackProdCast,
"rspack-prod-cast", genPagesCastProd
"gen-pages-cast-prod"
)
); );

View File

@ -1,51 +1,31 @@
import { deleteSync } from "del"; import { deleteSync } from "del";
import { parallel, task } from "gulp"; import { parallel } from "gulp";
import paths from "../paths.ts"; import paths from "../paths.ts";
import "./translations.ts"; import { cleanTranslations } from "./translations.ts";
task( export const clean = parallel(cleanTranslations, async () =>
"clean", deleteSync([paths.app_output_root, paths.build_dir])
parallel("clean-translations", async () =>
deleteSync([paths.app_output_root, paths.build_dir])
)
); );
task( export const cleanDemo = parallel(cleanTranslations, async () =>
"clean-demo", deleteSync([paths.demo_output_root, paths.build_dir])
parallel("clean-translations", async () =>
deleteSync([paths.demo_output_root, paths.build_dir])
)
); );
task( export const cleanCast = parallel(cleanTranslations, async () =>
"clean-cast", deleteSync([paths.cast_output_root, paths.build_dir])
parallel("clean-translations", async () =>
deleteSync([paths.cast_output_root, paths.build_dir])
)
); );
task("clean-hassio", async () => export const cleanHassio = async () =>
deleteSync([paths.hassio_output_root, paths.build_dir]) deleteSync([paths.hassio_output_root, paths.build_dir]);
export const cleanGallery = parallel(cleanTranslations, async () =>
deleteSync([paths.gallery_output_root, paths.gallery_build, paths.build_dir])
); );
task( export const cleanLandingPage = parallel(cleanTranslations, async () =>
"clean-gallery", deleteSync([
parallel("clean-translations", async () => paths.landingPage_output_root,
deleteSync([ paths.landingPage_build,
paths.gallery_output_root, paths.build_dir,
paths.gallery_build, ])
paths.build_dir,
])
)
);
task(
"clean-landing-page",
parallel("clean-translations", async () =>
deleteSync([
paths.landingPage_output_root,
paths.landingPage_build,
paths.build_dir,
])
)
); );

View File

@ -1,6 +1,6 @@
// Tasks to compress // Tasks to compress
import { dest, parallel, src, task } from "gulp"; import { dest, parallel, src } from "gulp";
import brotli from "gulp-brotli"; import brotli from "gulp-brotli";
import zopfli from "gulp-zopfli-green"; import zopfli from "gulp-zopfli-green";
import { constants } from "node:zlib"; import { constants } from "node:zlib";
@ -64,21 +64,16 @@ const compressHassioOtherBrotli = () =>
const compressHassioOtherZopfli = () => const compressHassioOtherZopfli = () =>
compressOther(paths.hassio_output_root, paths.hassio_output_latest, "zopfli"); compressOther(paths.hassio_output_root, paths.hassio_output_latest, "zopfli");
task( export const compressApp = parallel(
"compress-app", compressAppModernBrotli,
parallel( compressAppOtherBrotli,
compressAppModernBrotli, compressAppModernZopfli,
compressAppOtherBrotli, compressAppOtherZopfli
compressAppModernZopfli,
compressAppOtherZopfli
)
); );
task(
"compress-hassio", export const compressHassio = parallel(
parallel( compressHassioModernBrotli,
compressHassioModernBrotli, compressHassioOtherBrotli,
compressHassioOtherBrotli, compressHassioModernZopfli,
compressHassioModernZopfli, compressHassioOtherZopfli
compressHassioOtherZopfli
)
); );

View File

@ -1,54 +1,47 @@
import { parallel, series, task } from "gulp"; import { parallel, series } from "gulp";
import "./clean.ts"; import { clean, cleanDemo } from "./clean.ts";
import "./entry-html.ts"; import { genPagesDemoDev, genPagesDemoProd } from "./entry-html.ts";
import "./gather-static.ts"; import { copyStaticDemo } from "./gather-static.ts";
import "./gen-icons-json.ts"; import { genIconsJson } from "./gen-icons-json.ts";
import "./rspack.ts"; import { buildLocaleData } from "./locale-data.ts";
import { rspackDevServerDemo, rspackProdDemo } from "./rspack.ts";
import "./service-worker.ts"; import "./service-worker.ts";
import "./translations.ts"; import {
buildTranslations,
translationsEnableMergeBackend,
} from "./translations.ts";
task( // develop-demo
"develop-demo", export const developDemo = series(
series( async function setEnv() {
async function setEnv() { process.env.NODE_ENV = "development";
process.env.NODE_ENV = "development"; },
}, cleanDemo,
"clean-demo", translationsEnableMergeBackend,
"translations-enable-merge-backend", parallel(genIconsJson, genPagesDemoDev, buildTranslations, buildLocaleData),
parallel( copyStaticDemo,
"gen-icons-json", rspackDevServerDemo
"gen-pages-demo-dev",
"build-translations",
"build-locale-data"
),
"copy-static-demo",
"rspack-dev-server-demo"
)
); );
task( // build-demo
"build-demo", export const buildDemo = series(
series( async function setEnv() {
async function setEnv() { process.env.NODE_ENV = "production";
process.env.NODE_ENV = "production"; },
}, cleanDemo,
"clean-demo", // Cast needs to be backwards compatible and older HA has no translations
// Cast needs to be backwards compatible and older HA has no translations translationsEnableMergeBackend,
"translations-enable-merge-backend", parallel(genIconsJson, buildTranslations, buildLocaleData),
parallel("gen-icons-json", "build-translations", "build-locale-data"), copyStaticDemo,
"copy-static-demo", rspackProdDemo,
"rspack-prod-demo", genPagesDemoProd
"gen-pages-demo-prod"
)
); );
task( // analyze-demo
"analyze-demo", export const analyzeDemo = series(
series( async function setEnv() {
async function setEnv() { process.env.STATS = "1";
process.env.STATS = "1"; },
}, clean,
"clean", rspackProdDemo
"rspack-prod-demo"
)
); );

View File

@ -1,9 +1,9 @@
import { LokaliseApi } from "@lokalise/node-api"; import { LokaliseApi } from "@lokalise/node-api";
import fs from "node:fs/promises"; import { dest, series, src } from "gulp";
import { dest, series, src, task } from "gulp";
import transform from "gulp-json-transform"; import transform from "gulp-json-transform";
import JSZip from "jszip"; import JSZip from "jszip";
import mapStream from "map-stream"; import mapStream from "map-stream";
import fs from "node:fs/promises";
import path from "node:path"; import path from "node:path";
const inDir = "translations"; const inDir = "translations";
@ -12,11 +12,14 @@ const inDirBackend = `${inDir}/backend`;
const srcMeta = "src/translations/translationMetadata.json"; const srcMeta = "src/translations/translationMetadata.json";
const encoding = "utf8"; const encoding = "utf8";
function hasHtml(data) { const hasHtml = (data) => /<\S*>/i.test(data);
return /<\S*>/i.test(data);
}
function recursiveCheckHasHtml(file, data, errors: string[], recKey?: string) { const recursiveCheckHasHtml = (
file,
data,
errors: string[],
recKey?: string
) => {
Object.keys(data).forEach(function (key) { Object.keys(data).forEach(function (key) {
if (typeof data[key] === "object") { if (typeof data[key] === "object") {
const nextRecKey = recKey ? `${recKey}.${key}` : key; const nextRecKey = recKey ? `${recKey}.${key}` : key;
@ -25,9 +28,9 @@ function recursiveCheckHasHtml(file, data, errors: string[], recKey?: string) {
errors.push(`HTML found in ${file.path} at key ${recKey}.${key}`); errors.push(`HTML found in ${file.path} at key ${recKey}.${key}`);
} }
}); });
} };
function checkHtml() { const checkHtml = () => {
const errors = []; const errors = [];
return mapStream(function (file, cb) { return mapStream(function (file, cb) {
@ -44,9 +47,9 @@ function checkHtml() {
} }
cb(error, file); cb(error, file);
}); });
} };
function convertBackendTranslations(data, _file) { const convertBackendTranslationsTransform = (data, _file) => {
const output = { component: {} }; const output = { component: {} };
if (!data.component) { if (!data.component) {
return output; return output;
@ -62,21 +65,19 @@ function convertBackendTranslations(data, _file) {
}); });
}); });
return output; return output;
} };
task("convert-backend-translations", function () { const convertBackendTranslations = () =>
return src([`${inDirBackend}/*.json`]) src([`${inDirBackend}/*.json`])
.pipe(transform((data, file) => convertBackendTranslations(data, file))) .pipe(
transform((data, file) => convertBackendTranslationsTransform(data, file))
)
.pipe(dest(inDirBackend)); .pipe(dest(inDirBackend));
});
task("check-translations-html", function () { const checkTranslationsHtml = () =>
return src([`${inDirFrontend}/*.json`, `${inDirBackend}/*.json`]).pipe( src([`${inDirFrontend}/*.json`, `${inDirBackend}/*.json`]).pipe(checkHtml());
checkHtml()
);
});
task("check-all-files-exist", async function () { const checkAllFilesExist = async () => {
const file = await fs.readFile(srcMeta, { encoding }); const file = await fs.readFile(srcMeta, { encoding });
const meta = JSON.parse(file); const meta = JSON.parse(file);
const writings: Promise<void>[] = []; const writings: Promise<void>[] = [];
@ -91,14 +92,14 @@ task("check-all-files-exist", async function () {
); );
}); });
await Promise.allSettled(writings); await Promise.allSettled(writings);
}); };
const lokaliseProjects = { const lokaliseProjects = {
backend: "130246255a974bd3b5e8a1.51616605", backend: "130246255a974bd3b5e8a1.51616605",
frontend: "3420425759f6d6d241f598.13594006", frontend: "3420425759f6d6d241f598.13594006",
}; };
task("fetch-lokalise", async function () { const fetchLokalise = async () => {
let apiKey; let apiKey;
try { try {
apiKey = apiKey =
@ -167,14 +168,11 @@ task("fetch-lokalise", async function () {
}) })
) )
); );
}); };
task( export const downloadTranslations = series(
"download-translations", fetchLokalise,
series( convertBackendTranslations,
"fetch-lokalise", checkTranslationsHtml,
"convert-backend-translations", checkAllFilesExist
"check-translations-html",
"check-all-files-exist"
)
); );

View File

@ -6,7 +6,6 @@ import {
getPreUserAgentRegexes, getPreUserAgentRegexes,
} from "browserslist-useragent-regexp"; } from "browserslist-useragent-regexp";
import fs from "fs-extra"; import fs from "fs-extra";
import { task } from "gulp";
import { minify } from "html-minifier-terser"; import { minify } from "html-minifier-terser";
import template from "lodash.template"; import template from "lodash.template";
import { dirname, extname, resolve } from "node:path"; import { dirname, extname, resolve } from "node:path";
@ -171,20 +170,18 @@ const APP_PAGE_ENTRIES = {
"index.html": ["core", "app"], "index.html": ["core", "app"],
}; };
task( export const genPagesAppDev = genPagesDevTask(
"gen-pages-app-dev", APP_PAGE_ENTRIES,
genPagesDevTask(APP_PAGE_ENTRIES, paths.root_dir, paths.app_output_root) paths.root_dir,
paths.app_output_root
); );
task( export const genPagesAppProd = genPagesProdTask(
"gen-pages-app-prod", APP_PAGE_ENTRIES,
genPagesProdTask( paths.root_dir,
APP_PAGE_ENTRIES, paths.app_output_root,
paths.root_dir, paths.app_output_latest,
paths.app_output_root, paths.app_output_es5
paths.app_output_latest,
paths.app_output_es5
)
); );
const CAST_PAGE_ENTRIES = { const CAST_PAGE_ENTRIES = {
@ -194,104 +191,82 @@ const CAST_PAGE_ENTRIES = {
"receiver.html": ["receiver"], "receiver.html": ["receiver"],
}; };
task( export const genPagesCastDev = genPagesDevTask(
"gen-pages-cast-dev", CAST_PAGE_ENTRIES,
genPagesDevTask(CAST_PAGE_ENTRIES, paths.cast_dir, paths.cast_output_root) paths.cast_dir,
paths.cast_output_root
); );
task( export const genPagesCastProd = genPagesProdTask(
"gen-pages-cast-prod", CAST_PAGE_ENTRIES,
genPagesProdTask( paths.cast_dir,
CAST_PAGE_ENTRIES, paths.cast_output_root,
paths.cast_dir, paths.cast_output_latest,
paths.cast_output_root, paths.cast_output_es5
paths.cast_output_latest,
paths.cast_output_es5
)
); );
const DEMO_PAGE_ENTRIES = { "index.html": ["main"] }; const DEMO_PAGE_ENTRIES = { "index.html": ["main"] };
task( export const genPagesDemoDev = genPagesDevTask(
"gen-pages-demo-dev", DEMO_PAGE_ENTRIES,
genPagesDevTask(DEMO_PAGE_ENTRIES, paths.demo_dir, paths.demo_output_root) paths.demo_dir,
paths.demo_output_root
); );
task( export const genPagesDemoProd = genPagesProdTask(
"gen-pages-demo-prod", DEMO_PAGE_ENTRIES,
genPagesProdTask( paths.demo_dir,
DEMO_PAGE_ENTRIES, paths.demo_output_root,
paths.demo_dir, paths.demo_output_latest,
paths.demo_output_root, paths.demo_output_es5
paths.demo_output_latest,
paths.demo_output_es5
)
); );
const GALLERY_PAGE_ENTRIES = { "index.html": ["entrypoint"] }; const GALLERY_PAGE_ENTRIES = { "index.html": ["entrypoint"] };
task( export const genPagesGalleryDev = genPagesDevTask(
"gen-pages-gallery-dev", GALLERY_PAGE_ENTRIES,
genPagesDevTask( paths.gallery_dir,
GALLERY_PAGE_ENTRIES, paths.gallery_output_root
paths.gallery_dir,
paths.gallery_output_root
)
); );
task( export const genPagesGalleryProd = genPagesProdTask(
"gen-pages-gallery-prod", GALLERY_PAGE_ENTRIES,
genPagesProdTask( paths.gallery_dir,
GALLERY_PAGE_ENTRIES, paths.gallery_output_root,
paths.gallery_dir, paths.gallery_output_latest
paths.gallery_output_root,
paths.gallery_output_latest
)
); );
const LANDING_PAGE_PAGE_ENTRIES = { "index.html": ["entrypoint"] }; const LANDING_PAGE_PAGE_ENTRIES = { "index.html": ["entrypoint"] };
task( export const genPagesLandingPageDev = genPagesDevTask(
"gen-pages-landing-page-dev", LANDING_PAGE_PAGE_ENTRIES,
genPagesDevTask( paths.landingPage_dir,
LANDING_PAGE_PAGE_ENTRIES, paths.landingPage_output_root
paths.landingPage_dir,
paths.landingPage_output_root
)
); );
task( export const genPagesLandingPageProd = genPagesProdTask(
"gen-pages-landing-page-prod", LANDING_PAGE_PAGE_ENTRIES,
genPagesProdTask( paths.landingPage_dir,
LANDING_PAGE_PAGE_ENTRIES, paths.landingPage_output_root,
paths.landingPage_dir, paths.landingPage_output_latest,
paths.landingPage_output_root, paths.landingPage_output_es5
paths.landingPage_output_latest,
paths.landingPage_output_es5
)
); );
const HASSIO_PAGE_ENTRIES = { "entrypoint.js": ["entrypoint"] }; const HASSIO_PAGE_ENTRIES = { "entrypoint.js": ["entrypoint"] };
task( export const genPagesHassioDev = genPagesDevTask(
"gen-pages-hassio-dev", HASSIO_PAGE_ENTRIES,
genPagesDevTask( paths.hassio_dir,
HASSIO_PAGE_ENTRIES, paths.hassio_output_root,
paths.hassio_dir, "src",
paths.hassio_output_root, paths.hassio_publicPath
"src",
paths.hassio_publicPath
)
); );
task( export const genPagesHassioProd = genPagesProdTask(
"gen-pages-hassio-prod", HASSIO_PAGE_ENTRIES,
genPagesProdTask( paths.hassio_dir,
HASSIO_PAGE_ENTRIES, paths.hassio_output_root,
paths.hassio_dir, paths.hassio_output_latest,
paths.hassio_output_root, paths.hassio_output_es5,
paths.hassio_output_latest, "src"
paths.hassio_output_es5,
"src"
)
); );

View File

@ -4,9 +4,9 @@ import { createOAuthDeviceAuth } from "@octokit/auth-oauth-device";
import { retry } from "@octokit/plugin-retry"; import { retry } from "@octokit/plugin-retry";
import { Octokit } from "@octokit/rest"; import { Octokit } from "@octokit/rest";
import { deleteAsync } from "del"; import { deleteAsync } from "del";
import { mkdir, readFile, writeFile } from "node:fs/promises"; import { series } from "gulp";
import { series, task } from "gulp";
import jszip from "jszip"; import jszip from "jszip";
import { mkdir, readFile, writeFile } from "node:fs/promises";
import path from "node:path"; import path from "node:path";
import process from "node:process"; import process from "node:process";
import { extract } from "tar"; import { extract } from "tar";
@ -22,12 +22,13 @@ const TOKEN_FILE = path.posix.join(EXTRACT_DIR, "token.json");
const ARTIFACT_FILE = path.posix.join(EXTRACT_DIR, "artifact.json"); const ARTIFACT_FILE = path.posix.join(EXTRACT_DIR, "artifact.json");
let allowTokenSetup = false; let allowTokenSetup = false;
task("allow-setup-fetch-nightly-translations", (done) => {
export const allowSetupFetchNightlyTranslations = (done) => {
allowTokenSetup = true; allowTokenSetup = true;
done(); done();
}); };
task("fetch-nightly-translations", async function () { export const fetchNightlyTranslations = async () => {
// Skip all when environment flag is set (assumes translations are already in place) // Skip all when environment flag is set (assumes translations are already in place)
if (process.env?.SKIP_FETCH_NIGHTLY_TRANSLATIONS) { if (process.env?.SKIP_FETCH_NIGHTLY_TRANSLATIONS) {
console.log("Skipping fetch due to environment signal"); console.log("Skipping fetch due to environment signal");
@ -161,9 +162,9 @@ task("fetch-nightly-translations", async function () {
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
extractStream.on("close", resolve).on("error", reject); extractStream.on("close", resolve).on("error", reject);
}); });
}); };
task( export const setupAndFetchNightlyTranslations = series(
"setup-and-fetch-nightly-translations", allowSetupFetchNightlyTranslations,
series("allow-setup-fetch-nightly-translations", "fetch-nightly-translations") fetchNightlyTranslations
); );

View File

@ -1,19 +1,23 @@
import fs from "node:fs";
import { glob } from "glob"; import { glob } from "glob";
import { parallel, series, task, watch } from "gulp"; import { parallel, series, watch } from "gulp";
import yaml from "js-yaml"; import yaml from "js-yaml";
import { marked } from "marked"; import { marked } from "marked";
import fs from "node:fs";
import path from "node:path"; import path from "node:path";
import paths from "../paths.ts"; import paths from "../paths.ts";
import "./clean.ts"; import { cleanGallery } from "./clean.ts";
import "./entry-html.ts"; import { genPagesGalleryDev, genPagesGalleryProd } from "./entry-html.ts";
import "./gather-static.ts"; import { copyStaticGallery } from "./gather-static.ts";
import "./gen-icons-json.ts"; import { genIconsJson } from "./gen-icons-json.ts";
import "./rspack.ts"; import { buildLocaleData } from "./locale-data.ts";
import "./service-worker.ts"; import { rspackDevServerGallery, rspackProdGallery } from "./rspack.ts";
import "./translations.ts"; import {
buildTranslations,
translationsEnableMergeBackend,
} from "./translations.ts";
task("gather-gallery-pages", async function gatherPages() { // gather-gallery-pages
export const gatherGalleryPages = async function gatherPages() {
const pageDir = path.resolve(paths.gallery_dir, "src/pages"); const pageDir = path.resolve(paths.gallery_dir, "src/pages");
const files = await glob(path.resolve(pageDir, "**/*")); const files = await glob(path.resolve(pageDir, "**/*"));
@ -144,52 +148,48 @@ task("gather-gallery-pages", async function gatherPages() {
content, content,
"utf-8" "utf-8"
); );
}); };
task( // develop-gallery
"develop-gallery", export const developGallery = series(
series( async function setEnv() {
async function setEnv() { process.env.NODE_ENV = "development";
process.env.NODE_ENV = "development"; },
}, cleanGallery,
"clean-gallery", translationsEnableMergeBackend,
"translations-enable-merge-backend", parallel(
parallel( genIconsJson,
"gen-icons-json", buildTranslations,
"build-translations", buildLocaleData,
"build-locale-data", gatherGalleryPages
"gather-gallery-pages" ),
), copyStaticGallery,
"copy-static-gallery", genPagesGalleryDev,
"gen-pages-gallery-dev", parallel(rspackDevServerGallery, async function watchMarkdownFiles() {
parallel("rspack-dev-server-gallery", async function watchMarkdownFiles() { watch(
watch( [
[ path.resolve(paths.gallery_dir, "src/pages/**/*.markdown"),
path.resolve(paths.gallery_dir, "src/pages/**/*.markdown"), path.resolve(paths.gallery_dir, "sidebar.js"),
path.resolve(paths.gallery_dir, "sidebar.js"), ],
], series(gatherGalleryPages)
series("gather-gallery-pages") );
); })
})
)
); );
task( // build-gallery
"build-gallery", export const buildGallery = series(
series( async function setEnv() {
async function setEnv() { process.env.NODE_ENV = "production";
process.env.NODE_ENV = "production"; },
}, cleanGallery,
"clean-gallery", translationsEnableMergeBackend,
"translations-enable-merge-backend", parallel(
parallel( genIconsJson,
"gen-icons-json", buildTranslations,
"build-translations", buildLocaleData,
"build-locale-data", gatherGalleryPages
"gather-gallery-pages" ),
), copyStaticGallery,
"copy-static-gallery", rspackProdGallery,
"rspack-prod-gallery", genPagesGalleryProd
"gen-pages-gallery-prod"
)
); );

View File

@ -1,7 +1,6 @@
// Gulp task to gather all static files. // Gulp task to gather all static files.
import fs from "fs-extra"; import fs from "fs-extra";
import { task } from "gulp";
import path from "node:path"; import path from "node:path";
import paths from "../paths.ts"; import paths from "../paths.ts";
@ -17,7 +16,7 @@ const genStaticPath =
(...parts) => (...parts) =>
path.resolve(staticDir, ...parts); path.resolve(staticDir, ...parts);
function copyTranslations(staticDir) { const copyTranslations = (staticDir) => {
const staticPath = genStaticPath(staticDir); const staticPath = genStaticPath(staticDir);
// Translation output // Translation output
@ -25,23 +24,23 @@ function copyTranslations(staticDir) {
polyPath("build/translations/output"), polyPath("build/translations/output"),
staticPath("translations") staticPath("translations")
); );
} };
function copyLocaleData(staticDir) { const copyLocaleData = (staticDir) => {
const staticPath = genStaticPath(staticDir); const staticPath = genStaticPath(staticDir);
// Locale data output // Locale data output
fs.copySync(polyPath("build/locale-data"), staticPath("locale-data")); fs.copySync(polyPath("build/locale-data"), staticPath("locale-data"));
} };
function copyMdiIcons(staticDir) { const copyMdiIcons = (staticDir) => {
const staticPath = genStaticPath(staticDir); const staticPath = genStaticPath(staticDir);
// MDI icons output // MDI icons output
fs.copySync(polyPath("build/mdi"), staticPath("mdi")); fs.copySync(polyPath("build/mdi"), staticPath("mdi"));
} };
function copyPolyfills(staticDir) { const copyPolyfills = (staticDir) => {
const staticPath = genStaticPath(staticDir); const staticPath = genStaticPath(staticDir);
// For custom panels using ES5 builds that don't use Babel 7+ // For custom panels using ES5 builds that don't use Babel 7+
@ -70,9 +69,9 @@ function copyPolyfills(staticDir) {
npmPath("dialog-polyfill/dialog-polyfill.css"), npmPath("dialog-polyfill/dialog-polyfill.css"),
staticPath("polyfills/") staticPath("polyfills/")
); );
} };
function copyFonts(staticDir) { const copyFonts = (staticDir) => {
const staticPath = genStaticPath(staticDir); const staticPath = genStaticPath(staticDir);
// Local fonts // Local fonts
fs.copySync( fs.copySync(
@ -82,14 +81,14 @@ function copyFonts(staticDir) {
filter: (src) => !src.includes(".") || src.endsWith(".woff2"), filter: (src) => !src.includes(".") || src.endsWith(".woff2"),
} }
); );
} };
function copyQrScannerWorker(staticDir) { const copyQrScannerWorker = (staticDir) => {
const staticPath = genStaticPath(staticDir); const staticPath = genStaticPath(staticDir);
copyFileDir(npmPath("qr-scanner/qr-scanner-worker.min.js"), staticPath("js")); copyFileDir(npmPath("qr-scanner/qr-scanner-worker.min.js"), staticPath("js"));
} };
function copyMapPanel(staticDir) { const copyMapPanel = (staticDir) => {
const staticPath = genStaticPath(staticDir); const staticPath = genStaticPath(staticDir);
copyFileDir( copyFileDir(
npmPath("leaflet/dist/leaflet.css"), npmPath("leaflet/dist/leaflet.css"),
@ -103,43 +102,38 @@ function copyMapPanel(staticDir) {
npmPath("leaflet/dist/images"), npmPath("leaflet/dist/images"),
staticPath("images/leaflet/images/") staticPath("images/leaflet/images/")
); );
} };
function copyZXingWasm(staticDir) { const copyZXingWasm = (staticDir) => {
const staticPath = genStaticPath(staticDir); const staticPath = genStaticPath(staticDir);
copyFileDir( copyFileDir(
npmPath("zxing-wasm/dist/reader/zxing_reader.wasm"), npmPath("zxing-wasm/dist/reader/zxing_reader.wasm"),
staticPath("js") staticPath("js")
); );
} };
task("copy-locale-data", async () => { export const copyTranslationsApp = async () => {
const staticDir = paths.app_output_static;
copyLocaleData(staticDir);
});
task("copy-translations-app", async () => {
const staticDir = paths.app_output_static; const staticDir = paths.app_output_static;
copyTranslations(staticDir); copyTranslations(staticDir);
}); };
task("copy-translations-supervisor", async () => { export const copyTranslationsSupervisor = async () => {
const staticDir = paths.hassio_output_static; const staticDir = paths.hassio_output_static;
copyTranslations(staticDir); copyTranslations(staticDir);
}); };
task("copy-translations-landing-page", async () => { export const copyTranslationsLandingPage = async () => {
const staticDir = paths.landingPage_output_static; const staticDir = paths.landingPage_output_static;
copyTranslations(staticDir); copyTranslations(staticDir);
}); };
task("copy-static-supervisor", async () => { export const copyStaticSupervisor = async () => {
const staticDir = paths.hassio_output_static; const staticDir = paths.hassio_output_static;
copyLocaleData(staticDir); copyLocaleData(staticDir);
copyFonts(staticDir); copyFonts(staticDir);
}); };
task("copy-static-app", async () => { export const copyStaticApp = async () => {
const staticDir = paths.app_output_static; const staticDir = paths.app_output_static;
// Basic static files // Basic static files
fs.copySync(polyPath("public"), paths.app_output_root); fs.copySync(polyPath("public"), paths.app_output_root);
@ -155,9 +149,9 @@ task("copy-static-app", async () => {
// Qr Scanner assets // Qr Scanner assets
copyZXingWasm(staticDir); copyZXingWasm(staticDir);
copyQrScannerWorker(staticDir); copyQrScannerWorker(staticDir);
}); };
task("copy-static-demo", async () => { export const copyStaticDemo = async () => {
// Copy app static files // Copy app static files
fs.copySync( fs.copySync(
polyPath("public/static"), polyPath("public/static"),
@ -171,9 +165,9 @@ task("copy-static-demo", async () => {
copyTranslations(paths.demo_output_static); copyTranslations(paths.demo_output_static);
copyLocaleData(paths.demo_output_static); copyLocaleData(paths.demo_output_static);
copyMdiIcons(paths.demo_output_static); copyMdiIcons(paths.demo_output_static);
}); };
task("copy-static-cast", async () => { export const copyStaticCast = async () => {
// Copy app static files // Copy app static files
fs.copySync(polyPath("public/static"), paths.cast_output_static); fs.copySync(polyPath("public/static"), paths.cast_output_static);
// Copy cast static files // Copy cast static files
@ -184,9 +178,9 @@ task("copy-static-cast", async () => {
copyTranslations(paths.cast_output_static); copyTranslations(paths.cast_output_static);
copyLocaleData(paths.cast_output_static); copyLocaleData(paths.cast_output_static);
copyMdiIcons(paths.cast_output_static); copyMdiIcons(paths.cast_output_static);
}); };
task("copy-static-gallery", async () => { export const copyStaticGallery = async () => {
// Copy app static files // Copy app static files
fs.copySync(polyPath("public/static"), paths.gallery_output_static); fs.copySync(polyPath("public/static"), paths.gallery_output_static);
// Copy gallery static files // Copy gallery static files
@ -200,9 +194,9 @@ task("copy-static-gallery", async () => {
copyTranslations(paths.gallery_output_static); copyTranslations(paths.gallery_output_static);
copyLocaleData(paths.gallery_output_static); copyLocaleData(paths.gallery_output_static);
copyMdiIcons(paths.gallery_output_static); copyMdiIcons(paths.gallery_output_static);
}); };
task("copy-static-landing-page", async () => { export const copyStaticLandingPage = async () => {
// Copy landing-page static files // Copy landing-page static files
fs.copySync( fs.copySync(
path.resolve(paths.landingPage_dir, "public"), path.resolve(paths.landingPage_dir, "public"),
@ -211,4 +205,4 @@ task("copy-static-landing-page", async () => {
copyFonts(paths.landingPage_output_static); copyFonts(paths.landingPage_output_static);
copyTranslations(paths.landingPage_output_static); copyTranslations(paths.landingPage_output_static);
}); };

View File

@ -1,7 +1,6 @@
import fs from "node:fs"; import fs from "node:fs";
import { task } from "gulp";
import hash from "object-hash";
import path from "node:path"; import path from "node:path";
import hash from "object-hash";
import paths from "../paths.ts"; import paths from "../paths.ts";
const ICON_PACKAGE_PATH = path.resolve("node_modules/@mdi/svg/"); const ICON_PACKAGE_PATH = path.resolve("node_modules/@mdi/svg/");
@ -97,7 +96,7 @@ const findDifferentiator = (curString, prevString) => {
throw new Error(`Cannot find differentiator; ${curString}; ${prevString}`); throw new Error(`Cannot find differentiator; ${curString}; ${prevString}`);
}; };
task("gen-icons-json", (done) => { export const genIconsJson = (done) => {
const meta = getMeta(); const meta = getMeta();
const metaAndRemoved = addRemovedMeta(meta); const metaAndRemoved = addRemovedMeta(meta);
@ -153,13 +152,13 @@ task("gen-icons-json", (done) => {
); );
done(); done();
}); };
task("gen-dummy-icons-json", (done) => { export const genDummyIconsJson = (done) => {
if (!fs.existsSync(OUTPUT_DIR)) { if (!fs.existsSync(OUTPUT_DIR)) {
fs.mkdirSync(OUTPUT_DIR, { recursive: true }); fs.mkdirSync(OUTPUT_DIR, { recursive: true });
} }
fs.writeFileSync(path.resolve(OUTPUT_DIR, "iconList.json"), "[]"); fs.writeFileSync(path.resolve(OUTPUT_DIR, "iconList.json"), "[]");
done(); done();
}); };

View File

@ -1,45 +1,45 @@
import { series, task } from "gulp"; import { series } from "gulp";
import { isTestBuild } from "../env.ts"; import { isTestBuild } from "../env.ts";
import "./clean.ts"; import { cleanHassio } from "./clean.ts";
import "./compress.ts"; import { compressHassio } from "./compress.ts";
import "./entry-html.ts"; import { genPagesHassioDev, genPagesHassioProd } from "./entry-html.ts";
import "./gather-static.ts"; import {
import "./gen-icons-json.ts"; copyStaticSupervisor,
import "./rspack.ts"; copyTranslationsSupervisor,
import "./translations.ts"; } from "./gather-static.ts";
import { genDummyIconsJson } from "./gen-icons-json.ts";
import { buildLocaleData } from "./locale-data.ts";
import { rspackProdHassio, rspackWatchHassio } from "./rspack.ts";
import { buildSupervisorTranslations } from "./translations.ts";
task( // develop-hassio
"develop-hassio", export const developHassio = series(
series( async function setEnv() {
async function setEnv() { process.env.NODE_ENV = "development";
process.env.NODE_ENV = "development"; },
}, cleanHassio,
"clean-hassio", genDummyIconsJson,
"gen-dummy-icons-json", genPagesHassioDev,
"gen-pages-hassio-dev", buildSupervisorTranslations,
"build-supervisor-translations", copyTranslationsSupervisor,
"copy-translations-supervisor", buildLocaleData,
"build-locale-data", copyStaticSupervisor,
"copy-static-supervisor", rspackWatchHassio
"rspack-watch-hassio"
)
); );
task( // build-hassio
"build-hassio", export const buildHassio = series(
series( async function setEnv() {
async function setEnv() { process.env.NODE_ENV = "production";
process.env.NODE_ENV = "production"; },
}, cleanHassio,
"clean-hassio", genDummyIconsJson,
"gen-dummy-icons-json", buildSupervisorTranslations,
"build-supervisor-translations", copyTranslationsSupervisor,
"copy-translations-supervisor", buildLocaleData,
"build-locale-data", copyStaticSupervisor,
"copy-static-supervisor", rspackProdHassio,
"rspack-prod-hassio", genPagesHassioProd,
"gen-pages-hassio-prod", ...// Don't compress running tests
...// Don't compress running tests (isTestBuild() ? [] : [compressHassio])
(isTestBuild() ? [] : ["compress-hassio"])
)
); );

View File

@ -1,17 +1,42 @@
import "./app.ts"; import { analyzeApp, buildApp, developApp } from "./app";
import "./cast.ts"; import { buildCast, developCast } from "./cast";
import "./clean.ts"; import { analyzeDemo, buildDemo, developDemo } from "./demo";
import "./compress.ts"; import { downloadTranslations } from "./download-translations";
import "./demo.ts"; import { setupAndFetchNightlyTranslations } from "./fetch-nightly-translations";
import "./download-translations.ts"; import { buildGallery, developGallery, gatherGalleryPages } from "./gallery";
import "./entry-html.ts"; import { genIconsJson } from "./gen-icons-json";
import "./fetch-nightly-translations.ts"; import { buildHassio, developHassio } from "./hassio";
import "./gallery.ts"; import { buildLandingPage, developLandingPage } from "./landing-page";
import "./gather-static.ts"; import { buildLocaleData } from "./locale-data";
import "./gen-icons-json.ts"; import { buildTranslations } from "./translations";
import "./hassio.ts";
import "./landing-page.ts"; export default {
import "./locale-data.ts"; "develop-app": developApp,
import "./rspack.ts"; "build-app": buildApp,
import "./service-worker.ts"; "analyze-app": analyzeApp,
import "./translations.ts";
"develop-cast": developCast,
"build-cast": buildCast,
"develop-demo": developDemo,
"build-demo": buildDemo,
"analyze-demo": analyzeDemo,
"develop-gallery": developGallery,
"build-gallery": buildGallery,
"gather-gallery-pages": gatherGalleryPages,
"develop-hassio": developHassio,
"build-hassio": buildHassio,
"develop-landing-page": developLandingPage,
"build-landing-page": buildLandingPage,
"setup-and-fetch-nightly-translations": setupAndFetchNightlyTranslations,
"download-translations": downloadTranslations,
"build-translations": buildTranslations,
"gen-icons-json": genIconsJson,
"build-locale-data": buildLocaleData,
};

View File

@ -1,41 +1,46 @@
import { series, task } from "gulp"; import { series } from "gulp";
import "./clean.ts"; import { cleanLandingPage } from "./clean.ts";
import "./compress.ts"; import "./compress.ts";
import "./entry-html.ts"; import {
import "./gather-static.ts"; genPagesLandingPageDev,
import "./gen-icons-json.ts"; genPagesLandingPageProd,
import "./rspack.ts"; } from "./entry-html.ts";
import "./translations.ts"; import {
copyStaticLandingPage,
copyTranslationsLandingPage,
} from "./gather-static.ts";
import { buildLocaleData } from "./locale-data.ts";
import { rspackProdLandingPage, rspackWatchLandingPage } from "./rspack.ts";
import {
buildLandingPageTranslations,
translationsEnableMergeBackend,
} from "./translations.ts";
task( // develop-landing-page
"develop-landing-page", export const developLandingPage = series(
series( async function setEnv() {
async function setEnv() { process.env.NODE_ENV = "development";
process.env.NODE_ENV = "development"; },
}, cleanLandingPage,
"clean-landing-page", translationsEnableMergeBackend,
"translations-enable-merge-backend", buildLandingPageTranslations,
"build-landing-page-translations", copyTranslationsLandingPage,
"copy-translations-landing-page", buildLocaleData,
"build-locale-data", copyStaticLandingPage,
"copy-static-landing-page", genPagesLandingPageDev,
"gen-pages-landing-page-dev", rspackWatchLandingPage
"rspack-watch-landing-page"
)
); );
task( // build-landing-page
"build-landing-page", export const buildLandingPage = series(
series( async function setEnv() {
async function setEnv() { process.env.NODE_ENV = "production";
process.env.NODE_ENV = "production"; },
}, cleanLandingPage,
"clean-landing-page", buildLandingPageTranslations,
"build-landing-page-translations", copyTranslationsLandingPage,
"copy-translations-landing-page", buildLocaleData,
"build-locale-data", copyStaticLandingPage,
"copy-static-landing-page", rspackProdLandingPage,
"rspack-prod-landing-page", genPagesLandingPageProd
"gen-pages-landing-page-prod"
)
); );

View File

@ -1,6 +1,6 @@
import { deleteSync } from "del"; import { deleteSync } from "del";
import { series } from "gulp";
import { mkdir, readFile, writeFile } from "node:fs/promises"; import { mkdir, readFile, writeFile } from "node:fs/promises";
import { series, task } from "gulp";
import { join, resolve } from "node:path"; import { join, resolve } from "node:path";
import paths from "../paths.ts"; import paths from "../paths.ts";
@ -54,9 +54,9 @@ const convertToJSON = async (
await writeFile(join(outDir, `${pkg}/${lang}.json`), localeData); await writeFile(join(outDir, `${pkg}/${lang}.json`), localeData);
}; };
task("clean-locale-data", async () => deleteSync([outDir])); const cleanLocaleData = async () => deleteSync([outDir]);
task("create-locale-data", async () => { const createLocaleData = async () => {
const translationMeta = JSON.parse( const translationMeta = JSON.parse(
await readFile( await readFile(
resolve(paths.translations_src, "translationMetadata.json"), resolve(paths.translations_src, "translationMetadata.json"),
@ -81,6 +81,6 @@ task("create-locale-data", async () => {
) )
); );
await Promise.all(conversions); await Promise.all(conversions);
}); };
task("build-locale-data", series("clean-locale-data", "create-locale-data")); export const buildLocaleData = series(cleanLocaleData, createLocaleData);

View File

@ -3,9 +3,10 @@
import rspack from "@rspack/core"; import rspack from "@rspack/core";
import { RspackDevServer } from "@rspack/dev-server"; import { RspackDevServer } from "@rspack/dev-server";
import log from "fancy-log"; import log from "fancy-log";
import { series, watch } from "gulp";
import fs from "node:fs"; import fs from "node:fs";
import { task, watch, series } from "gulp";
import path from "node:path"; import path from "node:path";
import { isDevContainer, isStatsBuild, isTestBuild } from "../env.ts";
import paths from "../paths.ts"; import paths from "../paths.ts";
import { import {
createAppConfig, createAppConfig,
@ -15,7 +16,16 @@ import {
createHassioConfig, createHassioConfig,
createLandingPageConfig, createLandingPageConfig,
} from "../rspack.ts"; } from "../rspack.ts";
import { isDevContainer, isStatsBuild, isTestBuild } from "../env.ts"; import {
copyTranslationsApp,
copyTranslationsLandingPage,
copyTranslationsSupervisor,
} from "./gather-static.ts";
import {
buildLandingPageTranslations,
buildSupervisorTranslations,
buildTranslations,
} from "./translations.ts";
const bothBuilds = (createConfigFunc, params) => [ const bothBuilds = (createConfigFunc, params) => [
createConfigFunc({ ...params, latestBuild: true }), createConfigFunc({ ...params, latestBuild: true }),
@ -105,7 +115,7 @@ const prodBuild = (conf) =>
); );
}); });
task("rspack-watch-app", () => { export const rspackWatchApp = () => {
// This command will run forever because we don't close compiler // This command will run forever because we don't close compiler
rspack( rspack(
process.env.ES5 process.env.ES5
@ -114,40 +124,37 @@ task("rspack-watch-app", () => {
).watch({ poll: isWsl }, doneHandler()); ).watch({ poll: isWsl }, doneHandler());
watch( watch(
path.join(paths.translations_src, "en.json"), path.join(paths.translations_src, "en.json"),
series("build-translations", "copy-translations-app") series(buildTranslations, copyTranslationsApp)
); );
}); };
task("rspack-prod-app", () => export const rspackProdApp = () =>
prodBuild( prodBuild(
bothBuilds(createAppConfig, { bothBuilds(createAppConfig, {
isProdBuild: true, isProdBuild: true,
isStatsBuild: isStatsBuild(), isStatsBuild: isStatsBuild(),
isTestBuild: isTestBuild(), isTestBuild: isTestBuild(),
}) })
) );
);
task("rspack-dev-server-demo", () => export const rspackDevServerDemo = () =>
runDevServer({ runDevServer({
compiler: rspack( compiler: rspack(
createDemoConfig({ isProdBuild: false, latestBuild: true }) createDemoConfig({ isProdBuild: false, latestBuild: true })
), ),
contentBase: paths.demo_output_root, contentBase: paths.demo_output_root,
port: 8090, port: 8090,
}) });
);
task("rspack-prod-demo", () => export const rspackProdDemo = () =>
prodBuild( prodBuild(
bothBuilds(createDemoConfig, { bothBuilds(createDemoConfig, {
isProdBuild: true, isProdBuild: true,
isStatsBuild: isStatsBuild(), isStatsBuild: isStatsBuild(),
}) })
) );
);
task("rspack-dev-server-cast", () => export const rspackDevServerCast = () =>
runDevServer({ runDevServer({
compiler: rspack( compiler: rspack(
createCastConfig({ isProdBuild: false, latestBuild: true }) createCastConfig({ isProdBuild: false, latestBuild: true })
@ -156,18 +163,16 @@ task("rspack-dev-server-cast", () =>
port: 8080, port: 8080,
// Accessible from the network, because that's how Cast hits it. // Accessible from the network, because that's how Cast hits it.
listenHost: "0.0.0.0", listenHost: "0.0.0.0",
}) });
);
task("rspack-prod-cast", () => export const rspackProdCast = () =>
prodBuild( prodBuild(
bothBuilds(createCastConfig, { bothBuilds(createCastConfig, {
isProdBuild: true, isProdBuild: true,
}) })
) );
);
task("rspack-watch-hassio", () => { export const rspackWatchHassio = () => {
// This command will run forever because we don't close compiler // This command will run forever because we don't close compiler
rspack( rspack(
createHassioConfig({ createHassioConfig({
@ -178,21 +183,20 @@ task("rspack-watch-hassio", () => {
watch( watch(
path.join(paths.translations_src, "en.json"), path.join(paths.translations_src, "en.json"),
series("build-supervisor-translations", "copy-translations-supervisor") series(buildSupervisorTranslations, copyTranslationsSupervisor)
); );
}); };
task("rspack-prod-hassio", () => export const rspackProdHassio = () =>
prodBuild( prodBuild(
bothBuilds(createHassioConfig, { bothBuilds(createHassioConfig, {
isProdBuild: true, isProdBuild: true,
isStatsBuild: isStatsBuild(), isStatsBuild: isStatsBuild(),
isTestBuild: isTestBuild(), isTestBuild: isTestBuild(),
}) })
) );
);
task("rspack-dev-server-gallery", () => export const rspackDevServerGallery = () =>
runDevServer({ runDevServer({
compiler: rspack( compiler: rspack(
createGalleryConfig({ isProdBuild: false, latestBuild: true }) createGalleryConfig({ isProdBuild: false, latestBuild: true })
@ -200,19 +204,17 @@ task("rspack-dev-server-gallery", () =>
contentBase: paths.gallery_output_root, contentBase: paths.gallery_output_root,
port: 8100, port: 8100,
listenHost: "0.0.0.0", listenHost: "0.0.0.0",
}) });
);
task("rspack-prod-gallery", () => export const rspackProdGallery = () =>
prodBuild( prodBuild(
createGalleryConfig({ createGalleryConfig({
isProdBuild: true, isProdBuild: true,
latestBuild: true, latestBuild: true,
}) })
) );
);
task("rspack-watch-landing-page", () => { export const rspackWatchLandingPage = () => {
// This command will run forever because we don't close compiler // This command will run forever because we don't close compiler
rspack( rspack(
process.env.ES5 process.env.ES5
@ -222,16 +224,15 @@ task("rspack-watch-landing-page", () => {
watch( watch(
path.join(paths.translations_src, "en.json"), path.join(paths.translations_src, "en.json"),
series("build-landing-page-translations", "copy-translations-landing-page") series(buildLandingPageTranslations, copyTranslationsLandingPage)
); );
}); };
task("rspack-prod-landing-page", () => export const rspackProdLandingPage = () =>
prodBuild( prodBuild(
bothBuilds(createLandingPageConfig, { bothBuilds(createLandingPageConfig, {
isProdBuild: true, isProdBuild: true,
isStatsBuild: isStatsBuild(), isStatsBuild: isStatsBuild(),
isTestBuild: isTestBuild(), isTestBuild: isTestBuild(),
}) })
) );
);

View File

@ -1,7 +1,6 @@
// Generate service workers // Generate service workers
import { deleteAsync } from "del"; import { deleteAsync } from "del";
import { task } from "gulp";
import { mkdir, readFile, symlink, writeFile } from "node:fs/promises"; import { mkdir, readFile, symlink, writeFile } from "node:fs/promises";
import { basename, join, relative } from "node:path"; import { basename, join, relative } from "node:path";
import { injectManifest } from "workbox-build"; import { injectManifest } from "workbox-build";
@ -23,7 +22,7 @@ self.addEventListener('install', (event) => {
}); });
`.trim() + "\n"; `.trim() + "\n";
task("gen-service-worker-app-dev", async () => { export const genServiceWorkerAppDev = async () => {
await mkdir(paths.app_output_root, { recursive: true }); await mkdir(paths.app_output_root, { recursive: true });
await Promise.all( await Promise.all(
Object.values(SW_MAP).map((build) => Object.values(SW_MAP).map((build) =>
@ -32,9 +31,9 @@ task("gen-service-worker-app-dev", async () => {
}) })
) )
); );
}); };
task("gen-service-worker-app-prod", () => export const genServiceWorkerAppProd = () =>
Promise.all( Promise.all(
Object.entries(SW_MAP).map(async ([outPath, build]) => { Object.entries(SW_MAP).map(async ([outPath, build]) => {
const manifest = JSON.parse( const manifest = JSON.parse(
@ -83,5 +82,4 @@ task("gen-service-worker-app-prod", () =>
await symlink(basename(swDest), swOld); await symlink(basename(swDest), swOld);
} }
}) })
) );
);

View File

@ -2,7 +2,7 @@
import { deleteAsync } from "del"; import { deleteAsync } from "del";
import { glob } from "glob"; import { glob } from "glob";
import { src as glupSrc, dest as gulpDest, parallel, series, task } from "gulp"; import { src as glupSrc, dest as gulpDest, parallel, series } from "gulp";
import rename from "gulp-rename"; import rename from "gulp-rename";
import merge from "lodash.merge"; import merge from "lodash.merge";
import { createHash } from "node:crypto"; import { createHash } from "node:crypto";
@ -12,7 +12,10 @@ import { PassThrough, Transform } from "node:stream";
import { finished } from "node:stream/promises"; import { finished } from "node:stream/promises";
import { isProdBuild } from "../env.ts"; import { isProdBuild } from "../env.ts";
import paths from "../paths.ts"; import paths from "../paths.ts";
import "./fetch-nightly-translations.ts"; import {
allowSetupFetchNightlyTranslations,
fetchNightlyTranslations,
} from "./fetch-nightly-translations.ts";
const inFrontendDir = "translations/frontend"; const inFrontendDir = "translations/frontend";
const inBackendDir = "translations/backend"; const inBackendDir = "translations/backend";
@ -23,12 +26,10 @@ const TEST_LOCALE = "en-x-test";
let mergeBackend = false; let mergeBackend = false;
task( // translations-enable-merge-backend
"translations-enable-merge-backend", export const translationsEnableMergeBackend = parallel(async () => {
parallel(async () => { mergeBackend = true;
mergeBackend = true; }, allowSetupFetchNightlyTranslations);
}, "allow-setup-fetch-nightly-translations")
);
// Transform stream to apply a function on Vinyl JSON files (buffer mode only). // Transform stream to apply a function on Vinyl JSON files (buffer mode only).
// The provided function can either return a new object, or an array of // The provided function can either return a new object, or an array of
@ -145,7 +146,7 @@ const lokaliseTransform = (data, path, original = data) => {
return output; return output;
}; };
task("clean-translations", () => deleteAsync([workDir])); export const cleanTranslations = () => deleteAsync([workDir]);
const makeWorkDir = () => mkdir(workDir, { recursive: true }); const makeWorkDir = () => mkdir(workDir, { recursive: true });
@ -312,26 +313,20 @@ const writeTranslationMetaData = () =>
) )
.pipe(gulpDest(workDir)); .pipe(gulpDest(workDir));
task( export const buildTranslations = series(
"build-translations", parallel(fetchNightlyTranslations, series(cleanTranslations, makeWorkDir)),
series( createTestTranslation,
parallel( createMasterTranslation,
"fetch-nightly-translations", createTranslations,
series("clean-translations", makeWorkDir) writeTranslationMetaData
),
createTestTranslation,
createMasterTranslation,
createTranslations,
writeTranslationMetaData
)
); );
task( export const buildSupervisorTranslations = series(
"build-supervisor-translations", setFragment("supervisor"),
series(setFragment("supervisor"), "build-translations") buildTranslations
); );
task( export const buildLandingPageTranslations = series(
"build-landing-page-translations", setFragment("landing-page"),
series(setFragment("landing-page"), "build-translations") buildTranslations
); );

42
build-scripts/runTask.ts Normal file
View File

@ -0,0 +1,42 @@
// run-build.ts
import { series } from "gulp";
import { availableParallelism } from "node:os";
import tasks from "./gulp/index.ts";
process.env.UV_THREADPOOL_SIZE = availableParallelism().toString();
const runGulpTask = async (runTasks: string[]) => {
try {
for (const taskName of runTasks) {
if (tasks[taskName] === undefined) {
console.error(`Gulp task "${taskName}" does not exist.`);
console.log("Available tasks:");
Object.keys(tasks).forEach((task) => {
console.log(` - ${task}`);
});
process.exit(1);
}
}
await new Promise((resolve, reject) => {
series(...runTasks.map((taskName) => tasks[taskName]))((err?: Error) => {
if (err) {
reject(err);
} else {
resolve(null);
}
});
});
process.exit(0);
} catch (error: any) {
console.error(`Error running Gulp task "${runTasks}":`, error);
process.exit(1);
}
};
// Get the task name from command line arguments
// TODO arg validation
const tasksToRun = process.argv.slice(2);
runGulpTask(tasksToRun);

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp build-cast yarn run-task build-cast

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp develop-cast yarn run-task develop-cast

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp build-demo yarn run-task build-demo

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp develop-demo yarn run-task develop-demo

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp analyze-demo yarn run-task analyze-demo

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp build-gallery yarn run-task build-gallery

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp develop-gallery yarn run-task develop-gallery

View File

@ -1,4 +0,0 @@
import { availableParallelism } from "node:os";
import "./build-scripts/gulp/index.ts";
process.env.UV_THREADPOOL_SIZE = availableParallelism().toString();

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp build-hassio yarn run-task build-hassio

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp develop-hassio yarn run-task develop-hassio

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp build-landing-page yarn run-task build-landing-page

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/../.." cd "$(dirname "$0")/../.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp develop-landing-page yarn run-task develop-landing-page

View File

@ -20,7 +20,8 @@
"prepack": "pinst --disable", "prepack": "pinst --disable",
"postpack": "pinst --enable", "postpack": "pinst --enable",
"test": "vitest run --config test/vitest.config.ts", "test": "vitest run --config test/vitest.config.ts",
"test:coverage": "vitest run --config test/vitest.config.ts --coverage" "test:coverage": "vitest run --config test/vitest.config.ts --coverage",
"run-task": "tsx ./build-scripts/runTask.ts"
}, },
"author": "Paulus Schoutsen <Paulus@PaulusSchoutsen.nl> (http://paulusschoutsen.nl)", "author": "Paulus Schoutsen <Paulus@PaulusSchoutsen.nl> (http://paulusschoutsen.nl)",
"license": "Apache-2.0", "license": "Apache-2.0",
@ -218,7 +219,7 @@
"tar": "7.4.3", "tar": "7.4.3",
"terser-webpack-plugin": "5.3.14", "terser-webpack-plugin": "5.3.14",
"ts-lit-plugin": "2.0.2", "ts-lit-plugin": "2.0.2",
"ts-node": "10.9.2", "tsx": "4.19.4",
"typescript": "5.8.3", "typescript": "5.8.3",
"typescript-eslint": "8.31.1", "typescript-eslint": "8.31.1",
"vite-tsconfig-paths": "5.1.4", "vite-tsconfig-paths": "5.1.4",

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp build-app yarn run-task build-app

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp develop-app yarn run-task develop-app

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp setup-and-fetch-nightly-translations yarn run-task setup-and-fetch-nightly-translations

View File

@ -6,4 +6,4 @@ set -e
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp analyze-app yarn run-task analyze-app

View File

@ -8,4 +8,4 @@ set -eu -o pipefail
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
node --import ./ts-node-register.js ./node_modules/.bin/gulp download-translations yarn run-task download-translations

View File

@ -79,8 +79,5 @@
"./node_modules/@lit-labs/observers/resize-controller.js" "./node_modules/@lit-labs/observers/resize-controller.js"
] ]
} }
},
"ts-node": {
"esm": true
} }
} }

375
yarn.lock
View File

@ -1253,15 +1253,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@cspotcode/source-map-support@npm:^0.8.0":
version: 0.8.1
resolution: "@cspotcode/source-map-support@npm:0.8.1"
dependencies:
"@jridgewell/trace-mapping": "npm:0.3.9"
checksum: 10/b6e38a1712fab242c86a241c229cf562195aad985d0564bd352ac404be583029e89e93028ffd2c251d2c407ecac5fb0cbdca94a2d5c10f29ac806ede0508b3ff
languageName: node
linkType: hard
"@csstools/color-helpers@npm:^5.0.2": "@csstools/color-helpers@npm:^5.0.2":
version: 5.0.2 version: 5.0.2
resolution: "@csstools/color-helpers@npm:5.0.2" resolution: "@csstools/color-helpers@npm:5.0.2"
@ -1331,177 +1322,177 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/aix-ppc64@npm:0.25.2": "@esbuild/aix-ppc64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/aix-ppc64@npm:0.25.2" resolution: "@esbuild/aix-ppc64@npm:0.25.5"
conditions: os=aix & cpu=ppc64 conditions: os=aix & cpu=ppc64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/android-arm64@npm:0.25.2": "@esbuild/android-arm64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/android-arm64@npm:0.25.2" resolution: "@esbuild/android-arm64@npm:0.25.5"
conditions: os=android & cpu=arm64 conditions: os=android & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/android-arm@npm:0.25.2": "@esbuild/android-arm@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/android-arm@npm:0.25.2" resolution: "@esbuild/android-arm@npm:0.25.5"
conditions: os=android & cpu=arm conditions: os=android & cpu=arm
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/android-x64@npm:0.25.2": "@esbuild/android-x64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/android-x64@npm:0.25.2" resolution: "@esbuild/android-x64@npm:0.25.5"
conditions: os=android & cpu=x64 conditions: os=android & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/darwin-arm64@npm:0.25.2": "@esbuild/darwin-arm64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/darwin-arm64@npm:0.25.2" resolution: "@esbuild/darwin-arm64@npm:0.25.5"
conditions: os=darwin & cpu=arm64 conditions: os=darwin & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/darwin-x64@npm:0.25.2": "@esbuild/darwin-x64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/darwin-x64@npm:0.25.2" resolution: "@esbuild/darwin-x64@npm:0.25.5"
conditions: os=darwin & cpu=x64 conditions: os=darwin & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/freebsd-arm64@npm:0.25.2": "@esbuild/freebsd-arm64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/freebsd-arm64@npm:0.25.2" resolution: "@esbuild/freebsd-arm64@npm:0.25.5"
conditions: os=freebsd & cpu=arm64 conditions: os=freebsd & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/freebsd-x64@npm:0.25.2": "@esbuild/freebsd-x64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/freebsd-x64@npm:0.25.2" resolution: "@esbuild/freebsd-x64@npm:0.25.5"
conditions: os=freebsd & cpu=x64 conditions: os=freebsd & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-arm64@npm:0.25.2": "@esbuild/linux-arm64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/linux-arm64@npm:0.25.2" resolution: "@esbuild/linux-arm64@npm:0.25.5"
conditions: os=linux & cpu=arm64 conditions: os=linux & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-arm@npm:0.25.2": "@esbuild/linux-arm@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/linux-arm@npm:0.25.2" resolution: "@esbuild/linux-arm@npm:0.25.5"
conditions: os=linux & cpu=arm conditions: os=linux & cpu=arm
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-ia32@npm:0.25.2": "@esbuild/linux-ia32@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/linux-ia32@npm:0.25.2" resolution: "@esbuild/linux-ia32@npm:0.25.5"
conditions: os=linux & cpu=ia32 conditions: os=linux & cpu=ia32
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-loong64@npm:0.25.2": "@esbuild/linux-loong64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/linux-loong64@npm:0.25.2" resolution: "@esbuild/linux-loong64@npm:0.25.5"
conditions: os=linux & cpu=loong64 conditions: os=linux & cpu=loong64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-mips64el@npm:0.25.2": "@esbuild/linux-mips64el@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/linux-mips64el@npm:0.25.2" resolution: "@esbuild/linux-mips64el@npm:0.25.5"
conditions: os=linux & cpu=mips64el conditions: os=linux & cpu=mips64el
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-ppc64@npm:0.25.2": "@esbuild/linux-ppc64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/linux-ppc64@npm:0.25.2" resolution: "@esbuild/linux-ppc64@npm:0.25.5"
conditions: os=linux & cpu=ppc64 conditions: os=linux & cpu=ppc64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-riscv64@npm:0.25.2": "@esbuild/linux-riscv64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/linux-riscv64@npm:0.25.2" resolution: "@esbuild/linux-riscv64@npm:0.25.5"
conditions: os=linux & cpu=riscv64 conditions: os=linux & cpu=riscv64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-s390x@npm:0.25.2": "@esbuild/linux-s390x@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/linux-s390x@npm:0.25.2" resolution: "@esbuild/linux-s390x@npm:0.25.5"
conditions: os=linux & cpu=s390x conditions: os=linux & cpu=s390x
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-x64@npm:0.25.2": "@esbuild/linux-x64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/linux-x64@npm:0.25.2" resolution: "@esbuild/linux-x64@npm:0.25.5"
conditions: os=linux & cpu=x64 conditions: os=linux & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/netbsd-arm64@npm:0.25.2": "@esbuild/netbsd-arm64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/netbsd-arm64@npm:0.25.2" resolution: "@esbuild/netbsd-arm64@npm:0.25.5"
conditions: os=netbsd & cpu=arm64 conditions: os=netbsd & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/netbsd-x64@npm:0.25.2": "@esbuild/netbsd-x64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/netbsd-x64@npm:0.25.2" resolution: "@esbuild/netbsd-x64@npm:0.25.5"
conditions: os=netbsd & cpu=x64 conditions: os=netbsd & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/openbsd-arm64@npm:0.25.2": "@esbuild/openbsd-arm64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/openbsd-arm64@npm:0.25.2" resolution: "@esbuild/openbsd-arm64@npm:0.25.5"
conditions: os=openbsd & cpu=arm64 conditions: os=openbsd & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/openbsd-x64@npm:0.25.2": "@esbuild/openbsd-x64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/openbsd-x64@npm:0.25.2" resolution: "@esbuild/openbsd-x64@npm:0.25.5"
conditions: os=openbsd & cpu=x64 conditions: os=openbsd & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/sunos-x64@npm:0.25.2": "@esbuild/sunos-x64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/sunos-x64@npm:0.25.2" resolution: "@esbuild/sunos-x64@npm:0.25.5"
conditions: os=sunos & cpu=x64 conditions: os=sunos & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/win32-arm64@npm:0.25.2": "@esbuild/win32-arm64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/win32-arm64@npm:0.25.2" resolution: "@esbuild/win32-arm64@npm:0.25.5"
conditions: os=win32 & cpu=arm64 conditions: os=win32 & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/win32-ia32@npm:0.25.2": "@esbuild/win32-ia32@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/win32-ia32@npm:0.25.2" resolution: "@esbuild/win32-ia32@npm:0.25.5"
conditions: os=win32 & cpu=ia32 conditions: os=win32 & cpu=ia32
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/win32-x64@npm:0.25.2": "@esbuild/win32-x64@npm:0.25.5":
version: 0.25.2 version: 0.25.5
resolution: "@esbuild/win32-x64@npm:0.25.2" resolution: "@esbuild/win32-x64@npm:0.25.5"
conditions: os=win32 & cpu=x64 conditions: os=win32 & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
@ -2062,7 +2053,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": "@jridgewell/resolve-uri@npm:^3.1.0":
version: 3.1.2 version: 3.1.2
resolution: "@jridgewell/resolve-uri@npm:3.1.2" resolution: "@jridgewell/resolve-uri@npm:3.1.2"
checksum: 10/97106439d750a409c22c8bff822d648f6a71f3aa9bc8e5129efdc36343cd3096ddc4eeb1c62d2fe48e9bdd4db37b05d4646a17114ecebd3bbcacfa2de51c3c1d checksum: 10/97106439d750a409c22c8bff822d648f6a71f3aa9bc8e5129efdc36343cd3096ddc4eeb1c62d2fe48e9bdd4db37b05d4646a17114ecebd3bbcacfa2de51c3c1d
@ -2093,16 +2084,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@jridgewell/trace-mapping@npm:0.3.9":
version: 0.3.9
resolution: "@jridgewell/trace-mapping@npm:0.3.9"
dependencies:
"@jridgewell/resolve-uri": "npm:^3.0.3"
"@jridgewell/sourcemap-codec": "npm:^1.4.10"
checksum: 10/83deafb8e7a5ca98993c2c6eeaa93c270f6f647a4c0dc00deb38c9cf9b2d3b7bf15e8839540155247ef034a052c0ec4466f980bf0c9e2ab63b97d16c0cedd3ff
languageName: node
linkType: hard
"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": "@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
version: 0.3.25 version: 0.3.25
resolution: "@jridgewell/trace-mapping@npm:0.3.25" resolution: "@jridgewell/trace-mapping@npm:0.3.25"
@ -4205,34 +4186,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@tsconfig/node10@npm:^1.0.7":
version: 1.0.11
resolution: "@tsconfig/node10@npm:1.0.11"
checksum: 10/51fe47d55fe1b80ec35e6e5ed30a13665fd3a531945350aa74a14a1e82875fb60b350c2f2a5e72a64831b1b6bc02acb6760c30b3738b54954ec2dea82db7a267
languageName: node
linkType: hard
"@tsconfig/node12@npm:^1.0.7":
version: 1.0.11
resolution: "@tsconfig/node12@npm:1.0.11"
checksum: 10/5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a
languageName: node
linkType: hard
"@tsconfig/node14@npm:^1.0.0":
version: 1.0.3
resolution: "@tsconfig/node14@npm:1.0.3"
checksum: 10/19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d
languageName: node
linkType: hard
"@tsconfig/node16@npm:^1.0.2":
version: 1.0.4
resolution: "@tsconfig/node16@npm:1.0.4"
checksum: 10/202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff
languageName: node
linkType: hard
"@tsparticles/basic@npm:^3.7.1": "@tsparticles/basic@npm:^3.7.1":
version: 3.8.1 version: 3.8.1
resolution: "@tsparticles/basic@npm:3.8.1" resolution: "@tsparticles/basic@npm:3.8.1"
@ -5521,7 +5474,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"acorn-walk@npm:8.3.4, acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.1.1": "acorn-walk@npm:8.3.4, acorn-walk@npm:^8.0.0":
version: 8.3.4 version: 8.3.4
resolution: "acorn-walk@npm:8.3.4" resolution: "acorn-walk@npm:8.3.4"
dependencies: dependencies:
@ -5530,7 +5483,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"acorn@npm:^8.0.4, acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.14.0, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2": "acorn@npm:^8.0.4, acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.14.0, acorn@npm:^8.5.0, acorn@npm:^8.8.2":
version: 8.14.1 version: 8.14.1
resolution: "acorn@npm:8.14.1" resolution: "acorn@npm:8.14.1"
bin: bin:
@ -5755,13 +5708,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"arg@npm:^4.1.0":
version: 4.1.3
resolution: "arg@npm:4.1.3"
checksum: 10/969b491082f20cad166649fa4d2073ea9e974a4e5ac36247ca23d2e5a8b3cb12d60e9ff70a8acfe26d76566c71fd351ee5e6a9a6595157eb36f92b1fd64e1599
languageName: node
linkType: hard
"argparse@npm:^2.0.1": "argparse@npm:^2.0.1":
version: 2.0.1 version: 2.0.1
resolution: "argparse@npm:2.0.1" resolution: "argparse@npm:2.0.1"
@ -6964,13 +6910,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"create-require@npm:^1.1.0":
version: 1.1.1
resolution: "create-require@npm:1.1.1"
checksum: 10/a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff
languageName: node
linkType: hard
"crelt@npm:^1.0.5": "crelt@npm:^1.0.5":
version: 1.0.6 version: 1.0.6
resolution: "crelt@npm:1.0.6" resolution: "crelt@npm:1.0.6"
@ -7357,13 +7296,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"diff@npm:^4.0.1":
version: 4.0.2
resolution: "diff@npm:4.0.2"
checksum: 10/ec09ec2101934ca5966355a229d77afcad5911c92e2a77413efda5455636c4cf2ce84057e2d7715227a2eeeda04255b849bd3ae3a4dd22eb22e86e76456df069
languageName: node
linkType: hard
"diff@npm:^7.0.0": "diff@npm:^7.0.0":
version: 7.0.0 version: 7.0.0
resolution: "diff@npm:7.0.0" resolution: "diff@npm:7.0.0"
@ -7806,35 +7738,35 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild@npm:^0.25.0": "esbuild@npm:^0.25.0, esbuild@npm:~0.25.0":
version: 0.25.2 version: 0.25.5
resolution: "esbuild@npm:0.25.2" resolution: "esbuild@npm:0.25.5"
dependencies: dependencies:
"@esbuild/aix-ppc64": "npm:0.25.2" "@esbuild/aix-ppc64": "npm:0.25.5"
"@esbuild/android-arm": "npm:0.25.2" "@esbuild/android-arm": "npm:0.25.5"
"@esbuild/android-arm64": "npm:0.25.2" "@esbuild/android-arm64": "npm:0.25.5"
"@esbuild/android-x64": "npm:0.25.2" "@esbuild/android-x64": "npm:0.25.5"
"@esbuild/darwin-arm64": "npm:0.25.2" "@esbuild/darwin-arm64": "npm:0.25.5"
"@esbuild/darwin-x64": "npm:0.25.2" "@esbuild/darwin-x64": "npm:0.25.5"
"@esbuild/freebsd-arm64": "npm:0.25.2" "@esbuild/freebsd-arm64": "npm:0.25.5"
"@esbuild/freebsd-x64": "npm:0.25.2" "@esbuild/freebsd-x64": "npm:0.25.5"
"@esbuild/linux-arm": "npm:0.25.2" "@esbuild/linux-arm": "npm:0.25.5"
"@esbuild/linux-arm64": "npm:0.25.2" "@esbuild/linux-arm64": "npm:0.25.5"
"@esbuild/linux-ia32": "npm:0.25.2" "@esbuild/linux-ia32": "npm:0.25.5"
"@esbuild/linux-loong64": "npm:0.25.2" "@esbuild/linux-loong64": "npm:0.25.5"
"@esbuild/linux-mips64el": "npm:0.25.2" "@esbuild/linux-mips64el": "npm:0.25.5"
"@esbuild/linux-ppc64": "npm:0.25.2" "@esbuild/linux-ppc64": "npm:0.25.5"
"@esbuild/linux-riscv64": "npm:0.25.2" "@esbuild/linux-riscv64": "npm:0.25.5"
"@esbuild/linux-s390x": "npm:0.25.2" "@esbuild/linux-s390x": "npm:0.25.5"
"@esbuild/linux-x64": "npm:0.25.2" "@esbuild/linux-x64": "npm:0.25.5"
"@esbuild/netbsd-arm64": "npm:0.25.2" "@esbuild/netbsd-arm64": "npm:0.25.5"
"@esbuild/netbsd-x64": "npm:0.25.2" "@esbuild/netbsd-x64": "npm:0.25.5"
"@esbuild/openbsd-arm64": "npm:0.25.2" "@esbuild/openbsd-arm64": "npm:0.25.5"
"@esbuild/openbsd-x64": "npm:0.25.2" "@esbuild/openbsd-x64": "npm:0.25.5"
"@esbuild/sunos-x64": "npm:0.25.2" "@esbuild/sunos-x64": "npm:0.25.5"
"@esbuild/win32-arm64": "npm:0.25.2" "@esbuild/win32-arm64": "npm:0.25.5"
"@esbuild/win32-ia32": "npm:0.25.2" "@esbuild/win32-ia32": "npm:0.25.5"
"@esbuild/win32-x64": "npm:0.25.2" "@esbuild/win32-x64": "npm:0.25.5"
dependenciesMeta: dependenciesMeta:
"@esbuild/aix-ppc64": "@esbuild/aix-ppc64":
optional: true optional: true
@ -7888,7 +7820,7 @@ __metadata:
optional: true optional: true
bin: bin:
esbuild: bin/esbuild esbuild: bin/esbuild
checksum: 10/3b16423d33e0c05078b38bfe88e1b2125164a6b8dccfd06db8698766e54406f3299de8a74e3ce818f1d5a9c8bf993aa4d27a5716c39580eb80bd92d52ccf34d3 checksum: 10/0fa4c3b42c6ddf1a008e75a4bb3dcab08ce22ac0b31dd59dc01f7fe8e21380bfaec07a2fe3730a7cf430da5a30142d016714b358666325a4733547afa42be405
languageName: node languageName: node
linkType: hard linkType: hard
@ -8989,6 +8921,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"get-tsconfig@npm:^4.7.5":
version: 4.10.1
resolution: "get-tsconfig@npm:4.10.1"
dependencies:
resolve-pkg-maps: "npm:^1.0.0"
checksum: 10/04d63f47fdecaefbd1f73ec02949be4ec4db7d6d9fbc8d4e81f9a4bb1c6f876e48943712f2f9236643d3e4d61d9a7b06da08564d08b034631ebe3f5605bef237
languageName: node
linkType: hard
"gifwrap@npm:^0.10.1": "gifwrap@npm:^0.10.1":
version: 0.10.1 version: 0.10.1
resolution: "gifwrap@npm:0.10.1" resolution: "gifwrap@npm:0.10.1"
@ -9562,7 +9503,7 @@ __metadata:
terser-webpack-plugin: "npm:5.3.14" terser-webpack-plugin: "npm:5.3.14"
tinykeys: "npm:3.0.0" tinykeys: "npm:3.0.0"
ts-lit-plugin: "npm:2.0.2" ts-lit-plugin: "npm:2.0.2"
ts-node: "npm:10.9.2" tsx: "npm:4.19.4"
typescript: "npm:5.8.3" typescript: "npm:5.8.3"
typescript-eslint: "npm:8.31.1" typescript-eslint: "npm:8.31.1"
ua-parser-js: "npm:2.0.3" ua-parser-js: "npm:2.0.3"
@ -11191,13 +11132,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"make-error@npm:^1.1.1":
version: 1.3.6
resolution: "make-error@npm:1.3.6"
checksum: 10/b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402
languageName: node
linkType: hard
"make-fetch-happen@npm:^14.0.3": "make-fetch-happen@npm:^14.0.3":
version: 14.0.3 version: 14.0.3
resolution: "make-fetch-happen@npm:14.0.3" resolution: "make-fetch-happen@npm:14.0.3"
@ -12928,6 +12862,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"resolve-pkg-maps@npm:^1.0.0":
version: 1.0.0
resolution: "resolve-pkg-maps@npm:1.0.0"
checksum: 10/0763150adf303040c304009231314d1e84c6e5ebfa2d82b7d94e96a6e82bacd1dcc0b58ae257315f3c8adb89a91d8d0f12928241cba2df1680fbe6f60bf99b0e
languageName: node
linkType: hard
"resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4": "resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4":
version: 1.22.10 version: 1.22.10
resolution: "resolve@npm:1.22.10" resolution: "resolve@npm:1.22.10"
@ -14532,44 +14473,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"ts-node@npm:10.9.2":
version: 10.9.2
resolution: "ts-node@npm:10.9.2"
dependencies:
"@cspotcode/source-map-support": "npm:^0.8.0"
"@tsconfig/node10": "npm:^1.0.7"
"@tsconfig/node12": "npm:^1.0.7"
"@tsconfig/node14": "npm:^1.0.0"
"@tsconfig/node16": "npm:^1.0.2"
acorn: "npm:^8.4.1"
acorn-walk: "npm:^8.1.1"
arg: "npm:^4.1.0"
create-require: "npm:^1.1.0"
diff: "npm:^4.0.1"
make-error: "npm:^1.1.1"
v8-compile-cache-lib: "npm:^3.0.1"
yn: "npm:3.1.1"
peerDependencies:
"@swc/core": ">=1.2.50"
"@swc/wasm": ">=1.2.50"
"@types/node": "*"
typescript: ">=2.7"
peerDependenciesMeta:
"@swc/core":
optional: true
"@swc/wasm":
optional: true
bin:
ts-node: dist/bin.js
ts-node-cwd: dist/bin-cwd.js
ts-node-esm: dist/bin-esm.js
ts-node-script: dist/bin-script.js
ts-node-transpile-only: dist/bin-transpile.js
ts-script: dist/bin-script-deprecated.js
checksum: 10/a91a15b3c9f76ac462f006fa88b6bfa528130dcfb849dd7ef7f9d640832ab681e235b8a2bc58ecde42f72851cc1d5d4e22c901b0c11aa51001ea1d395074b794
languageName: node
linkType: hard
"ts-simple-type@npm:2.0.0-next.0, ts-simple-type@npm:~2.0.0-next.0": "ts-simple-type@npm:2.0.0-next.0, ts-simple-type@npm:~2.0.0-next.0":
version: 2.0.0-next.0 version: 2.0.0-next.0
resolution: "ts-simple-type@npm:2.0.0-next.0" resolution: "ts-simple-type@npm:2.0.0-next.0"
@ -14610,6 +14513,22 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"tsx@npm:4.19.4":
version: 4.19.4
resolution: "tsx@npm:4.19.4"
dependencies:
esbuild: "npm:~0.25.0"
fsevents: "npm:~2.3.3"
get-tsconfig: "npm:^4.7.5"
dependenciesMeta:
fsevents:
optional: true
bin:
tsx: dist/cli.mjs
checksum: 10/4dde315aeda70b9cadfecbc8d05b1625f5831018b9cb2db25cbbd03c5f5ee9c59cdc6652a0fd8492176b50944a5af1d5af352b944d024f4a719f58d6f2ac3a7f
languageName: node
linkType: hard
"type-check@npm:^0.4.0, type-check@npm:~0.4.0": "type-check@npm:^0.4.0, type-check@npm:~0.4.0":
version: 0.4.0 version: 0.4.0
resolution: "type-check@npm:0.4.0" resolution: "type-check@npm:0.4.0"
@ -15021,13 +14940,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"v8-compile-cache-lib@npm:^3.0.1":
version: 3.0.1
resolution: "v8-compile-cache-lib@npm:3.0.1"
checksum: 10/88d3423a52b6aaf1836be779cab12f7016d47ad8430dffba6edf766695e6d90ad4adaa3d8eeb512cc05924f3e246c4a4ca51e089dccf4402caa536b5e5be8961
languageName: node
linkType: hard
"v8flags@npm:^4.0.0": "v8flags@npm:^4.0.0":
version: 4.0.1 version: 4.0.1
resolution: "v8flags@npm:4.0.1" resolution: "v8flags@npm:4.0.1"
@ -16290,13 +16202,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"yn@npm:3.1.1":
version: 3.1.1
resolution: "yn@npm:3.1.1"
checksum: 10/2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6
languageName: node
linkType: hard
"yocto-queue@npm:^0.1.0": "yocto-queue@npm:^0.1.0":
version: 0.1.0 version: 0.1.0
resolution: "yocto-queue@npm:0.1.0" resolution: "yocto-queue@npm:0.1.0"