chore: rts workflow APIs code split (#29474)

This commit is contained in:
Ayush Pahwa 2023-12-09 15:34:08 +07:00 committed by GitHub
parent dbe7429009
commit 4e72309747
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 95 additions and 10 deletions

View File

@ -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",

View File

@ -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");
})();

View File

@ -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

View File

@ -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"]
}