cz-conventional-changelog-befe
Version:
cz adaptor for baidu BEFE
103 lines (91 loc) • 2.65 kB
JavaScript
;
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _require = require('loader-utils'),
parseQuery = _require.parseQuery;
var qs = require('querystring');
var isEmpty = require('lodash.isempty');
module.exports = {
parse: parse,
stringify: stringify,
replaceStringify: replaceStringify
// {value?query} {aa:value:xxx?sss}
};function parse() {
var template = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var keys = [];
template.replace(/({([^}]+)}|(.+?))/g, function (match, m, key, chars) {
var data = {};
if (key) {
var i = key.lastIndexOf('?');
if (i >= 0 && i < key.length - 1) {
var query = key.slice(i + 1);
query = encodeURI(query);
// query = query.slice(0, 1) === '{' ? query : query
data = parseQuery('?' + query);
key = key.slice(0, i);
}
}
var props = {};
if (key) {
var matched = key.match(/^([^:]+:)?(.+?)(:[^:]+)?$/);
if (matched) {
matched[1] && (props.prefix = matched[1].slice(0, -1));
key = matched[2];
matched[3] && (props.suffix = matched[3].slice(1));
}
}
var d = key ? (0, _extends3.default)({ type: 'data', value: key, data: data }, props) : { type: 'plain', value: chars };
var last = keys[keys.length - 1];
if (last && last.type === 'plain' && d.type === 'plain') {
last.value += d.value;
} else {
keys.push(d);
}
return match;
});
return keys;
}
function stringify(parsed) {
return parsed.reduce(function (string, obj) {
if (obj.type === 'data') {
var val = obj.value;
if (obj.prefix) {
val = obj.prefix + ':' + val;
}
if (obj.suffix) {
val = val + ':' + obj.suffix;
}
if (obj.data && !isEmpty(obj.data)) {
val += '?' + qs.stringify(obj.data);
}
string += '{' + val + '}';
}
if (obj.type === 'plain') {
string += obj.value;
}
return string;
}, '');
}
function replaceStringify(parsed, data, replacer) {
replacer = replacer || function (data, d) {
var s = '' + data[d.value];
if (d.prefix) {
s = d.prefix + s;
}
if (d.suffix) {
s = s + d.suffix;
}
return s;
};
parsed = parsed.map(function (d) {
if (d.type === 'data' && data.hasOwnProperty(d.value)) {
return {
type: 'plain',
value: replacer(data, d)
};
}
return d;
});
return stringify(parsed);
}