noodl-loader
Version:
Loader for noodl applications
130 lines • 4.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.replacePlaceholders = exports.replacePlaceholder = void 0;
const tslib_1 = require("tslib");
const noodl_core_1 = require("noodl-core");
const R = tslib_1.__importStar(require("rambda"));
const yml_1 = require("./yml");
const regex_1 = tslib_1.__importDefault(require("../internal/regex"));
/**
* @example
* ```js
* const key = '${cadlversion}'
* const value = 'abc123.41'
* const str = 'http://public.aitmed.com/cadl/www${cadlVersion}${designSuffix}/'
*
* const result = replacePlaceholder(key, value, str)
*
* console.log(result) // Result: 'https://public.aitmed.com/cadl/wwwabc123.41${designSuffix}/'
* ```
*/
exports.replacePlaceholder = R.curry((key, value, str) => {
return str.replace(key, value);
});
function replacePlaceholders(
/**
* Regular expression or target objects to replace placeholders from
*/
regexOrObjs,
/**
* Object(s) to replace placeholders from or
*/
objsOrValues, valuesProp) {
let rx;
let objs;
let values;
if (regexOrObjs instanceof RegExp) {
rx = regexOrObjs;
objs = objsOrValues;
values = valuesProp;
}
else {
rx = regex_1.default.placeholder;
objs = regexOrObjs;
values = objsOrValues;
}
if (!objs)
return objs;
const isReplaceable = (value) => {
if (!value)
return false;
if (noodl_core_1.is.str(value) && rx.test(value))
return true;
if (noodl_core_1.is.arr(value) || noodl_core_1.is.obj(value))
return true;
if ((0, yml_1.isNode)(value)) {
if ((0, yml_1.isScalar)(value)) {
return noodl_core_1.is.str(value.value) && rx.test(value.value);
}
return true;
}
return false;
};
const replaceString = (str, obj) => {
for (const [key, value] of noodl_core_1.fp.entries(obj)) {
const placeholder = '$' + '{' + key + '}';
if (str.includes(placeholder)) {
str = str.replace(placeholder, value);
}
}
return str;
};
if (noodl_core_1.is.str(objs)) {
if (rx.test(objs))
return replaceString(objs, values);
return objs;
}
if (noodl_core_1.is.arr(objs)) {
objs.forEach((obj, index) => {
if (objs)
objs[index] = replacePlaceholders(rx, obj, values);
});
return objs;
}
if ((0, yml_1.isNode)(objs) || (0, yml_1.isPair)(objs)) {
let node = ((0, yml_1.isPair)(objs) ? objs.value : objs);
if ((0, yml_1.isDocument)(node) && node.contents) {
node = node.contents;
}
if (node) {
if ((0, yml_1.isScalar)(node)) {
if (isReplaceable(node.value)) {
node.value = replacePlaceholders(rx, node.value, values);
}
}
else if ((0, yml_1.isMap)(node)) {
node.items.forEach((pair) => {
if (isReplaceable(pair.value)) {
pair.value = replacePlaceholders(rx, pair.value, values);
}
});
}
else if ((0, yml_1.isSeq)(node)) {
const seqNode = node;
seqNode.items.forEach((item, index) => {
if (isReplaceable(item)) {
seqNode.set(index, replacePlaceholders(rx, item, values));
}
});
}
}
return objs;
}
if (noodl_core_1.is.obj(objs)) {
for (const [key, value] of noodl_core_1.fp.entries(objs)) {
if (isReplaceable(value)) {
objs[key] = replacePlaceholders(rx, value, values);
}
else if (noodl_core_1.is.arr(value)) {
value.forEach((v, i) => {
if (isReplaceable(v)) {
value[i] = replacePlaceholders(rx, v, values);
}
});
}
}
}
return objs;
}
exports.replacePlaceholders = replacePlaceholders;
//# sourceMappingURL=replace.js.map