@speleotica/frcsdata 5.0.0-beta.3 → 5.0.0-beta.4
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
|
@@ -225,7 +225,24 @@ export default async function parseFrcsSurveyFile(
|
|
|
225
225
|
if (/^\*\s*%NC(\b|$)/.test(line)) {
|
|
226
226
|
unitsChanged = true
|
|
227
227
|
}
|
|
228
|
+
let match: RegExpMatchArray | null
|
|
229
|
+
if ((match = /^\*\s*%T([ITM])(\b|$)/.exec(line))) {
|
|
230
|
+
const currentUnits = alternateUnits || unwrapInvalid(trip)?.units
|
|
231
|
+
if (currentUnits && !('INVALID' in currentUnits)) {
|
|
232
|
+
alternateUnits = {
|
|
233
|
+
...currentUnits,
|
|
234
|
+
distanceUnit:
|
|
235
|
+
match[1] === 'I'
|
|
236
|
+
? Length.inches
|
|
237
|
+
: match[1] === 'M'
|
|
238
|
+
? Length.meters
|
|
239
|
+
: Length.feet,
|
|
240
|
+
}
|
|
241
|
+
nextShotUnits = alternateUnits
|
|
242
|
+
}
|
|
243
|
+
}
|
|
228
244
|
if (/^\*\s*%/.test(line)) {
|
|
245
|
+
inBlockComment = false
|
|
229
246
|
continue
|
|
230
247
|
}
|
|
231
248
|
if (/[^\s*]/.test(line)) {
|
|
@@ -326,7 +343,6 @@ export default async function parseFrcsSurveyFile(
|
|
|
326
343
|
up,
|
|
327
344
|
down,
|
|
328
345
|
},
|
|
329
|
-
excludeDistance: true,
|
|
330
346
|
comment: getComment(),
|
|
331
347
|
}
|
|
332
348
|
addShot(
|
|
@@ -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,EAItB,MAAM,kBAAkB,CAAA;AA0BzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,GACjB,GAAE,0BAA+B,GACjC,OAAO,CAAC,cAAc,GAAG,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"parseFrcsSurveyFile.d.ts","sourceRoot":"","sources":["../../src/survey/parseFrcsSurveyFile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAC1B,cAAc,EAId,qBAAqB,EAItB,MAAM,kBAAkB,CAAA;AA0BzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,GACjB,GAAE,0BAA+B,GACjC,OAAO,CAAC,cAAc,GAAG,qBAAqB,CAAC,CAkwBjD"}
|
|
@@ -169,7 +169,19 @@ chunks, {
|
|
|
169
169
|
if (/^\*\s*%NC(\b|$)/.test(line)) {
|
|
170
170
|
unitsChanged = true;
|
|
171
171
|
}
|
|
172
|
+
let match;
|
|
173
|
+
if (match = /^\*\s*%T([ITM])(\b|$)/.exec(line)) {
|
|
174
|
+
const currentUnits = alternateUnits || (0, _unwrapInvalid.unwrapInvalid)(trip)?.units;
|
|
175
|
+
if (currentUnits && !('INVALID' in currentUnits)) {
|
|
176
|
+
alternateUnits = {
|
|
177
|
+
...currentUnits,
|
|
178
|
+
distanceUnit: match[1] === 'I' ? _unitized.Length.inches : match[1] === 'M' ? _unitized.Length.meters : _unitized.Length.feet
|
|
179
|
+
};
|
|
180
|
+
nextShotUnits = alternateUnits;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
172
183
|
if (/^\*\s*%/.test(line)) {
|
|
184
|
+
inBlockComment = false;
|
|
173
185
|
continue;
|
|
174
186
|
}
|
|
175
187
|
if (/[^\s*]/.test(line)) {
|
|
@@ -253,7 +265,6 @@ chunks, {
|
|
|
253
265
|
up,
|
|
254
266
|
down
|
|
255
267
|
},
|
|
256
|
-
excludeDistance: true,
|
|
257
268
|
comment: getComment()
|
|
258
269
|
};
|
|
259
270
|
addShot(lineIssues.length ? {
|
|
@@ -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","addCommentLine","replace","header","name","comment","join","date","units","some","i","type","INVALID","shots","tripNumber","distanceUnit","unwrapInvalid","Length","feet","azimuthUnit","Angle","degrees","inclinationUnit","inches","ranges","feetAndInches","fromStation","fromStr","validate","isValidStation","from","lStr","left","isValidOptFloat","rStr","right","uStr","up","dStr","down","parseLrud","toStr","toStation","shot","to","distance","UnitizedNumber","frontsightAzimuth","backsightAzimuth","frontsightInclination","backsightInclination","fromLruds","excludeDistance","getComment","addShot","get","delete","fromLrudMatch","RegExp","s","azmFsStr","isValidOptUFloat","azmBsStr","incFsStr","incBsStr","horizontalDistance","verticalDistance","feetStr","distanceFeet","inchesStr","distanceInches","isValidUInt","Unitize","parseFloat","add","distStr","isValidUFloat","distNum","Number","isFinite","specialKindStr","kind","exclude","specialKind","parseSpecialKind","isSplay","isValidFloat","h","NaN","v","sqrt","atan2","in","d","asin","parseNumber","parseAzimuth","toLruds","forEach","every","t","parsedFromStationLruds","parseFromStationLruds","set","code","message","startColumn","endColumn","indicesArray","loc","start","column","end","parseLengthUnit","slice","parseAngleUnit","backsightAzimuthCorrected","backsightInclinationCorrected","hasBacksightAzimuth","hasBacksightInclination","fieldName","validator","field","toUpperCase","recorded","unwrappedAlternateUnits","unwrappedShot","opposite","negate","module","exports","default"],"sources":["../../src/survey/parseFrcsSurveyFile.ts"],"sourcesContent":["import { defaultFrcsShotColumnConfig } from './FrcsSurveyFile'\nimport type {\n ParseFrcsSurveyFileOptions,\n FrcsSurveyFile,\n FrcsTrip,\n FrcsUnits,\n FrcsShot,\n InvalidFrcsSurveyFile,\n InvalidFrcsUnits,\n InvalidFrcsTrip,\n InvalidFrcsShot,\n} from './FrcsSurveyFile'\nimport { Angle, Length, UnitizedNumber, Unitize } from '@speleotica/unitized'\nimport { ParseIssue, ParseIssueSeverity } from '../ParseIssue'\nimport { chunksToLines } from '../chunksToLines'\nimport {\n isValidStation,\n isValidOptFloat,\n isValidOptUFloat,\n isValidUInt,\n isValidUFloat,\n isValidFloat,\n} from './validators'\nimport { getColumnRanges } from './getColumnRanges'\nimport {\n parseFromStationLruds,\n parseLengthUnit,\n parseAngleUnit,\n parseMonth,\n parseLrud,\n parseSpecialKind,\n parseNumber,\n parseAzimuth,\n} from './parsers'\nimport { normalizeTeamMemberName } from './normalizeTeamMemberName'\nimport { unwrapInvalid } from '../unwrapInvalid'\n\n/**\n * Parses a raw cdata.fr survey file. These look like so:\n *\n <pre> Fisher Ridge Cave System, Hart Co., KY\n ENTRANCE DROPS, JOE'S \"I LOVE MY WIFE TRAVERSE\", TRICKY TRAVERSE\n PETER QUICK, KEITH ORTIZ - 2-15-81\n This File has Crumps test connected. 11/20/12\n *\n FT C DD A\n AE20 0 1 3 0 2\n * %FS\n * AE20 0 0 0 Bug-can't put before so put after-so can't make 2 fixed 10/28/12\n AE19 AE20 9.3 60.0 60.0-36.0 2 12 0 20\n AE18 AE19 24.5 0.0 0.0-90.0 6 10 25 0\n AE17 AE18 8.0 350.5 350.5 17.0 3 5 0 0\n AE16 AE17 6.7 0.0 0.0-90.0 3 5 6 1\n AE15 AE16 12.6 70.5 71.0-18.0 4 0 2 1\n AE14 AE15 10.0 21.5 20.0 6.0 5 5 0 3\n AE13 AE14 26.8 288.0 286.0-50.0 0 7 20 5\n *\n *SHORT CANYON AT THE BASE OF THE SECOND DROP\n AE12 AE13 20.7 236.0 236.0 34.0 3 5 4 4\n AE11 AE12 12.4 210.0 210.0 35.0 7 4 5 1\n AE10 AE13 25.7 40.0 40.0 -9.0 2 2 3 6\n *\n *AE10 AT JOE'S \" I LOVE MY WIFE TRAVERSE \"\n AE9 AE10 17.8 32.5 31.0 23.0 4 5 20 15\n AE1 AE9 13.7 82.0 82.0-13.0\n A1 AE1 34.3 46.0 48.0-17.5\n *\n *SURVEY TO DOME NEAR THE ENTRANCE DOME (ABOVE THE SECOND DROP)\n AD1 AE15 8.0 200.0 200.0 0.0 3 1 1 1\n AD2 AD1 17.7 161.0 161.0 7.0 1 4 25 1\n AD3 AD2 10.4 180.0 180.0 50.0 4 1 15 5\n *\n TRICKY TRAVERSE AND THEN FIRST SURVEY IN UPPER CROWLWAY\n DAN CROWL, KEITH ORTIZ, CHIP HOPPER, PETER QUICK, LARRY BEAN 14 FEB 1981\n *\n FI B DD\n A2 A1 48 10 292.0 110.0-42.0 5 10 35 5\n A3 A2 12 5 333.5 153.5 35.0 3 1 15 5\n A4 A3 4 2 0.0 0.0 90.0 3 1 10 10\n ...</pre>\n *\n */\nexport default async function parseFrcsSurveyFile(\n file: any, // eslint-disable-line @typescript-eslint/no-explicit-any\n chunks: Iterable<string> | AsyncIterable<string>,\n {\n columns = defaultFrcsShotColumnConfig,\n outputColumns = false,\n normalizeNames = true,\n suppressWarnings,\n }: ParseFrcsSurveyFileOptions = {}\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile> {\n const columnRanges = getColumnRanges(columns)\n const maxRange = Math.max(\n ...Object.values(columnRanges.decimal).map((r) => r[1])\n )\n\n let cave: string | undefined = undefined\n let location: string | undefined = undefined\n const trips: (FrcsTrip | InvalidFrcsTrip)[] = []\n const issues: ParseIssue[] = []\n\n let tripName: string | undefined\n let tripTeam: string[] | undefined\n let tripDate: Date | undefined\n let inTripComment = true\n let tripCommentStartLine = 1\n let tripCommentEndLine = -1\n const tripComment: string[] = []\n const commentLines: string[] = []\n let trip: FrcsTrip | InvalidFrcsTrip | undefined = undefined\n let inBlockComment = false\n let section\n const commentFromStationLruds = new Map<\n string,\n NonNullable<FrcsShot['fromLruds']>\n >()\n\n let unitsChanged = false\n let alternateUnits: FrcsUnits | InvalidFrcsUnits | undefined\n let nextShotUnits: FrcsUnits | InvalidFrcsUnits | undefined\n\n let lineNumber = 0\n let line: string\n let lineStartIndex = 0\n\n let lineIssues: number[] = []\n let tripIssues: number[] = []\n\n let began = false\n\n for await ({ line, startIndex: lineStartIndex } of chunksToLines(chunks)) {\n if (lineIssues.length) lineIssues = []\n\n lineNumber++\n\n if (!began) {\n began = true\n if (/^\\s+\\*/.test(line)) {\n continue\n }\n const match = /^\\s*([^,]+)(,(.*))?/.exec(line)\n if (match) {\n cave = match[1].trim()\n if (match[3]) {\n location = match[3].trim()\n }\n }\n }\n\n if (unitsChanged) {\n unitsChanged = false\n alternateUnits = parseUnits()\n nextShotUnits = alternateUnits\n } else if (/^\\s{1,8}\\*(?!\\*)/.test(line)) {\n inTripComment = !inTripComment\n alternateUnits = nextShotUnits = undefined\n unitsChanged = false\n if (inTripComment) {\n section = undefined\n tripTeam = undefined\n tripDate = undefined\n tripComment.length = 0\n tripCommentStartLine = lineNumber\n } else {\n tripCommentEndLine = lineNumber\n }\n } else if (inTripComment) {\n if (lineNumber === tripCommentStartLine + 1) {\n tripName = line && line.trim()\n } else if (lineNumber === tripCommentStartLine + 2) {\n const dateMatch =\n /(?:[-.]\\s*)?((\\d+)[-/](\\d+)[-/](\\d{2,4})|((\\d+)[-/ ](january|february|march|april|may|june|july|august|september|october|november|december|(?:jan|feb|mar|apr|jun|jul|aug|sept?|oct|nov|dec)\\.?)[-/ ](\\d{2,4}))|((january|february|march|april|may|june|july|august|september|october|november|december|(?:jan|feb|mar|apr|jun|jul|aug|sept?|oct|nov|dec)\\.?)\\s+(\\d+)(?:,\\s*|,?\\s+)(\\d{2,4})))/i.exec(\n line\n )\n if (dateMatch) {\n const team = line.substring(0, dateMatch.index)\n tripTeam = team\n .split(team.indexOf(';') >= 0 ? ';' : ',')\n .flatMap((member) => member.trim() || [])\n if (!tripTeam.length) {\n addIssue(\n 'warning',\n 'missingTripTeam',\n 'Missing team',\n 0,\n dateMatch.index,\n tripIssues\n )\n }\n if (normalizeNames) tripTeam = tripTeam.map(normalizeTeamMemberName)\n let month, day, year\n if (dateMatch[2]) {\n month = parseInt(dateMatch[2])\n day = parseInt(dateMatch[3])\n year = parseInt(dateMatch[4])\n } else if (dateMatch[6]) {\n day = parseInt(dateMatch[6])\n month = parseMonth(dateMatch[7])\n year = parseInt(dateMatch[8])\n } else {\n month = parseMonth(dateMatch[10])\n day = parseInt(dateMatch[11])\n year = parseInt(dateMatch[12])\n }\n tripDate = new Date(year < 60 ? year + 2000 : year, month - 1, day)\n } else {\n addIssue(\n 'warning',\n 'missingTripDate',\n 'Missing date',\n line.length,\n line.length,\n tripIssues\n )\n }\n } else if (lineNumber > 1) {\n tripComment.push(line)\n }\n const match = /^\\*\\*\\*([^*]+)\\*\\*\\*/.exec(line)\n if (match) {\n section = match[1].trim()\n }\n } else if (/^(\\s{9,}|)\\*(?!\\*)/.test(line)) {\n if (/^\\*\\s*%NC(\\b|$)/.test(line)) {\n unitsChanged = true\n }\n if (/^\\*\\s*%/.test(line)) {\n continue\n }\n if (/[^\\s*]/.test(line)) {\n addCommentLine(line.replace(/^\\s*\\*/, ''))\n inBlockComment = false\n } else {\n inBlockComment = !inBlockComment\n if (inBlockComment) commentLines.length = 0\n }\n } else if (inBlockComment) {\n addCommentLine(line)\n } else if (lineNumber === tripCommentEndLine + 1) {\n if (trip) trips.push(trip)\n const header = {\n name: tripName || '',\n comment: (tripComment && tripComment.join('\\n')) || undefined,\n section,\n date: tripDate,\n team: tripTeam,\n }\n const units = parseUnits()\n if (\n 'INVALID' in units ||\n tripIssues.some((i) => issues[i]?.type === 'error')\n ) {\n trip = {\n INVALID: {\n header,\n units,\n shots: [],\n },\n ...(tripIssues.length ? { issues: tripIssues } : {}),\n }\n } else {\n trip = {\n tripNumber: 1,\n header,\n units,\n shots: [],\n }\n }\n tripIssues = []\n } else if (trip) {\n let distanceUnit =\n unwrapInvalid(alternateUnits)?.distanceUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).distanceUnit ||\n Length.feet\n const azimuthUnit =\n unwrapInvalid(alternateUnits)?.azimuthUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).azimuthUnit ||\n Angle.degrees\n const inclinationUnit =\n unwrapInvalid(alternateUnits)?.inclinationUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).inclinationUnit ||\n Angle.degrees\n\n const inches = distanceUnit === Length.inches\n if (inches) distanceUnit = Length.feet\n\n const ranges = inches ? columnRanges.feetAndInches : columnRanges.decimal\n\n // from station name\n if (!/\\S/.test(line.substring(...ranges.fromStation))) continue\n const fromStr = validate(\n ...ranges.fromStation,\n 'from station',\n isValidStation\n )\n const from = fromStr.trim()\n\n // Sadly I have found negative LRUD values in Chip's format and apparently\n // his program doesn't fail on them, so I have to accept them here\n // isValidOptFloat instead of isValidOptUFloat\n const lStr = validate(...ranges.left, 'left', isValidOptFloat)\n const rStr = validate(...ranges.right, 'right', isValidOptFloat)\n const uStr = validate(...ranges.up, 'up', isValidOptFloat)\n const dStr = validate(...ranges.down, 'down', isValidOptFloat)\n\n const up = parseLrud(uStr, distanceUnit)\n const down = parseLrud(dStr, distanceUnit)\n const left = parseLrud(lStr, distanceUnit)\n const right = parseLrud(rStr, distanceUnit)\n\n // to station name\n const toStr = line.substring(...ranges.toStation)\n if (!toStr.trim()) {\n const shot: FrcsShot = {\n from,\n to: undefined,\n distance: new UnitizedNumber(0, distanceUnit),\n frontsightAzimuth: undefined,\n backsightAzimuth: undefined,\n frontsightInclination: undefined,\n backsightInclination: undefined,\n fromLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance: true,\n comment: getComment(),\n }\n addShot(\n lineIssues.length ? { INVALID: shot, issues: lineIssues } : shot\n )\n continue\n }\n if (!isValidStation(toStr)) {\n addIssue(\n 'error',\n 'invalidStationName',\n 'Invalid station name',\n ...ranges.toStation\n )\n }\n\n let fromLruds = commentFromStationLruds.get(from)\n if (fromLruds) {\n commentFromStationLruds.delete(from)\n } else {\n const fromLrudMatch = new RegExp(\n `^\\\\s+${fromStr\n .trim()\n .replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&'\n )}((\\\\s+(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)){4})`\n ).exec(line.substring(maxRange))\n if (fromLrudMatch) {\n const [left, right, up, down] = fromLrudMatch[1]\n .trim()\n .split(/\\s+/g)\n .map((s) => parseLrud(s, distanceUnit))\n fromLruds = { left, right, up, down }\n }\n }\n\n const comment = getComment()\n\n // azimuth and inclination\n const azmFsStr = validate(\n ranges.frontsightAzimuth[0],\n ranges.frontsightAzimuth[1],\n 'azimuth',\n isValidOptUFloat\n )\n const azmBsStr = validate(\n ...ranges.backsightAzimuth,\n 'azimuth',\n isValidOptUFloat\n )\n const incFsStr = line.substring(...ranges.frontsightInclination)\n const incBsStr = line.substring(...ranges.backsightInclination)\n\n let distance: UnitizedNumber<Length> | undefined\n let horizontalDistance: UnitizedNumber<Length> | undefined\n let verticalDistance: UnitizedNumber<Length> | undefined\n let frontsightInclination: UnitizedNumber<Angle> | undefined\n let backsightInclination: UnitizedNumber<Angle> | undefined\n\n // parse distance\n if (inches) {\n const feetStr = validate(\n ...ranges.distanceFeet,\n 'feet',\n isValidOptUFloat\n )\n const inchesStr = validate(\n ...ranges.distanceInches,\n 'inches',\n isValidOptUFloat\n )\n if (!/\\S/.test(feetStr) && !/\\S/.test(inchesStr)) {\n addIssue(\n 'error',\n 'missingDistance',\n 'Missing distance',\n ranges.distanceFeet[0],\n ranges.distanceInches[1]\n )\n }\n // sometimes inches are omitted, hence the || 0...I'm assuming it's possible\n // for feet to be omitted as well\n else if (\n (isValidUInt(feetStr) && isValidOptUFloat(inchesStr)) ||\n (isValidOptUFloat(feetStr) && isValidUInt(inchesStr))\n ) {\n distance = Unitize.inches(parseFloat(inchesStr) || 0).add(\n Unitize.feet(parseFloat(feetStr) || 0)\n )\n }\n // NOTE there are two columns around here that can contain a *.\n // I think they might represent different values, but thisis confused by\n // the fact that for ft/in shots, if there is a D or H flag it occupies the\n // first column that can contain a * for decimal feet shots\n } else {\n const distStr = validate(...ranges.distance, 'distance', isValidUFloat)\n const distNum = parseFloat(distStr)\n distance = Number.isFinite(distNum)\n ? new UnitizedNumber(distNum, distanceUnit)\n : undefined\n }\n const specialKindStr = line.substring(...ranges.kind).trim()\n const exclude = line.substring(...ranges.exclude).trim()\n const specialKind = parseSpecialKind(specialKindStr)\n\n if (specialKindStr && !specialKind) {\n addIssue(\n 'error',\n 'invalidShotType',\n 'Invalid shot type',\n ranges.kind[0],\n ranges.kind[1]\n )\n }\n\n const excludeDistance = exclude === '*' || exclude === 's'\n const isSplay = exclude === 's'\n\n if (exclude && !excludeDistance) {\n addIssue(\n 'error',\n 'invalidShotFlag',\n 'Invalid shot flag',\n ranges.exclude[0],\n ranges.exclude[1]\n )\n }\n\n if (specialKind) {\n validate(\n ...ranges.frontsightInclination,\n 'vertical-distance',\n isValidFloat\n )\n }\n\n // convert horizontal and diagonal shots to standard\n // in this case incFs is the vertical offset between stations\n // fortunately it appears we can always count on incFs being specified\n // and incBs not being specified for these types of shots\n if (specialKind === 'horizontal') {\n // distance is horizontal offset and incFsStr is vertical offset\n horizontalDistance = distance\n const h = horizontalDistance?.get(distanceUnit) ?? NaN\n const v = parseFloat(incFsStr)\n verticalDistance = Number.isFinite(v)\n ? new UnitizedNumber(v, distanceUnit)\n : undefined\n distance = new UnitizedNumber(Math.sqrt(h * h + v * v), distanceUnit)\n frontsightInclination =\n verticalDistance && horizontalDistance\n ? Angle.atan2(verticalDistance, horizontalDistance).in(\n inclinationUnit\n )\n : undefined\n backsightInclination = undefined\n } else if (specialKind === 'diagonal') {\n // distance is as usual, but incFsStr is vertical offset\n const d = distance?.get(distanceUnit) ?? NaN\n const v = parseFloat(incFsStr)\n verticalDistance = Number.isFinite(v)\n ? new UnitizedNumber(v, distanceUnit)\n : undefined\n frontsightInclination = Angle.asin(v / d).in(inclinationUnit)\n backsightInclination = undefined\n } else {\n // frontsight inclination\n validate(\n ...ranges.frontsightInclination,\n 'inclination',\n isValidOptFloat\n )\n // backsight inclination\n validate(...ranges.backsightInclination, 'inclination', isValidOptFloat)\n frontsightInclination = parseNumber(incFsStr, inclinationUnit)\n backsightInclination = parseNumber(incBsStr, inclinationUnit)\n }\n\n const frontsightAzimuth = parseAzimuth(azmFsStr, azimuthUnit)\n const backsightAzimuth = parseAzimuth(azmBsStr, azimuthUnit)\n\n if (!/\\S/.test(incFsStr) && !/\\S/.test(incBsStr)) {\n frontsightInclination = Unitize.degrees(0)\n }\n\n if (from && distance && !lineIssues.length) {\n const shot: FrcsShot = {\n from,\n to: toStr.trim(),\n specialKind,\n distance,\n frontsightAzimuth,\n backsightAzimuth,\n frontsightInclination,\n backsightInclination,\n toLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance,\n comment,\n }\n if (isSplay) shot.isSplay = true\n if (fromLruds) shot.fromLruds = fromLruds\n if (horizontalDistance) shot.horizontalDistance = horizontalDistance\n if (verticalDistance) shot.verticalDistance = verticalDistance\n addShot(shot)\n } else {\n const shot: InvalidFrcsShot['INVALID'] = {\n from,\n to: toStr.trim(),\n specialKind,\n distance,\n frontsightAzimuth,\n backsightAzimuth,\n frontsightInclination,\n backsightInclination,\n toLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance,\n comment,\n }\n if (isSplay) shot.isSplay = true\n if (fromLruds) shot.fromLruds = fromLruds\n if (horizontalDistance) shot.horizontalDistance = horizontalDistance\n if (verticalDistance) shot.verticalDistance = verticalDistance\n addShot({ INVALID: shot, issues: lineIssues })\n }\n }\n }\n\n if (trip) trips.push(trip)\n\n trips.forEach((trip, index) => (unwrapInvalid(trip).tripNumber = index + 1))\n\n if (\n !issues.some((i) => i.type === 'error') &&\n trips.every((t): t is FrcsTrip => !('INVALID' in t))\n ) {\n return {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n ...(issues.length ? { issues } : undefined),\n }\n }\n\n return {\n INVALID: {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n },\n issues,\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////\n\n function getComment(): string | undefined {\n if (!commentLines?.length) return undefined\n const comment = commentLines.join('\\n').trim()\n commentLines.length = 0\n return comment || undefined\n }\n\n function addCommentLine(comment: string): void {\n if (trip) {\n const distanceUnit =\n unwrapInvalid(alternateUnits)?.distanceUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).distanceUnit ||\n Length.feet\n const parsedFromStationLruds = parseFromStationLruds(\n comment,\n distanceUnit\n )\n if (parsedFromStationLruds) {\n commentFromStationLruds.set(\n parsedFromStationLruds[0],\n parsedFromStationLruds[1]\n )\n return\n }\n }\n if (commentLines) {\n commentLines.push(comment)\n }\n }\n\n function addIssue(\n type: ParseIssueSeverity,\n code: string,\n message: string,\n startColumn: number,\n endColumn: number,\n indicesArray?: number[]\n ) {\n if (\n suppressWarnings &&\n type === 'warning' &&\n (suppressWarnings === true ||\n ('code' in suppressWarnings &&\n suppressWarnings[code as keyof typeof suppressWarnings] === true))\n ) {\n return\n }\n\n issues.push({\n type,\n code,\n message,\n loc: {\n start: {\n line: lineNumber,\n column: startColumn,\n index: lineStartIndex + startColumn,\n },\n end: {\n line: lineNumber,\n column: endColumn,\n index: lineStartIndex + endColumn,\n },\n },\n })\n if (!lineIssues) lineIssues = []\n lineIssues.push(issues.length - 1)\n indicesArray?.push(issues.length - 1)\n }\n\n function parseUnits(): FrcsUnits | InvalidFrcsUnits {\n // FT CC DD\n // 01234567\n const distanceUnit = parseLengthUnit(line.slice(0, 2))\n if (!distanceUnit) {\n addIssue('error', 'invalidDistanceUnit', 'Invalid distance unit', 0, 2)\n }\n const azimuthUnit = parseAngleUnit(line[6])\n if (!azimuthUnit) {\n addIssue('error', 'invalidAzimuthUnit', 'Invalid azimuth unit', 6, 7)\n }\n const inclinationUnit = parseAngleUnit(line[7])\n if (!inclinationUnit) {\n addIssue(\n 'error',\n 'invalidInclinationUnit',\n 'Invalid inclination unit',\n 7,\n 8\n )\n }\n const backsightAzimuthCorrected = line[3] === 'C'\n const backsightInclinationCorrected = line[4] === 'C'\n const hasBacksightAzimuth = line[3] !== ' ' && line[3] !== '-'\n const hasBacksightInclination = line[4] !== ' ' && line[4] !== '-'\n\n if (!/[-CB ]/.test(line[3])) {\n addIssue(\n 'error',\n 'invalidBacksightAzimuthType',\n 'Invalid backsight azimuth type',\n 3,\n 4\n )\n }\n if (!/[-CB ]/.test(line[4])) {\n addIssue(\n 'error',\n 'invalidBacksightInclinationType',\n 'Invalid backsight inclination type',\n 4,\n 5\n )\n }\n\n if (!distanceUnit || !azimuthUnit || !inclinationUnit) {\n return {\n INVALID: {\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n hasBacksightAzimuth,\n hasBacksightInclination,\n },\n issues: lineIssues,\n }\n }\n\n return {\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n hasBacksightAzimuth,\n hasBacksightInclination,\n }\n }\n\n function validate(\n startColumn: number,\n endColumn: number,\n fieldName: string,\n validator: (value: string) => boolean\n ): string {\n const field = line.substring(startColumn, endColumn)\n if (!validator(field)) {\n addIssue(\n 'error',\n `${\n field.trim() ? 'invalid' : 'missing'\n }${fieldName[0].toUpperCase()}${fieldName.substring(1)}`,\n (field.trim() ? 'Invalid ' : 'Missing ') + fieldName,\n startColumn,\n endColumn\n )\n }\n return field\n }\n\n function addShot(shot: FrcsShot | InvalidFrcsShot) {\n if (!trip) return\n if (alternateUnits) {\n const recorded:\n | FrcsShot['recorded']\n | InvalidFrcsShot['INVALID']['recorded'] = shot\n if ('INVALID' in shot) {\n shot = {\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","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":[]}
|