@speleotica/frcsdata 4.3.0 → 4.3.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.
Files changed (81) hide show
  1. package/FrcsPlotFile.d.ts +1 -0
  2. package/FrcsPlotFile.d.ts.map +1 -0
  3. package/FrcsPlotFile.js +2 -1
  4. package/FrcsPlotFile.js.map +1 -0
  5. package/FrcsPlotShot.d.ts +1 -0
  6. package/FrcsPlotShot.d.ts.map +1 -0
  7. package/FrcsPlotShot.js +2 -1
  8. package/FrcsPlotShot.js.map +1 -0
  9. package/FrcsShot.d.ts +1 -0
  10. package/FrcsShot.d.ts.map +1 -0
  11. package/FrcsShot.js +2 -1
  12. package/FrcsShot.js.map +1 -0
  13. package/FrcsSurveyFile.d.ts +1 -0
  14. package/FrcsSurveyFile.d.ts.map +1 -0
  15. package/FrcsSurveyFile.js +2 -1
  16. package/FrcsSurveyFile.js.map +1 -0
  17. package/FrcsTrip.d.ts +1 -0
  18. package/FrcsTrip.d.ts.map +1 -0
  19. package/FrcsTrip.js +2 -1
  20. package/FrcsTrip.js.map +1 -0
  21. package/FrcsTripSummary.d.ts +1 -0
  22. package/FrcsTripSummary.d.ts.map +1 -0
  23. package/FrcsTripSummary.js +2 -1
  24. package/FrcsTripSummary.js.map +1 -0
  25. package/FrcsTripSummaryFile.d.ts +1 -0
  26. package/FrcsTripSummaryFile.d.ts.map +1 -0
  27. package/FrcsTripSummaryFile.js +2 -1
  28. package/FrcsTripSummaryFile.js.map +1 -0
  29. package/formatFrcsShot.d.ts +1 -0
  30. package/formatFrcsShot.d.ts.map +1 -0
  31. package/formatFrcsShot.js +5 -5
  32. package/formatFrcsShot.js.map +1 -0
  33. package/formatFrcsSurveyFile.d.ts +1 -0
  34. package/formatFrcsSurveyFile.d.ts.map +1 -0
  35. package/formatFrcsSurveyFile.js +2 -1
  36. package/formatFrcsSurveyFile.js.map +1 -0
  37. package/index.d.ts +1 -0
  38. package/index.d.ts.map +1 -0
  39. package/index.js +2 -1
  40. package/index.js.map +1 -0
  41. package/node/index.d.ts +1 -0
  42. package/node/index.d.ts.map +1 -0
  43. package/node/index.js +2 -1
  44. package/node/index.js.map +1 -0
  45. package/package.json +5 -2
  46. package/parseFrcsPlotFile.d.ts +1 -0
  47. package/parseFrcsPlotFile.d.ts.map +1 -0
  48. package/parseFrcsPlotFile.js +2 -1
  49. package/parseFrcsPlotFile.js.map +1 -0
  50. package/parseFrcsSurveyFile.d.ts +1 -0
  51. package/parseFrcsSurveyFile.d.ts.map +1 -0
  52. package/parseFrcsSurveyFile.js +5 -4
  53. package/parseFrcsSurveyFile.js.map +1 -0
  54. package/parseFrcsTripSummaryFile.d.ts +1 -0
  55. package/parseFrcsTripSummaryFile.d.ts.map +1 -0
  56. package/parseFrcsTripSummaryFile.js +2 -1
  57. package/parseFrcsTripSummaryFile.js.map +1 -0
  58. package/src/FrcsPlotFile.ts +9 -0
  59. package/src/FrcsPlotShot.ts +18 -0
  60. package/src/FrcsShot.ts +56 -0
  61. package/src/FrcsSurveyFile.ts +47 -0
  62. package/src/FrcsTrip.ts +25 -0
  63. package/src/FrcsTripSummary.ts +14 -0
  64. package/src/FrcsTripSummaryFile.ts +7 -0
  65. package/src/formatFrcsShot.ts +168 -0
  66. package/src/formatFrcsSurveyFile.ts +97 -0
  67. package/src/index.ts +29 -0
  68. package/src/node/index.ts +20 -0
  69. package/src/parseFrcsPlotFile.ts +168 -0
  70. package/src/parseFrcsSurveyFile.ts +788 -0
  71. package/src/parseFrcsTripSummaryFile.ts +76 -0
  72. package/src/string/index.ts +21 -0
  73. package/src/web/index.ts +119 -0
  74. package/string/index.d.ts +1 -0
  75. package/string/index.d.ts.map +1 -0
  76. package/string/index.js +2 -1
  77. package/string/index.js.map +1 -0
  78. package/web/index.d.ts +1 -0
  79. package/web/index.d.ts.map +1 -0
  80. package/web/index.js +5 -4
  81. package/web/index.js.map +1 -0
