@maplibre/mlt 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/LICENSE.txt +231 -0
  2. package/dist/decoding/decodingUtils.js +2 -2
  3. package/dist/decoding/decodingUtils.js.map +1 -1
  4. package/dist/decoding/decodingUtils.spec.js +2 -2
  5. package/dist/decoding/decodingUtils.spec.js.map +1 -1
  6. package/dist/decoding/fsstDecoder.js.map +1 -1
  7. package/dist/decoding/fsstDecoder.spec.js +14 -10
  8. package/dist/decoding/fsstDecoder.spec.js.map +1 -1
  9. package/dist/decoding/geometryDecoder.js +40 -200
  10. package/dist/decoding/geometryDecoder.js.map +1 -1
  11. package/dist/decoding/geometryDecoder.spec.js.map +1 -1
  12. package/dist/decoding/geometryScaling.js.map +1 -1
  13. package/dist/decoding/intWrapper.js.map +1 -1
  14. package/dist/decoding/integerDecodingUtils.d.ts +1 -1
  15. package/dist/decoding/integerDecodingUtils.js.map +1 -1
  16. package/dist/decoding/integerDecodingUtils.spec.js.map +1 -1
  17. package/dist/decoding/integerStreamDecoder.d.ts +13 -22
  18. package/dist/decoding/integerStreamDecoder.js +234 -237
  19. package/dist/decoding/integerStreamDecoder.js.map +1 -1
  20. package/dist/decoding/integerStreamDecoder.spec.js +77 -39
  21. package/dist/decoding/integerStreamDecoder.spec.js.map +1 -1
  22. package/dist/decoding/propertyDecoder.js +21 -21
  23. package/dist/decoding/propertyDecoder.js.map +1 -1
  24. package/dist/decoding/propertyDecoder.spec.js +162 -199
  25. package/dist/decoding/propertyDecoder.spec.js.map +1 -1
  26. package/dist/decoding/stringDecoder.d.ts +2 -10
  27. package/dist/decoding/stringDecoder.js +150 -157
  28. package/dist/decoding/stringDecoder.js.map +1 -1
  29. package/dist/decoding/stringDecoder.spec.js +59 -60
  30. package/dist/decoding/stringDecoder.spec.js.map +1 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/metadata/tile/dictionaryType.js.map +1 -1
  33. package/dist/metadata/tile/lengthType.js.map +1 -1
  34. package/dist/metadata/tile/logicalLevelTechnique.js.map +1 -1
  35. package/dist/metadata/tile/logicalStreamType.js.map +1 -1
  36. package/dist/metadata/tile/offsetType.js.map +1 -1
  37. package/dist/metadata/tile/physicalLevelTechnique.js.map +1 -1
  38. package/dist/metadata/tile/physicalStreamType.js.map +1 -1
  39. package/dist/metadata/tile/scalarType.js.map +1 -1
  40. package/dist/metadata/tile/streamMetadataDecoder.d.ts +28 -4
  41. package/dist/metadata/tile/streamMetadataDecoder.js +81 -15
  42. package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
  43. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js +4 -4
  44. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
  45. package/dist/metadata/tileset/tilesetMetadata.js.map +1 -1
  46. package/dist/metadata/tileset/typeMap.d.ts +21 -29
  47. package/dist/metadata/tileset/typeMap.js +167 -169
  48. package/dist/metadata/tileset/typeMap.js.map +1 -1
  49. package/dist/mltDecoder.js +20 -18
  50. package/dist/mltDecoder.js.map +1 -1
  51. package/dist/mltDecoder.spec.js.map +1 -1
  52. package/dist/mltMetadata.js.map +1 -1
  53. package/dist/vector/constant/intConstVector.js.map +1 -1
  54. package/dist/vector/constant/longConstVector.js.map +1 -1
  55. package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
  56. package/dist/vector/featureTable.js.map +1 -1
  57. package/dist/vector/filter/flatSelectionVector.d.ts +27 -0
  58. package/dist/vector/filter/flatSelectionVector.js +54 -0
  59. package/dist/vector/filter/flatSelectionVector.js.map +1 -0
  60. package/dist/vector/filter/flatSelectionVector.spec.d.ts +1 -0
  61. package/dist/vector/filter/flatSelectionVector.spec.js +51 -0
  62. package/dist/vector/filter/flatSelectionVector.spec.js.map +1 -0
  63. package/dist/vector/filter/selectionVector.d.ts +8 -0
  64. package/dist/vector/filter/selectionVector.js +2 -0
  65. package/dist/vector/filter/selectionVector.js.map +1 -0
  66. package/dist/vector/filter/selectionVectorUtil.spec.d.ts +1 -0
  67. package/dist/vector/filter/selectionVectorUtil.spec.js +154 -0
  68. package/dist/vector/filter/selectionVectorUtil.spec.js.map +1 -0
  69. package/dist/vector/filter/selectionVectorUtils.d.ts +16 -0
  70. package/dist/vector/filter/selectionVectorUtils.js +37 -0
  71. package/dist/vector/filter/selectionVectorUtils.js.map +1 -0
  72. package/dist/vector/filter/sequenceSelectionVector.d.ts +26 -0
  73. package/dist/vector/filter/sequenceSelectionVector.js +67 -0
  74. package/dist/vector/filter/sequenceSelectionVector.js.map +1 -0
  75. package/dist/vector/filter/sequenceSelectionVector.spec.d.ts +1 -0
  76. package/dist/vector/filter/sequenceSelectionVector.spec.js +115 -0
  77. package/dist/vector/filter/sequenceSelectionVector.spec.js.map +1 -0
  78. package/dist/vector/fixedSizeVector.js.map +1 -1
  79. package/dist/vector/flat/bitVector.js.map +1 -1
  80. package/dist/vector/flat/booleanFlatVector.js.map +1 -1
  81. package/dist/vector/flat/doubleFlatVector.js.map +1 -1
  82. package/dist/vector/flat/floatFlatVector.js.map +1 -1
  83. package/dist/vector/flat/floatFlatVector.spec.js.map +1 -1
  84. package/dist/vector/flat/intFlatVector.js.map +1 -1
  85. package/dist/vector/flat/intFlatVector.spec.js.map +1 -1
  86. package/dist/vector/flat/longFlatVector.js.map +1 -1
  87. package/dist/vector/flat/longFlatVector.spec.js.map +1 -1
  88. package/dist/vector/flat/stringFlatVector.js.map +1 -1
  89. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
  90. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js.map +1 -1
  91. package/dist/vector/geometry/constGeometryVector.d.ts +2 -2
  92. package/dist/vector/geometry/constGeometryVector.js +6 -6
  93. package/dist/vector/geometry/constGeometryVector.js.map +1 -1
  94. package/dist/vector/geometry/constGpuVector.d.ts +1 -1
  95. package/dist/vector/geometry/constGpuVector.js +3 -24
  96. package/dist/vector/geometry/constGpuVector.js.map +1 -1
  97. package/dist/vector/geometry/flatGeometryVector.d.ts +2 -2
  98. package/dist/vector/geometry/flatGeometryVector.js +7 -7
  99. package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
  100. package/dist/vector/geometry/flatGpuVector.d.ts +1 -1
  101. package/dist/vector/geometry/flatGpuVector.js +3 -22
  102. package/dist/vector/geometry/flatGpuVector.js.map +1 -1
  103. package/dist/vector/geometry/geometryType.js.map +1 -1
  104. package/dist/vector/geometry/geometryVector.js +2 -2
  105. package/dist/vector/geometry/geometryVector.js.map +1 -1
  106. package/dist/vector/geometry/geometryVectorConverter.js +4 -4
  107. package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
  108. package/dist/vector/geometry/gpuVector.js.map +1 -1
  109. package/dist/vector/geometry/topologyVector.js.map +1 -1
  110. package/dist/vector/geometry/vertexBufferType.js.map +1 -1
  111. package/dist/vector/geometry/zOrderCurve.d.ts +4 -17
  112. package/dist/vector/geometry/zOrderCurve.js +10 -35
  113. package/dist/vector/geometry/zOrderCurve.js.map +1 -1
  114. package/dist/vector/geometry/zOrderCurve.spec.js +15 -10
  115. package/dist/vector/geometry/zOrderCurve.spec.js.map +1 -1
  116. package/dist/vector/intVector.js.map +1 -1
  117. package/dist/vector/sequence/intSequenceVector.js.map +1 -1
  118. package/dist/vector/sequence/longSequenceVector.js.map +1 -1
  119. package/dist/vector/sequence/longSequenceVektor.spec.js.map +1 -1
  120. package/dist/vector/sequence/sequenceVector.js.map +1 -1
  121. package/dist/vector/variableSizeVector.js.map +1 -1
  122. package/dist/vector/vector.js.map +1 -1
  123. package/dist/vector/vectorType.js.map +1 -1
  124. package/package.json +5 -5
  125. package/dist/metadata/tile/mortonEncodedStreamMetadata.d.ts +0 -15
  126. package/dist/metadata/tile/mortonEncodedStreamMetadata.js +0 -27
  127. package/dist/metadata/tile/mortonEncodedStreamMetadata.js.map +0 -1
  128. package/dist/metadata/tile/rleEncodedStreamMetadata.d.ts +0 -24
  129. package/dist/metadata/tile/rleEncodedStreamMetadata.js +0 -38
  130. package/dist/metadata/tile/rleEncodedStreamMetadata.js.map +0 -1
  131. package/dist/metadata/tile/streamMetadata.d.ts +0 -29
  132. package/dist/metadata/tile/streamMetadata.js +0 -82
  133. package/dist/metadata/tile/streamMetadata.js.map +0 -1
  134. package/dist/vector/geometry/spaceFillingCurve.d.ts +0 -22
  135. package/dist/vector/geometry/spaceFillingCurve.js +0 -31
  136. package/dist/vector/geometry/spaceFillingCurve.js.map +0 -1
