import { transformSync } from 'esbuild';
import fs from 'fs-extra';

/**
 * Transform a ts file to cjs code
 */
export const transformTsFileToCodeSync = (filename: string): string =>
  transformSync(fs.readFileSync(filename).toString(), {
    format: 'cjs',
    loader: 'ts',
    sourcefile: filename,
    sourcemap: 'inline',
    target: 'node18',
  }).code;

/**
 * Globally allow ts files to be loaded via `require()`
 */
export const allowTs = (): void => {
  require.extensions['.ts'] = (m: any, filename) => {
    m._compile(transformTsFileToCodeSync(filename), filename);
  };
};
