123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- function stringify (value, space) {
- return JSON.stringify(value, replacer, space)
- }
- function parse (text) {
- return JSON.parse(text, reviver)
- }
- function replacer (key, value) {
- if (isBufferLike(value)) {
- if (isArray(value.data)) {
- if (value.data.length > 0) {
- value.data = 'base64:' + Buffer.from(value.data).toString('base64')
- } else {
- value.data = ''
- }
- }
- }
- return value
- }
- function reviver (key, value) {
- if (isBufferLike(value)) {
- if (isArray(value.data)) {
- return Buffer.from(value.data)
- } else if (isString(value.data)) {
- if (value.data.startsWith('base64:')) {
- return Buffer.from(value.data.slice('base64:'.length), 'base64')
- }
- // Assume that the string is UTF-8 encoded (or empty).
- return Buffer.from(value.data)
- }
- }
- return value
- }
- function isBufferLike (x) {
- return (
- isObject(x) && x.type === 'Buffer' && (isArray(x.data) || isString(x.data))
- )
- }
- function isArray (x) {
- return Array.isArray(x)
- }
- function isString (x) {
- return typeof x === 'string'
- }
- function isObject (x) {
- return typeof x === 'object' && x !== null
- }
- module.exports = {
- stringify,
- parse,
- replacer,
- reviver
- }
|