@maplibre/mlt 1.1.5 → 1.1.6

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.
@@ -367,7 +367,7 @@ describe("decodePropertyColumn - STRING", () => {
367
367
  const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);
368
368
  const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);
369
369
  const completeData = concatenateBuffers(lengthStream, dataStream, fieldStreams);
370
- const columnMetadata = createColumnMetadataForStruct("address", [{ name: "street" }]);
370
+ const columnMetadata = createColumnMetadataForStruct("address:", [{ name: "street" }]);
371
371
  const offset = new IntWrapper(0);
372
372
  const result = decodePropertyColumn(completeData, offset, columnMetadata, 1, dictionaryStrings.length);
373
373
  expect(result).toHaveLength(1);
@@ -382,7 +382,7 @@ describe("decodePropertyColumn - STRING", () => {
382
382
  const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);
383
383
  const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);
384
384
  const completeData = concatenateBuffers(lengthStream, dataStream, fieldStreams);
385
- const columnMetadata = createColumnMetadataForStruct("address", [{ name: "street" }]);
385
+ const columnMetadata = createColumnMetadataForStruct("address:", [{ name: "street" }]);
386
386
  const offset = new IntWrapper(0);
387
387
  const result = decodePropertyColumn(completeData, offset, columnMetadata, 5, dictionaryStrings.length);
388
388
  expect(result).toHaveLength(1);
