@atomist/automation-client
Version:
Atomist API for software low-level client
212 lines • 7.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const scan_1 = require("../../scan");
function set_metadata(obj, key, value) {
let target = obj;
if (!!obj.prototype) {
// should only be true for class Decorators
target = obj.prototype;
}
Object.defineProperty(target, key, {
value,
writable: false,
enumerable: false,
configurable: false,
});
}
function get_metadata(obj, key) {
if (!obj) {
return null;
}
let desc = Object.getOwnPropertyDescriptor(obj, key);
if (!desc && !!Object.getPrototypeOf(obj)) {
desc = get_metadata(Object.getPrototypeOf(obj), key);
}
if (!!desc) {
return desc.value;
}
return null;
}
function declareParameter(target, propertyKey, details) {
let params = get_metadata(target, "__parameters");
if (!params) {
params = [];
}
else {
// remove any that have the same name already (i.e. if folk are calling declareParameter)
// use a cheeky method so that we can reuse the same array
const found = params.filter(p => p.name === propertyKey);
if (!!found && found.length > 0) {
const index = params.indexOf(found[0]);
params.splice(index, 1);
}
}
const copy = Object.assign({}, details);
// Make required = true the default
copy.required = copy.required !== undefined && copy.required !== null ? copy.required : true;
copy.name = propertyKey;
params.push(copy);
// merge parameters from parent if it has some
let parent = Object.getPrototypeOf(target);
while (!!parent) {
const protoParams = get_metadata(parent, "__parameters");
if (!!protoParams) {
protoParams.forEach(protoParam => {
// if we don't already have a parameter with the same name
if (!params.some(param => param.name === protoParam.name)) {
params.push(protoParam);
}
});
}
parent = Object.getPrototypeOf(parent);
}
set_metadata(target, "__parameters", params);
return target;
}
exports.declareParameter = declareParameter;
function declareMappedParameter(target, name, uri, required) {
let params = get_metadata(target, "__mappedParameters");
if (!params) {
params = [];
}
else {
// remove any that have the same name already (i.e. if folk are calling declareMappedParameter)
// use a cheeky method so that we can reuse the same array
const found = params.filter(p => p.localKey === name);
if (!!found && found.length > 0) {
const index = params.indexOf(found[0]);
params.splice(index, 1);
}
}
const param = { name, uri, required };
params.push(param);
// merge mapped_parameters from parent if it has some
let parent = Object.getPrototypeOf(target);
while (!!parent) {
const protoParams = get_metadata(parent, "__mappedParameters");
if (!!protoParams) {
protoParams.forEach(protoParam => {
// if we don't already have a parameter with the same name
if (!params.some(p => p.name === protoParam.name)) {
params.push(protoParam);
}
});
}
parent = Object.getPrototypeOf(parent);
}
set_metadata(target, "__mappedParameters", params);
return target;
}
exports.declareMappedParameter = declareMappedParameter;
function declareValue(target, name, value) {
let params = get_metadata(target, "__values");
if (!params) {
params = [];
}
else {
// remove any that have the same name already (i.e. if folk are calling declareValue)
// use a cheeky method so that we can reuse the same array
const found = params.filter(p => p.localKey === name);
if (!!found && found.length > 0) {
const index = params.indexOf(found[0]);
params.splice(index, 1);
}
}
const param = { name, value };
params.push(param);
// merge values from parent if it has some
let parent = Object.getPrototypeOf(target);
while (!!parent) {
const protoParams = get_metadata(parent, "__values");
if (!!protoParams) {
protoParams.forEach(protoParam => {
// if we don't already have a value with the same name
if (!params.some(p => p.name === protoParam.name)) {
params.push(protoParam);
}
});
}
parent = Object.getPrototypeOf(parent);
}
set_metadata(target, "__values", params);
return target;
}
exports.declareValue = declareValue;
function declareSecret(target, name, uri) {
let params = get_metadata(target, "__secrets");
if (!params) {
params = [];
}
else {
// remove any that have the same name already (i.e. if folk are calling declareSecret)
// use a cheeky method so that we can reuse the same array
const found = params.filter(p => p.name === name);
if (!!found && found.length > 0) {
const index = params.indexOf(found[0]);
params.splice(index, 1);
}
}
const param = { name, uri };
params.push(param);
// merge secrets from parent if it has some
let parent = Object.getPrototypeOf(target);
while (!!parent) {
const protoParams = get_metadata(parent, "__secrets");
if (!!protoParams) {
protoParams.forEach(protoParam => {
// if we don't already have a parameter with the same name
if (!params.some(p => p.name === protoParam.name)) {
params.push(protoParam);
}
});
}
parent = Object.getPrototypeOf(parent);
}
set_metadata(target, "__secrets", params);
return target;
}
exports.declareSecret = declareSecret;
function declareCommandHandler(obj, description, autoSubmit, intent) {
declareRug(obj, "command-handler", description);
declareIntent(obj, intent);
if (autoSubmit) {
declareAutoSubmit(obj, autoSubmit);
}
scan_1.registerCommand(obj);
return obj;
}
exports.declareCommandHandler = declareCommandHandler;
function declareParameters(obj) {
set_metadata(obj, "__name", obj.prototype.constructor.name);
set_metadata(obj, "__kind", "parameters");
return obj;
}
exports.declareParameters = declareParameters;
function declareRug(obj, kind, description) {
set_metadata(obj, "__description", description);
set_metadata(obj, "__name", obj.prototype.constructor.name);
set_metadata(obj, "__kind", kind);
}
function declareEventHandler(obj, description, subscription) {
declareRug(obj, "event-handler", description);
set_metadata(obj, "__subscription", subscription);
scan_1.registerEvent(obj);
return obj;
}
exports.declareEventHandler = declareEventHandler;
function declareTags(target, tags) {
set_metadata(target, "__tags", tags.map(t => ({ name: t, description: t })));
return target;
}
exports.declareTags = declareTags;
function declareIntent(target, intent) {
set_metadata(target, "__intent", intent);
return target;
}
exports.declareIntent = declareIntent;
function declareAutoSubmit(target, autoSubmit) {
set_metadata(target, "__autoSubmit", autoSubmit);
return target;
}
exports.declareAutoSubmit = declareAutoSubmit;
//# sourceMappingURL=decoratorSupport.js.map