UNPKG

pretur.spec

Version:

MDA model specification builder for code generation

113 lines 15.5 kB
"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