summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-10-10 11:02:25 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-10-10 11:02:25 +0200
commit7f41933763357119125b8ac388e957ad1c98a4ab (patch)
treeca716e3f45de8ce2f23ab38fff3f28f9421d8276
parent:sparkles: random guest username generation added (diff)
downloadserver-7f41933763357119125b8ac388e957ad1c98a4ab.tar.xz
:sparkles: changed and fixed compiler
-rw-r--r--bundle/.gitignore2
-rw-r--r--bundle/.vscode/launch.json10
-rw-r--r--bundle/scripts/build.js112
-rw-r--r--bundle/scripts/install.js14
-rw-r--r--bundle/src/Server.ts2
-rw-r--r--bundle/src/start.ts16
-rw-r--r--bundle/src/stats.ts10
-rw-r--r--bundle/tsconfig.json30
8 files changed, 66 insertions, 130 deletions
diff --git a/bundle/.gitignore b/bundle/.gitignore
deleted file mode 100644
index cf073d9c..00000000
--- a/bundle/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-files/
-.env
\ No newline at end of file
diff --git a/bundle/.vscode/launch.json b/bundle/.vscode/launch.json
index 917f2a93..aa4e743a 100644
--- a/bundle/.vscode/launch.json
+++ b/bundle/.vscode/launch.json
@@ -8,13 +8,11 @@
 			"sourceMaps": true,
 			"type": "node",
 			"request": "launch",
-			"name": "Launch server bundle",
-			"program": "${workspaceFolder}/dist/start.js",
-			"runtimeArgs": ["-r", "./tsconfig-paths-bootstrap.js"],
+			"name": "Launch Server",
+			"program": "${workspaceFolder}/dist/bundle/src/start.js",
 			"preLaunchTask": "tsc: build - tsconfig.json",
-			"outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/node_modules/@fosscord/**/*.js"],
-			"envFile": "${workspaceFolder}/.env",
-			"outDir": "${workspaceFolder}/dist"
+			"outFiles": ["${workspaceFolder}/dist/**/*.js"],
+			"envFile": "${workspaceFolder}/.env"
 		}
 	]
 }
diff --git a/bundle/scripts/build.js b/bundle/scripts/build.js
index 4266942f..2a82ec57 100644
--- a/bundle/scripts/build.js
+++ b/bundle/scripts/build.js
@@ -1,103 +1,19 @@
-const { spawn } = require("child_process");
+const { execSync } = require("child_process");
 const path = require("path");
-const fs = require("fs");
-const { performance } = require("perf_hooks");
+const fse = require("fs-extra");
 
-let parts = "api,cdn,gateway,bundle".split(",");
-const tscBin = path.join(__dirname, "..", "..", "util", "node_modules", "typescript", "bin", "tsc");
-const swcBin = path.join(__dirname, "..", "..", "util", "node_modules", "@swc", "cli", "bin", "swc");
+const api = path.join(__dirname, "..", "..", "api");
+const dist = path.join(__dirname, "..", "dist");
 
-// because npm run is slow we directly get the build script of the package.json script
+fse.copySync(path.join(api, "assets"), path.join(dist, "api", "assets"));
+fse.copySync(path.join(api, "client_test"), path.join(dist, "api", "client_test"));
+fse.copySync(path.join(api, "locales"), path.join(dist, "api", "locales"));
 
