toDisplayString.ts 1.1 KB

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