✨ changed and fixed compiler
This commit is contained in:
parent
484758b317
commit
7f41933763
2
bundle/.gitignore
vendored
2
bundle/.gitignore
vendored
@ -1,2 +0,0 @@
|
|||||||
files/
|
|
||||||
.env
|
|
10
bundle/.vscode/launch.json
vendored
10
bundle/.vscode/launch.json
vendored
@ -8,13 +8,11 @@
|
|||||||
"sourceMaps": true,
|
"sourceMaps": true,
|
||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "Launch server bundle",
|
"name": "Launch Server",
|
||||||
"program": "${workspaceFolder}/dist/start.js",
|
"program": "${workspaceFolder}/dist/bundle/src/start.js",
|
||||||
"runtimeArgs": ["-r", "./tsconfig-paths-bootstrap.js"],
|
|
||||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||||
"outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/node_modules/@fosscord/**/*.js"],
|
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
|
||||||
"envFile": "${workspaceFolder}/.env",
|
"envFile": "${workspaceFolder}/.env"
|
||||||
"outDir": "${workspaceFolder}/dist"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,103 +1,19 @@
|
|||||||
const { spawn } = require("child_process");
|
const { execSync } = require("child_process");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const fs = require("fs");
|
const fse = require("fs-extra");
|
||||||
const { performance } = require("perf_hooks");
|
|
||||||
|
|
||||||
let parts = "api,cdn,gateway,bundle".split(",");
|
const api = path.join(__dirname, "..", "..", "api");
|
||||||
const tscBin = path.join(__dirname, "..", "..", "util", "node_modules", "typescript", "bin", "tsc");
|
const dist = path.join(__dirname, "..", "dist");
|
||||||
const swcBin = path.join(__dirname, "..", "..", "util", "node_modules", "@swc", "cli", "bin", "swc");
|
|
||||||
|
|
||||||
// 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) {
|
console.log(
|
||||||
const element = path.basename(dir);
|
execSync("node " + path.join(__dirname, "..", "node_modules", "typescript", "lib", "tsc.js") + " -p .", {
|
||||||
|
cwd: path.join(__dirname, ".."),
|
||||||
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,
|
|
||||||
shell: true,
|
shell: true,
|
||||||
});
|
env: process.env,
|
||||||
function log(data) {
|
encoding: "utf8",
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
14
bundle/scripts/install.js
Normal file
14
bundle/scripts/install.js
Normal file
@ -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" });
|
@ -4,7 +4,7 @@ process.on("uncaughtException", console.error);
|
|||||||
import http from "http";
|
import http from "http";
|
||||||
import * as Api from "@fosscord/api";
|
import * as Api from "@fosscord/api";
|
||||||
import * as Gateway from "@fosscord/gateway";
|
import * as Gateway from "@fosscord/gateway";
|
||||||
import { CDNServer } from "@fosscord/cdn/";
|
import { CDNServer } from "@fosscord/cdn";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
import { green, bold } from "nanocolors";
|
import { green, bold } from "nanocolors";
|
||||||
import { Config, initDatabase } from "@fosscord/util";
|
import { Config, initDatabase } from "@fosscord/util";
|
||||||
|
@ -1,20 +1,4 @@
|
|||||||
// process.env.MONGOMS_DEBUG = "true";
|
// 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 "reflect-metadata";
|
||||||
import cluster from "cluster";
|
import cluster from "cluster";
|
||||||
import os from "os";
|
import os from "os";
|
||||||
|
@ -1,11 +1,19 @@
|
|||||||
import os from "os";
|
import os from "os";
|
||||||
import osu from "node-os-utils";
|
import osu from "node-os-utils";
|
||||||
|
import { red } from "nanocolors";
|
||||||
|
|
||||||
export function initStats() {
|
export function initStats() {
|
||||||
console.log(`[Path] running in ${__dirname}`);
|
console.log(`[Path] running in ${__dirname}`);
|
||||||
console.log(`[CPU] ${osu.cpu.model()} Cores x${osu.cpu.count()}`);
|
console.log(`[CPU] ${osu.cpu.model()} Cores x${osu.cpu.count()}`);
|
||||||
console.log(`[System] ${os.platform()} ${os.arch()}`);
|
console.log(`[System] ${os.platform()} ${os.arch()}`);
|
||||||
console.log(`[Process] running with pid: ${process.pid}`);
|
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 () => {
|
setInterval(async () => {
|
||||||
const [cpuUsed, memory, network] = await Promise.all([
|
const [cpuUsed, memory, network] = await Promise.all([
|
||||||
@ -23,5 +31,5 @@ export function initStats() {
|
|||||||
process.memoryUsage().rss / 1024 / 1024
|
process.memoryUsage().rss / 1024 / 1024
|
||||||
)}mb/${memory.totalMemMb.toFixed(0)}mb ${networkUsage}`
|
)}mb/${memory.totalMemMb.toFixed(0)}mb ${networkUsage}`
|
||||||
);
|
);
|
||||||
}, 1000 * 5);
|
}, 1000 * 10);
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,28 @@
|
|||||||
{
|
{
|
||||||
"include": ["src/**/*.ts"],
|
"include": [
|
||||||
|
"../api/src/**/*.ts",
|
||||||
|
"../gateway/src/**/*.ts",
|
||||||
|
"../cdn/src/**/*.ts",
|
||||||
|
"../util/src/**/*.ts",
|
||||||
|
"src/**/*.ts"
|
||||||
|
],
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||||
|
|
||||||
/* Basic Options */
|
/* Basic Options */
|
||||||
"incremental": true /* Enable incremental compilation */,
|
"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'. */,
|
"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. */,
|
"lib": ["ES2021"] /* Specify library files to be included in the compilation. */,
|
||||||
"allowJs": true /* Allow javascript files to be compiled. */,
|
"allowJs": true /* Allow javascript files to be compiled. */,
|
||||||
"checkJs": true /* Report errors in .js files. */,
|
"checkJs": true /* Report errors in .js files. */,
|
||||||
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
|
// "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. */,
|
"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. */
|
// "outFile": "./", /* Concatenate and emit output to single file. */
|
||||||
"outDir": "./dist/" /* Redirect output structure to the directory. */,
|
"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 */
|
// "composite": true, /* Enable project compilation */
|
||||||
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
|
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
|
||||||
// "removeComments": true, /* Do not emit comments to output. */
|
// "removeComments": true, /* Do not emit comments to output. */
|
||||||
@ -66,6 +72,18 @@
|
|||||||
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */,
|
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */,
|
||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
"experimentalDecorators": 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" }]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user