UNPKG

aws-ddk-core

Version:

The AWS DataOps Development Kit is an open source development framework for customers that build data workflows and modern data architecture on AWS.

867 lines (738 loc) 21.6 kB
export interface Node { start: number end: number type: string range?: [number, number] loc?: SourceLocation | null } export interface SourceLocation { source?: string | null start: Position end: Position } export interface Position { /** 1-based */ line: number /** 0-based */ column: number } export interface Identifier extends Node { type: "Identifier" name: string } export interface Literal extends Node { type: "Literal" value?: string | boolean | null | number | RegExp | bigint raw?: string regex?: { pattern: string flags: string } bigint?: string } export interface Program extends Node { type: "Program" body: Array<Statement | ModuleDeclaration> sourceType: "script" | "module" } export interface Function extends Node { id?: Identifier | null params: Array<Pattern> body: BlockStatement | Expression generator: boolean expression: boolean async: boolean } export interface ExpressionStatement extends Node { type: "ExpressionStatement" expression: Expression | Literal directive?: string } export interface BlockStatement extends Node { type: "BlockStatement" body: Array<Statement> } export interface EmptyStatement extends Node { type: "EmptyStatement" } export interface DebuggerStatement extends Node { type: "DebuggerStatement" } export interface WithStatement extends Node { type: "WithStatement" object: Expression body: Statement } export interface ReturnStatement extends Node { type: "ReturnStatement" argument?: Expression | null } export interface LabeledStatement extends Node { type: "LabeledStatement" label: Identifier body: Statement } export interface BreakStatement extends Node { type: "BreakStatement" label?: Identifier | null } export interface ContinueStatement extends Node { type: "ContinueStatement" label?: Identifier | null } export interface IfStatement extends Node { type: "IfStatement" test: Expression consequent: Statement alternate?: Statement | null } export interface SwitchStatement extends Node { type: "SwitchStatement" discriminant: Expression cases: Array<SwitchCase> } export interface SwitchCase extends Node { type: "SwitchCase" test?: Expression | null consequent: Array<Statement> } export interface ThrowStatement extends Node { type: "ThrowStatement" argument: Expression } export interface TryStatement extends Node { type: "TryStatement" block: BlockStatement handler?: CatchClause | null finalizer?: BlockStatement | null } export interface CatchClause extends Node { type: "CatchClause" param?: Pattern | null body: BlockStatement } export interface WhileStatement extends Node { type: "WhileStatement" test: Expression body: Statement } export interface DoWhileStatement extends Node { type: "DoWhileStatement" body: Statement test: Expression } export interface ForStatement extends Node { type: "ForStatement" init?: VariableDeclaration | Expression | null test?: Expression | null update?: Expression | null body: Statement } export interface ForInStatement extends Node { type: "ForInStatement" left: VariableDeclaration | Pattern right: Expression body: Statement } export interface FunctionDeclaration extends Function { type: "FunctionDeclaration" id: Identifier body: BlockStatement } export interface VariableDeclaration extends Node { type: "VariableDeclaration" declarations: Array<VariableDeclarator> kind: "var" | "let" | "const" } export interface VariableDeclarator extends Node { type: "VariableDeclarator" id: Pattern init?: Expression | null } export interface ThisExpression extends Node { type: "ThisExpression" } export interface ArrayExpression extends Node { type: "ArrayExpression" elements: Array<Expression | SpreadElement | null> } export interface ObjectExpression extends Node { type: "ObjectExpression" properties: Array<Property | SpreadElement> } export interface Property extends Node { type: "Property" key: Expression value: Expression kind: "init" | "get" | "set" method: boolean shorthand: boolean computed: boolean } export interface FunctionExpression extends Function { type: "FunctionExpression" body: BlockStatement } export interface UnaryExpression extends Node { type: "UnaryExpression" operator: UnaryOperator prefix: boolean argument: Expression } export type UnaryOperator = "-" | "+" | "!" | "~" | "typeof" | "void" | "delete" export interface UpdateExpression extends Node { type: "UpdateExpression" operator: UpdateOperator argument: Expression prefix: boolean } export type UpdateOperator = "++" | "--" export interface BinaryExpression extends Node { type: "BinaryExpression" operator: BinaryOperator left: Expression | PrivateIdentifier right: Expression } export type BinaryOperator = "==" | "!=" | "===" | "!==" | "<" | "<=" | ">" | ">=" | "<<" | ">>" | ">>>" | "+" | "-" | "*" | "/" | "%" | "|" | "^" | "&" | "in" | "instanceof" | "**" export interface AssignmentExpression extends Node { type: "AssignmentExpression" operator: AssignmentOperator left: Pattern right: Expression } export type AssignmentOperator = "=" | "+=" | "-=" | "*=" | "/=" | "%=" | "<<=" | ">>=" | ">>>=" | "|=" | "^=" | "&=" | "**=" | "||=" | "&&=" | "??=" export interface LogicalExpression extends Node { type: "LogicalExpression" operator: LogicalOperator left: Expression right: Expression } export type LogicalOperator = "||" | "&&" | "??" export interface MemberExpression extends Node { type: "MemberExpression" object: Expression | Super property: Expression | PrivateIdentifier computed: boolean optional: boolean } export interface ConditionalExpression extends Node { type: "ConditionalExpression" test: Expression alternate: Expression consequent: Expression } export interface CallExpression extends Node { type: "CallExpression" callee: Expression | Super arguments: Array<Expression | SpreadElement> optional: boolean } export interface NewExpression extends Node { type: "NewExpression" callee: Expression arguments: Array<Expression | SpreadElement> } export interface SequenceExpression extends Node { type: "SequenceExpression" expressions: Array<Expression> } export interface ForOfStatement extends Node { type: "ForOfStatement" left: VariableDeclaration | Pattern right: Expression body: Statement await: boolean } export interface Super extends Node { type: "Super" } export interface SpreadElement extends Node { type: "SpreadElement" argument: Expression } export interface ArrowFunctionExpression extends Function { type: "ArrowFunctionExpression" } export interface YieldExpression extends Node { type: "YieldExpression" argument?: Expression | null delegate: boolean } export interface TemplateLiteral extends Node { type: "TemplateLiteral" quasis: Array<TemplateElement> expressions: Array<Expression> } export interface TaggedTemplateExpression extends Node { type: "TaggedTemplateExpression" tag: Expression quasi: TemplateLiteral } export interface TemplateElement extends Node { type: "TemplateElement" tail: boolean value: { cooked?: string | null raw: string } } export interface AssignmentProperty extends Node { type: "Property" key: Expression value: Pattern kind: "init" method: false shorthand: boolean computed: boolean } export interface ObjectPattern extends Node { type: "ObjectPattern" properties: Array<AssignmentProperty | RestElement> } export interface ArrayPattern extends Node { type: "ArrayPattern" elements: Array<Pattern | null> } export interface RestElement extends Node { type: "RestElement" argument: Pattern } export interface AssignmentPattern extends Node { type: "AssignmentPattern" left: Pattern right: Expression } export interface Class extends Node { id?: Identifier | null superClass?: Expression | null body: ClassBody } export interface ClassBody extends Node { type: "ClassBody" body: Array<MethodDefinition | PropertyDefinition | StaticBlock> } export interface MethodDefinition extends Node { type: "MethodDefinition" key: Expression | PrivateIdentifier value: FunctionExpression kind: "constructor" | "method" | "get" | "set" computed: boolean static: boolean } export interface ClassDeclaration extends Class { type: "ClassDeclaration" id: Identifier } export interface ClassExpression extends Class { type: "ClassExpression" } export interface MetaProperty extends Node { type: "MetaProperty" meta: Identifier property: Identifier } export interface ImportDeclaration extends Node { type: "ImportDeclaration" specifiers: Array<ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier> source: Literal attributes: Array<ImportAttribute> } export interface ImportSpecifier extends Node { type: "ImportSpecifier" imported: Identifier | Literal local: Identifier } export interface ImportDefaultSpecifier extends Node { type: "ImportDefaultSpecifier" local: Identifier } export interface ImportNamespaceSpecifier extends Node { type: "ImportNamespaceSpecifier" local: Identifier } export interface ImportAttribute extends Node { type: "ImportAttribute" key: Identifier | Literal value: Literal } export interface ExportNamedDeclaration extends Node { type: "ExportNamedDeclaration" declaration?: Declaration | null specifiers: Array<ExportSpecifier> source?: Literal | null attributes: Array<ImportAttribute> } export interface ExportSpecifier extends Node { type: "ExportSpecifier" exported: Identifier | Literal local: Identifier | Literal } export interface AnonymousFunctionDeclaration extends Function { type: "FunctionDeclaration" id: null body: BlockStatement } export interface AnonymousClassDeclaration extends Class { type: "ClassDeclaration" id: null } export interface ExportDefaultDeclaration extends Node { type: "ExportDefaultDeclaration" declaration: AnonymousFunctionDeclaration | FunctionDeclaration | AnonymousClassDeclaration | ClassDeclaration | Expression } export interface ExportAllDeclaration extends Node { type: "ExportAllDeclaration" source: Literal exported?: Identifier | Literal | null attributes: Array<ImportAttribute> } export interface AwaitExpression extends Node { type: "AwaitExpression" argument: Expression } export interface ChainExpression extends Node { type: "ChainExpression" expression: MemberExpression | CallExpression } export interface ImportExpression extends Node { type: "ImportExpression" source: Expression options: Expression | null } export interface ParenthesizedExpression extends Node { type: "ParenthesizedExpression" expression: Expression } export interface PropertyDefinition extends Node { type: "PropertyDefinition" key: Expression | PrivateIdentifier value?: Expression | null computed: boolean static: boolean } export interface PrivateIdentifier extends Node { type: "PrivateIdentifier" name: string } export interface StaticBlock extends Node { type: "StaticBlock" body: Array<Statement> } export type Statement = | ExpressionStatement | BlockStatement | EmptyStatement | DebuggerStatement | WithStatement | ReturnStatement | LabeledStatement | BreakStatement | ContinueStatement | IfStatement | SwitchStatement | ThrowStatement | TryStatement | WhileStatement | DoWhileStatement | ForStatement | ForInStatement | ForOfStatement | Declaration export type Declaration = | FunctionDeclaration | VariableDeclaration | ClassDeclaration export type Expression = | Identifier | Literal | ThisExpression | ArrayExpression | ObjectExpression | FunctionExpression | UnaryExpression | UpdateExpression | BinaryExpression | AssignmentExpression | LogicalExpression | MemberExpression | ConditionalExpression | CallExpression | NewExpression | SequenceExpression | ArrowFunctionExpression | YieldExpression | TemplateLiteral | TaggedTemplateExpression | ClassExpression | MetaProperty | AwaitExpression | ChainExpression | ImportExpression | ParenthesizedExpression export type Pattern = | Identifier | MemberExpression | ObjectPattern | ArrayPattern | RestElement | AssignmentPattern export type ModuleDeclaration = | ImportDeclaration | ExportNamedDeclaration | ExportDefaultDeclaration | ExportAllDeclaration export type AnyNode = Statement | Expression | Declaration | ModuleDeclaration | Literal | Program | SwitchCase | CatchClause | Property | Super | SpreadElement | TemplateElement | AssignmentProperty | ObjectPattern | ArrayPattern | RestElement | AssignmentPattern | ClassBody | MethodDefinition | MetaProperty | ImportAttribute | ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier | ExportSpecifier | AnonymousFunctionDeclaration | AnonymousClassDeclaration | PropertyDefinition | PrivateIdentifier | StaticBlock | VariableDeclarator export function parse(input: string, options: Options): Program export function parseExpressionAt(input: string, pos: number, options: Options): Expression export function tokenizer(input: string, options: Options): { getToken(): Token [Symbol.iterator](): Iterator<Token> } export type ecmaVersion = 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | "latest" export interface Options { /** * `ecmaVersion` indicates the ECMAScript version to parse. Can be a * number, either in year (`2022`) or plain version number (`6`) form, * or `"latest"` (the latest the library supports). This influences * support for strict mode, the set of reserved words, and support for * new syntax features. */ ecmaVersion: ecmaVersion /** * `sourceType` indicates the mode the code should be parsed in. * Can be either `"script"` or `"module"`. This influences global * strict mode and parsing of `import` and `export` declarations. */ sourceType?: "script" | "module" /** * a callback that will be called when a semicolon is automatically inserted. * @param lastTokEnd the position of the comma as an offset * @param lastTokEndLoc location if {@link locations} is enabled */ onInsertedSemicolon?: (lastTokEnd: number, lastTokEndLoc?: Position) => void /** * similar to `onInsertedSemicolon`, but for trailing commas * @param lastTokEnd the position of the comma as an offset * @param lastTokEndLoc location if `locations` is enabled */ onTrailingComma?: (lastTokEnd: number, lastTokEndLoc?: Position) => void /** * By default, reserved words are only enforced if ecmaVersion >= 5. * Set `allowReserved` to a boolean value to explicitly turn this on * an off. When this option has the value "never", reserved words * and keywords can also not be used as property names. */ allowReserved?: boolean | "never" /** * When enabled, a return at the top level is not considered an error. */ allowReturnOutsideFunction?: boolean /** * When enabled, import/export statements are not constrained to * appearing at the top of the program, and an import.meta expression * in a script isn't considered an error. */ allowImportExportEverywhere?: boolean /** * By default, `await` identifiers are allowed to appear at the top-level scope only if {@link ecmaVersion} >= 2022. * When enabled, await identifiers are allowed to appear at the top-level scope, * but they are still not allowed in non-async functions. */ allowAwaitOutsideFunction?: boolean /** * When enabled, super identifiers are not constrained to * appearing in methods and do not raise an error when they appear elsewhere. */ allowSuperOutsideMethod?: boolean /** * When enabled, hashbang directive in the beginning of file is * allowed and treated as a line comment. Enabled by default when * {@link ecmaVersion} >= 2023. */ allowHashBang?: boolean /** * By default, the parser will verify that private properties are * only used in places where they are valid and have been declared. * Set this to false to turn such checks off. */ checkPrivateFields?: boolean /** * When `locations` is on, `loc` properties holding objects with * `start` and `end` properties as {@link Position} objects will be attached to the * nodes. */ locations?: boolean /** * a callback that will cause Acorn to call that export function with object in the same * format as tokens returned from `tokenizer().getToken()`. Note * that you are not allowed to call the parser from the * callback—that will corrupt its internal state. */ onToken?: ((token: Token) => void) | Token[] /** * This takes a export function or an array. * * When a export function is passed, Acorn will call that export function with `(block, text, start, * end)` parameters whenever a comment is skipped. `block` is a * boolean indicating whether this is a block (`/* *\/`) comment, * `text` is the content of the comment, and `start` and `end` are * character offsets that denote the start and end of the comment. * When the {@link locations} option is on, two more parameters are * passed, the full locations of {@link Position} export type of the start and * end of the comments. * * When a array is passed, each found comment of {@link Comment} export type is pushed to the array. * * Note that you are not allowed to call the * parser from the callback—that will corrupt its internal state. */ onComment?: (( isBlock: boolean, text: string, start: number, end: number, startLoc?: Position, endLoc?: Position ) => void) | Comment[] /** * Nodes have their start and end characters offsets recorded in * `start` and `end` properties (directly on the node, rather than * the `loc` object, which holds line/column data. To also add a * [semi-standardized][range] `range` property holding a `[start, * end]` array with the same numbers, set the `ranges` option to * `true`. */ ranges?: boolean /** * It is possible to parse multiple files into a single AST by * passing the tree produced by parsing the first file as * `program` option in subsequent parses. This will add the * toplevel forms of the parsed file to the `Program` (top) node * of an existing parse tree. */ program?: Node /** * When {@link locations} is on, you can pass this to record the source * file in every node's `loc` object. */ sourceFile?: string /** * This value, if given, is stored in every node, whether {@link locations} is on or off. */ directSourceFile?: string /** * When enabled, parenthesized expressions are represented by * (non-standard) ParenthesizedExpression nodes */ preserveParens?: boolean } export class Parser { options: Options input: string protected constructor(options: Options, input: string, startPos?: number) parse(): Program static parse(input: string, options: Options): Program static parseExpressionAt(input: string, pos: number, options: Options): Expression static tokenizer(input: string, options: Options): { getToken(): Token [Symbol.iterator](): Iterator<Token> } static extend(...plugins: ((BaseParser: typeof Parser) => typeof Parser)[]): typeof Parser } export const defaultOptions: Options export function getLineInfo(input: string, offset: number): Position export class TokenType { label: string keyword: string | undefined } export const tokTypes: { num: TokenType regexp: TokenType string: TokenType name: TokenType privateId: TokenType eof: TokenType bracketL: TokenType bracketR: TokenType braceL: TokenType braceR: TokenType parenL: TokenType parenR: TokenType comma: TokenType semi: TokenType colon: TokenType dot: TokenType question: TokenType questionDot: TokenType arrow: TokenType template: TokenType invalidTemplate: TokenType ellipsis: TokenType backQuote: TokenType dollarBraceL: TokenType eq: TokenType assign: TokenType incDec: TokenType prefix: TokenType logicalOR: TokenType logicalAND: TokenType bitwiseOR: TokenType bitwiseXOR: TokenType bitwiseAND: TokenType equality: TokenType relational: TokenType bitShift: TokenType plusMin: TokenType modulo: TokenType star: TokenType slash: TokenType starstar: TokenType coalesce: TokenType _break: TokenType _case: TokenType _catch: TokenType _continue: TokenType _debugger: TokenType _default: TokenType _do: TokenType _else: TokenType _finally: TokenType _for: TokenType _function: TokenType _if: TokenType _return: TokenType _switch: TokenType _throw: TokenType _try: TokenType _var: TokenType _const: TokenType _while: TokenType _with: TokenType _new: TokenType _this: TokenType _super: TokenType _class: TokenType _extends: TokenType _export: TokenType _import: TokenType _null: TokenType _true: TokenType _false: TokenType _in: TokenType _instanceof: TokenType _typeof: TokenType _void: TokenType _delete: TokenType } export interface Comment { type: "Line" | "Block" value: string start: number end: number loc?: SourceLocation range?: [number, number] } export class Token { type: TokenType start: number end: number loc?: SourceLocation range?: [number, number] } export const version: string