-function buildPackage(dir) {
-	const element = path.basename(dir);
-
-	return require("esbuild").build({
-		entryPoints: walk(path.join(dir, "src")),
-		bundle: false,
-		outdir: path.join(dir, "dist"),
-		target: "es2021",
-		// plugins don't really work because bundle is false
-		keepNames: false,
-		tsconfig: path.join(dir, "tsconfig.json"),
-	});
-}
-
-const importPart = /import (\* as )?(({[^}]+})|(\w+)) from ("[.\w-/@q]+")/g;
-const importMod = /import ("[\w-/@q.]+")/g;
-const exportDefault = /export default/g;
-const exportAllAs = /export \* from (".+")/g;
-const exportMod = /export ({[\w, ]+})/g;
-const exportConst = /export (const|var|let) (\w+)/g;
-const exportPart = /export ((async )?\w+) (\w+)/g;
-
-// resolves tsconfig paths + rewrites es6 imports/exports to require (because esbuild/swc doesn't work properly)
-function transpileFiles() {
-	for (const part of ["gateway", "api", "cdn", "bundle"]) {
-		const files = walk(path.join(__dirname, "..", "..", part, "dist"));
-		for (const file of files) {
-			let content = fs.readFileSync(file, { encoding: "utf8" });
-			content = content
-				.replace(
-					new RegExp(`@fosscord/${part}`),
-					path.relative(file, path.join(__dirname, "..", "..", part, "dist")).slice(3)
-				)
-				.replace(importPart, `const $2 = require($5)`)
-				.replace(importMod, `require($1)`)
-				.replace(exportDefault, `module.exports =`)
-				.replace(exportAllAs, `module.exports = {...(module.exports)||{}, ...require($1)}`)
-				.replace(exportMod, "module.exports = $1")
-				.replace(exportConst, `let $2 = {};\nmodule.exports.$2 = $2`)
-				.replace(exportPart, `module.exports.$3 = $1 $3`);
-			fs.writeFileSync(file, content);
-		}
-	}
-}
-
-function util() {
-	// const child = spawn("node", `${swcBin}  src --out-dir dist --sync`.split(" "), {
-	const child = spawn("node", `${tscBin} -b .`.split(" "), {
-		cwd: path.join(__dirname, "..", "..", "util"),
-		env: process.env,
+console.log(
+	execSync("node " + path.join(__dirname, "..", "node_modules", "typescript", "lib", "tsc.js") + " -p .", {
+		cwd: path.join(__dirname, ".."),
 		shell: true,
-	});
-	function log(data) {
-		console.log(`[util] ` + data.toString().slice(0, -1));
-	}
-	child.stdout.on("data", log);
-	child.stderr.on("data", log);
-	child.on("error", (err) => console.error("util", err));
-	return child;
-}
-
-const start = performance.now();
-
-async function main() {
-	console.log("[Build] starting ...");
-	util();
-	await Promise.all(parts.map((part) => buildPackage(path.join(__dirname, "..", "..", part))));
-	transpileFiles();
-}
-
-main();
-
-process.on("exit", () => {
-	console.log("[Build] took " + Math.round(performance.now() - start) + "ms");
-});
-
-function walk(dir) {
-	var results = [];
-	var list = fs.readdirSync(dir);
-	list.forEach(function (file) {
-		file = path.join(dir, file);
-		var stat = fs.statSync(file);
-		if (stat && stat.isDirectory()) {
-			/* Recurse into a subdirectory */
-			results = results.concat(walk(file));
-		} else if (file.endsWith(".ts") || file.endsWith(".js")) {
-			/* Is a file */
-			results.push(file);
-		}
-	});
-	return results;
-}
+		env: process.env,
+		encoding: "utf8",
+	})
+);
diff --git a/bundle/scripts/install.js b/bundle/scripts/install.js
new file mode 100644
index 00000000..3008b4c5
--- /dev/null
+++ b/bundle/scripts/install.js
@@ -0,0 +1,14 @@
+const path = require("path");
+const fs = require("fs");
+const parts = ["api", "util", "cdn", "gateway"];
+
+const bundle = require("../package.json");
+
+for (const part of parts) {
+	const { devDependencies, dependencies } = require(path.join("..", "..", part, "package.json"));
+	bundle.devDependencies = { ...bundle.devDependencies, ...devDependencies };
+	bundle.dependencies = { ...bundle.dependencies, ...dependencies };
+	delete bundle.dependencies["@fosscord/util"];
+}
+
+fs.writeFileSync(path.join(__dirname, "..", "package.json"), JSON.stringify(bundle, null, "\t"), { encoding: "utf8" });
diff --git a/bundle/src/Server.ts b/bundle/src/Server.ts
index 5dda2d02..d541735f 100644
--- a/bundle/src/Server.ts
+++ b/bundle/src/Server.ts
@@ -4,7 +4,7 @@ process.on("uncaughtException", console.error);
 import http from "http";
 import * as Api from "@fosscord/api";
 import * as Gateway from "@fosscord/gateway";
-import { CDNServer } from "@fosscord/cdn/";
+import { CDNServer } from "@fosscord/cdn";
 import express from "express";
 import { green, bold } from "nanocolors";
 import { Config, initDatabase } from "@fosscord/util";
diff --git a/bundle/src/start.ts b/bundle/src/start.ts
index fbe5fa4c..8e7c3129 100644
--- a/bundle/src/start.ts
+++ b/bundle/src/start.ts
@@ -1,20 +1,4 @@
 // process.env.MONGOMS_DEBUG = "true";
-const tsConfigPaths = require("tsconfig-paths");
-const path = require("path");
-const baseUrl = path.join(__dirname, "..");
-const cleanup = tsConfigPaths.register({
-	baseUrl,
-	paths: {
-		"@fosscord/api": ["../api/dist/index.js"],
-		"@fosscord/api/*": ["../api/dist/*"],
-		"@fosscord/gateway": ["../gateway/dist/index.js"],
-		"@fosscord/gateway/*": ["../gateway/dist/*"],
-		"@fosscord/cdn": ["../cdn/dist/index.js"],
-		"@fosscord/cdn/*": ["../cdn/dist/*"],
-	},
-});
-console.log(require("@fosscord/gateway"));
-
 import "reflect-metadata";
 import cluster from "cluster";
 import os from "os";
diff --git a/bundle/src/stats.ts b/bundle/src/stats.ts
index d5ceeff7..49705424 100644
--- a/bundle/src/stats.ts
+++ b/bundle/src/stats.ts
@@ -1,11 +1,19 @@
 import os from "os";
 import osu from "node-os-utils";
+import { red } from "nanocolors";
 
 export function initStats() {
 	console.log(`[Path] running in ${__dirname}`);
 	console.log(`[CPU] ${osu.cpu.model()} Cores x${osu.cpu.count()}`);
 	console.log(`[System] ${os.platform()} ${os.arch()}`);
 	console.log(`[Process] running with pid: ${process.pid}`);
+	if (process.getuid() === 0) {
+		console.warn(
+			red(
+				`[Process] Warning fosscord is running as root, this highly discouraged and might expose your system vulnerable to attackers. Please run fosscord as a user without root privileges.`
+			)
+		);
+	}
 
 	setInterval(async () => {
 		const [cpuUsed, memory, network] = await Promise.all([
@@ -23,5 +31,5 @@ export function initStats() {
 				process.memoryUsage().rss / 1024 / 1024
 			)}mb/${memory.totalMemMb.toFixed(0)}mb ${networkUsage}`
 		);
-	}, 1000 * 5);
+	}, 1000 * 10);
 }
diff --git a/bundle/tsconfig.json b/bundle/tsconfig.json
index 69725244..1b2949da 100644
--- a/bundle/tsconfig.json
+++ b/bundle/tsconfig.json
@@ -1,22 +1,28 @@
 {
-	"include": ["src/**/*.ts"],
+	"include": [
+		"../api/src/**/*.ts",
+		"../gateway/src/**/*.ts",
+		"../cdn/src/**/*.ts",
+		"../util/src/**/*.ts",
+		"src/**/*.ts"
+	],
 	"compilerOptions": {
 		/* Visit https://aka.ms/tsconfig.json to read more about this file */
 
 		/* Basic Options */
 		"incremental": true /* Enable incremental compilation */,
-		"target": "ESNext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,
+		"target": "ES6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,
 		"module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
 		"lib": ["ES2021"] /* Specify library files to be included in the compilation. */,
 		"allowJs": true /* Allow javascript files to be compiled. */,
 		"checkJs": true /* Report errors in .js files. */,
 		// "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
-		"declaration": true /* Generates corresponding '.d.ts' file. */,
+		"declaration": false /* Generates corresponding '.d.ts' file. */,
 		"declarationMap": false /* Generates a sourcemap for each corresponding '.d.ts' file. */,
-		"sourceMap": true /* Generates corresponding '.map' file. */,
+		"sourceMap": false /* Generates corresponding '.map' file. */,
 		// "outFile": "./",                       /* Concatenate and emit output to single file. */
 		"outDir": "./dist/" /* Redirect output structure to the directory. */,
-		"rootDir": "./src/" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
+		"rootDir": "../" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
 		// "composite": true,                     /* Enable project compilation */
 		// "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
 		// "removeComments": true,                /* Do not emit comments to output. */
@@ -66,6 +72,18 @@
 		"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */,
 		"emitDecoratorMetadata": true,
 		"experimentalDecorators": true,
-		"baseUrl": "."
+		"resolveJsonModule": true,
+		"baseUrl": "..",
+		"paths": {
+			"@fosscord/api": ["api/src/index"],
+			"@fosscord/api/*": ["api/src/*"],
+			"@fosscord/gateway": ["gateway/src/index"],
+			"@fosscord/gateway/*": ["gateway/src/*"],
+			"@fosscord/cdn": ["cdn/src/index"],
+			"@fosscord/cdn/*": ["cdn/src/*"],
+			"@fosscord/util": ["util/src/index"],
+			"@fosscord/util/*": ["util/src/*"]
+		},
+		"plugins": [{ "transform": "@zerollup/ts-transform-paths" }]
 	}
 }