@osmix/gtfs 0.0.1 → 0.0.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @osmix/gtfs
2
2
 
3
+ ## 0.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - f468db5: Fix publishing (2)
8
+ - 536a3cd: Remove JSR dependency for CSV parsing
9
+ - Updated dependencies [f468db5]
10
+ - @osmix/core@0.1.3
11
+ - @osmix/shared@0.0.8
12
+
13
+ ## 0.0.2
14
+
15
+ ### Patch Changes
16
+
17
+ - 68d6bd8: Fix publishing for packages.
18
+ - Updated dependencies [68d6bd8]
19
+ - @osmix/core@0.1.2
20
+ - @osmix/shared@0.0.7
21
+
3
22
  ## 0.0.1
4
23
 
5
24
  ### Added
package/README.md CHANGED
@@ -196,5 +196,6 @@ Class for more fine-grained control over the conversion process.
196
196
  ## Dependencies
197
197
 
198
198
  - [but-unzip](https://github.com/nicolo-ribaudo/but-unzip) - ZIP file parsing
199
- - [@std/csv](https://jsr.io/@std/csv) - Streaming CSV parsing (from Deno standard library)
199
+ - [csv-parse](https://www.npmjs.com/package/csv-parse) - CSV parsing from the csv npm
200
+ project
200
201
  - [@osmix/core](../core) - OSM data structures
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Lazy GTFS archive parser with streaming CSV support.
2
+ * Lazy GTFS archive parser.
3
3
  *
4
4
  * Only parses CSV files when they are accessed, not upfront.
5
- * Uses @std/csv CsvParseStream for true line-by-line streaming.
5
+ * Uses csv-parse from npm for CSV parsing.
6
6
  *
7
7
  * @module
8
8
  */
@@ -24,9 +24,8 @@ export type GtfsFileName = keyof GtfsFileTypeMap;
24
24
  * Lazy GTFS archive that only parses files on demand.
25
25
  *
26
26
  * Files are read from the zip and parsed only when their
27
- * corresponding getter is called for the first time.
28
- * Streaming iterators parse CSV line-by-line without loading
29
- * the entire file into memory.
27
+ * corresponding iterator is called for the first time.
28
+ * Iterators yield typed rows one record at a time.
30
29
  */
31
30
  export declare class GtfsArchive {
32
31
  private entries;
@@ -1 +1 @@
1
- {"version":3,"file":"gtfs-archive.d.ts","sourceRoot":"","sources":["../src/gtfs-archive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACX,UAAU,EACV,SAAS,EACT,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,MAAM,SAAS,CAAA;AAGhB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,YAAY,EAAE,UAAU,CAAA;IACxB,WAAW,EAAE,QAAQ,CAAA;IACrB,YAAY,EAAE,SAAS,CAAA;IACvB,WAAW,EAAE,QAAQ,CAAA;IACrB,gBAAgB,EAAE,YAAY,CAAA;IAC9B,YAAY,EAAE,cAAc,CAAA;CAC5B;AAED,+CAA+C;AAC/C,MAAM,MAAM,YAAY,GAAG,MAAM,eAAe,CAAA;AAEhD;;;;;;;GAOG;AACH,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAsB;IAErC,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW;IAiB9D;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;YACW,YAAY;IAQ1B;;;;;;;;;;;;;;;;;;OAkBG;IACI,IAAI,CAAC,CAAC,SAAS,YAAY,EACjC,QAAQ,EAAE,CAAC,GACT,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;CAoBpD"}
1
+ {"version":3,"file":"gtfs-archive.d.ts","sourceRoot":"","sources":["../src/gtfs-archive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACX,UAAU,EACV,SAAS,EACT,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,MAAM,SAAS,CAAA;AAEhB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,YAAY,EAAE,UAAU,CAAA;IACxB,WAAW,EAAE,QAAQ,CAAA;IACrB,YAAY,EAAE,SAAS,CAAA;IACvB,WAAW,EAAE,QAAQ,CAAA;IACrB,gBAAgB,EAAE,YAAY,CAAA;IAC9B,YAAY,EAAE,cAAc,CAAA;CAC5B;AAED,+CAA+C;AAC/C,MAAM,MAAM,YAAY,GAAG,MAAM,eAAe,CAAA;AAEhD;;;;;;GAMG;AACH,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAsB;IAErC,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW;IAiB9D;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;YACW,YAAY;IAQ1B;;;;;;;;;;;;;;;;;;OAkBG;IACI,IAAI,CAAC,CAAC,SAAS,YAAY,EACjC,QAAQ,EAAE,CAAC,GACT,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;CAepD"}
@@ -1,21 +1,19 @@
1
1
  /**
2
- * Lazy GTFS archive parser with streaming CSV support.
2
+ * Lazy GTFS archive parser.
3
3
  *
4
4
  * Only parses CSV files when they are accessed, not upfront.
5
- * Uses @std/csv CsvParseStream for true line-by-line streaming.
5
+ * Uses csv-parse from npm for CSV parsing.
6
6
  *
7
7
  * @module
8
8
  */
9
- import { CsvParseStream } from "@std/csv/parse-stream";
9
+ import { parse } from "csv-parse/sync";
10
10
  import { unzip } from "but-unzip";
11
- import { bytesToTextStream } from "./utils";
12
11
  /**
13
12
  * Lazy GTFS archive that only parses files on demand.
14
13
  *
15
14
  * Files are read from the zip and parsed only when their
16
- * corresponding getter is called for the first time.
17
- * Streaming iterators parse CSV line-by-line without loading
18
- * the entire file into memory.
15
+ * corresponding iterator is called for the first time.
16
+ * Iterators yield typed rows one record at a time.
19
17
  */
20
18
  export class GtfsArchive {
21
19
  entries;
@@ -83,19 +81,14 @@ export class GtfsArchive {
83
81
  const bytes = await this.getFileBytes(filename);
84
82
  if (!bytes)
85
83
  return;
86
- const textStream = bytesToTextStream(bytes);
87
- const csvStream = textStream.pipeThrough(new CsvParseStream({ skipFirstRow: true }));
88
- const reader = csvStream.getReader();
89
- try {
90
- while (true) {
91
- const { value, done } = await reader.read();
92
- if (done)
93
- break;
94
- yield value;
95
- }
96
- }
97
- finally {
98
- reader.releaseLock();
84
+ const csvText = new TextDecoder().decode(bytes);
85
+ const rows = parse(csvText, {
86
+ bom: true,
87
+ columns: true,
88
+ skip_empty_lines: true,
89
+ });
90
+ for (const row of rows) {
91
+ yield row;
99
92
  }
100
93
  }
101
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gtfs-archive.js","sourceRoot":"","sources":["../src/gtfs-archive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAgB,MAAM,WAAW,CAAA;AAS/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAiB3C;;;;;;;GAOG;AACH,MAAM,OAAO,WAAW;IACf,OAAO,CAAsB;IAErC,YAAoB,OAA6B;QAChD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,OAAiC;QAC/C,MAAM,KAAK,GACV,OAAO,YAAY,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAClE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QAE1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAA;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,gDAAgD;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;YAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACxB,CAAC;QACF,CAAC;QAED,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,QAAgB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,SAAS;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACvC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,QAAgB;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QAEvB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QACzB,OAAO,IAAI,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IACnD,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,CAAC,IAAI,CACV,QAAW;QAEX,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CACvC,IAAI,cAAc,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAC1C,CAAA;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAA;QACpC,IAAI,CAAC;YACJ,OAAO,IAAI,EAAE,CAAC;gBACb,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;gBAC3C,IAAI,IAAI;oBAAE,MAAK;gBACf,MAAM,KAAsC,CAAA;YAC7C,CAAC;QACF,CAAC;gBAAS,CAAC;YACV,MAAM,CAAC,WAAW,EAAE,CAAA;QACrB,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"gtfs-archive.js","sourceRoot":"","sources":["../src/gtfs-archive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAgB,MAAM,WAAW,CAAA;AAyB/C;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACf,OAAO,CAAsB;IAErC,YAAoB,OAA6B;QAChD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,OAAiC;QAC/C,MAAM,KAAK,GACV,OAAO,YAAY,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAClE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QAE1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAA;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,gDAAgD;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;YAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACxB,CAAC;QACF,CAAC;QAED,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,QAAgB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,SAAS;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACvC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,QAAgB;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QAEvB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QACzB,OAAO,IAAI,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IACnD,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,CAAC,IAAI,CACV,QAAW;QAEX,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAyB,OAAO,EAAE;YACnD,GAAG,EAAE,IAAI;YACT,OAAO,EAAE,IAAI;YACb,gBAAgB,EAAE,IAAI;SACtB,CAAC,CAAA;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,GAAoC,CAAA;QAC3C,CAAC;IACF,CAAC;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EACN,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,QAAQ,EAGb,MAAM,SAAS,CAAA;AAEhB;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAsFpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAoClD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAoCrD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAelD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAqB3E"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EACN,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,QAAQ,EAGb,MAAM,SAAS,CAAA;AAEhB;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CA0FpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAoClD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CA4BrD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAelD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAqB3E"}
package/dist/utils.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { normalizeHexColor } from "@osmix/shared/color";
1
2
  import { routeTypeToOsmRoute, wheelchairBoardingToOsm, } from "./types";
2
3
  /**
3
4
  * Check if a ZIP file (as bytes) is a GTFS archive by looking for characteristic GTFS files.
@@ -49,11 +50,15 @@ export function isGtfsZip(bytes) {
49
50
  foundFiles.add(basename);
50
51
  }
51
52
  if (!hasDataDescriptor) {
52
- // Read compressed size at offset 18-21 (little-endian)
53
- const compSize = (bytes[pos + 18] ?? 0) |
53
+ // Read compressed size at offset 18-21 (little-endian).
54
+ // Use >>> 0 to ensure unsigned 32-bit interpretation, since
55
+ // JavaScript bitwise operations return signed 32-bit integers.
56
+ // Without this, files >= 2GB would produce negative values.
57
+ const compSize = ((bytes[pos + 18] ?? 0) |
54
58
  ((bytes[pos + 19] ?? 0) << 8) |
55
59
  ((bytes[pos + 20] ?? 0) << 16) |
56
- ((bytes[pos + 21] ?? 0) << 24);
60
+ ((bytes[pos + 21] ?? 0) << 24)) >>>
61
+ 0;
57
62
  // Move to next entry using the known compressed size
58
63
  pos += 30 + nameLen + extraLen + compSize;
59
64
  }
@@ -147,19 +152,13 @@ export function routeToTags(route) {
147
152
  tags["description"] = route.route_desc;
148
153
  if (route.route_url)
149
154
  tags["website"] = route.route_url;
150
- // Route color (normalize to include # prefix)
151
- if (route.route_color) {
152
- const color = route.route_color.startsWith("#")
153
- ? route.route_color
154
- : `#${route.route_color}`;
155
+ // Route color (validate and normalize hex color)
156
+ const color = normalizeHexColor(route.route_color);
157
+ if (color)
155
158
  tags["color"] = color;
156
- }
157
- if (route.route_text_color) {
158
- const textColor = route.route_text_color.startsWith("#")
159
- ? route.route_text_color
160
- : `#${route.route_text_color}`;
159
+ const textColor = normalizeHexColor(route.route_text_color);
160
+ if (textColor)
161
161
  tags["text_color"] = textColor;
162
- }
163
162
  // Route type as additional tag
164
163
  tags["gtfs:route_type"] = route.route_type;
165
164
  return tags;
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,12 +2,13 @@
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@osmix/gtfs",
4
4
  "description": "Convert GTFS transit feeds to OSM format.",
5
- "version": "0.0.1",
5
+ "version": "0.0.3",
6
6
  "type": "module",
7
7
  "main": "./src/index.ts",
8
8
  "types": "./src/index.ts",
9
9
  "publishConfig": {
10
10
  "access": "public",
11
+ "registry": "https://registry.npmjs.org/",
11
12
  "main": "./dist/index.js",
12
13
  "types": "./dist/index.d.ts",
13
14
  "exports": {
@@ -35,19 +36,20 @@
35
36
  "scripts": {
36
37
  "build": "tsc -p tsconfig.build.json",
37
38
  "bench": "bun test --bench",
38
- "prepublishOnly": "tsc",
39
+ "prepare": "bun run build",
40
+ "release": "bun publish",
39
41
  "test": "bun test",
40
42
  "typecheck": "tsgo --noEmit"
41
43
  },
42
44
  "devDependencies": {
43
- "@types/bun": "catalog:",
45
+ "@types/bun": "^1.3.3",
44
46
  "fflate": "^0.8.2",
45
- "typescript": "catalog:"
47
+ "typescript": "^5.9.0"
46
48
  },
47
49
  "dependencies": {
48
- "@osmix/core": "workspace:*",
49
- "@osmix/shared": "workspace:*",
50
- "@std/csv": "npm:@jsr/std__csv",
51
- "but-unzip": "^0.1.7"
50
+ "@osmix/core": "0.1.3",
51
+ "@osmix/shared": "0.0.8",
52
+ "but-unzip": "^0.1.7",
53
+ "csv-parse": "^6.1.0"
52
54
  }
53
55
  }
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Lazy GTFS archive parser with streaming CSV support.
2
+ * Lazy GTFS archive parser.
3
3
  *
4
4
  * Only parses CSV files when they are accessed, not upfront.
5
- * Uses @std/csv CsvParseStream for true line-by-line streaming.
5
+ * Uses csv-parse from npm for CSV parsing.
6
6
  *
7
7
  * @module
8
8
  */
9
9
 
10
- import { CsvParseStream } from "@std/csv/parse-stream"
10
+ import { parse } from "csv-parse/sync"
11
11
  import { unzip, type ZipItem } from "but-unzip"
12
12
  import type {
13
13
  GtfsAgency,
@@ -17,7 +17,6 @@ import type {
17
17
  GtfsStopTime,
18
18
  GtfsTrip,
19
19
  } from "./types"
20
- import { bytesToTextStream } from "./utils"
21
20
 
22
21
  /**
23
22
  * Map of GTFS filenames to their record types.
@@ -38,9 +37,8 @@ export type GtfsFileName = keyof GtfsFileTypeMap
38
37
  * Lazy GTFS archive that only parses files on demand.
39
38
  *
40
39
  * Files are read from the zip and parsed only when their
41
- * corresponding getter is called for the first time.
42
- * Streaming iterators parse CSV line-by-line without loading
43
- * the entire file into memory.
40
+ * corresponding iterator is called for the first time.
41
+ * Iterators yield typed rows one record at a time.
44
42
  */
45
43
  export class GtfsArchive {
46
44
  private entries: Map<string, ZipItem>
@@ -119,20 +117,15 @@ export class GtfsArchive {
119
117
  const bytes = await this.getFileBytes(filename)
120
118
  if (!bytes) return
121
119
 
122
- const textStream = bytesToTextStream(bytes)
123
- const csvStream = textStream.pipeThrough(
124
- new CsvParseStream({ skipFirstRow: true }),
125
- )
120
+ const csvText = new TextDecoder().decode(bytes)
121
+ const rows = parse<Record<string, string>>(csvText, {
122
+ bom: true,
123
+ columns: true,
124
+ skip_empty_lines: true,
125
+ })
126
126
 
127
- const reader = csvStream.getReader()
128
- try {
129
- while (true) {
130
- const { value, done } = await reader.read()
131
- if (done) break
132
- yield value as unknown as GtfsFileTypeMap[F]
133
- }
134
- } finally {
135
- reader.releaseLock()
127
+ for (const row of rows) {
128
+ yield row as unknown as GtfsFileTypeMap[F]
136
129
  }
137
130
  }
138
131
  }
@@ -201,6 +201,21 @@ describe("GtfsArchive", () => {
201
201
  expect(routes[0]?.route_short_name).toBe("1")
202
202
  })
203
203
 
204
+ test("parses quoted CSV fields", async () => {
205
+ const { zipSync } = await import("fflate")
206
+ const encoder = new TextEncoder()
207
+ const zipData = zipSync({
208
+ "stops.txt": encoder.encode(`stop_id,stop_name,stop_lat,stop_lon
209
+ stop1,"Main ""Central"", Downtown",40.7128,-74.0060`),
210
+ })
211
+
212
+ const archive = GtfsArchive.fromZip(zipData)
213
+ const stops = await Array.fromAsync(archive.iter("stops.txt"))
214
+
215
+ expect(stops.length).toBe(1)
216
+ expect(stops[0]?.stop_name).toBe('Main "Central", Downtown')
217
+ })
218
+
204
219
  test("iterates stops without loading all at once", async () => {
205
220
  const zipData = await createTestGtfsZip()
206
221
  const archive = GtfsArchive.fromZip(zipData)