108 lines
2.9 KiB
TypeScript
108 lines
2.9 KiB
TypeScript
import type { Tree } from '@nrwl/devkit';
|
|
import {
|
|
convertNxGenerator,
|
|
formatFiles,
|
|
getImportPath,
|
|
getWorkspaceLayout,
|
|
joinPathFragments,
|
|
readProjectConfiguration,
|
|
updateProjectConfiguration,
|
|
writeJson,
|
|
} from '@nrwl/devkit';
|
|
|
|
import { rollupInitGenerator } from '../init/init';
|
|
import { RollupExecutorOptions } from '../../executors/rollup/schema';
|
|
import { RollupProjectSchema } from './schema';
|
|
|
|
export async function rollupProjectGenerator(
|
|
tree: Tree,
|
|
options: RollupProjectSchema
|
|
) {
|
|
const task = await rollupInitGenerator(tree, {
|
|
...options,
|
|
skipFormat: true,
|
|
});
|
|
checkForTargetConflicts(tree, options);
|
|
addBuildTarget(tree, options);
|
|
await formatFiles(tree);
|
|
return task;
|
|
}
|
|
|
|
function checkForTargetConflicts(tree: Tree, options: RollupProjectSchema) {
|
|
if (options.skipValidation) return;
|
|
const project = readProjectConfiguration(tree, options.project);
|
|
if (project.targets?.build) {
|
|
throw new Error(
|
|
`Project "${options.project}" already has a build target. Pass --skipValidation to ignore this error.`
|
|
);
|
|
}
|
|
}
|
|
|
|
function addBuildTarget(tree: Tree, options: RollupProjectSchema) {
|
|
const project = readProjectConfiguration(tree, options.project);
|
|
const packageJsonPath = joinPathFragments(project.root, 'package.json');
|
|
|
|
if (!tree.exists(packageJsonPath)) {
|
|
const { npmScope } = getWorkspaceLayout(tree);
|
|
const importPath =
|
|
options.importPath || getImportPath(npmScope, options.project);
|
|
writeJson(tree, packageJsonPath, {
|
|
name: importPath,
|
|
version: '0.0.1',
|
|
});
|
|
}
|
|
const tsConfig =
|
|
options.tsConfig ?? joinPathFragments(project.root, 'tsconfig.lib.json');
|
|
|
|
const buildOptions: RollupExecutorOptions = {
|
|
main: options.main ?? joinPathFragments(project.root, 'src/main.ts'),
|
|
outputPath: joinPathFragments('dist', project.root),
|
|
compiler: options.compiler ?? 'babel',
|
|
tsConfig,
|
|
project: `${project.root}/package.json`,
|
|
external: options.external,
|
|
};
|
|
|
|
if (options.rollupConfig) {
|
|
buildOptions.rollupConfig = options.rollupConfig;
|
|
}
|
|
|
|
if (tree.exists(joinPathFragments(project.root, 'README.md'))) {
|
|
buildOptions.assets = [
|
|
{
|
|
glob: `${project.root}/README.md`,
|
|
input: '.',
|
|
output: '.',
|
|
},
|
|
];
|
|
}
|
|
|
|
updateProjectConfiguration(tree, options.project, {
|
|
...project,
|
|
targets: {
|
|
...project.targets,
|
|
build: {
|
|
executor: '@nrwl/rollup:rollup',
|
|
outputs: ['{options.outputPath}'],
|
|
defaultConfiguration: 'production',
|
|
options: buildOptions,
|
|
configurations: {
|
|
production: {
|
|
optimization: true,
|
|
sourceMap: false,
|
|
namedChunks: false,
|
|
extractLicenses: true,
|
|
vendorChunk: false,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
export default rollupProjectGenerator;
|
|
|
|
export const rollupProjectSchematic = convertNxGenerator(
|
|
rollupProjectGenerator
|
|
);
|