36 lines
854 B
TypeScript
36 lines
854 B
TypeScript
import type * as ts from 'typescript';
|
|
import { findNodes } from '@nx/js';
|
|
import { ChangeType, StringChange } from '@nx/devkit';
|
|
import { ensureTypescript } from '@nx/js/src/utils/typescript/ensure-typescript';
|
|
|
|
let tsModule: typeof import('typescript');
|
|
|
|
export function addImport(
|
|
source: ts.SourceFile,
|
|
statement: string
|
|
): StringChange[] {
|
|
if (!tsModule) {
|
|
tsModule = ensureTypescript();
|
|
}
|
|
|
|
const allImports = findNodes(source, tsModule.SyntaxKind.ImportDeclaration);
|
|
if (allImports.length > 0) {
|
|
const lastImport = allImports[allImports.length - 1];
|
|
return [
|
|
{
|
|
type: ChangeType.Insert,
|
|
index: lastImport.end + 1,
|
|
text: `\n${statement}\n`,
|
|
},
|
|
];
|
|
} else {
|
|
return [
|
|
{
|
|
type: ChangeType.Insert,
|
|
index: 0,
|
|
text: `\n${statement}\n`,
|
|
},
|
|
];
|
|
}
|
|
}
|