mirror of
https://github.com/Infisical/infisical.git
synced 2026-01-06 22:23:53 -05:00
85 lines
2.9 KiB
JavaScript
85 lines
2.9 KiB
JavaScript
/* eslint-disable */
|
|
import path from "node:path";
|
|
|
|
import fs from "fs/promises";
|
|
import { replaceTscAliasPaths } from "tsc-alias";
|
|
import { defineConfig } from "tsup";
|
|
|
|
// Instead of using tsx or tsc for building, consider using tsup.
|
|
// TSX serves as an alternative to Node.js, allowing you to build directly on the Node.js runtime.
|
|
// Its functionality mirrors Node.js, with the only difference being the absence of a final build step. Production should ideally be launched with TSX.
|
|
// TSC is effective for creating a final build, but it requires manual copying of all static files such as handlebars, emails, etc.
|
|
// A significant challenge is the shift towards ESM, as more packages are adopting ESM. If the output is in CommonJS, it may lead to errors.
|
|
// The suggested configuration offers a balance, accommodating both ESM and CommonJS requirements.
|
|
|
|
export default defineConfig({
|
|
shims: true,
|
|
clean: true,
|
|
minify: false,
|
|
keepNames: true,
|
|
splitting: false,
|
|
format: "esm",
|
|
// copy the files to output
|
|
loader: {
|
|
".handlebars": "copy",
|
|
".md": "copy",
|
|
".txt": "copy",
|
|
".pem": "copy"
|
|
},
|
|
external: ["../../../frontend/node_modules/next/dist/server/next-server.js"],
|
|
outDir: "dist",
|
|
tsconfig: "./tsconfig.json",
|
|
entry: ["./src", "!./src/**/*.dev.ts"],
|
|
sourceMap: true,
|
|
skipNodeModulesBundle: true,
|
|
esbuildPlugins: [
|
|
{
|
|
// esm directory import are not allowed
|
|
// /folder1 should be explicitly imported as /folder1/index.ts
|
|
// this plugin will append it automatically on build time to all imports
|
|
name: "commonjs-esm-directory-import",
|
|
setup(build) {
|
|
build.onResolve({ filter: /.*/ }, async (args) => {
|
|
if (args.importer) {
|
|
if (args.kind === "import-statement") {
|
|
const isRelativePath = args.path.startsWith(".");
|
|
const absPath = isRelativePath
|
|
? path.join(args.resolveDir, args.path)
|
|
: path.join(args.path.replace("@app", "./src").replace("@bdd_routes", "./src/server/routes/bdd"));
|
|
|
|
const isFile = await fs
|
|
.stat(`${absPath}.ts`)
|
|
.then((el) => el.isFile)
|
|
.catch(async (err) => {
|
|
if (err.code === "ENOTDIR") {
|
|
return true;
|
|
}
|
|
|
|
// If .ts file doesn't exist, try checking for .tsx file
|
|
return fs
|
|
.stat(`${absPath}.tsx`)
|
|
.then((el) => el.isFile)
|
|
.catch((err) => err.code === "ENOTDIR");
|
|
});
|
|
|
|
return {
|
|
path: isFile ? `${args.path}.mjs` : `${args.path}/index.mjs`,
|
|
external: true
|
|
};
|
|
}
|
|
}
|
|
return undefined;
|
|
});
|
|
}
|
|
}
|
|
],
|
|
async onSuccess() {
|
|
// this will replace all tsconfig paths
|
|
await replaceTscAliasPaths({
|
|
configFile: "tsconfig.json",
|
|
watch: false,
|
|
outDir: "dist"
|
|
});
|
|
}
|
|
});
|