83 lines
2.1 KiB
TypeScript
83 lines
2.1 KiB
TypeScript
import type { Tree } from '@nrwl/devkit';
|
|
import {
|
|
joinPathFragments,
|
|
logger,
|
|
names,
|
|
readProjectConfiguration,
|
|
stripIndents,
|
|
} from '@nrwl/devkit';
|
|
import { locateLibraryEntryPointFromDirectory } from './entry-point';
|
|
import type { FileInfo } from './file-info';
|
|
import { getRelativeImportToFile } from './path';
|
|
|
|
export type GenerationOptions = {
|
|
name: string;
|
|
project: string;
|
|
export?: boolean;
|
|
inlineScam?: boolean;
|
|
};
|
|
|
|
export function exportScam(
|
|
tree: Tree,
|
|
fileInfo: FileInfo,
|
|
options: GenerationOptions
|
|
): void {
|
|
if (!options.export) {
|
|
return;
|
|
}
|
|
|
|
const { projectType, root, sourceRoot } = readProjectConfiguration(
|
|
tree,
|
|
options.project
|
|
);
|
|
const projectSourceRoot = sourceRoot ?? joinPathFragments(root, 'src');
|
|
|
|
if (projectType === 'application') {
|
|
logger.warn(
|
|
'--export=true was ignored as the project the SCAM is being generated in is not a library.'
|
|
);
|
|
|
|
return;
|
|
}
|
|
|
|
const entryPointPath = locateLibraryEntryPointFromDirectory(
|
|
tree,
|
|
fileInfo.directory,
|
|
root,
|
|
projectSourceRoot
|
|
);
|
|
if (!entryPointPath) {
|
|
// Let's not error, simply warn the user
|
|
// It's not too much effort to manually do this
|
|
// It would be more frustrating to have to find the correct path and re-run the command
|
|
logger.warn(
|
|
`Could not export SCAM. Unable to determine project's entry point. SCAM has still been created.`
|
|
);
|
|
|
|
return;
|
|
}
|
|
|
|
const relativePathFromEntryPoint = getRelativeImportToFile(
|
|
entryPointPath,
|
|
fileInfo.filePath
|
|
);
|
|
const entryPointContent = tree.read(entryPointPath, 'utf-8');
|
|
let updatedEntryPointContent = stripIndents`${entryPointContent}
|
|
export * from "${relativePathFromEntryPoint}";`;
|
|
|
|
if (!options.inlineScam) {
|
|
const moduleFilePath = joinPathFragments(
|
|
fileInfo.directory,
|
|
`${names(options.name).fileName}.module.ts`
|
|
);
|
|
const relativePathFromModule = getRelativeImportToFile(
|
|
entryPointPath,
|
|
moduleFilePath
|
|
);
|
|
updatedEntryPointContent = stripIndents`${updatedEntryPointContent}
|
|
export * from "${relativePathFromModule}";`;
|
|
}
|
|
|
|
tree.write(entryPointPath, updatedEntryPointContent);
|
|
}
|