pretur.spec
Version:
MDA model specification builder for code generation
113 lines • 15.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var relation_1 = require("./relation");
var attribute_1 = require("./attribute");
function validateJoinee(options) {
if (process.env.NODE_ENV !== 'production') {
if (!options.spec) {
throw new Error('spec is not provided');
}
if (typeof options.aliasOnJoin !== 'string') {
throw new Error("alias " + options.aliasOnJoin + " is not valid");
}
if (typeof options.aliasOnTarget !== 'string') {
throw new Error("alias " + options.aliasOnTarget + " is not valid");
}
}
}
exports.validateJoinee = validateJoinee;
function createJoinSpec(options, initializer) {
validateJoinee(options.firstJoinee);
validateJoinee(options.secondJoinee);
var spec = {
attributes: [],
indexes: { unique: [] },
initialize: initialize,
join: true,
model: undefined,
name: options.name,
relations: [],
scope: options.scope,
type: undefined,
};
var builder = {
attribute: attribute_1.createAttributeBuilder(spec),
multicolumnUniqueIndex: function () {
var fields = [];
for (var _i = 0; _i < arguments.length; _i++) {
fields[_i] = arguments[_i];
}
spec.indexes.unique.push(fields);
},
};
builder.attribute({
mutable: false,
name: options.firstJoinee.key.name,
primary: options.firstJoinee.key.primary !== false,
type: options.firstJoinee.key.type || 'INTEGER',
});
builder.attribute({
mutable: false,
name: options.secondJoinee.key.name,
primary: options.secondJoinee.key.primary !== false,
type: options.secondJoinee.key.type || 'INTEGER',
});
relation_1.appendRelation(spec, {
alias: options.firstJoinee.aliasOnJoin,
key: options.firstJoinee.key.name,
target: {
scope: options.firstJoinee.spec.scope,
model: options.firstJoinee.spec.name,
},
onDelete: options.firstJoinee.onDelete || 'CASCADE',
onUpdate: options.firstJoinee.onUpdate || 'CASCADE',
required: true,
type: 'MASTER',
});
relation_1.appendRelation(spec, {
alias: options.secondJoinee.aliasOnJoin,
key: options.secondJoinee.key.name,
target: {
scope: options.secondJoinee.spec.scope,
model: options.secondJoinee.spec.name,
},
onDelete: options.secondJoinee.onDelete || 'CASCADE',
onUpdate: options.secondJoinee.onUpdate || 'CASCADE',
required: true,
type: 'MASTER',
});
relation_1.appendRelation(options.firstJoinee.spec, {
alias: options.secondJoinee.aliasOnTarget,
key: options.firstJoinee.key.name,
target: {
scope: options.secondJoinee.spec.scope,
model: options.secondJoinee.spec.name,
},
onDelete: options.firstJoinee.onDelete || 'CASCADE',
onUpdate: options.firstJoinee.onUpdate || 'CASCADE',
required: true,
through: { scope: spec.scope, model: spec.name },
type: 'MANY_TO_MANY',
});
relation_1.appendRelation(options.secondJoinee.spec, {
alias: options.firstJoinee.aliasOnTarget,
key: options.secondJoinee.key.name,
target: {
scope: options.firstJoinee.spec.scope,
model: options.firstJoinee.spec.name,
},
onDelete: options.secondJoinee.onDelete || 'CASCADE',
onUpdate: options.secondJoinee.onUpdate || 'CASCADE',
required: true,
through: { scope: spec.scope, model: spec.name },
type: 'MANY_TO_MANY',
});
function initialize() {
if (typeof initializer === 'function') {
initializer(builder);
}
}
return spec;
}
exports.createJoinSpec = createJoinSpec;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9pblNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvam9pblNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBaUU7QUFFakUseUNBQW1GO0FBc0JuRix3QkFDRSxPQUErQjtJQUUvQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVMsT0FBTyxDQUFDLFdBQVcsa0JBQWUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVMsT0FBTyxDQUFDLGFBQWEsa0JBQWUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQWhCRCx3Q0FnQkM7QUFTRCx3QkFJRSxPQUF1QyxFQUN2QyxXQUF1RDtJQUd2RCxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFckMsSUFBTSxJQUFJLEdBQVk7UUFDcEIsVUFBVSxFQUFFLEVBQUU7UUFDZCxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1FBQ3ZCLFVBQVUsWUFBQTtRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLFNBQVU7UUFDakIsSUFB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SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQXpHRCx3Q0F5R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RpZmljYXRpb25BY3Rpb25zLCBhcHBlbmRSZWxhdGlvbiB9IGZyb20gJy4vcmVsYXRpb24nO1xyXG5pbXBvcnQgeyBTcGVjLCBTcGVjVHlwZSB9IGZyb20gJy4vc3BlYyc7XHJcbmltcG9ydCB7IEF0dHJpYnV0ZUJ1aWxkZXIsIGNyZWF0ZUF0dHJpYnV0ZUJ1aWxkZXIsIE5vcm1hbFR5cGUgfSBmcm9tICcuL2F0dHJpYnV0ZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEpvaW5TcGVjQnVpbGRlcjxKIGV4dGVuZHMgU3BlY1R5cGU+IHtcclxuICBhdHRyaWJ1dGU6IEF0dHJpYnV0ZUJ1aWxkZXI8SlsnZmllbGRzJ10+O1xyXG4gIG11bHRpY29sdW1uVW5pcXVlSW5kZXgoLi4uZmllbGRzOiAoa2V5b2YgSlsnZmllbGRzJ10pW10pOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEpvaW5LZXk8TiBleHRlbmRzIHN0cmluZz4ge1xyXG4gIG5hbWU6IE47XHJcbiAgdHlwZT86IE5vcm1hbFR5cGU7XHJcbiAgcHJpbWFyeT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSm9pbmVlT3B0aW9uczxKIGV4dGVuZHMgU3BlY1R5cGUsIFMgZXh0ZW5kcyBTcGVjVHlwZSwgVCBleHRlbmRzIFNwZWNUeXBlPiB7XHJcbiAgc3BlYzogU3BlYzxTPjtcclxuICBhbGlhc09uSm9pbjoga2V5b2YgSlsncmVjb3JkcyddO1xyXG4gIGFsaWFzT25UYXJnZXQ6IGtleW9mIFRbJ3NldHMnXTtcclxuICBrZXk6IEpvaW5LZXk8a2V5b2YgSlsnZmllbGRzJ10+O1xyXG4gIG9uRGVsZXRlPzogTW9kaWZpY2F0aW9uQWN0aW9ucztcclxuICBvblVwZGF0ZT86IE1vZGlmaWNhdGlvbkFjdGlvbnM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUpvaW5lZTxKIGV4dGVuZHMgU3BlY1R5cGUsIFMgZXh0ZW5kcyBTcGVjVHlwZSwgVCBleHRlbmRzIFNwZWNUeXBlPihcclxuICBvcHRpb25zOiBKb2luZWVPcHRpb25zPEosIFMsIFQ+LFxyXG4pIHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgaWYgKCFvcHRpb25zLnNwZWMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzcGVjIGlzIG5vdCBwcm92aWRlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hbGlhc09uSm9pbiAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhbGlhcyAke29wdGlvbnMuYWxpYXNPbkpvaW59IGlzIG5vdCB2YWxpZGApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hbGlhc09uVGFyZ2V0ICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFsaWFzICR7b3B0aW9ucy5hbGlhc09uVGFyZ2V0fSBpcyBub3QgdmFsaWRgKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSm9pblNwZWNPcHRpb25zPEogZXh0ZW5kcyBTcGVjVHlwZSwgRiBleHRlbmRzIFNwZWNUeXBlLCBTIGV4dGVuZHMgU3BlY1R5cGU+IHtcclxuICBuYW1lOiBKWyduYW1lJ107XHJcbiAgc2NvcGU6IHN0cmluZztcclxuICBmaXJzdEpvaW5lZTogSm9pbmVlT3B0aW9uczxKLCBGLCBTPjtcclxuICBzZWNvbmRKb2luZWU6IEpvaW5lZU9wdGlvbnM8SiwgUywgRj47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKb2luU3BlYzxcclxuICBKIGV4dGVuZHMgU3BlY1R5cGUgPSBTcGVjVHlwZSxcclxuICBGIGV4dGVuZHMgU3BlY1R5cGUgPSBTcGVjVHlwZSxcclxuICBTIGV4dGVuZHMgU3BlY1R5cGUgPSBTcGVjVHlwZT4oXHJcbiAgb3B0aW9uczogQ3JlYXRlSm9pblNwZWNPcHRpb25zPEosIEYsIFM+LFxyXG4gIGluaXRpYWxpemVyPzogKHNwZWNCdWlsZGVyOiBKb2luU3BlY0J1aWxkZXI8Sj4pID0+IHZvaWQsXHJcbik6IFNwZWM8Sj4ge1xyXG5cclxuICB2YWxpZGF0ZUpvaW5lZShvcHRpb25zLmZpcnN0Sm9pbmVlKTtcclxuICB2YWxpZGF0ZUpvaW5lZShvcHRpb25zLnNlY29uZEpvaW5lZSk7XHJcblxyXG4gIGNvbnN0IHNwZWM6IFNwZWM8Sj4gPSB7XHJcbiAgICBhdHRyaWJ1dGVzOiBbXSxcclxuICAgIGluZGV4ZXM6IHsgdW5pcXVlOiBbXSB9LFxyXG4gICAgaW5pdGlhbGl6ZSxcclxuICAgIGpvaW46IHRydWUsXHJcbiAgICBtb2RlbDogdW5kZWZpbmVkISxcclxuICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcclxuICAgIHJlbGF0aW9uczogW10sXHJcbiAgICBzY29wZTogb3B0aW9ucy5zY29wZSxcclxuICAgIHR5cGU6IHVuZGVmaW5lZCEsXHJcbiAgfTtcclxuXHJcbiAgY29uc3QgYnVpbGRlciA9IDxKb2luU3BlY0J1aWxkZXI8Sj4+e1xyXG4gICAgYXR0cmlidXRlOiBjcmVhdGVBdHRyaWJ1dGVCdWlsZGVyKHNwZWMpLFxyXG4gICAgbXVsdGljb2x1bW5VbmlxdWVJbmRleCguLi5maWVsZHM6IChrZXlvZiBKWydmaWVsZHMnXSlbXSkge1xyXG4gICAgICBzcGVjLmluZGV4ZXMudW5pcXVlLnB1c2goZmllbGRzKTtcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgYnVpbGRlci5hdHRyaWJ1dGUoe1xyXG4gICAgbXV0YWJsZTogZmFsc2UsXHJcbiAgICBuYW1lOiBvcHRpb25zLmZpcnN0Sm9pbmVlLmtleS5uYW1lLFxyXG4gICAgcHJpbWFyeTogb3B0aW9ucy5maXJzdEpvaW5lZS5rZXkucHJpbWFyeSAhPT0gZmFsc2UsXHJcbiAgICB0eXBlOiBvcHRpb25zLmZpcnN0Sm9pbmVlLmtleS50eXBlIHx8ICdJTlRFR0VSJyxcclxuICB9KTtcclxuXHJcbiAgYnVpbGRlci5hdHRyaWJ1dGUoe1xyXG4gICAgbXV0YWJsZTogZmFsc2UsXHJcbiAgICBuYW1lOiBvcHRpb25zLnNlY29uZEpvaW5lZS5rZXkubmFtZSxcclxuICAgIHByaW1hcnk6IG9wdGlvbnMuc2Vjb25kSm9pbmVlLmtleS5wcmltYXJ5ICE9PSBmYWxzZSxcclxuICAgIHR5cGU6IG9wdGlvbnMuc2Vjb25kSm9pbmVlLmtleS50eXBlIHx8ICdJTlRFR0VSJyxcclxuICB9KTtcclxuXHJcbiAgYXBwZW5kUmVsYXRpb24oc3BlYywge1xyXG4gICAgYWxpYXM6IG9wdGlvbnMuZmlyc3RKb2luZWUuYWxpYXNPbkpvaW4sXHJcbiAgICBrZXk6IG9wdGlvbnMuZmlyc3RKb2luZWUua2V5Lm5hbWUsXHJcbiAgICB0YXJnZXQ6IHtcclxuICAgICAgc2NvcGU6IG9wdGlvbnMuZmlyc3RKb2luZWUuc3BlYy5zY29wZSxcclxuICAgICAgbW9kZWw6IG9wdGlvbnMuZmlyc3RKb2luZWUuc3BlYy5uYW1lLFxyXG4gICAgfSxcclxuICAgIG9uRGVsZXRlOiBvcHRpb25zLmZpcnN0Sm9pbmVlLm9uRGVsZXRlIHx8ICdDQVNDQURFJyxcclxuICAgIG9uVXBkYXRlOiBvcHRpb25zLmZpcnN0Sm9pbmVlLm9uVXBkYXRlIHx8ICdDQVNDQURFJyxcclxuICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgdHlwZTogJ01BU1RFUicsXHJcbiAgfSk7XHJcblxyXG4gIGFwcGVuZFJlbGF0aW9uKHNwZWMsIHtcclxuICAgIGFsaWFzOiBvcHRpb25zLnNlY29uZEpvaW5lZS5hbGlhc09uSm9pbixcclxuICAgIGtleTogb3B0aW9ucy5zZWNvbmRKb2luZWUua2V5Lm5hbWUsXHJcbiAgICB0YXJnZXQ6IHtcclxuICAgICAgc2NvcGU6IG9wdGlvbnMuc2Vjb25kSm9pbmVlLnNwZWMuc2NvcGUsXHJcbiAgICAgIG1vZGVsOiBvcHRpb25zLnNlY29uZEpvaW5lZS5zcGVjLm5hbWUsXHJcbiAgICB9LFxyXG4gICAgb25EZWxldGU6IG9wdGlvbnMuc2Vjb25kSm9pbmVlLm9uRGVsZXRlIHx8ICdDQVNDQURFJyxcclxuICAgIG9uVXBkYXRlOiBvcHRpb25zLnNlY29uZEpvaW5lZS5vblVwZGF0ZSB8fCAnQ0FTQ0FERScsXHJcbiAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgIHR5cGU6ICdNQVNURVInLFxyXG4gIH0pO1xyXG5cclxuICBhcHBlbmRSZWxhdGlvbihvcHRpb25zLmZpcnN0Sm9pbmVlLnNwZWMsIHtcclxuICAgIGFsaWFzOiBvcHRpb25zLnNlY29uZEpvaW5lZS5hbGlhc09uVGFyZ2V0LFxyXG4gICAga2V5OiBvcHRpb25zLmZpcnN0Sm9pbmVlLmtleS5uYW1lLFxyXG4gICAgdGFyZ2V0OiB7XHJcbiAgICAgIHNjb3BlOiBvcHRpb25zLnNlY29uZEpvaW5lZS5zcGVjLnNjb3BlLFxyXG4gICAgICBtb2RlbDogb3B0aW9ucy5zZWNvbmRKb2luZWUuc3BlYy5uYW1lLFxyXG4gICAgfSxcclxuICAgIG9uRGVsZXRlOiBvcHRpb25zLmZpcnN0Sm9pbmVlLm9uRGVsZXRlIHx8ICdDQVNDQURFJyxcclxuICAgIG9uVXBkYXRlOiBvcHRpb25zLmZpcnN0Sm9pbmVlLm9uVXBkYXRlIHx8ICdDQVNDQURFJyxcclxuICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgdGhyb3VnaDogeyBzY29wZTogc3BlYy5zY29wZSwgbW9kZWw6IHNwZWMubmFtZSB9LFxyXG4gICAgdHlwZTogJ01BTllfVE9fTUFOWScsXHJcbiAgfSk7XHJcblxyXG4gIGFwcGVuZFJlbGF0aW9uKG9wdGlvbnMuc2Vjb25kSm9pbmVlLnNwZWMsIHtcclxuICAgIGFsaWFzOiBvcHRpb25zLmZpcnN0Sm9pbmVlLmFsaWFzT25UYXJnZXQsXHJcbiAgICBrZXk6IG9wdGlvbnMuc2Vjb25kSm9pbmVlLmtleS5uYW1lLFxyXG4gICAgdGFyZ2V0OiB7XHJcbiAgICAgIHNjb3BlOiBvcHRpb25zLmZpcnN0Sm9pbmVlLnNwZWMuc2NvcGUsXHJcbiAgICAgIG1vZGVsOiBvcHRpb25zLmZpcnN0Sm9pbmVlLnNwZWMubmFtZSxcclxuICAgIH0sXHJcbiAgICBvbkRlbGV0ZTogb3B0aW9ucy5zZWNvbmRKb2luZWUub25EZWxldGUgfHwgJ0NBU0NBREUnLFxyXG4gICAgb25VcGRhdGU6IG9wdGlvbnMuc2Vjb25kSm9pbmVlLm9uVXBkYXRlIHx8ICdDQVNDQURFJyxcclxuICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgdGhyb3VnaDogeyBzY29wZTogc3BlYy5zY29wZSwgbW9kZWw6IHNwZWMubmFtZSB9LFxyXG4gICAgdHlwZTogJ01BTllfVE9fTUFOWScsXHJcbiAgfSk7XHJcblxyXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XHJcbiAgICBpZiAodHlwZW9mIGluaXRpYWxpemVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGluaXRpYWxpemVyKGJ1aWxkZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNwZWM7XHJcbn1cclxuIl19