@@ -1,6 +1,6 @@
1
- import { afterEach, describe, expect, it, vi } from 'vitest';
2
- import { StreamMetadataDecoder } from "../metadata/tile/streamMetadataDecoder";
3
- import IntegerStreamDecoder from "./integerStreamDecoder";
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
+ import * as StreamMetadataDecoder from "../metadata/tile/streamMetadataDecoder";
3
+ import * as IntegerStreamDecoder from "./integerStreamDecoder";
4
4
  import { decodePropertyColumn } from "./propertyDecoder";
5
5
  import { ScalarType } from "../metadata/tile/scalarType";
6
6
  import IntWrapper from "./intWrapper";
@@ -11,8 +11,8 @@ import { LongSequenceVector } from "../vector/sequence/longSequenceVector";
11
11
  import { IntConstVector } from "../vector/constant/intConstVector";
12
12
  import { LongConstVector } from "../vector/constant/longConstVector";
13
13
  import { VectorType } from "../vector/vectorType";
14
- import { StringDecoder } from "./stringDecoder";
15
- import * as decodingUtils from './decodingUtils';
14
+ import * as StringDecoder from "./stringDecoder";
15
+ import * as decodingUtils from "./decodingUtils";
16
16
  import { BooleanFlatVector } from "../vector/flat/booleanFlatVector";
17
17
  import { FloatFlatVector } from "../vector/flat/floatFlatVector";
18
18
  import { DoubleFlatVector } from "../vector/flat/doubleFlatVector";
@@ -21,22 +21,22 @@ const TEST_DATA = {
21
21
  BYTE_LENGTH: 12,
22
22
  NUM_VALUES: 3,
23
23
  NULLABILITY_BYTE_LENGTH: 1,
24
- BUFFER_SIZE: 100
24
+ BUFFER_SIZE: 100,
25
25
  };
26
26
  // Helper: Create column with specific configuration
27
27
  function createColumn(scalarType, nullable = false) {
28
28
  return {
29
- name: 'age',
29
+ name: "age",
30
30
  nullable,
31
31
  columnScope: null,
32
- type: 'scalarType',
32
+ type: "scalarType",
33
33
  scalarType: {
34
34
  longID: false,
35
35
  physicalType: scalarType,
36
36
  logicalType: null,
37
- type: 'physicalType'
37
+ type: "physicalType",
38
38
  },
39
- complexType: null
39
+ complexType: null,
40
40
  };
41
41
  }
42
42
  // Helper: Setup stream metadata mock
@@ -62,81 +62,65 @@ function mockRleStreamMetadata(byteLength = TEST_DATA.BYTE_LENGTH, numValues = T
62
62
  }
63
63
  // Helper: Mock integer decoders (INT_32 or INT_64)
