{
  "version": 3,
  "sources": ["../src/parseString.ts"],
  "sourcesContent": ["import blocksHandler from './handlers/blocks'\nimport entitiesHandler from './handlers/entities'\nimport headerHandler from './handlers/header'\nimport objectsHandler from './handlers/objects'\nimport tablesHandler from './handlers/tables'\nimport logger from './util/logger'\n\nimport type { DXFTuple, ParsedDXF } from './types'\n\ntype Tuple = DXFTuple\n\n// Parse the value into the native representation\nconst parseValue = (type: number, value: string): string | number => {\n  if (type >= 10 && type < 60) {\n    return Number.parseFloat(value)\n  } else if (type >= 210 && type < 240) {\n    return Number.parseFloat(value)\n  } else if (type >= 60 && type < 100) {\n    return Number.parseInt(value, 10)\n  } else {\n    return value\n  }\n}\n\n// Content lines are alternate lines of type and value\nconst convertToTypesAndValues = (contentLines: string[]): Tuple[] => {\n  let state: 'type' | 'value' = 'type'\n  let type = 0\n  const typesAndValues: Tuple[] = []\n  for (const line of contentLines) {\n    if (state === 'type') {\n      type = Number.parseInt(line, 10)\n      state = 'value'\n    } else {\n      typesAndValues.push([type, parseValue(type, line)])\n      state = 'type'\n    }\n  }\n  return typesAndValues\n}\n\nconst separateSections = (tuples: Tuple[]): Tuple[][] => {\n  let sectionTuples: Tuple[] | undefined\n  return tuples.reduce((sections, tuple) => {\n    if (tuple[0] === 0 && tuple[1] === 'SECTION') {\n      sectionTuples = []\n    } else if (tuple[0] === 0 && tuple[1] === 'ENDSEC') {\n      sections.push(sectionTuples!)\n      sectionTuples = undefined\n    } else if (sectionTuples !== undefined) {\n      sectionTuples.push(tuple)\n    }\n    return sections\n  }, [] as Tuple[][])\n}\n\n// Each section start with the type tuple, then proceeds\n// with the contents of the section\nconst reduceSection = (acc: ParsedDXF, section: Tuple[]): ParsedDXF => {\n  const sectionType = section[0][1]\n  const contentTuples = section.slice(1)\n  switch (sectionType) {\n    case 'HEADER':\n      acc.header = headerHandler(contentTuples)\n      break\n    case 'TABLES':\n      acc.tables = tablesHandler(contentTuples)\n      break\n    case 'BLOCKS':\n      acc.blocks = blocksHandler(contentTuples)\n      break\n    case 'ENTITIES':\n      acc.entities = entitiesHandler(contentTuples)\n      break\n    case 'OBJECTS':\n      acc.objects = objectsHandler(contentTuples)\n      break\n    default:\n      logger.warn(`Unsupported section: ${sectionType}`)\n  }\n  return acc\n}\n\nexport default function parseString(string: string): ParsedDXF {\n  const lines = string.split(/\\r\\n|\\r|\\n/g)\n  const tuples = convertToTypesAndValues(lines)\n  const sections = separateSections(tuples)\n  const result = sections.reduce(reduceSection, {\n    // Start with empty defaults in the event of empty sections\n    header: {},\n    blocks: [],\n    entities: [],\n    objects: { layouts: [] },\n    tables: { layers: {}, styles: {}, ltypes: {} },\n  })\n  return result\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA0B;AAC1B,sBAA4B;AAC5B,oBAA0B;AAC1B,qBAA2B;AAC3B,oBAA0B;AAC1B,oBAAmB;AAOnB,MAAM,aAAa,CAAC,MAAc,UAAmC;AACnE,MAAI,QAAQ,MAAM,OAAO,IAAI;AAC3B,WAAO,OAAO,WAAW,KAAK;AAAA,EAChC,WAAW,QAAQ,OAAO,OAAO,KAAK;AACpC,WAAO,OAAO,WAAW,KAAK;AAAA,EAChC,WAAW,QAAQ,MAAM,OAAO,KAAK;AACnC,WAAO,OAAO,SAAS,OAAO,EAAE;AAAA,EAClC,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAGA,MAAM,0BAA0B,CAAC,iBAAoC;AACnE,MAAI,QAA0B;AAC9B,MAAI,OAAO;AACX,QAAM,iBAA0B,CAAC;AACjC,aAAW,QAAQ,cAAc;AAC/B,QAAI,UAAU,QAAQ;AACpB,aAAO,OAAO,SAAS,MAAM,EAAE;AAC/B,cAAQ;AAAA,IACV,OAAO;AACL,qBAAe,KAAK,CAAC,MAAM,WAAW,MAAM,IAAI,CAAC,CAAC;AAClD,cAAQ;AAAA,IACV;AAAA,EACF;AACA,SAAO;AACT;AAEA,MAAM,mBAAmB,CAAC,WAA+B;AACvD,MAAI;AACJ,SAAO,OAAO,OAAO,CAAC,UAAU,UAAU;AACxC,QAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,WAAW;AAC5C,sBAAgB,CAAC;AAAA,IACnB,WAAW,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,UAAU;AAClD,eAAS,KAAK,aAAc;AAC5B,sBAAgB;AAAA,IAClB,WAAW,kBAAkB,QAAW;AACtC,oBAAc,KAAK,KAAK;AAAA,IAC1B;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAc;AACpB;AAIA,MAAM,gBAAgB,CAAC,KAAgB,YAAgC;AACrE,QAAM,cAAc,QAAQ,CAAC,EAAE,CAAC;AAChC,QAAM,gBAAgB,QAAQ,MAAM,CAAC;AACrC,UAAQ,aAAa;AAAA,IACnB,KAAK;AACH,UAAI,aAAS,cAAAA,SAAc,aAAa;AACxC;AAAA,IACF,KAAK;AACH,UAAI,aAAS,cAAAC,SAAc,aAAa;AACxC;AAAA,IACF,KAAK;AACH,UAAI,aAAS,cAAAC,SAAc,aAAa;AACxC;AAAA,IACF,KAAK;AACH,UAAI,eAAW,gBAAAC,SAAgB,aAAa;AAC5C;AAAA,IACF,KAAK;AACH,UAAI,cAAU,eAAAC,SAAe,aAAa;AAC1C;AAAA,IACF;AACE,oBAAAC,QAAO,KAAK,wBAAwB,WAAW,EAAE;AAAA,EACrD;AACA,SAAO;AACT;AAEe,SAAR,YAA6B,QAA2B;AAC7D,QAAM,QAAQ,OAAO,MAAM,aAAa;AACxC,QAAM,SAAS,wBAAwB,KAAK;AAC5C,QAAM,WAAW,iBAAiB,MAAM;AACxC,QAAM,SAAS,SAAS,OAAO,eAAe;AAAA;AAAA,IAE5C,QAAQ,CAAC;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,UAAU,CAAC;AAAA,IACX,SAAS,EAAE,SAAS,CAAC,EAAE;AAAA,IACvB,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,EAC/C,CAAC;AACD,SAAO;AACT;",
  "names": ["headerHandler", "tablesHandler", "blocksHandler", "entitiesHandler", "objectsHandler", "logger"]
}
