@speleotica/frcsdata 5.0.2 → 5.1.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/chunksToLines.d.ts +7 -2
- package/chunksToLines.d.ts.map +1 -1
- package/chunksToLines.js +5 -5
- package/chunksToLines.js.map +1 -1
- package/cli/encodeWindows1252.d.ts +2 -0
- package/cli/encodeWindows1252.d.ts.map +1 -0
- package/cli/encodeWindows1252.js +11 -0
- package/cli/encodeWindows1252.js.map +1 -0
- package/cli/list-names.d.ts.map +1 -1
- package/cli/list-names.js +6 -1
- package/cli/list-names.js.map +1 -1
- package/cli/merge-names-files.d.ts.map +1 -1
- package/cli/merge-names-files.js +2 -1
- package/cli/merge-names-files.js.map +1 -1
- package/cli/readFile.d.ts.map +1 -1
- package/cli/readFile.js +1 -1
- package/cli/readFile.js.map +1 -1
- package/cli/replace-names.d.ts +1 -0
- package/cli/replace-names.d.ts.map +1 -1
- package/cli/replace-names.js +9 -2
- package/cli/replace-names.js.map +1 -1
- package/cli/summarize.d.ts.map +1 -1
- package/cli/summarize.js +2 -1
- package/cli/summarize.js.map +1 -1
- package/cli.js +8 -2
- package/cli.js.map +1 -1
- package/node/index.d.ts.map +1 -1
- package/node/index.js +5 -3
- package/node/index.js.map +1 -1
- package/package.json +2 -1
- package/src/chunksToLines.ts +18 -4
- package/src/cli/encodeWindows1252.ts +5 -0
- package/src/cli/list-names.ts +13 -6
- package/src/cli/merge-names-files.ts +2 -1
- package/src/cli/readFile.ts +3 -1
- package/src/cli/replace-names.ts +10 -2
- package/src/cli/summarize.ts +2 -1
- package/src/cli.ts +7 -2
- package/src/node/index.ts +19 -3
- package/src/survey/parseFrcsSurveyFile.ts +3 -1
- package/src/web/index.ts +1 -1
- package/survey/parseFrcsSurveyFile.d.ts.map +1 -1
- package/survey/parseFrcsSurveyFile.js +3 -1
- package/survey/parseFrcsSurveyFile.js.map +1 -1
- package/web/index.js +1 -1
- package/web/index.js.map +1 -1
package/chunksToLines.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
export declare function chunksToLines(chunks: Iterable<string> | AsyncIterable<string
|
|
1
|
+
export declare function chunksToLines(chunks: Iterable<string> | AsyncIterable<string>, options: {
|
|
2
|
+
includeStartIndex: true;
|
|
3
|
+
}): AsyncIterable<{
|
|
2
4
|
line: string;
|
|
3
5
|
startIndex: number;
|
|
4
|
-
}
|
|
6
|
+
}>;
|
|
7
|
+
export declare function chunksToLines(chunks: Iterable<string> | AsyncIterable<string>, options?: {
|
|
8
|
+
includeStartIndex?: false;
|
|
9
|
+
}): AsyncIterable<string>;
|
|
5
10
|
//# sourceMappingURL=chunksToLines.d.ts.map
|
package/chunksToLines.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunksToLines.d.ts","sourceRoot":"","sources":["src/chunksToLines.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"chunksToLines.d.ts","sourceRoot":"","sources":["src/chunksToLines.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EAChD,OAAO,EAAE;IAAE,iBAAiB,EAAE,IAAI,CAAA;CAAE,GACnC,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AACtD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EAChD,OAAO,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,KAAK,CAAA;CAAE,GACtC,aAAa,CAAC,MAAM,CAAC,CAAA"}
|
package/chunksToLines.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.chunksToLines = chunksToLines;
|
|
7
|
-
async function* chunksToLines(chunks) {
|
|
7
|
+
async function* chunksToLines(chunks, options) {
|
|
8
8
|
let chunkStartIndex = 0;
|
|
9
9
|
let remainder = '';
|
|
10
10
|
let prevChunkEndedWithCarriageReturn = false;
|
|
@@ -19,19 +19,19 @@ async function* chunksToLines(chunks) {
|
|
|
19
19
|
rx.lastIndex = end;
|
|
20
20
|
for (const match of chunk.matchAll(rx)) {
|
|
21
21
|
const line = chunk.substring(end, match.index);
|
|
22
|
-
yield {
|
|
22
|
+
yield options?.includeStartIndex ? {
|
|
23
23
|
line,
|
|
24
24
|
startIndex: chunkStartIndex + end
|
|
25
|
-
};
|
|
25
|
+
} : line;
|
|
26
26
|
end = match.index + match[0].length;
|
|
27
27
|
}
|
|
28
28
|
if (end < chunk.length) remainder = chunk.substring(end);
|
|
29
29
|
chunkStartIndex += end;
|
|
30
30
|
prevChunkEndedWithCarriageReturn = chunk[chunk.length - 1] === '\r';
|
|
31
31
|
}
|
|
32
|
-
if (remainder) yield {
|
|
32
|
+
if (remainder) yield options?.includeStartIndex ? {
|
|
33
33
|
line: remainder,
|
|
34
34
|
startIndex: chunkStartIndex
|
|
35
|
-
};
|
|
35
|
+
} : remainder;
|
|
36
36
|
}
|
|
37
37
|
//# sourceMappingURL=chunksToLines.js.map
|
package/chunksToLines.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunksToLines.js","names":["chunksToLines","chunks","chunkStartIndex","remainder","prevChunkEndedWithCarriageReturn","chunk","length","end","rx","lastIndex","match","matchAll","line","substring","index","startIndex"],"sources":["src/chunksToLines.ts"],"sourcesContent":["export async function* chunksToLines(\n chunks: Iterable<string> | AsyncIterable<string
|
|
1
|
+
{"version":3,"file":"chunksToLines.js","names":["chunksToLines","chunks","options","chunkStartIndex","remainder","prevChunkEndedWithCarriageReturn","chunk","length","end","rx","lastIndex","match","matchAll","line","substring","index","includeStartIndex","startIndex"],"sources":["src/chunksToLines.ts"],"sourcesContent":["export function chunksToLines(\n chunks: Iterable<string> | AsyncIterable<string>,\n options: { includeStartIndex: true }\n): AsyncIterable<{ line: string; startIndex: number }>\nexport function chunksToLines(\n chunks: Iterable<string> | AsyncIterable<string>,\n options?: { includeStartIndex?: false }\n): AsyncIterable<string>\nexport async function* chunksToLines(\n chunks: Iterable<string> | AsyncIterable<string>,\n options?: { includeStartIndex?: boolean }\n): AsyncIterable<string | { line: string; startIndex: number }> {\n let chunkStartIndex = 0\n let remainder = ''\n let prevChunkEndedWithCarriageReturn = false\n for await (let chunk of chunks) {\n if (!chunk.length) continue\n if (remainder) {\n chunk = remainder + chunk\n remainder = ''\n }\n let end = prevChunkEndedWithCarriageReturn && chunk[0] === '\\n' ? 1 : 0\n const rx = /\\r\\n?|\\n/gm\n rx.lastIndex = end\n for (const match of chunk.matchAll(rx)) {\n const line = chunk.substring(end, match.index)\n yield options?.includeStartIndex\n ? { line, startIndex: chunkStartIndex + end }\n : line\n end = match.index + match[0].length\n }\n if (end < chunk.length) remainder = chunk.substring(end)\n chunkStartIndex += end\n prevChunkEndedWithCarriageReturn = chunk[chunk.length - 1] === '\\r'\n }\n if (remainder)\n yield options?.includeStartIndex\n ? { line: remainder, startIndex: chunkStartIndex }\n : remainder\n}\n"],"mappings":";;;;;;AAQO,gBAAgBA,aAAaA,CAClCC,MAAgD,EAChDC,OAAyC,EACqB;EAC9D,IAAIC,eAAe,GAAG,CAAC;EACvB,IAAIC,SAAS,GAAG,EAAE;EAClB,IAAIC,gCAAgC,GAAG,KAAK;EAC5C,WAAW,IAAIC,KAAK,IAAIL,MAAM,EAAE;IAC9B,IAAI,CAACK,KAAK,CAACC,MAAM,EAAE;IACnB,IAAIH,SAAS,EAAE;MACbE,KAAK,GAAGF,SAAS,GAAGE,KAAK;MACzBF,SAAS,GAAG,EAAE;IAChB;IACA,IAAII,GAAG,GAAGH,gCAAgC,IAAIC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;IACvE,MAAMG,EAAE,GAAG,YAAY;IACvBA,EAAE,CAACC,SAAS,GAAGF,GAAG;IAClB,KAAK,MAAMG,KAAK,IAAIL,KAAK,CAACM,QAAQ,CAACH,EAAE,CAAC,EAAE;MACtC,MAAMI,IAAI,GAAGP,KAAK,CAACQ,SAAS,CAACN,GAAG,EAAEG,KAAK,CAACI,KAAK,CAAC;MAC9C,MAAMb,OAAO,EAAEc,iBAAiB,GAC5B;QAAEH,IAAI;QAAEI,UAAU,EAAEd,eAAe,GAAGK;MAAI,CAAC,GAC3CK,IAAI;MACRL,GAAG,GAAGG,KAAK,CAACI,KAAK,GAAGJ,KAAK,CAAC,CAAC,CAAC,CAACJ,MAAM;IACrC;IACA,IAAIC,GAAG,GAAGF,KAAK,CAACC,MAAM,EAAEH,SAAS,GAAGE,KAAK,CAACQ,SAAS,CAACN,GAAG,CAAC;IACxDL,eAAe,IAAIK,GAAG;IACtBH,gCAAgC,GAAGC,KAAK,CAACA,KAAK,CAACC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;EACrE;EACA,IAAIH,SAAS,EACX,MAAMF,OAAO,EAAEc,iBAAiB,GAC5B;IAAEH,IAAI,EAAET,SAAS;IAAEa,UAAU,EAAEd;EAAgB,CAAC,GAChDC,SAAS;AACjB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encodeWindows1252.d.ts","sourceRoot":"","sources":["../../src/cli/encodeWindows1252.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,2BAE7C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.encodeWindows1252 = encodeWindows1252;
|
|
7
|
+
var _windows = require("windows-1252");
|
|
8
|
+
function encodeWindows1252(text) {
|
|
9
|
+
return new Uint8Array((0, _windows.encode)(text));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=encodeWindows1252.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encodeWindows1252.js","names":["_windows","require","encodeWindows1252","text","Uint8Array","encode"],"sources":["../../src/cli/encodeWindows1252.ts"],"sourcesContent":["import { encode } from 'windows-1252'\n\nexport function encodeWindows1252(text: string) {\n return new Uint8Array(encode(text))\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEO,SAASC,iBAAiBA,CAACC,IAAY,EAAE;EAC9C,OAAO,IAAIC,UAAU,CAAC,IAAAC,eAAM,EAACF,IAAI,CAAC,CAAC;AACrC","ignoreList":[]}
|
package/cli/list-names.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-names.d.ts","sourceRoot":"","sources":["../../src/cli/list-names.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list-names.d.ts","sourceRoot":"","sources":["../../src/cli/list-names.ts"],"names":[],"mappings":"AAUA,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,iBA+ErE"}
|
package/cli/list-names.js
CHANGED
|
@@ -11,6 +11,7 @@ var _unwrapInvalid = require("../unwrapInvalid.js");
|
|
|
11
11
|
var _groupBy = require("@jcoreio/utils/groupBy");
|
|
12
12
|
var _compareNames = require("./compareNames.js");
|
|
13
13
|
var _readFile = require("./readFile.js");
|
|
14
|
+
var _encodeWindows = require("./encodeWindows1252.js");
|
|
14
15
|
/* eslint-disable no-console */
|
|
15
16
|
|
|
16
17
|
async function listSurveyNames(file, options) {
|
|
@@ -60,7 +61,11 @@ async function listSurveyNames(file, options) {
|
|
|
60
61
|
}
|
|
61
62
|
for (const [name, count] of table) {
|
|
62
63
|
const replacement = replacements.get(name);
|
|
63
|
-
if (includeCounts)
|
|
64
|
+
if (includeCounts) {
|
|
65
|
+
process.stdout.write((0, _encodeWindows.encodeWindows1252)(`${count.toFixed().padStart(countLength)} ${name}${replacement ? ` => ${replacement}` : ''}\n`));
|
|
66
|
+
} else {
|
|
67
|
+
process.stdout.write((0, _encodeWindows.encodeWindows1252)(`${name}${replacement ? ` => ${replacement}` : ''}\n`));
|
|
68
|
+
}
|
|
64
69
|
}
|
|
65
70
|
}
|
|
66
71
|
const countCaps = name => {
|
package/cli/list-names.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-names.js","names":["_index","require","_normalizeTeamMemberName","_ZodFrcsSurveyFileToJson","_unwrapInvalid","_groupBy","_compareNames","_readFile","listSurveyNames","file","options","parsed","ZodValidOrInvalidFrcsSurveyFileToJson","parse","parseFrcsSurveyFile","readFile","normalizeNames","nameCounts","Map","trip","unwrapInvalid","trips","team","header","name","set","get","table","entries","sort","a","b","compareNames","maxNameCount","reduce","max","count","Math","countLength","toFixed","length","includeCounts","names","keys","replacements","suggestReplacements","group","groupBy","toLowerCase","values","normalized","normalizeNameCapitalization","best","map","countCaps","firstInitials","filter","test","replace","firstInitial","m","substring","matches","match","replacement","
|
|
1
|
+
{"version":3,"file":"list-names.js","names":["_index","require","_normalizeTeamMemberName","_ZodFrcsSurveyFileToJson","_unwrapInvalid","_groupBy","_compareNames","_readFile","_encodeWindows","listSurveyNames","file","options","parsed","ZodValidOrInvalidFrcsSurveyFileToJson","parse","parseFrcsSurveyFile","readFile","normalizeNames","nameCounts","Map","trip","unwrapInvalid","trips","team","header","name","set","get","table","entries","sort","a","b","compareNames","maxNameCount","reduce","max","count","Math","countLength","toFixed","length","includeCounts","names","keys","replacements","suggestReplacements","group","groupBy","toLowerCase","values","normalized","normalizeNameCapitalization","best","map","countCaps","firstInitials","filter","test","replace","firstInitial","m","substring","matches","match","replacement","process","stdout","write","encodeWindows1252","padStart","lower","i"],"sources":["../../src/cli/list-names.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { parseFrcsSurveyFile } from '../string/index'\nimport { normalizeNameCapitalization } from '../survey/normalizeTeamMemberName'\nimport { ZodValidOrInvalidFrcsSurveyFileToJson } from '../survey/ZodFrcsSurveyFileToJson'\nimport { unwrapInvalid } from '../unwrapInvalid'\nimport { groupBy } from '@jcoreio/utils/groupBy'\nimport { compareNames } from './compareNames'\nimport { readFile } from './readFile'\nimport { encodeWindows1252 } from './encodeWindows1252'\n\nexport async function listSurveyNames(\n file: string,\n options?: { includeCounts?: boolean; suggestReplacements?: boolean }\n) {\n const parsed = ZodValidOrInvalidFrcsSurveyFileToJson.parse(\n await parseFrcsSurveyFile(file, await readFile(file), {\n normalizeNames: false,\n })\n )\n const nameCounts = new Map<string, number>()\n for (const trip of unwrapInvalid(parsed).trips) {\n const { team } = unwrapInvalid(unwrapInvalid(trip).header)\n if (!team) continue\n for (const name of team) {\n nameCounts.set(name, (nameCounts.get(name) ?? 0) + 1)\n }\n }\n\n const table = [...nameCounts.entries()].sort((a, b) =>\n compareNames(a[0], b[0])\n )\n const maxNameCount = table.reduce((max, [, count]) => Math.max(max, count), 0)\n const countLength = maxNameCount.toFixed().length\n\n const includeCounts = options?.includeCounts ?? false\n\n const names = [...nameCounts.keys()]\n\n const replacements = new Map<string, string>()\n if (options?.suggestReplacements) {\n for (const group of groupBy(names, (name) => name.toLowerCase()).values()) {\n if (group.length === 1) {\n const [name] = group\n const normalized = normalizeNameCapitalization(name)\n if (normalized !== name) replacements.set(name, normalized)\n continue\n }\n const best = group\n .map((name) => normalizeNameCapitalization(name))\n .reduce((a, b) => (countCaps(a) > countCaps(b) ? a : b))\n for (const name of group) {\n if (name !== best) replacements.set(name, best)\n }\n }\n\n const firstInitials = groupBy(\n names.filter((name) => /^\\S[. ]/.test(name)),\n (name) => name.toLowerCase().replace(/\\.\\s*/g, ' ')\n )\n\n for (const name of names) {\n if (/^\\S[. ]/.test(name)) continue\n const firstInitial = name\n .toLowerCase()\n .replace(/^\\S+/, (m) => m.substring(0, 1))\n .replace(/\\.\\s*/g, ' ')\n const matches = firstInitials.get(firstInitial)\n if (matches) {\n for (const match of matches) {\n replacements.set(match, replacements.get(name) ?? name)\n }\n }\n }\n }\n\n for (const [name, count] of table) {\n const replacement = replacements.get(name)\n if (includeCounts) {\n process.stdout.write(\n encodeWindows1252(\n `${count.toFixed().padStart(countLength)} ${name}${\n replacement ? ` => ${replacement}` : ''\n }\\n`\n )\n )\n } else {\n process.stdout.write(\n encodeWindows1252(`${name}${replacement ? ` => ${replacement}` : ''}\\n`)\n )\n }\n }\n}\n\nconst countCaps = (name: string) => {\n const lower = name.toLowerCase()\n let count = 0\n for (let i = 0; i < name.length; i++) {\n if (name[i] !== lower[i]) count++\n }\n return count\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-names-files.d.ts","sourceRoot":"","sources":["../../src/cli/merge-names-files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merge-names-files.d.ts","sourceRoot":"","sources":["../../src/cli/merge-names-files.ts"],"names":[],"mappings":"AAKA,wBAAsB,eAAe,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,iBAavD"}
|
package/cli/merge-names-files.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.mergeNamesFiles = mergeNamesFiles;
|
|
|
7
7
|
var _parseNamesFile = require("./parseNamesFile.js");
|
|
8
8
|
var _formatNamesFile = require("./formatNamesFile.js");
|
|
9
9
|
var _readFile = require("./readFile.js");
|
|
10
|
+
var _encodeWindows = require("./encodeWindows1252.js");
|
|
10
11
|
async function mergeNamesFiles(...files) {
|
|
11
12
|
const names = new Map();
|
|
12
13
|
for (const file of files) {
|
|
@@ -20,6 +21,6 @@ async function mergeNamesFiles(...files) {
|
|
|
20
21
|
});else if (!existing.replacement) existing.replacement = replacement;
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
|
-
process.stdout.write((0, _formatNamesFile.formatNamesFile)(names));
|
|
24
|
+
process.stdout.write((0, _encodeWindows.encodeWindows1252)((0, _formatNamesFile.formatNamesFile)(names)));
|
|
24
25
|
}
|
|
25
26
|
//# sourceMappingURL=merge-names-files.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-names-files.js","names":["_parseNamesFile","require","_formatNamesFile","_readFile","mergeNamesFiles","files","names","Map","file","parsed","parseNamesFile","readFile","name","replacement","existing","get","set","process","stdout","write","formatNamesFile"],"sources":["../../src/cli/merge-names-files.ts"],"sourcesContent":["import { parseNamesFile } from './parseNamesFile'\nimport { formatNamesFile } from './formatNamesFile'\nimport { readFile } from './readFile'\n\nexport async function mergeNamesFiles(...files: string[]) {\n const names = new Map<string, { replacement?: string }>()\n\n for (const file of files) {\n const parsed = parseNamesFile(await readFile(file))\n for (const [name, { replacement }] of parsed) {\n const existing = names.get(name)\n if (!existing) names.set(name, { replacement })\n else if (!existing.replacement) existing.replacement = replacement\n }\n }\n\n process.stdout.write(formatNamesFile(names))\n}\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAEO,
|
|
1
|
+
{"version":3,"file":"merge-names-files.js","names":["_parseNamesFile","require","_formatNamesFile","_readFile","_encodeWindows","mergeNamesFiles","files","names","Map","file","parsed","parseNamesFile","readFile","name","replacement","existing","get","set","process","stdout","write","encodeWindows1252","formatNamesFile"],"sources":["../../src/cli/merge-names-files.ts"],"sourcesContent":["import { parseNamesFile } from './parseNamesFile'\nimport { formatNamesFile } from './formatNamesFile'\nimport { readFile } from './readFile'\nimport { encodeWindows1252 } from './encodeWindows1252'\n\nexport async function mergeNamesFiles(...files: string[]) {\n const names = new Map<string, { replacement?: string }>()\n\n for (const file of files) {\n const parsed = parseNamesFile(await readFile(file))\n for (const [name, { replacement }] of parsed) {\n const existing = names.get(name)\n if (!existing) names.set(name, { replacement })\n else if (!existing.replacement) existing.replacement = replacement\n }\n }\n\n process.stdout.write(encodeWindows1252(formatNamesFile(names)))\n}\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AAEO,eAAeI,eAAeA,CAAC,GAAGC,KAAe,EAAE;EACxD,MAAMC,KAAK,GAAG,IAAIC,GAAG,CAAmC,CAAC;EAEzD,KAAK,MAAMC,IAAI,IAAIH,KAAK,EAAE;IACxB,MAAMI,MAAM,GAAG,IAAAC,8BAAc,EAAC,MAAM,IAAAC,kBAAQ,EAACH,IAAI,CAAC,CAAC;IACnD,KAAK,MAAM,CAACI,IAAI,EAAE;MAAEC;IAAY,CAAC,CAAC,IAAIJ,MAAM,EAAE;MAC5C,MAAMK,QAAQ,GAAGR,KAAK,CAACS,GAAG,CAACH,IAAI,CAAC;MAChC,IAAI,CAACE,QAAQ,EAAER,KAAK,CAACU,GAAG,CAACJ,IAAI,EAAE;QAAEC;MAAY,CAAC,CAAC,MAC1C,IAAI,CAACC,QAAQ,CAACD,WAAW,EAAEC,QAAQ,CAACD,WAAW,GAAGA,WAAW;IACpE;EACF;EAEAI,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC,IAAAC,gCAAiB,EAAC,IAAAC,gCAAe,EAACf,KAAK,CAAC,CAAC,CAAC;AACjE","ignoreList":[]}
|
package/cli/readFile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readFile.d.ts","sourceRoot":"","sources":["../../src/cli/readFile.ts"],"names":[],"mappings":"AAGA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"readFile.d.ts","sourceRoot":"","sources":["../../src/cli/readFile.ts"],"names":[],"mappings":"AAGA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,mBAI1C"}
|
package/cli/readFile.js
CHANGED
|
@@ -8,6 +8,6 @@ exports.readFile = readFile;
|
|
|
8
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
9
9
|
var _util = require("util");
|
|
10
10
|
async function readFile(file) {
|
|
11
|
-
return await (0, _util.promisify)(cb => _fs.default.readFile(file || 0,
|
|
11
|
+
return new TextDecoder('windows-1252').decode(await (0, _util.promisify)(cb => _fs.default.readFile(file || 0, cb))());
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=readFile.js.map
|
package/cli/readFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readFile.js","names":["_fs","_interopRequireDefault","require","_util","readFile","file","promisify","cb","fs"],"sources":["../../src/cli/readFile.ts"],"sourcesContent":["import fs from 'fs'\nimport { promisify } from 'util'\n\nexport async function readFile(file: string) {\n return await promisify<
|
|
1
|
+
{"version":3,"file":"readFile.js","names":["_fs","_interopRequireDefault","require","_util","readFile","file","TextDecoder","decode","promisify","cb","fs"],"sources":["../../src/cli/readFile.ts"],"sourcesContent":["import fs from 'fs'\nimport { promisify } from 'util'\n\nexport async function readFile(file: string) {\n return new TextDecoder('windows-1252').decode(\n await promisify<Buffer>((cb) => fs.readFile(file || 0, cb))()\n )\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAEO,eAAeE,QAAQA,CAACC,IAAY,EAAE;EAC3C,OAAO,IAAIC,WAAW,CAAC,cAAc,CAAC,CAACC,MAAM,CAC3C,MAAM,IAAAC,eAAS,EAAUC,EAAE,IAAKC,WAAE,CAACN,QAAQ,CAACC,IAAI,IAAI,CAAC,EAAEI,EAAE,CAAC,CAAC,CAAC,CAC9D,CAAC;AACH","ignoreList":[]}
|
package/cli/replace-names.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replace-names.d.ts","sourceRoot":"","sources":["../../src/cli/replace-names.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replace-names.d.ts","sourceRoot":"","sources":["../../src/cli/replace-names.ts"],"names":[],"mappings":"AAYA,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,iBAuEF"}
|
package/cli/replace-names.js
CHANGED
|
@@ -11,8 +11,10 @@ var _ZodFrcsSurveyFileToJson = require("../survey/ZodFrcsSurveyFileToJson.js");
|
|
|
11
11
|
var _unwrapInvalid = require("../unwrapInvalid.js");
|
|
12
12
|
var _parseNamesFile = require("./parseNamesFile.js");
|
|
13
13
|
var _readFile = require("./readFile.js");
|
|
14
|
+
var _promises = require("fs/promises");
|
|
14
15
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
15
16
|
var _compareNames = require("./compareNames.js");
|
|
17
|
+
var _encodeWindows = require("./encodeWindows1252.js");
|
|
16
18
|
/* eslint-disable no-console */
|
|
17
19
|
|
|
18
20
|
async function replaceSurveyNames(surveyFile, replacementsFile, options) {
|
|
@@ -52,8 +54,13 @@ async function replaceSurveyNames(surveyFile, replacementsFile, options) {
|
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
const replaced = (0, _encodeWindows.encodeWindows1252)((0, _replaceRanges.replaceRanges)(source, replacements));
|
|
58
|
+
if (options?.write) {
|
|
59
|
+
await (0, _promises.writeFile)(surveyFile, replaced);
|
|
60
|
+
} else {
|
|
61
|
+
process.stdout.write(replaced);
|
|
62
|
+
}
|
|
63
|
+
console.error(_chalk.default.yellow(`replaced ${replacedNames.size} name${replacedNames.size === 1 ? '' : 's'} in ${replacementCount} location${replacementCount === 1 ? '' : 's'}`));
|
|
57
64
|
console.error(unreplacedNames.size ? _chalk.default.yellow(`${unreplacedNames.size} name replacement${unreplacedNames.size === 1 ? ' was' : 's were'} unused${options?.verbose ? ':' : ''}`) : _chalk.default.green('all name replacements were used'));
|
|
58
65
|
if (options?.verbose) {
|
|
59
66
|
for (const name of [...unreplacedNames].sort(_compareNames.compareNames)) {
|
package/cli/replace-names.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replace-names.js","names":["_parseFrcsSurveyFile","_interopRequireDefault","require","_replaceRanges","_ZodFrcsSurveyFileToJson","_unwrapInvalid","_parseNamesFile","_readFile","_chalk","_compareNames","replaceSurveyNames","surveyFile","replacementsFile","options","source","readFile","parsed","ZodValidOrInvalidFrcsSurveyFileToJson","parse","parseFrcsSurveyFile","normalizeNames","includeLocs","names","parseNamesFile","unreplacedNames","Set","entries","flatMap","name","replacement","replacedNames","replacementCount","replacements","trip","unwrapInvalid","trips","team","locs","teamLocs","header","i","length","loc","get","delete","add","push","start","index","end","value","
|
|
1
|
+
{"version":3,"file":"replace-names.js","names":["_parseFrcsSurveyFile","_interopRequireDefault","require","_replaceRanges","_ZodFrcsSurveyFileToJson","_unwrapInvalid","_parseNamesFile","_readFile","_promises","_chalk","_compareNames","_encodeWindows","replaceSurveyNames","surveyFile","replacementsFile","options","source","readFile","parsed","ZodValidOrInvalidFrcsSurveyFileToJson","parse","parseFrcsSurveyFile","normalizeNames","includeLocs","names","parseNamesFile","unreplacedNames","Set","entries","flatMap","name","replacement","replacedNames","replacementCount","replacements","trip","unwrapInvalid","trips","team","locs","teamLocs","header","i","length","loc","get","delete","add","push","start","index","end","value","replaced","encodeWindows1252","replaceRanges","write","writeFile","process","stdout","console","error","chalk","yellow","size","verbose","green","sort","compareNames"],"sources":["../../src/cli/replace-names.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport parseFrcsSurveyFile from '../survey/parseFrcsSurveyFile'\nimport { replaceRanges } from '../replaceRanges'\nimport { ZodValidOrInvalidFrcsSurveyFileToJson } from '../survey/ZodFrcsSurveyFileToJson'\nimport { unwrapInvalid } from '../unwrapInvalid'\nimport { parseNamesFile } from './parseNamesFile'\nimport { readFile } from './readFile'\nimport { writeFile } from 'fs/promises'\nimport chalk from 'chalk'\nimport { compareNames } from './compareNames'\nimport { encodeWindows1252 } from './encodeWindows1252'\n\nexport async function replaceSurveyNames(\n surveyFile: string,\n replacementsFile: string,\n options?: {\n verbose?: boolean\n write?: boolean\n }\n) {\n const source = await readFile(surveyFile)\n const parsed = ZodValidOrInvalidFrcsSurveyFileToJson.parse(\n await parseFrcsSurveyFile(surveyFile, [source], {\n normalizeNames: false,\n includeLocs: true,\n })\n )\n const names = await parseNamesFile(await readFile(replacementsFile))\n\n const unreplacedNames = new Set<string>(\n [...names.entries()].flatMap(([name, { replacement }]) =>\n replacement ? name : []\n )\n )\n const replacedNames = new Set<string>()\n let replacementCount = 0\n\n const replacements: { start: number; end: number; value: string }[] = []\n for (const trip of unwrapInvalid(parsed).trips) {\n const { team, locs: { team: teamLocs } = {} } = unwrapInvalid(\n unwrapInvalid(trip).header\n )\n if (!team || !teamLocs) continue\n for (let i = 0; i < team.length; i++) {\n const name = team[i]\n const loc = teamLocs[i]\n const replacement = names.get(name)?.replacement\n if (replacement && loc) {\n unreplacedNames.delete(name)\n replacedNames.add(name)\n replacementCount++\n replacements.push({\n start: loc.start.index,\n end: loc.end.index,\n value: replacement,\n })\n }\n }\n }\n\n const replaced = encodeWindows1252(replaceRanges(source, replacements))\n if (options?.write) {\n await writeFile(surveyFile, replaced)\n } else {\n process.stdout.write(replaced)\n }\n console.error(\n chalk.yellow(\n `replaced ${replacedNames.size} name${\n replacedNames.size === 1 ? '' : 's'\n } in ${replacementCount} location${replacementCount === 1 ? '' : 's'}`\n )\n )\n console.error(\n unreplacedNames.size\n ? chalk.yellow(\n `${unreplacedNames.size} name replacement${\n unreplacedNames.size === 1 ? ' was' : 's were'\n } unused${options?.verbose ? ':' : ''}`\n )\n : chalk.green('all name replacements were used')\n )\n if (options?.verbose) {\n for (const name of [...unreplacedNames].sort(compareNames)) {\n console.error(\n chalk.yellow(` ${name} => ${names.get(name)?.replacement}`)\n )\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/cli/summarize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../src/cli/summarize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../src/cli/summarize.ts"],"names":[],"mappings":"AASA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,iBAmBjD"}
|
package/cli/summarize.js
CHANGED
|
@@ -11,6 +11,7 @@ var _index = require("../string/index.js");
|
|
|
11
11
|
var _formatFrcsTripSummaryFile = require("../formatFrcsTripSummaryFile.js");
|
|
12
12
|
var _summarizeSurvey = require("../survey/summarizeSurvey.js");
|
|
13
13
|
var _readFile = require("./readFile.js");
|
|
14
|
+
var _encodeWindows = require("./encodeWindows1252.js");
|
|
14
15
|
/* eslint-disable no-console */
|
|
15
16
|
|
|
16
17
|
async function summarizeSurvey(file) {
|
|
@@ -27,7 +28,7 @@ async function summarizeSurvey(file) {
|
|
|
27
28
|
process.exit(1);
|
|
28
29
|
}
|
|
29
30
|
for (const line of (0, _formatFrcsTripSummaryFile.formatFrcsTripSummaryFile)((0, _summarizeSurvey.summarizeSurvey)(parsed))) {
|
|
30
|
-
|
|
31
|
+
process.stdout.write((0, _encodeWindows.encodeWindows1252)(line + '\n'));
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
//# sourceMappingURL=summarize.js.map
|
package/cli/summarize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarize.js","names":["_chalk","_interopRequireDefault","require","_formatIssues","_index","_formatFrcsTripSummaryFile","_summarizeSurvey","_readFile","summarizeSurvey","file","source","readFile","parsed","parseFrcsSurveyFile","console","log","formatIssues","errorStyle","chalk","red","warningStyle","yellow","process","exit","line","formatFrcsTripSummaryFile","baseSummarizeSurvey"],"sources":["../../src/cli/summarize.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport chalk from 'chalk'\nimport { formatIssues } from '../formatIssues'\nimport { parseFrcsSurveyFile } from '../string/index'\nimport { formatFrcsTripSummaryFile } from '../formatFrcsTripSummaryFile'\nimport { summarizeSurvey as baseSummarizeSurvey } from '../survey/summarizeSurvey'\nimport { readFile } from './readFile'\n\nexport async function summarizeSurvey(file: string) {\n const source = await readFile(file)\n const parsed = await parseFrcsSurveyFile(file, source)\n if ('INVALID' in parsed) {\n console.log(\n formatIssues({\n file,\n source,\n parsed,\n errorStyle: chalk.red,\n warningStyle: chalk.yellow,\n })\n )\n process.exit(1)\n }\n\n for (const line of formatFrcsTripSummaryFile(baseSummarizeSurvey(parsed))) {\n
|
|
1
|
+
{"version":3,"file":"summarize.js","names":["_chalk","_interopRequireDefault","require","_formatIssues","_index","_formatFrcsTripSummaryFile","_summarizeSurvey","_readFile","_encodeWindows","summarizeSurvey","file","source","readFile","parsed","parseFrcsSurveyFile","console","log","formatIssues","errorStyle","chalk","red","warningStyle","yellow","process","exit","line","formatFrcsTripSummaryFile","baseSummarizeSurvey","stdout","write","encodeWindows1252"],"sources":["../../src/cli/summarize.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport chalk from 'chalk'\nimport { formatIssues } from '../formatIssues'\nimport { parseFrcsSurveyFile } from '../string/index'\nimport { formatFrcsTripSummaryFile } from '../formatFrcsTripSummaryFile'\nimport { summarizeSurvey as baseSummarizeSurvey } from '../survey/summarizeSurvey'\nimport { readFile } from './readFile'\nimport { encodeWindows1252 } from './encodeWindows1252'\n\nexport async function summarizeSurvey(file: string) {\n const source = await readFile(file)\n const parsed = await parseFrcsSurveyFile(file, source)\n if ('INVALID' in parsed) {\n console.log(\n formatIssues({\n file,\n source,\n parsed,\n errorStyle: chalk.red,\n warningStyle: chalk.yellow,\n })\n )\n process.exit(1)\n }\n\n for (const line of formatFrcsTripSummaryFile(baseSummarizeSurvey(parsed))) {\n process.stdout.write(encodeWindows1252(line + '\\n'))\n }\n}\n"],"mappings":";;;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,0BAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAL,OAAA;AACA,IAAAM,cAAA,GAAAN,OAAA;AAPA;;AASO,eAAeO,eAAeA,CAACC,IAAY,EAAE;EAClD,MAAMC,MAAM,GAAG,MAAM,IAAAC,kBAAQ,EAACF,IAAI,CAAC;EACnC,MAAMG,MAAM,GAAG,MAAM,IAAAC,0BAAmB,EAACJ,IAAI,EAAEC,MAAM,CAAC;EACtD,IAAI,SAAS,IAAIE,MAAM,EAAE;IACvBE,OAAO,CAACC,GAAG,CACT,IAAAC,0BAAY,EAAC;MACXP,IAAI;MACJC,MAAM;MACNE,MAAM;MACNK,UAAU,EAAEC,cAAK,CAACC,GAAG;MACrBC,YAAY,EAAEF,cAAK,CAACG;IACtB,CAAC,CACH,CAAC;IACDC,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EACjB;EAEA,KAAK,MAAMC,IAAI,IAAI,IAAAC,oDAAyB,EAAC,IAAAC,gCAAmB,EAACd,MAAM,CAAC,CAAC,EAAE;IACzEU,OAAO,CAACK,MAAM,CAACC,KAAK,CAAC,IAAAC,gCAAiB,EAACL,IAAI,GAAG,IAAI,CAAC,CAAC;EACtD;AACF","ignoreList":[]}
|
package/cli.js
CHANGED
|
@@ -91,17 +91,23 @@ void (0, _yargs.default)(process.argv.slice(2)).scriptName('frcsdata').command({
|
|
|
91
91
|
}).option('verbose', {
|
|
92
92
|
alias: 'v',
|
|
93
93
|
type: 'boolean'
|
|
94
|
+
}).option('write', {
|
|
95
|
+
alias: 'w',
|
|
96
|
+
describe: 'overwrite survey file with replacements',
|
|
97
|
+
type: 'boolean'
|
|
94
98
|
}),
|
|
95
99
|
handler: async ({
|
|
96
100
|
surveyFile,
|
|
97
101
|
replacementsFile,
|
|
98
|
-
verbose
|
|
102
|
+
verbose,
|
|
103
|
+
write
|
|
99
104
|
}) => {
|
|
100
105
|
const {
|
|
101
106
|
replaceSurveyNames: replaceNames
|
|
102
107
|
} = await Promise.resolve().then(() => _interopRequireWildcard(require("./cli/replace-names.js")));
|
|
103
108
|
await replaceNames(surveyFile, replacementsFile, {
|
|
104
|
-
verbose
|
|
109
|
+
verbose,
|
|
110
|
+
write
|
|
105
111
|
});
|
|
106
112
|
}
|
|
107
113
|
}).command({
|
package/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","names":["_yargs","_interopRequireDefault","require","_getRequireWildcardCache","e","WeakMap","r","t","_interopRequireWildcard","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","yargs","process","argv","slice","scriptName","command","describe","builder","positional","type","demandOption","handler","file","checkSurvey","Promise","resolve","then","parseSurvey","summarizeSurvey","option","alias","counts","suggestReplacements","listSurveyNames","listNames","includeCounts","surveyFile","replacementsFile","verbose","replaceSurveyNames","replaceNames","array","namesFiles","mergeNamesFiles","summaryFile","checkSurveyCorrespondence","demandCommand"],"sources":["src/cli.ts"],"sourcesContent":["import yargs from 'yargs/yargs'\n\nvoid yargs(process.argv.slice(2))\n .scriptName('frcsdata')\n .command({\n command: 'check <file>',\n describe: 'check survey file for errors or warnings',\n builder: (yargs) =>\n yargs.positional('file', {\n type: 'string',\n demandOption: true,\n }),\n handler: async ({ file }) => {\n const { checkSurvey } = await import('./cli/check')\n await checkSurvey(file)\n },\n })\n .command({\n command: 'parse <file>',\n describe: 'parse survey file and output JSON parse tree',\n builder: (yargs) =>\n yargs.positional('file', {\n type: 'string',\n demandOption: true,\n }),\n handler: async ({ file }) => {\n const { parseSurvey } = await import('./cli/parse-survey')\n await parseSurvey(file)\n },\n })\n .command({\n command: 'summarize <file>',\n describe: 'parse survey file and output trip summaries',\n builder: (yargs) =>\n yargs.positional('file', {\n type: 'string',\n demandOption: true,\n }),\n handler: async ({ file }) => {\n const { summarizeSurvey } = await import('./cli/summarize')\n await summarizeSurvey(file)\n },\n })\n .command({\n command: 'list-names <file>',\n describe: 'parse survey file and output surveyor name/count table',\n builder: (yargs) =>\n yargs\n .positional('file', {\n type: 'string',\n demandOption: true,\n })\n .option('counts', {\n alias: 'c',\n type: 'boolean',\n describe: 'count the number of occurrences of each name',\n demandOption: false,\n })\n .option('suggest-replacements', {\n alias: 's',\n type: 'boolean',\n describe: 'output suggested replacements',\n demandOption: false,\n }),\n handler: async ({ file, counts, suggestReplacements }) => {\n const { listSurveyNames: listNames } = await import('./cli/list-names')\n await listNames(file, { includeCounts: counts, suggestReplacements })\n },\n })\n .command({\n command: 'replace-names <surveyFile> <replacementsFile>',\n describe: 'replace names survey file',\n builder: (yargs) =>\n yargs\n .positional('surveyFile', {\n type: 'string',\n demandOption: true,\n })\n .positional('replacementsFile', {\n type: 'string',\n demandOption: true,\n })\n .option('verbose', {\n alias: 'v',\n type: 'boolean',\n }),\n handler: async ({ surveyFile, replacementsFile, verbose }) => {\n const { replaceSurveyNames: replaceNames } = await import(\n './cli/replace-names'\n )\n await replaceNames(surveyFile, replacementsFile, { verbose })\n },\n })\n .command({\n command: 'merge-names-files <namesFiles..>',\n describe: 'merge two or more names files',\n builder: (yargs) =>\n yargs.positional('namesFiles', {\n type: 'string',\n array: true,\n demandOption: true,\n }),\n handler: async ({ namesFiles }) => {\n const { mergeNamesFiles } = await import('./cli/merge-names-files')\n await mergeNamesFiles(...namesFiles)\n },\n })\n .command({\n command: 'check-correspondence <surveyFile> <summaryFile>',\n describe: 'parse survey file and output trip summaries',\n builder: (yargs) =>\n yargs\n .positional('surveyFile', {\n type: 'string',\n demandOption: true,\n })\n .positional('summaryFile', {\n type: 'string',\n demandOption: true,\n }),\n handler: async ({ surveyFile, summaryFile }) => {\n const { checkSurveyCorrespondence } = await import(\n './cli/check-correspondence'\n )\n await checkSurveyCorrespondence(surveyFile, summaryFile)\n },\n })\n .demandCommand().argv\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","names":["_yargs","_interopRequireDefault","require","_getRequireWildcardCache","e","WeakMap","r","t","_interopRequireWildcard","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","yargs","process","argv","slice","scriptName","command","describe","builder","positional","type","demandOption","handler","file","checkSurvey","Promise","resolve","then","parseSurvey","summarizeSurvey","option","alias","counts","suggestReplacements","listSurveyNames","listNames","includeCounts","surveyFile","replacementsFile","verbose","write","replaceSurveyNames","replaceNames","array","namesFiles","mergeNamesFiles","summaryFile","checkSurveyCorrespondence","demandCommand"],"sources":["src/cli.ts"],"sourcesContent":["import yargs from 'yargs/yargs'\n\nvoid yargs(process.argv.slice(2))\n .scriptName('frcsdata')\n .command({\n command: 'check <file>',\n describe: 'check survey file for errors or warnings',\n builder: (yargs) =>\n yargs.positional('file', {\n type: 'string',\n demandOption: true,\n }),\n handler: async ({ file }) => {\n const { checkSurvey } = await import('./cli/check')\n await checkSurvey(file)\n },\n })\n .command({\n command: 'parse <file>',\n describe: 'parse survey file and output JSON parse tree',\n builder: (yargs) =>\n yargs.positional('file', {\n type: 'string',\n demandOption: true,\n }),\n handler: async ({ file }) => {\n const { parseSurvey } = await import('./cli/parse-survey')\n await parseSurvey(file)\n },\n })\n .command({\n command: 'summarize <file>',\n describe: 'parse survey file and output trip summaries',\n builder: (yargs) =>\n yargs.positional('file', {\n type: 'string',\n demandOption: true,\n }),\n handler: async ({ file }) => {\n const { summarizeSurvey } = await import('./cli/summarize')\n await summarizeSurvey(file)\n },\n })\n .command({\n command: 'list-names <file>',\n describe: 'parse survey file and output surveyor name/count table',\n builder: (yargs) =>\n yargs\n .positional('file', {\n type: 'string',\n demandOption: true,\n })\n .option('counts', {\n alias: 'c',\n type: 'boolean',\n describe: 'count the number of occurrences of each name',\n demandOption: false,\n })\n .option('suggest-replacements', {\n alias: 's',\n type: 'boolean',\n describe: 'output suggested replacements',\n demandOption: false,\n }),\n handler: async ({ file, counts, suggestReplacements }) => {\n const { listSurveyNames: listNames } = await import('./cli/list-names')\n await listNames(file, { includeCounts: counts, suggestReplacements })\n },\n })\n .command({\n command: 'replace-names <surveyFile> <replacementsFile>',\n describe: 'replace names survey file',\n builder: (yargs) =>\n yargs\n .positional('surveyFile', {\n type: 'string',\n demandOption: true,\n })\n .positional('replacementsFile', {\n type: 'string',\n demandOption: true,\n })\n .option('verbose', {\n alias: 'v',\n type: 'boolean',\n })\n .option('write', {\n alias: 'w',\n describe: 'overwrite survey file with replacements',\n type: 'boolean',\n }),\n handler: async ({ surveyFile, replacementsFile, verbose, write }) => {\n const { replaceSurveyNames: replaceNames } = await import(\n './cli/replace-names'\n )\n await replaceNames(surveyFile, replacementsFile, { verbose, write })\n },\n })\n .command({\n command: 'merge-names-files <namesFiles..>',\n describe: 'merge two or more names files',\n builder: (yargs) =>\n yargs.positional('namesFiles', {\n type: 'string',\n array: true,\n demandOption: true,\n }),\n handler: async ({ namesFiles }) => {\n const { mergeNamesFiles } = await import('./cli/merge-names-files')\n await mergeNamesFiles(...namesFiles)\n },\n })\n .command({\n command: 'check-correspondence <surveyFile> <summaryFile>',\n describe: 'parse survey file and output trip summaries',\n builder: (yargs) =>\n yargs\n .positional('surveyFile', {\n type: 'string',\n demandOption: true,\n })\n .positional('summaryFile', {\n type: 'string',\n demandOption: true,\n }),\n handler: async ({ surveyFile, summaryFile }) => {\n const { checkSurveyCorrespondence } = await import(\n './cli/check-correspondence'\n )\n await checkSurveyCorrespondence(surveyFile, summaryFile)\n },\n })\n .demandCommand().argv\n"],"mappings":"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","ignoreList":[]}
|
package/node/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,mBAAmB,SATvB,MAAM,kKAS2D,CAAA;AAC1E,eAAO,MAAM,iBAAiB,SA7BrB,MAAM,uCA6BsD,CAAA;AACrE,eAAO,MAAM,wBAAwB,SA9B5B,MAAM;;2DAgCd,CAAA"}
|
package/node/index.js
CHANGED
|
@@ -6,12 +6,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.parseFrcsTripSummaryFile = exports.parseFrcsSurveyFile = exports.parseFrcsPlotFile = void 0;
|
|
8
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
9
|
-
var _readline = _interopRequireDefault(require("readline"));
|
|
10
9
|
var _parseFrcsSurveyFile2 = _interopRequireDefault(require("../survey/parseFrcsSurveyFile.js"));
|
|
11
10
|
var _parseFrcsPlotFile2 = _interopRequireDefault(require("../parseFrcsPlotFile.js"));
|
|
12
11
|
var _parseFrcsTripSummaryFile2 = _interopRequireDefault(require("../parseFrcsTripSummaryFile.js"));
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
var _stream = require("stream");
|
|
13
|
+
var _web = require("stream/web");
|
|
14
|
+
var _chunksToLines = require("../chunksToLines.js");
|
|
15
|
+
const convertLineBased = fn => (file, ...rest) => fn(file, (0, _chunksToLines.chunksToLines)(_stream.Readable.toWeb(_fs.default.createReadStream(file)).pipeThrough(new _web.TextDecoderStream('windows-1252'))), ...rest);
|
|
16
|
+
const convertChunkBased = fn => (file, ...rest) => fn(file, _stream.Readable.toWeb(_fs.default.createReadStream(file)).pipeThrough(new _web.TextDecoderStream('windows-1252')), ...rest);
|
|
15
17
|
const parseFrcsSurveyFile = exports.parseFrcsSurveyFile = convertChunkBased(_parseFrcsSurveyFile2.default);
|
|
16
18
|
const parseFrcsPlotFile = exports.parseFrcsPlotFile = convertLineBased(_parseFrcsPlotFile2.default);
|
|
17
19
|
const parseFrcsTripSummaryFile = exports.parseFrcsTripSummaryFile = convertLineBased(_parseFrcsTripSummaryFile2.default);
|
package/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_fs","_interopRequireDefault","require","
|
|
1
|
+
{"version":3,"file":"index.js","names":["_fs","_interopRequireDefault","require","_parseFrcsSurveyFile2","_parseFrcsPlotFile2","_parseFrcsTripSummaryFile2","_stream","_web","_chunksToLines","convertLineBased","fn","file","rest","chunksToLines","Readable","toWeb","fs","createReadStream","pipeThrough","TextDecoderStream","convertChunkBased","parseFrcsSurveyFile","exports","_parseFrcsSurveyFile","parseFrcsPlotFile","_parseFrcsPlotFile","parseFrcsTripSummaryFile","_parseFrcsTripSummaryFile"],"sources":["../../src/node/index.ts"],"sourcesContent":["import fs from 'fs'\nimport _parseFrcsSurveyFile from '../survey/parseFrcsSurveyFile'\nimport _parseFrcsPlotFile from '../parseFrcsPlotFile'\nimport _parseFrcsTripSummaryFile from '../parseFrcsTripSummaryFile'\nimport { Readable } from 'stream'\nimport { TextDecoderStream } from 'stream/web'\nimport { chunksToLines } from '../chunksToLines'\n\nconst convertLineBased =\n <T, Rest extends any[]>(\n fn: (\n file: string,\n lines: AsyncIterable<string>,\n ...rest: Rest\n ) => Promise<T>\n ) =>\n (file: string, ...rest: Rest): Promise<T> =>\n fn(\n file,\n chunksToLines(\n Readable.toWeb(fs.createReadStream(file)).pipeThrough(\n new TextDecoderStream('windows-1252')\n )\n ),\n ...rest\n )\n\nconst convertChunkBased =\n <T, Rest extends any[]>(\n fn: (\n file: string,\n lines: AsyncIterable<string>,\n ...rest: Rest\n ) => Promise<T>\n ) =>\n (file: string, ...rest: Rest): Promise<T> =>\n fn(\n file,\n Readable.toWeb(fs.createReadStream(file)).pipeThrough(\n new TextDecoderStream('windows-1252')\n ),\n ...rest\n )\n\nexport const parseFrcsSurveyFile = convertChunkBased(_parseFrcsSurveyFile)\nexport const parseFrcsPlotFile = convertLineBased(_parseFrcsPlotFile)\nexport const parseFrcsTripSummaryFile = convertLineBased(\n _parseFrcsTripSummaryFile\n)\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,qBAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,mBAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,0BAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,IAAA,GAAAL,OAAA;AACA,IAAAM,cAAA,GAAAN,OAAA;AAEA,MAAMO,gBAAgB,GAElBC,EAIe,IAEjB,CAACC,IAAY,EAAE,GAAGC,IAAU,KAC1BF,EAAE,CACAC,IAAI,EACJ,IAAAE,4BAAa,EACXC,gBAAQ,CAACC,KAAK,CAACC,WAAE,CAACC,gBAAgB,CAACN,IAAI,CAAC,CAAC,CAACO,WAAW,CACnD,IAAIC,sBAAiB,CAAC,cAAc,CACtC,CACF,CAAC,EACD,GAAGP,IACL,CAAC;AAEL,MAAMQ,iBAAiB,GAEnBV,EAIe,IAEjB,CAACC,IAAY,EAAE,GAAGC,IAAU,KAC1BF,EAAE,CACAC,IAAI,EACJG,gBAAQ,CAACC,KAAK,CAACC,WAAE,CAACC,gBAAgB,CAACN,IAAI,CAAC,CAAC,CAACO,WAAW,CACnD,IAAIC,sBAAiB,CAAC,cAAc,CACtC,CAAC,EACD,GAAGP,IACL,CAAC;AAEE,MAAMS,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAGD,iBAAiB,CAACG,6BAAoB,CAAC;AACnE,MAAMC,iBAAiB,GAAAF,OAAA,CAAAE,iBAAA,GAAGf,gBAAgB,CAACgB,2BAAkB,CAAC;AAC9D,MAAMC,wBAAwB,GAAAJ,OAAA,CAAAI,wBAAA,GAAGjB,gBAAgB,CACtDkB,kCACF,CAAC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@speleotica/frcsdata",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.1.1",
|
|
4
4
|
"description": "parser for Chip Hopper's survey data format used in Fisher Ridge Cave System",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"bin": {
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"dedent-js": "^1.0.1",
|
|
31
31
|
"glob": "^13.0.6",
|
|
32
32
|
"parse-segment": "^1.5.4",
|
|
33
|
+
"windows-1252": "^3.0.4",
|
|
33
34
|
"yaml": "^2.8.2",
|
|
34
35
|
"yargs": "^17",
|
|
35
36
|
"zod": "^3"
|
package/src/chunksToLines.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
|
+
export function chunksToLines(
|
|
2
|
+
chunks: Iterable<string> | AsyncIterable<string>,
|
|
3
|
+
options: { includeStartIndex: true }
|
|
4
|
+
): AsyncIterable<{ line: string; startIndex: number }>
|
|
5
|
+
export function chunksToLines(
|
|
6
|
+
chunks: Iterable<string> | AsyncIterable<string>,
|
|
7
|
+
options?: { includeStartIndex?: false }
|
|
8
|
+
): AsyncIterable<string>
|
|
1
9
|
export async function* chunksToLines(
|
|
2
|
-
chunks: Iterable<string> | AsyncIterable<string
|
|
3
|
-
|
|
10
|
+
chunks: Iterable<string> | AsyncIterable<string>,
|
|
11
|
+
options?: { includeStartIndex?: boolean }
|
|
12
|
+
): AsyncIterable<string | { line: string; startIndex: number }> {
|
|
4
13
|
let chunkStartIndex = 0
|
|
5
14
|
let remainder = ''
|
|
6
15
|
let prevChunkEndedWithCarriageReturn = false
|
|
@@ -15,12 +24,17 @@ export async function* chunksToLines(
|
|
|
15
24
|
rx.lastIndex = end
|
|
16
25
|
for (const match of chunk.matchAll(rx)) {
|
|
17
26
|
const line = chunk.substring(end, match.index)
|
|
18
|
-
yield
|
|
27
|
+
yield options?.includeStartIndex
|
|
28
|
+
? { line, startIndex: chunkStartIndex + end }
|
|
29
|
+
: line
|
|
19
30
|
end = match.index + match[0].length
|
|
20
31
|
}
|
|
21
32
|
if (end < chunk.length) remainder = chunk.substring(end)
|
|
22
33
|
chunkStartIndex += end
|
|
23
34
|
prevChunkEndedWithCarriageReturn = chunk[chunk.length - 1] === '\r'
|
|
24
35
|
}
|
|
25
|
-
if (remainder)
|
|
36
|
+
if (remainder)
|
|
37
|
+
yield options?.includeStartIndex
|
|
38
|
+
? { line: remainder, startIndex: chunkStartIndex }
|
|
39
|
+
: remainder
|
|
26
40
|
}
|
package/src/cli/list-names.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { unwrapInvalid } from '../unwrapInvalid'
|
|
|
6
6
|
import { groupBy } from '@jcoreio/utils/groupBy'
|
|
7
7
|
import { compareNames } from './compareNames'
|
|
8
8
|
import { readFile } from './readFile'
|
|
9
|
+
import { encodeWindows1252 } from './encodeWindows1252'
|
|
9
10
|
|
|
10
11
|
export async function listSurveyNames(
|
|
11
12
|
file: string,
|
|
@@ -74,13 +75,19 @@ export async function listSurveyNames(
|
|
|
74
75
|
|
|
75
76
|
for (const [name, count] of table) {
|
|
76
77
|
const replacement = replacements.get(name)
|
|
77
|
-
if (includeCounts)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
if (includeCounts) {
|
|
79
|
+
process.stdout.write(
|
|
80
|
+
encodeWindows1252(
|
|
81
|
+
`${count.toFixed().padStart(countLength)} ${name}${
|
|
82
|
+
replacement ? ` => ${replacement}` : ''
|
|
83
|
+
}\n`
|
|
84
|
+
)
|
|
82
85
|
)
|
|
83
|
-
else
|
|
86
|
+
} else {
|
|
87
|
+
process.stdout.write(
|
|
88
|
+
encodeWindows1252(`${name}${replacement ? ` => ${replacement}` : ''}\n`)
|
|
89
|
+
)
|
|
90
|
+
}
|
|
84
91
|
}
|
|
85
92
|
}
|
|
86
93
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { parseNamesFile } from './parseNamesFile'
|
|
2
2
|
import { formatNamesFile } from './formatNamesFile'
|
|
3
3
|
import { readFile } from './readFile'
|
|
4
|
+
import { encodeWindows1252 } from './encodeWindows1252'
|
|
4
5
|
|
|
5
6
|
export async function mergeNamesFiles(...files: string[]) {
|
|
6
7
|
const names = new Map<string, { replacement?: string }>()
|
|
@@ -14,5 +15,5 @@ export async function mergeNamesFiles(...files: string[]) {
|
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
process.stdout.write(formatNamesFile(names))
|
|
18
|
+
process.stdout.write(encodeWindows1252(formatNamesFile(names)))
|
|
18
19
|
}
|
package/src/cli/readFile.ts
CHANGED
|
@@ -2,5 +2,7 @@ import fs from 'fs'
|
|
|
2
2
|
import { promisify } from 'util'
|
|
3
3
|
|
|
4
4
|
export async function readFile(file: string) {
|
|
5
|
-
return
|
|
5
|
+
return new TextDecoder('windows-1252').decode(
|
|
6
|
+
await promisify<Buffer>((cb) => fs.readFile(file || 0, cb))()
|
|
7
|
+
)
|
|
6
8
|
}
|
package/src/cli/replace-names.ts
CHANGED
|
@@ -5,14 +5,17 @@ import { ZodValidOrInvalidFrcsSurveyFileToJson } from '../survey/ZodFrcsSurveyFi
|
|
|
5
5
|
import { unwrapInvalid } from '../unwrapInvalid'
|
|
6
6
|
import { parseNamesFile } from './parseNamesFile'
|
|
7
7
|
import { readFile } from './readFile'
|
|
8
|
+
import { writeFile } from 'fs/promises'
|
|
8
9
|
import chalk from 'chalk'
|
|
9
10
|
import { compareNames } from './compareNames'
|
|
11
|
+
import { encodeWindows1252 } from './encodeWindows1252'
|
|
10
12
|
|
|
11
13
|
export async function replaceSurveyNames(
|
|
12
14
|
surveyFile: string,
|
|
13
15
|
replacementsFile: string,
|
|
14
16
|
options?: {
|
|
15
17
|
verbose?: boolean
|
|
18
|
+
write?: boolean
|
|
16
19
|
}
|
|
17
20
|
) {
|
|
18
21
|
const source = await readFile(surveyFile)
|
|
@@ -55,10 +58,15 @@ export async function replaceSurveyNames(
|
|
|
55
58
|
}
|
|
56
59
|
}
|
|
57
60
|
|
|
58
|
-
|
|
61
|
+
const replaced = encodeWindows1252(replaceRanges(source, replacements))
|
|
62
|
+
if (options?.write) {
|
|
63
|
+
await writeFile(surveyFile, replaced)
|
|
64
|
+
} else {
|
|
65
|
+
process.stdout.write(replaced)
|
|
66
|
+
}
|
|
59
67
|
console.error(
|
|
60
68
|
chalk.yellow(
|
|
61
|
-
`replaced ${replacedNames.size} ${
|
|
69
|
+
`replaced ${replacedNames.size} name${
|
|
62
70
|
replacedNames.size === 1 ? '' : 's'
|
|
63
71
|
} in ${replacementCount} location${replacementCount === 1 ? '' : 's'}`
|
|
64
72
|
)
|
package/src/cli/summarize.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { parseFrcsSurveyFile } from '../string/index'
|
|
|
5
5
|
import { formatFrcsTripSummaryFile } from '../formatFrcsTripSummaryFile'
|
|
6
6
|
import { summarizeSurvey as baseSummarizeSurvey } from '../survey/summarizeSurvey'
|
|
7
7
|
import { readFile } from './readFile'
|
|
8
|
+
import { encodeWindows1252 } from './encodeWindows1252'
|
|
8
9
|
|
|
9
10
|
export async function summarizeSurvey(file: string) {
|
|
10
11
|
const source = await readFile(file)
|
|
@@ -23,6 +24,6 @@ export async function summarizeSurvey(file: string) {
|
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
for (const line of formatFrcsTripSummaryFile(baseSummarizeSurvey(parsed))) {
|
|
26
|
-
|
|
27
|
+
process.stdout.write(encodeWindows1252(line + '\n'))
|
|
27
28
|
}
|
|
28
29
|
}
|
package/src/cli.ts
CHANGED
|
@@ -83,12 +83,17 @@ void yargs(process.argv.slice(2))
|
|
|
83
83
|
.option('verbose', {
|
|
84
84
|
alias: 'v',
|
|
85
85
|
type: 'boolean',
|
|
86
|
+
})
|
|
87
|
+
.option('write', {
|
|
88
|
+
alias: 'w',
|
|
89
|
+
describe: 'overwrite survey file with replacements',
|
|
90
|
+
type: 'boolean',
|
|
86
91
|
}),
|
|
87
|
-
handler: async ({ surveyFile, replacementsFile, verbose }) => {
|
|
92
|
+
handler: async ({ surveyFile, replacementsFile, verbose, write }) => {
|
|
88
93
|
const { replaceSurveyNames: replaceNames } = await import(
|
|
89
94
|
'./cli/replace-names'
|
|
90
95
|
)
|
|
91
|
-
await replaceNames(surveyFile, replacementsFile, { verbose })
|
|
96
|
+
await replaceNames(surveyFile, replacementsFile, { verbose, write })
|
|
92
97
|
},
|
|
93
98
|
})
|
|
94
99
|
.command({
|
package/src/node/index.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import fs from 'fs'
|
|
2
|
-
import readline from 'readline'
|
|
3
2
|
import _parseFrcsSurveyFile from '../survey/parseFrcsSurveyFile'
|
|
4
3
|
import _parseFrcsPlotFile from '../parseFrcsPlotFile'
|
|
5
4
|
import _parseFrcsTripSummaryFile from '../parseFrcsTripSummaryFile'
|
|
5
|
+
import { Readable } from 'stream'
|
|
6
|
+
import { TextDecoderStream } from 'stream/web'
|
|
7
|
+
import { chunksToLines } from '../chunksToLines'
|
|
6
8
|
|
|
7
9
|
const convertLineBased =
|
|
8
10
|
<T, Rest extends any[]>(
|
|
@@ -13,7 +15,15 @@ const convertLineBased =
|
|
|
13
15
|
) => Promise<T>
|
|
14
16
|
) =>
|
|
15
17
|
(file: string, ...rest: Rest): Promise<T> =>
|
|
16
|
-
fn(
|
|
18
|
+
fn(
|
|
19
|
+
file,
|
|
20
|
+
chunksToLines(
|
|
21
|
+
Readable.toWeb(fs.createReadStream(file)).pipeThrough(
|
|
22
|
+
new TextDecoderStream('windows-1252')
|
|
23
|
+
)
|
|
24
|
+
),
|
|
25
|
+
...rest
|
|
26
|
+
)
|
|
17
27
|
|
|
18
28
|
const convertChunkBased =
|
|
19
29
|
<T, Rest extends any[]>(
|
|
@@ -24,7 +34,13 @@ const convertChunkBased =
|
|
|
24
34
|
) => Promise<T>
|
|
25
35
|
) =>
|
|
26
36
|
(file: string, ...rest: Rest): Promise<T> =>
|
|
27
|
-
fn(
|
|
37
|
+
fn(
|
|
38
|
+
file,
|
|
39
|
+
Readable.toWeb(fs.createReadStream(file)).pipeThrough(
|
|
40
|
+
new TextDecoderStream('windows-1252')
|
|
41
|
+
),
|
|
42
|
+
...rest
|
|
43
|
+
)
|
|
28
44
|
|
|
29
45
|
export const parseFrcsSurveyFile = convertChunkBased(_parseFrcsSurveyFile)
|
|
30
46
|
export const parseFrcsPlotFile = convertLineBased(_parseFrcsPlotFile)
|
|
@@ -137,7 +137,9 @@ export default async function parseFrcsSurveyFile(
|
|
|
137
137
|
|
|
138
138
|
let began = false
|
|
139
139
|
|
|
140
|
-
for await ({ line, startIndex: lineStartIndex } of chunksToLines(chunks
|
|
140
|
+
for await ({ line, startIndex: lineStartIndex } of chunksToLines(chunks, {
|
|
141
|
+
includeStartIndex: true,
|
|
142
|
+
})) {
|
|
141
143
|
if (lineIssues.length) lineIssues = []
|
|
142
144
|
|
|
143
145
|
lineNumber++
|
package/src/web/index.ts
CHANGED
|
@@ -92,7 +92,7 @@ const convertLineBased = <T>(
|
|
|
92
92
|
function chunksOf(input: Blob | ReadableStream): AsyncIterable<string> {
|
|
93
93
|
return readableStreamValues(
|
|
94
94
|
(input instanceof ReadableStream ? input : input.stream()).pipeThrough(
|
|
95
|
-
new TextDecoderStream()
|
|
95
|
+
new TextDecoderStream('windows-1252')
|
|
96
96
|
)
|
|
97
97
|
)
|
|
98
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseFrcsSurveyFile.d.ts","sourceRoot":"","sources":["../../src/survey/parseFrcsSurveyFile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAC1B,cAAc,EAId,qBAAqB,EAKtB,MAAM,kBAAkB,CAAA;AA2BzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4CI;AACJ,wBAA8B,mBAAmB,CAC/C,IAAI,EAAE,GAAG,EAAE,yDAAyD;AACpE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EAChD,EACE,OAAqC,EACrC,aAAqB,EACrB,cAAqB,EACrB,gBAAgB,EAChB,WAAW,GACZ,GAAE,0BAA+B,GACjC,OAAO,CAAC,cAAc,GAAG,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"parseFrcsSurveyFile.d.ts","sourceRoot":"","sources":["../../src/survey/parseFrcsSurveyFile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAC1B,cAAc,EAId,qBAAqB,EAKtB,MAAM,kBAAkB,CAAA;AA2BzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4CI;AACJ,wBAA8B,mBAAmB,CAC/C,IAAI,EAAE,GAAG,EAAE,yDAAyD;AACpE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,EAChD,EACE,OAAqC,EACrC,aAAqB,EACrB,cAAqB,EACrB,gBAAgB,EAChB,WAAW,GACZ,GAAE,0BAA+B,GACjC,OAAO,CAAC,cAAc,GAAG,qBAAqB,CAAC,CAs6BjD"}
|
|
@@ -101,7 +101,9 @@ chunks, {
|
|
|
101
101
|
for await ({
|
|
102
102
|
line,
|
|
103
103
|
startIndex: lineStartIndex
|
|
104
|
-
} of (0, _chunksToLines.chunksToLines)(chunks
|
|
104
|
+
} of (0, _chunksToLines.chunksToLines)(chunks, {
|
|
105
|
+
includeStartIndex: true
|
|
106
|
+
})) {
|
|
105
107
|
if (lineIssues.length) lineIssues = [];
|
|
106
108
|
lineNumber++;
|
|
107
109
|
if (!began) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseFrcsSurveyFile.js","names":["_FrcsSurveyFile","require","_unitized","_chunksToLines","_validators","_getColumnRanges","_parsers","_normalizeTeamMemberName","_unwrapInvalid","parseFrcsSurveyFile","file","chunks","columns","defaultFrcsShotColumnConfig","outputColumns","normalizeNames","suppressWarnings","includeLocs","columnRanges","getColumnRanges","maxRange","Math","max","Object","values","decimal","map","r","cave","undefined","location","trips","rootLocs","issues","tripName","tripNameLoc","tripTeam","tripTeamLoc","tripDate","tripDateLoc","inTripComment","tripCommentStartLine","tripCommentEndLine","tripComment","commentLines","trip","inBlockComment","section","sectionLoc","commentFromStationLruds","Map","unitsChanged","alternateUnits","nextShotUnits","lineNumber","line","lineStartIndex","lineIssues","tripIssues","began","startIndex","chunksToLines","length","test","match","exec","trim","indices","makeLineLoc","parseUnits","startColumn","index","endColumn","dateMatch","team","substring","replace","matchAll","includes","name","push","addIssue","normalizeTeamMemberName","month","day","year","parseInt","parseMonth","Date","currentUnits","unwrapInvalid","units","distanceUnit","Length","inches","meters","feet","addCommentLine","comment","join","headerLocs","date","header","locs","some","i","type","INVALID","shots","tripNumber","azimuthUnit","Angle","degrees","inclinationUnit","ranges","feetAndInches","fromStation","fromStr","validate","isValidStation","from","lStr","left","isValidOptFloat","rStr","right","uStr","up","dStr","down","parseLrud","toStr","toStation","shot","to","distance","UnitizedNumber","frontsightAzimuth","backsightAzimuth","frontsightInclination","backsightInclination","fromLruds","getComment","addShot","get","delete","fromLrudMatch","RegExp","split","s","azmFsStr","isValidOptUFloat","azmBsStr","incFsStr","incBsStr","horizontalDistance","verticalDistance","feetStr","distanceFeet","inchesStr","distanceInches","isValidUInt","Unitize","parseFloat","add","distStr","isValidUFloat","distNum","Number","isFinite","specialKindStr","kind","exclude","specialKind","parseSpecialKind","excludeDistance","isSplay","isValidFloat","h","NaN","v","sqrt","atan2","in","d","asin","parseNumber","validateInclinationRange","parseAzimuth","validateAzimuthRange","toLruds","loc","forEach","every","t","parsedFromStationLruds","parseFromStationLruds","set","code","message","indicesArray","start","column","end","parseLengthUnit","slice","parseAngleUnit","backsightAzimuthCorrected","backsightInclinationCorrected","hasBacksightAzimuth","hasBacksightInclination","fieldName","validator","field","toUpperCase","azimuth","rawValue","unit","Infinity","gradians","radians","PI","milsNATO","inclination","recorded","unwrappedAlternateUnits","unwrappedShot","opposite","negate","module","exports","default"],"sources":["../../src/survey/parseFrcsSurveyFile.ts"],"sourcesContent":["import { defaultFrcsShotColumnConfig } from './FrcsSurveyFile'\nimport type {\n ParseFrcsSurveyFileOptions,\n FrcsSurveyFile,\n FrcsTrip,\n FrcsUnits,\n FrcsShot,\n InvalidFrcsSurveyFile,\n InvalidFrcsUnits,\n InvalidFrcsTrip,\n InvalidFrcsShot,\n FrcsTripHeader,\n} from './FrcsSurveyFile'\nimport { Angle, Length, UnitizedNumber, Unitize } from '@speleotica/unitized'\nimport { ParseIssue, ParseIssueSeverity } from '../ParseIssue'\nimport { chunksToLines } from '../chunksToLines'\nimport {\n isValidStation,\n isValidOptFloat,\n isValidOptUFloat,\n isValidUInt,\n isValidUFloat,\n isValidFloat,\n} from './validators'\nimport { getColumnRanges } from './getColumnRanges'\nimport {\n parseFromStationLruds,\n parseLengthUnit,\n parseAngleUnit,\n parseMonth,\n parseLrud,\n parseSpecialKind,\n parseNumber,\n parseAzimuth,\n} from './parsers'\nimport { normalizeTeamMemberName } from './normalizeTeamMemberName'\nimport { unwrapInvalid } from '../unwrapInvalid'\nimport { SourceLoc } from '../SourceLoc'\n\n/**\n * Parses a raw cdata.fr survey file. These look like so:\n *\n <pre> Fisher Ridge Cave System, Hart Co., KY\n ENTRANCE DROPS, JOE'S \"I LOVE MY WIFE TRAVERSE\", TRICKY TRAVERSE\n PETER QUICK, KEITH ORTIZ - 2-15-81\n This File has Crumps test connected. 11/20/12\n *\n FT C DD A\n AE20 0 1 3 0 2\n * %FS\n * AE20 0 0 0 Bug-can't put before so put after-so can't make 2 fixed 10/28/12\n AE19 AE20 9.3 60.0 60.0-36.0 2 12 0 20\n AE18 AE19 24.5 0.0 0.0-90.0 6 10 25 0\n AE17 AE18 8.0 350.5 350.5 17.0 3 5 0 0\n AE16 AE17 6.7 0.0 0.0-90.0 3 5 6 1\n AE15 AE16 12.6 70.5 71.0-18.0 4 0 2 1\n AE14 AE15 10.0 21.5 20.0 6.0 5 5 0 3\n AE13 AE14 26.8 288.0 286.0-50.0 0 7 20 5\n *\n *SHORT CANYON AT THE BASE OF THE SECOND DROP\n AE12 AE13 20.7 236.0 236.0 34.0 3 5 4 4\n AE11 AE12 12.4 210.0 210.0 35.0 7 4 5 1\n AE10 AE13 25.7 40.0 40.0 -9.0 2 2 3 6\n *\n *AE10 AT JOE'S \" I LOVE MY WIFE TRAVERSE \"\n AE9 AE10 17.8 32.5 31.0 23.0 4 5 20 15\n AE1 AE9 13.7 82.0 82.0-13.0\n A1 AE1 34.3 46.0 48.0-17.5\n *\n *SURVEY TO DOME NEAR THE ENTRANCE DOME (ABOVE THE SECOND DROP)\n AD1 AE15 8.0 200.0 200.0 0.0 3 1 1 1\n AD2 AD1 17.7 161.0 161.0 7.0 1 4 25 1\n AD3 AD2 10.4 180.0 180.0 50.0 4 1 15 5\n *\n TRICKY TRAVERSE AND THEN FIRST SURVEY IN UPPER CROWLWAY\n DAN CROWL, KEITH ORTIZ, CHIP HOPPER, PETER QUICK, LARRY BEAN 14 FEB 1981\n *\n FI B DD\n A2 A1 48 10 292.0 110.0-42.0 5 10 35 5\n A3 A2 12 5 333.5 153.5 35.0 3 1 15 5\n A4 A3 4 2 0.0 0.0 90.0 3 1 10 10\n ...</pre>\n *\n */\nexport default async function parseFrcsSurveyFile(\n file: any, // eslint-disable-line @typescript-eslint/no-explicit-any\n chunks: Iterable<string> | AsyncIterable<string>,\n {\n columns = defaultFrcsShotColumnConfig,\n outputColumns = false,\n normalizeNames = true,\n suppressWarnings,\n includeLocs,\n }: ParseFrcsSurveyFileOptions = {}\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile> {\n const columnRanges = getColumnRanges(columns)\n const maxRange = Math.max(\n ...Object.values(columnRanges.decimal).map((r) => r[1])\n )\n\n let cave: string | undefined = undefined\n let location: string | undefined = undefined\n const trips: (FrcsTrip | InvalidFrcsTrip)[] = []\n const rootLocs: FrcsSurveyFile['locs'] = {}\n const issues: ParseIssue[] = []\n\n let tripName: string | undefined\n let tripNameLoc: SourceLoc | undefined\n let tripTeam: string[] | undefined\n let tripTeamLoc: SourceLoc[] | undefined\n let tripDate: Date | undefined\n let tripDateLoc: SourceLoc | undefined\n let inTripComment = true\n let tripCommentStartLine = 1\n let tripCommentEndLine = -1\n const tripComment: string[] = []\n const commentLines: string[] = []\n let trip: FrcsTrip | InvalidFrcsTrip | undefined = undefined\n let inBlockComment = false\n let section\n let sectionLoc: SourceLoc | undefined\n const commentFromStationLruds = new Map<\n string,\n NonNullable<FrcsShot['fromLruds']>\n >()\n\n let unitsChanged = false\n let alternateUnits: FrcsUnits | InvalidFrcsUnits | undefined\n let nextShotUnits: FrcsUnits | InvalidFrcsUnits | undefined\n\n let lineNumber = 0\n let line: string\n let lineStartIndex = 0\n\n let lineIssues: number[] = []\n let tripIssues: number[] = []\n\n let began = false\n\n for await ({ line, startIndex: lineStartIndex } of chunksToLines(chunks)) {\n if (lineIssues.length) lineIssues = []\n\n lineNumber++\n\n if (!began) {\n began = true\n if (/^\\s+\\*/.test(line)) {\n continue\n }\n const match = /^\\s*([^,]+)(,(.*))?/d.exec(line)\n if (match) {\n cave = match[1].trim()\n if (includeLocs && match.indices) {\n rootLocs.cave = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...match.indices[1]\n )\n }\n if (match[3]) {\n location = match[3].trim()\n if (includeLocs && match.indices) {\n rootLocs.cave = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...match.indices[3]\n )\n }\n }\n }\n }\n\n if (unitsChanged) {\n unitsChanged = false\n alternateUnits = parseUnits()\n nextShotUnits = alternateUnits\n } else if (/^\\s{1,8}\\*(?!\\*)/.test(line)) {\n inTripComment = !inTripComment\n alternateUnits = nextShotUnits = undefined\n unitsChanged = false\n if (inTripComment) {\n tripName = undefined\n tripNameLoc = undefined\n section = undefined\n sectionLoc = undefined\n tripTeam = undefined\n tripTeamLoc = undefined\n tripDate = undefined\n tripDateLoc = undefined\n tripComment.length = 0\n tripCommentStartLine = lineNumber\n } else {\n tripCommentEndLine = lineNumber\n }\n } else if (inTripComment) {\n if (lineNumber === tripCommentStartLine + 1) {\n tripName = line.trim()\n const startColumn = /\\S/.exec(line)?.index ?? 0\n const endColumn = startColumn + tripName.length\n tripNameLoc = makeLineLoc(\n lineNumber,\n lineStartIndex,\n startColumn,\n endColumn\n )\n } else if (lineNumber === tripCommentStartLine + 2) {\n const dateMatch =\n /(?:[-.]\\s*)?((\\d+)[-/](\\d+)[-/](\\d{2,4})|((\\d+)[-/ ](january|february|march|april|may|june|july|august|september|october|november|december|(?:jan|feb|mar|apr|jun|jul|aug|sept?|oct|nov|dec)\\.?)[-/ ](\\d{2,4}))|((january|february|march|april|may|june|july|august|september|october|november|december|(?:jan|feb|mar|apr|jun|jul|aug|sept?|oct|nov|dec)\\.?)\\s+(\\d+)(?:,\\s*|,?\\s+)(\\d{2,4})))/di.exec(\n line\n )\n if (dateMatch) {\n const team = line.substring(0, dateMatch.index).replace(/\\.?\\s*$/, '')\n tripTeam = []\n tripTeamLoc = []\n for (const match of team.matchAll(\n team.includes(';')\n ? /\\s*([^;]+)\\s*/dg\n : team.includes(',')\n ? /\\s*([^,]+)\\s*/dg\n : team.includes('&')\n ? /\\s*([^&]+)\\s*/dg\n : /\\S {2,}\\S/.test(team)\n ? /(\\S+( \\S+)*)/dg\n : /(\\S+( \\S\\.? )? \\S{2,})/dg\n )) {\n const name = match[1].trim()\n tripTeam.push(name)\n if (includeLocs && match.indices) {\n const index = match.indices[1][0]\n tripTeamLoc.push(\n makeLineLoc(\n lineNumber,\n lineStartIndex,\n index,\n index + name.length\n )\n )\n }\n }\n if (!tripTeam.length) {\n addIssue(\n 'warning',\n 'missingTripTeam',\n 'Missing team',\n 0,\n dateMatch.index,\n tripIssues\n )\n }\n if (normalizeNames) tripTeam = tripTeam.map(normalizeTeamMemberName)\n let month, day, year\n if (dateMatch[2]) {\n month = parseInt(dateMatch[2])\n day = parseInt(dateMatch[3])\n year = parseInt(dateMatch[4])\n } else if (dateMatch[6]) {\n day = parseInt(dateMatch[6])\n month = parseMonth(dateMatch[7])\n year = parseInt(dateMatch[8])\n } else {\n month = parseMonth(dateMatch[10])\n day = parseInt(dateMatch[11])\n year = parseInt(dateMatch[12])\n }\n tripDate = new Date(year < 60 ? year + 2000 : year, month - 1, day)\n if (includeLocs && dateMatch.indices) {\n tripDateLoc = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...dateMatch.indices[1]\n )\n }\n } else {\n addIssue(\n 'warning',\n 'missingTripDate',\n 'Missing date',\n line.length,\n line.length,\n tripIssues\n )\n }\n } else if (lineNumber > 1) {\n tripComment.push(line)\n }\n const match = /^\\*\\*\\*([^*]+)\\*\\*\\*/.exec(line)\n if (match) {\n section = match[1].trim()\n }\n } else if (/^(\\s{9,}|)\\*(?!\\*)/.test(line)) {\n if (/^\\*\\s*%NC(\\b|$)/.test(line)) {\n unitsChanged = true\n }\n let match: RegExpMatchArray | null\n if ((match = /^\\*\\s*%T([ITM])(\\b|$)/.exec(line))) {\n const currentUnits = alternateUnits || unwrapInvalid(trip)?.units\n if (currentUnits && !('INVALID' in currentUnits)) {\n alternateUnits = {\n ...currentUnits,\n distanceUnit:\n match[1] === 'I'\n ? Length.inches\n : match[1] === 'M'\n ? Length.meters\n : Length.feet,\n }\n nextShotUnits = alternateUnits\n }\n }\n if (/^\\*\\s*%/.test(line)) {\n inBlockComment = false\n continue\n }\n if (/[^\\s*]/.test(line)) {\n addCommentLine(line.replace(/^\\s*\\*/, ''))\n inBlockComment = false\n } else {\n inBlockComment = !inBlockComment\n if (inBlockComment) commentLines.length = 0\n }\n } else if (inBlockComment) {\n addCommentLine(line)\n } else if (lineNumber === tripCommentEndLine + 1) {\n if (trip) trips.push(trip)\n const comment = tripComment.join('\\n') || undefined\n const headerLocs: FrcsTripHeader['locs'] =\n includeLocs && tripNameLoc\n ? {\n name: tripNameLoc,\n date: tripDateLoc,\n section: sectionLoc,\n team: tripTeamLoc,\n }\n : undefined\n const header = {\n name: tripName || '',\n comment,\n section,\n date: tripDate,\n team: tripTeam,\n ...(headerLocs && { locs: headerLocs }),\n }\n const units = parseUnits()\n if (\n 'INVALID' in units ||\n tripIssues.some((i) => issues[i]?.type === 'error')\n ) {\n trip = {\n INVALID: {\n header,\n units,\n shots: [],\n },\n ...(tripIssues.length ? { issues: tripIssues } : {}),\n }\n } else {\n trip = {\n tripNumber: 1,\n header,\n units,\n shots: [],\n }\n }\n tripIssues = []\n } else if (trip) {\n let distanceUnit =\n unwrapInvalid(alternateUnits)?.distanceUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).distanceUnit ||\n Length.feet\n const azimuthUnit =\n unwrapInvalid(alternateUnits)?.azimuthUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).azimuthUnit ||\n Angle.degrees\n const inclinationUnit =\n unwrapInvalid(alternateUnits)?.inclinationUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).inclinationUnit ||\n Angle.degrees\n\n const inches = distanceUnit === Length.inches\n if (inches) distanceUnit = Length.feet\n\n const ranges = inches ? columnRanges.feetAndInches : columnRanges.decimal\n\n // from station name\n if (!/\\S/.test(line.substring(...ranges.fromStation))) continue\n const fromStr = validate(\n ...ranges.fromStation,\n 'from station',\n isValidStation\n )\n const from = fromStr.trim()\n\n // Sadly I have found negative LRUD values in Chip's format and apparently\n // his program doesn't fail on them, so I have to accept them here\n // isValidOptFloat instead of isValidOptUFloat\n const lStr = validate(...ranges.left, 'left', isValidOptFloat)\n const rStr = validate(...ranges.right, 'right', isValidOptFloat)\n const uStr = validate(...ranges.up, 'up', isValidOptFloat)\n const dStr = validate(...ranges.down, 'down', isValidOptFloat)\n\n const up = parseLrud(uStr, distanceUnit)\n const down = parseLrud(dStr, distanceUnit)\n const left = parseLrud(lStr, distanceUnit)\n const right = parseLrud(rStr, distanceUnit)\n\n // to station name\n const toStr = line.substring(...ranges.toStation)\n if (!toStr.trim()) {\n const shot: FrcsShot = {\n from,\n to: undefined,\n distance: new UnitizedNumber(0, distanceUnit),\n frontsightAzimuth: undefined,\n backsightAzimuth: undefined,\n frontsightInclination: undefined,\n backsightInclination: undefined,\n fromLruds: {\n left,\n right,\n up,\n down,\n },\n comment: getComment(),\n }\n addShot(\n lineIssues.length ? { INVALID: shot, issues: lineIssues } : shot\n )\n continue\n }\n if (!isValidStation(toStr)) {\n addIssue(\n 'error',\n 'invalidStationName',\n 'Invalid station name',\n ...ranges.toStation\n )\n }\n\n let fromLruds = commentFromStationLruds.get(from)\n if (fromLruds) {\n commentFromStationLruds.delete(from)\n } else {\n const fromLrudMatch = new RegExp(\n `^\\\\s+${fromStr\n .trim()\n .replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&'\n )}((\\\\s+(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)){4})`\n ).exec(line.substring(maxRange))\n if (fromLrudMatch) {\n const [left, right, up, down] = fromLrudMatch[1]\n .trim()\n .split(/\\s+/g)\n .map((s) => parseLrud(s, distanceUnit))\n fromLruds = { left, right, up, down }\n }\n }\n\n const comment = getComment()\n\n // azimuth and inclination\n const azmFsStr = validate(\n ranges.frontsightAzimuth[0],\n ranges.frontsightAzimuth[1],\n 'azimuth',\n isValidOptUFloat\n )\n const azmBsStr = validate(\n ...ranges.backsightAzimuth,\n 'azimuth',\n isValidOptUFloat\n )\n const incFsStr = line.substring(...ranges.frontsightInclination)\n const incBsStr = line.substring(...ranges.backsightInclination)\n\n let distance: UnitizedNumber<Length> | undefined\n let horizontalDistance: UnitizedNumber<Length> | undefined\n let verticalDistance: UnitizedNumber<Length> | undefined\n let frontsightInclination: UnitizedNumber<Angle> | undefined\n let backsightInclination: UnitizedNumber<Angle> | undefined\n\n // parse distance\n if (inches) {\n const feetStr = validate(\n ...ranges.distanceFeet,\n 'feet',\n isValidOptUFloat\n )\n const inchesStr = validate(\n ...ranges.distanceInches,\n 'inches',\n isValidOptUFloat\n )\n if (!/\\S/.test(feetStr) && !/\\S/.test(inchesStr)) {\n addIssue(\n 'error',\n 'missingDistance',\n 'Missing distance',\n ranges.distanceFeet[0],\n ranges.distanceInches[1]\n )\n }\n // sometimes inches are omitted, hence the || 0...I'm assuming it's possible\n // for feet to be omitted as well\n else if (\n (isValidUInt(feetStr) && isValidOptUFloat(inchesStr)) ||\n (isValidOptUFloat(feetStr) && isValidUInt(inchesStr))\n ) {\n distance = Unitize.inches(parseFloat(inchesStr) || 0).add(\n Unitize.feet(parseFloat(feetStr) || 0)\n )\n }\n // NOTE there are two columns around here that can contain a *.\n // I think they might represent different values, but thisis confused by\n // the fact that for ft/in shots, if there is a D or H flag it occupies the\n // first column that can contain a * for decimal feet shots\n } else {\n const distStr = validate(...ranges.distance, 'distance', isValidUFloat)\n const distNum = parseFloat(distStr)\n distance = Number.isFinite(distNum)\n ? new UnitizedNumber(distNum, distanceUnit)\n : undefined\n }\n const specialKindStr = line.substring(...ranges.kind).trim()\n const exclude = line.substring(...ranges.exclude).trim()\n const specialKind = parseSpecialKind(specialKindStr)\n\n if (specialKindStr && !specialKind) {\n addIssue(\n 'error',\n 'invalidShotType',\n 'Invalid shot type',\n ranges.kind[0],\n ranges.kind[1]\n )\n }\n\n const excludeDistance = exclude === '*' || exclude === 's'\n const isSplay = exclude === 's'\n\n if (exclude && !excludeDistance) {\n addIssue(\n 'error',\n 'invalidShotFlag',\n 'Invalid shot flag',\n ranges.exclude[0],\n ranges.exclude[1]\n )\n }\n\n if (specialKind) {\n validate(\n ...ranges.frontsightInclination,\n 'vertical-distance',\n isValidFloat\n )\n }\n\n // convert horizontal and diagonal shots to standard\n // in this case incFs is the vertical offset between stations\n // fortunately it appears we can always count on incFs being specified\n // and incBs not being specified for these types of shots\n if (specialKind === 'horizontal') {\n // distance is horizontal offset and incFsStr is vertical offset\n horizontalDistance = distance\n const h = horizontalDistance?.get(distanceUnit) ?? NaN\n const v = parseFloat(incFsStr)\n verticalDistance = Number.isFinite(v)\n ? new UnitizedNumber(v, distanceUnit)\n : undefined\n distance = new UnitizedNumber(Math.sqrt(h * h + v * v), distanceUnit)\n frontsightInclination =\n verticalDistance && horizontalDistance\n ? Angle.atan2(verticalDistance, horizontalDistance).in(\n inclinationUnit\n )\n : undefined\n backsightInclination = undefined\n } else if (specialKind === 'diagonal') {\n // distance is as usual, but incFsStr is vertical offset\n const d = distance?.get(distanceUnit) ?? NaN\n const v = parseFloat(incFsStr)\n verticalDistance = Number.isFinite(v)\n ? new UnitizedNumber(v, distanceUnit)\n : undefined\n frontsightInclination = Angle.asin(v / d).in(inclinationUnit)\n backsightInclination = undefined\n } else {\n // frontsight inclination\n validate(\n ...ranges.frontsightInclination,\n 'inclination',\n isValidOptFloat\n )\n // backsight inclination\n validate(...ranges.backsightInclination, 'inclination', isValidOptFloat)\n frontsightInclination = parseNumber(incFsStr, inclinationUnit)\n backsightInclination = parseNumber(incBsStr, inclinationUnit)\n\n validateInclinationRange(\n frontsightInclination,\n ...ranges.frontsightInclination\n )\n validateInclinationRange(\n backsightInclination,\n ...ranges.backsightInclination\n )\n }\n\n const frontsightAzimuth = parseAzimuth(azmFsStr, azimuthUnit)\n const backsightAzimuth = parseAzimuth(azmBsStr, azimuthUnit)\n\n validateAzimuthRange(frontsightAzimuth, ...ranges.frontsightAzimuth)\n validateAzimuthRange(backsightAzimuth, ...ranges.backsightAzimuth)\n\n if (!/\\S/.test(incFsStr) && !/\\S/.test(incBsStr)) {\n frontsightInclination = Unitize.degrees(0)\n }\n\n if (from && distance && !lineIssues.length) {\n const shot: FrcsShot = {\n from,\n to: toStr.trim(),\n specialKind,\n distance,\n frontsightAzimuth,\n backsightAzimuth,\n frontsightInclination,\n backsightInclination,\n toLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance,\n comment,\n ...(includeLocs && {\n loc: makeLineLoc(lineNumber, lineStartIndex, 0, line.length),\n }),\n }\n if (isSplay) shot.isSplay = true\n if (fromLruds) shot.fromLruds = fromLruds\n if (horizontalDistance) shot.horizontalDistance = horizontalDistance\n if (verticalDistance) shot.verticalDistance = verticalDistance\n addShot(shot)\n } else {\n const shot: InvalidFrcsShot['INVALID'] = {\n from,\n to: toStr.trim(),\n specialKind,\n distance,\n frontsightAzimuth,\n backsightAzimuth,\n frontsightInclination,\n backsightInclination,\n toLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance,\n comment,\n ...(includeLocs && {\n loc: makeLineLoc(lineNumber, lineStartIndex, 0, line.length),\n }),\n }\n if (isSplay) shot.isSplay = true\n if (fromLruds) shot.fromLruds = fromLruds\n if (horizontalDistance) shot.horizontalDistance = horizontalDistance\n if (verticalDistance) shot.verticalDistance = verticalDistance\n addShot({ INVALID: shot, issues: lineIssues })\n }\n }\n }\n\n if (trip) trips.push(trip)\n\n trips.forEach((trip, index) => (unwrapInvalid(trip).tripNumber = index + 1))\n\n if (\n !issues.some((i) => i.type === 'error') &&\n trips.every((t): t is FrcsTrip => !('INVALID' in t))\n ) {\n return {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n ...(issues.length ? { issues } : undefined),\n ...(includeLocs && { locs: rootLocs }),\n }\n }\n\n return {\n INVALID: {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n ...(includeLocs && { locs: rootLocs }),\n },\n issues,\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////\n\n function getComment(): string | undefined {\n if (!commentLines?.length) return undefined\n const comment = commentLines.join('\\n').trim()\n commentLines.length = 0\n return comment || undefined\n }\n\n function addCommentLine(comment: string): void {\n if (trip) {\n const distanceUnit =\n unwrapInvalid(alternateUnits)?.distanceUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).distanceUnit ||\n Length.feet\n const parsedFromStationLruds = parseFromStationLruds(\n comment,\n distanceUnit\n )\n if (parsedFromStationLruds) {\n commentFromStationLruds.set(\n parsedFromStationLruds[0],\n parsedFromStationLruds[1]\n )\n return\n }\n }\n if (commentLines) {\n commentLines.push(comment)\n }\n }\n\n function addIssue(\n type: ParseIssueSeverity,\n code: string,\n message: string,\n startColumn: number,\n endColumn: number,\n indicesArray?: number[]\n ) {\n if (\n suppressWarnings &&\n type === 'warning' &&\n (suppressWarnings === true ||\n ('code' in suppressWarnings &&\n suppressWarnings[code as keyof typeof suppressWarnings] === true))\n ) {\n return\n }\n\n issues.push({\n type,\n code,\n message,\n loc: {\n start: {\n line: lineNumber,\n column: startColumn,\n index: lineStartIndex + startColumn,\n },\n end: {\n line: lineNumber,\n column: endColumn,\n index: lineStartIndex + endColumn,\n },\n },\n })\n if (!lineIssues) lineIssues = []\n lineIssues.push(issues.length - 1)\n indicesArray?.push(issues.length - 1)\n }\n\n function parseUnits(): FrcsUnits | InvalidFrcsUnits {\n // FT CC DD\n // 01234567\n const distanceUnit = parseLengthUnit(line.slice(0, 2))\n if (!distanceUnit) {\n addIssue('error', 'invalidDistanceUnit', 'Invalid distance unit', 0, 2)\n }\n const azimuthUnit = parseAngleUnit(line[6])\n if (!azimuthUnit) {\n addIssue('error', 'invalidAzimuthUnit', 'Invalid azimuth unit', 6, 7)\n }\n const inclinationUnit = parseAngleUnit(line[7])\n if (!inclinationUnit) {\n addIssue(\n 'error',\n 'invalidInclinationUnit',\n 'Invalid inclination unit',\n 7,\n 8\n )\n }\n const backsightAzimuthCorrected = line[3] === 'C'\n const backsightInclinationCorrected = line[4] === 'C'\n const hasBacksightAzimuth = line[3] !== ' ' && line[3] !== '-'\n const hasBacksightInclination = line[4] !== ' ' && line[4] !== '-'\n\n if (!/[-CB ]/.test(line[3])) {\n addIssue(\n 'error',\n 'invalidBacksightAzimuthType',\n 'Invalid backsight azimuth type',\n 3,\n 4\n )\n }\n if (!/[-CB ]/.test(line[4])) {\n addIssue(\n 'error',\n 'invalidBacksightInclinationType',\n 'Invalid backsight inclination type',\n 4,\n 5\n )\n }\n\n if (!distanceUnit || !azimuthUnit || !inclinationUnit) {\n return {\n INVALID: {\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n hasBacksightAzimuth,\n hasBacksightInclination,\n },\n issues: lineIssues,\n }\n }\n\n return {\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n hasBacksightAzimuth,\n hasBacksightInclination,\n }\n }\n\n function validate(\n startColumn: number,\n endColumn: number,\n fieldName: string,\n validator: (value: string) => boolean\n ): string {\n const field = line.substring(startColumn, endColumn)\n if (!validator(field)) {\n addIssue(\n 'error',\n `${\n field.trim() ? 'invalid' : 'missing'\n }${fieldName[0].toUpperCase()}${fieldName.substring(1)}`,\n (field.trim() ? 'Invalid ' : 'Missing ') + fieldName,\n startColumn,\n endColumn\n )\n }\n return field\n }\n\n function validateAzimuthRange(\n azimuth: UnitizedNumber<Angle> | undefined,\n startColumn: number,\n endColumn: number\n ) {\n if (!azimuth) return\n const rawValue = azimuth.get(azimuth.unit)\n let max = Infinity\n switch (azimuth.unit) {\n case Angle.degrees:\n max = 360\n break\n case Angle.gradians:\n max = 400\n break\n case Angle.radians:\n max = Math.PI * 2\n break\n case Angle.milsNATO:\n max = 6400\n break\n }\n if (rawValue < 0 || rawValue >= max) {\n addIssue(\n 'error',\n 'azimuthOutOfRange',\n 'Azimuth out of range',\n startColumn,\n endColumn,\n lineIssues\n )\n }\n }\n\n function validateInclinationRange(\n inclination: UnitizedNumber<Angle> | undefined,\n startColumn: number,\n endColumn: number\n ) {\n if (!inclination) return\n const rawValue = inclination.get(inclination.unit)\n let max = Infinity\n switch (inclination.unit) {\n case Angle.degrees:\n max = 90\n break\n case Angle.gradians:\n max = 100\n break\n case Angle.radians:\n max = Math.PI / 2\n break\n case Angle.milsNATO:\n max = 1600\n break\n }\n if (rawValue < -max || rawValue > max) {\n addIssue(\n 'error',\n 'inclinationOutOfRange',\n 'Inclination out of range',\n startColumn,\n endColumn,\n lineIssues\n )\n }\n }\n\n function addShot(shot: FrcsShot | InvalidFrcsShot) {\n if (!trip) return\n if (alternateUnits) {\n const recorded:\n | FrcsShot['recorded']\n | InvalidFrcsShot['INVALID']['recorded'] = shot\n if ('INVALID' in shot) {\n shot = {\n INVALID: {\n ...shot.INVALID,\n recorded: shot,\n },\n issues: shot.issues,\n }\n } else {\n shot = { ...shot, recorded: shot }\n }\n if (nextShotUnits) {\n unwrapInvalid(recorded).units = nextShotUnits\n nextShotUnits = undefined\n }\n const {\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n } = unwrapInvalid(unwrapInvalid(trip).units)\n const unwrappedAlternateUnits = unwrapInvalid(alternateUnits)\n const unwrappedShot = unwrapInvalid(shot)\n {\n const alternateUnits = unwrappedAlternateUnits\n const shot = unwrappedShot\n if (\n alternateUnits.backsightAzimuthCorrected !== backsightAzimuthCorrected\n ) {\n shot.backsightAzimuth = shot.backsightAzimuth\n ? Angle.opposite(shot.backsightAzimuth)\n : undefined\n }\n if (\n alternateUnits.backsightInclinationCorrected !==\n backsightInclinationCorrected\n ) {\n shot.backsightInclination = shot.backsightInclination?.negate()\n }\n if (distanceUnit && distanceUnit !== alternateUnits.distanceUnit) {\n shot.distance = shot.distance?.in(distanceUnit)\n if (shot.fromLruds) {\n shot.fromLruds = { ...shot.fromLruds }\n shot.fromLruds.left = shot.fromLruds.left?.in(distanceUnit)\n shot.fromLruds.right = shot.fromLruds.right?.in(distanceUnit)\n shot.fromLruds.up = shot.fromLruds.up?.in(distanceUnit)\n shot.fromLruds.down = shot.fromLruds.down?.in(distanceUnit)\n }\n if (shot.toLruds) {\n shot.toLruds = { ...shot.toLruds }\n shot.toLruds.left = shot.toLruds.left?.in(distanceUnit)\n shot.toLruds.right = shot.toLruds.right?.in(distanceUnit)\n shot.toLruds.up = shot.toLruds.up?.in(distanceUnit)\n shot.toLruds.down = shot.toLruds.down?.in(distanceUnit)\n }\n }\n if (azimuthUnit && azimuthUnit !== alternateUnits.azimuthUnit) {\n shot.frontsightAzimuth = shot.frontsightAzimuth?.in(azimuthUnit)\n shot.backsightAzimuth = shot.backsightAzimuth?.in(azimuthUnit)\n }\n if (\n inclinationUnit &&\n inclinationUnit !== alternateUnits.inclinationUnit\n ) {\n shot.frontsightInclination =\n shot.frontsightInclination?.in(inclinationUnit)\n shot.backsightInclination =\n shot.backsightInclination?.in(inclinationUnit)\n }\n }\n }\n if ('INVALID' in trip) {\n trip.INVALID.shots.push(shot)\n } else if ('INVALID' in shot) {\n trip = { INVALID: trip }\n trip.INVALID.shots.push(shot)\n } else {\n trip.shots.push(shot)\n }\n }\n}\n\nfunction makeLineLoc(\n line: number,\n lineStartIndex: number,\n startColumn: number,\n endColumn: number\n): SourceLoc {\n return {\n start: {\n index: lineStartIndex + startColumn,\n line,\n column: startColumn,\n },\n end: {\n index: lineStartIndex + endColumn,\n line,\n column: endColumn,\n },\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"parseFrcsSurveyFile.js","names":["_FrcsSurveyFile","require","_unitized","_chunksToLines","_validators","_getColumnRanges","_parsers","_normalizeTeamMemberName","_unwrapInvalid","parseFrcsSurveyFile","file","chunks","columns","defaultFrcsShotColumnConfig","outputColumns","normalizeNames","suppressWarnings","includeLocs","columnRanges","getColumnRanges","maxRange","Math","max","Object","values","decimal","map","r","cave","undefined","location","trips","rootLocs","issues","tripName","tripNameLoc","tripTeam","tripTeamLoc","tripDate","tripDateLoc","inTripComment","tripCommentStartLine","tripCommentEndLine","tripComment","commentLines","trip","inBlockComment","section","sectionLoc","commentFromStationLruds","Map","unitsChanged","alternateUnits","nextShotUnits","lineNumber","line","lineStartIndex","lineIssues","tripIssues","began","startIndex","chunksToLines","includeStartIndex","length","test","match","exec","trim","indices","makeLineLoc","parseUnits","startColumn","index","endColumn","dateMatch","team","substring","replace","matchAll","includes","name","push","addIssue","normalizeTeamMemberName","month","day","year","parseInt","parseMonth","Date","currentUnits","unwrapInvalid","units","distanceUnit","Length","inches","meters","feet","addCommentLine","comment","join","headerLocs","date","header","locs","some","i","type","INVALID","shots","tripNumber","azimuthUnit","Angle","degrees","inclinationUnit","ranges","feetAndInches","fromStation","fromStr","validate","isValidStation","from","lStr","left","isValidOptFloat","rStr","right","uStr","up","dStr","down","parseLrud","toStr","toStation","shot","to","distance","UnitizedNumber","frontsightAzimuth","backsightAzimuth","frontsightInclination","backsightInclination","fromLruds","getComment","addShot","get","delete","fromLrudMatch","RegExp","split","s","azmFsStr","isValidOptUFloat","azmBsStr","incFsStr","incBsStr","horizontalDistance","verticalDistance","feetStr","distanceFeet","inchesStr","distanceInches","isValidUInt","Unitize","parseFloat","add","distStr","isValidUFloat","distNum","Number","isFinite","specialKindStr","kind","exclude","specialKind","parseSpecialKind","excludeDistance","isSplay","isValidFloat","h","NaN","v","sqrt","atan2","in","d","asin","parseNumber","validateInclinationRange","parseAzimuth","validateAzimuthRange","toLruds","loc","forEach","every","t","parsedFromStationLruds","parseFromStationLruds","set","code","message","indicesArray","start","column","end","parseLengthUnit","slice","parseAngleUnit","backsightAzimuthCorrected","backsightInclinationCorrected","hasBacksightAzimuth","hasBacksightInclination","fieldName","validator","field","toUpperCase","azimuth","rawValue","unit","Infinity","gradians","radians","PI","milsNATO","inclination","recorded","unwrappedAlternateUnits","unwrappedShot","opposite","negate","module","exports","default"],"sources":["../../src/survey/parseFrcsSurveyFile.ts"],"sourcesContent":["import { defaultFrcsShotColumnConfig } from './FrcsSurveyFile'\nimport type {\n ParseFrcsSurveyFileOptions,\n FrcsSurveyFile,\n FrcsTrip,\n FrcsUnits,\n FrcsShot,\n InvalidFrcsSurveyFile,\n InvalidFrcsUnits,\n InvalidFrcsTrip,\n InvalidFrcsShot,\n FrcsTripHeader,\n} from './FrcsSurveyFile'\nimport { Angle, Length, UnitizedNumber, Unitize } from '@speleotica/unitized'\nimport { ParseIssue, ParseIssueSeverity } from '../ParseIssue'\nimport { chunksToLines } from '../chunksToLines'\nimport {\n isValidStation,\n isValidOptFloat,\n isValidOptUFloat,\n isValidUInt,\n isValidUFloat,\n isValidFloat,\n} from './validators'\nimport { getColumnRanges } from './getColumnRanges'\nimport {\n parseFromStationLruds,\n parseLengthUnit,\n parseAngleUnit,\n parseMonth,\n parseLrud,\n parseSpecialKind,\n parseNumber,\n parseAzimuth,\n} from './parsers'\nimport { normalizeTeamMemberName } from './normalizeTeamMemberName'\nimport { unwrapInvalid } from '../unwrapInvalid'\nimport { SourceLoc } from '../SourceLoc'\n\n/**\n * Parses a raw cdata.fr survey file. These look like so:\n *\n <pre> Fisher Ridge Cave System, Hart Co., KY\n ENTRANCE DROPS, JOE'S \"I LOVE MY WIFE TRAVERSE\", TRICKY TRAVERSE\n PETER QUICK, KEITH ORTIZ - 2-15-81\n This File has Crumps test connected. 11/20/12\n *\n FT C DD A\n AE20 0 1 3 0 2\n * %FS\n * AE20 0 0 0 Bug-can't put before so put after-so can't make 2 fixed 10/28/12\n AE19 AE20 9.3 60.0 60.0-36.0 2 12 0 20\n AE18 AE19 24.5 0.0 0.0-90.0 6 10 25 0\n AE17 AE18 8.0 350.5 350.5 17.0 3 5 0 0\n AE16 AE17 6.7 0.0 0.0-90.0 3 5 6 1\n AE15 AE16 12.6 70.5 71.0-18.0 4 0 2 1\n AE14 AE15 10.0 21.5 20.0 6.0 5 5 0 3\n AE13 AE14 26.8 288.0 286.0-50.0 0 7 20 5\n *\n *SHORT CANYON AT THE BASE OF THE SECOND DROP\n AE12 AE13 20.7 236.0 236.0 34.0 3 5 4 4\n AE11 AE12 12.4 210.0 210.0 35.0 7 4 5 1\n AE10 AE13 25.7 40.0 40.0 -9.0 2 2 3 6\n *\n *AE10 AT JOE'S \" I LOVE MY WIFE TRAVERSE \"\n AE9 AE10 17.8 32.5 31.0 23.0 4 5 20 15\n AE1 AE9 13.7 82.0 82.0-13.0\n A1 AE1 34.3 46.0 48.0-17.5\n *\n *SURVEY TO DOME NEAR THE ENTRANCE DOME (ABOVE THE SECOND DROP)\n AD1 AE15 8.0 200.0 200.0 0.0 3 1 1 1\n AD2 AD1 17.7 161.0 161.0 7.0 1 4 25 1\n AD3 AD2 10.4 180.0 180.0 50.0 4 1 15 5\n *\n TRICKY TRAVERSE AND THEN FIRST SURVEY IN UPPER CROWLWAY\n DAN CROWL, KEITH ORTIZ, CHIP HOPPER, PETER QUICK, LARRY BEAN 14 FEB 1981\n *\n FI B DD\n A2 A1 48 10 292.0 110.0-42.0 5 10 35 5\n A3 A2 12 5 333.5 153.5 35.0 3 1 15 5\n A4 A3 4 2 0.0 0.0 90.0 3 1 10 10\n ...</pre>\n *\n */\nexport default async function parseFrcsSurveyFile(\n file: any, // eslint-disable-line @typescript-eslint/no-explicit-any\n chunks: Iterable<string> | AsyncIterable<string>,\n {\n columns = defaultFrcsShotColumnConfig,\n outputColumns = false,\n normalizeNames = true,\n suppressWarnings,\n includeLocs,\n }: ParseFrcsSurveyFileOptions = {}\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile> {\n const columnRanges = getColumnRanges(columns)\n const maxRange = Math.max(\n ...Object.values(columnRanges.decimal).map((r) => r[1])\n )\n\n let cave: string | undefined = undefined\n let location: string | undefined = undefined\n const trips: (FrcsTrip | InvalidFrcsTrip)[] = []\n const rootLocs: FrcsSurveyFile['locs'] = {}\n const issues: ParseIssue[] = []\n\n let tripName: string | undefined\n let tripNameLoc: SourceLoc | undefined\n let tripTeam: string[] | undefined\n let tripTeamLoc: SourceLoc[] | undefined\n let tripDate: Date | undefined\n let tripDateLoc: SourceLoc | undefined\n let inTripComment = true\n let tripCommentStartLine = 1\n let tripCommentEndLine = -1\n const tripComment: string[] = []\n const commentLines: string[] = []\n let trip: FrcsTrip | InvalidFrcsTrip | undefined = undefined\n let inBlockComment = false\n let section\n let sectionLoc: SourceLoc | undefined\n const commentFromStationLruds = new Map<\n string,\n NonNullable<FrcsShot['fromLruds']>\n >()\n\n let unitsChanged = false\n let alternateUnits: FrcsUnits | InvalidFrcsUnits | undefined\n let nextShotUnits: FrcsUnits | InvalidFrcsUnits | undefined\n\n let lineNumber = 0\n let line: string\n let lineStartIndex = 0\n\n let lineIssues: number[] = []\n let tripIssues: number[] = []\n\n let began = false\n\n for await ({ line, startIndex: lineStartIndex } of chunksToLines(chunks, {\n includeStartIndex: true,\n })) {\n if (lineIssues.length) lineIssues = []\n\n lineNumber++\n\n if (!began) {\n began = true\n if (/^\\s+\\*/.test(line)) {\n continue\n }\n const match = /^\\s*([^,]+)(,(.*))?/d.exec(line)\n if (match) {\n cave = match[1].trim()\n if (includeLocs && match.indices) {\n rootLocs.cave = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...match.indices[1]\n )\n }\n if (match[3]) {\n location = match[3].trim()\n if (includeLocs && match.indices) {\n rootLocs.cave = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...match.indices[3]\n )\n }\n }\n }\n }\n\n if (unitsChanged) {\n unitsChanged = false\n alternateUnits = parseUnits()\n nextShotUnits = alternateUnits\n } else if (/^\\s{1,8}\\*(?!\\*)/.test(line)) {\n inTripComment = !inTripComment\n alternateUnits = nextShotUnits = undefined\n unitsChanged = false\n if (inTripComment) {\n tripName = undefined\n tripNameLoc = undefined\n section = undefined\n sectionLoc = undefined\n tripTeam = undefined\n tripTeamLoc = undefined\n tripDate = undefined\n tripDateLoc = undefined\n tripComment.length = 0\n tripCommentStartLine = lineNumber\n } else {\n tripCommentEndLine = lineNumber\n }\n } else if (inTripComment) {\n if (lineNumber === tripCommentStartLine + 1) {\n tripName = line.trim()\n const startColumn = /\\S/.exec(line)?.index ?? 0\n const endColumn = startColumn + tripName.length\n tripNameLoc = makeLineLoc(\n lineNumber,\n lineStartIndex,\n startColumn,\n endColumn\n )\n } else if (lineNumber === tripCommentStartLine + 2) {\n const dateMatch =\n /(?:[-.]\\s*)?((\\d+)[-/](\\d+)[-/](\\d{2,4})|((\\d+)[-/ ](january|february|march|april|may|june|july|august|september|october|november|december|(?:jan|feb|mar|apr|jun|jul|aug|sept?|oct|nov|dec)\\.?)[-/ ](\\d{2,4}))|((january|february|march|april|may|june|july|august|september|october|november|december|(?:jan|feb|mar|apr|jun|jul|aug|sept?|oct|nov|dec)\\.?)\\s+(\\d+)(?:,\\s*|,?\\s+)(\\d{2,4})))/di.exec(\n line\n )\n if (dateMatch) {\n const team = line.substring(0, dateMatch.index).replace(/\\.?\\s*$/, '')\n tripTeam = []\n tripTeamLoc = []\n for (const match of team.matchAll(\n team.includes(';')\n ? /\\s*([^;]+)\\s*/dg\n : team.includes(',')\n ? /\\s*([^,]+)\\s*/dg\n : team.includes('&')\n ? /\\s*([^&]+)\\s*/dg\n : /\\S {2,}\\S/.test(team)\n ? /(\\S+( \\S+)*)/dg\n : /(\\S+( \\S\\.? )? \\S{2,})/dg\n )) {\n const name = match[1].trim()\n tripTeam.push(name)\n if (includeLocs && match.indices) {\n const index = match.indices[1][0]\n tripTeamLoc.push(\n makeLineLoc(\n lineNumber,\n lineStartIndex,\n index,\n index + name.length\n )\n )\n }\n }\n if (!tripTeam.length) {\n addIssue(\n 'warning',\n 'missingTripTeam',\n 'Missing team',\n 0,\n dateMatch.index,\n tripIssues\n )\n }\n if (normalizeNames) tripTeam = tripTeam.map(normalizeTeamMemberName)\n let month, day, year\n if (dateMatch[2]) {\n month = parseInt(dateMatch[2])\n day = parseInt(dateMatch[3])\n year = parseInt(dateMatch[4])\n } else if (dateMatch[6]) {\n day = parseInt(dateMatch[6])\n month = parseMonth(dateMatch[7])\n year = parseInt(dateMatch[8])\n } else {\n month = parseMonth(dateMatch[10])\n day = parseInt(dateMatch[11])\n year = parseInt(dateMatch[12])\n }\n tripDate = new Date(year < 60 ? year + 2000 : year, month - 1, day)\n if (includeLocs && dateMatch.indices) {\n tripDateLoc = makeLineLoc(\n lineNumber,\n lineStartIndex,\n ...dateMatch.indices[1]\n )\n }\n } else {\n addIssue(\n 'warning',\n 'missingTripDate',\n 'Missing date',\n line.length,\n line.length,\n tripIssues\n )\n }\n } else if (lineNumber > 1) {\n tripComment.push(line)\n }\n const match = /^\\*\\*\\*([^*]+)\\*\\*\\*/.exec(line)\n if (match) {\n section = match[1].trim()\n }\n } else if (/^(\\s{9,}|)\\*(?!\\*)/.test(line)) {\n if (/^\\*\\s*%NC(\\b|$)/.test(line)) {\n unitsChanged = true\n }\n let match: RegExpMatchArray | null\n if ((match = /^\\*\\s*%T([ITM])(\\b|$)/.exec(line))) {\n const currentUnits = alternateUnits || unwrapInvalid(trip)?.units\n if (currentUnits && !('INVALID' in currentUnits)) {\n alternateUnits = {\n ...currentUnits,\n distanceUnit:\n match[1] === 'I'\n ? Length.inches\n : match[1] === 'M'\n ? Length.meters\n : Length.feet,\n }\n nextShotUnits = alternateUnits\n }\n }\n if (/^\\*\\s*%/.test(line)) {\n inBlockComment = false\n continue\n }\n if (/[^\\s*]/.test(line)) {\n addCommentLine(line.replace(/^\\s*\\*/, ''))\n inBlockComment = false\n } else {\n inBlockComment = !inBlockComment\n if (inBlockComment) commentLines.length = 0\n }\n } else if (inBlockComment) {\n addCommentLine(line)\n } else if (lineNumber === tripCommentEndLine + 1) {\n if (trip) trips.push(trip)\n const comment = tripComment.join('\\n') || undefined\n const headerLocs: FrcsTripHeader['locs'] =\n includeLocs && tripNameLoc\n ? {\n name: tripNameLoc,\n date: tripDateLoc,\n section: sectionLoc,\n team: tripTeamLoc,\n }\n : undefined\n const header = {\n name: tripName || '',\n comment,\n section,\n date: tripDate,\n team: tripTeam,\n ...(headerLocs && { locs: headerLocs }),\n }\n const units = parseUnits()\n if (\n 'INVALID' in units ||\n tripIssues.some((i) => issues[i]?.type === 'error')\n ) {\n trip = {\n INVALID: {\n header,\n units,\n shots: [],\n },\n ...(tripIssues.length ? { issues: tripIssues } : {}),\n }\n } else {\n trip = {\n tripNumber: 1,\n header,\n units,\n shots: [],\n }\n }\n tripIssues = []\n } else if (trip) {\n let distanceUnit =\n unwrapInvalid(alternateUnits)?.distanceUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).distanceUnit ||\n Length.feet\n const azimuthUnit =\n unwrapInvalid(alternateUnits)?.azimuthUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).azimuthUnit ||\n Angle.degrees\n const inclinationUnit =\n unwrapInvalid(alternateUnits)?.inclinationUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).inclinationUnit ||\n Angle.degrees\n\n const inches = distanceUnit === Length.inches\n if (inches) distanceUnit = Length.feet\n\n const ranges = inches ? columnRanges.feetAndInches : columnRanges.decimal\n\n // from station name\n if (!/\\S/.test(line.substring(...ranges.fromStation))) continue\n const fromStr = validate(\n ...ranges.fromStation,\n 'from station',\n isValidStation\n )\n const from = fromStr.trim()\n\n // Sadly I have found negative LRUD values in Chip's format and apparently\n // his program doesn't fail on them, so I have to accept them here\n // isValidOptFloat instead of isValidOptUFloat\n const lStr = validate(...ranges.left, 'left', isValidOptFloat)\n const rStr = validate(...ranges.right, 'right', isValidOptFloat)\n const uStr = validate(...ranges.up, 'up', isValidOptFloat)\n const dStr = validate(...ranges.down, 'down', isValidOptFloat)\n\n const up = parseLrud(uStr, distanceUnit)\n const down = parseLrud(dStr, distanceUnit)\n const left = parseLrud(lStr, distanceUnit)\n const right = parseLrud(rStr, distanceUnit)\n\n // to station name\n const toStr = line.substring(...ranges.toStation)\n if (!toStr.trim()) {\n const shot: FrcsShot = {\n from,\n to: undefined,\n distance: new UnitizedNumber(0, distanceUnit),\n frontsightAzimuth: undefined,\n backsightAzimuth: undefined,\n frontsightInclination: undefined,\n backsightInclination: undefined,\n fromLruds: {\n left,\n right,\n up,\n down,\n },\n comment: getComment(),\n }\n addShot(\n lineIssues.length ? { INVALID: shot, issues: lineIssues } : shot\n )\n continue\n }\n if (!isValidStation(toStr)) {\n addIssue(\n 'error',\n 'invalidStationName',\n 'Invalid station name',\n ...ranges.toStation\n )\n }\n\n let fromLruds = commentFromStationLruds.get(from)\n if (fromLruds) {\n commentFromStationLruds.delete(from)\n } else {\n const fromLrudMatch = new RegExp(\n `^\\\\s+${fromStr\n .trim()\n .replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&'\n )}((\\\\s+(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)){4})`\n ).exec(line.substring(maxRange))\n if (fromLrudMatch) {\n const [left, right, up, down] = fromLrudMatch[1]\n .trim()\n .split(/\\s+/g)\n .map((s) => parseLrud(s, distanceUnit))\n fromLruds = { left, right, up, down }\n }\n }\n\n const comment = getComment()\n\n // azimuth and inclination\n const azmFsStr = validate(\n ranges.frontsightAzimuth[0],\n ranges.frontsightAzimuth[1],\n 'azimuth',\n isValidOptUFloat\n )\n const azmBsStr = validate(\n ...ranges.backsightAzimuth,\n 'azimuth',\n isValidOptUFloat\n )\n const incFsStr = line.substring(...ranges.frontsightInclination)\n const incBsStr = line.substring(...ranges.backsightInclination)\n\n let distance: UnitizedNumber<Length> | undefined\n let horizontalDistance: UnitizedNumber<Length> | undefined\n let verticalDistance: UnitizedNumber<Length> | undefined\n let frontsightInclination: UnitizedNumber<Angle> | undefined\n let backsightInclination: UnitizedNumber<Angle> | undefined\n\n // parse distance\n if (inches) {\n const feetStr = validate(\n ...ranges.distanceFeet,\n 'feet',\n isValidOptUFloat\n )\n const inchesStr = validate(\n ...ranges.distanceInches,\n 'inches',\n isValidOptUFloat\n )\n if (!/\\S/.test(feetStr) && !/\\S/.test(inchesStr)) {\n addIssue(\n 'error',\n 'missingDistance',\n 'Missing distance',\n ranges.distanceFeet[0],\n ranges.distanceInches[1]\n )\n }\n // sometimes inches are omitted, hence the || 0...I'm assuming it's possible\n // for feet to be omitted as well\n else if (\n (isValidUInt(feetStr) && isValidOptUFloat(inchesStr)) ||\n (isValidOptUFloat(feetStr) && isValidUInt(inchesStr))\n ) {\n distance = Unitize.inches(parseFloat(inchesStr) || 0).add(\n Unitize.feet(parseFloat(feetStr) || 0)\n )\n }\n // NOTE there are two columns around here that can contain a *.\n // I think they might represent different values, but thisis confused by\n // the fact that for ft/in shots, if there is a D or H flag it occupies the\n // first column that can contain a * for decimal feet shots\n } else {\n const distStr = validate(...ranges.distance, 'distance', isValidUFloat)\n const distNum = parseFloat(distStr)\n distance = Number.isFinite(distNum)\n ? new UnitizedNumber(distNum, distanceUnit)\n : undefined\n }\n const specialKindStr = line.substring(...ranges.kind).trim()\n const exclude = line.substring(...ranges.exclude).trim()\n const specialKind = parseSpecialKind(specialKindStr)\n\n if (specialKindStr && !specialKind) {\n addIssue(\n 'error',\n 'invalidShotType',\n 'Invalid shot type',\n ranges.kind[0],\n ranges.kind[1]\n )\n }\n\n const excludeDistance = exclude === '*' || exclude === 's'\n const isSplay = exclude === 's'\n\n if (exclude && !excludeDistance) {\n addIssue(\n 'error',\n 'invalidShotFlag',\n 'Invalid shot flag',\n ranges.exclude[0],\n ranges.exclude[1]\n )\n }\n\n if (specialKind) {\n validate(\n ...ranges.frontsightInclination,\n 'vertical-distance',\n isValidFloat\n )\n }\n\n // convert horizontal and diagonal shots to standard\n // in this case incFs is the vertical offset between stations\n // fortunately it appears we can always count on incFs being specified\n // and incBs not being specified for these types of shots\n if (specialKind === 'horizontal') {\n // distance is horizontal offset and incFsStr is vertical offset\n horizontalDistance = distance\n const h = horizontalDistance?.get(distanceUnit) ?? NaN\n const v = parseFloat(incFsStr)\n verticalDistance = Number.isFinite(v)\n ? new UnitizedNumber(v, distanceUnit)\n : undefined\n distance = new UnitizedNumber(Math.sqrt(h * h + v * v), distanceUnit)\n frontsightInclination =\n verticalDistance && horizontalDistance\n ? Angle.atan2(verticalDistance, horizontalDistance).in(\n inclinationUnit\n )\n : undefined\n backsightInclination = undefined\n } else if (specialKind === 'diagonal') {\n // distance is as usual, but incFsStr is vertical offset\n const d = distance?.get(distanceUnit) ?? NaN\n const v = parseFloat(incFsStr)\n verticalDistance = Number.isFinite(v)\n ? new UnitizedNumber(v, distanceUnit)\n : undefined\n frontsightInclination = Angle.asin(v / d).in(inclinationUnit)\n backsightInclination = undefined\n } else {\n // frontsight inclination\n validate(\n ...ranges.frontsightInclination,\n 'inclination',\n isValidOptFloat\n )\n // backsight inclination\n validate(...ranges.backsightInclination, 'inclination', isValidOptFloat)\n frontsightInclination = parseNumber(incFsStr, inclinationUnit)\n backsightInclination = parseNumber(incBsStr, inclinationUnit)\n\n validateInclinationRange(\n frontsightInclination,\n ...ranges.frontsightInclination\n )\n validateInclinationRange(\n backsightInclination,\n ...ranges.backsightInclination\n )\n }\n\n const frontsightAzimuth = parseAzimuth(azmFsStr, azimuthUnit)\n const backsightAzimuth = parseAzimuth(azmBsStr, azimuthUnit)\n\n validateAzimuthRange(frontsightAzimuth, ...ranges.frontsightAzimuth)\n validateAzimuthRange(backsightAzimuth, ...ranges.backsightAzimuth)\n\n if (!/\\S/.test(incFsStr) && !/\\S/.test(incBsStr)) {\n frontsightInclination = Unitize.degrees(0)\n }\n\n if (from && distance && !lineIssues.length) {\n const shot: FrcsShot = {\n from,\n to: toStr.trim(),\n specialKind,\n distance,\n frontsightAzimuth,\n backsightAzimuth,\n frontsightInclination,\n backsightInclination,\n toLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance,\n comment,\n ...(includeLocs && {\n loc: makeLineLoc(lineNumber, lineStartIndex, 0, line.length),\n }),\n }\n if (isSplay) shot.isSplay = true\n if (fromLruds) shot.fromLruds = fromLruds\n if (horizontalDistance) shot.horizontalDistance = horizontalDistance\n if (verticalDistance) shot.verticalDistance = verticalDistance\n addShot(shot)\n } else {\n const shot: InvalidFrcsShot['INVALID'] = {\n from,\n to: toStr.trim(),\n specialKind,\n distance,\n frontsightAzimuth,\n backsightAzimuth,\n frontsightInclination,\n backsightInclination,\n toLruds: {\n left,\n right,\n up,\n down,\n },\n excludeDistance,\n comment,\n ...(includeLocs && {\n loc: makeLineLoc(lineNumber, lineStartIndex, 0, line.length),\n }),\n }\n if (isSplay) shot.isSplay = true\n if (fromLruds) shot.fromLruds = fromLruds\n if (horizontalDistance) shot.horizontalDistance = horizontalDistance\n if (verticalDistance) shot.verticalDistance = verticalDistance\n addShot({ INVALID: shot, issues: lineIssues })\n }\n }\n }\n\n if (trip) trips.push(trip)\n\n trips.forEach((trip, index) => (unwrapInvalid(trip).tripNumber = index + 1))\n\n if (\n !issues.some((i) => i.type === 'error') &&\n trips.every((t): t is FrcsTrip => !('INVALID' in t))\n ) {\n return {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n ...(issues.length ? { issues } : undefined),\n ...(includeLocs && { locs: rootLocs }),\n }\n }\n\n return {\n INVALID: {\n cave,\n columns: outputColumns ? columns : undefined,\n location,\n trips,\n ...(includeLocs && { locs: rootLocs }),\n },\n issues,\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////\n\n function getComment(): string | undefined {\n if (!commentLines?.length) return undefined\n const comment = commentLines.join('\\n').trim()\n commentLines.length = 0\n return comment || undefined\n }\n\n function addCommentLine(comment: string): void {\n if (trip) {\n const distanceUnit =\n unwrapInvalid(alternateUnits)?.distanceUnit ||\n unwrapInvalid(unwrapInvalid(trip).units).distanceUnit ||\n Length.feet\n const parsedFromStationLruds = parseFromStationLruds(\n comment,\n distanceUnit\n )\n if (parsedFromStationLruds) {\n commentFromStationLruds.set(\n parsedFromStationLruds[0],\n parsedFromStationLruds[1]\n )\n return\n }\n }\n if (commentLines) {\n commentLines.push(comment)\n }\n }\n\n function addIssue(\n type: ParseIssueSeverity,\n code: string,\n message: string,\n startColumn: number,\n endColumn: number,\n indicesArray?: number[]\n ) {\n if (\n suppressWarnings &&\n type === 'warning' &&\n (suppressWarnings === true ||\n ('code' in suppressWarnings &&\n suppressWarnings[code as keyof typeof suppressWarnings] === true))\n ) {\n return\n }\n\n issues.push({\n type,\n code,\n message,\n loc: {\n start: {\n line: lineNumber,\n column: startColumn,\n index: lineStartIndex + startColumn,\n },\n end: {\n line: lineNumber,\n column: endColumn,\n index: lineStartIndex + endColumn,\n },\n },\n })\n if (!lineIssues) lineIssues = []\n lineIssues.push(issues.length - 1)\n indicesArray?.push(issues.length - 1)\n }\n\n function parseUnits(): FrcsUnits | InvalidFrcsUnits {\n // FT CC DD\n // 01234567\n const distanceUnit = parseLengthUnit(line.slice(0, 2))\n if (!distanceUnit) {\n addIssue('error', 'invalidDistanceUnit', 'Invalid distance unit', 0, 2)\n }\n const azimuthUnit = parseAngleUnit(line[6])\n if (!azimuthUnit) {\n addIssue('error', 'invalidAzimuthUnit', 'Invalid azimuth unit', 6, 7)\n }\n const inclinationUnit = parseAngleUnit(line[7])\n if (!inclinationUnit) {\n addIssue(\n 'error',\n 'invalidInclinationUnit',\n 'Invalid inclination unit',\n 7,\n 8\n )\n }\n const backsightAzimuthCorrected = line[3] === 'C'\n const backsightInclinationCorrected = line[4] === 'C'\n const hasBacksightAzimuth = line[3] !== ' ' && line[3] !== '-'\n const hasBacksightInclination = line[4] !== ' ' && line[4] !== '-'\n\n if (!/[-CB ]/.test(line[3])) {\n addIssue(\n 'error',\n 'invalidBacksightAzimuthType',\n 'Invalid backsight azimuth type',\n 3,\n 4\n )\n }\n if (!/[-CB ]/.test(line[4])) {\n addIssue(\n 'error',\n 'invalidBacksightInclinationType',\n 'Invalid backsight inclination type',\n 4,\n 5\n )\n }\n\n if (!distanceUnit || !azimuthUnit || !inclinationUnit) {\n return {\n INVALID: {\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n hasBacksightAzimuth,\n hasBacksightInclination,\n },\n issues: lineIssues,\n }\n }\n\n return {\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n hasBacksightAzimuth,\n hasBacksightInclination,\n }\n }\n\n function validate(\n startColumn: number,\n endColumn: number,\n fieldName: string,\n validator: (value: string) => boolean\n ): string {\n const field = line.substring(startColumn, endColumn)\n if (!validator(field)) {\n addIssue(\n 'error',\n `${\n field.trim() ? 'invalid' : 'missing'\n }${fieldName[0].toUpperCase()}${fieldName.substring(1)}`,\n (field.trim() ? 'Invalid ' : 'Missing ') + fieldName,\n startColumn,\n endColumn\n )\n }\n return field\n }\n\n function validateAzimuthRange(\n azimuth: UnitizedNumber<Angle> | undefined,\n startColumn: number,\n endColumn: number\n ) {\n if (!azimuth) return\n const rawValue = azimuth.get(azimuth.unit)\n let max = Infinity\n switch (azimuth.unit) {\n case Angle.degrees:\n max = 360\n break\n case Angle.gradians:\n max = 400\n break\n case Angle.radians:\n max = Math.PI * 2\n break\n case Angle.milsNATO:\n max = 6400\n break\n }\n if (rawValue < 0 || rawValue >= max) {\n addIssue(\n 'error',\n 'azimuthOutOfRange',\n 'Azimuth out of range',\n startColumn,\n endColumn,\n lineIssues\n )\n }\n }\n\n function validateInclinationRange(\n inclination: UnitizedNumber<Angle> | undefined,\n startColumn: number,\n endColumn: number\n ) {\n if (!inclination) return\n const rawValue = inclination.get(inclination.unit)\n let max = Infinity\n switch (inclination.unit) {\n case Angle.degrees:\n max = 90\n break\n case Angle.gradians:\n max = 100\n break\n case Angle.radians:\n max = Math.PI / 2\n break\n case Angle.milsNATO:\n max = 1600\n break\n }\n if (rawValue < -max || rawValue > max) {\n addIssue(\n 'error',\n 'inclinationOutOfRange',\n 'Inclination out of range',\n startColumn,\n endColumn,\n lineIssues\n )\n }\n }\n\n function addShot(shot: FrcsShot | InvalidFrcsShot) {\n if (!trip) return\n if (alternateUnits) {\n const recorded:\n | FrcsShot['recorded']\n | InvalidFrcsShot['INVALID']['recorded'] = shot\n if ('INVALID' in shot) {\n shot = {\n INVALID: {\n ...shot.INVALID,\n recorded: shot,\n },\n issues: shot.issues,\n }\n } else {\n shot = { ...shot, recorded: shot }\n }\n if (nextShotUnits) {\n unwrapInvalid(recorded).units = nextShotUnits\n nextShotUnits = undefined\n }\n const {\n backsightAzimuthCorrected,\n backsightInclinationCorrected,\n distanceUnit,\n azimuthUnit,\n inclinationUnit,\n } = unwrapInvalid(unwrapInvalid(trip).units)\n const unwrappedAlternateUnits = unwrapInvalid(alternateUnits)\n const unwrappedShot = unwrapInvalid(shot)\n {\n const alternateUnits = unwrappedAlternateUnits\n const shot = unwrappedShot\n if (\n alternateUnits.backsightAzimuthCorrected !== backsightAzimuthCorrected\n ) {\n shot.backsightAzimuth = shot.backsightAzimuth\n ? Angle.opposite(shot.backsightAzimuth)\n : undefined\n }\n if (\n alternateUnits.backsightInclinationCorrected !==\n backsightInclinationCorrected\n ) {\n shot.backsightInclination = shot.backsightInclination?.negate()\n }\n if (distanceUnit && distanceUnit !== alternateUnits.distanceUnit) {\n shot.distance = shot.distance?.in(distanceUnit)\n if (shot.fromLruds) {\n shot.fromLruds = { ...shot.fromLruds }\n shot.fromLruds.left = shot.fromLruds.left?.in(distanceUnit)\n shot.fromLruds.right = shot.fromLruds.right?.in(distanceUnit)\n shot.fromLruds.up = shot.fromLruds.up?.in(distanceUnit)\n shot.fromLruds.down = shot.fromLruds.down?.in(distanceUnit)\n }\n if (shot.toLruds) {\n shot.toLruds = { ...shot.toLruds }\n shot.toLruds.left = shot.toLruds.left?.in(distanceUnit)\n shot.toLruds.right = shot.toLruds.right?.in(distanceUnit)\n shot.toLruds.up = shot.toLruds.up?.in(distanceUnit)\n shot.toLruds.down = shot.toLruds.down?.in(distanceUnit)\n }\n }\n if (azimuthUnit && azimuthUnit !== alternateUnits.azimuthUnit) {\n shot.frontsightAzimuth = shot.frontsightAzimuth?.in(azimuthUnit)\n shot.backsightAzimuth = shot.backsightAzimuth?.in(azimuthUnit)\n }\n if (\n inclinationUnit &&\n inclinationUnit !== alternateUnits.inclinationUnit\n ) {\n shot.frontsightInclination =\n shot.frontsightInclination?.in(inclinationUnit)\n shot.backsightInclination =\n shot.backsightInclination?.in(inclinationUnit)\n }\n }\n }\n if ('INVALID' in trip) {\n trip.INVALID.shots.push(shot)\n } else if ('INVALID' in shot) {\n trip = { INVALID: trip }\n trip.INVALID.shots.push(shot)\n } else {\n trip.shots.push(shot)\n }\n }\n}\n\nfunction makeLineLoc(\n line: number,\n lineStartIndex: number,\n startColumn: number,\n endColumn: number\n): SourceLoc {\n return {\n start: {\n index: lineStartIndex + startColumn,\n line,\n column: startColumn,\n },\n end: {\n index: lineStartIndex + endColumn,\n line,\n column: endColumn,\n },\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/web/index.js
CHANGED
|
@@ -79,7 +79,7 @@ const convertLineBased = fn => {
|
|
|
79
79
|
return converted;
|
|
80
80
|
};
|
|
81
81
|
function chunksOf(input) {
|
|
82
|
-
return readableStreamValues((input instanceof ReadableStream ? input : input.stream()).pipeThrough(new TextDecoderStream()));
|
|
82
|
+
return readableStreamValues((input instanceof ReadableStream ? input : input.stream()).pipeThrough(new TextDecoderStream('windows-1252')));
|
|
83
83
|
}
|
|
84
84
|
function parseFrcsSurveyFile(file, input, options) {
|
|
85
85
|
if (file instanceof File) return (0, _parseFrcsSurveyFile2.default)(file.name, chunksOf(file), options);
|
package/web/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_parseFrcsSurveyFile2","_interopRequireDefault","require","_parseFrcsPlotFile2","_parseFrcsTripSummaryFile2","LinesTransform","TransformStream","parts","constructor","transform","chunk","controller","end","match","matchAll","push","substring","index","enqueue","join","length","flush","readableStreamValues","stream","preventCancel","reader","getReader","next","result","read","done","releaseLock","e","return","value","cancelPromise","cancel","Symbol","asyncIterator","linesOf","input","ReadableStream","pipeThrough","TextDecoderStream","convertLineBased","fn","converted","file","File","name","chunksOf","parseFrcsSurveyFile","options","_parseFrcsSurveyFile","Blob","Error","parseFrcsPlotFile","exports","_parseFrcsPlotFile","parseFrcsTripSummaryFile","_parseFrcsTripSummaryFile"],"sources":["../../src/web/index.ts"],"sourcesContent":["import _parseFrcsSurveyFile from '../survey/parseFrcsSurveyFile'\nimport { ParseFrcsSurveyFileOptions } from '../survey/FrcsSurveyFile'\nimport _parseFrcsPlotFile from '../parseFrcsPlotFile'\nimport _parseFrcsTripSummaryFile from '../parseFrcsTripSummaryFile'\nimport type {\n FrcsSurveyFile,\n InvalidFrcsSurveyFile,\n} from '../survey/FrcsSurveyFile'\n\nclass LinesTransform extends TransformStream<string> {\n parts: string[] = []\n\n constructor() {\n super({\n transform: (chunk, controller) => {\n let end = 0\n for (const match of chunk.matchAll(/\\r\\n?|\\n/gm)) {\n this.parts.push(chunk.substring(end, match.index))\n controller.enqueue(this.parts.join(''))\n this.parts.length = 0\n end = match.index + match[0].length\n }\n if (end < chunk.length) this.parts.push(chunk.substring(end))\n },\n flush: (controller) => {\n if (this.parts.length) {\n controller.enqueue(this.parts.join(''))\n this.parts.length = 0\n }\n },\n })\n }\n}\n\nfunction readableStreamValues<T>(\n stream: ReadableStream<T>,\n { preventCancel = false }: { preventCancel?: boolean } = {}\n): AsyncIterableIterator<T> {\n const reader = stream.getReader()\n return {\n async next() {\n try {\n const result = await reader.read()\n if (result.done) {\n reader.releaseLock()\n }\n return result\n } catch (e) {\n reader.releaseLock()\n throw e\n }\n },\n async return(value: T) {\n if (!preventCancel) {\n const cancelPromise = reader.cancel(value)\n reader.releaseLock()\n await cancelPromise\n } else {\n reader.releaseLock()\n }\n return { done: true, value }\n },\n [Symbol.asyncIterator]() {\n return this\n },\n }\n}\n\nfunction linesOf(input: Blob | ReadableStream): AsyncIterable<string> {\n return readableStreamValues(\n (input instanceof ReadableStream ? input : input.stream())\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LinesTransform())\n )\n}\n\nconst convertLineBased = <T>(\n fn: (file: string, lines: AsyncIterable<string>) => Promise<T>\n) => {\n function converted(file: File): Promise<T>\n function converted(file: string, input: Blob | ReadableStream): Promise<T>\n function converted(\n file: string | File,\n input?: Blob | ReadableStream\n ): Promise<T> {\n if (file instanceof File) return converted(file.name, file)\n return fn(file, linesOf(input!))\n }\n return converted\n}\n\nfunction chunksOf(input: Blob | ReadableStream): AsyncIterable<string> {\n return readableStreamValues(\n (input instanceof ReadableStream ? input : input.stream()).pipeThrough(\n new TextDecoderStream()\n )\n )\n}\n\nexport function parseFrcsSurveyFile(\n file: File,\n options?: ParseFrcsSurveyFileOptions\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile>\nexport function parseFrcsSurveyFile(\n file: string,\n input: Blob | ReadableStream<Uint8Array>,\n options?: ParseFrcsSurveyFileOptions\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile>\nexport function parseFrcsSurveyFile(\n file: string | File,\n input?: Blob | ReadableStream<Uint8Array> | ParseFrcsSurveyFileOptions,\n options?: ParseFrcsSurveyFileOptions\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile> {\n if (file instanceof File)\n return _parseFrcsSurveyFile(file.name, chunksOf(file), options)\n if (input instanceof Blob || input instanceof ReadableStream) {\n return _parseFrcsSurveyFile(file, chunksOf(input), options)\n }\n throw new Error(`input ust be a Blob or ReadableStream if file is not a File`)\n}\n\nexport const parseFrcsPlotFile = convertLineBased(_parseFrcsPlotFile)\nexport const parseFrcsTripSummaryFile = convertLineBased(\n _parseFrcsTripSummaryFile\n)\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","names":["_parseFrcsSurveyFile2","_interopRequireDefault","require","_parseFrcsPlotFile2","_parseFrcsTripSummaryFile2","LinesTransform","TransformStream","parts","constructor","transform","chunk","controller","end","match","matchAll","push","substring","index","enqueue","join","length","flush","readableStreamValues","stream","preventCancel","reader","getReader","next","result","read","done","releaseLock","e","return","value","cancelPromise","cancel","Symbol","asyncIterator","linesOf","input","ReadableStream","pipeThrough","TextDecoderStream","convertLineBased","fn","converted","file","File","name","chunksOf","parseFrcsSurveyFile","options","_parseFrcsSurveyFile","Blob","Error","parseFrcsPlotFile","exports","_parseFrcsPlotFile","parseFrcsTripSummaryFile","_parseFrcsTripSummaryFile"],"sources":["../../src/web/index.ts"],"sourcesContent":["import _parseFrcsSurveyFile from '../survey/parseFrcsSurveyFile'\nimport { ParseFrcsSurveyFileOptions } from '../survey/FrcsSurveyFile'\nimport _parseFrcsPlotFile from '../parseFrcsPlotFile'\nimport _parseFrcsTripSummaryFile from '../parseFrcsTripSummaryFile'\nimport type {\n FrcsSurveyFile,\n InvalidFrcsSurveyFile,\n} from '../survey/FrcsSurveyFile'\n\nclass LinesTransform extends TransformStream<string> {\n parts: string[] = []\n\n constructor() {\n super({\n transform: (chunk, controller) => {\n let end = 0\n for (const match of chunk.matchAll(/\\r\\n?|\\n/gm)) {\n this.parts.push(chunk.substring(end, match.index))\n controller.enqueue(this.parts.join(''))\n this.parts.length = 0\n end = match.index + match[0].length\n }\n if (end < chunk.length) this.parts.push(chunk.substring(end))\n },\n flush: (controller) => {\n if (this.parts.length) {\n controller.enqueue(this.parts.join(''))\n this.parts.length = 0\n }\n },\n })\n }\n}\n\nfunction readableStreamValues<T>(\n stream: ReadableStream<T>,\n { preventCancel = false }: { preventCancel?: boolean } = {}\n): AsyncIterableIterator<T> {\n const reader = stream.getReader()\n return {\n async next() {\n try {\n const result = await reader.read()\n if (result.done) {\n reader.releaseLock()\n }\n return result\n } catch (e) {\n reader.releaseLock()\n throw e\n }\n },\n async return(value: T) {\n if (!preventCancel) {\n const cancelPromise = reader.cancel(value)\n reader.releaseLock()\n await cancelPromise\n } else {\n reader.releaseLock()\n }\n return { done: true, value }\n },\n [Symbol.asyncIterator]() {\n return this\n },\n }\n}\n\nfunction linesOf(input: Blob | ReadableStream): AsyncIterable<string> {\n return readableStreamValues(\n (input instanceof ReadableStream ? input : input.stream())\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LinesTransform())\n )\n}\n\nconst convertLineBased = <T>(\n fn: (file: string, lines: AsyncIterable<string>) => Promise<T>\n) => {\n function converted(file: File): Promise<T>\n function converted(file: string, input: Blob | ReadableStream): Promise<T>\n function converted(\n file: string | File,\n input?: Blob | ReadableStream\n ): Promise<T> {\n if (file instanceof File) return converted(file.name, file)\n return fn(file, linesOf(input!))\n }\n return converted\n}\n\nfunction chunksOf(input: Blob | ReadableStream): AsyncIterable<string> {\n return readableStreamValues(\n (input instanceof ReadableStream ? input : input.stream()).pipeThrough(\n new TextDecoderStream('windows-1252')\n )\n )\n}\n\nexport function parseFrcsSurveyFile(\n file: File,\n options?: ParseFrcsSurveyFileOptions\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile>\nexport function parseFrcsSurveyFile(\n file: string,\n input: Blob | ReadableStream<Uint8Array>,\n options?: ParseFrcsSurveyFileOptions\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile>\nexport function parseFrcsSurveyFile(\n file: string | File,\n input?: Blob | ReadableStream<Uint8Array> | ParseFrcsSurveyFileOptions,\n options?: ParseFrcsSurveyFileOptions\n): Promise<FrcsSurveyFile | InvalidFrcsSurveyFile> {\n if (file instanceof File)\n return _parseFrcsSurveyFile(file.name, chunksOf(file), options)\n if (input instanceof Blob || input instanceof ReadableStream) {\n return _parseFrcsSurveyFile(file, chunksOf(input), options)\n }\n throw new Error(`input ust be a Blob or ReadableStream if file is not a File`)\n}\n\nexport const parseFrcsPlotFile = convertLineBased(_parseFrcsPlotFile)\nexport const parseFrcsTripSummaryFile = convertLineBased(\n _parseFrcsTripSummaryFile\n)\n"],"mappings":";;;;;;;;;AAAA,IAAAA,qBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,mBAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,0BAAA,GAAAH,sBAAA,CAAAC,OAAA;AAMA,MAAMG,cAAc,SAASC,eAAe,CAAS;EACnDC,KAAK,GAAa,EAAE;EAEpBC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC;MACJC,SAAS,EAAEA,CAACC,KAAK,EAAEC,UAAU,KAAK;QAChC,IAAIC,GAAG,GAAG,CAAC;QACX,KAAK,MAAMC,KAAK,IAAIH,KAAK,CAACI,QAAQ,CAAC,YAAY,CAAC,EAAE;UAChD,IAAI,CAACP,KAAK,CAACQ,IAAI,CAACL,KAAK,CAACM,SAAS,CAACJ,GAAG,EAAEC,KAAK,CAACI,KAAK,CAAC,CAAC;UAClDN,UAAU,CAACO,OAAO,CAAC,IAAI,CAACX,KAAK,CAACY,IAAI,CAAC,EAAE,CAAC,CAAC;UACvC,IAAI,CAACZ,KAAK,CAACa,MAAM,GAAG,CAAC;UACrBR,GAAG,GAAGC,KAAK,CAACI,KAAK,GAAGJ,KAAK,CAAC,CAAC,CAAC,CAACO,MAAM;QACrC;QACA,IAAIR,GAAG,GAAGF,KAAK,CAACU,MAAM,EAAE,IAAI,CAACb,KAAK,CAACQ,IAAI,CAACL,KAAK,CAACM,SAAS,CAACJ,GAAG,CAAC,CAAC;MAC/D,CAAC;MACDS,KAAK,EAAGV,UAAU,IAAK;QACrB,IAAI,IAAI,CAACJ,KAAK,CAACa,MAAM,EAAE;UACrBT,UAAU,CAACO,OAAO,CAAC,IAAI,CAACX,KAAK,CAACY,IAAI,CAAC,EAAE,CAAC,CAAC;UACvC,IAAI,CAACZ,KAAK,CAACa,MAAM,GAAG,CAAC;QACvB;MACF;IACF,CAAC,CAAC;EACJ;AACF;AAEA,SAASE,oBAAoBA,CAC3BC,MAAyB,EACzB;EAAEC,aAAa,GAAG;AAAmC,CAAC,GAAG,CAAC,CAAC,EACjC;EAC1B,MAAMC,MAAM,GAAGF,MAAM,CAACG,SAAS,CAAC,CAAC;EACjC,OAAO;IACL,MAAMC,IAAIA,CAAA,EAAG;MACX,IAAI;QACF,MAAMC,MAAM,GAAG,MAAMH,MAAM,CAACI,IAAI,CAAC,CAAC;QAClC,IAAID,MAAM,CAACE,IAAI,EAAE;UACfL,MAAM,CAACM,WAAW,CAAC,CAAC;QACtB;QACA,OAAOH,MAAM;MACf,CAAC,CAAC,OAAOI,CAAC,EAAE;QACVP,MAAM,CAACM,WAAW,CAAC,CAAC;QACpB,MAAMC,CAAC;MACT;IACF,CAAC;IACD,MAAMC,MAAMA,CAACC,KAAQ,EAAE;MACrB,IAAI,CAACV,aAAa,EAAE;QAClB,MAAMW,aAAa,GAAGV,MAAM,CAACW,MAAM,CAACF,KAAK,CAAC;QAC1CT,MAAM,CAACM,WAAW,CAAC,CAAC;QACpB,MAAMI,aAAa;MACrB,CAAC,MAAM;QACLV,MAAM,CAACM,WAAW,CAAC,CAAC;MACtB;MACA,OAAO;QAAED,IAAI,EAAE,IAAI;QAAEI;MAAM,CAAC;IAC9B,CAAC;IACD,CAACG,MAAM,CAACC,aAAa,IAAI;MACvB,OAAO,IAAI;IACb;EACF,CAAC;AACH;AAEA,SAASC,OAAOA,CAACC,KAA4B,EAAyB;EACpE,OAAOlB,oBAAoB,CACzB,CAACkB,KAAK,YAAYC,cAAc,GAAGD,KAAK,GAAGA,KAAK,CAACjB,MAAM,CAAC,CAAC,EACtDmB,WAAW,CAAC,IAAIC,iBAAiB,CAAC,CAAC,CAAC,CACpCD,WAAW,CAAC,IAAIrC,cAAc,CAAC,CAAC,CACrC,CAAC;AACH;AAEA,MAAMuC,gBAAgB,GACpBC,EAA8D,IAC3D;EAGH,SAASC,SAASA,CAChBC,IAAmB,EACnBP,KAA6B,EACjB;IACZ,IAAIO,IAAI,YAAYC,IAAI,EAAE,OAAOF,SAAS,CAACC,IAAI,CAACE,IAAI,EAAEF,IAAI,CAAC;IAC3D,OAAOF,EAAE,CAACE,IAAI,EAAER,OAAO,CAACC,KAAM,CAAC,CAAC;EAClC;EACA,OAAOM,SAAS;AAClB,CAAC;AAED,SAASI,QAAQA,CAACV,KAA4B,EAAyB;EACrE,OAAOlB,oBAAoB,CACzB,CAACkB,KAAK,YAAYC,cAAc,GAAGD,KAAK,GAAGA,KAAK,CAACjB,MAAM,CAAC,CAAC,EAAEmB,WAAW,CACpE,IAAIC,iBAAiB,CAAC,cAAc,CACtC,CACF,CAAC;AACH;AAWO,SAASQ,mBAAmBA,CACjCJ,IAAmB,EACnBP,KAAsE,EACtEY,OAAoC,EACa;EACjD,IAAIL,IAAI,YAAYC,IAAI,EACtB,OAAO,IAAAK,6BAAoB,EAACN,IAAI,CAACE,IAAI,EAAEC,QAAQ,CAACH,IAAI,CAAC,EAAEK,OAAO,CAAC;EACjE,IAAIZ,KAAK,YAAYc,IAAI,IAAId,KAAK,YAAYC,cAAc,EAAE;IAC5D,OAAO,IAAAY,6BAAoB,EAACN,IAAI,EAAEG,QAAQ,CAACV,KAAK,CAAC,EAAEY,OAAO,CAAC;EAC7D;EACA,MAAM,IAAIG,KAAK,CAAC,6DAA6D,CAAC;AAChF;AAEO,MAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAGZ,gBAAgB,CAACc,2BAAkB,CAAC;AAC9D,MAAMC,wBAAwB,GAAAF,OAAA,CAAAE,wBAAA,GAAGf,gBAAgB,CACtDgB,kCACF,CAAC","ignoreList":[]}
|