UNPKG

xcparse

Version:

pbxproj parser

63 lines 1.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContextVisitor = void 0; const parser_1 = require("../parser/parser"); /** Converts a CST for `pbxproj` into a JSON representation. */ class ContextVisitor extends parser_1.BaseVisitor { constructor() { super(); this.context = {}; // The "validateVisitor" method is a helper utility which performs static analysis // to detect missing or redundant visitor methods this.validateVisitor(); } head(ctx) { if (ctx.array) { this.context = this.visit(ctx.array); } else if (ctx.object) { this.context = this.visit(ctx.object); } } object(ctx) { return (ctx.objectItem?.reduce((prev, item) => ({ ...prev, ...this.visit(item), }), {}) ?? {}); } array(ctx) { return ctx.value?.map((item) => this.visit(item)) ?? []; } objectItem(ctx) { return { [this.visit(ctx.identifier)]: this.visit(ctx.value), }; } identifier(ctx) { // console.log("id:", ctx); if (ctx.QuotedString) { return ctx.QuotedString[0].payload ?? ctx.QuotedString[0].image; } else if (ctx.StringLiteral) { return ctx.StringLiteral[0].payload ?? ctx.StringLiteral[0].image; } throw new Error("unhandled: " + ctx); } value(ctx) { if (ctx.identifier) { return this.visit(ctx.identifier); } else if (ctx.DataLiteral) { return ctx.DataLiteral[0].payload ?? ctx.DataLiteral[0].image; } else if (ctx.object) { return this.visit(ctx.object); } else if (ctx.array) { return this.visit(ctx.array); } throw new Error("unhandled: " + ctx); } } exports.ContextVisitor = ContextVisitor; //# sourceMappingURL=contextVisitor.js.map