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

View File

@ -35,7 +35,7 @@ jobs:
- name: Check for duplicate dependencies
run: yarn dedupe --check
- 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
uses: actions/cache@v4.2.3
with:
@ -67,7 +67,7 @@ jobs:
- name: Install dependencies
run: yarn install --immutable
- 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
run: yarn run test
build:
@ -85,7 +85,7 @@ jobs:
- name: Install dependencies
run: yarn install --immutable
- name: Build Application
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp build-app
run: yarn run-task build-app
env:
IS_TEST: "true"
- name: Upload bundle stats
@ -109,7 +109,7 @@ jobs:
- name: Install dependencies
run: yarn install --immutable
- name: Build Application
run: node --import ./ts-node-register.js ./node_modules/.bin/gulp build-hassio
run: yarn run-task build-hassio
env:
IS_TEST: "true"
- name: Upload bundle stats

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
import path from "node:path";
import packageJson from "../package.json" assert { type: "json" };
import paths, { dirname } from "./paths.ts";
import { version } from "./env.ts";
import paths, { dirname } from "./paths.ts";
const dependencies = packageJson.dependencies;
@ -164,7 +164,7 @@ export const babelOptions = ({
// themselves to prevent self-injection.
plugins: [
[
path.join(BABEL_PLUGINS, "custom-polyfill-plugin.js"),
path.join(BABEL_PLUGINS, "custom-polyfill-plugin.ts"),
{ 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 "./clean.ts";
import "./compress.ts";
import "./entry-html.ts";
import "./gather-static.ts";
import "./gen-icons-json.ts";
import "./locale-data.ts";
import "./rspack.ts";
import "./service-worker.ts";
import "./translations.ts";
import { clean } from "./clean.ts";
import { compressApp } from "./compress.ts";
import { genPagesAppDev, genPagesAppProd } from "./entry-html.ts";
import { copyStaticApp } from "./gather-static.ts";
import { genIconsJson } from "./gen-icons-json.ts";
import { buildLocaleData } from "./locale-data.ts";
import { rspackProdApp, rspackWatchApp } from "./rspack.ts";
import {
genServiceWorkerAppDev,
genServiceWorkerAppProd,
} from "./service-worker.ts";
import { buildTranslations } from "./translations.ts";
task(
"develop-app",
series(
async () => {
process.env.NODE_ENV = "development";
},
"clean",
parallel(
"gen-service-worker-app-dev",
"gen-icons-json",
"gen-pages-app-dev",
"build-translations",
"build-locale-data"
),
"copy-static-app",
"rspack-watch-app"
)
// develop-app
export const developApp = series(
async () => {
process.env.NODE_ENV = "development";
},
clean,
parallel(
genServiceWorkerAppDev,
genIconsJson,
genPagesAppDev,
buildTranslations,
buildLocaleData
),
copyStaticApp,
rspackWatchApp
);
task(
"build-app",
series(
async () => {
process.env.NODE_ENV = "production";
},
"clean",
parallel("gen-icons-json", "build-translations", "build-locale-data"),
"copy-static-app",
"rspack-prod-app",
parallel("gen-pages-app-prod", "gen-service-worker-app-prod"),
// Don't compress running tests
...(isTestBuild() || isStatsBuild() ? [] : ["compress-app"])
)
// build-app
export const buildApp = series(
async () => {
process.env.NODE_ENV = "production";
},
clean,
parallel(genIconsJson, buildTranslations, buildLocaleData),
copyStaticApp,
rspackProdApp,
parallel(genPagesAppProd, genServiceWorkerAppProd),
// Don't compress running tests
...(isTestBuild() || isStatsBuild() ? [] : [compressApp])
);
task(
"analyze-app",
series(
async () => {
process.env.STATS = "1";
},
"clean",
"rspack-prod-app"
)
// analyze-app
export const analyzeApp = series(
async () => {
process.env.STATS = "1";
},
clean,
rspackProdApp
);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -6,7 +6,6 @@ import {
getPreUserAgentRegexes,
} from "browserslist-useragent-regexp";
import fs from "fs-extra";
import { task } from "gulp";
import { minify } from "html-minifier-terser";
import template from "lodash.template";
import { dirname, extname, resolve } from "node:path";
@ -171,20 +170,18 @@ const APP_PAGE_ENTRIES = {
"index.html": ["core", "app"],
};
task(
"gen-pages-app-dev",
genPagesDevTask(APP_PAGE_ENTRIES, paths.root_dir, paths.app_output_root)
export const genPagesAppDev = genPagesDevTask(
APP_PAGE_ENTRIES,
paths.root_dir,
paths.app_output_root
);
task(
"gen-pages-app-prod",
genPagesProdTask(
APP_PAGE_ENTRIES,
paths.root_dir,
paths.app_output_root,
paths.app_output_latest,
paths.app_output_es5
)
export const genPagesAppProd = genPagesProdTask(
APP_PAGE_ENTRIES,
paths.root_dir,
paths.app_output_root,
paths.app_output_latest,
paths.app_output_es5
);
const CAST_PAGE_ENTRIES = {
@ -194,104 +191,82 @@ const CAST_PAGE_ENTRIES = {
"receiver.html": ["receiver"],
};
task(
"gen-pages-cast-dev",
genPagesDevTask(CAST_PAGE_ENTRIES, paths.cast_dir, paths.cast_output_root)
export const genPagesCastDev = genPagesDevTask(
CAST_PAGE_ENTRIES,
paths.cast_dir,
paths.cast_output_root
);
task(
"gen-pages-cast-prod",
genPagesProdTask(
CAST_PAGE_ENTRIES,
paths.cast_dir,
paths.cast_output_root,
paths.cast_output_latest,
paths.cast_output_es5
)
export const genPagesCastProd = genPagesProdTask(
CAST_PAGE_ENTRIES,
paths.cast_dir,
paths.cast_output_root,
paths.cast_output_latest,
paths.cast_output_es5
);
const DEMO_PAGE_ENTRIES = { "index.html": ["main"] };
task(
"gen-pages-demo-dev",
genPagesDevTask(DEMO_PAGE_ENTRIES, paths.demo_dir, paths.demo_output_root)
export const genPagesDemoDev = genPagesDevTask(
DEMO_PAGE_ENTRIES,
paths.demo_dir,
paths.demo_output_root
);
task(
"gen-pages-demo-prod",
genPagesProdTask(
DEMO_PAGE_ENTRIES,
paths.demo_dir,
paths.demo_output_root,
paths.demo_output_latest,
paths.demo_output_es5
)
export const genPagesDemoProd = genPagesProdTask(
DEMO_PAGE_ENTRIES,
paths.demo_dir,
paths.demo_output_root,
paths.demo_output_latest,
paths.demo_output_es5
);
const GALLERY_PAGE_ENTRIES = { "index.html": ["entrypoint"] };
task(
"gen-pages-gallery-dev",
genPagesDevTask(
GALLERY_PAGE_ENTRIES,
paths.gallery_dir,
paths.gallery_output_root
)
export const genPagesGalleryDev = genPagesDevTask(
GALLERY_PAGE_ENTRIES,
paths.gallery_dir,
paths.gallery_output_root
);
task(
"gen-pages-gallery-prod",
genPagesProdTask(
GALLERY_PAGE_ENTRIES,
paths.gallery_dir,
paths.gallery_output_root,
paths.gallery_output_latest
)
export const genPagesGalleryProd = genPagesProdTask(
GALLERY_PAGE_ENTRIES,
paths.gallery_dir,
paths.gallery_output_root,
paths.gallery_output_latest
);
const LANDING_PAGE_PAGE_ENTRIES = { "index.html": ["entrypoint"] };
task(
"gen-pages-landing-page-dev",
genPagesDevTask(
LANDING_PAGE_PAGE_ENTRIES,
paths.landingPage_dir,
paths.landingPage_output_root
)
export const genPagesLandingPageDev = genPagesDevTask(
LANDING_PAGE_PAGE_ENTRIES,
paths.landingPage_dir,
paths.landingPage_output_root
);
task(
"gen-pages-landing-page-prod",
genPagesProdTask(
LANDING_PAGE_PAGE_ENTRIES,
paths.landingPage_dir,
paths.landingPage_output_root,
paths.landingPage_output_latest,
paths.landingPage_output_es5
)
export const genPagesLandingPageProd = genPagesProdTask(
LANDING_PAGE_PAGE_ENTRIES,
paths.landingPage_dir,
paths.landingPage_output_root,
paths.landingPage_output_latest,
paths.landingPage_output_es5
);
const HASSIO_PAGE_ENTRIES = { "entrypoint.js": ["entrypoint"] };
task(
"gen-pages-hassio-dev",
genPagesDevTask(
HASSIO_PAGE_ENTRIES,
paths.hassio_dir,
paths.hassio_output_root,
"src",
paths.hassio_publicPath
)
export const genPagesHassioDev = genPagesDevTask(
HASSIO_PAGE_ENTRIES,
paths.hassio_dir,
paths.hassio_output_root,
"src",
paths.hassio_publicPath
);
task(
"gen-pages-hassio-prod",
genPagesProdTask(
HASSIO_PAGE_ENTRIES,
paths.hassio_dir,
paths.hassio_output_root,
paths.hassio_output_latest,
paths.hassio_output_es5,
"src"
)
export const genPagesHassioProd = genPagesProdTask(
HASSIO_PAGE_ENTRIES,
paths.hassio_dir,
paths.hassio_output_root,
paths.hassio_output_latest,
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 { Octokit } from "@octokit/rest";
import { deleteAsync } from "del";
import { mkdir, readFile, writeFile } from "node:fs/promises";
import { series, task } from "gulp";
import { series } from "gulp";
import jszip from "jszip";
import { mkdir, readFile, writeFile } from "node:fs/promises";
import path from "node:path";
import process from "node:process";
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");
let allowTokenSetup = false;
task("allow-setup-fetch-nightly-translations", (done) => {
export const allowSetupFetchNightlyTranslations = (done) => {
allowTokenSetup = true;
done();
});
};
task("fetch-nightly-translations", async function () {
export const fetchNightlyTranslations = async () => {
// Skip all when environment flag is set (assumes translations are already in place)
if (process.env?.SKIP_FETCH_NIGHTLY_TRANSLATIONS) {
console.log("Skipping fetch due to environment signal");
@ -161,9 +162,9 @@ task("fetch-nightly-translations", async function () {
await new Promise((resolve, reject) => {
extractStream.on("close", resolve).on("error", reject);
});
});
};
task(
"setup-and-fetch-nightly-translations",
series("allow-setup-fetch-nightly-translations", "fetch-nightly-translations")
export const setupAndFetchNightlyTranslations = series(
allowSetupFetchNightlyTranslations,
fetchNightlyTranslations
);

View File

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

View File

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

View File

@ -1,7 +1,6 @@
import fs from "node:fs";
import { task } from "gulp";
import hash from "object-hash";
import path from "node:path";
import hash from "object-hash";
import paths from "../paths.ts";
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}`);
};
task("gen-icons-json", (done) => {
export const genIconsJson = (done) => {
const meta = getMeta();
const metaAndRemoved = addRemovedMeta(meta);
@ -153,13 +152,13 @@ task("gen-icons-json", (done) => {
);
done();
});
};
task("gen-dummy-icons-json", (done) => {
export const genDummyIconsJson = (done) => {
if (!fs.existsSync(OUTPUT_DIR)) {
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
}
fs.writeFileSync(path.resolve(OUTPUT_DIR, "iconList.json"), "[]");
done();
});
};

View File

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

View File

@ -1,17 +1,42 @@
import "./app.ts";
import "./cast.ts";
import "./clean.ts";
import "./compress.ts";
import "./demo.ts";
import "./download-translations.ts";
import "./entry-html.ts";
import "./fetch-nightly-translations.ts";
import "./gallery.ts";
import "./gather-static.ts";
import "./gen-icons-json.ts";
import "./hassio.ts";
import "./landing-page.ts";
import "./locale-data.ts";
import "./rspack.ts";
import "./service-worker.ts";
import "./translations.ts";
import { analyzeApp, buildApp, developApp } from "./app";
import { buildCast, developCast } from "./cast";
import { analyzeDemo, buildDemo, developDemo } from "./demo";
import { downloadTranslations } from "./download-translations";
import { setupAndFetchNightlyTranslations } from "./fetch-nightly-translations";
import { buildGallery, developGallery, gatherGalleryPages } from "./gallery";
import { genIconsJson } from "./gen-icons-json";
import { buildHassio, developHassio } from "./hassio";
import { buildLandingPage, developLandingPage } from "./landing-page";
import { buildLocaleData } from "./locale-data";
import { buildTranslations } from "./translations";
export default {
"develop-app": developApp,
"build-app": buildApp,
"analyze-app": analyzeApp,
"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 "./clean.ts";
import { series } from "gulp";
import { cleanLandingPage } from "./clean.ts";
import "./compress.ts";
import "./entry-html.ts";
import "./gather-static.ts";
import "./gen-icons-json.ts";
import "./rspack.ts";
import "./translations.ts";
import {
genPagesLandingPageDev,
genPagesLandingPageProd,
} from "./entry-html.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",
series(
async function setEnv() {
process.env.NODE_ENV = "development";
},
"clean-landing-page",
"translations-enable-merge-backend",
"build-landing-page-translations",
"copy-translations-landing-page",
"build-locale-data",
"copy-static-landing-page",
"gen-pages-landing-page-dev",
"rspack-watch-landing-page"
)
// develop-landing-page
export const developLandingPage = series(
async function setEnv() {
process.env.NODE_ENV = "development";
},
cleanLandingPage,
translationsEnableMergeBackend,
buildLandingPageTranslations,
copyTranslationsLandingPage,
buildLocaleData,
copyStaticLandingPage,
genPagesLandingPageDev,
rspackWatchLandingPage
);
task(
"build-landing-page",
series(
async function setEnv() {
process.env.NODE_ENV = "production";
},
"clean-landing-page",
"build-landing-page-translations",
"copy-translations-landing-page",
"build-locale-data",
"copy-static-landing-page",
"rspack-prod-landing-page",
"gen-pages-landing-page-prod"
)
// build-landing-page
export const buildLandingPage = series(
async function setEnv() {
process.env.NODE_ENV = "production";
},
cleanLandingPage,
buildLandingPageTranslations,
copyTranslationsLandingPage,
buildLocaleData,
copyStaticLandingPage,
rspackProdLandingPage,
genPagesLandingPageProd
);

View File

@ -1,6 +1,6 @@
import { deleteSync } from "del";
import { series } from "gulp";
import { mkdir, readFile, writeFile } from "node:fs/promises";
import { series, task } from "gulp";
import { join, resolve } from "node:path";
import paths from "../paths.ts";
@ -54,9 +54,9 @@ const convertToJSON = async (
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(
await readFile(
resolve(paths.translations_src, "translationMetadata.json"),
@ -81,6 +81,6 @@ task("create-locale-data", async () => {
)
);
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 { RspackDevServer } from "@rspack/dev-server";
import log from "fancy-log";
import { series, watch } from "gulp";
import fs from "node:fs";
import { task, watch, series } from "gulp";
import path from "node:path";
import { isDevContainer, isStatsBuild, isTestBuild } from "../env.ts";
import paths from "../paths.ts";
import {
createAppConfig,
@ -15,7 +16,16 @@ import {
createHassioConfig,
createLandingPageConfig,
} 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) => [
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
rspack(
process.env.ES5
@ -114,40 +124,37 @@ task("rspack-watch-app", () => {
).watch({ poll: isWsl }, doneHandler());
watch(
path.join(paths.translations_src, "en.json"),
series("build-translations", "copy-translations-app")
series(buildTranslations, copyTranslationsApp)
);
});
};
task("rspack-prod-app", () =>
export const rspackProdApp = () =>
prodBuild(
bothBuilds(createAppConfig, {
isProdBuild: true,
isStatsBuild: isStatsBuild(),
isTestBuild: isTestBuild(),
})
)
);
);
task("rspack-dev-server-demo", () =>
export const rspackDevServerDemo = () =>
runDevServer({
compiler: rspack(
createDemoConfig({ isProdBuild: false, latestBuild: true })
),
contentBase: paths.demo_output_root,
port: 8090,
})
);
});
task("rspack-prod-demo", () =>
export const rspackProdDemo = () =>
prodBuild(
bothBuilds(createDemoConfig, {
isProdBuild: true,
isStatsBuild: isStatsBuild(),
})
)
);
);
task("rspack-dev-server-cast", () =>
export const rspackDevServerCast = () =>
runDevServer({
compiler: rspack(
createCastConfig({ isProdBuild: false, latestBuild: true })
@ -156,18 +163,16 @@ task("rspack-dev-server-cast", () =>
port: 8080,
// Accessible from the network, because that's how Cast hits it.
listenHost: "0.0.0.0",
})
);
});
task("rspack-prod-cast", () =>
export const rspackProdCast = () =>
prodBuild(
bothBuilds(createCastConfig, {
isProdBuild: true,
})
)
);
);
task("rspack-watch-hassio", () => {
export const rspackWatchHassio = () => {
// This command will run forever because we don't close compiler
rspack(
createHassioConfig({
@ -178,21 +183,20 @@ task("rspack-watch-hassio", () => {
watch(
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(
bothBuilds(createHassioConfig, {
isProdBuild: true,
isStatsBuild: isStatsBuild(),
isTestBuild: isTestBuild(),
})
)
);
);
task("rspack-dev-server-gallery", () =>
export const rspackDevServerGallery = () =>
runDevServer({
compiler: rspack(
createGalleryConfig({ isProdBuild: false, latestBuild: true })
@ -200,19 +204,17 @@ task("rspack-dev-server-gallery", () =>
contentBase: paths.gallery_output_root,
port: 8100,
listenHost: "0.0.0.0",
})
);
});
task("rspack-prod-gallery", () =>
export const rspackProdGallery = () =>
prodBuild(
createGalleryConfig({
isProdBuild: true,
latestBuild: true,
})
)
);
);
task("rspack-watch-landing-page", () => {
export const rspackWatchLandingPage = () => {
// This command will run forever because we don't close compiler
rspack(
process.env.ES5
@ -222,16 +224,15 @@ task("rspack-watch-landing-page", () => {
watch(
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(
bothBuilds(createLandingPageConfig, {
isProdBuild: true,
isStatsBuild: isStatsBuild(),
isTestBuild: isTestBuild(),
})
)
);
);

View File

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

View File

@ -2,7 +2,7 @@
import { deleteAsync } from "del";
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 merge from "lodash.merge";
import { createHash } from "node:crypto";
@ -12,7 +12,10 @@ import { PassThrough, Transform } from "node:stream";
import { finished } from "node:stream/promises";
import { isProdBuild } from "../env.ts";
import paths from "../paths.ts";
import "./fetch-nightly-translations.ts";
import {
allowSetupFetchNightlyTranslations,
fetchNightlyTranslations,
} from "./fetch-nightly-translations.ts";
const inFrontendDir = "translations/frontend";
const inBackendDir = "translations/backend";
@ -23,12 +26,10 @@ const TEST_LOCALE = "en-x-test";
let mergeBackend = false;
task(
"translations-enable-merge-backend",
parallel(async () => {
mergeBackend = true;
}, "allow-setup-fetch-nightly-translations")
);
// translations-enable-merge-backend
export const translationsEnableMergeBackend = parallel(async () => {
mergeBackend = true;
}, allowSetupFetchNightlyTranslations);
// 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
@ -145,7 +146,7 @@ const lokaliseTransform = (data, path, original = data) => {
return output;
};
task("clean-translations", () => deleteAsync([workDir]));
export const cleanTranslations = () => deleteAsync([workDir]);
const makeWorkDir = () => mkdir(workDir, { recursive: true });
@ -312,26 +313,20 @@ const writeTranslationMetaData = () =>
)
.pipe(gulpDest(workDir));
task(
"build-translations",
series(
parallel(
"fetch-nightly-translations",
series("clean-translations", makeWorkDir)
),
createTestTranslation,
createMasterTranslation,
createTranslations,
writeTranslationMetaData
)
export const buildTranslations = series(
parallel(fetchNightlyTranslations, series(cleanTranslations, makeWorkDir)),
createTestTranslation,
createMasterTranslation,
createTranslations,
writeTranslationMetaData
);
task(
"build-supervisor-translations",
series(setFragment("supervisor"), "build-translations")
export const buildSupervisorTranslations = series(
setFragment("supervisor"),
buildTranslations
);
task(
"build-landing-page-translations",
series(setFragment("landing-page"), "build-translations")
export const buildLandingPageTranslations = series(
setFragment("landing-page"),
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")/../.."
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")/../.."
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")/../.."
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")/../.."
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")/../.."
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")/../.."
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")/../.."
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")/../.."
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")/../.."
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")/../.."
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")/../.."
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",
"postpack": "pinst --enable",
"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)",
"license": "Apache-2.0",
@ -218,7 +219,7 @@
"tar": "7.4.3",
"terser-webpack-plugin": "5.3.14",
"ts-lit-plugin": "2.0.2",
"ts-node": "10.9.2",
"tsx": "4.19.4",
"typescript": "5.8.3",
"typescript-eslint": "8.31.1",
"vite-tsconfig-paths": "5.1.4",

View File

@ -6,4 +6,4 @@ set -e
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")/.."
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")/.."
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")/.."
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")/.."
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"
]
}
},
"ts-node": {
"esm": true
}
}

375
yarn.lock
View File

@ -1253,15 +1253,6 @@ __metadata:
languageName: node
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":
version: 5.0.2
resolution: "@csstools/color-helpers@npm:5.0.2"
@ -1331,177 +1322,177 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/aix-ppc64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/aix-ppc64@npm:0.25.2"
"@esbuild/aix-ppc64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/aix-ppc64@npm:0.25.5"
conditions: os=aix & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/android-arm64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/android-arm64@npm:0.25.2"
"@esbuild/android-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/android-arm64@npm:0.25.5"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@esbuild/android-arm@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/android-arm@npm:0.25.2"
"@esbuild/android-arm@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/android-arm@npm:0.25.5"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@esbuild/android-x64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/android-x64@npm:0.25.2"
"@esbuild/android-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/android-x64@npm:0.25.5"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
"@esbuild/darwin-arm64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/darwin-arm64@npm:0.25.2"
"@esbuild/darwin-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/darwin-arm64@npm:0.25.5"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@esbuild/darwin-x64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/darwin-x64@npm:0.25.2"
"@esbuild/darwin-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/darwin-x64@npm:0.25.5"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@esbuild/freebsd-arm64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/freebsd-arm64@npm:0.25.2"
"@esbuild/freebsd-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/freebsd-arm64@npm:0.25.5"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/freebsd-x64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/freebsd-x64@npm:0.25.2"
"@esbuild/freebsd-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/freebsd-x64@npm:0.25.5"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/linux-arm64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/linux-arm64@npm:0.25.2"
"@esbuild/linux-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-arm64@npm:0.25.5"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
"@esbuild/linux-arm@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/linux-arm@npm:0.25.2"
"@esbuild/linux-arm@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-arm@npm:0.25.5"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@esbuild/linux-ia32@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/linux-ia32@npm:0.25.2"
"@esbuild/linux-ia32@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-ia32@npm:0.25.5"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
"@esbuild/linux-loong64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/linux-loong64@npm:0.25.2"
"@esbuild/linux-loong64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-loong64@npm:0.25.5"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
"@esbuild/linux-mips64el@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/linux-mips64el@npm:0.25.2"
"@esbuild/linux-mips64el@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-mips64el@npm:0.25.5"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
"@esbuild/linux-ppc64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/linux-ppc64@npm:0.25.2"
"@esbuild/linux-ppc64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-ppc64@npm:0.25.5"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/linux-riscv64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/linux-riscv64@npm:0.25.2"
"@esbuild/linux-riscv64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-riscv64@npm:0.25.5"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
"@esbuild/linux-s390x@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/linux-s390x@npm:0.25.2"
"@esbuild/linux-s390x@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-s390x@npm:0.25.5"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
"@esbuild/linux-x64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/linux-x64@npm:0.25.2"
"@esbuild/linux-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-x64@npm:0.25.5"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
"@esbuild/netbsd-arm64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/netbsd-arm64@npm:0.25.2"
"@esbuild/netbsd-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/netbsd-arm64@npm:0.25.5"
conditions: os=netbsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/netbsd-x64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/netbsd-x64@npm:0.25.2"
"@esbuild/netbsd-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/netbsd-x64@npm:0.25.5"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/openbsd-arm64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/openbsd-arm64@npm:0.25.2"
"@esbuild/openbsd-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/openbsd-arm64@npm:0.25.5"
conditions: os=openbsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/openbsd-x64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/openbsd-x64@npm:0.25.2"
"@esbuild/openbsd-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/openbsd-x64@npm:0.25.5"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/sunos-x64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/sunos-x64@npm:0.25.2"
"@esbuild/sunos-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/sunos-x64@npm:0.25.5"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
"@esbuild/win32-arm64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/win32-arm64@npm:0.25.2"
"@esbuild/win32-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/win32-arm64@npm:0.25.5"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@esbuild/win32-ia32@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/win32-ia32@npm:0.25.2"
"@esbuild/win32-ia32@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/win32-ia32@npm:0.25.5"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@esbuild/win32-x64@npm:0.25.2":
version: 0.25.2
resolution: "@esbuild/win32-x64@npm:0.25.2"
"@esbuild/win32-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/win32-x64@npm:0.25.5"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@ -2062,7 +2053,7 @@ __metadata:
languageName: node
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
resolution: "@jridgewell/resolve-uri@npm:3.1.2"
checksum: 10/97106439d750a409c22c8bff822d648f6a71f3aa9bc8e5129efdc36343cd3096ddc4eeb1c62d2fe48e9bdd4db37b05d4646a17114ecebd3bbcacfa2de51c3c1d
@ -2093,16 +2084,6 @@ __metadata:
languageName: node
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":
version: 0.3.25
resolution: "@jridgewell/trace-mapping@npm:0.3.25"
@ -4205,34 +4186,6 @@ __metadata:
languageName: node
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":
version: 3.8.1
resolution: "@tsparticles/basic@npm:3.8.1"
@ -5521,7 +5474,7 @@ __metadata:
languageName: node
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
resolution: "acorn-walk@npm:8.3.4"
dependencies:
@ -5530,7 +5483,7 @@ __metadata:
languageName: node
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
resolution: "acorn@npm:8.14.1"
bin:
@ -5755,13 +5708,6 @@ __metadata:
languageName: node
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":
version: 2.0.1
resolution: "argparse@npm:2.0.1"
@ -6964,13 +6910,6 @@ __metadata:
languageName: node
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":
version: 1.0.6
resolution: "crelt@npm:1.0.6"
@ -7357,13 +7296,6 @@ __metadata:
languageName: node
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":
version: 7.0.0
resolution: "diff@npm:7.0.0"
@ -7806,35 +7738,35 @@ __metadata:
languageName: node
linkType: hard
"esbuild@npm:^0.25.0":
version: 0.25.2
resolution: "esbuild@npm:0.25.2"
"esbuild@npm:^0.25.0, esbuild@npm:~0.25.0":
version: 0.25.5
resolution: "esbuild@npm:0.25.5"
dependencies:
"@esbuild/aix-ppc64": "npm:0.25.2"
"@esbuild/android-arm": "npm:0.25.2"
"@esbuild/android-arm64": "npm:0.25.2"
"@esbuild/android-x64": "npm:0.25.2"
"@esbuild/darwin-arm64": "npm:0.25.2"
"@esbuild/darwin-x64": "npm:0.25.2"
"@esbuild/freebsd-arm64": "npm:0.25.2"
"@esbuild/freebsd-x64": "npm:0.25.2"
"@esbuild/linux-arm": "npm:0.25.2"
"@esbuild/linux-arm64": "npm:0.25.2"
"@esbuild/linux-ia32": "npm:0.25.2"
"@esbuild/linux-loong64": "npm:0.25.2"
"@esbuild/linux-mips64el": "npm:0.25.2"
"@esbuild/linux-ppc64": "npm:0.25.2"
"@esbuild/linux-riscv64": "npm:0.25.2"
"@esbuild/linux-s390x": "npm:0.25.2"
"@esbuild/linux-x64": "npm:0.25.2"
"@esbuild/netbsd-arm64": "npm:0.25.2"
"@esbuild/netbsd-x64": "npm:0.25.2"
"@esbuild/openbsd-arm64": "npm:0.25.2"
"@esbuild/openbsd-x64": "npm:0.25.2"
"@esbuild/sunos-x64": "npm:0.25.2"
"@esbuild/win32-arm64": "npm:0.25.2"
"@esbuild/win32-ia32": "npm:0.25.2"
"@esbuild/win32-x64": "npm:0.25.2"
"@esbuild/aix-ppc64": "npm:0.25.5"
"@esbuild/android-arm": "npm:0.25.5"
"@esbuild/android-arm64": "npm:0.25.5"
"@esbuild/android-x64": "npm:0.25.5"
"@esbuild/darwin-arm64": "npm:0.25.5"
"@esbuild/darwin-x64": "npm:0.25.5"
"@esbuild/freebsd-arm64": "npm:0.25.5"
"@esbuild/freebsd-x64": "npm:0.25.5"
"@esbuild/linux-arm": "npm:0.25.5"
"@esbuild/linux-arm64": "npm:0.25.5"
"@esbuild/linux-ia32": "npm:0.25.5"
"@esbuild/linux-loong64": "npm:0.25.5"
"@esbuild/linux-mips64el": "npm:0.25.5"
"@esbuild/linux-ppc64": "npm:0.25.5"
"@esbuild/linux-riscv64": "npm:0.25.5"
"@esbuild/linux-s390x": "npm:0.25.5"
"@esbuild/linux-x64": "npm:0.25.5"
"@esbuild/netbsd-arm64": "npm:0.25.5"
"@esbuild/netbsd-x64": "npm:0.25.5"
"@esbuild/openbsd-arm64": "npm:0.25.5"
"@esbuild/openbsd-x64": "npm:0.25.5"
"@esbuild/sunos-x64": "npm:0.25.5"
"@esbuild/win32-arm64": "npm:0.25.5"
"@esbuild/win32-ia32": "npm:0.25.5"
"@esbuild/win32-x64": "npm:0.25.5"
dependenciesMeta:
"@esbuild/aix-ppc64":
optional: true
@ -7888,7 +7820,7 @@ __metadata:
optional: true
bin:
esbuild: bin/esbuild
checksum: 10/3b16423d33e0c05078b38bfe88e1b2125164a6b8dccfd06db8698766e54406f3299de8a74e3ce818f1d5a9c8bf993aa4d27a5716c39580eb80bd92d52ccf34d3
checksum: 10/0fa4c3b42c6ddf1a008e75a4bb3dcab08ce22ac0b31dd59dc01f7fe8e21380bfaec07a2fe3730a7cf430da5a30142d016714b358666325a4733547afa42be405
languageName: node
linkType: hard
@ -8989,6 +8921,15 @@ __metadata:
languageName: node
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":
version: 0.10.1
resolution: "gifwrap@npm:0.10.1"
@ -9562,7 +9503,7 @@ __metadata:
terser-webpack-plugin: "npm:5.3.14"
tinykeys: "npm:3.0.0"
ts-lit-plugin: "npm:2.0.2"
ts-node: "npm:10.9.2"
tsx: "npm:4.19.4"
typescript: "npm:5.8.3"
typescript-eslint: "npm:8.31.1"
ua-parser-js: "npm:2.0.3"
@ -11191,13 +11132,6 @@ __metadata:
languageName: node
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":
version: 14.0.3
resolution: "make-fetch-happen@npm:14.0.3"
@ -12928,6 +12862,13 @@ __metadata:
languageName: node
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":
version: 1.22.10
resolution: "resolve@npm:1.22.10"
@ -14532,44 +14473,6 @@ __metadata:
languageName: node
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":
version: 2.0.0-next.0
resolution: "ts-simple-type@npm:2.0.0-next.0"
@ -14610,6 +14513,22 @@ __metadata:
languageName: node
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":
version: 0.4.0
resolution: "type-check@npm:0.4.0"
@ -15021,13 +14940,6 @@ __metadata:
languageName: node
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":
version: 4.0.1
resolution: "v8flags@npm:4.0.1"
@ -16290,13 +16202,6 @@ __metadata:
languageName: node
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":
version: 0.1.0
resolution: "yocto-queue@npm:0.1.0"