@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
@@ -1,192 +1,180 @@
1
- import { StreamMetadataDecoder } from "../metadata/tile/streamMetadataDecoder";
1
+ import { decodeStreamMetadata } from "../metadata/tile/streamMetadataDecoder";
2
2
  import { StringFlatVector } from "../vector/flat/stringFlatVector";
3
3
  import { StringDictionaryVector } from "../vector/dictionary/stringDictionaryVector";
4
4
  import BitVector from "../vector/flat/bitVector";
5
5
  import { PhysicalStreamType } from "../metadata/tile/physicalStreamType";
6
6
  import { DictionaryType } from "../metadata/tile/dictionaryType";
7
7
  import { LengthType } from "../metadata/tile/lengthType";
8
- import { decodeIntStream, decodeLengthStreamToOffsetBuffer, decodeNullableIntStream } from "./integerStreamDecoder";
8
+ import { decodeIntStream, decodeLengthStreamToOffsetBuffer } from "./integerStreamDecoder";
9
9
  import { ScalarType } from "../metadata/tileset/tilesetMetadata";
10
10
  import { decodeVarintInt32 } from "./integerDecodingUtils";
11
11
  import { decodeBooleanRle, skipColumn } from "./decodingUtils";
12
- import { RleEncodedStreamMetadata } from "../metadata/tile/rleEncodedStreamMetadata";
13
12
  import { StringFsstDictionaryVector } from "../vector/fsst-dictionary/stringFsstDictionaryVector";
