@abaplint/core
Version:
abaplint - Core API
25 lines • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CDSAssociation = void 0;
const _1 = require(".");
const combi_1 = require("../../abap/2_statements/combi");
const cds_cardinality_1 = require("./cds_cardinality");
class CDSAssociation extends combi_1.Expression {
getRunnable() {
// Text cardinality: "to exact one", "to one", "to many" — no brackets
const textCardinality = (0, combi_1.seq)((0, combi_1.opt)("EXACT"), (0, combi_1.altPrio)("ONE", "MANY"));
// Numeric cardinality: any non-negative integer or * (e.g. [0..1], [1..2], [0..*])
const cardNum = (0, combi_1.altPrio)((0, combi_1.regex)(/^\d+$/), "*");
const numericCardinality = (0, combi_1.seq)("[", cardNum, (0, combi_1.optPrio)((0, combi_1.seq)(".", ".", cardNum)), "]");
// Text-based OF form: "association of one to many Target on ..." — text cardinality includes "TO"
const ofTextSide = (0, combi_1.altPrio)((0, combi_1.seq)("EXACT", "ONE"), "ONE", "MANY");
const ofTextForm = (0, combi_1.seq)("ASSOCIATION", "OF", ofTextSide, "TO", ofTextSide, _1.CDSRelation, "ON", _1.CDSCondition);
// Numeric OF form: "association of [0..1] to Target on ..."
const ofNumericForm = (0, combi_1.seq)("ASSOCIATION", "OF", numericCardinality, "TO", _1.CDSRelation, "ON", _1.CDSCondition);
// "association [0..1] to Target as _Alias on condition" — standard form
const standardForm = (0, combi_1.seq)("ASSOCIATION", (0, combi_1.optPrio)(cds_cardinality_1.CDSCardinality), "TO", (0, combi_1.opt)((0, combi_1.altPrio)(textCardinality, "PARENT")), _1.CDSRelation, "ON", _1.CDSCondition, (0, combi_1.opt)((0, combi_1.seq)("WITH", "DEFAULT", "FILTER", _1.CDSCondition)));
return (0, combi_1.altPrio)(ofTextForm, ofNumericForm, standardForm);
}
}
exports.CDSAssociation = CDSAssociation;
//# sourceMappingURL=cds_association.js.map