@osmix/core 0.0.1 → 0.0.2
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 +10 -0
- package/dist/src/entities.d.ts +26 -0
- package/dist/src/entities.d.ts.map +1 -0
- package/dist/src/entities.js +69 -0
- package/dist/src/entities.js.map +1 -0
- package/dist/src/ids.d.ts +50 -0
- package/dist/src/ids.d.ts.map +1 -0
- package/dist/src/ids.js +171 -0
- package/dist/src/ids.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/nodes.d.ts +36 -0
- package/dist/src/nodes.d.ts.map +1 -0
- package/dist/src/nodes.js +171 -0
- package/dist/src/nodes.js.map +1 -0
- package/dist/src/osmix.d.ts +88 -0
- package/dist/src/osmix.d.ts.map +1 -0
- package/dist/src/osmix.js +438 -0
- package/dist/src/osmix.js.map +1 -0
- package/dist/src/relations.d.ts +31 -0
- package/dist/src/relations.d.ts.map +1 -0
- package/dist/src/relations.js +161 -0
- package/dist/src/relations.js.map +1 -0
- package/dist/src/stringtable.d.ts +37 -0
- package/dist/src/stringtable.d.ts.map +1 -0
- package/dist/src/stringtable.js +101 -0
- package/dist/src/stringtable.js.map +1 -0
- package/dist/src/tags.d.ts +33 -0
- package/dist/src/tags.d.ts.map +1 -0
- package/dist/src/tags.js +92 -0
- package/dist/src/tags.js.map +1 -0
- package/dist/src/typed-arrays.d.ts +50 -0
- package/dist/src/typed-arrays.d.ts.map +1 -0
- package/dist/src/typed-arrays.js +119 -0
- package/dist/src/typed-arrays.js.map +1 -0
- package/dist/src/utils.d.ts +4 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +28 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/src/ways.d.ts +42 -0
- package/dist/src/ways.d.ts.map +1 -0
- package/dist/src/ways.js +186 -0
- package/dist/src/ways.js.map +1 -0
- package/dist/test/extract.bench.d.ts +2 -0
- package/dist/test/extract.bench.d.ts.map +1 -0
- package/dist/test/extract.bench.js +23 -0
- package/dist/test/extract.bench.js.map +1 -0
- package/dist/test/extract.test.d.ts +2 -0
- package/dist/test/extract.test.d.ts.map +1 -0
- package/dist/test/extract.test.js +127 -0
- package/dist/test/extract.test.js.map +1 -0
- package/dist/test/mock-osm.d.ts +13 -0
- package/dist/test/mock-osm.d.ts.map +1 -0
- package/dist/test/mock-osm.js +122 -0
- package/dist/test/mock-osm.js.map +1 -0
- package/dist/test/read.test.d.ts +2 -0
- package/dist/test/read.test.d.ts.map +1 -0
- package/dist/test/read.test.js +17 -0
- package/dist/test/read.test.js.map +1 -0
- package/dist/test/typed-arrays.test.d.ts +2 -0
- package/dist/test/typed-arrays.test.d.ts.map +1 -0
- package/dist/test/typed-arrays.test.js +100 -0
- package/dist/test/typed-arrays.test.js.map +1 -0
- package/dist/test/write.test.d.ts +2 -0
- package/dist/test/write.test.d.ts.map +1 -0
- package/dist/test/write.test.js +55 -0
- package/dist/test/write.test.js.map +1 -0
- package/package.json +3 -1
- package/src/osmix.ts +2 -2
- package/test/extract.bench.ts +1 -1
- package/test/extract.test.ts +8 -3
- package/test/write.test.ts +4 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-arrays.test.d.ts","sourceRoot":"","sources":["../../test/typed-arrays.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { BufferConstructor, ResizeableTypedArray } from "../src/typed-arrays";
|
|
3
|
+
describe("typed array helpers", () => {
|
|
4
|
+
it("selects the appropriate buffer constructor", () => {
|
|
5
|
+
if (typeof SharedArrayBuffer !== "undefined") {
|
|
6
|
+
expect(BufferConstructor).toBe(SharedArrayBuffer);
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
expect(BufferConstructor).toBe(ArrayBuffer);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
describe("ResizeableTypedArray", () => {
|
|
13
|
+
it("push stores values and returns the index", () => {
|
|
14
|
+
const arr = new ResizeableTypedArray(Float64Array);
|
|
15
|
+
const first = arr.push(1.5);
|
|
16
|
+
const second = arr.push(2.5);
|
|
17
|
+
expect(first).toBe(0);
|
|
18
|
+
expect(second).toBe(1);
|
|
19
|
+
expect(arr.length).toBe(2);
|
|
20
|
+
expect(arr.at(0)).toBe(1.5);
|
|
21
|
+
expect(arr.at(1)).toBe(2.5);
|
|
22
|
+
});
|
|
23
|
+
it("should push many values", () => {
|
|
24
|
+
const arr = new ResizeableTypedArray(Float64Array);
|
|
25
|
+
arr.pushMany([1.5, 2.5]);
|
|
26
|
+
expect(arr.length).toBe(2);
|
|
27
|
+
expect(arr.at(0)).toBe(1.5);
|
|
28
|
+
expect(arr.at(1)).toBe(2.5);
|
|
29
|
+
});
|
|
30
|
+
it("at supports negative indices and guards bounds", () => {
|
|
31
|
+
const arr = new ResizeableTypedArray(Int16Array);
|
|
32
|
+
arr.pushMany([10, 20, 30]);
|
|
33
|
+
expect(arr.length).toBe(3);
|
|
34
|
+
expect(Array.from(arr.slice(0, arr.length))).toEqual([10, 20, 30]);
|
|
35
|
+
expect(arr.at(-1)).toBe(30);
|
|
36
|
+
expect(arr.at(-3)).toBe(10);
|
|
37
|
+
expect(() => arr.at(-4)).toThrow(/Index out of bounds/);
|
|
38
|
+
expect(() => arr.at(3)).toThrow(/Index out of bounds/);
|
|
39
|
+
});
|
|
40
|
+
it("pushMany appends arrays while preserving order", () => {
|
|
41
|
+
const arr = new ResizeableTypedArray(Uint32Array);
|
|
42
|
+
arr.pushMany([1, 2, 3]);
|
|
43
|
+
arr.pushMany(Uint32Array.from([4, 5]));
|
|
44
|
+
expect(arr.length).toBe(5);
|
|
45
|
+
expect(Array.from(arr.slice(0, arr.length))).toEqual([1, 2, 3, 4, 5]);
|
|
46
|
+
});
|
|
47
|
+
it("slice returns a copy of the requested segment", () => {
|
|
48
|
+
const arr = new ResizeableTypedArray(Uint8Array);
|
|
49
|
+
arr.pushMany([1, 2, 3, 4]);
|
|
50
|
+
const segment = arr.slice(1, 3);
|
|
51
|
+
expect(segment).toBeInstanceOf(Uint8Array);
|
|
52
|
+
expect(Array.from(segment)).toEqual([2, 3]);
|
|
53
|
+
segment[0] = 99;
|
|
54
|
+
expect(arr.at(1)).toBe(2);
|
|
55
|
+
});
|
|
56
|
+
it("compact trims unused capacity", () => {
|
|
57
|
+
const arr = new ResizeableTypedArray(Float64Array);
|
|
58
|
+
arr.pushMany([5, 6, 7]);
|
|
59
|
+
const previousCapacity = arr.array.length;
|
|
60
|
+
const compacted = arr.compact();
|
|
61
|
+
const expectedByteLength = arr.length * Float64Array.BYTES_PER_ELEMENT;
|
|
62
|
+
expect(compacted).toBe(arr.array);
|
|
63
|
+
expect(compacted.length).toBe(arr.length);
|
|
64
|
+
expect(compacted.length).toBeLessThan(previousCapacity);
|
|
65
|
+
expect(arr.array.buffer.byteLength).toBe(expectedByteLength);
|
|
66
|
+
});
|
|
67
|
+
it("from reuses an existing buffer and grows when needed", () => {
|
|
68
|
+
const backing = new ArrayBuffer(16);
|
|
69
|
+
new Uint32Array(backing).set([1, 2, 3, 4]);
|
|
70
|
+
const arr = ResizeableTypedArray.from(Uint32Array, backing);
|
|
71
|
+
arr.bufferSize = arr.buffer.byteLength;
|
|
72
|
+
arr.maxByteLength = Math.max(arr.maxByteLength, arr.bufferSize * 2);
|
|
73
|
+
arr.items = arr.array.length;
|
|
74
|
+
expect(arr.length).toBe(4);
|
|
75
|
+
expect(Array.from(arr.slice(0, arr.length))).toEqual([1, 2, 3, 4]);
|
|
76
|
+
arr.push(5);
|
|
77
|
+
expect(arr.length).toBe(5);
|
|
78
|
+
expect(arr.array.length).toBe(8);
|
|
79
|
+
expect(Array.from(arr.slice(0, arr.length))).toEqual([1, 2, 3, 4, 5]);
|
|
80
|
+
});
|
|
81
|
+
it.runIf(typeof SharedArrayBuffer !== "undefined")("grows shared buffers in place", () => {
|
|
82
|
+
const backing = new SharedArrayBuffer(8, {
|
|
83
|
+
maxByteLength: 32,
|
|
84
|
+
});
|
|
85
|
+
const seed = new Uint8Array(backing);
|
|
86
|
+
seed.set([1, 2, 3, 4, 5, 6, 7, 8]);
|
|
87
|
+
const arr = ResizeableTypedArray.from(Uint8Array, backing);
|
|
88
|
+
arr.bufferSize = arr.buffer.byteLength;
|
|
89
|
+
arr.maxByteLength = backing.maxByteLength;
|
|
90
|
+
arr.items = arr.array.length;
|
|
91
|
+
const originalBuffer = arr.buffer;
|
|
92
|
+
arr.push(9);
|
|
93
|
+
expect(arr.buffer).toBe(originalBuffer);
|
|
94
|
+
expect(arr.array.length).toBe(16);
|
|
95
|
+
expect(arr.buffer.byteLength).toBe(16);
|
|
96
|
+
expect(Array.from(arr.slice(0, 9))).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9]);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=typed-arrays.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-arrays.test.js","sourceRoot":"","sources":["../../test/typed-arrays.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.test.d.ts","sourceRoot":"","sources":["../../test/write.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { getFixtureFile, getFixtureFileReadStream, PBFs, } from "@osmix/shared/test/fixtures";
|
|
2
|
+
import { assert, beforeAll, describe, it } from "vitest";
|
|
3
|
+
import { Osmix } from "../src/osmix";
|
|
4
|
+
describe("write", () => {
|
|
5
|
+
describe.each(Object.entries(PBFs))("%s", async (name, pbf) => {
|
|
6
|
+
beforeAll(() => getFixtureFile(pbf.url));
|
|
7
|
+
it("write osm primitive blocks", async () => {
|
|
8
|
+
// Parse the original PBF
|
|
9
|
+
const fileStream = getFixtureFileReadStream(pbf.url);
|
|
10
|
+
const osm = await Osmix.fromPbf(fileStream, { id: name });
|
|
11
|
+
// Get the first node, way, and relation
|
|
12
|
+
const node1 = osm.nodes.getByIndex(0);
|
|
13
|
+
const way1 = osm.ways.getByIndex(0);
|
|
14
|
+
const relation1 = osm.relations.getByIndex(0);
|
|
15
|
+
assert.exists(node1);
|
|
16
|
+
assert.exists(way1);
|
|
17
|
+
assert.exists(relation1);
|
|
18
|
+
const transformStream = new TransformStream();
|
|
19
|
+
const testOsmPromise = Osmix.fromPbf(transformStream.readable, {
|
|
20
|
+
id: `${name}-reparsed`,
|
|
21
|
+
});
|
|
22
|
+
// Write the PBF to an array buffer
|
|
23
|
+
// let data = new Uint8Array(0)
|
|
24
|
+
await osm.toPbfStream().pipeTo(transformStream.writable);
|
|
25
|
+
// Re-parse the new PBF
|
|
26
|
+
// assert.exists(data.buffer)
|
|
27
|
+
const testOsm = await testOsmPromise;
|
|
28
|
+
// Compare the original parsed PBF and newly parsed/written/re-parsed PBF
|
|
29
|
+
assert.equal(osm.nodes.size, testOsm.nodes.size);
|
|
30
|
+
assert.equal(osm.ways.size, testOsm.ways.size);
|
|
31
|
+
assert.equal(osm.relations.size, testOsm.relations.size);
|
|
32
|
+
if (node1) {
|
|
33
|
+
const testNode1 = testOsm.nodes.getById(node1.id);
|
|
34
|
+
assert.deepEqual(testNode1, node1);
|
|
35
|
+
assert.equal(testNode1?.id, node1.id);
|
|
36
|
+
assert.equal(testNode1?.lon, node1.lon);
|
|
37
|
+
assert.equal(testNode1?.lat, node1.lat);
|
|
38
|
+
assert.deepEqual(testNode1?.tags, node1.tags);
|
|
39
|
+
}
|
|
40
|
+
if (way1) {
|
|
41
|
+
const testWay1 = testOsm.ways.getById(way1.id);
|
|
42
|
+
assert.equal(testWay1?.id, way1.id);
|
|
43
|
+
assert.deepEqual(testWay1?.refs, way1.refs);
|
|
44
|
+
assert.deepEqual(testWay1?.tags, way1.tags);
|
|
45
|
+
}
|
|
46
|
+
if (relation1) {
|
|
47
|
+
const testRelation1 = testOsm.relations.getById(relation1.id);
|
|
48
|
+
assert.equal(testRelation1?.id, relation1.id);
|
|
49
|
+
assert.deepEqual(testRelation1?.members, relation1.members);
|
|
50
|
+
assert.deepEqual(testRelation1?.tags, relation1.tags);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=write.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.test.js","sourceRoot":"","sources":["../../test/write.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "@osmix/core",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.2",
|
|
6
6
|
"description": "An OSM PBF reader, writer, and merge tool written in TypeScript",
|
|
7
7
|
"main": "./src/index.ts",
|
|
8
8
|
"publishConfig": {
|
|
@@ -34,11 +34,13 @@
|
|
|
34
34
|
"scripts": {
|
|
35
35
|
"build": "tsc",
|
|
36
36
|
"bench": "vitest bench",
|
|
37
|
+
"prepublishOnly": "tsc",
|
|
37
38
|
"test": "vitest",
|
|
38
39
|
"typecheck": "tsc --noEmit"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|
|
41
42
|
"@types/geojson": "catalog:",
|
|
43
|
+
"@types/node": "catalog:",
|
|
42
44
|
"typescript": "catalog:",
|
|
43
45
|
"vitest": "catalog:"
|
|
44
46
|
},
|
package/src/osmix.ts
CHANGED
|
@@ -105,7 +105,7 @@ export class Osmix {
|
|
|
105
105
|
* Easiest way to get started with Osmix. Reads a PBF file into an Osmix index. Logs progress to the console.
|
|
106
106
|
*/
|
|
107
107
|
static async fromPbf(
|
|
108
|
-
data: AsyncGeneratorValue<ArrayBufferLike
|
|
108
|
+
data: AsyncGeneratorValue<Uint8Array<ArrayBufferLike>>,
|
|
109
109
|
options: Partial<OsmixOptions> = {},
|
|
110
110
|
) {
|
|
111
111
|
const osm = new Osmix(options)
|
|
@@ -167,7 +167,7 @@ export class Osmix {
|
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
async readPbf(
|
|
170
|
-
data: AsyncGeneratorValue<ArrayBufferLike
|
|
170
|
+
data: AsyncGeneratorValue<Uint8Array<ArrayBufferLike>>,
|
|
171
171
|
options: Partial<OsmixOptions> = {},
|
|
172
172
|
) {
|
|
173
173
|
if (this.#indexBuilt) throw Error("Osmix built. Create new instance.")
|
package/test/extract.bench.ts
CHANGED
|
@@ -9,7 +9,7 @@ const MONACO_BBOX: GeoBbox2D = [7.4053929, 43.7232244, 7.4447259, 43.7543687]
|
|
|
9
9
|
const BBOX = MONACO_BBOX
|
|
10
10
|
const PBF = "monaco.pbf"
|
|
11
11
|
|
|
12
|
-
let buffer: ArrayBufferLike
|
|
12
|
+
let buffer: Uint8Array<ArrayBufferLike>
|
|
13
13
|
|
|
14
14
|
beforeAll(async () => {
|
|
15
15
|
buffer = await getFixtureFile(PBF)
|
package/test/extract.test.ts
CHANGED
|
@@ -70,7 +70,10 @@ function buildSourceOsm() {
|
|
|
70
70
|
|
|
71
71
|
test("extract a BBOX while reading a PBF", async () => {
|
|
72
72
|
const source = buildSourceOsm()
|
|
73
|
-
const transform = new TransformStream<
|
|
73
|
+
const transform = new TransformStream<
|
|
74
|
+
Uint8Array<ArrayBufferLike>,
|
|
75
|
+
Uint8Array<ArrayBufferLike>
|
|
76
|
+
>()
|
|
74
77
|
const extract = new Osmix()
|
|
75
78
|
const extractPromise = extract.readPbf(transform.readable, {
|
|
76
79
|
extractBbox: TEST_BBOX,
|
|
@@ -97,10 +100,12 @@ test("extract a BBOX after reading a PBF", async () => {
|
|
|
97
100
|
const buffer = await source.toPbfBuffer()
|
|
98
101
|
|
|
99
102
|
const streaming = new Osmix()
|
|
100
|
-
await streaming.readPbf(buffer.slice(0), {
|
|
103
|
+
await streaming.readPbf(new Uint8Array(buffer.slice(0)), {
|
|
104
|
+
extractBbox: TEST_BBOX,
|
|
105
|
+
})
|
|
101
106
|
|
|
102
107
|
const twoStepOsmix = new Osmix()
|
|
103
|
-
await twoStepOsmix.readPbf(buffer.slice(0))
|
|
108
|
+
await twoStepOsmix.readPbf(new Uint8Array(buffer.slice(0)))
|
|
104
109
|
const twoStep = twoStepOsmix.extract(TEST_BBOX)
|
|
105
110
|
|
|
106
111
|
assert.equal(streaming.nodes.size, twoStep.nodes.size)
|
package/test/write.test.ts
CHANGED
|
@@ -23,7 +23,10 @@ describe("write", () => {
|
|
|
23
23
|
assert.exists(way1)
|
|
24
24
|
assert.exists(relation1)
|
|
25
25
|
|
|
26
|
-
const transformStream = new TransformStream<
|
|
26
|
+
const transformStream = new TransformStream<
|
|
27
|
+
Uint8Array<ArrayBufferLike>,
|
|
28
|
+
Uint8Array<ArrayBufferLike>
|
|
29
|
+
>()
|
|
27
30
|
const testOsmPromise = Osmix.fromPbf(transformStream.readable, {
|
|
28
31
|
id: `${name}-reparsed`,
|
|
29
32
|
})
|