{
  "version": 3,
  "sources": ["../../src/handlers/objects.ts"],
  "sourcesContent": ["import type {\n  DictionaryObject,\n  DimAssocObject,\n  DXFTuple,\n  FieldObject,\n  ImageDefObject,\n  ImageDefReactorObject,\n  LayoutInternal,\n  ParsedObjects,\n  UnderlayDefinitionObject,\n  XRecordObject,\n} from '../types'\n\ntype ObjectGroup = DXFTuple[]\n\nfunction groupObjectsByZero(tuples: DXFTuple[]): ObjectGroup[] {\n  const groups: ObjectGroup[] = []\n  let current: ObjectGroup | undefined\n\n  for (const tuple of tuples) {\n    const code = tuple[0]\n    if (code === 0) {\n      if (current && current.length > 0) groups.push(current)\n      current = [tuple]\n      continue\n    }\n    if (!current) continue\n    current.push(tuple)\n  }\n\n  if (current && current.length > 0) groups.push(current)\n  return groups\n}\n\nconst LAYOUT_FLOAT_FIELDS: Record<number, keyof LayoutInternal> = {\n  10: 'minLimitX',\n  20: 'minLimitY',\n  11: 'maxLimitX',\n  21: 'maxLimitY',\n  12: 'x',\n  22: 'y',\n  32: 'z',\n  14: 'minX',\n  24: 'minY',\n  34: 'minZ',\n  15: 'maxX',\n  25: 'maxY',\n  35: 'maxZ',\n  146: 'elevation',\n  13: 'ucsX',\n  23: 'ucsY',\n  33: 'ucsZ',\n  16: 'ucsXaxisX',\n  26: 'ucsXaxisY',\n  36: 'ucsXaxisZ',\n  17: 'ucsYaxisX',\n  27: 'ucsYaxisY',\n  37: 'ucsYaxisZ',\n}\n\nconst LAYOUT_DIRECT_FIELDS: Record<number, keyof LayoutInternal> = {\n  1: 'name',\n  5: 'handle',\n  71: 'tabOrder',\n  330: 'tableRecord',\n  331: 'lastActiveViewport',\n  333: 'shadePlot',\n}\n\nconst LAYOUT_UCS_TYPE: Record<number, LayoutInternal['ucsType']> = {\n  0: 'NOT ORTHOGRAPHIC',\n  1: 'TOP',\n  2: 'BOTTOM',\n  3: 'FRONT',\n  4: 'BACK',\n  5: 'LEFT',\n  6: 'RIGHT',\n}\n\ntype LayoutParseState = {\n  state: 'IDLE' | 'layout' | 'AcDbLayout'\n  layout?: LayoutInternal\n}\n\nfunction consumeLayoutStartTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n  if (tuple[1] === 'LAYOUT') return { state: 'layout', layout: {} }\n  return { state: 'IDLE', layout: current.layout }\n}\n\nfunction consumeLayoutSubclassTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n  if (tuple[0] === 100 && tuple[1] === 'AcDbLayout') return { state: 'AcDbLayout', layout: current.layout }\n  return current\n}\n\nfunction applyLayoutFieldTuple(layout: LayoutInternal, tuple: DXFTuple): void {\n  const type = tuple[0]\n  const value = tuple[1]\n\n  const floatKey = LAYOUT_FLOAT_FIELDS[type]\n  if (floatKey) {\n    ;(layout as any)[floatKey] = Number.parseFloat(String(value))\n    return\n  }\n\n  const directKey = LAYOUT_DIRECT_FIELDS[type]\n  if (directKey) {\n    ;(layout as any)[directKey] = value\n    return\n  }\n\n  if (type === 70) {\n    layout.flag = value === 1 ? 'PSLTSCALE' : 'LIMCHECK'\n    return\n  }\n\n  if (type === 76) {\n    const ucsType = LAYOUT_UCS_TYPE[Number(value)]\n    if (ucsType) layout.ucsType = ucsType\n  }\n}\n\nfunction consumeLayoutTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n  if (tuple[0] === 0) return consumeLayoutStartTuple(current, tuple)\n\n  if (current.state === 'layout') return consumeLayoutSubclassTuple(current, tuple)\n\n  if (current.state === 'AcDbLayout' && current.layout) applyLayoutFieldTuple(current.layout, tuple)\n  return current\n}\n\nfunction parseLayoutObject(group: ObjectGroup): LayoutInternal | undefined {\n  let current: LayoutParseState = { state: 'IDLE' }\n  for (const tuple of group) current = consumeLayoutTuple(current, tuple)\n  return current.layout\n}\n\nfunction parseDictionaryObject(group: ObjectGroup): DictionaryObject | undefined {\n  if (group[0]?.[1] !== 'DICTIONARY') return undefined\n\n  const dict: DictionaryObject = {\n    type: 'DICTIONARY',\n    entries: {},\n  }\n\n  let pendingKey: string | undefined\n  for (const tuple of group.slice(1)) {\n    const type = tuple[0]\n    const value = tuple[1]\n\n    if (type === 5) {\n      dict.handle = value\n      continue\n    }\n    if (type === 330) {\n      dict.ownerHandle = value\n      continue\n    }\n    if (type === 3) {\n      pendingKey = String(value)\n      continue\n    }\n    if ((type === 350 || type === 360) && pendingKey) {\n      dict.entries[pendingKey] = String(value)\n      pendingKey = undefined\n    }\n  }\n\n  return dict\n}\n\nfunction parseXRecordObject(group: ObjectGroup): XRecordObject | undefined {\n  if (group[0]?.[1] !== 'XRECORD') return undefined\n\n  const tuples = group.slice(1)\n\n  const xRecord: XRecordObject = {\n    type: 'XRECORD',\n    tuples,\n  }\n\n  for (const tuple of tuples) {\n    const type = tuple[0]\n    const value = tuple[1]\n\n    if (type === 5) xRecord.handle = value\n    if (type === 330) xRecord.ownerHandle = value\n  }\n\n  return xRecord\n}\n\nfunction parseImageDefObject(group: ObjectGroup): ImageDefObject | undefined {\n  if (group[0]?.[1] !== 'IMAGEDEF') return undefined\n\n  const tuples = group.slice(1)\n\n  const imageDef: ImageDefObject = {\n    type: 'IMAGEDEF',\n    tuples,\n  }\n\n  for (const tuple of tuples) {\n    const type = tuple[0]\n    const value = tuple[1]\n\n    if (type === 5) imageDef.handle = value\n    if (type === 330 && imageDef.ownerHandle === undefined) imageDef.ownerHandle = value\n    if (type === 1) imageDef.fileName = String(value)\n    if (type === 10) imageDef.pixelSizeX = Number(value)\n    if (type === 20) imageDef.pixelSizeY = Number(value)\n  }\n\n  return imageDef\n}\n\nfunction parseImageDefReactorObject(group: ObjectGroup): ImageDefReactorObject | undefined {\n  if (group[0]?.[1] !== 'IMAGEDEF_REACTOR') return undefined\n\n  const tuples = group.slice(1)\n\n  const reactor: ImageDefReactorObject = {\n    type: 'IMAGEDEF_REACTOR',\n    tuples,\n  }\n\n  for (const tuple of tuples) {\n    const type = tuple[0]\n    const value = tuple[1]\n\n    if (type === 5) reactor.handle = value\n    if (type === 330) reactor.imageHandle = value\n  }\n\n  return reactor\n}\n\nfunction parseDimAssocObject(group: ObjectGroup): DimAssocObject | undefined {\n  if (group[0]?.[1] !== 'DIMASSOC') return undefined\n\n  const tuples = group.slice(1)\n\n  const dimAssoc: DimAssocObject = {\n    type: 'DIMASSOC',\n    tuples,\n  }\n\n  for (const tuple of tuples) {\n    const type = tuple[0]\n    const value = tuple[1]\n\n    if (type === 5) dimAssoc.handle = value\n    if (type === 330) dimAssoc.ownerHandle = value\n  }\n\n  return dimAssoc\n}\n\nfunction parseFieldObject(group: ObjectGroup): FieldObject | undefined {\n  if (group[0]?.[1] !== 'FIELD') return undefined\n\n  const tuples = group.slice(1)\n\n  const field: FieldObject = {\n    type: 'FIELD',\n    tuples,\n  }\n\n  for (const tuple of tuples) {\n    const type = tuple[0]\n    const value = tuple[1]\n\n    if (type === 5) field.handle = value\n    if (type === 330) field.ownerHandle = value\n  }\n\n  return field\n}\n\nconst UNDERLAY_DEFINITION_OBJECT_TYPES = new Set([\n  'UNDERLAYDEFINITION',\n  'PDFDEFINITION',\n  'DWFDEFINITION',\n  'DGNDEFINITION',\n])\n\nfunction parseUnderlayDefinitionObject(group: ObjectGroup): UnderlayDefinitionObject | undefined {\n  const objectType = group[0]?.[1]\n  if (typeof objectType !== 'string') return undefined\n  if (!UNDERLAY_DEFINITION_OBJECT_TYPES.has(objectType)) return undefined\n\n  const tuples = group.slice(1)\n\n  const def: UnderlayDefinitionObject = {\n    type: objectType as UnderlayDefinitionObject['type'],\n    tuples,\n  }\n\n  for (const tuple of tuples) {\n    const type = tuple[0]\n    const value = tuple[1]\n\n    if (type === 5) def.handle = value\n    if (type === 330 && def.ownerHandle === undefined) def.ownerHandle = value\n    if (type === 1) def.fileName = String(value)\n    if (type === 2) def.underlayName = String(value)\n  }\n\n  return def\n}\n\ntype ObjectGroupHandler = (objects: ParsedObjects, group: ObjectGroup) => void\n\nconst OBJECT_GROUP_HANDLERS: Record<string, ObjectGroupHandler> = {\n  LAYOUT: (objects, group) => {\n    const layout = parseLayoutObject(group)\n    if (layout) objects.layouts.push(layout)\n  },\n  DICTIONARY: (objects, group) => {\n    const dict = parseDictionaryObject(group)\n    const handle = dict?.handle ? String(dict.handle) : undefined\n    if (dict && handle) objects.dictionaries![handle] = dict\n  },\n  XRECORD: (objects, group) => {\n    const xRecord = parseXRecordObject(group)\n    const handle = xRecord?.handle ? String(xRecord.handle) : undefined\n    if (xRecord && handle) objects.xRecords![handle] = xRecord\n  },\n  IMAGEDEF: (objects, group) => {\n    const imageDef = parseImageDefObject(group)\n    const handle = imageDef?.handle ? String(imageDef.handle) : undefined\n    if (imageDef && handle) objects.imageDefs![handle] = imageDef\n  },\n  IMAGEDEF_REACTOR: (objects, group) => {\n    const reactor = parseImageDefReactorObject(group)\n    const handle = reactor?.handle ? String(reactor.handle) : undefined\n    if (reactor && handle) objects.imageDefReactors![handle] = reactor\n  },\n  UNDERLAYDEFINITION: (objects, group) => {\n    const def = parseUnderlayDefinitionObject(group)\n    const handle = def?.handle ? String(def.handle) : undefined\n    if (def && handle) objects.underlayDefinitions![handle] = def\n  },\n  PDFDEFINITION: (objects, group) => {\n    const def = parseUnderlayDefinitionObject(group)\n    const handle = def?.handle ? String(def.handle) : undefined\n    if (def && handle) objects.underlayDefinitions![handle] = def\n  },\n  DWFDEFINITION: (objects, group) => {\n    const def = parseUnderlayDefinitionObject(group)\n    const handle = def?.handle ? String(def.handle) : undefined\n    if (def && handle) objects.underlayDefinitions![handle] = def\n  },\n  DGNDEFINITION: (objects, group) => {\n    const def = parseUnderlayDefinitionObject(group)\n    const handle = def?.handle ? String(def.handle) : undefined\n    if (def && handle) objects.underlayDefinitions![handle] = def\n  },\n  DIMASSOC: (objects, group) => {\n    const dimAssoc = parseDimAssocObject(group)\n    const handle = dimAssoc?.handle ? String(dimAssoc.handle) : undefined\n    if (dimAssoc && handle) objects.dimAssocs![handle] = dimAssoc\n  },\n  FIELD: (objects, group) => {\n    const field = parseFieldObject(group)\n    const handle = field?.handle ? String(field.handle) : undefined\n    if (field && handle) objects.fields![handle] = field\n  },\n}\n\nexport default function parseObjects(tuples: DXFTuple[]): ParsedObjects {\n  const objects: ParsedObjects = {\n    layouts: [],\n    dictionaries: {},\n    xRecords: {},\n    imageDefs: {},\n    imageDefReactors: {},\n    underlayDefinitions: {},\n    dimAssocs: {},\n    fields: {},\n  }\n\n  const groups = groupObjectsByZero(tuples)\n  for (const group of groups) {\n    const objectType = group[0]?.[1]\n    if (typeof objectType !== 'string') continue\n\n    const handler = OBJECT_GROUP_HANDLERS[objectType]\n    if (handler) handler(objects, group)\n  }\n\n  return objects\n}\n"],
  "mappings": "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",
  "names": []
}