64
64
  function mockIntegerDecoder(scalarType) {
65
- vi.spyOn(IntegerStreamDecoder, 'getVectorType')
66
- .mockReturnValue(VectorType.FLAT);
65
+ vi.spyOn(IntegerStreamDecoder, "getVectorType").mockReturnValue(VectorType.FLAT);
67
66
  if (scalarType === ScalarType.INT_64 || scalarType === ScalarType.UINT_64) {
68
- vi.spyOn(IntegerStreamDecoder, 'decodeLongStream')
69
- .mockReturnValue(new BigInt64Array([100n, 200n, 300n]));
67
+ vi.spyOn(IntegerStreamDecoder, "decodeLongStream").mockReturnValue(new BigInt64Array([100n, 200n, 300n]));
70
68
  }
71
69
  else {
72
- vi.spyOn(IntegerStreamDecoder, 'decodeIntStream')
73
- .mockReturnValue(new Int32Array([100, 200, 300]));
70
+ vi.spyOn(IntegerStreamDecoder, "decodeIntStream").mockReturnValue(new Int32Array([100, 200, 300]));
74
71
  }
75
72
  }
76
73
  // Helper: Mock integer sequence decoders
77
74
  function mockIntegerSequenceDecoder(scalarType) {
78
- vi.spyOn(IntegerStreamDecoder, 'getVectorType')
79
- .mockReturnValue(VectorType.SEQUENCE);
75
+ vi.spyOn(IntegerStreamDecoder, "getVectorType").mockReturnValue(VectorType.SEQUENCE);
80
76
  if (scalarType === ScalarType.INT_64 || scalarType === ScalarType.UINT_64) {
81
- vi.spyOn(IntegerStreamDecoder, 'decodeSequenceLongStream')
82
- .mockReturnValue([10n, 20n]);
77
+ vi.spyOn(IntegerStreamDecoder, "decodeSequenceLongStream").mockReturnValue([10n, 20n]);
83
78
  }
84
79
  else {
85
- vi.spyOn(IntegerStreamDecoder, 'decodeSequenceIntStream')
86
- .mockReturnValue([10, 20]);
80
+ vi.spyOn(IntegerStreamDecoder, "decodeSequenceIntStream").mockReturnValue([10, 20]);
87
81
  }
88
82
  }
89
83
  // Helper: Mock integer const decoders
90
84
  function mockIntegerConstDecoder(scalarType) {
91
- vi.spyOn(IntegerStreamDecoder, 'getVectorType')
92
- .mockReturnValue(VectorType.CONST);
85
+ vi.spyOn(IntegerStreamDecoder, "getVectorType").mockReturnValue(VectorType.CONST);
93
86
  if (scalarType === ScalarType.INT_64 || scalarType === ScalarType.UINT_64) {
94
- vi.spyOn(IntegerStreamDecoder, 'decodeConstLongStream')
95
- .mockReturnValue(42n);
87
+ vi.spyOn(IntegerStreamDecoder, "decodeConstLongStream").mockReturnValue(42n);
96
88
  }
97
89
  else {
98
- vi.spyOn(IntegerStreamDecoder, 'decodeConstIntStream')
99
- .mockReturnValue(42);
90
+ vi.spyOn(IntegerStreamDecoder, "decodeConstIntStream").mockReturnValue(42);
100
91
  }
101
92
  }
102
93
  // Helper: Mock float decoders (FLOAT or DOUBLE)
103
94
  function mockFloatDecoder(scalarType) {
104
95
  if (scalarType === ScalarType.FLOAT) {
105
- vi.spyOn(decodingUtils, 'decodeFloatsLE')
106
- .mockReturnValue(new Float32Array([100.5, 200.5, 300.5]));
96
+ vi.spyOn(decodingUtils, "decodeFloatsLE").mockReturnValue(new Float32Array([100.5, 200.5, 300.5]));
107
97
  }
108
98
  else if (scalarType === ScalarType.DOUBLE) {
109
- vi.spyOn(decodingUtils, 'decodeDoublesLE')
110
- .mockReturnValue(new Float64Array([100.5, 200.5, 300.5]));
99
+ vi.spyOn(decodingUtils, "decodeDoublesLE").mockReturnValue(new Float64Array([100.5, 200.5, 300.5]));
111
100
  }
112
101
  }
113
102
  // Helper: Mock nullable float decoders
114
103
  function mockNullableFloatDecoder(scalarType) {
115
104
  if (scalarType === ScalarType.FLOAT) {
116
- vi.spyOn(decodingUtils, 'decodeNullableFloatsLE')
117
- .mockReturnValue(new Float32Array([100.5, 200.5, 300.5]));
105
+ vi.spyOn(decodingUtils, "decodeNullableFloatsLE").mockReturnValue(new Float32Array([100.5, 200.5, 300.5]));
118
106
  }
119
107
  else if (scalarType === ScalarType.DOUBLE) {
120
- vi.spyOn(decodingUtils, 'decodeNullableDoublesLE')
121
- .mockReturnValue(new Float64Array([100.5, 200.5, 300.5]));
108
+ vi.spyOn(decodingUtils, "decodeNullableDoublesLE").mockReturnValue(new Float64Array([100.5, 200.5, 300.5]));
122
109
  }
123
110
  }
124
111
  // Helper: Mock nullable integer decoders
125
112
  function mockNullableIntegerDecoder(scalarType) {
126
- vi.spyOn(IntegerStreamDecoder, 'getVectorType')
127
- .mockReturnValue(VectorType.FLAT);
113
+ vi.spyOn(IntegerStreamDecoder, "getVectorType").mockReturnValue(VectorType.FLAT);
128
114
  if (scalarType === ScalarType.INT_64 || scalarType === ScalarType.UINT_64) {
129
- vi.spyOn(IntegerStreamDecoder, 'decodeNullableLongStream')
130
- .mockReturnValue(new BigInt64Array([100n, 200n, 300n]));
115
+ vi.spyOn(IntegerStreamDecoder, "decodeNullableLongStream").mockReturnValue(new BigInt64Array([100n, 200n, 300n]));
131
116
  }
132
117
  else {
133
- vi.spyOn(IntegerStreamDecoder, 'decodeNullableIntStream')
134
- .mockReturnValue(new Int32Array([100, 200, 300]));
118
+ vi.spyOn(IntegerStreamDecoder, "decodeNullableIntStream").mockReturnValue(new Int32Array([100, 200, 300]));
135
119
  }
136
120
  }
137
121
  // Helper: Setup nullable column with separate nullability stream
