 2b21c19362
			
		
	
	2b21c19362
	
	
	
		
			
			* update deps * Update package.json * update deps * build: pass --strip-leading-paths to restore 0.2.x behavior (#13684) * ✌️ * ✌️ * pureimageの代わりに@napi-rs/canvasを使う (#13748) * pureimageの代わりに@napi-rs/canvasを使う * remove writestream * remove createtemp * wip * Update ClientServerService.ts * update pnpm to 9.x * update deps * re: update pnpm to 9.x * update node * ✌️ --------- Co-authored-by: anatawa12 <anatawa12@icloud.com> Co-authored-by: tamaina <tamaina@hotmail.co.jp>
		
			
				
	
	
		
			111 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
|  * SPDX-FileCopyrightText: syuilo and misskey-project
 | |
|  * SPDX-License-Identifier: AGPL-3.0-only
 | |
|  */
 | |
| 
 | |
| import * as fs from 'node:fs/promises';
 | |
| import * as path from 'node:path';
 | |
| import { fileURLToPath } from 'node:url';
 | |
| import cssnano from 'cssnano';
 | |
| import * as yaml from 'js-yaml';
 | |
| import postcss from 'postcss';
 | |
| import * as terser from 'terser';
 | |
| 
 | |
| import { build as buildLocales } from '../locales/index.js';
 | |
| import generateDTS from '../locales/generateDTS.js';
 | |
| import meta from '../package.json' assert { type: "json" };
 | |
| import buildTarball from './tarball.mjs';
 | |
| 
 | |
| const configDir = fileURLToPath(new URL('../.config', import.meta.url));
 | |
| const configPath = process.env.MISSKEY_CONFIG_YML
 | |
| 	? path.resolve(configDir, process.env.MISSKEY_CONFIG_YML)
 | |
| 	: process.env.NODE_ENV === 'test'
 | |
| 		? path.resolve(configDir, 'test.yml')
 | |
| 		: path.resolve(configDir, 'default.yml');
 | |
| 
 | |
| let locales = buildLocales();
 | |
| 
 | |
| async function loadConfig() {
 | |
| 	return fs.readFile(configPath, 'utf-8').then(data => yaml.load(data)).catch(() => null);
 | |
| }
 | |
| 
 | |
| 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/dist', './built/_frontend_dist_/tabler-icons', { dereference: true, recursive: true });
 | |
| }
 | |
| 
 | |
| async function copyFrontendLocales() {
 | |
|   generateDTS();
 | |
| 
 | |
|   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(),
 | |
| 		loadConfig().then(config => config?.publishTarballInsteadOfProvideRepositoryUrl && buildTarball()),
 | |
|   ]);
 | |
| }
 | |
| 
 | |
| await build();
 | |
| 
 | |
| if (process.argv.includes('--watch')) {
 | |
| 	const watcher = fs.watch('./locales');
 | |
| 	for await (const event of watcher) {
 | |
| 		const filename = event.filename?.replaceAll('\\', '/');
 | |
| 		if (/^[a-z]+-[A-Z]+\.yml/.test(filename)) {
 | |
| 			console.log(`update ${filename} ...`)
 | |
| 			locales = buildLocales();
 | |
| 			await copyFrontendLocales()
 | |
| 		}
 | |
| 	}
 | |
| }
 |