rawsql-ts 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +16 -16
- package/dist/esm/index.min.js.map +3 -3
- package/dist/esm/src/index.d.ts +12 -0
- package/dist/esm/src/index.js +11 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/models/Clause.d.ts +7 -3
- package/dist/esm/src/models/Clause.js +17 -4
- package/dist/esm/src/models/Clause.js.map +1 -1
- package/dist/esm/src/models/DDLStatements.d.ts +14 -2
- package/dist/esm/src/models/DDLStatements.js +12 -0
- package/dist/esm/src/models/DDLStatements.js.map +1 -1
- package/dist/esm/src/models/InsertQuery.d.ts +1 -4
- package/dist/esm/src/models/InsertQuery.js +3 -5
- package/dist/esm/src/models/InsertQuery.js.map +1 -1
- package/dist/esm/src/models/SqlPrintToken.d.ts +1 -0
- package/dist/esm/src/models/SqlPrintToken.js +1 -0
- package/dist/esm/src/models/SqlPrintToken.js.map +1 -1
- package/dist/esm/src/models/TableDefinitionModel.d.ts +39 -0
- package/dist/esm/src/models/TableDefinitionModel.js +77 -0
- package/dist/esm/src/models/TableDefinitionModel.js.map +1 -0
- package/dist/esm/src/models/ValuesQuery.d.ts +2 -0
- package/dist/esm/src/models/ValuesQuery.js +1 -0
- package/dist/esm/src/models/ValuesQuery.js.map +1 -1
- package/dist/esm/src/parsers/AlterTableParser.js +1 -1
- package/dist/esm/src/parsers/AlterTableParser.js.map +1 -1
- package/dist/esm/src/parsers/InsertQueryParser.js +4 -1
- package/dist/esm/src/parsers/InsertQueryParser.js.map +1 -1
- package/dist/esm/src/parsers/ReturningClauseParser.js +33 -47
- package/dist/esm/src/parsers/ReturningClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlParser.d.ts +0 -1
- package/dist/esm/src/parsers/SqlParser.js +44 -58
- package/dist/esm/src/parsers/SqlParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlPrintTokenParser.d.ts +1 -0
- package/dist/esm/src/parsers/SqlPrintTokenParser.js +23 -5
- package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js +7 -0
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js.map +1 -1
- package/dist/esm/src/transformers/DDLDiffGenerator.d.ts +14 -0
- package/dist/esm/src/transformers/DDLDiffGenerator.js +197 -0
- package/dist/esm/src/transformers/DDLDiffGenerator.js.map +1 -0
- package/dist/esm/src/transformers/DDLGeneralizer.d.ts +13 -0
- package/dist/esm/src/transformers/DDLGeneralizer.js +98 -0
- package/dist/esm/src/transformers/DDLGeneralizer.js.map +1 -0
- package/dist/esm/src/transformers/DDLToFixtureConverter.d.ts +19 -0
- package/dist/esm/src/transformers/DDLToFixtureConverter.js +202 -0
- package/dist/esm/src/transformers/DDLToFixtureConverter.js.map +1 -0
- package/dist/esm/src/transformers/DeleteResultSelectConverter.d.ts +53 -0
- package/dist/esm/src/transformers/DeleteResultSelectConverter.js +394 -0
- package/dist/esm/src/transformers/DeleteResultSelectConverter.js.map +1 -0
- package/dist/esm/src/transformers/FixtureCteBuilder.d.ts +60 -0
- package/dist/esm/src/transformers/FixtureCteBuilder.js +147 -0
- package/dist/esm/src/transformers/FixtureCteBuilder.js.map +1 -0
- package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.js +5 -2
- package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.js.map +1 -1
- package/dist/esm/src/transformers/InsertResultSelectConverter.d.ts +64 -0
- package/dist/esm/src/transformers/InsertResultSelectConverter.js +495 -0
- package/dist/esm/src/transformers/InsertResultSelectConverter.js.map +1 -0
- package/dist/esm/src/transformers/MergeResultSelectConverter.d.ts +38 -0
- package/dist/esm/src/transformers/MergeResultSelectConverter.js +306 -0
- package/dist/esm/src/transformers/MergeResultSelectConverter.js.map +1 -0
- package/dist/esm/src/transformers/QueryBuilder.d.ts +11 -0
- package/dist/esm/src/transformers/QueryBuilder.js +19 -3
- package/dist/esm/src/transformers/QueryBuilder.js.map +1 -1
- package/dist/esm/src/transformers/SelectResultSelectConverter.d.ts +10 -0
- package/dist/esm/src/transformers/SelectResultSelectConverter.js +32 -0
- package/dist/esm/src/transformers/SelectResultSelectConverter.js.map +1 -0
- package/dist/esm/src/transformers/SimulatedSelectConverter.d.ts +23 -0
- package/dist/esm/src/transformers/SimulatedSelectConverter.js +61 -0
- package/dist/esm/src/transformers/SimulatedSelectConverter.js.map +1 -0
- package/dist/esm/src/transformers/UpdateResultSelectConverter.d.ts +51 -0
- package/dist/esm/src/transformers/UpdateResultSelectConverter.js +340 -0
- package/dist/esm/src/transformers/UpdateResultSelectConverter.js.map +1 -0
- package/dist/esm/src/utils/SelectQueryWithClauseHelper.d.ts +12 -0
- package/dist/esm/src/utils/SelectQueryWithClauseHelper.js +43 -0
- package/dist/esm/src/utils/SelectQueryWithClauseHelper.js.map +1 -0
- package/dist/esm/src/utils/ValueComponentRewriter.d.ts +3 -0
- package/dist/esm/src/utils/ValueComponentRewriter.js +180 -0
- package/dist/esm/src/utils/ValueComponentRewriter.js.map +1 -0
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/formatters/OriginalFormatRestorer.js +139 -0
- package/dist/formatters/OriginalFormatRestorer.js.map +1 -0
- package/dist/index.js +144 -0
- package/dist/index.js.map +1 -0
- package/dist/index.min.js +17 -17
- package/dist/index.min.js.map +3 -3
- package/dist/models/BinarySelectQuery.js +198 -0
- package/dist/models/BinarySelectQuery.js.map +1 -0
- package/dist/models/CTEError.js +37 -0
- package/dist/models/CTEError.js.map +1 -0
- package/dist/models/Clause.js +535 -0
- package/dist/models/Clause.js.map +1 -0
- package/dist/models/CreateTableQuery.js +135 -0
- package/dist/models/CreateTableQuery.js.map +1 -0
- package/dist/models/DDLStatements.js +275 -0
- package/dist/models/DDLStatements.js.map +1 -0
- package/dist/models/DeleteQuery.js +20 -0
- package/dist/models/DeleteQuery.js.map +1 -0
- package/dist/models/FormattingLexeme.js +3 -0
- package/dist/models/FormattingLexeme.js.map +1 -0
- package/dist/models/HintClause.js +41 -0
- package/dist/models/HintClause.js.map +1 -0
- package/dist/models/InsertQuery.js +23 -0
- package/dist/models/InsertQuery.js.map +1 -0
- package/dist/models/KeywordTrie.js +54 -0
- package/dist/models/KeywordTrie.js.map +1 -0
- package/dist/models/Lexeme.js +22 -0
- package/dist/models/Lexeme.js.map +1 -0
- package/dist/models/MergeQuery.js +104 -0
- package/dist/models/MergeQuery.js.map +1 -0
- package/dist/models/SelectQuery.js +22 -0
- package/dist/models/SelectQuery.js.map +1 -0
- package/dist/models/SimpleSelectQuery.js +648 -0
- package/dist/models/SimpleSelectQuery.js.map +1 -0
- package/dist/models/SqlComponent.js +73 -0
- package/dist/models/SqlComponent.js.map +1 -0
- package/dist/models/SqlPrintToken.js +143 -0
- package/dist/models/SqlPrintToken.js.map +1 -0
- package/dist/models/TableDefinitionModel.js +86 -0
- package/dist/models/TableDefinitionModel.js.map +1 -0
- package/dist/models/UpdateQuery.js +29 -0
- package/dist/models/UpdateQuery.js.map +1 -0
- package/dist/models/ValueComponent.js +380 -0
- package/dist/models/ValueComponent.js.map +1 -0
- package/dist/models/ValuesQuery.js +62 -0
- package/dist/models/ValuesQuery.js.map +1 -0
- package/dist/parsers/AlterTableParser.js +490 -0
- package/dist/parsers/AlterTableParser.js.map +1 -0
- package/dist/parsers/AnalyzeStatementParser.js +94 -0
- package/dist/parsers/AnalyzeStatementParser.js.map +1 -0
- package/dist/parsers/CommandExpressionParser.js +213 -0
- package/dist/parsers/CommandExpressionParser.js.map +1 -0
- package/dist/parsers/CommonTableParser.js +177 -0
- package/dist/parsers/CommonTableParser.js.map +1 -0
- package/dist/parsers/CreateIndexParser.js +241 -0
- package/dist/parsers/CreateIndexParser.js.map +1 -0
- package/dist/parsers/CreateTableParser.js +738 -0
- package/dist/parsers/CreateTableParser.js.map +1 -0
- package/dist/parsers/DeleteClauseParser.js +37 -0
- package/dist/parsers/DeleteClauseParser.js.map +1 -0
- package/dist/parsers/DeleteQueryParser.js +77 -0
- package/dist/parsers/DeleteQueryParser.js.map +1 -0
- package/dist/parsers/DropConstraintParser.js +51 -0
- package/dist/parsers/DropConstraintParser.js.map +1 -0
- package/dist/parsers/DropIndexParser.js +73 -0
- package/dist/parsers/DropIndexParser.js.map +1 -0
- package/dist/parsers/DropTableParser.js +63 -0
- package/dist/parsers/DropTableParser.js.map +1 -0
- package/dist/parsers/ExplainStatementParser.js +189 -0
- package/dist/parsers/ExplainStatementParser.js.map +1 -0
- package/dist/parsers/FetchClauseParser.js +89 -0
- package/dist/parsers/FetchClauseParser.js.map +1 -0
- package/dist/parsers/ForClauseParser.js +58 -0
- package/dist/parsers/ForClauseParser.js.map +1 -0
- package/dist/parsers/FromClauseParser.js +54 -0
- package/dist/parsers/FromClauseParser.js.map +1 -0
- package/dist/parsers/FullNameParser.js +110 -0
- package/dist/parsers/FullNameParser.js.map +1 -0
- package/dist/parsers/FunctionExpressionParser.js +524 -0
- package/dist/parsers/FunctionExpressionParser.js.map +1 -0
- package/dist/parsers/GroupByParser.js +58 -0
- package/dist/parsers/GroupByParser.js.map +1 -0
- package/dist/parsers/HavingParser.js +36 -0
- package/dist/parsers/HavingParser.js.map +1 -0
- package/dist/parsers/IdentifierDecorator.js +17 -0
- package/dist/parsers/IdentifierDecorator.js.map +1 -0
- package/dist/parsers/IdentifierParser.js +15 -0
- package/dist/parsers/IdentifierParser.js.map +1 -0
- package/dist/parsers/InsertQueryParser.js +162 -0
- package/dist/parsers/InsertQueryParser.js.map +1 -0
- package/dist/parsers/JoinClauseParser.js +117 -0
- package/dist/parsers/JoinClauseParser.js.map +1 -0
- package/dist/parsers/JoinOnClauseParser.js +21 -0
- package/dist/parsers/JoinOnClauseParser.js.map +1 -0
- package/dist/parsers/JoinUsingClauseParser.js +23 -0
- package/dist/parsers/JoinUsingClauseParser.js.map +1 -0
- package/dist/parsers/KeywordParser.js +99 -0
- package/dist/parsers/KeywordParser.js.map +1 -0
- package/dist/parsers/LimitClauseParser.js +38 -0
- package/dist/parsers/LimitClauseParser.js.map +1 -0
- package/dist/parsers/LiteralParser.js +48 -0
- package/dist/parsers/LiteralParser.js.map +1 -0
- package/dist/parsers/MergeQueryParser.js +483 -0
- package/dist/parsers/MergeQueryParser.js.map +1 -0
- package/dist/parsers/OffsetClauseParser.js +42 -0
- package/dist/parsers/OffsetClauseParser.js.map +1 -0
- package/dist/parsers/OrderByClauseParser.js +108 -0
- package/dist/parsers/OrderByClauseParser.js.map +1 -0
- package/dist/parsers/OverExpressionParser.js +44 -0
- package/dist/parsers/OverExpressionParser.js.map +1 -0
- package/dist/parsers/ParameterDecorator.js +40 -0
- package/dist/parsers/ParameterDecorator.js.map +1 -0
- package/dist/parsers/ParameterExpressionParser.js +24 -0
- package/dist/parsers/ParameterExpressionParser.js.map +1 -0
- package/dist/parsers/ParenExpressionParser.js +109 -0
- package/dist/parsers/ParenExpressionParser.js.map +1 -0
- package/dist/parsers/ParseError.js +25 -0
- package/dist/parsers/ParseError.js.map +1 -0
- package/dist/parsers/PartitionByParser.js +53 -0
- package/dist/parsers/PartitionByParser.js.map +1 -0
- package/dist/parsers/ReturningClauseParser.js +64 -0
- package/dist/parsers/ReturningClauseParser.js.map +1 -0
- package/dist/parsers/SelectClauseParser.js +244 -0
- package/dist/parsers/SelectClauseParser.js.map +1 -0
- package/dist/parsers/SelectQueryParser.js +564 -0
- package/dist/parsers/SelectQueryParser.js.map +1 -0
- package/dist/parsers/SequenceParser.js +245 -0
- package/dist/parsers/SequenceParser.js.map +1 -0
- package/dist/parsers/SetClauseParser.js +125 -0
- package/dist/parsers/SetClauseParser.js.map +1 -0
- package/dist/parsers/SourceAliasExpressionParser.js +60 -0
- package/dist/parsers/SourceAliasExpressionParser.js.map +1 -0
- package/dist/parsers/SourceExpressionParser.js +69 -0
- package/dist/parsers/SourceExpressionParser.js.map +1 -0
- package/dist/parsers/SourceParser.js +144 -0
- package/dist/parsers/SourceParser.js.map +1 -0
- package/dist/parsers/SqlParser.js +431 -0
- package/dist/parsers/SqlParser.js.map +1 -0
- package/dist/parsers/SqlPrintTokenParser.js +3289 -0
- package/dist/parsers/SqlPrintTokenParser.js.map +1 -0
- package/dist/parsers/SqlTokenizer.js +553 -0
- package/dist/parsers/SqlTokenizer.js.map +1 -0
- package/dist/parsers/StringSpecifierExpressionParser.js +22 -0
- package/dist/parsers/StringSpecifierExpressionParser.js.map +1 -0
- package/dist/parsers/UnaryExpressionParser.js +39 -0
- package/dist/parsers/UnaryExpressionParser.js.map +1 -0
- package/dist/parsers/UpdateClauseParser.js +21 -0
- package/dist/parsers/UpdateClauseParser.js.map +1 -0
- package/dist/parsers/UpdateQueryParser.js +98 -0
- package/dist/parsers/UpdateQueryParser.js.map +1 -0
- package/dist/parsers/UsingClauseParser.js +33 -0
- package/dist/parsers/UsingClauseParser.js.map +1 -0
- package/dist/parsers/ValueParser.js +562 -0
- package/dist/parsers/ValueParser.js.map +1 -0
- package/dist/parsers/ValuesQueryParser.js +112 -0
- package/dist/parsers/ValuesQueryParser.js.map +1 -0
- package/dist/parsers/WhereClauseParser.js +51 -0
- package/dist/parsers/WhereClauseParser.js.map +1 -0
- package/dist/parsers/WindowClauseParser.js +57 -0
- package/dist/parsers/WindowClauseParser.js.map +1 -0
- package/dist/parsers/WindowExpressionParser.js +163 -0
- package/dist/parsers/WindowExpressionParser.js.map +1 -0
- package/dist/parsers/WithClauseParser.js +165 -0
- package/dist/parsers/WithClauseParser.js.map +1 -0
- package/dist/parsers/utils/LexemeCommentUtils.js +29 -0
- package/dist/parsers/utils/LexemeCommentUtils.js.map +1 -0
- package/dist/reporting/models/DataFlowEdge.js +58 -0
- package/dist/reporting/models/DataFlowEdge.js.map +1 -0
- package/dist/reporting/models/DataFlowGraph.js +138 -0
- package/dist/reporting/models/DataFlowGraph.js.map +1 -0
- package/dist/reporting/models/DataFlowNode.js +148 -0
- package/dist/reporting/models/DataFlowNode.js.map +1 -0
- package/dist/reporting/services/CTEHandler.js +58 -0
- package/dist/reporting/services/CTEHandler.js.map +1 -0
- package/dist/reporting/services/DataSourceHandler.js +95 -0
- package/dist/reporting/services/DataSourceHandler.js.map +1 -0
- package/dist/reporting/services/JoinHandler.js +84 -0
- package/dist/reporting/services/JoinHandler.js.map +1 -0
- package/dist/reporting/services/ProcessHandler.js +26 -0
- package/dist/reporting/services/ProcessHandler.js.map +1 -0
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.js +13 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/Clause.d.ts +7 -3
- package/dist/src/models/Clause.js +16 -3
- package/dist/src/models/Clause.js.map +1 -1
- package/dist/src/models/DDLStatements.d.ts +97 -2
- package/dist/src/models/DDLStatements.js +14 -1
- package/dist/src/models/DDLStatements.js.map +1 -1
- package/dist/src/models/InsertQuery.d.ts +1 -4
- package/dist/src/models/InsertQuery.js +3 -5
- package/dist/src/models/InsertQuery.js.map +1 -1
- package/dist/src/models/SqlPrintToken.d.ts +6 -0
- package/dist/src/models/SqlPrintToken.js +1 -0
- package/dist/src/models/SqlPrintToken.js.map +1 -1
- package/dist/src/models/TableDefinitionModel.d.ts +41 -0
- package/dist/src/models/TableDefinitionModel.js +85 -0
- package/dist/src/models/TableDefinitionModel.js.map +1 -0
- package/dist/src/models/ValueComponent.d.ts +2 -1
- package/dist/src/models/ValuesQuery.d.ts +2 -0
- package/dist/src/models/ValuesQuery.js +1 -0
- package/dist/src/models/ValuesQuery.js.map +1 -1
- package/dist/src/parsers/AlterTableParser.d.ts +1 -0
- package/dist/src/parsers/AlterTableParser.js +26 -5
- package/dist/src/parsers/AlterTableParser.js.map +1 -1
- package/dist/src/parsers/FunctionExpressionParser.d.ts +1 -0
- package/dist/src/parsers/InsertQueryParser.js +4 -1
- package/dist/src/parsers/InsertQueryParser.js.map +1 -1
- package/dist/src/parsers/ReturningClauseParser.js +33 -47
- package/dist/src/parsers/ReturningClauseParser.js.map +1 -1
- package/dist/src/parsers/SequenceParser.d.ts +16 -0
- package/dist/src/parsers/SqlParser.d.ts +4 -3
- package/dist/src/parsers/SqlParser.js +44 -63
- package/dist/src/parsers/SqlParser.js.map +1 -1
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +9 -0
- package/dist/src/parsers/SqlPrintTokenParser.js +22 -4
- package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/parsers/SqlTokenizer.d.ts +1 -0
- package/dist/src/tokenReaders/LiteralTokenReader.js +7 -0
- package/dist/src/tokenReaders/LiteralTokenReader.js.map +1 -1
- package/dist/src/transformers/DDLDiffGenerator.d.ts +18 -0
- package/dist/src/transformers/DDLDiffGenerator.js +313 -0
- package/dist/src/transformers/DDLDiffGenerator.js.map +1 -0
- package/dist/src/transformers/DDLGeneralizer.d.ts +13 -0
- package/dist/src/transformers/DDLGeneralizer.js +119 -0
- package/dist/src/transformers/DDLGeneralizer.js.map +1 -0
- package/dist/src/transformers/DDLToFixtureConverter.d.ts +19 -0
- package/dist/src/transformers/DDLToFixtureConverter.js +206 -0
- package/dist/src/transformers/DDLToFixtureConverter.js.map +1 -0
- package/dist/src/transformers/DeleteResultSelectConverter.d.ts +53 -0
- package/dist/src/transformers/DeleteResultSelectConverter.js +398 -0
- package/dist/src/transformers/DeleteResultSelectConverter.js.map +1 -0
- package/dist/src/transformers/FixtureCteBuilder.d.ts +60 -0
- package/dist/src/transformers/FixtureCteBuilder.js +151 -0
- package/dist/src/transformers/FixtureCteBuilder.js.map +1 -0
- package/dist/src/transformers/InsertQuerySelectValuesConverter.js +5 -2
- package/dist/src/transformers/InsertQuerySelectValuesConverter.js.map +1 -1
- package/dist/src/transformers/InsertResultSelectConverter.d.ts +67 -0
- package/dist/src/transformers/InsertResultSelectConverter.js +499 -0
- package/dist/src/transformers/InsertResultSelectConverter.js.map +1 -0
- package/dist/src/transformers/MergeResultSelectConverter.d.ts +38 -0
- package/dist/src/transformers/MergeResultSelectConverter.js +310 -0
- package/dist/src/transformers/MergeResultSelectConverter.js.map +1 -0
- package/dist/src/transformers/QueryBuilder.d.ts +11 -0
- package/dist/src/transformers/QueryBuilder.js +19 -3
- package/dist/src/transformers/QueryBuilder.js.map +1 -1
- package/dist/src/transformers/SelectResultSelectConverter.d.ts +10 -0
- package/dist/src/transformers/SelectResultSelectConverter.js +36 -0
- package/dist/src/transformers/SelectResultSelectConverter.js.map +1 -0
- package/dist/src/transformers/SimulatedSelectConverter.d.ts +23 -0
- package/dist/src/transformers/SimulatedSelectConverter.js +65 -0
- package/dist/src/transformers/SimulatedSelectConverter.js.map +1 -0
- package/dist/src/transformers/UpdateResultSelectConverter.d.ts +51 -0
- package/dist/src/transformers/UpdateResultSelectConverter.js +344 -0
- package/dist/src/transformers/UpdateResultSelectConverter.js.map +1 -0
- package/dist/src/types/GenericFixture.d.ts +17 -0
- package/dist/src/utils/SelectQueryWithClauseHelper.d.ts +12 -0
- package/dist/src/utils/SelectQueryWithClauseHelper.js +47 -0
- package/dist/src/utils/SelectQueryWithClauseHelper.js.map +1 -0
- package/dist/src/utils/TableNameUtils.d.ts +10 -0
- package/dist/src/utils/ValueComponentRewriter.d.ts +3 -0
- package/dist/src/utils/ValueComponentRewriter.js +183 -0
- package/dist/src/utils/ValueComponentRewriter.js.map +1 -0
- package/dist/tokenReaders/BaseTokenReader.js +86 -0
- package/dist/tokenReaders/BaseTokenReader.js.map +1 -0
- package/dist/tokenReaders/CommandTokenReader.js +221 -0
- package/dist/tokenReaders/CommandTokenReader.js.map +1 -0
- package/dist/tokenReaders/EscapedIdentifierTokenReader.js +99 -0
- package/dist/tokenReaders/EscapedIdentifierTokenReader.js.map +1 -0
- package/dist/tokenReaders/FunctionTokenReader.js +47 -0
- package/dist/tokenReaders/FunctionTokenReader.js.map +1 -0
- package/dist/tokenReaders/IdentifierTokenReader.js +34 -0
- package/dist/tokenReaders/IdentifierTokenReader.js.map +1 -0
- package/dist/tokenReaders/LiteralTokenReader.js +329 -0
- package/dist/tokenReaders/LiteralTokenReader.js.map +1 -0
- package/dist/tokenReaders/OperatorTokenReader.js +152 -0
- package/dist/tokenReaders/OperatorTokenReader.js.map +1 -0
- package/dist/tokenReaders/ParameterTokenReader.js +190 -0
- package/dist/tokenReaders/ParameterTokenReader.js.map +1 -0
- package/dist/tokenReaders/StringSpecifierTokenReader.js +31 -0
- package/dist/tokenReaders/StringSpecifierTokenReader.js.map +1 -0
- package/dist/tokenReaders/SymbolTokenReader.js +35 -0
- package/dist/tokenReaders/SymbolTokenReader.js.map +1 -0
- package/dist/tokenReaders/TokenReaderManager.js +110 -0
- package/dist/tokenReaders/TokenReaderManager.js.map +1 -0
- package/dist/tokenReaders/TypeTokenReader.js +69 -0
- package/dist/tokenReaders/TypeTokenReader.js.map +1 -0
- package/dist/transformers/AliasRenamer.js +600 -0
- package/dist/transformers/AliasRenamer.js.map +1 -0
- package/dist/transformers/CTEBuilder.js +188 -0
- package/dist/transformers/CTEBuilder.js.map +1 -0
- package/dist/transformers/CTECollector.js +409 -0
- package/dist/transformers/CTECollector.js.map +1 -0
- package/dist/transformers/CTEComposer.js +302 -0
- package/dist/transformers/CTEComposer.js.map +1 -0
- package/dist/transformers/CTEDependencyAnalyzer.js +285 -0
- package/dist/transformers/CTEDependencyAnalyzer.js.map +1 -0
- package/dist/transformers/CTEDependencyTracer.js +253 -0
- package/dist/transformers/CTEDependencyTracer.js.map +1 -0
- package/dist/transformers/CTEDisabler.js +355 -0
- package/dist/transformers/CTEDisabler.js.map +1 -0
- package/dist/transformers/CTEInjector.js +83 -0
- package/dist/transformers/CTEInjector.js.map +1 -0
- package/dist/transformers/CTENormalizer.js +46 -0
- package/dist/transformers/CTENormalizer.js.map +1 -0
- package/dist/transformers/CTEQueryDecomposer.js +589 -0
- package/dist/transformers/CTEQueryDecomposer.js.map +1 -0
- package/dist/transformers/CTERenamer.js +486 -0
- package/dist/transformers/CTERenamer.js.map +1 -0
- package/dist/transformers/CTETableReferenceCollector.js +358 -0
- package/dist/transformers/CTETableReferenceCollector.js.map +1 -0
- package/dist/transformers/ColumnReferenceCollector.js +478 -0
- package/dist/transformers/ColumnReferenceCollector.js.map +1 -0
- package/dist/transformers/DDLDiffGenerator.js +313 -0
- package/dist/transformers/DDLDiffGenerator.js.map +1 -0
- package/dist/transformers/DDLGeneralizer.js +119 -0
- package/dist/transformers/DDLGeneralizer.js.map +1 -0
- package/dist/transformers/DDLToFixtureConverter.js +206 -0
- package/dist/transformers/DDLToFixtureConverter.js.map +1 -0
- package/dist/transformers/DeleteResultSelectConverter.js +414 -0
- package/dist/transformers/DeleteResultSelectConverter.js.map +1 -0
- package/dist/transformers/DynamicQueryBuilder.js +164 -0
- package/dist/transformers/DynamicQueryBuilder.js.map +1 -0
- package/dist/transformers/EnhancedJsonMapping.js +223 -0
- package/dist/transformers/EnhancedJsonMapping.js.map +1 -0
- package/dist/transformers/FilterableItemCollector.js +259 -0
- package/dist/transformers/FilterableItemCollector.js.map +1 -0
- package/dist/transformers/FixtureCteBuilder.js +151 -0
- package/dist/transformers/FixtureCteBuilder.js.map +1 -0
- package/dist/transformers/FormatOptionResolver.js +67 -0
- package/dist/transformers/FormatOptionResolver.js.map +1 -0
- package/dist/transformers/Formatter.js +38 -0
- package/dist/transformers/Formatter.js.map +1 -0
- package/dist/transformers/InsertQuerySelectValuesConverter.js +125 -0
- package/dist/transformers/InsertQuerySelectValuesConverter.js.map +1 -0
- package/dist/transformers/InsertResultSelectConverter.js +589 -0
- package/dist/transformers/InsertResultSelectConverter.js.map +1 -0
- package/dist/transformers/JoinAggregationDecomposer.js +497 -0
- package/dist/transformers/JoinAggregationDecomposer.js.map +1 -0
- package/dist/transformers/JsonMappingConverter.js +392 -0
- package/dist/transformers/JsonMappingConverter.js.map +1 -0
- package/dist/transformers/JsonMappingUnifier.js +216 -0
- package/dist/transformers/JsonMappingUnifier.js.map +1 -0
- package/dist/transformers/LinePrinter.js +148 -0
- package/dist/transformers/LinePrinter.js.map +1 -0
- package/dist/transformers/MergeResultSelectConverter.js +310 -0
- package/dist/transformers/MergeResultSelectConverter.js.map +1 -0
- package/dist/transformers/ModelDrivenJsonMapping.js +122 -0
- package/dist/transformers/ModelDrivenJsonMapping.js.map +1 -0
- package/dist/transformers/OnelineFormattingHelper.js +99 -0
- package/dist/transformers/OnelineFormattingHelper.js.map +1 -0
- package/dist/transformers/ParameterCollector.js +37 -0
- package/dist/transformers/ParameterCollector.js.map +1 -0
- package/dist/transformers/PostgresArrayEntityCteBuilder.js +458 -0
- package/dist/transformers/PostgresArrayEntityCteBuilder.js.map +1 -0
- package/dist/transformers/PostgresJsonQueryBuilder.js +245 -0
- package/dist/transformers/PostgresJsonQueryBuilder.js.map +1 -0
- package/dist/transformers/PostgresObjectEntityCteBuilder.js +347 -0
- package/dist/transformers/PostgresObjectEntityCteBuilder.js.map +1 -0
- package/dist/transformers/QueryBuilder.js +649 -0
- package/dist/transformers/QueryBuilder.js.map +1 -0
- package/dist/transformers/QueryFlowDiagramGenerator.js +157 -0
- package/dist/transformers/QueryFlowDiagramGenerator.js.map +1 -0
- package/dist/transformers/SchemaCollector.js +523 -0
- package/dist/transformers/SchemaCollector.js.map +1 -0
- package/dist/transformers/SelectResultSelectConverter.js +36 -0
- package/dist/transformers/SelectResultSelectConverter.js.map +1 -0
- package/dist/transformers/SelectValueCollector.js +244 -0
- package/dist/transformers/SelectValueCollector.js.map +1 -0
- package/dist/transformers/SelectableColumnCollector.js +674 -0
- package/dist/transformers/SelectableColumnCollector.js.map +1 -0
- package/dist/transformers/SimulatedSelectConverter.js +65 -0
- package/dist/transformers/SimulatedSelectConverter.js.map +1 -0
- package/dist/transformers/SmartRenamer.js +422 -0
- package/dist/transformers/SmartRenamer.js.map +1 -0
- package/dist/transformers/SqlFormatter.js +77 -0
- package/dist/transformers/SqlFormatter.js.map +1 -0
- package/dist/transformers/SqlIdentifierRenamer.js +504 -0
- package/dist/transformers/SqlIdentifierRenamer.js.map +1 -0
- package/dist/transformers/SqlOutputToken.js +13 -0
- package/dist/transformers/SqlOutputToken.js.map +1 -0
- package/dist/transformers/SqlPaginationInjector.js +108 -0
- package/dist/transformers/SqlPaginationInjector.js.map +1 -0
- package/dist/transformers/SqlParamInjector.js +802 -0
- package/dist/transformers/SqlParamInjector.js.map +1 -0
- package/dist/transformers/SqlParameterBinder.js +70 -0
- package/dist/transformers/SqlParameterBinder.js.map +1 -0
- package/dist/transformers/SqlPrinter.js +1478 -0
- package/dist/transformers/SqlPrinter.js.map +1 -0
- package/dist/transformers/SqlSortInjector.js +153 -0
- package/dist/transformers/SqlSortInjector.js.map +1 -0
- package/dist/transformers/TableColumnResolver.js +3 -0
- package/dist/transformers/TableColumnResolver.js.map +1 -0
- package/dist/transformers/TableSourceCollector.js +439 -0
- package/dist/transformers/TableSourceCollector.js.map +1 -0
- package/dist/transformers/TypeTransformationPostProcessor.js +363 -0
- package/dist/transformers/TypeTransformationPostProcessor.js.map +1 -0
- package/dist/transformers/UpdateResultSelectConverter.js +359 -0
- package/dist/transformers/UpdateResultSelectConverter.js.map +1 -0
- package/dist/transformers/UpstreamSelectQueryFinder.js +184 -0
- package/dist/transformers/UpstreamSelectQueryFinder.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/Formatting.js +3 -0
- package/dist/types/Formatting.js.map +1 -0
- package/dist/types/GenericFixture.js +3 -0
- package/dist/types/GenericFixture.js.map +1 -0
- package/dist/utils/CTERegionDetector.js +464 -0
- package/dist/utils/CTERegionDetector.js.map +1 -0
- package/dist/utils/CommentEditor.js +345 -0
- package/dist/utils/CommentEditor.js.map +1 -0
- package/dist/utils/CommentUtils.js +69 -0
- package/dist/utils/CommentUtils.js.map +1 -0
- package/dist/utils/CursorContextAnalyzer.js +338 -0
- package/dist/utils/CursorContextAnalyzer.js.map +1 -0
- package/dist/utils/IntelliSenseApi.js +292 -0
- package/dist/utils/IntelliSenseApi.js.map +1 -0
- package/dist/utils/JsonSchemaValidator.js +215 -0
- package/dist/utils/JsonSchemaValidator.js.map +1 -0
- package/dist/utils/KeywordCache.js +206 -0
- package/dist/utils/KeywordCache.js.map +1 -0
- package/dist/utils/LexemeCursor.js +314 -0
- package/dist/utils/LexemeCursor.js.map +1 -0
- package/dist/utils/MultiQuerySplitter.js +292 -0
- package/dist/utils/MultiQuerySplitter.js.map +1 -0
- package/dist/utils/OperatorPrecedence.js +107 -0
- package/dist/utils/OperatorPrecedence.js.map +1 -0
- package/dist/utils/ParameterDetector.js +53 -0
- package/dist/utils/ParameterDetector.js.map +1 -0
- package/dist/utils/ParameterHelper.js +31 -0
- package/dist/utils/ParameterHelper.js.map +1 -0
- package/dist/utils/ParameterRemover.js +783 -0
- package/dist/utils/ParameterRemover.js.map +1 -0
- package/dist/utils/ParserStringUtils.js +31 -0
- package/dist/utils/ParserStringUtils.js.map +1 -0
- package/dist/utils/PositionAwareParser.js +363 -0
- package/dist/utils/PositionAwareParser.js.map +1 -0
- package/dist/utils/SchemaManager.js +217 -0
- package/dist/utils/SchemaManager.js.map +1 -0
- package/dist/utils/ScopeResolver.js +272 -0
- package/dist/utils/ScopeResolver.js.map +1 -0
- package/dist/utils/SelectQueryWithClauseHelper.js +47 -0
- package/dist/utils/SelectQueryWithClauseHelper.js.map +1 -0
- package/dist/utils/SqlSchemaValidator.js +55 -0
- package/dist/utils/SqlSchemaValidator.js.map +1 -0
- package/dist/utils/TableNameUtils.js +35 -0
- package/dist/utils/TableNameUtils.js.map +1 -0
- package/dist/utils/TextPositionUtils.js +128 -0
- package/dist/utils/TextPositionUtils.js.map +1 -0
- package/dist/utils/ValueComponentRewriter.js +187 -0
- package/dist/utils/ValueComponentRewriter.js.map +1 -0
- package/dist/utils/charLookupTable.js +73 -0
- package/dist/utils/charLookupTable.js.map +1 -0
- package/dist/utils/stringUtils.js +230 -0
- package/dist/utils/stringUtils.js.map +1 -0
- package/package.json +62 -62
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CursorContextAnalyzer = void 0;
|
|
4
|
+
const LexemeCursor_1 = require("./LexemeCursor");
|
|
5
|
+
const TextPositionUtils_1 = require("./TextPositionUtils");
|
|
6
|
+
const KeywordCache_1 = require("./KeywordCache");
|
|
7
|
+
class CursorContextAnalyzer {
|
|
8
|
+
/**
|
|
9
|
+
* Process existing dictionaries into IntelliSense-friendly patterns
|
|
10
|
+
* Single source of truth: existing CommandTokenReader dictionaries
|
|
11
|
+
*/
|
|
12
|
+
static getKeywordPatterns() {
|
|
13
|
+
if (this.patternCache !== null) {
|
|
14
|
+
return this.patternCache;
|
|
15
|
+
}
|
|
16
|
+
const requiresKeywords = new Map();
|
|
17
|
+
const suggestsTables = new Set();
|
|
18
|
+
const suggestsColumns = new Set();
|
|
19
|
+
// Extract all patterns by systematically testing the dictionaries
|
|
20
|
+
this.extractKeywordPatterns(requiresKeywords, suggestsTables, suggestsColumns);
|
|
21
|
+
// Cache the processed patterns
|
|
22
|
+
this.patternCache = {
|
|
23
|
+
requiresKeywords,
|
|
24
|
+
suggestsTables,
|
|
25
|
+
suggestsColumns
|
|
26
|
+
};
|
|
27
|
+
return this.patternCache;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Extract all keyword patterns from the existing dictionaries
|
|
31
|
+
*/
|
|
32
|
+
static extractKeywordPatterns(requiresKeywords, suggestsTables, suggestsColumns) {
|
|
33
|
+
// Define SQL contexts and their expected behavior
|
|
34
|
+
const tableContexts = ['from', 'join']; // Keywords that introduce table names
|
|
35
|
+
const columnContexts = ['select', 'where', 'on', 'having', 'by']; // Keywords that introduce columns
|
|
36
|
+
// Check table context keywords
|
|
37
|
+
for (const keyword of tableContexts) {
|
|
38
|
+
if (this.isKeywordInDictionary(keyword)) {
|
|
39
|
+
suggestsTables.add(keyword);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Check column context keywords
|
|
43
|
+
for (const keyword of columnContexts) {
|
|
44
|
+
if (this.isKeywordInDictionary(keyword)) {
|
|
45
|
+
suggestsColumns.add(keyword);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Extract all keyword patterns that require followups
|
|
49
|
+
this.extractRequiresKeywordPatterns(requiresKeywords);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if a keyword exists in the command dictionaries using existing parsers
|
|
53
|
+
*/
|
|
54
|
+
static isKeywordInDictionary(keyword) {
|
|
55
|
+
// Use KeywordCache for JOIN keywords
|
|
56
|
+
if (KeywordCache_1.KeywordCache.isValidJoinKeyword(keyword)) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
// Check if keyword exists in command dictionary
|
|
60
|
+
// Since we can't directly query the trie, use known keyword list
|
|
61
|
+
const knownKeywords = ['from', 'join', 'select', 'where', 'on', 'having', 'by', 'group', 'order'];
|
|
62
|
+
return knownKeywords.includes(keyword);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Extract all keywords that require specific followup keywords
|
|
66
|
+
*/
|
|
67
|
+
static extractRequiresKeywordPatterns(requiresKeywords) {
|
|
68
|
+
// Test all potential first words that might require followup keywords
|
|
69
|
+
const potentialFirstWords = [
|
|
70
|
+
// JOIN modifiers
|
|
71
|
+
'inner', 'left', 'right', 'full', 'cross', 'natural', 'outer',
|
|
72
|
+
// Other composite keywords
|
|
73
|
+
'group', 'order'
|
|
74
|
+
];
|
|
75
|
+
for (const word of potentialFirstWords) {
|
|
76
|
+
const possibleFollowups = this.findPossibleFollowups(word);
|
|
77
|
+
if (possibleFollowups.length > 0) {
|
|
78
|
+
requiresKeywords.set(word, possibleFollowups);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Find all possible followup keywords for a given word using KeywordCache
|
|
84
|
+
*/
|
|
85
|
+
static findPossibleFollowups(word) {
|
|
86
|
+
const followups = new Set();
|
|
87
|
+
// Use KeywordCache for JOIN-related suggestions
|
|
88
|
+
const joinSuggestions = KeywordCache_1.KeywordCache.getJoinSuggestions(word.toLowerCase());
|
|
89
|
+
joinSuggestions.forEach(s => followups.add(s.toUpperCase()));
|
|
90
|
+
// Use KeywordCache for command-related suggestions
|
|
91
|
+
const commandSuggestions = KeywordCache_1.KeywordCache.getCommandSuggestions(word.toLowerCase());
|
|
92
|
+
commandSuggestions.forEach(s => followups.add(s.toUpperCase()));
|
|
93
|
+
return Array.from(followups);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Helper function to check if a token requires specific keywords
|
|
97
|
+
*/
|
|
98
|
+
static requiresSpecificKeywords(tokenValue) {
|
|
99
|
+
const patterns = this.getKeywordPatterns();
|
|
100
|
+
const requiredKeywords = patterns.requiresKeywords.get(tokenValue);
|
|
101
|
+
if (requiredKeywords) {
|
|
102
|
+
return {
|
|
103
|
+
suggestKeywords: true,
|
|
104
|
+
requiredKeywords
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Analyze cursor position for IntelliSense suggestions
|
|
111
|
+
*
|
|
112
|
+
* Direct implementation that determines what suggestions can be provided
|
|
113
|
+
* without legacy context conversion overhead.
|
|
114
|
+
*
|
|
115
|
+
* @param sql - SQL text to analyze
|
|
116
|
+
* @param cursorPosition - Character position (0-based)
|
|
117
|
+
* @returns IntelliSense context focused on what suggestions can be provided
|
|
118
|
+
*/
|
|
119
|
+
static analyzeIntelliSense(sql, cursorPosition) {
|
|
120
|
+
try {
|
|
121
|
+
// Get all lexemes with position information
|
|
122
|
+
const allLexemes = LexemeCursor_1.LexemeCursor.getAllLexemesWithPosition(sql);
|
|
123
|
+
// Find token at cursor position
|
|
124
|
+
let actualTokenIndex = -1;
|
|
125
|
+
let actualCurrentToken;
|
|
126
|
+
// Find the token that contains or precedes the cursor
|
|
127
|
+
for (let i = 0; i < allLexemes.length; i++) {
|
|
128
|
+
const lexeme = allLexemes[i];
|
|
129
|
+
if (!lexeme.position)
|
|
130
|
+
continue;
|
|
131
|
+
if (cursorPosition >= lexeme.position.startPosition &&
|
|
132
|
+
cursorPosition <= lexeme.position.endPosition) {
|
|
133
|
+
// Cursor is within this token
|
|
134
|
+
actualCurrentToken = lexeme;
|
|
135
|
+
actualTokenIndex = i;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
else if (lexeme.position.startPosition > cursorPosition) {
|
|
139
|
+
// Cursor is before this token (in whitespace)
|
|
140
|
+
actualTokenIndex = Math.max(0, i - 1);
|
|
141
|
+
actualCurrentToken = actualTokenIndex >= 0 ? allLexemes[actualTokenIndex] : undefined;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// If not found, cursor is after all tokens
|
|
146
|
+
if (actualTokenIndex === -1 && allLexemes.length > 0) {
|
|
147
|
+
actualTokenIndex = allLexemes.length - 1;
|
|
148
|
+
actualCurrentToken = allLexemes[actualTokenIndex];
|
|
149
|
+
}
|
|
150
|
+
const previousToken = actualTokenIndex > 0 ? allLexemes[actualTokenIndex - 1] : undefined;
|
|
151
|
+
// Check for dot completion (highest priority)
|
|
152
|
+
const isAfterDot = this.isAfterDot(sql, cursorPosition, previousToken);
|
|
153
|
+
if (isAfterDot) {
|
|
154
|
+
const precedingIdentifier = this.findPrecedingIdentifier(sql, cursorPosition, allLexemes);
|
|
155
|
+
return {
|
|
156
|
+
suggestTables: false,
|
|
157
|
+
suggestColumns: true,
|
|
158
|
+
suggestKeywords: false,
|
|
159
|
+
tableScope: precedingIdentifier,
|
|
160
|
+
currentToken: actualCurrentToken,
|
|
161
|
+
previousToken: previousToken
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// Check for keywords that require additional keywords
|
|
165
|
+
if (actualCurrentToken) {
|
|
166
|
+
const currentValue = actualCurrentToken.value.toLowerCase();
|
|
167
|
+
const keywordRequirement = this.requiresSpecificKeywords(currentValue);
|
|
168
|
+
if (keywordRequirement) {
|
|
169
|
+
return {
|
|
170
|
+
suggestTables: false,
|
|
171
|
+
suggestColumns: false,
|
|
172
|
+
...keywordRequirement,
|
|
173
|
+
currentToken: actualCurrentToken,
|
|
174
|
+
previousToken: previousToken
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Check tokens for context-based suggestions
|
|
179
|
+
const tokenValue = actualCurrentToken === null || actualCurrentToken === void 0 ? void 0 : actualCurrentToken.value.toLowerCase();
|
|
180
|
+
const prevValue = previousToken === null || previousToken === void 0 ? void 0 : previousToken.value.toLowerCase();
|
|
181
|
+
// Check current token first (when cursor is at end of token)
|
|
182
|
+
if (tokenValue) {
|
|
183
|
+
const patterns = this.getKeywordPatterns();
|
|
184
|
+
// Keywords that suggest tables after them
|
|
185
|
+
if (patterns.suggestsTables.has(tokenValue)) {
|
|
186
|
+
return {
|
|
187
|
+
suggestTables: true,
|
|
188
|
+
suggestColumns: false,
|
|
189
|
+
suggestKeywords: false,
|
|
190
|
+
currentToken: actualCurrentToken,
|
|
191
|
+
previousToken: previousToken
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
// Keywords that suggest columns after them
|
|
195
|
+
if (patterns.suggestsColumns.has(tokenValue)) {
|
|
196
|
+
return {
|
|
197
|
+
suggestTables: false,
|
|
198
|
+
suggestColumns: true,
|
|
199
|
+
suggestKeywords: false,
|
|
200
|
+
currentToken: actualCurrentToken,
|
|
201
|
+
previousToken: previousToken
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Check previous token (when cursor is in whitespace after token)
|
|
206
|
+
if (prevValue) {
|
|
207
|
+
const patterns = this.getKeywordPatterns();
|
|
208
|
+
// Check if previous token requires specific keywords (and next token doesn't already fulfill it)
|
|
209
|
+
const keywordRequirement = this.requiresSpecificKeywords(prevValue);
|
|
210
|
+
if (keywordRequirement && tokenValue !== 'join' && tokenValue !== 'outer' && tokenValue !== 'by') {
|
|
211
|
+
return {
|
|
212
|
+
suggestTables: false,
|
|
213
|
+
suggestColumns: false,
|
|
214
|
+
...keywordRequirement,
|
|
215
|
+
currentToken: actualCurrentToken,
|
|
216
|
+
previousToken: previousToken
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// Keywords that suggest tables
|
|
220
|
+
if (patterns.suggestsTables.has(prevValue)) {
|
|
221
|
+
return {
|
|
222
|
+
suggestTables: true,
|
|
223
|
+
suggestColumns: false,
|
|
224
|
+
suggestKeywords: false,
|
|
225
|
+
currentToken: actualCurrentToken,
|
|
226
|
+
previousToken: previousToken
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
// Keywords that suggest columns
|
|
230
|
+
if (patterns.suggestsColumns.has(prevValue)) {
|
|
231
|
+
return {
|
|
232
|
+
suggestTables: false,
|
|
233
|
+
suggestColumns: true,
|
|
234
|
+
suggestKeywords: false,
|
|
235
|
+
currentToken: actualCurrentToken,
|
|
236
|
+
previousToken: previousToken
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Default fallback - suggest keywords
|
|
241
|
+
return {
|
|
242
|
+
suggestTables: false,
|
|
243
|
+
suggestColumns: false,
|
|
244
|
+
suggestKeywords: true,
|
|
245
|
+
currentToken: actualCurrentToken,
|
|
246
|
+
previousToken: previousToken
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
// Return minimal context on error
|
|
251
|
+
return {
|
|
252
|
+
suggestTables: false,
|
|
253
|
+
suggestColumns: false,
|
|
254
|
+
suggestKeywords: false,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Analyze cursor position for IntelliSense at line/column position
|
|
260
|
+
*/
|
|
261
|
+
static analyzeIntelliSenseAt(sql, position) {
|
|
262
|
+
const charOffset = TextPositionUtils_1.TextPositionUtils.lineColumnToCharOffset(sql, position);
|
|
263
|
+
if (charOffset === -1) {
|
|
264
|
+
return {
|
|
265
|
+
suggestTables: false,
|
|
266
|
+
suggestColumns: false,
|
|
267
|
+
suggestKeywords: false,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
return this.analyzeIntelliSense(sql, charOffset);
|
|
271
|
+
}
|
|
272
|
+
static isAfterDot(sql, cursorPosition, previousToken) {
|
|
273
|
+
// Check if character before cursor is a dot
|
|
274
|
+
if (cursorPosition > 0 && sql[cursorPosition - 1] === '.') {
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
// Check if previous token is a dot
|
|
278
|
+
if (previousToken && previousToken.value === '.') {
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
// Check for dot in nearby characters (handle whitespace)
|
|
282
|
+
let pos = cursorPosition - 1;
|
|
283
|
+
while (pos >= 0 && /\s/.test(sql[pos])) {
|
|
284
|
+
pos--; // Skip whitespace backwards
|
|
285
|
+
}
|
|
286
|
+
if (pos >= 0 && sql[pos] === '.') {
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
static findPrecedingIdentifier(sql, cursorPosition, lexemes) {
|
|
292
|
+
// If cursor is after a dot, look for identifier before the dot
|
|
293
|
+
if (this.isAfterDot(sql, cursorPosition)) {
|
|
294
|
+
// Find dot position in SQL text
|
|
295
|
+
let pos = cursorPosition - 1;
|
|
296
|
+
while (pos >= 0 && /\s/.test(sql[pos])) {
|
|
297
|
+
pos--; // Skip whitespace backwards
|
|
298
|
+
}
|
|
299
|
+
if (pos >= 0 && sql[pos] === '.') {
|
|
300
|
+
// Found the dot, now look for identifier before it
|
|
301
|
+
let identifierEnd = pos;
|
|
302
|
+
while (pos >= 0 && /\s/.test(sql[pos])) {
|
|
303
|
+
pos--; // Skip whitespace
|
|
304
|
+
}
|
|
305
|
+
// Extract identifier backwards
|
|
306
|
+
while (pos >= 0 && /[a-zA-Z0-9_]/.test(sql[pos])) {
|
|
307
|
+
pos--;
|
|
308
|
+
}
|
|
309
|
+
const identifierStart = pos + 1;
|
|
310
|
+
if (identifierStart < identifierEnd) {
|
|
311
|
+
return sql.substring(identifierStart, identifierEnd);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
// Fallback: try to find dot token in lexemes and get identifier before it
|
|
315
|
+
for (let i = lexemes.length - 1; i >= 0; i--) {
|
|
316
|
+
if (lexemes[i].value === '.' &&
|
|
317
|
+
lexemes[i].position &&
|
|
318
|
+
lexemes[i].position.startPosition < cursorPosition) {
|
|
319
|
+
// Found a dot before cursor, get identifier before it
|
|
320
|
+
if (i > 0 && this.isIdentifier(lexemes[i - 1])) {
|
|
321
|
+
return lexemes[i - 1].value;
|
|
322
|
+
}
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return undefined;
|
|
328
|
+
}
|
|
329
|
+
static isIdentifier(lexeme) {
|
|
330
|
+
return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(lexeme.value);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
exports.CursorContextAnalyzer = CursorContextAnalyzer;
|
|
334
|
+
/**
|
|
335
|
+
* Cache for processed keyword patterns
|
|
336
|
+
*/
|
|
337
|
+
CursorContextAnalyzer.patternCache = null;
|
|
338
|
+
//# sourceMappingURL=CursorContextAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CursorContextAnalyzer.js","sourceRoot":"","sources":["../../src/utils/CursorContextAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseToPosition = parseToPosition;
|
|
4
|
+
exports.getCursorContext = getCursorContext;
|
|
5
|
+
exports.resolveScope = resolveScope;
|
|
6
|
+
exports.splitQueries = splitQueries;
|
|
7
|
+
exports.getIntelliSenseInfo = getIntelliSenseInfo;
|
|
8
|
+
exports.getCompletionSuggestions = getCompletionSuggestions;
|
|
9
|
+
const CursorContextAnalyzer_1 = require("./CursorContextAnalyzer");
|
|
10
|
+
const ScopeResolver_1 = require("./ScopeResolver");
|
|
11
|
+
const PositionAwareParser_1 = require("./PositionAwareParser");
|
|
12
|
+
const MultiQuerySplitter_1 = require("./MultiQuerySplitter");
|
|
13
|
+
const TextPositionUtils_1 = require("./TextPositionUtils");
|
|
14
|
+
/**
|
|
15
|
+
* Convenience API for SQL IntelliSense integration
|
|
16
|
+
*
|
|
17
|
+
* Provides simplified, high-level functions that combine the functionality
|
|
18
|
+
* of the various position-aware parsing components for easy integration
|
|
19
|
+
* with Monaco Editor and other code editors.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { parseToPosition, getCursorContext, resolveScope, splitQueries } from 'rawsql-ts';
|
|
24
|
+
*
|
|
25
|
+
* // Parse incomplete SQL with error recovery
|
|
26
|
+
* const sql = "SELECT u.name FROM users u WHERE u.";
|
|
27
|
+
* const parseResult = parseToPosition(sql, sql.length, { errorRecovery: true });
|
|
28
|
+
*
|
|
29
|
+
* // Get cursor context for completion suggestions
|
|
30
|
+
* const context = getCursorContext(sql, sql.length);
|
|
31
|
+
* console.log(context.isAfterDot); // true
|
|
32
|
+
* console.log(context.precedingIdentifier); // "u"
|
|
33
|
+
*
|
|
34
|
+
* // Get scope information for table/column completion
|
|
35
|
+
* const scope = resolveScope(sql, sql.length);
|
|
36
|
+
* console.log(scope.availableTables); // [{ name: 'users', alias: 'u' }]
|
|
37
|
+
*
|
|
38
|
+
* // Handle multi-query editor
|
|
39
|
+
* const multiSQL = "SELECT 1; SELECT 2;";
|
|
40
|
+
* const queries = splitQueries(multiSQL);
|
|
41
|
+
* const activeQuery = queries.getActive(12); // Get query at position
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
/**
|
|
45
|
+
* Parse SQL up to cursor position with error recovery
|
|
46
|
+
*
|
|
47
|
+
* Combines position-aware parsing with error recovery to handle incomplete SQL
|
|
48
|
+
* that users are actively typing. Ideal for providing IntelliSense in editors.
|
|
49
|
+
*
|
|
50
|
+
* @param sql - SQL text to parse
|
|
51
|
+
* @param cursorPosition - Cursor position (character offset or line/column)
|
|
52
|
+
* @param options - Parsing options including error recovery settings
|
|
53
|
+
* @returns Parse result with position-specific information
|
|
54
|
+
*/
|
|
55
|
+
function parseToPosition(sql, cursorPosition, options = {}) {
|
|
56
|
+
return PositionAwareParser_1.PositionAwareParser.parseToPosition(sql, cursorPosition, options);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Analyze cursor context for IntelliSense completion suggestions
|
|
60
|
+
*
|
|
61
|
+
* Determines what type of completions should be offered at the cursor position
|
|
62
|
+
* based on SQL syntax context (SELECT clause, WHERE condition, etc.).
|
|
63
|
+
*
|
|
64
|
+
* @param sql - SQL text to analyze
|
|
65
|
+
* @param cursorPosition - Cursor position (character offset or line/column)
|
|
66
|
+
* @returns Cursor context information for completion logic
|
|
67
|
+
*/
|
|
68
|
+
function getCursorContext(sql, cursorPosition) {
|
|
69
|
+
if (typeof cursorPosition === 'number') {
|
|
70
|
+
return CursorContextAnalyzer_1.CursorContextAnalyzer.analyzeIntelliSense(sql, cursorPosition);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return CursorContextAnalyzer_1.CursorContextAnalyzer.analyzeIntelliSenseAt(sql, cursorPosition);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Resolve scope information at cursor position
|
|
78
|
+
*
|
|
79
|
+
* Provides comprehensive information about available tables, CTEs, and columns
|
|
80
|
+
* at the specified cursor position for intelligent completion suggestions.
|
|
81
|
+
*
|
|
82
|
+
* @param sql - SQL text to analyze
|
|
83
|
+
* @param cursorPosition - Cursor position (character offset or line/column)
|
|
84
|
+
* @returns Complete scope information including available tables and columns
|
|
85
|
+
*/
|
|
86
|
+
function resolveScope(sql, cursorPosition) {
|
|
87
|
+
if (typeof cursorPosition === 'number') {
|
|
88
|
+
return ScopeResolver_1.ScopeResolver.resolve(sql, cursorPosition);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
return ScopeResolver_1.ScopeResolver.resolveAt(sql, cursorPosition);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Split multi-query SQL text into individual queries
|
|
96
|
+
*
|
|
97
|
+
* Handles SQL editors that contain multiple statements separated by semicolons.
|
|
98
|
+
* Properly handles string literals and comments containing semicolons.
|
|
99
|
+
*
|
|
100
|
+
* @param sql - Multi-query SQL text
|
|
101
|
+
* @returns Collection of individual queries with position information
|
|
102
|
+
*/
|
|
103
|
+
function splitQueries(sql) {
|
|
104
|
+
return MultiQuerySplitter_1.MultiQuerySplitter.split(sql);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get IntelliSense information for a cursor position in multi-query context
|
|
108
|
+
*
|
|
109
|
+
* Combines query splitting, context analysis, and scope resolution to provide
|
|
110
|
+
* complete IntelliSense information for a cursor position in multi-query SQL.
|
|
111
|
+
*
|
|
112
|
+
* @param sql - Multi-query SQL text
|
|
113
|
+
* @param cursorPosition - Cursor position
|
|
114
|
+
* @param options - Parsing options
|
|
115
|
+
* @returns Complete IntelliSense information or undefined if position is invalid
|
|
116
|
+
*/
|
|
117
|
+
function getIntelliSenseInfo(sql, cursorPosition, options = {}) {
|
|
118
|
+
const charPos = typeof cursorPosition === 'number'
|
|
119
|
+
? cursorPosition
|
|
120
|
+
: TextPositionUtils_1.TextPositionUtils.lineColumnToCharOffset(sql, cursorPosition);
|
|
121
|
+
if (charPos === -1) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
// Split queries and find the active one
|
|
125
|
+
const queries = splitQueries(sql);
|
|
126
|
+
const activeQuery = queries.getActive(charPos);
|
|
127
|
+
if (!activeQuery) {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
// Calculate relative position within the active query
|
|
131
|
+
const relativePosition = charPos - activeQuery.start;
|
|
132
|
+
const querySQL = activeQuery.sql;
|
|
133
|
+
// Get IntelliSense information for the active query
|
|
134
|
+
const context = getCursorContext(querySQL, relativePosition);
|
|
135
|
+
const scope = resolveScope(querySQL, relativePosition);
|
|
136
|
+
const parseResult = parseToPosition(querySQL, relativePosition, options);
|
|
137
|
+
return {
|
|
138
|
+
context,
|
|
139
|
+
scope,
|
|
140
|
+
parseResult,
|
|
141
|
+
currentQuery: querySQL,
|
|
142
|
+
relativePosition
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get completion suggestions based on cursor context and scope
|
|
147
|
+
*
|
|
148
|
+
* Uses the new IntelliSense interface to provide targeted completion suggestions.
|
|
149
|
+
* This function leverages the suggestion-based design to efficiently determine
|
|
150
|
+
* what completions should be offered.
|
|
151
|
+
*
|
|
152
|
+
* @param sql - SQL text
|
|
153
|
+
* @param cursorPosition - Cursor position
|
|
154
|
+
* @returns Array of completion suggestions with context information
|
|
155
|
+
*/
|
|
156
|
+
function getCompletionSuggestions(sql, cursorPosition) {
|
|
157
|
+
const charPos = typeof cursorPosition === 'number'
|
|
158
|
+
? cursorPosition
|
|
159
|
+
: TextPositionUtils_1.TextPositionUtils.lineColumnToCharOffset(sql, cursorPosition);
|
|
160
|
+
if (charPos === -1) {
|
|
161
|
+
return [];
|
|
162
|
+
}
|
|
163
|
+
const intelliSenseContext = CursorContextAnalyzer_1.CursorContextAnalyzer.analyzeIntelliSense(sql, charPos);
|
|
164
|
+
const scope = resolveScope(sql, cursorPosition);
|
|
165
|
+
const suggestions = [];
|
|
166
|
+
// Add keyword suggestions
|
|
167
|
+
if (intelliSenseContext.suggestKeywords) {
|
|
168
|
+
// Add required keywords if specified
|
|
169
|
+
if (intelliSenseContext.requiredKeywords) {
|
|
170
|
+
intelliSenseContext.requiredKeywords.forEach(keyword => {
|
|
171
|
+
suggestions.push({
|
|
172
|
+
type: 'keyword',
|
|
173
|
+
value: keyword,
|
|
174
|
+
detail: `Required keyword: ${keyword}`
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
// Add general contextual keywords based on token context
|
|
180
|
+
const generalKeywords = getGeneralKeywords(intelliSenseContext);
|
|
181
|
+
generalKeywords.forEach(keyword => {
|
|
182
|
+
suggestions.push({
|
|
183
|
+
type: 'keyword',
|
|
184
|
+
value: keyword.value,
|
|
185
|
+
detail: keyword.detail
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Add table suggestions
|
|
191
|
+
if (intelliSenseContext.suggestTables) {
|
|
192
|
+
scope.availableTables.forEach(table => {
|
|
193
|
+
suggestions.push({
|
|
194
|
+
type: 'table',
|
|
195
|
+
value: table.alias || table.name,
|
|
196
|
+
detail: `Table: ${table.fullName}`,
|
|
197
|
+
documentation: `Available table${table.alias ? ` (alias: ${table.alias})` : ''}`
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
// Add CTE suggestions
|
|
201
|
+
scope.availableCTEs.forEach(cte => {
|
|
202
|
+
suggestions.push({
|
|
203
|
+
type: 'cte',
|
|
204
|
+
value: cte.name,
|
|
205
|
+
detail: `CTE: ${cte.name}`,
|
|
206
|
+
documentation: `Common Table Expression${cte.columns ? ` with columns: ${cte.columns.join(', ')}` : ''}`
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
// Add column suggestions
|
|
211
|
+
if (intelliSenseContext.suggestColumns) {
|
|
212
|
+
if (intelliSenseContext.tableScope) {
|
|
213
|
+
// Specific table/alias column completion
|
|
214
|
+
const columns = scope.visibleColumns.filter(col => col.tableName === intelliSenseContext.tableScope ||
|
|
215
|
+
col.tableAlias === intelliSenseContext.tableScope);
|
|
216
|
+
columns.forEach(col => {
|
|
217
|
+
suggestions.push({
|
|
218
|
+
type: 'column',
|
|
219
|
+
value: col.name,
|
|
220
|
+
detail: `Column: ${col.fullReference}`,
|
|
221
|
+
documentation: `Column from ${col.tableName}${col.type ? ` (${col.type})` : ''}`
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
// General column completion
|
|
227
|
+
scope.visibleColumns.forEach(col => {
|
|
228
|
+
suggestions.push({
|
|
229
|
+
type: 'column',
|
|
230
|
+
value: col.name === '*' ? '*' : `${col.tableAlias || col.tableName}.${col.name}`,
|
|
231
|
+
detail: `Column: ${col.fullReference}`,
|
|
232
|
+
documentation: `Column from ${col.tableName}`
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return suggestions;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get general keyword suggestions based on IntelliSense context
|
|
241
|
+
*/
|
|
242
|
+
function getGeneralKeywords(context) {
|
|
243
|
+
var _a, _b, _c, _d;
|
|
244
|
+
// Determine context from token information
|
|
245
|
+
const prevToken = (_b = (_a = context.previousToken) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.toLowerCase();
|
|
246
|
+
const currentToken = (_d = (_c = context.currentToken) === null || _c === void 0 ? void 0 : _c.value) === null || _d === void 0 ? void 0 : _d.toLowerCase();
|
|
247
|
+
// SELECT context - aggregate functions and keywords
|
|
248
|
+
if (prevToken === "select" || currentToken === "select") {
|
|
249
|
+
return [
|
|
250
|
+
{ value: "DISTINCT", detail: "Remove duplicate rows" },
|
|
251
|
+
{ value: "COUNT", detail: "Aggregate function" },
|
|
252
|
+
{ value: "SUM", detail: "Aggregate function" },
|
|
253
|
+
{ value: "AVG", detail: "Aggregate function" },
|
|
254
|
+
{ value: "MAX", detail: "Aggregate function" },
|
|
255
|
+
{ value: "MIN", detail: "Aggregate function" }
|
|
256
|
+
];
|
|
257
|
+
}
|
|
258
|
+
// FROM context - JOIN options and clauses
|
|
259
|
+
if (prevToken === "from" || currentToken === "from") {
|
|
260
|
+
return [
|
|
261
|
+
{ value: "JOIN", detail: "Inner join tables" },
|
|
262
|
+
{ value: "LEFT JOIN", detail: "Left outer join" },
|
|
263
|
+
{ value: "RIGHT JOIN", detail: "Right outer join" },
|
|
264
|
+
{ value: "FULL JOIN", detail: "Full outer join" },
|
|
265
|
+
{ value: "WHERE", detail: "Filter conditions" },
|
|
266
|
+
{ value: "GROUP BY", detail: "Group results" },
|
|
267
|
+
{ value: "ORDER BY", detail: "Sort results" }
|
|
268
|
+
];
|
|
269
|
+
}
|
|
270
|
+
// WHERE/HAVING context - logical operators
|
|
271
|
+
if (["where", "having", "on"].includes(prevToken || "") || ["where", "having", "on"].includes(currentToken || "")) {
|
|
272
|
+
return [
|
|
273
|
+
{ value: "AND", detail: "Logical AND operator" },
|
|
274
|
+
{ value: "OR", detail: "Logical OR operator" },
|
|
275
|
+
{ value: "NOT", detail: "Logical NOT operator" },
|
|
276
|
+
{ value: "IN", detail: "Match any value in list" },
|
|
277
|
+
{ value: "LIKE", detail: "Pattern matching" },
|
|
278
|
+
{ value: "BETWEEN", detail: "Range comparison" }
|
|
279
|
+
];
|
|
280
|
+
}
|
|
281
|
+
// Default context - general SQL keywords
|
|
282
|
+
return [
|
|
283
|
+
{ value: "SELECT", detail: "Query data" },
|
|
284
|
+
{ value: "FROM", detail: "Specify table" },
|
|
285
|
+
{ value: "WHERE", detail: "Filter conditions" },
|
|
286
|
+
{ value: "JOIN", detail: "Join tables" },
|
|
287
|
+
{ value: "GROUP BY", detail: "Group results" },
|
|
288
|
+
{ value: "ORDER BY", detail: "Sort results" },
|
|
289
|
+
{ value: "LIMIT", detail: "Limit results" }
|
|
290
|
+
];
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=IntelliSenseApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IntelliSenseApi.js","sourceRoot":"","sources":["../../src/utils/IntelliSenseApi.ts"],"names":[],"mappings":"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"}
|