@speleotica/frcsdata 5.1.1 → 5.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@speleotica/frcsdata",
3
- "version": "5.1.1",
3
+ "version": "5.1.2",
4
4
  "description": "parser for Chip Hopper's survey data format used in Fisher Ridge Cave System",
5
5
  "sideEffects": false,
6
6
  "bin": {
@@ -115,7 +115,8 @@ export default async function parseFrcsSurveyFile(
115
115
  let tripCommentEndLine = -1
116
116
  const tripComment: string[] = []
117
117
  const commentLines: string[] = []
118
- let trip: FrcsTrip | InvalidFrcsTrip | undefined = undefined
118
+ let trip: FrcsTrip | InvalidFrcsTrip | undefined
119
+ let lastShot: FrcsShot | InvalidFrcsShot | undefined
119
120
  let inBlockComment = false
120
121
  let section
121
122
  let sectionLoc: SourceLoc | undefined
@@ -181,6 +182,8 @@ export default async function parseFrcsSurveyFile(
181
182
  alternateUnits = nextShotUnits = undefined
182
183
  unitsChanged = false
183
184
  if (inTripComment) {
185
+ const trailingComment = getComment()
186
+ if (trailingComment) attachComment(lastShot, trailingComment)
184
187
  tripName = undefined
185
188
  tripNameLoc = undefined
186
189
  section = undefined
@@ -318,7 +321,10 @@ export default async function parseFrcsSurveyFile(
318
321
  inBlockComment = false
319
322
  } else {
320
323
  inBlockComment = !inBlockComment
321
- if (inBlockComment) commentLines.length = 0
324
+ if (inBlockComment) {
325
+ const trailingComment = getComment()
326
+ if (trailingComment) attachComment(lastShot, trailingComment)
327
+ }
322
328
  }
323
329
  } else if (inBlockComment) {
324
330
  addCommentLine(line)
@@ -710,12 +716,22 @@ export default async function parseFrcsSurveyFile(
710
716
  ////////////////////////////////////////////////////////////////////////////////////////////
711
717
 
712
718
  function getComment(): string | undefined {
713
- if (!commentLines?.length) return undefined
719
+ if (!commentLines.length) return undefined
714
720
  const comment = commentLines.join('\n').trim()
715
721
  commentLines.length = 0
716
722
  return comment || undefined
717
723
  }
718
724
 
725
+ function attachComment(
726
+ shot: FrcsShot | InvalidFrcsShot | undefined,
727
+ comment: string
728
+ ) {
729
+ const unwrapped = unwrapInvalid(shot)
730
+ if (!unwrapped) return
731
+ if (unwrapped.comment) unwrapped.comment += '\n' + comment
732
+ else unwrapped.comment = comment
733
+ }
734
+
719
735
  function addCommentLine(comment: string): void {
720
736
  if (trip) {
721
737
  const distanceUnit =
@@ -940,6 +956,7 @@ export default async function parseFrcsSurveyFile(
940
956
  }
941
957
 
942
958
  function addShot(shot: FrcsShot | InvalidFrcsShot) {
959
+ lastShot = shot
943
960
  if (!trip) return
944
961
  if (alternateUnits) {
945
962
  const recorded:
@@ -1 +1 @@
1
- {"version":3,"file":"parseFrcsSurveyFile.d.ts","sourceRoot":"","sources":["../../src/survey/parseFrcsSurveyFile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAC1B,cAAc,EAId,qBAAqB,EAKtB,MAAM,kBAAkB,CAAA;AA2BzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4CI;AACJ,wBAA8B,mBAAmB,CAC/C,IAAI,EAAE,GAAG,EAAE,yDAAyD;AACpE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EAChD,EACE,OAAqC,EACrC,aAAqB,EACrB,cAAqB,EACrB,gBAAgB,EAChB,WAAW,GACZ,GAAE,0BAA+B,GACjC,OAAO,CAAC,cAAc,GAAG,qBAAqB,CAAC,CAs6BjD"}
1
+ {"version":3,"file":"parseFrcsSurveyFile.d.ts","sourceRoot":"","sources":["../../src/survey/parseFrcsSurveyFile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAC1B,cAAc,EAId,qBAAqB,EAKtB,MAAM,kBAAkB,CAAA;AA2BzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4CI;AACJ,wBAA8B,mBAAmB,CAC/C,IAAI,EAAE,GAAG,EAAE,yDAAyD;AACpE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EAChD,EACE,OAAqC,EACrC,aAAqB,EACrB,cAAqB,EACrB,gBAAgB,EAChB,WAAW,GACZ,GAAE,0BAA+B,GACjC,OAAO,CAAC,cAAc,GAAG,qBAAqB,CAAC,CAu7BjD"}
@@ -84,7 +84,8 @@ chunks, {
84
84
  let tripCommentEndLine = -1;
85
85
  const tripComment = [];
86
86
  const commentLines = [];
87
- let trip = undefined;
87
+ let trip;
88
+ let lastShot;
88
89
  let inBlockComment = false;
89
90
  let section;
90
91
  let sectionLoc;
@@ -134,6 +135,8 @@ chunks, {
134
135
  alternateUnits = nextShotUnits = undefined;
135
136
  unitsChanged = false;
136
137
  if (inTripComment) {
138
+ const trailingComment = getComment();
139
+ if (trailingComment) attachComment(lastShot, trailingComment);
137
140
  tripName = undefined;
138
141
  tripNameLoc = undefined;
139
142
  section = undefined;
@@ -223,7 +226,10 @@ chunks, {
223
226
  inBlockComment = false;
224
227
  } else {
225
228
  inBlockComment = !inBlockComment;
226
- if (inBlockComment) commentLines.length = 0;
229
+ if (inBlockComment) {
230
+ const trailingComment = getComment();
231
+ if (trailingComment) attachComment(lastShot, trailingComment);
232
+ }
227
233
  }
228
234
  } else if (inBlockComment) {
229
235
  addCommentLine(line);
@@ -513,11 +519,16 @@ chunks, {
513
519
  ////////////////////////////////////////////////////////////////////////////////////////////
514
520
 
515
521
  function getComment() {
516
- if (!commentLines?.length) return undefined;
522
+ if (!commentLines.length) return undefined;
517
523
  const comment = commentLines.join('\n').trim();
518
524
  commentLines.length = 0;
519
525
  return comment || undefined;
520
526
  }
527
+ function attachComment(shot, comment) {
528
+ const unwrapped = (0, _unwrapInvalid.unwrapInvalid)(shot);
529
+ if (!unwrapped) return;
530
+ if (unwrapped.comment) unwrapped.comment += '\n' + comment;else unwrapped.comment = comment;
531
+ }
521
532
  function addCommentLine(comment) {
522
533
  if (trip) {
523
534
  const distanceUnit = (0, _unwrapInvalid.unwrapInvalid)(alternateUnits)?.distanceUnit || (0, _unwrapInvalid.unwrapInvalid)((0, _unwrapInvalid.unwrapInvalid)(trip).units).distanceUnit || _unitized.Length.feet;
@@ -657,6 +668,7 @@ chunks, {
657
668
  }
658
669
  }
659
670
  function addShot(shot) {
671
+ lastShot = shot;
660
672
  if (!trip) return;
661
673
  if (alternateUnits) {
662
674
  const recorded = shot;
@@ -1 +1 @@
1
- {"version":3,"file":"parseFrcsSurveyFile.js","names":["_FrcsSurveyFile","require","_unitized","_chunksToLines","_validators","_getColumnRanges","_parsers","_normalizeTeamMemberName","_unwrapInvalid","parseFrcsSurveyFile","file","chunks","columns","defaultFrcsShotColumnConfig","outputColumns","normalizeNames","suppressWarnings","includeLocs","columnRanges","getColumnRanges","maxRange","Math","max","Object","values","decimal","map","r","cave","undefined","location","trips","rootLocs","issues","tripName","tripNameLoc","tripTeam","tripTeamLoc","tripDate","tripDateLoc","inTripComment","tripCommentStartLine","tripCommentEndLine","tripComment","commentLines","trip","inBlockComment","section","sectionLoc","commentFromStationLruds","Map","unitsChanged","alternateUnits","nextShotUnits","lineNumber","line","lineStartIndex","lineIssues","tripIssues","began","startIndex","chunksToLines","includeStartIndex","length","test","match","exec","trim","indices","makeLineLoc","parseUnits","startColumn","index","endColumn","dateMatch","team","substring","replace","matchAll","includes","name","push","addIssue","normalizeTeamMemberName","month","day","year","parseInt","parseMonth","Date","currentUnits","unwrapInvalid","units","distanceUnit","Length","inches","meters","feet","addCommentLine","comment","join","headerLocs","date","header","locs","some","i","type","INVALID","shots","tripNumber","azimuthUnit","Angle","degrees","inclinationUnit","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","getComment","addShot","get","delete","fromLrudMatch","RegExp","split","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","excludeDistance","isSplay","isValidFloat","h","NaN","v","sqrt","atan2","in","d","asin","parseNumber","validateInclinationRange","parseAzimuth","validateAzimuthRange","toLruds","loc","forEach","every","t","parsedFromStationLruds","parseFromStationLruds","set","code","message","indicesArray","start","column","end","parseLengthUnit","slice","parseAngleUnit","backsightAzimuthCorrected","backsightInclinationCorrected","hasBacksightAzimuth","hasBacksightInclination","fieldName","validator","field","toUpperCase","azimuth","rawValue","unit","Infinity","gradians","radians","PI","milsNATO","inclination","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 FrcsTripHeader,\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'\nimport { SourceLoc } from '../SourceLoc'\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 includeLocs,\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 rootLocs: FrcsSurveyFile['locs'] = {}\n const issues: ParseIssue[] = []\n\n let tripName: string | undefined\n let tripNameLoc: SourceLoc | undefined\n let tripTeam: string[] | undefined\n let tripTeamLoc: SourceLoc[] | undefined\n let tripDate: Date | undefined\n let tripDateLoc: SourceLoc | 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 let sectionLoc: SourceLoc | undefined\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 includeStartIndex: true,\n })) {\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*([^,]+)(,(.*))?/d.exec(line)\n if (match) {\n cave = match[1].trim()\n if (includeLocs && match.indices) {\n rootLocs.cave = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...match.indices[1]\n )\n }\n if (match[3]) {\n location = match[3].trim()\n if (includeLocs && match.indices) {\n rootLocs.cave = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...match.indices[3]\n )\n }\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 tripName = undefined\n tripNameLoc = undefined\n section = undefined\n sectionLoc = undefined\n tripTeam = undefined\n tripTeamLoc = undefined\n tripDate = undefined\n tripDateLoc = 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.trim()\n const startColumn = /\\S/.exec(line)?.index ?? 0\n const endColumn = startColumn + tripName.length\n tripNameLoc = makeLineLoc(\n lineNumber,\n lineStartIndex,\n startColumn,\n endColumn\n )\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})))/di.exec(\n line\n )\n if (dateMatch) {\n const team = line.substring(0, dateMatch.index).replace(/\\.?\\s*$/, '')\n tripTeam = []\n tripTeamLoc = []\n for (const match of team.matchAll(\n team.includes(';')\n ? /\\s*([^;]+)\\s*/dg\n : team.includes(',')\n ? /\\s*([^,]+)\\s*/dg\n : team.includes('&')\n ? /\\s*([^&]+)\\s*/dg\n : /\\S {2,}\\S/.test(team)\n ? /(\\S+( \\S+)*)/dg\n : /(\\S+( \\S\\.? )? \\S{2,})/dg\n )) {\n const name = match[1].trim()\n tripTeam.push(name)\n if (includeLocs && match.indices) {\n const index = match.indices[1][0]\n tripTeamLoc.push(\n makeLineLoc(\n lineNumber,\n lineStartIndex,\n index,\n index + name.length\n )\n )\n }\n }\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 if (includeLocs && dateMatch.indices) {\n tripDateLoc = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...dateMatch.indices[1]\n )\n }\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 let match: RegExpMatchArray | null\n if ((match = /^\\*\\s*%T([ITM])(\\b|$)/.exec(line))) {\n const currentUnits = alternateUnits || unwrapInvalid(trip)?.units\n if (currentUnits && !('INVALID' in currentUnits)) {\n alternateUnits = {\n ...currentUnits,\n distanceUnit:\n match[1] === 'I'\n ? Length.inches\n : match[1] === 'M'\n ? Length.meters\n : Length.feet,\n }\n nextShotUnits = alternateUnits\n }\n }\n if (/^\\*\\s*%/.test(line)) {\n inBlockComment = false\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 comment = tripComment.join('\\n') || undefined\n const headerLocs: FrcsTripHeader['locs'] =\n includeLocs && tripNameLoc\n ? {\n name: tripNameLoc,\n date: tripDateLoc,\n section: sectionLoc,\n team: tripTeamLoc,\n }\n : undefined\n const header = {\n name: tripName || '',\n comment,\n section,\n date: tripDate,\n team: tripTeam,\n ...(headerLocs && { locs: headerLocs }),\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 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 validateInclinationRange(\n frontsightInclination,\n ...ranges.frontsightInclination\n )\n validateInclinationRange(\n backsightInclination,\n ...ranges.backsightInclination\n )\n }\n\n const frontsightAzimuth = parseAzimuth(azmFsStr, azimuthUnit)\n const backsightAzimuth = parseAzimuth(azmBsStr, azimuthUnit)\n\n validateAzimuthRange(frontsightAzimuth, ...ranges.frontsightAzimuth)\n validateAzimuthRange(backsightAzimuth, ...ranges.backsightAzimuth)\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 ...(includeLocs && {\n loc: makeLineLoc(lineNumber, lineStartIndex, 0, line.length),\n }),\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 ...(includeLocs && {\n loc: makeLineLoc(lineNumber, lineStartIndex, 0, line.length),\n }),\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 ...(includeLocs && { locs: rootLocs }),\n }\n }\n\n return {\n INVALID: {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n ...(includeLocs && { locs: rootLocs }),\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 validateAzimuthRange(\n azimuth: UnitizedNumber<Angle> | undefined,\n startColumn: number,\n endColumn: number\n ) {\n if (!azimuth) return\n const rawValue = azimuth.get(azimuth.unit)\n let max = Infinity\n switch (azimuth.unit) {\n case Angle.degrees:\n max = 360\n break\n case Angle.gradians:\n max = 400\n break\n case Angle.radians:\n max = Math.PI * 2\n break\n case Angle.milsNATO:\n max = 6400\n break\n }\n if (rawValue < 0 || rawValue >= max) {\n addIssue(\n 'error',\n 'azimuthOutOfRange',\n 'Azimuth out of range',\n startColumn,\n endColumn,\n lineIssues\n )\n }\n }\n\n function validateInclinationRange(\n inclination: UnitizedNumber<Angle> | undefined,\n startColumn: number,\n endColumn: number\n ) {\n if (!inclination) return\n const rawValue = inclination.get(inclination.unit)\n let max = Infinity\n switch (inclination.unit) {\n case Angle.degrees:\n max = 90\n break\n case Angle.gradians:\n max = 100\n break\n case Angle.radians:\n max = Math.PI / 2\n break\n case Angle.milsNATO:\n max = 1600\n break\n }\n if (rawValue < -max || rawValue > max) {\n addIssue(\n 'error',\n 'inclinationOutOfRange',\n 'Inclination out of range',\n startColumn,\n endColumn,\n lineIssues\n )\n }\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 = {\n INVALID: {\n ...shot.INVALID,\n recorded: shot,\n },\n issues: shot.issues,\n }\n } else {\n shot = { ...shot, recorded: shot }\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 = { ...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 = { ...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 makeLineLoc(\n line: number,\n lineStartIndex: number,\n startColumn: number,\n endColumn: number\n): SourceLoc {\n return {\n start: {\n index: lineStartIndex + startColumn,\n line,\n column: startColumn,\n },\n end: {\n index: lineStartIndex + endColumn,\n line,\n column: endColumn,\n },\n }\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","includeLocs","columnRanges","getColumnRanges","maxRange","Math","max","Object","values","decimal","map","r","cave","undefined","location","trips","rootLocs","issues","tripName","tripNameLoc","tripTeam","tripTeamLoc","tripDate","tripDateLoc","inTripComment","tripCommentStartLine","tripCommentEndLine","tripComment","commentLines","trip","lastShot","inBlockComment","section","sectionLoc","commentFromStationLruds","Map","unitsChanged","alternateUnits","nextShotUnits","lineNumber","line","lineStartIndex","lineIssues","tripIssues","began","startIndex","chunksToLines","includeStartIndex","length","test","match","exec","trim","indices","makeLineLoc","parseUnits","trailingComment","getComment","attachComment","startColumn","index","endColumn","dateMatch","team","substring","replace","matchAll","includes","name","push","addIssue","normalizeTeamMemberName","month","day","year","parseInt","parseMonth","Date","currentUnits","unwrapInvalid","units","distanceUnit","Length","inches","meters","feet","addCommentLine","comment","join","headerLocs","date","header","locs","some","i","type","INVALID","shots","tripNumber","azimuthUnit","Angle","degrees","inclinationUnit","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","addShot","get","delete","fromLrudMatch","RegExp","split","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","excludeDistance","isSplay","isValidFloat","h","NaN","v","sqrt","atan2","in","d","asin","parseNumber","validateInclinationRange","parseAzimuth","validateAzimuthRange","toLruds","loc","forEach","every","t","unwrapped","parsedFromStationLruds","parseFromStationLruds","set","code","message","indicesArray","start","column","end","parseLengthUnit","slice","parseAngleUnit","backsightAzimuthCorrected","backsightInclinationCorrected","hasBacksightAzimuth","hasBacksightInclination","fieldName","validator","field","toUpperCase","azimuth","rawValue","unit","Infinity","gradians","radians","PI","milsNATO","inclination","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 FrcsTripHeader,\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'\nimport { SourceLoc } from '../SourceLoc'\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 includeLocs,\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 rootLocs: FrcsSurveyFile['locs'] = {}\n const issues: ParseIssue[] = []\n\n let tripName: string | undefined\n let tripNameLoc: SourceLoc | undefined\n let tripTeam: string[] | undefined\n let tripTeamLoc: SourceLoc[] | undefined\n let tripDate: Date | undefined\n let tripDateLoc: SourceLoc | 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\n let lastShot: FrcsShot | InvalidFrcsShot | undefined\n let inBlockComment = false\n let section\n let sectionLoc: SourceLoc | undefined\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 includeStartIndex: true,\n })) {\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*([^,]+)(,(.*))?/d.exec(line)\n if (match) {\n cave = match[1].trim()\n if (includeLocs && match.indices) {\n rootLocs.cave = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...match.indices[1]\n )\n }\n if (match[3]) {\n location = match[3].trim()\n if (includeLocs && match.indices) {\n rootLocs.cave = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...match.indices[3]\n )\n }\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 const trailingComment = getComment()\n if (trailingComment) attachComment(lastShot, trailingComment)\n tripName = undefined\n tripNameLoc = undefined\n section = undefined\n sectionLoc = undefined\n tripTeam = undefined\n tripTeamLoc = undefined\n tripDate = undefined\n tripDateLoc = 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.trim()\n const startColumn = /\\S/.exec(line)?.index ?? 0\n const endColumn = startColumn + tripName.length\n tripNameLoc = makeLineLoc(\n lineNumber,\n lineStartIndex,\n startColumn,\n endColumn\n )\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})))/di.exec(\n line\n )\n if (dateMatch) {\n const team = line.substring(0, dateMatch.index).replace(/\\.?\\s*$/, '')\n tripTeam = []\n tripTeamLoc = []\n for (const match of team.matchAll(\n team.includes(';')\n ? /\\s*([^;]+)\\s*/dg\n : team.includes(',')\n ? /\\s*([^,]+)\\s*/dg\n : team.includes('&')\n ? /\\s*([^&]+)\\s*/dg\n : /\\S {2,}\\S/.test(team)\n ? /(\\S+( \\S+)*)/dg\n : /(\\S+( \\S\\.? )? \\S{2,})/dg\n )) {\n const name = match[1].trim()\n tripTeam.push(name)\n if (includeLocs && match.indices) {\n const index = match.indices[1][0]\n tripTeamLoc.push(\n makeLineLoc(\n lineNumber,\n lineStartIndex,\n index,\n index + name.length\n )\n )\n }\n }\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 if (includeLocs && dateMatch.indices) {\n tripDateLoc = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...dateMatch.indices[1]\n )\n }\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 let match: RegExpMatchArray | null\n if ((match = /^\\*\\s*%T([ITM])(\\b|$)/.exec(line))) {\n const currentUnits = alternateUnits || unwrapInvalid(trip)?.units\n if (currentUnits && !('INVALID' in currentUnits)) {\n alternateUnits = {\n ...currentUnits,\n distanceUnit:\n match[1] === 'I'\n ? Length.inches\n : match[1] === 'M'\n ? Length.meters\n : Length.feet,\n }\n nextShotUnits = alternateUnits\n }\n }\n if (/^\\*\\s*%/.test(line)) {\n inBlockComment = false\n continue\n }\n if (/[^\\s*]/.test(line)) {\n addCommentLine(line.replace(/^\\s*\\*/, ''))\n inBlockComment = false\n } else {\n inBlockComment = !inBlockComment\n if (inBlockComment) {\n const trailingComment = getComment()\n if (trailingComment) attachComment(lastShot, trailingComment)\n }\n }\n } else if (inBlockComment) {\n addCommentLine(line)\n } else if (lineNumber === tripCommentEndLine + 1) {\n if (trip) trips.push(trip)\n const comment = tripComment.join('\\n') || undefined\n const headerLocs: FrcsTripHeader['locs'] =\n includeLocs && tripNameLoc\n ? {\n name: tripNameLoc,\n date: tripDateLoc,\n section: sectionLoc,\n team: tripTeamLoc,\n }\n : undefined\n const header = {\n name: tripName || '',\n comment,\n section,\n date: tripDate,\n team: tripTeam,\n ...(headerLocs && { locs: headerLocs }),\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 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 validateInclinationRange(\n frontsightInclination,\n ...ranges.frontsightInclination\n )\n validateInclinationRange(\n backsightInclination,\n ...ranges.backsightInclination\n )\n }\n\n const frontsightAzimuth = parseAzimuth(azmFsStr, azimuthUnit)\n const backsightAzimuth = parseAzimuth(azmBsStr, azimuthUnit)\n\n validateAzimuthRange(frontsightAzimuth, ...ranges.frontsightAzimuth)\n validateAzimuthRange(backsightAzimuth, ...ranges.backsightAzimuth)\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 ...(includeLocs && {\n loc: makeLineLoc(lineNumber, lineStartIndex, 0, line.length),\n }),\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 ...(includeLocs && {\n loc: makeLineLoc(lineNumber, lineStartIndex, 0, line.length),\n }),\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 ...(includeLocs && { locs: rootLocs }),\n }\n }\n\n return {\n INVALID: {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n ...(includeLocs && { locs: rootLocs }),\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 attachComment(\n shot: FrcsShot | InvalidFrcsShot | undefined,\n comment: string\n ) {\n const unwrapped = unwrapInvalid(shot)\n if (!unwrapped) return\n if (unwrapped.comment) unwrapped.comment += '\\n' + comment\n else unwrapped.comment = comment\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 validateAzimuthRange(\n azimuth: UnitizedNumber<Angle> | undefined,\n startColumn: number,\n endColumn: number\n ) {\n if (!azimuth) return\n const rawValue = azimuth.get(azimuth.unit)\n let max = Infinity\n switch (azimuth.unit) {\n case Angle.degrees:\n max = 360\n break\n case Angle.gradians:\n max = 400\n break\n case Angle.radians:\n max = Math.PI * 2\n break\n case Angle.milsNATO:\n max = 6400\n break\n }\n if (rawValue < 0 || rawValue >= max) {\n addIssue(\n 'error',\n 'azimuthOutOfRange',\n 'Azimuth out of range',\n startColumn,\n endColumn,\n lineIssues\n )\n }\n }\n\n function validateInclinationRange(\n inclination: UnitizedNumber<Angle> | undefined,\n startColumn: number,\n endColumn: number\n ) {\n if (!inclination) return\n const rawValue = inclination.get(inclination.unit)\n let max = Infinity\n switch (inclination.unit) {\n case Angle.degrees:\n max = 90\n break\n case Angle.gradians:\n max = 100\n break\n case Angle.radians:\n max = Math.PI / 2\n break\n case Angle.milsNATO:\n max = 1600\n break\n }\n if (rawValue < -max || rawValue > max) {\n addIssue(\n 'error',\n 'inclinationOutOfRange',\n 'Inclination out of range',\n startColumn,\n endColumn,\n lineIssues\n )\n }\n }\n\n function addShot(shot: FrcsShot | InvalidFrcsShot) {\n lastShot = shot\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 = {\n INVALID: {\n ...shot.INVALID,\n recorded: shot,\n },\n issues: shot.issues,\n }\n } else {\n shot = { ...shot, recorded: shot }\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 = { ...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 = { ...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 makeLineLoc(\n line: number,\n lineStartIndex: number,\n startColumn: number,\n endColumn: number\n): SourceLoc {\n return {\n start: {\n index: lineStartIndex + startColumn,\n line,\n column: startColumn,\n },\n end: {\n index: lineStartIndex + endColumn,\n line,\n column: endColumn,\n },\n }\n}\n"],"mappings":"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","ignoreList":[]}