138
122
  function setupNullableStreamMocks() {
139
- const metadataSpy = vi.spyOn(StreamMetadataDecoder, 'decode');
123
+ const metadataSpy = vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata");
140
124
  // First call: nullability stream
141
125
  metadataSpy.mockReturnValueOnce({
142
126
  byteLength: TEST_DATA.NULLABILITY_BYTE_LENGTH,
@@ -148,29 +132,28 @@ function setupNullableStreamMocks() {
148
132
  // Subsequent calls: data stream
149
133
  metadataSpy.mockReturnValue(mockStreamMetadata());
150
134
  // Mock the nullability bitmap decoding
151
- vi.spyOn(decodingUtils, 'decodeBooleanRle')
152
- .mockReturnValue(new Uint8Array([0b00000111]));
135
+ vi.spyOn(decodingUtils, "decodeBooleanRle").mockReturnValue(new Uint8Array([0b00000111]));
153
136
  }
154
- describe('decodePropertyColumn', () => {
137
+ describe("decodePropertyColumn", () => {
155
138
  afterEach(() => vi.restoreAllMocks());
156
- describe('Number Columns - Non-Nullable - Signed Types', () => {
139
+ describe("Number Columns - Non-Nullable - Signed Types", () => {
157
140
  const numberTypes = [
158
141
  {
159
142
  scalarType: ScalarType.INT_32,
160
143
  vectorClass: IntFlatVector,
161
144
  mockFn: mockIntegerDecoder,
162
- testName: 'INT_32'
145
+ testName: "INT_32",
163
146
  },
164
147
  {
165
148
  scalarType: ScalarType.INT_64,
166
149
  vectorClass: LongFlatVector,
167
150
  mockFn: mockIntegerDecoder,
168
- testName: 'INT_64'
169
- }
151
+ testName: "INT_64",
152
+ },
170
153
  ];
171
- it.each(numberTypes)('should decode $testName column', ({ scalarType, vectorClass, mockFn }) => {
154
+ it.each(numberTypes)("should decode $testName column", ({ scalarType, vectorClass, mockFn }) => {
172
155
  // Arrange
173
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
156
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
174
157
  mockFn(scalarType);
175
158
  const column = createColumn(scalarType, false);
176
159
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
@@ -179,28 +162,28 @@ describe('decodePropertyColumn', () => {
179
162
  const result = decodePropertyColumn(data, offset, column, 1, TEST_DATA.NUM_VALUES);
180
163
  // Assert
181
164
  expect(result).toBeInstanceOf(vectorClass);
182
- expect(result._name).toBe('age');
165
+ expect(result._name).toBe("age");
183
166
  expect(result.dataBuffer).toHaveLength(TEST_DATA.NUM_VALUES);
184
167
  });
185
168
  });
186
- describe('Number Columns - Non-Nullable - Unsigned Types', () => {
169
+ describe("Number Columns - Non-Nullable - Unsigned Types", () => {
187
170
  const numberTypes = [
188
171
  {
189
172
  scalarType: ScalarType.UINT_32,
190
173
  vectorClass: IntFlatVector,
191
174
  mockFn: mockIntegerDecoder,
192
- testName: 'UINT_32'
175
+ testName: "UINT_32",
193
176
  },
194
177
  {
195
178
  scalarType: ScalarType.UINT_64,
196
179
  vectorClass: LongFlatVector,
197
180
  mockFn: mockIntegerDecoder,
198
- testName: 'UINT_64'
199
- }
181
+ testName: "UINT_64",
182
+ },
200
183
  ];
201
- it.each(numberTypes)('should decode $testName column', ({ scalarType, vectorClass, mockFn }) => {
184
+ it.each(numberTypes)("should decode $testName column", ({ scalarType, vectorClass, mockFn }) => {
202
185
  // Arrange
203
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
186
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
204
187
  mockFn(scalarType);
205
188
  const column = createColumn(scalarType, false);
206
189
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
@@ -209,16 +192,16 @@ describe('decodePropertyColumn', () => {
209
192
  const result = decodePropertyColumn(data, offset, column, 1, TEST_DATA.NUM_VALUES);
210
193
  // Assert
211
194
  expect(result).toBeInstanceOf(vectorClass);
212
- expect(result._name).toBe('age');
195
+ expect(result._name).toBe("age");
213
196
  expect(result.dataBuffer).toHaveLength(TEST_DATA.NUM_VALUES);
214
197
  });
215
198
  });
216
- describe('Number Columns - Nullable - Signed Types', () => {
199
+ describe("Number Columns - Nullable - Signed Types", () => {
217
200
  const numberTypes = [
218
- { scalarType: ScalarType.INT_32, mockFn: mockNullableIntegerDecoder, testName: 'INT_32' },
219
- { scalarType: ScalarType.INT_64, mockFn: mockNullableIntegerDecoder, testName: 'INT_64' }
201
+ { scalarType: ScalarType.INT_32, mockFn: mockNullableIntegerDecoder, testName: "INT_32" },
202
+ { scalarType: ScalarType.INT_64, mockFn: mockNullableIntegerDecoder, testName: "INT_64" },
220
203
  ];
221
- it.each(numberTypes)('should decode nullable $testName column with null mask', ({ scalarType, mockFn }) => {
204
+ it.each(numberTypes)("should decode nullable $testName column with null mask", ({ scalarType, mockFn }) => {
222
205
  // Arrange
223
206
  setupNullableStreamMocks();
224
207
  mockFn(scalarType);
@@ -229,15 +212,15 @@ describe('decodePropertyColumn', () => {
229
212
  const result = decodePropertyColumn(data, offset, column, 2, TEST_DATA.NUM_VALUES);
230
213
  // Assert
231
214
  expect(result).toBeDefined();
232
- expect(result._name).toBe('age');
215
+ expect(result._name).toBe("age");
233
216
  });
234
217
  });
235
- describe('Number Columns - Nullable - Unsigned Types', () => {
218
+ describe("Number Columns - Nullable - Unsigned Types", () => {
236
219
  const numberTypes = [
237
- { scalarType: ScalarType.UINT_32, mockFn: mockNullableIntegerDecoder, testName: 'UINT_32' },
238
- { scalarType: ScalarType.UINT_64, mockFn: mockNullableIntegerDecoder, testName: 'UINT_64' }
220
+ { scalarType: ScalarType.UINT_32, mockFn: mockNullableIntegerDecoder, testName: "UINT_32" },
221
+ { scalarType: ScalarType.UINT_64, mockFn: mockNullableIntegerDecoder, testName: "UINT_64" },
239
222
  ];
240
- it.each(numberTypes)('should decode nullable $testName column with null mask', ({ scalarType, mockFn }) => {
223
+ it.each(numberTypes)("should decode nullable $testName column with null mask", ({ scalarType, mockFn }) => {
241
224
  // Arrange
242
225
  setupNullableStreamMocks();
243
226
  mockFn(scalarType);
@@ -248,27 +231,27 @@ describe('decodePropertyColumn', () => {
248
231
  const result = decodePropertyColumn(data, offset, column, 2, TEST_DATA.NUM_VALUES);
249
232
  // Assert
250
233
  expect(result).toBeDefined();
251
- expect(result._name).toBe('age');
234
+ expect(result._name).toBe("age");
252
235
  });
253
236
  });
254
- describe('Integer Vector Encoding Types - SEQUENCE', () => {
237
+ describe("Integer Vector Encoding Types - SEQUENCE", () => {
255
238
  const numberTypes = [
256
239
  {
257
240
  scalarType: ScalarType.INT_32,
258
241
  vectorClass: IntSequenceVector,
259
242
  mockFn: mockIntegerSequenceDecoder,
260
- testName: 'INT_32'
243
+ testName: "INT_32",
261
244
  },
262
245
  {
263
246
  scalarType: ScalarType.INT_64,
264
247
  vectorClass: LongSequenceVector,
265
248
  mockFn: mockIntegerSequenceDecoder,
266
- testName: 'INT_64'
267
- }
249
+ testName: "INT_64",
250
+ },
268
251
  ];
269
- it.each(numberTypes)('should decode $testName with SEQUENCE encoding', ({ scalarType, vectorClass, mockFn }) => {
252
+ it.each(numberTypes)("should decode $testName with SEQUENCE encoding", ({ scalarType, vectorClass, mockFn }) => {
270
253
  // Arrange
271
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockRleStreamMetadata());
254
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockRleStreamMetadata());
272
255
  mockFn(scalarType);
273
256
  const column = createColumn(scalarType, false);
274
257
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
@@ -277,27 +260,27 @@ describe('decodePropertyColumn', () => {
277
260
  const result = decodePropertyColumn(data, offset, column, 1, TEST_DATA.NUM_VALUES);
278
261
  // Assert
279
262
  expect(result).toBeInstanceOf(vectorClass);
280
- expect(result._name).toBe('age');
263
+ expect(result._name).toBe("age");
281
264
  });
282
265
  });
283
- describe('Integer Vector Encoding Types - CONST', () => {
266
+ describe("Integer Vector Encoding Types - CONST", () => {
284
267
  const numberTypes = [
285
268
  {
286
269
  scalarType: ScalarType.INT_32,
287
270
  vectorClass: IntConstVector,
288
271
  mockFn: mockIntegerConstDecoder,
289
- testName: 'INT_32'
272
+ testName: "INT_32",
290
273
  },
291
274
  {
292
275
  scalarType: ScalarType.INT_64,
293
276
  vectorClass: LongConstVector,
294
277
  mockFn: mockIntegerConstDecoder,
295
- testName: 'INT_64'
296
- }
278
+ testName: "INT_64",
279
+ },
297
280
  ];
298
- it.each(numberTypes)('should decode $testName with CONST encoding', ({ scalarType, vectorClass, mockFn }) => {
281
+ it.each(numberTypes)("should decode $testName with CONST encoding", ({ scalarType, vectorClass, mockFn }) => {
299
282
  // Arrange
300
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
283
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
301
284
  mockFn(scalarType);
302
285
  const column = createColumn(scalarType, false);
303
286
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
@@ -306,27 +289,27 @@ describe('decodePropertyColumn', () => {
306
289
  const result = decodePropertyColumn(data, offset, column, 1, TEST_DATA.NUM_VALUES);
307
290
  // Assert
308
291
  expect(result).toBeInstanceOf(vectorClass);
309
- expect(result._name).toBe('age');
292
+ expect(result._name).toBe("age");
310
293
  });
311
294
  });
312
- describe('Float Columns - Non-Nullable', () => {
295
+ describe("Float Columns - Non-Nullable", () => {
313
296
  const numberTypes = [
314
297
  {
315
298
  scalarType: ScalarType.FLOAT,
316
299
  vectorClass: FloatFlatVector,
317
300
  mockFn: mockFloatDecoder,
318
- testName: 'FLOAT'
301
+ testName: "FLOAT",
319
302
  },
320
303
  {
321
304
  scalarType: ScalarType.DOUBLE,
322
305
  vectorClass: DoubleFlatVector,
323
306
  mockFn: mockFloatDecoder,
324
- testName: 'DOUBLE'
325
- }
307
+ testName: "DOUBLE",
308
+ },
326
309
  ];
327
- it.each(numberTypes)('should decode $testName column', ({ scalarType, vectorClass, mockFn }) => {
310
+ it.each(numberTypes)("should decode $testName column", ({ scalarType, vectorClass, mockFn }) => {
328
311
  // Arrange
329
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
312
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
330
313
  mockFn(scalarType);
331
314
  const column = createColumn(scalarType, false);
332
315
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
@@ -335,26 +318,26 @@ describe('decodePropertyColumn', () => {
335
318
  const result = decodePropertyColumn(data, offset, column, 1, TEST_DATA.NUM_VALUES);
336
319
  // Assert
337
320
  expect(result).toBeInstanceOf(vectorClass);
338
- expect(result._name).toBe('age');
321
+ expect(result._name).toBe("age");
339
322
  expect(result.dataBuffer).toHaveLength(TEST_DATA.NUM_VALUES);
340
323
  });
341
324
  });
342
- describe('Float Columns - Nullable', () => {
325
+ describe("Float Columns - Nullable", () => {
343
326
  const numberTypes = [
344
327
  {
345
328
  scalarType: ScalarType.FLOAT,
346
329
  vectorClass: FloatFlatVector,
347
330
  mockFn: mockNullableFloatDecoder,
348
- testName: 'FLOAT'
331
+ testName: "FLOAT",
349
332
  },
350
333
  {
351
334
  scalarType: ScalarType.DOUBLE,
352
335
  vectorClass: DoubleFlatVector,
353
336
  mockFn: mockNullableFloatDecoder,
354
- testName: 'DOUBLE'
355
- }
337
+ testName: "DOUBLE",
338
+ },
356
339
  ];
357
- it.each(numberTypes)('should decode nullable $testName column with null mask', ({ scalarType, vectorClass, mockFn }) => {
340
+ it.each(numberTypes)("should decode nullable $testName column with null mask", ({ scalarType, vectorClass, mockFn }) => {
358
341
  // Arrange
359
342
  setupNullableStreamMocks();
360
343
  mockFn(scalarType);
@@ -365,15 +348,14 @@ describe('decodePropertyColumn', () => {
365
348
  const result = decodePropertyColumn(data, offset, column, 2, TEST_DATA.NUM_VALUES);
366
349
  // Assert
367
350
  expect(result).toBeInstanceOf(vectorClass);
368
- expect(result._name).toBe('age');
351
+ expect(result._name).toBe("age");
369
352
  });
370
353
  });
371
- describe('Boolean Columns', () => {
372
- it('should decode non-nullable BOOLEAN column', () => {
354
+ describe("Boolean Columns", () => {
355
+ it("should decode non-nullable BOOLEAN column", () => {
373
356
  // Arrange
374
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
375
- vi.spyOn(decodingUtils, 'decodeBooleanRle')
376
- .mockReturnValue(new Uint8Array([0b00000111]));
357
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
358
+ vi.spyOn(decodingUtils, "decodeBooleanRle").mockReturnValue(new Uint8Array([0b00000111]));
377
359
  const column = createColumn(ScalarType.BOOLEAN, false);
378
360
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
379
361
  const offset = new IntWrapper(0);
@@ -381,13 +363,12 @@ describe('decodePropertyColumn', () => {
381
363
  const result = decodePropertyColumn(data, offset, column, 1, TEST_DATA.NUM_VALUES);
382
364
  // Assert
383
365
  expect(result).toBeInstanceOf(BooleanFlatVector);
384
- expect(result._name).toBe('age');
366
+ expect(result._name).toBe("age");
385
367
  });
386
- it('should decode nullable BOOLEAN column with null mask', () => {
368
+ it("should decode nullable BOOLEAN column with null mask", () => {
387
369
  // Arrange
388
370
  setupNullableStreamMocks();
389
- vi.spyOn(decodingUtils, 'decodeNullableBooleanRle')
390
- .mockReturnValue(new Uint8Array([0b00000111]));
371
+ vi.spyOn(decodingUtils, "decodeNullableBooleanRle").mockReturnValue(new Uint8Array([0b00000111]));
391
372
  const column = createColumn(ScalarType.BOOLEAN, true);
392
373
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
393
374
  const offset = new IntWrapper(0);
@@ -395,20 +376,19 @@ describe('decodePropertyColumn', () => {
395
376
  const result = decodePropertyColumn(data, offset, column, 2, TEST_DATA.NUM_VALUES);
396
377
  // Assert
397
378
  expect(result).toBeInstanceOf(BooleanFlatVector);
398
- expect(result._name).toBe('age');
379
+ expect(result._name).toBe("age");
399
380
  });
400
381
  });
401
- describe('String Columns - Nullable', () => {
382
+ describe("String Columns - Nullable", () => {
402
383
  const streamConfigs = [
403
- { totalStreams: 2, description: 'single data stream' },
404
- { totalStreams: 4, description: 'multiple data streams' }
384
+ { totalStreams: 2, description: "single data stream" },
385
+ { totalStreams: 4, description: "multiple data streams" },
405
386
  ];
406
- it.each(streamConfigs)('should decode nullable STRING with $description', ({ totalStreams }) => {
387
+ it.each(streamConfigs)("should decode nullable STRING with $description", ({ totalStreams }) => {
407
388
  // Arrange
408
389
  setupNullableStreamMocks();
409
- const mockStringVector = { name: 'age' };
410
- const stringDecodeSpy = vi.spyOn(StringDecoder, 'decode')
411
- .mockReturnValue(mockStringVector);
390
+ const mockStringVector = { name: "age" };
391
+ const stringDecodeSpy = vi.spyOn(StringDecoder, "decodeString").mockReturnValue(mockStringVector);
412
392
  const column = createColumn(ScalarType.STRING, true);
413
393
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
414
394
  const offset = new IntWrapper(0);
@@ -418,13 +398,13 @@ describe('decodePropertyColumn', () => {
418
398
  expect(result.name).toBe(mockStringVector.name);
419
399
  });
420
400
  });
421
- describe('Column Filtering', () => {
422
- it('should return null when column NOT in propertyColumnNames filter', () => {
401
+ describe("Column Filtering", () => {
402
+ it("should return null when column NOT in propertyColumnNames filter", () => {
423
403
  // Arrange
424
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
425
- const skipColumnSpy = vi.spyOn(decodingUtils, 'skipColumn');
404
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
405
+ const skipColumnSpy = vi.spyOn(decodingUtils, "skipColumn");
426
406
  const column = createColumn(ScalarType.STRING);
427
- const filterList = new Set(['name', 'value']);
407
+ const filterList = new Set(["name", "value"]);
428
408
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
429
409
  const offset = new IntWrapper(0);
430
410
  // Act
@@ -433,13 +413,12 @@ describe('decodePropertyColumn', () => {
433
413
  expect(result).toBeNull();
434
414
  expect(skipColumnSpy).toHaveBeenCalledWith(1, data, offset);
435
415
  });
436
- it('should decode column when it IS in propertyColumnNames filter', () => {
416
+ it("should decode column when it IS in propertyColumnNames filter", () => {
437
417
  // Arrange
438
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
439
- vi.spyOn(decodingUtils, 'decodeBooleanRle')
440
- .mockReturnValue(new Uint8Array([0b00000111]));
418
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
419
+ vi.spyOn(decodingUtils, "decodeBooleanRle").mockReturnValue(new Uint8Array([0b00000111]));
441
420
  const column = createColumn(ScalarType.BOOLEAN);
442
- const filterList = new Set(['age', 'name']);
421
+ const filterList = new Set(["age", "name"]);
443
422
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
444
423
  const offset = new IntWrapper(0);
445
424
  // Act
@@ -447,11 +426,10 @@ describe('decodePropertyColumn', () => {
447
426
  // Assert
448
427
  expect(result).toBeInstanceOf(BooleanFlatVector);
449
428
  });
450
- it('should ignore filter when propertyColumnNames is undefined', () => {
429
+ it("should ignore filter when propertyColumnNames is undefined", () => {
451
430
  // Arrange
452
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
453
- vi.spyOn(decodingUtils, 'decodeBooleanRle')
454
- .mockReturnValue(new Uint8Array([0b00000111]));
431
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
432
+ vi.spyOn(decodingUtils, "decodeBooleanRle").mockReturnValue(new Uint8Array([0b00000111]));
455
433
  const column = createColumn(ScalarType.BOOLEAN);
456
434
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
457
435
  const offset = new IntWrapper(0);
@@ -460,10 +438,10 @@ describe('decodePropertyColumn', () => {
460
438
  // Assert
461
439
  expect(result).toBeInstanceOf(BooleanFlatVector);
462
440
  });
463
- it('should handle empty filter set', () => {
441
+ it("should handle empty filter set", () => {
464
442
  // Arrange
465
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
466
- const skipColumnSpy = vi.spyOn(decodingUtils, 'skipColumn');
443
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
444
+ const skipColumnSpy = vi.spyOn(decodingUtils, "skipColumn");
467
445
  const column = createColumn(ScalarType.BOOLEAN);
468
446
  const filterList = new Set();
469
447
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
@@ -475,15 +453,12 @@ describe('decodePropertyColumn', () => {
475
453
  expect(skipColumnSpy).toHaveBeenCalled();
476
454
  });
477
455
  });
478
- describe('Edge Cases', () => {
479
- it('should handle single value column', () => {
456
+ describe("Edge Cases", () => {
457
+ it("should handle single value column", () => {
480
458
  // Arrange
481
- vi.spyOn(StreamMetadataDecoder, 'decode')
482
- .mockReturnValue(mockStreamMetadata(12, 1));
483
- vi.spyOn(IntegerStreamDecoder, 'getVectorType')
484
- .mockReturnValue(VectorType.FLAT);
485
- vi.spyOn(IntegerStreamDecoder, 'decodeIntStream')
486
- .mockReturnValue(new Int32Array([42]));
459
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata(12, 1));
460
+ vi.spyOn(IntegerStreamDecoder, "getVectorType").mockReturnValue(VectorType.FLAT);
461
+ vi.spyOn(IntegerStreamDecoder, "decodeIntStream").mockReturnValue(new Int32Array([42]));
487
462
  const column = createColumn(ScalarType.INT_32);
488
463
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
489
464
  const offset = new IntWrapper(0);
@@ -493,19 +468,16 @@ describe('decodePropertyColumn', () => {
493
468
  expect(result).toBeInstanceOf(IntFlatVector);
494
469
  expect(result.dataBuffer).toHaveLength(1);
495
470
  });
496
- it('should handle large column with many values', () => {
471
+ it("should handle large column with many values", () => {
497
472
  // Arrange
498
473
  const largeNumValues = 100000;
499
- vi.spyOn(StreamMetadataDecoder, 'decode')
500
- .mockReturnValue(mockStreamMetadata(400000, largeNumValues));
501
- vi.spyOn(IntegerStreamDecoder, 'getVectorType')
502
- .mockReturnValue(VectorType.FLAT);
474
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata(400000, largeNumValues));
475
+ vi.spyOn(IntegerStreamDecoder, "getVectorType").mockReturnValue(VectorType.FLAT);
503
476
  const largeArray = new Int32Array(largeNumValues);
504
477
  for (let i = 0; i < largeNumValues; i++) {
505
478
  largeArray[i] = i;
506
479
  }
507
- vi.spyOn(IntegerStreamDecoder, 'decodeIntStream')
508
- .mockReturnValue(largeArray);
480
+ vi.spyOn(IntegerStreamDecoder, "decodeIntStream").mockReturnValue(largeArray);
509
481
  const column = createColumn(ScalarType.INT_32);
510
482
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
511
483
  const offset = new IntWrapper(0);
@@ -515,14 +487,14 @@ describe('decodePropertyColumn', () => {
515
487
  expect(result).toBeInstanceOf(IntFlatVector);
516
488
  expect(result.dataBuffer).toHaveLength(largeNumValues);
517
489
  });
518
- it('should handle zero numValues gracefully', () => {
490
+ it("should handle zero numValues gracefully", () => {
519
491
  // Arrange
520
- vi.spyOn(StreamMetadataDecoder, 'decode')
521
- .mockReturnValue({ ...mockStreamMetadata(), numValues: 0 });
522
- vi.spyOn(IntegerStreamDecoder, 'getVectorType')
523
- .mockReturnValue(VectorType.FLAT);
524
- vi.spyOn(IntegerStreamDecoder, 'decodeIntStream')
525
- .mockReturnValue(new Int32Array(0));
492
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue({
493
+ ...mockStreamMetadata(),
494
+ numValues: 0,
495
+ });
496
+ vi.spyOn(IntegerStreamDecoder, "getVectorType").mockReturnValue(VectorType.FLAT);
497
+ vi.spyOn(IntegerStreamDecoder, "decodeIntStream").mockReturnValue(new Int32Array(0));
526
498
  const column = createColumn(ScalarType.INT_32);
527
499
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
528
500
  const offset = new IntWrapper(0);
@@ -532,14 +504,11 @@ describe('decodePropertyColumn', () => {
532
504
  expect(result).toBeInstanceOf(IntFlatVector);
533
505
  expect(result.dataBuffer).toHaveLength(0);
534
506
  });
535
- it('should handle multiple sequential columns with offset advancement', () => {
507
+ it("should handle multiple sequential columns with offset advancement", () => {
536
508
  // Arrange
537
- vi.spyOn(StreamMetadataDecoder, 'decode')
538
- .mockReturnValue(mockStreamMetadata(12, 3));
539
- vi.spyOn(IntegerStreamDecoder, 'getVectorType')
540
- .mockReturnValue(VectorType.FLAT);
541
- vi.spyOn(IntegerStreamDecoder, 'decodeIntStream')
542
- .mockReturnValue(new Int32Array([100, 200, 300]));
509
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata(12, 3));
510
+ vi.spyOn(IntegerStreamDecoder, "getVectorType").mockReturnValue(VectorType.FLAT);
511
+ vi.spyOn(IntegerStreamDecoder, "decodeIntStream").mockReturnValue(new Int32Array([100, 200, 300]));
543
512
  const column1 = createColumn(ScalarType.INT_32);
544
513
  const column2 = createColumn(ScalarType.INT_32);
545
514
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
@@ -554,15 +523,15 @@ describe('decodePropertyColumn', () => {
554
523
  expect(result2).toBeInstanceOf(IntFlatVector);
555
524
  expect(offsetAfterSecond).toEqual(offsetAfterFirst);
556
525
  });
557
- it('should handle non-scalar column type returning null', () => {
526
+ it("should handle non-scalar column type returning null", () => {
558
527
  // Arrange
559
528
  const column = {
560
- name: 'complex',
529
+ name: "complex",
561
530
  nullable: false,
562
531
  columnScope: null,
563
- type: 'complexType',
564
- complexType: { type: 'arrayType' },
565
- scalarType: null
532
+ type: "complexType",
533
+ complexType: { type: "arrayType" },
534
+ scalarType: null,
566
535
  };
567
536
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
568
537
  const offset = new IntWrapper(0);
@@ -572,14 +541,12 @@ describe('decodePropertyColumn', () => {
572
541
  expect(result).toBeNull();
573
542
  });
574
543
  });
575
- describe('Offset Management', () => {
576
- it('should handle offset at non-zero starting position', () => {
544
+ describe("Offset Management", () => {
545
+ it("should handle offset at non-zero starting position", () => {
577
546
  // Arrange
578
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
579
- vi.spyOn(IntegerStreamDecoder, 'getVectorType')
580
- .mockReturnValue(VectorType.FLAT);
581
- vi.spyOn(IntegerStreamDecoder, 'decodeIntStream')
582
- .mockReturnValue(new Int32Array([100, 200, 300]));
547
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
548
+ vi.spyOn(IntegerStreamDecoder, "getVectorType").mockReturnValue(VectorType.FLAT);
549
+ vi.spyOn(IntegerStreamDecoder, "decodeIntStream").mockReturnValue(new Int32Array([100, 200, 300]));
583
550
  const column = createColumn(ScalarType.INT_32);
584
551
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
585
552
  const startOffset = 50;
@@ -590,15 +557,16 @@ describe('decodePropertyColumn', () => {
590
557
  expect(result).toBeInstanceOf(IntFlatVector);
591
558
  expect(offset.get()).toEqual(startOffset);
592
559
  });
593
- it('should correctly skip columns with filterList and advance offset', () => {
560
+ it("should correctly skip columns with filterList and advance offset", () => {
594
561
  // Arrange
595
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
596
- const skipColumnSpy = vi.spyOn(decodingUtils, 'skipColumn')
562
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
563
+ const skipColumnSpy = vi
564
+ .spyOn(decodingUtils, "skipColumn")
597
565
  .mockImplementation((numStreams, data, offset) => {
598
566
  offset.add(12 * numStreams); // Simulate skipping
599
567
  });
600
568
  const column = createColumn(ScalarType.INT_32);
601
- const filterList = new Set(['other_column']);
569
+ const filterList = new Set(["other_column"]);
602
570
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
603
571
  const offset = new IntWrapper(0);
604
572
  const startOffset = offset.get();
@@ -610,14 +578,12 @@ describe('decodePropertyColumn', () => {
610
578
  expect(skipColumnSpy).toHaveBeenCalledWith(3, data, offset);
611
579
  });
612
580
  });
613
- describe('Type Consistency Checks', () => {
614
- it('should preserve column metadata in returned vector', () => {
581
+ describe("Type Consistency Checks", () => {
582
+ it("should preserve column metadata in returned vector", () => {
615
583
  // Arrange
616
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
617
- vi.spyOn(IntegerStreamDecoder, 'getVectorType')
618
- .mockReturnValue(VectorType.FLAT);
619
- vi.spyOn(IntegerStreamDecoder, 'decodeIntStream')
620
- .mockReturnValue(new Int32Array([10, 20, 30]));
584
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
585
+ vi.spyOn(IntegerStreamDecoder, "getVectorType").mockReturnValue(VectorType.FLAT);
586
+ vi.spyOn(IntegerStreamDecoder, "decodeIntStream").mockReturnValue(new Int32Array([10, 20, 30]));
621
587
  const column = createColumn(ScalarType.INT_32);
622
588
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
623
589
  const offset = new IntWrapper(0);
@@ -626,14 +592,11 @@ describe('decodePropertyColumn', () => {
626
592
  // Assert
627
593
  expect(result._name).toBe(column.name);
628
594
  });
629
- it('should handle all signed and unsigned type combinations', () => {
595
+ it("should handle all signed and unsigned type combinations", () => {
630
596
  // Arrange
631
- const types = [
632
- ScalarType.INT_32, ScalarType.UINT_32,
633
- ScalarType.INT_64, ScalarType.UINT_64
634
- ];
635
- types.forEach(scalarType => {
636
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
597
+ const types = [ScalarType.INT_32, ScalarType.UINT_32, ScalarType.INT_64, ScalarType.UINT_64];
598
+ types.forEach((scalarType) => {
599
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
637
600
  mockIntegerDecoder(scalarType);
638
601
  const column = createColumn(scalarType, false);
639
602
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
@@ -642,15 +605,15 @@ describe('decodePropertyColumn', () => {
642
605
  const result = decodePropertyColumn(data, offset, column, 1, TEST_DATA.NUM_VALUES);
643
606
  // Assert
644
607
  expect(result).toBeDefined();
645
- expect(result._name).toBe('age');
608
+ expect(result._name).toBe("age");
646
609
  vi.restoreAllMocks();
647
610
  });
648
611
  });
649
612
  });
650
- describe('Error Scenarios', () => {
651
- it('should handle invalid scalar type gracefully', () => {
613
+ describe("Error Scenarios", () => {
614
+ it("should handle invalid scalar type gracefully", () => {
652
615
  // Arrange
653
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
616
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
654
617
  const column = createColumn(999); // Invalid type
655
618
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
656
619
  const offset = new IntWrapper(0);
@@ -659,16 +622,16 @@ describe('decodePropertyColumn', () => {
659
622
  decodePropertyColumn(data, offset, column, 1, TEST_DATA.NUM_VALUES);
660
623
  }).toThrow();
661
624
  });
662
- it('should handle mismatched numStreams for string type', () => {
625
+ it("should handle mismatched numStreams for string type", () => {
663
626
  // Arrange
664
- vi.spyOn(StreamMetadataDecoder, 'decode').mockReturnValue(mockStreamMetadata());
627
+ vi.spyOn(StreamMetadataDecoder, "decodeStreamMetadata").mockReturnValue(mockStreamMetadata());
665
628
  const column = {
666
- name: 'stringCol',
629
+ name: "stringCol",
667
630
  nullable: false,
668
631
  columnScope: null,
669
- type: 'stringType',
632
+ type: "stringType",
670
633
  scalarType: null,
671
- complexType: null
634
+ complexType: null,
672
635
  };
673
636
  const data = new Uint8Array(TEST_DATA.BUFFER_SIZE);
674
637
  const offset = new IntWrapper(0);