toDisplayString.ts 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import {
  2. isArray,
  3. isMap,
  4. isObject,
  5. isFunction,
  6. isPlainObject,
  7. isSet,
  8. objectToString
  9. } from './index'
  10. /**
  11. * For converting {{ interpolation }} values to displayed strings.
  12. * @private
  13. */
  14. export const toDisplayString = (val: unknown): string => {
  15. return val == null
  16. ? ''
  17. : isArray(val) ||
  18. (isObject(val) &&
  19. (val.toString === objectToString || !isFunction(val.toString)))
  20. ? JSON.stringify(val, replacer, 2)
  21. : String(val)
  22. }
  23. const replacer = (_key: string, val: any): any => {
  24. // can't use isRef here since @vue/shared has no deps
  25. if (val && val.__v_isRef) {
  26. return replacer(_key, val.value)
  27. } else if (isMap(val)) {
  28. return {
  29. [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {
  30. ;(entries as any)[`${key} =>`] = val
  31. return entries
  32. }, {})
  33. }
  34. } else if (isSet(val)) {
  35. return {
  36. [`Set(${val.size})`]: [...val.values()]
  37. }
  38. } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {
  39. return String(val)
  40. }
  41. return val
  42. }