2026-09-10 12:17:47 +03:30
|
|
|
/**
|
|
|
|
|
* باندل تکفایل برای Docker (release/app.js) بعد از nest build.
|
2026-09-10 12:53:23 +03:30
|
|
|
* Prisma client + engines را در release/vendor میگذارد (نه node_modules تا gitignore نخورد).
|
2026-09-10 12:17:47 +03:30
|
|
|
*/
|
|
|
|
|
const esbuild = require('esbuild');
|
|
|
|
|
const {
|
|
|
|
|
existsSync,
|
|
|
|
|
mkdirSync,
|
|
|
|
|
rmSync,
|
|
|
|
|
cpSync,
|
|
|
|
|
realpathSync,
|
|
|
|
|
} = require('fs');
|
|
|
|
|
const path = require('path');
|
|
|
|
|
|
|
|
|
|
const root = path.join(__dirname, '..');
|
|
|
|
|
const config = require(path.join(root, 'esbuild.release.config.cjs'));
|
|
|
|
|
const releaseDir = path.join(root, 'release');
|
2026-09-10 12:53:23 +03:30
|
|
|
const vendorDir = path.join(releaseDir, 'vendor');
|
2026-09-10 12:17:47 +03:30
|
|
|
|
|
|
|
|
function resolvePkg(name) {
|
|
|
|
|
return path.dirname(require.resolve(`${name}/package.json`, { paths: [root] }));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function copyPrismaIntoRelease() {
|
|
|
|
|
const prismaClientSrc = resolvePkg('@prisma/client');
|
2026-09-10 12:53:23 +03:30
|
|
|
const prismaClientDest = path.join(vendorDir, '@prisma', 'client');
|
2026-09-10 12:17:47 +03:30
|
|
|
mkdirSync(path.dirname(prismaClientDest), { recursive: true });
|
|
|
|
|
cpSync(prismaClientSrc, prismaClientDest, { recursive: true });
|
|
|
|
|
|
|
|
|
|
const candidates = [
|
|
|
|
|
path.join(root, 'node_modules', '.prisma', 'client'),
|
|
|
|
|
path.join(prismaClientSrc, '..', '.prisma', 'client'),
|
|
|
|
|
path.join(path.dirname(prismaClientSrc), '.prisma', 'client'),
|
2026-09-10 12:53:23 +03:30
|
|
|
path.join(prismaClientSrc, '..', '..', '.prisma', 'client'),
|
2026-09-10 12:17:47 +03:30
|
|
|
];
|
|
|
|
|
|
2026-09-10 12:53:23 +03:30
|
|
|
const prismaEngineSrc = candidates.find((p) => existsSync(p));
|
2026-09-10 12:17:47 +03:30
|
|
|
if (!prismaEngineSrc) {
|
|
|
|
|
throw new Error(
|
|
|
|
|
'Prisma generated client (.prisma/client) یافت نشد. ابتدا: pnpm --filter api exec prisma generate',
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2026-09-10 12:53:23 +03:30
|
|
|
const prismaEngineDest = path.join(vendorDir, '.prisma', 'client');
|
2026-09-10 12:17:47 +03:30
|
|
|
mkdirSync(path.dirname(prismaEngineDest), { recursive: true });
|
|
|
|
|
cpSync(realpathSync(prismaEngineSrc), prismaEngineDest, { recursive: true });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function main() {
|
|
|
|
|
const entry = config.entryPoints[0];
|
|
|
|
|
const fallbackEntry = path.join(root, 'dist', 'src', 'main.js');
|
|
|
|
|
if (!existsSync(entry)) {
|
|
|
|
|
if (existsSync(fallbackEntry)) {
|
|
|
|
|
config.entryPoints = [fallbackEntry];
|
|
|
|
|
} else {
|
|
|
|
|
console.error('dist/main.js یافت نشد. ابتدا اجرا کنید: pnpm --filter api build');
|
|
|
|
|
process.exit(1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rmSync(releaseDir, { recursive: true, force: true });
|
|
|
|
|
mkdirSync(releaseDir, { recursive: true });
|
|
|
|
|
|
|
|
|
|
await esbuild.build(config);
|
|
|
|
|
copyPrismaIntoRelease();
|
|
|
|
|
|
|
|
|
|
console.log('نوشت:', config.outfile);
|
2026-09-10 12:53:23 +03:30
|
|
|
console.log('Prisma client در release/vendor کپی شد.');
|
2026-09-10 12:17:47 +03:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
main().catch((err) => {
|
|
|
|
|
console.error(err);
|
|
|
|
|
process.exit(1);
|
|
|
|
|
});
|