From 4e72309747fc78de5d34c334505beffc246a6ec8 Mon Sep 17 00:00:00 2001 From: Ayush Pahwa Date: Sat, 9 Dec 2023 15:34:08 +0700 Subject: [PATCH] chore: rts workflow APIs code split (#29474) --- app/client/packages/rts/.eslintrc.json | 2 +- app/client/packages/rts/build.js | 91 ++++++++++++++++++++++++++ app/client/packages/rts/build.sh | 9 +-- app/client/packages/rts/tsconfig.json | 3 +- 4 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 app/client/packages/rts/build.js diff --git a/app/client/packages/rts/.eslintrc.json b/app/client/packages/rts/.eslintrc.json index 7b67d9a837..ae2b4225f8 100644 --- a/app/client/packages/rts/.eslintrc.json +++ b/app/client/packages/rts/.eslintrc.json @@ -1,6 +1,6 @@ { "extends": ["../../.eslintrc.base.json"], - "ignorePatterns": ["dist", "server.test.ts"], + "ignorePatterns": ["dist", "server.test.ts", "build.js"], "rules": { "@typescript-eslint/prefer-nullish-coalescing": "off", "@typescript-eslint/strict-boolean-expressions": "off", diff --git a/app/client/packages/rts/build.js b/app/client/packages/rts/build.js new file mode 100644 index 0000000000..e645a0f7ff --- /dev/null +++ b/app/client/packages/rts/build.js @@ -0,0 +1,91 @@ +const { dependencies: packageDeps } = require("./package.json"); +const esbuild = require("esbuild"); +const fs = require("fs").promises; + +// List of external workflow packages (EE only) +const externalWorkflowPackages = []; + +async function ensureDirectoryExistence(dirname) { + try { + await fs.mkdir(dirname, { recursive: true }); + } catch (err) { + if (err.code !== "EEXIST") { + throw err; + } + } +} + +async function createFile(dir, filename, content) { + try { + await ensureDirectoryExistence(dir); + const filePath = `${dir}/${filename}`; + await fs.writeFile(filePath, content); + } catch (err) { + console.error("Error writing file:", err); + } +} + +/** + * Get dependencies for workflow packages + * @returns {Object} workflow dependencies + */ +const getWorkflowDependencies = () => { + if (externalWorkflowPackages.length === 0) { + return {}; + } + return Object.entries(packageDeps).reduce((acc, [key, value]) => { + if (externalWorkflowPackages.includes(key)) { + acc[key] = value; + } + return acc; + }, {}); +}; + +const bundle = async () => { + return esbuild + .build({ + entryPoints: ["src/server.ts"], + bundle: true, + sourcemap: true, + platform: "node", + external: [...externalWorkflowPackages, "dtrace-provider"], + loader: { + ".ts": "ts", + }, + tsconfig: "tsconfig.json", + outdir: "dist/bundle", + target: "node" + process.versions.node, + minify: true, + keepNames: true, + }) + .catch(() => process.exit(1)); +}; + +(async () => { + if (externalWorkflowPackages.length > 0) { + // Create package.json for bundle, this is needed to install workflow dependencies + // in the bundle directory. This is needed for EE only. This is done to support the + // packages for our workflow provider which requires dynamic imports. ESBuild does + // not support dynamic imports for external packages hence we need to bundle them + // together with the workflow provider. + const bundlePackagejson = { + name: "rts-bundle", + version: "1.0.0", + description: "", + main: "bundle/server.js", + dependencies: getWorkflowDependencies(), + }; + + createFile( + "dist", + "package.json", + JSON.stringify(bundlePackagejson, null, 2), + ); + + console.log("Bundle package.json created successfully"); + } + + await bundle(); + + console.log("Bundle created successfully"); +})(); diff --git a/app/client/packages/rts/build.sh b/app/client/packages/rts/build.sh index b6e64d1f01..eaeb772151 100755 --- a/app/client/packages/rts/build.sh +++ b/app/client/packages/rts/build.sh @@ -8,11 +8,4 @@ yarn install --immutable yarn run tsc --noEmit rm -rf dist -yarn run esbuild src/server.ts \ - --bundle \ - --minify \ - --sourcemap \ - --platform=node \ - --target="$(node --version | sed s/v/node/)" \ - --outdir=dist/bundle \ - --external:dtrace-provider +node build.js \ No newline at end of file diff --git a/app/client/packages/rts/tsconfig.json b/app/client/packages/rts/tsconfig.json index 3db9eb4c56..1cfed8ff86 100644 --- a/app/client/packages/rts/tsconfig.json +++ b/app/client/packages/rts/tsconfig.json @@ -19,6 +19,7 @@ "@utils/*": ["./src/utils/*"] } }, - "exclude": ["jest.config.js", "src/test"], + "include": ["src/**/*", "src/**/*.json"], + "exclude": ["jest.config.js", "src/test", "index.js", "build.js"], "lib": ["es2015"] }