@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
@@ -0,0 +1,335 @@
1
+ import { LogicalLevelTechnique } from "../metadata/tile/logicalLevelTechnique";
2
+ import { PhysicalLevelTechnique } from "../metadata/tile/physicalLevelTechnique";
3
+ import { PhysicalStreamType } from "../metadata/tile/physicalStreamType";
4
+ import { LogicalStreamType } from "../metadata/tile/logicalStreamType";
5
+ import { DictionaryType } from "../metadata/tile/dictionaryType";
6
+ import IntWrapper from "../decoding/intWrapper";
7
+ import { encodeBooleanRle, encodeFloatsLE, encodeDoubleLE } from "./encodingUtils";
8
+ import { encodeVarintInt32Value, encodeVarintInt32, encodeVarintInt64, encodeZigZagInt32Value, encodeZigZagInt64Value, } from "./integerEncodingUtils";
9
+ /**
10
+ * Encodes INT_32 values with NONE encoding (no delta, no RLE)
11
+ */
12
+ export function encodeInt32NoneColumn(values) {
13
+ const zigzagEncoded = new Int32Array(values.length);
14
+ for (let i = 0; i < values.length; i++) {
15
+ zigzagEncoded[i] = encodeZigZagInt32Value(values[i]);
16
+ }
17
+ const encodedData = encodeVarintInt32(zigzagEncoded);
18
+ const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);
19
+ return buildEncodedStream(streamMetadata, encodedData);
20
+ }
21
+ /**
22
+ * Encodes INT_32 values with DELTA encoding
23
+ */
24
+ export function encodeInt32DeltaColumn(values) {
25
+ // Delta encode: store deltas
26
+ const deltaEncoded = new Int32Array(values.length);
27
+ deltaEncoded[0] = values[0];
28
+ for (let i = 1; i < values.length; i++) {
29
+ deltaEncoded[i] = values[i] - values[i - 1];
30
+ }
31
+ const zigzagEncoded = new Int32Array(deltaEncoded.length);
32
+ for (let i = 0; i < deltaEncoded.length; i++) {
33
+ zigzagEncoded[i] = encodeZigZagInt32Value(deltaEncoded[i]);
34
+ }
35
+ const encodedData = encodeVarintInt32(zigzagEncoded);
36
+ const streamMetadata = createStreamMetadata(LogicalLevelTechnique.DELTA, LogicalLevelTechnique.NONE, values.length);
37
+ return buildEncodedStream(streamMetadata, encodedData);
38
+ }
39
+ /**
40
+ * Encodes INT_32 values with RLE encoding
41
+ * @param runs - Array of [runLength, value] pairs
42
+ */
43
+ export function encodeInt32RleColumn(runs) {
44
+ const runLengths = [];
45
+ const values = [];
46
+ let totalValues = 0;
47
+ for (const [runLength, value] of runs) {
48
+ runLengths.push(runLength);
49
+ values.push(encodeZigZagInt32Value(value));
50
+ totalValues += runLength;
51
+ }
52
+ const rleValues = [...runLengths, ...values];
53
+ const encodedData = encodeVarintInt32(new Int32Array(rleValues));
54
+ const streamMetadata = createRleMetadata(LogicalLevelTechnique.RLE, LogicalLevelTechnique.NONE, runs.length, totalValues);
55
+ return buildEncodedStream(streamMetadata, encodedData);
56
+ }
57
+ /**
58
+ * Encodes INT_32 values with DELTA+RLE encoding
59
+ * @param runs - Array of [runLength, deltaValue] pairs, where first value is the base
60
+ */
61
+ export function encodeInt32DeltaRleColumn(runs) {
62
+ const runLengths = [];
63
+ const values = [];
64
+ let totalValues = 0;
65
+ for (const [runLength, value] of runs) {
66
+ runLengths.push(runLength);
67
+ values.push(encodeZigZagInt32Value(value));
68
+ totalValues += runLength;
69
+ }
70
+ const rleValues = [...runLengths, ...values];
71
+ const encodedData = encodeVarintInt32(new Int32Array(rleValues));
72
+ const streamMetadata = createRleMetadata(LogicalLevelTechnique.DELTA, LogicalLevelTechnique.RLE, runs.length, totalValues);
73
+ return buildEncodedStream(streamMetadata, encodedData);
74
+ }
75
+ /**
76
+ * Encodes nullable INT_32 values
77
+ */
78
+ export function encodeInt32NullableColumn(values) {
79
+ const nonNullValues = values.filter((v) => v !== null);
80
+ const zigzagEncoded = new Int32Array(nonNullValues.map((v) => encodeZigZagInt32Value(v)));
81
+ const encodedData = encodeVarintInt32(zigzagEncoded);
82
+ const dataStreamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nonNullValues.length);
83
+ const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);
84
+ // Nullability stream
85
+ const nullabilityValues = values.map((v) => v !== null);
86
+ const nullabilityEncoded = encodeBooleanRle(nullabilityValues);
87
+ const nullabilityMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nullabilityValues.length);
88
+ const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);
89
+ return concatenateBuffers(nullabilityStream, dataStream);
90
+ }
91
+ /**
92
+ * Encodes UINT_32 values (no zigzag encoding)
93
+ */
94
+ export function encodeUint32Column(values) {
95
+ const encodedData = encodeVarintInt32(new Int32Array(values));
96
+ const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);
97
+ return buildEncodedStream(streamMetadata, encodedData);
98
+ }
99
+ /**
100
+ * Encodes INT_64 values with NONE encoding
101
+ */
102
+ export function encodeInt64NoneColumn(values) {
103
+ const zigzagEncoded = new BigInt64Array(Array.from(values, (val) => encodeZigZagInt64Value(val)));
104
+ const encodedData = encodeVarintInt64(zigzagEncoded);
105
+ const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);
106
+ return buildEncodedStream(streamMetadata, encodedData);
107
+ }
108
+ /**
109
+ * Encodes INT_64 values with DELTA encoding
110
+ */
111
+ export function encodeInt64DeltaColumn(values) {
112
+ const deltaEncoded = new BigInt64Array(values.length);
113
+ deltaEncoded[0] = values[0];
114
+ for (let i = 1; i < values.length; i++) {
115
+ deltaEncoded[i] = values[i] - values[i - 1];
116
+ }
117
+ const zigzagEncoded = new BigInt64Array(deltaEncoded.length);
118
+ for (let i = 0; i < deltaEncoded.length; i++) {
119
+ zigzagEncoded[i] = encodeZigZagInt64Value(deltaEncoded[i]);
120
+ }
121
+ const encodedData = encodeVarintInt64(zigzagEncoded);
122
+ const streamMetadata = createStreamMetadata(LogicalLevelTechnique.DELTA, LogicalLevelTechnique.NONE, values.length);
123
+ return buildEncodedStream(streamMetadata, encodedData);
124
+ }
125
+ /**
126
+ * Encodes INT_64 values with RLE encoding
127
+ */
128
+ export function encodeInt64RleColumn(runs) {
129
+ const runLengths = [];
130
+ const values = [];
131
+ let totalValues = 0;
132
+ for (const [runLength, value] of runs) {
133
+ runLengths.push(BigInt(runLength));
134
+ values.push(encodeZigZagInt64Value(value));
135
+ totalValues += runLength;
136
+ }
137
+ const rleValues = [...runLengths, ...values];
138
+ const encodedData = encodeVarintInt64(new BigInt64Array(rleValues));
139
+ const streamMetadata = createRleMetadata(LogicalLevelTechnique.RLE, LogicalLevelTechnique.NONE, runs.length, totalValues);
140
+ return buildEncodedStream(streamMetadata, encodedData);
141
+ }
142
+ /**
143
+ * Encodes INT_64 values with DELTA+RLE encoding
144
+ */
145
+ export function encodeInt64DeltaRleColumn(runs) {
146
+ const runLengths = [];
147
+ const values = [];
148
+ let totalValues = 0;
149
+ for (const [runLength, value] of runs) {
150
+ runLengths.push(BigInt(runLength));
151
+ values.push(encodeZigZagInt64Value(value));
152
+ totalValues += runLength;
153
+ }
154
+ const rleValues = [...runLengths, ...values];
155
+ const encodedData = encodeVarintInt64(new BigInt64Array(rleValues));
156
+ const streamMetadata = createRleMetadata(LogicalLevelTechnique.DELTA, LogicalLevelTechnique.RLE, runs.length, totalValues);
157
+ return buildEncodedStream(streamMetadata, encodedData);
158
+ }
159
+ /**
160
+ * Encodes nullable INT_64 values
161
+ */
162
+ export function encodeInt64NullableColumn(values) {
163
+ const nonNullValues = values.filter((v) => v !== null);
164
+ const zigzagEncoded = new BigInt64Array(Array.from(nonNullValues, (val) => encodeZigZagInt64Value(val)));
165
+ const encodedData = encodeVarintInt64(zigzagEncoded);
166
+ const dataStreamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nonNullValues.length);
167
+ const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);
168
+ const nullabilityValues = values.map((v) => v !== null);
169
+ const nullabilityEncoded = encodeBooleanRle(nullabilityValues);
170
+ const nullabilityMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nullabilityValues.length);
171
+ const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);
172
+ return concatenateBuffers(nullabilityStream, dataStream);
173
+ }
174
+ /**
175
+ * Encodes UINT_64 values (no zigzag encoding)
176
+ */
177
+ export function encodeUint64Column(values) {
178
+ const encodedData = encodeVarintInt64(new BigInt64Array(values));
179
+ const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);
180
+ return buildEncodedStream(streamMetadata, encodedData);
181
+ }
182
+ /**
183
+ * Encodes nullable UINT_64 values
184
+ */
185
+ export function encodeUint64NullableColumn(values) {
186
+ const nonNullValues = values.filter((v) => v !== null);
187
+ const encodedData = encodeVarintInt64(new BigInt64Array(nonNullValues));
188
+ const dataStreamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nonNullValues.length);
189
+ const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);
190
+ const nullabilityValues = values.map((v) => v !== null);
191
+ const nullabilityEncoded = encodeBooleanRle(nullabilityValues);
192
+ const nullabilityMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nullabilityValues.length);
193
+ const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);
194
+ return concatenateBuffers(nullabilityStream, dataStream);
195
+ }
196
+ /**
197
+ * Encodes FLOAT values
198
+ */
199
+ export function encodeFloatColumn(values) {
200
+ const encodedData = encodeFloatsLE(values);
201
+ const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);
202
+ return buildEncodedStream(streamMetadata, encodedData);
203
+ }
204
+ /**
205
+ * Encodes nullable FLOAT values
206
+ */
207
+ export function encodeFloatNullableColumn(values) {
208
+ const nonNullValues = values.filter((v) => v !== null);
209
+ const encodedData = encodeFloatsLE(new Float32Array(nonNullValues));
210
+ const dataStreamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nonNullValues.length);
211
+ const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);
212
+ const nullabilityValues = values.map((v) => v !== null);
213
+ const nullabilityEncoded = encodeBooleanRle(nullabilityValues);
214
+ const nullabilityMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nullabilityValues.length);
215
+ const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);
216
+ return concatenateBuffers(nullabilityStream, dataStream);
217
+ }
218
+ /**
219
+ * Encodes DOUBLE values
220
+ */
221
+ export function encodeDoubleColumn(values) {
222
+ const encodedData = encodeDoubleLE(values);
223
+ const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);
224
+ return buildEncodedStream(streamMetadata, encodedData);
225
+ }
226
+ /**
227
+ * Encodes nullable DOUBLE values
228
+ */
229
+ export function encodeDoubleNullableColumn(values) {
230
+ const nonNullValues = values.filter((v) => v !== null);
231
+ const encodedData = encodeDoubleLE(new Float32Array(nonNullValues));
232
+ const dataStreamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nonNullValues.length);
233
+ const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);
234
+ const nullabilityValues = values.map((v) => v !== null);
235
+ const nullabilityEncoded = encodeBooleanRle(nullabilityValues);
236
+ const nullabilityMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nullabilityValues.length);
237
+ const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);
238
+ return concatenateBuffers(nullabilityStream, dataStream);
239
+ }
240
+ /**
241
+ * Encodes BOOLEAN values
242
+ */
243
+ export function encodeBooleanColumn(values) {
244
+ const encodedData = encodeBooleanRle(values);
245
+ const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);
246
+ return buildEncodedStream(streamMetadata, encodedData);
247
+ }
248
+ /**
249
+ * Encodes nullable BOOLEAN values
250
+ */
251
+ export function encodeBooleanNullableColumn(values) {
252
+ const nonNullValues = values.filter((v) => v !== null);
253
+ const encodedData = encodeBooleanRle(nonNullValues);
254
+ const dataStreamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nonNullValues.length);
255
+ const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);
256
+ const nullabilityValues = values.map((v) => v !== null);
257
+ const nullabilityEncoded = encodeBooleanRle(nullabilityValues);
258
+ const nullabilityMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, nullabilityValues.length);
259
+ const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);
260
+ return concatenateBuffers(nullabilityStream, dataStream);
261
+ }
262
+ function createStreamMetadata(logicalTechnique1, logicalTechnique2 = LogicalLevelTechnique.NONE, numValues = 3) {
263
+ return {
264
+ physicalStreamType: PhysicalStreamType.DATA,
265
+ logicalStreamType: new LogicalStreamType(DictionaryType.NONE),
266
+ logicalLevelTechnique1: logicalTechnique1,
267
+ logicalLevelTechnique2: logicalTechnique2,
268
+ physicalLevelTechnique: PhysicalLevelTechnique.VARINT,
269
+ numValues,
270
+ byteLength: 10,
271
+ decompressedCount: numValues,
272
+ };
273
+ }
274
+ function createRleMetadata(logicalTechnique1, logicalTechnique2, runs, numRleValues) {
275
+ return {
276
+ physicalStreamType: PhysicalStreamType.DATA,
277
+ logicalStreamType: new LogicalStreamType(DictionaryType.NONE),
278
+ logicalLevelTechnique1: logicalTechnique1,
279
+ logicalLevelTechnique2: logicalTechnique2,
280
+ physicalLevelTechnique: PhysicalLevelTechnique.VARINT,
281
+ numValues: runs * 2,
282
+ byteLength: 10,
283
+ decompressedCount: numRleValues,
284
+ runs,
285
+ numRleValues,
286
+ };
287
+ }
288
+ function buildEncodedStream(streamMetadata, encodedData) {
289
+ const updatedMetadata = {
290
+ ...streamMetadata,
291
+ byteLength: encodedData.length,
292
+ };
293
+ const metadataBuffer = encodeStreamMetadata(updatedMetadata);
294
+ const result = new Uint8Array(metadataBuffer.length + encodedData.length);
295
+ result.set(metadataBuffer, 0);
296
+ result.set(encodedData, metadataBuffer.length);
297
+ return result;
298
+ }
299
+ function encodeStreamMetadata(metadata) {
300
+ const buffer = new Uint8Array(100);
301
+ let writeOffset = 0;
302
+ // Byte 1: Stream type
303
+ const physicalTypeIndex = Object.values(PhysicalStreamType).indexOf(metadata.physicalStreamType);
304
+ const lowerNibble = 0; // For DATA stream with NONE dictionary type
305
+ buffer[writeOffset++] = (physicalTypeIndex << 4) | lowerNibble;
306
+ // Byte 2: Encoding techniques
307
+ const llt1Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique1);
308
+ const llt2Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique2);
309
+ const pltIndex = Object.values(PhysicalLevelTechnique).indexOf(metadata.physicalLevelTechnique);
310
+ buffer[writeOffset++] = (llt1Index << 5) | (llt2Index << 2) | pltIndex;
311
+ // Variable-length fields
312
+ const offset = new IntWrapper(writeOffset);
313
+ encodeVarintInt32Value(metadata.numValues, buffer, offset);
314
+ encodeVarintInt32Value(metadata.byteLength, buffer, offset);
315
+ // RLE-specific fields
316
+ if (isRleMetadata(metadata)) {
317
+ encodeVarintInt32Value(metadata.runs, buffer, offset);
318
+ encodeVarintInt32Value(metadata.numRleValues, buffer, offset);
319
+ }
320
+ return buffer.slice(0, offset.get());
321
+ }
322
+ function isRleMetadata(metadata) {
323
+ return "runs" in metadata && "numRleValues" in metadata;
324
+ }
325
+ function concatenateBuffers(...buffers) {
326
+ const totalLength = buffers.reduce((sum, buf) => sum + buf.length, 0);
327
+ const result = new Uint8Array(totalLength);
328
+ let offset = 0;
329
+ for (const buffer of buffers) {
330
+ result.set(buffer, offset);
331
+ offset += buffer.length;
332
+ }
333
+ return result;
334
+ }
335
+ //# sourceMappingURL=propertyEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propertyEncoder.js","sourceRoot":"","sources":["../../src/encoding/propertyEncoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { LogicalLevelTechnique } from \"../metadata/tile/logicalLevelTechnique\";\nimport { PhysicalLevelTechnique } from \"../metadata/tile/physicalLevelTechnique\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { LogicalStreamType } from \"../metadata/tile/logicalStreamType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport type { StreamMetadata, RleEncodedStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport IntWrapper from \"../decoding/intWrapper\";\nimport { encodeBooleanRle, encodeFloatsLE, encodeDoubleLE } from \"./encodingUtils\";\nimport {\n encodeVarintInt32Value,\n encodeVarintInt32,\n encodeVarintInt64,\n encodeZigZagInt32Value,\n encodeZigZagInt64Value,\n} from \"./integerEncodingUtils\";\n\n/**\n * Encodes INT_32 values with NONE encoding (no delta, no RLE)\n */\nexport function encodeInt32NoneColumn(values: Int32Array): Uint8Array {\n const zigzagEncoded = new Int32Array(values.length);\n for (let i = 0; i < values.length; i++) {\n zigzagEncoded[i] = encodeZigZagInt32Value(values[i]);\n }\n const encodedData = encodeVarintInt32(zigzagEncoded);\n const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes INT_32 values with DELTA encoding\n */\nexport function encodeInt32DeltaColumn(values: Int32Array): Uint8Array {\n // Delta encode: store deltas\n const deltaEncoded = new Int32Array(values.length);\n deltaEncoded[0] = values[0];\n for (let i = 1; i < values.length; i++) {\n deltaEncoded[i] = values[i] - values[i - 1];\n }\n\n const zigzagEncoded = new Int32Array(deltaEncoded.length);\n for (let i = 0; i < deltaEncoded.length; i++) {\n zigzagEncoded[i] = encodeZigZagInt32Value(deltaEncoded[i]);\n }\n const encodedData = encodeVarintInt32(zigzagEncoded);\n const streamMetadata = createStreamMetadata(LogicalLevelTechnique.DELTA, LogicalLevelTechnique.NONE, values.length);\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes INT_32 values with RLE encoding\n * @param runs - Array of [runLength, value] pairs\n */\nexport function encodeInt32RleColumn(runs: Array<[number, number]>): Uint8Array {\n const runLengths: number[] = [];\n const values: number[] = [];\n let totalValues = 0;\n\n for (const [runLength, value] of runs) {\n runLengths.push(runLength);\n values.push(encodeZigZagInt32Value(value));\n totalValues += runLength;\n }\n\n const rleValues = [...runLengths, ...values];\n const encodedData = encodeVarintInt32(new Int32Array(rleValues));\n const streamMetadata = createRleMetadata(\n LogicalLevelTechnique.RLE,\n LogicalLevelTechnique.NONE,\n runs.length,\n totalValues,\n );\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes INT_32 values with DELTA+RLE encoding\n * @param runs - Array of [runLength, deltaValue] pairs, where first value is the base\n */\nexport function encodeInt32DeltaRleColumn(runs: Array<[number, number]>): Uint8Array {\n const runLengths: number[] = [];\n const values: number[] = [];\n let totalValues = 0;\n\n for (const [runLength, value] of runs) {\n runLengths.push(runLength);\n values.push(encodeZigZagInt32Value(value));\n totalValues += runLength;\n }\n\n const rleValues = [...runLengths, ...values];\n const encodedData = encodeVarintInt32(new Int32Array(rleValues));\n const streamMetadata = createRleMetadata(\n LogicalLevelTechnique.DELTA,\n LogicalLevelTechnique.RLE,\n runs.length,\n totalValues,\n );\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes nullable INT_32 values\n */\nexport function encodeInt32NullableColumn(values: (number | null)[]): Uint8Array {\n const nonNullValues = values.filter((v): v is number => v !== null);\n const zigzagEncoded = new Int32Array(nonNullValues.map((v) => encodeZigZagInt32Value(v)));\n const encodedData = encodeVarintInt32(zigzagEncoded);\n const dataStreamMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nonNullValues.length,\n );\n const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);\n\n // Nullability stream\n const nullabilityValues = values.map((v) => v !== null);\n const nullabilityEncoded = encodeBooleanRle(nullabilityValues);\n const nullabilityMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nullabilityValues.length,\n );\n const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);\n\n return concatenateBuffers(nullabilityStream, dataStream);\n}\n\n/**\n * Encodes UINT_32 values (no zigzag encoding)\n */\nexport function encodeUint32Column(values: Uint32Array): Uint8Array {\n const encodedData = encodeVarintInt32(new Int32Array(values));\n const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes INT_64 values with NONE encoding\n */\nexport function encodeInt64NoneColumn(values: BigInt64Array): Uint8Array {\n const zigzagEncoded = new BigInt64Array(Array.from(values, (val) => encodeZigZagInt64Value(val)));\n const encodedData = encodeVarintInt64(zigzagEncoded);\n const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes INT_64 values with DELTA encoding\n */\nexport function encodeInt64DeltaColumn(values: BigInt64Array): Uint8Array {\n const deltaEncoded = new BigInt64Array(values.length);\n deltaEncoded[0] = values[0];\n for (let i = 1; i < values.length; i++) {\n deltaEncoded[i] = values[i] - values[i - 1];\n }\n\n const zigzagEncoded = new BigInt64Array(deltaEncoded.length);\n for (let i = 0; i < deltaEncoded.length; i++) {\n zigzagEncoded[i] = encodeZigZagInt64Value(deltaEncoded[i]);\n }\n const encodedData = encodeVarintInt64(zigzagEncoded);\n const streamMetadata = createStreamMetadata(LogicalLevelTechnique.DELTA, LogicalLevelTechnique.NONE, values.length);\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes INT_64 values with RLE encoding\n */\nexport function encodeInt64RleColumn(runs: Array<[number, bigint]>): Uint8Array {\n const runLengths: bigint[] = [];\n const values: bigint[] = [];\n let totalValues = 0;\n\n for (const [runLength, value] of runs) {\n runLengths.push(BigInt(runLength));\n values.push(encodeZigZagInt64Value(value));\n totalValues += runLength;\n }\n\n const rleValues = [...runLengths, ...values];\n const encodedData = encodeVarintInt64(new BigInt64Array(rleValues));\n const streamMetadata = createRleMetadata(\n LogicalLevelTechnique.RLE,\n LogicalLevelTechnique.NONE,\n runs.length,\n totalValues,\n );\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes INT_64 values with DELTA+RLE encoding\n */\nexport function encodeInt64DeltaRleColumn(runs: Array<[number, bigint]>): Uint8Array {\n const runLengths: bigint[] = [];\n const values: bigint[] = [];\n let totalValues = 0;\n\n for (const [runLength, value] of runs) {\n runLengths.push(BigInt(runLength));\n values.push(encodeZigZagInt64Value(value));\n totalValues += runLength;\n }\n\n const rleValues = [...runLengths, ...values];\n const encodedData = encodeVarintInt64(new BigInt64Array(rleValues));\n const streamMetadata = createRleMetadata(\n LogicalLevelTechnique.DELTA,\n LogicalLevelTechnique.RLE,\n runs.length,\n totalValues,\n );\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes nullable INT_64 values\n */\nexport function encodeInt64NullableColumn(values: (bigint | null)[]): Uint8Array {\n const nonNullValues = values.filter((v): v is bigint => v !== null);\n const zigzagEncoded = new BigInt64Array(Array.from(nonNullValues, (val) => encodeZigZagInt64Value(val)));\n const encodedData = encodeVarintInt64(zigzagEncoded);\n const dataStreamMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nonNullValues.length,\n );\n const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);\n\n const nullabilityValues = values.map((v) => v !== null);\n const nullabilityEncoded = encodeBooleanRle(nullabilityValues);\n const nullabilityMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nullabilityValues.length,\n );\n const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);\n\n return concatenateBuffers(nullabilityStream, dataStream);\n}\n\n/**\n * Encodes UINT_64 values (no zigzag encoding)\n */\nexport function encodeUint64Column(values: BigUint64Array): Uint8Array {\n const encodedData = encodeVarintInt64(new BigInt64Array(values));\n const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes nullable UINT_64 values\n */\nexport function encodeUint64NullableColumn(values: (bigint | null)[]): Uint8Array {\n const nonNullValues = values.filter((v): v is bigint => v !== null);\n const encodedData = encodeVarintInt64(new BigInt64Array(nonNullValues));\n const dataStreamMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nonNullValues.length,\n );\n const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);\n\n const nullabilityValues = values.map((v) => v !== null);\n const nullabilityEncoded = encodeBooleanRle(nullabilityValues);\n const nullabilityMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nullabilityValues.length,\n );\n const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);\n\n return concatenateBuffers(nullabilityStream, dataStream);\n}\n\n/**\n * Encodes FLOAT values\n */\nexport function encodeFloatColumn(values: Float32Array): Uint8Array {\n const encodedData = encodeFloatsLE(values);\n const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes nullable FLOAT values\n */\nexport function encodeFloatNullableColumn(values: (number | null)[]): Uint8Array {\n const nonNullValues = values.filter((v): v is number => v !== null);\n const encodedData = encodeFloatsLE(new Float32Array(nonNullValues));\n const dataStreamMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nonNullValues.length,\n );\n const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);\n\n const nullabilityValues = values.map((v) => v !== null);\n const nullabilityEncoded = encodeBooleanRle(nullabilityValues);\n const nullabilityMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nullabilityValues.length,\n );\n const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);\n\n return concatenateBuffers(nullabilityStream, dataStream);\n}\n\n/**\n * Encodes DOUBLE values\n */\nexport function encodeDoubleColumn(values: Float32Array): Uint8Array {\n const encodedData = encodeDoubleLE(values);\n const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes nullable DOUBLE values\n */\nexport function encodeDoubleNullableColumn(values: (number | null)[]): Uint8Array {\n const nonNullValues = values.filter((v): v is number => v !== null);\n const encodedData = encodeDoubleLE(new Float32Array(nonNullValues));\n const dataStreamMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nonNullValues.length,\n );\n const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);\n\n const nullabilityValues = values.map((v) => v !== null);\n const nullabilityEncoded = encodeBooleanRle(nullabilityValues);\n const nullabilityMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nullabilityValues.length,\n );\n const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);\n\n return concatenateBuffers(nullabilityStream, dataStream);\n}\n\n/**\n * Encodes BOOLEAN values\n */\nexport function encodeBooleanColumn(values: boolean[]): Uint8Array {\n const encodedData = encodeBooleanRle(values);\n const streamMetadata = createStreamMetadata(LogicalLevelTechnique.NONE, LogicalLevelTechnique.NONE, values.length);\n return buildEncodedStream(streamMetadata, encodedData);\n}\n\n/**\n * Encodes nullable BOOLEAN values\n */\nexport function encodeBooleanNullableColumn(values: (boolean | null)[]): Uint8Array {\n const nonNullValues = values.filter((v): v is boolean => v !== null);\n const encodedData = encodeBooleanRle(nonNullValues);\n const dataStreamMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nonNullValues.length,\n );\n const dataStream = buildEncodedStream(dataStreamMetadata, encodedData);\n\n const nullabilityValues = values.map((v) => v !== null);\n const nullabilityEncoded = encodeBooleanRle(nullabilityValues);\n const nullabilityMetadata = createStreamMetadata(\n LogicalLevelTechnique.NONE,\n LogicalLevelTechnique.NONE,\n nullabilityValues.length,\n );\n const nullabilityStream = buildEncodedStream(nullabilityMetadata, nullabilityEncoded);\n\n return concatenateBuffers(nullabilityStream, dataStream);\n}\n\nfunction createStreamMetadata(\n logicalTechnique1: LogicalLevelTechnique,\n logicalTechnique2: LogicalLevelTechnique = LogicalLevelTechnique.NONE,\n numValues: number = 3,\n): StreamMetadata {\n return {\n physicalStreamType: PhysicalStreamType.DATA,\n logicalStreamType: new LogicalStreamType(DictionaryType.NONE),\n logicalLevelTechnique1: logicalTechnique1,\n logicalLevelTechnique2: logicalTechnique2,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues,\n byteLength: 10,\n decompressedCount: numValues,\n };\n}\n\nfunction createRleMetadata(\n logicalTechnique1: LogicalLevelTechnique,\n logicalTechnique2: LogicalLevelTechnique,\n runs: number,\n numRleValues: number,\n): RleEncodedStreamMetadata {\n return {\n physicalStreamType: PhysicalStreamType.DATA,\n logicalStreamType: new LogicalStreamType(DictionaryType.NONE),\n logicalLevelTechnique1: logicalTechnique1,\n logicalLevelTechnique2: logicalTechnique2,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues: runs * 2,\n byteLength: 10,\n decompressedCount: numRleValues,\n runs,\n numRleValues,\n };\n}\n\nfunction buildEncodedStream(\n streamMetadata: StreamMetadata | RleEncodedStreamMetadata,\n encodedData: Uint8Array,\n): Uint8Array {\n const updatedMetadata = {\n ...streamMetadata,\n byteLength: encodedData.length,\n };\n\n const metadataBuffer = encodeStreamMetadata(updatedMetadata);\n const result = new Uint8Array(metadataBuffer.length + encodedData.length);\n result.set(metadataBuffer, 0);\n result.set(encodedData, metadataBuffer.length);\n\n return result;\n}\n\nfunction encodeStreamMetadata(metadata: StreamMetadata | RleEncodedStreamMetadata): Uint8Array {\n const buffer = new Uint8Array(100);\n let writeOffset = 0;\n\n // Byte 1: Stream type\n const physicalTypeIndex = Object.values(PhysicalStreamType).indexOf(metadata.physicalStreamType);\n const lowerNibble = 0; // For DATA stream with NONE dictionary type\n buffer[writeOffset++] = (physicalTypeIndex << 4) | lowerNibble;\n\n // Byte 2: Encoding techniques\n const llt1Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique1);\n const llt2Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique2);\n const pltIndex = Object.values(PhysicalLevelTechnique).indexOf(metadata.physicalLevelTechnique);\n buffer[writeOffset++] = (llt1Index << 5) | (llt2Index << 2) | pltIndex;\n\n // Variable-length fields\n const offset = new IntWrapper(writeOffset);\n encodeVarintInt32Value(metadata.numValues, buffer, offset);\n encodeVarintInt32Value(metadata.byteLength, buffer, offset);\n\n // RLE-specific fields\n if (isRleMetadata(metadata)) {\n encodeVarintInt32Value(metadata.runs, buffer, offset);\n encodeVarintInt32Value(metadata.numRleValues, buffer, offset);\n }\n\n return buffer.slice(0, offset.get());\n}\n\nfunction isRleMetadata(metadata: StreamMetadata | RleEncodedStreamMetadata): metadata is RleEncodedStreamMetadata {\n return \"runs\" in metadata && \"numRleValues\" in metadata;\n}\n\nfunction concatenateBuffers(...buffers: Uint8Array[]): Uint8Array {\n const totalLength = buffers.reduce((sum, buf) => sum + buf.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n\n for (const buffer of buffers) {\n result.set(buffer, offset);\n offset += buffer.length;\n }\n\n return result;\n}\n"]}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Encodes plain strings into a complete stream with PRESENT (if needed), LENGTH, and DATA streams.
3
+ * @param strings - Array of strings (can include null values)
4
+ * @returns Encoded Uint8Array that can be passed to decodeString
5
+ */
6
+ export declare function encodePlainStrings(strings: (string | null)[]): Uint8Array;
7
+ /**
8
+ * Encodes dictionary-compressed strings into a complete stream.
9
+ * @param strings - Array of strings (can include null values)
10
+ * @returns Encoded Uint8Array that can be passed to decodeString
11
+ */
12
+ export declare function encodeDictionaryStrings(strings: (string | null)[]): Uint8Array;
@@ -0,0 +1,182 @@
1
+ import { PhysicalStreamType } from "../metadata/tile/physicalStreamType";
2
+ import { LogicalStreamType } from "../metadata/tile/logicalStreamType";
3
+ import { DictionaryType } from "../metadata/tile/dictionaryType";
4
+ import { LengthType } from "../metadata/tile/lengthType";
5
+ import { OffsetType } from "../metadata/tile/offsetType";
6
+ import { PhysicalLevelTechnique } from "../metadata/tile/physicalLevelTechnique";
7
+ import { LogicalLevelTechnique } from "../metadata/tile/logicalLevelTechnique";
8
+ import IntWrapper from "../decoding/intWrapper";
9
+ import { encodeBooleanRle, encodeStrings, createStringLengths, concatenateBuffers } from "./encodingUtils";
10
+ import { encodeVarintInt32Value, encodeVarintInt32 } from "./integerEncodingUtils";
11
+ /**
12
+ * Encodes plain strings into a complete stream with PRESENT (if needed), LENGTH, and DATA streams.
13
+ * @param strings - Array of strings (can include null values)
14
+ * @returns Encoded Uint8Array that can be passed to decodeString
15
+ */
16
+ export function encodePlainStrings(strings) {
17
+ const hasNull = strings.some((s) => s === null);
18
+ const nonNullStrings = strings.filter((s) => s !== null);
19
+ const stringBytes = encodeStrings(nonNullStrings);
20
+ const streams = [];
21
+ // Add PRESENT stream if nulls exist
22
+ if (hasNull) {
23
+ const nullabilityValues = strings.map((s) => s !== null);
24
+ streams.push(createStream(PhysicalStreamType.PRESENT, encodeBooleanRle(nullabilityValues), {
25
+ technique: PhysicalLevelTechnique.VARINT,
26
+ count: nullabilityValues.length,
27
+ }));
28
+ }
29
+ // Add LENGTH stream
30
+ const lengths = createStringLengths(nonNullStrings);
31
+ streams.push(createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(new Int32Array(lengths)), {
32
+ logical: new LogicalStreamType(undefined, undefined, LengthType.VAR_BINARY),
33
+ technique: PhysicalLevelTechnique.VARINT,
34
+ count: lengths.length,
35
+ }));
36
+ // Add DATA stream
37
+ streams.push(createStream(PhysicalStreamType.DATA, stringBytes, {
38
+ logical: new LogicalStreamType(DictionaryType.NONE),
39
+ }));
40
+ return concatenateBuffers(...streams);
41
+ }
42
+ /**
43
+ * Encodes dictionary-compressed strings into a complete stream.
44
+ * @param strings - Array of strings (can include null values)
45
+ * @returns Encoded Uint8Array that can be passed to decodeString
46
+ */
47
+ export function encodeDictionaryStrings(strings) {
48
+ const hasNull = strings.some((s) => s === null);
49
+ const nonNullStrings = strings.filter((s) => s !== null);
50
+ // Create dictionary of unique strings
51
+ const uniqueStrings = Array.from(new Set(nonNullStrings));
52
+ const stringMap = new Map(uniqueStrings.map((s, i) => [s, i]));
53
+ const offsets = nonNullStrings.map((s) => {
54
+ const offset = stringMap.get(s);
55
+ if (offset === undefined) {
56
+ throw new Error(`String not found in dictionary: ${s}`);
57
+ }
58
+ return offset;
59
+ });
60
+ const stringBytes = encodeStrings(uniqueStrings);
61
+ const lengths = createStringLengths(uniqueStrings);
62
+ const streams = [];
63
+ // Add PRESENT stream if nulls exist
64
+ if (hasNull) {
65
+ const nullabilityValues = strings.map((s) => s !== null);
66
+ streams.push(createStream(PhysicalStreamType.PRESENT, encodeBooleanRle(nullabilityValues), {
67
+ technique: PhysicalLevelTechnique.VARINT,
68
+ count: nullabilityValues.length,
69
+ }));
70
+ }
71
+ // Add OFFSET stream
72
+ streams.push(createStream(PhysicalStreamType.OFFSET, encodeVarintInt32(new Int32Array(offsets)), {
73
+ logical: new LogicalStreamType(undefined, OffsetType.STRING),
74
+ technique: PhysicalLevelTechnique.VARINT,
75
+ count: offsets.length,
76
+ }));
77
+ // Add LENGTH stream (for dictionary)
78
+ streams.push(createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(new Int32Array(lengths)), {
79
+ logical: new LogicalStreamType(undefined, undefined, LengthType.DICTIONARY),
80
+ technique: PhysicalLevelTechnique.VARINT,
81
+ count: lengths.length,
82
+ }));
83
+ // Add DATA stream
84
+ streams.push(createStream(PhysicalStreamType.DATA, stringBytes, {
85
+ logical: new LogicalStreamType(DictionaryType.SINGLE),
86
+ }));
87
+ return concatenateBuffers(...streams);
88
+ }
89
+ function createStream(physicalType, data, options = {}) {
90
+ const count = options.count ?? 0;
91
+ return buildEncodedStream({
92
+ physicalStreamType: physicalType,
93
+ logicalStreamType: options.logical ?? new LogicalStreamType(),
94
+ logicalLevelTechnique1: LogicalLevelTechnique.NONE,
95
+ logicalLevelTechnique2: LogicalLevelTechnique.NONE,
96
+ physicalLevelTechnique: options.technique ?? PhysicalLevelTechnique.NONE,
97
+ numValues: count,
98
+ byteLength: data.length,
99
+ decompressedCount: count,
100
+ }, data);
101
+ }
102
+ function buildEncodedStream(streamMetadata, encodedData) {
103
+ const updatedMetadata = {
104
+ ...streamMetadata,
105
+ byteLength: encodedData.length,
106
+ };
107
+ const metadataBuffer = encodeStreamMetadata(updatedMetadata);
108
+ const result = new Uint8Array(metadataBuffer.length + encodedData.length);
109
+ result.set(metadataBuffer, 0);
110
+ result.set(encodedData, metadataBuffer.length);
111
+ return result;
112
+ }
113
+ function encodeStreamMetadata(metadata) {
114
+ const buffer = new Uint8Array(100);
115
+ let writeOffset = 0;
116
+ // Byte 1: Stream type
117
+ const physicalTypeIndex = Object.values(PhysicalStreamType).indexOf(metadata.physicalStreamType);
118
+ const lowerNibble = getLogicalSubtypeValue(metadata);
119
+ buffer[writeOffset++] = (physicalTypeIndex << 4) | lowerNibble;
120
+ // Byte 2: Encoding techniques
121
+ const llt1Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique1);
122
+ const llt2Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique2);
123
+ const pltIndex = Object.values(PhysicalLevelTechnique).indexOf(metadata.physicalLevelTechnique);
124
+ buffer[writeOffset++] = (llt1Index << 5) | (llt2Index << 2) | pltIndex;
125
+ // Variable-length fields
126
+ const offset = new IntWrapper(writeOffset);
127
+ encodeVarintInt32Value(metadata.numValues, buffer, offset);
128
+ encodeVarintInt32Value(metadata.byteLength, buffer, offset);
129
+ return buffer.slice(0, offset.get());
130
+ }
131
+ function getLogicalSubtypeValue(metadata) {
132
+ const { physicalStreamType, logicalStreamType } = metadata;
133
+ switch (physicalStreamType) {
134
+ case PhysicalStreamType.DATA:
135
+ return logicalStreamType.dictionaryType !== undefined
136
+ ? Object.values(DictionaryType).indexOf(logicalStreamType.dictionaryType)
137
+ : 0;
138
+ case PhysicalStreamType.OFFSET:
139
+ return logicalStreamType.offsetType !== undefined
140
+ ? Object.values(OffsetType).indexOf(logicalStreamType.offsetType)
141
+ : 0;
142
+ case PhysicalStreamType.LENGTH:
143
+ return logicalStreamType.lengthType !== undefined
144
+ ? Object.values(LengthType).indexOf(logicalStreamType.lengthType)
145
+ : 0;
146
+ default:
147
+ return 0;
148
+ }
149
+ }
150
+ function encodeNumStreams(numStreams) {
151
+ const buffer = new Uint8Array(5);
152
+ const offset = new IntWrapper(0);
153
+ encodeVarintInt32Value(numStreams, buffer, offset);
154
+ return buffer.slice(0, offset.get());
155
+ }
156
+ function createPresentStream(presentValues) {
157
+ const metadata = {
158
+ physicalStreamType: PhysicalStreamType.PRESENT,
159
+ logicalStreamType: new LogicalStreamType(DictionaryType.NONE),
160
+ logicalLevelTechnique1: LogicalLevelTechnique.NONE,
161
+ logicalLevelTechnique2: LogicalLevelTechnique.NONE,
162
+ physicalLevelTechnique: PhysicalLevelTechnique.VARINT,
163
+ numValues: presentValues.length,
164
+ byteLength: 0,
165
+ decompressedCount: presentValues.length,
166
+ };
167
+ return buildEncodedStream(metadata, encodeBooleanRle(presentValues));
168
+ }
169
+ function createOffsetStream(offsetIndices) {
170
+ const metadata = {
171
+ physicalStreamType: PhysicalStreamType.OFFSET,
172
+ logicalStreamType: new LogicalStreamType(undefined, OffsetType.STRING),
173
+ logicalLevelTechnique1: LogicalLevelTechnique.NONE,
174
+ logicalLevelTechnique2: LogicalLevelTechnique.NONE,
175
+ physicalLevelTechnique: PhysicalLevelTechnique.VARINT,
176
+ numValues: offsetIndices.length,
177
+ byteLength: 0,
178
+ decompressedCount: offsetIndices.length,
179
+ };
180
+ return buildEncodedStream(metadata, encodeVarintInt32(new Int32Array(offsetIndices)));
181
+ }
182
+ //# sourceMappingURL=stringEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringEncoder.js","sourceRoot":"","sources":["../../src/encoding/stringEncoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { LogicalStreamType } from \"../metadata/tile/logicalStreamType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { OffsetType } from \"../metadata/tile/offsetType\";\nimport { PhysicalLevelTechnique } from \"../metadata/tile/physicalLevelTechnique\";\nimport { LogicalLevelTechnique } from \"../metadata/tile/logicalLevelTechnique\";\nimport type { StreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport IntWrapper from \"../decoding/intWrapper\";\nimport { encodeBooleanRle, encodeStrings, createStringLengths, concatenateBuffers } from \"./encodingUtils\";\nimport { encodeVarintInt32Value, encodeVarintInt32 } from \"./integerEncodingUtils\";\n\n/**\n * Encodes plain strings into a complete stream with PRESENT (if needed), LENGTH, and DATA streams.\n * @param strings - Array of strings (can include null values)\n * @returns Encoded Uint8Array that can be passed to decodeString\n */\nexport function encodePlainStrings(strings: (string | null)[]): Uint8Array {\n const hasNull = strings.some((s) => s === null);\n const nonNullStrings = strings.filter((s): s is string => s !== null);\n const stringBytes = encodeStrings(nonNullStrings);\n\n const streams: Uint8Array[] = [];\n\n // Add PRESENT stream if nulls exist\n if (hasNull) {\n const nullabilityValues = strings.map((s) => s !== null);\n streams.push(\n createStream(PhysicalStreamType.PRESENT, encodeBooleanRle(nullabilityValues), {\n technique: PhysicalLevelTechnique.VARINT,\n count: nullabilityValues.length,\n }),\n );\n }\n\n // Add LENGTH stream\n const lengths = createStringLengths(nonNullStrings);\n streams.push(\n createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(new Int32Array(lengths)), {\n logical: new LogicalStreamType(undefined, undefined, LengthType.VAR_BINARY),\n technique: PhysicalLevelTechnique.VARINT,\n count: lengths.length,\n }),\n );\n\n // Add DATA stream\n streams.push(\n createStream(PhysicalStreamType.DATA, stringBytes, {\n logical: new LogicalStreamType(DictionaryType.NONE),\n }),\n );\n\n return concatenateBuffers(...streams);\n}\n\n/**\n * Encodes dictionary-compressed strings into a complete stream.\n * @param strings - Array of strings (can include null values)\n * @returns Encoded Uint8Array that can be passed to decodeString\n */\nexport function encodeDictionaryStrings(strings: (string | null)[]): Uint8Array {\n const hasNull = strings.some((s) => s === null);\n const nonNullStrings = strings.filter((s): s is string => s !== null);\n\n // Create dictionary of unique strings\n const uniqueStrings = Array.from(new Set(nonNullStrings));\n const stringMap = new Map(uniqueStrings.map((s, i) => [s, i]));\n const offsets = nonNullStrings.map((s) => {\n const offset = stringMap.get(s);\n if (offset === undefined) {\n throw new Error(`String not found in dictionary: ${s}`);\n }\n return offset;\n });\n\n const stringBytes = encodeStrings(uniqueStrings);\n const lengths = createStringLengths(uniqueStrings);\n\n const streams: Uint8Array[] = [];\n\n // Add PRESENT stream if nulls exist\n if (hasNull) {\n const nullabilityValues = strings.map((s) => s !== null);\n streams.push(\n createStream(PhysicalStreamType.PRESENT, encodeBooleanRle(nullabilityValues), {\n technique: PhysicalLevelTechnique.VARINT,\n count: nullabilityValues.length,\n }),\n );\n }\n\n // Add OFFSET stream\n streams.push(\n createStream(PhysicalStreamType.OFFSET, encodeVarintInt32(new Int32Array(offsets)), {\n logical: new LogicalStreamType(undefined, OffsetType.STRING),\n technique: PhysicalLevelTechnique.VARINT,\n count: offsets.length,\n }),\n );\n\n // Add LENGTH stream (for dictionary)\n streams.push(\n createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(new Int32Array(lengths)), {\n logical: new LogicalStreamType(undefined, undefined, LengthType.DICTIONARY),\n technique: PhysicalLevelTechnique.VARINT,\n count: lengths.length,\n }),\n );\n\n // Add DATA stream\n streams.push(\n createStream(PhysicalStreamType.DATA, stringBytes, {\n logical: new LogicalStreamType(DictionaryType.SINGLE),\n }),\n );\n\n return concatenateBuffers(...streams);\n}\n\nfunction createStream(\n physicalType: PhysicalStreamType,\n data: Uint8Array,\n options: {\n logical?: LogicalStreamType;\n technique?: PhysicalLevelTechnique;\n count?: number;\n } = {},\n): Uint8Array {\n const count = options.count ?? 0;\n return buildEncodedStream(\n {\n physicalStreamType: physicalType,\n logicalStreamType: options.logical ?? new LogicalStreamType(),\n logicalLevelTechnique1: LogicalLevelTechnique.NONE,\n logicalLevelTechnique2: LogicalLevelTechnique.NONE,\n physicalLevelTechnique: options.technique ?? PhysicalLevelTechnique.NONE,\n numValues: count,\n byteLength: data.length,\n decompressedCount: count,\n },\n data,\n );\n}\n\nfunction buildEncodedStream(streamMetadata: StreamMetadata, encodedData: Uint8Array): Uint8Array {\n const updatedMetadata = {\n ...streamMetadata,\n byteLength: encodedData.length,\n };\n\n const metadataBuffer = encodeStreamMetadata(updatedMetadata);\n const result = new Uint8Array(metadataBuffer.length + encodedData.length);\n result.set(metadataBuffer, 0);\n result.set(encodedData, metadataBuffer.length);\n\n return result;\n}\n\nfunction encodeStreamMetadata(metadata: StreamMetadata): Uint8Array {\n const buffer = new Uint8Array(100);\n let writeOffset = 0;\n\n // Byte 1: Stream type\n const physicalTypeIndex = Object.values(PhysicalStreamType).indexOf(metadata.physicalStreamType);\n const lowerNibble = getLogicalSubtypeValue(metadata);\n buffer[writeOffset++] = (physicalTypeIndex << 4) | lowerNibble;\n\n // Byte 2: Encoding techniques\n const llt1Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique1);\n const llt2Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique2);\n const pltIndex = Object.values(PhysicalLevelTechnique).indexOf(metadata.physicalLevelTechnique);\n buffer[writeOffset++] = (llt1Index << 5) | (llt2Index << 2) | pltIndex;\n\n // Variable-length fields\n const offset = new IntWrapper(writeOffset);\n encodeVarintInt32Value(metadata.numValues, buffer, offset);\n encodeVarintInt32Value(metadata.byteLength, buffer, offset);\n\n return buffer.slice(0, offset.get());\n}\n\nfunction getLogicalSubtypeValue(metadata: StreamMetadata): number {\n const { physicalStreamType, logicalStreamType } = metadata;\n\n switch (physicalStreamType) {\n case PhysicalStreamType.DATA:\n return logicalStreamType.dictionaryType !== undefined\n ? Object.values(DictionaryType).indexOf(logicalStreamType.dictionaryType)\n : 0;\n case PhysicalStreamType.OFFSET:\n return logicalStreamType.offsetType !== undefined\n ? Object.values(OffsetType).indexOf(logicalStreamType.offsetType)\n : 0;\n case PhysicalStreamType.LENGTH:\n return logicalStreamType.lengthType !== undefined\n ? Object.values(LengthType).indexOf(logicalStreamType.lengthType)\n : 0;\n default:\n return 0;\n }\n}\n\nfunction encodeNumStreams(numStreams: number): Uint8Array {\n const buffer = new Uint8Array(5);\n const offset = new IntWrapper(0);\n encodeVarintInt32Value(numStreams, buffer, offset);\n return buffer.slice(0, offset.get());\n}\n\nfunction createPresentStream(presentValues: boolean[]): Uint8Array {\n const metadata: StreamMetadata = {\n physicalStreamType: PhysicalStreamType.PRESENT,\n logicalStreamType: new LogicalStreamType(DictionaryType.NONE),\n logicalLevelTechnique1: LogicalLevelTechnique.NONE,\n logicalLevelTechnique2: LogicalLevelTechnique.NONE,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues: presentValues.length,\n byteLength: 0,\n decompressedCount: presentValues.length,\n };\n return buildEncodedStream(metadata, encodeBooleanRle(presentValues));\n}\n\nfunction createOffsetStream(offsetIndices: number[]): Uint8Array {\n const metadata: StreamMetadata = {\n physicalStreamType: PhysicalStreamType.OFFSET,\n logicalStreamType: new LogicalStreamType(undefined, OffsetType.STRING),\n logicalLevelTechnique1: LogicalLevelTechnique.NONE,\n logicalLevelTechnique2: LogicalLevelTechnique.NONE,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues: offsetIndices.length,\n byteLength: 0,\n decompressedCount: offsetIndices.length,\n };\n return buildEncodedStream(metadata, encodeVarintInt32(new Int32Array(offsetIndices)));\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare function encodeZOrderCurve(x: number, y: number, numBits: number, coordinateShift: number): number;