{"version":3,"file":"ai-model/shared/model-locate-result/parse.mjs","sources":["../../../../../src/ai-model/shared/model-locate-result/parse.ts"],"sourcesContent":["import type {\n  LocateResultValue,\n  ResolvedLocateResultCoordinates,\n} from './types';\n\ntype CoordinateListLikeInput =\n  | number[]\n  | string[]\n  | string\n  | (number[] | string[])[];\n\nexport function unwrapCoordinateListLikeInput(\n  coordinateList: CoordinateListLikeInput,\n): number[] | string[] | string {\n  if (Array.isArray(coordinateList)) {\n    if (Array.isArray(coordinateList[0])) {\n      return coordinateList[0] as number[] | string[];\n    }\n    return coordinateList as number[] | string[];\n  }\n  return coordinateList as string;\n}\n\nfunction parseCoordinateList(input: unknown, label: string): number[] {\n  const unwrapped = unwrapCoordinateListLikeInput(\n    input as CoordinateListLikeInput,\n  );\n  const values =\n    typeof unwrapped === 'string'\n      ? unwrapped\n          .trim()\n          .split(/[\\s,]+/)\n          .filter(Boolean)\n      : unwrapped;\n\n  if (!Array.isArray(values)) {\n    throw new Error(`invalid ${label} data: ${JSON.stringify(input)} `);\n  }\n\n  const numericValues = values.map((value) =>\n    typeof value === 'number' ? value : Number(value),\n  );\n\n  if (!numericValues.every((value) => Number.isFinite(value))) {\n    throw new Error(`invalid ${label} data: ${JSON.stringify(input)} `);\n  }\n\n  return numericValues;\n}\n\nexport function parseNumericLocateResult(\n  resolvedCoordinates: ResolvedLocateResultCoordinates,\n  input: unknown,\n): LocateResultValue {\n  if (resolvedCoordinates.shape === 'point') {\n    const point = parseCoordinateList(input, 'point');\n    if (point.length < 2) {\n      throw new Error(`invalid point data: ${JSON.stringify(input)} `);\n    }\n    return { type: 'point', coordinates: [point[0], point[1]] };\n  }\n\n  const bbox = parseCoordinateList(input, 'bbox');\n  if (bbox.length !== 4) {\n    throw new Error(`invalid bbox data: ${JSON.stringify(input)} `);\n  }\n\n  return {\n    type: 'bbox',\n    coordinates: [bbox[0], bbox[1], bbox[2], bbox[3]],\n  };\n}\n"],"names":["unwrapCoordinateListLikeInput","coordinateList","Array","parseCoordinateList","input","label","unwrapped","values","Boolean","Error","JSON","numericValues","value","Number","parseNumericLocateResult","resolvedCoordinates","point","bbox"],"mappings":"AAWO,SAASA,8BACdC,cAAuC;IAEvC,IAAIC,MAAM,OAAO,CAACD,iBAChB;QAAA,IAAIC,MAAM,OAAO,CAACD,cAAc,CAAC,EAAE,GACjC,OAAOA,cAAc,CAAC,EAAE;IAC1B;IAGF,OAAOA;AACT;AAEA,SAASE,oBAAoBC,KAAc,EAAEC,KAAa;IACxD,MAAMC,YAAYN,8BAChBI;IAEF,MAAMG,SACJ,AAAqB,YAArB,OAAOD,YACHA,UACG,IAAI,GACJ,KAAK,CAAC,UACN,MAAM,CAACE,WACVF;IAEN,IAAI,CAACJ,MAAM,OAAO,CAACK,SACjB,MAAM,IAAIE,MAAM,CAAC,QAAQ,EAAEJ,MAAM,OAAO,EAAEK,KAAK,SAAS,CAACN,OAAO,CAAC,CAAC;IAGpE,MAAMO,gBAAgBJ,OAAO,GAAG,CAAC,CAACK,QAChC,AAAiB,YAAjB,OAAOA,QAAqBA,QAAQC,OAAOD;IAG7C,IAAI,CAACD,cAAc,KAAK,CAAC,CAACC,QAAUC,OAAO,QAAQ,CAACD,SAClD,MAAM,IAAIH,MAAM,CAAC,QAAQ,EAAEJ,MAAM,OAAO,EAAEK,KAAK,SAAS,CAACN,OAAO,CAAC,CAAC;IAGpE,OAAOO;AACT;AAEO,SAASG,yBACdC,mBAAoD,EACpDX,KAAc;IAEd,IAAIW,AAA8B,YAA9BA,oBAAoB,KAAK,EAAc;QACzC,MAAMC,QAAQb,oBAAoBC,OAAO;QACzC,IAAIY,MAAM,MAAM,GAAG,GACjB,MAAM,IAAIP,MAAM,CAAC,oBAAoB,EAAEC,KAAK,SAAS,CAACN,OAAO,CAAC,CAAC;QAEjE,OAAO;YAAE,MAAM;YAAS,aAAa;gBAACY,KAAK,CAAC,EAAE;gBAAEA,KAAK,CAAC,EAAE;aAAC;QAAC;IAC5D;IAEA,MAAMC,OAAOd,oBAAoBC,OAAO;IACxC,IAAIa,AAAgB,MAAhBA,KAAK,MAAM,EACb,MAAM,IAAIR,MAAM,CAAC,mBAAmB,EAAEC,KAAK,SAAS,CAACN,OAAO,CAAC,CAAC;IAGhE,OAAO;QACL,MAAM;QACN,aAAa;YAACa,IAAI,CAAC,EAAE;YAAEA,IAAI,CAAC,EAAE;YAAEA,IAAI,CAAC,EAAE;YAAEA,IAAI,CAAC,EAAE;SAAC;IACnD;AACF"}