{
  "version": 3,
  "sources": ["../src/index.ts", "../src/lib/parsers/parse-json.ts", "../src/lib/parsers/parse-json-in-batches.ts", "../src/lib/clarinet/clarinet.ts", "../src/lib/jsonpath/jsonpath.ts", "../src/lib/json-parser/json-parser.ts", "../src/lib/json-parser/streaming-json-parser.ts", "../src/json-loader.ts", "../src/lib/parsers/parse-ndjson.ts", "../src/lib/parsers/parse-ndjson-in-batches.ts", "../src/ndjson-loader.ts", "../src/lib/encoders/json-encoder.ts", "../src/json-writer.ts", "../src/geojson-loader.ts", "../src/geojson-writer.ts", "../src/lib/encoders/geojson-encoder.ts", "../src/lib/encoder-utils/encode-utils.ts", "../src/lib/encoder-utils/encode-table-row.ts", "../src/lib/encoder-utils/utf8-encoder.ts"],
  "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {JSONLoaderOptions} from './json-loader';\nexport {JSONLoader} from './json-loader';\nexport {NDJSONLoader} from './ndjson-loader';\n\nexport type {JSONWriterOptions} from './json-writer';\nexport {JSONWriter} from './json-writer';\n\n// EXPERIMENTAL EXPORTS - WARNING: MAY BE REMOVED WIHTOUT NOTICE IN FUTURE RELEASES\nexport type {GeoJSONLoaderOptions as _GeoJSONLoaderOptions} from './geojson-loader';\nexport {\n  GeoJSONLoader as _GeoJSONLoader,\n  GeoJSONWorkerLoader as _GeoJSONWorkerLoader\n} from './geojson-loader';\n\nexport type {GeoJSONWriterOptions as _GeoJSONWriterOptions} from './geojson-writer';\nexport {GeoJSONWriter as _GeoJSONWriter} from './geojson-writer';\n\nexport {default as _JSONPath} from './lib/jsonpath/jsonpath';\nexport {default as _ClarinetParser} from './lib/clarinet/clarinet';\n\nexport {rebuildJsonObject as _rebuildJsonObject} from './lib/parsers/parse-json-in-batches';\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {RowTable} from '@loaders.gl/schema';\nimport {makeTableFromData} from '@loaders.gl/schema-utils';\nimport type {JSONLoaderOptions} from '../../json-loader';\n\nexport function parseJSONSync(jsonText: string, options: JSONLoaderOptions): RowTable {\n  try {\n    const json = JSON.parse(jsonText);\n    if (options.json?.table) {\n      const data = getFirstArray(json) || json;\n      return makeTableFromData(data);\n    }\n    return json;\n  } catch (error) {\n    throw new Error('JSONLoader: failed to parse JSON');\n  }\n}\n\nfunction getFirstArray(json) {\n  if (Array.isArray(json)) {\n    return json;\n  }\n  if (json && typeof json === 'object') {\n    for (const value of Object.values(json)) {\n      const array = getFirstArray(value);\n      if (array) {\n        return array;\n      }\n    }\n  }\n  return null;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Schema, TableBatch} from '@loaders.gl/schema';\nimport type {JSONLoaderOptions, MetadataBatch, JSONBatch} from '../../json-loader';\n\nimport {TableBatchBuilder} from '@loaders.gl/schema-utils';\nimport {assert, makeTextDecoderIterator, toArrayBufferIterator} from '@loaders.gl/loader-utils';\nimport StreamingJSONParser from '../json-parser/streaming-json-parser';\nimport JSONPath from '../jsonpath/jsonpath';\n\n// TODO - support batch size 0 = no batching/single batch?\n// eslint-disable-next-line max-statements, complexity\nexport async function* parseJSONInBatches(\n  binaryAsyncIterator:\n    | AsyncIterable<ArrayBufferLike | ArrayBufferView>\n    | Iterable<ArrayBufferLike | ArrayBufferView>,\n  options: JSONLoaderOptions\n): AsyncIterable<TableBatch | MetadataBatch | JSONBatch> {\n  const asyncIterator = makeTextDecoderIterator(toArrayBufferIterator(binaryAsyncIterator));\n\n  const metadata = Boolean(options?.core?.metadata || (options as any)?.metadata);\n  const {jsonpaths} = options.json || {};\n\n  let isFirstChunk: boolean = true;\n\n  // @ts-expect-error TODO fix Schema deduction\n  const schema: Schema = null;\n  const tableBatchBuilder = new TableBatchBuilder(schema, options?.core);\n\n  const parser = new StreamingJSONParser({jsonpaths});\n\n  for await (const chunk of asyncIterator) {\n    const rows = parser.write(chunk);\n\n    const jsonpath = rows.length > 0 && parser.getStreamingJsonPathAsString();\n\n    if (rows.length > 0 && isFirstChunk) {\n      if (metadata) {\n        const initialBatch: TableBatch = {\n          // Common fields\n          shape: options?.json?.shape || 'array-row-table',\n          batchType: 'partial-result',\n          data: [],\n          length: 0,\n          bytesUsed: 0,\n          // JSON additions\n          container: parser.getPartialResult(),\n          jsonpath\n        };\n        yield initialBatch;\n      }\n      isFirstChunk = false;\n      // schema = deduceSchema(rows);\n    }\n\n    // Add the row\n    for (const row of rows) {\n      tableBatchBuilder.addRow(row);\n      // If a batch has been completed, emit it\n      const batch = tableBatchBuilder.getFullBatch({jsonpath});\n      if (batch) {\n        yield batch;\n      }\n    }\n\n    tableBatchBuilder.chunkComplete(chunk);\n    const batch = tableBatchBuilder.getFullBatch({jsonpath});\n    if (batch) {\n      yield batch;\n    }\n  }\n\n  // yield final batch\n  const jsonpath = parser.getStreamingJsonPathAsString();\n  const batch = tableBatchBuilder.getFinalBatch({jsonpath});\n  if (batch) {\n    yield batch;\n  }\n\n  if (metadata) {\n    const finalBatch: JSONBatch = {\n      shape: 'json',\n      batchType: 'final-result',\n      container: parser.getPartialResult(),\n      jsonpath: parser.getStreamingJsonPathAsString(),\n      /** Data Just to avoid crashing? */\n      data: [],\n      length: 0\n      // schema: null\n    };\n    yield finalBatch;\n  }\n}\n\nexport function rebuildJsonObject(batch, data) {\n  // Last batch will have this special type and will provide all the root object of the parsed file\n  assert(batch.batchType === 'final-result');\n\n  // The streamed JSON data is a top level array (jsonpath = '$'), just return the array of row objects\n  if (batch.jsonpath === '$') {\n    return data;\n  }\n\n  // (jsonpath !== '$') The streamed data is not a top level array, so stitch it back in to the top-level object\n  if (batch.jsonpath && batch.jsonpath.length > 1) {\n    const topLevelObject = batch.container;\n    const streamingPath = new JSONPath(batch.jsonpath);\n    streamingPath.setFieldAtPath(topLevelObject, data);\n    return topLevelObject;\n  }\n\n  // No jsonpath, in this case nothing was streamed.\n  return batch.container;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT AND BSD\n// Copyright (c) vis.gl contributors\n// This is a fork of the clarinet library, originally BSD license (see LICENSE file)\n// loaders.gl changes:\n// - typescript port\n\nexport type ClarinetEvent =\n  | 'onvalue'\n  | 'onstring'\n  | 'onkey'\n  | 'onopenobject'\n  | 'oncloseobject'\n  | 'onopenarray'\n  | 'onclosearray'\n  | 'onerror'\n  | 'onend'\n  | 'onready';\n\n// Removes the MAX_BUFFER_LENGTH, originally set to 64 * 1024\nconst MAX_BUFFER_LENGTH = Number.MAX_SAFE_INTEGER;\n// const DEBUG = false;\n\nenum STATE {\n  BEGIN = 0,\n  VALUE, // general stuff\n  OPEN_OBJECT, // {\n  CLOSE_OBJECT, // }\n  OPEN_ARRAY, // [\n  CLOSE_ARRAY, // ]\n  TEXT_ESCAPE, // \\ stuff\n  STRING, // \"\"\n  BACKSLASH,\n  END, // No more stack\n  OPEN_KEY, // , \"a\"\n  CLOSE_KEY, // :\n  TRUE, // r\n  TRUE2, // u\n  TRUE3, // e\n  FALSE, // a\n  FALSE2, // l\n  FALSE3, // s\n  FALSE4, // e\n  NULL, // u\n  NULL2, // l\n  NULL3, // l\n  NUMBER_DECIMAL_POINT, // .\n  NUMBER_DIGIT // [0-9]\n}\n\nconst Char = {\n  tab: 0x09, // \\t\n  lineFeed: 0x0a, // \\n\n  carriageReturn: 0x0d, // \\r\n  space: 0x20, // \" \"\n\n  doubleQuote: 0x22, // \"\n  plus: 0x2b, // +\n  comma: 0x2c, // ,\n  minus: 0x2d, // -\n  period: 0x2e, // .\n\n  _0: 0x30, // 0\n  _9: 0x39, // 9\n\n  colon: 0x3a, // :\n\n  E: 0x45, // E\n\n  openBracket: 0x5b, // [\n  backslash: 0x5c, // \\\n  closeBracket: 0x5d, // ]\n\n  a: 0x61, // a\n  b: 0x62, // b\n  e: 0x65, // e\n  f: 0x66, // f\n  l: 0x6c, // l\n  n: 0x6e, // n\n  r: 0x72, // r\n  s: 0x73, // s\n  t: 0x74, // t\n  u: 0x75, // u\n\n  openBrace: 0x7b, // {\n  closeBrace: 0x7d // }\n};\n\nconst stringTokenPattern = /[\\\\\"\\n]/g;\n\ntype ParserEvent = (parser: ClarinetParser, event: string, data?: any) => void;\n\nexport type ClarinetParserOptions = {\n  onready?: ParserEvent;\n  onopenobject?: ParserEvent;\n  onkey?: ParserEvent;\n  oncloseobject?: ParserEvent;\n  onopenarray?: ParserEvent;\n  onclosearray?: ParserEvent;\n  onvalue?: ParserEvent;\n  onerror?: ParserEvent;\n  onend?: ParserEvent;\n  onchunkparsed?: ParserEvent;\n};\n\nconst DEFAULT_OPTIONS: Required<ClarinetParserOptions> = {\n  onready: () => {},\n  onopenobject: () => {},\n  onkey: () => {},\n  oncloseobject: () => {},\n  onopenarray: () => {},\n  onclosearray: () => {},\n  onvalue: () => {},\n  onerror: () => {},\n  onend: () => {},\n  onchunkparsed: () => {}\n};\nexport default class ClarinetParser {\n  protected options: Required<ClarinetParserOptions> = DEFAULT_OPTIONS;\n\n  bufferCheckPosition = MAX_BUFFER_LENGTH;\n  q = '';\n  c = '';\n  p = '';\n  closed = false;\n  closedRoot = false;\n  sawRoot = false;\n  // tag = null;\n  error: Error | null = null;\n  state = STATE.BEGIN;\n  stack: STATE[] = [];\n  // mostly just for error reporting\n  position: number = 0;\n  column: number = 0;\n  line: number = 1;\n  slashed: boolean = false;\n  unicodeI: number = 0;\n  unicodeS: string | null = null;\n  depth: number = 0;\n\n  textNode;\n  numberNode;\n\n  constructor(options: ClarinetParserOptions = {}) {\n    this.options = {...DEFAULT_OPTIONS, ...options};\n    this.textNode = undefined;\n    this.numberNode = '';\n    this.emit('onready');\n  }\n\n  end() {\n    if (this.state !== STATE.VALUE || this.depth !== 0) this._error('Unexpected end');\n\n    this._closeValue();\n    this.c = '';\n    this.closed = true;\n    this.emit('onend');\n    return this;\n  }\n\n  resume() {\n    this.error = null;\n    return this;\n  }\n\n  close() {\n    return this.write(null);\n  }\n\n  // protected\n\n  emit(event: string, data?: any): void {\n    // if (DEBUG) console.log('-- emit', event, data);\n    this.options[event]?.(data, this);\n  }\n\n  emitNode(event: string, data?: any): void {\n    this._closeValue();\n    this.emit(event, data);\n  }\n\n  /* eslint-disable no-continue */\n  // eslint-disable-next-line complexity, max-statements\n  write(chunk) {\n    if (this.error) {\n      throw this.error;\n    }\n    if (this.closed) {\n      return this._error('Cannot write after close. Assign an onready handler.');\n    }\n    if (chunk === null) {\n      return this.end();\n    }\n    let i = 0;\n    let c = chunk.charCodeAt(0);\n    let p = this.p;\n    // if (DEBUG) console.log(`write -> [${  chunk  }]`);\n    while (c) {\n      p = c;\n      this.c = c = chunk.charCodeAt(i++);\n      // if chunk doesnt have next, like streaming char by char\n      // this way we need to check if previous is really previous\n      // if not we need to reset to what the this says is the previous\n      // from buffer\n      if (p !== c) {\n        this.p = p;\n      } else {\n        p = this.p;\n      }\n\n      if (!c) break;\n\n      // if (DEBUG) console.log(i, c, STATE[this.state]);\n      this.position++;\n      if (c === Char.lineFeed) {\n        this.line++;\n        this.column = 0;\n      } else this.column++;\n\n      switch (this.state) {\n        case STATE.BEGIN:\n          if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;\n          else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;\n          else if (!isWhitespace(c)) {\n            this._error('Non-whitespace before {[.');\n          }\n          continue;\n\n        case STATE.OPEN_KEY:\n        case STATE.OPEN_OBJECT:\n          if (isWhitespace(c)) continue;\n          if (this.state === STATE.OPEN_KEY) this.stack.push(STATE.CLOSE_KEY);\n          else if (c === Char.closeBrace) {\n            this.emit('onopenobject');\n            this.depth++;\n            this.emit('oncloseobject');\n            this.depth--;\n            this.state = this.stack.pop() || STATE.VALUE;\n            continue;\n          } else this.stack.push(STATE.CLOSE_OBJECT);\n          if (c === Char.doubleQuote) this.state = STATE.STRING;\n          else this._error('Malformed object key should start with \"');\n          continue;\n\n        case STATE.CLOSE_KEY:\n        case STATE.CLOSE_OBJECT:\n          if (isWhitespace(c)) continue;\n          // let event = this.state === STATE.CLOSE_KEY ? 'key' : 'object';\n          if (c === Char.colon) {\n            if (this.state === STATE.CLOSE_OBJECT) {\n              this.stack.push(STATE.CLOSE_OBJECT);\n              this._closeValue('onopenobject');\n              this.depth++;\n            } else this._closeValue('onkey');\n            this.state = STATE.VALUE;\n          } else if (c === Char.closeBrace) {\n            this.emitNode('oncloseobject');\n            this.depth--;\n            this.state = this.stack.pop() || STATE.VALUE;\n          } else if (c === Char.comma) {\n            if (this.state === STATE.CLOSE_OBJECT) this.stack.push(STATE.CLOSE_OBJECT);\n            this._closeValue();\n            this.state = STATE.OPEN_KEY;\n          } else this._error('Bad object');\n          continue;\n\n        case STATE.OPEN_ARRAY: // after an array there always a value\n        case STATE.VALUE:\n          if (isWhitespace(c)) continue;\n          if (this.state === STATE.OPEN_ARRAY) {\n            this.emit('onopenarray');\n            this.depth++;\n            this.state = STATE.VALUE;\n            if (c === Char.closeBracket) {\n              this.emit('onclosearray');\n              this.depth--;\n              this.state = this.stack.pop() || STATE.VALUE;\n              continue;\n            } else {\n              this.stack.push(STATE.CLOSE_ARRAY);\n            }\n          }\n          if (c === Char.doubleQuote) this.state = STATE.STRING;\n          else if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;\n          else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;\n          else if (c === Char.t) this.state = STATE.TRUE;\n          else if (c === Char.f) this.state = STATE.FALSE;\n          else if (c === Char.n) this.state = STATE.NULL;\n          else if (c === Char.minus) {\n            // keep and continue\n            this.numberNode += '-';\n          } else if (Char._0 <= c && c <= Char._9) {\n            this.numberNode += String.fromCharCode(c);\n            this.state = STATE.NUMBER_DIGIT;\n          } else this._error('Bad value');\n          continue;\n\n        case STATE.CLOSE_ARRAY:\n          if (c === Char.comma) {\n            this.stack.push(STATE.CLOSE_ARRAY);\n            this._closeValue('onvalue');\n            this.state = STATE.VALUE;\n          } else if (c === Char.closeBracket) {\n            this.emitNode('onclosearray');\n            this.depth--;\n            this.state = this.stack.pop() || STATE.VALUE;\n          } else if (isWhitespace(c)) continue;\n          else this._error('Bad array');\n          continue;\n\n        case STATE.STRING:\n          if (this.textNode === undefined) {\n            this.textNode = '';\n          }\n\n          // thanks thejh, this is an about 50% performance improvement.\n          let starti = i - 1;\n          let slashed = this.slashed;\n          let unicodeI = this.unicodeI;\n          // eslint-disable-next-line no-constant-condition, no-labels\n          STRING_BIGLOOP: while (true) {\n            // if (DEBUG) console.log(i, c, STATE[this.state], slashed);\n            // zero means \"no unicode active\". 1-4 mean \"parse some more\". end after 4.\n            while (unicodeI > 0) {\n              this.unicodeS += String.fromCharCode(c);\n              c = chunk.charCodeAt(i++);\n              this.position++;\n              if (unicodeI === 4) {\n                // TODO this might be slow? well, probably not used too often anyway\n                this.textNode += String.fromCharCode(parseInt(this.unicodeS as string, 16));\n                unicodeI = 0;\n                starti = i - 1;\n              } else {\n                unicodeI++;\n              }\n              // we can just break here: no stuff we skipped that still has to be sliced out or so\n              // eslint-disable-next-line no-labels\n              if (!c) break STRING_BIGLOOP;\n            }\n            if (c === Char.doubleQuote && !slashed) {\n              this.state = this.stack.pop() || STATE.VALUE;\n              this.textNode += chunk.substring(starti, i - 1);\n              this.position += i - 1 - starti;\n              break;\n            }\n            if (c === Char.backslash && !slashed) {\n              slashed = true;\n              this.textNode += chunk.substring(starti, i - 1);\n              this.position += i - 1 - starti;\n              c = chunk.charCodeAt(i++);\n              this.position++;\n              if (!c) break;\n            }\n            if (slashed) {\n              slashed = false;\n              if (c === Char.n) {\n                this.textNode += '\\n';\n              } else if (c === Char.r) {\n                this.textNode += '\\r';\n              } else if (c === Char.t) {\n                this.textNode += '\\t';\n              } else if (c === Char.f) {\n                this.textNode += '\\f';\n              } else if (c === Char.b) {\n                this.textNode += '\\b';\n              } else if (c === Char.u) {\n                // \\uxxxx. meh!\n                unicodeI = 1;\n                this.unicodeS = '';\n              } else {\n                this.textNode += String.fromCharCode(c);\n              }\n              c = chunk.charCodeAt(i++);\n              this.position++;\n              starti = i - 1;\n              if (!c) break;\n              else continue;\n            }\n\n            stringTokenPattern.lastIndex = i;\n            const reResult = stringTokenPattern.exec(chunk);\n            if (reResult === null) {\n              i = chunk.length + 1;\n              this.textNode += chunk.substring(starti, i - 1);\n              this.position += i - 1 - starti;\n              break;\n            }\n            i = reResult.index + 1;\n            c = chunk.charCodeAt(reResult.index);\n            if (!c) {\n              this.textNode += chunk.substring(starti, i - 1);\n              this.position += i - 1 - starti;\n              break;\n            }\n          }\n          this.slashed = slashed;\n          this.unicodeI = unicodeI;\n          continue;\n\n        case STATE.TRUE:\n          if (c === Char.r) this.state = STATE.TRUE2;\n          else this._error(`Invalid true started with t${c}`);\n          continue;\n\n        case STATE.TRUE2:\n          if (c === Char.u) this.state = STATE.TRUE3;\n          else this._error(`Invalid true started with tr${c}`);\n          continue;\n\n        case STATE.TRUE3:\n          if (c === Char.e) {\n            this.emit('onvalue', true);\n            this.state = this.stack.pop() || STATE.VALUE;\n          } else this._error(`Invalid true started with tru${c}`);\n          continue;\n\n        case STATE.FALSE:\n          if (c === Char.a) this.state = STATE.FALSE2;\n          else this._error(`Invalid false started with f${c}`);\n          continue;\n\n        case STATE.FALSE2:\n          if (c === Char.l) this.state = STATE.FALSE3;\n          else this._error(`Invalid false started with fa${c}`);\n          continue;\n\n        case STATE.FALSE3:\n          if (c === Char.s) this.state = STATE.FALSE4;\n          else this._error(`Invalid false started with fal${c}`);\n          continue;\n\n        case STATE.FALSE4:\n          if (c === Char.e) {\n            this.emit('onvalue', false);\n            this.state = this.stack.pop() || STATE.VALUE;\n          } else this._error(`Invalid false started with fals${c}`);\n          continue;\n\n        case STATE.NULL:\n          if (c === Char.u) this.state = STATE.NULL2;\n          else this._error(`Invalid null started with n${c}`);\n          continue;\n\n        case STATE.NULL2:\n          if (c === Char.l) this.state = STATE.NULL3;\n          else this._error(`Invalid null started with nu${c}`);\n          continue;\n\n        case STATE.NULL3:\n          if (c === Char.l) {\n            this.emit('onvalue', null);\n            this.state = this.stack.pop() || STATE.VALUE;\n          } else this._error(`Invalid null started with nul${c}`);\n          continue;\n\n        case STATE.NUMBER_DECIMAL_POINT:\n          if (c === Char.period) {\n            this.numberNode += '.';\n            this.state = STATE.NUMBER_DIGIT;\n          } else this._error('Leading zero not followed by .');\n          continue;\n\n        case STATE.NUMBER_DIGIT:\n          if (Char._0 <= c && c <= Char._9) this.numberNode += String.fromCharCode(c);\n          else if (c === Char.period) {\n            if (this.numberNode.indexOf('.') !== -1) this._error('Invalid number has two dots');\n            this.numberNode += '.';\n          } else if (c === Char.e || c === Char.E) {\n            if (this.numberNode.indexOf('e') !== -1 || this.numberNode.indexOf('E') !== -1)\n              this._error('Invalid number has two exponential');\n            this.numberNode += 'e';\n          } else if (c === Char.plus || c === Char.minus) {\n            // @ts-expect-error\n            if (!(p === Char.e || p === Char.E)) this._error('Invalid symbol in number');\n            this.numberNode += String.fromCharCode(c);\n          } else {\n            this._closeNumber();\n            i--; // go back one\n            this.state = this.stack.pop() || STATE.VALUE;\n          }\n          continue;\n\n        default:\n          this._error(`Unknown state: ${this.state}`);\n      }\n    }\n    if (this.position >= this.bufferCheckPosition) {\n      checkBufferLength(this);\n    }\n\n    this.emit('onchunkparsed');\n\n    return this;\n  }\n\n  _closeValue(event: string = 'onvalue'): void {\n    if (this.textNode !== undefined) {\n      this.emit(event, this.textNode);\n    }\n    this.textNode = undefined;\n  }\n\n  _closeNumber(): void {\n    if (this.numberNode) this.emit('onvalue', parseFloat(this.numberNode));\n    this.numberNode = '';\n  }\n\n  _error(message: string = ''): void {\n    this._closeValue();\n    message += `\\nLine: ${this.line}\\nColumn: ${this.column}\\nChar: ${this.c}`;\n    const error = new Error(message);\n    this.error = error;\n    this.emit('onerror', error);\n  }\n}\n\nfunction isWhitespace(c): boolean {\n  return c === Char.carriageReturn || c === Char.lineFeed || c === Char.space || c === Char.tab;\n}\n\nfunction checkBufferLength(parser) {\n  const maxAllowed = Math.max(MAX_BUFFER_LENGTH, 10);\n  let maxActual = 0;\n\n  for (const buffer of ['textNode', 'numberNode']) {\n    const len = parser[buffer] === undefined ? 0 : parser[buffer].length;\n    if (len > maxAllowed) {\n      switch (buffer) {\n        case 'text':\n          // TODO - should this be closeValue?\n          // closeText(parser);\n          break;\n\n        default:\n          parser._error(`Max buffer length exceeded: ${buffer}`);\n      }\n    }\n    maxActual = Math.max(maxActual, len);\n  }\n  parser.bufferCheckPosition = MAX_BUFFER_LENGTH - maxActual + parser.position;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable no-continue */\n\n/**\n * A parser for a minimal subset of the jsonpath standard\n * Full JSON path parsers for JS exist but are quite large (bundle size)\n *\n * Supports\n *\n *   `$.component.component.component`\n */\nexport default class JSONPath {\n  path: string[];\n\n  constructor(path: JSONPath | string[] | string | null = null) {\n    this.path = parseJsonPath(path);\n  }\n\n  clone(): JSONPath {\n    return new JSONPath(this);\n  }\n\n  toString(): string {\n    return formatJsonPath(this.path);\n  }\n\n  push(name: string): void {\n    this.path.push(name);\n  }\n\n  pop() {\n    return this.path.pop();\n  }\n\n  set(name: string): void {\n    this.path[this.path.length - 1] = name;\n  }\n\n  equals(other: JSONPath): boolean {\n    if (!this || !other || this.path.length !== other.path.length) {\n      return false;\n    }\n\n    for (let i = 0; i < this.path.length; ++i) {\n      if (this.path[i] !== other.path[i]) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Sets the value pointed at by path\n   * TODO - handle root path\n   * @param object\n   * @param value\n   */\n  setFieldAtPath(object, value) {\n    const path = [...this.path];\n    path.shift();\n    const field = path.pop();\n    for (const component of path) {\n      object = object[component];\n    }\n    // @ts-ignore\n    object[field] = value;\n  }\n\n  /**\n   * Gets the value pointed at by path\n   * TODO - handle root path\n   * @param object\n   */\n  getFieldAtPath(object) {\n    const path = [...this.path];\n    path.shift();\n    const field = path.pop();\n    for (const component of path) {\n      object = object[component];\n    }\n    // @ts-ignore\n    return object[field];\n  }\n}\n\ntype BracketSegment =\n  | {type: 'property'; value: string; nextIndex: number}\n  | {type: 'array-selector'; nextIndex: number};\n\nfunction parseJsonPath(path: JSONPath | string[] | string | null): string[] {\n  if (path instanceof JSONPath) {\n    return [...path.path];\n  }\n\n  if (Array.isArray(path)) {\n    return ['$'].concat(path);\n  }\n\n  if (typeof path === 'string') {\n    return parseJsonPathString(path);\n  }\n\n  return ['$'];\n}\n\n// eslint-disable-next-line complexity, max-statements\nfunction parseJsonPathString(pathString: string): string[] {\n  const trimmedPath = pathString.trim();\n  if (!trimmedPath.startsWith('$')) {\n    throw new Error('JSONPath must start with $');\n  }\n\n  const segments: string[] = ['$'];\n  let index = 1;\n  let arrayElementSelectorEncountered = false;\n\n  while (index < trimmedPath.length) {\n    const character = trimmedPath[index];\n    if (character === '.') {\n      if (arrayElementSelectorEncountered) {\n        throw new Error('JSONPath cannot select fields after array element selectors');\n      }\n      index += 1;\n      if (trimmedPath[index] === '.') {\n        throw new Error('JSONPath descendant selectors (..) are not supported');\n      }\n      const {value, nextIndex, isWildcard} = parseDotSegment(trimmedPath, index);\n      if (isWildcard) {\n        if (nextIndex < trimmedPath.length) {\n          throw new Error('JSONPath wildcard selectors must terminate the path');\n        }\n        arrayElementSelectorEncountered = true;\n        index = nextIndex;\n        continue;\n      }\n      segments.push(value);\n      index = nextIndex;\n      continue;\n    }\n\n    if (character === '[') {\n      const parsedSegment = parseBracketSegment(trimmedPath, index);\n      if (parsedSegment.type === 'property') {\n        if (arrayElementSelectorEncountered) {\n          throw new Error('JSONPath cannot select fields after array element selectors');\n        }\n        segments.push(parsedSegment.value);\n      } else {\n        arrayElementSelectorEncountered = true;\n      }\n      index = parsedSegment.nextIndex;\n      continue;\n    }\n\n    if (character === '@') {\n      throw new Error('JSONPath current node selector (@) is not supported');\n    }\n\n    if (character.trim() === '') {\n      index += 1;\n      continue;\n    }\n\n    throw new Error(`Unexpected character \"${character}\" in JSONPath`);\n  }\n\n  return segments;\n}\n\nfunction parseDotSegment(\n  pathString: string,\n  startIndex: number\n): {\n  value: string;\n  nextIndex: number;\n  isWildcard: boolean;\n} {\n  if (startIndex >= pathString.length) {\n    throw new Error('JSONPath cannot end with a period');\n  }\n\n  if (pathString[startIndex] === '*') {\n    return {value: '*', nextIndex: startIndex + 1, isWildcard: true};\n  }\n\n  const firstCharacter = pathString[startIndex];\n  if (firstCharacter === '@') {\n    throw new Error('JSONPath current node selector (@) is not supported');\n  }\n  if (!isIdentifierStartCharacter(firstCharacter)) {\n    throw new Error('JSONPath property names after period must start with a letter, $ or _');\n  }\n\n  let endIndex = startIndex + 1;\n  while (endIndex < pathString.length && isIdentifierCharacter(pathString[endIndex])) {\n    endIndex++;\n  }\n\n  if (endIndex === startIndex) {\n    throw new Error('JSONPath is missing a property name after period');\n  }\n\n  return {\n    value: pathString.slice(startIndex, endIndex),\n    nextIndex: endIndex,\n    isWildcard: false\n  };\n}\n\nfunction parseBracketSegment(pathString: string, startIndex: number): BracketSegment {\n  const contentStartIndex = startIndex + 1;\n  if (contentStartIndex >= pathString.length) {\n    throw new Error('JSONPath has unterminated bracket');\n  }\n\n  const firstCharacter = pathString[contentStartIndex];\n  if (firstCharacter === \"'\" || firstCharacter === '\"') {\n    const {value, nextIndex} = parseBracketProperty(pathString, contentStartIndex);\n    return {type: 'property', value, nextIndex};\n  }\n\n  const closingBracketIndex = pathString.indexOf(']', contentStartIndex);\n  if (closingBracketIndex === -1) {\n    throw new Error('JSONPath has unterminated bracket');\n  }\n\n  const content = pathString.slice(contentStartIndex, closingBracketIndex).trim();\n  const unsupportedSelectorMessage = getUnsupportedBracketSelectorMessage(content);\n  if (unsupportedSelectorMessage) {\n    throw new Error(unsupportedSelectorMessage);\n  }\n  if (content === '*') {\n    return {type: 'array-selector', nextIndex: closingBracketIndex + 1};\n  }\n\n  if (/^\\d+$/.test(content)) {\n    throw new Error('JSONPath array index selectors are not supported');\n  }\n\n  if (/^\\d*\\s*:\\s*\\d*(\\s*:\\s*\\d*)?$/.test(content)) {\n    return {type: 'array-selector', nextIndex: closingBracketIndex + 1};\n  }\n\n  throw new Error(`Unsupported bracket selector \"[${content}]\" in JSONPath`);\n}\n\nfunction getUnsupportedBracketSelectorMessage(content: string): string | null {\n  if (!content.length) {\n    return 'JSONPath bracket selectors cannot be empty';\n  }\n  if (content.startsWith('(')) {\n    return 'JSONPath script selectors are not supported';\n  }\n  if (content.startsWith('?')) {\n    return 'JSONPath filter selectors are not supported';\n  }\n  if (content.includes(',')) {\n    return 'JSONPath union selectors are not supported';\n  }\n  if (content.startsWith('@') || content.includes('@.')) {\n    return 'JSONPath current node selector (@) is not supported';\n  }\n  return null;\n}\n\n// eslint-disable-next-line complexity, max-statements\nfunction parseBracketProperty(\n  pathString: string,\n  startIndex: number\n): {\n  value: string;\n  nextIndex: number;\n} {\n  const quoteCharacter = pathString[startIndex];\n  let index = startIndex + 1;\n  let value = '';\n  let terminated = false;\n\n  while (index < pathString.length) {\n    const character = pathString[index];\n    if (character === '\\\\') {\n      index += 1;\n      if (index >= pathString.length) {\n        break;\n      }\n      value += pathString[index];\n      index += 1;\n      continue;\n    }\n\n    if (character === quoteCharacter) {\n      terminated = true;\n      index += 1;\n      break;\n    }\n\n    value += character;\n    index += 1;\n  }\n\n  if (!terminated) {\n    throw new Error('JSONPath string in bracket property selector is unterminated');\n  }\n\n  while (index < pathString.length && pathString[index].trim() === '') {\n    index += 1;\n  }\n\n  if (pathString[index] !== ']') {\n    throw new Error('JSONPath property selectors must end with ]');\n  }\n\n  if (!value.length) {\n    throw new Error('JSONPath property selectors cannot be empty');\n  }\n\n  return {value, nextIndex: index + 1};\n}\n\nfunction isIdentifierCharacter(character: string): boolean {\n  return /[a-zA-Z0-9$_]/.test(character);\n}\n\nfunction isIdentifierStartCharacter(character: string): boolean {\n  return /[a-zA-Z_$]/.test(character);\n}\n\nfunction isIdentifierSegment(segment: string): boolean {\n  return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(segment);\n}\n\nfunction formatJsonPath(path: string[]): string {\n  return path\n    .map((segment, index) => {\n      if (index === 0) {\n        return segment;\n      }\n      if (segment === '*') {\n        return '.*';\n      }\n      if (isIdentifierSegment(segment)) {\n        return `.${segment}`;\n      }\n      const escapedSegment = segment.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n      return `['${escapedSegment}']`;\n    })\n    .join('');\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// @ts-nocheck\n\nimport ClarinetParser, {ClarinetParserOptions} from '../clarinet/clarinet';\nimport JSONPath from '../jsonpath/jsonpath';\n\n// JSONParser builds a JSON object using the events emitted by the Clarinet parser\n\nexport default class JSONParser {\n  readonly parser: ClarinetParser;\n  result = undefined;\n  previousStates = [];\n  currentState = Object.freeze({container: [], key: null});\n  jsonpath: JSONPath = new JSONPath();\n\n  constructor(options: ClarinetParserOptions) {\n    this.reset();\n    this.parser = new ClarinetParser({\n      onready: () => {\n        this.jsonpath = new JSONPath();\n        this.previousStates.length = 0;\n        this.currentState.container.length = 0;\n      },\n\n      onopenobject: (name) => {\n        this._openObject({});\n        if (typeof name !== 'undefined') {\n          this.parser.emit('onkey', name);\n        }\n      },\n\n      onkey: (name) => {\n        this.jsonpath.set(name);\n        this.currentState.key = name;\n      },\n\n      oncloseobject: () => {\n        this._closeObject();\n      },\n\n      onopenarray: () => {\n        this._openArray();\n      },\n\n      onclosearray: () => {\n        this._closeArray();\n      },\n\n      onvalue: (value) => {\n        this._pushOrSet(value);\n      },\n\n      onerror: (error) => {\n        throw error;\n      },\n\n      onend: () => {\n        this.result = this.currentState.container.pop();\n      },\n\n      ...options\n    });\n  }\n\n  reset(): void {\n    this.result = undefined;\n    this.previousStates = [];\n    this.currentState = Object.freeze({container: [], key: null});\n    this.jsonpath = new JSONPath();\n  }\n\n  write(chunk): void {\n    this.parser.write(chunk);\n  }\n\n  close(): void {\n    this.parser.close();\n  }\n\n  // PRIVATE METHODS\n\n  _pushOrSet(value): void {\n    const {container, key} = this.currentState;\n    if (key !== null) {\n      container[key] = value;\n      this.currentState.key = null;\n    } else {\n      container.push(value);\n    }\n  }\n\n  _openArray(newContainer = []): void {\n    this.jsonpath.push(null);\n    this._pushOrSet(newContainer);\n    this.previousStates.push(this.currentState);\n    this.currentState = {container: newContainer, isArray: true, key: null};\n  }\n\n  _closeArray(): void {\n    this.jsonpath.pop();\n    this.currentState = this.previousStates.pop();\n  }\n\n  _openObject(newContainer = {}): void {\n    this.jsonpath.push(null);\n    this._pushOrSet(newContainer);\n    this.previousStates.push(this.currentState);\n    this.currentState = {container: newContainer, isArray: false, key: null};\n  }\n\n  _closeObject(): void {\n    this.jsonpath.pop();\n    this.currentState = this.previousStates.pop();\n  }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {default as JSONParser} from './json-parser';\nimport JSONPath from '../jsonpath/jsonpath';\n\n/**\n * The `StreamingJSONParser` looks for the first array in the JSON structure.\n * and emits an array of chunks\n */\nexport default class StreamingJSONParser extends JSONParser {\n  private jsonPaths: JSONPath[];\n  private streamingJsonPath: JSONPath | null = null;\n  private streamingArray: any[] | null = null;\n  private topLevelObject: object | null = null;\n\n  constructor(options: {[key: string]: any} = {}) {\n    super({\n      onopenarray: () => {\n        if (!this.streamingArray) {\n          if (this._matchJSONPath()) {\n            // @ts-ignore\n            this.streamingJsonPath = this.getJsonPath().clone();\n            this.streamingArray = [];\n            this._openArray(this.streamingArray as []);\n            return;\n          }\n        }\n\n        this._openArray();\n      },\n\n      // Redefine onopenarray to inject value for top-level object\n      onopenobject: (name) => {\n        if (!this.topLevelObject) {\n          this.topLevelObject = {};\n          this._openObject(this.topLevelObject);\n        } else {\n          this._openObject({});\n        }\n        if (typeof name !== 'undefined') {\n          this.parser.emit('onkey', name);\n        }\n      }\n    });\n    const jsonpaths = options.jsonpaths || [];\n    this.jsonPaths = jsonpaths.map((jsonpath) => new JSONPath(jsonpath));\n  }\n\n  /**\n   * write REDEFINITION\n   * - super.write() chunk to parser\n   * - get the contents (so far) of \"topmost-level\" array as batch of rows\n   * - clear top-level array\n   * - return the batch of rows\\\n   */\n  write(chunk) {\n    super.write(chunk);\n    let array: any[] = [];\n    if (this.streamingArray) {\n      array = [...this.streamingArray];\n      this.streamingArray.length = 0;\n    }\n    return array;\n  }\n\n  /**\n   * Returns a partially formed result object\n   * Useful for returning the \"wrapper\" object when array is not top level\n   * e.g. GeoJSON\n   */\n  getPartialResult() {\n    return this.topLevelObject;\n  }\n\n  getStreamingJsonPath() {\n    return this.streamingJsonPath;\n  }\n\n  getStreamingJsonPathAsString() {\n    return this.streamingJsonPath && this.streamingJsonPath.toString();\n  }\n\n  getJsonPath() {\n    return this.jsonpath;\n  }\n\n  // PRIVATE METHODS\n\n  /**\n   * Checks is this.getJsonPath matches the jsonpaths provided in options\n   */\n  _matchJSONPath() {\n    const currentPath = this.getJsonPath();\n    // console.debug(`Testing JSONPath`, currentPath);\n\n    // Backwards compatibility, match any array\n    // TODO implement using wildcard once that is supported\n    if (this.jsonPaths.length === 0) {\n      return true;\n    }\n\n    for (const jsonPath of this.jsonPaths) {\n      if (jsonPath.equals(currentPath)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Table, TableBatch, Batch} from '@loaders.gl/schema';\nimport type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {parseJSONSync} from './lib/parsers/parse-json';\nimport {parseJSONInBatches} from './lib/parsers/parse-json-in-batches';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type MetadataBatch = Batch & {\n  shape: 'metadata';\n};\n\nexport type JSONBatch = Batch & {\n  shape: 'json';\n  /** JSON data */\n  container: any;\n};\n\n/**\n * @param table -\n * @param jsonpaths -\n */\nexport type JSONLoaderOptions = LoaderOptions & {\n  json?: {\n    /** Not specifying shape leaves avoids changes */\n    shape?: 'object-row-table' | 'array-row-table';\n    table?: boolean;\n    jsonpaths?: string[];\n  };\n};\n\nexport const JSONLoader = {\n  dataType: null as unknown as Table,\n  batchType: null as unknown as TableBatch | MetadataBatch | JSONBatch,\n\n  name: 'JSON',\n  id: 'json',\n  module: 'json',\n  version: VERSION,\n  extensions: ['json', 'geojson'],\n  mimeTypes: ['application/json'],\n  category: 'table',\n  text: true,\n  options: {\n    json: {\n      shape: undefined,\n      table: false,\n      jsonpaths: []\n      // batchSize: 'auto'\n    }\n  },\n  parse,\n  parseTextSync,\n  parseInBatches\n} as const satisfies LoaderWithParser<\n  Table,\n  TableBatch | MetadataBatch | JSONBatch,\n  JSONLoaderOptions\n>;\n\nasync function parse(arrayBuffer: ArrayBuffer, options?: JSONLoaderOptions) {\n  return parseTextSync(new TextDecoder().decode(arrayBuffer), options);\n}\n\nfunction parseTextSync(text: string, options?: JSONLoaderOptions) {\n  const jsonOptions = {...options, json: {...JSONLoader.options.json, ...options?.json}};\n  return parseJSONSync(text, jsonOptions as JSONLoaderOptions);\n}\n\nfunction parseInBatches(\n  asyncIterator:\n    | AsyncIterable<ArrayBufferLike | ArrayBufferView>\n    | Iterable<ArrayBufferLike | ArrayBufferView>,\n  options?: JSONLoaderOptions\n): AsyncIterable<TableBatch | MetadataBatch | JSONBatch> {\n  const jsonOptions = {...options, json: {...JSONLoader.options.json, ...options?.json}};\n  return parseJSONInBatches(asyncIterator, jsonOptions as JSONLoaderOptions);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ArrayRowTable, ObjectRowTable} from '@loaders.gl/schema';\nimport {makeTableFromData} from '@loaders.gl/schema-utils';\n\nexport function parseNDJSONSync(ndjsonText: string): ArrayRowTable | ObjectRowTable {\n  const lines = ndjsonText.trim().split('\\n');\n  const parsedLines = lines.map((line, counter) => {\n    try {\n      return JSON.parse(line);\n    } catch (error) {\n      throw new Error(`NDJSONLoader: failed to parse JSON on line ${counter + 1}`);\n    }\n  });\n\n  return makeTableFromData(parsedLines);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {TableBatch} from '@loaders.gl/schema';\nimport {TableBatchBuilder} from '@loaders.gl/schema-utils';\nimport {\n  LoaderOptions,\n  makeLineIterator,\n  makeNumberedLineIterator,\n  makeTextDecoderIterator,\n  toArrayBufferIterator\n} from '@loaders.gl/loader-utils';\n\nexport async function* parseNDJSONInBatches(\n  binaryAsyncIterator:\n    | AsyncIterable<ArrayBufferLike | ArrayBufferView>\n    | Iterable<ArrayBufferLike | ArrayBufferView>,\n  options?: LoaderOptions\n): AsyncIterable<TableBatch> {\n  const textIterator = makeTextDecoderIterator(toArrayBufferIterator(binaryAsyncIterator));\n  const lineIterator = makeLineIterator(textIterator);\n  const numberedLineIterator = makeNumberedLineIterator(lineIterator);\n\n  const schema = null;\n  const shape = 'row-table';\n  // @ts-ignore\n  const tableBatchBuilder = new TableBatchBuilder(schema, {\n    ...(options?.core || options),\n    shape\n  });\n\n  for await (const {counter, line} of numberedLineIterator) {\n    try {\n      const row = JSON.parse(line);\n      tableBatchBuilder.addRow(row);\n      tableBatchBuilder.chunkComplete(line);\n      const batch = tableBatchBuilder.getFullBatch();\n      if (batch) {\n        yield batch;\n      }\n    } catch (error) {\n      throw new Error(`NDJSONLoader: failed to parse JSON on line ${counter}`);\n    }\n  }\n\n  const batch = tableBatchBuilder.getFinalBatch();\n  if (batch) {\n    yield batch;\n  }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {ObjectRowTable, ArrayRowTable, TableBatch} from '@loaders.gl/schema';\nimport {parseNDJSONSync} from './lib/parsers/parse-ndjson';\nimport {parseNDJSONInBatches} from './lib/parsers/parse-ndjson-in-batches';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport const NDJSONLoader = {\n  dataType: null as unknown as ArrayRowTable | ObjectRowTable,\n  batchType: null as unknown as TableBatch,\n\n  name: 'NDJSON',\n  id: 'ndjson',\n  module: 'json',\n  version: VERSION,\n  extensions: ['ndjson', 'jsonl'],\n  mimeTypes: [\n    'application/x-ndjson',\n    'application/jsonlines', // https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html#cm-batch\n    'application/json-seq'\n  ],\n  category: 'table',\n  text: true,\n  parse: async (arrayBuffer: ArrayBuffer) => parseNDJSONSync(new TextDecoder().decode(arrayBuffer)),\n  parseTextSync: parseNDJSONSync,\n  parseInBatches: parseNDJSONInBatches,\n  options: {}\n} as const satisfies LoaderWithParser<ObjectRowTable | ArrayRowTable, TableBatch, LoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Copyright 2022 Foursquare Labs, Inc.\n\nimport type {Table} from '@loaders.gl/schema';\nimport {makeRowIterator} from '@loaders.gl/schema-utils';\nimport type {JSONWriterOptions} from '../../json-writer';\n\n/**\n * Encode a table as a JSON string\n */\nexport function encodeTableAsJSON(table: Table, options?: JSONWriterOptions): string {\n  const shape = options?.json?.shape || 'object-row-table';\n\n  const strings: string[] = [];\n  const rowIterator = makeRowIterator(table, shape);\n  for (const row of rowIterator) {\n    // Round elements etc\n    // processRow(wrappedRow, table.schema);\n    // const wrappedRow = options.wrapper ? options.wrapper(row) : row;\n    strings.push(JSON.stringify(row));\n  }\n  return `[${strings.join(',')}]`;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Copyright 2022 Foursquare Labs, Inc.\n\n/* global TextEncoder */\nimport type {WriterWithEncoder, WriterOptions} from '@loaders.gl/loader-utils';\nimport type {Table, TableBatch} from '@loaders.gl/schema';\nimport {encodeTableAsJSON} from './lib/encoders/json-encoder';\n\nexport type JSONWriterOptions = WriterOptions & {\n  json?: {\n    shape?: 'object-row-table' | 'array-row-table';\n    wrapper?: (table: TableJSON) => unknown;\n  };\n};\n\ntype RowArray = unknown[];\ntype RowObject = {[key: string]: unknown};\ntype TableJSON = RowArray[] | RowObject[];\n\nexport const JSONWriter = {\n  id: 'json',\n  version: 'latest',\n  module: 'json',\n  name: 'JSON',\n  extensions: ['json'],\n  mimeTypes: ['application/json'],\n  options: {},\n  text: true,\n  encode: async (table: Table, options: JSONWriterOptions) =>\n    new TextEncoder().encode(encodeTableAsJSON(table, options)).buffer,\n  encodeTextSync: (table: Table, options: JSONWriterOptions) => encodeTableAsJSON(table, options)\n} as const satisfies WriterWithEncoder<Table, TableBatch, JSONWriterOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatureCollection, GeoJSONTable, TableBatch} from '@loaders.gl/schema';\nimport type {JSONLoaderOptions} from './json-loader';\nimport {geojsonToBinary} from '@loaders.gl/gis';\n// import {parseJSONSync} from './lib/parsers/parse-json';\nimport {parseJSONInBatches} from './lib/parsers/parse-json-in-batches';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type GeoJSONLoaderOptions = JSONLoaderOptions & {\n  geojson?: {\n    shape?: 'geojson-table';\n  };\n  gis?: {\n    format?: 'geojson' | 'binary';\n  };\n};\n\n/**\n * GeoJSON loader\n */\nexport const GeoJSONWorkerLoader = {\n  dataType: null as unknown as GeoJSONTable,\n  batchType: null as unknown as TableBatch,\n\n  name: 'GeoJSON',\n  id: 'geojson',\n  module: 'geojson',\n  version: VERSION,\n  worker: true,\n  extensions: ['geojson'],\n  mimeTypes: ['application/geo+json'],\n  category: 'geometry',\n  text: true,\n  options: {\n    geojson: {\n      shape: 'geojson-table'\n    },\n    json: {\n      shape: 'object-row-table',\n      jsonpaths: ['$', '$.features']\n    },\n    gis: {\n      format: 'geojson'\n    }\n  }\n} as const satisfies Loader<GeoJSONTable, TableBatch, GeoJSONLoaderOptions>;\n\nexport const GeoJSONLoader = {\n  ...GeoJSONWorkerLoader,\n  // @ts-expect-error\n  parse,\n  // @ts-expect-error\n  parseTextSync,\n  parseInBatches\n} as const satisfies LoaderWithParser<GeoJSONTable, TableBatch, GeoJSONLoaderOptions>;\n\nasync function parse(\n  arrayBuffer: ArrayBuffer,\n  options?: GeoJSONLoaderOptions\n): Promise<GeoJSONTable | BinaryFeatureCollection> {\n  return parseTextSync(new TextDecoder().decode(arrayBuffer), options);\n}\n\nfunction parseTextSync(\n  text: string,\n  options?: GeoJSONLoaderOptions\n): GeoJSONTable | BinaryFeatureCollection {\n  // Apps can call the parse method directly, we so apply default options here\n  options = {...GeoJSONLoader.options, ...options};\n  options.geojson = {...GeoJSONLoader.options.geojson, ...options.geojson};\n  options.gis = options.gis || {};\n\n  let geojson;\n  try {\n    geojson = JSON.parse(text);\n  } catch {\n    geojson = {};\n  }\n\n  const table: GeoJSONTable = {\n    shape: 'geojson-table',\n    // TODO - deduce schema from geojson\n    // TODO check that parsed data is of type FeatureCollection\n    type: 'FeatureCollection',\n    features: geojson?.features || []\n  };\n\n  switch (options.gis.format) {\n    case 'binary':\n      return geojsonToBinary(table.features);\n    default:\n      return table;\n  }\n}\n\nfunction parseInBatches(asyncIterator, options): AsyncIterable<TableBatch> {\n  // Apps can call the parse method directly, we so apply default options here\n  options = {...GeoJSONLoader.options, ...options};\n  options.json = {...GeoJSONLoader.options.json, ...options.json};\n  options.geojson = {...GeoJSONLoader.options.geojson, ...options.geojson};\n\n  const geojsonIterator = parseJSONInBatches(asyncIterator, options);\n\n  switch (options.gis.format) {\n    case 'binary':\n      return makeBinaryGeometryIterator(geojsonIterator);\n    default:\n      return geojsonIterator as AsyncIterable<TableBatch>;\n  }\n}\n\nasync function* makeBinaryGeometryIterator(geojsonIterator) {\n  for await (const batch of geojsonIterator) {\n    batch.data = geojsonToBinary(batch.data);\n    yield batch;\n  }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Copyright Foursquare, Inc 20222\n\nimport {\n  type WriterWithEncoder,\n  type WriterOptions,\n  concatenateArrayBuffersAsync\n} from '@loaders.gl/loader-utils';\nimport type {Table, TableBatch} from '@loaders.gl/schema';\nimport {encodeTableAsGeojsonInBatches} from './lib/encoders/geojson-encoder';\n\nexport type GeoJSONWriterOptions = WriterOptions & {\n  geojson?: {\n    featureArray?: boolean;\n    geometryColumn?: number | null;\n  };\n  chunkSize?: number;\n};\n\nexport const GeoJSONWriter = {\n  id: 'geojson',\n  version: 'latest',\n  module: 'geojson',\n  name: 'GeoJSON',\n  extensions: ['geojson'],\n  mimeTypes: ['application/geo+json'],\n  text: true,\n  options: {\n    geojson: {\n      featureArray: false,\n      geometryColumn: null\n    }\n  },\n\n  async encode(table: Table, options: GeoJSONWriterOptions): Promise<ArrayBuffer> {\n    const tableIterator = [table] as TableBatch[];\n    const batches = encodeTableAsGeojsonInBatches(tableIterator, options);\n    return await concatenateArrayBuffersAsync(batches);\n  },\n\n  encodeInBatches: (tableIterator: AsyncIterable<TableBatch> | Iterable<TableBatch>, options) =>\n    encodeTableAsGeojsonInBatches(tableIterator, options)\n} as const satisfies WriterWithEncoder<Table, TableBatch, GeoJSONWriterOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Copyright 2022 Foursquare Labs, Inc.\n\nimport type {TableBatch} from '@loaders.gl/schema';\nimport {getTableLength} from '@loaders.gl/schema-utils';\nimport {detectGeometryColumnIndex} from '../encoder-utils/encode-utils';\nimport {encodeTableRow} from '../encoder-utils/encode-table-row';\nimport {Utf8ArrayBufferEncoder} from '../encoder-utils/utf8-encoder';\nimport type {GeoJSONWriterOptions} from '../../geojson-writer';\n\n/**\n * Encode a table as GeoJSON\n */\n// eslint-disable-next-line max-statements\nexport async function* encodeTableAsGeojsonInBatches(\n  batchIterator: AsyncIterable<TableBatch> | Iterable<TableBatch>, // | Iterable<TableBatch>,\n  inputOpts: GeoJSONWriterOptions = {}\n): AsyncIterable<ArrayBuffer> {\n  // @ts-expect-error\n  const options: Required<GeoJSONWriterOptions> = {geojson: {}, chunkSize: 10000, ...inputOpts};\n\n  const utf8Encoder = new Utf8ArrayBufferEncoder(options.chunkSize);\n\n  if (!options.geojson.featureArray) {\n    utf8Encoder.push('{\\n', '\"type\": \"FeatureCollection\",\\n', '\"features\":\\n');\n  }\n  utf8Encoder.push('['); // Note no newline\n\n  let geometryColumn = options.geojson.geometryColumn;\n\n  let isFirstLine = true;\n\n  let start = 0;\n  for await (const tableBatch of batchIterator) {\n    const end = start + getTableLength(tableBatch);\n\n    // Deduce geometry column if not already done\n    if (!geometryColumn) {\n      geometryColumn = geometryColumn || detectGeometryColumnIndex(tableBatch);\n    }\n\n    for (let rowIndex = start; rowIndex < end; ++rowIndex) {\n      // Add a comma except on final feature\n      if (!isFirstLine) {\n        utf8Encoder.push(',');\n      }\n      utf8Encoder.push('\\n');\n      isFirstLine = false;\n\n      encodeTableRow(tableBatch, rowIndex, geometryColumn, utf8Encoder);\n\n      // eslint-disable-next-line max-depth\n      if (utf8Encoder.isFull()) {\n        yield utf8Encoder.getArrayBufferBatch();\n      }\n\n      start = end;\n    }\n\n    const arrayBufferBatch = utf8Encoder.getArrayBufferBatch();\n    if (arrayBufferBatch.byteLength > 0) {\n      yield arrayBufferBatch;\n    }\n  }\n\n  utf8Encoder.push('\\n');\n\n  // Add completing rows and emit final batch\n  utf8Encoder.push(']\\n');\n  if (!options.geojson.featureArray) {\n    utf8Encoder.push('}');\n  }\n\n  // Note: Since we pushed a few final lines, the last batch will always exist, no need to check first\n  yield utf8Encoder.getArrayBufferBatch();\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Copyright 2022 Foursquare Labs, Inc.\n\nimport type {Table} from '@loaders.gl/schema';\nimport {getTableLength, getTableNumCols, getTableRowAsArray} from '@loaders.gl/schema-utils';\n\ntype Row = {[key: string]: unknown};\n\n/**\n * Attempts to identify which column contains geometry\n * Currently just returns name (key) of first object-valued column\n * @todo look for hints in schema metadata\n * @todo look for WKB\n */\nexport function detectGeometryColumnIndex(table: Table): number {\n  // TODO - look for hints in schema metadata\n\n  // look for a column named geometry\n  const geometryIndex = table.schema?.fields.findIndex((field) => field.name === 'geometry') ?? -1;\n  if (geometryIndex > -1) {\n    return geometryIndex;\n  }\n\n  // look at the data\n  // TODO - this drags in the indices\n  if (getTableLength(table) > 0) {\n    const row = getTableRowAsArray(table, 0);\n    for (let columnIndex = 0; columnIndex < getTableNumCols(table); columnIndex++) {\n      const value = row?.[columnIndex];\n      if (value && typeof value === 'object') {\n        return columnIndex;\n      }\n    }\n  }\n\n  throw new Error('Failed to detect geometry column');\n}\n\n/**\n * Return a row as a property (key/value) object, excluding selected columns\n */\nexport function getRowPropertyObject(\n  table: Table,\n  row: Row,\n  excludeColumnIndices: number[] = []\n): {[columnName: string]: unknown} {\n  const properties = {};\n  for (let columnIndex = 0; columnIndex < getTableNumCols(table); ++columnIndex) {\n    const columnName = table.schema?.fields[columnIndex].name;\n    if (columnName && !excludeColumnIndices.includes(columnIndex)) {\n      properties[columnName] = row[columnName];\n    }\n  }\n  return properties;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Copyright 2022 Foursquare Labs, Inc.\n\nimport type {Feature, Table} from '@loaders.gl/schema';\nimport {getTableRowAsObject} from '@loaders.gl/schema-utils';\nimport {getRowPropertyObject} from './encode-utils';\nimport {Utf8ArrayBufferEncoder} from './utf8-encoder';\n\ntype Row = {[key: string]: unknown};\n\n// Helpers\n\n/**\n * Encode a row. Currently this ignores properties in the geometry column.\n */\nexport function encodeTableRow(\n  table: Table,\n  rowIndex: number,\n  geometryColumnIndex: number,\n  utf8Encoder: Utf8ArrayBufferEncoder\n): void {\n  const row = getTableRowAsObject(table, rowIndex);\n  if (!row) return;\n  const featureWithProperties = getFeatureFromRow(table, row, geometryColumnIndex);\n  const featureString = JSON.stringify(featureWithProperties);\n  utf8Encoder.push(featureString);\n}\n\n/**\n * Encode a row as a Feature. Currently this ignores properties objects in the geometry column.\n */\nfunction getFeatureFromRow(table: Table, row: Row, geometryColumnIndex: number): Feature {\n  // Extract non-feature/geometry properties\n  const properties = getRowPropertyObject(table, row, [geometryColumnIndex]);\n\n  // Extract geometry feature\n  const columnName = table.schema?.fields[geometryColumnIndex].name;\n  let featureOrGeometry =\n    columnName && (row[columnName] as {[key: string]: unknown} | string | null | undefined);\n\n  // GeoJSON support null geometries\n  if (!featureOrGeometry) {\n    // @ts-ignore Feature type does not support null geometries\n    return {type: 'Feature', geometry: null, properties};\n  }\n\n  // Support string geometries?\n  // TODO: This assumes GeoJSON strings, which may not be the correct format\n  // (could be WKT, encoded WKB...)\n  if (typeof featureOrGeometry === 'string') {\n    try {\n      featureOrGeometry = JSON.parse(featureOrGeometry);\n    } catch (err) {\n      throw new Error('Invalid string geometry');\n    }\n  }\n\n  if (typeof featureOrGeometry !== 'object' || typeof featureOrGeometry?.type !== 'string') {\n    throw new Error('invalid geometry column value');\n  }\n\n  if (featureOrGeometry?.type === 'Feature') {\n    // @ts-ignore Feature type does not support null geometries\n    return {...featureOrGeometry, properties};\n  }\n\n  // @ts-ignore Feature type does not support null geometries\n  return {type: 'Feature', geometry: featureOrGeometry, properties};\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n\nimport {ensureArrayBuffer} from '@loaders.gl/loader-utils';\n\n/* global TextEncoder */\nexport class Utf8ArrayBufferEncoder {\n  private readonly chunkSize: number;\n  private strings: string[] = [];\n  private totalLength = 0;\n  private textEncoder: TextEncoder = new TextEncoder();\n\n  constructor(chunkSize: number) {\n    this.chunkSize = chunkSize;\n  }\n\n  push(...strings: string[]): void {\n    for (const string of strings) {\n      this.strings.push(string);\n      this.totalLength += string.length;\n    }\n  }\n\n  isFull(): boolean {\n    return this.totalLength >= this.chunkSize;\n  }\n\n  getArrayBufferBatch(): ArrayBuffer {\n    return ensureArrayBuffer(this.textEncoder.encode(this.getStringBatch()).buffer);\n  }\n\n  getStringBatch(): string {\n    const stringChunk = this.strings.join('');\n    this.strings = [];\n    this.totalLength = 0;\n    return stringChunk;\n  }\n}\n"],
  "mappings": "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",
  "names": ["import_schema_utils", "STATE", "jsonpath", "batch", "import_schema_utils", "import_schema_utils", "import_loader_utils", "batch", "VERSION", "import_schema_utils", "VERSION", "parse", "parseTextSync", "parseInBatches", "import_loader_utils", "import_schema_utils", "import_schema_utils", "import_schema_utils", "import_loader_utils"]
}
