@speleotica/frcsdata 5.0.0-beta.5 → 5.0.1
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/cli.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@speleotica/frcsdata",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"description": "parser for Chip Hopper's survey data format used in Fisher Ridge Cave System",
|
|
5
5
|
"sideEffects": false,
|
|
6
|
+
"bin": {
|
|
7
|
+
"frcsdata": "./cli.js"
|
|
8
|
+
},
|
|
6
9
|
"publishConfig": {
|
|
7
10
|
"access": "public"
|
|
8
11
|
},
|
|
@@ -55,13 +55,11 @@ export function makeFormatFrcsShot({
|
|
|
55
55
|
return formatNum(num.get(verbatim ? num.unit : unit || num.unit))
|
|
56
56
|
}
|
|
57
57
|
if (num == null || !Number.isFinite(num)) return ' '.repeat(width)
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
width
|
|
63
|
-
' '
|
|
64
|
-
)
|
|
58
|
+
const precision = Math.max(0, width - String(Math.trunc(num)).length - 1)
|
|
59
|
+
const formatted = trimZeroes(num.toFixed(precision))
|
|
60
|
+
return formatted.length <= width
|
|
61
|
+
? formatted.padStart(width, ' ')
|
|
62
|
+
: formatted.substring(0, width)
|
|
65
63
|
}
|
|
66
64
|
return formatNum
|
|
67
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatFrcsShot.d.ts","sourceRoot":"","sources":["../../src/survey/formatFrcsShot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3D,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,kBAAkB,CAAA;AAEzB,wBAAgB,kBAAkB,CAAC,EACjC,OAAqC,GACtC,GAAE;IAAE,OAAO,CAAC,EAAE,oBAAoB,CAAA;CAAO,
|
|
1
|
+
{"version":3,"file":"formatFrcsShot.d.ts","sourceRoot":"","sources":["../../src/survey/formatFrcsShot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3D,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,kBAAkB,CAAA;AAEzB,wBAAgB,kBAAkB,CAAC,EACjC,OAAqC,GACtC,GAAE;IAAE,OAAO,CAAC,EAAE,oBAAoB,CAAA;CAAO,IAiGT,MAAM,QAAQ,EAAE,QAAQ,SAAS,KAAG,MAAM,CA0E1E;+BA1EsC,QAAQ,UAAU,SAAS,KAAG,MAAM;AA4E3E,wBAAmC"}
|
package/survey/formatFrcsShot.js
CHANGED
|
@@ -43,10 +43,9 @@ function makeFormatFrcsShot({
|
|
|
43
43
|
return formatNum(num.get(verbatim ? num.unit : unit || num.unit));
|
|
44
44
|
}
|
|
45
45
|
if (num == null || !Number.isFinite(num)) return ' '.repeat(width);
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return trimZeroes(num.toFixed(2 - formatted.length + width)).padStart(width, ' ');
|
|
46
|
+
const precision = Math.max(0, width - String(Math.trunc(num)).length - 1);
|
|
47
|
+
const formatted = trimZeroes(num.toFixed(precision));
|
|
48
|
+
return formatted.length <= width ? formatted.padStart(width, ' ') : formatted.substring(0, width);
|
|
50
49
|
}
|
|
51
50
|
return formatNum;
|
|
52
51
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatFrcsShot.js","names":["_unitized","require","_FrcsSurveyFile","makeFormatFrcsShot","columns","defaultFrcsShotColumnConfig","EMPTY_TO_STATION","repeat","toStation","formatFromStation","station","length","fromStation","Error","padStart","formatToStation","formatSpecialKind","specialKind","trimZeroes","str","match","exec","formatNumber","width","formatNum","num","unit","verbatim","UnitizedNumber","get","Number","isFinite","formatted","toFixed","substring","formatLeft","left","formatRight","right","formatUp","up","formatDown","down","EMPTY_DISTANCE","distance","formatDistance","EMPTY_FS_AZIMUTH","frontsightAzimuth","formatFsAzimuth","EMPTY_BS_AZIMUTH","backsightAzimuth","formatBsAzimuth","EMPTY_FS_INCLINATION","frontsightInclination","formatFsInclination","EMPTY_BS_INCLINATION","backsightInclination","formatBsInclination","formatVerticalDistance","EMPTY_FEET","distanceFeet","formatFeet","Math","trunc","Length","feet","EMPTY_INCHES","distanceInches","formatInches","round","inches","formatFrcsShot","shot","header","azimuthUnit","inclinationUnit","distanceUnit","isRecorded","recorded","to","fromLruds","from","join","distColumnValue","horizontalDistance","excludeDistance","verticalDistance","toLruds","_default","exports","default"],"sources":["../../src/survey/formatFrcsShot.ts"],"sourcesContent":["import type { FrcsUnits, FrcsShot } from './FrcsSurveyFile'\nimport { Length, Unit, UnitType, UnitizedNumber } from '@speleotica/unitized'\nimport {\n type FrcsShotColumnConfig,\n defaultFrcsShotColumnConfig,\n} from './FrcsSurveyFile'\n\nexport function makeFormatFrcsShot({\n columns = defaultFrcsShotColumnConfig,\n}: { columns?: FrcsShotColumnConfig } = {}) {\n const EMPTY_TO_STATION = ' '.repeat(columns.toStation)\n\n function formatFromStation(station: string): string {\n if (station.length > columns.fromStation) {\n throw new Error(`station is too long: ${station}`)\n }\n return station.padStart(columns.fromStation, ' ')\n }\n function formatToStation(station: string): string {\n if (station.length > columns.toStation) {\n throw new Error(`station is too long: ${station}`)\n }\n return station.padStart(columns.toStation, ' ')\n }\n\n function formatSpecialKind(specialKind: FrcsShot['specialKind']): string {\n switch (specialKind) {\n case 'diagonal':\n return 'D'\n case 'horizontal':\n return 'H'\n }\n return ' '\n }\n\n function trimZeroes(str: string): string {\n const match = /(-?\\d+)(\\.[1-9]*)0+$/.exec(str)\n if (!match) return str\n return match[2].length > 1 ? match[1] + match[2] : match[1]\n }\n\n const formatNumber = (width: number) => {\n function formatNum(num: number | null | undefined): string\n function formatNum<T extends UnitType<T>>(\n num: UnitizedNumber<T> | null | undefined,\n unit: Unit<T>,\n verbatim?: boolean\n ): string\n function formatNum<T extends UnitType<T>>(\n num: number | UnitizedNumber<T> | null | undefined,\n unit?: Unit<T>,\n verbatim?: boolean\n ): string {\n if (num instanceof UnitizedNumber) {\n return formatNum(num.get(verbatim ? num.unit : unit || num.unit))\n }\n if (num == null || !Number.isFinite(num)) return ' '.repeat(width)\n const formatted = trimZeroes(num.toFixed(2))\n if (formatted.length <= width) return formatted.padStart(width, ' ')\n if (formatted.length > width + 2) return formatted.substring(0, width)\n return trimZeroes(num.toFixed(2 - formatted.length + width)).padStart(\n width,\n ' '\n )\n }\n return formatNum\n }\n\n const formatLeft = formatNumber(columns.left)\n const formatRight = formatNumber(columns.right)\n const formatUp = formatNumber(columns.up)\n const formatDown = formatNumber(columns.down)\n\n const EMPTY_DISTANCE = ' '.repeat(columns.distance)\n const formatDistance = formatNumber(columns.distance)\n\n const EMPTY_FS_AZIMUTH = ' '.repeat(columns.frontsightAzimuth)\n const formatFsAzimuth = formatNumber(columns.frontsightAzimuth)\n const EMPTY_BS_AZIMUTH = ' '.repeat(columns.backsightAzimuth)\n const formatBsAzimuth = formatNumber(columns.backsightAzimuth)\n\n const EMPTY_FS_INCLINATION = ' '.repeat(columns.frontsightInclination)\n const formatFsInclination = formatNumber(columns.frontsightInclination)\n const EMPTY_BS_INCLINATION = ' '.repeat(columns.backsightInclination)\n const formatBsInclination = formatNumber(columns.backsightInclination)\n\n const formatVerticalDistance = formatNumber(columns.frontsightInclination)\n\n const EMPTY_FEET = ' '.repeat(columns.distanceFeet)\n\n function formatFeet(distance: UnitizedNumber<Length> | null | void): string {\n if (!distance) return EMPTY_FEET\n return formatNumber(columns.distanceFeet)(\n Math.trunc(distance.get(Length.feet))\n )\n }\n\n const EMPTY_INCHES = ' '.repeat(columns.distanceInches)\n\n function formatInches(\n distance: UnitizedNumber<Length> | null | void\n ): string {\n if (!distance) return EMPTY_INCHES\n return formatNumber(columns.distanceInches)(\n Math.round(distance.get(Length.inches) % 12)\n )\n }\n\n return function formatFrcsShot(shot: FrcsShot, header: FrcsUnits): string {\n const { azimuthUnit, inclinationUnit } = header\n let { distanceUnit } = header\n\n const inches = distanceUnit === Length.inches\n if (inches) distanceUnit = Length.feet\n\n const isRecorded = shot.recorded !== null\n\n if (!shot.to) {\n const { left, right, up, down } =\n shot.recorded?.fromLruds || shot.fromLruds || {}\n return [\n EMPTY_TO_STATION,\n formatFromStation(shot.from),\n EMPTY_DISTANCE,\n ' ', // kind\n ' ', // exclude\n EMPTY_FS_AZIMUTH,\n EMPTY_BS_AZIMUTH,\n EMPTY_FS_INCLINATION,\n EMPTY_BS_INCLINATION,\n formatLeft(left, distanceUnit, isRecorded),\n formatRight(right, distanceUnit, isRecorded),\n formatUp(up, distanceUnit, isRecorded),\n formatDown(down, distanceUnit, isRecorded),\n ].join('')\n }\n\n const distColumnValue =\n shot.specialKind === 'horizontal'\n ? shot.horizontalDistance\n : shot.distance\n\n return [\n formatToStation(shot.to),\n formatFromStation(shot.from),\n inches\n ? formatFeet(distColumnValue)\n : formatDistance(distColumnValue, distanceUnit, isRecorded),\n inches\n ? formatInches(distColumnValue)\n : formatSpecialKind(shot.specialKind),\n inches\n ? formatSpecialKind(shot.specialKind)\n : shot.excludeDistance\n ? '*'\n : ' ',\n formatFsAzimuth(shot.frontsightAzimuth, azimuthUnit, isRecorded),\n formatBsAzimuth(shot.backsightAzimuth, azimuthUnit, isRecorded),\n shot.specialKind\n ? formatVerticalDistance(\n shot.verticalDistance,\n distanceUnit,\n isRecorded\n )\n : formatFsInclination(\n shot.frontsightInclination,\n inclinationUnit,\n isRecorded\n ),\n shot.specialKind\n ? EMPTY_BS_INCLINATION\n : formatBsInclination(\n shot.backsightInclination,\n inclinationUnit,\n isRecorded\n ),\n formatLeft(shot.toLruds?.left, distanceUnit, isRecorded),\n formatRight(shot.toLruds?.right, distanceUnit, isRecorded),\n formatUp(shot.toLruds?.up, distanceUnit, isRecorded),\n formatDown(shot.toLruds?.down, distanceUnit, isRecorded),\n ].join('')\n }\n}\n\nexport default makeFormatFrcsShot()\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"formatFrcsShot.js","names":["_unitized","require","_FrcsSurveyFile","makeFormatFrcsShot","columns","defaultFrcsShotColumnConfig","EMPTY_TO_STATION","repeat","toStation","formatFromStation","station","length","fromStation","Error","padStart","formatToStation","formatSpecialKind","specialKind","trimZeroes","str","match","exec","formatNumber","width","formatNum","num","unit","verbatim","UnitizedNumber","get","Number","isFinite","precision","Math","max","String","trunc","formatted","toFixed","substring","formatLeft","left","formatRight","right","formatUp","up","formatDown","down","EMPTY_DISTANCE","distance","formatDistance","EMPTY_FS_AZIMUTH","frontsightAzimuth","formatFsAzimuth","EMPTY_BS_AZIMUTH","backsightAzimuth","formatBsAzimuth","EMPTY_FS_INCLINATION","frontsightInclination","formatFsInclination","EMPTY_BS_INCLINATION","backsightInclination","formatBsInclination","formatVerticalDistance","EMPTY_FEET","distanceFeet","formatFeet","Length","feet","EMPTY_INCHES","distanceInches","formatInches","round","inches","formatFrcsShot","shot","header","azimuthUnit","inclinationUnit","distanceUnit","isRecorded","recorded","to","fromLruds","from","join","distColumnValue","horizontalDistance","excludeDistance","verticalDistance","toLruds","_default","exports","default"],"sources":["../../src/survey/formatFrcsShot.ts"],"sourcesContent":["import type { FrcsUnits, FrcsShot } from './FrcsSurveyFile'\nimport { Length, Unit, UnitType, UnitizedNumber } from '@speleotica/unitized'\nimport {\n type FrcsShotColumnConfig,\n defaultFrcsShotColumnConfig,\n} from './FrcsSurveyFile'\n\nexport function makeFormatFrcsShot({\n columns = defaultFrcsShotColumnConfig,\n}: { columns?: FrcsShotColumnConfig } = {}) {\n const EMPTY_TO_STATION = ' '.repeat(columns.toStation)\n\n function formatFromStation(station: string): string {\n if (station.length > columns.fromStation) {\n throw new Error(`station is too long: ${station}`)\n }\n return station.padStart(columns.fromStation, ' ')\n }\n function formatToStation(station: string): string {\n if (station.length > columns.toStation) {\n throw new Error(`station is too long: ${station}`)\n }\n return station.padStart(columns.toStation, ' ')\n }\n\n function formatSpecialKind(specialKind: FrcsShot['specialKind']): string {\n switch (specialKind) {\n case 'diagonal':\n return 'D'\n case 'horizontal':\n return 'H'\n }\n return ' '\n }\n\n function trimZeroes(str: string): string {\n const match = /(-?\\d+)(\\.[1-9]*)0+$/.exec(str)\n if (!match) return str\n return match[2].length > 1 ? match[1] + match[2] : match[1]\n }\n\n const formatNumber = (width: number) => {\n function formatNum(num: number | null | undefined): string\n function formatNum<T extends UnitType<T>>(\n num: UnitizedNumber<T> | null | undefined,\n unit: Unit<T>,\n verbatim?: boolean\n ): string\n function formatNum<T extends UnitType<T>>(\n num: number | UnitizedNumber<T> | null | undefined,\n unit?: Unit<T>,\n verbatim?: boolean\n ): string {\n if (num instanceof UnitizedNumber) {\n return formatNum(num.get(verbatim ? num.unit : unit || num.unit))\n }\n if (num == null || !Number.isFinite(num)) return ' '.repeat(width)\n const precision = Math.max(0, width - String(Math.trunc(num)).length - 1)\n const formatted = trimZeroes(num.toFixed(precision))\n return formatted.length <= width\n ? formatted.padStart(width, ' ')\n : formatted.substring(0, width)\n }\n return formatNum\n }\n\n const formatLeft = formatNumber(columns.left)\n const formatRight = formatNumber(columns.right)\n const formatUp = formatNumber(columns.up)\n const formatDown = formatNumber(columns.down)\n\n const EMPTY_DISTANCE = ' '.repeat(columns.distance)\n const formatDistance = formatNumber(columns.distance)\n\n const EMPTY_FS_AZIMUTH = ' '.repeat(columns.frontsightAzimuth)\n const formatFsAzimuth = formatNumber(columns.frontsightAzimuth)\n const EMPTY_BS_AZIMUTH = ' '.repeat(columns.backsightAzimuth)\n const formatBsAzimuth = formatNumber(columns.backsightAzimuth)\n\n const EMPTY_FS_INCLINATION = ' '.repeat(columns.frontsightInclination)\n const formatFsInclination = formatNumber(columns.frontsightInclination)\n const EMPTY_BS_INCLINATION = ' '.repeat(columns.backsightInclination)\n const formatBsInclination = formatNumber(columns.backsightInclination)\n\n const formatVerticalDistance = formatNumber(columns.frontsightInclination)\n\n const EMPTY_FEET = ' '.repeat(columns.distanceFeet)\n\n function formatFeet(distance: UnitizedNumber<Length> | null | void): string {\n if (!distance) return EMPTY_FEET\n return formatNumber(columns.distanceFeet)(\n Math.trunc(distance.get(Length.feet))\n )\n }\n\n const EMPTY_INCHES = ' '.repeat(columns.distanceInches)\n\n function formatInches(\n distance: UnitizedNumber<Length> | null | void\n ): string {\n if (!distance) return EMPTY_INCHES\n return formatNumber(columns.distanceInches)(\n Math.round(distance.get(Length.inches) % 12)\n )\n }\n\n return function formatFrcsShot(shot: FrcsShot, header: FrcsUnits): string {\n const { azimuthUnit, inclinationUnit } = header\n let { distanceUnit } = header\n\n const inches = distanceUnit === Length.inches\n if (inches) distanceUnit = Length.feet\n\n const isRecorded = shot.recorded !== null\n\n if (!shot.to) {\n const { left, right, up, down } =\n shot.recorded?.fromLruds || shot.fromLruds || {}\n return [\n EMPTY_TO_STATION,\n formatFromStation(shot.from),\n EMPTY_DISTANCE,\n ' ', // kind\n ' ', // exclude\n EMPTY_FS_AZIMUTH,\n EMPTY_BS_AZIMUTH,\n EMPTY_FS_INCLINATION,\n EMPTY_BS_INCLINATION,\n formatLeft(left, distanceUnit, isRecorded),\n formatRight(right, distanceUnit, isRecorded),\n formatUp(up, distanceUnit, isRecorded),\n formatDown(down, distanceUnit, isRecorded),\n ].join('')\n }\n\n const distColumnValue =\n shot.specialKind === 'horizontal'\n ? shot.horizontalDistance\n : shot.distance\n\n return [\n formatToStation(shot.to),\n formatFromStation(shot.from),\n inches\n ? formatFeet(distColumnValue)\n : formatDistance(distColumnValue, distanceUnit, isRecorded),\n inches\n ? formatInches(distColumnValue)\n : formatSpecialKind(shot.specialKind),\n inches\n ? formatSpecialKind(shot.specialKind)\n : shot.excludeDistance\n ? '*'\n : ' ',\n formatFsAzimuth(shot.frontsightAzimuth, azimuthUnit, isRecorded),\n formatBsAzimuth(shot.backsightAzimuth, azimuthUnit, isRecorded),\n shot.specialKind\n ? formatVerticalDistance(\n shot.verticalDistance,\n distanceUnit,\n isRecorded\n )\n : formatFsInclination(\n shot.frontsightInclination,\n inclinationUnit,\n isRecorded\n ),\n shot.specialKind\n ? EMPTY_BS_INCLINATION\n : formatBsInclination(\n shot.backsightInclination,\n inclinationUnit,\n isRecorded\n ),\n formatLeft(shot.toLruds?.left, distanceUnit, isRecorded),\n formatRight(shot.toLruds?.right, distanceUnit, isRecorded),\n formatUp(shot.toLruds?.up, distanceUnit, isRecorded),\n formatDown(shot.toLruds?.down, distanceUnit, isRecorded),\n ].join('')\n }\n}\n\nexport default makeFormatFrcsShot()\n"],"mappings":"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","ignoreList":[]}
|