123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import { isFunc } from './util'
- import { warn } from './debug'
- import Locale from '../../modules/locale'
- const stringRE = /\{\{((?:.|\n)+?)\}\}/g
- const quoteRe = /['"]/g
- const INVALID_INDEX = -1
- function format (string, config = '') {
- return string.replace(stringRE, (match, group1, index) => {
- const helpersArr = group1.split('|').slice(1).map(_ => _.trim())
- const hasHelpers = helpersArr.length
- let result = config
- if (hasHelpers) {
- helpersArr.forEach((helperString) => {
- let { fnName, args } = resolveHelperFnString(helperString)
- args.unshift(result)
- /* istanbul ignore else */
- if (isFunc(Locale.helpers[fnName])) {
- result = Locale.helpers[fnName].apply(null, args)
- } else {
- warn(`A helper function named "${fnName}" is not registered, ` +
- `please register it by Validator.addHelper()`)
- result = ''
- }
- })
- }
- return result
- })
- }
- function resolveHelperFnString (helperString) {
- const leftBracketsIndex = helperString.indexOf('(')
- const rightBracketsIndex = helperString.indexOf(')')
- let fnName = ''
- let args = []
- /* istanbul ignore if */
- if (leftBracketsIndex === INVALID_INDEX) {
- args = []
- fnName = helperString
- } else if (leftBracketsIndex !== INVALID_INDEX && rightBracketsIndex !== INVALID_INDEX) {
- const argsStr = helperString.slice(leftBracketsIndex + 1, rightBracketsIndex)
- args = argsStr.split(',').map(_ => _.trim().replace(quoteRe, ''))
- fnName = helperString.slice(0, leftBracketsIndex)
- }
- return { fnName, args }
- }
- export default format
|