@@ -0,0 +1,76 @@
1
+ import { FrcsTripSummary } from './FrcsTripSummary'
2
+ import { FrcsTripSummaryFile } from './FrcsTripSummaryFile'
3
+ import { SegmentParseError } from 'parse-segment'
4
+ import { Unitize } from '@speleotica/unitized'
5
+
6
+ const tripSummaryRegex =
7
+ /^\s*(\d+)\s+(\d{1,2})\/(\s\d|\d\d)\/(\d{2,4})\s+(\d+(?:\.\d*)?)\s+(\d+)\s+(\S.*)EXCLUDED:\s*(\d+(?:\.\d{2})?)\s*(\d+)/
8
+ /**
9
+ * Parses data from a STAT_sum.txt file. Here is an excerpt of the format:
10
+ <pre> 1 2/15/81 258.60 17 ENTRANCE DROPS, JOE'S "I LOVE MY WIFE TRAVERSE", TRICKY TRAVERSE EXCLUDED: 0.00 0
11
+ Peter Quick Keith Ortiz
12
+ A1 AD1-AD3 AE1 AE1 SIDE
13
+ AE9 SIDE AE10-AE9 AE13 SIDE AE15 SIDE
14
+ AE20-AE11
15
+
16
+ 3 3/ 6/81 2371.20 61 DOUG'S DEMISE (50 FT DROP), CHRIS CROSS, CRAWL ABOVE DROP EXCLUDED: 0.00 0
17
+ Peter Quick Chris Gerace Phil Oden Chip Hopper
18
+ A13 SIDE B1-B5 B2 SIDE B3 SIDE
19
+ B6-B18 B17 SIDE B19-B38 B32 SIDE
20
+ BS1-BS5 C1-C18 </pre>
21
+ */
22
+ export default async function parseFrcsTripSummaryFile(
23
+ file: string,
24
+ lines: AsyncIterable<string>
25
+ ): Promise<FrcsTripSummaryFile> {
26
+ const errors: Array<SegmentParseError> = []
27
+ const tripSummaries: Array<FrcsTripSummary | undefined> = []
28
+
29
+ let tripStartLine = -2
30
+ let lineNumber = 0
31
+
32
+ let team: Array<string> = []
33
+ let shots: Array<string> = []
34
+
35
+ for await (const line of lines) {
36
+ lineNumber++
37
+
38
+ const match = tripSummaryRegex.exec(line)
39
+ if (match) {
40
+ tripStartLine = lineNumber
41
+ const tripNumber = parseInt(match[1])
42
+ const tripIndex = tripNumber - 1
43
+ let year = parseInt(match[4])
44
+ if (year < 1000) year += 1900
45
+ const date = new Date(year, parseInt(match[2]) - 1, parseInt(match[3]))
46
+ const totalLength = Unitize.feet(parseFloat(match[5]))
47
+ const numShots = parseInt(match[6])
48
+ const name = match[7].trim()
49
+ const excludedLength = Unitize.feet(parseFloat(match[8]))
50
+ const numExcludedShots = parseInt(match[9])
51
+ team = []
52
+ shots = []
53
+ tripSummaries[tripIndex] = {
54
+ tripNumber,
55
+ tripIndex,
56
+ date,
57
+ totalLength,
58
+ numShots,
59
+ name,
60
+ excludedLength,
61
+ numExcludedShots,
62
+ team,
63
+ shots,
64
+ }
65
+ continue
66
+ }
67
+ if (lineNumber === tripStartLine + 1) {
68
+ team.push(...line.trim().split(/\s\s+|\t+/g))
69
+ } else {
70
+ const trimmed = line.trim()
71
+ if (trimmed) shots.push(...trimmed.split(/\s\s+|\t+/))
72
+ }
73
+ }
74
+
75
+ return { errors, tripSummaries }
76
+ }
@@ -0,0 +1,21 @@
1
+ import _parseFrcsSurveyFile from '../parseFrcsSurveyFile'
2
+ import _parseFrcsPlotFile from '../parseFrcsPlotFile'
3
+ import _parseFrcsTripSummaryFile from '../parseFrcsTripSummaryFile'
4
+
5
+ async function* linesOf(s: string): AsyncIterable<string> {
6
+ yield* s.split(/\r\n?|\n/gm)
7
+ }
8
+ const convert =
9
+ <T, Rest extends any[]>(
10
+ fn: (
11
+ file: string,
12
+ lines: AsyncIterable<string>,
13
+ ...rest: Rest
14
+ ) => Promise<T>
15
+ ) =>
16
+ (file: string, str: string, ...rest: Rest): Promise<T> =>
17
+ fn(file, linesOf(str), ...rest)
18
+
19
+ export const parseFrcsSurveyFile = convert(_parseFrcsSurveyFile)
20
+ export const parseFrcsPlotFile = convert(_parseFrcsPlotFile)
21
+ export const parseFrcsTripSummaryFile = convert(_parseFrcsTripSummaryFile)
@@ -0,0 +1,119 @@
1
+ import _parseFrcsSurveyFile, {
2
+ ParseFrcsSurveyFileOptions,
3
+ } from '../parseFrcsSurveyFile'
4
+ import _parseFrcsPlotFile from '../parseFrcsPlotFile'
5
+ import _parseFrcsTripSummaryFile from '../parseFrcsTripSummaryFile'
6
+ import { FrcsSurveyFile } from '../FrcsSurveyFile'
7
+
8
+ class LinesTransform extends TransformStream<string> {
9
+ parts: string[] = []
10
+
11
+ constructor() {
12
+ super({
13
+ transform: (chunk, controller) => {
14
+ let end = 0
15
+ for (const match of chunk.matchAll(/\r\n?|\n/gm)) {
16
+ this.parts.push(chunk.substring(end, match.index))
17
+ controller.enqueue(this.parts.join(''))
18
+ this.parts.length = 0
19
+ end = match.index + match[0].length
20
+ }
21
+ if (end < chunk.length) this.parts.push(chunk.substring(end))
22
+ },
23
+ flush: (controller) => {
24
+ if (this.parts.length) {
25
+ controller.enqueue(this.parts.join(''))
26
+ this.parts.length = 0
27
+ }
28
+ },
29
+ })
30
+ }
31
+ }
32
+
33
+ function readableStreamValues<T>(
34
+ stream: ReadableStream<T>,
35
+ { preventCancel = false }: { preventCancel?: boolean } = {}
36
+ ): AsyncIterableIterator<T> {
37
+ const reader = stream.getReader()
38
+ return {
39
+ // @ts-expect-error types don't match, oh well
40
+ async next() {
41
+ try {
42
+ const result = await reader.read()
43
+ if (result.done) {
44
+ reader.releaseLock()
45
+ }
46
+ return result
47
+ } catch (e) {
48
+ reader.releaseLock()
49
+ throw e
50
+ }
51
+ },
52
+ async return(value: T) {
53
+ if (!preventCancel) {
54
+ const cancelPromise = reader.cancel(value)
55
+ reader.releaseLock()
56
+ await cancelPromise
57
+ } else {
58
+ reader.releaseLock()
59
+ }
60
+ return { done: true, value }
61
+ },
62
+ [Symbol.asyncIterator]() {
63
+ return this
64
+ },
65
+ }
66
+ }
67
+
68
+ function linesOf(
69
+ input: Blob | ReadableStream<Uint8Array>
70
+ ): AsyncIterable<string> {
71
+ return readableStreamValues(
72
+ (input instanceof ReadableStream ? input : input.stream())
73
+ .pipeThrough(new TextDecoderStream())
74
+ .pipeThrough(new LinesTransform())
75
+ )
76
+ }
77
+
78
+ const convert = <T>(
79
+ fn: (file: string, lines: AsyncIterable<string>) => Promise<T>
80
+ ) => {
81
+ function converted(file: File): Promise<T>
82
+ function converted(
83
+ file: string,
84
+ input: Blob | ReadableStream<Uint8Array>
85
+ ): Promise<T>
86
+ function converted(
87
+ file: string | File,
88
+ input?: Blob | ReadableStream<Uint8Array>
89
+ ): Promise<T> {
90
+ if (file instanceof File) return converted(file.name, file)
91
+ return fn(file, linesOf(input!))
92
+ }
93
+ return converted
94
+ }
95
+
96
+ export function parseFrcsSurveyFile(
97
+ file: File,
98
+ options?: ParseFrcsSurveyFileOptions
99
+ ): Promise<FrcsSurveyFile>
100
+ export function parseFrcsSurveyFile(
101
+ file: string,
102
+ input: Blob | ReadableStream<Uint8Array>,
103
+ options?: ParseFrcsSurveyFileOptions
104
+ ): Promise<FrcsSurveyFile>
105
+ export function parseFrcsSurveyFile(
106
+ file: string | File,
107
+ input?: Blob | ReadableStream<Uint8Array> | ParseFrcsSurveyFileOptions,
108
+ options?: ParseFrcsSurveyFileOptions
109
+ ): Promise<FrcsSurveyFile> {
110
+ if (file instanceof File)
111
+ return _parseFrcsSurveyFile(file.name, linesOf(file), options)
112
+ if (input instanceof Blob || input instanceof ReadableStream) {
113
+ return _parseFrcsSurveyFile(file, linesOf(input), options)
114
+ }
115
+ throw new Error(`input ust be a Blob or ReadableStream if file is not a File`)
116
+ }
117
+
118
+ export const parseFrcsPlotFile = convert(_parseFrcsPlotFile)
119
+ export const parseFrcsTripSummaryFile = convert(_parseFrcsTripSummaryFile)
package/string/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export declare const parseFrcsSurveyFile: (file: string, str: string, rest_0?: import("../parseFrcsSurveyFile").ParseFrcsSurveyFileOptions | undefined) => Promise<import("..").FrcsSurveyFile>;
2
2
  export declare const parseFrcsPlotFile: (file: string, str: string) => Promise<import("..").FrcsPlotFile>;
