From e3b8664259d39ce0a3fed7a523d58f484c9f19cd Mon Sep 17 00:00:00 2001 From: meixg Date: Wed, 20 Apr 2022 20:23:09 +0800 Subject: [PATCH] feat: support custom output data --- src/ast/renderer-ast-dfn.ts | 12 ++++++++++-- src/ast/renderer-ast-walker.ts | 1 + src/compilers/anode-compiler.ts | 20 ++++++++++++++++++-- src/target-js/js-emitter.ts | 5 +++++ 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/ast/renderer-ast-dfn.ts b/src/ast/renderer-ast-dfn.ts index e660e708..d9fb2bb6 100644 --- a/src/ast/renderer-ast-dfn.ts +++ b/src/ast/renderer-ast-dfn.ts @@ -66,14 +66,15 @@ export enum SyntaxKind { TryStatement = 36, CatchClause = 37, ComponentClassReference = 38, - CreateComponentPrototype = 39 + CreateComponentPrototype = 39, + Typeof = 40 } export type Expression = Identifier | FunctionDefinition | Literal | BinaryExpression | UnaryExpression | CreateComponentInstance | NewExpression | MapLiteral | ComponentRendererReference | FunctionCall | Null | Undefined | MapAssign | ArrayIncludes | ConditionalExpression | FilterCall | HelperCall | EncodeURIComponent | ArrayLiteral | RegexpReplace | JSONStringify | ComputedCall | GetRootCtxCall | ComponentReferenceLiteral | - SlotRendererDefinition | SlotRenderCall | ComponentClassReference | CreateComponentPrototype + SlotRendererDefinition | SlotRenderCall | ComponentClassReference | CreateComponentPrototype | Typeof export type Statement = ReturnStatement | ImportHelper | VariableDefinition | AssignmentStatement | If | ElseIf | Else | Foreach | ExpressionStatement | TryStatement @@ -425,3 +426,10 @@ export class ReturnStatement implements SyntaxNode { public value: Expression ) {} } + +export class Typeof implements SyntaxNode { + public readonly kind = SyntaxKind.Typeof + constructor ( + public value: Expression + ) {} +} diff --git a/src/ast/renderer-ast-walker.ts b/src/ast/renderer-ast-walker.ts index bdeaffda..cbe7fb47 100644 --- a/src/ast/renderer-ast-walker.ts +++ b/src/ast/renderer-ast-walker.ts @@ -17,6 +17,7 @@ export function * walk (node: Expression | Statement): Iterable') ] } diff --git a/src/target-js/js-emitter.ts b/src/target-js/js-emitter.ts index 324c8b20..8d3a76a0 100644 --- a/src/target-js/js-emitter.ts +++ b/src/target-js/js-emitter.ts @@ -209,6 +209,11 @@ export class JSEmitter extends Emitter { this.write(') ') this.writeBlockStatements(node.handler.body) break + case SyntaxKind.Typeof: + this.write('typeof (') + this.writeSyntaxNode(node.value) + this.write(')') + break default: assertNever(node) } }