index.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. function stringify (value, space) {
  2. return JSON.stringify(value, replacer, space)
  3. }
  4. function parse (text) {
  5. return JSON.parse(text, reviver)
  6. }
  7. function replacer (key, value) {
  8. if (isBufferLike(value)) {
  9. if (isArray(value.data)) {
  10. if (value.data.length > 0) {
  11. value.data = 'base64:' + Buffer.from(value.data).toString('base64')
  12. } else {
  13. value.data = ''
  14. }
  15. }
  16. }
  17. return value
  18. }
  19. function reviver (key, value) {
  20. if (isBufferLike(value)) {
  21. if (isArray(value.data)) {
  22. return Buffer.from(value.data)
  23. } else if (isString(value.data)) {
  24. if (value.data.startsWith('base64:')) {
  25. return Buffer.from(value.data.slice('base64:'.length), 'base64')
  26. }
  27. // Assume that the string is UTF-8 encoded (or empty).
  28. return Buffer.from(value.data)
  29. }
  30. }
  31. return value
  32. }
  33. function isBufferLike (x) {
  34. return (
  35. isObject(x) && x.type === 'Buffer' && (isArray(x.data) || isString(x.data))
  36. )
  37. }
  38. function isArray (x) {
  39. return Array.isArray(x)
  40. }
  41. function isString (x) {
  42. return typeof x === 'string'
  43. }
  44. function isObject (x) {
  45. return typeof x === 'object' && x !== null
  46. }
  47. module.exports = {
  48. stringify,
  49. parse,
  50. replacer,
  51. reviver
  52. }