@speleotica/frcsdata 5.0.0-beta.4 → 5.0.0

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 (102) hide show
  1. package/cli/{check-survey-correspondence.d.ts → check-correspondence.d.ts} +1 -1
  2. package/cli/check-correspondence.d.ts.map +1 -0
  3. package/cli/{check-survey-correspondence.js → check-correspondence.js} +4 -5
  4. package/cli/check-correspondence.js.map +1 -0
  5. package/cli/{check-survey.d.ts → check.d.ts} +1 -1
  6. package/cli/check.d.ts.map +1 -0
  7. package/cli/{check-survey.js → check.js} +3 -3
  8. package/cli/check.js.map +1 -0
  9. package/cli/compareNames.d.ts +2 -0
  10. package/cli/compareNames.d.ts.map +1 -0
  11. package/cli/compareNames.js +15 -0
  12. package/cli/compareNames.js.map +1 -0
  13. package/cli/formatNamesFile.d.ts +4 -0
  14. package/cli/formatNamesFile.d.ts.map +1 -0
  15. package/cli/formatNamesFile.js +13 -0
  16. package/cli/formatNamesFile.js.map +1 -0
  17. package/cli/list-names.d.ts +5 -0
  18. package/cli/list-names.d.ts.map +1 -0
  19. package/cli/list-names.js +74 -0
  20. package/cli/list-names.js.map +1 -0
  21. package/cli/merge-names-files.d.ts +2 -0
  22. package/cli/merge-names-files.d.ts.map +1 -0
  23. package/cli/merge-names-files.js +25 -0
  24. package/cli/merge-names-files.js.map +1 -0
  25. package/cli/parse-survey.d.ts.map +1 -1
  26. package/cli/parse-survey.js +3 -2
  27. package/cli/parse-survey.js.map +1 -1
  28. package/cli/parseNamesFile.d.ts +4 -0
  29. package/cli/parseNamesFile.d.ts.map +1 -0
  30. package/cli/parseNamesFile.js +19 -0
  31. package/cli/parseNamesFile.js.map +1 -0
  32. package/cli/readFile.d.ts +2 -0
  33. package/cli/readFile.d.ts.map +1 -0
  34. package/cli/readFile.js +13 -0
  35. package/cli/readFile.js.map +1 -0
  36. package/cli/replace-names.d.ts +2 -0
  37. package/cli/replace-names.d.ts.map +1 -0
  38. package/cli/replace-names.js +45 -0
  39. package/cli/replace-names.js.map +1 -0
  40. package/cli/{summarize-survey.d.ts → summarize.d.ts} +1 -1
  41. package/cli/summarize.d.ts.map +1 -0
  42. package/cli/{summarize-survey.js → summarize.js} +3 -3
  43. package/cli/summarize.js.map +1 -0
  44. package/cli.js +72 -7
  45. package/cli.js.map +1 -1
  46. package/index.d.ts +8 -6
  47. package/index.d.ts.map +1 -1
  48. package/index.js +7 -28
  49. package/index.js.map +1 -1
  50. package/node/index.d.ts +1 -1
  51. package/node/index.d.ts.map +1 -1
  52. package/package.json +2 -1
  53. package/replaceRanges.d.ts +6 -0
  54. package/replaceRanges.d.ts.map +1 -0
  55. package/replaceRanges.js +23 -0
  56. package/replaceRanges.js.map +1 -0
  57. package/src/cli/{check-survey-correspondence.ts → check-correspondence.ts} +6 -5
  58. package/src/cli/{check-survey.ts → check.ts} +2 -2
  59. package/src/cli/compareNames.ts +13 -0
  60. package/src/cli/formatNamesFile.ts +13 -0
  61. package/src/cli/list-names.ts +94 -0
  62. package/src/cli/merge-names-files.ts +18 -0
  63. package/src/cli/parse-survey.ts +3 -2
  64. package/src/cli/parseNamesFile.ts +10 -0
  65. package/src/cli/readFile.ts +6 -0
  66. package/src/cli/replace-names.ts +41 -0
  67. package/src/cli/{summarize-survey.ts → summarize.ts} +2 -2
  68. package/src/cli.ts +67 -7
  69. package/src/index.ts +22 -7
  70. package/src/replaceRanges.ts +21 -0
  71. package/src/survey/FrcsSurveyFile.ts +1 -0
  72. package/src/survey/ZodFrcsSurveyFileJson.ts +1 -0
  73. package/src/survey/formatFrcsShot.ts +5 -7
  74. package/src/survey/normalizeTeamMemberName.ts +15 -3
  75. package/src/survey/parseFrcsSurveyFile.ts +193 -8
  76. package/string/index.d.ts +1 -1
  77. package/string/index.d.ts.map +1 -1
  78. package/survey/FrcsSurveyFile.d.ts +1 -0
  79. package/survey/FrcsSurveyFile.d.ts.map +1 -1
  80. package/survey/FrcsSurveyFile.js.map +1 -1
  81. package/survey/ZodFrcsSurveyFileJson.d.ts +283 -280
  82. package/survey/ZodFrcsSurveyFileJson.d.ts.map +1 -1
  83. package/survey/ZodFrcsSurveyFileJson.js +2 -1
  84. package/survey/ZodFrcsSurveyFileJson.js.map +1 -1
  85. package/survey/ZodFrcsSurveyFileToJson.d.ts +280 -280
  86. package/survey/formatFrcsShot.d.ts.map +1 -1
  87. package/survey/formatFrcsShot.js +3 -4
  88. package/survey/formatFrcsShot.js.map +1 -1
  89. package/survey/normalizeTeamMemberName.d.ts +1 -0
  90. package/survey/normalizeTeamMemberName.d.ts.map +1 -1
  91. package/survey/normalizeTeamMemberName.js +11 -1
  92. package/survey/normalizeTeamMemberName.js.map +1 -1
  93. package/survey/parseFrcsSurveyFile.d.ts +1 -1
  94. package/survey/parseFrcsSurveyFile.d.ts.map +1 -1
  95. package/survey/parseFrcsSurveyFile.js +128 -12
  96. package/survey/parseFrcsSurveyFile.js.map +1 -1
  97. package/cli/check-survey-correspondence.d.ts.map +0 -1
  98. package/cli/check-survey-correspondence.js.map +0 -1
  99. package/cli/check-survey.d.ts.map +0 -1
  100. package/cli/check-survey.js.map +0 -1
  101. package/cli/summarize-survey.d.ts.map +0 -1
  102. package/cli/summarize-survey.js.map +0 -1
