@osmix/core 0.0.2 → 0.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.
Files changed (104) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +118 -107
  3. package/dist/src/entities.d.ts +103 -9
  4. package/dist/src/entities.d.ts.map +1 -1
  5. package/dist/src/entities.js +101 -11
  6. package/dist/src/entities.js.map +1 -1
  7. package/dist/src/ids.d.ts +82 -13
  8. package/dist/src/ids.d.ts.map +1 -1
  9. package/dist/src/ids.js +103 -31
  10. package/dist/src/ids.js.map +1 -1
  11. package/dist/src/index.d.ts +31 -5
  12. package/dist/src/index.d.ts.map +1 -1
  13. package/dist/src/index.js +33 -5
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/nodes.d.ts +91 -21
  16. package/dist/src/nodes.d.ts.map +1 -1
  17. package/dist/src/nodes.js +191 -44
  18. package/dist/src/nodes.js.map +1 -1
  19. package/dist/src/osm.d.ts +99 -0
  20. package/dist/src/osm.d.ts.map +1 -0
  21. package/dist/src/osm.js +165 -0
  22. package/dist/src/osm.js.map +1 -0
  23. package/dist/src/relations.d.ts +112 -20
  24. package/dist/src/relations.d.ts.map +1 -1
  25. package/dist/src/relations.js +298 -35
  26. package/dist/src/relations.js.map +1 -1
  27. package/dist/src/stringtable.d.ts +78 -14
  28. package/dist/src/stringtable.d.ts.map +1 -1
  29. package/dist/src/stringtable.js +105 -26
  30. package/dist/src/stringtable.js.map +1 -1
  31. package/dist/src/tags.d.ts +117 -18
  32. package/dist/src/tags.d.ts.map +1 -1
  33. package/dist/src/tags.js +177 -30
  34. package/dist/src/tags.js.map +1 -1
  35. package/dist/src/typed-arrays.d.ts +85 -11
  36. package/dist/src/typed-arrays.d.ts.map +1 -1
  37. package/dist/src/typed-arrays.js +88 -9
  38. package/dist/src/typed-arrays.js.map +1 -1
  39. package/dist/src/utils.d.ts +35 -1
  40. package/dist/src/utils.d.ts.map +1 -1
  41. package/dist/src/utils.js +69 -10
  42. package/dist/src/utils.js.map +1 -1
  43. package/dist/src/ways.d.ts +91 -27
  44. package/dist/src/ways.d.ts.map +1 -1
  45. package/dist/src/ways.js +229 -69
  46. package/dist/src/ways.js.map +1 -1
  47. package/dist/test/memory.test.d.ts +7 -0
  48. package/dist/test/memory.test.d.ts.map +1 -0
  49. package/dist/test/memory.test.js +29 -0
  50. package/dist/test/memory.test.js.map +1 -0
  51. package/dist/test/mock-osm.d.ts +3 -3
  52. package/dist/test/mock-osm.d.ts.map +1 -1
  53. package/dist/test/mock-osm.js +3 -3
  54. package/dist/test/mock-osm.js.map +1 -1
  55. package/dist/test/tags-search.test.d.ts +2 -0
  56. package/dist/test/tags-search.test.d.ts.map +1 -0
  57. package/dist/test/tags-search.test.js +56 -0
  58. package/dist/test/tags-search.test.js.map +1 -0
  59. package/dist/test/typed-arrays.test.js +19 -17
  60. package/dist/test/typed-arrays.test.js.map +1 -1
  61. package/package.json +11 -13
  62. package/src/entities.ts +147 -22
  63. package/src/ids.ts +126 -45
  64. package/src/index.ts +34 -5
  65. package/src/nodes.ts +248 -58
  66. package/src/osm.ts +222 -0
  67. package/src/relations.ts +396 -54
  68. package/src/stringtable.ts +123 -36
  69. package/src/tags.ts +220 -46
  70. package/src/typed-arrays.ts +97 -10
  71. package/src/types/geoflatbush.d.ts +37 -0
  72. package/src/types/geokdbush.d.ts +37 -0
  73. package/src/types/kdbush.d.ts +24 -6
  74. package/src/utils.ts +80 -14
  75. package/src/ways.ts +260 -84
  76. package/test/memory.test.ts +38 -0
  77. package/test/mock-osm.ts +8 -8
  78. package/test/tags-search.test.ts +60 -0
  79. package/test/typed-arrays.test.ts +5 -6
  80. package/dist/src/osmix.d.ts +0 -88
  81. package/dist/src/osmix.d.ts.map +0 -1
  82. package/dist/src/osmix.js +0 -438
  83. package/dist/src/osmix.js.map +0 -1
  84. package/dist/test/extract.bench.d.ts +0 -2
  85. package/dist/test/extract.bench.d.ts.map +0 -1
  86. package/dist/test/extract.bench.js +0 -23
  87. package/dist/test/extract.bench.js.map +0 -1
  88. package/dist/test/extract.test.d.ts +0 -2
  89. package/dist/test/extract.test.d.ts.map +0 -1
  90. package/dist/test/extract.test.js +0 -127
  91. package/dist/test/extract.test.js.map +0 -1
  92. package/dist/test/read.test.d.ts +0 -2
  93. package/dist/test/read.test.d.ts.map +0 -1
  94. package/dist/test/read.test.js +0 -17
  95. package/dist/test/read.test.js.map +0 -1
  96. package/dist/test/write.test.d.ts +0 -2
  97. package/dist/test/write.test.d.ts.map +0 -1
  98. package/dist/test/write.test.js +0 -55
  99. package/dist/test/write.test.js.map +0 -1
  100. package/src/osmix.ts +0 -556
  101. package/test/extract.bench.ts +0 -29
  102. package/test/extract.test.ts +0 -161
  103. package/test/read.test.ts +0 -22
  104. package/test/write.test.ts +0 -69
