xcparse
Version:
pbxproj parser
63 lines • 1.98 kB
JavaScript
;
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