UNPKG

cz-conventional-changelog-befe

Version:
103 lines (91 loc) 2.65 kB
'use strict'; 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); }