14
- export class StringDecoder {
15
- static ROOT_COLUMN_NAME = "default";
16
- static NESTED_COLUMN_SEPARATOR = ":";
17
- constructor() { }
18
- static decode(name, data, offset, numStreams, bitVector) {
19
- let dictionaryLengthStream = null;
20
- let offsetStream = null;
21
- let dictionaryStream = null;
22
- let symbolLengthStream = null;
23
- let symbolTableStream = null;
24
- let presentStream = null;
25
- let plainLengthStream = null;
26
- let plainDataStream = null;
27
- for (let i = 0; i < numStreams; i++) {
28
- const streamMetadata = StreamMetadataDecoder.decode(data, offset);
29
- if (streamMetadata.byteLength === 0) {
30
- continue;
13
+ const ROOT_COLUMN_NAME = "default";
14
+ const NESTED_COLUMN_SEPARATOR = ":";
15
+ export function decodeString(name, data, offset, numStreams, bitVector) {
16
+ let dictionaryLengthStream = null;
17
+ let offsetStream = null;
18
+ let dictionaryStream = null;
19
+ let symbolLengthStream = null;
20
+ let symbolTableStream = null;
21
+ let presentStream = null;
22
+ let plainLengthStream = null;
23
+ let plainDataStream = null;
24
+ for (let i = 0; i < numStreams; i++) {
25
+ const streamMetadata = decodeStreamMetadata(data, offset);
26
+ if (streamMetadata.byteLength === 0) {
27
+ continue;
28
+ }
29
+ switch (streamMetadata.physicalStreamType) {
30
+ case PhysicalStreamType.PRESENT: {
31
+ const presentData = decodeBooleanRle(data, streamMetadata.numValues, streamMetadata.byteLength, offset);
32
+ presentStream = new BitVector(presentData, streamMetadata.numValues);
33
+ break;
31
34
  }
32
- switch (streamMetadata.physicalStreamType) {
33
- case PhysicalStreamType.PRESENT: {
34
- const presentData = decodeBooleanRle(data, streamMetadata.numValues, offset);
35
- presentStream = new BitVector(presentData, streamMetadata.numValues);
36
- break;
35
+ case PhysicalStreamType.OFFSET: {
36
+ const isNullable = bitVector != null || presentStream != null;
37
+ const nullabilityBuffer = bitVector ?? presentStream;
38
+ offsetStream = decodeIntStream(data, offset, streamMetadata, false, undefined, isNullable ? nullabilityBuffer : undefined);
39
+ break;
40
+ }
41
+ case PhysicalStreamType.LENGTH: {
42
+ const ls = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
43
+ if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {
44
+ dictionaryLengthStream = ls;
45
+ }
46
+ else if (LengthType.SYMBOL === streamMetadata.logicalStreamType.lengthType) {
47
+ symbolLengthStream = ls;
37
48
  }
38
- case PhysicalStreamType.OFFSET: {
39
- const isNullable = bitVector != null || presentStream != null;
40
- const nullabilityBuffer = bitVector ?? presentStream;
41
- offsetStream = isNullable
42
- ? decodeNullableIntStream(data, offset, streamMetadata, false, nullabilityBuffer)
43
- : decodeIntStream(data, offset, streamMetadata, false);
44
- break;
49
+ else {
50
+ // Plain string encoding uses VAR_BINARY length type
51
+ plainLengthStream = ls;
52
+ }
53
+ break;
54
+ }
55
+ case PhysicalStreamType.DATA: {
56
+ const ds = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
57
+ offset.add(streamMetadata.byteLength);
58
+ const dictType = streamMetadata.logicalStreamType.dictionaryType;
59
+ if (DictionaryType.FSST === dictType) {
60
+ symbolTableStream = ds;
45
61
  }
46
- case PhysicalStreamType.LENGTH: {
47
- const ls = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
48
- if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {
49
- dictionaryLengthStream = ls;
50
- }
51
- else if (LengthType.SYMBOL === streamMetadata.logicalStreamType.lengthType) {
52
- symbolLengthStream = ls;
53
- }
54
- else {
55
- // Plain string encoding uses VAR_BINARY length type
56
- plainLengthStream = ls;
57
- }
58
- break;
62
+ else if (DictionaryType.SINGLE === dictType || DictionaryType.SHARED === dictType) {
63
+ dictionaryStream = ds;
59
64
  }
60
- case PhysicalStreamType.DATA: {
61
- const ds = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
62
- offset.add(streamMetadata.byteLength);
63
- const dictType = streamMetadata.logicalStreamType.dictionaryType;
64
- if (DictionaryType.FSST === dictType) {
65
- symbolTableStream = ds;
66
- }
67
- else if (DictionaryType.SINGLE === dictType || DictionaryType.SHARED === dictType) {
68
- dictionaryStream = ds;
69
- }
70
- else if (DictionaryType.NONE === dictType) {
71
- plainDataStream = ds;
72
- }
73
- break;
65
+ else if (DictionaryType.NONE === dictType) {
66
+ plainDataStream = ds;
74
67
  }
68
+ break;
75
69
  }
76
70
  }
77
- return (this.decodeFsstDictionaryVector(name, symbolTableStream, offsetStream, dictionaryLengthStream, dictionaryStream, symbolLengthStream, bitVector ?? presentStream) ??
78
- this.decodeDictionaryVector(name, dictionaryStream, offsetStream, dictionaryLengthStream, bitVector ?? presentStream) ??
79
- this.decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, bitVector ?? presentStream));
80
71
  }
81
- static decodeFsstDictionaryVector(name, symbolTableStream, offsetStream, dictionaryLengthStream, dictionaryStream, symbolLengthStream, nullabilityBuffer) {
82
- if (!symbolTableStream) {
83
- return null;
84
- }
85
- return new StringFsstDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream, symbolLengthStream, symbolTableStream, nullabilityBuffer);
72
+ return (decodeFsstDictionaryVector(name, symbolTableStream, offsetStream, dictionaryLengthStream, dictionaryStream, symbolLengthStream, bitVector ?? presentStream) ??
73
+ decodeDictionaryVector(name, dictionaryStream, offsetStream, dictionaryLengthStream, bitVector ?? presentStream) ??
74
+ decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, bitVector ?? presentStream));
75
+ }
76
+ function decodeFsstDictionaryVector(name, symbolTableStream, offsetStream, dictionaryLengthStream, dictionaryStream, symbolLengthStream, nullabilityBuffer) {
77
+ if (!symbolTableStream) {
78
+ return null;
86
79
  }
87
- static decodeDictionaryVector(name, dictionaryStream, offsetStream, dictionaryLengthStream, nullabilityBuffer) {
88
- if (!dictionaryStream) {
89
- return null;
90
- }
80
+ return new StringFsstDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream, symbolLengthStream, symbolTableStream, nullabilityBuffer);
81
+ }
82
+ function decodeDictionaryVector(name, dictionaryStream, offsetStream, dictionaryLengthStream, nullabilityBuffer) {
83
+ if (!dictionaryStream) {
84
+ return null;
85
+ }
86
+ return nullabilityBuffer
87
+ ? new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream, nullabilityBuffer)
88
+ : new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream);
89
+ }
90
+ function decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, nullabilityBuffer) {
91
+ if (!plainLengthStream || !plainDataStream) {
92
+ return null;
93
+ }
94
+ if (offsetStream) {
91
95
  return nullabilityBuffer
92
- ? new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream, nullabilityBuffer)
93
- : new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream);
96
+ ? new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream, nullabilityBuffer)
97
+ : new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream);
94
98
  }
95
- static decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, nullabilityBuffer) {
96
- if (!plainLengthStream || !plainDataStream) {
97
- return null;
98
- }
99
- if (offsetStream) {
100
- return nullabilityBuffer
101
- ? new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream, nullabilityBuffer)
102
- : new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream);
99
+ if (nullabilityBuffer && nullabilityBuffer.size() !== plainLengthStream.length - 1) {
100
+ const sparseOffsetStream = new Int32Array(nullabilityBuffer.size());
101
+ let valueIndex = 0;
102
+ for (let i = 0; i < nullabilityBuffer.size(); i++) {
103
+ if (nullabilityBuffer.get(i)) {
104
+ sparseOffsetStream[i] = valueIndex++;
105
+ }
106
+ else {
107
+ sparseOffsetStream[i] = 0;
108
+ }
103
109
  }
104
- if (nullabilityBuffer && nullabilityBuffer.size() !== plainLengthStream.length - 1) {
105
- const sparseOffsetStream = new Int32Array(nullabilityBuffer.size());
106
- let valueIndex = 0;
107
- for (let i = 0; i < nullabilityBuffer.size(); i++) {
108
- if (nullabilityBuffer.get(i)) {
109
- sparseOffsetStream[i] = valueIndex++;
110
+ return new StringDictionaryVector(name, sparseOffsetStream, plainLengthStream, plainDataStream, nullabilityBuffer);
111
+ }
112
+ return nullabilityBuffer
113
+ ? new StringFlatVector(name, plainLengthStream, plainDataStream, nullabilityBuffer)
114
+ : new StringFlatVector(name, plainLengthStream, plainDataStream);
115
+ }
116
+ export function decodeSharedDictionary(data, offset, column, numFeatures, propertyColumnNames) {
117
+ let dictionaryOffsetBuffer = null;
118
+ let dictionaryBuffer = null;
119
+ let symbolOffsetBuffer = null;
120
+ let symbolTableBuffer = null;
121
+ let dictionaryStreamDecoded = false;
122
+ while (!dictionaryStreamDecoded) {
123
+ const streamMetadata = decodeStreamMetadata(data, offset);
124
+ switch (streamMetadata.physicalStreamType) {
125
+ case PhysicalStreamType.LENGTH:
126
+ if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {
127
+ dictionaryOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
110
128
  }
111
129
  else {
112
- sparseOffsetStream[i] = 0;
130
+ symbolOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
113
131
  }
114
- }
115
- return new StringDictionaryVector(name, sparseOffsetStream, plainLengthStream, plainDataStream, nullabilityBuffer);
132
+ break;
133
+ case PhysicalStreamType.DATA:
134
+ if (DictionaryType.SINGLE === streamMetadata.logicalStreamType.dictionaryType ||
135
+ DictionaryType.SHARED === streamMetadata.logicalStreamType.dictionaryType) {
136
+ dictionaryBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
137
+ dictionaryStreamDecoded = true;
138
+ }
139
+ else {
140
+ symbolTableBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
141
+ }
142
+ offset.add(streamMetadata.byteLength);
143
+ break;
116
144
  }
117
- return nullabilityBuffer
118
- ? new StringFlatVector(name, plainLengthStream, plainDataStream, nullabilityBuffer)
119
- : new StringFlatVector(name, plainLengthStream, plainDataStream);
120
145
  }
121
- static decodeSharedDictionary(data, offset, column, numFeatures, propertyColumnNames) {
122
- let dictionaryOffsetBuffer = null;
123
- let dictionaryBuffer = null;
124
- let symbolOffsetBuffer = null;
125
- let symbolTableBuffer = null;
126
- let dictionaryStreamDecoded = false;
127
- while (!dictionaryStreamDecoded) {
128
- const streamMetadata = StreamMetadataDecoder.decode(data, offset);
129
- switch (streamMetadata.physicalStreamType) {
130
- case PhysicalStreamType.LENGTH:
131
- if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {
132
- dictionaryOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
133
- }
134
- else {
135
- symbolOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
136
- }
137
- break;
138
- case PhysicalStreamType.DATA:
139
- if (DictionaryType.SINGLE === streamMetadata.logicalStreamType.dictionaryType ||
140
- DictionaryType.SHARED === streamMetadata.logicalStreamType.dictionaryType) {
141
- dictionaryBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
142
- dictionaryStreamDecoded = true;
143
- }
144
- else {
145
- symbolTableBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
146
- }
147
- offset.add(streamMetadata.byteLength);
148
- break;
149
- }
146
+ const childFields = column.complexType.children;
147
+ const stringDictionaryVectors = [];
148
+ let i = 0;
149
+ for (const childField of childFields) {
150
+ const numStreams = decodeVarintInt32(data, offset, 1)[0];
151
+ if (numStreams == 0) {
152
+ /* Column is not present in the tile */
153
+ continue;
150
154
  }
151
- const childFields = column.complexType.children;
152
- const stringDictionaryVectors = [];
153
- let i = 0;
154
- for (const childField of childFields) {
155
- const numStreams = decodeVarintInt32(data, offset, 1)[0];
156
- if (numStreams == 0) {
157
- /* Column is not present in the tile */
155
+ const columnName = `${column.name}${childField.name === ROOT_COLUMN_NAME ? "" : NESTED_COLUMN_SEPARATOR + childField.name}`;
156
+ if (propertyColumnNames) {
157
+ if (!propertyColumnNames.has(columnName)) {
158
+ //TODO: add size of sub column to Mlt for faster skipping
159
+ skipColumn(numStreams, data, offset);
158
160
  continue;
159
161
  }
160
- const columnName = `${column.name}${childField.name === StringDecoder.ROOT_COLUMN_NAME
161
- ? ""
162
- : StringDecoder.NESTED_COLUMN_SEPARATOR + childField.name}`;
163
- if (propertyColumnNames) {
164
- if (!propertyColumnNames.has(columnName)) {
165
- //TODO: add size of sub column to Mlt for faster skipping
166
- skipColumn(numStreams, data, offset);
167
- continue;
168
- }
169
- }
170
- if (numStreams !== 2 ||
171
- childField.type !== "scalarField" ||
172
- childField.scalarField.physicalType !== ScalarType.STRING) {
173
- throw new Error("Currently only optional string fields are implemented for a struct.");
174
- }
175
- const presentStreamMetadata = StreamMetadataDecoder.decode(data, offset);
176
- const presentStream = decodeBooleanRle(data, presentStreamMetadata.numValues, offset);
177
- const offsetStreamMetadata = StreamMetadataDecoder.decode(data, offset);
178
- const offsetCount = offsetStreamMetadata instanceof RleEncodedStreamMetadata
179
- ? offsetStreamMetadata.numRleValues
180
- : offsetStreamMetadata.numValues;
181
- const isNullable = offsetCount !== numFeatures;
182
- const offsetStream = isNullable
183
- ? decodeNullableIntStream(data, offset, offsetStreamMetadata, false, new BitVector(presentStream, presentStreamMetadata.numValues))
184
- : decodeIntStream(data, offset, offsetStreamMetadata, false);
185
- stringDictionaryVectors[i++] = symbolTableBuffer
186
- ? new StringFsstDictionaryVector(columnName, offsetStream, dictionaryOffsetBuffer, dictionaryBuffer, symbolOffsetBuffer, symbolTableBuffer, new BitVector(presentStream, presentStreamMetadata.numValues))
187
- : new StringDictionaryVector(columnName, offsetStream, dictionaryOffsetBuffer, dictionaryBuffer, new BitVector(presentStream, presentStreamMetadata.numValues));
188
162
  }
189
- return stringDictionaryVectors;
163
+ if (numStreams !== 2 ||
164
+ childField.type !== "scalarField" ||
165
+ childField.scalarField.physicalType !== ScalarType.STRING) {
166
+ throw new Error("Currently only optional string fields are implemented for a struct.");
167
+ }
168
+ const presentStreamMetadata = decodeStreamMetadata(data, offset);
169
+ const presentStream = decodeBooleanRle(data, presentStreamMetadata.numValues, presentStreamMetadata.byteLength, offset);
170
+ const offsetStreamMetadata = decodeStreamMetadata(data, offset);
171
+ const offsetCount = offsetStreamMetadata.decompressedCount;
172
+ const isNullable = offsetCount !== numFeatures;
173
+ const offsetStream = decodeIntStream(data, offset, offsetStreamMetadata, false, undefined, isNullable ? new BitVector(presentStream, presentStreamMetadata.numValues) : undefined);
174
+ stringDictionaryVectors[i++] = symbolTableBuffer
175
+ ? new StringFsstDictionaryVector(columnName, offsetStream, dictionaryOffsetBuffer, dictionaryBuffer, symbolOffsetBuffer, symbolTableBuffer, new BitVector(presentStream, presentStreamMetadata.numValues))
176
+ : new StringDictionaryVector(columnName, offsetStream, dictionaryOffsetBuffer, dictionaryBuffer, new BitVector(presentStream, presentStreamMetadata.numValues));
190
177
  }
178
+ return stringDictionaryVectors;
191
179
  }
192
180
  //# sourceMappingURL=stringDecoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stringDecoder.js","sourceRoot":"","sources":["../../src/decoding/stringDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { StreamMetadataDecoder } from \"../metadata/tile/streamMetadataDecoder\";\nimport { StringFlatVector } from \"../vector/flat/stringFlatVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport type IntWrapper from \"./intWrapper\";\nimport BitVector from \"../vector/flat/bitVector\";\nimport type Vector from \"../vector/vector\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { decodeIntStream, decodeLengthStreamToOffsetBuffer, decodeNullableIntStream } from \"./integerStreamDecoder\";\nimport { type Column, ScalarType } from \"../metadata/tileset/tilesetMetadata\";\nimport { decodeVarintInt32 } from \"./integerDecodingUtils\";\nimport { decodeBooleanRle, skipColumn } from \"./decodingUtils\";\nimport { RleEncodedStreamMetadata } from \"../metadata/tile/rleEncodedStreamMetadata\";\nimport { StringFsstDictionaryVector } from \"../vector/fsst-dictionary/stringFsstDictionaryVector\";\n\nexport class StringDecoder {\n private static readonly ROOT_COLUMN_NAME = \"default\";\n private static readonly NESTED_COLUMN_SEPARATOR = \":\";\n\n private constructor() {}\n\n static decode(\n name: string,\n data: Uint8Array,\n offset: IntWrapper,\n numStreams: number,\n bitVector?: BitVector,\n ): Vector {\n let dictionaryLengthStream: Int32Array = null;\n let offsetStream: Int32Array = null;\n let dictionaryStream: Uint8Array = null;\n let symbolLengthStream: Int32Array = null;\n let symbolTableStream: Uint8Array = null;\n let presentStream: BitVector = null;\n let plainLengthStream: Int32Array = null;\n let plainDataStream: Uint8Array = null;\n\n for (let i = 0; i < numStreams; i++) {\n const streamMetadata = StreamMetadataDecoder.decode(data, offset);\n if (streamMetadata.byteLength === 0) {\n continue;\n }\n\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.PRESENT: {\n const presentData = decodeBooleanRle(data, streamMetadata.numValues, offset);\n presentStream = new BitVector(presentData, streamMetadata.numValues);\n break;\n }\n case PhysicalStreamType.OFFSET: {\n const isNullable = bitVector != null || presentStream != null;\n const nullabilityBuffer = bitVector ?? presentStream;\n offsetStream = isNullable\n ? decodeNullableIntStream(data, offset, streamMetadata, false, nullabilityBuffer)\n : decodeIntStream(data, offset, streamMetadata, false);\n break;\n }\n case PhysicalStreamType.LENGTH: {\n const ls = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryLengthStream = ls;\n } else if (LengthType.SYMBOL === streamMetadata.logicalStreamType.lengthType) {\n symbolLengthStream = ls;\n } else {\n // Plain string encoding uses VAR_BINARY length type\n plainLengthStream = ls;\n }\n break;\n }\n case PhysicalStreamType.DATA: {\n const ds = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n offset.add(streamMetadata.byteLength);\n const dictType = streamMetadata.logicalStreamType.dictionaryType;\n if (DictionaryType.FSST === dictType) {\n symbolTableStream = ds;\n } else if (DictionaryType.SINGLE === dictType || DictionaryType.SHARED === dictType) {\n dictionaryStream = ds;\n } else if (DictionaryType.NONE === dictType) {\n plainDataStream = ds;\n }\n break;\n }\n }\n }\n\n return (\n this.decodeFsstDictionaryVector(\n name,\n symbolTableStream,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n bitVector ?? presentStream,\n ) ??\n this.decodeDictionaryVector(\n name,\n dictionaryStream,\n offsetStream,\n dictionaryLengthStream,\n bitVector ?? presentStream,\n ) ??\n this.decodePlainStringVector(\n name,\n plainLengthStream,\n plainDataStream,\n offsetStream,\n bitVector ?? presentStream,\n )\n );\n }\n\n private static decodeFsstDictionaryVector(\n name: string,\n symbolTableStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Int32Array | null,\n dictionaryStream: Uint8Array | null,\n symbolLengthStream: Int32Array | null,\n nullabilityBuffer: BitVector | null,\n ): Vector | null {\n if (!symbolTableStream) {\n return null;\n }\n return new StringFsstDictionaryVector(\n name,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n symbolTableStream,\n nullabilityBuffer,\n );\n }\n\n private static decodeDictionaryVector(\n name: string,\n dictionaryStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Int32Array | null,\n nullabilityBuffer: BitVector | null,\n ): Vector | null {\n if (!dictionaryStream) {\n return null;\n }\n return nullabilityBuffer\n ? new StringDictionaryVector(\n name,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n nullabilityBuffer,\n )\n : new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream);\n }\n\n private static decodePlainStringVector(\n name: string,\n plainLengthStream: Int32Array | null,\n plainDataStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n nullabilityBuffer: BitVector | null,\n ): Vector | null {\n if (!plainLengthStream || !plainDataStream) {\n return null;\n }\n\n if (offsetStream) {\n return nullabilityBuffer\n ? new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream);\n }\n\n if (nullabilityBuffer && nullabilityBuffer.size() !== plainLengthStream.length - 1) {\n const sparseOffsetStream = new Int32Array(nullabilityBuffer.size());\n let valueIndex = 0;\n for (let i = 0; i < nullabilityBuffer.size(); i++) {\n if (nullabilityBuffer.get(i)) {\n sparseOffsetStream[i] = valueIndex++;\n } else {\n sparseOffsetStream[i] = 0;\n }\n }\n return new StringDictionaryVector(\n name,\n sparseOffsetStream,\n plainLengthStream,\n plainDataStream,\n nullabilityBuffer,\n );\n }\n\n return nullabilityBuffer\n ? new StringFlatVector(name, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringFlatVector(name, plainLengthStream, plainDataStream);\n }\n\n static decodeSharedDictionary(\n data: Uint8Array,\n offset: IntWrapper,\n column: Column,\n numFeatures: number,\n propertyColumnNames?: Set<string>,\n ): Vector[] {\n let dictionaryOffsetBuffer: Int32Array = null;\n let dictionaryBuffer: Uint8Array = null;\n let symbolOffsetBuffer: Int32Array = null;\n let symbolTableBuffer: Uint8Array = null;\n\n let dictionaryStreamDecoded = false;\n while (!dictionaryStreamDecoded) {\n const streamMetadata = StreamMetadataDecoder.decode(data, offset);\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n } else {\n symbolOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n }\n break;\n case PhysicalStreamType.DATA:\n if (\n DictionaryType.SINGLE === streamMetadata.logicalStreamType.dictionaryType ||\n DictionaryType.SHARED === streamMetadata.logicalStreamType.dictionaryType\n ) {\n dictionaryBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n dictionaryStreamDecoded = true;\n } else {\n symbolTableBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n }\n offset.add(streamMetadata.byteLength);\n break;\n }\n }\n\n const childFields = column.complexType.children;\n const stringDictionaryVectors = [];\n let i = 0;\n for (const childField of childFields) {\n const numStreams = decodeVarintInt32(data, offset, 1)[0];\n if (numStreams == 0) {\n /* Column is not present in the tile */\n continue;\n }\n\n const columnName = `${column.name}${\n childField.name === StringDecoder.ROOT_COLUMN_NAME\n ? \"\"\n : StringDecoder.NESTED_COLUMN_SEPARATOR + childField.name\n }`;\n if (propertyColumnNames) {\n if (!propertyColumnNames.has(columnName)) {\n //TODO: add size of sub column to Mlt for faster skipping\n skipColumn(numStreams, data, offset);\n continue;\n }\n }\n\n if (\n numStreams !== 2 ||\n childField.type !== \"scalarField\" ||\n childField.scalarField.physicalType !== ScalarType.STRING\n ) {\n throw new Error(\"Currently only optional string fields are implemented for a struct.\");\n }\n\n const presentStreamMetadata = StreamMetadataDecoder.decode(data, offset);\n const presentStream = decodeBooleanRle(data, presentStreamMetadata.numValues, offset);\n const offsetStreamMetadata = StreamMetadataDecoder.decode(data, offset);\n const offsetCount =\n offsetStreamMetadata instanceof RleEncodedStreamMetadata\n ? offsetStreamMetadata.numRleValues\n : offsetStreamMetadata.numValues;\n const isNullable = offsetCount !== numFeatures;\n const offsetStream = isNullable\n ? decodeNullableIntStream(\n data,\n offset,\n offsetStreamMetadata,\n false,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n )\n : decodeIntStream(data, offset, offsetStreamMetadata, false);\n\n stringDictionaryVectors[i++] = symbolTableBuffer\n ? new StringFsstDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n symbolOffsetBuffer,\n symbolTableBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n )\n : new StringDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n );\n }\n\n return stringDictionaryVectors;\n }\n}\n"]}
1
+ {"version":3,"file":"stringDecoder.js","sourceRoot":"","sources":["../../src/decoding/stringDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { decodeStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport { StringFlatVector } from \"../vector/flat/stringFlatVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport type IntWrapper from \"./intWrapper\";\nimport BitVector from \"../vector/flat/bitVector\";\nimport type Vector from \"../vector/vector\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { decodeIntStream, decodeLengthStreamToOffsetBuffer } from \"./integerStreamDecoder\";\nimport { type Column, ScalarType } from \"../metadata/tileset/tilesetMetadata\";\nimport { decodeVarintInt32 } from \"./integerDecodingUtils\";\nimport { decodeBooleanRle, skipColumn } from \"./decodingUtils\";\nimport { StringFsstDictionaryVector } from \"../vector/fsst-dictionary/stringFsstDictionaryVector\";\n\nconst ROOT_COLUMN_NAME = \"default\";\nconst NESTED_COLUMN_SEPARATOR = \":\";\n\nexport function decodeString(\n name: string,\n data: Uint8Array,\n offset: IntWrapper,\n numStreams: number,\n bitVector?: BitVector,\n): Vector {\n let dictionaryLengthStream: Uint32Array = null;\n let offsetStream: Int32Array = null;\n let dictionaryStream: Uint8Array = null;\n let symbolLengthStream: Uint32Array = null;\n let symbolTableStream: Uint8Array = null;\n let presentStream: BitVector = null;\n let plainLengthStream: Uint32Array = null;\n let plainDataStream: Uint8Array = null;\n\n for (let i = 0; i < numStreams; i++) {\n const streamMetadata = decodeStreamMetadata(data, offset);\n if (streamMetadata.byteLength === 0) {\n continue;\n }\n\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.PRESENT: {\n const presentData = decodeBooleanRle(data, streamMetadata.numValues, streamMetadata.byteLength, offset);\n presentStream = new BitVector(presentData, streamMetadata.numValues);\n break;\n }\n case PhysicalStreamType.OFFSET: {\n const isNullable = bitVector != null || presentStream != null;\n const nullabilityBuffer = bitVector ?? presentStream;\n offsetStream = decodeIntStream(\n data,\n offset,\n streamMetadata,\n false,\n undefined,\n isNullable ? nullabilityBuffer : undefined,\n );\n break;\n }\n case PhysicalStreamType.LENGTH: {\n const ls = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryLengthStream = ls;\n } else if (LengthType.SYMBOL === streamMetadata.logicalStreamType.lengthType) {\n symbolLengthStream = ls;\n } else {\n // Plain string encoding uses VAR_BINARY length type\n plainLengthStream = ls;\n }\n break;\n }\n case PhysicalStreamType.DATA: {\n const ds = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n offset.add(streamMetadata.byteLength);\n const dictType = streamMetadata.logicalStreamType.dictionaryType;\n if (DictionaryType.FSST === dictType) {\n symbolTableStream = ds;\n } else if (DictionaryType.SINGLE === dictType || DictionaryType.SHARED === dictType) {\n dictionaryStream = ds;\n } else if (DictionaryType.NONE === dictType) {\n plainDataStream = ds;\n }\n break;\n }\n }\n }\n\n return (\n decodeFsstDictionaryVector(\n name,\n symbolTableStream,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n bitVector ?? presentStream,\n ) ??\n decodeDictionaryVector(\n name,\n dictionaryStream,\n offsetStream,\n dictionaryLengthStream,\n bitVector ?? presentStream,\n ) ??\n decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, bitVector ?? presentStream)\n );\n}\n\nfunction decodeFsstDictionaryVector(\n name: string,\n symbolTableStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Uint32Array | null,\n dictionaryStream: Uint8Array | null,\n symbolLengthStream: Uint32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!symbolTableStream) {\n return null;\n }\n return new StringFsstDictionaryVector(\n name,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n symbolTableStream,\n nullabilityBuffer,\n );\n}\n\nfunction decodeDictionaryVector(\n name: string,\n dictionaryStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Uint32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!dictionaryStream) {\n return null;\n }\n return nullabilityBuffer\n ? new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream, nullabilityBuffer)\n : new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream);\n}\n\nfunction decodePlainStringVector(\n name: string,\n plainLengthStream: Uint32Array | null,\n plainDataStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!plainLengthStream || !plainDataStream) {\n return null;\n }\n\n if (offsetStream) {\n return nullabilityBuffer\n ? new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream);\n }\n\n if (nullabilityBuffer && nullabilityBuffer.size() !== plainLengthStream.length - 1) {\n const sparseOffsetStream = new Int32Array(nullabilityBuffer.size());\n let valueIndex = 0;\n for (let i = 0; i < nullabilityBuffer.size(); i++) {\n if (nullabilityBuffer.get(i)) {\n sparseOffsetStream[i] = valueIndex++;\n } else {\n sparseOffsetStream[i] = 0;\n }\n }\n return new StringDictionaryVector(\n name,\n sparseOffsetStream,\n plainLengthStream,\n plainDataStream,\n nullabilityBuffer,\n );\n }\n\n return nullabilityBuffer\n ? new StringFlatVector(name, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringFlatVector(name, plainLengthStream, plainDataStream);\n}\n\nexport function decodeSharedDictionary(\n data: Uint8Array,\n offset: IntWrapper,\n column: Column,\n numFeatures: number,\n propertyColumnNames?: Set<string>,\n): Vector[] {\n let dictionaryOffsetBuffer: Uint32Array = null;\n let dictionaryBuffer: Uint8Array = null;\n let symbolOffsetBuffer: Uint32Array = null;\n let symbolTableBuffer: Uint8Array = null;\n\n let dictionaryStreamDecoded = false;\n while (!dictionaryStreamDecoded) {\n const streamMetadata = decodeStreamMetadata(data, offset);\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n } else {\n symbolOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n }\n break;\n case PhysicalStreamType.DATA:\n if (\n DictionaryType.SINGLE === streamMetadata.logicalStreamType.dictionaryType ||\n DictionaryType.SHARED === streamMetadata.logicalStreamType.dictionaryType\n ) {\n dictionaryBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n dictionaryStreamDecoded = true;\n } else {\n symbolTableBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n }\n offset.add(streamMetadata.byteLength);\n break;\n }\n }\n\n const childFields = column.complexType.children;\n const stringDictionaryVectors = [];\n let i = 0;\n for (const childField of childFields) {\n const numStreams = decodeVarintInt32(data, offset, 1)[0];\n if (numStreams == 0) {\n /* Column is not present in the tile */\n continue;\n }\n\n const columnName = `${column.name}${\n childField.name === ROOT_COLUMN_NAME ? \"\" : NESTED_COLUMN_SEPARATOR + childField.name\n }`;\n if (propertyColumnNames) {\n if (!propertyColumnNames.has(columnName)) {\n //TODO: add size of sub column to Mlt for faster skipping\n skipColumn(numStreams, data, offset);\n continue;\n }\n }\n\n if (\n numStreams !== 2 ||\n childField.type !== \"scalarField\" ||\n childField.scalarField.physicalType !== ScalarType.STRING\n ) {\n throw new Error(\"Currently only optional string fields are implemented for a struct.\");\n }\n\n const presentStreamMetadata = decodeStreamMetadata(data, offset);\n const presentStream = decodeBooleanRle(data, presentStreamMetadata.numValues, presentStreamMetadata.byteLength, offset);\n const offsetStreamMetadata = decodeStreamMetadata(data, offset);\n const offsetCount = offsetStreamMetadata.decompressedCount;\n const isNullable = offsetCount !== numFeatures;\n const offsetStream = decodeIntStream(\n data,\n offset,\n offsetStreamMetadata,\n false,\n undefined,\n isNullable ? new BitVector(presentStream, presentStreamMetadata.numValues) : undefined,\n );\n\n stringDictionaryVectors[i++] = symbolTableBuffer\n ? new StringFsstDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n symbolOffsetBuffer,\n symbolTableBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n )\n : new StringDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n );\n }\n\n return stringDictionaryVectors;\n}\n"]}