@osmix/pbf 0.0.3 → 0.0.4

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.
@@ -0,0 +1,96 @@
1
+ import Pbf from "pbf";
2
+ import { osmPbfBlobsToBlocksGenerator } from "./blobs-to-blocks";
3
+ import { createOsmPbfBlobGenerator } from "./pbf-to-blobs";
4
+ import { readHeaderBlock, readPrimitiveBlock, } from "./proto/osmformat";
5
+ import { toAsyncGenerator, webDecompress, } from "./utils";
6
+ /** Number of bytes used to encode the BlobHeader length prefix (big-endian uint32). */
7
+ export const HEADER_LENGTH_BYTES = 4;
8
+ /**
9
+ * Parse an OSM PBF file from various input sources.
10
+ *
11
+ * Accepts `ArrayBuffer`, `Uint8Array`, `ReadableStream<Uint8Array>`, or async generators.
12
+ * Returns the file header and a lazy async generator of primitive blocks for on-demand parsing.
13
+ *
14
+ * @param data - PBF bytes as buffer, stream, or async iterable.
15
+ * @returns Object with `header` (file metadata) and `blocks` (async generator of primitive blocks).
16
+ * @throws If the header block is missing or malformed.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import { readOsmPbf } from "@osmix/pbf"
21
+ *
22
+ * // From a file stream
23
+ * const { header, blocks } = await readOsmPbf(Bun.file('./monaco.pbf').stream())
24
+ *
25
+ * // From a fetch response
26
+ * const response = await fetch('/data/monaco.pbf')
27
+ * const { header, blocks } = await readOsmPbf(response.body!)
28
+ *
29
+ * // Iterate blocks lazily
30
+ * for await (const block of blocks) {
31
+ * for (const group of block.primitivegroup) {
32
+ * console.log(group.dense?.id.length ?? 0, "dense nodes")
33
+ * }
34
+ * }
35
+ * ```
36
+ */
37
+ export async function readOsmPbf(data) {
38
+ const generateBlobsFromChunk = createOsmPbfBlobGenerator();
39
+ const blocks = osmPbfBlobsToBlocksGenerator((async function* () {
40
+ for await (const chunk of toAsyncGenerator(data)) {
41
+ for await (const blob of generateBlobsFromChunk(chunk)) {
42
+ yield blob;
43
+ }
44
+ }
45
+ })());
46
+ const header = (await blocks.next()).value;
47
+ if (header == null || !("required_features" in header)) {
48
+ throw Error("OSM PBF header block not found");
49
+ }
50
+ return {
51
+ header,
52
+ blocks: blocks,
53
+ };
54
+ }
55
+ /**
56
+ * Web `TransformStream` that decodes raw PBF byte chunks into OSM header and data blocks.
57
+ *
58
+ * The first blob in an OSM PBF file is always the header block; subsequent blobs
59
+ * contain primitive data (nodes, ways, relations). This stream handles the framing,
60
+ * decompression, and protobuf decoding automatically.
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * import { OsmPbfBytesToBlocksTransformStream } from "@osmix/pbf"
65
+ *
66
+ * const response = await fetch('/data/monaco.pbf')
67
+ * const blocksStream = response.body!
68
+ * .pipeThrough(new OsmPbfBytesToBlocksTransformStream())
69
+ *
70
+ * const reader = blocksStream.getReader()
71
+ * const { value: header } = await reader.read() // First read yields header
72
+ * // Subsequent reads yield primitive blocks
73
+ * ```
74
+ */
75
+ export class OsmPbfBytesToBlocksTransformStream extends TransformStream {
76
+ generateBlobsFromChunk = createOsmPbfBlobGenerator();
77
+ header = null;
78
+ constructor(decompress = webDecompress) {
79
+ super({
80
+ transform: async (bytesChunk, controller) => {
81
+ for await (const rawBlobs of this.generateBlobsFromChunk(bytesChunk)) {
82
+ const decompressed = await decompress(rawBlobs);
83
+ const pbf = new Pbf(decompressed);
84
+ if (this.header == null) {
85
+ this.header = readHeaderBlock(pbf);
86
+ controller.enqueue(this.header);
87
+ }
88
+ else {
89
+ controller.enqueue(readPrimitiveBlock(pbf));
90
+ }
91
+ }
92
+ },
93
+ });
94
+ }
95
+ }
96
+ //# sourceMappingURL=pbf-to-blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbf-to-blocks.js","sourceRoot":"","sources":["../src/pbf-to-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAGN,eAAe,EACf,kBAAkB,GAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEN,gBAAgB,EAChB,aAAa,GACb,MAAM,SAAS,CAAA;AAEhB,uFAAuF;AACvF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,IAAsD;IAEtD,MAAM,sBAAsB,GAAG,yBAAyB,EAAE,CAAA;IAC1D,MAAM,MAAM,GAAG,4BAA4B,CAC1C,CAAC,KAAK,SAAS,CAAC;QACf,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,CAAA;YACX,CAAC;QACF,CAAC;IACF,CAAC,CAAC,EAAE,CACJ,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAA;IAC1C,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,mBAAmB,IAAI,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO;QACN,MAAM;QACN,MAAM,EAAE,MAAqC;KAC7C,CAAA;AACF,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,kCAAmC,SAAQ,eAGvD;IACA,sBAAsB,GAAG,yBAAyB,EAAE,CAAA;IACpD,MAAM,GAA6B,IAAI,CAAA;IACvC,YACC,aAEwC,aAAa;QAErD,KAAK,CAAC;YACL,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;gBAC3C,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;oBACtE,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAA;oBAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAA;oBACjC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;wBACzB,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;wBAClC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBAChC,CAAC;yBAAM,CAAC;wBACP,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;oBAC5C,CAAC;gBACF,CAAC;YACF,CAAC;SACD,CAAC,CAAA;IACH,CAAC;CACD"}
@@ -0,0 +1,27 @@
1
+ import type Pbf from "pbf";
2
+ export type OsmPbfBlob = {
3
+ raw_size?: number;
4
+ raw?: Uint8Array;
5
+ zlib_data?: Uint8Array;
6
+ };
7
+ export type OsmPbfBlobHeader = {
8
+ type: "OSMHeader" | "OSMData";
9
+ datasize: number;
10
+ };
11
+ /**
12
+ * Reads an `OsmPbfBlob` message from the current position in the Pbf reader.
13
+ */
14
+ export declare function readBlob(pbf: Pbf, end?: number): OsmPbfBlob;
15
+ /**
16
+ * Writes an `OsmPbfBlob` message to the provided Pbf writer.
17
+ */
18
+ export declare function writeBlob(obj: OsmPbfBlob, pbf: Pbf): void;
19
+ /**
20
+ * Reads an `OsmPbfBlobHeader` from the current position in the Pbf reader.
21
+ */
22
+ export declare function readBlobHeader(pbf: Pbf, end?: number): OsmPbfBlobHeader;
23
+ /**
24
+ * Writes an `OsmPbfBlobHeader` message to the provided Pbf writer.
25
+ */
26
+ export declare function writeBlobHeader(obj: OsmPbfBlobHeader, pbf: Pbf): void;
27
+ //# sourceMappingURL=fileformat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileformat.d.ts","sourceRoot":"","sources":["../../src/proto/fileformat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAE1B,MAAM,MAAM,UAAU,GAAG;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,UAAU,CAAA;IAChB,SAAS,CAAC,EAAE,UAAU,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAQ3D;AAYD;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,QAIlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAMvE;AAQD;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,QAG9D"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Reads an `OsmPbfBlob` message from the current position in the Pbf reader.
3
+ */
4
+ export function readBlob(pbf, end) {
5
+ return pbf.readFields(readBlobField, {
6
+ raw_size: 0,
7
+ }, end);
8
+ }
9
+ /**
10
+ * Dispatches individual Blob fields based on their protobuf tag.
11
+ */
12
+ function readBlobField(tag, obj, pbf) {
13
+ if (tag === 2)
14
+ obj.raw_size = pbf.readVarint(true);
15
+ else if (tag === 1) {
16
+ obj.raw = pbf.readBytes();
17
+ }
18
+ else if (tag === 3) {
19
+ obj.zlib_data = pbf.readBytes();
20
+ }
21
+ }
22
+ /**
23
+ * Writes an `OsmPbfBlob` message to the provided Pbf writer.
24
+ */
25
+ export function writeBlob(obj, pbf) {
26
+ if (obj.raw_size)
27
+ pbf.writeVarintField(2, obj.raw_size);
28
+ if (obj.raw != null)
29
+ pbf.writeBytesField(1, obj.raw);
30
+ if (obj.zlib_data != null)
31
+ pbf.writeBytesField(3, obj.zlib_data);
32
+ }
33
+ /**
34
+ * Reads an `OsmPbfBlobHeader` from the current position in the Pbf reader.
35
+ */
36
+ export function readBlobHeader(pbf, end) {
37
+ return pbf.readFields(readBlobHeaderField, { type: "OSMData", datasize: 0 }, end);
38
+ }
39
+ /**
40
+ * Dispatches individual BlobHeader fields based on their protobuf tag.
41
+ */
42
+ function readBlobHeaderField(tag, obj, pbf) {
43
+ if (tag === 1)
44
+ obj.type = pbf.readString();
45
+ else if (tag === 3)
46
+ obj.datasize = pbf.readVarint(true);
47
+ }
48
+ /**
49
+ * Writes an `OsmPbfBlobHeader` message to the provided Pbf writer.
50
+ */
51
+ export function writeBlobHeader(obj, pbf) {
52
+ if (obj.type)
53
+ pbf.writeStringField(1, obj.type);
54
+ if (obj.datasize)
55
+ pbf.writeVarintField(3, obj.datasize);
56
+ }
57
+ //# sourceMappingURL=fileformat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileformat.js","sourceRoot":"","sources":["../../src/proto/fileformat.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAQ,EAAE,GAAY;IAC9C,OAAO,GAAG,CAAC,UAAU,CACpB,aAAa,EACb;QACC,QAAQ,EAAE,CAAC;KACX,EACD,GAAG,CACH,CAAA;AACF,CAAC;AACD;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,GAAe,EAAE,GAAQ;IAC5D,IAAI,GAAG,KAAK,CAAC;QAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;SAC7C,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAA;IAC1B,CAAC;SAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACtB,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,CAAA;IAChC,CAAC;AACF,CAAC;AACD;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAe,EAAE,GAAQ;IAClD,IAAI,GAAG,CAAC,QAAQ;QAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvD,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI;QAAE,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IACpD,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI;QAAE,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAQ,EAAE,GAAY;IACpD,OAAO,GAAG,CAAC,UAAU,CACpB,mBAAmB,EACnB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,EAChC,GAAG,CACH,CAAA;AACF,CAAC;AACD;;GAEG;AACH,SAAS,mBAAmB,CAAC,GAAW,EAAE,GAAqB,EAAE,GAAQ;IACxE,IAAI,GAAG,KAAK,CAAC;QAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,EAA8B,CAAA;SACjE,IAAI,GAAG,KAAK,CAAC;QAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AACxD,CAAC;AACD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAqB,EAAE,GAAQ;IAC9D,IAAI,GAAG,CAAC,IAAI;QAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,GAAG,CAAC,QAAQ;QAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;AACxD,CAAC"}
@@ -0,0 +1,92 @@
1
+ import type Pbf from "pbf";
2
+ export type OsmPbfHeaderBBox = {
3
+ left: number;
4
+ right: number;
5
+ top: number;
6
+ bottom: number;
7
+ };
8
+ export type OsmPbfHeaderBlock = {
9
+ bbox?: OsmPbfHeaderBBox;
10
+ required_features: string[];
11
+ optional_features: string[];
12
+ writingprogram?: string;
13
+ source?: string;
14
+ osmosis_replication_timestamp?: number;
15
+ osmosis_replication_sequence_number?: number;
16
+ osmosis_replication_base_url?: string;
17
+ };
18
+ export interface OsmPbfBlockSettings {
19
+ granularity?: number;
20
+ lat_offset?: number;
21
+ lon_offset?: number;
22
+ date_granularity?: number;
23
+ }
24
+ export interface OsmPbfBlock extends OsmPbfBlockSettings {
25
+ stringtable: OsmPbfStringTable;
26
+ primitivegroup: OsmPbfGroup[];
27
+ }
28
+ export type OsmPbfGroup = {
29
+ nodes: OsmPbfNode[];
30
+ dense?: OsmPbfDenseNodes;
31
+ ways: OsmPbfWay[];
32
+ relations: OsmPbfRelation[];
33
+ };
34
+ export type OsmPbfStringTable = Uint8Array[];
35
+ export interface OsmPbfInfo {
36
+ version?: number;
37
+ timestamp?: number;
38
+ changeset?: number;
39
+ uid?: number;
40
+ user_sid?: number;
41
+ visible?: boolean;
42
+ }
43
+ export type OsmPbfDenseInfo = {
44
+ version: number[];
45
+ timestamp: number[];
46
+ changeset: number[];
47
+ uid: number[];
48
+ user_sid: number[];
49
+ visible: boolean[];
50
+ };
51
+ export interface OsmPbfPrimitive {
52
+ id: number;
53
+ keys: number[];
54
+ vals: number[];
55
+ info?: OsmPbfInfo;
56
+ }
57
+ export interface OsmPbfNode extends OsmPbfPrimitive {
58
+ lat: number;
59
+ lon: number;
60
+ }
61
+ export type OsmPbfDenseNodes = {
62
+ id: number[];
63
+ denseinfo?: OsmPbfDenseInfo;
64
+ lat: number[];
65
+ lon: number[];
66
+ keys_vals: number[];
67
+ };
68
+ export interface OsmPbfWay extends OsmPbfPrimitive {
69
+ refs: number[];
70
+ }
71
+ export interface OsmPbfRelation extends OsmPbfPrimitive {
72
+ roles_sid: number[];
73
+ memids: number[];
74
+ types: number[];
75
+ }
76
+ /**
77
+ * Reads an `OsmPbfHeaderBlock` message from the provided Pbf reader.
78
+ */
79
+ export declare function readHeaderBlock(pbf: Pbf, end?: number): OsmPbfHeaderBlock;
80
+ /**
81
+ * Serializes an `OsmPbfHeaderBlock` message into the Pbf writer.
82
+ */
83
+ export declare function writeHeaderBlock(obj: OsmPbfHeaderBlock, pbf: Pbf): void;
84
+ /**
85
+ * Reads a primitive block containing string tables and primitive groups.
86
+ */
87
+ export declare function readPrimitiveBlock(pbf: Pbf, end?: number): OsmPbfBlock;
88
+ /**
89
+ * Serializes a primitive block including its string table and primitive groups.
90
+ */
91
+ export declare function writePrimitiveBlock(obj: OsmPbfBlock, pbf: Pbf): void;
92
+ //# sourceMappingURL=osmformat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osmformat.d.ts","sourceRoot":"","sources":["../../src/proto/osmformat.ts"],"names":[],"mappings":"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"}