UNPKG

@aurelia/expression-parser

Version:

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/) [![CircleCI](https://circleci.com/

279 lines 14.1 kB
import type { IVisitor } from './ast.visitor'; export type ExpressionKind = 'AccessThis' | 'AccessGlobal' | 'AccessBoundary' | 'AccessScope' | 'ArrayLiteral' | 'ObjectLiteral' | 'PrimitiveLiteral' | 'New' | 'Template' | 'Unary' | 'CallScope' | 'CallMember' | 'CallFunction' | 'CallGlobal' | 'AccessMember' | 'AccessKeyed' | 'TaggedTemplate' | 'Binary' | 'Conditional' | 'Assign' | 'ArrowFunction' | 'ValueConverter' | 'BindingBehavior' | 'ArrayBindingPattern' | 'ObjectBindingPattern' | 'BindingIdentifier' | 'ForOfStatement' | 'Interpolation' | 'ArrayDestructuring' | 'ObjectDestructuring' | 'DestructuringAssignmentLeaf' | 'Custom'; export type UnaryOperator = 'void' | 'typeof' | '!' | '-' | '+' | '++' | '--'; export type BinaryOperator = '??' | '&&' | '||' | '==' | '===' | '!=' | '!==' | 'instanceof' | 'in' | '+' | '-' | '*' | '/' | '%' | '**' | '<' | '>' | '<=' | '>='; export type AssignmentOperator = '=' | '/=' | '*=' | '+=' | '-='; export type IsPrimary = AccessThisExpression | AccessBoundaryExpression | AccessScopeExpression | AccessGlobalExpression | ArrayLiteralExpression | ObjectLiteralExpression | PrimitiveLiteralExpression | TemplateExpression | NewExpression; export type IsLiteral = ArrayLiteralExpression | ObjectLiteralExpression | PrimitiveLiteralExpression | TemplateExpression; export type IsLeftHandSide = IsPrimary | CallGlobalExpression | CallFunctionExpression | CallMemberExpression | CallScopeExpression | AccessMemberExpression | AccessKeyedExpression | TaggedTemplateExpression; export type IsUnary = IsLeftHandSide | UnaryExpression; export type IsBinary = IsUnary | BinaryExpression; export type IsConditional = IsBinary | ConditionalExpression; export type IsAssign = IsConditional | AssignExpression | ArrowFunction; export type IsValueConverter = IsAssign | ValueConverterExpression; export type IsBindingBehavior = IsValueConverter | BindingBehaviorExpression; export type IsAssignable = AccessScopeExpression | AccessKeyedExpression | AccessMemberExpression | AssignExpression; export type IsExpression = IsBindingBehavior | Interpolation; export type BindingIdentifierOrPattern = BindingIdentifier | ArrayBindingPattern | ObjectBindingPattern; export type IsExpressionOrStatement = IsExpression | ForOfStatement | BindingIdentifierOrPattern | DestructuringAssignmentExpression | DestructuringAssignmentSingleExpression | DestructuringAssignmentRestExpression; export type AnyBindingExpression<TCustom extends CustomExpression = CustomExpression> = Interpolation | ForOfStatement | TCustom | IsBindingBehavior; export declare class CustomExpression { readonly value: unknown; readonly $kind = "Custom"; constructor(value: unknown); evaluate(...params: unknown[]): unknown; assign(...params: unknown[]): unknown; bind(...params: unknown[]): void; unbind(...params: unknown[]): void; accept<T>(_visitor: IVisitor<T>): T; } export interface BindingBehaviorExpression { readonly $kind: 'BindingBehavior'; readonly key: string; readonly expression: IsBindingBehavior; readonly name: string; readonly args: readonly IsAssign[]; } export declare function createBindingBehaviorExpression(expression: IsBindingBehavior, name: string, args: readonly IsAssign[]): BindingBehaviorExpression; export interface ValueConverterExpression { readonly $kind: 'ValueConverter'; readonly expression: IsValueConverter; readonly name: string; readonly args: readonly IsAssign[]; } export declare function createValueConverterExpression(expression: IsValueConverter, name: string, args: readonly IsAssign[]): ValueConverterExpression; export interface AssignExpression { readonly $kind: 'Assign'; readonly target: IsAssignable; readonly value: IsAssign; readonly op: AssignmentOperator; } export declare function createAssignExpression(target: IsAssignable, value: IsAssign, op?: AssignmentOperator): AssignExpression; export interface ConditionalExpression { readonly $kind: 'Conditional'; readonly condition: IsBinary; readonly yes: IsAssign; readonly no: IsAssign; } export declare function createConditionalExpression(condition: IsBinary, yes: IsAssign, no: IsAssign): ConditionalExpression; export interface AccessGlobalExpression { readonly $kind: 'AccessGlobal'; readonly name: string; } export declare function createAccessGlobalExpression(name: string): AccessGlobalExpression; export interface AccessThisExpression { readonly $kind: 'AccessThis'; readonly ancestor: number; } export declare function createAccessThisExpression(ancestor?: number): AccessThisExpression; export interface AccessBoundaryExpression { readonly $kind: 'AccessBoundary'; } export declare const AccessBoundary: AccessBoundaryExpression; export declare function createAccessBoundaryExpression(): AccessBoundaryExpression; export interface AccessScopeExpression { readonly $kind: 'AccessScope'; readonly name: string; readonly ancestor: number; } export declare function createAccessScopeExpression(name: string, ancestor?: number): AccessScopeExpression; export interface AccessMemberExpression { readonly $kind: 'AccessMember'; readonly accessGlobal: boolean; readonly object: IsLeftHandSide; readonly name: string; readonly optional: boolean; } export declare function createAccessMemberExpression(object: IsLeftHandSide, name: string, optional?: boolean): AccessMemberExpression; export interface AccessKeyedExpression { readonly $kind: 'AccessKeyed'; readonly accessGlobal: boolean; readonly object: IsLeftHandSide; readonly key: IsAssign; readonly optional: boolean; } export declare function createAccessKeyedExpression(object: IsLeftHandSide, key: IsAssign, optional?: boolean): AccessKeyedExpression; export interface NewExpression { readonly $kind: 'New'; readonly func: IsLeftHandSide; readonly args: readonly IsAssign[]; } export declare function createNewExpression(func: IsLeftHandSide, args: readonly IsAssign[]): NewExpression; export interface CallScopeExpression { readonly $kind: 'CallScope'; readonly name: string; readonly args: readonly IsAssign[]; readonly ancestor: number; readonly optional: boolean; } export declare function createCallScopeExpression(name: string, args: readonly IsAssign[], ancestor?: number, optional?: boolean): CallScopeExpression; export interface CallMemberExpression { readonly $kind: 'CallMember'; readonly object: IsLeftHandSide; readonly name: string; readonly args: readonly IsAssign[]; readonly optionalMember: boolean; readonly optionalCall: boolean; } export declare function createCallMemberExpression(object: IsLeftHandSide, name: string, args: readonly IsAssign[], optionalMember?: boolean, optionalCall?: boolean): CallMemberExpression; export interface CallFunctionExpression { readonly $kind: 'CallFunction'; readonly func: IsLeftHandSide; readonly args: readonly IsAssign[]; readonly optional: boolean; } export declare function createCallFunctionExpression(func: IsLeftHandSide, args: readonly IsAssign[], optional?: boolean): CallFunctionExpression; export interface CallGlobalExpression { readonly $kind: 'CallGlobal'; readonly name: string; readonly args: readonly IsAssign[]; } export declare function createCallGlobalExpression(name: string, args: readonly IsAssign[]): CallGlobalExpression; export interface BinaryExpression { readonly $kind: 'Binary'; readonly operation: BinaryOperator; readonly left: IsBinary; readonly right: IsBinary; } export declare function createBinaryExpression(operation: BinaryOperator, left: IsBinary, right: IsBinary): BinaryExpression; export interface UnaryExpression { readonly $kind: 'Unary'; readonly operation: UnaryOperator; readonly expression: IsLeftHandSide; readonly pos: 0 | 1; } export declare function createUnaryExpression(operation: UnaryOperator, expression: IsLeftHandSide, pos?: 0 | 1): UnaryExpression; export interface PrimitiveLiteralExpression<TValue extends null | undefined | number | boolean | string = null | undefined | number | boolean | string> { readonly $kind: 'PrimitiveLiteral'; readonly value: TValue; } export declare const PrimitiveLiteral: { $undefined: { $kind: "PrimitiveLiteral"; value: undefined; }; $null: { $kind: "PrimitiveLiteral"; value: null; }; $true: { $kind: "PrimitiveLiteral"; value: true; }; $false: { $kind: "PrimitiveLiteral"; value: false; }; $empty: { $kind: "PrimitiveLiteral"; value: string; }; }; export declare function createPrimitiveLiteralExpression<T extends null | undefined | number | boolean | string>(value: T): PrimitiveLiteralExpression<T>; export interface ArrayLiteralExpression { readonly $kind: 'ArrayLiteral'; readonly elements: readonly IsAssign[]; } export declare const ArrayLiteral: { $empty: { $kind: "ArrayLiteral"; elements: any[]; }; }; export declare function createArrayLiteralExpression(elements: readonly IsAssign[]): ArrayLiteralExpression; export interface ObjectLiteralExpression { readonly $kind: 'ObjectLiteral'; readonly keys: readonly (number | string)[]; readonly values: readonly IsAssign[]; } export declare const ObjectLiteral: { $empty: { $kind: "ObjectLiteral"; keys: any[]; values: any[]; }; }; export declare function createObjectLiteralExpression(keys: readonly (number | string)[], values: readonly IsAssign[]): ObjectLiteralExpression; export interface TemplateExpression { readonly $kind: 'Template'; readonly cooked: readonly string[]; readonly expressions: readonly IsAssign[]; } export declare const Template: { $empty: { $kind: "Template"; cooked: string[]; expressions: any[]; }; }; export declare function createTemplateExpression(cooked: readonly string[], expressions?: readonly IsAssign[]): TemplateExpression; export interface TaggedTemplateExpression { readonly $kind: 'TaggedTemplate'; readonly cooked: readonly string[] & { raw?: readonly string[]; }; readonly func: IsLeftHandSide; readonly expressions: readonly IsAssign[]; } export declare function createTaggedTemplateExpression(cooked: readonly string[] & { raw?: readonly string[]; }, raw: readonly string[], func: IsLeftHandSide, expressions?: readonly IsAssign[]): TaggedTemplateExpression; export interface ArrayBindingPattern { readonly $kind: 'ArrayBindingPattern'; readonly elements: readonly IsAssign[]; } export declare function createArrayBindingPattern(elements: readonly IsAssign[]): ArrayBindingPattern; export interface ObjectBindingPattern { readonly $kind: 'ObjectBindingPattern'; readonly keys: readonly (string | number)[]; readonly values: readonly IsAssign[]; } export declare function createObjectBindingPattern(keys: readonly (string | number)[], values: readonly IsAssign[]): ObjectBindingPattern; export interface BindingIdentifier { readonly $kind: 'BindingIdentifier'; readonly name: string; } export declare function createBindingIdentifier(name: string): BindingIdentifier; export interface ForOfStatement { readonly $kind: 'ForOfStatement'; readonly declaration: BindingIdentifierOrPattern | DestructuringAssignmentExpression; readonly iterable: IsBindingBehavior; readonly semiIdx: number; } export declare function createForOfStatement(declaration: BindingIdentifierOrPattern | DestructuringAssignmentExpression, iterable: IsBindingBehavior, semiIdx: number): ForOfStatement; export interface Interpolation { readonly $kind: 'Interpolation'; readonly isMulti: boolean; readonly firstExpression: IsBindingBehavior; readonly parts: readonly string[]; readonly expressions: readonly IsBindingBehavior[]; } export declare function createInterpolation(parts: readonly string[], expressions?: readonly IsBindingBehavior[]): Interpolation; export interface DestructuringAssignmentExpression { readonly $kind: 'ArrayDestructuring' | 'ObjectDestructuring'; readonly list: readonly (DestructuringAssignmentExpression | DestructuringAssignmentSingleExpression | DestructuringAssignmentRestExpression)[]; readonly source: AccessMemberExpression | AccessKeyedExpression | undefined; readonly initializer: IsBindingBehavior | undefined; } export declare function createDestructuringAssignmentExpression($kind: 'ArrayDestructuring' | 'ObjectDestructuring', list: readonly (DestructuringAssignmentExpression | DestructuringAssignmentSingleExpression | DestructuringAssignmentRestExpression)[], source: AccessMemberExpression | AccessKeyedExpression | undefined, initializer: IsBindingBehavior | undefined): DestructuringAssignmentExpression; export interface DestructuringAssignmentSingleExpression { readonly $kind: 'DestructuringAssignmentLeaf'; readonly target: AccessMemberExpression; readonly source: AccessMemberExpression | AccessKeyedExpression; readonly initializer: IsBindingBehavior | undefined; } export declare function createDestructuringAssignmentSingleExpression(target: AccessMemberExpression, source: AccessMemberExpression | AccessKeyedExpression, initializer: IsBindingBehavior | undefined): DestructuringAssignmentSingleExpression; export interface DestructuringAssignmentRestExpression { readonly $kind: 'DestructuringAssignmentLeaf'; readonly target: AccessMemberExpression; readonly indexOrProperties: string[] | number; } export declare function createDestructuringAssignmentRestExpression(target: AccessMemberExpression, indexOrProperties: string[] | number): DestructuringAssignmentRestExpression; export interface ArrowFunction { readonly $kind: 'ArrowFunction'; readonly args: BindingIdentifier[]; readonly body: IsAssign; readonly rest: boolean; } export declare function createArrowFunction(args: BindingIdentifier[], body: IsAssign, rest?: boolean): ArrowFunction; //# sourceMappingURL=ast.d.ts.map