diff --git a/.gitignore b/.gitignore index c302ad40..f67723af 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ dist/ node_modules api/assets/*.js api/assets/*.css -database.db \ No newline at end of file +database.db +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/api/.swcrc b/api/.swcrc deleted file mode 100644 index 794efbd7..00000000 --- a/api/.swcrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "module": { - "type": "commonjs" - }, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true - }, - "target": "es2021", - "baseUrl": "./", - "paths": { - "@fosscord/api": ["src/index.ts"], - "@fosscord/api/*": ["src/*"] - } - } -} diff --git a/api/package-lock.json b/api/package-lock.json index 2af8c7b9..f4e7506c 100644 Binary files a/api/package-lock.json and b/api/package-lock.json differ diff --git a/bundle/.swcrc b/bundle/.swcrc deleted file mode 100644 index 9a89b49d..00000000 --- a/bundle/.swcrc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "module": { - "type": "commonjs" - }, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true - }, - "target": "es2021" - } -} diff --git a/bundle/package-lock.json b/bundle/package-lock.json index dd80d787..cb8078de 100644 Binary files a/bundle/package-lock.json and b/bundle/package-lock.json differ diff --git a/bundle/scripts/build.js b/bundle/scripts/build.js index ba559ecf..9939558d 100644 --- a/bundle/scripts/build.js +++ b/bundle/scripts/build.js @@ -1,8 +1,7 @@ const { spawn } = require("child_process"); const path = require("path"); -const { performance } = require("perf_hooks"); const fs = require("fs"); -const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const { performance } = require("perf_hooks"); let parts = "api,cdn,gateway,bundle".split(","); const tscBin = path.join(__dirname, "..", "..", "util", "node_modules", "typescript", "bin", "tsc"); @@ -13,17 +12,49 @@ const swcBin = path.join(__dirname, "..", "..", "util", "node_modules", "@swc", function buildPackage(dir) { const element = path.basename(dir); - require("esbuild").build({ + return require("esbuild").build({ entryPoints: walk(path.join(dir, "src")), bundle: false, outdir: path.join(dir, "dist"), target: "es2021", - format: "cjs", - plugins: [esbuildPluginTsc({})], - keepNames: true, + // 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" }); + console.log(file); + content = content + .replaceAll( + `@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(" "), { @@ -41,13 +72,16 @@ function util() { } const start = performance.now(); -console.log("[Build] starting ..."); -util(); -for (const part of parts) { - buildPackage(path.join(__dirname, "..", "..", part)); +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"); }); @@ -61,7 +95,7 @@ function walk(dir) { if (stat && stat.isDirectory()) { /* Recurse into a subdirectory */ results = results.concat(walk(file)); - } else if (file.endsWith(".ts")) { + } else if (file.endsWith(".ts") || file.endsWith(".js")) { /* Is a file */ results.push(file); } diff --git a/bundle/tsconfig.json b/bundle/tsconfig.json index b300a426..69725244 100644 --- a/bundle/tsconfig.json +++ b/bundle/tsconfig.json @@ -65,6 +65,7 @@ "skipLibCheck": true /* Skip type checking of declaration files. */, "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, "emitDecoratorMetadata": true, - "experimentalDecorators": true + "experimentalDecorators": true, + "baseUrl": "." } } diff --git a/cdn/tsconfig.json b/cdn/tsconfig.json index c80d16fd..249dffff 100644 --- a/cdn/tsconfig.json +++ b/cdn/tsconfig.json @@ -4,7 +4,7 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ - "incremental": true, /* Enable incremental compilation */ + "incremental": true /* Enable incremental compilation */, "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": ["ES2015", "dom"] /* Specify library files to be included in the compilation. */, @@ -68,7 +68,7 @@ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, "baseUrl": ".", "paths": { - "@fosscord/cdn/": ["src/index"], + "@fosscord/cdn": ["src/index"], "@fosscord/cdn/*": ["src/*"] }, "plugins": [{ "transform": "@zerollup/ts-transform-paths" }] diff --git a/gateway/.swcrc b/gateway/.swcrc index 3079a89f..e8cbb8a1 100644 --- a/gateway/.swcrc +++ b/gateway/.swcrc @@ -7,11 +7,10 @@ "syntax": "typescript", "decorators": true }, - "target": "es2021", + "target": "es5", "baseUrl": ".", "paths": { - "@fosscord/gateway": ["src/index"], - "@fosscord/gateway/*": ["src/*"] + "@fosscord/gateway": ["src/index"] } } } diff --git a/gateway/package-lock.json b/gateway/package-lock.json index 38962a2a..07ae02f9 100644 Binary files a/gateway/package-lock.json and b/gateway/package-lock.json differ diff --git a/gateway/tsconfig.json b/gateway/tsconfig.json index e2ac5b0b..2ad38f93 100644 --- a/gateway/tsconfig.json +++ b/gateway/tsconfig.json @@ -5,7 +5,7 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ - "incremental": true, /* Enable incremental compilation */ + "incremental": true /* Enable incremental compilation */, "target": "ES2020" /* 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": ["ES2015", "ES2020.BigInt", "DOM"] /* Specify library files to be included in the compilation. */, @@ -70,7 +70,7 @@ "resolveJsonModule": true, "baseUrl": ".", "paths": { - "@fosscord/gateway": ["src/index"], + "@fosscord/gateway": ["src/index.ts"], "@fosscord/gateway/*": ["src/*"] }, "plugins": [{ "transform": "@zerollup/ts-transform-paths" }] diff --git a/util/.swcrc b/util/.swcrc deleted file mode 100644 index a723d37f..00000000 --- a/util/.swcrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "module": { - "type": "commonjs" - }, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true - }, - "target": "es2021", - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "keepClassNames": true, - "loose": true - } -} diff --git a/webrtc/.swcrc b/webrtc/.swcrc deleted file mode 100644 index 9a89b49d..00000000 --- a/webrtc/.swcrc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "module": { - "type": "commonjs" - }, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true - }, - "target": "es2021" - } -}