3
3
  export declare const parseFrcsTripSummaryFile: (file: string, str: string) => Promise<import("..").FrcsTripSummaryFile>;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/string/index.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,mBAAmB,SAHvB,MAAM,OAAO,MAAM,2HAGoC,CAAA;AAChE,eAAO,MAAM,iBAAiB,SAJrB,MAAM,OAAO,MAAM,uCAIgC,CAAA;AAC5D,eAAO,MAAM,wBAAwB,SAL5B,MAAM,OAAO,MAAM,8CAK8C,CAAA"}
package/string/index.js CHANGED
@@ -41,4 +41,5 @@ var convert = function convert(fn) {
41
41
  };
42
42
  var parseFrcsSurveyFile = exports.parseFrcsSurveyFile = convert(_parseFrcsSurveyFile2["default"]);
43
43
  var parseFrcsPlotFile = exports.parseFrcsPlotFile = convert(_parseFrcsPlotFile2["default"]);
44
- var parseFrcsTripSummaryFile = exports.parseFrcsTripSummaryFile = convert(_parseFrcsTripSummaryFile2["default"]);
44
+ var parseFrcsTripSummaryFile = exports.parseFrcsTripSummaryFile = convert(_parseFrcsTripSummaryFile2["default"]);
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_parseFrcsSurveyFile2","_interopRequireDefault","require","_parseFrcsPlotFile2","_parseFrcsTripSummaryFile2","_asyncIterator","r","n","t","o","e","Symbol","asyncIterator","iterator","call","AsyncFromSyncIterator","TypeError","AsyncFromSyncIteratorContinuation","Object","Promise","reject","done","resolve","value","then","s","next","prototype","apply","arguments","_return","_throw","linesOf","_x","_linesOf","_wrapAsyncGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","delegateYield","_asyncGeneratorDelegate2","split","_awaitAsyncGenerator2","stop","convert","fn","file","str","_len","length","rest","Array","_key","concat","parseFrcsSurveyFile","exports","_parseFrcsSurveyFile","parseFrcsPlotFile","_parseFrcsPlotFile","parseFrcsTripSummaryFile","_parseFrcsTripSummaryFile"],"sources":["../../src/string/index.ts"],"sourcesContent":["import _parseFrcsSurveyFile from '../parseFrcsSurveyFile'\nimport _parseFrcsPlotFile from '../parseFrcsPlotFile'\nimport _parseFrcsTripSummaryFile from '../parseFrcsTripSummaryFile'\n\nasync function* linesOf(s: string): AsyncIterable<string> {\n yield* s.split(/\\r\\n?|\\n/gm)\n}\nconst convert =\n <T, Rest extends any[]>(\n fn: (\n file: string,\n lines: AsyncIterable<string>,\n ...rest: Rest\n ) => Promise<T>\n ) =>\n (file: string, str: string, ...rest: Rest): Promise<T> =>\n fn(file, linesOf(str), ...rest)\n\nexport const parseFrcsSurveyFile = convert(_parseFrcsSurveyFile)\nexport const parseFrcsPlotFile = convert(_parseFrcsPlotFile)\nexport const parseFrcsTripSummaryFile = convert(_parseFrcsTripSummaryFile)\n"],"mappings":"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","ignoreList":[]}
package/web/index.d.ts CHANGED
@@ -10,3 +10,4 @@ export declare const parseFrcsTripSummaryFile: {
10
10
  (file: File): Promise<import("..").FrcsTripSummaryFile>;
11
11
  (file: string, input: Blob | ReadableStream<Uint8Array>): Promise<import("..").FrcsTripSummaryFile>;
12
12
  };
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,OAA6B,EAC3B,0BAA0B,EAC3B,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AA0FlD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,cAAc,CAAC,CAAA;AAC1B,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,EACxC,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,cAAc,CAAC,CAAA;AAc1B,eAAO,MAAM,iBAAiB;WArCH,IAAI;WAErB,MAAM,SACL,IAAI,GAAG,eAAe,UAAU,CAAC;CAkCgB,CAAA;AAC5D,eAAO,MAAM,wBAAwB;WAtCV,IAAI;WAErB,MAAM,SACL,IAAI,GAAG,eAAe,UAAU,CAAC;CAmC8B,CAAA"}
package/web/index.js CHANGED
@@ -18,9 +18,9 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
18
18
  var _parseFrcsSurveyFile2 = _interopRequireDefault(require("../parseFrcsSurveyFile.js"));
