umi-library
Version:
Library toolkit based on rollup and docz.
46 lines (40 loc) • 1.14 kB
text/typescript
import { existsSync } from 'fs';
import AJV from 'ajv';
import slash from 'slash2';
import { relative } from 'path';
import schema from './schema';
import { getExistFile } from './utils';
import { IBundleOptions } from './types';
function testDefault(obj) {
return obj.default || obj;
}
export const CONFIG_FILES = [
'.umirc.library.js',
'.umirc.library.jsx',
'.umirc.library.ts',
'.umirc.library.tsx',
];
export default function ({ cwd }): IBundleOptions {
const configFile = getExistFile({
cwd,
files: CONFIG_FILES,
returnRelative: false,
});
if (existsSync(configFile)) {
const userConfig = testDefault(require(configFile)); // eslint-disable-line
const ajv = new AJV({ allErrors: true });
const isValid = ajv.validate(schema, userConfig);
if (!isValid) {
const errors = ajv.errors.map(({ dataPath, message }, index) => {
return `${index + 1}. ${dataPath}${dataPath ? ' ' : ''}${message}`;
});
throw new Error(`
Invalid options in ${slash(relative(cwd, configFile))}
${errors.join('\n')}
`.trim());
}
return userConfig;
} else {
return {};
}
}