@lcap/nasl
Version:
NetEase Application Specific Language
144 lines • 14.3 kB
TypeScript
import { babelTypes, naslTypes, ParseNaturalTSState } from './utils';
export interface LogicTransformOptions {
transformType: 'logic';
logicType: 'global_logic' | 'view_logic' | 'event_logic';
logic: naslTypes.Logic;
/**
* 是否是默认值或属性中的受限表达式
*
* 受限表达式不支持函数调用
*/
isRestricted?: boolean;
/**
* 在前端不能使用数据查询组件
*/
isInFrontend?: boolean;
entityAsNames?: Array<string>;
typeAnnotation?: naslTypes.TypeAnnotation;
logicNames?: Array<string>;
transformNodeFunction?: typeof transform2LogicItem;
inOqlIdentifierNamespace?: string;
inCallQueryComponentField?: CallQueryComponentChainNode['calleeName'];
needThrowError?: boolean;
parsingId?: number;
}
export interface AttrTransformOptions {
transformType: 'attr';
/**
* 是否是默认值或属性中的受限表达式
*
* 受限表达式不支持函数调用
*/
isRestricted?: boolean;
/**
* 在前端不能使用数据查询组件
*/
isInFrontend?: boolean;
typeAnnotation?: naslTypes.TypeAnnotation;
transformNodeFunction?: typeof transform2LogicItem;
needThrowError?: boolean;
parsingId?: number;
}
export type TransformOptions = (LogicTransformOptions | AttrTransformOptions) & ParseNaturalTSState;
export type TransformPair<B extends babelTypes.Node, N extends naslTypes.LogicItemNode> = [
B['type'] | ((node: B) => boolean),
(node: B, options: TransformOptions) => N | void
];
export type TransformCallExpressionPair = [
string | ((node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[]) => boolean),
(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions) => naslTypes.LogicItemNode | void
];
export declare class TransformManager {
private transforms;
private transformCallExpressions;
register<B extends babelTypes.Node, N extends naslTypes.LogicItemNode>(type: TransformPair<B, N>[0], transform: TransformPair<B, N>[1]): void;
registerCallExpression(type: TransformCallExpressionPair[0], transform: TransformCallExpressionPair[1]): void;
apply(node: babelTypes.Node, options: TransformOptions): void | naslTypes.SubLogic | naslTypes.AnonymousFunction | naslTypes.Abort | naslTypes.Start | naslTypes.End | naslTypes.IfStatement | naslTypes.SwitchStatement | naslTypes.SwitchCase | naslTypes.ForEachStatement | naslTypes.WhileStatement | naslTypes.Break | naslTypes.Continue | naslTypes.Assignment | naslTypes.BatchAssignment | naslTypes.Comment | naslTypes.CallLogic | naslTypes.CallEvent | naslTypes.CallFunction | naslTypes.CallInterface | naslTypes.Destination | naslTypes.ExternalDestination | naslTypes.ValidationRule | naslTypes.ValidationLogic | naslTypes.Argument | naslTypes.Anchor | naslTypes.JSBlock | naslTypes.JavaLogic | naslTypes.Block | naslTypes.Identifier | naslTypes.NullLiteral | naslTypes.BooleanLiteral | naslTypes.StringLiteral | naslTypes.StringInterpolation | naslTypes.NumericLiteral | naslTypes.BinaryExpression | naslTypes.VariadicExpression | naslTypes.MatchCase | naslTypes.Match | naslTypes.UnaryExpression | naslTypes.MemberExpression | naslTypes.Unparsed | naslTypes.New | naslTypes.NewComposite | naslTypes.NewStructure | naslTypes.NewList | naslTypes.NewMap | naslTypes.NewRegex | naslTypes.Paginate | naslTypes.CallQueryComponent | naslTypes.QuerySelectExpression | naslTypes.QueryFromExpression | naslTypes.QueryJoinExpression | naslTypes.QueryFieldExpression | naslTypes.QueryAggregateExpression | naslTypes.QueryOrderByExpression | naslTypes.QueryGroupByExpression | naslTypes.QueryLimitExpression | naslTypes.SqlQueryComponent | naslTypes.OqlQueryComponent | naslTypes.ProcessOutcome | naslTypes.Assignee | naslTypes.ProcessOutcomes;
}
export declare function fixExpression(arg: any, options: TransformOptions, supportSubLogic?: boolean): any;
/**
* 铺平点选表达式
*/
export declare function flatMemberExpression(node: babelTypes.Node): Array<babelTypes.Node>;
/**
* 将铺平的点选表达式列表转换回 MemberExpression
*/
export declare function unflatMemberExpression(nodes: Array<babelTypes.Identifier>, options: TransformOptions, memberExpression?: naslTypes.MemberExpression, namespace?: string): naslTypes.MemberExpression;
export declare function getSelectMembers(node: naslTypes.LogicItemNode): Array<naslTypes.MemberExpression>;
export declare function flatMatchPatternsExpression(node: any): Array<babelTypes.Node>;
export declare function flatIfStatementForMatch(node: babelTypes.IfStatement): Array<babelTypes.Node>;
/**
* 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
* @param node
* @returns
*/
export declare function fixLogicNode(node: babelTypes.Node): void;
export declare function transform2Param(node: babelTypes.Identifier | babelTypes.AssignmentPattern | babelTypes.ObjectProperty | babelTypes.TSPropertySignature, options: TransformOptions): naslTypes.Param | void;
export declare function transformCallExpressionToBinaryExpression(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.BinaryExpression | naslTypes.UnaryExpression;
export declare function transform2VariadicExpression(node: babelTypes.LogicalExpression, options: TransformOptions): naslTypes.VariadicExpression;
export declare function transform2BinaryExpression(node: babelTypes.BinaryExpression | babelTypes.LogicalExpression, options: TransformOptions): naslTypes.BinaryExpression | naslTypes.VariadicExpression | naslTypes.UnaryExpression | naslTypes.Match | void;
export declare function transform2IfStatement(node: babelTypes.IfStatement, options: TransformOptions): naslTypes.SwitchStatement | naslTypes.IfStatement;
export declare function transform2Continue(): naslTypes.Continue;
export declare function transform2Break(): naslTypes.Break;
export declare function transform2WhileStatement(node: babelTypes.WhileStatement, options: TransformOptions): naslTypes.WhileStatement;
export declare function transformSwitchStatement2Match(node: babelTypes.SwitchStatement, options: TransformOptions): naslTypes.Match;
export declare function transformIdentifier(node: babelTypes.Identifier, options: TransformOptions): naslTypes.QueryFieldExpression | naslTypes.MemberExpression | naslTypes.Identifier | naslTypes.NullLiteral;
export declare function transform2AnonymousFunction(node: babelTypes.ArrowFunctionExpression, options: TransformOptions): naslTypes.AnonymousFunction | void;
export declare function transform2Assignment(node: babelTypes.AssignmentExpression, options: TransformOptions): naslTypes.Assignment | naslTypes.BinaryExpression;
export declare function transformUpdateExpression2Assignment(node: babelTypes.UpdateExpression, options: TransformOptions): naslTypes.Assignment;
export declare function transform2BooleanLiteral(node: babelTypes.BooleanLiteral, options: TransformOptions): naslTypes.BooleanLiteral;
export declare function transform2StringLiteral(node: babelTypes.StringLiteral, options: TransformOptions): naslTypes.StringLiteral;
export declare function transform2DirectiveLiteral(node: babelTypes.Directive, options: TransformOptions): naslTypes.StringLiteral;
export declare function transform2NumericLiteral(node: babelTypes.NumericLiteral, options: TransformOptions): naslTypes.NumericLiteral;
export declare function transform2NullLiteral(node: babelTypes.NullLiteral, options: TransformOptions): naslTypes.NullLiteral;
export declare function transformReturnStatement2AssignmentOrEnd(node: babelTypes.ReturnStatement, options: TransformOptions): naslTypes.Assignment | naslTypes.End;
export declare function transform2StringInterpolation(node: babelTypes.TemplateLiteral, options: TransformOptions): naslTypes.StringInterpolation;
export declare function transform2Comment(node: any, options: TransformOptions): naslTypes.Comment;
export declare function transform2PartialNewComposite(node: babelTypes.ObjectExpression, options: TransformOptions): naslTypes.NewComposite;
export declare function transform2NewRegex(node: babelTypes.NewExpression | babelTypes.RegExpLiteral, options: TransformOptions): naslTypes.NewRegex;
export declare function transformNewExpression(node: babelTypes.NewExpression, options: TransformOptions): naslTypes.LogicItemNode;
export declare function transformMemberExpression(node: babelTypes.MemberExpression | babelTypes.OptionalMemberExpression, options: TransformOptions): naslTypes.CallFunction | naslTypes.QueryFieldExpression | naslTypes.MemberExpression | naslTypes.Identifier | void;
/**
* @example (function match(_value) {
if (_value === true) {
return 'green'
} else {
return 'red'
}
})(nasl.util.Convert<Boolean>(enabled))
*/
export declare function transformCallFunctionExpression2Match(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.Match | void;
export declare function transformCall2CallViewElementLogic(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.MemberExpression | naslTypes.Assignment | naslTypes.CallLogic | void;
export declare function transformCall2CallEntityLogic(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic | void;
export declare function transformCall2CallDataSourceLogic(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic | void;
export declare function transformCall2ConsoleLog(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic | void;
export declare function transformCall2Logging(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic | void;
export declare function transformCall2JSONFunctions(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic;
export declare function transform2CallEventLogic(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic;
export declare function transform2CallOtherNASLLogic(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic;
export declare function transform2CallFunction(node: babelTypes.CallExpression, calleeName: string, argument: babelTypes.Node[], options: TransformOptions): naslTypes.CallFunction | naslTypes.MemberExpression | void;
export declare function transformCall2CallFunction(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.BinaryExpression | naslTypes.NewList | naslTypes.NewMap | naslTypes.NewComposite | naslTypes.CallFunction | naslTypes.MemberExpression | void;
export declare function transform2UIFunction(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.Destination | naslTypes.CallLogic | naslTypes.ExternalDestination | void;
export declare function transformMap2ListTransform(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallFunction;
export declare function transform2ForEachStatement(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.ForEachStatement;
export declare function transformForOf2ForEachStatement(node: babelTypes.ForOfStatement, options: TransformOptions): naslTypes.ForEachStatement;
export declare function transformForEach2ForEachStatement(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.ForEachStatement;
export declare function transformAlert2ShowMessage(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic | void;
export declare function transformCall2Interface(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallInterface | void;
export declare function transformCall2Connector(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallConnector | void;
export declare function transformCall2Extension(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic | void;
export declare function transformCall2CallViewLogic(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic | void;
export declare function transformCall2Logic(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic | naslTypes.CallFunction | naslTypes.CallFunction | naslTypes.MemberExpression | void;
export declare function transformCall2LogicWithAuth(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.CallLogic | void;
export declare function transformCall2Paginate(node: babelTypes.CallExpression, calleeName: string, callee: babelTypes.Node[], options: TransformOptions): naslTypes.Paginate;
type CallQueryComponentChainNode = {
calleeName: 'FROM' | 'INNER_JOIN' | 'LEFT_JOIN' | 'RIGHT_JOIN' | 'OUTER_JOIN';
arguments: [babelTypes.MemberExpression, babelTypes.Identifier, babelTypes.BinaryExpression | babelTypes.LogicalExpression];
} | {
calleeName: 'WHERE' | 'HAVING' | 'GROUP_BY' | 'ORDER_BY' | 'SELECT' | 'AGGR_SELECT';
arguments: Array<babelTypes.Expression>;
};
export declare function transformNode2Directory(node: babelTypes.ObjectProperty): naslTypes.Directory;
export declare function transform2LogicItem(node: babelTypes.Node, options: TransformOptions): naslTypes.LogicItemNode | undefined;
export {};
//# sourceMappingURL=transform2LogicItem.d.ts.map