@@ -1 +1 @@
1
- {"version":3,"file":"propertyDecoder.spec.js","sourceRoot":"","sources":["../../src/decoding/propertyDecoder.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { decodePropertyColumn } from \"./propertyDecoder\";\nimport IntWrapper from \"./intWrapper\";\nimport { ScalarType, type Column } from \"../metadata/tileset/tilesetMetadata\";\nimport { IntFlatVector } from \"../vector/flat/intFlatVector\";\nimport { LongFlatVector } from \"../vector/flat/longFlatVector\";\nimport { FloatFlatVector } from \"../vector/flat/floatFlatVector\";\nimport { DoubleFlatVector } from \"../vector/flat/doubleFlatVector\";\nimport { BooleanFlatVector } from \"../vector/flat/booleanFlatVector\";\nimport { IntSequenceVector } from \"../vector/sequence/intSequenceVector\";\nimport { LongSequenceVector } from \"../vector/sequence/longSequenceVector\";\nimport { IntConstVector } from \"../vector/constant/intConstVector\";\nimport { LongConstVector } from \"../vector/constant/longConstVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport { createColumnMetadataForStruct, encodeSharedDictionary, encodeStructField } from \"./decodingTestUtils\";\nimport { concatenateBuffers } from \"../encoding/encodingUtils\";\nimport {\n encodeInt32NoneColumn,\n encodeInt32DeltaColumn,\n encodeInt32RleColumn,\n encodeInt32DeltaRleColumn,\n encodeUint32Column,\n encodeInt64NoneColumn,\n encodeInt64DeltaColumn,\n encodeInt64RleColumn,\n encodeInt64DeltaRleColumn,\n encodeInt64NullableColumn,\n encodeUint64Column,\n encodeUint64NullableColumn,\n encodeFloatColumn,\n encodeFloatNullableColumn,\n encodeDoubleColumn,\n encodeDoubleNullableColumn,\n encodeBooleanColumn,\n encodeBooleanNullableColumn,\n encodeInt32NullableColumn,\n} from \"../encoding/propertyEncoder\";\n\nfunction createColumnMetadata(name: string, scalarType: number, nullable: boolean = false): Column {\n return {\n name: name,\n nullable: nullable,\n type: \"scalarType\",\n scalarType: {\n physicalType: scalarType,\n type: \"physicalType\",\n },\n };\n}\n\ndescribe(\"decodePropertyColumn - INT_32\", () => {\n it(\"should decode INT_32 column with NONE encoding (signed)\", () => {\n const expectedValues = new Int32Array([2, -4, 6]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32NoneColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 column with DELTA encoding\", () => {\n const expectedValues = new Int32Array([2, 4, 6]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32DeltaColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 column with RLE encoding\", () => {\n const expectedValues = new Int32Array([100, 100, 100, -50, -50]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32RleColumn([\n [3, 100],\n [2, -50],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 column with DELTA+RLE encoding\", () => {\n const expectedValues = new Int32Array([10, 12, 14, 15, 16]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32DeltaRleColumn([\n [1, 10],\n [2, 2],\n [2, 1],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode nullable INT_32 column with null values\", () => {\n const expectedValues = [2, null, -4, null, 6];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, true);\n const encodedData = encodeInt32NullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 SEQUENCE vector\", () => {\n const numValues = 5;\n const value = 10;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32DeltaRleColumn([[numValues, value]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(IntSequenceVector);\n const seqVec = result as IntSequenceVector;\n expect(seqVec.getValue(0)).toBe(value);\n expect(seqVec.getValue(1)).toBe(value + value);\n expect(seqVec.getValue(2)).toBe(value + value * 2);\n });\n\n it(\"should decode INT_32 CONST vector\", () => {\n const numValues = 5;\n const constValue = 42;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32RleColumn([[numValues, constValue]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(IntConstVector);\n const constVec = result as IntConstVector;\n expect(constVec.getValue(0)).toBe(constValue);\n expect(constVec.getValue(4)).toBe(constValue);\n });\n});\n\ndescribe(\"decodePropertyColumn - UINT_32\", () => {\n it(\"should decode UINT_32 column with NONE encoding (unsigned)\", () => {\n const expectedValues = new Uint32Array([2, 4, 6, 100]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.UINT_32, false);\n const encodedData = encodeUint32Column(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n});\n\ndescribe(\"decodePropertyColumn - INT_64\", () => {\n it(\"should decode INT_64 column with NONE encoding (signed)\", () => {\n const expectedValues = new BigInt64Array([2n, -4n, 6n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64NoneColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 column with DELTA encoding\", () => {\n const expectedValues = new BigInt64Array([2n, 4n, 6n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64DeltaColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 column with RLE encoding\", () => {\n const expectedValues = new BigInt64Array([100n, 100n, 100n, -50n, -50n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64RleColumn([\n [3, 100n],\n [2, -50n],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 column with DELTA+RLE encoding\", () => {\n const expectedValues = new BigInt64Array([10n, 12n, 14n, 15n, 16n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64DeltaRleColumn([\n [1, 10n],\n [2, 2n],\n [2, 1n],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode nullable INT_64 column with null values\", () => {\n const expectedValues = [2n, null, -4n, null, 6n];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, true);\n const encodedData = encodeInt64NullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 SEQUENCE vector\", () => {\n const numValues = 5;\n const value = 10n;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64DeltaRleColumn([[numValues, value]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(LongSequenceVector);\n const seqVec = result as LongSequenceVector;\n expect(seqVec.getValue(0)).toBe(value);\n expect(seqVec.getValue(1)).toBe(value + value);\n expect(seqVec.getValue(2)).toBe(value + value * 2n);\n });\n\n it(\"should decode INT_64 CONST vector\", () => {\n const numValues = 5;\n const constValue = 42n;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64RleColumn([[numValues, constValue]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(LongConstVector);\n const constVec = result as LongConstVector;\n expect(constVec.getValue(0)).toBe(constValue);\n expect(constVec.getValue(4)).toBe(constValue);\n });\n});\n\ndescribe(\"decodePropertyColumn - UINT_64\", () => {\n it(\"should decode UINT_64 column with NONE encoding (unsigned)\", () => {\n const expectedValues = new BigUint64Array([2n, 4n, 6n, 100n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.UINT_64, false);\n const encodedData = encodeUint64Column(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode nullable UINT_64 column with null values\", () => {\n const expectedValues = [2n, null, 4n, null, 6n];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.UINT_64, true);\n const encodedData = encodeUint64NullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n});\n\ndescribe(\"decodePropertyColumn - FLOAT\", () => {\n it(\"should decode non-nullable FLOAT column\", () => {\n const expectedValues = new Float32Array([1.5, 2.7, -3.14, 4.2]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.FLOAT, false);\n const encodedData = encodeFloatColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(FloatFlatVector);\n const resultVec = result as FloatFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBeCloseTo(expectedValues[i], 5);\n }\n });\n\n it(\"should decode nullable FLOAT column with null values\", () => {\n const expectedValues = [1.5, null, 2.7, null, 3.14];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.FLOAT, true);\n const encodedData = encodeFloatNullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(FloatFlatVector);\n const resultVec = result as FloatFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n expect(resultVec.getValue(0)).toBeCloseTo(1.5, 5);\n expect(resultVec.getValue(1)).toBe(null); // null value\n expect(resultVec.getValue(2)).toBeCloseTo(2.7, 5);\n expect(resultVec.getValue(3)).toBe(null); // null value\n expect(resultVec.getValue(4)).toBeCloseTo(3.14, 5);\n });\n\n it(\"should handle offset correctly after decoding FLOAT column\", () => {\n const expectedValues = new Float32Array([1.0, 2.0, 3.0]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.FLOAT, false);\n const encodedData = encodeFloatColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n // Verify offset was advanced correctly\n expect(offset.get()).toBe(encodedData.length);\n });\n});\n\ndescribe(\"decodePropertyColumn - BOOLEAN\", () => {\n it(\"should decode non-nullable BOOLEAN column with RLE\", () => {\n const booleanValues = [true, false, true, true, false, false, false, true];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.BOOLEAN, false);\n const encodedData = encodeBooleanColumn(booleanValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, booleanValues.length);\n\n expect(result).toBeInstanceOf(BooleanFlatVector);\n const boolVec = result as BooleanFlatVector;\n for (let i = 0; i < booleanValues.length; i++) {\n expect(boolVec.getValue(i)).toBe(booleanValues[i]);\n }\n });\n\n it(\"should decode nullable BOOLEAN column with RLE and present stream\", () => {\n const expectedValues = [true, null, false, null, true];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.BOOLEAN, true);\n const encodedData = encodeBooleanNullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(BooleanFlatVector);\n const boolVec = result as BooleanFlatVector;\n expect(boolVec.getValue(0)).toBe(true);\n expect(boolVec.getValue(1)).toBe(null);\n expect(boolVec.getValue(2)).toBe(false);\n expect(boolVec.getValue(3)).toBe(null);\n expect(boolVec.getValue(4)).toBe(true);\n });\n});\n\ndescribe(\"decodePropertyColumn - DOUBLE\", () => {\n it(\"should decode non-nullable DOUBLE column\", () => {\n const expectedValues = new Float32Array([1.2345, 5.4321, 1.33742]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.DOUBLE, false);\n const encodedData = encodeDoubleColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(DoubleFlatVector);\n const resultVec = result as DoubleFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBeCloseTo(expectedValues[i], 5);\n }\n });\n\n it(\"should decode nullable DOUBLE column with null values\", () => {\n const expectedValues = [1.5, null, 2.7, null, 3.14159];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.DOUBLE, true);\n const encodedData = encodeDoubleNullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(DoubleFlatVector);\n const resultVec = result as DoubleFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n expect(resultVec.getValue(0)).toBeCloseTo(1.5, 5);\n expect(resultVec.getValue(1)).toBe(null); // null value\n expect(resultVec.getValue(2)).toBeCloseTo(2.7, 5);\n expect(resultVec.getValue(3)).toBe(null); // null value\n expect(resultVec.getValue(4)).toBeCloseTo(3.14159, 5);\n });\n\n it(\"should handle offset correctly after decoding DOUBLE column\", () => {\n const expectedValues = new Float32Array([1.33742, 1.2345, 5.4321]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.DOUBLE, false);\n const encodedData = encodeDoubleColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n // Verify offset was advanced correctly\n expect(offset.get()).toBe(encodedData.length);\n });\n});\n\ndescribe(\"decodePropertyColumn - STRING\", () => {\n describe(\"basic functionality\", () => {\n it(\"should decode single field with shared dictionary\", () => {\n const dictionaryStrings = [\"apple\", \"banana\", \"peach\", \"date\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);\n const completeData = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetadata = createColumnMetadataForStruct(\"address\", [{ name: \"street\" }]);\n const offset = new IntWrapper(0);\n const result = decodePropertyColumn(completeData, offset, columnMetadata, 1, dictionaryStrings.length);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(StringDictionaryVector);\n expect(result[0].name).toBe(\"address:street\");\n for (let i = 0; i < dictionaryStrings.length; i++) {\n expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);\n }\n });\n\n it(\"should decode shared dictionary when numStreams matches encoder output (3 + N*2)\", () => {\n const dictionaryStrings = [\"apple\", \"banana\", \"peach\", \"date\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);\n const completeData = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetadata = createColumnMetadataForStruct(\"address\", [{ name: \"street\" }]);\n const offset = new IntWrapper(0);\n const result = decodePropertyColumn(completeData, offset, columnMetadata, 5, dictionaryStrings.length);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(StringDictionaryVector);\n expect(result[0].name).toBe(\"address:street\");\n for (let i = 0; i < dictionaryStrings.length; i++) {\n expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);\n }\n });\n });\n});\n\ndescribe(\"decodePropertyColumn - Edge Cases\", () => {\n it(\"should filter columns with propertyColumnNames set\", () => {\n const expectedValues = new Int32Array([1, 2, 3]);\n const columnMetadata = createColumnMetadata(\"includedColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32NoneColumn(expectedValues);\n const propertyColumnNames = new Set([\"includedColumn\"]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(\n encodedData,\n offset,\n columnMetadata,\n 1,\n expectedValues.length,\n propertyColumnNames,\n );\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should skip column when not in propertyColumnNames filter\", () => {\n const expectedValues = new Int32Array([1, 2, 3]);\n const columnMetadata = createColumnMetadata(\"excludedColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32NoneColumn(expectedValues);\n const propertyColumnNames = new Set([\"someOtherColumn\"]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(\n encodedData,\n offset,\n columnMetadata,\n 1,\n expectedValues.length,\n propertyColumnNames,\n );\n\n // Should return null and advance the offset past the skipped data\n expect(result).toBe(null);\n expect(offset.get()).toBe(encodedData.length);\n });\n\n it(\"should return null for empty columns (numStreams === 0)\", () => {\n const columnMetadata = createColumnMetadata(\"emptyColumn\", ScalarType.INT_32, false);\n const offset = new IntWrapper(0);\n const data = new Uint8Array(0);\n\n const result = decodePropertyColumn(data, offset, columnMetadata, 0, 0);\n\n expect(result).toBeNull();\n });\n\n it(\"should return null for complex type with numStreams === 0\", () => {\n const columnMetadata = createColumnMetadataForStruct(\"structColumn\", [\n { name: \"field1\" },\n { name: \"field2\" },\n ]);\n const offset = new IntWrapper(0);\n const data = new Uint8Array(0);\n\n const result = decodePropertyColumn(data, offset, columnMetadata, 0, 5);\n\n expect(result).toBeNull();\n });\n\n it(\"should throw error for unsupported data type\", () => {\n const columnMetadata = createColumnMetadata(\"unsupportedColumn\", ScalarType.INT_8, false);\n const encodedData = encodeInt32NoneColumn(new Int32Array([1, 2, 3]));\n const offset = new IntWrapper(0);\n\n expect(() => {\n decodePropertyColumn(encodedData, offset, columnMetadata, 1, 3);\n }).toThrow();\n });\n});\n"]}
1
+ {"version":3,"file":"propertyDecoder.spec.js","sourceRoot":"","sources":["../../src/decoding/propertyDecoder.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { decodePropertyColumn } from \"./propertyDecoder\";\nimport IntWrapper from \"./intWrapper\";\nimport { ScalarType, type Column } from \"../metadata/tileset/tilesetMetadata\";\nimport { IntFlatVector } from \"../vector/flat/intFlatVector\";\nimport { LongFlatVector } from \"../vector/flat/longFlatVector\";\nimport { FloatFlatVector } from \"../vector/flat/floatFlatVector\";\nimport { DoubleFlatVector } from \"../vector/flat/doubleFlatVector\";\nimport { BooleanFlatVector } from \"../vector/flat/booleanFlatVector\";\nimport { IntSequenceVector } from \"../vector/sequence/intSequenceVector\";\nimport { LongSequenceVector } from \"../vector/sequence/longSequenceVector\";\nimport { IntConstVector } from \"../vector/constant/intConstVector\";\nimport { LongConstVector } from \"../vector/constant/longConstVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport { createColumnMetadataForStruct, encodeSharedDictionary, encodeStructField } from \"./decodingTestUtils\";\nimport { concatenateBuffers } from \"../encoding/encodingUtils\";\nimport {\n encodeInt32NoneColumn,\n encodeInt32DeltaColumn,\n encodeInt32RleColumn,\n encodeInt32DeltaRleColumn,\n encodeUint32Column,\n encodeInt64NoneColumn,\n encodeInt64DeltaColumn,\n encodeInt64RleColumn,\n encodeInt64DeltaRleColumn,\n encodeInt64NullableColumn,\n encodeUint64Column,\n encodeUint64NullableColumn,\n encodeFloatColumn,\n encodeFloatNullableColumn,\n encodeDoubleColumn,\n encodeDoubleNullableColumn,\n encodeBooleanColumn,\n encodeBooleanNullableColumn,\n encodeInt32NullableColumn,\n} from \"../encoding/propertyEncoder\";\n\nfunction createColumnMetadata(name: string, scalarType: number, nullable: boolean = false): Column {\n return {\n name: name,\n nullable: nullable,\n type: \"scalarType\",\n scalarType: {\n physicalType: scalarType,\n type: \"physicalType\",\n },\n };\n}\n\ndescribe(\"decodePropertyColumn - INT_32\", () => {\n it(\"should decode INT_32 column with NONE encoding (signed)\", () => {\n const expectedValues = new Int32Array([2, -4, 6]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32NoneColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 column with DELTA encoding\", () => {\n const expectedValues = new Int32Array([2, 4, 6]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32DeltaColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 column with RLE encoding\", () => {\n const expectedValues = new Int32Array([100, 100, 100, -50, -50]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32RleColumn([\n [3, 100],\n [2, -50],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 column with DELTA+RLE encoding\", () => {\n const expectedValues = new Int32Array([10, 12, 14, 15, 16]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32DeltaRleColumn([\n [1, 10],\n [2, 2],\n [2, 1],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode nullable INT_32 column with null values\", () => {\n const expectedValues = [2, null, -4, null, 6];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, true);\n const encodedData = encodeInt32NullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 SEQUENCE vector\", () => {\n const numValues = 5;\n const value = 10;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32DeltaRleColumn([[numValues, value]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(IntSequenceVector);\n const seqVec = result as IntSequenceVector;\n expect(seqVec.getValue(0)).toBe(value);\n expect(seqVec.getValue(1)).toBe(value + value);\n expect(seqVec.getValue(2)).toBe(value + value * 2);\n });\n\n it(\"should decode INT_32 CONST vector\", () => {\n const numValues = 5;\n const constValue = 42;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32RleColumn([[numValues, constValue]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(IntConstVector);\n const constVec = result as IntConstVector;\n expect(constVec.getValue(0)).toBe(constValue);\n expect(constVec.getValue(4)).toBe(constValue);\n });\n});\n\ndescribe(\"decodePropertyColumn - UINT_32\", () => {\n it(\"should decode UINT_32 column with NONE encoding (unsigned)\", () => {\n const expectedValues = new Uint32Array([2, 4, 6, 100]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.UINT_32, false);\n const encodedData = encodeUint32Column(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n});\n\ndescribe(\"decodePropertyColumn - INT_64\", () => {\n it(\"should decode INT_64 column with NONE encoding (signed)\", () => {\n const expectedValues = new BigInt64Array([2n, -4n, 6n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64NoneColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 column with DELTA encoding\", () => {\n const expectedValues = new BigInt64Array([2n, 4n, 6n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64DeltaColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 column with RLE encoding\", () => {\n const expectedValues = new BigInt64Array([100n, 100n, 100n, -50n, -50n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64RleColumn([\n [3, 100n],\n [2, -50n],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 column with DELTA+RLE encoding\", () => {\n const expectedValues = new BigInt64Array([10n, 12n, 14n, 15n, 16n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64DeltaRleColumn([\n [1, 10n],\n [2, 2n],\n [2, 1n],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode nullable INT_64 column with null values\", () => {\n const expectedValues = [2n, null, -4n, null, 6n];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, true);\n const encodedData = encodeInt64NullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 SEQUENCE vector\", () => {\n const numValues = 5;\n const value = 10n;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64DeltaRleColumn([[numValues, value]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(LongSequenceVector);\n const seqVec = result as LongSequenceVector;\n expect(seqVec.getValue(0)).toBe(value);\n expect(seqVec.getValue(1)).toBe(value + value);\n expect(seqVec.getValue(2)).toBe(value + value * 2n);\n });\n\n it(\"should decode INT_64 CONST vector\", () => {\n const numValues = 5;\n const constValue = 42n;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64RleColumn([[numValues, constValue]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(LongConstVector);\n const constVec = result as LongConstVector;\n expect(constVec.getValue(0)).toBe(constValue);\n expect(constVec.getValue(4)).toBe(constValue);\n });\n});\n\ndescribe(\"decodePropertyColumn - UINT_64\", () => {\n it(\"should decode UINT_64 column with NONE encoding (unsigned)\", () => {\n const expectedValues = new BigUint64Array([2n, 4n, 6n, 100n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.UINT_64, false);\n const encodedData = encodeUint64Column(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode nullable UINT_64 column with null values\", () => {\n const expectedValues = [2n, null, 4n, null, 6n];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.UINT_64, true);\n const encodedData = encodeUint64NullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n});\n\ndescribe(\"decodePropertyColumn - FLOAT\", () => {\n it(\"should decode non-nullable FLOAT column\", () => {\n const expectedValues = new Float32Array([1.5, 2.7, -3.14, 4.2]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.FLOAT, false);\n const encodedData = encodeFloatColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(FloatFlatVector);\n const resultVec = result as FloatFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBeCloseTo(expectedValues[i], 5);\n }\n });\n\n it(\"should decode nullable FLOAT column with null values\", () => {\n const expectedValues = [1.5, null, 2.7, null, 3.14];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.FLOAT, true);\n const encodedData = encodeFloatNullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(FloatFlatVector);\n const resultVec = result as FloatFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n expect(resultVec.getValue(0)).toBeCloseTo(1.5, 5);\n expect(resultVec.getValue(1)).toBe(null); // null value\n expect(resultVec.getValue(2)).toBeCloseTo(2.7, 5);\n expect(resultVec.getValue(3)).toBe(null); // null value\n expect(resultVec.getValue(4)).toBeCloseTo(3.14, 5);\n });\n\n it(\"should handle offset correctly after decoding FLOAT column\", () => {\n const expectedValues = new Float32Array([1.0, 2.0, 3.0]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.FLOAT, false);\n const encodedData = encodeFloatColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n // Verify offset was advanced correctly\n expect(offset.get()).toBe(encodedData.length);\n });\n});\n\ndescribe(\"decodePropertyColumn - BOOLEAN\", () => {\n it(\"should decode non-nullable BOOLEAN column with RLE\", () => {\n const booleanValues = [true, false, true, true, false, false, false, true];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.BOOLEAN, false);\n const encodedData = encodeBooleanColumn(booleanValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, booleanValues.length);\n\n expect(result).toBeInstanceOf(BooleanFlatVector);\n const boolVec = result as BooleanFlatVector;\n for (let i = 0; i < booleanValues.length; i++) {\n expect(boolVec.getValue(i)).toBe(booleanValues[i]);\n }\n });\n\n it(\"should decode nullable BOOLEAN column with RLE and present stream\", () => {\n const expectedValues = [true, null, false, null, true];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.BOOLEAN, true);\n const encodedData = encodeBooleanNullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(BooleanFlatVector);\n const boolVec = result as BooleanFlatVector;\n expect(boolVec.getValue(0)).toBe(true);\n expect(boolVec.getValue(1)).toBe(null);\n expect(boolVec.getValue(2)).toBe(false);\n expect(boolVec.getValue(3)).toBe(null);\n expect(boolVec.getValue(4)).toBe(true);\n });\n});\n\ndescribe(\"decodePropertyColumn - DOUBLE\", () => {\n it(\"should decode non-nullable DOUBLE column\", () => {\n const expectedValues = new Float32Array([1.2345, 5.4321, 1.33742]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.DOUBLE, false);\n const encodedData = encodeDoubleColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(DoubleFlatVector);\n const resultVec = result as DoubleFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBeCloseTo(expectedValues[i], 5);\n }\n });\n\n it(\"should decode nullable DOUBLE column with null values\", () => {\n const expectedValues = [1.5, null, 2.7, null, 3.14159];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.DOUBLE, true);\n const encodedData = encodeDoubleNullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(DoubleFlatVector);\n const resultVec = result as DoubleFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n expect(resultVec.getValue(0)).toBeCloseTo(1.5, 5);\n expect(resultVec.getValue(1)).toBe(null); // null value\n expect(resultVec.getValue(2)).toBeCloseTo(2.7, 5);\n expect(resultVec.getValue(3)).toBe(null); // null value\n expect(resultVec.getValue(4)).toBeCloseTo(3.14159, 5);\n });\n\n it(\"should handle offset correctly after decoding DOUBLE column\", () => {\n const expectedValues = new Float32Array([1.33742, 1.2345, 5.4321]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.DOUBLE, false);\n const encodedData = encodeDoubleColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n // Verify offset was advanced correctly\n expect(offset.get()).toBe(encodedData.length);\n });\n});\n\ndescribe(\"decodePropertyColumn - STRING\", () => {\n describe(\"basic functionality\", () => {\n it(\"should decode single field with shared dictionary\", () => {\n const dictionaryStrings = [\"apple\", \"banana\", \"peach\", \"date\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);\n const completeData = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetadata = createColumnMetadataForStruct(\"address:\", [{ name: \"street\" }]);\n const offset = new IntWrapper(0);\n const result = decodePropertyColumn(completeData, offset, columnMetadata, 1, dictionaryStrings.length);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(StringDictionaryVector);\n expect(result[0].name).toBe(\"address:street\");\n for (let i = 0; i < dictionaryStrings.length; i++) {\n expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);\n }\n });\n\n it(\"should decode shared dictionary when numStreams matches encoder output (3 + N*2)\", () => {\n const dictionaryStrings = [\"apple\", \"banana\", \"peach\", \"date\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);\n const completeData = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetadata = createColumnMetadataForStruct(\"address:\", [{ name: \"street\" }]);\n const offset = new IntWrapper(0);\n const result = decodePropertyColumn(completeData, offset, columnMetadata, 5, dictionaryStrings.length);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(StringDictionaryVector);\n expect(result[0].name).toBe(\"address:street\");\n for (let i = 0; i < dictionaryStrings.length; i++) {\n expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);\n }\n });\n });\n});\n\ndescribe(\"decodePropertyColumn - Edge Cases\", () => {\n it(\"should filter columns with propertyColumnNames set\", () => {\n const expectedValues = new Int32Array([1, 2, 3]);\n const columnMetadata = createColumnMetadata(\"includedColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32NoneColumn(expectedValues);\n const propertyColumnNames = new Set([\"includedColumn\"]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(\n encodedData,\n offset,\n columnMetadata,\n 1,\n expectedValues.length,\n propertyColumnNames,\n );\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should skip column when not in propertyColumnNames filter\", () => {\n const expectedValues = new Int32Array([1, 2, 3]);\n const columnMetadata = createColumnMetadata(\"excludedColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32NoneColumn(expectedValues);\n const propertyColumnNames = new Set([\"someOtherColumn\"]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(\n encodedData,\n offset,\n columnMetadata,\n 1,\n expectedValues.length,\n propertyColumnNames,\n );\n\n // Should return null and advance the offset past the skipped data\n expect(result).toBe(null);\n expect(offset.get()).toBe(encodedData.length);\n });\n\n it(\"should return null for empty columns (numStreams === 0)\", () => {\n const columnMetadata = createColumnMetadata(\"emptyColumn\", ScalarType.INT_32, false);\n const offset = new IntWrapper(0);\n const data = new Uint8Array(0);\n\n const result = decodePropertyColumn(data, offset, columnMetadata, 0, 0);\n\n expect(result).toBeNull();\n });\n\n it(\"should return null for complex type with numStreams === 0\", () => {\n const columnMetadata = createColumnMetadataForStruct(\"structColumn\", [\n { name: \"field1\" },\n { name: \"field2\" },\n ]);\n const offset = new IntWrapper(0);\n const data = new Uint8Array(0);\n\n const result = decodePropertyColumn(data, offset, columnMetadata, 0, 5);\n\n expect(result).toBeNull();\n });\n\n it(\"should throw error for unsupported data type\", () => {\n const columnMetadata = createColumnMetadata(\"unsupportedColumn\", ScalarType.INT_8, false);\n const encodedData = encodeInt32NoneColumn(new Int32Array([1, 2, 3]));\n const offset = new IntWrapper(0);\n\n expect(() => {\n decodePropertyColumn(encodedData, offset, columnMetadata, 1, 3);\n }).toThrow();\n });\n});\n"]}
@@ -10,8 +10,6 @@ import { ScalarType } from "../metadata/tileset/tilesetMetadata";
10
10
  import { decodeVarintInt32 } from "./integerDecodingUtils";
