diff --git a/.changeset/ten-geckos-relate.md b/.changeset/ten-geckos-relate.md new file mode 100644 index 0000000..2f37fe7 --- /dev/null +++ b/.changeset/ten-geckos-relate.md @@ -0,0 +1,9 @@ +--- +'@tsxmod/utils': minor +--- + +Adds `isLiteralExpressionValue` utility to help determine if a literal expression value was resolved or not since `undefined` is a valid value. + +```ts + +``` diff --git a/packages/utils/src/expressions/index.ts b/packages/utils/src/expressions/index.ts index 0a1bfea..776af3c 100644 --- a/packages/utils/src/expressions/index.ts +++ b/packages/utils/src/expressions/index.ts @@ -1,5 +1,6 @@ export { resolveLiteralExpression, + isLiteralExpressionValue, type LiteralExpressionValue, } from './resolveLiteralExpression' export { resolveObjectLiteralExpression } from './resolveObjectLiteralExpression' diff --git a/packages/utils/src/expressions/resolveLiteralExpression.ts b/packages/utils/src/expressions/resolveLiteralExpression.ts index 9f56114..f17600d 100644 --- a/packages/utils/src/expressions/resolveLiteralExpression.ts +++ b/packages/utils/src/expressions/resolveLiteralExpression.ts @@ -11,10 +11,15 @@ export type LiteralExpressionValue = | Record | LiteralExpressionValue[] +const EMPTY_LITERAL_EXPRESSION_VALUE = Symbol('EMPTY_LITERAL_EXPRESSION_VALUE') + /** Recursively resolves an expression into a literal value. */ export function resolveLiteralExpression( expression: Expression -): LiteralExpressionValue | LiteralExpressionValue[] | undefined { +): + | LiteralExpressionValue + | LiteralExpressionValue[] + | typeof EMPTY_LITERAL_EXPRESSION_VALUE { if (Node.isNullLiteral(expression)) { return null } @@ -65,4 +70,13 @@ export function resolveLiteralExpression( if (Node.isSpreadElement(expression) || Node.isAsExpression(expression)) { return resolveLiteralExpression(expression.getExpression()) } + + return EMPTY_LITERAL_EXPRESSION_VALUE +} + +/** Determines when a value was resolved in `resolveLiteralExpression`. */ +export function isLiteralExpressionValue( + value: ReturnType +) { + return value !== EMPTY_LITERAL_EXPRESSION_VALUE }