@buddy-js/cli
Version:
A IaC tool to create your [Buddy CI] pipelines programmatically via JS/TS.
43 lines (42 loc) • 1.11 kB
JavaScript
import { createRequire } from 'node:module';
import { register } from 'node:module';
import { pathToFileURL } from 'node:url';
import * as tsNode from 'ts-node';
const CjsLoader = {
extensions: ['.js', '.cjs'],
load(file) {
createRequire(import.meta.url)(file);
}
};
const EsmLoader = {
extensions: ['.mjs'],
async load(file) {
await import(file);
}
};
const TsLoader = {
extensions: ['.ts', '.cts'],
load(file) {
tsNode.register({
skipProject: true,
compilerOptions: { module: 'CommonJS' }
});
createRequire(import.meta.url)(file);
}
};
const TsEsmLoader = {
extensions: ['.mts'],
async load(file) {
register('ts-node/esm', pathToFileURL('./'));
await import(file);
}
};
const LOADERS = [CjsLoader, EsmLoader, TsLoader, TsEsmLoader];
export function getLoader(extension) {
for (const loader of LOADERS) {
if (loader.extensions.includes(extension)) {
return loader;
}
}
throw new Error(`Cannot load file with extension "${extension}"`);
}