{
  "version": 3,
  "sources": ["../src/index.ts", "../src/ply-format.ts", "../src/lib/normalize-ply.ts", "../src/lib/get-ply-schema.ts", "../src/lib/parse-ply.ts", "../src/lib/parse-ply-in-batches.ts", "../src/ply-loader.ts", "../src/ply-arrow-loader.ts"],
  "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// PLYLoader\nexport {PLYFormat} from './ply-format';\n\nexport type {PLYLoaderOptions} from './ply-loader';\nexport {PLYWorkerLoader, PLYLoader} from './ply-loader';\nexport {PLYArrowLoader} from './ply-arrow-loader';\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Format} from '@loaders.gl/loader-utils';\n\n/**\n * PLY - Polygon File Format (aka Stanford Triangle Format)\n * @see http://paulbourke.net/dataformats/ply/,\n * @see https://en.wikipedia.org/wiki/PLY_(file_format)\n */\nexport const PLYFormat = {\n  name: 'PLY',\n  id: 'ply',\n  module: 'ply',\n  // shapes: ['mesh', 'gltf', 'columnar-table'],\n  extensions: ['ply'],\n  mimeTypes: ['text/plain', 'application/octet-stream'],\n  text: true,\n  binary: true,\n  tests: ['ply']\n} as const satisfies Format;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema-utils';\nimport type {PLYMesh, PLYHeader, PLYAttributes, MeshHeader} from './ply-types';\nimport {getPLYSchema} from './get-ply-schema';\n\n/**\n * @param header\n * @param attributes\n * @returns data and header\n */\nexport default function normalizePLY(\n  plyHeader: MeshHeader & PLYHeader,\n  plyAttributes: PLYAttributes,\n  options?: {}\n): PLYMesh {\n  const attributes = getMeshAttributes(plyAttributes);\n  const boundingBox = getMeshBoundingBox(attributes);\n  const vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;\n\n  // TODO - how to detect POINT CLOUDS vs MESHES?\n  // TODO - For Meshes, PLY quadrangles must be split?\n  const isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;\n  const mode = isTriangles ? 4 : 0; // TRIANGLES vs POINTS\n  const topology = isTriangles ? 'triangle-list' : 'point-list';\n\n  const schema = getPLYSchema(plyHeader, attributes);\n\n  const plyMesh: PLYMesh = {\n    loader: 'ply',\n    loaderData: plyHeader,\n    header: {\n      vertexCount,\n      boundingBox\n    },\n    schema,\n    attributes,\n    indices: {value: new Uint32Array(0), size: 0},\n    mode,\n    topology\n  };\n\n  if (plyAttributes.indices.length > 0) {\n    plyMesh.indices = {value: new Uint32Array(plyAttributes.indices), size: 1};\n  }\n\n  return plyMesh;\n}\n\n/**\n * @param attributes\n * @returns accessors []\n */\n// eslint-disable-next-line complexity\nfunction getMeshAttributes(attributes: PLYAttributes): MeshAttributes {\n  const accessors: MeshAttributes = {};\n\n  for (const attributeName of Object.keys(attributes)) {\n    switch (attributeName) {\n      case 'vertices':\n        if (attributes.vertices.length > 0) {\n          accessors.POSITION = {value: new Float32Array(attributes.vertices), size: 3};\n        }\n        break;\n\n      // optional attributes data\n      case 'normals':\n        if (attributes.normals.length > 0) {\n          accessors.NORMAL = {value: new Float32Array(attributes.normals), size: 3};\n        }\n        break;\n\n      case 'uvs':\n        if (attributes.uvs.length > 0) {\n          accessors.TEXCOORD_0 = {value: new Float32Array(attributes.uvs), size: 2};\n        }\n        break;\n\n      case 'colors':\n        if (attributes.colors.length > 0) {\n          // TODO - normalized shoud be based on `uchar` flag in source data?\n          accessors.COLOR_0 = {value: new Uint8Array(attributes.colors), size: 3, normalized: true};\n        }\n        break;\n\n      case 'indices':\n        break;\n\n      default:\n        if (attributes[attributeName].length > 0) {\n          accessors[attributeName] = {value: new Float32Array(attributes[attributeName]), size: 1};\n        }\n        break;\n    }\n  }\n  return accessors;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Schema, MeshAttributes} from '@loaders.gl/schema';\nimport {deduceMeshSchema} from '@loaders.gl/schema-utils';\nimport type {PLYHeader} from './ply-types';\n\n/**\n * Gets schema from PLY header\n * @param plyHeader\n * @param metadata\n * @returns Schema\n */\nexport function getPLYSchema(plyHeader: PLYHeader, attributes: MeshAttributes): Schema {\n  const metadata = makeMetadataFromPlyHeader(plyHeader);\n  const schema = deduceMeshSchema(attributes, metadata);\n  return schema;\n}\n\n/**\n * Make arrow like schema metadata by PlyHeader properties\n * @param plyHeader\n * @returns\n */\nfunction makeMetadataFromPlyHeader(plyHeader: PLYHeader): Record<string, string> {\n  /* eslint-disable camelcase */\n  const metadata: Record<string, string> = {};\n  metadata.ply_comments = JSON.stringify(plyHeader.comments);\n  metadata.ply_elements = JSON.stringify(plyHeader.elements);\n  if (plyHeader.format !== undefined) {\n    metadata.ply_format = plyHeader.format;\n  }\n  if (plyHeader.version !== undefined) {\n    metadata.ply_version = plyHeader.version;\n  }\n  if (plyHeader.headerLength !== undefined) {\n    metadata.ply_headerLength = plyHeader.headerLength.toString(10);\n  }\n  return metadata;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// \u201Cdiffuse_(red|green|blue)\u201D in the file to standard color names.\n//\n// parsePLY(data, {\n//   propertyNameMapping: {\n//     diffuse_red: 'red',\n//     diffuse_green: 'green',\n//     diffuse_blue: 'blue'\n//   }\n// });\nimport type {\n  PLYMesh,\n  PLYHeader,\n  PLYAttributes,\n  MeshHeader,\n  PLYElement,\n  PLYProperty\n} from './ply-types';\nimport normalizePLY from './normalize-ply';\n\nexport type ParsePLYOptions = {\n  propertyNameMapping?: Record<string, string>;\n};\n\n/**\n * @param data\n * @param options\n * @returns\n */\nexport function parsePLY(data: ArrayBuffer | string, options: ParsePLYOptions = {}): PLYMesh {\n  let header: PLYHeader & MeshHeader;\n  let attributes: PLYAttributes;\n\n  if (data instanceof ArrayBuffer) {\n    const text = new TextDecoder().decode(data);\n    header = parseHeader(text, options);\n    attributes = header.format === 'ascii' ? parseASCII(text, header) : parseBinary(data, header);\n  } else {\n    header = parseHeader(data, options);\n    attributes = parseASCII(data, header);\n  }\n\n  return normalizePLY(header, attributes);\n}\n\n/**\n * @param data\n * @param options\n * @returns header\n */\nfunction parseHeader(data: any, options?: ParsePLYOptions): PLYHeader {\n  const PLY_HEADER_PATTERN = /ply([\\s\\S]*)end_header\\s/;\n\n  let headerText = '';\n  let headerLength = 0;\n\n  const result = PLY_HEADER_PATTERN.exec(data);\n\n  if (result !== null) {\n    headerText = result[1];\n    headerLength = result[0].length;\n  }\n  const lines = headerText.split('\\n');\n  const header = parseHeaderLines(lines, headerLength, options);\n\n  return header;\n}\n\n/**\n * @param lines\n * @param headerLength\n * @param options\n * @returns header\n */\n// eslint-disable-next-line complexity\nfunction parseHeaderLines(\n  lines: string[],\n  headerLength: number,\n  options?: ParsePLYOptions\n): PLYHeader {\n  const header: PLYHeader = {\n    comments: [],\n    elements: [],\n    headerLength\n  };\n\n  let lineType: string | undefined;\n  let lineValues: string[];\n  let currentElement: PLYElement | null = null;\n\n  for (let i = 0; i < lines.length; i++) {\n    let line: string = lines[i];\n    line = line.trim();\n\n    if (line === '') {\n      // eslint-disable-next-line\n      continue;\n    }\n\n    lineValues = line.split(/\\s+/);\n    lineType = lineValues.shift();\n    line = lineValues.join(' ');\n\n    switch (lineType) {\n      case 'format':\n        header.format = lineValues[0];\n        header.version = lineValues[1];\n        break;\n\n      case 'comment':\n        header.comments.push(line);\n        break;\n\n      case 'element':\n        // Start new element, store previous element\n        if (currentElement) {\n          header.elements.push(currentElement);\n        }\n\n        currentElement = {\n          name: lineValues[0],\n          count: parseInt(lineValues[1], 10),\n          properties: []\n        };\n        break;\n\n      case 'property':\n        if (currentElement) {\n          const property = makePLYElementProperty(lineValues);\n          if (options?.propertyNameMapping && property.name in options?.propertyNameMapping) {\n            property.name = options?.propertyNameMapping[property.name];\n          }\n          currentElement.properties.push(property);\n        }\n        break;\n\n      default:\n        // eslint-disable-next-line\n        console.log('unhandled', lineType, lineValues);\n    }\n  }\n\n  // Store in-progress element\n  if (currentElement) {\n    header.elements.push(currentElement);\n  }\n\n  return header;\n}\n\n/** Generate attributes arrays from the header */\n// eslint-disable-next-line complexity\nfunction getPLYAttributes(header: PLYHeader): PLYAttributes {\n  // TODO Generate only the attribute arrays actually in the header\n  const attributes = {\n    indices: [],\n    vertices: [],\n    normals: [],\n    uvs: [],\n    colors: []\n  };\n\n  for (const element of header.elements) {\n    if (element.name === 'vertex') {\n      for (const property of element.properties) {\n        switch (property.name) {\n          case 'x':\n          case 'y':\n          case 'z':\n          case 'nx':\n          case 'ny':\n          case 'nz':\n          case 's':\n          case 't':\n          case 'red':\n          case 'green':\n          case 'blue':\n            break;\n          default:\n            // Add any non-geometry attributes\n            attributes[property.name] = [];\n            break;\n        }\n      }\n    }\n  }\n\n  return attributes;\n}\n\n/**\n * @param propertyValues\n * @returns property of ply element\n */\nfunction makePLYElementProperty(propertyValues: string[]): PLYProperty {\n  const type = propertyValues[0];\n  switch (type) {\n    case 'list':\n      return {\n        type,\n        name: propertyValues[3],\n        countType: propertyValues[1],\n        itemType: propertyValues[2]\n      };\n    default:\n      return {\n        type,\n        name: propertyValues[1]\n      };\n  }\n}\n\n/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns\n */\n// eslint-disable-next-line complexity\nfunction parseASCIINumber(n: string, type: string): number {\n  switch (type) {\n    case 'char':\n    case 'uchar':\n    case 'short':\n    case 'ushort':\n    case 'int':\n    case 'uint':\n    case 'int8':\n    case 'uint8':\n    case 'int16':\n    case 'uint16':\n    case 'int32':\n    case 'uint32':\n      return parseInt(n, 10);\n\n    case 'float':\n    case 'double':\n    case 'float32':\n    case 'float64':\n      return parseFloat(n);\n\n    default:\n      throw new Error(type);\n  }\n}\n\n/**\n * @param properties\n * @param line\n * @returns ASCII element\n */\nfunction parsePLYElement(properties: any[], line: string) {\n  const values: any = line.split(/\\s+/);\n\n  const element = {};\n\n  for (let i = 0; i < properties.length; i++) {\n    if (properties[i].type === 'list') {\n      const list: any = [];\n      const n = parseASCIINumber(values.shift(), properties[i].countType);\n\n      for (let j = 0; j < n; j++) {\n        list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n      }\n\n      element[properties[i].name] = list;\n    } else {\n      element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n    }\n  }\n\n  return element;\n}\n\n/**\n * @param data\n * @param header\n * @returns [attributes]\n */\nfunction parseASCII(data: any, header: PLYHeader): PLYAttributes {\n  // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n\n  const attributes = getPLYAttributes(header);\n\n  let result: RegExpExecArray | null;\n\n  const patternBody = /end_header\\s([\\s\\S]*)$/;\n  let body = '';\n  if ((result = patternBody.exec(data)) !== null) {\n    body = result[1];\n  }\n\n  const lines = body.split('\\n');\n  let currentElement = 0;\n  let currentElementCount = 0;\n\n  for (let i = 0; i < lines.length; i++) {\n    let line = lines[i];\n    line = line.trim();\n\n    if (line !== '') {\n      if (currentElementCount >= header.elements[currentElement].count) {\n        currentElement++;\n        currentElementCount = 0;\n      }\n\n      const element = parsePLYElement(header.elements[currentElement].properties, line);\n      handleElement(attributes, header.elements[currentElement].name, element);\n      currentElementCount++;\n    }\n  }\n\n  return attributes;\n}\n\n/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// eslint-disable-next-line complexity\nfunction handleElement(\n  buffer: {[index: string]: number[]},\n  elementName: string,\n  element: any = {}\n) {\n  if (elementName === 'vertex') {\n    for (const propertyName of Object.keys(element)) {\n      switch (propertyName) {\n        case 'x':\n          buffer.vertices.push(element.x, element.y, element.z);\n          break;\n        case 'y':\n        case 'z':\n          break;\n\n        case 'nx':\n          if ('nx' in element && 'ny' in element && 'nz' in element) {\n            buffer.normals.push(element.nx, element.ny, element.nz);\n          }\n          break;\n        case 'ny':\n        case 'nz':\n          break;\n\n        case 's':\n          if ('s' in element && 't' in element) {\n            buffer.uvs.push(element.s, element.t);\n          }\n          break;\n        case 't':\n          break;\n\n        case 'red':\n          if ('red' in element && 'green' in element && 'blue' in element) {\n            buffer.colors.push(element.red, element.green, element.blue);\n          }\n          break;\n        case 'green':\n        case 'blue':\n          break;\n\n        default:\n          buffer[propertyName].push(element[propertyName]);\n      }\n    }\n  } else if (elementName === 'face') {\n    const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n\n    if (vertexIndices.length === 3) {\n      buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n    } else if (vertexIndices.length === 4) {\n      buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n      buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n    }\n  }\n}\n\n/**\n * Reads binary data\n * @param dataview\n * @param at\n * @param type\n * @param littleEndian\n * @returns [number, number]\n */\n// eslint-disable-next-line complexity\nfunction binaryRead(dataview: DataView, at: number, type: any, littleEndian: boolean): number[] {\n  switch (type) {\n    // corespondences for non-specific length types here match rply:\n    case 'int8':\n    case 'char':\n      return [dataview.getInt8(at), 1];\n    case 'uint8':\n    case 'uchar':\n      return [dataview.getUint8(at), 1];\n    case 'int16':\n    case 'short':\n      return [dataview.getInt16(at, littleEndian), 2];\n    case 'uint16':\n    case 'ushort':\n      return [dataview.getUint16(at, littleEndian), 2];\n    case 'int32':\n    case 'int':\n      return [dataview.getInt32(at, littleEndian), 4];\n    case 'uint32':\n    case 'uint':\n      return [dataview.getUint32(at, littleEndian), 4];\n    case 'float32':\n    case 'float':\n      return [dataview.getFloat32(at, littleEndian), 4];\n    case 'float64':\n    case 'double':\n      return [dataview.getFloat64(at, littleEndian), 8];\n\n    default:\n      throw new Error(type);\n  }\n}\n\n/**\n * Reads binary data\n * @param dataview\n * @param at\n * @param properties\n * @param littleEndian\n * @returns [object, number]\n */\nfunction binaryReadElement(\n  dataview: DataView,\n  at: number,\n  properties: {[index: string]: any},\n  littleEndian: boolean\n): {}[] {\n  const element = {};\n  let result: number[];\n  let read = 0;\n\n  for (let i = 0; i < properties.length; i++) {\n    if (properties[i].type === 'list') {\n      const list = [];\n\n      result = binaryRead(dataview, at + read, properties[i].countType, littleEndian);\n      const n = result[0];\n      read += result[1];\n\n      for (let j = 0; j < n; j++) {\n        result = binaryRead(dataview, at + read, properties[i].itemType, littleEndian);\n        // @ts-ignore\n        list.push(result[0]);\n        read += result[1];\n      }\n\n      element[properties[i].name] = list;\n    } else {\n      result = binaryRead(dataview, at + read, properties[i].type, littleEndian);\n      element[properties[i].name] = result[0];\n      read += result[1];\n    }\n  }\n\n  return [element, read];\n}\n\ntype BinaryAttributes = {\n  [index: string]: number[];\n};\n\n/**\n * Parses binary data\n * @param data\n * @param header\n * @returns [attributes] of data\n */\nfunction parseBinary(data: ArrayBuffer, header: PLYHeader): BinaryAttributes {\n  const attributes = getPLYAttributes(header);\n\n  const littleEndian = header.format === 'binary_little_endian';\n  const body = new DataView(data, header.headerLength);\n  let result: any[];\n  let loc = 0;\n\n  for (let currentElement = 0; currentElement < header.elements.length; currentElement++) {\n    const count = header.elements[currentElement].count;\n    for (let currentElementCount = 0; currentElementCount < count; currentElementCount++) {\n      result = binaryReadElement(\n        body,\n        loc,\n        header.elements[currentElement].properties,\n        littleEndian\n      );\n      loc += result[1];\n      const element = result[0];\n\n      handleElement(attributes, header.elements[currentElement].name, element);\n    }\n  }\n\n  return attributes;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// \u201Cdiffuse_(red|green|blue)\u201D in the file to standard color names.\n//\n// parsePLY(data, {\n//   propertyNameMapping: {\n//     diffuse_red: 'red',\n//     diffuse_green: 'green',\n//     diffuse_blue: 'blue'\n//   }\n// });\n\nimport {\n  makeLineIterator,\n  makeTextDecoderIterator,\n  forEach,\n  toArrayBufferIterator\n} from '@loaders.gl/loader-utils';\nimport normalizePLY from './normalize-ply';\nimport {PLYMesh, PLYHeader, PLYElement, PLYProperty, PLYAttributes} from './ply-types';\n\nlet currentElement: PLYElement;\n\n/**\n * PARSER\n * @param iterator\n * @param options\n */\nexport async function* parsePLYInBatches(\n  iterator:\n    | AsyncIterable<ArrayBufferLike | ArrayBufferView>\n    | Iterable<ArrayBufferLike | ArrayBufferView>,\n  options: any\n): AsyncIterable<PLYMesh> {\n  const lineIterator = makeLineIterator(makeTextDecoderIterator(toArrayBufferIterator(iterator)));\n  const header = await parsePLYHeader(lineIterator, options);\n\n  let attributes: PLYAttributes;\n  switch (header.format) {\n    case 'ascii':\n      attributes = await parseASCII(lineIterator, header);\n      break;\n    default:\n      throw new Error('Binary PLY can not yet be parsed in streaming mode');\n    // attributes = await parseBinary(lineIterator, header);\n  }\n\n  yield normalizePLY(header, attributes, options);\n}\n\n/**\n * Parses header\n * @param lineIterator\n * @param options\n * @returns\n */\nasync function parsePLYHeader(\n  lineIterator: AsyncIterable<string> | Iterable<string>,\n  options: {[key: string]: any}\n): Promise<PLYHeader> {\n  const header: PLYHeader = {\n    comments: [],\n    elements: []\n    // headerLength\n  };\n\n  // Note: forEach does not reset iterator if exiting loop prematurely\n  // so that iteration can continue in a second loop\n  await forEach(lineIterator, (line: string) => {\n    line = line.trim();\n\n    // End of header\n    if (line === 'end_header') {\n      return true; // Returning true cancels `forEach`\n    }\n\n    // Ignore empty lines\n    if (line === '') {\n      // eslint-disable-next-line\n      return false; // Returning false does not cancel `forEach`\n    }\n\n    const lineValues = line.split(/\\s+/);\n    const lineType = lineValues.shift();\n    line = lineValues.join(' ');\n\n    switch (lineType) {\n      case 'ply':\n        // First line magic characters, ignore\n        break;\n\n      case 'format':\n        header.format = lineValues[0];\n        header.version = lineValues[1];\n        break;\n\n      case 'comment':\n        header.comments.push(line);\n        break;\n\n      case 'element':\n        if (currentElement) {\n          header.elements.push(currentElement);\n        }\n\n        currentElement = {\n          name: lineValues[0],\n          count: parseInt(lineValues[1], 10),\n          properties: []\n        };\n        break;\n\n      case 'property':\n        const property = makePLYElementProperty(lineValues, options.propertyNameMapping);\n        currentElement.properties.push(property);\n        break;\n\n      default:\n        // eslint-disable-next-line\n        console.log('unhandled', lineType, lineValues);\n    }\n\n    return false;\n  });\n\n  if (currentElement) {\n    header.elements.push(currentElement);\n  }\n\n  return header;\n}\n\nfunction makePLYElementProperty(propertyValues: string[], propertyNameMapping: []): PLYProperty {\n  const type = propertyValues[0];\n  switch (type) {\n    case 'list':\n      return {\n        type,\n        name: propertyValues[3],\n        countType: propertyValues[1],\n        itemType: propertyValues[2]\n      };\n    default:\n      return {\n        type,\n        name: propertyValues[1]\n      };\n  }\n}\n\n// ASCII PARSING\n/**\n * @param lineIterator\n * @param header\n * @returns\n */\nasync function parseASCII(lineIterator: AsyncIterable<string>, header: PLYHeader) {\n  // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n  const attributes: PLYAttributes = {\n    indices: [],\n    vertices: [],\n    normals: [],\n    uvs: [],\n    colors: []\n  };\n\n  let currentElement = 0;\n  let currentElementCount = 0;\n\n  for await (let line of lineIterator) {\n    line = line.trim();\n\n    if (line !== '') {\n      if (currentElementCount >= header.elements[currentElement].count) {\n        currentElement++;\n        currentElementCount = 0;\n      }\n\n      const element = parsePLYElement(header.elements[currentElement].properties, line);\n      handleElement(attributes, header.elements[currentElement].name, element);\n      currentElementCount++;\n    }\n  }\n\n  return attributes;\n}\n/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns ASCII number\n */\n// eslint-disable-next-line complexity\nfunction parseASCIINumber(n: string, type: string): number {\n  switch (type) {\n    case 'char':\n    case 'uchar':\n    case 'short':\n    case 'ushort':\n    case 'int':\n    case 'uint':\n    case 'int8':\n    case 'uint8':\n    case 'int16':\n    case 'uint16':\n    case 'int32':\n    case 'uint32':\n      return parseInt(n, 10);\n\n    case 'float':\n    case 'double':\n    case 'float32':\n    case 'float64':\n      return parseFloat(n);\n\n    default:\n      throw new Error(type);\n  }\n}\n/**\n * Parses ASCII element\n * @param properties\n * @param line\n * @returns element\n */\nfunction parsePLYElement(properties: any[], line: string) {\n  const values: any = line.split(/\\s+/);\n\n  const element = {};\n\n  for (let i = 0; i < properties.length; i++) {\n    if (properties[i].type === 'list') {\n      const list: any = [];\n      const n = parseASCIINumber(values.shift(), properties[i].countType);\n\n      for (let j = 0; j < n; j++) {\n        list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n      }\n\n      element[properties[i].name] = list;\n    } else {\n      element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n    }\n  }\n\n  return element;\n}\n/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// HELPER FUNCTIONS\n// eslint-disable-next-line complexity\nfunction handleElement(\n  buffer: {[index: string]: number[]},\n  elementName: string,\n  element: any = {}\n) {\n  switch (elementName) {\n    case 'vertex':\n      buffer.vertices.push(element.x, element.y, element.z);\n      if ('nx' in element && 'ny' in element && 'nz' in element) {\n        buffer.normals.push(element.nx, element.ny, element.nz);\n      }\n      if ('s' in element && 't' in element) {\n        buffer.uvs.push(element.s, element.t);\n      }\n      if ('red' in element && 'green' in element && 'blue' in element) {\n        buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);\n      }\n      break;\n\n    case 'face':\n      const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n      if (vertexIndices.length === 3) {\n        buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n      } else if (vertexIndices.length === 4) {\n        buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n        buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n      }\n      break;\n\n    default:\n      break;\n  }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// PLY Loader\nimport type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {PLYMesh} from './lib/ply-types';\nimport type {ParsePLYOptions} from './lib/parse-ply';\nimport {parsePLY} from './lib/parse-ply';\nimport {parsePLYInBatches} from './lib/parse-ply-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 PLYLoaderOptions = LoaderOptions & {\n  ply?: ParsePLYOptions & {\n    /** Override the URL to the worker bundle (by default loads from unpkg.com) */\n    workerUrl?: string;\n  };\n};\n\n/**\n * Worker loader for PLY - Polygon File Format (aka Stanford Triangle Format)'\n * links: ['http://paulbourke.net/dataformats/ply/',\n * 'https://en.wikipedia.org/wiki/PLY_(file_format)']\n */\nexport const PLYWorkerLoader = {\n  dataType: null as unknown as PLYMesh,\n  batchType: null as never,\n\n  name: 'PLY',\n  id: 'ply',\n  module: 'ply',\n  // shapes: ['mesh', 'gltf', 'columnar-table'],\n  version: VERSION,\n  worker: true,\n  extensions: ['ply'],\n  mimeTypes: ['text/plain', 'application/octet-stream'],\n  text: true,\n  binary: true,\n  tests: ['ply'],\n  options: {\n    ply: {}\n  }\n} as const satisfies Loader<PLYMesh, never, LoaderOptions>;\n\n/**\n * Loader for PLY - Polygon File Format\n */\nexport const PLYLoader = {\n  ...PLYWorkerLoader,\n  // Note: parsePLY supports both text and binary\n  parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply), // TODO - this may not detect text correctly?\n  parseTextSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),\n  parseSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),\n  parseInBatches: (\n    arrayBuffer:\n      | AsyncIterable<ArrayBufferLike | ArrayBufferView>\n      | Iterable<ArrayBufferLike | ArrayBufferView>,\n    options\n  ) => parsePLYInBatches(arrayBuffer, options?.ply)\n} as const satisfies LoaderWithParser<PLYMesh, any, PLYLoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {ArrowTable} from '@loaders.gl/schema';\n\nimport {PLYLoaderOptions, PLYWorkerLoader} from './ply-loader';\nimport {convertMeshToTable} from '@loaders.gl/schema-utils';\nimport {parsePLY} from './lib/parse-ply';\n\n/**\n * Worker loader for PLY -\n */\nexport const PLYArrowLoader = {\n  ...PLYWorkerLoader,\n  dataType: null as unknown as ArrowTable,\n  batchType: null as never,\n  worker: false,\n  parse: async (arrayBuffer: ArrayBuffer) => {\n    const mesh = parsePLY(arrayBuffer);\n    const arrowTable = convertMeshToTable(mesh, 'arrow-table');\n    return arrowTable;\n  }\n} as const satisfies LoaderWithParser<ArrowTable, never, PLYLoaderOptions>;\n"],
  "mappings": "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",
  "names": ["import_schema_utils", "currentElement", "parseASCII", "makePLYElementProperty", "currentElement", "parsePLYElement", "handleElement", "parseASCIINumber", "import_schema_utils"]
}
