tshy
Version:
TypeScript HYbridizer - Hybrid (CommonJS/ESM) TypeScript node package builder
70 lines • 2.33 kB
JavaScript
// validate esmDialects and commonjsDialects
import { readdirSync } from 'node:fs';
import fail from './fail.js';
const arrayOverlap = (a, b) => {
if (!a || !b)
return false;
for (const av of a) {
if (b.includes(av))
return av;
}
return false;
};
const validExtraDialectSet = (e, which) => {
const srcContents = readdirSync('src');
for (const d of e) {
if (typeof d !== 'string') {
fail(`tshy.${which}Dialects must be an array of strings, got: ${d}`);
return process.exit(1);
}
if (srcContents.includes(d)) {
fail(`tshy.${which}Dialects contains a src entry, not allowed: '${d}'`);
return process.exit(1);
}
if ((d.includes('/') || d.includes('\\')) && which !== 'source') {
fail(`tshy.${which}Dialects entries may not contain slashes: '${d}'`);
return process.exit(1);
}
if (d === 'commonjs' ||
d === 'cjs' ||
d === 'esm' ||
d === 'require' ||
d === 'import' ||
d === 'source' ||
d === 'types' ||
d === 'default') {
fail(`tshy.${which}Dialects must not contain '${d}'`);
return process.exit(1);
}
}
return true;
};
export default ({ commonjsDialects, esmDialects, sourceDialects, }) => {
if (commonjsDialects === undefined &&
esmDialects === undefined &&
sourceDialects === undefined) {
return true;
}
if (commonjsDialects &&
!validExtraDialectSet(commonjsDialects, 'commonjs')) {
return false;
}
if (esmDialects && !validExtraDialectSet(esmDialects, 'esm')) {
return false;
}
if (sourceDialects && !validExtraDialectSet(sourceDialects, 'source')) {
return false;
}
const srcCjs = arrayOverlap(sourceDialects, commonjsDialects);
if (srcCjs) {
fail(`tshy.commonjsDialects overlap with tshy.sourceDialects: ${srcCjs}`);
return process.exit(1);
}
const srcEsm = arrayOverlap(sourceDialects, esmDialects);
if (srcEsm) {
fail(`tshy.esmDialects overlap with tshy.sourceDialects: ${srcEsm}`);
return process.exit(1);
}
return true;
};
//# sourceMappingURL=valid-extra-dialects.js.map