pretur.spec
Version:
MDA model specification builder for code generation
63 lines • 12.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var lodash_1 = require("lodash");
var defaults = {
autoIncrement: false,
mutable: true,
primary: false,
required: false,
unique: false,
};
var primaryDefaults = tslib_1.__assign({}, defaults, { autoIncrement: true, mutable: false, primary: true, type: 'INTEGER' });
function validateAttribute(attribute) {
if (process.env.NODE_ENV !== 'production') {
if (!attribute.name || typeof attribute.name !== 'string') {
throw new Error("Attribute name < " + attribute.name + " > is invalid");
}
if (attribute.autoIncrement && !attribute.primary) {
throw new Error("Only primary keys can be auto increment. Check " + attribute.name + ".");
}
if (attribute.autoIncrement && attribute.type !== 'INTEGER' && attribute.type !== 'BIGINT') {
throw new Error("Only integer attributes can be auto incremented. Check " + attribute.name + ".");
}
if (attribute.primary && (attribute.unique || attribute.required)) {
throw new Error("primary means unique and required. Providing both is redundant.");
}
}
}
exports.validateAttribute = validateAttribute;
function appendAttribute(spec, attribute) {
if (process.env.NODE_ENV !== 'production') {
if (!spec) {
throw new Error('Model must be provided.');
}
if (!attribute) {
throw new Error("No attribute provided to be appended to " + spec.name + ".");
}
if (lodash_1.chain(spec.attributes).map('name').includes(attribute.name).value()) {
throw new Error("Attribute " + attribute.name + " of type " + attribute.type.toString() + " was added twice.");
}
validateAttribute(attribute);
}
spec.attributes.push(attribute);
}
exports.appendAttribute = appendAttribute;
function createAttributeBuilder(spec) {
if (process.env.NODE_ENV !== 'production' && !spec) {
throw new Error('spec must be provided');
}
function attributeBuilder(options) {
appendAttribute(spec, tslib_1.__assign({}, defaults, options));
}
var ab = attributeBuilder;
ab.primaryKey = function buildPrimaryKey(options) {
if (options && options.type && options.type !== 'INTEGER' && options.type !== 'BIGINT') {
options.autoIncrement = false;
}
appendAttribute(spec, tslib_1.__assign({}, primaryDefaults, { scope: spec.scope }, options));
};
return ab;
}
exports.createAttributeBuilder = createAttributeBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2F0dHJpYnV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBK0I7QUE0RS9CLElBQU0sUUFBUSxHQUFHO0lBQ2YsYUFBYSxFQUFFLEtBQUs7SUFDcEIsT0FBTyxFQUFFLElBQUk7SUFDYixPQUFPLEVBQUUsS0FBSztJQUNkLFFBQVEsRUFBRSxLQUFLO0lBQ2YsTUFBTSxFQUFFLEtBQUs7Q0FDZCxDQUFDO0FBRUYsSUFBTSxlQUFlLHdCQUNoQixRQUFRLElBQ1gsYUFBYSxFQUFFLElBQUksRUFDbkIsT0FBTyxFQUFFLEtBQUssRUFDZCxPQUFPLEVBQUUsSUFBSSxFQUNiLElBQUksRUFBRSxTQUFTLEdBQ2hCLENBQUM7QUFTRiwyQkFBa0MsU0FBb0I7SUFDcEQsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztRQUMxQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksT0FBTyxTQUFTLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBb0IsU0FBUyxDQUFDLElBQUksa0JBQWUsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBa0QsU0FBUyxDQUFDLElBQUksTUFBRyxDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzNGLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTBELFNBQVMsQ0FBQyxJQUFJLE1BQUcsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUNyRixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFsQkQsOENBa0JDO0FBRUQseUJBQ0UsSUFBYSxFQUNiLFNBQWlDO0lBRWpDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUEyQyxJQUFJLENBQUMsSUFBSSxNQUFHLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBRUQsRUFBRSxDQUFDLENBQUMsY0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEUsTUFBTSxJQUFJLEtBQUssQ0FDYixlQUFhLFNBQVMsQ0FBQyxJQUFJLGlCQUFZLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHNCQUFtQixDQUNwRixDQUFDO1FBQ0osQ0FBQztRQUVELGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBdkJELDBDQXVCQztBQU9ELGdDQUNFLElBQWE7SUFFYixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsMEJBQ0UsT0FBa0M7UUFFbEMsZUFBZSxDQUFDLElBQUksdUJBQU8sUUFBUSxFQUFLLE9BQU8sRUFBRyxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFNLEVBQUUsR0FBa0MsZ0JBQWdCLENBQUM7SUFFM0QsRUFBRSxDQUFDLFVBQVUsR0FBRyx5QkFDZCxPQUEyQztRQUUzQyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdkYsT0FBTyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDaEMsQ0FBQztRQUNELGVBQWUsQ0FBQyxJQUFJLHVCQUFPLGVBQWUsSUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBVyxPQUFRLEVBQUcsQ0FBQztJQUN0RixDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1osQ0FBQztBQXpCRCx3REF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjaGFpbiB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFNwZWMsIFNwZWNUeXBlIH0gZnJvbSAnLi9zcGVjJztcclxuXHJcbmV4cG9ydCB0eXBlIE5vcm1hbFR5cGUgPSAnSU5URUdFUicgfCAnQklHSU5UJyB8ICdCT09MRUFOJyB8ICdEQVRFJyB8ICdET1VCTEUnIHwgJ1NUUklORycgfCAnT0JKRUNUJztcclxuZXhwb3J0IHR5cGUgUmFuZ2VUeXBlID0gJ0lOVEVHRVInIHwgJ0JJR0lOVCcgfCAnREFURSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFycmF5U3VidHlwZU5vcm1hbCB7XHJcbiAgdHlwZTogTm9ybWFsVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcnJheVN1YnR5cGVEZWNpbWFsIHtcclxuICB0eXBlOiAnREVDSU1BTCc7XHJcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xyXG4gIHNjYWxlPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFycmF5U3VidHlwZVJhbmdlIHtcclxuICB0eXBlOiAnUkFOR0UnO1xyXG4gIHN1YnR5cGU6IFJhbmdlVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcnJheVN1YnR5cGVNdWx0aWRpbWVuc2lvbmFsIHtcclxuICB0eXBlOiAnQVJSQVknO1xyXG4gIHN1YnR5cGU6IEFycmF5U3VidHlwZTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQXJyYXlTdWJ0eXBlID1cclxuICB8IEFycmF5U3VidHlwZU5vcm1hbFxyXG4gIHwgQXJyYXlTdWJ0eXBlRGVjaW1hbFxyXG4gIHwgQXJyYXlTdWJ0eXBlUmFuZ2VcclxuICB8IEFycmF5U3VidHlwZU11bHRpZGltZW5zaW9uYWw7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZUJhc2U8VCwgSyBleHRlbmRzIGtleW9mIFQgPSBrZXlvZiBUPiB7XHJcbiAgbmFtZTogSztcclxuICB2aXJ0dWFsPzogYm9vbGVhbjtcclxuICByZXF1aXJlZD86IGJvb2xlYW47XHJcbiAgdW5pcXVlPzogYm9vbGVhbjtcclxuICBwcmltYXJ5PzogYm9vbGVhbjtcclxuICBhdXRvSW5jcmVtZW50PzogYm9vbGVhbjtcclxuICBtdXRhYmxlPzogYm9vbGVhbjtcclxuICBkZWZhdWx0VmFsdWU/OiBUW0tdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5vcm1hbEF0dHJpYnV0ZTxULCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+IGV4dGVuZHMgQXR0cmlidXRlQmFzZTxULCBLPiB7XHJcbiAgdHlwZTogTm9ybWFsVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZWNpbWFsQXR0cmlidXRlPFQsIEsgZXh0ZW5kcyBrZXlvZiBUID0ga2V5b2YgVD4gZXh0ZW5kcyBBdHRyaWJ1dGVCYXNlPFQsIEs+IHtcclxuICB0eXBlOiAnREVDSU1BTCc7XHJcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xyXG4gIHNjYWxlPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVudW1BdHRyaWJ1dGU8VCwgSyBleHRlbmRzIGtleW9mIFQgPSBrZXlvZiBUPiBleHRlbmRzIEF0dHJpYnV0ZUJhc2U8VCwgSz4ge1xyXG4gIHR5cGU6ICdFTlVNJztcclxuICB0eXBlbmFtZTogc3RyaW5nO1xyXG4gIHZhbHVlczogVFtLXVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlQXR0cmlidXRlPFQsIEsgZXh0ZW5kcyBrZXlvZiBUID0ga2V5b2YgVD4gZXh0ZW5kcyBBdHRyaWJ1dGVCYXNlPFQsIEs+IHtcclxuICB0eXBlOiAnUkFOR0UnO1xyXG4gIHN1YnR5cGU6IFJhbmdlVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcnJheUF0dHJpYnV0ZTxULCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+IGV4dGVuZHMgQXR0cmlidXRlQmFzZTxULCBLPiB7XHJcbiAgdHlwZTogJ0FSUkFZJztcclxuICBzdWJ0eXBlOiBBcnJheVN1YnR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEF0dHJpYnV0ZTxUID0gYW55LCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+ID1cclxuICB8IE5vcm1hbEF0dHJpYnV0ZTxULCBLPlxyXG4gIHwgRGVjaW1hbEF0dHJpYnV0ZTxULCBLPlxyXG4gIHwgRW51bUF0dHJpYnV0ZTxULCBLPlxyXG4gIHwgUmFuZ2VBdHRyaWJ1dGU8VCwgSz5cclxuICB8IEFycmF5QXR0cmlidXRlPFQsIEs+O1xyXG5cclxuY29uc3QgZGVmYXVsdHMgPSB7XHJcbiAgYXV0b0luY3JlbWVudDogZmFsc2UsXHJcbiAgbXV0YWJsZTogdHJ1ZSxcclxuICBwcmltYXJ5OiBmYWxzZSxcclxuICByZXF1aXJlZDogZmFsc2UsXHJcbiAgdW5pcXVlOiBmYWxzZSxcclxufTtcclxuXHJcbmNvbnN0IHByaW1hcnlEZWZhdWx0cyA9IHtcclxuICAuLi5kZWZhdWx0cyxcclxuICBhdXRvSW5jcmVtZW50OiB0cnVlLFxyXG4gIG11dGFibGU6IGZhbHNlLFxyXG4gIHByaW1hcnk6IHRydWUsXHJcbiAgdHlwZTogJ0lOVEVHRVInLFxyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcmltYXJ5S2V5T3B0aW9uczxULCBLIGV4dGVuZHMga2V5b2YgVD4ge1xyXG4gIG5hbWU6IEs7XHJcbiAgdHlwZT86IE5vcm1hbFR5cGU7XHJcbiAgYXV0b0luY3JlbWVudD86IGJvb2xlYW47XHJcbiAgbXV0YWJsZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSkge1xyXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICBpZiAoIWF0dHJpYnV0ZS5uYW1lIHx8IHR5cGVvZiBhdHRyaWJ1dGUubmFtZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdHRyaWJ1dGUgbmFtZSA8ICR7YXR0cmlidXRlLm5hbWV9ID4gaXMgaW52YWxpZGApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhdHRyaWJ1dGUuYXV0b0luY3JlbWVudCAmJiAhYXR0cmlidXRlLnByaW1hcnkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPbmx5IHByaW1hcnkga2V5cyBjYW4gYmUgYXV0byBpbmNyZW1lbnQuIENoZWNrICR7YXR0cmlidXRlLm5hbWV9LmApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhdHRyaWJ1dGUuYXV0b0luY3JlbWVudCAmJiBhdHRyaWJ1dGUudHlwZSAhPT0gJ0lOVEVHRVInICYmIGF0dHJpYnV0ZS50eXBlICE9PSAnQklHSU5UJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgaW50ZWdlciBhdHRyaWJ1dGVzIGNhbiBiZSBhdXRvIGluY3JlbWVudGVkLiBDaGVjayAke2F0dHJpYnV0ZS5uYW1lfS5gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXR0cmlidXRlLnByaW1hcnkgJiYgKGF0dHJpYnV0ZS51bmlxdWUgfHwgYXR0cmlidXRlLnJlcXVpcmVkKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByaW1hcnkgbWVhbnMgdW5pcXVlIGFuZCByZXF1aXJlZC4gUHJvdmlkaW5nIGJvdGggaXMgcmVkdW5kYW50LmApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZEF0dHJpYnV0ZTxUIGV4dGVuZHMgU3BlY1R5cGU+KFxyXG4gIHNwZWM6IFNwZWM8VD4sXHJcbiAgYXR0cmlidXRlOiBBdHRyaWJ1dGU8VFsnZmllbGRzJ10+LFxyXG4pOiB2b2lkIHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgaWYgKCFzcGVjKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kZWwgbXVzdCBiZSBwcm92aWRlZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWF0dHJpYnV0ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGF0dHJpYnV0ZSBwcm92aWRlZCB0byBiZSBhcHBlbmRlZCB0byAke3NwZWMubmFtZX0uYCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYWluKHNwZWMuYXR0cmlidXRlcykubWFwKCduYW1lJykuaW5jbHVkZXMoYXR0cmlidXRlLm5hbWUpLnZhbHVlKCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBBdHRyaWJ1dGUgJHthdHRyaWJ1dGUubmFtZX0gb2YgdHlwZSAke2F0dHJpYnV0ZS50eXBlLnRvU3RyaW5nKCl9IHdhcyBhZGRlZCB0d2ljZS5gLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XHJcbiAgfVxyXG5cclxuICBzcGVjLmF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGUpO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZUJ1aWxkZXI8Rj4ge1xyXG4gIDxLIGV4dGVuZHMga2V5b2YgRj4ob3B0aW9uczogQXR0cmlidXRlPEYsIEs+KTogdm9pZDtcclxuICBwcmltYXJ5S2V5PEsgZXh0ZW5kcyBrZXlvZiBGPihvcHRpb25zPzogUHJpbWFyeUtleU9wdGlvbnM8RiwgSz4pOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXR0cmlidXRlQnVpbGRlcjxUIGV4dGVuZHMgU3BlY1R5cGU+KFxyXG4gIHNwZWM6IFNwZWM8VD4sXHJcbik6IEF0dHJpYnV0ZUJ1aWxkZXI8VFsnZmllbGRzJ10+IHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3BlYykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdzcGVjIG11c3QgYmUgcHJvdmlkZWQnKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGF0dHJpYnV0ZUJ1aWxkZXI8SyBleHRlbmRzIGtleW9mIFRbJ2ZpZWxkcyddPihcclxuICAgIG9wdGlvbnM6IEF0dHJpYnV0ZTxUWydmaWVsZHMnXSwgSz4sXHJcbiAgKTogdm9pZCB7XHJcbiAgICBhcHBlbmRBdHRyaWJ1dGUoc3BlYywgeyAuLi5kZWZhdWx0cywgLi4ub3B0aW9ucyB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGFiID0gPEF0dHJpYnV0ZUJ1aWxkZXI8VFsnZmllbGRzJ10+PmF0dHJpYnV0ZUJ1aWxkZXI7XHJcblxyXG4gIGFiLnByaW1hcnlLZXkgPSBmdW5jdGlvbiBidWlsZFByaW1hcnlLZXk8SyBleHRlbmRzIGtleW9mIFRbJ2ZpZWxkcyddPihcclxuICAgIG9wdGlvbnM/OiBQcmltYXJ5S2V5T3B0aW9uczxUWydmaWVsZHMnXSwgSz4sXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnR5cGUgJiYgb3B0aW9ucy50eXBlICE9PSAnSU5URUdFUicgJiYgb3B0aW9ucy50eXBlICE9PSAnQklHSU5UJykge1xyXG4gICAgICBvcHRpb25zLmF1dG9JbmNyZW1lbnQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGFwcGVuZEF0dHJpYnV0ZShzcGVjLCB7IC4uLnByaW1hcnlEZWZhdWx0cywgc2NvcGU6IHNwZWMuc2NvcGUsIC4uLig8YW55Pm9wdGlvbnMpIH0pO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBhYjtcclxufVxyXG4iXX0=