UNPKG

noodl-loader

Version:

Loader for noodl applications

130 lines 4.35 kB
"use strict"; 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