MCPcopy Create free account
hub / github.com/zenstackhq/zenstack / getObjectLiteral

Function getObjectLiteral

packages/language/src/utils.ts:350–371  ·  view source on GitHub ↗
(expr: Expression | ConfigExpr | undefined)

Source from the content-addressed store, hash-verified

348 * Tries to get an object literal from the given expression. Returns `undefined` if the expression is not an object literal or if any of the field values cannot be determined.
349 */
350export function getObjectLiteral<T>(expr: Expression | ConfigExpr | undefined): T | undefined {
351 if (!expr || !isObjectExpr(expr)) {
352 return undefined;
353 }
354 const result: Record<string, unknown> = {};
355 for (const field of expr.fields) {
356 let fieldValue: unknown;
357 if (isLiteralExpr(field.value)) {
358 fieldValue = getLiteral(field.value);
359 } else if (isArrayExpr(field.value)) {
360 fieldValue = getLiteralArray(field.value);
361 } else if (isObjectExpr(field.value)) {
362 fieldValue = getObjectLiteral(field.value);
363 }
364 if (fieldValue === undefined) {
365 return undefined;
366 } else {
367 result[field.name] = fieldValue;
368 }
369 }
370 return result as T;
371}
372
373export function getLiteralArray<T extends string | number | boolean | any = any>(
374 expr: Expression | ConfigExpr | undefined,

Callers 1

getLiteralFunction · 0.85

Calls 5

isObjectExprFunction · 0.90
isLiteralExprFunction · 0.90
isArrayExprFunction · 0.90
getLiteralFunction · 0.85
getLiteralArrayFunction · 0.85

Tested by

no test coverage detected