Initial commit
This commit is contained in:
62
tools/apigen.ts
Normal file
62
tools/apigen.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import {
|
||||
AST_NODE_TYPES,
|
||||
createProgram,
|
||||
parse
|
||||
} from '@typescript-eslint/typescript-estree';
|
||||
import * as fs from 'fs';
|
||||
import {
|
||||
Decorator,
|
||||
ExportDefaultDeclaration,
|
||||
FunctionExpression,
|
||||
Literal
|
||||
} from '@typescript-eslint/types/dist/generated/ast-spec';
|
||||
|
||||
const program = createProgram('tsconfig.json');
|
||||
const ast = parse(fs.readFileSync('src/controller/filesystem.ts').toString(), {
|
||||
programs: [program]
|
||||
});
|
||||
|
||||
function parseDecorators(decs: Decorator[]): object[] | null {
|
||||
try {
|
||||
return decs.map((dec) => {
|
||||
if (dec.expression.type !== AST_NODE_TYPES.CallExpression)
|
||||
throw null;
|
||||
if (dec.expression.callee.type != AST_NODE_TYPES.Identifier)
|
||||
throw null;
|
||||
const name = dec.expression.callee.name;
|
||||
if (name === 'Request') throw null;
|
||||
const prop = (
|
||||
dec.expression.arguments
|
||||
.filter((arg) => arg.type === AST_NODE_TYPES.Literal)
|
||||
.pop() as Literal
|
||||
).value;
|
||||
return { name: name, prop: prop };
|
||||
});
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function parseFunction(name: string, func: FunctionExpression) {
|
||||
const decs = func.params
|
||||
.map((p) => p.decorators)
|
||||
.map(parseDecorators)
|
||||
.filter((d) => d !== null);
|
||||
console.log(name, decs);
|
||||
}
|
||||
|
||||
ast.body
|
||||
.filter((body) => body.type == AST_NODE_TYPES.ExportDefaultDeclaration)
|
||||
.forEach((body: ExportDefaultDeclaration) => {
|
||||
if (body.declaration.type !== AST_NODE_TYPES.ClassDeclaration) return;
|
||||
if (body.declaration.body.type !== AST_NODE_TYPES.ClassBody) return;
|
||||
body.declaration.body.body.forEach((def) => {
|
||||
if (
|
||||
def.type === AST_NODE_TYPES.MethodDefinition &&
|
||||
'name' in def.key &&
|
||||
def.key.name !== 'constructor' &&
|
||||
def.value.type === AST_NODE_TYPES.FunctionExpression
|
||||
)
|
||||
parseFunction(def.key.name, def.value);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user