diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/build-assets.mjs | 87 | ||||
| -rw-r--r-- | scripts/dev.mjs | 8 |
2 files changed, 94 insertions, 1 deletions
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(); + } + } +} diff --git a/scripts/dev.mjs b/scripts/dev.mjs index 5240a5c4a8..655ad5ef13 100644 --- a/scripts/dev.mjs +++ b/scripts/dev.mjs @@ -23,7 +23,13 @@ await execa('pnpm', ['build-pre'], { stderr: process.stderr, }); -execa('pnpm', ['exec', 'gulp', 'watch'], { +await execa('pnpm', ['build-assets'], { + cwd: _dirname + '/../', + stdout: process.stdout, + stderr: process.stderr, +}); + +execa('pnpm', ['build-assets', '--watch'], { cwd: _dirname + '/../', stdout: process.stdout, stderr: process.stderr, |