mirror of
https://github.com/danielsogl/awesome-cordova-plugins.git
synced 2026-04-13 00:00:10 +08:00
62956e429c
Replace all implicit and explicit any types in build scripts with proper TypeScript Compiler API types (Decorator, ClassDeclaration, MethodDeclaration, Identifier, SourceFile, etc.). Add PackageJson and InjectableClassEntry interfaces. Fix return types, null checks, and type assertions throughout all transformer scripts.
60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import { unlinkSync, writeFileSync } from 'node:fs';
|
|
import { resolve } from 'node:path';
|
|
import { ClassDeclaration, SyntaxKind, TransformationContext, visitEachChild } from 'typescript';
|
|
|
|
import { hasDecorator, ROOT } from '../helpers';
|
|
|
|
export interface InjectableClassEntry {
|
|
file: string;
|
|
className: string;
|
|
dirName: string;
|
|
}
|
|
|
|
const injectableClasses: InjectableClassEntry[] = [];
|
|
export const EMIT_PATH = resolve(ROOT, 'injectable-classes.json');
|
|
|
|
/**
|
|
* This transformer extracts all the injectable classes
|
|
* so we can use all the names later on when we compile
|
|
* an es5 bundle.
|
|
*
|
|
* Every injectable class will end up in the
|
|
* window['IonicNative'] object.
|
|
*/
|
|
export function extractInjectables() {
|
|
return (ctx: TransformationContext) => {
|
|
return (tsSourceFile: any) => {
|
|
if (tsSourceFile.fileName.indexOf('src/@awesome-cordova-plugins/plugins') > -1) {
|
|
visitEachChild(
|
|
tsSourceFile,
|
|
(node) => {
|
|
if (node.kind !== SyntaxKind.ClassDeclaration) {
|
|
return node;
|
|
}
|
|
|
|
const isInjectable: boolean = hasDecorator('Injectable', node);
|
|
if (isInjectable) {
|
|
injectableClasses.push({
|
|
file: tsSourceFile.path,
|
|
className: (node as ClassDeclaration).name!.text,
|
|
dirName: tsSourceFile.path.split(/[\\\/]+/).reverse()[1],
|
|
});
|
|
}
|
|
},
|
|
ctx
|
|
);
|
|
}
|
|
|
|
return tsSourceFile;
|
|
};
|
|
};
|
|
}
|
|
|
|
export function emitInjectableClasses() {
|
|
writeFileSync(EMIT_PATH, JSON.stringify(injectableClasses, null, 2));
|
|
}
|
|
|
|
export function cleanEmittedData() {
|
|
unlinkSync(EMIT_PATH);
|
|
}
|