@speleotica/frcsdata 4.3.1 → 5.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ParseIssue.d.ts +98 -0
- package/ParseIssue.d.ts.map +1 -0
- package/ParseIssue.js +17 -0
- package/ParseIssue.js.map +1 -0
- package/SourceLoc.d.ts +67 -0
- package/SourceLoc.d.ts.map +1 -0
- package/SourceLoc.js +18 -0
- package/SourceLoc.js.map +1 -0
- package/chunksToLines.d.ts +5 -0
- package/chunksToLines.d.ts.map +1 -0
- package/chunksToLines.js +37 -0
- package/chunksToLines.js.map +1 -0
- package/cli/check-survey-correspondence.d.ts +2 -0
- package/cli/check-survey-correspondence.d.ts.map +1 -0
- package/cli/check-survey-correspondence.js +44 -0
- package/cli/check-survey-correspondence.js.map +1 -0
- package/cli/check-survey.d.ts +2 -0
- package/cli/check-survey.d.ts.map +1 -0
- package/cli/check-survey.js +27 -0
- package/cli/check-survey.js.map +1 -0
- package/cli/parse-survey.d.ts +2 -0
- package/cli/parse-survey.d.ts.map +1 -0
- package/cli/parse-survey.js +15 -0
- package/cli/parse-survey.js.map +1 -0
- package/cli/summarize-survey.d.ts +2 -0
- package/cli/summarize-survey.d.ts.map +1 -0
- package/cli/summarize-survey.js +33 -0
- package/cli/summarize-survey.js.map +1 -0
- package/cli.d.ts +2 -0
- package/cli.d.ts.map +1 -0
- package/cli.js +72 -0
- package/cli.js.map +1 -0
- package/formatFrcsTripSummaryFile.d.ts +3 -0
- package/formatFrcsTripSummaryFile.d.ts.map +1 -0
- package/formatFrcsTripSummaryFile.js +33 -0
- package/formatFrcsTripSummaryFile.js.map +1 -0
- package/formatIssues.d.ts +10 -0
- package/formatIssues.d.ts.map +1 -0
- package/formatIssues.js +52 -0
- package/formatIssues.js.map +1 -0
- package/index.d.ts +5 -7
- package/index.d.ts.map +1 -1
- package/index.js +16 -49
- package/index.js.map +1 -1
- package/node/index.d.ts +4 -2
- package/node/index.d.ts.map +1 -1
- package/node/index.js +6 -12
- package/node/index.js.map +1 -1
- package/package.json +8 -6
- package/parseFrcsPlotFile.js +112 -245
- package/parseFrcsPlotFile.js.map +1 -1
- package/parseFrcsTripSummaryFile.d.ts +3 -1
- package/parseFrcsTripSummaryFile.d.ts.map +1 -1
- package/parseFrcsTripSummaryFile.js +53 -119
- package/parseFrcsTripSummaryFile.js.map +1 -1
- package/src/ParseIssue.ts +19 -0
- package/src/SourceLoc.ts +13 -0
- package/src/chunksToLines.ts +26 -0
- package/src/cli/check-survey-correspondence.ts +49 -0
- package/src/cli/check-survey.ts +23 -0
- package/src/cli/parse-survey.ts +10 -0
- package/src/cli/summarize-survey.ts +28 -0
- package/src/cli.ts +63 -0
- package/src/formatFrcsTripSummaryFile.ts +45 -0
- package/src/formatIssues.ts +97 -0
- package/src/index.ts +9 -7
- package/src/node/index.ts +18 -5
- package/src/parseFrcsTripSummaryFile.ts +8 -2
- package/src/string/index.ts +18 -5
- package/src/survey/FrcsSurveyFile.ts +217 -0
- package/src/survey/FrcsSurveyFileJson.ts +46 -0
- package/src/survey/ZodFrcsSurveyFileJson.ts +260 -0
- package/src/survey/ZodFrcsSurveyFileToJson.ts +297 -0
- package/src/{formatFrcsShot.ts → survey/formatFrcsShot.ts} +39 -22
- package/src/{formatFrcsSurveyFile.ts → survey/formatFrcsSurveyFile.ts} +4 -5
- package/src/survey/getColumnRanges.ts +82 -0
- package/src/survey/normalizeTeamMemberName.ts +7 -0
- package/src/survey/parseFrcsSurveyFile.ts +848 -0
- package/src/survey/parsers.ts +128 -0
- package/src/survey/summarizeSurvey.ts +51 -0
- package/src/survey/validators.ts +24 -0
- package/src/underlineSource.ts +34 -0
- package/src/unwrapInvalid.ts +3 -0
- package/src/web/index.ts +27 -21
- package/string/index.d.ts +4 -2
- package/string/index.d.ts.map +1 -1
- package/string/index.js +8 -34
- package/string/index.js.map +1 -1
- package/survey/FrcsSurveyFile.d.ts +172 -0
- package/survey/FrcsSurveyFile.d.ts.map +1 -0
- package/{FrcsSurveyFile.js → survey/FrcsSurveyFile.js} +3 -1
- package/survey/FrcsSurveyFile.js.map +1 -0
- package/survey/FrcsSurveyFileJson.d.ts +15 -0
- package/survey/FrcsSurveyFileJson.d.ts.map +1 -0
- package/{FrcsTrip.js → survey/FrcsSurveyFileJson.js} +1 -1
- package/survey/FrcsSurveyFileJson.js.map +1 -0
- package/survey/ZodFrcsSurveyFileJson.d.ts +60549 -0
- package/survey/ZodFrcsSurveyFileJson.d.ts.map +1 -0
- package/survey/ZodFrcsSurveyFileJson.js +186 -0
- package/survey/ZodFrcsSurveyFileJson.js.map +1 -0
- package/survey/ZodFrcsSurveyFileToJson.d.ts +60390 -0
- package/survey/ZodFrcsSurveyFileToJson.d.ts.map +1 -0
- package/survey/ZodFrcsSurveyFileToJson.js +209 -0
- package/survey/ZodFrcsSurveyFileToJson.js.map +1 -0
- package/{formatFrcsShot.d.ts → survey/formatFrcsShot.d.ts} +2 -3
- package/survey/formatFrcsShot.d.ts.map +1 -0
- package/survey/formatFrcsShot.js +107 -0
- package/survey/formatFrcsShot.js.map +1 -0
- package/survey/formatFrcsSurveyFile.d.ts +3 -0
- package/survey/formatFrcsSurveyFile.d.ts.map +1 -0
- package/survey/formatFrcsSurveyFile.js +87 -0
- package/survey/formatFrcsSurveyFile.js.map +1 -0
- package/survey/getColumnRanges.d.ts +24 -0
- package/survey/getColumnRanges.d.ts.map +1 -0
- package/survey/getColumnRanges.js +62 -0
- package/survey/getColumnRanges.js.map +1 -0
- package/survey/normalizeTeamMemberName.d.ts +2 -0
- package/survey/normalizeTeamMemberName.d.ts.map +1 -0
- package/survey/normalizeTeamMemberName.js +12 -0
- package/survey/normalizeTeamMemberName.js.map +1 -0
- package/{parseFrcsSurveyFile.d.ts → survey/parseFrcsSurveyFile.d.ts} +2 -5
- package/survey/parseFrcsSurveyFile.d.ts.map +1 -0
- package/survey/parseFrcsSurveyFile.js +626 -0
- package/survey/parseFrcsSurveyFile.js.map +1 -0
- package/survey/parsers.d.ts +11 -0
- package/survey/parsers.d.ts.map +1 -0
- package/survey/parsers.js +119 -0
- package/survey/parsers.js.map +1 -0
- package/survey/summarizeSurvey.d.ts +6 -0
- package/survey/summarizeSurvey.d.ts.map +1 -0
- package/survey/summarizeSurvey.js +58 -0
- package/survey/summarizeSurvey.js.map +1 -0
- package/survey/validators.d.ts +7 -0
- package/survey/validators.d.ts.map +1 -0
- package/survey/validators.js +36 -0
- package/survey/validators.js.map +1 -0
- package/underlineSource.d.ts +6 -0
- package/underlineSource.d.ts.map +1 -0
- package/underlineSource.js +22 -0
- package/underlineSource.js.map +1 -0
- package/unwrapInvalid.d.ts +4 -0
- package/unwrapInvalid.d.ts.map +1 -0
- package/unwrapInvalid.js +10 -0
- package/unwrapInvalid.js.map +1 -0
- package/web/index.d.ts +6 -6
- package/web/index.d.ts.map +1 -1
- package/web/index.js +60 -118
- package/web/index.js.map +1 -1
- package/FrcsShot.d.ts +0 -57
- package/FrcsShot.d.ts.map +0 -1
- package/FrcsShot.js +0 -13
- package/FrcsShot.js.map +0 -1
- package/FrcsSurveyFile.d.ts +0 -29
- package/FrcsSurveyFile.d.ts.map +0 -1
- package/FrcsSurveyFile.js.map +0 -1
- package/FrcsTrip.d.ts +0 -23
- package/FrcsTrip.d.ts.map +0 -1
- package/FrcsTrip.js.map +0 -1
- package/formatFrcsShot.d.ts.map +0 -1
- package/formatFrcsShot.js +0 -96
- package/formatFrcsShot.js.map +0 -1
- package/formatFrcsSurveyFile.d.ts +0 -3
- package/formatFrcsSurveyFile.d.ts.map +0 -1
- package/formatFrcsSurveyFile.js +0 -165
- package/formatFrcsSurveyFile.js.map +0 -1
- package/parseFrcsSurveyFile.d.ts.map +0 -1
- package/parseFrcsSurveyFile.js +0 -812
- package/parseFrcsSurveyFile.js.map +0 -1
- package/src/FrcsShot.ts +0 -56
- package/src/FrcsSurveyFile.ts +0 -47
- package/src/FrcsTrip.ts +0 -25
- package/src/parseFrcsSurveyFile.ts +0 -788
|
@@ -0,0 +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.INVALID = {\n ...shot.INVALID,\n recorded,\n }\n } else if ('INVALID' in recorded) {\n shot = {\n INVALID: {\n ...shot,\n recorded,\n },\n }\n } else {\n shot = { ...shot, recorded }\n }\n if (nextShotUnits) {\n unwrapInvalid(recorded).units = nextShotUnits\n nextShotUnits = undefined\n }\n const {\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n } = unwrapInvalid(unwrapInvalid(trip).units)\n const unwrappedAlternateUnits = unwrapInvalid(alternateUnits)\n const unwrappedShot = unwrapInvalid(shot)\n {\n const alternateUnits = unwrappedAlternateUnits\n const shot = unwrappedShot\n if (\n alternateUnits.backsightAzimuthCorrected !== backsightAzimuthCorrected\n ) {\n shot.backsightAzimuth = shot.backsightAzimuth\n ? Angle.opposite(shot.backsightAzimuth)\n : undefined\n }\n if (\n alternateUnits.backsightInclinationCorrected !==\n backsightInclinationCorrected\n ) {\n shot.backsightInclination = shot.backsightInclination?.negate()\n }\n if (distanceUnit && distanceUnit !== alternateUnits.distanceUnit) {\n shot.distance = shot.distance?.in(distanceUnit)\n if (shot.fromLruds) {\n shot.fromLruds.left = shot.fromLruds.left?.in(distanceUnit)\n shot.fromLruds.right = shot.fromLruds.right?.in(distanceUnit)\n shot.fromLruds.up = shot.fromLruds.up?.in(distanceUnit)\n shot.fromLruds.down = shot.fromLruds.down?.in(distanceUnit)\n }\n if (shot.toLruds) {\n shot.toLruds.left = shot.toLruds.left?.in(distanceUnit)\n shot.toLruds.right = shot.toLruds.right?.in(distanceUnit)\n shot.toLruds.up = shot.toLruds.up?.in(distanceUnit)\n shot.toLruds.down = shot.toLruds.down?.in(distanceUnit)\n }\n }\n if (azimuthUnit && azimuthUnit !== alternateUnits.azimuthUnit) {\n shot.frontsightAzimuth = shot.frontsightAzimuth?.in(azimuthUnit)\n shot.backsightAzimuth = shot.backsightAzimuth?.in(azimuthUnit)\n }\n if (\n inclinationUnit &&\n inclinationUnit !== alternateUnits.inclinationUnit\n ) {\n shot.frontsightInclination =\n shot.frontsightInclination?.in(inclinationUnit)\n shot.backsightInclination =\n shot.backsightInclination?.in(inclinationUnit)\n }\n }\n }\n if ('INVALID' in trip) {\n trip.INVALID.shots.push(shot)\n } else if ('INVALID' in shot) {\n trip = { INVALID: trip }\n trip.INVALID.shots.push(shot)\n } else {\n trip.shots.push(shot)\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { UnitType, Unit, UnitizedNumber, Angle, Length } from '@speleotica/unitized';
|
|
2
|
+
import type { FrcsShot } from './FrcsSurveyFile';
|
|
3
|
+
export declare function parseMonth(month: string): 1 | 5 | 6 | 4 | 3 | 2 | 7 | 8 | 9 | 10 | 11 | 12;
|
|
4
|
+
export declare function parseNumber<T extends UnitType<T>>(s: string, unit: Unit<T>): UnitizedNumber<T> | undefined;
|
|
5
|
+
export declare function parseAzimuth(s: string, unit: Unit<Angle>): UnitizedNumber<Angle> | undefined;
|
|
6
|
+
export declare function parseSpecialKind(kind: string): FrcsShot['specialKind'];
|
|
7
|
+
export declare function parseLengthUnit(unit: string): Unit<Length> | undefined;
|
|
8
|
+
export declare function parseAngleUnit(unit: string): Unit<Angle> | undefined;
|
|
9
|
+
export declare function parseLrud<T extends UnitType<T>>(s: string, unit: Unit<Length>): UnitizedNumber<Length> | undefined;
|
|
10
|
+
export declare function parseFromStationLruds(line: string, distanceUnit: Unit<Length>): [string, NonNullable<FrcsShot['fromLruds']>] | undefined;
|
|
11
|
+
//# sourceMappingURL=parsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/survey/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,cAAc,EACd,KAAK,EACL,MAAM,EACP,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGhD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,oDA6BvC;AACD,wBAAgB,WAAW,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAC/C,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GACZ,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAI/B;AACD,wBAAgB,YAAY,CAC1B,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAChB,cAAc,CAAC,KAAK,CAAC,GAAG,SAAS,CAGnC;AACD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,CAStE;AACD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS,CAatE;AACD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAUpE;AACD,wBAAgB,SAAS,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAC7C,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GACjB,cAAc,CAAC,MAAM,CAAC,GAAG,SAAS,CAKpC;AACD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,GACzB,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAwB1D"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.parseAngleUnit = parseAngleUnit;
|
|
7
|
+
exports.parseAzimuth = parseAzimuth;
|
|
8
|
+
exports.parseFromStationLruds = parseFromStationLruds;
|
|
9
|
+
exports.parseLengthUnit = parseLengthUnit;
|
|
10
|
+
exports.parseLrud = parseLrud;
|
|
11
|
+
exports.parseMonth = parseMonth;
|
|
12
|
+
exports.parseNumber = parseNumber;
|
|
13
|
+
exports.parseSpecialKind = parseSpecialKind;
|
|
14
|
+
var _unitized = require("@speleotica/unitized");
|
|
15
|
+
var _validators = require("./validators.js");
|
|
16
|
+
function parseMonth(month) {
|
|
17
|
+
switch (month.substring(0, 3).toLowerCase()) {
|
|
18
|
+
case 'jan':
|
|
19
|
+
return 1;
|
|
20
|
+
case 'feb':
|
|
21
|
+
return 2;
|
|
22
|
+
case 'mar':
|
|
23
|
+
return 3;
|
|
24
|
+
case 'apr':
|
|
25
|
+
return 4;
|
|
26
|
+
case 'may':
|
|
27
|
+
return 5;
|
|
28
|
+
case 'jun':
|
|
29
|
+
return 6;
|
|
30
|
+
case 'jul':
|
|
31
|
+
return 7;
|
|
32
|
+
case 'aug':
|
|
33
|
+
return 8;
|
|
34
|
+
case 'sep':
|
|
35
|
+
return 9;
|
|
36
|
+
case 'oct':
|
|
37
|
+
return 10;
|
|
38
|
+
case 'nov':
|
|
39
|
+
return 11;
|
|
40
|
+
case 'dec':
|
|
41
|
+
return 12;
|
|
42
|
+
default:
|
|
43
|
+
throw new Error(`invalid month: ${month}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function parseNumber(s, unit) {
|
|
47
|
+
const value = parseFloat(s);
|
|
48
|
+
if (isNaN(value)) return undefined;
|
|
49
|
+
return new _unitized.UnitizedNumber(value, unit);
|
|
50
|
+
}
|
|
51
|
+
function parseAzimuth(s, unit) {
|
|
52
|
+
const parsed = parseNumber(s, unit);
|
|
53
|
+
return parsed?.get(_unitized.Angle.degrees) === 360 ? _unitized.Unitize.degrees(0) : parsed;
|
|
54
|
+
}
|
|
55
|
+
function parseSpecialKind(kind) {
|
|
56
|
+
switch (kind) {
|
|
57
|
+
case 'H':
|
|
58
|
+
return 'horizontal';
|
|
59
|
+
case 'D':
|
|
60
|
+
return 'diagonal';
|
|
61
|
+
default:
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function parseLengthUnit(unit) {
|
|
66
|
+
switch (unit) {
|
|
67
|
+
case 'FI':
|
|
68
|
+
return _unitized.Length.inches;
|
|
69
|
+
case 'FF':
|
|
70
|
+
case 'FT':
|
|
71
|
+
return _unitized.Length.feet;
|
|
72
|
+
case 'MT':
|
|
73
|
+
case 'MM':
|
|
74
|
+
case 'M ':
|
|
75
|
+
return _unitized.Length.meters;
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
function parseAngleUnit(unit) {
|
|
80
|
+
switch (unit) {
|
|
81
|
+
case 'D':
|
|
82
|
+
return _unitized.Angle.degrees;
|
|
83
|
+
case 'G':
|
|
84
|
+
return _unitized.Angle.gradians;
|
|
85
|
+
case 'M':
|
|
86
|
+
return _unitized.Angle.milsNATO;
|
|
87
|
+
}
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
function parseLrud(s, unit) {
|
|
91
|
+
const value = parseFloat(s);
|
|
92
|
+
return !Number.isFinite(value) || value < 0 ? undefined : new _unitized.UnitizedNumber(value, unit);
|
|
93
|
+
}
|
|
94
|
+
function parseFromStationLruds(line, distanceUnit) {
|
|
95
|
+
const fromStr = line.substring(0, 5);
|
|
96
|
+
if (!/^\s*\S+$/.test(fromStr)) return undefined;
|
|
97
|
+
const gap = line.substring(5, 40);
|
|
98
|
+
if (gap.trim()) return undefined;
|
|
99
|
+
const lrudStr = line.substring(40, 52);
|
|
100
|
+
if (!/\d/.test(lrudStr)) return undefined;
|
|
101
|
+
const lStr = line.substring(40, 43);
|
|
102
|
+
const rStr = line.substring(43, 46);
|
|
103
|
+
const uStr = line.substring(46, 49);
|
|
104
|
+
const dStr = line.substring(49, 52);
|
|
105
|
+
if (!(0, _validators.isValidOptFloat)(lStr) || !(0, _validators.isValidOptFloat)(rStr) || !(0, _validators.isValidOptFloat)(uStr) || !(0, _validators.isValidOptFloat)(dStr)) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
const up = parseLrud(uStr, distanceUnit);
|
|
109
|
+
const down = parseLrud(dStr, distanceUnit);
|
|
110
|
+
const left = parseLrud(lStr, distanceUnit);
|
|
111
|
+
const right = parseLrud(rStr, distanceUnit);
|
|
112
|
+
return [fromStr.trim(), {
|
|
113
|
+
left,
|
|
114
|
+
right,
|
|
115
|
+
up,
|
|
116
|
+
down
|
|
117
|
+
}];
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=parsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.js","names":["_unitized","require","_validators","parseMonth","month","substring","toLowerCase","Error","parseNumber","s","unit","value","parseFloat","isNaN","undefined","UnitizedNumber","parseAzimuth","parsed","get","Angle","degrees","Unitize","parseSpecialKind","kind","parseLengthUnit","Length","inches","feet","meters","parseAngleUnit","gradians","milsNATO","parseLrud","Number","isFinite","parseFromStationLruds","line","distanceUnit","fromStr","test","gap","trim","lrudStr","lStr","rStr","uStr","dStr","isValidOptFloat","up","down","left","right"],"sources":["../../src/survey/parsers.ts"],"sourcesContent":["import {\n UnitType,\n Unit,\n UnitizedNumber,\n Angle,\n Length,\n} from '@speleotica/unitized'\nimport { Unitize } from '@speleotica/unitized'\nimport type { FrcsShot } from './FrcsSurveyFile'\nimport { isValidOptFloat } from './validators'\n\nexport function parseMonth(month: string) {\n switch (month.substring(0, 3).toLowerCase()) {\n case 'jan':\n return 1\n case 'feb':\n return 2\n case 'mar':\n return 3\n case 'apr':\n return 4\n case 'may':\n return 5\n case 'jun':\n return 6\n case 'jul':\n return 7\n case 'aug':\n return 8\n case 'sep':\n return 9\n case 'oct':\n return 10\n case 'nov':\n return 11\n case 'dec':\n return 12\n default:\n throw new Error(`invalid month: ${month}`)\n }\n}\nexport function parseNumber<T extends UnitType<T>>(\n s: string,\n unit: Unit<T>\n): UnitizedNumber<T> | undefined {\n const value = parseFloat(s)\n if (isNaN(value)) return undefined\n return new UnitizedNumber(value, unit)\n}\nexport function parseAzimuth(\n s: string,\n unit: Unit<Angle>\n): UnitizedNumber<Angle> | undefined {\n const parsed = parseNumber(s, unit)\n return parsed?.get(Angle.degrees) === 360 ? Unitize.degrees(0) : parsed\n}\nexport function parseSpecialKind(kind: string): FrcsShot['specialKind'] {\n switch (kind) {\n case 'H':\n return 'horizontal'\n case 'D':\n return 'diagonal'\n default:\n return undefined\n }\n}\nexport function parseLengthUnit(unit: string): Unit<Length> | undefined {\n switch (unit) {\n case 'FI':\n return Length.inches\n case 'FF':\n case 'FT':\n return Length.feet\n case 'MT':\n case 'MM':\n case 'M ':\n return Length.meters\n }\n return undefined\n}\nexport function parseAngleUnit(unit: string): Unit<Angle> | undefined {\n switch (unit) {\n case 'D':\n return Angle.degrees\n case 'G':\n return Angle.gradians\n case 'M':\n return Angle.milsNATO\n }\n return undefined\n}\nexport function parseLrud<T extends UnitType<T>>(\n s: string,\n unit: Unit<Length>\n): UnitizedNumber<Length> | undefined {\n const value = parseFloat(s)\n return !Number.isFinite(value) || value < 0\n ? undefined\n : new UnitizedNumber(value, unit)\n}\nexport function parseFromStationLruds(\n line: string,\n distanceUnit: Unit<Length>\n): [string, NonNullable<FrcsShot['fromLruds']>] | undefined {\n const fromStr = line.substring(0, 5)\n if (!/^\\s*\\S+$/.test(fromStr)) return undefined\n const gap = line.substring(5, 40)\n if (gap.trim()) return undefined\n const lrudStr = line.substring(40, 52)\n if (!/\\d/.test(lrudStr)) return undefined\n const lStr = line.substring(40, 43)\n const rStr = line.substring(43, 46)\n const uStr = line.substring(46, 49)\n const dStr = line.substring(49, 52)\n if (\n !isValidOptFloat(lStr) ||\n !isValidOptFloat(rStr) ||\n !isValidOptFloat(uStr) ||\n !isValidOptFloat(dStr)\n ) {\n return undefined\n }\n const up = parseLrud(uStr, distanceUnit)\n const down = parseLrud(dStr, distanceUnit)\n const left = parseLrud(lStr, distanceUnit)\n const right = parseLrud(rStr, distanceUnit)\n return [fromStr.trim(), { left, right, up, down }]\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AASA,IAAAC,WAAA,GAAAD,OAAA;AAEO,SAASE,UAAUA,CAACC,KAAa,EAAE;EACxC,QAAQA,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IACzC,KAAK,KAAK;MACR,OAAO,CAAC;IACV,KAAK,KAAK;MACR,OAAO,CAAC;IACV,KAAK,KAAK;MACR,OAAO,CAAC;IACV,KAAK,KAAK;MACR,OAAO,CAAC;IACV,KAAK,KAAK;MACR,OAAO,CAAC;IACV,KAAK,KAAK;MACR,OAAO,CAAC;IACV,KAAK,KAAK;MACR,OAAO,CAAC;IACV,KAAK,KAAK;MACR,OAAO,CAAC;IACV,KAAK,KAAK;MACR,OAAO,CAAC;IACV,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX;MACE,MAAM,IAAIC,KAAK,CAAC,kBAAkBH,KAAK,EAAE,CAAC;EAC9C;AACF;AACO,SAASI,WAAWA,CACzBC,CAAS,EACTC,IAAa,EACkB;EAC/B,MAAMC,KAAK,GAAGC,UAAU,CAACH,CAAC,CAAC;EAC3B,IAAII,KAAK,CAACF,KAAK,CAAC,EAAE,OAAOG,SAAS;EAClC,OAAO,IAAIC,wBAAc,CAACJ,KAAK,EAAED,IAAI,CAAC;AACxC;AACO,SAASM,YAAYA,CAC1BP,CAAS,EACTC,IAAiB,EACkB;EACnC,MAAMO,MAAM,GAAGT,WAAW,CAACC,CAAC,EAAEC,IAAI,CAAC;EACnC,OAAOO,MAAM,EAAEC,GAAG,CAACC,eAAK,CAACC,OAAO,CAAC,KAAK,GAAG,GAAGC,iBAAO,CAACD,OAAO,CAAC,CAAC,CAAC,GAAGH,MAAM;AACzE;AACO,SAASK,gBAAgBA,CAACC,IAAY,EAA2B;EACtE,QAAQA,IAAI;IACV,KAAK,GAAG;MACN,OAAO,YAAY;IACrB,KAAK,GAAG;MACN,OAAO,UAAU;IACnB;MACE,OAAOT,SAAS;EACpB;AACF;AACO,SAASU,eAAeA,CAACd,IAAY,EAA4B;EACtE,QAAQA,IAAI;IACV,KAAK,IAAI;MACP,OAAOe,gBAAM,CAACC,MAAM;IACtB,KAAK,IAAI;IACT,KAAK,IAAI;MACP,OAAOD,gBAAM,CAACE,IAAI;IACpB,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,IAAI;MACP,OAAOF,gBAAM,CAACG,MAAM;EACxB;EACA,OAAOd,SAAS;AAClB;AACO,SAASe,cAAcA,CAACnB,IAAY,EAA2B;EACpE,QAAQA,IAAI;IACV,KAAK,GAAG;MACN,OAAOS,eAAK,CAACC,OAAO;IACtB,KAAK,GAAG;MACN,OAAOD,eAAK,CAACW,QAAQ;IACvB,KAAK,GAAG;MACN,OAAOX,eAAK,CAACY,QAAQ;EACzB;EACA,OAAOjB,SAAS;AAClB;AACO,SAASkB,SAASA,CACvBvB,CAAS,EACTC,IAAkB,EACkB;EACpC,MAAMC,KAAK,GAAGC,UAAU,CAACH,CAAC,CAAC;EAC3B,OAAO,CAACwB,MAAM,CAACC,QAAQ,CAACvB,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,GACvCG,SAAS,GACT,IAAIC,wBAAc,CAACJ,KAAK,EAAED,IAAI,CAAC;AACrC;AACO,SAASyB,qBAAqBA,CACnCC,IAAY,EACZC,YAA0B,EACgC;EAC1D,MAAMC,OAAO,GAAGF,IAAI,CAAC/B,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;EACpC,IAAI,CAAC,UAAU,CAACkC,IAAI,CAACD,OAAO,CAAC,EAAE,OAAOxB,SAAS;EAC/C,MAAM0B,GAAG,GAAGJ,IAAI,CAAC/B,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;EACjC,IAAImC,GAAG,CAACC,IAAI,CAAC,CAAC,EAAE,OAAO3B,SAAS;EAChC,MAAM4B,OAAO,GAAGN,IAAI,CAAC/B,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;EACtC,IAAI,CAAC,IAAI,CAACkC,IAAI,CAACG,OAAO,CAAC,EAAE,OAAO5B,SAAS;EACzC,MAAM6B,IAAI,GAAGP,IAAI,CAAC/B,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;EACnC,MAAMuC,IAAI,GAAGR,IAAI,CAAC/B,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;EACnC,MAAMwC,IAAI,GAAGT,IAAI,CAAC/B,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;EACnC,MAAMyC,IAAI,GAAGV,IAAI,CAAC/B,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;EACnC,IACE,CAAC,IAAA0C,2BAAe,EAACJ,IAAI,CAAC,IACtB,CAAC,IAAAI,2BAAe,EAACH,IAAI,CAAC,IACtB,CAAC,IAAAG,2BAAe,EAACF,IAAI,CAAC,IACtB,CAAC,IAAAE,2BAAe,EAACD,IAAI,CAAC,EACtB;IACA,OAAOhC,SAAS;EAClB;EACA,MAAMkC,EAAE,GAAGhB,SAAS,CAACa,IAAI,EAAER,YAAY,CAAC;EACxC,MAAMY,IAAI,GAAGjB,SAAS,CAACc,IAAI,EAAET,YAAY,CAAC;EAC1C,MAAMa,IAAI,GAAGlB,SAAS,CAACW,IAAI,EAAEN,YAAY,CAAC;EAC1C,MAAMc,KAAK,GAAGnB,SAAS,CAACY,IAAI,EAAEP,YAAY,CAAC;EAC3C,OAAO,CAACC,OAAO,CAACG,IAAI,CAAC,CAAC,EAAE;IAAES,IAAI;IAAEC,KAAK;IAAEH,EAAE;IAAEC;EAAK,CAAC,CAAC;AACpD","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FrcsTripSummaryFile } from '../FrcsTripSummaryFile.js';
|
|
2
|
+
import { FrcsSurveyFile, InvalidFrcsSurveyFile } from './FrcsSurveyFile.js';
|
|
3
|
+
export declare function summarizeSurvey(parsed: FrcsSurveyFile | InvalidFrcsSurveyFile, options?: {
|
|
4
|
+
ignoreVerticalOfHShots?: boolean;
|
|
5
|
+
}): FrcsTripSummaryFile;
|
|
6
|
+
//# sourceMappingURL=summarizeSurvey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizeSurvey.d.ts","sourceRoot":"","sources":["../../src/survey/summarizeSurvey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAG3E,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,GAAG,qBAAqB,EAC9C,OAAO,CAAC,EAAE;IAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,uBA2C/C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.summarizeSurvey = summarizeSurvey;
|
|
7
|
+
var _unitized = require("@speleotica/unitized");
|
|
8
|
+
var _unwrapInvalid = require("../unwrapInvalid.js");
|
|
9
|
+
function summarizeSurvey(parsed, options) {
|
|
10
|
+
const summary = {
|
|
11
|
+
tripSummaries: []
|
|
12
|
+
};
|
|
13
|
+
let tripIndex = 0;
|
|
14
|
+
for (const trip of (0, _unwrapInvalid.unwrapInvalid)(parsed).trips) {
|
|
15
|
+
const {
|
|
16
|
+
tripNumber,
|
|
17
|
+
header,
|
|
18
|
+
units,
|
|
19
|
+
shots
|
|
20
|
+
} = (0, _unwrapInvalid.unwrapInvalid)(trip);
|
|
21
|
+
const {
|
|
22
|
+
name,
|
|
23
|
+
date,
|
|
24
|
+
team
|
|
25
|
+
} = (0, _unwrapInvalid.unwrapInvalid)(header);
|
|
26
|
+
const distanceUnit = (0, _unwrapInvalid.unwrapInvalid)(units).distanceUnit || _unitized.Length.feet;
|
|
27
|
+
let totalLength = new _unitized.UnitizedNumber(0, distanceUnit);
|
|
28
|
+
let excludedLength = new _unitized.UnitizedNumber(0, distanceUnit);
|
|
29
|
+
let numExcludedShots = 0;
|
|
30
|
+
for (const shot of (0, _unwrapInvalid.unwrapInvalid)(shots)) {
|
|
31
|
+
const {
|
|
32
|
+
distance,
|
|
33
|
+
horizontalDistance,
|
|
34
|
+
excludeDistance
|
|
35
|
+
} = (0, _unwrapInvalid.unwrapInvalid)(shot);
|
|
36
|
+
const statDistance = options?.ignoreVerticalOfHShots && horizontalDistance ? horizontalDistance : distance;
|
|
37
|
+
if (statDistance) totalLength = totalLength.add(statDistance);
|
|
38
|
+
if (excludeDistance) {
|
|
39
|
+
numExcludedShots++;
|
|
40
|
+
if (statDistance) excludedLength = excludedLength.add(statDistance);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
summary.tripSummaries.push({
|
|
44
|
+
tripNumber: tripNumber ?? NaN,
|
|
45
|
+
tripIndex: tripIndex++,
|
|
46
|
+
date: date || new Date(NaN),
|
|
47
|
+
name: name || '',
|
|
48
|
+
team: team || [],
|
|
49
|
+
numShots: shots.length,
|
|
50
|
+
totalLength,
|
|
51
|
+
numExcludedShots,
|
|
52
|
+
excludedLength,
|
|
53
|
+
shots: []
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return summary;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=summarizeSurvey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizeSurvey.js","names":["_unitized","require","_unwrapInvalid","summarizeSurvey","parsed","options","summary","tripSummaries","tripIndex","trip","unwrapInvalid","trips","tripNumber","header","units","shots","name","date","team","distanceUnit","Length","feet","totalLength","UnitizedNumber","excludedLength","numExcludedShots","shot","distance","horizontalDistance","excludeDistance","statDistance","ignoreVerticalOfHShots","add","push","NaN","Date","numShots","length"],"sources":["../../src/survey/summarizeSurvey.ts"],"sourcesContent":["import { Length, UnitizedNumber } from '@speleotica/unitized'\nimport { FrcsTripSummaryFile } from '../FrcsTripSummaryFile.js'\nimport { FrcsSurveyFile, InvalidFrcsSurveyFile } from './FrcsSurveyFile.js'\nimport { unwrapInvalid } from '../unwrapInvalid.js'\n\nexport function summarizeSurvey(\n parsed: FrcsSurveyFile | InvalidFrcsSurveyFile,\n options?: { ignoreVerticalOfHShots?: boolean }\n) {\n const summary: FrcsTripSummaryFile = {\n tripSummaries: [],\n }\n let tripIndex = 0\n for (const trip of unwrapInvalid(parsed).trips) {\n const { tripNumber, header, units, shots } = unwrapInvalid(trip)\n const { name, date, team } = unwrapInvalid(header)\n const distanceUnit = unwrapInvalid(units).distanceUnit || Length.feet\n let totalLength = new UnitizedNumber(0, distanceUnit)\n let excludedLength = new UnitizedNumber(0, distanceUnit)\n let numExcludedShots = 0\n\n for (const shot of unwrapInvalid(shots)) {\n const { distance, horizontalDistance, excludeDistance } =\n unwrapInvalid(shot)\n const statDistance =\n options?.ignoreVerticalOfHShots && horizontalDistance\n ? horizontalDistance\n : distance\n if (statDistance) totalLength = totalLength.add(statDistance)\n if (excludeDistance) {\n numExcludedShots++\n if (statDistance) excludedLength = excludedLength.add(statDistance)\n }\n }\n\n summary.tripSummaries.push({\n tripNumber: tripNumber ?? NaN,\n tripIndex: tripIndex++,\n date: date || new Date(NaN),\n name: name || '',\n team: team || [],\n numShots: shots.length,\n totalLength,\n numExcludedShots,\n excludedLength,\n shots: [],\n })\n }\n\n return summary\n}\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAGA,IAAAC,cAAA,GAAAD,OAAA;AAEO,SAASE,eAAeA,CAC7BC,MAA8C,EAC9CC,OAA8C,EAC9C;EACA,MAAMC,OAA4B,GAAG;IACnCC,aAAa,EAAE;EACjB,CAAC;EACD,IAAIC,SAAS,GAAG,CAAC;EACjB,KAAK,MAAMC,IAAI,IAAI,IAAAC,4BAAa,EAACN,MAAM,CAAC,CAACO,KAAK,EAAE;IAC9C,MAAM;MAAEC,UAAU;MAAEC,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAG,IAAAL,4BAAa,EAACD,IAAI,CAAC;IAChE,MAAM;MAAEO,IAAI;MAAEC,IAAI;MAAEC;IAAK,CAAC,GAAG,IAAAR,4BAAa,EAACG,MAAM,CAAC;IAClD,MAAMM,YAAY,GAAG,IAAAT,4BAAa,EAACI,KAAK,CAAC,CAACK,YAAY,IAAIC,gBAAM,CAACC,IAAI;IACrE,IAAIC,WAAW,GAAG,IAAIC,wBAAc,CAAC,CAAC,EAAEJ,YAAY,CAAC;IACrD,IAAIK,cAAc,GAAG,IAAID,wBAAc,CAAC,CAAC,EAAEJ,YAAY,CAAC;IACxD,IAAIM,gBAAgB,GAAG,CAAC;IAExB,KAAK,MAAMC,IAAI,IAAI,IAAAhB,4BAAa,EAACK,KAAK,CAAC,EAAE;MACvC,MAAM;QAAEY,QAAQ;QAAEC,kBAAkB;QAAEC;MAAgB,CAAC,GACrD,IAAAnB,4BAAa,EAACgB,IAAI,CAAC;MACrB,MAAMI,YAAY,GAChBzB,OAAO,EAAE0B,sBAAsB,IAAIH,kBAAkB,GACjDA,kBAAkB,GAClBD,QAAQ;MACd,IAAIG,YAAY,EAAER,WAAW,GAAGA,WAAW,CAACU,GAAG,CAACF,YAAY,CAAC;MAC7D,IAAID,eAAe,EAAE;QACnBJ,gBAAgB,EAAE;QAClB,IAAIK,YAAY,EAAEN,cAAc,GAAGA,cAAc,CAACQ,GAAG,CAACF,YAAY,CAAC;MACrE;IACF;IAEAxB,OAAO,CAACC,aAAa,CAAC0B,IAAI,CAAC;MACzBrB,UAAU,EAAEA,UAAU,IAAIsB,GAAG;MAC7B1B,SAAS,EAAEA,SAAS,EAAE;MACtBS,IAAI,EAAEA,IAAI,IAAI,IAAIkB,IAAI,CAACD,GAAG,CAAC;MAC3BlB,IAAI,EAAEA,IAAI,IAAI,EAAE;MAChBE,IAAI,EAAEA,IAAI,IAAI,EAAE;MAChBkB,QAAQ,EAAErB,KAAK,CAACsB,MAAM;MACtBf,WAAW;MACXG,gBAAgB;MAChBD,cAAc;MACdT,KAAK,EAAE;IACT,CAAC,CAAC;EACJ;EAEA,OAAOT,OAAO;AAChB","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function isValidStation(s: string): boolean;
|
|
2
|
+
export declare function isValidUInt(s: string): boolean;
|
|
3
|
+
export declare function isValidFloat(s: string): boolean;
|
|
4
|
+
export declare function isValidOptFloat(s: string): boolean;
|
|
5
|
+
export declare function isValidOptUFloat(s: string): boolean;
|
|
6
|
+
export declare function isValidUFloat(s: string): boolean;
|
|
7
|
+
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/survey/validators.ts"],"names":[],"mappings":"AACA,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isValidFloat = isValidFloat;
|
|
7
|
+
exports.isValidOptFloat = isValidOptFloat;
|
|
8
|
+
exports.isValidOptUFloat = isValidOptUFloat;
|
|
9
|
+
exports.isValidStation = isValidStation;
|
|
10
|
+
exports.isValidUFloat = isValidUFloat;
|
|
11
|
+
exports.isValidUInt = isValidUInt;
|
|
12
|
+
// determines if a cell contains a valid station name.
|
|
13
|
+
function isValidStation(s) {
|
|
14
|
+
return /^\s*\S+\s*$/.test(s);
|
|
15
|
+
}
|
|
16
|
+
// determines if a cell contains a valid unsigned integer.
|
|
17
|
+
function isValidUInt(s) {
|
|
18
|
+
return /^\s*[0-9]+\s*$/.test(s);
|
|
19
|
+
}
|
|
20
|
+
// determines if a cell contains a valid float.
|
|
21
|
+
function isValidFloat(s) {
|
|
22
|
+
return /^\s*[-+]?([0-9]+(\.[0-9]*)?|\.[0-9]+)\s*$/.test(s);
|
|
23
|
+
}
|
|
24
|
+
// determines if a cell contains a valid unsigned float or whitespace.
|
|
25
|
+
function isValidOptFloat(s) {
|
|
26
|
+
return /^\s*([-+]?([0-9]+(\.[0-9]*)?|\.[0-9]+))?\s*$/.test(s);
|
|
27
|
+
}
|
|
28
|
+
// determines if a cell contains a valid unsigned float or whitespace.
|
|
29
|
+
function isValidOptUFloat(s) {
|
|
30
|
+
return /^\s*([0-9]+(\.[0-9]*)?|\.[0-9]+)?\s*$/.test(s);
|
|
31
|
+
}
|
|
32
|
+
// determines if a cell contains a valid unsigned float.
|
|
33
|
+
function isValidUFloat(s) {
|
|
34
|
+
return /^\s*([0-9]+(\.[0-9]*)?|\.[0-9]+)\s*$/.test(s);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","names":["isValidStation","s","test","isValidUInt","isValidFloat","isValidOptFloat","isValidOptUFloat","isValidUFloat"],"sources":["../../src/survey/validators.ts"],"sourcesContent":["// determines if a cell contains a valid station name.\nexport function isValidStation(s: string): boolean {\n return /^\\s*\\S+\\s*$/.test(s)\n}\n// determines if a cell contains a valid unsigned integer.\nexport function isValidUInt(s: string): boolean {\n return /^\\s*[0-9]+\\s*$/.test(s)\n}\n// determines if a cell contains a valid float.\nexport function isValidFloat(s: string): boolean {\n return /^\\s*[-+]?([0-9]+(\\.[0-9]*)?|\\.[0-9]+)\\s*$/.test(s)\n}\n// determines if a cell contains a valid unsigned float or whitespace.\nexport function isValidOptFloat(s: string): boolean {\n return /^\\s*([-+]?([0-9]+(\\.[0-9]*)?|\\.[0-9]+))?\\s*$/.test(s)\n}\n// determines if a cell contains a valid unsigned float or whitespace.\nexport function isValidOptUFloat(s: string): boolean {\n return /^\\s*([0-9]+(\\.[0-9]*)?|\\.[0-9]+)?\\s*$/.test(s)\n}\n// determines if a cell contains a valid unsigned float.\nexport function isValidUFloat(s: string): boolean {\n return /^\\s*([0-9]+(\\.[0-9]*)?|\\.[0-9]+)\\s*$/.test(s)\n}\n"],"mappings":";;;;;;;;;;;AAAA;AACO,SAASA,cAAcA,CAACC,CAAS,EAAW;EACjD,OAAO,aAAa,CAACC,IAAI,CAACD,CAAC,CAAC;AAC9B;AACA;AACO,SAASE,WAAWA,CAACF,CAAS,EAAW;EAC9C,OAAO,gBAAgB,CAACC,IAAI,CAACD,CAAC,CAAC;AACjC;AACA;AACO,SAASG,YAAYA,CAACH,CAAS,EAAW;EAC/C,OAAO,2CAA2C,CAACC,IAAI,CAACD,CAAC,CAAC;AAC5D;AACA;AACO,SAASI,eAAeA,CAACJ,CAAS,EAAW;EAClD,OAAO,8CAA8C,CAACC,IAAI,CAACD,CAAC,CAAC;AAC/D;AACA;AACO,SAASK,gBAAgBA,CAACL,CAAS,EAAW;EACnD,OAAO,uCAAuC,CAACC,IAAI,CAACD,CAAC,CAAC;AACxD;AACA;AACO,SAASM,aAAaA,CAACN,CAAS,EAAW;EAChD,OAAO,sCAAsC,CAACC,IAAI,CAACD,CAAC,CAAC;AACvD","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SourceLoc } from './SourceLoc';
|
|
2
|
+
export declare function underlineSource(source: string, loc: SourceLoc, { underlineChar, underlineStyle, }?: {
|
|
3
|
+
underlineChar?: string;
|
|
4
|
+
underlineStyle?: (s: string) => string;
|
|
5
|
+
}): string;
|
|
6
|
+
//# sourceMappingURL=underlineSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"underlineSource.d.ts","sourceRoot":"","sources":["src/underlineSource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,SAAS,EACd,EACE,aAAmB,EACnB,cAAyB,GAC1B,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAO,UAyB3E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.underlineSource = underlineSource;
|
|
7
|
+
function underlineSource(source, loc, {
|
|
8
|
+
underlineChar = '^',
|
|
9
|
+
underlineStyle = s => s
|
|
10
|
+
} = {}) {
|
|
11
|
+
let start = source.lastIndexOf('\n', loc.start.index);
|
|
12
|
+
if (start < 0) start = source.lastIndexOf('\r', loc.start.index);
|
|
13
|
+
if (start < 0) start = -1;
|
|
14
|
+
if (start < loc.start.index) start++;
|
|
15
|
+
let end = source.indexOf('\r', loc.end.index);
|
|
16
|
+
if (end < 0) end = source.indexOf('\n', loc.end.index);
|
|
17
|
+
if (end < 0) end = source.length;
|
|
18
|
+
const sourcelines = source.substring(start, end).split(/\r\n?|\n/gm);
|
|
19
|
+
const underlineLines = (' '.repeat(loc.start.index - start) + source.substring(loc.start.index, Math.max(loc.start.index + 1, loc.end.index)).replace(/[^\r\n]/g, underlineChar) + ' '.repeat(end - loc.end.index)).split(/\r\n?|\n/gm).map(line => underlineStyle(line));
|
|
20
|
+
return sourcelines.flatMap((line, index) => [line, underlineLines[index]]).join('\n');
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=underlineSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"underlineSource.js","names":["underlineSource","source","loc","underlineChar","underlineStyle","s","start","lastIndexOf","index","end","indexOf","length","sourcelines","substring","split","underlineLines","repeat","Math","max","replace","map","line","flatMap","join"],"sources":["src/underlineSource.ts"],"sourcesContent":["import { SourceLoc } from './SourceLoc'\n\nexport function underlineSource(\n source: string,\n loc: SourceLoc,\n {\n underlineChar = '^',\n underlineStyle = (s) => s,\n }: { underlineChar?: string; underlineStyle?: (s: string) => string } = {}\n) {\n let start = source.lastIndexOf('\\n', loc.start.index)\n if (start < 0) start = source.lastIndexOf('\\r', loc.start.index)\n if (start < 0) start = -1\n if (start < loc.start.index) start++\n\n let end = source.indexOf('\\r', loc.end.index)\n if (end < 0) end = source.indexOf('\\n', loc.end.index)\n if (end < 0) end = source.length\n\n const sourcelines = source.substring(start, end).split(/\\r\\n?|\\n/gm)\n const underlineLines = (\n ' '.repeat(loc.start.index - start) +\n source\n .substring(loc.start.index, Math.max(loc.start.index + 1, loc.end.index))\n .replace(/[^\\r\\n]/g, underlineChar) +\n ' '.repeat(end - loc.end.index)\n )\n .split(/\\r\\n?|\\n/gm)\n .map((line) => underlineStyle(line))\n\n return sourcelines\n .flatMap((line, index) => [line, underlineLines[index]])\n .join('\\n')\n}\n"],"mappings":";;;;;;AAEO,SAASA,eAAeA,CAC7BC,MAAc,EACdC,GAAc,EACd;EACEC,aAAa,GAAG,GAAG;EACnBC,cAAc,GAAIC,CAAC,IAAKA;AAC0C,CAAC,GAAG,CAAC,CAAC,EAC1E;EACA,IAAIC,KAAK,GAAGL,MAAM,CAACM,WAAW,CAAC,IAAI,EAAEL,GAAG,CAACI,KAAK,CAACE,KAAK,CAAC;EACrD,IAAIF,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGL,MAAM,CAACM,WAAW,CAAC,IAAI,EAAEL,GAAG,CAACI,KAAK,CAACE,KAAK,CAAC;EAChE,IAAIF,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG,CAAC,CAAC;EACzB,IAAIA,KAAK,GAAGJ,GAAG,CAACI,KAAK,CAACE,KAAK,EAAEF,KAAK,EAAE;EAEpC,IAAIG,GAAG,GAAGR,MAAM,CAACS,OAAO,CAAC,IAAI,EAAER,GAAG,CAACO,GAAG,CAACD,KAAK,CAAC;EAC7C,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGR,MAAM,CAACS,OAAO,CAAC,IAAI,EAAER,GAAG,CAACO,GAAG,CAACD,KAAK,CAAC;EACtD,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGR,MAAM,CAACU,MAAM;EAEhC,MAAMC,WAAW,GAAGX,MAAM,CAACY,SAAS,CAACP,KAAK,EAAEG,GAAG,CAAC,CAACK,KAAK,CAAC,YAAY,CAAC;EACpE,MAAMC,cAAc,GAAG,CACrB,GAAG,CAACC,MAAM,CAACd,GAAG,CAACI,KAAK,CAACE,KAAK,GAAGF,KAAK,CAAC,GACnCL,MAAM,CACHY,SAAS,CAACX,GAAG,CAACI,KAAK,CAACE,KAAK,EAAES,IAAI,CAACC,GAAG,CAAChB,GAAG,CAACI,KAAK,CAACE,KAAK,GAAG,CAAC,EAAEN,GAAG,CAACO,GAAG,CAACD,KAAK,CAAC,CAAC,CACxEW,OAAO,CAAC,UAAU,EAAEhB,aAAa,CAAC,GACrC,GAAG,CAACa,MAAM,CAACP,GAAG,GAAGP,GAAG,CAACO,GAAG,CAACD,KAAK,CAAC,EAE9BM,KAAK,CAAC,YAAY,CAAC,CACnBM,GAAG,CAAEC,IAAI,IAAKjB,cAAc,CAACiB,IAAI,CAAC,CAAC;EAEtC,OAAOT,WAAW,CACfU,OAAO,CAAC,CAACD,IAAI,EAAEb,KAAK,KAAK,CAACa,IAAI,EAAEN,cAAc,CAACP,KAAK,CAAC,CAAC,CAAC,CACvDe,IAAI,CAAC,IAAI,CAAC;AACf","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unwrapInvalid.d.ts","sourceRoot":"","sources":["src/unwrapInvalid.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,CAAC,CAE7E"}
|
package/unwrapInvalid.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.unwrapInvalid = unwrapInvalid;
|
|
7
|
+
function unwrapInvalid(t) {
|
|
8
|
+
return t instanceof Object && 'INVALID' in t ? t.INVALID : t;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=unwrapInvalid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unwrapInvalid.js","names":["unwrapInvalid","t","Object","INVALID"],"sources":["src/unwrapInvalid.ts"],"sourcesContent":["export function unwrapInvalid<T>(t: T): T extends { INVALID: infer I } ? I : T {\n return (t instanceof Object && 'INVALID' in t ? t.INVALID : t) as any\n}\n"],"mappings":";;;;;;AAAO,SAASA,aAAaA,CAAIC,CAAI,EAA0C;EAC7E,OAAQA,CAAC,YAAYC,MAAM,IAAI,SAAS,IAAID,CAAC,GAAGA,CAAC,CAACE,OAAO,GAAGF,CAAC;AAC/D","ignoreList":[]}
|
package/web/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { ParseFrcsSurveyFileOptions } from '../
|
|
2
|
-
import { FrcsSurveyFile } from '../FrcsSurveyFile';
|
|
3
|
-
export declare function parseFrcsSurveyFile(file: File, options?: ParseFrcsSurveyFileOptions): Promise<FrcsSurveyFile>;
|
|
4
|
-
export declare function parseFrcsSurveyFile(file: string, input: Blob | ReadableStream<Uint8Array>, options?: ParseFrcsSurveyFileOptions): Promise<FrcsSurveyFile>;
|
|
1
|
+
import { ParseFrcsSurveyFileOptions } from '../survey/FrcsSurveyFile';
|
|
2
|
+
import type { FrcsSurveyFile, InvalidFrcsSurveyFile } from '../survey/FrcsSurveyFile';
|
|
3
|
+
export declare function parseFrcsSurveyFile(file: File, options?: ParseFrcsSurveyFileOptions): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile>;
|
|
4
|
+
export declare function parseFrcsSurveyFile(file: string, input: Blob | ReadableStream<Uint8Array>, options?: ParseFrcsSurveyFileOptions): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile>;
|
|
5
5
|
export declare const parseFrcsPlotFile: {
|
|
6
6
|
(file: File): Promise<import("..").FrcsPlotFile>;
|
|
7
|
-
(file: string, input: Blob | ReadableStream
|
|
7
|
+
(file: string, input: Blob | ReadableStream): Promise<import("..").FrcsPlotFile>;
|
|
8
8
|
};
|
|
9
9
|
export declare const parseFrcsTripSummaryFile: {
|
|
10
10
|
(file: File): Promise<import("..").FrcsTripSummaryFile>;
|
|
11
|
-
(file: string, input: Blob | ReadableStream
|
|
11
|
+
(file: string, input: Blob | ReadableStream): Promise<import("..").FrcsTripSummaryFile>;
|
|
12
12
|
};
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
package/web/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AAGrE,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACtB,MAAM,0BAA0B,CAAA;AA4FjC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,cAAc,GAAG,qBAAqB,CAAC,CAAA;AAClD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,EACxC,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,cAAc,GAAG,qBAAqB,CAAC,CAAA;AAclD,eAAO,MAAM,iBAAiB;WA1CH,IAAI;WACJ,MAAM,SAAS,IAAI,GAAG,cAAc;CAyCM,CAAA;AACrE,eAAO,MAAM,wBAAwB;WA3CV,IAAI;WACJ,MAAM,SAAS,IAAI,GAAG,cAAc;CA4C9D,CAAA"}
|