@maplibre/mlt 1.1.1 → 1.1.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.
Files changed (122) hide show
  1. package/dist/decoding/decodingTestUtils.d.ts +75 -0
  2. package/dist/decoding/decodingTestUtils.js +285 -0
  3. package/dist/decoding/decodingTestUtils.js.map +1 -0
  4. package/dist/decoding/decodingUtils.d.ts +5 -8
  5. package/dist/decoding/decodingUtils.js +24 -51
  6. package/dist/decoding/decodingUtils.js.map +1 -1
  7. package/dist/decoding/decodingUtils.spec.js +85 -69
  8. package/dist/decoding/decodingUtils.spec.js.map +1 -1
  9. package/dist/decoding/fsstDecoder.spec.js +52 -35
  10. package/dist/decoding/fsstDecoder.spec.js.map +1 -1
  11. package/dist/decoding/geometryDecoder.js +49 -38
  12. package/dist/decoding/geometryDecoder.js.map +1 -1
  13. package/dist/decoding/integerDecodingUtils.d.ts +18 -31
  14. package/dist/decoding/integerDecodingUtils.js +134 -299
  15. package/dist/decoding/integerDecodingUtils.js.map +1 -1
  16. package/dist/decoding/integerDecodingUtils.spec.js +254 -148
  17. package/dist/decoding/integerDecodingUtils.spec.js.map +1 -1
  18. package/dist/decoding/integerStreamDecoder.d.ts +5 -7
  19. package/dist/decoding/integerStreamDecoder.js +104 -122
  20. package/dist/decoding/integerStreamDecoder.js.map +1 -1
  21. package/dist/decoding/integerStreamDecoder.spec.js +370 -113
  22. package/dist/decoding/integerStreamDecoder.spec.js.map +1 -1
  23. package/dist/decoding/propertyDecoder.js +23 -33
  24. package/dist/decoding/propertyDecoder.js.map +1 -1
  25. package/dist/decoding/propertyDecoder.spec.js +397 -605
  26. package/dist/decoding/propertyDecoder.spec.js.map +1 -1
  27. package/dist/decoding/stringDecoder.d.ts +2 -10
  28. package/dist/decoding/stringDecoder.js +146 -158
  29. package/dist/decoding/stringDecoder.js.map +1 -1
  30. package/dist/decoding/stringDecoder.spec.js +322 -321
  31. package/dist/decoding/stringDecoder.spec.js.map +1 -1
  32. package/dist/decoding/unpackNullableUtils.d.ts +25 -0
  33. package/dist/decoding/unpackNullableUtils.js +51 -0
  34. package/dist/decoding/unpackNullableUtils.js.map +1 -0
  35. package/dist/decoding/unpackNullableUtils.spec.js +71 -0
  36. package/dist/decoding/unpackNullableUtils.spec.js.map +1 -0
  37. package/dist/encoding/embeddedTilesetMetadataEncoder.d.ts +16 -0
  38. package/dist/encoding/embeddedTilesetMetadataEncoder.js +40 -0
  39. package/dist/encoding/embeddedTilesetMetadataEncoder.js.map +1 -0
  40. package/dist/encoding/encodingUtils.d.ts +7 -0
  41. package/dist/encoding/encodingUtils.js +107 -0
  42. package/dist/encoding/encodingUtils.js.map +1 -0
  43. package/dist/encoding/fsstEncoder.d.ts +21 -0
  44. package/dist/encoding/fsstEncoder.js +78 -0
  45. package/dist/encoding/fsstEncoder.js.map +1 -0
  46. package/dist/encoding/integerEncodingUtils.d.ts +68 -0
  47. package/dist/encoding/integerEncodingUtils.js +655 -0
  48. package/dist/encoding/integerEncodingUtils.js.map +1 -0
  49. package/dist/encoding/integerStreamEncoder.d.ts +27 -0
  50. package/dist/encoding/integerStreamEncoder.js +139 -0
  51. package/dist/encoding/integerStreamEncoder.js.map +1 -0
  52. package/dist/encoding/packNullableUtils.d.ts +4 -0
  53. package/dist/encoding/packNullableUtils.js +55 -0
  54. package/dist/encoding/packNullableUtils.js.map +1 -0
  55. package/dist/encoding/propertyEncoder.d.ts +78 -0
  56. package/dist/encoding/propertyEncoder.js +335 -0
  57. package/dist/encoding/propertyEncoder.js.map +1 -0
  58. package/dist/encoding/stringEncoder.d.ts +12 -0
  59. package/dist/encoding/stringEncoder.js +182 -0
  60. package/dist/encoding/stringEncoder.js.map +1 -0
  61. package/dist/encoding/zOrderCurveEncoder.d.ts +1 -0
  62. package/dist/encoding/zOrderCurveEncoder.js +10 -0
  63. package/dist/encoding/zOrderCurveEncoder.js.map +1 -0
  64. package/dist/metadata/tile/streamMetadataDecoder.d.ts +28 -4
  65. package/dist/metadata/tile/streamMetadataDecoder.js +81 -15
  66. package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
  67. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.d.ts +5 -1
  68. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js +33 -45
  69. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
  70. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.d.ts +1 -0
  71. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js +142 -0
  72. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js.map +1 -0
  73. package/dist/metadata/tileset/typeMap.d.ts +21 -29
  74. package/dist/metadata/tileset/typeMap.js +167 -169
  75. package/dist/metadata/tileset/typeMap.js.map +1 -1
  76. package/dist/mltDecoder.js +12 -11
  77. package/dist/mltDecoder.js.map +1 -1
  78. package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -1
  79. package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
  80. package/dist/vector/flat/stringFlatVector.d.ts +1 -1
  81. package/dist/vector/flat/stringFlatVector.js.map +1 -1
  82. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -1
  83. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
  84. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js +2 -2
  85. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js.map +1 -1
  86. package/dist/vector/geometry/constGpuVector.d.ts +2 -2
  87. package/dist/vector/geometry/constGpuVector.js.map +1 -1
  88. package/dist/vector/geometry/flatGpuVector.d.ts +2 -2
  89. package/dist/vector/geometry/flatGpuVector.js.map +1 -1
  90. package/dist/vector/geometry/geometryVector.js +2 -2
  91. package/dist/vector/geometry/geometryVector.js.map +1 -1
  92. package/dist/vector/geometry/geometryVectorConverter.js +4 -4
  93. package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
  94. package/dist/vector/geometry/gpuVector.d.ts +2 -2
  95. package/dist/vector/geometry/gpuVector.js.map +1 -1
  96. package/dist/vector/geometry/topologyVector.d.ts +4 -4
  97. package/dist/vector/geometry/topologyVector.js +0 -1
  98. package/dist/vector/geometry/topologyVector.js.map +1 -1
  99. package/dist/vector/geometry/zOrderCurve.d.ts +4 -17
  100. package/dist/vector/geometry/zOrderCurve.js +10 -35
  101. package/dist/vector/geometry/zOrderCurve.js.map +1 -1
  102. package/dist/vector/geometry/zOrderCurve.spec.js +21 -10
  103. package/dist/vector/geometry/zOrderCurve.spec.js.map +1 -1
  104. package/dist/vector/variableSizeVector.d.ts +2 -2
  105. package/dist/vector/variableSizeVector.js +0 -1
  106. package/dist/vector/variableSizeVector.js.map +1 -1
  107. package/package.json +6 -8
  108. package/dist/decoding/geometryDecoder.spec.js +0 -5
  109. package/dist/decoding/geometryDecoder.spec.js.map +0 -1
  110. package/dist/metadata/tile/mortonEncodedStreamMetadata.d.ts +0 -15
  111. package/dist/metadata/tile/mortonEncodedStreamMetadata.js +0 -27
  112. package/dist/metadata/tile/mortonEncodedStreamMetadata.js.map +0 -1
  113. package/dist/metadata/tile/rleEncodedStreamMetadata.d.ts +0 -24
  114. package/dist/metadata/tile/rleEncodedStreamMetadata.js +0 -38
  115. package/dist/metadata/tile/rleEncodedStreamMetadata.js.map +0 -1
  116. package/dist/metadata/tile/streamMetadata.d.ts +0 -29
  117. package/dist/metadata/tile/streamMetadata.js +0 -82
  118. package/dist/metadata/tile/streamMetadata.js.map +0 -1
  119. package/dist/vector/geometry/spaceFillingCurve.d.ts +0 -22
  120. package/dist/vector/geometry/spaceFillingCurve.js +0 -31
  121. package/dist/vector/geometry/spaceFillingCurve.js.map +0 -1
  122. /package/dist/decoding/{geometryDecoder.spec.d.ts → unpackNullableUtils.spec.d.ts} +0 -0
