summaryrefslogtreecommitdiff
path: root/packages/misskey-bubble-game
diff options
context:
space:
mode:
authorおさむのひと <46447427+samunohito@users.noreply.github.com>2024-03-30 15:28:19 +0900
committerGitHub <noreply@github.com>2024-03-30 15:28:19 +0900
commit2a851437ffcd8778d157a6841875f03330c994b5 (patch)
tree14d21c9a022c02d00eeecf932b25acd485af3f89 /packages/misskey-bubble-game
parentfix(backend): better `notes/translate` error response (#13631) (diff)
downloadsharkey-2a851437ffcd8778d157a6841875f03330c994b5.tar.gz
sharkey-2a851437ffcd8778d157a6841875f03330c994b5.tar.bz2
sharkey-2a851437ffcd8778d157a6841875f03330c994b5.zip
fix: misskey-js、bubble-game、reversiのビルドをesbuildに統合する (#13600)
* fix: ビルドが遅いパッケージのビルド速度を改善 * dependenciesの整理 * fix ci * ビルド開始時に古いファイルを消す * fix ci * fix ci
Diffstat (limited to 'packages/misskey-bubble-game')
-rw-r--r--packages/misskey-bubble-game/.eslintignore1
-rw-r--r--packages/misskey-bubble-game/build.js114
-rw-r--r--packages/misskey-bubble-game/package.json26
-rw-r--r--packages/misskey-bubble-game/src/index.ts6
-rw-r--r--packages/misskey-bubble-game/tsconfig.json2
5 files changed, 113 insertions, 36 deletions
diff --git a/packages/misskey-bubble-game/.eslintignore b/packages/misskey-bubble-game/.eslintignore
index f22128f047..52ea8b3362 100644
--- a/packages/misskey-bubble-game/.eslintignore
+++ b/packages/misskey-bubble-game/.eslintignore
@@ -5,3 +5,4 @@ node_modules
/jest.config.ts
/test
/test-d
+build.js
diff --git a/packages/misskey-bubble-game/build.js b/packages/misskey-bubble-game/build.js
index 4744dfaf7b..0b79f4b915 100644
--- a/packages/misskey-bubble-game/build.js
+++ b/packages/misskey-bubble-game/build.js
@@ -1,31 +1,105 @@
+import * as esbuild from "esbuild";
import { build } from "esbuild";
import { globSync } from "glob";
+import { execa } from "execa";
+import fs from "node:fs";
+import { fileURLToPath } from "node:url";
+import { dirname } from "node:path";
+
+const _filename = fileURLToPath(import.meta.url);
+const _dirname = dirname(_filename);
+const _package = JSON.parse(fs.readFileSync(_dirname + '/package.json', 'utf-8'));
const entryPoints = globSync("./src/**/**.{ts,tsx}");
/** @type {import('esbuild').BuildOptions} */
const options = {
- entryPoints,
- minify: true,
- outdir: "./built/esm",
- target: "es2022",
- platform: "browser",
- format: "esm",
+ entryPoints,
+ minify: process.env.NODE_ENV === 'production',
+ outdir: "./built",
+ target: "es2022",
+ platform: "browser",
+ format: "esm",
+ sourcemap: 'linked',
};
-if (process.env.WATCH === "true") {
- options.watch = {
- onRebuild(error, result) {
- if (error) {
- console.error("watch build failed:", error);
- } else {
- console.log("watch build succeeded:", result);
- }
- },
- };
+// built配下をすべて削除する
+fs.rmSync('./built', { recursive: true, force: true });
+
+if (process.argv.map(arg => arg.toLowerCase()).includes("--watch")) {
+ await watchSrc();
+} else {
+ await buildSrc();
+}
+
+async function buildSrc() {
+ console.log(`[${_package.name}] start building...`);
+
+ await build(options)
+ .then(it => {
+ console.log(`[${_package.name}] build succeeded.`);
+ })
+ .catch((err) => {
+ process.stderr.write(err.stderr);
+ process.exit(1);
+ });
+
+ if (process.env.NODE_ENV === 'production') {
+ console.log(`[${_package.name}] skip building d.ts because NODE_ENV is production.`);
+ } else {
+ await buildDts();
+ }
+
+ console.log(`[${_package.name}] finish building.`);
}
-build(options).catch((err) => {
- process.stderr.write(err.stderr);
- process.exit(1);
-});
+function buildDts() {
+ return execa(
+ 'tsc',
+ [
+ '--project', 'tsconfig.json',
+ '--outDir', 'built',
+ '--declaration', 'true',
+ '--emitDeclarationOnly', 'true',
+ ],
+ {
+ stdout: process.stdout,
+ stderr: process.stderr,
+ }
+ );
+}
+
+async function watchSrc() {
+ const plugins = [{
+ name: 'gen-dts',
+ setup(build) {
+ build.onStart(() => {
+ console.log(`[${_package.name}] detect changed...`);
+ });
+ build.onEnd(async result => {
+ if (result.errors.length > 0) {
+ console.error(`[${_package.name}] watch build failed:`, result);
+ return;
+ }
+ await buildDts();
+ });
+ },
+ }];
+
+ console.log(`[${_package.name}] start watching...`)
+
+ const context = await esbuild.context({ ...options, plugins });
+ await context.watch();
+
+ await new Promise((resolve, reject) => {
+ process.on('SIGHUP', resolve);
+ process.on('SIGINT', resolve);
+ process.on('SIGTERM', resolve);
+ process.on('SIGKILL', resolve);
+ process.on('uncaughtException', reject);
+ process.on('exit', resolve);
+ }).finally(async () => {
+ await context.dispose();
+ console.log(`[${_package.name}] finish watching.`);
+ });
+}
diff --git a/packages/misskey-bubble-game/package.json b/packages/misskey-bubble-game/package.json
index ddc4c2134b..a3aad147a9 100644
--- a/packages/misskey-bubble-game/package.json
+++ b/packages/misskey-bubble-game/package.json
@@ -2,24 +2,21 @@
"type": "module",
"name": "misskey-bubble-game",
"version": "0.0.1",
- "types": "./built/dts/index.d.ts",
+ "main": "./built/index.js",
+ "types": "./built/index.d.ts",
"exports": {
".": {
- "import": "./built/esm/index.js",
- "types": "./built/dts/index.d.ts"
+ "import": "./built/index.js",
+ "types": "./built/index.d.ts"
},
"./*": {
- "import": "./built/esm/*",
- "types": "./built/dts/*"
+ "import": "./built/*",
+ "types": "./built/*"
}
},
"scripts": {
"build": "node ./build.js",
- "build:tsc": "npm run tsc",
- "tsc": "npm run tsc-esm && npm run tsc-dts",
- "tsc-esm": "tsc --outDir built/esm",
- "tsc-dts": "tsc --outDir built/dts --declaration true --emitDeclarationOnly true --declarationMap true",
- "watch": "nodemon -w src -e ts,js,cjs,mjs,json --exec \"pnpm run build:tsc\"",
+ "watch": "nodemon -w package.json -e json --exec \"node ./build.js --watch\"",
"eslint": "eslint . --ext .js,.jsx,.ts,.tsx",
"typecheck": "tsc --noEmit",
"lint": "pnpm typecheck && pnpm eslint"
@@ -27,21 +24,22 @@
"devDependencies": {
"@misskey-dev/eslint-plugin": "1.0.0",
"@types/matter-js": "0.19.6",
- "@types/node": "20.11.5",
"@types/seedrandom": "3.0.8",
+ "@types/node": "20.11.5",
"@typescript-eslint/eslint-plugin": "7.1.0",
"@typescript-eslint/parser": "7.1.0",
"eslint": "8.57.0",
"nodemon": "3.0.2",
- "typescript": "5.3.3"
+ "execa": "8.0.1",
+ "typescript": "5.3.3",
+ "esbuild": "0.19.11",
+ "glob": "10.3.10"
},
"files": [
"built"
],
"dependencies": {
- "esbuild": "0.19.11",
"eventemitter3": "5.0.1",
- "glob": "^10.3.10",
"matter-js": "0.19.0",
"seedrandom": "3.0.5"
}
diff --git a/packages/misskey-bubble-game/src/index.ts b/packages/misskey-bubble-game/src/index.ts
index 004a7d008e..c5f1f68062 100644
--- a/packages/misskey-bubble-game/src/index.ts
+++ b/packages/misskey-bubble-game/src/index.ts
@@ -6,5 +6,9 @@
import { DropAndFusionGame, Mono } from './game.js';
export {
- DropAndFusionGame, Mono,
+ DropAndFusionGame,
+};
+
+export type {
+ Mono,
};
diff --git a/packages/misskey-bubble-game/tsconfig.json b/packages/misskey-bubble-game/tsconfig.json
index f56b65e868..6e34e332e0 100644
--- a/packages/misskey-bubble-game/tsconfig.json
+++ b/packages/misskey-bubble-game/tsconfig.json
@@ -6,7 +6,7 @@
"moduleResolution": "nodenext",
"declaration": true,
"declarationMap": true,
- "sourceMap": true,
+ "sourceMap": false,
"outDir": "./built/",
"removeComments": true,
"strict": true,