summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/build-assets.mjs87
-rw-r--r--scripts/dev.mjs8
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,