11
11
  import { decodeBooleanRle, skipColumn } from "./decodingUtils";
12
12
  import { StringFsstDictionaryVector } from "../vector/fsst-dictionary/stringFsstDictionaryVector";
13
- const ROOT_COLUMN_NAME = "default";
14
- const NESTED_COLUMN_SEPARATOR = ":";
15
13
  export function decodeString(name, data, offset, numStreams, bitVector) {
16
14
  let dictionaryLengthStream = null;
17
15
  let offsetStream = null;
@@ -152,11 +150,7 @@ export function decodeSharedDictionary(data, offset, column, numFeatures, proper
152
150
  /* Column is not present in the tile */
153
151
  continue;
154
152
  }
155
- const columnName = childField.name === ROOT_COLUMN_NAME || !childField.name
156
- ? column.name
157
- : childField.name.startsWith(NESTED_COLUMN_SEPARATOR)
158
- ? `${column.name}${childField.name}`
159
- : `${column.name}${NESTED_COLUMN_SEPARATOR}${childField.name}`;
153
+ const columnName = childField.name ? `${column.name}${childField.name}` : column.name;
160
154
  if (propertyColumnNames) {
161
155
  if (!propertyColumnNames.has(columnName)) {
162
156
  //TODO: add size of sub column to Mlt for faster skipping
@@ -1 +1 @@
1
- {"version":3,"file":"stringDecoder.js","sourceRoot":"","sources":["../../src/decoding/stringDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { decodeStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport { StringFlatVector } from \"../vector/flat/stringFlatVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport type IntWrapper from \"./intWrapper\";\nimport BitVector from \"../vector/flat/bitVector\";\nimport type Vector from \"../vector/vector\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { decodeIntStream, decodeLengthStreamToOffsetBuffer } from \"./integerStreamDecoder\";\nimport { type Column, ScalarType } from \"../metadata/tileset/tilesetMetadata\";\nimport { decodeVarintInt32 } from \"./integerDecodingUtils\";\nimport { decodeBooleanRle, skipColumn } from \"./decodingUtils\";\nimport { StringFsstDictionaryVector } from \"../vector/fsst-dictionary/stringFsstDictionaryVector\";\n\nconst ROOT_COLUMN_NAME = \"default\";\nconst NESTED_COLUMN_SEPARATOR = \":\";\n\nexport function decodeString(\n name: string,\n data: Uint8Array,\n offset: IntWrapper,\n numStreams: number,\n bitVector?: BitVector,\n): Vector {\n let dictionaryLengthStream: Uint32Array = null;\n let offsetStream: Int32Array = null;\n let dictionaryStream: Uint8Array = null;\n let symbolLengthStream: Uint32Array = null;\n let symbolTableStream: Uint8Array = null;\n let presentStream: BitVector = null;\n let plainLengthStream: Uint32Array = null;\n let plainDataStream: Uint8Array = null;\n\n for (let i = 0; i < numStreams; i++) {\n const streamMetadata = decodeStreamMetadata(data, offset);\n if (streamMetadata.byteLength === 0) {\n continue;\n }\n\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.PRESENT: {\n const presentData = decodeBooleanRle(data, streamMetadata.numValues, streamMetadata.byteLength, offset);\n presentStream = new BitVector(presentData, streamMetadata.numValues);\n break;\n }\n case PhysicalStreamType.OFFSET: {\n const isNullable = bitVector != null || presentStream != null;\n const nullabilityBuffer = bitVector ?? presentStream;\n offsetStream = decodeIntStream(\n data,\n offset,\n streamMetadata,\n false,\n undefined,\n isNullable ? nullabilityBuffer : undefined,\n );\n break;\n }\n case PhysicalStreamType.LENGTH: {\n const ls = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryLengthStream = ls;\n } else if (LengthType.SYMBOL === streamMetadata.logicalStreamType.lengthType) {\n symbolLengthStream = ls;\n } else {\n // Plain string encoding uses VAR_BINARY length type\n plainLengthStream = ls;\n }\n break;\n }\n case PhysicalStreamType.DATA: {\n const ds = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n offset.add(streamMetadata.byteLength);\n const dictType = streamMetadata.logicalStreamType.dictionaryType;\n if (DictionaryType.FSST === dictType) {\n symbolTableStream = ds;\n } else if (DictionaryType.SINGLE === dictType || DictionaryType.SHARED === dictType) {\n dictionaryStream = ds;\n } else if (DictionaryType.NONE === dictType) {\n plainDataStream = ds;\n }\n break;\n }\n }\n }\n\n return (\n decodeFsstDictionaryVector(\n name,\n symbolTableStream,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n bitVector ?? presentStream,\n ) ??\n decodeDictionaryVector(\n name,\n dictionaryStream,\n offsetStream,\n dictionaryLengthStream,\n bitVector ?? presentStream,\n ) ??\n decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, bitVector ?? presentStream)\n );\n}\n\nfunction decodeFsstDictionaryVector(\n name: string,\n symbolTableStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Uint32Array | null,\n dictionaryStream: Uint8Array | null,\n symbolLengthStream: Uint32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!symbolTableStream) {\n return null;\n }\n return new StringFsstDictionaryVector(\n name,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n symbolTableStream,\n nullabilityBuffer,\n );\n}\n\nfunction decodeDictionaryVector(\n name: string,\n dictionaryStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Uint32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!dictionaryStream) {\n return null;\n }\n return nullabilityBuffer\n ? new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream, nullabilityBuffer)\n : new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream);\n}\n\nfunction decodePlainStringVector(\n name: string,\n plainLengthStream: Uint32Array | null,\n plainDataStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!plainLengthStream || !plainDataStream) {\n return null;\n }\n\n if (offsetStream) {\n return nullabilityBuffer\n ? new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream);\n }\n\n if (nullabilityBuffer && nullabilityBuffer.size() !== plainLengthStream.length - 1) {\n const sparseOffsetStream = new Int32Array(nullabilityBuffer.size());\n let valueIndex = 0;\n for (let i = 0; i < nullabilityBuffer.size(); i++) {\n if (nullabilityBuffer.get(i)) {\n sparseOffsetStream[i] = valueIndex++;\n } else {\n sparseOffsetStream[i] = 0;\n }\n }\n return new StringDictionaryVector(\n name,\n sparseOffsetStream,\n plainLengthStream,\n plainDataStream,\n nullabilityBuffer,\n );\n }\n\n return nullabilityBuffer\n ? new StringFlatVector(name, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringFlatVector(name, plainLengthStream, plainDataStream);\n}\n\nexport function decodeSharedDictionary(\n data: Uint8Array,\n offset: IntWrapper,\n column: Column,\n numFeatures: number,\n propertyColumnNames?: Set<string>,\n): Vector[] {\n let dictionaryOffsetBuffer: Uint32Array = null;\n let dictionaryBuffer: Uint8Array = null;\n let symbolOffsetBuffer: Uint32Array = null;\n let symbolTableBuffer: Uint8Array = null;\n\n let dictionaryStreamDecoded = false;\n while (!dictionaryStreamDecoded) {\n const streamMetadata = decodeStreamMetadata(data, offset);\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n } else {\n symbolOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n }\n break;\n case PhysicalStreamType.DATA:\n if (\n DictionaryType.SINGLE === streamMetadata.logicalStreamType.dictionaryType ||\n DictionaryType.SHARED === streamMetadata.logicalStreamType.dictionaryType\n ) {\n dictionaryBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n dictionaryStreamDecoded = true;\n } else {\n symbolTableBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n }\n offset.add(streamMetadata.byteLength);\n break;\n }\n }\n\n const childFields = column.complexType.children;\n const stringDictionaryVectors = [];\n let i = 0;\n for (const childField of childFields) {\n const numStreams = decodeVarintInt32(data, offset, 1)[0];\n if (numStreams == 0) {\n /* Column is not present in the tile */\n continue;\n }\n\n const columnName = childField.name === ROOT_COLUMN_NAME || !childField.name\n ? column.name\n : childField.name.startsWith(NESTED_COLUMN_SEPARATOR)\n ? `${column.name}${childField.name}`\n : `${column.name}${NESTED_COLUMN_SEPARATOR}${childField.name}`;\n if (propertyColumnNames) {\n if (!propertyColumnNames.has(columnName)) {\n //TODO: add size of sub column to Mlt for faster skipping\n skipColumn(numStreams, data, offset);\n continue;\n }\n }\n\n if (\n numStreams !== 2 ||\n childField.type !== \"scalarField\" ||\n childField.scalarField.physicalType !== ScalarType.STRING\n ) {\n throw new Error(\"Currently only optional string fields are implemented for a struct.\");\n }\n\n const presentStreamMetadata = decodeStreamMetadata(data, offset);\n const presentStream = decodeBooleanRle(data, presentStreamMetadata.numValues, presentStreamMetadata.byteLength, offset);\n const offsetStreamMetadata = decodeStreamMetadata(data, offset);\n const offsetCount = offsetStreamMetadata.decompressedCount;\n const isNullable = offsetCount !== numFeatures;\n const offsetStream = decodeIntStream(\n data,\n offset,\n offsetStreamMetadata,\n false,\n undefined,\n isNullable ? new BitVector(presentStream, presentStreamMetadata.numValues) : undefined,\n );\n\n stringDictionaryVectors[i++] = symbolTableBuffer\n ? new StringFsstDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n symbolOffsetBuffer,\n symbolTableBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n )\n : new StringDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n );\n }\n\n return stringDictionaryVectors;\n}\n"]}
1
+ {"version":3,"file":"stringDecoder.js","sourceRoot":"","sources":["../../src/decoding/stringDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAErF,OAAO,SAAS,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAe,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sDAAsD,CAAC;AAGlG,MAAM,UAAU,YAAY,CACxB,IAAY,EACZ,IAAgB,EAChB,MAAkB,EAClB,UAAkB,EAClB,SAAqB;IAErB,IAAI,sBAAsB,GAAgB,IAAI,CAAC;IAC/C,IAAI,YAAY,GAAe,IAAI,CAAC;IACpC,IAAI,gBAAgB,GAAe,IAAI,CAAC;IACxC,IAAI,kBAAkB,GAAgB,IAAI,CAAC;IAC3C,IAAI,iBAAiB,GAAe,IAAI,CAAC;IACzC,IAAI,aAAa,GAAc,IAAI,CAAC;IACpC,IAAI,iBAAiB,GAAgB,IAAI,CAAC;IAC1C,IAAI,eAAe,GAAe,IAAI,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,cAAc,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAClC,SAAS;QACb,CAAC;QAED,QAAQ,cAAc,CAAC,kBAAkB,EAAE,CAAC;YACxC,KAAK,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9B,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACxG,aAAa,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC7B,MAAM,UAAU,GAAG,SAAS,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,CAAC;gBAC9D,MAAM,iBAAiB,GAAG,SAAS,IAAI,aAAa,CAAC;gBACrD,YAAY,GAAG,eAAe,CAC1B,IAAI,EACJ,MAAM,EACN,cAAc,EACd,KAAK,EACL,SAAS,EACT,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAC7C,CAAC;gBACF,MAAM;YACV,CAAC;YACD,KAAK,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC7B,MAAM,EAAE,GAAG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;gBAC1E,IAAI,UAAU,CAAC,UAAU,KAAK,cAAc,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;oBACxE,sBAAsB,GAAG,EAAE,CAAC;gBAChC,CAAC;qBAAM,IAAI,UAAU,CAAC,MAAM,KAAK,cAAc,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;oBAC3E,kBAAkB,GAAG,EAAE,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACJ,oDAAoD;oBACpD,iBAAiB,GAAG,EAAE,CAAC;gBAC3B,CAAC;gBACD,MAAM;YACV,CAAC;YACD,KAAK,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;gBACjF,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBACtC,MAAM,QAAQ,GAAG,cAAc,CAAC,iBAAiB,CAAC,cAAc,CAAC;gBACjE,IAAI,cAAc,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACnC,iBAAiB,GAAG,EAAE,CAAC;gBAC3B,CAAC;qBAAM,IAAI,cAAc,CAAC,MAAM,KAAK,QAAQ,IAAI,cAAc,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAClF,gBAAgB,GAAG,EAAE,CAAC;gBAC1B,CAAC;qBAAM,IAAI,cAAc,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC1C,eAAe,GAAG,EAAE,CAAC;gBACzB,CAAC;gBACD,MAAM;YACV,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,CACH,0BAA0B,CACtB,IAAI,EACJ,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,IAAI,aAAa,CAC7B;QACD,sBAAsB,CAClB,IAAI,EACJ,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,SAAS,IAAI,aAAa,CAC7B;QACD,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,IAAI,aAAa,CAAC,CAC9G,CAAC;AACN,CAAC;AAED,SAAS,0BAA0B,CAC/B,IAAY,EACZ,iBAAoC,EACpC,YAA+B,EAC/B,sBAA0C,EAC1C,gBAAmC,EACnC,kBAAsC,EACtC,iBAAmC;IAEnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,0BAA0B,CACjC,IAAI,EACJ,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,CACpB,CAAC;AACN,CAAC;AAED,SAAS,sBAAsB,CAC3B,IAAY,EACZ,gBAAmC,EACnC,YAA+B,EAC/B,sBAA0C,EAC1C,iBAAmC;IAEnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,iBAAiB;QACpB,CAAC,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;QAC7G,CAAC,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,uBAAuB,CAC5B,IAAY,EACZ,iBAAqC,EACrC,eAAkC,EAClC,YAA+B,EAC/B,iBAAmC;IAEnC,IAAI,CAAC,iBAAiB,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,iBAAiB;YACpB,CAAC,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,CAAC;YACvG,CAAC,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjF,MAAM,kBAAkB,GAAG,IAAI,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,kBAAkB,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACJ,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QACD,OAAO,IAAI,sBAAsB,CAC7B,IAAI,EACJ,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,CACpB,CAAC;IACN,CAAC;IAED,OAAO,iBAAiB;QACpB,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,CAAC;QACnF,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAClC,IAAgB,EAChB,MAAkB,EAClB,MAAc,EACd,WAAmB,EACnB,mBAAiC;IAEjC,IAAI,sBAAsB,GAAgB,IAAI,CAAC;IAC/C,IAAI,gBAAgB,GAAe,IAAI,CAAC;IACxC,IAAI,kBAAkB,GAAgB,IAAI,CAAC;IAC3C,IAAI,iBAAiB,GAAe,IAAI,CAAC;IAEzC,IAAI,uBAAuB,GAAG,KAAK,CAAC;IACpC,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,QAAQ,cAAc,CAAC,kBAAkB,EAAE,CAAC;YACxC,KAAK,kBAAkB,CAAC,MAAM;gBAC1B,IAAI,UAAU,CAAC,UAAU,KAAK,cAAc,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;oBACxE,sBAAsB,GAAG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;gBAC5F,CAAC;qBAAM,CAAC;oBACJ,kBAAkB,GAAG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;gBACxF,CAAC;gBACD,MAAM;YACV,KAAK,kBAAkB,CAAC,IAAI;gBACxB,IACI,cAAc,CAAC,MAAM,KAAK,cAAc,CAAC,iBAAiB,CAAC,cAAc;oBACzE,cAAc,CAAC,MAAM,KAAK,cAAc,CAAC,iBAAiB,CAAC,cAAc,EAC3E,CAAC;oBACC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;oBACzF,uBAAuB,GAAG,IAAI,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACJ,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC9F,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBACtC,MAAM;QACd,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;IAChD,MAAM,uBAAuB,GAAG,EAAE,CAAC;IACnC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YAClB,uCAAuC;YACvC,SAAS;QACb,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACtF,IAAI,mBAAmB,EAAE,CAAC;YACtB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvC,yDAAyD;gBACzD,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBACrC,SAAS;YACb,CAAC;QACL,CAAC;QAED,IACI,UAAU,KAAK,CAAC;YAChB,UAAU,CAAC,IAAI,KAAK,aAAa;YACjC,UAAU,CAAC,WAAW,CAAC,YAAY,KAAK,UAAU,CAAC,MAAM,EAC3D,CAAC;YACC,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,EAAE,qBAAqB,CAAC,SAAS,EAAE,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACxH,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC;QAC3D,MAAM,UAAU,GAAG,WAAW,KAAK,WAAW,CAAC;QAC/C,MAAM,YAAY,GAAG,eAAe,CAChC,IAAI,EACJ,MAAM,EACN,oBAAoB,EACpB,KAAK,EACL,SAAS,EACT,UAAU,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,aAAa,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CACzF,CAAC;QAEF,uBAAuB,CAAC,CAAC,EAAE,CAAC,GAAG,iBAAiB;YAC5C,CAAC,CAAC,IAAI,0BAA0B,CAC1B,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,IAAI,SAAS,CAAC,aAAa,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAChE;YACH,CAAC,CAAC,IAAI,sBAAsB,CACtB,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,IAAI,SAAS,CAAC,aAAa,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAChE,CAAC;IACZ,CAAC;IAED,OAAO,uBAAuB,CAAC;AACnC,CAAC","sourcesContent":["import { decodeStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport { StringFlatVector } from \"../vector/flat/stringFlatVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport type IntWrapper from \"./intWrapper\";\nimport BitVector from \"../vector/flat/bitVector\";\nimport type Vector from \"../vector/vector\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { decodeIntStream, decodeLengthStreamToOffsetBuffer } from \"./integerStreamDecoder\";\nimport { type Column, ScalarType } from \"../metadata/tileset/tilesetMetadata\";\nimport { decodeVarintInt32 } from \"./integerDecodingUtils\";\nimport { decodeBooleanRle, skipColumn } from \"./decodingUtils\";\nimport { StringFsstDictionaryVector } from \"../vector/fsst-dictionary/stringFsstDictionaryVector\";\n\n\nexport function decodeString(\n name: string,\n data: Uint8Array,\n offset: IntWrapper,\n numStreams: number,\n bitVector?: BitVector,\n): Vector {\n let dictionaryLengthStream: Uint32Array = null;\n let offsetStream: Int32Array = null;\n let dictionaryStream: Uint8Array = null;\n let symbolLengthStream: Uint32Array = null;\n let symbolTableStream: Uint8Array = null;\n let presentStream: BitVector = null;\n let plainLengthStream: Uint32Array = null;\n let plainDataStream: Uint8Array = null;\n\n for (let i = 0; i < numStreams; i++) {\n const streamMetadata = decodeStreamMetadata(data, offset);\n if (streamMetadata.byteLength === 0) {\n continue;\n }\n\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.PRESENT: {\n const presentData = decodeBooleanRle(data, streamMetadata.numValues, streamMetadata.byteLength, offset);\n presentStream = new BitVector(presentData, streamMetadata.numValues);\n break;\n }\n case PhysicalStreamType.OFFSET: {\n const isNullable = bitVector != null || presentStream != null;\n const nullabilityBuffer = bitVector ?? presentStream;\n offsetStream = decodeIntStream(\n data,\n offset,\n streamMetadata,\n false,\n undefined,\n isNullable ? nullabilityBuffer : undefined,\n );\n break;\n }\n case PhysicalStreamType.LENGTH: {\n const ls = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryLengthStream = ls;\n } else if (LengthType.SYMBOL === streamMetadata.logicalStreamType.lengthType) {\n symbolLengthStream = ls;\n } else {\n // Plain string encoding uses VAR_BINARY length type\n plainLengthStream = ls;\n }\n break;\n }\n case PhysicalStreamType.DATA: {\n const ds = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n offset.add(streamMetadata.byteLength);\n const dictType = streamMetadata.logicalStreamType.dictionaryType;\n if (DictionaryType.FSST === dictType) {\n symbolTableStream = ds;\n } else if (DictionaryType.SINGLE === dictType || DictionaryType.SHARED === dictType) {\n dictionaryStream = ds;\n } else if (DictionaryType.NONE === dictType) {\n plainDataStream = ds;\n }\n break;\n }\n }\n }\n\n return (\n decodeFsstDictionaryVector(\n name,\n symbolTableStream,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n bitVector ?? presentStream,\n ) ??\n decodeDictionaryVector(\n name,\n dictionaryStream,\n offsetStream,\n dictionaryLengthStream,\n bitVector ?? presentStream,\n ) ??\n decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, bitVector ?? presentStream)\n );\n}\n\nfunction decodeFsstDictionaryVector(\n name: string,\n symbolTableStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Uint32Array | null,\n dictionaryStream: Uint8Array | null,\n symbolLengthStream: Uint32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!symbolTableStream) {\n return null;\n }\n return new StringFsstDictionaryVector(\n name,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n symbolTableStream,\n nullabilityBuffer,\n );\n}\n\nfunction decodeDictionaryVector(\n name: string,\n dictionaryStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Uint32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!dictionaryStream) {\n return null;\n }\n return nullabilityBuffer\n ? new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream, nullabilityBuffer)\n : new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream);\n}\n\nfunction decodePlainStringVector(\n name: string,\n plainLengthStream: Uint32Array | null,\n plainDataStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!plainLengthStream || !plainDataStream) {\n return null;\n }\n\n if (offsetStream) {\n return nullabilityBuffer\n ? new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream);\n }\n\n if (nullabilityBuffer && nullabilityBuffer.size() !== plainLengthStream.length - 1) {\n const sparseOffsetStream = new Int32Array(nullabilityBuffer.size());\n let valueIndex = 0;\n for (let i = 0; i < nullabilityBuffer.size(); i++) {\n if (nullabilityBuffer.get(i)) {\n sparseOffsetStream[i] = valueIndex++;\n } else {\n sparseOffsetStream[i] = 0;\n }\n }\n return new StringDictionaryVector(\n name,\n sparseOffsetStream,\n plainLengthStream,\n plainDataStream,\n nullabilityBuffer,\n );\n }\n\n return nullabilityBuffer\n ? new StringFlatVector(name, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringFlatVector(name, plainLengthStream, plainDataStream);\n}\n\nexport function decodeSharedDictionary(\n data: Uint8Array,\n offset: IntWrapper,\n column: Column,\n numFeatures: number,\n propertyColumnNames?: Set<string>,\n): Vector[] {\n let dictionaryOffsetBuffer: Uint32Array = null;\n let dictionaryBuffer: Uint8Array = null;\n let symbolOffsetBuffer: Uint32Array = null;\n let symbolTableBuffer: Uint8Array = null;\n\n let dictionaryStreamDecoded = false;\n while (!dictionaryStreamDecoded) {\n const streamMetadata = decodeStreamMetadata(data, offset);\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n } else {\n symbolOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n }\n break;\n case PhysicalStreamType.DATA:\n if (\n DictionaryType.SINGLE === streamMetadata.logicalStreamType.dictionaryType ||\n DictionaryType.SHARED === streamMetadata.logicalStreamType.dictionaryType\n ) {\n dictionaryBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n dictionaryStreamDecoded = true;\n } else {\n symbolTableBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n }\n offset.add(streamMetadata.byteLength);\n break;\n }\n }\n\n const childFields = column.complexType.children;\n const stringDictionaryVectors = [];\n let i = 0;\n for (const childField of childFields) {\n const numStreams = decodeVarintInt32(data, offset, 1)[0];\n if (numStreams == 0) {\n /* Column is not present in the tile */\n continue;\n }\n\n const columnName = childField.name ? `${column.name}${childField.name}` : column.name;\n if (propertyColumnNames) {\n if (!propertyColumnNames.has(columnName)) {\n //TODO: add size of sub column to Mlt for faster skipping\n skipColumn(numStreams, data, offset);\n continue;\n }\n }\n\n if (\n numStreams !== 2 ||\n childField.type !== \"scalarField\" ||\n childField.scalarField.physicalType !== ScalarType.STRING\n ) {\n throw new Error(\"Currently only optional string fields are implemented for a struct.\");\n }\n\n const presentStreamMetadata = decodeStreamMetadata(data, offset);\n const presentStream = decodeBooleanRle(data, presentStreamMetadata.numValues, presentStreamMetadata.byteLength, offset);\n const offsetStreamMetadata = decodeStreamMetadata(data, offset);\n const offsetCount = offsetStreamMetadata.decompressedCount;\n const isNullable = offsetCount !== numFeatures;\n const offsetStream = decodeIntStream(\n data,\n offset,\n offsetStreamMetadata,\n false,\n undefined,\n isNullable ? new BitVector(presentStream, presentStreamMetadata.numValues) : undefined,\n );\n\n stringDictionaryVectors[i++] = symbolTableBuffer\n ? new StringFsstDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n symbolOffsetBuffer,\n symbolTableBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n )\n : new StringDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n );\n }\n\n return stringDictionaryVectors;\n}\n"]}
@@ -213,7 +213,7 @@ describe("decodeSharedDictionary", () => {
213
213
  const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);
214
214
  const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);
215
215
  const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);
216
- const columnMetaencodedStrings = createColumnMetadataForStruct("address", [{ name: "street" }]);
216
+ const columnMetaencodedStrings = createColumnMetadataForStruct("address:", [{ name: "street" }]);
217
217
  const result = decodeSharedDictionary(completeencodedStrings, new IntWrapper(0), columnMetaencodedStrings, 4);
218
218
  expect(result).toHaveLength(1);
219
219
  expect(result[0]).toBeInstanceOf(StringDictionaryVector);
@@ -260,7 +260,7 @@ describe("decodeSharedDictionary", () => {
260
260
  const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);
261
261
  const fieldStreams = encodeStructField([0, 2], [true, false, true, false]);
262
262
  const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);
263
- const columnMetaencodedStrings = createColumnMetadataForStruct("colors", [{ name: "primary" }]);
263
+ const columnMetaencodedStrings = createColumnMetadataForStruct("colors:", [{ name: "primary" }]);
264
264
  const result = decodeSharedDictionary(completeencodedStrings, new IntWrapper(0), columnMetaencodedStrings, 4);
265
265
  expect(result).toHaveLength(1);
266
266
  const expected = ["red", null, "blue", null];
@@ -274,7 +274,7 @@ describe("decodeSharedDictionary", () => {
274
274
  // Simulating implicit nullability by mismatched counts
275
275
  const fieldStreams = encodeStructField([0, 1], [true, false, false, true]);
276
276
  const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);
277
- const columnMetaencodedStrings = createColumnMetadataForStruct("greek", [{ name: "letter" }]);
277
+ const columnMetaencodedStrings = createColumnMetadataForStruct("greek:", [{ name: "letter" }]);
278
278
  const result = decodeSharedDictionary(completeencodedStrings, new IntWrapper(0), columnMetaencodedStrings, 4);
279
279
  expect(result).toHaveLength(1);
280
280
  const expected = ["alpha", null, null, "beta"];
@@ -289,7 +289,7 @@ describe("decodeSharedDictionary", () => {
289
289
  const { lengthStream, dataStream, symbolLengthStream, symbolDataStream } = encodeSharedDictionary(dictionaryStrings, { useFsst: true });
290
290
  const fieldStreams = encodeStructField([0, 1], [true, true]);
291
291
  const completeencodedStrings = concatenateBuffers(lengthStream, symbolLengthStream, symbolDataStream, dataStream, fieldStreams);
292
- const columnMetaencodedStrings = createColumnMetadataForStruct("encodedStrings", [{ name: "value" }]);
292
+ const columnMetaencodedStrings = createColumnMetadataForStruct("encodedStrings:", [{ name: "value" }]);
293
293
  const result = decodeSharedDictionary(completeencodedStrings, new IntWrapper(0), columnMetaencodedStrings, 2);
294
294
  expect(result).toHaveLength(1);
295
295
  expect(result[0]).toBeInstanceOf(StringFsstDictionaryVector);
@@ -304,7 +304,7 @@ describe("decodeSharedDictionary", () => {
304
304
  const field2Streams = encodeStructField([1], [true]);
305
305
  const field3Streams = encodeStructField([0], [true]);
306
306
  const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, field1Streams, field2Streams, field3Streams);
307
- const columnMetaencodedStrings = createColumnMetadataForStruct("multi", [
307
+ const columnMetaencodedStrings = createColumnMetadataForStruct("multi:", [
308
308
  { name: "field1" },
309
309
  { name: "field2" },
310
310
  { name: "field3" },
@@ -322,7 +322,7 @@ describe("decodeSharedDictionary", () => {
322
322
  const field2Streams = encodeStructField([], [], false); // numStreams=0
323
323
  const field3Streams = encodeStructField([0], [true], true);
324
324
  const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, field1Streams, field2Streams, field3Streams);
325
- const columnMetaencodedStrings = createColumnMetadataForStruct("test", [
325
+ const columnMetaencodedStrings = createColumnMetadataForStruct("test:", [
326
326
  { name: "field1" },
327
327
  { name: "field2" },
328
328
  { name: "field3" },
@@ -339,7 +339,7 @@ describe("decodeSharedDictionary", () => {
339
339
  const field2Streams = encodeStructField([], [], false);
340
340
  const field3Streams = encodeStructField([0], [true], true);
341
341
  const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, field1Streams, field2Streams, field3Streams);
342
- const columnMetaencodedStrings = createColumnMetadataForStruct("mixed", [
342
+ const columnMetaencodedStrings = createColumnMetadataForStruct("mixed:", [
343
343
  { name: "field1" },
344
344
  { name: "field2" },
345
345
  { name: "field3" },
@@ -1 +1 @@
1
- {"version":3,"file":"stringDecoder.spec.js","sourceRoot":"","sources":["../../src/decoding/stringDecoder.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport IntWrapper from \"./intWrapper\";\nimport { decodeString, decodeSharedDictionary } from \"./stringDecoder\";\nimport { encodePlainStrings, encodeDictionaryStrings } from \"../encoding/stringEncoder\";\nimport {\n concatenateBuffers,\n createColumnMetadataForStruct,\n createStream,\n encodeFsstStrings,\n encodeSharedDictionary,\n encodeStructField,\n} from \"./decodingTestUtils\";\nimport { StringFlatVector } from \"../vector/flat/stringFlatVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport { StringFsstDictionaryVector } from \"../vector/fsst-dictionary/stringFsstDictionaryVector\";\nimport { ScalarType } from \"../metadata/tileset/tilesetMetadata\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { LogicalStreamType } from \"../metadata/tile/logicalStreamType\";\n\ndescribe(\"decodeString - Plain String Decoder\", () => {\n it(\"should decode plain strings with simple ASCII values\", () => {\n const expectedStrings = [\"hello\", \"world\", \"test\"];\n const encodedStrings = encodePlainStrings(expectedStrings);\n const offset = new IntWrapper(0);\n\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n expect(result).toBeInstanceOf(StringFlatVector);\n const resultVec = result as StringFlatVector;\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode plain strings with varying lengths\", () => {\n const expectedStrings = [\"a\", \"abc\", \"hello world\"];\n const encodedStrings = encodePlainStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n const resultVec = result as StringFlatVector;\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode plain strings with empty strings\", () => {\n const expectedStrings = [\"\", \"encodedStrings\", \"\", \"more\"];\n const encodedStrings = encodePlainStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n expect(result).toBeInstanceOf(StringFlatVector);\n const resultVec = result as StringFlatVector;\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode mixed null and empty strings\", () => {\n const expectedStrings = [null, \"\", \"encodedStrings\", null, \"\"];\n const encodedStrings = encodePlainStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).not.toBeNull();\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(result.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode mixed ASCII and UTF-8 strings\", () => {\n const expectedStrings = [\"hello\", \"Привет\", \"world\", \"日本\"];\n const encodedStrings = encodePlainStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n expect(result).toBeInstanceOf(StringFlatVector);\n const resultVec = result as StringFlatVector;\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n});\n\ndescribe(\"decodeString - Dictionary String Decoder\", () => {\n it(\"should decode dictionary-compressed strings with repeated values\", () => {\n const expectedStrings = [\"cat\", \"dog\", \"cat\", \"cat\", \"dog\"];\n const encodedStrings = encodeDictionaryStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).toBeInstanceOf(StringDictionaryVector);\n const resultVec = result as StringDictionaryVector;\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode dictionary with single repeated string\", () => {\n const expectedStrings = [\"same\", \"same\", \"same\"];\n const encodedStrings = encodeDictionaryStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).toBeInstanceOf(StringDictionaryVector);\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(result.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode dictionary with UTF-8 strings\", () => {\n const expectedStrings = [\"café\", \"日本\", \"café\", \"日本\"];\n const encodedStrings = encodeDictionaryStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).toBeInstanceOf(StringDictionaryVector);\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(result.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode dictionary with all unique strings\", () => {\n const expectedStrings = [\"unique1\", \"unique2\", \"unique3\", \"unique4\"];\n const encodedStrings = encodeDictionaryStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).toBeInstanceOf(StringDictionaryVector);\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(result.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode nullable dictionary strings\", () => {\n const expectedStrings = [null, \"\", \"encodedStrings\", \"\", null];\n const encodedStrings = encodeDictionaryStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 4);\n\n expect(result).toBeInstanceOf(StringDictionaryVector);\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(result.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n});\n\ndescribe(\"decodeString - FSST Dictionary Decoder (Basic Coverage)\", () => {\n it(\"should decode FSST-compressed strings with simple symbol table\", () => {\n const encodedStrings = encodeFsstStrings();\n const offset = new IntWrapper(0);\n\n const result = decodeString(\"testColumn\", encodedStrings, offset, 6);\n\n expect(result).toBeInstanceOf(StringFsstDictionaryVector);\n const resultVec = result as StringFsstDictionaryVector;\n\n const expectedValues = [\"cat\", \"dog\", \"cat\"];\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n});\n\ndescribe(\"decodeString - Empty Column Edge Cases\", () => {\n it(\"should handle empty column with numStreams = 0 (returns null)\", () => {\n const fullStream = new Uint8Array([]);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", fullStream, offset, 0);\n expect(result).toBeNull();\n });\n\n it(\"should handle column with all zero-length streams (returns null)\", () => {\n const emptyStream = createStream(PhysicalStreamType.LENGTH, new Uint8Array([]), {\n logical: new LogicalStreamType(undefined, undefined, LengthType.VAR_BINARY),\n });\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", emptyStream, offset, 1);\n expect(result).toBeNull();\n });\n\n it(\"should handle single value plain string column\", () => {\n const strings = [\"single\"];\n const encodedStrings = encodePlainStrings(strings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n expect(result).toBeInstanceOf(StringFlatVector);\n expect((result as StringFlatVector).getValue(0)).toBe(\"single\");\n });\n\n it(\"should handle single null value in plain string column (returns null)\", () => {\n const strings = [null];\n const encodedStrings = encodePlainStrings(strings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n expect(result).toBeNull();\n });\n});\n\ndescribe(\"decodeString - Integration Tests\", () => {\n it(\"should correctly track offset through multiple streams\", () => {\n const strings = [\"hello\", \"world\"];\n const encodedStrings = encodePlainStrings(strings);\n const offset = new IntWrapper(0);\n const initialOffset = offset.get();\n\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n expect(result).toBeInstanceOf(StringFlatVector);\n expect(offset.get()).toBeGreaterThan(initialOffset);\n expect(offset.get()).toBe(encodedStrings.length);\n });\n\n it(\"should correctly track offset through nullable streams\", () => {\n const strings = [\"test\", null, \"encodedStrings\"];\n const encodedStrings = encodePlainStrings(strings);\n const offset = new IntWrapper(0);\n const initialOffset = offset.get();\n\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).not.toBeNull();\n expect(offset.get()).toBeGreaterThan(initialOffset);\n expect(offset.get()).toBe(encodedStrings.length);\n });\n\n it(\"should correctly track offset through FSST dictionary streams\", () => {\n const encodedStrings = encodeFsstStrings();\n const offset = new IntWrapper(0);\n const initialOffset = offset.get();\n\n const result = decodeString(\"testColumn\", encodedStrings, offset, 6);\n\n expect(result).toBeInstanceOf(StringFsstDictionaryVector);\n expect(offset.get()).toBeGreaterThan(initialOffset);\n expect(offset.get()).toBe(encodedStrings.length);\n });\n\n it(\"should handle consecutive decoding operations with shared offset tracker\", () => {\n const stream1 = encodePlainStrings([\"first\"]);\n const stream2 = encodePlainStrings([\"second\"]);\n const combinedStream = concatenateBuffers(stream1, stream2);\n\n const offset = new IntWrapper(0);\n\n const result1 = decodeString(\"column1\", combinedStream, offset, 2);\n expect((result1 as StringFlatVector).getValue(0)).toBe(\"first\");\n\n const offsetAfterFirst = offset.get();\n\n const result2 = decodeString(\"column2\", combinedStream, offset, 2);\n expect((result2 as StringFlatVector).getValue(0)).toBe(\"second\");\n\n expect(offset.get()).toBeGreaterThan(offsetAfterFirst);\n expect(offset.get()).toBe(combinedStream.length);\n });\n});\n\ndescribe(\"decodeSharedDictionary\", () => {\n describe(\"basic functionality\", () => {\n it(\"should decode single field with shared dictionary\", () => {\n const dictionaryStrings = [\"apple\", \"banana\", \"peach\", \"date\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"address\", [{ name: \"street\" }]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 4,\n );\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(StringDictionaryVector);\n expect(result[0].name).toBe(\"address:street\");\n for (let i = 0; i < dictionaryStrings.length; i++) {\n expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);\n }\n });\n\n it(\"should handle empty child field name (common prefix stripped)\", () => {\n const dictionaryStrings = [\"Berlin\", \"London\", \"Paris\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const fieldStreams = encodeStructField([0, 1, 2], [true, true, true]);\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"name\", [{ name: \"\" }]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 3,\n );\n\n expect(result).toHaveLength(1);\n expect(result[0].name).toBe(\"name\");\n for (let i = 0; i < dictionaryStrings.length; i++) {\n expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);\n }\n });\n\n it(\"should handle mix of empty and delimited child names\", () => {\n const dict = [\"value1\", \"value2\", \"value3\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dict);\n\n const field1 = encodeStructField([0], [true]);\n const field2 = encodeStructField([1], [true]);\n const field3 = encodeStructField([2], [true]);\n\n const complete = concatenateBuffers(lengthStream, dataStream, field1, field2, field3);\n const metadata = createColumnMetadataForStruct(\"name\", [\n { name: \"\" },\n { name: \":en\" },\n { name: \":de\" },\n ]);\n\n const result = decodeSharedDictionary(complete, new IntWrapper(0), metadata, 1);\n\n expect(result).toHaveLength(3);\n expect(result[0].name).toBe(\"name\");\n expect(result[1].name).toBe(\"name:en\");\n expect(result[2].name).toBe(\"name:de\");\n });\n });\n\n describe(\"nullability\", () => {\n it(\"should handle nullable fields with PRESENT stream\", () => {\n const dictionaryStrings = [\"red\", \"green\", \"blue\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const fieldStreams = encodeStructField([0, 2], [true, false, true, false]);\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"colors\", [{ name: \"primary\" }]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 4,\n );\n\n expect(result).toHaveLength(1);\n const expected = [\"red\", null, \"blue\", null];\n for (let i = 0; i < expected.length; i++) {\n expect(result[0].getValue(i)).toBe(expected[i]);\n }\n });\n\n it(\"should detect nullable fields when offsetCount < numFeatures\", () => {\n const dictionaryStrings = [\"alpha\", \"beta\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n // Simulating implicit nullability by mismatched counts\n const fieldStreams = encodeStructField([0, 1], [true, false, false, true]);\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"greek\", [{ name: \"letter\" }]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 4,\n );\n\n expect(result).toHaveLength(1);\n const expected = [\"alpha\", null, null, \"beta\"];\n for (let i = 0; i < expected.length; i++) {\n expect(result[0].getValue(i)).toBe(expected[i]);\n }\n });\n });\n\n describe(\"FSST encoding\", () => {\n it(\"should decode FSST-compressed shared dictionary\", () => {\n const dictionaryStrings = [\"compressed1\", \"compressed2\"];\n const { lengthStream, dataStream, symbolLengthStream, symbolDataStream } = encodeSharedDictionary(\n dictionaryStrings,\n { useFsst: true },\n );\n\n const fieldStreams = encodeStructField([0, 1], [true, true]);\n const completeencodedStrings = concatenateBuffers(\n lengthStream,\n symbolLengthStream,\n symbolDataStream,\n dataStream,\n fieldStreams,\n );\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"encodedStrings\", [{ name: \"value\" }]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 2,\n );\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(StringFsstDictionaryVector);\n expect(result[0].name).toBe(\"encodedStrings:value\");\n });\n });\n\n describe(\"field filtering\", () => {\n it(\"should filter fields by propertyColumnNames\", () => {\n const dictionaryStrings = [\"val1\", \"val2\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const field1Streams = encodeStructField([0], [true]);\n const field2Streams = encodeStructField([1], [true]);\n const field3Streams = encodeStructField([0], [true]);\n\n const completeencodedStrings = concatenateBuffers(\n lengthStream,\n dataStream,\n field1Streams,\n field2Streams,\n field3Streams,\n );\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"multi\", [\n { name: \"field1\" },\n { name: \"field2\" },\n { name: \"field3\" },\n ]);\n\n const propertyColumnNames = new Set([\"multi:field1\", \"multi:field3\"]);\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 1,\n propertyColumnNames,\n );\n\n expect(result).toHaveLength(2);\n expect(result[0].name).toBe(\"multi:field1\");\n expect(result[1].name).toBe(\"multi:field3\");\n });\n\n it(\"should skip fields with numStreams=0\", () => {\n const dictionaryStrings = [\"present\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const field1Streams = encodeStructField([0], [true], true);\n const field2Streams = encodeStructField([], [], false); // numStreams=0\n const field3Streams = encodeStructField([0], [true], true);\n\n const completeencodedStrings = concatenateBuffers(\n lengthStream,\n dataStream,\n field1Streams,\n field2Streams,\n field3Streams,\n );\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"test\", [\n { name: \"field1\" },\n { name: \"field2\" },\n { name: \"field3\" },\n ]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 1,\n );\n\n expect(result).toHaveLength(2);\n expect(result[0].name).toBe(\"test:field1\");\n expect(result[1].name).toBe(\"test:field3\");\n });\n\n it(\"should handle mixed present and filtered fields\", () => {\n const dictionaryStrings = [\"encodedStrings\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const field1Streams = encodeStructField([0], [true], true);\n const field2Streams = encodeStructField([], [], false);\n const field3Streams = encodeStructField([0], [true], true);\n\n const completeencodedStrings = concatenateBuffers(\n lengthStream,\n dataStream,\n field1Streams,\n field2Streams,\n field3Streams,\n );\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"mixed\", [\n { name: \"field1\" },\n { name: \"field2\" },\n { name: \"field3\" },\n ]);\n\n const propertyColumnNames = new Set([\"mixed:field3\"]);\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 1,\n propertyColumnNames,\n );\n\n expect(result).toHaveLength(1);\n expect(result[0].name).toBe(\"mixed:field3\");\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should throw error for non-string field types\", () => {\n const dictionaryStrings = [\"value\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n const fieldStreams = encodeStructField([0], [true]);\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"invalid\", [\n { name: \"field1\", type: ScalarType.INT_32 },\n ]);\n\n expect(() => {\n decodeSharedDictionary(completeencodedStrings, new IntWrapper(0), columnMetaencodedStrings, 1);\n }).toThrow(\"Currently only optional string fields are implemented for a struct.\");\n });\n });\n\n describe(\"offset tracking\", () => {\n it(\"should correctly advance offset through all streams\", () => {\n const dictionaryStrings = [\"a\", \"b\", \"c\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const field1Streams = encodeStructField([0, 1], [true, true]);\n const field2Streams = encodeStructField([1, 2], [true, true]);\n\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, field1Streams, field2Streams);\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"track\", [\n { name: \"field1\" },\n { name: \"field2\" },\n ]);\n\n const offset = new IntWrapper(0);\n const initialOffset = offset.get();\n const result = decodeSharedDictionary(completeencodedStrings, offset, columnMetaencodedStrings, 2);\n\n expect(result).toHaveLength(2);\n expect(offset.get()).toBeGreaterThan(initialOffset);\n expect(offset.get()).toBe(completeencodedStrings.length);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"stringDecoder.spec.js","sourceRoot":"","sources":["../../src/decoding/stringDecoder.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport IntWrapper from \"./intWrapper\";\nimport { decodeString, decodeSharedDictionary } from \"./stringDecoder\";\nimport { encodePlainStrings, encodeDictionaryStrings } from \"../encoding/stringEncoder\";\nimport {\n concatenateBuffers,\n createColumnMetadataForStruct,\n createStream,\n encodeFsstStrings,\n encodeSharedDictionary,\n encodeStructField,\n} from \"./decodingTestUtils\";\nimport { StringFlatVector } from \"../vector/flat/stringFlatVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport { StringFsstDictionaryVector } from \"../vector/fsst-dictionary/stringFsstDictionaryVector\";\nimport { ScalarType } from \"../metadata/tileset/tilesetMetadata\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { LogicalStreamType } from \"../metadata/tile/logicalStreamType\";\n\ndescribe(\"decodeString - Plain String Decoder\", () => {\n it(\"should decode plain strings with simple ASCII values\", () => {\n const expectedStrings = [\"hello\", \"world\", \"test\"];\n const encodedStrings = encodePlainStrings(expectedStrings);\n const offset = new IntWrapper(0);\n\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n expect(result).toBeInstanceOf(StringFlatVector);\n const resultVec = result as StringFlatVector;\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode plain strings with varying lengths\", () => {\n const expectedStrings = [\"a\", \"abc\", \"hello world\"];\n const encodedStrings = encodePlainStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n const resultVec = result as StringFlatVector;\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode plain strings with empty strings\", () => {\n const expectedStrings = [\"\", \"encodedStrings\", \"\", \"more\"];\n const encodedStrings = encodePlainStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n expect(result).toBeInstanceOf(StringFlatVector);\n const resultVec = result as StringFlatVector;\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode mixed null and empty strings\", () => {\n const expectedStrings = [null, \"\", \"encodedStrings\", null, \"\"];\n const encodedStrings = encodePlainStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).not.toBeNull();\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(result.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode mixed ASCII and UTF-8 strings\", () => {\n const expectedStrings = [\"hello\", \"Привет\", \"world\", \"日本\"];\n const encodedStrings = encodePlainStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n expect(result).toBeInstanceOf(StringFlatVector);\n const resultVec = result as StringFlatVector;\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n});\n\ndescribe(\"decodeString - Dictionary String Decoder\", () => {\n it(\"should decode dictionary-compressed strings with repeated values\", () => {\n const expectedStrings = [\"cat\", \"dog\", \"cat\", \"cat\", \"dog\"];\n const encodedStrings = encodeDictionaryStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).toBeInstanceOf(StringDictionaryVector);\n const resultVec = result as StringDictionaryVector;\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode dictionary with single repeated string\", () => {\n const expectedStrings = [\"same\", \"same\", \"same\"];\n const encodedStrings = encodeDictionaryStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).toBeInstanceOf(StringDictionaryVector);\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(result.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode dictionary with UTF-8 strings\", () => {\n const expectedStrings = [\"café\", \"日本\", \"café\", \"日本\"];\n const encodedStrings = encodeDictionaryStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).toBeInstanceOf(StringDictionaryVector);\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(result.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode dictionary with all unique strings\", () => {\n const expectedStrings = [\"unique1\", \"unique2\", \"unique3\", \"unique4\"];\n const encodedStrings = encodeDictionaryStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).toBeInstanceOf(StringDictionaryVector);\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(result.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n\n it(\"should decode nullable dictionary strings\", () => {\n const expectedStrings = [null, \"\", \"encodedStrings\", \"\", null];\n const encodedStrings = encodeDictionaryStrings(expectedStrings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 4);\n\n expect(result).toBeInstanceOf(StringDictionaryVector);\n for (let i = 0; i < expectedStrings.length; i++) {\n expect(result.getValue(i)).toBe(expectedStrings[i]);\n }\n });\n});\n\ndescribe(\"decodeString - FSST Dictionary Decoder (Basic Coverage)\", () => {\n it(\"should decode FSST-compressed strings with simple symbol table\", () => {\n const encodedStrings = encodeFsstStrings();\n const offset = new IntWrapper(0);\n\n const result = decodeString(\"testColumn\", encodedStrings, offset, 6);\n\n expect(result).toBeInstanceOf(StringFsstDictionaryVector);\n const resultVec = result as StringFsstDictionaryVector;\n\n const expectedValues = [\"cat\", \"dog\", \"cat\"];\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n});\n\ndescribe(\"decodeString - Empty Column Edge Cases\", () => {\n it(\"should handle empty column with numStreams = 0 (returns null)\", () => {\n const fullStream = new Uint8Array([]);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", fullStream, offset, 0);\n expect(result).toBeNull();\n });\n\n it(\"should handle column with all zero-length streams (returns null)\", () => {\n const emptyStream = createStream(PhysicalStreamType.LENGTH, new Uint8Array([]), {\n logical: new LogicalStreamType(undefined, undefined, LengthType.VAR_BINARY),\n });\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", emptyStream, offset, 1);\n expect(result).toBeNull();\n });\n\n it(\"should handle single value plain string column\", () => {\n const strings = [\"single\"];\n const encodedStrings = encodePlainStrings(strings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n expect(result).toBeInstanceOf(StringFlatVector);\n expect((result as StringFlatVector).getValue(0)).toBe(\"single\");\n });\n\n it(\"should handle single null value in plain string column (returns null)\", () => {\n const strings = [null];\n const encodedStrings = encodePlainStrings(strings);\n const offset = new IntWrapper(0);\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n expect(result).toBeNull();\n });\n});\n\ndescribe(\"decodeString - Integration Tests\", () => {\n it(\"should correctly track offset through multiple streams\", () => {\n const strings = [\"hello\", \"world\"];\n const encodedStrings = encodePlainStrings(strings);\n const offset = new IntWrapper(0);\n const initialOffset = offset.get();\n\n const result = decodeString(\"testColumn\", encodedStrings, offset, 2);\n\n expect(result).toBeInstanceOf(StringFlatVector);\n expect(offset.get()).toBeGreaterThan(initialOffset);\n expect(offset.get()).toBe(encodedStrings.length);\n });\n\n it(\"should correctly track offset through nullable streams\", () => {\n const strings = [\"test\", null, \"encodedStrings\"];\n const encodedStrings = encodePlainStrings(strings);\n const offset = new IntWrapper(0);\n const initialOffset = offset.get();\n\n const result = decodeString(\"testColumn\", encodedStrings, offset, 3);\n\n expect(result).not.toBeNull();\n expect(offset.get()).toBeGreaterThan(initialOffset);\n expect(offset.get()).toBe(encodedStrings.length);\n });\n\n it(\"should correctly track offset through FSST dictionary streams\", () => {\n const encodedStrings = encodeFsstStrings();\n const offset = new IntWrapper(0);\n const initialOffset = offset.get();\n\n const result = decodeString(\"testColumn\", encodedStrings, offset, 6);\n\n expect(result).toBeInstanceOf(StringFsstDictionaryVector);\n expect(offset.get()).toBeGreaterThan(initialOffset);\n expect(offset.get()).toBe(encodedStrings.length);\n });\n\n it(\"should handle consecutive decoding operations with shared offset tracker\", () => {\n const stream1 = encodePlainStrings([\"first\"]);\n const stream2 = encodePlainStrings([\"second\"]);\n const combinedStream = concatenateBuffers(stream1, stream2);\n\n const offset = new IntWrapper(0);\n\n const result1 = decodeString(\"column1\", combinedStream, offset, 2);\n expect((result1 as StringFlatVector).getValue(0)).toBe(\"first\");\n\n const offsetAfterFirst = offset.get();\n\n const result2 = decodeString(\"column2\", combinedStream, offset, 2);\n expect((result2 as StringFlatVector).getValue(0)).toBe(\"second\");\n\n expect(offset.get()).toBeGreaterThan(offsetAfterFirst);\n expect(offset.get()).toBe(combinedStream.length);\n });\n});\n\ndescribe(\"decodeSharedDictionary\", () => {\n describe(\"basic functionality\", () => {\n it(\"should decode single field with shared dictionary\", () => {\n const dictionaryStrings = [\"apple\", \"banana\", \"peach\", \"date\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"address:\", [{ name: \"street\" }]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 4,\n );\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(StringDictionaryVector);\n expect(result[0].name).toBe(\"address:street\");\n for (let i = 0; i < dictionaryStrings.length; i++) {\n expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);\n }\n });\n\n it(\"should handle empty child field name (common prefix stripped)\", () => {\n const dictionaryStrings = [\"Berlin\", \"London\", \"Paris\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const fieldStreams = encodeStructField([0, 1, 2], [true, true, true]);\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"name\", [{ name: \"\" }]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 3,\n );\n\n expect(result).toHaveLength(1);\n expect(result[0].name).toBe(\"name\");\n for (let i = 0; i < dictionaryStrings.length; i++) {\n expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);\n }\n });\n\n it(\"should handle mix of empty and delimited child names\", () => {\n const dict = [\"value1\", \"value2\", \"value3\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dict);\n\n const field1 = encodeStructField([0], [true]);\n const field2 = encodeStructField([1], [true]);\n const field3 = encodeStructField([2], [true]);\n\n const complete = concatenateBuffers(lengthStream, dataStream, field1, field2, field3);\n const metadata = createColumnMetadataForStruct(\"name\", [\n { name: \"\" },\n { name: \":en\" },\n { name: \":de\" },\n ]);\n\n const result = decodeSharedDictionary(complete, new IntWrapper(0), metadata, 1);\n\n expect(result).toHaveLength(3);\n expect(result[0].name).toBe(\"name\");\n expect(result[1].name).toBe(\"name:en\");\n expect(result[2].name).toBe(\"name:de\");\n });\n });\n\n describe(\"nullability\", () => {\n it(\"should handle nullable fields with PRESENT stream\", () => {\n const dictionaryStrings = [\"red\", \"green\", \"blue\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const fieldStreams = encodeStructField([0, 2], [true, false, true, false]);\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"colors:\", [{ name: \"primary\" }]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 4,\n );\n\n expect(result).toHaveLength(1);\n const expected = [\"red\", null, \"blue\", null];\n for (let i = 0; i < expected.length; i++) {\n expect(result[0].getValue(i)).toBe(expected[i]);\n }\n });\n\n it(\"should detect nullable fields when offsetCount < numFeatures\", () => {\n const dictionaryStrings = [\"alpha\", \"beta\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n // Simulating implicit nullability by mismatched counts\n const fieldStreams = encodeStructField([0, 1], [true, false, false, true]);\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"greek:\", [{ name: \"letter\" }]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 4,\n );\n\n expect(result).toHaveLength(1);\n const expected = [\"alpha\", null, null, \"beta\"];\n for (let i = 0; i < expected.length; i++) {\n expect(result[0].getValue(i)).toBe(expected[i]);\n }\n });\n });\n\n describe(\"FSST encoding\", () => {\n it(\"should decode FSST-compressed shared dictionary\", () => {\n const dictionaryStrings = [\"compressed1\", \"compressed2\"];\n const { lengthStream, dataStream, symbolLengthStream, symbolDataStream } = encodeSharedDictionary(\n dictionaryStrings,\n { useFsst: true },\n );\n\n const fieldStreams = encodeStructField([0, 1], [true, true]);\n const completeencodedStrings = concatenateBuffers(\n lengthStream,\n symbolLengthStream,\n symbolDataStream,\n dataStream,\n fieldStreams,\n );\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"encodedStrings:\", [{ name: \"value\" }]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 2,\n );\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(StringFsstDictionaryVector);\n expect(result[0].name).toBe(\"encodedStrings:value\");\n });\n });\n\n describe(\"field filtering\", () => {\n it(\"should filter fields by propertyColumnNames\", () => {\n const dictionaryStrings = [\"val1\", \"val2\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const field1Streams = encodeStructField([0], [true]);\n const field2Streams = encodeStructField([1], [true]);\n const field3Streams = encodeStructField([0], [true]);\n\n const completeencodedStrings = concatenateBuffers(\n lengthStream,\n dataStream,\n field1Streams,\n field2Streams,\n field3Streams,\n );\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"multi:\", [\n { name: \"field1\" },\n { name: \"field2\" },\n { name: \"field3\" },\n ]);\n\n const propertyColumnNames = new Set([\"multi:field1\", \"multi:field3\"]);\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 1,\n propertyColumnNames,\n );\n\n expect(result).toHaveLength(2);\n expect(result[0].name).toBe(\"multi:field1\");\n expect(result[1].name).toBe(\"multi:field3\");\n });\n\n it(\"should skip fields with numStreams=0\", () => {\n const dictionaryStrings = [\"present\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const field1Streams = encodeStructField([0], [true], true);\n const field2Streams = encodeStructField([], [], false); // numStreams=0\n const field3Streams = encodeStructField([0], [true], true);\n\n const completeencodedStrings = concatenateBuffers(\n lengthStream,\n dataStream,\n field1Streams,\n field2Streams,\n field3Streams,\n );\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"test:\", [\n { name: \"field1\" },\n { name: \"field2\" },\n { name: \"field3\" },\n ]);\n\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 1,\n );\n\n expect(result).toHaveLength(2);\n expect(result[0].name).toBe(\"test:field1\");\n expect(result[1].name).toBe(\"test:field3\");\n });\n\n it(\"should handle mixed present and filtered fields\", () => {\n const dictionaryStrings = [\"encodedStrings\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const field1Streams = encodeStructField([0], [true], true);\n const field2Streams = encodeStructField([], [], false);\n const field3Streams = encodeStructField([0], [true], true);\n\n const completeencodedStrings = concatenateBuffers(\n lengthStream,\n dataStream,\n field1Streams,\n field2Streams,\n field3Streams,\n );\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"mixed:\", [\n { name: \"field1\" },\n { name: \"field2\" },\n { name: \"field3\" },\n ]);\n\n const propertyColumnNames = new Set([\"mixed:field3\"]);\n const result = decodeSharedDictionary(\n completeencodedStrings,\n new IntWrapper(0),\n columnMetaencodedStrings,\n 1,\n propertyColumnNames,\n );\n\n expect(result).toHaveLength(1);\n expect(result[0].name).toBe(\"mixed:field3\");\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should throw error for non-string field types\", () => {\n const dictionaryStrings = [\"value\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n const fieldStreams = encodeStructField([0], [true]);\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"invalid\", [\n { name: \"field1\", type: ScalarType.INT_32 },\n ]);\n\n expect(() => {\n decodeSharedDictionary(completeencodedStrings, new IntWrapper(0), columnMetaencodedStrings, 1);\n }).toThrow(\"Currently only optional string fields are implemented for a struct.\");\n });\n });\n\n describe(\"offset tracking\", () => {\n it(\"should correctly advance offset through all streams\", () => {\n const dictionaryStrings = [\"a\", \"b\", \"c\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n\n const field1Streams = encodeStructField([0, 1], [true, true]);\n const field2Streams = encodeStructField([1, 2], [true, true]);\n\n const completeencodedStrings = concatenateBuffers(lengthStream, dataStream, field1Streams, field2Streams);\n const columnMetaencodedStrings = createColumnMetadataForStruct(\"track\", [\n { name: \"field1\" },\n { name: \"field2\" },\n ]);\n\n const offset = new IntWrapper(0);\n const initialOffset = offset.get();\n const result = decodeSharedDictionary(completeencodedStrings, offset, columnMetaencodedStrings, 2);\n\n expect(result).toHaveLength(2);\n expect(offset.get()).toBeGreaterThan(initialOffset);\n expect(offset.get()).toBe(completeencodedStrings.length);\n });\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maplibre/mlt",
3
- "version": "1.1.5",
3
+ "version": "1.1.6",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [