{"version":3,"file":"index.mjs","sources":["../../src/JsonStreamStringify.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nimport { Readable } from 'stream';\n\n// eslint-disable-next-line no-control-regex, no-misleading-character-class\nconst rxEscapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n// table of character substitutions\nconst meta = {\n  '\\b': '\\\\b',\n  '\\t': '\\\\t',\n  '\\n': '\\\\n',\n  '\\f': '\\\\f',\n  '\\r': '\\\\r',\n  '\"': '\\\\\"',\n  '\\\\': '\\\\\\\\',\n};\n\nfunction isReadableStream(value): boolean {\n  return typeof value.read === 'function'\n      && typeof value.pause === 'function'\n      && typeof value.resume === 'function'\n      && typeof value.pipe === 'function'\n      && typeof value.once === 'function'\n      && typeof value.removeListener === 'function';\n}\n\nenum Types {\n  Array,\n  Object,\n  ReadableString,\n  ReadableObject,\n  Primitive,\n  Promise,\n}\n\nfunction getType(value): Types {\n  if (!value) return Types.Primitive;\n  if (typeof value.then === 'function') return Types.Promise;\n  if (isReadableStream(value)) return value._readableState.objectMode ? Types.ReadableObject : Types.ReadableString;\n  if (Array.isArray(value)) return Types.Array;\n  if (typeof value === 'object' || value instanceof Object) return Types.Object;\n  return Types.Primitive;\n}\n\nfunction escapeString(string) {\n  // Modified code, original code by Douglas Crockford\n  // Original: https://github.com/douglascrockford/JSON-js/blob/master/json2.js\n\n  // If the string contains no control characters, no quote characters, and no\n  // backslash characters, then we can safely slap some quotes around it.\n  // Otherwise we must also replace the offending characters with safe escape\n  // sequences.\n\n  return string.replace(rxEscapable, (a) => {\n    const c = meta[a];\n    return typeof c === 'string' ? c : `\\\\u${a.charCodeAt(0).toString(16).padStart(4, '0')}`;\n  });\n}\n\nlet primitiveToJSON: (value: any) => string;\n\nif (global?.JSON?.stringify instanceof Function) {\n  try {\n    if (JSON.stringify(global.BigInt ? global.BigInt('123') : '') !== '123') throw new Error();\n    primitiveToJSON = JSON.stringify;\n  } catch (err) {\n    // Add support for bigint for primitiveToJSON\n    // eslint-disable-next-line no-confusing-arrow\n    primitiveToJSON = (value) => typeof value === 'bigint' ? String(value) : JSON.stringify(value);\n  }\n} else {\n  primitiveToJSON = (value) => {\n    switch (typeof value) {\n      case 'string':\n        return `\"${escapeString(value)}\"`;\n      case 'number':\n        return Number.isFinite(value) ? String(value) : 'null';\n      case 'bigint':\n        return String(value);\n      case 'boolean':\n        return value ? 'true' : 'false';\n      case 'object':\n        if (!value) {\n          return 'null';\n        }\n      // eslint-disable-next-line no-fallthrough\n      default:\n        // This should never happen, I can't imagine a situation where this executes.\n        // If you find a way, please open a ticket or PR\n        throw Object.assign(new Error(`Not a primitive \"${typeof value}\".`), { value });\n    }\n  };\n}\n\n/*\nfunction quoteString(string: string) {\n  return primitiveToJSON(String(string));\n}\n*/\n\nconst cache = new Map();\nfunction quoteString(string: string) {\n  const useCache = string.length < 10_000;\n  // eslint-disable-next-line no-lonely-if\n  if (useCache && cache.has(string)) {\n    return cache.get(string);\n  }\n  const str = primitiveToJSON(String(string));\n  if (useCache) cache.set(string, str);\n  return str;\n}\n\nfunction readAsPromised(stream: Readable, size?) {\n  const value = stream.read(size);\n  if (value === null && !(stream.readableEnded || (stream as any)._readableState?.ended)) {\n    return new Promise((resolve, reject) => {\n      const endListener = () => resolve(null);\n      stream.once('end', endListener);\n      stream.once('error', reject);\n      stream.once('readable', () => {\n        stream.removeListener('end', endListener);\n        stream.removeListener('error', reject);\n        readAsPromised(stream, size).then(resolve, reject);\n      });\n    });\n  }\n  return Promise.resolve(value);\n}\n\ninterface Item {\n  read(size?: number): Promise<void> | void;\n  depth?: number;\n  value?: any;\n  indent?: string;\n  path?: (string | number)[];\n  type?: string;\n}\n\nenum ReadState {\n  Inactive = 0,\n  Reading,\n  ReadMore,\n  Consumed,\n}\n\nexport class JsonStreamStringify extends Readable {\n  item?: Item;\n  indent?: string;\n  root: Item;\n  include: string[];\n  replacer: Function;\n  visited: [] | WeakMap<any, string[]>;\n\n  constructor(\n    input: any,\n    replacer?: Function | any[] | undefined,\n    spaces?: number | string | undefined,\n    private cycle = false,\n    private bufferSize = 512,\n  ) {\n    super({ encoding: 'utf8' });\n\n    const spaceType = typeof spaces;\n    if (spaceType === 'number') {\n      this.indent = ' '.repeat(<number>spaces);\n    } else if (spaceType === 'string') {\n      this.indent = <string>spaces;\n    }\n\n    const replacerType = typeof replacer;\n    if (replacerType === 'object') {\n      this.include = replacer as string[];\n    } else if (replacerType === 'function') {\n      this.replacer = replacer as Function;\n    }\n\n    this.visited = cycle ? new WeakMap() : [];\n\n    this.root = <any>{\n      value: { '': input },\n      depth: 0,\n      indent: '',\n      path: [],\n    };\n    this.setItem(input, this.root, '');\n  }\n\n  setItem(value, parent: Item, key: string | number = '') {\n    // call toJSON where applicable\n    if (\n      value\n      && typeof value === 'object'\n      && typeof value.toJSON === 'function'\n    ) {\n      value = value.toJSON(key);\n    }\n\n    // use replacer if applicable\n    if (this.replacer) {\n      value = this.replacer.call(parent.value, key, value);\n    }\n\n    // coerece functions and symbols into undefined\n    if (value instanceof Function || typeof value === 'symbol') {\n      value = undefined;\n    }\n\n    const type = getType(value);\n    let path;\n\n    // check for circular structure\n    if (!this.cycle && type !== Types.Primitive) {\n      if ((this.visited as any[]).some((v) => v === value)) {\n        this.destroy(Object.assign(new Error('Converting circular structure to JSON'), {\n          value,\n          key,\n        }));\n        return;\n      }\n      (this.visited as any[]).push(value);\n    } else if (this.cycle && type !== Types.Primitive) {\n      path = (this.visited as WeakMap<any, string[]>).get(value);\n      if (path) {\n        this._push(`{\"$ref\":\"$${path.map((v) => `[${(Number.isInteger(v as number) ? v : escapeString(quoteString(v as string)))}]`).join('')}\"}`);\n        this.item = parent;\n        return;\n      }\n      path = parent === this.root ? [] : parent.path.concat(key);\n      (this.visited as WeakMap<any, string[]>).set(value, path);\n    }\n\n    if (type === Types.Object) {\n      this.setObjectItem(value, parent);\n    } else if (type === Types.Array) {\n      this.setArrayItem(value, parent);\n    } else if (type === Types.Primitive) {\n      if (parent !== this.root && typeof key === 'string') {\n        // (<any>parent).write(key, primitiveToJSON(value));\n        if (value === undefined) {\n          // clear prePush buffer\n          // this.prePush = '';\n        } else {\n          this._push(primitiveToJSON(value));\n        }\n        // undefined values in objects should be rejected\n      } else if (value === undefined && typeof key === 'number') {\n        // undefined values in array should be null\n        this._push('null');\n      } else if (value === undefined) {\n        // undefined values should be ignored\n      } else {\n        this._push(primitiveToJSON(value));\n      }\n      this.item = parent;\n      return;\n    } else if (type === Types.Promise) {\n      this.setPromiseItem(value, parent, key);\n    } else if (type === Types.ReadableString) {\n      this.setReadableStringItem(value, parent);\n    } else if (type === Types.ReadableObject) {\n      this.setReadableObjectItem(value, parent);\n    }\n\n    this.item.value = value;\n    this.item.depth = parent.depth + 1;\n    if (this.indent) this.item.indent = this.indent.repeat(this.item.depth);\n    this.item.path = path;\n  }\n\n  setReadableStringItem(input: Readable, parent: Item) {\n    if (input.readableEnded || (input as any)._readableState?.endEmitted) {\n      this.emit('error', new Error('Readable Stream has ended before it was serialized. All stream data have been lost'), input, parent.path);\n    } else if (input.readableFlowing || (input as any)._readableState?.flowing) {\n      input.pause();\n      this.emit('error', new Error('Readable Stream is in flowing mode, data may have been lost. Trying to pause stream.'), input, parent.path);\n    }\n    const that = this;\n    this.prePush = '\"';\n    this.item = <any>{\n      type: 'readable string',\n      async read(size: number) {\n        try {\n          const data = await readAsPromised(input, size);\n          if (data === null) {\n            that._push('\"');\n            that.item = parent;\n            that.unvisit(input);\n            return;\n          }\n          if (data) that._push(escapeString(data.toString()));\n        } catch (err) {\n          that.emit('error', err);\n          that.destroy();\n        }\n      },\n    };\n  }\n\n  setReadableObjectItem(input: Readable, parent: Item) {\n    if (input.readableEnded || (input as any)._readableState?.endEmitted) {\n      this.emit('error', new Error('Readable Stream has ended before it was serialized. All stream data have been lost'), input, parent.path);\n    } else if (input.readableFlowing || (input as any)._readableState?.flowing) {\n      input.pause();\n      this.emit('error', new Error('Readable Stream is in flowing mode, data may have been lost. Trying to pause stream.'), input, parent.path);\n    }\n    const that = this;\n    this._push('[');\n    let first = true;\n    let i = 0;\n    const item = <any>{\n      type: 'readable object',\n      async read() {\n        try {\n          let out = '';\n          const data = await readAsPromised(input);\n          if (data === null) {\n            if (i && that.indent) {\n              out += `\\n${parent.indent}`;\n            }\n            out += ']';\n            that._push(out);\n            that.item = parent;\n            that.unvisit(input);\n            return;\n          }\n          if (first) first = false;\n          else out += ',';\n          if (that.indent) out += `\\n${item.indent}`;\n          that.prePush = out;\n          that.setItem(data, item, i);\n          i += 1;\n        } catch (err) {\n          that.emit('error', err);\n          that.destroy();\n        }\n      },\n    };\n    this.item = item;\n  }\n\n  setPromiseItem(input: Promise<any>, parent: Item, key) {\n    const that = this;\n    let read = false;\n    this.item = {\n      async read() {\n        if (read) return;\n        try {\n          read = true;\n          that.setItem(await input, parent, key);\n        } catch (err) {\n          that.emit('error', err);\n          that.destroy();\n        }\n      },\n    };\n  }\n\n  setArrayItem(input: any[], parent: any) {\n    // const entries = input.slice().reverse();\n    let i = 0;\n    const len = input.length;\n    let first = true;\n    const that = this;\n    const item: Item = {\n      read() {\n        let out = '';\n        let wasFirst = false;\n        if (first) {\n          first = false;\n          wasFirst = true;\n          if (!len) {\n            that._push('[]');\n            that.unvisit(input);\n            that.item = parent;\n            return;\n          }\n          out += '[';\n        }\n        const entry = input[i];\n        if (i === len) {\n          if (that.indent) out += `\\n${parent.indent}`;\n          out += ']';\n          that._push(out);\n          that.item = parent;\n          that.unvisit(input);\n          return;\n        }\n        if (!wasFirst) out += ',';\n        if (that.indent) out += `\\n${item.indent}`;\n        that._push(out);\n        that.setItem(entry, item, i);\n        i += 1;\n      },\n    };\n    this.item = item;\n  }\n\n  unvisit(item) {\n    if (this.cycle) return;\n    const _i = (this.visited as any[]).indexOf(item);\n    if (_i > -1) (this.visited as any[]).splice(_i, 1);\n  }\n\n  objectItem?: any;\n  setObjectItem(input: Record<any, any>, parent = undefined) {\n    const keys = Object.keys(input);\n    let i = 0;\n    const len = keys.length;\n    let first = true;\n    const that = this;\n    const { include } = this;\n    let hasItems = false;\n    let key;\n    const item: Item = <any>{\n      read() {\n        if (i === 0) that._push('{');\n        if (i === len) {\n          that.objectItem = undefined;\n          if (!hasItems) {\n            that._push('}');\n          } else {\n            that._push(`${that.indent ? `\\n${parent.indent}` : ''}}`);\n          }\n          that.item = parent;\n          that.unvisit(input);\n          return;\n        }\n        key = keys[i];\n        if (include?.indexOf?.(key) === -1) {\n          // replacer array excludes this key\n          i += 1;\n          return;\n        }\n        that.objectItem = item;\n        i += 1;\n        that.setItem(input[key], item, key);\n      },\n      write() {\n        const out = `${hasItems && !first ? ',' : ''}${item.indent ? `\\n${item.indent}` : ''}${quoteString(key)}:${that.indent ? ' ' : ''}`;\n        first = false;\n        hasItems = true;\n        that.objectItem = undefined;\n        return out;\n      },\n    };\n    this.item = item;\n  }\n\n  buffer = '';\n  bufferLength = 0;\n  pushCalled = false;\n\n  readSize = 0;\n  /** if set, this string will be prepended to the next _push call, if the call output is not empty, and set to undefined */\n  prePush?: string;\n  private _push(data) {\n    const prefix = this.objectItem ? this.objectItem.write() : '';\n    if (this.prePush && (prefix.length || data.length)) {\n      this.buffer += prefix + this.prePush;\n      this.prePush = undefined;\n    } else {\n      this.buffer += prefix;\n    }\n    this.buffer += data;\n    if (this.buffer.length >= this.bufferSize) {\n      this.pushCalled = !this.push(this.buffer);\n      this.buffer = '';\n      this.bufferLength = 0;\n      return false;\n    }\n    return true;\n  }\n\n  readState: ReadState = ReadState.Inactive;\n  async _read(size?: number): Promise<void> {\n    if (this.readState === ReadState.Consumed) return;\n    if (this.readState !== ReadState.Inactive) {\n      this.readState = ReadState.ReadMore;\n      return;\n    }\n    this.readState = ReadState.Reading;\n    this.pushCalled = false;\n    let p;\n    while (!this.pushCalled && this.item !== this.root && this.buffer !== undefined) {\n      p = this.item.read(size);\n      // eslint-disable-next-line no-await-in-loop\n      if (p) await p;\n    }\n    if (this.buffer === undefined) return;\n    if (this.item === this.root) {\n      if (this.buffer.length) this.push(this.buffer);\n      this.push(null);\n      this.readState = ReadState.Consumed;\n      this.cleanup();\n      return;\n    }\n    if (this.readState === <any>ReadState.ReadMore) {\n      this.readState = ReadState.Inactive;\n      await this._read(size);\n      return;\n    }\n    this.readState = ReadState.Inactive;\n  }\n\n  private cleanup() {\n    this.readState = ReadState.Consumed;\n    this.buffer = undefined;\n    this.visited = undefined;\n    this.item = undefined;\n    this.root = undefined;\n    this.prePush = undefined;\n  }\n\n  destroy(error?: Error): this {\n    if (error) this.emit('error', error);\n    super.destroy?.();\n    this.cleanup();\n    return this;\n  }\n}\n"],"names":["rxEscapable","meta","isReadableStream","value","read","pause","resume","pipe","once","removeListener","Types","getType","Primitive","then","Promise","_readableState","objectMode","ReadableObject","ReadableString","Array","isArray","Object","escapeString","string","replace","a","c","charCodeAt","toString","padStart","primitiveToJSON","_global","global","JSON","stringify","Function","BigInt","Error","err","String","Number","isFinite","assign","cache","Map","quoteString","useCache","length","has","get","str","set","readAsPromised","stream","size","readableEnded","ended","resolve","reject","endListener","ReadState","JsonStreamStringify","Readable","constructor","input","replacer","spaces","cycle","bufferSize","encoding","_defineProperty","Inactive","spaceType","indent","repeat","replacerType","include","visited","WeakMap","root","depth","path","setItem","parent","key","toJSON","call","undefined","type","some","v","destroy","push","_push","map","isInteger","join","item","concat","setObjectItem","setArrayItem","setPromiseItem","setReadableStringItem","setReadableObjectItem","_readableState2","_readableState3","endEmitted","emit","readableFlowing","flowing","that","prePush","data","unvisit","_readableState4","_readableState5","first","i","out","len","wasFirst","entry","_i","indexOf","splice","keys","hasItems","_include$indexOf","objectItem","write","prefix","buffer","pushCalled","bufferLength","_read","readState","Consumed","ReadMore","Reading","p","cleanup","error","_super$destroy"],"mappings":"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"}