Jason Jean 3d4f590c07
fix(core): do not add typescript in new empty repos (#15163)
Co-authored-by: Emily Xiong <xiongemi@gmail.com>
2023-02-27 12:08:36 -05:00

93 lines
2.3 KiB
TypeScript

import { Schema } from './schema';
import {
applyChangesToString,
convertNxGenerator,
formatFiles,
generateFiles,
getProjects,
joinPathFragments,
toJS,
Tree,
} from '@nrwl/devkit';
import { NormalizedSchema, normalizeOptions } from './lib/normalize-options';
import { addImport } from './lib/add-import';
import { ensureTypescript } from '@nrwl/js/src/utils/typescript/ensure-typescript';
export async function reactNativeComponentGenerator(
host: Tree,
schema: Schema
) {
const options = await normalizeOptions(host, schema);
createComponentFiles(host, options);
addExportsToBarrel(host, options);
await formatFiles(host);
}
function createComponentFiles(host: Tree, options: NormalizedSchema) {
const componentDir = joinPathFragments(
options.projectSourceRoot,
options.directory
);
generateFiles(host, joinPathFragments(__dirname, './files'), componentDir, {
...options,
tmpl: '',
});
for (const c of host.listChanges()) {
let deleteFile = false;
if (options.skipTests && /.*spec.tsx/.test(c.path)) {
deleteFile = true;
}
if (deleteFile) {
host.delete(c.path);
}
}
if (options.js) {
toJS(host);
}
}
let tsModule: typeof import('typescript');
function addExportsToBarrel(host: Tree, options: NormalizedSchema) {
if (!tsModule) {
tsModule = ensureTypescript();
}
const workspace = getProjects(host);
const isApp = workspace.get(options.project).projectType === 'application';
if (options.export && !isApp) {
const indexFilePath = joinPathFragments(
options.projectSourceRoot,
options.js ? 'index.js' : 'index.ts'
);
const indexSource = host.read(indexFilePath, 'utf-8');
if (indexSource !== null) {
const indexSourceFile = tsModule.createSourceFile(
indexFilePath,
indexSource,
tsModule.ScriptTarget.Latest,
true
);
const changes = applyChangesToString(
indexSource,
addImport(
indexSourceFile,
`export * from './${options.directory}/${options.fileName}';`
)
);
host.write(indexFilePath, changes);
}
}
}
export default reactNativeComponentGenerator;
export const reactNativeComponentSchematic = convertNxGenerator(
reactNativeComponentGenerator
);