PromucFlow_constructor/app/client/packages/rts/build.js
2023-12-09 14:04:08 +05:30

92 lines
2.4 KiB
JavaScript

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