@speleotica/frcsdata 5.0.0-beta.1 → 5.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/ParseIssue.js +4 -4
  2. package/ParseIssue.js.map +1 -1
  3. package/SourceLoc.js +5 -5
  4. package/SourceLoc.js.map +1 -1
  5. package/chunksToLines.js +29 -131
  6. package/chunksToLines.js.map +1 -1
  7. package/cli/check-survey-correspondence.d.ts +2 -0
  8. package/cli/check-survey-correspondence.d.ts.map +1 -0
  9. package/cli/check-survey-correspondence.js +44 -0
  10. package/cli/check-survey-correspondence.js.map +1 -0
  11. package/cli/check-survey.d.ts.map +1 -1
  12. package/cli/check-survey.js +14 -75
  13. package/cli/check-survey.js.map +1 -1
  14. package/cli/parse-survey.js +4 -26
  15. package/cli/parse-survey.js.map +1 -1
  16. package/cli/summarize-survey.d.ts +2 -0
  17. package/cli/summarize-survey.d.ts.map +1 -0
  18. package/cli/summarize-survey.js +33 -0
  19. package/cli/summarize-survey.js.map +1 -0
  20. package/cli.js +61 -72
  21. package/cli.js.map +1 -1
  22. package/formatFrcsTripSummaryFile.d.ts +3 -0
  23. package/formatFrcsTripSummaryFile.d.ts.map +1 -0
  24. package/formatFrcsTripSummaryFile.js +33 -0
  25. package/formatFrcsTripSummaryFile.js.map +1 -0
  26. package/formatIssues.d.ts +10 -0
  27. package/formatIssues.d.ts.map +1 -0
  28. package/formatIssues.js +52 -0
  29. package/formatIssues.js.map +1 -0
  30. package/index.js +13 -13
  31. package/node/index.d.ts +3 -1
  32. package/node/index.d.ts.map +1 -1
  33. package/node/index.js +5 -19
  34. package/node/index.js.map +1 -1
  35. package/package.json +1 -1
  36. package/parseFrcsPlotFile.js +112 -245
  37. package/parseFrcsPlotFile.js.map +1 -1
  38. package/parseFrcsTripSummaryFile.d.ts +3 -1
  39. package/parseFrcsTripSummaryFile.d.ts.map +1 -1
  40. package/parseFrcsTripSummaryFile.js +53 -119
  41. package/parseFrcsTripSummaryFile.js.map +1 -1
  42. package/src/cli/check-survey-correspondence.ts +49 -0
  43. package/src/cli/check-survey.ts +8 -69
  44. package/src/cli/summarize-survey.ts +28 -0
  45. package/src/cli.ts +33 -0
  46. package/src/formatFrcsTripSummaryFile.ts +45 -0
  47. package/src/formatIssues.ts +97 -0
  48. package/src/parseFrcsTripSummaryFile.ts +8 -2
  49. package/src/survey/normalizeTeamMemberName.ts +3 -6
  50. package/src/survey/parseFrcsSurveyFile.ts +3 -17
  51. package/src/survey/summarizeSurvey.ts +51 -0
  52. package/src/unwrapInvalid.ts +3 -0
  53. package/string/index.d.ts +3 -1
  54. package/string/index.d.ts.map +1 -1
  55. package/string/index.js +7 -41
  56. package/string/index.js.map +1 -1
  57. package/survey/FrcsSurveyFile.js +1 -1
  58. package/survey/FrcsSurveyFile.js.map +1 -1
  59. package/survey/ZodFrcsSurveyFileJson.js +84 -86
  60. package/survey/ZodFrcsSurveyFileJson.js.map +1 -1
  61. package/survey/ZodFrcsSurveyFileToJson.js +78 -88
  62. package/survey/ZodFrcsSurveyFileToJson.js.map +1 -1
  63. package/survey/formatFrcsShot.js +45 -43
  64. package/survey/formatFrcsShot.js.map +1 -1
  65. package/survey/formatFrcsSurveyFile.js +52 -130
  66. package/survey/formatFrcsSurveyFile.js.map +1 -1
  67. package/survey/getColumnRanges.js +11 -19
  68. package/survey/getColumnRanges.js.map +1 -1
  69. package/survey/normalizeTeamMemberName.d.ts.map +1 -1
  70. package/survey/normalizeTeamMemberName.js +1 -5
  71. package/survey/normalizeTeamMemberName.js.map +1 -1
  72. package/survey/parseFrcsSurveyFile.d.ts.map +1 -1
  73. package/survey/parseFrcsSurveyFile.js +558 -750
  74. package/survey/parseFrcsSurveyFile.js.map +1 -1
  75. package/survey/parsers.js +20 -20
  76. package/survey/parsers.js.map +1 -1
  77. package/survey/summarizeSurvey.d.ts +6 -0
  78. package/survey/summarizeSurvey.d.ts.map +1 -0
  79. package/survey/summarizeSurvey.js +58 -0
  80. package/survey/summarizeSurvey.js.map +1 -0
  81. package/underlineSource.js +9 -17
  82. package/underlineSource.js.map +1 -1
  83. package/unwrapInvalid.d.ts +4 -0
  84. package/unwrapInvalid.d.ts.map +1 -0
  85. package/unwrapInvalid.js +10 -0
  86. package/unwrapInvalid.js.map +1 -0
  87. package/web/index.js +56 -116
  88. package/web/index.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"parseFrcsSurveyFile.js","names":["_FrcsSurveyFile","require","_unitized","_chunksToLines","_validators","_getColumnRanges","_parsers","_normalizeTeamMemberName","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_asyncIterator","n","Symbol","asyncIterator","iterator","call","AsyncFromSyncIterator","TypeError","AsyncFromSyncIteratorContinuation","Promise","reject","done","resolve","value","then","s","next","prototype","_return","_throw","parseFrcsSurveyFile","_x","_x2","_parseFrcsSurveyFile","_asyncToGenerator2","_regenerator","mark","_callee","file","chunks","_ref","_ref$columns","columns","_ref$outputColumns","outputColumns","_ref$normalizeNames","normalizeNames","suppressWarnings","columnRanges","maxRange","cave","location","trips","issues","tripName","tripTeam","tripDate","inTripComment","tripCommentStartLine","tripCommentEndLine","tripComment","commentLines","trip","inBlockComment","section","commentFromStationLruds","unitsChanged","alternateUnits","nextShotUnits","lineNumber","line","lineStartIndex","lineIssues","tripIssues","began","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_loop","_ret","_iterator","_step","getComment","addCommentLine","addIssue","parseUnits","validate","addShot","_args2","wrap","_callee$","_context2","prev","_addShot","shot","recorded","INVALID","unwrapInvalid","units","undefined","_unwrapInvalid5","backsightAzimuthCorrected","backsightInclinationCorrected","distanceUnit","azimuthUnit","inclinationUnit","unwrappedAlternateUnits","unwrappedShot","backsightAzimuth","Angle","opposite","_shot3$backsightIncli","backsightInclination","negate","_shot3$distance","distance","fromLruds","_shot3$fromLruds$left","_shot3$fromLruds$righ","_shot3$fromLruds$up","_shot3$fromLruds$down","left","right","up","down","toLruds","_shot3$toLruds$left","_shot3$toLruds$right","_shot3$toLruds$up","_shot3$toLruds$down","_shot3$frontsightAzim","_shot3$backsightAzimu","frontsightAzimuth","_shot3$frontsightIncl","_shot3$backsightIncli2","frontsightInclination","shots","_validate","startColumn","endColumn","fieldName","validator","field","substring","concat","trim","toUpperCase","_parseUnits","parseLengthUnit","slice","parseAngleUnit","hasBacksightAzimuth","hasBacksightInclination","test","_addIssue","type","code","message","indicesArray","loc","start","column","index","end","_addCommentLine","comment","_unwrapInvalid4","Length","feet","parsedFromStationLruds","parseFromStationLruds","set","_getComment","join","defaultFrcsShotColumnConfig","getColumnRanges","Math","max","_toConsumableArray2","values","decimal","map","Map","_step$value","match","dateMatch","team","month","day","year","_match","header","_unwrapInvalid","_unwrapInvalid2","_unwrapInvalid3","_line","_line2","_line3","_line4","_line5","_line6","inches","ranges","fromStr","from","lStr","rStr","uStr","dStr","toStr","fromLrudMatch","_fromLrudMatch$1$trim","_fromLrudMatch$1$trim2","_left","_right","_up","_down","azmFsStr","azmBsStr","incFsStr","incBsStr","horizontalDistance","verticalDistance","feetStr","inchesStr","distStr","distNum","specialKindStr","exclude","specialKind","excludeDistance","isSplay","_horizontalDistance$g","_horizontalDistance","h","v","_distance$get","_distance","d","_v","_shot","_shot2","_loop$","_context","startIndex","abrupt","exec","split","indexOf","flatMap","member","normalizeTeamMemberName","parseInt","parseMonth","Date","replace","name","date","some","i","_issues$i","tripNumber","degrees","feetAndInches","fromStation","isValidStation","isValidOptFloat","parseLrud","toStation","to","UnitizedNumber","get","RegExp","_slicedToArray2","isValidOptUFloat","distanceFeet","distanceInches","isValidUInt","Unitize","parseFloat","add","isValidUFloat","Number","isFinite","kind","parseSpecialKind","isValidFloat","NaN","sqrt","atan2","asin","parseNumber","parseAzimuth","stop","chunksToLines","sent","delegateYield","t0","t1","finish","sort","a","b","aDate","bDate","getTime","_ref2","every","module","exports","default"],"sources":["../../src/survey/parseFrcsSurveyFile.ts"],"sourcesContent":["import { defaultFrcsShotColumnConfig } from './FrcsSurveyFile'\nimport type {\n ParseFrcsSurveyFileOptions,\n FrcsSurveyFile,\n FrcsTrip,\n FrcsUnits,\n FrcsShot,\n InvalidFrcsSurveyFile,\n InvalidFrcsUnits,\n InvalidFrcsTrip,\n InvalidFrcsShot,\n} from './FrcsSurveyFile'\nimport { Angle, Length, UnitizedNumber, Unitize } from '@speleotica/unitized'\nimport { ParseIssue, ParseIssueSeverity } from '../ParseIssue'\nimport { chunksToLines } from '../chunksToLines'\nimport {\n isValidStation,\n isValidOptFloat,\n isValidOptUFloat,\n isValidUInt,\n isValidUFloat,\n isValidFloat,\n} from './validators'\nimport { getColumnRanges } from './getColumnRanges'\nimport {\n parseFromStationLruds,\n parseLengthUnit,\n parseAngleUnit,\n parseMonth,\n parseLrud,\n parseSpecialKind,\n parseNumber,\n parseAzimuth,\n} from './parsers'\nimport { normalizeTeamMemberName } from './normalizeTeamMemberName'\n\n/**\n * Parses a raw cdata.fr survey file. These look like so:\n *\n <pre> Fisher Ridge Cave System, Hart Co., KY\n ENTRANCE DROPS, JOE'S \"I LOVE MY WIFE TRAVERSE\", TRICKY TRAVERSE\n PETER QUICK, KEITH ORTIZ - 2-15-81\n This File has Crumps test connected. 11/20/12\n *\n FT C DD A\n AE20 0 1 3 0 2\n * %FS\n * AE20 0 0 0 Bug-can't put before so put after-so can't make 2 fixed 10/28/12\n AE19 AE20 9.3 60.0 60.0-36.0 2 12 0 20\n AE18 AE19 24.5 0.0 0.0-90.0 6 10 25 0\n AE17 AE18 8.0 350.5 350.5 17.0 3 5 0 0\n AE16 AE17 6.7 0.0 0.0-90.0 3 5 6 1\n AE15 AE16 12.6 70.5 71.0-18.0 4 0 2 1\n AE14 AE15 10.0 21.5 20.0 6.0 5 5 0 3\n AE13 AE14 26.8 288.0 286.0-50.0 0 7 20 5\n *\n *SHORT CANYON AT THE BASE OF THE SECOND DROP\n AE12 AE13 20.7 236.0 236.0 34.0 3 5 4 4\n AE11 AE12 12.4 210.0 210.0 35.0 7 4 5 1\n AE10 AE13 25.7 40.0 40.0 -9.0 2 2 3 6\n *\n *AE10 AT JOE'S \" I LOVE MY WIFE TRAVERSE \"\n AE9 AE10 17.8 32.5 31.0 23.0 4 5 20 15\n AE1 AE9 13.7 82.0 82.0-13.0\n A1 AE1 34.3 46.0 48.0-17.5\n *\n *SURVEY TO DOME NEAR THE ENTRANCE DOME (ABOVE THE SECOND DROP)\n AD1 AE15 8.0 200.0 200.0 0.0 3 1 1 1\n AD2 AD1 17.7 161.0 161.0 7.0 1 4 25 1\n AD3 AD2 10.4 180.0 180.0 50.0 4 1 15 5\n *\n TRICKY TRAVERSE AND THEN FIRST SURVEY IN UPPER CROWLWAY\n DAN CROWL, KEITH ORTIZ, CHIP HOPPER, PETER QUICK, LARRY BEAN 14 FEB 1981\n *\n FI B DD\n A2 A1 48 10 292.0 110.0-42.0 5 10 35 5\n A3 A2 12 5 333.5 153.5 35.0 3 1 15 5\n A4 A3 4 2 0.0 0.0 90.0 3 1 10 10\n ...</pre>\n *\n */\nexport default async function parseFrcsSurveyFile(\n file: any, // eslint-disable-line @typescript-eslint/no-explicit-any\n chunks: Iterable<string> | AsyncIterable<string>,\n {\n columns = defaultFrcsShotColumnConfig,\n outputColumns = false,\n normalizeNames = true,\n suppressWarnings,\n }: ParseFrcsSurveyFileOptions = {}\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile> {\n const columnRanges = getColumnRanges(columns)\n const maxRange = Math.max(\n ...Object.values(columnRanges.decimal).map((r) => r[1])\n )\n\n let cave: string | undefined = undefined\n let location: string | undefined = undefined\n const trips: (FrcsTrip | InvalidFrcsTrip)[] = []\n const issues: ParseIssue[] = []\n\n let tripName: string | undefined\n let tripTeam: string[] | undefined\n let tripDate: Date | undefined\n let inTripComment = true\n let tripCommentStartLine = 1\n let tripCommentEndLine = -1\n const tripComment: string[] = []\n const commentLines: string[] = []\n let trip: FrcsTrip | InvalidFrcsTrip | undefined = undefined\n let inBlockComment = false\n let section\n const commentFromStationLruds = new Map<\n string,\n NonNullable<FrcsShot['fromLruds']>\n >()\n\n let unitsChanged = false\n let alternateUnits: FrcsUnits | InvalidFrcsUnits | undefined\n let nextShotUnits: FrcsUnits | InvalidFrcsUnits | undefined\n\n let lineNumber = 0\n let line: string\n let lineStartIndex = 0\n\n let lineIssues: number[] = []\n let tripIssues: number[] = []\n\n let began = false\n\n for await ({ line, startIndex: lineStartIndex } of chunksToLines(chunks)) {\n if (lineIssues.length) lineIssues = []\n\n lineNumber++\n\n if (!began) {\n began = true\n if (/^\\s+\\*/.test(line)) {\n continue\n }\n const match = /^\\s*([^,]+)(,(.*))?/.exec(line)\n if (match) {\n cave = match[1].trim()\n if (match[3]) {\n location = match[3].trim()\n }\n }\n }\n\n if (unitsChanged) {\n unitsChanged = false\n alternateUnits = parseUnits()\n nextShotUnits = alternateUnits\n } else if (/^\\s{1,8}\\*(?!\\*)/.test(line)) {\n inTripComment = !inTripComment\n alternateUnits = nextShotUnits = undefined\n unitsChanged = false\n if (inTripComment) {\n section = undefined\n tripTeam = undefined\n tripDate = undefined\n tripComment.length = 0\n tripCommentStartLine = lineNumber\n } else {\n tripCommentEndLine = lineNumber\n }\n } else if (inTripComment) {\n if (lineNumber === tripCommentStartLine + 1) {\n tripName = line && line.trim()\n } else if (lineNumber === tripCommentStartLine + 2) {\n const dateMatch =\n /(?:[-.]\\s*)?((\\d+)[-/](\\d+)[-/](\\d{2,4})|((\\d+)[-/ ](january|february|march|april|may|june|july|august|september|october|november|december|(?:jan|feb|mar|apr|jun|jul|aug|sept?|oct|nov|dec)\\.?)[-/ ](\\d{2,4}))|((january|february|march|april|may|june|july|august|september|october|november|december|(?:jan|feb|mar|apr|jun|jul|aug|sept?|oct|nov|dec)\\.?)\\s+(\\d+)(?:,\\s*|,?\\s+)(\\d{2,4})))/i.exec(\n line\n )\n if (dateMatch) {\n const team = line.substring(0, dateMatch.index)\n tripTeam = team\n .split(team.indexOf(';') >= 0 ? ';' : ',')\n .flatMap((member) => member.trim() || [])\n if (!tripTeam.length) {\n addIssue(\n 'warning',\n 'missingTripTeam',\n 'Missing team',\n 0,\n dateMatch.index,\n tripIssues\n )\n }\n if (normalizeNames) tripTeam = tripTeam.map(normalizeTeamMemberName)\n let month, day, year\n if (dateMatch[2]) {\n month = parseInt(dateMatch[2])\n day = parseInt(dateMatch[3])\n year = parseInt(dateMatch[4])\n } else if (dateMatch[6]) {\n day = parseInt(dateMatch[6])\n month = parseMonth(dateMatch[7])\n year = parseInt(dateMatch[8])\n } else {\n month = parseMonth(dateMatch[10])\n day = parseInt(dateMatch[11])\n year = parseInt(dateMatch[12])\n }\n tripDate = new Date(year < 70 ? year + 2000 : year, month - 1, day)\n } else {\n addIssue(\n 'warning',\n 'missingTripDate',\n 'Missing date',\n line.length,\n line.length,\n tripIssues\n )\n }\n } else if (lineNumber > 1) {\n tripComment.push(line)\n }\n const match = /^\\*\\*\\*([^*]+)\\*\\*\\*/.exec(line)\n if (match) {\n section = match[1].trim()\n }\n } else if (/^(\\s{9,}|)\\*(?!\\*)/.test(line)) {\n if (/^\\*\\s*%NC(\\b|$)/.test(line)) {\n unitsChanged = true\n }\n if (/^\\*\\s*%/.test(line)) {\n continue\n }\n if (/[^\\s*]/.test(line)) {\n addCommentLine(line.replace(/^\\s*\\*/, ''))\n inBlockComment = false\n } else {\n inBlockComment = !inBlockComment\n if (inBlockComment) commentLines.length = 0\n }\n } else if (inBlockComment) {\n addCommentLine(line)\n } else if (lineNumber === tripCommentEndLine + 1) {\n if (trip) trips.push(trip)\n const header = {\n name: tripName || '',\n comment: (tripComment && tripComment.join('\\n')) || undefined,\n section,\n date: tripDate,\n team: tripTeam,\n }\n const units = parseUnits()\n if (\n 'INVALID' in units ||\n tripIssues.some((i) => issues[i]?.type === 'error')\n ) {\n trip = {\n INVALID: {\n header,\n units,\n shots: [],\n },\n ...(tripIssues.length ? { issues: tripIssues } : {}),\n }\n } else {\n trip = {\n tripNumber: 1,\n header,\n units,\n shots: [],\n }\n }\n tripIssues = []\n } else if (trip) {\n let distanceUnit =\n unwrapInvalid(alternateUnits)?.distanceUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).distanceUnit ||\n Length.feet\n const azimuthUnit =\n unwrapInvalid(alternateUnits)?.azimuthUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).azimuthUnit ||\n Angle.degrees\n const inclinationUnit =\n unwrapInvalid(alternateUnits)?.inclinationUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).inclinationUnit ||\n Angle.degrees\n\n const inches = distanceUnit === Length.inches\n if (inches) distanceUnit = Length.feet\n\n const ranges = inches ? columnRanges.feetAndInches : columnRanges.decimal\n\n // from station name\n if (!/\\S/.test(line.substring(...ranges.fromStation))) continue\n const fromStr = validate(\n ...ranges.fromStation,\n 'from station',\n isValidStation\n )\n const from = fromStr.trim()\n\n // Sadly I have found negative LRUD values in Chip's format and apparently\n // his program doesn't fail on them, so I have to accept them here\n // isValidOptFloat instead of isValidOptUFloat\n const lStr = validate(...ranges.left, 'left', isValidOptFloat)\n const rStr = validate(...ranges.right, 'right', isValidOptFloat)\n const uStr = validate(...ranges.up, 'up', isValidOptFloat)\n const dStr = validate(...ranges.down, 'down', isValidOptFloat)\n\n const up = parseLrud(uStr, distanceUnit)\n const down = parseLrud(dStr, distanceUnit)\n const left = parseLrud(lStr, distanceUnit)\n const right = parseLrud(rStr, distanceUnit)\n\n // to station name\n const toStr = line.substring(...ranges.toStation)\n if (!toStr.trim()) {\n const shot: FrcsShot = {\n from,\n to: undefined,\n distance: new UnitizedNumber(0, distanceUnit),\n frontsightAzimuth: undefined,\n backsightAzimuth: undefined,\n frontsightInclination: undefined,\n backsightInclination: undefined,\n fromLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance: true,\n comment: getComment(),\n }\n addShot(\n lineIssues.length ? { INVALID: shot, issues: lineIssues } : shot\n )\n continue\n }\n if (!isValidStation(toStr)) {\n addIssue(\n 'error',\n 'invalidStationName',\n 'Invalid station name',\n ...ranges.toStation\n )\n }\n\n let fromLruds = commentFromStationLruds.get(from)\n if (fromLruds) {\n commentFromStationLruds.delete(from)\n } else {\n const fromLrudMatch = new RegExp(\n `^\\\\s+${fromStr\n .trim()\n .replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&'\n )}((\\\\s+(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)){4})`\n ).exec(line.substring(maxRange))\n if (fromLrudMatch) {\n const [left, right, up, down] = fromLrudMatch[1]\n .trim()\n .split(/\\s+/g)\n .map((s) => parseLrud(s, distanceUnit))\n fromLruds = { left, right, up, down }\n }\n }\n\n const comment = getComment()\n\n // azimuth and inclination\n const azmFsStr = validate(\n ranges.frontsightAzimuth[0],\n ranges.frontsightAzimuth[1],\n 'azimuth',\n isValidOptUFloat\n )\n const azmBsStr = validate(\n ...ranges.backsightAzimuth,\n 'azimuth',\n isValidOptUFloat\n )\n const incFsStr = line.substring(...ranges.frontsightInclination)\n const incBsStr = line.substring(...ranges.backsightInclination)\n\n let distance: UnitizedNumber<Length> | undefined\n let horizontalDistance: UnitizedNumber<Length> | undefined\n let verticalDistance: UnitizedNumber<Length> | undefined\n let frontsightInclination: UnitizedNumber<Angle> | undefined\n let backsightInclination: UnitizedNumber<Angle> | undefined\n\n // parse distance\n if (inches) {\n const feetStr = validate(\n ...ranges.distanceFeet,\n 'feet',\n isValidOptUFloat\n )\n const inchesStr = validate(\n ...ranges.distanceInches,\n 'inches',\n isValidOptUFloat\n )\n if (!/\\S/.test(feetStr) && !/\\S/.test(inchesStr)) {\n addIssue(\n 'error',\n 'missingDistance',\n 'Missing distance',\n ranges.distanceFeet[0],\n ranges.distanceInches[1]\n )\n }\n // sometimes inches are omitted, hence the || 0...I'm assuming it's possible\n // for feet to be omitted as well\n else if (\n (isValidUInt(feetStr) && isValidOptUFloat(inchesStr)) ||\n (isValidOptUFloat(feetStr) && isValidUInt(inchesStr))\n ) {\n distance = Unitize.inches(parseFloat(inchesStr) || 0).add(\n Unitize.feet(parseFloat(feetStr) || 0)\n )\n }\n // NOTE there are two columns around here that can contain a *.\n // I think they might represent different values, but thisis confused by\n // the fact that for ft/in shots, if there is a D or H flag it occupies the\n // first column that can contain a * for decimal feet shots\n } else {\n const distStr = validate(...ranges.distance, 'distance', isValidUFloat)\n const distNum = parseFloat(distStr)\n distance = Number.isFinite(distNum)\n ? new UnitizedNumber(distNum, distanceUnit)\n : undefined\n }\n const specialKindStr = line.substring(...ranges.kind).trim()\n const exclude = line.substring(...ranges.exclude).trim()\n const specialKind = parseSpecialKind(specialKindStr)\n\n if (specialKindStr && !specialKind) {\n addIssue(\n 'error',\n 'invalidShotType',\n 'Invalid shot type',\n ranges.kind[0],\n ranges.kind[1]\n )\n }\n\n const excludeDistance = exclude === '*' || exclude === 's'\n const isSplay = exclude === 's'\n\n if (exclude && !excludeDistance) {\n addIssue(\n 'error',\n 'invalidShotFlag',\n 'Invalid shot flag',\n ranges.exclude[0],\n ranges.exclude[1]\n )\n }\n\n if (specialKind) {\n validate(\n ...ranges.frontsightInclination,\n 'vertical-distance',\n isValidFloat\n )\n }\n\n // convert horizontal and diagonal shots to standard\n // in this case incFs is the vertical offset between stations\n // fortunately it appears we can always count on incFs being specified\n // and incBs not being specified for these types of shots\n if (specialKind === 'horizontal') {\n // distance is horizontal offset and incFsStr is vertical offset\n horizontalDistance = distance\n const h = horizontalDistance?.get(distanceUnit) ?? NaN\n const v = parseFloat(incFsStr)\n verticalDistance = Number.isFinite(v)\n ? new UnitizedNumber(v, distanceUnit)\n : undefined\n distance = new UnitizedNumber(Math.sqrt(h * h + v * v), distanceUnit)\n frontsightInclination =\n verticalDistance && horizontalDistance\n ? Angle.atan2(verticalDistance, horizontalDistance).in(\n inclinationUnit\n )\n : undefined\n backsightInclination = undefined\n } else if (specialKind === 'diagonal') {\n // distance is as usual, but incFsStr is vertical offset\n const d = distance?.get(distanceUnit) ?? NaN\n const v = parseFloat(incFsStr)\n verticalDistance = Number.isFinite(v)\n ? new UnitizedNumber(v, distanceUnit)\n : undefined\n frontsightInclination = Angle.asin(v / d).in(inclinationUnit)\n backsightInclination = undefined\n } else {\n // frontsight inclination\n validate(\n ...ranges.frontsightInclination,\n 'inclination',\n isValidOptFloat\n )\n // backsight inclination\n validate(...ranges.backsightInclination, 'inclination', isValidOptFloat)\n frontsightInclination = parseNumber(incFsStr, inclinationUnit)\n backsightInclination = parseNumber(incBsStr, inclinationUnit)\n }\n\n const frontsightAzimuth = parseAzimuth(azmFsStr, azimuthUnit)\n const backsightAzimuth = parseAzimuth(azmBsStr, azimuthUnit)\n\n if (!/\\S/.test(incFsStr) && !/\\S/.test(incBsStr)) {\n frontsightInclination = Unitize.degrees(0)\n }\n\n if (from && distance && !lineIssues.length) {\n const shot: FrcsShot = {\n from,\n to: toStr.trim(),\n specialKind,\n distance,\n frontsightAzimuth,\n backsightAzimuth,\n frontsightInclination,\n backsightInclination,\n toLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance,\n comment,\n }\n if (isSplay) shot.isSplay = true\n if (fromLruds) shot.fromLruds = fromLruds\n if (horizontalDistance) shot.horizontalDistance = horizontalDistance\n if (verticalDistance) shot.verticalDistance = verticalDistance\n addShot(shot)\n } else {\n const shot: InvalidFrcsShot['INVALID'] = {\n from,\n to: toStr.trim(),\n specialKind,\n distance,\n frontsightAzimuth,\n backsightAzimuth,\n frontsightInclination,\n backsightInclination,\n toLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance,\n comment,\n }\n if (isSplay) shot.isSplay = true\n if (fromLruds) shot.fromLruds = fromLruds\n if (horizontalDistance) shot.horizontalDistance = horizontalDistance\n if (verticalDistance) shot.verticalDistance = verticalDistance\n addShot({ INVALID: shot, issues: lineIssues })\n }\n }\n }\n\n if (trip) trips.push(trip)\n\n trips\n .map((trip, index) => ({ trip: unwrapInvalid(trip), index }))\n .sort((a, b) => {\n const aDate = unwrapInvalid(a.trip.header).date\n const bDate = unwrapInvalid(b.trip.header).date\n return (\n (aDate != null && bDate != null\n ? aDate.getTime() - bDate.getTime()\n : 0) || a.index - b.index\n )\n })\n .forEach(({ trip }, index) => (trip.tripNumber = index + 1))\n\n if (\n !issues.some((i) => i.type === 'error') &&\n trips.every((t): t is FrcsTrip => !('INVALID' in t))\n ) {\n return {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n ...(issues.length ? { issues } : undefined),\n }\n }\n\n return {\n INVALID: {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n },\n issues,\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////\n\n function getComment(): string | undefined {\n if (!commentLines?.length) return undefined\n const comment = commentLines.join('\\n').trim()\n commentLines.length = 0\n return comment || undefined\n }\n\n function addCommentLine(comment: string): void {\n if (trip) {\n const distanceUnit =\n unwrapInvalid(alternateUnits)?.distanceUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).distanceUnit ||\n Length.feet\n const parsedFromStationLruds = parseFromStationLruds(\n comment,\n distanceUnit\n )\n if (parsedFromStationLruds) {\n commentFromStationLruds.set(\n parsedFromStationLruds[0],\n parsedFromStationLruds[1]\n )\n return\n }\n }\n if (commentLines) {\n commentLines.push(comment)\n }\n }\n\n function addIssue(\n type: ParseIssueSeverity,\n code: string,\n message: string,\n startColumn: number,\n endColumn: number,\n indicesArray?: number[]\n ) {\n if (\n suppressWarnings &&\n type === 'warning' &&\n (suppressWarnings === true ||\n ('code' in suppressWarnings &&\n suppressWarnings[code as keyof typeof suppressWarnings] === true))\n ) {\n return\n }\n\n issues.push({\n type,\n code,\n message,\n loc: {\n start: {\n line: lineNumber,\n column: startColumn,\n index: lineStartIndex + startColumn,\n },\n end: {\n line: lineNumber,\n column: endColumn,\n index: lineStartIndex + endColumn,\n },\n },\n })\n if (!lineIssues) lineIssues = []\n lineIssues.push(issues.length - 1)\n indicesArray?.push(issues.length - 1)\n }\n\n function parseUnits(): FrcsUnits | InvalidFrcsUnits {\n // FT CC DD\n // 01234567\n const distanceUnit = parseLengthUnit(line.slice(0, 2))\n if (!distanceUnit) {\n addIssue('error', 'invalidDistanceUnit', 'Invalid distance unit', 0, 2)\n }\n const azimuthUnit = parseAngleUnit(line[6])\n if (!azimuthUnit) {\n addIssue('error', 'invalidAzimuthUnit', 'Invalid azimuth unit', 6, 7)\n }\n const inclinationUnit = parseAngleUnit(line[7])\n if (!inclinationUnit) {\n addIssue(\n 'error',\n 'invalidInclinationUnit',\n 'Invalid inclination unit',\n 7,\n 8\n )\n }\n const backsightAzimuthCorrected = line[3] === 'C'\n const backsightInclinationCorrected = line[4] === 'C'\n const hasBacksightAzimuth = line[3] !== ' ' && line[3] !== '-'\n const hasBacksightInclination = line[4] !== ' ' && line[4] !== '-'\n\n if (!/[-CB ]/.test(line[3])) {\n addIssue(\n 'error',\n 'invalidBacksightAzimuthType',\n 'Invalid backsight azimuth type',\n 3,\n 4\n )\n }\n if (!/[-CB ]/.test(line[4])) {\n addIssue(\n 'error',\n 'invalidBacksightInclinationType',\n 'Invalid backsight inclination type',\n 4,\n 5\n )\n }\n\n if (!distanceUnit || !azimuthUnit || !inclinationUnit) {\n return {\n INVALID: {\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n hasBacksightAzimuth,\n hasBacksightInclination,\n },\n issues: lineIssues,\n }\n }\n\n return {\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n hasBacksightAzimuth,\n hasBacksightInclination,\n }\n }\n\n function validate(\n startColumn: number,\n endColumn: number,\n fieldName: string,\n validator: (value: string) => boolean\n ): string {\n const field = line.substring(startColumn, endColumn)\n if (!validator(field)) {\n addIssue(\n 'error',\n `${\n field.trim() ? 'invalid' : 'missing'\n }${fieldName[0].toUpperCase()}${fieldName.substring(1)}`,\n (field.trim() ? 'Invalid ' : 'Missing ') + fieldName,\n startColumn,\n endColumn\n )\n }\n return field\n }\n\n function addShot(shot: FrcsShot | InvalidFrcsShot) {\n if (!trip) return\n if (alternateUnits) {\n const recorded:\n | FrcsShot['recorded']\n | InvalidFrcsShot['INVALID']['recorded'] = shot\n if ('INVALID' in shot) {\n shot.INVALID = {\n ...shot.INVALID,\n recorded,\n }\n } else if ('INVALID' in recorded) {\n shot = {\n INVALID: {\n ...shot,\n recorded,\n },\n }\n } else {\n shot = { ...shot, recorded }\n }\n if (nextShotUnits) {\n unwrapInvalid(recorded).units = nextShotUnits\n nextShotUnits = undefined\n }\n const {\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n } = unwrapInvalid(unwrapInvalid(trip).units)\n const unwrappedAlternateUnits = unwrapInvalid(alternateUnits)\n const unwrappedShot = unwrapInvalid(shot)\n {\n const alternateUnits = unwrappedAlternateUnits\n const shot = unwrappedShot\n if (\n alternateUnits.backsightAzimuthCorrected !== backsightAzimuthCorrected\n ) {\n shot.backsightAzimuth = shot.backsightAzimuth\n ? Angle.opposite(shot.backsightAzimuth)\n : undefined\n }\n if (\n alternateUnits.backsightInclinationCorrected !==\n backsightInclinationCorrected\n ) {\n shot.backsightInclination = shot.backsightInclination?.negate()\n }\n if (distanceUnit && distanceUnit !== alternateUnits.distanceUnit) {\n shot.distance = shot.distance?.in(distanceUnit)\n if (shot.fromLruds) {\n shot.fromLruds.left = shot.fromLruds.left?.in(distanceUnit)\n shot.fromLruds.right = shot.fromLruds.right?.in(distanceUnit)\n shot.fromLruds.up = shot.fromLruds.up?.in(distanceUnit)\n shot.fromLruds.down = shot.fromLruds.down?.in(distanceUnit)\n }\n if (shot.toLruds) {\n shot.toLruds.left = shot.toLruds.left?.in(distanceUnit)\n shot.toLruds.right = shot.toLruds.right?.in(distanceUnit)\n shot.toLruds.up = shot.toLruds.up?.in(distanceUnit)\n shot.toLruds.down = shot.toLruds.down?.in(distanceUnit)\n }\n }\n if (azimuthUnit && azimuthUnit !== alternateUnits.azimuthUnit) {\n shot.frontsightAzimuth = shot.frontsightAzimuth?.in(azimuthUnit)\n shot.backsightAzimuth = shot.backsightAzimuth?.in(azimuthUnit)\n }\n if (\n inclinationUnit &&\n inclinationUnit !== alternateUnits.inclinationUnit\n ) {\n shot.frontsightInclination =\n shot.frontsightInclination?.in(inclinationUnit)\n shot.backsightInclination =\n shot.backsightInclination?.in(inclinationUnit)\n }\n }\n }\n if ('INVALID' in trip) {\n trip.INVALID.shots.push(shot)\n } else if ('INVALID' in shot) {\n trip = { INVALID: trip }\n trip.INVALID.shots.push(shot)\n } else {\n trip.shots.push(shot)\n }\n }\n}\n\nfunction unwrapInvalid<T>(t: T): T extends { INVALID: infer I } ? I : T {\n return (t instanceof Object && 'INVALID' in t ? t.INVALID : t) as any\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"parseFrcsSurveyFile.js","names":["_FrcsSurveyFile","require","_unitized","_chunksToLines","_validators","_getColumnRanges","_parsers","_normalizeTeamMemberName","_unwrapInvalid","parseFrcsSurveyFile","file","chunks","columns","defaultFrcsShotColumnConfig","outputColumns","normalizeNames","suppressWarnings","columnRanges","getColumnRanges","maxRange","Math","max","Object","values","decimal","map","r","cave","undefined","location","trips","issues","tripName","tripTeam","tripDate","inTripComment","tripCommentStartLine","tripCommentEndLine","tripComment","commentLines","trip","inBlockComment","section","commentFromStationLruds","Map","unitsChanged","alternateUnits","nextShotUnits","lineNumber","line","lineStartIndex","lineIssues","tripIssues","began","startIndex","chunksToLines","length","test","match","exec","trim","parseUnits","dateMatch","team","substring","index","split","indexOf","flatMap","member","addIssue","normalizeTeamMemberName","month","day","year","parseInt","parseMonth","Date","push","addCommentLine","replace","header","name","comment","join","date","units","some","i","type","INVALID","shots","tripNumber","distanceUnit","unwrapInvalid","Length","feet","azimuthUnit","Angle","degrees","inclinationUnit","inches","ranges","feetAndInches","fromStation","fromStr","validate","isValidStation","from","lStr","left","isValidOptFloat","rStr","right","uStr","up","dStr","down","parseLrud","toStr","toStation","shot","to","distance","UnitizedNumber","frontsightAzimuth","backsightAzimuth","frontsightInclination","backsightInclination","fromLruds","excludeDistance","getComment","addShot","get","delete","fromLrudMatch","RegExp","s","azmFsStr","isValidOptUFloat","azmBsStr","incFsStr","incBsStr","horizontalDistance","verticalDistance","feetStr","distanceFeet","inchesStr","distanceInches","isValidUInt","Unitize","parseFloat","add","distStr","isValidUFloat","distNum","Number","isFinite","specialKindStr","kind","exclude","specialKind","parseSpecialKind","isSplay","isValidFloat","h","NaN","v","sqrt","atan2","in","d","asin","parseNumber","parseAzimuth","toLruds","forEach","every","t","parsedFromStationLruds","parseFromStationLruds","set","code","message","startColumn","endColumn","indicesArray","loc","start","column","end","parseLengthUnit","slice","parseAngleUnit","backsightAzimuthCorrected","backsightInclinationCorrected","hasBacksightAzimuth","hasBacksightInclination","fieldName","validator","field","toUpperCase","recorded","unwrappedAlternateUnits","unwrappedShot","opposite","negate","module","exports","default"],"sources":["../../src/survey/parseFrcsSurveyFile.ts"],"sourcesContent":["import { defaultFrcsShotColumnConfig } from './FrcsSurveyFile'\nimport type {\n ParseFrcsSurveyFileOptions,\n FrcsSurveyFile,\n FrcsTrip,\n FrcsUnits,\n FrcsShot,\n InvalidFrcsSurveyFile,\n InvalidFrcsUnits,\n InvalidFrcsTrip,\n InvalidFrcsShot,\n} from './FrcsSurveyFile'\nimport { Angle, Length, UnitizedNumber, Unitize } from '@speleotica/unitized'\nimport { ParseIssue, ParseIssueSeverity } from '../ParseIssue'\nimport { chunksToLines } from '../chunksToLines'\nimport {\n isValidStation,\n isValidOptFloat,\n isValidOptUFloat,\n isValidUInt,\n isValidUFloat,\n isValidFloat,\n} from './validators'\nimport { getColumnRanges } from './getColumnRanges'\nimport {\n parseFromStationLruds,\n parseLengthUnit,\n parseAngleUnit,\n parseMonth,\n parseLrud,\n parseSpecialKind,\n parseNumber,\n parseAzimuth,\n} from './parsers'\nimport { normalizeTeamMemberName } from './normalizeTeamMemberName'\nimport { unwrapInvalid } from '../unwrapInvalid'\n\n/**\n * Parses a raw cdata.fr survey file. These look like so:\n *\n <pre> Fisher Ridge Cave System, Hart Co., KY\n ENTRANCE DROPS, JOE'S \"I LOVE MY WIFE TRAVERSE\", TRICKY TRAVERSE\n PETER QUICK, KEITH ORTIZ - 2-15-81\n This File has Crumps test connected. 11/20/12\n *\n FT C DD A\n AE20 0 1 3 0 2\n * %FS\n * AE20 0 0 0 Bug-can't put before so put after-so can't make 2 fixed 10/28/12\n AE19 AE20 9.3 60.0 60.0-36.0 2 12 0 20\n AE18 AE19 24.5 0.0 0.0-90.0 6 10 25 0\n AE17 AE18 8.0 350.5 350.5 17.0 3 5 0 0\n AE16 AE17 6.7 0.0 0.0-90.0 3 5 6 1\n AE15 AE16 12.6 70.5 71.0-18.0 4 0 2 1\n AE14 AE15 10.0 21.5 20.0 6.0 5 5 0 3\n AE13 AE14 26.8 288.0 286.0-50.0 0 7 20 5\n *\n *SHORT CANYON AT THE BASE OF THE SECOND DROP\n AE12 AE13 20.7 236.0 236.0 34.0 3 5 4 4\n AE11 AE12 12.4 210.0 210.0 35.0 7 4 5 1\n AE10 AE13 25.7 40.0 40.0 -9.0 2 2 3 6\n *\n *AE10 AT JOE'S \" I LOVE MY WIFE TRAVERSE \"\n AE9 AE10 17.8 32.5 31.0 23.0 4 5 20 15\n AE1 AE9 13.7 82.0 82.0-13.0\n A1 AE1 34.3 46.0 48.0-17.5\n *\n *SURVEY TO DOME NEAR THE ENTRANCE DOME (ABOVE THE SECOND DROP)\n AD1 AE15 8.0 200.0 200.0 0.0 3 1 1 1\n AD2 AD1 17.7 161.0 161.0 7.0 1 4 25 1\n AD3 AD2 10.4 180.0 180.0 50.0 4 1 15 5\n *\n TRICKY TRAVERSE AND THEN FIRST SURVEY IN UPPER CROWLWAY\n DAN CROWL, KEITH ORTIZ, CHIP HOPPER, PETER QUICK, LARRY BEAN 14 FEB 1981\n *\n FI B DD\n A2 A1 48 10 292.0 110.0-42.0 5 10 35 5\n A3 A2 12 5 333.5 153.5 35.0 3 1 15 5\n A4 A3 4 2 0.0 0.0 90.0 3 1 10 10\n ...</pre>\n *\n */\nexport default async function parseFrcsSurveyFile(\n file: any, // eslint-disable-line @typescript-eslint/no-explicit-any\n chunks: Iterable<string> | AsyncIterable<string>,\n {\n columns = defaultFrcsShotColumnConfig,\n outputColumns = false,\n normalizeNames = true,\n suppressWarnings,\n }: ParseFrcsSurveyFileOptions = {}\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile> {\n const columnRanges = getColumnRanges(columns)\n const maxRange = Math.max(\n ...Object.values(columnRanges.decimal).map((r) => r[1])\n )\n\n let cave: string | undefined = undefined\n let location: string | undefined = undefined\n const trips: (FrcsTrip | InvalidFrcsTrip)[] = []\n const issues: ParseIssue[] = []\n\n let tripName: string | undefined\n let tripTeam: string[] | undefined\n let tripDate: Date | undefined\n let inTripComment = true\n let tripCommentStartLine = 1\n let tripCommentEndLine = -1\n const tripComment: string[] = []\n const commentLines: string[] = []\n let trip: FrcsTrip | InvalidFrcsTrip | undefined = undefined\n let inBlockComment = false\n let section\n const commentFromStationLruds = new Map<\n string,\n NonNullable<FrcsShot['fromLruds']>\n >()\n\n let unitsChanged = false\n let alternateUnits: FrcsUnits | InvalidFrcsUnits | undefined\n let nextShotUnits: FrcsUnits | InvalidFrcsUnits | undefined\n\n let lineNumber = 0\n let line: string\n let lineStartIndex = 0\n\n let lineIssues: number[] = []\n let tripIssues: number[] = []\n\n let began = false\n\n for await ({ line, startIndex: lineStartIndex } of chunksToLines(chunks)) {\n if (lineIssues.length) lineIssues = []\n\n lineNumber++\n\n if (!began) {\n began = true\n if (/^\\s+\\*/.test(line)) {\n continue\n }\n const match = /^\\s*([^,]+)(,(.*))?/.exec(line)\n if (match) {\n cave = match[1].trim()\n if (match[3]) {\n location = match[3].trim()\n }\n }\n }\n\n if (unitsChanged) {\n unitsChanged = false\n alternateUnits = parseUnits()\n nextShotUnits = alternateUnits\n } else if (/^\\s{1,8}\\*(?!\\*)/.test(line)) {\n inTripComment = !inTripComment\n alternateUnits = nextShotUnits = undefined\n unitsChanged = false\n if (inTripComment) {\n section = undefined\n tripTeam = undefined\n tripDate = undefined\n tripComment.length = 0\n tripCommentStartLine = lineNumber\n } else {\n tripCommentEndLine = lineNumber\n }\n } else if (inTripComment) {\n if (lineNumber === tripCommentStartLine + 1) {\n tripName = line && line.trim()\n } else if (lineNumber === tripCommentStartLine + 2) {\n const dateMatch =\n /(?:[-.]\\s*)?((\\d+)[-/](\\d+)[-/](\\d{2,4})|((\\d+)[-/ ](january|february|march|april|may|june|july|august|september|october|november|december|(?:jan|feb|mar|apr|jun|jul|aug|sept?|oct|nov|dec)\\.?)[-/ ](\\d{2,4}))|((january|february|march|april|may|june|july|august|september|october|november|december|(?:jan|feb|mar|apr|jun|jul|aug|sept?|oct|nov|dec)\\.?)\\s+(\\d+)(?:,\\s*|,?\\s+)(\\d{2,4})))/i.exec(\n line\n )\n if (dateMatch) {\n const team = line.substring(0, dateMatch.index)\n tripTeam = team\n .split(team.indexOf(';') >= 0 ? ';' : ',')\n .flatMap((member) => member.trim() || [])\n if (!tripTeam.length) {\n addIssue(\n 'warning',\n 'missingTripTeam',\n 'Missing team',\n 0,\n dateMatch.index,\n tripIssues\n )\n }\n if (normalizeNames) tripTeam = tripTeam.map(normalizeTeamMemberName)\n let month, day, year\n if (dateMatch[2]) {\n month = parseInt(dateMatch[2])\n day = parseInt(dateMatch[3])\n year = parseInt(dateMatch[4])\n } else if (dateMatch[6]) {\n day = parseInt(dateMatch[6])\n month = parseMonth(dateMatch[7])\n year = parseInt(dateMatch[8])\n } else {\n month = parseMonth(dateMatch[10])\n day = parseInt(dateMatch[11])\n year = parseInt(dateMatch[12])\n }\n tripDate = new Date(year < 60 ? year + 2000 : year, month - 1, day)\n } else {\n addIssue(\n 'warning',\n 'missingTripDate',\n 'Missing date',\n line.length,\n line.length,\n tripIssues\n )\n }\n } else if (lineNumber > 1) {\n tripComment.push(line)\n }\n const match = /^\\*\\*\\*([^*]+)\\*\\*\\*/.exec(line)\n if (match) {\n section = match[1].trim()\n }\n } else if (/^(\\s{9,}|)\\*(?!\\*)/.test(line)) {\n if (/^\\*\\s*%NC(\\b|$)/.test(line)) {\n unitsChanged = true\n }\n if (/^\\*\\s*%/.test(line)) {\n continue\n }\n if (/[^\\s*]/.test(line)) {\n addCommentLine(line.replace(/^\\s*\\*/, ''))\n inBlockComment = false\n } else {\n inBlockComment = !inBlockComment\n if (inBlockComment) commentLines.length = 0\n }\n } else if (inBlockComment) {\n addCommentLine(line)\n } else if (lineNumber === tripCommentEndLine + 1) {\n if (trip) trips.push(trip)\n const header = {\n name: tripName || '',\n comment: (tripComment && tripComment.join('\\n')) || undefined,\n section,\n date: tripDate,\n team: tripTeam,\n }\n const units = parseUnits()\n if (\n 'INVALID' in units ||\n tripIssues.some((i) => issues[i]?.type === 'error')\n ) {\n trip = {\n INVALID: {\n header,\n units,\n shots: [],\n },\n ...(tripIssues.length ? { issues: tripIssues } : {}),\n }\n } else {\n trip = {\n tripNumber: 1,\n header,\n units,\n shots: [],\n }\n }\n tripIssues = []\n } else if (trip) {\n let distanceUnit =\n unwrapInvalid(alternateUnits)?.distanceUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).distanceUnit ||\n Length.feet\n const azimuthUnit =\n unwrapInvalid(alternateUnits)?.azimuthUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).azimuthUnit ||\n Angle.degrees\n const inclinationUnit =\n unwrapInvalid(alternateUnits)?.inclinationUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).inclinationUnit ||\n Angle.degrees\n\n const inches = distanceUnit === Length.inches\n if (inches) distanceUnit = Length.feet\n\n const ranges = inches ? columnRanges.feetAndInches : columnRanges.decimal\n\n // from station name\n if (!/\\S/.test(line.substring(...ranges.fromStation))) continue\n const fromStr = validate(\n ...ranges.fromStation,\n 'from station',\n isValidStation\n )\n const from = fromStr.trim()\n\n // Sadly I have found negative LRUD values in Chip's format and apparently\n // his program doesn't fail on them, so I have to accept them here\n // isValidOptFloat instead of isValidOptUFloat\n const lStr = validate(...ranges.left, 'left', isValidOptFloat)\n const rStr = validate(...ranges.right, 'right', isValidOptFloat)\n const uStr = validate(...ranges.up, 'up', isValidOptFloat)\n const dStr = validate(...ranges.down, 'down', isValidOptFloat)\n\n const up = parseLrud(uStr, distanceUnit)\n const down = parseLrud(dStr, distanceUnit)\n const left = parseLrud(lStr, distanceUnit)\n const right = parseLrud(rStr, distanceUnit)\n\n // to station name\n const toStr = line.substring(...ranges.toStation)\n if (!toStr.trim()) {\n const shot: FrcsShot = {\n from,\n to: undefined,\n distance: new UnitizedNumber(0, distanceUnit),\n frontsightAzimuth: undefined,\n backsightAzimuth: undefined,\n frontsightInclination: undefined,\n backsightInclination: undefined,\n fromLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance: true,\n comment: getComment(),\n }\n addShot(\n lineIssues.length ? { INVALID: shot, issues: lineIssues } : shot\n )\n continue\n }\n if (!isValidStation(toStr)) {\n addIssue(\n 'error',\n 'invalidStationName',\n 'Invalid station name',\n ...ranges.toStation\n )\n }\n\n let fromLruds = commentFromStationLruds.get(from)\n if (fromLruds) {\n commentFromStationLruds.delete(from)\n } else {\n const fromLrudMatch = new RegExp(\n `^\\\\s+${fromStr\n .trim()\n .replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&'\n )}((\\\\s+(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)){4})`\n ).exec(line.substring(maxRange))\n if (fromLrudMatch) {\n const [left, right, up, down] = fromLrudMatch[1]\n .trim()\n .split(/\\s+/g)\n .map((s) => parseLrud(s, distanceUnit))\n fromLruds = { left, right, up, down }\n }\n }\n\n const comment = getComment()\n\n // azimuth and inclination\n const azmFsStr = validate(\n ranges.frontsightAzimuth[0],\n ranges.frontsightAzimuth[1],\n 'azimuth',\n isValidOptUFloat\n )\n const azmBsStr = validate(\n ...ranges.backsightAzimuth,\n 'azimuth',\n isValidOptUFloat\n )\n const incFsStr = line.substring(...ranges.frontsightInclination)\n const incBsStr = line.substring(...ranges.backsightInclination)\n\n let distance: UnitizedNumber<Length> | undefined\n let horizontalDistance: UnitizedNumber<Length> | undefined\n let verticalDistance: UnitizedNumber<Length> | undefined\n let frontsightInclination: UnitizedNumber<Angle> | undefined\n let backsightInclination: UnitizedNumber<Angle> | undefined\n\n // parse distance\n if (inches) {\n const feetStr = validate(\n ...ranges.distanceFeet,\n 'feet',\n isValidOptUFloat\n )\n const inchesStr = validate(\n ...ranges.distanceInches,\n 'inches',\n isValidOptUFloat\n )\n if (!/\\S/.test(feetStr) && !/\\S/.test(inchesStr)) {\n addIssue(\n 'error',\n 'missingDistance',\n 'Missing distance',\n ranges.distanceFeet[0],\n ranges.distanceInches[1]\n )\n }\n // sometimes inches are omitted, hence the || 0...I'm assuming it's possible\n // for feet to be omitted as well\n else if (\n (isValidUInt(feetStr) && isValidOptUFloat(inchesStr)) ||\n (isValidOptUFloat(feetStr) && isValidUInt(inchesStr))\n ) {\n distance = Unitize.inches(parseFloat(inchesStr) || 0).add(\n Unitize.feet(parseFloat(feetStr) || 0)\n )\n }\n // NOTE there are two columns around here that can contain a *.\n // I think they might represent different values, but thisis confused by\n // the fact that for ft/in shots, if there is a D or H flag it occupies the\n // first column that can contain a * for decimal feet shots\n } else {\n const distStr = validate(...ranges.distance, 'distance', isValidUFloat)\n const distNum = parseFloat(distStr)\n distance = Number.isFinite(distNum)\n ? new UnitizedNumber(distNum, distanceUnit)\n : undefined\n }\n const specialKindStr = line.substring(...ranges.kind).trim()\n const exclude = line.substring(...ranges.exclude).trim()\n const specialKind = parseSpecialKind(specialKindStr)\n\n if (specialKindStr && !specialKind) {\n addIssue(\n 'error',\n 'invalidShotType',\n 'Invalid shot type',\n ranges.kind[0],\n ranges.kind[1]\n )\n }\n\n const excludeDistance = exclude === '*' || exclude === 's'\n const isSplay = exclude === 's'\n\n if (exclude && !excludeDistance) {\n addIssue(\n 'error',\n 'invalidShotFlag',\n 'Invalid shot flag',\n ranges.exclude[0],\n ranges.exclude[1]\n )\n }\n\n if (specialKind) {\n validate(\n ...ranges.frontsightInclination,\n 'vertical-distance',\n isValidFloat\n )\n }\n\n // convert horizontal and diagonal shots to standard\n // in this case incFs is the vertical offset between stations\n // fortunately it appears we can always count on incFs being specified\n // and incBs not being specified for these types of shots\n if (specialKind === 'horizontal') {\n // distance is horizontal offset and incFsStr is vertical offset\n horizontalDistance = distance\n const h = horizontalDistance?.get(distanceUnit) ?? NaN\n const v = parseFloat(incFsStr)\n verticalDistance = Number.isFinite(v)\n ? new UnitizedNumber(v, distanceUnit)\n : undefined\n distance = new UnitizedNumber(Math.sqrt(h * h + v * v), distanceUnit)\n frontsightInclination =\n verticalDistance && horizontalDistance\n ? Angle.atan2(verticalDistance, horizontalDistance).in(\n inclinationUnit\n )\n : undefined\n backsightInclination = undefined\n } else if (specialKind === 'diagonal') {\n // distance is as usual, but incFsStr is vertical offset\n const d = distance?.get(distanceUnit) ?? NaN\n const v = parseFloat(incFsStr)\n verticalDistance = Number.isFinite(v)\n ? new UnitizedNumber(v, distanceUnit)\n : undefined\n frontsightInclination = Angle.asin(v / d).in(inclinationUnit)\n backsightInclination = undefined\n } else {\n // frontsight inclination\n validate(\n ...ranges.frontsightInclination,\n 'inclination',\n isValidOptFloat\n )\n // backsight inclination\n validate(...ranges.backsightInclination, 'inclination', isValidOptFloat)\n frontsightInclination = parseNumber(incFsStr, inclinationUnit)\n backsightInclination = parseNumber(incBsStr, inclinationUnit)\n }\n\n const frontsightAzimuth = parseAzimuth(azmFsStr, azimuthUnit)\n const backsightAzimuth = parseAzimuth(azmBsStr, azimuthUnit)\n\n if (!/\\S/.test(incFsStr) && !/\\S/.test(incBsStr)) {\n frontsightInclination = Unitize.degrees(0)\n }\n\n if (from && distance && !lineIssues.length) {\n const shot: FrcsShot = {\n from,\n to: toStr.trim(),\n specialKind,\n distance,\n frontsightAzimuth,\n backsightAzimuth,\n frontsightInclination,\n backsightInclination,\n toLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance,\n comment,\n }\n if (isSplay) shot.isSplay = true\n if (fromLruds) shot.fromLruds = fromLruds\n if (horizontalDistance) shot.horizontalDistance = horizontalDistance\n if (verticalDistance) shot.verticalDistance = verticalDistance\n addShot(shot)\n } else {\n const shot: InvalidFrcsShot['INVALID'] = {\n from,\n to: toStr.trim(),\n specialKind,\n distance,\n frontsightAzimuth,\n backsightAzimuth,\n frontsightInclination,\n backsightInclination,\n toLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance,\n comment,\n }\n if (isSplay) shot.isSplay = true\n if (fromLruds) shot.fromLruds = fromLruds\n if (horizontalDistance) shot.horizontalDistance = horizontalDistance\n if (verticalDistance) shot.verticalDistance = verticalDistance\n addShot({ INVALID: shot, issues: lineIssues })\n }\n }\n }\n\n if (trip) trips.push(trip)\n\n trips.forEach((trip, index) => (unwrapInvalid(trip).tripNumber = index + 1))\n\n if (\n !issues.some((i) => i.type === 'error') &&\n trips.every((t): t is FrcsTrip => !('INVALID' in t))\n ) {\n return {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n ...(issues.length ? { issues } : undefined),\n }\n }\n\n return {\n INVALID: {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n },\n issues,\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////\n\n function getComment(): string | undefined {\n if (!commentLines?.length) return undefined\n const comment = commentLines.join('\\n').trim()\n commentLines.length = 0\n return comment || undefined\n }\n\n function addCommentLine(comment: string): void {\n if (trip) {\n const distanceUnit =\n unwrapInvalid(alternateUnits)?.distanceUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).distanceUnit ||\n Length.feet\n const parsedFromStationLruds = parseFromStationLruds(\n comment,\n distanceUnit\n )\n if (parsedFromStationLruds) {\n commentFromStationLruds.set(\n parsedFromStationLruds[0],\n parsedFromStationLruds[1]\n )\n return\n }\n }\n if (commentLines) {\n commentLines.push(comment)\n }\n }\n\n function addIssue(\n type: ParseIssueSeverity,\n code: string,\n message: string,\n startColumn: number,\n endColumn: number,\n indicesArray?: number[]\n ) {\n if (\n suppressWarnings &&\n type === 'warning' &&\n (suppressWarnings === true ||\n ('code' in suppressWarnings &&\n suppressWarnings[code as keyof typeof suppressWarnings] === true))\n ) {\n return\n }\n\n issues.push({\n type,\n code,\n message,\n loc: {\n start: {\n line: lineNumber,\n column: startColumn,\n index: lineStartIndex + startColumn,\n },\n end: {\n line: lineNumber,\n column: endColumn,\n index: lineStartIndex + endColumn,\n },\n },\n })\n if (!lineIssues) lineIssues = []\n lineIssues.push(issues.length - 1)\n indicesArray?.push(issues.length - 1)\n }\n\n function parseUnits(): FrcsUnits | InvalidFrcsUnits {\n // FT CC DD\n // 01234567\n const distanceUnit = parseLengthUnit(line.slice(0, 2))\n if (!distanceUnit) {\n addIssue('error', 'invalidDistanceUnit', 'Invalid distance unit', 0, 2)\n }\n const azimuthUnit = parseAngleUnit(line[6])\n if (!azimuthUnit) {\n addIssue('error', 'invalidAzimuthUnit', 'Invalid azimuth unit', 6, 7)\n }\n const inclinationUnit = parseAngleUnit(line[7])\n if (!inclinationUnit) {\n addIssue(\n 'error',\n 'invalidInclinationUnit',\n 'Invalid inclination unit',\n 7,\n 8\n )\n }\n const backsightAzimuthCorrected = line[3] === 'C'\n const backsightInclinationCorrected = line[4] === 'C'\n const hasBacksightAzimuth = line[3] !== ' ' && line[3] !== '-'\n const hasBacksightInclination = line[4] !== ' ' && line[4] !== '-'\n\n if (!/[-CB ]/.test(line[3])) {\n addIssue(\n 'error',\n 'invalidBacksightAzimuthType',\n 'Invalid backsight azimuth type',\n 3,\n 4\n )\n }\n if (!/[-CB ]/.test(line[4])) {\n addIssue(\n 'error',\n 'invalidBacksightInclinationType',\n 'Invalid backsight inclination type',\n 4,\n 5\n )\n }\n\n if (!distanceUnit || !azimuthUnit || !inclinationUnit) {\n return {\n INVALID: {\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n hasBacksightAzimuth,\n hasBacksightInclination,\n },\n issues: lineIssues,\n }\n }\n\n return {\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n hasBacksightAzimuth,\n hasBacksightInclination,\n }\n }\n\n function validate(\n startColumn: number,\n endColumn: number,\n fieldName: string,\n validator: (value: string) => boolean\n ): string {\n const field = line.substring(startColumn, endColumn)\n if (!validator(field)) {\n addIssue(\n 'error',\n `${\n field.trim() ? 'invalid' : 'missing'\n }${fieldName[0].toUpperCase()}${fieldName.substring(1)}`,\n (field.trim() ? 'Invalid ' : 'Missing ') + fieldName,\n startColumn,\n endColumn\n )\n }\n return field\n }\n\n function addShot(shot: FrcsShot | InvalidFrcsShot) {\n if (!trip) return\n if (alternateUnits) {\n const recorded:\n | FrcsShot['recorded']\n | InvalidFrcsShot['INVALID']['recorded'] = shot\n if ('INVALID' in shot) {\n shot.INVALID = {\n ...shot.INVALID,\n recorded,\n }\n } else if ('INVALID' in recorded) {\n shot = {\n INVALID: {\n ...shot,\n recorded,\n },\n }\n } else {\n shot = { ...shot, recorded }\n }\n if (nextShotUnits) {\n unwrapInvalid(recorded).units = nextShotUnits\n nextShotUnits = undefined\n }\n const {\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n } = unwrapInvalid(unwrapInvalid(trip).units)\n const unwrappedAlternateUnits = unwrapInvalid(alternateUnits)\n const unwrappedShot = unwrapInvalid(shot)\n {\n const alternateUnits = unwrappedAlternateUnits\n const shot = unwrappedShot\n if (\n alternateUnits.backsightAzimuthCorrected !== backsightAzimuthCorrected\n ) {\n shot.backsightAzimuth = shot.backsightAzimuth\n ? Angle.opposite(shot.backsightAzimuth)\n : undefined\n }\n if (\n alternateUnits.backsightInclinationCorrected !==\n backsightInclinationCorrected\n ) {\n shot.backsightInclination = shot.backsightInclination?.negate()\n }\n if (distanceUnit && distanceUnit !== alternateUnits.distanceUnit) {\n shot.distance = shot.distance?.in(distanceUnit)\n if (shot.fromLruds) {\n shot.fromLruds.left = shot.fromLruds.left?.in(distanceUnit)\n shot.fromLruds.right = shot.fromLruds.right?.in(distanceUnit)\n shot.fromLruds.up = shot.fromLruds.up?.in(distanceUnit)\n shot.fromLruds.down = shot.fromLruds.down?.in(distanceUnit)\n }\n if (shot.toLruds) {\n shot.toLruds.left = shot.toLruds.left?.in(distanceUnit)\n shot.toLruds.right = shot.toLruds.right?.in(distanceUnit)\n shot.toLruds.up = shot.toLruds.up?.in(distanceUnit)\n shot.toLruds.down = shot.toLruds.down?.in(distanceUnit)\n }\n }\n if (azimuthUnit && azimuthUnit !== alternateUnits.azimuthUnit) {\n shot.frontsightAzimuth = shot.frontsightAzimuth?.in(azimuthUnit)\n shot.backsightAzimuth = shot.backsightAzimuth?.in(azimuthUnit)\n }\n if (\n inclinationUnit &&\n inclinationUnit !== alternateUnits.inclinationUnit\n ) {\n shot.frontsightInclination =\n shot.frontsightInclination?.in(inclinationUnit)\n shot.backsightInclination =\n shot.backsightInclination?.in(inclinationUnit)\n }\n }\n }\n if ('INVALID' in trip) {\n trip.INVALID.shots.push(shot)\n } else if ('INVALID' in shot) {\n trip = { INVALID: trip }\n trip.INVALID.shots.push(shot)\n } else {\n trip.shots.push(shot)\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/survey/parsers.js CHANGED
@@ -40,17 +40,17 @@ function parseMonth(month) {
40
40
  case 'dec':
41
41
  return 12;
42
42
  default:
43
- throw new Error("invalid month: ".concat(month));
43
+ throw new Error(`invalid month: ${month}`);
44
44
  }
45
45
  }
46
46
  function parseNumber(s, unit) {
47
- var value = parseFloat(s);
47
+ const value = parseFloat(s);
48
48
  if (isNaN(value)) return undefined;
49
49
  return new _unitized.UnitizedNumber(value, unit);
50
50
  }
51
51
  function parseAzimuth(s, unit) {
52
- var parsed = parseNumber(s, unit);
53
- return (parsed === null || parsed === void 0 ? void 0 : parsed.get(_unitized.Angle.degrees)) === 360 ? _unitized.Unitize.degrees(0) : parsed;
52
+ const parsed = parseNumber(s, unit);
53
+ return parsed?.get(_unitized.Angle.degrees) === 360 ? _unitized.Unitize.degrees(0) : parsed;
54
54
  }
55
55
  function parseSpecialKind(kind) {
56
56
  switch (kind) {
@@ -88,32 +88,32 @@ function parseAngleUnit(unit) {
88
88
  return undefined;
89
89
  }
90
90
  function parseLrud(s, unit) {
91
- var value = parseFloat(s);
91
+ const value = parseFloat(s);
92
92
  return !Number.isFinite(value) || value < 0 ? undefined : new _unitized.UnitizedNumber(value, unit);
93
93
  }
94
94
  function parseFromStationLruds(line, distanceUnit) {
95
- var fromStr = line.substring(0, 5);
95
+ const fromStr = line.substring(0, 5);
96
96
  if (!/^\s*\S+$/.test(fromStr)) return undefined;
97
- var gap = line.substring(5, 40);
97
+ const gap = line.substring(5, 40);
98
98
  if (gap.trim()) return undefined;
99
- var lrudStr = line.substring(40, 52);
99
+ const lrudStr = line.substring(40, 52);
100
100
  if (!/\d/.test(lrudStr)) return undefined;
101
- var lStr = line.substring(40, 43);
102
- var rStr = line.substring(43, 46);
103
- var uStr = line.substring(46, 49);
104
- var dStr = line.substring(49, 52);
101
+ const lStr = line.substring(40, 43);
102
+ const rStr = line.substring(43, 46);
103
+ const uStr = line.substring(46, 49);
104
+ const dStr = line.substring(49, 52);
105
105
  if (!(0, _validators.isValidOptFloat)(lStr) || !(0, _validators.isValidOptFloat)(rStr) || !(0, _validators.isValidOptFloat)(uStr) || !(0, _validators.isValidOptFloat)(dStr)) {
106
106
  return undefined;
107
107
  }
108
- var up = parseLrud(uStr, distanceUnit);
109
- var down = parseLrud(dStr, distanceUnit);
110
- var left = parseLrud(lStr, distanceUnit);
111
- var right = parseLrud(rStr, distanceUnit);
108
+ const up = parseLrud(uStr, distanceUnit);
109
+ const down = parseLrud(dStr, distanceUnit);
110
+ const left = parseLrud(lStr, distanceUnit);
111
+ const right = parseLrud(rStr, distanceUnit);
112
112
  return [fromStr.trim(), {
113
- left: left,
114
- right: right,
115
- up: up,
116
- down: down
113
+ left,
114
+ right,
115
+ up,
116
+ down
117
117
  }];
118
118
  }
119
119
  //# sourceMappingURL=parsers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.js","names":["_unitized","require","_validators","parseMonth","month","substring","toLowerCase","Error","concat","parseNumber","s","unit","value","parseFloat","isNaN","undefined","UnitizedNumber","parseAzimuth","parsed","get","Angle","degrees","Unitize","parseSpecialKind","kind","parseLengthUnit","Length","inches","feet","meters","parseAngleUnit","gradians","milsNATO","parseLrud","Number","isFinite","parseFromStationLruds","line","distanceUnit","fromStr","test","gap","trim","lrudStr","lStr","rStr","uStr","dStr","isValidOptFloat","up","down","left","right"],"sources":["../../src/survey/parsers.ts"],"sourcesContent":["import {\n UnitType,\n Unit,\n UnitizedNumber,\n Angle,\n Length,\n} from '@speleotica/unitized'\nimport { Unitize } from '@speleotica/unitized'\nimport type { FrcsShot } from './FrcsSurveyFile'\nimport { isValidOptFloat } from './validators'\n\nexport function parseMonth(month: string) {\n switch (month.substring(0, 3).toLowerCase()) {\n case 'jan':\n return 1\n case 'feb':\n return 2\n case 'mar':\n return 3\n case 'apr':\n return 4\n case 'may':\n return 5\n case 'jun':\n return 6\n case 'jul':\n return 7\n case 'aug':\n return 8\n case 'sep':\n return 9\n case 'oct':\n return 10\n case 'nov':\n return 11\n case 'dec':\n return 12\n default:\n throw new Error(`invalid month: ${month}`)\n }\n}\nexport function parseNumber<T extends UnitType<T>>(\n s: string,\n unit: Unit<T>\n): UnitizedNumber<T> | undefined {\n const value = parseFloat(s)\n if (isNaN(value)) return undefined\n return new UnitizedNumber(value, unit)\n}\nexport function parseAzimuth(\n s: string,\n unit: Unit<Angle>\n): UnitizedNumber<Angle> | undefined {\n const parsed = parseNumber(s, unit)\n return parsed?.get(Angle.degrees) === 360 ? Unitize.degrees(0) : parsed\n}\nexport function parseSpecialKind(kind: string): FrcsShot['specialKind'] {\n switch (kind) {\n case 'H':\n return 'horizontal'\n case 'D':\n return 'diagonal'\n default:\n return undefined\n }\n}\nexport function parseLengthUnit(unit: string): Unit<Length> | undefined {\n switch (unit) {\n case 'FI':\n return Length.inches\n case 'FF':\n case 'FT':\n return Length.feet\n case 'MT':\n case 'MM':\n case 'M ':\n return Length.meters\n }\n return undefined\n}\nexport function parseAngleUnit(unit: string): Unit<Angle> | undefined {\n switch (unit) {\n case 'D':\n return Angle.degrees\n case 'G':\n return Angle.gradians\n case 'M':\n return Angle.milsNATO\n }\n return undefined\n}\nexport function parseLrud<T extends UnitType<T>>(\n s: string,\n unit: Unit<Length>\n): UnitizedNumber<Length> | undefined {\n const value = parseFloat(s)\n return !Number.isFinite(value) || value < 0\n ? undefined\n : new UnitizedNumber(value, unit)\n}\nexport function parseFromStationLruds(\n line: string,\n distanceUnit: Unit<Length>\n): [string, NonNullable<FrcsShot['fromLruds']>] | undefined {\n const fromStr = line.substring(0, 5)\n if (!/^\\s*\\S+$/.test(fromStr)) return undefined\n const gap = line.substring(5, 40)\n if (gap.trim()) return undefined\n const lrudStr = line.substring(40, 52)\n if (!/\\d/.test(lrudStr)) return undefined\n const lStr = line.substring(40, 43)\n const rStr = line.substring(43, 46)\n const uStr = line.substring(46, 49)\n const dStr = line.substring(49, 52)\n if (\n !isValidOptFloat(lStr) ||\n !isValidOptFloat(rStr) ||\n !isValidOptFloat(uStr) ||\n !isValidOptFloat(dStr)\n ) {\n return undefined\n }\n const up = parseLrud(uStr, distanceUnit)\n const down = parseLrud(dStr, distanceUnit)\n const left = parseLrud(lStr, distanceUnit)\n const right = parseLrud(rStr, distanceUnit)\n return [fromStr.trim(), { left, right, up, down }]\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"parsers.js","names":["_unitized","require","_validators","parseMonth","month","substring","toLowerCase","Error","parseNumber","s","unit","value","parseFloat","isNaN","undefined","UnitizedNumber","parseAzimuth","parsed","get","Angle","degrees","Unitize","parseSpecialKind","kind","parseLengthUnit","Length","inches","feet","meters","parseAngleUnit","gradians","milsNATO","parseLrud","Number","isFinite","parseFromStationLruds","line","distanceUnit","fromStr","test","gap","trim","lrudStr","lStr","rStr","uStr","dStr","isValidOptFloat","up","down","left","right"],"sources":["../../src/survey/parsers.ts"],"sourcesContent":["import {\n UnitType,\n Unit,\n UnitizedNumber,\n Angle,\n Length,\n} from '@speleotica/unitized'\nimport { Unitize } from '@speleotica/unitized'\nimport type { FrcsShot } from './FrcsSurveyFile'\nimport { isValidOptFloat } from './validators'\n\nexport function parseMonth(month: string) {\n switch (month.substring(0, 3).toLowerCase()) {\n case 'jan':\n return 1\n case 'feb':\n return 2\n case 'mar':\n return 3\n case 'apr':\n return 4\n case 'may':\n return 5\n case 'jun':\n return 6\n case 'jul':\n return 7\n case 'aug':\n return 8\n case 'sep':\n return 9\n case 'oct':\n return 10\n case 'nov':\n return 11\n case 'dec':\n return 12\n default:\n throw new Error(`invalid month: ${month}`)\n }\n}\nexport function parseNumber<T extends UnitType<T>>(\n s: string,\n unit: Unit<T>\n): UnitizedNumber<T> | undefined {\n const value = parseFloat(s)\n if (isNaN(value)) return undefined\n return new UnitizedNumber(value, unit)\n}\nexport function parseAzimuth(\n s: string,\n unit: Unit<Angle>\n): UnitizedNumber<Angle> | undefined {\n const parsed = parseNumber(s, unit)\n return parsed?.get(Angle.degrees) === 360 ? Unitize.degrees(0) : parsed\n}\nexport function parseSpecialKind(kind: string): FrcsShot['specialKind'] {\n switch (kind) {\n case 'H':\n return 'horizontal'\n case 'D':\n return 'diagonal'\n default:\n return undefined\n }\n}\nexport function parseLengthUnit(unit: string): Unit<Length> | undefined {\n switch (unit) {\n case 'FI':\n return Length.inches\n case 'FF':\n case 'FT':\n return Length.feet\n case 'MT':\n case 'MM':\n case 'M ':\n return Length.meters\n }\n return undefined\n}\nexport function parseAngleUnit(unit: string): Unit<Angle> | undefined {\n switch (unit) {\n case 'D':\n return Angle.degrees\n case 'G':\n return Angle.gradians\n case 'M':\n return Angle.milsNATO\n }\n return undefined\n}\nexport function parseLrud<T extends UnitType<T>>(\n s: string,\n unit: Unit<Length>\n): UnitizedNumber<Length> | undefined {\n const value = parseFloat(s)\n return !Number.isFinite(value) || value < 0\n ? undefined\n : new UnitizedNumber(value, unit)\n}\nexport function parseFromStationLruds(\n line: string,\n distanceUnit: Unit<Length>\n): [string, NonNullable<FrcsShot['fromLruds']>] | undefined {\n const fromStr = line.substring(0, 5)\n if (!/^\\s*\\S+$/.test(fromStr)) return undefined\n const gap = line.substring(5, 40)\n if (gap.trim()) return undefined\n const lrudStr = line.substring(40, 52)\n if (!/\\d/.test(lrudStr)) return undefined\n const lStr = line.substring(40, 43)\n const rStr = line.substring(43, 46)\n const uStr = line.substring(46, 49)\n const dStr = line.substring(49, 52)\n if (\n !isValidOptFloat(lStr) ||\n !isValidOptFloat(rStr) ||\n !isValidOptFloat(uStr) ||\n !isValidOptFloat(dStr)\n ) {\n return undefined\n }\n const up = parseLrud(uStr, distanceUnit)\n const down = parseLrud(dStr, distanceUnit)\n const left = parseLrud(lStr, distanceUnit)\n const right = parseLrud(rStr, distanceUnit)\n return [fromStr.trim(), { left, right, up, down }]\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import { FrcsTripSummaryFile } from '../FrcsTripSummaryFile.js';
2
+ import { FrcsSurveyFile, InvalidFrcsSurveyFile } from './FrcsSurveyFile.js';
3
+ export declare function summarizeSurvey(parsed: FrcsSurveyFile | InvalidFrcsSurveyFile, options?: {
4
+ ignoreVerticalOfHShots?: boolean;
5
+ }): FrcsTripSummaryFile;
6
+ //# sourceMappingURL=summarizeSurvey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizeSurvey.d.ts","sourceRoot":"","sources":["../../src/survey/summarizeSurvey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAG3E,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,GAAG,qBAAqB,EAC9C,OAAO,CAAC,EAAE;IAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,uBA2C/C"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.summarizeSurvey = summarizeSurvey;
7
+ var _unitized = require("@speleotica/unitized");
8
+ var _unwrapInvalid = require("../unwrapInvalid.js");
9
+ function summarizeSurvey(parsed, options) {
10
+ const summary = {
11
+ tripSummaries: []
12
+ };
13
+ let tripIndex = 0;
14
+ for (const trip of (0, _unwrapInvalid.unwrapInvalid)(parsed).trips) {
15
+ const {
16
+ tripNumber,
17
+ header,
18
+ units,
19
+ shots
20
+ } = (0, _unwrapInvalid.unwrapInvalid)(trip);
21
+ const {
22
+ name,
23
+ date,
24
+ team
25
+ } = (0, _unwrapInvalid.unwrapInvalid)(header);
26
+ const distanceUnit = (0, _unwrapInvalid.unwrapInvalid)(units).distanceUnit || _unitized.Length.feet;
27
+ let totalLength = new _unitized.UnitizedNumber(0, distanceUnit);
28
+ let excludedLength = new _unitized.UnitizedNumber(0, distanceUnit);
29
+ let numExcludedShots = 0;
30
+ for (const shot of (0, _unwrapInvalid.unwrapInvalid)(shots)) {
31
+ const {
32
+ distance,
33
+ horizontalDistance,
34
+ excludeDistance
35
+ } = (0, _unwrapInvalid.unwrapInvalid)(shot);
36
+ const statDistance = options?.ignoreVerticalOfHShots && horizontalDistance ? horizontalDistance : distance;
37
+ if (statDistance) totalLength = totalLength.add(statDistance);
38
+ if (excludeDistance) {
39
+ numExcludedShots++;
40
+ if (statDistance) excludedLength = excludedLength.add(statDistance);
41
+ }
42
+ }
43
+ summary.tripSummaries.push({
44
+ tripNumber: tripNumber ?? NaN,
45
+ tripIndex: tripIndex++,
46
+ date: date || new Date(NaN),
47
+ name: name || '',
48
+ team: team || [],
49
+ numShots: shots.length,
50
+ totalLength,
51
+ numExcludedShots,
52
+ excludedLength,
53
+ shots: []
54
+ });
55
+ }
56
+ return summary;
57
+ }
58
+ //# sourceMappingURL=summarizeSurvey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizeSurvey.js","names":["_unitized","require","_unwrapInvalid","summarizeSurvey","parsed","options","summary","tripSummaries","tripIndex","trip","unwrapInvalid","trips","tripNumber","header","units","shots","name","date","team","distanceUnit","Length","feet","totalLength","UnitizedNumber","excludedLength","numExcludedShots","shot","distance","horizontalDistance","excludeDistance","statDistance","ignoreVerticalOfHShots","add","push","NaN","Date","numShots","length"],"sources":["../../src/survey/summarizeSurvey.ts"],"sourcesContent":["import { Length, UnitizedNumber } from '@speleotica/unitized'\nimport { FrcsTripSummaryFile } from '../FrcsTripSummaryFile.js'\nimport { FrcsSurveyFile, InvalidFrcsSurveyFile } from './FrcsSurveyFile.js'\nimport { unwrapInvalid } from '../unwrapInvalid.js'\n\nexport function summarizeSurvey(\n parsed: FrcsSurveyFile | InvalidFrcsSurveyFile,\n options?: { ignoreVerticalOfHShots?: boolean }\n) {\n const summary: FrcsTripSummaryFile = {\n tripSummaries: [],\n }\n let tripIndex = 0\n for (const trip of unwrapInvalid(parsed).trips) {\n const { tripNumber, header, units, shots } = unwrapInvalid(trip)\n const { name, date, team } = unwrapInvalid(header)\n const distanceUnit = unwrapInvalid(units).distanceUnit || Length.feet\n let totalLength = new UnitizedNumber(0, distanceUnit)\n let excludedLength = new UnitizedNumber(0, distanceUnit)\n let numExcludedShots = 0\n\n for (const shot of unwrapInvalid(shots)) {\n const { distance, horizontalDistance, excludeDistance } =\n unwrapInvalid(shot)\n const statDistance =\n options?.ignoreVerticalOfHShots && horizontalDistance\n ? horizontalDistance\n : distance\n if (statDistance) totalLength = totalLength.add(statDistance)\n if (excludeDistance) {\n numExcludedShots++\n if (statDistance) excludedLength = excludedLength.add(statDistance)\n }\n }\n\n summary.tripSummaries.push({\n tripNumber: tripNumber ?? NaN,\n tripIndex: tripIndex++,\n date: date || new Date(NaN),\n name: name || '',\n team: team || [],\n numShots: shots.length,\n totalLength,\n numExcludedShots,\n excludedLength,\n shots: [],\n })\n }\n\n return summary\n}\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAGA,IAAAC,cAAA,GAAAD,OAAA;AAEO,SAASE,eAAeA,CAC7BC,MAA8C,EAC9CC,OAA8C,EAC9C;EACA,MAAMC,OAA4B,GAAG;IACnCC,aAAa,EAAE;EACjB,CAAC;EACD,IAAIC,SAAS,GAAG,CAAC;EACjB,KAAK,MAAMC,IAAI,IAAI,IAAAC,4BAAa,EAACN,MAAM,CAAC,CAACO,KAAK,EAAE;IAC9C,MAAM;MAAEC,UAAU;MAAEC,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAG,IAAAL,4BAAa,EAACD,IAAI,CAAC;IAChE,MAAM;MAAEO,IAAI;MAAEC,IAAI;MAAEC;IAAK,CAAC,GAAG,IAAAR,4BAAa,EAACG,MAAM,CAAC;IAClD,MAAMM,YAAY,GAAG,IAAAT,4BAAa,EAACI,KAAK,CAAC,CAACK,YAAY,IAAIC,gBAAM,CAACC,IAAI;IACrE,IAAIC,WAAW,GAAG,IAAIC,wBAAc,CAAC,CAAC,EAAEJ,YAAY,CAAC;IACrD,IAAIK,cAAc,GAAG,IAAID,wBAAc,CAAC,CAAC,EAAEJ,YAAY,CAAC;IACxD,IAAIM,gBAAgB,GAAG,CAAC;IAExB,KAAK,MAAMC,IAAI,IAAI,IAAAhB,4BAAa,EAACK,KAAK,CAAC,EAAE;MACvC,MAAM;QAAEY,QAAQ;QAAEC,kBAAkB;QAAEC;MAAgB,CAAC,GACrD,IAAAnB,4BAAa,EAACgB,IAAI,CAAC;MACrB,MAAMI,YAAY,GAChBzB,OAAO,EAAE0B,sBAAsB,IAAIH,kBAAkB,GACjDA,kBAAkB,GAClBD,QAAQ;MACd,IAAIG,YAAY,EAAER,WAAW,GAAGA,WAAW,CAACU,GAAG,CAACF,YAAY,CAAC;MAC7D,IAAID,eAAe,EAAE;QACnBJ,gBAAgB,EAAE;QAClB,IAAIK,YAAY,EAAEN,cAAc,GAAGA,cAAc,CAACQ,GAAG,CAACF,YAAY,CAAC;MACrE;IACF;IAEAxB,OAAO,CAACC,aAAa,CAAC0B,IAAI,CAAC;MACzBrB,UAAU,EAAEA,UAAU,IAAIsB,GAAG;MAC7B1B,SAAS,EAAEA,SAAS,EAAE;MACtBS,IAAI,EAAEA,IAAI,IAAI,IAAIkB,IAAI,CAACD,GAAG,CAAC;MAC3BlB,IAAI,EAAEA,IAAI,IAAI,EAAE;MAChBE,IAAI,EAAEA,IAAI,IAAI,EAAE;MAChBkB,QAAQ,EAAErB,KAAK,CAACsB,MAAM;MACtBf,WAAW;MACXG,gBAAgB;MAChBD,cAAc;MACdT,KAAK,EAAE;IACT,CAAC,CAAC;EACJ;EAEA,OAAOT,OAAO;AAChB","ignoreList":[]}
@@ -4,27 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.underlineSource = underlineSource;
7
- function underlineSource(source, loc) {
8
- var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
9
- _ref$underlineChar = _ref.underlineChar,
10
- underlineChar = _ref$underlineChar === void 0 ? '^' : _ref$underlineChar,
11
- _ref$underlineStyle = _ref.underlineStyle,
12
- underlineStyle = _ref$underlineStyle === void 0 ? function (s) {
13
- return s;
14
- } : _ref$underlineStyle;
15
- var start = source.lastIndexOf('\n', loc.start.index);
7
+ function underlineSource(source, loc, {
8
+ underlineChar = '^',
9
+ underlineStyle = s => s
10
+ } = {}) {
11
+ let start = source.lastIndexOf('\n', loc.start.index);
16
12
  if (start < 0) start = source.lastIndexOf('\r', loc.start.index);
17
13
  if (start < 0) start = -1;
18
14
  if (start < loc.start.index) start++;
19
- var end = source.indexOf('\r', loc.end.index);
15
+ let end = source.indexOf('\r', loc.end.index);
20
16
  if (end < 0) end = source.indexOf('\n', loc.end.index);
21
17
  if (end < 0) end = source.length;
22
- var sourcelines = source.substring(start, end).split(/\r\n?|\n/gm);
23
- var underlineLines = (' '.repeat(loc.start.index - start) + source.substring(loc.start.index, Math.max(loc.start.index + 1, loc.end.index)).replace(/[^\r\n]/g, underlineChar) + ' '.repeat(end - loc.end.index)).split(/\r\n?|\n/gm).map(function (line) {
24
- return underlineStyle(line);
25
- });
26
- return sourcelines.flatMap(function (line, index) {
27
- return [line, underlineLines[index]];
28
- }).join('\n');
18
+ const sourcelines = source.substring(start, end).split(/\r\n?|\n/gm);
19
+ const underlineLines = (' '.repeat(loc.start.index - start) + source.substring(loc.start.index, Math.max(loc.start.index + 1, loc.end.index)).replace(/[^\r\n]/g, underlineChar) + ' '.repeat(end - loc.end.index)).split(/\r\n?|\n/gm).map(line => underlineStyle(line));
20
+ return sourcelines.flatMap((line, index) => [line, underlineLines[index]]).join('\n');
29
21
  }
30
22
  //# sourceMappingURL=underlineSource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"underlineSource.js","names":["underlineSource","source","loc","_ref","arguments","length","undefined","_ref$underlineChar","underlineChar","_ref$underlineStyle","underlineStyle","s","start","lastIndexOf","index","end","indexOf","sourcelines","substring","split","underlineLines","repeat","Math","max","replace","map","line","flatMap","join"],"sources":["src/underlineSource.ts"],"sourcesContent":["import { SourceLoc } from './SourceLoc'\n\nexport function underlineSource(\n source: string,\n loc: SourceLoc,\n {\n underlineChar = '^',\n underlineStyle = (s) => s,\n }: { underlineChar?: string; underlineStyle?: (s: string) => string } = {}\n) {\n let start = source.lastIndexOf('\\n', loc.start.index)\n if (start < 0) start = source.lastIndexOf('\\r', loc.start.index)\n if (start < 0) start = -1\n if (start < loc.start.index) start++\n\n let end = source.indexOf('\\r', loc.end.index)\n if (end < 0) end = source.indexOf('\\n', loc.end.index)\n if (end < 0) end = source.length\n\n const sourcelines = source.substring(start, end).split(/\\r\\n?|\\n/gm)\n const underlineLines = (\n ' '.repeat(loc.start.index - start) +\n source\n .substring(loc.start.index, Math.max(loc.start.index + 1, loc.end.index))\n .replace(/[^\\r\\n]/g, underlineChar) +\n ' '.repeat(end - loc.end.index)\n )\n .split(/\\r\\n?|\\n/gm)\n .map((line) => underlineStyle(line))\n\n return sourcelines\n .flatMap((line, index) => [line, underlineLines[index]])\n .join('\\n')\n}\n"],"mappings":";;;;;;AAEO,SAASA,eAAeA,CAC7BC,MAAc,EACdC,GAAc,EAKd;EAAA,IAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MADwE,CAAC,CAAC;IAAAG,kBAAA,GAAAJ,IAAA,CAFxEK,aAAa;IAAbA,aAAa,GAAAD,kBAAA,cAAG,GAAG,GAAAA,kBAAA;IAAAE,mBAAA,GAAAN,IAAA,CACnBO,cAAc;IAAdA,cAAc,GAAAD,mBAAA,cAAG,UAACE,CAAC;MAAA,OAAKA,CAAC;IAAA,IAAAF,mBAAA;EAG3B,IAAIG,KAAK,GAAGX,MAAM,CAACY,WAAW,CAAC,IAAI,EAAEX,GAAG,CAACU,KAAK,CAACE,KAAK,CAAC;EACrD,IAAIF,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGX,MAAM,CAACY,WAAW,CAAC,IAAI,EAAEX,GAAG,CAACU,KAAK,CAACE,KAAK,CAAC;EAChE,IAAIF,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG,CAAC,CAAC;EACzB,IAAIA,KAAK,GAAGV,GAAG,CAACU,KAAK,CAACE,KAAK,EAAEF,KAAK,EAAE;EAEpC,IAAIG,GAAG,GAAGd,MAAM,CAACe,OAAO,CAAC,IAAI,EAAEd,GAAG,CAACa,GAAG,CAACD,KAAK,CAAC;EAC7C,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGd,MAAM,CAACe,OAAO,CAAC,IAAI,EAAEd,GAAG,CAACa,GAAG,CAACD,KAAK,CAAC;EACtD,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGd,MAAM,CAACI,MAAM;EAEhC,IAAMY,WAAW,GAAGhB,MAAM,CAACiB,SAAS,CAACN,KAAK,EAAEG,GAAG,CAAC,CAACI,KAAK,CAAC,YAAY,CAAC;EACpE,IAAMC,cAAc,GAAG,CACrB,GAAG,CAACC,MAAM,CAACnB,GAAG,CAACU,KAAK,CAACE,KAAK,GAAGF,KAAK,CAAC,GACnCX,MAAM,CACHiB,SAAS,CAAChB,GAAG,CAACU,KAAK,CAACE,KAAK,EAAEQ,IAAI,CAACC,GAAG,CAACrB,GAAG,CAACU,KAAK,CAACE,KAAK,GAAG,CAAC,EAAEZ,GAAG,CAACa,GAAG,CAACD,KAAK,CAAC,CAAC,CACxEU,OAAO,CAAC,UAAU,EAAEhB,aAAa,CAAC,GACrC,GAAG,CAACa,MAAM,CAACN,GAAG,GAAGb,GAAG,CAACa,GAAG,CAACD,KAAK,CAAC,EAE9BK,KAAK,CAAC,YAAY,CAAC,CACnBM,GAAG,CAAC,UAACC,IAAI;IAAA,OAAKhB,cAAc,CAACgB,IAAI,CAAC;EAAA,EAAC;EAEtC,OAAOT,WAAW,CACfU,OAAO,CAAC,UAACD,IAAI,EAAEZ,KAAK;IAAA,OAAK,CAACY,IAAI,EAAEN,cAAc,CAACN,KAAK,CAAC,CAAC;EAAA,EAAC,CACvDc,IAAI,CAAC,IAAI,CAAC;AACf","ignoreList":[]}
1
+ {"version":3,"file":"underlineSource.js","names":["underlineSource","source","loc","underlineChar","underlineStyle","s","start","lastIndexOf","index","end","indexOf","length","sourcelines","substring","split","underlineLines","repeat","Math","max","replace","map","line","flatMap","join"],"sources":["src/underlineSource.ts"],"sourcesContent":["import { SourceLoc } from './SourceLoc'\n\nexport function underlineSource(\n source: string,\n loc: SourceLoc,\n {\n underlineChar = '^',\n underlineStyle = (s) => s,\n }: { underlineChar?: string; underlineStyle?: (s: string) => string } = {}\n) {\n let start = source.lastIndexOf('\\n', loc.start.index)\n if (start < 0) start = source.lastIndexOf('\\r', loc.start.index)\n if (start < 0) start = -1\n if (start < loc.start.index) start++\n\n let end = source.indexOf('\\r', loc.end.index)\n if (end < 0) end = source.indexOf('\\n', loc.end.index)\n if (end < 0) end = source.length\n\n const sourcelines = source.substring(start, end).split(/\\r\\n?|\\n/gm)\n const underlineLines = (\n ' '.repeat(loc.start.index - start) +\n source\n .substring(loc.start.index, Math.max(loc.start.index + 1, loc.end.index))\n .replace(/[^\\r\\n]/g, underlineChar) +\n ' '.repeat(end - loc.end.index)\n )\n .split(/\\r\\n?|\\n/gm)\n .map((line) => underlineStyle(line))\n\n return sourcelines\n .flatMap((line, index) => [line, underlineLines[index]])\n .join('\\n')\n}\n"],"mappings":";;;;;;AAEO,SAASA,eAAeA,CAC7BC,MAAc,EACdC,GAAc,EACd;EACEC,aAAa,GAAG,GAAG;EACnBC,cAAc,GAAIC,CAAC,IAAKA;AAC0C,CAAC,GAAG,CAAC,CAAC,EAC1E;EACA,IAAIC,KAAK,GAAGL,MAAM,CAACM,WAAW,CAAC,IAAI,EAAEL,GAAG,CAACI,KAAK,CAACE,KAAK,CAAC;EACrD,IAAIF,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGL,MAAM,CAACM,WAAW,CAAC,IAAI,EAAEL,GAAG,CAACI,KAAK,CAACE,KAAK,CAAC;EAChE,IAAIF,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG,CAAC,CAAC;EACzB,IAAIA,KAAK,GAAGJ,GAAG,CAACI,KAAK,CAACE,KAAK,EAAEF,KAAK,EAAE;EAEpC,IAAIG,GAAG,GAAGR,MAAM,CAACS,OAAO,CAAC,IAAI,EAAER,GAAG,CAACO,GAAG,CAACD,KAAK,CAAC;EAC7C,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGR,MAAM,CAACS,OAAO,CAAC,IAAI,EAAER,GAAG,CAACO,GAAG,CAACD,KAAK,CAAC;EACtD,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGR,MAAM,CAACU,MAAM;EAEhC,MAAMC,WAAW,GAAGX,MAAM,CAACY,SAAS,CAACP,KAAK,EAAEG,GAAG,CAAC,CAACK,KAAK,CAAC,YAAY,CAAC;EACpE,MAAMC,cAAc,GAAG,CACrB,GAAG,CAACC,MAAM,CAACd,GAAG,CAACI,KAAK,CAACE,KAAK,GAAGF,KAAK,CAAC,GACnCL,MAAM,CACHY,SAAS,CAACX,GAAG,CAACI,KAAK,CAACE,KAAK,EAAES,IAAI,CAACC,GAAG,CAAChB,GAAG,CAACI,KAAK,CAACE,KAAK,GAAG,CAAC,EAAEN,GAAG,CAACO,GAAG,CAACD,KAAK,CAAC,CAAC,CACxEW,OAAO,CAAC,UAAU,EAAEhB,aAAa,CAAC,GACrC,GAAG,CAACa,MAAM,CAACP,GAAG,GAAGP,GAAG,CAACO,GAAG,CAACD,KAAK,CAAC,EAE9BM,KAAK,CAAC,YAAY,CAAC,CACnBM,GAAG,CAAEC,IAAI,IAAKjB,cAAc,CAACiB,IAAI,CAAC,CAAC;EAEtC,OAAOT,WAAW,CACfU,OAAO,CAAC,CAACD,IAAI,EAAEb,KAAK,KAAK,CAACa,IAAI,EAAEN,cAAc,CAACP,KAAK,CAAC,CAAC,CAAC,CACvDe,IAAI,CAAC,IAAI,CAAC;AACf","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ export declare function unwrapInvalid<T>(t: T): T extends {
2
+ INVALID: infer I;
3
+ } ? I : T;
4
+ //# sourceMappingURL=unwrapInvalid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unwrapInvalid.d.ts","sourceRoot":"","sources":["src/unwrapInvalid.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,CAAC,CAE7E"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.unwrapInvalid = unwrapInvalid;
7
+ function unwrapInvalid(t) {
8
+ return t instanceof Object && 'INVALID' in t ? t.INVALID : t;
9
+ }
10
+ //# sourceMappingURL=unwrapInvalid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unwrapInvalid.js","names":["unwrapInvalid","t","Object","INVALID"],"sources":["src/unwrapInvalid.ts"],"sourcesContent":["export function unwrapInvalid<T>(t: T): T extends { INVALID: infer I } ? I : T {\n return (t instanceof Object && 'INVALID' in t ? t.INVALID : t) as any\n}\n"],"mappings":";;;;;;AAAO,SAASA,aAAaA,CAAIC,CAAI,EAA0C;EAC7E,OAAQA,CAAC,YAAYC,MAAM,IAAI,SAAS,IAAID,CAAC,GAAGA,CAAC,CAACE,OAAO,GAAGF,CAAC;AAC/D","ignoreList":[]}