From 32f594993595db316865bf1c99d7b1d7c92b1b97 Mon Sep 17 00:00:00 2001 From: woxtu Date: Thu, 7 Sep 2023 16:56:17 +0900 Subject: chore: Goodbye gulp (#11447) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add a script for building assets * Replace with script executions * Remove gulp dependencies * Fix dependencies --------- Co-authored-by: Acid Chicken (硫酸鶏) Co-authored-by: syuilo --- scripts/build-assets.mjs | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 scripts/build-assets.mjs (limited to 'scripts/build-assets.mjs') diff --git a/scripts/build-assets.mjs b/scripts/build-assets.mjs new file mode 100644 index 0000000000..9e411fe868 --- /dev/null +++ b/scripts/build-assets.mjs @@ -0,0 +1,87 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import * as fs from 'node:fs/promises'; +import * as path from 'node:path'; +import cssnano from 'cssnano'; +import postcss from 'postcss'; +import * as terser from 'terser'; + +import locales from '../locales/index.js'; +import meta from '../package.json' assert { type: "json" }; + +async function copyFrontendFonts() { + await fs.cp('./packages/frontend/node_modules/three/examples/fonts', './built/_frontend_dist_/fonts', { dereference: true, recursive: true }); +} + +async function copyFrontendTablerIcons() { + await fs.cp('./packages/frontend/node_modules/@tabler/icons-webfont', './built/_frontend_dist_/tabler-icons', { dereference: true, recursive: true }); +} + +async function copyFrontendLocales() { + await fs.mkdir('./built/_frontend_dist_/locales', { recursive: true }); + + const v = { '_version_': meta.version }; + + for (const [lang, locale] of Object.entries(locales)) { + await fs.writeFile(`./built/_frontend_dist_/locales/${lang}.${meta.version}.json`, JSON.stringify({ ...locale, ...v }), 'utf-8'); + } +} + +async function copyBackendViews() { + await fs.cp('./packages/backend/src/server/web/views', './packages/backend/built/server/web/views', { recursive: true }); +} + +async function buildBackendScript() { + await fs.mkdir('./packages/backend/built/server/web', { recursive: true }); + + for (const file of [ + './packages/backend/src/server/web/boot.js', + './packages/backend/src/server/web/bios.js', + './packages/backend/src/server/web/cli.js' + ]) { + let source = await fs.readFile(file, { encoding: 'utf-8' }); + source = source.replaceAll('LANGS', JSON.stringify(Object.keys(locales))); + const { code } = await terser.minify(source, { toplevel: true }); + await fs.writeFile(`./packages/backend/built/server/web/${path.basename(file)}`, code); + } +} + +async function buildBackendStyle() { + await fs.mkdir('./packages/backend/built/server/web', { recursive: true }); + + for (const file of [ + './packages/backend/src/server/web/style.css', + './packages/backend/src/server/web/bios.css', + './packages/backend/src/server/web/cli.css', + './packages/backend/src/server/web/error.css' + ]) { + const source = await fs.readFile(file, { encoding: 'utf-8' }); + const { css } = await postcss([cssnano({ zindex: false })]).process(source, { from: undefined }); + await fs.writeFile(`./packages/backend/built/server/web/${path.basename(file)}`, css); + } +} + +async function build() { + await Promise.all([ + copyFrontendFonts(), + copyFrontendTablerIcons(), + copyFrontendLocales(), + copyBackendViews(), + buildBackendScript(), + buildBackendStyle(), + ]); +} + +await build(); + +if (process.argv.includes("--watch")) { + const watcher = fs.watch('./packages', { recursive: true }); + for await (const event of watcher) { + if (/^[a-z]+\/src/.test(event.filename)) { + await build(); + } + } +} -- cgit v1.2.3-freya