rawsql-ts 0.1.0-beta.6 → 0.1.0-beta.8
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/dist/index.d.ts +13 -0
- package/dist/models/BinarySelectQuery.d.ts +91 -0
- package/dist/models/Clause.d.ts +189 -0
- package/dist/models/KeywordTrie.d.ts +11 -0
- package/dist/models/Lexeme.d.ts +25 -0
- package/dist/models/SelectQuery.d.ts +5 -0
- package/dist/models/SimpleSelectQuery.d.ts +167 -0
- package/dist/models/SqlComponent.d.ts +18 -0
- package/dist/models/ValueComponent.d.ts +158 -0
- package/dist/models/ValuesQuery.d.ts +10 -0
- package/dist/parsers/CommandExpressionParser.d.ts +15 -0
- package/dist/parsers/CommonTableParser.d.ts +9 -0
- package/dist/parsers/ForClauseParser.d.ts +9 -0
- package/dist/parsers/FromClauseParser.d.ts +9 -0
- package/dist/parsers/FunctionExpressionParser.d.ts +22 -0
- package/dist/parsers/GroupByParser.d.ts +10 -0
- package/dist/parsers/HavingParser.d.ts +9 -0
- package/dist/parsers/IdentifierParser.d.ts +8 -0
- package/dist/parsers/JoinClauseParser.d.ts +14 -0
- package/dist/parsers/KeywordParser.d.ts +17 -0
- package/dist/parsers/LimitClauseParser.d.ts +9 -0
- package/dist/parsers/LiteralParser.d.ts +8 -0
- package/dist/parsers/OrderByClauseParser.d.ts +10 -0
- package/dist/parsers/OverExpressionParser.d.ts +9 -0
- package/dist/parsers/ParameterExpressionParser.d.ts +8 -0
- package/dist/parsers/ParenExpressionParser.d.ts +8 -0
- package/dist/parsers/PartitionByParser.d.ts +9 -0
- package/dist/parsers/SelectClauseParser.d.ts +10 -0
- package/dist/parsers/SelectQueryParser.d.ts +13 -0
- package/dist/parsers/SourceAliasExpressionParser.d.ts +8 -0
- package/dist/parsers/SourceExpressionParser.d.ts +8 -0
- package/dist/parsers/SourceParser.d.ts +13 -0
- package/dist/parsers/SqlTokenizer.d.ts +64 -0
- package/dist/parsers/StringSpecifierExpressionParser.d.ts +8 -0
- package/dist/parsers/UnaryExpressionParser.d.ts +8 -0
- package/dist/parsers/ValueParser.d.ts +14 -0
- package/dist/parsers/ValuesQueryParser.d.ts +10 -0
- package/dist/parsers/WhereClauseParser.d.ts +9 -0
- package/dist/parsers/WindowClauseParser.d.ts +9 -0
- package/dist/parsers/WindowExpressionParser.d.ts +12 -0
- package/dist/parsers/WithClauseParser.d.ts +9 -0
- package/dist/tokenReaders/BaseTokenReader.d.ts +43 -0
- package/dist/tokenReaders/CommandTokenReader.d.ts +7 -0
- package/dist/tokenReaders/FunctionTokenReader.d.ts +11 -0
- package/dist/tokenReaders/IdentifierTokenReader.d.ts +15 -0
- package/dist/tokenReaders/LiteralTokenReader.d.ts +23 -0
- package/dist/tokenReaders/OperatorTokenReader.d.ts +5 -0
- package/dist/tokenReaders/ParameterTokenReader.d.ts +11 -0
- package/dist/tokenReaders/StringSpecifierTokenReader.d.ts +8 -0
- package/dist/tokenReaders/SymbolTokenReader.d.ts +12 -0
- package/dist/tokenReaders/TokenReaderManager.d.ts +53 -0
- package/dist/tokenReaders/TypeTokenReader.d.ts +11 -0
- package/dist/transformers/CTEBuilder.d.ts +52 -0
- package/dist/transformers/CTECollector.d.ts +81 -0
- package/dist/transformers/CTEDisabler.d.ts +77 -0
- package/dist/transformers/CTEInjector.d.ts +40 -0
- package/dist/transformers/CTENormalizer.d.ts +25 -0
- package/dist/transformers/Formatter.d.ts +67 -0
- package/dist/transformers/QueryNormalizer.d.ts +37 -0
- package/dist/transformers/SelectValueCollector.d.ts +62 -0
- package/dist/transformers/SelectableColumnCollector.d.ts +70 -0
- package/dist/transformers/TableSourceCollector.d.ts +92 -0
- package/dist/transformers/UpstreamSelectQueryFinder.d.ts +27 -0
- package/dist/utils/charLookupTable.d.ts +11 -0
- package/dist/utils/stringUtils.d.ts +43 -0
- package/package.json +6 -3
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/904140CF7EDF0C98AEA45F0D36062FE1 +0 -1
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/A32D1DB906C73FA74EF270AAEE165FC0 +0 -86
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/E621434FB1D5415B14FBBCC11967E420 +0 -34
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/EF71788BE39818EEA3F0164DC15E1BD7 +0 -170
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/state.mpack +0 -1
- package/.vs/CopilotSnapshots/07B1013C385C5641A5F5100E0751210B/0C73C015B2C859419AFBD08BE1343FC0/BA5D2B145A59265D63FA3B3584344B02 +0 -236
- package/.vs/CopilotSnapshots/07B1013C385C5641A5F5100E0751210B/state.mpack +0 -1
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/1F95FD72006ED6E92629CEFD7B2C4FEC +0 -1
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/4CA7B9D3BC2D0A498DC0777EDA3F9B0F +0 -1
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/7B623BFBAEB4EB61A9585F0BC8039B06 +0 -19
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/1F95FD72006ED6E92629CEFD7B2C4FEC +0 -5
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/4CA7B9D3BC2D0A498DC0777EDA3F9B0F +0 -3
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/7B623BFBAEB4EB61A9585F0BC8039B06 +0 -21
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/state.mpack +0 -1
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/41035D2B1D57326B55F66372017E223A +0 -1
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/45EABF6EF6BDFAA58C941A29E98C9C83 +0 -113
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/748E0B8859CA1A5FDCA675C9E53B6D1C +0 -1
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/A250FF4AD59546A65FFDC6AA92A4698E +0 -1
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/C42432BC73D8AA122171FAB6EEB13CBC +0 -19
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/state.mpack +0 -1
- package/.vs/CopilotSnapshots/13B40109875D434BB24880356492BE7E/828B96E81CC7014B887AA519767FACC3/437DAEC1EBBAF4F25ABA1B6A25EB6933 +0 -25
- package/.vs/CopilotSnapshots/13B40109875D434BB24880356492BE7E/state.mpack +0 -1
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/904140CF7EDF0C98AEA45F0D36062FE1 +0 -63
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/DFF70C60F68ECD9A4E4C3C74E4CC4DEE +0 -1
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/EF71788BE39818EEA3F0164DC15E1BD7 +0 -170
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/state.mpack +0 -1
- package/.vs/CopilotSnapshots/3BACC9346120824DB30006E353477163/87C831E9EA1AA249A25A44D08CF8E0B5/EF71788BE39818EEA3F0164DC15E1BD7 +0 -328
- package/.vs/CopilotSnapshots/3BACC9346120824DB30006E353477163/state.mpack +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/23E7151F0483C5BB5E663F83D4962FD4 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/2D4DCEBC89D52B097AEEEABA23C0EB59 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/7C951A8A572EA5C371FDE657AF968B9C +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/A32D1DB906C73FA74EF270AAEE165FC0 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/B692C85119711C76235AA5D78F9F3818 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/E602628EF6D764C2C267810C92906DBA +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/E621434FB1D5415B14FBBCC11967E420 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/23E7151F0483C5BB5E663F83D4962FD4 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/2D4DCEBC89D52B097AEEEABA23C0EB59 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/7C951A8A572EA5C371FDE657AF968B9C +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/A32D1DB906C73FA74EF270AAEE165FC0 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/B692C85119711C76235AA5D78F9F3818 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/E602628EF6D764C2C267810C92906DBA +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/E621434FB1D5415B14FBBCC11967E420 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/EF71788BE39818EEA3F0164DC15E1BD7 +0 -489
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/state.mpack +0 -1
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/0E5F1D40C0CAE848B8F9457F29A1F3FF/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -42
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/462A64EF41A4BF42A18708B83E02FD6F/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -40
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/90C95C12B91FA142BEF509B6FA329DE5/A3B20E10A19C7CA170132274D2F9312B +0 -9
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/90C95C12B91FA142BEF509B6FA329DE5/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -1
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/AD7513C9BBFE904AAB7F940397B95A99/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -42
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/state.mpack +0 -1
- package/.vs/CopilotSnapshots/50E0417FAD2E524D887CB5763C2FB7B4/63A4C250D9DCE04B9F61D8833B89B5BF/EF71788BE39818EEA3F0164DC15E1BD7 +0 -174
- package/.vs/CopilotSnapshots/50E0417FAD2E524D887CB5763C2FB7B4/state.mpack +0 -1
- package/.vs/CopilotSnapshots/5EF2507B002AC14EA991043C37C36551/60FF68DE489DAD4FBCBBB54AA3F6A552/EF71788BE39818EEA3F0164DC15E1BD7 +0 -496
- package/.vs/CopilotSnapshots/5EF2507B002AC14EA991043C37C36551/state.mpack +0 -1
- package/.vs/CopilotSnapshots/6AA7610F1FB2B746821E54C28A8D109B/7FB78C0F8CB04F4AA6AF3315277B80F8/FB35DD13E708043D4CD8ACD54E14708F +0 -1
- package/.vs/CopilotSnapshots/6AA7610F1FB2B746821E54C28A8D109B/state.mpack +0 -1
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/5782E13CAB03A04E9E1EC5692F892170/BA5D2B145A59265D63FA3B3584344B02 +0 -5
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/5782E13CAB03A04E9E1EC5692F892170/EF71788BE39818EEA3F0164DC15E1BD7 +0 -158
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/9886598393C89944B51920C01EB650C9/BA5D2B145A59265D63FA3B3584344B02 +0 -35
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/state.mpack +0 -1
- package/.vs/CopilotSnapshots/8492D9C7A2D9514DB8A69D304B48BF3C/D2DA3C4E2131E84EA02E321802A65254/EF71788BE39818EEA3F0164DC15E1BD7 +0 -165
- package/.vs/CopilotSnapshots/8492D9C7A2D9514DB8A69D304B48BF3C/state.mpack +0 -1
- package/.vs/CopilotSnapshots/891A2DC0E5FA424CB8BDDA4FE26ED372/E244D49DDC79514DBA322770B03AE287/1CF9939611B0D194AC81951A171DF046 +0 -43
- package/.vs/CopilotSnapshots/891A2DC0E5FA424CB8BDDA4FE26ED372/state.mpack +0 -1
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/11E6D1F8E56D734F99C5216231273E8D/E621434FB1D5415B14FBBCC11967E420 +0 -66
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/24C69A83160FD844B0DEFECF8E1313DB/1CF9939611B0D194AC81951A171DF046 +0 -43
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/24C69A83160FD844B0DEFECF8E1313DB/E621434FB1D5415B14FBBCC11967E420 +0 -53
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/5E6D1BCD7CE81548AB445DE97505DC62/1CF9939611B0D194AC81951A171DF046 +0 -30
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/5E6D1BCD7CE81548AB445DE97505DC62/E621434FB1D5415B14FBBCC11967E420 +0 -53
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/EC4E81E0109C8F4BA1B5D9CFE1C122BC/E621434FB1D5415B14FBBCC11967E420 +0 -54
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/state.mpack +0 -1
- package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/6139F888FA743143B8E6C99306A478A6/30F913EA337870677E7C575773ECF531 +0 -130
- package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/F21743E379F9C1439F6A6405A289AA99/30F913EA337870677E7C575773ECF531 +0 -160
- package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/state.mpack +0 -1
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/2E2EFE66C5E05C4B809986E9B23D5409/45EABF6EF6BDFAA58C941A29E98C9C83 +0 -113
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/2E2EFE66C5E05C4B809986E9B23D5409/FB35DD13E708043D4CD8ACD54E14708F +0 -2
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/BE46916E3A8F2C4284792B951B674907/FB35DD13E708043D4CD8ACD54E14708F +0 -5
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/state.mpack +0 -1
- package/.vs/CopilotSnapshots/A6D99EA2D3819F45AD8087D7487F9318/state.mpack +0 -1
- package/.vs/CopilotSnapshots/A78C77F7A237704D95BCFE1BBC39FB0F/68BA9941941DC244BC799D89DB2BF86E/7C951A8A572EA5C371FDE657AF968B9C +0 -96
- package/.vs/CopilotSnapshots/A78C77F7A237704D95BCFE1BBC39FB0F/state.mpack +0 -1
- package/.vs/CopilotSnapshots/AD2203F1B9FECE44BB6D5DC5D83E87AA/734AB1B2974F9545B7F12AAA5842524B/840203FFA9CCF5B33DFD5C7CC5B13527 +0 -125
- package/.vs/CopilotSnapshots/AD2203F1B9FECE44BB6D5DC5D83E87AA/state.mpack +0 -1
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/89CF3F527D0687479D14274E8CDF3DFF/1CF9939611B0D194AC81951A171DF046 +0 -30
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/89CF3F527D0687479D14274E8CDF3DFF/BA5D2B145A59265D63FA3B3584344B02 +0 -158
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/E495EBF64DC77A4BBD470B92DB0391C4/1CF9939611B0D194AC81951A171DF046 +0 -30
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/E495EBF64DC77A4BBD470B92DB0391C4/BA5D2B145A59265D63FA3B3584344B02 +0 -67
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/state.mpack +0 -1
- package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/1FCDCC65B992954DB78BD1F46892312B/44EB81A1663981E3F52FFFECE3A2918E +0 -143
- package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/1FCDCC65B992954DB78BD1F46892312B/E602628EF6D764C2C267810C92906DBA +0 -253
- package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/state.mpack +0 -1
- package/.vs/CopilotSnapshots/B1DED422A45D5740BA4EE745C04B2B0B/226F822A22D6BD44BCF56BAA47FA274C/EF71788BE39818EEA3F0164DC15E1BD7 +0 -174
- package/.vs/CopilotSnapshots/B1DED422A45D5740BA4EE745C04B2B0B/state.mpack +0 -1
- package/.vs/CopilotSnapshots/B5DD5E50ACD0FD4998564F0FDE7FAEE0/97908D1D83AD2D4EA7082388DE07CBB4/44EB81A1663981E3F52FFFECE3A2918E +0 -148
- package/.vs/CopilotSnapshots/B5DD5E50ACD0FD4998564F0FDE7FAEE0/state.mpack +0 -1
- package/.vs/CopilotSnapshots/B8ADCAC0C19DB14FB8388BA59A86BC74/7ED3F1557FD7BE4DBEAF9B59FD442925/44EB81A1663981E3F52FFFECE3A2918E +0 -152
- package/.vs/CopilotSnapshots/B8ADCAC0C19DB14FB8388BA59A86BC74/state.mpack +0 -1
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/0130610530354840BB06BF4F4E744242/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -138
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/5F1C58CEFBAF1B4E80C4CF38B83A0A5F/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -129
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/BDC3D099FCCCC147848630670EED45CF/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -139
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/D9E2B1CDD1E2BB468E0703BEF6706FF6/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -139
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/state.mpack +0 -1
- package/.vs/CopilotSnapshots/C1E2C1A9C1DCFA46B1D5F1C6F36A152D/BC91C0FD38D8694BB992A8DEC1833670/148399016C7971F5592DAADBB9523118 +0 -120
- package/.vs/CopilotSnapshots/C1E2C1A9C1DCFA46B1D5F1C6F36A152D/state.mpack +0 -1
- package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/6C0950E97063C547A72D737E618436B0/1CF9939611B0D194AC81951A171DF046 +0 -9
- package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/6C0950E97063C547A72D737E618436B0/DFF70C60F68ECD9A4E4C3C74E4CC4DEE +0 -84
- package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/state.mpack +0 -1
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/03EA1376F04C0D468FD0851119159D34/44EB81A1663981E3F52FFFECE3A2918E +0 -148
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/03EA1376F04C0D468FD0851119159D34/E602628EF6D764C2C267810C92906DBA +0 -265
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/6887503C15557349842029E58C9C0D11/44EB81A1663981E3F52FFFECE3A2918E +0 -152
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/6887503C15557349842029E58C9C0D11/E602628EF6D764C2C267810C92906DBA +0 -265
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/state.mpack +0 -1
- package/.vs/CopilotSnapshots/C7190BBC8D95D44F9CF8E65E3E8C9CFD/4B6D07592F8EDC4AA3FF742B1F9531CC/1B80EB15A2FEBEC11C8210C5461F8DB7 +0 -43
- package/.vs/CopilotSnapshots/C7190BBC8D95D44F9CF8E65E3E8C9CFD/state.mpack +0 -1
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/2071ADB146D8F7499419123B2A595A41/03E00441128DC70FFEA043158417AC9A +0 -15
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/6ECBF707FE2A88418EA1649CE46068D5/03E00441128DC70FFEA043158417AC9A +0 -1
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/70BAB1D82B755F47A2351CA905ACC0F1/03E00441128DC70FFEA043158417AC9A +0 -49
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/99DDFADAEC5CA14D92CC470523A11743/03E00441128DC70FFEA043158417AC9A +0 -39
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/state.mpack +0 -1
- package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/2445F4111C26EB4DA5404F930E140F56/840203FFA9CCF5B33DFD5C7CC5B13527 +0 -6
- package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/2445F4111C26EB4DA5404F930E140F56/C27E5C1787B7957BF6F0C3D417890141 +0 -1
- package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/state.mpack +0 -1
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/5FC7C36C7769414C80BFF27A07BB5063/BE400B34D9700403D2BA3A1AA6B1EF1D +0 -15
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/A4DD9B92084D8E48A95435EDB2B14545/86848C7099AD75EE4E8F10E066F49671 +0 -15
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/A4DD9B92084D8E48A95435EDB2B14545/BE400B34D9700403D2BA3A1AA6B1EF1D +0 -15
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/state.mpack +0 -1
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/7C951A8A572EA5C371FDE657AF968B9C +0 -96
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/B692C85119711C76235AA5D78F9F3818 +0 -73
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/EF71788BE39818EEA3F0164DC15E1BD7 +0 -182
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/C1287B2893D30D40A46C30DC2CE05178/7C951A8A572EA5C371FDE657AF968B9C +0 -96
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/C1287B2893D30D40A46C30DC2CE05178/B692C85119711C76235AA5D78F9F3818 +0 -98
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/7C951A8A572EA5C371FDE657AF968B9C +0 -96
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/B692C85119711C76235AA5D78F9F3818 +0 -21
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/EF71788BE39818EEA3F0164DC15E1BD7 +0 -176
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/state.mpack +0 -1
- package/.vs/VSWorkspaceState.json +0 -6
- package/.vs/slnx.sqlite +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.433.20974/CodeChunks.db +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.433.20974/SemanticSymbols.db +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.439.2385/CodeChunks.db +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.439.2385/SemanticSymbols.db +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.441.19478/CodeChunks.db +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.441.19478/SemanticSymbols.db +0 -0
- package/.vs/ts-sample/FileContentIndex/2fa9d8cc-9158-496d-aa9b-3a471d46a157.vsidx +0 -0
- package/.vs/ts-sample/FileContentIndex/5530f45b-244e-4271-b3e3-d8250f03da64.vsidx +0 -0
- package/.vs/ts-sample/FileContentIndex/75f95b5d-c8f7-49ca-a3d7-d1d8f63db437.vsidx +0 -0
- package/.vs/ts-sample/FileContentIndex/abb2aeeb-f62a-4ca7-bfbf-7a1eada625a5.vsidx +0 -0
- package/.vs/ts-sample/FileContentIndex/fc749b54-0f95-45f6-ac75-a8ab3409a5ce.vsidx +0 -0
- package/.vs/ts-sample/config/applicationhost.config +0 -1026
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/0901b413-5d87-4b43-b248-80356492be7e +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/0f61a76a-b21f-46b7-821e-54c28a8d109b +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/101aef14-dd28-4de3-b2eb-e0b26d587b3a +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/22d4deb1-5da4-4057-ba4e-e745c04b2b0b +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/2a76030d-a09e-48cb-85f2-114567f23f93 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/2c6d08ca-cb98-4233-8f7c-011c3b409234 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/338dc290-9b2f-4929-8101-26139fca2640 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/34c9ac3b-2061-4d82-b300-06e353477163 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/3c01b107-5c38-4156-a5f5-100e0751210b +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/489ee702-f5df-4723-87cb-618de990598a +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/4ccac3c5-b137-474a-b6bc-753d09f69117 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/505eddb5-d0ac-49fd-9856-4f0fde7faee0 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/58e8d8c4-4293-4f5e-86f1-8850f5ca5c08 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/5dbafa3e-3015-4c80-a04c-606f5efddc38 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/5f29f527-e43a-4661-b60e-ff772041f413 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/6248dfd7-38ae-4fa6-9176-2fdc0694c3e8 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/66fcbd64-32dc-436d-80e6-7435a1a3ecf1 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/6f9ad733-d555-4d2c-b073-eb6a1aada347 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/715aaadc-c88e-4630-85d1-4c52356d80e0 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/71ab164c-01dc-468c-a734-fbf0bf4aedd9 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/752ee299-aec8-4ddf-b3a6-68a9adf0bc43 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/752ff6dc-741b-4286-a0bf-5d5125ab6769 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/7b50f25e-2a00-4ec1-a991-043c37c36551 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/7f41e050-2ead-4d52-887c-b5763c2fb7b4 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/85b50c9e-8895-4085-89c1-934ad2704744 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8b2f308d-46ae-4ef5-a82a-e1ded1a5d240 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8b5f907f-0dac-49ad-bd50-7ca45c569afd +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8cd733d5-6839-413a-88a2-cec902bc03cd +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/90685124-4085-46d6-acbd-4fde8d6dd2d4 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/96129dc7-1749-4fe4-9a5b-b9d8fa725a0c +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/967094af-46a3-4734-8c5d-084b8442cd81 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/a29ed9a6-81d3-459f-ad80-87d7487f9318 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/a9c1e2c1-dcc1-46fa-b1d5-f1c6f36a152d +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/badc76f4-d284-4b6c-94e9-abdbc74de540 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/bb50ffbd-a9c1-4737-a000-1969c3bd195f +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/bc0b19c7-958d-4fd4-9cf8-e65e3e8c9cfd +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c02d1a89-fae5-4c42-b8bd-da4fe26ed372 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c0caadb8-9dc1-4fb1-b838-8ba59a86bc74 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c250c9ae-d2fa-4701-aee8-e325e2ca0a78 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c31db710-c1c4-4ec0-8602-fa06d3925f98 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c7d99284-d9a2-4d51-b8a6-9d304b48bf3c +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/ddd1fab4-4016-4cfc-bf9f-f4a85bdfc112 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/f10322ad-feb9-44ce-bb6d-5dc5d83e87aa +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/f7778ca7-37a2-4d70-95bc-fe1bbc39fb0f +0 -0
- package/.vs/ts-sample/v17/.suo +0 -0
- package/.vs/ts-sample/v17/.wsuo +0 -0
- package/.vs/ts-sample/v17/DocumentLayout.backup.json +0 -425
- package/.vs/ts-sample/v17/DocumentLayout.json +0 -423
- package/.vs/ts-sample/v17/TestStore/0/000.testlog +0 -0
- package/.vs/ts-sample/v17/TestStore/0/testlog.manifest +0 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
/**
|
2
|
+
* Utilities for string operations during tokenization
|
3
|
+
*/
|
4
|
+
export declare class StringUtils {
|
5
|
+
/**
|
6
|
+
* Creates a visual representation of an error position in text
|
7
|
+
* @param input The input text
|
8
|
+
* @param errPosition The error position
|
9
|
+
* @returns A string with a caret pointing to the error position
|
10
|
+
*/
|
11
|
+
static getDebugPositionInfo(input: string, errPosition: number): string;
|
12
|
+
/**
|
13
|
+
* Skip white space characters.
|
14
|
+
*/
|
15
|
+
private static skipWhiteSpace;
|
16
|
+
/**
|
17
|
+
* Skip line comment.
|
18
|
+
*/
|
19
|
+
private static readLineComment;
|
20
|
+
/**
|
21
|
+
* Skip block comment.
|
22
|
+
*/
|
23
|
+
private static readBlockComment;
|
24
|
+
/**
|
25
|
+
* Skip white space characters and SQL comments.
|
26
|
+
* @returns Object containing the new position and an array of skipped comments
|
27
|
+
*/
|
28
|
+
static readWhiteSpaceAndComment(input: string, position: number): {
|
29
|
+
position: number;
|
30
|
+
lines: string[];
|
31
|
+
};
|
32
|
+
/**
|
33
|
+
* Read a regular identifier.
|
34
|
+
*/
|
35
|
+
static readRegularIdentifier(input: string, position: number): {
|
36
|
+
identifier: string;
|
37
|
+
newPosition: number;
|
38
|
+
};
|
39
|
+
static tryReadRegularIdentifier(input: string, position: number): {
|
40
|
+
identifier: string;
|
41
|
+
newPosition: number;
|
42
|
+
} | null;
|
43
|
+
}
|
package/package.json
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
{
|
2
2
|
"name": "rawsql-ts",
|
3
|
-
"version": "0.1.0-beta.
|
3
|
+
"version": "0.1.0-beta.8",
|
4
4
|
"description": "[beta]High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.",
|
5
5
|
"main": "dist/index.js",
|
6
|
-
"types": "
|
6
|
+
"types": "dist/index.d.ts",
|
7
7
|
"scripts": {
|
8
8
|
"test": "vitest run",
|
9
9
|
"test:watch": "vitest",
|
@@ -32,5 +32,8 @@
|
|
32
32
|
"ts-node": "^10.9.2",
|
33
33
|
"typescript": "^5.8.2",
|
34
34
|
"vitest": "^1.5.2"
|
35
|
-
}
|
35
|
+
},
|
36
|
+
"files": [
|
37
|
+
"dist"
|
38
|
+
]
|
36
39
|
}
|
@@ -1 +0,0 @@
|
|
1
|
-
|
@@ -1,86 +0,0 @@
|
|
1
|
-
import { Lexeme } from '../models/Lexeme';
|
2
|
-
import { TokenType } from '../enums/tokenType';
|
3
|
-
import { StringUtils } from '../utils/stringUtils';
|
4
|
-
|
5
|
-
/**
|
6
|
-
* Base class for token readers
|
7
|
-
*/
|
8
|
-
export abstract class BaseTokenReader {
|
9
|
-
protected input: string;
|
10
|
-
protected position: number;
|
11
|
-
|
12
|
-
constructor(input: string, position: number) {
|
13
|
-
this.input = input;
|
14
|
-
this.position = position;
|
15
|
-
}
|
16
|
-
|
17
|
-
/**
|
18
|
-
* Get the current position in the input
|
19
|
-
*/
|
20
|
-
public getPosition(): number {
|
21
|
-
return this.position;
|
22
|
-
}
|
23
|
-
|
24
|
-
/**
|
25
|
-
* Set the position in the input
|
26
|
-
*/
|
27
|
-
public setPosition(position: number): void {
|
28
|
-
this.position = position;
|
29
|
-
}
|
30
|
-
|
31
|
-
/**
|
32
|
-
* Check if we've reached the end of input
|
33
|
-
*/
|
34
|
-
protected isEndOfInput(shift: number = 0): boolean {
|
35
|
-
return this.position + shift >= this.input.length;
|
36
|
-
}
|
37
|
-
|
38
|
-
/**
|
39
|
-
* Check if we can read more characters
|
40
|
-
*/
|
41
|
-
protected canRead(shift: number = 0): boolean {
|
42
|
-
return !this.isEndOfInput(shift);
|
43
|
-
}
|
44
|
-
|
45
|
-
/**
|
46
|
-
* Read an expected character
|
47
|
-
*/
|
48
|
-
protected read(expectChar: string): string {
|
49
|
-
if (this.isEndOfInput()) {
|
50
|
-
throw new Error(`Unexpected character. expect: ${expectChar}, actual: EndOfInput, position: ${this.position}`);
|
51
|
-
}
|
52
|
-
|
53
|
-
if (this.input[this.position] !== expectChar) {
|
54
|
-
throw new Error(`Unexpected character. expect: ${expectChar}, actual: ${this.input[this.position]}, position: ${this.position}`);
|
55
|
-
}
|
56
|
-
|
57
|
-
const char = this.input[this.position];
|
58
|
-
this.position++;
|
59
|
-
return char;
|
60
|
-
}
|
61
|
-
|
62
|
-
/**
|
63
|
-
* Create a lexeme with the specified type and value
|
64
|
-
*/
|
65
|
-
protected createLexeme(type: TokenType, value: string, command?: string): Lexeme {
|
66
|
-
return {
|
67
|
-
type,
|
68
|
-
value,
|
69
|
-
command
|
70
|
-
};
|
71
|
-
}
|
72
|
-
|
73
|
-
/**
|
74
|
-
* Get debug info for error reporting
|
75
|
-
*/
|
76
|
-
protected getDebugPositionInfo(errPosition: number): string {
|
77
|
-
return StringUtils.getDebugPositionInfo(this.input, errPosition);
|
78
|
-
}
|
79
|
-
|
80
|
-
/**
|
81
|
-
* Try to read a token from the current position
|
82
|
-
* @param previous The previous token, if available
|
83
|
-
* @returns The read token or null if no token could be read
|
84
|
-
*/
|
85
|
-
public abstract tryRead(previous: Lexeme | null): Lexeme | null;
|
86
|
-
}
|
@@ -1,34 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Fast character classification utilities for SQL tokenization
|
3
|
-
*/
|
4
|
-
export class CharLookupTable {
|
5
|
-
private static readonly WHITESPACE = new Set([' ', '\t', '\r', '\n']);
|
6
|
-
private static readonly DIGITS = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);
|
7
|
-
private static readonly HEX_CHARS = new Set([
|
8
|
-
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
9
|
-
'a', 'b', 'c', 'd', 'e', 'f',
|
10
|
-
'A', 'B', 'C', 'D', 'E', 'F'
|
11
|
-
]);
|
12
|
-
private static readonly DELIMITERS = new Set([' ', '.', ',', '(', ')', '+', '-', '*', '/']);
|
13
|
-
private static readonly NAMED_PARAMETER_PREFIX = new Set(['@', ':', '$']);
|
14
|
-
|
15
|
-
public static isWhitespace(char: string): boolean {
|
16
|
-
return CharLookupTable.WHITESPACE.has(char);
|
17
|
-
}
|
18
|
-
|
19
|
-
public static isDigit(char: string): boolean {
|
20
|
-
return CharLookupTable.DIGITS.has(char);
|
21
|
-
}
|
22
|
-
|
23
|
-
public static isHexChar(char: string): boolean {
|
24
|
-
return CharLookupTable.HEX_CHARS.has(char);
|
25
|
-
}
|
26
|
-
|
27
|
-
public static isDelimiter(char: string): boolean {
|
28
|
-
return CharLookupTable.DELIMITERS.has(char);
|
29
|
-
}
|
30
|
-
|
31
|
-
public static isNamedParameterPrefix(char: string): boolean {
|
32
|
-
return CharLookupTable.NAMED_PARAMETER_PREFIX.has(char);
|
33
|
-
}
|
34
|
-
}
|
@@ -1,170 +0,0 @@
|
|
1
|
-
import { Lexeme } from './models/Lexeme';
|
2
|
-
import { IdentifierTokenReader } from './tokenReaders/IdentifierTokenReader';
|
3
|
-
import { LiteralTokenReader } from './tokenReaders/LiteralTokenReader';
|
4
|
-
import { ParameterTokenReader } from './tokenReaders/ParameterTokenReader';
|
5
|
-
import { SymbolTokenReader } from './tokenReaders/SymbolTokenReader';
|
6
|
-
|
7
|
-
export class SqlTokenizer {
|
8
|
-
/// <summary>
|
9
|
-
/// Input string.
|
10
|
-
/// </summary>
|
11
|
-
private input: string;
|
12
|
-
|
13
|
-
/// <summary>
|
14
|
-
/// Current position in the input string.
|
15
|
-
/// </summary>
|
16
|
-
private position: number;
|
17
|
-
|
18
|
-
constructor(input: string) {
|
19
|
-
this.input = input;
|
20
|
-
this.position = 0;
|
21
|
-
}
|
22
|
-
|
23
|
-
private isEndOfInput(shift: number = 0): boolean {
|
24
|
-
return this.position + shift >= this.input.length;
|
25
|
-
}
|
26
|
-
|
27
|
-
private canRead(shift: number = 0): boolean {
|
28
|
-
return !this.isEndOfInput(shift);
|
29
|
-
}
|
30
|
-
|
31
|
-
public readLexmes(): Lexeme[] {
|
32
|
-
const lexemes: Lexeme[] = [];
|
33
|
-
|
34
|
-
// Skip whitespace and comments at the start
|
35
|
-
this.skipWhiteSpacesAndComments();
|
36
|
-
|
37
|
-
// Initialize each token reader
|
38
|
-
const symbolReader = new SymbolTokenReader(this.input, this.position);
|
39
|
-
const identifierReader = new IdentifierTokenReader(this.input, this.position);
|
40
|
-
const literalReader = new LiteralTokenReader(this.input, this.position);
|
41
|
-
const parameterReader = new ParameterTokenReader(this.input, this.position);
|
42
|
-
|
43
|
-
// Track the previous token
|
44
|
-
let previous: Lexeme | null = null;
|
45
|
-
|
46
|
-
// Read tokens until the end of the input is reached
|
47
|
-
while (this.canRead()) {
|
48
|
-
let lexeme: Lexeme | null = null;
|
49
|
-
|
50
|
-
// Attempt to read with each reader in order
|
51
|
-
parameterReader.setPosition(this.position);
|
52
|
-
lexeme = parameterReader.tryRead(previous);
|
53
|
-
|
54
|
-
if (!lexeme) {
|
55
|
-
literalReader.setPosition(this.position);
|
56
|
-
lexeme = literalReader.tryRead(previous);
|
57
|
-
}
|
58
|
-
|
59
|
-
if (!lexeme) {
|
60
|
-
identifierReader.setPosition(this.position);
|
61
|
-
lexeme = identifierReader.tryRead(previous);
|
62
|
-
}
|
63
|
-
|
64
|
-
if (!lexeme) {
|
65
|
-
symbolReader.setPosition(this.position);
|
66
|
-
lexeme = symbolReader.tryRead(previous);
|
67
|
-
}
|
68
|
-
|
69
|
-
// If a token is read by any reader
|
70
|
-
if (lexeme) {
|
71
|
-
lexemes.push(lexeme);
|
72
|
-
previous = lexeme;
|
73
|
-
|
74
|
-
// Update position
|
75
|
-
const newPos = Math.max(
|
76
|
-
symbolReader.getPosition(),
|
77
|
-
literalReader.getPosition(),
|
78
|
-
identifierReader.getPosition(),
|
79
|
-
parameterReader.getPosition()
|
80
|
-
);
|
81
|
-
this.position = newPos;
|
82
|
-
|
83
|
-
// Skip whitespace and comments after the token
|
84
|
-
this.skipWhiteSpacesAndComments();
|
85
|
-
} else {
|
86
|
-
// Exception
|
87
|
-
throw new Error(`Unexpected character. actual: ${this.input[this.position]}, position: ${this.position}`);
|
88
|
-
}
|
89
|
-
}
|
90
|
-
|
91
|
-
return lexemes;
|
92
|
-
}
|
93
|
-
|
94
|
-
/// <summary>
|
95
|
-
/// Skip white space characters and sql comments.
|
96
|
-
/// </summary>
|
97
|
-
private skipWhiteSpacesAndComments(): void {
|
98
|
-
while (true) {
|
99
|
-
if (this.skipWhiteSpace()) {
|
100
|
-
continue;
|
101
|
-
}
|
102
|
-
if (this.skipLineComment()) {
|
103
|
-
continue;
|
104
|
-
}
|
105
|
-
if (this.skipBlockComment()) {
|
106
|
-
continue;
|
107
|
-
}
|
108
|
-
break;
|
109
|
-
}
|
110
|
-
}
|
111
|
-
|
112
|
-
private skipWhiteSpace(): boolean {
|
113
|
-
const start = this.position;
|
114
|
-
|
115
|
-
// Skip tab, newline, and space characters
|
116
|
-
const whitespace = new Set([' ', '\r', '\n', '\t']);
|
117
|
-
|
118
|
-
while (this.canRead()) {
|
119
|
-
if (!whitespace.has(this.input[this.position])) {
|
120
|
-
break;
|
121
|
-
}
|
122
|
-
this.position++;
|
123
|
-
}
|
124
|
-
return start !== this.position;
|
125
|
-
}
|
126
|
-
|
127
|
-
private skipLineComment(): boolean {
|
128
|
-
// At least 2 characters are needed. '--'
|
129
|
-
if (this.isEndOfInput(1)) {
|
130
|
-
return false;
|
131
|
-
}
|
132
|
-
|
133
|
-
if (this.input[this.position] === '-' && this.input[this.position + 1] === '-') {
|
134
|
-
this.position += 2;
|
135
|
-
|
136
|
-
while (this.canRead() && this.input[this.position] !== '\n') {
|
137
|
-
this.position++;
|
138
|
-
}
|
139
|
-
return true;
|
140
|
-
}
|
141
|
-
|
142
|
-
return false;
|
143
|
-
}
|
144
|
-
|
145
|
-
private skipBlockComment(): boolean {
|
146
|
-
// At least 4 characters are needed. '/**/'
|
147
|
-
if (this.isEndOfInput(3)) {
|
148
|
-
return false;
|
149
|
-
}
|
150
|
-
|
151
|
-
// Record the start position of the comment to track error location
|
152
|
-
const start = this.position;
|
153
|
-
|
154
|
-
if (this.input[this.position] === '/' && this.input[this.position + 1] === '*') {
|
155
|
-
this.position += 2;
|
156
|
-
|
157
|
-
while (this.canRead(1)) {
|
158
|
-
if (this.input[this.position] === '*' && this.input[this.position + 1] === '/') {
|
159
|
-
this.position += 2;
|
160
|
-
return true;
|
161
|
-
}
|
162
|
-
this.position++;
|
163
|
-
}
|
164
|
-
|
165
|
-
throw new Error(`Block comment is not closed. position: ${start}`);
|
166
|
-
}
|
167
|
-
|
168
|
-
return false;
|
169
|
-
}
|
170
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
��SessionId��$489ee702-f5df-4723-87cb-618de990598a��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$cf4c8148-4e3e-444b-a66a-b8bc7d6cf6b6�Snapshots�� E621434FB1D5415B14FBBCC11967E420��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\02E79E48DFF5234787CB618DE990598A\48814CCF3E4E4B44A66AB8BC7D6CF6B6\E621434FB1D5415B14FBBCC11967E420�OriginalFilePath�FC:\Users\mssgm\Documents\GitHub\ts-sample\src\utils\charLookupTable.ts�NewFileMarker�� 904140CF7EDF0C98AEA45F0D36062FE1��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\02E79E48DFF5234787CB618DE990598A\48814CCF3E4E4B44A66AB8BC7D6CF6B6\904140CF7EDF0C98AEA45F0D36062FE1�OriginalFilePath�JC:\Users\mssgm\Documents\GitHub\ts-sample\src\utils\tokenReaderRegistry.ts�NewFileMarker�� A32D1DB906C73FA74EF270AAEE165FC0��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\02E79E48DFF5234787CB618DE990598A\48814CCF3E4E4B44A66AB8BC7D6CF6B6\A32D1DB906C73FA74EF270AAEE165FC0�OriginalFilePath�MC:\Users\mssgm\Documents\GitHub\ts-sample\src\tokenReaders\BaseTokenReader.ts�NewFileMarker�� EF71788BE39818EEA3F0164DC15E1BD7��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\02E79E48DFF5234787CB618DE990598A\48814CCF3E4E4B44A66AB8BC7D6CF6B6\EF71788BE39818EEA3F0164DC15E1BD7�OriginalFilePath�=C:\Users\mssgm\Documents\GitHub\ts-sample\src\sqlTokenizer.ts�NewFileMarker�
|
@@ -1,236 +0,0 @@
|
|
1
|
-
import { TokenType } from "../src/enums/tokenType";
|
2
|
-
import { SqlTokenizer } from "../src/sqlTokenizer";
|
3
|
-
|
4
|
-
test('tokenizes addition operator', () => {
|
5
|
-
// Arrange
|
6
|
-
const tokenizer = new SqlTokenizer('1+1');
|
7
|
-
|
8
|
-
// Act
|
9
|
-
const tokens = tokenizer.readLexmes();
|
10
|
-
|
11
|
-
// Assert
|
12
|
-
expect(tokens.length).toBe(3);
|
13
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
14
|
-
expect(tokens[1].value).toBe('+');
|
15
|
-
});
|
16
|
-
|
17
|
-
test('tokenizes multiplication operator', () => {
|
18
|
-
// Arrange
|
19
|
-
const tokenizer = new SqlTokenizer('1*2');
|
20
|
-
|
21
|
-
// Act
|
22
|
-
const tokens = tokenizer.readLexmes();
|
23
|
-
|
24
|
-
// Assert
|
25
|
-
expect(tokens.length).toBe(3);
|
26
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
27
|
-
expect(tokens[1].value).toBe('*');
|
28
|
-
});
|
29
|
-
|
30
|
-
test('tokenizes division operator', () => {
|
31
|
-
// Arrange
|
32
|
-
const tokenizer = new SqlTokenizer('1/3');
|
33
|
-
|
34
|
-
// Act
|
35
|
-
const tokens = tokenizer.readLexmes();
|
36
|
-
|
37
|
-
// Assert
|
38
|
-
expect(tokens.length).toBe(3);
|
39
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
40
|
-
expect(tokens[1].value).toBe('/');
|
41
|
-
});
|
42
|
-
|
43
|
-
test('tokenizes modulus operator', () => {
|
44
|
-
// Arrange
|
45
|
-
const tokenizer = new SqlTokenizer('1%4');
|
46
|
-
|
47
|
-
// Act
|
48
|
-
const tokens = tokenizer.readLexmes();
|
49
|
-
|
50
|
-
// Assert
|
51
|
-
expect(tokens.length).toBe(3);
|
52
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
53
|
-
expect(tokens[1].value).toBe('%');
|
54
|
-
});
|
55
|
-
|
56
|
-
test('tokenizes type convert operator', () => {
|
57
|
-
// Arrange
|
58
|
-
const tokenizer = new SqlTokenizer('1::text');
|
59
|
-
|
60
|
-
// Act
|
61
|
-
const tokens = tokenizer.readLexmes();
|
62
|
-
|
63
|
-
// Assert
|
64
|
-
expect(tokens.length).toBe(3);
|
65
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
66
|
-
expect(tokens[1].value).toBe('::');
|
67
|
-
});
|
68
|
-
|
69
|
-
test('tokenizes equality operator', () => {
|
70
|
-
// Arrange
|
71
|
-
const tokenizer = new SqlTokenizer('1==1');
|
72
|
-
|
73
|
-
// Act
|
74
|
-
const tokens = tokenizer.readLexmes();
|
75
|
-
|
76
|
-
// Assert
|
77
|
-
expect(tokens.length).toBe(3);
|
78
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
79
|
-
expect(tokens[1].value).toBe('==');
|
80
|
-
});
|
81
|
-
|
82
|
-
test('tokenizes inequality operator !=', () => {
|
83
|
-
// Arrange
|
84
|
-
const tokenizer = new SqlTokenizer('1!=2');
|
85
|
-
|
86
|
-
// Act
|
87
|
-
const tokens = tokenizer.readLexmes();
|
88
|
-
|
89
|
-
// Assert
|
90
|
-
expect(tokens.length).toBe(3);
|
91
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
92
|
-
expect(tokens[1].value).toBe('!=');
|
93
|
-
});
|
94
|
-
|
95
|
-
test('tokenizes inequality operator <>', () => {
|
96
|
-
// Arrange
|
97
|
-
const tokenizer = new SqlTokenizer('1<>2');
|
98
|
-
|
99
|
-
// Act
|
100
|
-
const tokens = tokenizer.readLexmes();
|
101
|
-
|
102
|
-
// Assert
|
103
|
-
expect(tokens.length).toBe(3);
|
104
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
105
|
-
expect(tokens[1].value).toBe('<>');
|
106
|
-
});
|
107
|
-
|
108
|
-
test('tokenizes less than operator', () => {
|
109
|
-
// Arrange
|
110
|
-
const tokenizer = new SqlTokenizer('1<2');
|
111
|
-
|
112
|
-
// Act
|
113
|
-
const tokens = tokenizer.readLexmes();
|
114
|
-
|
115
|
-
// Assert
|
116
|
-
expect(tokens.length).toBe(3);
|
117
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
118
|
-
expect(tokens[1].value).toBe('<');
|
119
|
-
});
|
120
|
-
|
121
|
-
test('tokenizes greater than operator', () => {
|
122
|
-
// Arrange
|
123
|
-
const tokenizer = new SqlTokenizer('1>0');
|
124
|
-
|
125
|
-
// Act
|
126
|
-
const tokens = tokenizer.readLexmes();
|
127
|
-
|
128
|
-
// Assert
|
129
|
-
expect(tokens.length).toBe(3);
|
130
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
131
|
-
expect(tokens[1].value).toBe('>');
|
132
|
-
});
|
133
|
-
|
134
|
-
test('tokenizes less than or equal operator', () => {
|
135
|
-
// Arrange
|
136
|
-
const tokenizer = new SqlTokenizer('1<=2');
|
137
|
-
|
138
|
-
// Act
|
139
|
-
const tokens = tokenizer.readLexmes();
|
140
|
-
|
141
|
-
// Assert
|
142
|
-
expect(tokens.length).toBe(3);
|
143
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
144
|
-
expect(tokens[1].value).toBe('<=');
|
145
|
-
});
|
146
|
-
|
147
|
-
test('tokenizes greater than or equal operator', () => {
|
148
|
-
// Arrange
|
149
|
-
const tokenizer = new SqlTokenizer('1>=0');
|
150
|
-
|
151
|
-
// Act
|
152
|
-
const tokens = tokenizer.readLexmes();
|
153
|
-
|
154
|
-
// Assert
|
155
|
-
expect(tokens.length).toBe(3);
|
156
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
157
|
-
expect(tokens[1].value).toBe('>=');
|
158
|
-
});
|
159
|
-
|
160
|
-
test('tokenizes bitwise NOT operator', () => {
|
161
|
-
// Arrange
|
162
|
-
const tokenizer = new SqlTokenizer('~1');
|
163
|
-
|
164
|
-
// Act
|
165
|
-
const tokens = tokenizer.readLexmes();
|
166
|
-
|
167
|
-
// Assert
|
168
|
-
expect(tokens.length).toBe(2);
|
169
|
-
expect(tokens[0].type).toBe(TokenType.Operator);
|
170
|
-
expect(tokens[0].value).toBe('~');
|
171
|
-
});
|
172
|
-
|
173
|
-
test('tokenizes array operation operator', () => {
|
174
|
-
// Arrange
|
175
|
-
const tokenizer = new SqlTokenizer('array@>1');
|
176
|
-
|
177
|
-
// Act
|
178
|
-
const tokens = tokenizer.readLexmes();
|
179
|
-
|
180
|
-
// Assert
|
181
|
-
expect(tokens.length).toBe(3);
|
182
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
183
|
-
expect(tokens[1].value).toBe('@>');
|
184
|
-
});
|
185
|
-
|
186
|
-
test('tokenizes JSON operation operator', () => {
|
187
|
-
// Arrange
|
188
|
-
const tokenizer = new SqlTokenizer('json#>1');
|
189
|
-
|
190
|
-
// Act
|
191
|
-
const tokens = tokenizer.readLexmes();
|
192
|
-
|
193
|
-
// Assert
|
194
|
-
expect(tokens.length).toBe(3);
|
195
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
196
|
-
expect(tokens[1].value).toBe('#>');
|
197
|
-
});
|
198
|
-
|
199
|
-
test('tokenizes exponentiation/XOR operator', () => {
|
200
|
-
// Arrange
|
201
|
-
const tokenizer = new SqlTokenizer('2^3');
|
202
|
-
|
203
|
-
// Act
|
204
|
-
const tokens = tokenizer.readLexmes();
|
205
|
-
|
206
|
-
// Assert
|
207
|
-
expect(tokens.length).toBe(3);
|
208
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
209
|
-
expect(tokens[1].value).toBe('^');
|
210
|
-
});
|
211
|
-
|
212
|
-
test('tokenizes bitwise AND operator', () => {
|
213
|
-
// Arrange
|
214
|
-
const tokenizer = new SqlTokenizer('1&1');
|
215
|
-
|
216
|
-
// Act
|
217
|
-
const tokens = tokenizer.readLexmes();
|
218
|
-
|
219
|
-
// Assert
|
220
|
-
expect(tokens.length).toBe(3);
|
221
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
222
|
-
expect(tokens[1].value).toBe('&');
|
223
|
-
});
|
224
|
-
|
225
|
-
test('tokenizes bitwise OR operator', () => {
|
226
|
-
// Arrange
|
227
|
-
const tokenizer = new SqlTokenizer('1|1');
|
228
|
-
|
229
|
-
// Act
|
230
|
-
const tokens = tokenizer.readLexmes();
|
231
|
-
|
232
|
-
// Assert
|
233
|
-
expect(tokens.length).toBe(3);
|
234
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
235
|
-
expect(tokens[1].value).toBe('|');
|
236
|
-
});
|
@@ -1 +0,0 @@
|
|
1
|
-
��SessionId��$3c01b107-5c38-4156-a5f5-100e0751210b��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$15c0730c-c8b2-4159-9afb-d08be1343fc0�Snapshots�� BA5D2B145A59265D63FA3B3584344B02��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\07B1013C385C5641A5F5100E0751210B\0C73C015B2C859419AFBD08BE1343FC0\BA5D2B145A59265D63FA3B3584344B02�OriginalFilePath�@C:\Users\mssgm\Documents\GitHub\ts-sample\tests\operator.test.ts�NewFileMarker�
|
@@ -1 +0,0 @@
|
|
1
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
|
@@ -1,19 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"name": "nodeconsoleapp1",
|
3
|
-
"version": "1.0.0",
|
4
|
-
"main": "app.js",
|
5
|
-
"scripts": {
|
6
|
-
"test": "echo \"Error: no test specified\" && exit 1",
|
7
|
-
"build": "tsc --build",
|
8
|
-
"clean": "tsc --build --clean"
|
9
|
-
},
|
10
|
-
"keywords": [],
|
11
|
-
"author": "",
|
12
|
-
"license": "ISC",
|
13
|
-
"description": "",
|
14
|
-
"devDependencies": {
|
15
|
-
"@types/node": "^22.13.10",
|
16
|
-
"eslint": "^9.22.0",
|
17
|
-
"typescript": "^5.8.2"
|
18
|
-
}
|
19
|
-
}
|
@@ -1,21 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"name": "nodeconsoleapp1",
|
3
|
-
"version": "1.0.0",
|
4
|
-
"main": "app.js",
|
5
|
-
"scripts": {
|
6
|
-
"test": "jest",
|
7
|
-
"build": "tsc --build",
|
8
|
-
"clean": "tsc --build --clean"
|
9
|
-
},
|
10
|
-
"keywords": [],
|
11
|
-
"author": "",
|
12
|
-
"license": "ISC",
|
13
|
-
"description": "",
|
14
|
-
"devDependencies": {
|
15
|
-
"@types/node": "^22.13.10",
|
16
|
-
"eslint": "^9.22.0",
|
17
|
-
"typescript": "^5.8.2",
|
18
|
-
"jest": "^29.0.0",
|
19
|
-
"@types/jest": "^29.0.0"
|
20
|
-
}
|
21
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
��SessionId��$2a76030d-a09e-48cb-85f2-114567f23f93��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$7850afa9-771e-49b8-aa32-62d2738d9338�Snapshots�� 7B623BFBAEB4EB61A9585F0BC8039B06��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\0D03762A9EA0CB4885F2114567F23F93\A9AF50781E77B849AA3262D2738D9338\7B623BFBAEB4EB61A9585F0BC8039B06�OriginalFilePath�:C:\Users\mssgm\Documents\GitHub\ts-sample\src\package.json�NewFileMarker�� 1F95FD72006ED6E92629CEFD7B2C4FEC��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\0D03762A9EA0CB4885F2114567F23F93\A9AF50781E77B849AA3262D2738D9338\1F95FD72006ED6E92629CEFD7B2C4FEC�OriginalFilePath�<C:\Users\mssgm\Documents\GitHub\ts-sample\src\jest.config.js�NewFileMarker�� 4CA7B9D3BC2D0A498DC0777EDA3F9B0F��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\0D03762A9EA0CB4885F2114567F23F93\A9AF50781E77B849AA3262D2738D9338\4CA7B9D3BC2D0A498DC0777EDA3F9B0F�OriginalFilePath�FC:\Users\mssgm\Documents\GitHub\ts-sample\src\__tests__\sample.test.js�NewFileMarker���CorrelationId�$294594ca-f764-4ba9-8ece-3b54ee21b50f�Snapshots�� 7B623BFBAEB4EB61A9585F0BC8039B06��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\0D03762A9EA0CB4885F2114567F23F93\CA94452964F7A94B8ECE3B54EE21B50F\7B623BFBAEB4EB61A9585F0BC8039B06�OriginalFilePath�:C:\Users\mssgm\Documents\GitHub\ts-sample\src\package.json�NewFileMarker�� 1F95FD72006ED6E92629CEFD7B2C4FEC��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\0D03762A9EA0CB4885F2114567F23F93\CA94452964F7A94B8ECE3B54EE21B50F\1F95FD72006ED6E92629CEFD7B2C4FEC�OriginalFilePath�<C:\Users\mssgm\Documents\GitHub\ts-sample\src\jest.config.js�NewFileMarker�� 4CA7B9D3BC2D0A498DC0777EDA3F9B0F��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\0D03762A9EA0CB4885F2114567F23F93\CA94452964F7A94B8ECE3B54EE21B50F\4CA7B9D3BC2D0A498DC0777EDA3F9B0F�OriginalFilePath�FC:\Users\mssgm\Documents\GitHub\ts-sample\src\__tests__\sample.test.js�NewFileMarker�
|