From f0ec687197f38e1ab52f3e69bd76849a51ed6436 Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Wed, 29 Oct 2025 20:44:59 -0700 Subject: literals --- src/lib/core/parser.ts | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'src/lib/core/parser.ts') diff --git a/src/lib/core/parser.ts b/src/lib/core/parser.ts index 0f095fe..d608eca 100644 --- a/src/lib/core/parser.ts +++ b/src/lib/core/parser.ts @@ -107,10 +107,23 @@ export type StackWithoutLast = Stack extends [ ? [] : never; -export type ResolveNodeFromToken<_Token extends Token> = - _Token["subType"] extends TokenSubType.LITERAL - ? ASTNode - : ASTNode; +type NULL_SENTINEL = { + NULL: true; +}; + +export type ParseNumberLiteral = + T extends `${infer Inner extends number}` ? Inner : NULL_SENTINEL; + +export type ParseStringLiteral = + T extends `"${infer Inner extends string}"` ? Inner : NULL_SENTINEL; + +export type ResolveNodeFromToken<_Token extends Token> = ParseNumberLiteral< + _Token["name"] +> extends number + ? ASTNode, []> + : ParseStringLiteral<_Token["name"]> extends string + ? ASTNode, []> + : ASTNode; export type _Parse = Ctx["remainingTokens"] extends [ infer Head extends Token, @@ -194,4 +207,4 @@ export type Parse = _Parse<{ stack: [ASTNode]; }>; -const test_result = null as unknown as Parse>; +const test_result = null as unknown as Parse>; -- cgit v1.2.3-70-g09d2