Files
drizzle-team--drizzle-orm/drizzle-orm/scripts/build.ts
T
2026-07-13 12:10:05 +08:00

77 lines
1.8 KiB
TypeScript
Executable File

#!/usr/bin/env -S pnpm tsx
import 'zx/globals';
import cpy from 'cpy';
async function updateAndCopyPackageJson() {
const pkg = await fs.readJSON('package.json');
const entries = await glob('src/**/*.ts');
pkg.exports = entries.reduce<
Record<string, {
import: {
types?: string;
default: string;
};
require: {
types: string;
default: string;
};
default: string;
types: string;
}>
>(
(acc, rawEntry) => {
const entry = rawEntry.match(/src\/(.*)\.ts/)![1]!;
const exportsEntry = entry === 'index' ? '.' : './' + entry.replace(/\/index$/, '');
const importEntry = `./${entry}.js`;
const requireEntry = `./${entry}.cjs`;
acc[exportsEntry] = {
import: {
types: `./${entry}.d.ts`,
default: importEntry,
},
require: {
types: `./${entry}.d.cts`,
default: requireEntry,
},
types: `./${entry}.d.ts`,
default: importEntry,
};
return acc;
},
{},
);
await fs.writeJSON('dist.new/package.json', pkg, { spaces: 2 });
}
await fs.remove('dist.new');
await Promise.all([
(async () => {
await $`tsup`.stdio('pipe', 'pipe', 'pipe');
})(),
(async () => {
await $`tsc -p tsconfig.dts.json`.stdio('pipe', 'pipe', 'pipe');
await cpy('dist-dts/**/*.d.ts', 'dist.new', {
rename: (basename) => basename.replace(/\.d\.ts$/, '.d.cts'),
});
await cpy('dist-dts/**/*.d.ts', 'dist.new', {
rename: (basename) => basename.replace(/\.d\.ts$/, '.d.ts'),
});
})(),
]);
await Promise.all([
$`tsup src/version.ts --no-config --dts --format esm --outDir dist.new`.stdio('pipe', 'pipe', 'pipe'),
$`tsup src/version.ts --no-config --dts --format cjs --outDir dist.new`.stdio('pipe', 'pipe', 'pipe'),
]);
await $`scripts/fix-imports.ts`;
await fs.copy('../README.md', 'dist.new/README.md');
await updateAndCopyPackageJson();
await fs.remove('dist');
await fs.rename('dist.new', 'dist');