19
19
  var _parseFrcsPlotFile2 = _interopRequireDefault(require("../parseFrcsPlotFile.js"));
20
20
  var _parseFrcsTripSummaryFile2 = _interopRequireDefault(require("../parseFrcsTripSummaryFile.js"));
21
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
22
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
23
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
21
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
22
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
23
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
24
24
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
25
25
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
26
26
  var LinesTransform = /*#__PURE__*/function (_TransformStream) {
@@ -147,4 +147,5 @@ function parseFrcsSurveyFile(file, input, options) {
147
147
  throw new Error("input ust be a Blob or ReadableStream if file is not a File");
148
148
  }
149
149
  var parseFrcsPlotFile = exports.parseFrcsPlotFile = convert(_parseFrcsPlotFile2["default"]);
150
- var parseFrcsTripSummaryFile = exports.parseFrcsTripSummaryFile = convert(_parseFrcsTripSummaryFile2["default"]);
150
+ var parseFrcsTripSummaryFile = exports.parseFrcsTripSummaryFile = convert(_parseFrcsTripSummaryFile2["default"]);
151
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_parseFrcsSurveyFile2","_interopRequireDefault","require","_parseFrcsPlotFile2","_parseFrcsTripSummaryFile2","_createForOfIteratorHelper","r","e","t","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","_arrayLikeToArray","toString","slice","constructor","name","from","test","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","apply","Boolean","prototype","valueOf","LinesTransform","_TransformStream","_this","_classCallCheck2","transform","chunk","controller","end","_iterator","matchAll","_step","match","parts","push","substring","index","enqueue","join","err","flush","_defineProperty2","_inherits2","_createClass2","TransformStream","readableStreamValues","stream","_ref","arguments","undefined","_ref$preventCancel","preventCancel","reader","getReader","_asyncToGenerator2","_regenerator","mark","_callee","result","wrap","_callee$","_context","prev","read","sent","releaseLock","abrupt","t0","stop","_return","_callee2","cancelPromise","_callee2$","_context2","cancel","asyncIterator","linesOf","input","ReadableStream","pipeThrough","TextDecoderStream","convert","fn","converted","file","File","parseFrcsSurveyFile","options","_parseFrcsSurveyFile","Blob","Error","parseFrcsPlotFile","exports","_parseFrcsPlotFile","parseFrcsTripSummaryFile","_parseFrcsTripSummaryFile"],"sources":["../../src/web/index.ts"],"sourcesContent":["import _parseFrcsSurveyFile, {\n ParseFrcsSurveyFileOptions,\n} from '../parseFrcsSurveyFile'\nimport _parseFrcsPlotFile from '../parseFrcsPlotFile'\nimport _parseFrcsTripSummaryFile from '../parseFrcsTripSummaryFile'\nimport { FrcsSurveyFile } from '../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 // @ts-expect-error types don't match, oh well\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(\n input: Blob | ReadableStream<Uint8Array>\n): AsyncIterable<string> {\n return readableStreamValues(\n (input instanceof ReadableStream ? input : input.stream())\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LinesTransform())\n )\n}\n\nconst convert = <T>(\n fn: (file: string, lines: AsyncIterable<string>) => Promise<T>\n) => {\n function converted(file: File): Promise<T>\n function converted(\n file: string,\n input: Blob | ReadableStream<Uint8Array>\n ): Promise<T>\n function converted(\n file: string | File,\n input?: Blob | ReadableStream<Uint8Array>\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\nexport function parseFrcsSurveyFile(\n file: File,\n options?: ParseFrcsSurveyFileOptions\n): Promise<FrcsSurveyFile>\nexport function parseFrcsSurveyFile(\n file: string,\n input: Blob | ReadableStream<Uint8Array>,\n options?: ParseFrcsSurveyFileOptions\n): Promise<FrcsSurveyFile>\nexport function parseFrcsSurveyFile(\n file: string | File,\n input?: Blob | ReadableStream<Uint8Array> | ParseFrcsSurveyFileOptions,\n options?: ParseFrcsSurveyFileOptions\n): Promise<FrcsSurveyFile> {\n if (file instanceof File)\n return _parseFrcsSurveyFile(file.name, linesOf(file), options)\n if (input instanceof Blob || input instanceof ReadableStream) {\n return _parseFrcsSurveyFile(file, linesOf(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 = convert(_parseFrcsPlotFile)\nexport const parseFrcsTripSummaryFile = convert(_parseFrcsTripSummaryFile)\n"],"mappings":"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","ignoreList":[]}