@@ -7,183 +7,181 @@ import { ColumnScope, ComplexType, ScalarType, } from "./tilesetMetadata";
7
7
  * - Whether the column has children (typeCode == 30 for STRUCT)
8
8
  * - For ID types: whether it uses long (64-bit) IDs
9
9
  */
10
- export class TypeMap {
11
- /**
12
- * Decodes a type code into a Column structure.
13
- * ID columns (0-3) are represented as physical UINT_32 or UINT_64 types in TypeScript
14
- */
15
- static decodeColumnType(typeCode) {
16
- switch (typeCode) {
17
- case 0:
18
- case 1:
19
- case 2:
20
- case 3: {
21
- // ID columns: 0=uint32, 1=uint64, 2=nullable uint32, 3=nullable uint64
22
- const column = {};
23
- column.nullable = (typeCode & 1) !== 0; // Bit 0 = nullable;
24
- column.columnScope = ColumnScope.FEATURE;
25
- const scalarCol = {};
26
- // Map to physical type since TS schema doesn't have LogicalScalarType.ID
27
- const physicalType = typeCode > 1 ? ScalarType.UINT_64 : ScalarType.UINT_32; // Bit 1 = longID
28
- scalarCol.physicalType = physicalType;
29
- scalarCol.type = "physicalType";
30
- column.scalarType = scalarCol;
31
- column.type = "scalarType";
32
- return column;
33
- }
34
- case 4: {
35
- // GEOMETRY (non-nullable, no children)
36
- const column = {};
37
- column.nullable = false;
38
- column.columnScope = ColumnScope.FEATURE;
39
- const complexCol = {};
40
- complexCol.type = "physicalType";
41
- complexCol.physicalType = ComplexType.GEOMETRY;
42
- column.type = "complexType";
43
- column.complexType = complexCol;
44
- return column;
45
- }
46
- case 30: {
47
- // STRUCT (non-nullable with children)
48
- const column = {};
49
- column.nullable = false;
50
- column.columnScope = ColumnScope.FEATURE;
51
- const complexCol = {};
52
- complexCol.type = "physicalType";
53
- complexCol.physicalType = ComplexType.STRUCT;
54
- column.type = "complexType";
55
- column.complexType = complexCol;
56
- return column;
57
- }
58
- default:
59
- return this.mapScalarType(typeCode);
10
+ /**
11
+ * Decodes a type code into a Column structure.
12
+ * ID columns (0-3) are represented as physical UINT_32 or UINT_64 types in TypeScript
13
+ */
14
+ export function decodeColumnType(typeCode) {
15
+ switch (typeCode) {
16
+ case 0:
17
+ case 1:
18
+ case 2:
19
+ case 3: {
20
+ // ID columns: 0=uint32, 1=uint64, 2=nullable uint32, 3=nullable uint64
21
+ const column = {};
22
+ column.nullable = (typeCode & 1) !== 0; // Bit 0 = nullable;
23
+ column.columnScope = ColumnScope.FEATURE;
24
+ const scalarCol = {};
25
+ // Map to physical type since TS schema doesn't have LogicalScalarType.ID
26
+ const physicalType = typeCode > 1 ? ScalarType.UINT_64 : ScalarType.UINT_32; // Bit 1 = longID
27
+ scalarCol.physicalType = physicalType;
28
+ scalarCol.type = "physicalType";
29
+ column.scalarType = scalarCol;
30
+ column.type = "scalarType";
31
+ return column;
60
32
  }
33
+ case 4: {
34
+ // GEOMETRY (non-nullable, no children)
35
+ const column = {};
36
+ column.nullable = false;
37
+ column.columnScope = ColumnScope.FEATURE;
38
+ const complexCol = {};
39
+ complexCol.type = "physicalType";
40
+ complexCol.physicalType = ComplexType.GEOMETRY;
41
+ column.type = "complexType";
42
+ column.complexType = complexCol;
43
+ return column;
44
+ }
45
+ case 30: {
46
+ // STRUCT (non-nullable with children)
47
+ const column = {};
48
+ column.nullable = false;
49
+ column.columnScope = ColumnScope.FEATURE;
50
+ const complexCol = {};
51
+ complexCol.type = "physicalType";
52
+ complexCol.physicalType = ComplexType.STRUCT;
53
+ column.type = "complexType";
54
+ column.complexType = complexCol;
55
+ return column;
56
+ }
57
+ default:
58
+ return mapScalarType(typeCode);
61
59
  }
62
- /**
63
- * Returns true if this type code requires a name to be stored.
64
- * ID (0-3) and GEOMETRY (4) columns have implicit names.
65
- * All other types (>= 10) require explicit names.
66
- */
67
- static columnTypeHasName(typeCode) {
68
- return typeCode >= 10;
69
- }
70
- /**
71
- * Returns true if this type code has child fields.
72
- * Only STRUCT (typeCode 30) has children.
73
- */
74
- static columnTypeHasChildren(typeCode) {
75
- return typeCode === 30;
60
+ }
61
+ /**
62
+ * Returns true if this type code requires a name to be stored.
63
+ * ID (0-3) and GEOMETRY (4) columns have implicit names.
64
+ * All other types (>= 10) require explicit names.
65
+ */
66
+ export function columnTypeHasName(typeCode) {
67
+ return typeCode >= 10;
68
+ }
69
+ /**
70
+ * Returns true if this type code has child fields.
71
+ * Only STRUCT (typeCode 30) has children.
72
+ */
73
+ export function columnTypeHasChildren(typeCode) {
74
+ return typeCode === 30;
75
+ }
76
+ /**
77
+ * Determines if a stream count needs to be read for this column.
78
+ * Mirrors the logic in cpp/include/mlt/metadata/type_map.hpp lines 81-118
79
+ */
80
+ export function hasStreamCount(column) {
81
+ // ID columns don't have stream count (identified by name)
82
+ if (column.name === "id") {
83
+ return false;
76
84
  }
77
- /**
78
- * Determines if a stream count needs to be read for this column.
79
- * Mirrors the logic in cpp/include/mlt/metadata/type_map.hpp lines 81-118
80
- */
81
- static hasStreamCount(column) {
82
- // ID columns don't have stream count (identified by name)
83
- if (column.name === "id") {
84
- return false;
85
- }
86
- if (column.type === "scalarType") {
87
- const scalarCol = column.scalarType;
88
- if (scalarCol.type === "physicalType") {
89
- const physicalType = scalarCol.physicalType;
90
- switch (physicalType) {
91
- case ScalarType.BOOLEAN:
92
- case ScalarType.INT_8:
93
- case ScalarType.UINT_8:
94
- case ScalarType.INT_32:
95
- case ScalarType.UINT_32:
96
- case ScalarType.INT_64:
97
- case ScalarType.UINT_64:
98
- case ScalarType.FLOAT:
99
- case ScalarType.DOUBLE:
100
- return false;
101
- case ScalarType.STRING:
102
- return true;
103
- default:
104
- return false;
105
- }
106
- }
107
- else if (scalarCol.type === "logicalType") {
108
- return false;
85
+ if (column.type === "scalarType") {
86
+ const scalarCol = column.scalarType;
87
+ if (scalarCol.type === "physicalType") {
88
+ const physicalType = scalarCol.physicalType;
89
+ switch (physicalType) {
90
+ case ScalarType.BOOLEAN:
91
+ case ScalarType.INT_8:
92
+ case ScalarType.UINT_8:
93
+ case ScalarType.INT_32:
94
+ case ScalarType.UINT_32:
95
+ case ScalarType.INT_64:
96
+ case ScalarType.UINT_64:
97
+ case ScalarType.FLOAT:
98
+ case ScalarType.DOUBLE:
99
+ return false;
100
+ case ScalarType.STRING:
101
+ return true;
102
+ default:
103
+ return false;
109
104
  }
110
105
  }
111
- else if (column.type === "complexType") {
112
- const complexCol = column.complexType;
113
- if (complexCol.type === "physicalType") {
114
- const physicalType = complexCol.physicalType;
115
- switch (physicalType) {
116
- case ComplexType.GEOMETRY:
117
- case ComplexType.STRUCT:
118
- return true;
119
- default:
120
- return false;
121
- }
122
- }
106
+ else if (scalarCol.type === "logicalType") {
107
+ return false;
123
108
  }
124
- console.warn("Unexpected column type in hasStreamCount", column);
125
- return false;
126
109
  }
127
- /**
128
- * Maps a scalar type code to a Column with ScalarType.
129
- * Type codes 10-29 encode scalar types with nullable flag.
130
- * Even codes are non-nullable, odd codes are nullable.
131
- */
132
- static mapScalarType(typeCode) {
133
- let scalarType = null;
134
- switch (typeCode) {
135
- case 10:
136
- case 11:
137
- scalarType = ScalarType.BOOLEAN;
138
- break;
139
- case 12:
140
- case 13:
141
- scalarType = ScalarType.INT_8;
142
- break;
143
- case 14:
144
- case 15:
145
- scalarType = ScalarType.UINT_8;
146
- break;
147
- case 16:
148
- case 17:
149
- scalarType = ScalarType.INT_32;
150
- break;
151
- case 18:
152
- case 19:
153
- scalarType = ScalarType.UINT_32;
154
- break;
155
- case 20:
156
- case 21:
157
- scalarType = ScalarType.INT_64;
158
- break;
159
- case 22:
160
- case 23:
161
- scalarType = ScalarType.UINT_64;
162
- break;
163
- case 24:
164
- case 25:
165
- scalarType = ScalarType.FLOAT;
166
- break;
167
- case 26:
168
- case 27:
169
- scalarType = ScalarType.DOUBLE;
170
- break;
171
- case 28:
172
- case 29:
173
- scalarType = ScalarType.STRING;
174
- break;
175
- default:
176
- return null;
110
+ else if (column.type === "complexType") {
111
+ const complexCol = column.complexType;
112
+ if (complexCol.type === "physicalType") {
113
+ const physicalType = complexCol.physicalType;
114
+ switch (physicalType) {
115
+ case ComplexType.GEOMETRY:
116
+ case ComplexType.STRUCT:
117
+ return true;
118
+ default:
119
+ return false;
120
+ }
177
121
  }
178
- const column = {};
179
- column.nullable = (typeCode & 1) !== 0;
180
- column.columnScope = ColumnScope.FEATURE;
181
- const scalarCol = {};
182
- scalarCol.type = "physicalType";
183
- scalarCol.physicalType = scalarType;
184
- column.type = "scalarType";
185
- column.scalarType = scalarCol;
186
- return column;
187
122
  }
123
+ console.warn("Unexpected column type in hasStreamCount", column);
124
+ return false;
125
+ }
126
+ /**
127
+ * Maps a scalar type code to a Column with ScalarType.
128
+ * Type codes 10-29 encode scalar types with nullable flag.
129
+ * Even codes are non-nullable, odd codes are nullable.
130
+ */
131
+ function mapScalarType(typeCode) {
132
+ let scalarType = null;
133
+ switch (typeCode) {
134
+ case 10:
135
+ case 11:
136
+ scalarType = ScalarType.BOOLEAN;
137
+ break;
138
+ case 12:
139
+ case 13:
140
+ scalarType = ScalarType.INT_8;
141
+ break;
142
+ case 14:
143
+ case 15:
144
+ scalarType = ScalarType.UINT_8;
145
+ break;
146
+ case 16:
147
+ case 17:
148
+ scalarType = ScalarType.INT_32;
149
+ break;
150
+ case 18:
151
+ case 19:
152
+ scalarType = ScalarType.UINT_32;
153
+ break;
154
+ case 20:
155
+ case 21:
156
+ scalarType = ScalarType.INT_64;
157
+ break;
158
+ case 22:
159
+ case 23:
160
+ scalarType = ScalarType.UINT_64;
161
+ break;
162
+ case 24:
163
+ case 25:
164
+ scalarType = ScalarType.FLOAT;
165
+ break;
166
+ case 26:
167
+ case 27:
168
+ scalarType = ScalarType.DOUBLE;
169
+ break;
170
+ case 28:
171
+ case 29:
172
+ scalarType = ScalarType.STRING;
173
+ break;
174
+ default:
175
+ return null;
176
+ }
177
+ const column = {};
178
+ column.nullable = (typeCode & 1) !== 0;
179
+ column.columnScope = ColumnScope.FEATURE;
180
+ const scalarCol = {};
181
+ scalarCol.type = "physicalType";
182
+ scalarCol.physicalType = scalarType;
183
+ column.type = "scalarType";
184
+ column.scalarType = scalarCol;
185
+ return column;
188
186
  }
189
187
  //# sourceMappingURL=typeMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typeMap.js","sourceRoot":"","sources":["../../../src/metadata/tileset/typeMap.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Column,\n ColumnScope,\n type ComplexColumn,\n ComplexType,\n type ScalarColumn,\n ScalarType,\n} from \"./tilesetMetadata\";\n\n/**\n * The type code is a single varint32 that encodes:\n * - Physical or logical type\n * - Nullable flag\n * - Whether the column has a name (typeCode >= 10)\n * - Whether the column has children (typeCode == 30 for STRUCT)\n * - For ID types: whether it uses long (64-bit) IDs\n */\nexport class TypeMap {\n /**\n * Decodes a type code into a Column structure.\n * ID columns (0-3) are represented as physical UINT_32 or UINT_64 types in TypeScript\n */\n static decodeColumnType(typeCode: number): Column | null {\n switch (typeCode) {\n case 0:\n case 1:\n case 2:\n case 3: {\n // ID columns: 0=uint32, 1=uint64, 2=nullable uint32, 3=nullable uint64\n const column = {} as Column;\n column.nullable = (typeCode & 1) !== 0; // Bit 0 = nullable;\n column.columnScope = ColumnScope.FEATURE;\n const scalarCol = {} as ScalarColumn;\n // Map to physical type since TS schema doesn't have LogicalScalarType.ID\n const physicalType = typeCode > 1 ? ScalarType.UINT_64 : ScalarType.UINT_32; // Bit 1 = longID\n scalarCol.physicalType = physicalType;\n scalarCol.type = \"physicalType\";\n column.scalarType = scalarCol;\n column.type = \"scalarType\";\n return column;\n }\n case 4: {\n // GEOMETRY (non-nullable, no children)\n const column = {} as Column;\n column.nullable = false;\n column.columnScope = ColumnScope.FEATURE;\n const complexCol = {} as ComplexColumn;\n complexCol.type = \"physicalType\";\n complexCol.physicalType = ComplexType.GEOMETRY;\n column.type = \"complexType\";\n column.complexType = complexCol;\n return column;\n }\n case 30: {\n // STRUCT (non-nullable with children)\n const column = {} as Column;\n column.nullable = false;\n column.columnScope = ColumnScope.FEATURE;\n const complexCol = {} as ComplexColumn;\n complexCol.type = \"physicalType\";\n complexCol.physicalType = ComplexType.STRUCT;\n column.type = \"complexType\";\n column.complexType = complexCol;\n return column;\n }\n default:\n return this.mapScalarType(typeCode);\n }\n }\n\n /**\n * Returns true if this type code requires a name to be stored.\n * ID (0-3) and GEOMETRY (4) columns have implicit names.\n * All other types (>= 10) require explicit names.\n */\n static columnTypeHasName(typeCode: number): boolean {\n return typeCode >= 10;\n }\n\n /**\n * Returns true if this type code has child fields.\n * Only STRUCT (typeCode 30) has children.\n */\n static columnTypeHasChildren(typeCode: number): boolean {\n return typeCode === 30;\n }\n\n /**\n * Determines if a stream count needs to be read for this column.\n * Mirrors the logic in cpp/include/mlt/metadata/type_map.hpp lines 81-118\n */\n static hasStreamCount(column: Column): boolean {\n // ID columns don't have stream count (identified by name)\n if (column.name === \"id\") {\n return false;\n }\n\n if (column.type === \"scalarType\") {\n const scalarCol = column.scalarType;\n\n if (scalarCol.type === \"physicalType\") {\n const physicalType = scalarCol.physicalType;\n switch (physicalType) {\n case ScalarType.BOOLEAN:\n case ScalarType.INT_8:\n case ScalarType.UINT_8:\n case ScalarType.INT_32:\n case ScalarType.UINT_32:\n case ScalarType.INT_64:\n case ScalarType.UINT_64:\n case ScalarType.FLOAT:\n case ScalarType.DOUBLE:\n return false;\n case ScalarType.STRING:\n return true;\n default:\n return false;\n }\n } else if (scalarCol.type === \"logicalType\") {\n return false;\n }\n } else if (column.type === \"complexType\") {\n const complexCol = column.complexType;\n\n if (complexCol.type === \"physicalType\") {\n const physicalType = complexCol.physicalType;\n switch (physicalType) {\n case ComplexType.GEOMETRY:\n case ComplexType.STRUCT:\n return true;\n default:\n return false;\n }\n }\n }\n\n console.warn(\"Unexpected column type in hasStreamCount\", column);\n return false;\n }\n\n /**\n * Maps a scalar type code to a Column with ScalarType.\n * Type codes 10-29 encode scalar types with nullable flag.\n * Even codes are non-nullable, odd codes are nullable.\n */\n private static mapScalarType(typeCode: number): Column | null {\n let scalarType: number | null = null;\n\n switch (typeCode) {\n case 10:\n case 11:\n scalarType = ScalarType.BOOLEAN;\n break;\n case 12:\n case 13:\n scalarType = ScalarType.INT_8;\n break;\n case 14:\n case 15:\n scalarType = ScalarType.UINT_8;\n break;\n case 16:\n case 17:\n scalarType = ScalarType.INT_32;\n break;\n case 18:\n case 19:\n scalarType = ScalarType.UINT_32;\n break;\n case 20:\n case 21:\n scalarType = ScalarType.INT_64;\n break;\n case 22:\n case 23:\n scalarType = ScalarType.UINT_64;\n break;\n case 24:\n case 25:\n scalarType = ScalarType.FLOAT;\n break;\n case 26:\n case 27:\n scalarType = ScalarType.DOUBLE;\n break;\n case 28:\n case 29:\n scalarType = ScalarType.STRING;\n break;\n default:\n return null;\n }\n\n const column = {} as Column;\n column.nullable = (typeCode & 1) !== 0;\n column.columnScope = ColumnScope.FEATURE;\n const scalarCol = {} as ScalarColumn;\n scalarCol.type = \"physicalType\";\n scalarCol.physicalType = scalarType;\n column.type = \"scalarType\";\n column.scalarType = scalarCol;\n return column;\n }\n}\n"]}
1
+ {"version":3,"file":"typeMap.js","sourceRoot":"","sources":["../../../src/metadata/tileset/typeMap.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Column,\n ColumnScope,\n type ComplexColumn,\n ComplexType,\n type ScalarColumn,\n ScalarType,\n} from \"./tilesetMetadata\";\n\n/**\n * The type code is a single varint32 that encodes:\n * - Physical or logical type\n * - Nullable flag\n * - Whether the column has a name (typeCode >= 10)\n * - Whether the column has children (typeCode == 30 for STRUCT)\n * - For ID types: whether it uses long (64-bit) IDs\n */\n\n/**\n * Decodes a type code into a Column structure.\n * ID columns (0-3) are represented as physical UINT_32 or UINT_64 types in TypeScript\n */\nexport function decodeColumnType(typeCode: number): Column | null {\n switch (typeCode) {\n case 0:\n case 1:\n case 2:\n case 3: {\n // ID columns: 0=uint32, 1=uint64, 2=nullable uint32, 3=nullable uint64\n const column = {} as Column;\n column.nullable = (typeCode & 1) !== 0; // Bit 0 = nullable;\n column.columnScope = ColumnScope.FEATURE;\n const scalarCol = {} as ScalarColumn;\n // Map to physical type since TS schema doesn't have LogicalScalarType.ID\n const physicalType = typeCode > 1 ? ScalarType.UINT_64 : ScalarType.UINT_32; // Bit 1 = longID\n scalarCol.physicalType = physicalType;\n scalarCol.type = \"physicalType\";\n column.scalarType = scalarCol;\n column.type = \"scalarType\";\n return column;\n }\n case 4: {\n // GEOMETRY (non-nullable, no children)\n const column = {} as Column;\n column.nullable = false;\n column.columnScope = ColumnScope.FEATURE;\n const complexCol = {} as ComplexColumn;\n complexCol.type = \"physicalType\";\n complexCol.physicalType = ComplexType.GEOMETRY;\n column.type = \"complexType\";\n column.complexType = complexCol;\n return column;\n }\n case 30: {\n // STRUCT (non-nullable with children)\n const column = {} as Column;\n column.nullable = false;\n column.columnScope = ColumnScope.FEATURE;\n const complexCol = {} as ComplexColumn;\n complexCol.type = \"physicalType\";\n complexCol.physicalType = ComplexType.STRUCT;\n column.type = \"complexType\";\n column.complexType = complexCol;\n return column;\n }\n default:\n return mapScalarType(typeCode);\n }\n}\n\n/**\n * Returns true if this type code requires a name to be stored.\n * ID (0-3) and GEOMETRY (4) columns have implicit names.\n * All other types (>= 10) require explicit names.\n */\nexport function columnTypeHasName(typeCode: number): boolean {\n return typeCode >= 10;\n}\n\n/**\n * Returns true if this type code has child fields.\n * Only STRUCT (typeCode 30) has children.\n */\nexport function columnTypeHasChildren(typeCode: number): boolean {\n return typeCode === 30;\n}\n\n/**\n * Determines if a stream count needs to be read for this column.\n * Mirrors the logic in cpp/include/mlt/metadata/type_map.hpp lines 81-118\n */\nexport function hasStreamCount(column: Column): boolean {\n // ID columns don't have stream count (identified by name)\n if (column.name === \"id\") {\n return false;\n }\n\n if (column.type === \"scalarType\") {\n const scalarCol = column.scalarType;\n\n if (scalarCol.type === \"physicalType\") {\n const physicalType = scalarCol.physicalType;\n switch (physicalType) {\n case ScalarType.BOOLEAN:\n case ScalarType.INT_8:\n case ScalarType.UINT_8:\n case ScalarType.INT_32:\n case ScalarType.UINT_32:\n case ScalarType.INT_64:\n case ScalarType.UINT_64:\n case ScalarType.FLOAT:\n case ScalarType.DOUBLE:\n return false;\n case ScalarType.STRING:\n return true;\n default:\n return false;\n }\n } else if (scalarCol.type === \"logicalType\") {\n return false;\n }\n } else if (column.type === \"complexType\") {\n const complexCol = column.complexType;\n\n if (complexCol.type === \"physicalType\") {\n const physicalType = complexCol.physicalType;\n switch (physicalType) {\n case ComplexType.GEOMETRY:\n case ComplexType.STRUCT:\n return true;\n default:\n return false;\n }\n }\n }\n\n console.warn(\"Unexpected column type in hasStreamCount\", column);\n return false;\n}\n\n/**\n * Maps a scalar type code to a Column with ScalarType.\n * Type codes 10-29 encode scalar types with nullable flag.\n * Even codes are non-nullable, odd codes are nullable.\n */\nfunction mapScalarType(typeCode: number): Column | null {\n let scalarType: number | null = null;\n\n switch (typeCode) {\n case 10:\n case 11:\n scalarType = ScalarType.BOOLEAN;\n break;\n case 12:\n case 13:\n scalarType = ScalarType.INT_8;\n break;\n case 14:\n case 15:\n scalarType = ScalarType.UINT_8;\n break;\n case 16:\n case 17:\n scalarType = ScalarType.INT_32;\n break;\n case 18:\n case 19:\n scalarType = ScalarType.UINT_32;\n break;\n case 20:\n case 21:\n scalarType = ScalarType.INT_64;\n break;\n case 22:\n case 23:\n scalarType = ScalarType.UINT_64;\n break;\n case 24:\n case 25:\n scalarType = ScalarType.FLOAT;\n break;\n case 26:\n case 27:\n scalarType = ScalarType.DOUBLE;\n break;\n case 28:\n case 29:\n scalarType = ScalarType.STRING;\n break;\n default:\n return null;\n }\n\n const column = {} as Column;\n column.nullable = (typeCode & 1) !== 0;\n column.columnScope = ColumnScope.FEATURE;\n const scalarCol = {} as ScalarColumn;\n scalarCol.type = \"physicalType\";\n scalarCol.physicalType = scalarType;\n column.type = \"scalarType\";\n column.scalarType = scalarCol;\n return column;\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import FeatureTable from "./vector/featureTable";
2
2
  import { ScalarType } from "./metadata/tileset/tilesetMetadata";
3
3
  import IntWrapper from "./decoding/intWrapper";
4
- import { StreamMetadataDecoder } from "./metadata/tile/streamMetadataDecoder";
4
+ import { decodeStreamMetadata } from "./metadata/tile/streamMetadataDecoder";
5
5
  import { VectorType } from "./vector/vectorType";
6
6
  import { IntFlatVector } from "./vector/flat/intFlatVector";
7
7
  import BitVector from "./vector/flat/bitVector";
@@ -17,7 +17,7 @@ import { LongConstVector } from "./vector/constant/longConstVector";
17
17
  import { decodeBooleanRle } from "./decoding/decodingUtils";
18
18
  import { DoubleFlatVector } from "./vector/flat/doubleFlatVector";
19
19
  import { decodeEmbeddedTileSetMetadata } from "./metadata/tileset/embeddedTilesetMetadataDecoder";
20
- import { TypeMap } from "./metadata/tileset/typeMap";
20
+ import { hasStreamCount } from "./metadata/tileset/typeMap";
21
21
  const ID_COLUMN_NAME = "id";
22
22
  const GEOMETRY_COLUMN_NAME = "geometry";
23
23
  /**
@@ -60,15 +60,14 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
60
60
  let nullabilityBuffer = null;
61
61
  // Check column metadata nullable flag, not numStreams (ID columns don't have stream count)
62
62
  if (columnMetadata.nullable) {
63
- const presentStreamMetadata = StreamMetadataDecoder.decode(tile, offset);
63
+ const presentStreamMetadata = decodeStreamMetadata(tile, offset);
64
64
  const streamDataStart = offset.get();
65
- const values = decodeBooleanRle(tile, presentStreamMetadata.numValues, offset);
66
- // Fix offset: decodeBooleanRle doesn't consume all compressed bytes
65
+ const values = decodeBooleanRle(tile, presentStreamMetadata.numValues, presentStreamMetadata.byteLength, offset);
67
66
  offset.set(streamDataStart + presentStreamMetadata.byteLength);
68
67
  nullabilityBuffer = new BitVector(values, presentStreamMetadata.numValues);
69
68
  }
70
- const idDataStreamMetadata = StreamMetadataDecoder.decode(tile, offset);
71
- numFeatures = idDataStreamMetadata.getDecompressedCount();
69
+ const idDataStreamMetadata = decodeStreamMetadata(tile, offset);
70
+ numFeatures = idDataStreamMetadata.decompressedCount;
72
71
  idVector = decodeIdColumn(tile, columnMetadata, offset, columnName, idDataStreamMetadata, nullabilityBuffer ?? numFeatures, idWithinMaxSafeInteger);
73
72
  }
74
73
  else if (columnName === GEOMETRY_COLUMN_NAME) {
@@ -76,8 +75,8 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
76
75
  // If no ID column, get numFeatures from geometry type stream metadata
77
76
  if (numFeatures === 0) {
78
77
  const savedOffset = offset.get();
79
- const geometryTypeMetadata = StreamMetadataDecoder.decode(tile, offset);
80
- numFeatures = geometryTypeMetadata.getDecompressedCount();
78
+ const geometryTypeMetadata = decodeStreamMetadata(tile, offset);
79
+ numFeatures = geometryTypeMetadata.decompressedCount;
81
80
  offset.set(savedOffset); // Reset to re-read in decodeGeometryColumn
82
81
  }
83
82
  if (geometryScaling) {
@@ -87,7 +86,7 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
87
86
  }
88
87
  else {
89
88
  // Property columns: STRING and STRUCT have stream count, others don't
90
- const hasStreamCnt = TypeMap.hasStreamCount(columnMetadata);
89
+ const hasStreamCnt = hasStreamCount(columnMetadata);
91
90
  const numStreams = hasStreamCnt ? decodeVarintInt32(tile, offset, 1)[0] : 1;
92
91
  if (numStreams === 0 && columnMetadata.type === "scalarType") {
93
92
  continue;
@@ -95,7 +94,9 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
95
94
  const propertyVector = decodePropertyColumn(tile, offset, columnMetadata, numStreams, numFeatures, undefined);
96
95
  if (propertyVector) {
97
96
  if (Array.isArray(propertyVector)) {
98
- propertyVectors.push(...propertyVector);
97
+ for (const property of propertyVector) {
98
+ propertyVectors.push(property);
99
+ }
99
100
  }
100
101
  else {
101
102
  propertyVectors.push(propertyVector);
@@ -1 +1 @@
1
- {"version":3,"file":"mltDecoder.js","sourceRoot":"","sources":["../src/mltDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import FeatureTable from \"./vector/featureTable\";\nimport { type Column, ScalarType } from \"./metadata/tileset/tilesetMetadata\";\nimport IntWrapper from \"./decoding/intWrapper\";\nimport { StreamMetadataDecoder } from \"./metadata/tile/streamMetadataDecoder\";\nimport { type RleEncodedStreamMetadata } from \"./metadata/tile/rleEncodedStreamMetadata\";\nimport { VectorType } from \"./vector/vectorType\";\nimport { IntFlatVector } from \"./vector/flat/intFlatVector\";\nimport BitVector from \"./vector/flat/bitVector\";\nimport {\n decodeConstIntStream,\n decodeConstLongStream,\n decodeIntStream,\n decodeLongFloat64Stream,\n decodeLongStream,\n decodeSequenceIntStream,\n decodeSequenceLongStream,\n getVectorType,\n} from \"./decoding/integerStreamDecoder\";\nimport { IntSequenceVector } from \"./vector/sequence/intSequenceVector\";\nimport { LongFlatVector } from \"./vector/flat/longFlatVector\";\nimport { LongSequenceVector } from \"./vector/sequence/longSequenceVector\";\nimport { type IntVector } from \"./vector/intVector\";\nimport { decodeVarintInt32 } from \"./decoding/integerDecodingUtils\";\nimport { decodeGeometryColumn } from \"./decoding/geometryDecoder\";\nimport { decodePropertyColumn } from \"./decoding/propertyDecoder\";\nimport { IntConstVector } from \"./vector/constant/intConstVector\";\nimport { LongConstVector } from \"./vector/constant/longConstVector\";\nimport type GeometryScaling from \"./decoding/geometryScaling\";\nimport { decodeBooleanRle } from \"./decoding/decodingUtils\";\nimport { DoubleFlatVector } from \"./vector/flat/doubleFlatVector\";\nimport { decodeEmbeddedTileSetMetadata } from \"./metadata/tileset/embeddedTilesetMetadataDecoder\";\nimport { TypeMap } from \"./metadata/tileset/typeMap\";\nimport { type StreamMetadata } from \"./metadata/tile/streamMetadata\";\nimport { type GeometryVector } from \"./vector/geometry/geometryVector\";\nimport type Vector from \"./vector/vector\";\nimport { type GpuVector } from \"./vector/geometry/gpuVector\";\n\nconst ID_COLUMN_NAME = \"id\";\nconst GEOMETRY_COLUMN_NAME = \"geometry\";\n\n/**\n * Decodes a tile with embedded metadata (Tag 0x01 format).\n * This is the primary decoder function for MLT tiles.\n *\n * @param tile The tile data to decode (will be decompressed if gzip-compressed)\n * @param geometryScaling Optional geometry scaling parameters\n * @param idWithinMaxSafeInteger If true, limits ID values to JavaScript safe integer range (53 bits)\n */\nexport default function decodeTile(\n tile: Uint8Array,\n geometryScaling?: GeometryScaling,\n idWithinMaxSafeInteger = true,\n): FeatureTable[] {\n const offset = new IntWrapper(0);\n const featureTables: FeatureTable[] = [];\n\n while (offset.get() < tile.length) {\n const blockLength = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n const blockStart = offset.get();\n const blockEnd = blockStart + blockLength;\n if (blockEnd > tile.length) {\n throw new Error(`Block overruns tile: ${blockEnd} > ${tile.length}`);\n }\n\n const tag = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n if (tag !== 1) {\n // Skip unknown block types\n offset.set(blockEnd);\n continue;\n }\n\n // Decode embedded metadata and extent (one of each per block)\n const decode = decodeEmbeddedTileSetMetadata(tile, offset);\n const metadata = decode[0];\n const extent = decode[1];\n const featureTableMetadata = metadata.featureTables[0];\n\n // Decode columns from streams\n let idVector: IntVector | null = null;\n let geometryVector: GeometryVector | GpuVector | null = null;\n const propertyVectors: Vector[] = [];\n let numFeatures = 0;\n\n for (const columnMetadata of featureTableMetadata.columns) {\n const columnName = columnMetadata.name;\n\n if (columnName === ID_COLUMN_NAME) {\n let nullabilityBuffer = null;\n // Check column metadata nullable flag, not numStreams (ID columns don't have stream count)\n if (columnMetadata.nullable) {\n const presentStreamMetadata = StreamMetadataDecoder.decode(tile, offset);\n const streamDataStart = offset.get();\n const values = decodeBooleanRle(tile, presentStreamMetadata.numValues, offset);\n // Fix offset: decodeBooleanRle doesn't consume all compressed bytes\n offset.set(streamDataStart + presentStreamMetadata.byteLength);\n nullabilityBuffer = new BitVector(values, presentStreamMetadata.numValues);\n }\n\n const idDataStreamMetadata = StreamMetadataDecoder.decode(tile, offset);\n numFeatures = idDataStreamMetadata.getDecompressedCount();\n\n idVector = decodeIdColumn(\n tile,\n columnMetadata,\n offset,\n columnName,\n idDataStreamMetadata,\n nullabilityBuffer ?? numFeatures,\n idWithinMaxSafeInteger,\n );\n } else if (columnName === GEOMETRY_COLUMN_NAME) {\n const numStreams = decodeVarintInt32(tile, offset, 1)[0];\n\n // If no ID column, get numFeatures from geometry type stream metadata\n if (numFeatures === 0) {\n const savedOffset = offset.get();\n const geometryTypeMetadata = StreamMetadataDecoder.decode(tile, offset);\n numFeatures = geometryTypeMetadata.getDecompressedCount();\n offset.set(savedOffset); // Reset to re-read in decodeGeometryColumn\n }\n\n if (geometryScaling) {\n geometryScaling.scale = geometryScaling.extent / extent;\n }\n\n geometryVector = decodeGeometryColumn(tile, numStreams, offset, numFeatures, geometryScaling);\n } else {\n // Property columns: STRING and STRUCT have stream count, others don't\n const hasStreamCnt = TypeMap.hasStreamCount(columnMetadata);\n const numStreams = hasStreamCnt ? decodeVarintInt32(tile, offset, 1)[0] : 1;\n\n if (numStreams === 0 && columnMetadata.type === \"scalarType\") {\n continue;\n }\n\n const propertyVector = decodePropertyColumn(\n tile,\n offset,\n columnMetadata,\n numStreams,\n numFeatures,\n undefined,\n );\n if (propertyVector) {\n if (Array.isArray(propertyVector)) {\n propertyVectors.push(...propertyVector);\n } else {\n propertyVectors.push(propertyVector);\n }\n }\n }\n }\n\n const featureTable = new FeatureTable(\n featureTableMetadata.name,\n geometryVector,\n idVector,\n propertyVectors,\n extent,\n );\n featureTables.push(featureTable);\n offset.set(blockEnd);\n }\n\n return featureTables;\n}\n\nfunction decodeIdColumn(\n tile: Uint8Array,\n columnMetadata: Column,\n offset: IntWrapper,\n columnName: string,\n idDataStreamMetadata: StreamMetadata,\n sizeOrNullabilityBuffer: number | BitVector,\n idWithinMaxSafeInteger: boolean = false,\n): IntVector {\n const idDataType = columnMetadata.scalarType.physicalType;\n const vectorType = getVectorType(idDataStreamMetadata, sizeOrNullabilityBuffer, tile, offset);\n if (idDataType === ScalarType.UINT_32) {\n switch (vectorType) {\n case VectorType.FLAT: {\n const id = decodeIntStream(tile, offset, idDataStreamMetadata, false);\n return new IntFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceIntStream(tile, offset, idDataStreamMetadata);\n return new IntSequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeConstIntStream(tile, offset, idDataStreamMetadata, false);\n return new IntConstVector(columnName, id, sizeOrNullabilityBuffer);\n }\n }\n } else {\n switch (vectorType) {\n case VectorType.FLAT: {\n if (idWithinMaxSafeInteger) {\n const id = decodeLongFloat64Stream(tile, offset, idDataStreamMetadata, false);\n return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n\n const id = decodeLongStream(tile, offset, idDataStreamMetadata, false);\n return new LongFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceLongStream(tile, offset, idDataStreamMetadata);\n return new LongSequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeConstLongStream(tile, offset, idDataStreamMetadata, false);\n return new LongConstVector(columnName, id, sizeOrNullabilityBuffer);\n }\n }\n }\n\n throw new Error(\"Vector type not supported for id column.\");\n}\n"]}
1
+ {"version":3,"file":"mltDecoder.js","sourceRoot":"","sources":["../src/mltDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import FeatureTable from \"./vector/featureTable\";\nimport { type Column, ScalarType } from \"./metadata/tileset/tilesetMetadata\";\nimport IntWrapper from \"./decoding/intWrapper\";\nimport { decodeStreamMetadata, type RleEncodedStreamMetadata } from \"./metadata/tile/streamMetadataDecoder\";\nimport { VectorType } from \"./vector/vectorType\";\nimport { IntFlatVector } from \"./vector/flat/intFlatVector\";\nimport BitVector from \"./vector/flat/bitVector\";\nimport {\n decodeConstIntStream,\n decodeConstLongStream,\n decodeIntStream,\n decodeLongFloat64Stream,\n decodeLongStream,\n decodeSequenceIntStream,\n decodeSequenceLongStream,\n getVectorType,\n} from \"./decoding/integerStreamDecoder\";\nimport { IntSequenceVector } from \"./vector/sequence/intSequenceVector\";\nimport { LongFlatVector } from \"./vector/flat/longFlatVector\";\nimport { LongSequenceVector } from \"./vector/sequence/longSequenceVector\";\nimport { type IntVector } from \"./vector/intVector\";\nimport { decodeVarintInt32 } from \"./decoding/integerDecodingUtils\";\nimport { decodeGeometryColumn } from \"./decoding/geometryDecoder\";\nimport { decodePropertyColumn } from \"./decoding/propertyDecoder\";\nimport { IntConstVector } from \"./vector/constant/intConstVector\";\nimport { LongConstVector } from \"./vector/constant/longConstVector\";\nimport type GeometryScaling from \"./decoding/geometryScaling\";\nimport { decodeBooleanRle } from \"./decoding/decodingUtils\";\nimport { DoubleFlatVector } from \"./vector/flat/doubleFlatVector\";\nimport { decodeEmbeddedTileSetMetadata } from \"./metadata/tileset/embeddedTilesetMetadataDecoder\";\nimport { hasStreamCount } from \"./metadata/tileset/typeMap\";\nimport { type StreamMetadata } from \"./metadata/tile/streamMetadataDecoder\";\nimport { type GeometryVector } from \"./vector/geometry/geometryVector\";\nimport type Vector from \"./vector/vector\";\nimport { type GpuVector } from \"./vector/geometry/gpuVector\";\n\nconst ID_COLUMN_NAME = \"id\";\nconst GEOMETRY_COLUMN_NAME = \"geometry\";\n\n/**\n * Decodes a tile with embedded metadata (Tag 0x01 format).\n * This is the primary decoder function for MLT tiles.\n *\n * @param tile The tile data to decode (will be decompressed if gzip-compressed)\n * @param geometryScaling Optional geometry scaling parameters\n * @param idWithinMaxSafeInteger If true, limits ID values to JavaScript safe integer range (53 bits)\n */\nexport default function decodeTile(\n tile: Uint8Array,\n geometryScaling?: GeometryScaling,\n idWithinMaxSafeInteger = true,\n): FeatureTable[] {\n const offset = new IntWrapper(0);\n const featureTables: FeatureTable[] = [];\n\n while (offset.get() < tile.length) {\n const blockLength = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n const blockStart = offset.get();\n const blockEnd = blockStart + blockLength;\n if (blockEnd > tile.length) {\n throw new Error(`Block overruns tile: ${blockEnd} > ${tile.length}`);\n }\n\n const tag = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n if (tag !== 1) {\n // Skip unknown block types\n offset.set(blockEnd);\n continue;\n }\n\n // Decode embedded metadata and extent (one of each per block)\n const decode = decodeEmbeddedTileSetMetadata(tile, offset);\n const metadata = decode[0];\n const extent = decode[1];\n const featureTableMetadata = metadata.featureTables[0];\n\n // Decode columns from streams\n let idVector: IntVector | null = null;\n let geometryVector: GeometryVector | GpuVector | null = null;\n const propertyVectors: Vector[] = [];\n let numFeatures = 0;\n\n for (const columnMetadata of featureTableMetadata.columns) {\n const columnName = columnMetadata.name;\n\n if (columnName === ID_COLUMN_NAME) {\n let nullabilityBuffer = null;\n // Check column metadata nullable flag, not numStreams (ID columns don't have stream count)\n if (columnMetadata.nullable) {\n const presentStreamMetadata = decodeStreamMetadata(tile, offset);\n const streamDataStart = offset.get();\n const values = decodeBooleanRle(tile, presentStreamMetadata.numValues, presentStreamMetadata.byteLength, offset);\n offset.set(streamDataStart + presentStreamMetadata.byteLength);\n nullabilityBuffer = new BitVector(values, presentStreamMetadata.numValues);\n }\n\n const idDataStreamMetadata = decodeStreamMetadata(tile, offset);\n numFeatures = idDataStreamMetadata.decompressedCount;\n\n idVector = decodeIdColumn(\n tile,\n columnMetadata,\n offset,\n columnName,\n idDataStreamMetadata,\n nullabilityBuffer ?? numFeatures,\n idWithinMaxSafeInteger,\n );\n } else if (columnName === GEOMETRY_COLUMN_NAME) {\n const numStreams = decodeVarintInt32(tile, offset, 1)[0];\n\n // If no ID column, get numFeatures from geometry type stream metadata\n if (numFeatures === 0) {\n const savedOffset = offset.get();\n const geometryTypeMetadata = decodeStreamMetadata(tile, offset);\n numFeatures = geometryTypeMetadata.decompressedCount;\n offset.set(savedOffset); // Reset to re-read in decodeGeometryColumn\n }\n\n if (geometryScaling) {\n geometryScaling.scale = geometryScaling.extent / extent;\n }\n\n geometryVector = decodeGeometryColumn(tile, numStreams, offset, numFeatures, geometryScaling);\n } else {\n // Property columns: STRING and STRUCT have stream count, others don't\n const hasStreamCnt = hasStreamCount(columnMetadata);\n const numStreams = hasStreamCnt ? decodeVarintInt32(tile, offset, 1)[0] : 1;\n\n if (numStreams === 0 && columnMetadata.type === \"scalarType\") {\n continue;\n }\n\n const propertyVector = decodePropertyColumn(\n tile,\n offset,\n columnMetadata,\n numStreams,\n numFeatures,\n undefined,\n );\n if (propertyVector) {\n if (Array.isArray(propertyVector)) {\n for (const property of propertyVector) {\n propertyVectors.push(property);\n }\n } else {\n propertyVectors.push(propertyVector);\n }\n }\n }\n }\n\n const featureTable = new FeatureTable(\n featureTableMetadata.name,\n geometryVector,\n idVector,\n propertyVectors,\n extent,\n );\n featureTables.push(featureTable);\n offset.set(blockEnd);\n }\n\n return featureTables;\n}\n\nfunction decodeIdColumn(\n tile: Uint8Array,\n columnMetadata: Column,\n offset: IntWrapper,\n columnName: string,\n idDataStreamMetadata: StreamMetadata,\n sizeOrNullabilityBuffer: number | BitVector,\n idWithinMaxSafeInteger: boolean = false,\n): IntVector {\n const idDataType = columnMetadata.scalarType.physicalType;\n const vectorType = getVectorType(idDataStreamMetadata, sizeOrNullabilityBuffer, tile, offset);\n if (idDataType === ScalarType.UINT_32) {\n switch (vectorType) {\n case VectorType.FLAT: {\n const id = decodeIntStream(tile, offset, idDataStreamMetadata, false);\n return new IntFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceIntStream(tile, offset, idDataStreamMetadata);\n return new IntSequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeConstIntStream(tile, offset, idDataStreamMetadata, false);\n return new IntConstVector(columnName, id, sizeOrNullabilityBuffer);\n }\n }\n } else {\n switch (vectorType) {\n case VectorType.FLAT: {\n if (idWithinMaxSafeInteger) {\n const id = decodeLongFloat64Stream(tile, offset, idDataStreamMetadata, false);\n return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n\n const id = decodeLongStream(tile, offset, idDataStreamMetadata, false);\n return new LongFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceLongStream(tile, offset, idDataStreamMetadata);\n return new LongSequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeConstLongStream(tile, offset, idDataStreamMetadata, false);\n return new LongConstVector(columnName, id, sizeOrNullabilityBuffer);\n }\n }\n }\n\n throw new Error(\"Vector type not supported for id column.\");\n}\n"]}
@@ -3,6 +3,6 @@ import type BitVector from "../flat/bitVector";
3
3
  export declare class StringDictionaryVector extends VariableSizeVector<Uint8Array, string> {
4
4
  private readonly indexBuffer;
5
5
  private readonly textEncoder;
6
- constructor(name: string, indexBuffer: Int32Array, offsetBuffer: Int32Array, dictionaryBuffer: Uint8Array, nullabilityBuffer?: BitVector);
6
+ constructor(name: string, indexBuffer: Int32Array, offsetBuffer: Uint32Array, dictionaryBuffer: Uint8Array, nullabilityBuffer?: BitVector);
7
7
  protected getValueFromBuffer(index: number): string;
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stringDictionaryVector.js","sourceRoot":"","sources":["../../../src/vector/dictionary/stringDictionaryVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,sBAAuB,SAAQ,kBAAsC;IAKzD;IAJJ,WAAW,CAAc;IAE1C,YACI,IAAY,EACK,WAAuB,EACxC,YAAwB,EACxB,gBAA4B,EAC5B,iBAA6B;QAE7B,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QALpE,gBAAW,GAAX,WAAW,CAAY;QAMxC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACzC,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;CACJ","sourcesContent":["import { VariableSizeVector } from \"../variableSizeVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { decodeString } from \"../../decoding/decodingUtils\";\n\nexport class StringDictionaryVector extends VariableSizeVector<Uint8Array, string> {\n private readonly textEncoder: TextEncoder;\n\n constructor(\n name: string,\n private readonly indexBuffer: Int32Array,\n offsetBuffer: Int32Array,\n dictionaryBuffer: Uint8Array,\n nullabilityBuffer?: BitVector,\n ) {\n super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);\n this.indexBuffer = indexBuffer;\n this.textEncoder = new TextEncoder();\n }\n\n protected getValueFromBuffer(index: number): string {\n const offset = this.indexBuffer[index];\n const start = this.offsetBuffer[offset];\n const end = this.offsetBuffer[offset + 1];\n return decodeString(this.dataBuffer, start, end);\n }\n}\n"]}
1
+ {"version":3,"file":"stringDictionaryVector.js","sourceRoot":"","sources":["../../../src/vector/dictionary/stringDictionaryVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,sBAAuB,SAAQ,kBAAsC;IAKzD;IAJJ,WAAW,CAAc;IAE1C,YACI,IAAY,EACK,WAAuB,EACxC,YAAyB,EACzB,gBAA4B,EAC5B,iBAA6B;QAE7B,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QALpE,gBAAW,GAAX,WAAW,CAAY;QAMxC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACzC,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;CACJ","sourcesContent":["import { VariableSizeVector } from \"../variableSizeVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { decodeString } from \"../../decoding/decodingUtils\";\n\nexport class StringDictionaryVector extends VariableSizeVector<Uint8Array, string> {\n private readonly textEncoder: TextEncoder;\n\n constructor(\n name: string,\n private readonly indexBuffer: Int32Array,\n offsetBuffer: Uint32Array,\n dictionaryBuffer: Uint8Array,\n nullabilityBuffer?: BitVector,\n ) {\n super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);\n this.indexBuffer = indexBuffer;\n this.textEncoder = new TextEncoder();\n }\n\n protected getValueFromBuffer(index: number): string {\n const offset = this.indexBuffer[index];\n const start = this.offsetBuffer[offset];\n const end = this.offsetBuffer[offset + 1];\n return decodeString(this.dataBuffer, start, end);\n }\n}\n"]}
@@ -2,6 +2,6 @@ import { VariableSizeVector } from "../variableSizeVector";
2
2
  import type BitVector from "./bitVector";
3
3
  export declare class StringFlatVector extends VariableSizeVector<Uint8Array, string> {
4
4
  private readonly textEncoder;
5
- constructor(name: string, offsetBuffer: Int32Array, dataBuffer: Uint8Array, nullabilityBuffer?: BitVector);
5
+ constructor(name: string, offsetBuffer: Uint32Array, dataBuffer: Uint8Array, nullabilityBuffer?: BitVector);
6
6
  protected getValueFromBuffer(index: number): string;
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stringFlatVector.js","sourceRoot":"","sources":["../../../src/vector/flat/stringFlatVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,gBAAiB,SAAQ,kBAAsC;IACvD,WAAW,CAAc;IAE1C,YAAY,IAAY,EAAE,YAAwB,EAAE,UAAsB,EAAE,iBAA6B;QACrG,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACzC,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;CACJ","sourcesContent":["import { VariableSizeVector } from \"../variableSizeVector\";\nimport type BitVector from \"./bitVector\";\nimport { decodeString } from \"../../decoding/decodingUtils\";\n\nexport class StringFlatVector extends VariableSizeVector<Uint8Array, string> {\n private readonly textEncoder: TextEncoder;\n\n constructor(name: string, offsetBuffer: Int32Array, dataBuffer: Uint8Array, nullabilityBuffer?: BitVector) {\n super(name, offsetBuffer, dataBuffer, nullabilityBuffer ?? offsetBuffer.length - 1);\n this.textEncoder = new TextEncoder();\n }\n\n protected getValueFromBuffer(index: number): string {\n const start = this.offsetBuffer[index];\n const end = this.offsetBuffer[index + 1];\n return decodeString(this.dataBuffer, start, end);\n }\n}\n"]}
1
+ {"version":3,"file":"stringFlatVector.js","sourceRoot":"","sources":["../../../src/vector/flat/stringFlatVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,gBAAiB,SAAQ,kBAAsC;IACvD,WAAW,CAAc;IAE1C,YAAY,IAAY,EAAE,YAAyB,EAAE,UAAsB,EAAE,iBAA6B;QACtG,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACzC,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;CACJ","sourcesContent":["import { VariableSizeVector } from \"../variableSizeVector\";\nimport type BitVector from \"./bitVector\";\nimport { decodeString } from \"../../decoding/decodingUtils\";\n\nexport class StringFlatVector extends VariableSizeVector<Uint8Array, string> {\n private readonly textEncoder: TextEncoder;\n\n constructor(name: string, offsetBuffer: Uint32Array, dataBuffer: Uint8Array, nullabilityBuffer?: BitVector) {\n super(name, offsetBuffer, dataBuffer, nullabilityBuffer ?? offsetBuffer.length - 1);\n this.textEncoder = new TextEncoder();\n }\n\n protected getValueFromBuffer(index: number): string {\n const start = this.offsetBuffer[index];\n const end = this.offsetBuffer[index + 1];\n return decodeString(this.dataBuffer, start, end);\n }\n}\n"]}
@@ -8,7 +8,7 @@ export declare class StringFsstDictionaryVector extends VariableSizeVector<Uint8
8
8
  private symbolLengthBuffer;
9
9
  private lengthBuffer;
10
10
  private decodedDictionary;
11
- constructor(name: string, indexBuffer: Int32Array, offsetBuffer: Int32Array, dictionaryBuffer: Uint8Array, symbolOffsetBuffer: Int32Array, symbolTableBuffer: Uint8Array, nullabilityBuffer: BitVector);
11
+ constructor(name: string, indexBuffer: Int32Array, offsetBuffer: Uint32Array, dictionaryBuffer: Uint8Array, symbolOffsetBuffer: Uint32Array, symbolTableBuffer: Uint8Array, nullabilityBuffer: BitVector);
12
12
  protected getValueFromBuffer(index: number): string;
13
13
  private offsetToLengthBuffer;
14
14
  }