@@ -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","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","currentUnits","unwrapInvalid","units","distanceUnit","Length","inches","meters","feet","addCommentLine","replace","header","name","comment","join","date","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","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","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 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 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 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 = {\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"],"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","inBlockComment","section","sectionLoc","commentFromStationLruds","Map","unitsChanged","alternateUnits","nextShotUnits","lineNumber","line","lineStartIndex","lineIssues","tripIssues","began","startIndex","chunksToLines","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 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 +0,0 @@
1
- {"version":3,"file":"check-survey-correspondence.d.ts","sourceRoot":"","sources":["../../src/cli/check-survey-correspondence.ts"],"names":[],"mappings":"AASA,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,iBAqCpB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-survey-correspondence.js","names":["_chalk","_interopRequireDefault","require","_index","_promises","_summarizeSurvey","_index2","_formatFrcsTripSummaryFile","_util","checkSurveyCorrespondence","surveyFile","summaryFile","source","fs","readFile","parsedSurvey","parseFrcsSurveyFile","parsedSummaries","parseFrcsTripSummaryFile","indexBy","tripSummaries","sort","a","b","tripNumber","convertedSummaries","summarizeSurvey","ignoreVerticalOfHShots","errored","i","Math","max","length","parsed","converted","parsedLines","formatFrcsTripSummaryFile","slice","convertedLines","isDeepStrictEqual","console","log","map","line","chalk","green","join","red","process","exit"],"sources":["../../src/cli/check-survey-correspondence.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport chalk from 'chalk'\nimport { parseFrcsSurveyFile } from '../string/index'\nimport fs from 'fs/promises'\nimport { summarizeSurvey } from '../survey/summarizeSurvey'\nimport { parseFrcsTripSummaryFile } from '../node/index.js'\nimport { formatFrcsTripSummaryFile } from '../formatFrcsTripSummaryFile.js'\nimport { isDeepStrictEqual } from 'util'\n\nexport async function checkSurveyCorrespondence(\n surveyFile: string,\n summaryFile: string\n) {\n const source = await fs.readFile(surveyFile, 'utf8')\n const parsedSurvey = await parseFrcsSurveyFile(surveyFile, source)\n const parsedSummaries = (\n await parseFrcsTripSummaryFile(summaryFile, { indexBy: 'occurrence' })\n ).tripSummaries.sort((a, b) => (a?.tripNumber ?? 0) - (b?.tripNumber ?? 0))\n const convertedSummaries = summarizeSurvey(parsedSurvey, {\n ignoreVerticalOfHShots: true,\n }).tripSummaries.sort((a, b) => (a?.tripNumber ?? 0) - (b?.tripNumber ?? 0))\n\n let errored = false\n\n for (\n let i = 0;\n i < Math.max(parsedSummaries.length, convertedSummaries.length);\n i++\n ) {\n const parsed = parsedSummaries[i]\n const converted = convertedSummaries[i]\n\n const parsedLines = [\n ...formatFrcsTripSummaryFile({ tripSummaries: [parsed] }),\n ].slice(0, 2)\n const convertedLines = [\n ...formatFrcsTripSummaryFile({ tripSummaries: [converted] }),\n ].slice(0, 2)\n\n if (!isDeepStrictEqual(parsedLines, convertedLines)) {\n errored = true\n console.log(\n convertedLines.map((line) => chalk.green('+' + line)).join('\\n')\n )\n console.log(parsedLines.map((line) => chalk.red('-' + line)).join('\\n'))\n }\n }\n process.exit(errored ? 1 : 0)\n}\n"],"mappings":";;;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,0BAAA,GAAAL,OAAA;AACA,IAAAM,KAAA,GAAAN,OAAA;AAPA;;AASO,eAAeO,yBAAyBA,CAC7CC,UAAkB,EAClBC,WAAmB,EACnB;EACA,MAAMC,MAAM,GAAG,MAAMC,iBAAE,CAACC,QAAQ,CAACJ,UAAU,EAAE,MAAM,CAAC;EACpD,MAAMK,YAAY,GAAG,MAAM,IAAAC,0BAAmB,EAACN,UAAU,EAAEE,MAAM,CAAC;EAClE,MAAMK,eAAe,GAAG,CACtB,MAAM,IAAAC,gCAAwB,EAACP,WAAW,EAAE;IAAEQ,OAAO,EAAE;EAAa,CAAC,CAAC,EACtEC,aAAa,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK,CAACD,CAAC,EAAEE,UAAU,IAAI,CAAC,KAAKD,CAAC,EAAEC,UAAU,IAAI,CAAC,CAAC,CAAC;EAC3E,MAAMC,kBAAkB,GAAG,IAAAC,gCAAe,EAACX,YAAY,EAAE;IACvDY,sBAAsB,EAAE;EAC1B,CAAC,CAAC,CAACP,aAAa,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK,CAACD,CAAC,EAAEE,UAAU,IAAI,CAAC,KAAKD,CAAC,EAAEC,UAAU,IAAI,CAAC,CAAC,CAAC;EAE5E,IAAII,OAAO,GAAG,KAAK;EAEnB,KACE,IAAIC,CAAC,GAAG,CAAC,EACTA,CAAC,GAAGC,IAAI,CAACC,GAAG,CAACd,eAAe,CAACe,MAAM,EAAEP,kBAAkB,CAACO,MAAM,CAAC,EAC/DH,CAAC,EAAE,EACH;IACA,MAAMI,MAAM,GAAGhB,eAAe,CAACY,CAAC,CAAC;IACjC,MAAMK,SAAS,GAAGT,kBAAkB,CAACI,CAAC,CAAC;IAEvC,MAAMM,WAAW,GAAG,CAClB,GAAG,IAAAC,oDAAyB,EAAC;MAAEhB,aAAa,EAAE,CAACa,MAAM;IAAE,CAAC,CAAC,CAC1D,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACb,MAAMC,cAAc,GAAG,CACrB,GAAG,IAAAF,oDAAyB,EAAC;MAAEhB,aAAa,EAAE,CAACc,SAAS;IAAE,CAAC,CAAC,CAC7D,CAACG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAEb,IAAI,CAAC,IAAAE,uBAAiB,EAACJ,WAAW,EAAEG,cAAc,CAAC,EAAE;MACnDV,OAAO,GAAG,IAAI;MACdY,OAAO,CAACC,GAAG,CACTH,cAAc,CAACI,GAAG,CAAEC,IAAI,IAAKC,cAAK,CAACC,KAAK,CAAC,GAAG,GAAGF,IAAI,CAAC,CAAC,CAACG,IAAI,CAAC,IAAI,CACjE,CAAC;MACDN,OAAO,CAACC,GAAG,CAACN,WAAW,CAACO,GAAG,CAAEC,IAAI,IAAKC,cAAK,CAACG,GAAG,CAAC,GAAG,GAAGJ,IAAI,CAAC,CAAC,CAACG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E;EACF;EACAE,OAAO,CAACC,IAAI,CAACrB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-survey.d.ts","sourceRoot":"","sources":["../../src/cli/check-survey.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,iBAgB7C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-survey.js","names":["_promises","_interopRequireDefault","require","_parseFrcsSurveyFile","_chalk","_formatIssues","checkSurvey","file","source","fs","readFile","parsed","parseFrcsSurveyFile","issues","console","log","formatIssues","errorStyle","chalk","red","warningStyle","yellow","process","exit","some","i","type"],"sources":["../../src/cli/check-survey.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport fs from 'fs/promises'\nimport parseFrcsSurveyFile from '../survey/parseFrcsSurveyFile'\nimport chalk from 'chalk'\nimport { formatIssues } from '../formatIssues.js'\n\nexport async function checkSurvey(file: string) {\n const source = await fs.readFile(file, 'utf8')\n const parsed = await parseFrcsSurveyFile(file, [source])\n\n const issues = parsed.issues || []\n console.log(\n formatIssues({\n file,\n source,\n parsed,\n errorStyle: chalk.red,\n warningStyle: chalk.yellow,\n })\n )\n\n process.exit(issues.some((i) => i.type === 'error') ? 1 : 0)\n}\n"],"mappings":";;;;;;;AACA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,oBAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AAJA;;AAMO,eAAeI,WAAWA,CAACC,IAAY,EAAE;EAC9C,MAAMC,MAAM,GAAG,MAAMC,iBAAE,CAACC,QAAQ,CAACH,IAAI,EAAE,MAAM,CAAC;EAC9C,MAAMI,MAAM,GAAG,MAAM,IAAAC,4BAAmB,EAACL,IAAI,EAAE,CAACC,MAAM,CAAC,CAAC;EAExD,MAAMK,MAAM,GAAGF,MAAM,CAACE,MAAM,IAAI,EAAE;EAClCC,OAAO,CAACC,GAAG,CACT,IAAAC,0BAAY,EAAC;IACXT,IAAI;IACJC,MAAM;IACNG,MAAM;IACNM,UAAU,EAAEC,cAAK,CAACC,GAAG;IACrBC,YAAY,EAAEF,cAAK,CAACG;EACtB,CAAC,CACH,CAAC;EAEDC,OAAO,CAACC,IAAI,CAACV,MAAM,CAACW,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,IAAI,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9D","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"summarize-survey.d.ts","sourceRoot":"","sources":["../../src/cli/summarize-survey.ts"],"names":[],"mappings":"AAQA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,iBAmBjD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"summarize-survey.js","names":["_chalk","_interopRequireDefault","require","_formatIssues","_index","_promises","_formatFrcsTripSummaryFile","_summarizeSurvey","summarizeSurvey","file","source","fs","readFile","parsed","parseFrcsSurveyFile","console","log","formatIssues","errorStyle","chalk","red","warningStyle","yellow","process","exit","line","formatFrcsTripSummaryFile","baseSummarizeSurvey"],"sources":["../../src/cli/summarize-survey.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport chalk from 'chalk'\nimport { formatIssues } from '../formatIssues'\nimport { parseFrcsSurveyFile } from '../string/index'\nimport fs from 'fs/promises'\nimport { formatFrcsTripSummaryFile } from '../formatFrcsTripSummaryFile'\nimport { summarizeSurvey as baseSummarizeSurvey } from '../survey/summarizeSurvey'\n\nexport async function summarizeSurvey(file: string) {\n const source = await fs.readFile(file, 'utf8')\n const parsed = await parseFrcsSurveyFile(file, source)\n if ('INVALID' in parsed) {\n console.log(\n formatIssues({\n file,\n source,\n parsed,\n errorStyle: chalk.red,\n warningStyle: chalk.yellow,\n })\n )\n process.exit(1)\n }\n\n for (const line of formatFrcsTripSummaryFile(baseSummarizeSurvey(parsed))) {\n console.log(line)\n }\n}\n"],"mappings":";;;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,0BAAA,GAAAJ,OAAA;AACA,IAAAK,gBAAA,GAAAL,OAAA;AANA;;AAQO,eAAeM,eAAeA,CAACC,IAAY,EAAE;EAClD,MAAMC,MAAM,GAAG,MAAMC,iBAAE,CAACC,QAAQ,CAACH,IAAI,EAAE,MAAM,CAAC;EAC9C,MAAMI,MAAM,GAAG,MAAM,IAAAC,0BAAmB,EAACL,IAAI,EAAEC,MAAM,CAAC;EACtD,IAAI,SAAS,IAAIG,MAAM,EAAE;IACvBE,OAAO,CAACC,GAAG,CACT,IAAAC,0BAAY,EAAC;MACXR,IAAI;MACJC,MAAM;MACNG,MAAM;MACNK,UAAU,EAAEC,cAAK,CAACC,GAAG;MACrBC,YAAY,EAAEF,cAAK,CAACG;IACtB,CAAC,CACH,CAAC;IACDC,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EACjB;EAEA,KAAK,MAAMC,IAAI,IAAI,IAAAC,oDAAyB,EAAC,IAAAC,gCAAmB,EAACd,MAAM,CAAC,CAAC,EAAE;IACzEE,OAAO,CAACC,GAAG,CAACS,IAAI,CAAC;EACnB;AACF","ignoreList":[]}