@@ -1,31 +1,123 @@
1
- import type { OsmEntityType, OsmRelation, OsmRelationMember, OsmTags } from "@osmix/json";
2
1
  import type { OsmPbfRelation } from "@osmix/pbf";
2
+ import type { GeoBbox2D, LonLat, OsmEntityType, OsmRelation, OsmRelationMember, OsmTags } from "@osmix/shared/types";
3
+ import Flatbush from "flatbush";
3
4
  import { Entities, type EntitiesTransferables } from "./entities";
4
- import { Ids } from "./ids";
5
+ import { type IdOrIndex } from "./ids";
6
+ import type { Nodes } from "./nodes";
5
7
  import type StringTable from "./stringtable";
6
- import { Tags } from "./tags";
7
- import { type BufferType, ResizeableTypedArray } from "./typed-arrays";
8
- export interface RelationsTransferables extends EntitiesTransferables {
9
- memberStart: BufferType;
10
- memberCount: BufferType;
11
- memberRefs: BufferType;
12
- memberTypes: BufferType;
13
- memberRoles: BufferType;
8
+ import { type BufferType } from "./typed-arrays";
9
+ import { type ContentHasher } from "./utils";
10
+ import type { Ways } from "./ways";
11
+ export interface RelationsTransferables<T extends BufferType = BufferType> extends EntitiesTransferables<T> {
12
+ memberStart: T;
13
+ memberCount: T;
14
+ memberRefs: T;
15
+ memberTypes: T;
16
+ memberRoles: T;
17
+ bbox: T;
18
+ /** Optional - can be rebuilt via buildSpatialIndex() */
19
+ spatialIndex?: T;
14
20
  }
15
21
  export declare class Relations extends Entities<OsmRelation> {
16
- memberStart: ResizeableTypedArray<Uint32Array>;
17
- memberCount: ResizeableTypedArray<Uint16Array>;
18
- memberRefs: ResizeableTypedArray<Float64Array>;
19
- memberTypes: ResizeableTypedArray<Uint8Array>;
20
- memberRoles: ResizeableTypedArray<Uint32Array>;
21
- static from(stringTable: StringTable, rit: RelationsTransferables): Relations;
22
- constructor(stringTable: StringTable, idIndex?: Ids, tagIndex?: Tags);
23
- transferables(): RelationsTransferables;
24
- addRelation(relation: OsmRelation): void;
25
- addRelations(relations: OsmPbfRelation[], blockStringIndexMap: Map<number, number>, filter?: (relation: OsmRelation) => OsmRelation | null): number;
22
+ private stringTable;
23
+ private memberStart;
24
+ private memberCount;
25
+ private memberRefs;
26
+ private memberTypes;
27
+ private memberRoles;
28
+ private spatialIndex;
29
+ private spatialIndexBuilt;
30
+ private bbox;
31
+ private nodes;
32
+ private ways;
33
+ /**
34
+ * Create a new Relations index.
35
+ */
36
+ constructor(stringTable: StringTable, nodes: Nodes, ways: Ways, transferables?: RelationsTransferables);
37
+ /**
38
+ * Add a single relation to the index.
39
+ */
40
+ addRelation(relation: OsmRelation): number;
41
+ /**
42
+ * Bulk add relations directly from a PBF PrimitiveBlock.
43
+ */
44
+ addRelations(relations: OsmPbfRelation[], blockStringIndexMap: Uint32Array, filter?: (relation: OsmRelation) => OsmRelation | null): number;
45
+ /**
46
+ * Compact the internal arrays to free up memory.
47
+ */
26
48
  buildEntityIndex(): void;
49
+ /**
50
+ * Build the spatial index for relations.
51
+ * Handles nested relations by resolving all descendant nodes and ways.
52
+ * If bbox data already exists (e.g., loaded from storage), reuses it.
53
+ */
54
+ buildSpatialIndex(): Flatbush;
55
+ /**
56
+ * Check if the spatial index has been built.
57
+ */
58
+ hasSpatialIndex(): boolean;
59
+ /**
60
+ * Collect all coordinates from a relation, including nested relations.
61
+ * Used for building bounding boxes and spatial indexes.
62
+ */
63
+ private collectRelationCoordinates;
64
+ /**
65
+ * Get the bounding box of a relation.
66
+ */
67
+ getEntityBbox(i: IdOrIndex): GeoBbox2D;
68
+ /**
69
+ * Get the full relation entity.
70
+ */
27
71
  getFullEntity(index: number, id: number, tags?: OsmTags): OsmRelation;
72
+ /**
73
+ * Get the members of a relation.
74
+ */
28
75
  getMembersByIndex(index: number, relationMemberTypes?: OsmEntityType[]): OsmRelationMember[];
76
+ /**
77
+ * Check if a relation includes a specific member.
78
+ */
29
79
  includesMember(index: number, memberRef: number, memberType: OsmEntityType, memberRole?: string): boolean;
80
+ /**
81
+ * Get all way IDs that are members of relations, including nested relations.
82
+ * Used to exclude these ways from individual rendering.
83
+ */
84
+ getWayMemberIds(): Set<number>;
85
+ /**
86
+ * Get relation geometry based on its kind.
87
+ * Returns coordinates suitable for rendering based on relation type.
88
+ * @param index - Relation index
89
+ * @returns Object with geometry data based on relation kind
90
+ */
91
+ getRelationGeometry(index: number): {
92
+ points?: LonLat[];
93
+ lineStrings?: LonLat[][];
94
+ rings?: LonLat[][][];
95
+ };
96
+ /**
97
+ * Find relations that intersect a bounding box.
98
+ */
99
+ intersects(bbox: GeoBbox2D, filterFn?: (index: number) => boolean): number[];
100
+ /**
101
+ * Find relation indexes near a point using great-circle distance.
102
+ * @param lon - Longitude in degrees.
103
+ * @param lat - Latitude in degrees.
104
+ * @param maxResults - Maximum number of results to return.
105
+ * @param maxDistanceKm - Maximum distance in kilometers.
106
+ * @returns Array of relation indexes sorted by distance.
107
+ */
108
+ neighbors(lon: number, lat: number, maxResults?: number, maxDistanceKm?: number): number[];
109
+ /**
110
+ * Get transferable objects for passing to another thread.
111
+ * Only includes spatialIndex if it has been built.
112
+ */
113
+ transferables(): RelationsTransferables;
114
+ /**
115
+ * Get the approximate memory requirements for a given number of relations in bytes.
116
+ */
117
+ static getBytesRequired(count: number): number;
118
+ /**
119
+ * Update a ContentHasher with relation-specific data (members).
120
+ */
121
+ updateHash(hasher: ContentHasher): ContentHasher;
30
122
  }
31
123
  //# sourceMappingURL=relations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/relations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EAAE,QAAQ,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,KAAK,WAAW,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EACN,KAAK,UAAU,EAEf,oBAAoB,EACpB,MAAM,gBAAgB,CAAA;AAIvB,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACpE,WAAW,EAAE,UAAU,CAAA;IACvB,WAAW,EAAE,UAAU,CAAA;IACvB,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,EAAE,UAAU,CAAA;IACvB,WAAW,EAAE,UAAU,CAAA;CACvB;AAED,qBAAa,SAAU,SAAQ,QAAQ,CAAC,WAAW,CAAC;IACnD,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAA;IAC9C,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAA;IAG9C,UAAU,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAA;IAC9C,WAAW,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAA;IAC7C,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAA;IAE9C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,sBAAsB;gBAYrD,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,IAAI;IASpE,aAAa,IAAI,sBAAsB;IAYvC,WAAW,CAAC,QAAQ,EAAE,WAAW;IAYjC,YAAY,CACX,SAAS,EAAE,cAAc,EAAE,EAC3B,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,WAAW,GAAG,IAAI,GACpD,MAAM;IA8ET,gBAAgB;IAQhB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW;IAQrE,iBAAiB,CAChB,KAAK,EAAE,MAAM,EACb,mBAAmB,kBAAwB;IAgB5C,cAAc,CACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,EACzB,UAAU,CAAC,EAAE,MAAM;CAkBpB"}
1
+ {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/relations.ts"],"names":[],"mappings":"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"}
@@ -1,49 +1,68 @@
1
1
  import { assertValue } from "@osmix/shared/assert";
2
+ import { buildRelationLineStrings, collectRelationPoints, isAreaRelation, isLineRelation, isPointRelation, isSuperRelation, resolveRelationMembers, } from "@osmix/shared/relation-kind";
3
+ import { buildRelationRings } from "@osmix/shared/relation-multipolygon";
4
+ import Flatbush from "flatbush";
5
+ import { around as geoAround } from "geoflatbush";
2
6
  import { Entities } from "./entities";
3
7
  import { Ids } from "./ids";
4
8
  import { Tags } from "./tags";
5
- import { IdArrayType, ResizeableTypedArray, } from "./typed-arrays";
9
+ import { BufferConstructor, IdArrayType, ResizeableTypedArray as RTA, } from "./typed-arrays";
10
+ import { bboxFromLonLats } from "./utils";
6
11
  const RELATION_MEMBER_TYPES = ["node", "way", "relation"];
7
12
  export class Relations extends Entities {
13
+ stringTable;
8
14
  memberStart;
9
15
  memberCount; // Maximum 65,535 members per relation
10
16
  // Store the ID of the member because relations have other relations as members.
11
17
  memberRefs;
12
18
  memberTypes;
13
19
  memberRoles;
14
- static from(stringTable, rit) {
15
- const idIndex = Ids.from(rit);
16
- const tagIndex = Tags.from(stringTable, rit);
17
- const ri = new Relations(stringTable, idIndex, tagIndex);
18
- ri.memberStart = ResizeableTypedArray.from(Uint32Array, rit.memberStart);
19
- ri.memberCount = ResizeableTypedArray.from(Uint16Array, rit.memberCount);
20
- ri.memberRefs = ResizeableTypedArray.from(IdArrayType, rit.memberRefs);
21
- ri.memberTypes = ResizeableTypedArray.from(Uint8Array, rit.memberTypes);
22
- ri.memberRoles = ResizeableTypedArray.from(Uint32Array, rit.memberRoles);
23
- return ri;
24
- }
25
- constructor(stringTable, idIndex, tagIndex) {
26
- super("relation", stringTable, idIndex, tagIndex);
27
- this.memberStart = new ResizeableTypedArray(Uint32Array);
28
- this.memberCount = new ResizeableTypedArray(Uint16Array);
29
- this.memberRefs = new ResizeableTypedArray(IdArrayType);
30
- this.memberTypes = new ResizeableTypedArray(Uint8Array);
31
- this.memberRoles = new ResizeableTypedArray(Uint32Array);
32
- }
33
- transferables() {
34
- return {
35
- memberStart: this.memberStart.array.buffer,
36
- memberCount: this.memberCount.array.buffer,
37
- memberRefs: this.memberRefs.array.buffer,
38
- memberTypes: this.memberTypes.array.buffer,
39
- memberRoles: this.memberRoles.array.buffer,
40
- ...this.ids.transferables(),
41
- ...this.tags.transferables(),
42
- };
20
+ // Spatial index
21
+ spatialIndex = new Flatbush(1);
22
+ // Track if spatial index was properly built (vs default empty)
23
+ spatialIndexBuilt = false;
24
+ // Bounding box of the relation in geographic coordinates
25
+ bbox;
26
+ // Node and Way indexes
27
+ nodes;
28
+ ways;
29
+ /**
30
+ * Create a new Relations index.
31
+ */
32
+ constructor(stringTable, nodes, ways, transferables) {
33
+ if (transferables) {
34
+ super("relation", new Ids(transferables), new Tags(stringTable, transferables));
35
+ this.memberStart = RTA.from(Uint32Array, transferables.memberStart);
36
+ this.memberCount = RTA.from(Uint16Array, transferables.memberCount);
37
+ this.memberRefs = RTA.from(IdArrayType, transferables.memberRefs);
38
+ this.memberTypes = RTA.from(Uint8Array, transferables.memberTypes);
39
+ this.memberRoles = RTA.from(Uint32Array, transferables.memberRoles);
40
+ this.bbox = RTA.from(Float64Array, transferables.bbox);
41
+ // Only load spatial index if provided (not stored in IndexedDB)
42
+ if (transferables.spatialIndex?.byteLength) {
43
+ this.spatialIndex = Flatbush.from(transferables.spatialIndex);
44
+ this.spatialIndexBuilt = true;
45
+ }
46
+ this.indexBuilt = true;
47
+ }
48
+ else {
49
+ super("relation", new Ids(), new Tags(stringTable));
50
+ this.memberStart = new RTA(Uint32Array);
51
+ this.memberCount = new RTA(Uint16Array);
52
+ this.memberRefs = new RTA(IdArrayType);
53
+ this.memberTypes = new RTA(Uint8Array);
54
+ this.memberRoles = new RTA(Uint32Array);
55
+ this.bbox = new RTA(Float64Array);
56
+ }
57
+ this.nodes = nodes;
58
+ this.ways = ways;
59
+ this.stringTable = stringTable;
43
60
  }
61
+ /**
62
+ * Add a single relation to the index.
63
+ */
44
64
  addRelation(relation) {
45
- this.ids.add(relation.id);
46
- this.tags.addTags(relation.tags);
65
+ const relationIndex = this.addEntity(relation.id, relation.tags ?? {});
47
66
  this.memberStart.push(this.memberRefs.length);
48
67
  this.memberCount.push(relation.members.length);
49
68
  for (const member of relation.members) {
@@ -51,10 +70,14 @@ export class Relations extends Entities {
51
70
  this.memberTypes.push(RELATION_MEMBER_TYPES.indexOf(member.type));
52
71
  this.memberRoles.push(this.stringTable.add(member.role ?? ""));
53
72
  }
73
+ return relationIndex;
54
74
  }
75
+ /**
76
+ * Bulk add relations directly from a PBF PrimitiveBlock.
77
+ */
55
78
  addRelations(relations, blockStringIndexMap, filter) {
56
79
  const blockToStringTable = (k) => {
57
- const index = blockStringIndexMap.get(k);
80
+ const index = blockStringIndexMap[k];
58
81
  if (index === undefined)
59
82
  throw Error("Tag key not found");
60
83
  return index;
@@ -100,16 +123,18 @@ export class Relations extends Entities {
100
123
  if (filter && filteredRelation === null)
101
124
  continue;
102
125
  added++;
103
- this.ids.add(relation.id);
126
+ this.addEntity(relation.id, tagKeys, tagValues);
104
127
  this.memberStart.push(this.memberRefs.length);
105
128
  this.memberCount.push(filteredRelation?.members.length ?? memberRefs.length);
106
129
  this.memberRefs.pushMany(filteredRelation?.members.map((m) => m.ref) ?? memberRefs);
107
130
  this.memberTypes.pushMany(filteredRelation?.members.map((m) => RELATION_MEMBER_TYPES.indexOf(m.type)) ?? memberTypes);
108
131
  this.memberRoles.pushMany(filteredRelation?.members.map((m) => this.stringTable.add(m.role ?? "")) ?? memberRoles);
109
- this.tags.addTagKeysAndValues(tagKeys, tagValues);
110
132
  }
111
133
  return added;
112
134
  }
135
+ /**
136
+ * Compact the internal arrays to free up memory.
137
+ */
113
138
  buildEntityIndex() {
114
139
  this.memberStart.compact();
115
140
  this.memberCount.compact();
@@ -117,6 +142,108 @@ export class Relations extends Entities {
117
142
  this.memberTypes.compact();
118
143
  this.memberRoles.compact();
119
144
  }
145
+ /**
146
+ * Build the spatial index for relations.
147
+ * Handles nested relations by resolving all descendant nodes and ways.
148
+ * If bbox data already exists (e.g., loaded from storage), reuses it.
149
+ */
150
+ buildSpatialIndex() {
151
+ if (!this.nodes.isReady())
152
+ throw Error("Node index is not ready.");
153
+ if (!this.ways.isReady())
154
+ throw Error("Way index is not ready.");
155
+ if (this.size === 0)
156
+ return this.spatialIndex;
157
+ console.time("RelationIndex.buildSpatialIndex");
158
+ this.spatialIndex = new Flatbush(this.size, 128, Float64Array, BufferConstructor);
159
+ // If bbox already has data (loaded from storage), use it directly
160
+ const hasBboxData = this.bbox.length >= this.size * 4;
161
+ for (let i = 0; i < this.size; i++) {
162
+ let minX;
163
+ let minY;
164
+ let maxX;
165
+ let maxY;
166
+ if (hasBboxData) {
167
+ // Use stored bbox values
168
+ minX = this.bbox.at(i * 4);
169
+ minY = this.bbox.at(i * 4 + 1);
170
+ maxX = this.bbox.at(i * 4 + 2);
171
+ maxY = this.bbox.at(i * 4 + 3);
172
+ }
173
+ else {
174
+ // Calculate bbox from coordinates
175
+ const lls = this.collectRelationCoordinates(i);
176
+ const bbox = bboxFromLonLats(lls);
177
+ minX = bbox[0];
178
+ minY = bbox[1];
179
+ maxX = bbox[2];
180
+ maxY = bbox[3];
181
+ this.bbox.push(minX);
182
+ this.bbox.push(minY);
183
+ this.bbox.push(maxX);
184
+ this.bbox.push(maxY);
185
+ }
186
+ this.spatialIndex.add(minX, minY, maxX, maxY);
187
+ }
188
+ if (!hasBboxData) {
189
+ this.bbox.compact();
190
+ }
191
+ this.spatialIndex.finish();
192
+ this.spatialIndexBuilt = true;
193
+ console.timeEnd("RelationIndex.buildSpatialIndex");
194
+ return this.spatialIndex;
195
+ }
196
+ /**
197
+ * Check if the spatial index has been built.
198
+ */
199
+ hasSpatialIndex() {
200
+ return this.spatialIndexBuilt;
201
+ }
202
+ /**
203
+ * Collect all coordinates from a relation, including nested relations.
204
+ * Used for building bounding boxes and spatial indexes.
205
+ */
206
+ collectRelationCoordinates(index) {
207
+ const lls = [];
208
+ const relation = this.getByIndex(index);
209
+ // Resolve nested relations to get all descendant nodes and ways
210
+ const resolved = resolveRelationMembers(relation, (relId) => {
211
+ const relIndex = this.ids.getIndexFromId(relId);
212
+ if (relIndex === -1)
213
+ return null;
214
+ return this.getByIndex(relIndex);
215
+ }, 10);
216
+ // Collect coordinates from resolved nodes
217
+ for (const nodeId of resolved.nodes) {
218
+ const ll = this.nodes.getNodeLonLat({ id: nodeId });
219
+ if (ll)
220
+ lls.push(ll);
221
+ }
222
+ // Collect coordinates from resolved ways
223
+ for (const wayId of resolved.ways) {
224
+ const wayIndex = this.ways.ids.getIndexFromId(wayId);
225
+ if (wayIndex === -1)
226
+ continue;
227
+ const wayPositions = this.ways.getCoordinates(wayIndex);
228
+ lls.push(...wayPositions);
229
+ }
230
+ return lls;
231
+ }
232
+ /**
233
+ * Get the bounding box of a relation.
234
+ */
235
+ getEntityBbox(i) {
236
+ const index = "index" in i ? i.index : this.ids.idOrIndex(i)[0];
237
+ return [
238
+ this.bbox.at(index * 4),
239
+ this.bbox.at(index * 4 + 1),
240
+ this.bbox.at(index * 4 + 2),
241
+ this.bbox.at(index * 4 + 3),
242
+ ];
243
+ }
244
+ /**
245
+ * Get the full relation entity.
246
+ */
120
247
  getFullEntity(index, id, tags) {
121
248
  return {
122
249
  id,
@@ -124,6 +251,9 @@ export class Relations extends Entities {
124
251
  tags,
125
252
  };
126
253
  }
254
+ /**
255
+ * Get the members of a relation.
256
+ */
127
257
  getMembersByIndex(index, relationMemberTypes = RELATION_MEMBER_TYPES) {
128
258
  const start = this.memberStart.at(index);
129
259
  const count = this.memberCount.at(index);
@@ -140,6 +270,9 @@ export class Relations extends Entities {
140
270
  }
141
271
  return members;
142
272
  }
273
+ /**
274
+ * Check if a relation includes a specific member.
275
+ */
143
276
  includesMember(index, memberRef, memberType, memberRole) {
144
277
  const start = this.memberStart.at(index);
145
278
  const count = this.memberCount.at(index);
@@ -157,5 +290,135 @@ export class Relations extends Entities {
157
290
  }
158
291
  return false;
159
292
  }
293
+ /**
294
+ * Get all way IDs that are members of relations, including nested relations.
295
+ * Used to exclude these ways from individual rendering.
296
+ */
297
+ getWayMemberIds() {
298
+ const wayIds = new Set();
299
+ for (let i = 0; i < this.size; i++) {
300
+ const relation = this.getByIndex(i);
301
+ const resolved = resolveRelationMembers(relation, (relId) => {
302
+ const relIndex = this.ids.getIndexFromId(relId);
303
+ if (relIndex === -1)
304
+ return null;
305
+ return this.getByIndex(relIndex);
306
+ }, 10);
307
+ for (const wayId of resolved.ways) {
308
+ wayIds.add(wayId);
309
+ }
310
+ }
311
+ return wayIds;
312
+ }
313
+ /**
314
+ * Get relation geometry based on its kind.
315
+ * Returns coordinates suitable for rendering based on relation type.
316
+ * @param index - Relation index
317
+ * @returns Object with geometry data based on relation kind
318
+ */
319
+ getRelationGeometry(index) {
320
+ const relation = this.getByIndex(index);
321
+ if (isAreaRelation(relation)) {
322
+ return {
323
+ rings: buildRelationRings(relation, (ref) => this.ways.getById(ref), (id) => this.nodes.getNodeLonLat({ id })),
324
+ };
325
+ }
326
+ // Point relations
327
+ if (isPointRelation(relation)) {
328
+ return {
329
+ points: collectRelationPoints(relation, (id) => this.nodes.getNodeLonLat({ id })),
330
+ };
331
+ }
332
+ // Line relations
333
+ if (isLineRelation(relation)) {
334
+ return {
335
+ lineStrings: buildRelationLineStrings(relation, (ref) => this.ways.getById(ref), (id) => this.nodes.getNodeLonLat({ id })),
336
+ };
337
+ }
338
+ // Super relations are handled by individual relation geometry methods
339
+ if (isSuperRelation(relation)) {
340
+ return {};
341
+ }
342
+ // Area relations are handled by buildRelationRings in shared/relation-multipolygon
343
+ // This method doesn't duplicate that logic
344
+ return {};
345
+ }
346
+ /**
347
+ * Find relations that intersect a bounding box.
348
+ */
349
+ intersects(bbox, filterFn) {
350
+ if (this.size === 0)
351
+ return [];
352
+ return this.spatialIndex.search(bbox[0], bbox[1], bbox[2], bbox[3], filterFn);
353
+ }
354
+ /**
355
+ * Find relation indexes near a point using great-circle distance.
356
+ * @param lon - Longitude in degrees.
357
+ * @param lat - Latitude in degrees.
358
+ * @param maxResults - Maximum number of results to return.
359
+ * @param maxDistanceKm - Maximum distance in kilometers.
360
+ * @returns Array of relation indexes sorted by distance.
361
+ */
362
+ neighbors(lon, lat, maxResults, maxDistanceKm) {
363
+ if (this.size === 0)
364
+ return [];
365
+ // Use geoflatbush for proper geographic distance calculations
366
+ return geoAround(this.spatialIndex, lon, lat, maxResults, maxDistanceKm);
367
+ }
368
+ /**
369
+ * Get transferable objects for passing to another thread.
370
+ * Only includes spatialIndex if it has been built.
371
+ */
372
+ transferables() {
373
+ const base = {
374
+ ...super.transferables(),
375
+ memberStart: this.memberStart.array.buffer,
376
+ memberCount: this.memberCount.array.buffer,
377
+ memberRefs: this.memberRefs.array.buffer,
378
+ memberTypes: this.memberTypes.array.buffer,
379
+ memberRoles: this.memberRoles.array.buffer,
380
+ bbox: this.bbox.array.buffer,
381
+ };
382
+ // Only include spatial index if it was built
383
+ if (this.spatialIndexBuilt) {
384
+ return { ...base, spatialIndex: this.spatialIndex.data };
385
+ }
386
+ return base;
387
+ }
388
+ /**
389
+ * Get the approximate memory requirements for a given number of relations in bytes.
390
+ */
391
+ static getBytesRequired(count) {
392
+ if (count === 0)
393
+ return 0;
394
+ // Approximate members per relation
395
+ let numNodes = count;
396
+ let n = count;
397
+ while (n !== 1) {
398
+ n = Math.ceil(n / 128);
399
+ numNodes += n;
400
+ }
401
+ const indexBytes = (numNodes < 16384 ? 2 : 4) * numNodes;
402
+ const boxesBytes = numNodes * 4 * Float64Array.BYTES_PER_ELEMENT;
403
+ const spatialIndexBytes = 8 + indexBytes + boxesBytes;
404
+ return (Ids.getBytesRequired(count) +
405
+ Tags.getBytesRequired(count) +
406
+ count * Uint32Array.BYTES_PER_ELEMENT + // memberStart
407
+ count * Uint16Array.BYTES_PER_ELEMENT + // memberCount
408
+ count * 4 * Float64Array.BYTES_PER_ELEMENT + // bbox
409
+ spatialIndexBytes);
410
+ }
411
+ /**
412
+ * Update a ContentHasher with relation-specific data (members).
413
+ */
414
+ updateHash(hasher) {
415
+ return super
416
+ .updateHash(hasher)
417
+ .update(this.memberStart.array)
418
+ .update(this.memberCount.array)
419
+ .update(this.memberRefs.array)
420
+ .update(this.memberTypes.array)
421
+ .update(this.memberRoles.array);
422
+ }
160
423
  }
161
424
  //# sourceMappingURL=relations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../src/relations.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAA8B,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE3B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAEN,WAAW,EACX,oBAAoB,GACpB,MAAM,gBAAgB,CAAA;AAEvB,MAAM,qBAAqB,GAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;AAU1E,MAAM,OAAO,SAAU,SAAQ,QAAqB;IACnD,WAAW,CAAmC;IAC9C,WAAW,CAAmC,CAAC,sCAAsC;IAErF,gFAAgF;IAChF,UAAU,CAAoC;IAC9C,WAAW,CAAkC;IAC7C,WAAW,CAAmC;IAE9C,MAAM,CAAC,IAAI,CAAC,WAAwB,EAAE,GAA2B;QAChE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;QAC5C,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QACxD,EAAE,CAAC,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;QACxE,EAAE,CAAC,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;QACxE,EAAE,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;QACtE,EAAE,CAAC,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;QACvE,EAAE,CAAC,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;QACxE,OAAO,EAAE,CAAA;IACV,CAAC;IAED,YAAY,WAAwB,EAAE,OAAa,EAAE,QAAe;QACnE,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QACjD,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACxD,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACxD,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAA;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAA;IACzD,CAAC;IAED,aAAa;QACZ,OAAO;YACN,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM;YAC1C,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM;YAC1C,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM;YACxC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM;YAC1C,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM;YAC1C,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YAC3B,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;SAC5B,CAAA;IACF,CAAC;IAED,WAAW,CAAC,QAAqB;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC9C,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;YACjE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAA;QAC/D,CAAC;IACF,CAAC;IAED,YAAY,CACX,SAA2B,EAC3B,mBAAwC,EACxC,MAAsD;QAEtD,MAAM,kBAAkB,GAAG,CAAC,CAAS,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACxC,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAA;YACzD,OAAO,KAAK,CAAA;QACb,CAAC,CAAA;QAED,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,OAAO,GAAwB,EAAE,CAAA;YACvC,MAAM,UAAU,GAAa,EAAE,CAAA;YAC/B,MAAM,WAAW,GAAa,EAAE,CAAA;YAChC,MAAM,WAAW,GAAa,EAAE,CAAA;YAEhC,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBAChC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;gBACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACnC,WAAW,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAA;gBACrD,WAAW,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAA;gBAC7D,WAAW,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAA;gBAE3D,KAAK,IAAI,KAAK,CAAA;gBACd,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;gBAC7C,MAAM,IAAI,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;gBAC7C,WAAW,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAA;gBAEnD,IAAI,MAAM,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC;wBACZ,IAAI;wBACJ,GAAG,EAAE,KAAK;wBACV,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;qBACrC,CAAC,CAAA;gBACH,CAAC;gBAED,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBAC3B,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC5B,CAAC;YAED,MAAM,OAAO,GAAa,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAC/D,MAAM,SAAS,GAAa,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAEjE,MAAM,gBAAgB,GAAG,MAAM;gBAC9B,CAAC,CAAC,MAAM,CAAC;oBACP,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC;iBACtD,CAAC;gBACH,CAAC,CAAC,IAAI,CAAA;YACP,IAAI,MAAM,IAAI,gBAAgB,KAAK,IAAI;gBAAE,SAAQ;YACjD,KAAK,EAAE,CAAA;YAEP,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CACpB,gBAAgB,EAAE,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CACrD,CAAA;YACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CACvB,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CACzD,CAAA;YACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CACxB,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACnC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CACrC,IAAI,WAAW,CAChB,CAAA;YACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CACxB,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAClC,IAAI,WAAW,CAChB,CAAA;YAED,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAClD,CAAC;QACD,OAAO,KAAK,CAAA;IACb,CAAC;IAED,gBAAgB;QACf,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAA;QAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAA;QAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;QACzB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAA;QAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAA;IAC3B,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,EAAU,EAAE,IAAc;QACtD,OAAO;YACN,EAAE;YACF,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YACtC,IAAI;SACJ,CAAA;IACF,CAAC;IAED,iBAAiB,CAChB,KAAa,EACb,mBAAmB,GAAG,qBAAqB;QAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,OAAO,GAAwB,EAAE,CAAA;QACvC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACjC,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1D,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAA;YAClE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAQ;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YACzD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAClC,CAAC;QACD,OAAO,OAAO,CAAA;IACf,CAAC;IAED,cAAc,CACb,KAAa,EACb,SAAiB,EACjB,UAAyB,EACzB,UAAmB;QAEnB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QACxC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1D,IAAI,IAAI,KAAK,UAAU;gBAAE,SAAQ;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACjC,IAAI,GAAG,KAAK,SAAS;gBAAE,SAAQ;YAC/B,IACC,UAAU,KAAK,SAAS;gBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU;gBAE3D,SAAQ;YACT,OAAO,IAAI,CAAA;QACZ,CAAC;QACD,OAAO,KAAK,CAAA;IACb,CAAC;CACD"}
1
+ {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../src/relations.ts"],"names":[],"mappings":"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"}