@maplibre/mlt 1.1.1 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/decoding/decodingTestUtils.d.ts +75 -0
- package/dist/decoding/decodingTestUtils.js +285 -0
- package/dist/decoding/decodingTestUtils.js.map +1 -0
- package/dist/decoding/decodingUtils.d.ts +5 -8
- package/dist/decoding/decodingUtils.js +24 -51
- package/dist/decoding/decodingUtils.js.map +1 -1
- package/dist/decoding/decodingUtils.spec.js +85 -69
- package/dist/decoding/decodingUtils.spec.js.map +1 -1
- package/dist/decoding/fsstDecoder.spec.js +52 -35
- package/dist/decoding/fsstDecoder.spec.js.map +1 -1
- package/dist/decoding/geometryDecoder.js +49 -38
- package/dist/decoding/geometryDecoder.js.map +1 -1
- package/dist/decoding/integerDecodingUtils.d.ts +18 -31
- package/dist/decoding/integerDecodingUtils.js +134 -299
- package/dist/decoding/integerDecodingUtils.js.map +1 -1
- package/dist/decoding/integerDecodingUtils.spec.js +254 -148
- package/dist/decoding/integerDecodingUtils.spec.js.map +1 -1
- package/dist/decoding/integerStreamDecoder.d.ts +5 -7
- package/dist/decoding/integerStreamDecoder.js +104 -122
- package/dist/decoding/integerStreamDecoder.js.map +1 -1
- package/dist/decoding/integerStreamDecoder.spec.js +370 -113
- package/dist/decoding/integerStreamDecoder.spec.js.map +1 -1
- package/dist/decoding/propertyDecoder.js +23 -33
- package/dist/decoding/propertyDecoder.js.map +1 -1
- package/dist/decoding/propertyDecoder.spec.js +397 -605
- package/dist/decoding/propertyDecoder.spec.js.map +1 -1
- package/dist/decoding/stringDecoder.d.ts +2 -10
- package/dist/decoding/stringDecoder.js +146 -158
- package/dist/decoding/stringDecoder.js.map +1 -1
- package/dist/decoding/stringDecoder.spec.js +322 -321
- package/dist/decoding/stringDecoder.spec.js.map +1 -1
- package/dist/decoding/unpackNullableUtils.d.ts +25 -0
- package/dist/decoding/unpackNullableUtils.js +51 -0
- package/dist/decoding/unpackNullableUtils.js.map +1 -0
- package/dist/decoding/unpackNullableUtils.spec.js +71 -0
- package/dist/decoding/unpackNullableUtils.spec.js.map +1 -0
- package/dist/encoding/embeddedTilesetMetadataEncoder.d.ts +16 -0
- package/dist/encoding/embeddedTilesetMetadataEncoder.js +40 -0
- package/dist/encoding/embeddedTilesetMetadataEncoder.js.map +1 -0
- package/dist/encoding/encodingUtils.d.ts +7 -0
- package/dist/encoding/encodingUtils.js +107 -0
- package/dist/encoding/encodingUtils.js.map +1 -0
- package/dist/encoding/fsstEncoder.d.ts +21 -0
- package/dist/encoding/fsstEncoder.js +78 -0
- package/dist/encoding/fsstEncoder.js.map +1 -0
- package/dist/encoding/integerEncodingUtils.d.ts +68 -0
- package/dist/encoding/integerEncodingUtils.js +655 -0
- package/dist/encoding/integerEncodingUtils.js.map +1 -0
- package/dist/encoding/integerStreamEncoder.d.ts +27 -0
- package/dist/encoding/integerStreamEncoder.js +139 -0
- package/dist/encoding/integerStreamEncoder.js.map +1 -0
- package/dist/encoding/packNullableUtils.d.ts +4 -0
- package/dist/encoding/packNullableUtils.js +55 -0
- package/dist/encoding/packNullableUtils.js.map +1 -0
- package/dist/encoding/propertyEncoder.d.ts +78 -0
- package/dist/encoding/propertyEncoder.js +335 -0
- package/dist/encoding/propertyEncoder.js.map +1 -0
- package/dist/encoding/stringEncoder.d.ts +12 -0
- package/dist/encoding/stringEncoder.js +182 -0
- package/dist/encoding/stringEncoder.js.map +1 -0
- package/dist/encoding/zOrderCurveEncoder.d.ts +1 -0
- package/dist/encoding/zOrderCurveEncoder.js +10 -0
- package/dist/encoding/zOrderCurveEncoder.js.map +1 -0
- package/dist/metadata/tile/streamMetadataDecoder.d.ts +28 -4
- package/dist/metadata/tile/streamMetadataDecoder.js +81 -15
- package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.d.ts +5 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js +33 -45
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.d.ts +1 -0
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js +142 -0
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js.map +1 -0
- package/dist/metadata/tileset/typeMap.d.ts +21 -29
- package/dist/metadata/tileset/typeMap.js +167 -169
- package/dist/metadata/tileset/typeMap.js.map +1 -1
- package/dist/mltDecoder.js +12 -11
- package/dist/mltDecoder.js.map +1 -1
- package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -1
- package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
- package/dist/vector/flat/stringFlatVector.d.ts +1 -1
- package/dist/vector/flat/stringFlatVector.js.map +1 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js +2 -2
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js.map +1 -1
- package/dist/vector/geometry/constGpuVector.d.ts +2 -2
- package/dist/vector/geometry/constGpuVector.js.map +1 -1
- package/dist/vector/geometry/flatGpuVector.d.ts +2 -2
- package/dist/vector/geometry/flatGpuVector.js.map +1 -1
- package/dist/vector/geometry/geometryVector.js +2 -2
- package/dist/vector/geometry/geometryVector.js.map +1 -1
- package/dist/vector/geometry/geometryVectorConverter.js +4 -4
- package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
- package/dist/vector/geometry/gpuVector.d.ts +2 -2
- package/dist/vector/geometry/gpuVector.js.map +1 -1
- package/dist/vector/geometry/topologyVector.d.ts +4 -4
- package/dist/vector/geometry/topologyVector.js +0 -1
- package/dist/vector/geometry/topologyVector.js.map +1 -1
- package/dist/vector/geometry/zOrderCurve.d.ts +4 -17
- package/dist/vector/geometry/zOrderCurve.js +10 -35
- package/dist/vector/geometry/zOrderCurve.js.map +1 -1
- package/dist/vector/geometry/zOrderCurve.spec.js +21 -10
- package/dist/vector/geometry/zOrderCurve.spec.js.map +1 -1
- package/dist/vector/variableSizeVector.d.ts +2 -2
- package/dist/vector/variableSizeVector.js +0 -1
- package/dist/vector/variableSizeVector.js.map +1 -1
- package/package.json +6 -8
- package/dist/decoding/geometryDecoder.spec.js +0 -5
- package/dist/decoding/geometryDecoder.spec.js.map +0 -1
- package/dist/metadata/tile/mortonEncodedStreamMetadata.d.ts +0 -15
- package/dist/metadata/tile/mortonEncodedStreamMetadata.js +0 -27
- package/dist/metadata/tile/mortonEncodedStreamMetadata.js.map +0 -1
- package/dist/metadata/tile/rleEncodedStreamMetadata.d.ts +0 -24
- package/dist/metadata/tile/rleEncodedStreamMetadata.js +0 -38
- package/dist/metadata/tile/rleEncodedStreamMetadata.js.map +0 -1
- package/dist/metadata/tile/streamMetadata.d.ts +0 -29
- package/dist/metadata/tile/streamMetadata.js +0 -82
- package/dist/metadata/tile/streamMetadata.js.map +0 -1
- package/dist/vector/geometry/spaceFillingCurve.d.ts +0 -22
- package/dist/vector/geometry/spaceFillingCurve.js +0 -31
- package/dist/vector/geometry/spaceFillingCurve.js.map +0 -1
- /package/dist/decoding/{geometryDecoder.spec.d.ts → unpackNullableUtils.spec.d.ts} +0 -0
|
@@ -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, beforeEach, vi } from \"vitest\";\nimport { type LogicalStreamType } from \"../metadata/tile/logicalStreamType\";\nimport * as IntegerStreamDecoder from \"./integerStreamDecoder\";\nimport { StreamMetadataDecoder } from \"../metadata/tile/streamMetadataDecoder\";\nimport { type StreamMetadata } from \"../metadata/tile/streamMetadata\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport { ScalarType } from \"../metadata/tile/scalarType\";\nimport type IntWrapper from \"./intWrapper\";\nimport { type Column } from \"../metadata/tileset/tilesetMetadata\";\nimport { StringDecoder } from \"./stringDecoder\";\nimport * as integerDecoder from \"./integerDecodingUtils\";\n\nfunction createMockStreamMetadata(\n physicalStreamType: PhysicalStreamType,\n logicalStreamType: LogicalStreamType,\n byteLength: number,\n): StreamMetadata {\n return {\n physicalStreamType,\n logicalStreamType,\n byteLength,\n _physicalStreamType: physicalStreamType,\n _logicalStreamType: logicalStreamType,\n _logicalLevelTechnique1: undefined,\n _logicalLevelTechnique2: undefined,\n } as unknown as StreamMetadata;\n}\n\nfunction createMockChildField(\n name: string = \"fieldName\",\n type: string = \"scalarField\",\n physicalType: ScalarType = ScalarType.STRING,\n) {\n return {\n name,\n type,\n scalarField: { physicalType },\n };\n}\n\nfunction createMockColumn(name: string = \"testColumn\", children: any[] = []): Column {\n return {\n name,\n complexType: {\n children: children.length > 0 ? children : [createMockChildField()],\n },\n } as unknown as Column;\n}\n\nfunction setupOffsetMock(initialValue: number = 0) {\n let offsetValue = initialValue;\n const mockOffset = {\n get: vi.fn(() => offsetValue),\n add: vi.fn((amount: number) => {\n offsetValue += amount;\n }),\n } as unknown as IntWrapper;\n return mockOffset;\n}\n\n/**\n * Setup StreamMetadataDecoder mock with a pool of metadata.\n * Cycles through the pool if more calls are made than metadata provided.\n */\nfunction setupStreamMetadataDecodeMock(metadata: StreamMetadata[]): void {\n let callCount = 0;\n vi.spyOn(StreamMetadataDecoder, \"decode\").mockImplementation(() => {\n const result = metadata[callCount % metadata.length];\n callCount++;\n return result;\n });\n}\n\nfunction setupLengthStreamDecodeMock(offsetBuffer: Int32Array, streamMetadata: StreamMetadata): void {\n vi.spyOn(IntegerStreamDecoder, \"decodeLengthStreamToOffsetBuffer\").mockImplementation((data, offset, metadata) => {\n offset.add(metadata.byteLength);\n return offsetBuffer;\n });\n}\n\nfunction setupVarintDecodeMock(value: number | number[] = 0): void {\n const values = Array.isArray(value) ? value : [value];\n let callCount = 0;\n vi.spyOn(integerDecoder, \"decodeVarintInt32\" as any).mockImplementation(() => {\n const result = new Int32Array([values[callCount] ?? 0]);\n callCount++;\n return result;\n });\n}\n\ndescribe(\"decodePlainStringVector\", () => {\n it(\"should return null when plainLengthStream is null\", () => {\n const result = (StringDecoder as any).decodePlainStringVector(\n \"test\",\n null,\n new Uint8Array([1, 2, 3]),\n null,\n null,\n );\n expect(result).toBeNull();\n });\n\n it(\"should return null when plainDataStream is null\", () => {\n const result = (StringDecoder as any).decodePlainStringVector(\"test\", new Int32Array([0, 3]), null, null, null);\n expect(result).toBeNull();\n });\n\n it(\"should return StringDictionaryVector when offsetStream exists (non-nullable)\", () => {\n const plainLengthStream = new Int32Array([0, 3, 7]);\n const plainDataStream = new Uint8Array([97, 98, 99, 100, 101, 102, 103]);\n const offsetStream = new Int32Array([0, 1]);\n\n const result = (StringDecoder as any).decodePlainStringVector(\n \"test\",\n plainLengthStream,\n plainDataStream,\n offsetStream,\n null,\n );\n\n expect(result).toBeDefined();\n expect(result.name).toBe(\"test\");\n });\n\n it(\"should return StringDictionaryVector when offsetStream exists (nullable)\", () => {\n const plainLengthStream = new Int32Array([0, 3, 7]);\n const plainDataStream = new Uint8Array([97, 98, 99, 100, 101, 102, 103]);\n const offsetStream = new Int32Array([0, 1]);\n const nullabilityBuffer = { size: () => 2, get: (i: number) => true } as any;\n\n const result = (StringDecoder as any).decodePlainStringVector(\n \"test\",\n plainLengthStream,\n plainDataStream,\n offsetStream,\n nullabilityBuffer,\n );\n\n expect(result).toBeDefined();\n expect(result.name).toBe(\"test\");\n });\n\n it(\"should return StringDictionaryVector with sparse offset when nullability mismatch\", () => {\n const plainLengthStream = new Int32Array([0, 3, 7]);\n const plainDataStream = new Uint8Array([97, 98, 99, 100, 101, 102, 103]);\n const nullabilityBuffer = {\n size: () => 3,\n get: (i: number) => i !== 1,\n } as any;\n\n const result = (StringDecoder as any).decodePlainStringVector(\n \"test\",\n plainLengthStream,\n plainDataStream,\n null,\n nullabilityBuffer,\n );\n\n expect(result).toBeDefined();\n expect(result.name).toBe(\"test\");\n });\n\n it(\"should return StringFlatVector (non-nullable)\", () => {\n const plainLengthStream = new Int32Array([0, 3, 7]);\n const plainDataStream = new Uint8Array([97, 98, 99, 100, 101, 102, 103]);\n\n const result = (StringDecoder as any).decodePlainStringVector(\n \"test\",\n plainLengthStream,\n plainDataStream,\n null,\n null,\n );\n\n expect(result).toBeDefined();\n expect(result.name).toBe(\"test\");\n });\n});\n\ndescribe(\"decodeSharedDictionary\", () => {\n let mockData: Uint8Array;\n let mockOffset: IntWrapper;\n let mockColumn: Column;\n let numFeatures: number;\n\n beforeEach(() => {\n mockData = new Uint8Array(256);\n mockOffset = setupOffsetMock();\n mockColumn = createMockColumn(\"testColumn\", [createMockChildField()]);\n numFeatures = 10;\n vi.clearAllMocks();\n });\n\n describe(\"basic dictionary stream decoding\", () => {\n it(\"should decode LENGTH stream for dictionary offset buffer\", () => {\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const streamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dataLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dataStreamMetadata = createMockStreamMetadata(PhysicalStreamType.DATA, dataLogicalType, 50);\n const expectedOffsetBuffer = new Int32Array([0, 5, 10, 15, 20]);\n\n setupStreamMetadataDecodeMock([streamMetadata, dataStreamMetadata]);\n setupLengthStreamDecodeMock(expectedOffsetBuffer, streamMetadata);\n setupVarintDecodeMock(0);\n\n const result = StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, numFeatures);\n\n expect(StreamMetadataDecoder.decode).toHaveBeenCalledWith(mockData, mockOffset);\n expect(IntegerStreamDecoder.decodeLengthStreamToOffsetBuffer).toHaveBeenCalled();\n expect(result).toBeDefined();\n expect(Array.isArray(result)).toBe(true);\n });\n\n it(\"should decode LENGTH stream for symbol offset buffer\", () => {\n const lengthLogicalType = { lengthType: LengthType.SYMBOL } as unknown as LogicalStreamType;\n const streamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dataLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dataStreamMetadata = createMockStreamMetadata(PhysicalStreamType.DATA, dataLogicalType, 50);\n const expectedOffsetBuffer = new Int32Array([0, 3, 6, 9]);\n\n setupStreamMetadataDecodeMock([streamMetadata, dataStreamMetadata]);\n setupLengthStreamDecodeMock(expectedOffsetBuffer, streamMetadata);\n setupVarintDecodeMock(0);\n\n const result = StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, numFeatures);\n\n expect(result).toBeDefined();\n });\n });\n\n describe(\"dictionary buffer decoding\", () => {\n it(\"should decode SINGLE dictionary type DATA stream\", () => {\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SINGLE } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 40,\n );\n const offsetBuffer = new Int32Array([0, 10, 20, 40]);\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock(0);\n\n const result = StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, numFeatures);\n\n expect(mockOffset.add).toHaveBeenCalledWith(40);\n expect(result).toBeDefined();\n });\n\n it(\"should advance offset correctly through LENGTH and DATA streams\", () => {\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SINGLE } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 40,\n );\n const offsetBuffer = new Int32Array([0, 10, 20, 40]);\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock(0);\n\n const result = StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, numFeatures);\n\n expect(mockOffset.add).toHaveBeenNthCalledWith(1, 20);\n expect(mockOffset.add).toHaveBeenNthCalledWith(2, 40);\n expect(result).toBeDefined();\n });\n });\n\n describe(\"symbol table buffer decoding\", () => {\n it(\"should decode symbol table buffer when dictionary type is not SINGLE or SHARED\", () => {\n const symbolTableLogicalType = { dictionaryType: DictionaryType.NONE } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.LENGTH,\n symbolTableLogicalType,\n 20,\n );\n const symbolTableMetadata = createMockStreamMetadata(PhysicalStreamType.DATA, symbolTableLogicalType, 35);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryDataMetadata = createMockStreamMetadata(PhysicalStreamType.DATA, dictionaryLogicalType, 50);\n const offsetBuffer = new Int32Array([0, 10, 20]);\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, symbolTableMetadata, dictionaryDataMetadata]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock(0);\n\n const result = StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, numFeatures);\n\n expect(mockOffset.add).toHaveBeenNthCalledWith(1, 20);\n expect(mockOffset.add).toHaveBeenNthCalledWith(2, 35);\n expect(mockOffset.add).toHaveBeenNthCalledWith(3, 50);\n expect(result).toBeDefined();\n });\n });\n\n describe(\"with propertyColumnNames filter\", () => {\n it(\"should accept optional propertyColumnNames parameter\", () => {\n const propertyColumnNames = new Set([\"testColumn\"]);\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 40,\n );\n const skipStreamMetadata = createMockStreamMetadata(PhysicalStreamType.DATA, dictionaryLogicalType, 15);\n const offsetBuffer = new Int32Array([0, 10, 20, 40]);\n\n // Provide metadata for: LENGTH, DATA (for dictionary), DATA (for skipColumn)\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata, skipStreamMetadata]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock([1, 1]); // First field has 1 stream, then 1 more stream to skip\n\n const result = StringDecoder.decodeSharedDictionary(\n mockData,\n mockOffset,\n mockColumn,\n numFeatures,\n propertyColumnNames,\n );\n\n expect(result).toBeDefined();\n });\n\n it(\"should skip column when propertyColumnNames does not include column\", () => {\n const propertyColumnNames = new Set([\"someOtherColumn\"]);\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 40,\n );\n const skipStream1 = createMockStreamMetadata(PhysicalStreamType.DATA, dictionaryLogicalType, 15);\n const skipStream2 = createMockStreamMetadata(PhysicalStreamType.DATA, dictionaryLogicalType, 25);\n const offsetBuffer = new Int32Array([0, 10, 20, 40]);\n\n // Provide metadata for: LENGTH, DATA (for dictionary), and 2 streams to skip\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata, skipStream1, skipStream2]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock([2, 2]); // 2 streams in first field, 2 streams to skip\n\n const result = StringDecoder.decodeSharedDictionary(\n mockData,\n mockOffset,\n mockColumn,\n numFeatures,\n propertyColumnNames,\n );\n\n expect(result).toBeDefined();\n });\n });\n\n describe(\"offset management\", () => {\n it(\"should correctly advance offset through multiple streams\", () => {\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 100,\n );\n const offsetBuffer = new Int32Array([0, 25, 50, 75, 100]);\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock(0);\n\n StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, numFeatures);\n\n expect(mockOffset.add).toHaveBeenCalledWith(100);\n });\n });\n\n describe(\"edge cases\", () => {\n it(\"should handle minimum feature count\", () => {\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 4);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 10,\n );\n const offsetBuffer = new Int32Array([0, 10]);\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock(0);\n\n const result = StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, 1);\n\n expect(result).toBeDefined();\n });\n\n it(\"should handle large feature count\", () => {\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 1000);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 5000,\n );\n const largeOffsetBuffer = new Int32Array(10001);\n for (let i = 0; i < largeOffsetBuffer.length; i++) {\n largeOffsetBuffer[i] = i * 500;\n }\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata]);\n setupLengthStreamDecodeMock(largeOffsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock(0);\n\n const result = StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, 10000);\n\n expect(result).toBeDefined();\n });\n\n it(\"should handle empty child fields list\", () => {\n const emptyColumnMock = createMockColumn(\"emptyColumn\", []);\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 0);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 0,\n );\n const offsetBuffer = new Int32Array([0]);\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock(0);\n\n expect(() => {\n StringDecoder.decodeSharedDictionary(mockData, mockOffset, emptyColumnMock, 0);\n }).not.toThrow();\n });\n });\n\n describe(\"stream count handling\", () => {\n it(\"should skip columns with 0 streams\", () => {\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 40,\n );\n const offsetBuffer = new Int32Array([0, 10, 20, 40]);\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock(0);\n\n const result = StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, numFeatures);\n\n expect(result).toBeDefined();\n });\n\n it(\"should throw error for non-string scalar fields\", () => {\n const childFieldNonString = createMockChildField(\"fieldName\", \"scalarField\", ScalarType.INT_32);\n const columnWithNonStringField = createMockColumn(\"testColumn\", [childFieldNonString]);\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 40,\n );\n const skipStream1 = createMockStreamMetadata(PhysicalStreamType.DATA, dictionaryLogicalType, 15);\n const skipStream2 = createMockStreamMetadata(PhysicalStreamType.DATA, dictionaryLogicalType, 25);\n const offsetBuffer = new Int32Array([0, 10, 20, 40]);\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata, skipStream1, skipStream2]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock([2, 2]); // 2 streams in field, 2 streams to skip\n\n expect(() => {\n StringDecoder.decodeSharedDictionary(mockData, mockOffset, columnWithNonStringField, numFeatures);\n }).toThrow(\"Currently only optional string fields are implemented for a struct.\");\n });\n });\n\n describe(\"return value validation\", () => {\n it(\"should return Vector array\", () => {\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 40,\n );\n const offsetBuffer = new Int32Array([0, 10, 20, 40]);\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock(0);\n\n const result = StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, numFeatures);\n\n expect(result).toBeInstanceOf(Array);\n });\n\n it(\"should not return null or undefined\", () => {\n const lengthLogicalType = { lengthType: LengthType.DICTIONARY } as unknown as LogicalStreamType;\n const lengthStreamMetadata = createMockStreamMetadata(PhysicalStreamType.LENGTH, lengthLogicalType, 20);\n const dictionaryLogicalType = { dictionaryType: DictionaryType.SHARED } as unknown as LogicalStreamType;\n const dictionaryStreamMetadata = createMockStreamMetadata(\n PhysicalStreamType.DATA,\n dictionaryLogicalType,\n 40,\n );\n const offsetBuffer = new Int32Array([0, 10, 20, 40]);\n\n setupStreamMetadataDecodeMock([lengthStreamMetadata, dictionaryStreamMetadata]);\n setupLengthStreamDecodeMock(offsetBuffer, lengthStreamMetadata);\n setupVarintDecodeMock(0);\n\n const result = StringDecoder.decodeSharedDictionary(mockData, mockOffset, mockColumn, numFeatures);\n\n expect(result).not.toBeNull();\n expect(result).not.toBeUndefined();\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\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"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import BitVector from "../vector/flat/bitVector.js";
|
|
2
|
+
/**
|
|
3
|
+
* Type constraint for TypedArray types that can be unpacked
|
|
4
|
+
*/
|
|
5
|
+
export type TypedArrayConstructor = Int32ArrayConstructor | BigInt64ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor;
|
|
6
|
+
export type TypedArrayInstance = Int32Array | BigInt64Array | Float32Array | Float64Array;
|
|
7
|
+
/**
|
|
8
|
+
* Generic unpacking function.
|
|
9
|
+
* Reconstructs the full array by inserting default values at null positions.
|
|
10
|
+
*
|
|
11
|
+
* @param dataStream The compact data stream containing only non-null values
|
|
12
|
+
* @param presentBits BitVector indicating which positions have values (null if non-nullable)
|
|
13
|
+
* @param defaultValue The default value to insert at null positions (0, 0n, etc.)
|
|
14
|
+
* @returns Full array with default values at null positions
|
|
15
|
+
*/
|
|
16
|
+
export declare function unpackNullable<T extends TypedArrayInstance>(dataStream: T, presentBits: BitVector | null, defaultValue: number | bigint): T;
|
|
17
|
+
/**
|
|
18
|
+
* Special case for boolean columns because BitVector is not directly compatible with TypedArray.
|
|
19
|
+
*
|
|
20
|
+
* @param dataStream The compact BitVector data containing only non-null boolean values
|
|
21
|
+
* @param dataStreamSize The number of actual values in dataStream
|
|
22
|
+
* @param presentBits BitVector indicating which positions have values (null if non-nullable)
|
|
23
|
+
* @returns Uint8Array buffer for BitVector with false at null positions
|
|
24
|
+
*/
|
|
25
|
+
export declare function unpackNullableBoolean(dataStream: Uint8Array, dataStreamSize: number, presentBits: BitVector | null): Uint8Array;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import BitVector from "../vector/flat/bitVector.js";
|
|
2
|
+
/**
|
|
3
|
+
* Generic unpacking function.
|
|
4
|
+
* Reconstructs the full array by inserting default values at null positions.
|
|
5
|
+
*
|
|
6
|
+
* @param dataStream The compact data stream containing only non-null values
|
|
7
|
+
* @param presentBits BitVector indicating which positions have values (null if non-nullable)
|
|
8
|
+
* @param defaultValue The default value to insert at null positions (0, 0n, etc.)
|
|
9
|
+
* @returns Full array with default values at null positions
|
|
10
|
+
*/
|
|
11
|
+
export function unpackNullable(dataStream, presentBits, defaultValue) {
|
|
12
|
+
// Non-nullable case: return data stream as-is
|
|
13
|
+
if (!presentBits) {
|
|
14
|
+
return dataStream;
|
|
15
|
+
}
|
|
16
|
+
const size = presentBits.size();
|
|
17
|
+
// Create new array of same type with full size
|
|
18
|
+
const constructor = dataStream.constructor;
|
|
19
|
+
const result = new constructor(size);
|
|
20
|
+
let counter = 0;
|
|
21
|
+
for (let i = 0; i < size; i++) {
|
|
22
|
+
// If position has a value, take from data stream; otherwise use default
|
|
23
|
+
result[i] = presentBits.get(i) ? dataStream[counter++] : defaultValue;
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Special case for boolean columns because BitVector is not directly compatible with TypedArray.
|
|
29
|
+
*
|
|
30
|
+
* @param dataStream The compact BitVector data containing only non-null boolean values
|
|
31
|
+
* @param dataStreamSize The number of actual values in dataStream
|
|
32
|
+
* @param presentBits BitVector indicating which positions have values (null if non-nullable)
|
|
33
|
+
* @returns Uint8Array buffer for BitVector with false at null positions
|
|
34
|
+
*/
|
|
35
|
+
export function unpackNullableBoolean(dataStream, dataStreamSize, presentBits) {
|
|
36
|
+
// Non-nullable case
|
|
37
|
+
if (!presentBits) {
|
|
38
|
+
return dataStream;
|
|
39
|
+
}
|
|
40
|
+
const numFeatures = presentBits.size();
|
|
41
|
+
const bitVector = new BitVector(dataStream, dataStreamSize);
|
|
42
|
+
const result = new BitVector(new Uint8Array(Math.ceil(numFeatures / 8)), numFeatures);
|
|
43
|
+
let counter = 0;
|
|
44
|
+
for (let i = 0; i < numFeatures; i++) {
|
|
45
|
+
// If position has a value, take from data stream; otherwise use false
|
|
46
|
+
const value = presentBits.get(i) ? bitVector.get(counter++) : false;
|
|
47
|
+
result.set(i, value);
|
|
48
|
+
}
|
|
49
|
+
return result.getBuffer();
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=unpackNullableUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpackNullableUtils.js","sourceRoot":"","sources":["../../src/decoding/unpackNullableUtils.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,6BAA6B,CAAC;AAapD;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC1B,UAAa,EACb,WAA6B,EAC7B,YAA6B;IAE7B,8CAA8C;IAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,+CAA+C;IAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAoC,CAAC;IACpE,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAM,CAAC;IAE1C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,wEAAwE;QACxE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAE,YAAoB,CAAC;IACnF,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACjC,UAAsB,EACtB,cAAsB,EACtB,WAA6B;IAE7B,oBAAoB;IACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAEtF,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,sEAAsE;QACtE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACpE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import BitVector from \"../vector/flat/bitVector.js\";\n\n/**\n * Type constraint for TypedArray types that can be unpacked\n */\nexport type TypedArrayConstructor =\n | Int32ArrayConstructor\n | BigInt64ArrayConstructor\n | Float32ArrayConstructor\n | Float64ArrayConstructor;\n\nexport type TypedArrayInstance = Int32Array | BigInt64Array | Float32Array | Float64Array;\n\n/**\n * Generic unpacking function.\n * Reconstructs the full array by inserting default values at null positions.\n *\n * @param dataStream The compact data stream containing only non-null values\n * @param presentBits BitVector indicating which positions have values (null if non-nullable)\n * @param defaultValue The default value to insert at null positions (0, 0n, etc.)\n * @returns Full array with default values at null positions\n */\nexport function unpackNullable<T extends TypedArrayInstance>(\n dataStream: T,\n presentBits: BitVector | null,\n defaultValue: number | bigint,\n): T {\n // Non-nullable case: return data stream as-is\n if (!presentBits) {\n return dataStream;\n }\n\n const size = presentBits.size();\n // Create new array of same type with full size\n const constructor = dataStream.constructor as TypedArrayConstructor;\n const result = new constructor(size) as T;\n\n let counter = 0;\n for (let i = 0; i < size; i++) {\n // If position has a value, take from data stream; otherwise use default\n result[i] = presentBits.get(i) ? dataStream[counter++] : (defaultValue as any);\n }\n\n return result;\n}\n\n/**\n * Special case for boolean columns because BitVector is not directly compatible with TypedArray.\n *\n * @param dataStream The compact BitVector data containing only non-null boolean values\n * @param dataStreamSize The number of actual values in dataStream\n * @param presentBits BitVector indicating which positions have values (null if non-nullable)\n * @returns Uint8Array buffer for BitVector with false at null positions\n */\nexport function unpackNullableBoolean(\n dataStream: Uint8Array,\n dataStreamSize: number,\n presentBits: BitVector | null,\n): Uint8Array {\n // Non-nullable case\n if (!presentBits) {\n return dataStream;\n }\n\n const numFeatures = presentBits.size();\n const bitVector = new BitVector(dataStream, dataStreamSize);\n const result = new BitVector(new Uint8Array(Math.ceil(numFeatures / 8)), numFeatures);\n\n let counter = 0;\n for (let i = 0; i < numFeatures; i++) {\n // If position has a value, take from data stream; otherwise use false\n const value = presentBits.get(i) ? bitVector.get(counter++) : false;\n result.set(i, value);\n }\n\n return result.getBuffer();\n}\n"]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { unpackNullable, unpackNullableBoolean } from "./unpackNullableUtils";
|
|
3
|
+
import BitVector from "../vector/flat/bitVector";
|
|
4
|
+
import { packNullable, packNullableBoolean } from "../encoding/packNullableUtils";
|
|
5
|
+
describe("unpackNullableUtils", () => {
|
|
6
|
+
describe("unpackNullable", () => {
|
|
7
|
+
it("should return the original array when presentBits is null", () => {
|
|
8
|
+
const dataStream = new Int32Array([1, 2, 3]);
|
|
9
|
+
const packed = packNullable(dataStream, null);
|
|
10
|
+
const result = unpackNullable(packed, null, 0);
|
|
11
|
+
expect(result).toBe(dataStream);
|
|
12
|
+
expect(result).toEqual(new Int32Array([1, 2, 3]));
|
|
13
|
+
});
|
|
14
|
+
it("should return the original array when presentBits is undefined", () => {
|
|
15
|
+
const dataStream = new Float32Array([1.5, 2.5, 3.5]);
|
|
16
|
+
const result = unpackNullable(dataStream, undefined, 0);
|
|
17
|
+
expect(result).toBe(dataStream);
|
|
18
|
+
expect(result).toEqual(new Float32Array([1.5, 2.5, 3.5]));
|
|
19
|
+
});
|
|
20
|
+
it("should return the original BigInt64Array when presentBits is null", () => {
|
|
21
|
+
const dataStream = new BigInt64Array([10n, 20n, 30n]);
|
|
22
|
+
const result = unpackNullable(dataStream, null, 0n);
|
|
23
|
+
expect(result).toBe(dataStream);
|
|
24
|
+
expect(result).toEqual(new BigInt64Array([10n, 20n, 30n]));
|
|
25
|
+
});
|
|
26
|
+
it("should return the original array when presentBits is fully set", () => {
|
|
27
|
+
const dataStream = new BigInt64Array([10n, 20n, 30n]);
|
|
28
|
+
const presentBits = new BitVector(new Uint8Array([0b111]), 3);
|
|
29
|
+
const packed = packNullable(dataStream, presentBits);
|
|
30
|
+
const result = unpackNullable(packed, presentBits, 0n);
|
|
31
|
+
expect(result).toEqual(new BigInt64Array([10n, 20n, 30n]));
|
|
32
|
+
});
|
|
33
|
+
it("should return partial array when presentBits is partially set", () => {
|
|
34
|
+
const dataStream = new Int32Array([0, 20, 30]); // first number is "null"
|
|
35
|
+
const presentBits = new BitVector(new Uint8Array([0b110]), 3);
|
|
36
|
+
const packed = packNullable(dataStream, presentBits);
|
|
37
|
+
const result = unpackNullable(packed, presentBits, 0);
|
|
38
|
+
expect(result).toEqual(new Int32Array([0, 20, 30]));
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe("unpackNullableBoolean", () => {
|
|
42
|
+
it("should return the original array when presentBits is null", () => {
|
|
43
|
+
const dataStream = new Uint8Array([0b11010101]);
|
|
44
|
+
const packed = packNullableBoolean(dataStream, 8, null);
|
|
45
|
+
const result = unpackNullableBoolean(packed, 8, null);
|
|
46
|
+
expect(result).toBe(dataStream);
|
|
47
|
+
expect(result).toEqual(new Uint8Array([0b11010101]));
|
|
48
|
+
});
|
|
49
|
+
it("should return the original array when presentBits is undefined", () => {
|
|
50
|
+
const dataStream = new Uint8Array([0b00001111]);
|
|
51
|
+
const result = unpackNullableBoolean(dataStream, 8, undefined);
|
|
52
|
+
expect(result).toBe(dataStream);
|
|
53
|
+
expect(result).toEqual(new Uint8Array([0b00001111]));
|
|
54
|
+
});
|
|
55
|
+
it("should return the original array when presentBits is fully set", () => {
|
|
56
|
+
const dataStream = new Uint8Array([0b11010101]);
|
|
57
|
+
const presentBits = new BitVector(new Uint8Array([0b11111111]), 8);
|
|
58
|
+
const packed = packNullableBoolean(dataStream, 8, presentBits);
|
|
59
|
+
const result = unpackNullableBoolean(packed, 8, presentBits);
|
|
60
|
+
expect(result).toEqual(new Uint8Array([0b11010101]));
|
|
61
|
+
});
|
|
62
|
+
it("should return partial array when presentBits is partially set", () => {
|
|
63
|
+
const dataStream = new Uint8Array([0b11111111]);
|
|
64
|
+
const presentBits = new BitVector(new Uint8Array([0b11110000]), 8);
|
|
65
|
+
const packed = packNullableBoolean(dataStream, 8, presentBits);
|
|
66
|
+
const result = unpackNullableBoolean(packed, 8, presentBits);
|
|
67
|
+
expect(result).toEqual(new Uint8Array([0b11110000]));
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=unpackNullableUtils.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpackNullableUtils.spec.js","sourceRoot":"","sources":["../../src/decoding/unpackNullableUtils.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { unpackNullable, unpackNullableBoolean } from \"./unpackNullableUtils\";\nimport BitVector from \"../vector/flat/bitVector\";\nimport { packNullable, packNullableBoolean } from \"../encoding/packNullableUtils\";\n\ndescribe(\"unpackNullableUtils\", () => {\n describe(\"unpackNullable\", () => {\n it(\"should return the original array when presentBits is null\", () => {\n const dataStream = new Int32Array([1, 2, 3]);\n const packed = packNullable(dataStream, null);\n const result = unpackNullable(packed, null, 0);\n\n expect(result).toBe(dataStream);\n expect(result).toEqual(new Int32Array([1, 2, 3]));\n });\n\n it(\"should return the original array when presentBits is undefined\", () => {\n const dataStream = new Float32Array([1.5, 2.5, 3.5]);\n const result = unpackNullable(dataStream, undefined, 0);\n\n expect(result).toBe(dataStream);\n expect(result).toEqual(new Float32Array([1.5, 2.5, 3.5]));\n });\n\n it(\"should return the original BigInt64Array when presentBits is null\", () => {\n const dataStream = new BigInt64Array([10n, 20n, 30n]);\n const result = unpackNullable(dataStream, null, 0n);\n\n expect(result).toBe(dataStream);\n expect(result).toEqual(new BigInt64Array([10n, 20n, 30n]));\n });\n\n it(\"should return the original array when presentBits is fully set\", () => {\n const dataStream = new BigInt64Array([10n, 20n, 30n]);\n const presentBits = new BitVector(new Uint8Array([0b111]), 3);\n const packed = packNullable(dataStream, presentBits);\n const result = unpackNullable(packed, presentBits, 0n);\n\n expect(result).toEqual(new BigInt64Array([10n, 20n, 30n]));\n });\n\n it(\"should return partial array when presentBits is partially set\", () => {\n const dataStream = new Int32Array([0, 20, 30]); // first number is \"null\"\n const presentBits = new BitVector(new Uint8Array([0b110]), 3);\n const packed = packNullable(dataStream, presentBits);\n const result = unpackNullable(packed, presentBits, 0);\n\n expect(result).toEqual(new Int32Array([0, 20, 30]));\n });\n });\n\n describe(\"unpackNullableBoolean\", () => {\n it(\"should return the original array when presentBits is null\", () => {\n const dataStream = new Uint8Array([0b11010101]);\n const packed = packNullableBoolean(dataStream, 8, null);\n const result = unpackNullableBoolean(packed, 8, null);\n\n expect(result).toBe(dataStream);\n expect(result).toEqual(new Uint8Array([0b11010101]));\n });\n\n it(\"should return the original array when presentBits is undefined\", () => {\n const dataStream = new Uint8Array([0b00001111]);\n const result = unpackNullableBoolean(dataStream, 8, undefined);\n\n expect(result).toBe(dataStream);\n expect(result).toEqual(new Uint8Array([0b00001111]));\n });\n\n it(\"should return the original array when presentBits is fully set\", () => {\n const dataStream = new Uint8Array([0b11010101]);\n const presentBits = new BitVector(new Uint8Array([0b11111111]), 8);\n const packed = packNullableBoolean(dataStream, 8, presentBits);\n const result = unpackNullableBoolean(packed, 8, presentBits);\n\n expect(result).toEqual(new Uint8Array([0b11010101]));\n });\n\n it(\"should return partial array when presentBits is partially set\", () => {\n const dataStream = new Uint8Array([0b11111111]);\n const presentBits = new BitVector(new Uint8Array([0b11110000]), 8);\n const packed = packNullableBoolean(dataStream, 8, presentBits);\n const result = unpackNullableBoolean(packed, 8, presentBits);\n\n expect(result).toEqual(new Uint8Array([0b11110000]));\n });\n });\n});\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encodes a single typeCode as a varint.
|
|
3
|
+
*/
|
|
4
|
+
export declare function encodeTypeCode(typeCode: number): Uint8Array;
|
|
5
|
+
/**
|
|
6
|
+
* Encodes a field name as a length-prefixed UTF-8 string.
|
|
7
|
+
*/
|
|
8
|
+
export declare function encodeFieldName(name: string): Uint8Array;
|
|
9
|
+
/**
|
|
10
|
+
* Encodes a child count as a varint.
|
|
11
|
+
*/
|
|
12
|
+
export declare function encodeChildCount(count: number): Uint8Array;
|
|
13
|
+
/**
|
|
14
|
+
* Computes typeCode for a scalar field.
|
|
15
|
+
*/
|
|
16
|
+
export declare function scalarTypeCode(scalarType: number, nullable: boolean): number;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import IntWrapper from "../decoding/intWrapper";
|
|
2
|
+
import { encodeVarintInt32Value } from "./integerEncodingUtils";
|
|
3
|
+
import { concatenateBuffers } from "../decoding/decodingTestUtils";
|
|
4
|
+
/**
|
|
5
|
+
* Encodes a single typeCode as a varint.
|
|
6
|
+
*/
|
|
7
|
+
export function encodeTypeCode(typeCode) {
|
|
8
|
+
const buffer = new Uint8Array(5);
|
|
9
|
+
const offset = new IntWrapper(0);
|
|
10
|
+
encodeVarintInt32Value(typeCode, buffer, offset);
|
|
11
|
+
return buffer.slice(0, offset.get());
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Encodes a field name as a length-prefixed UTF-8 string.
|
|
15
|
+
*/
|
|
16
|
+
export function encodeFieldName(name) {
|
|
17
|
+
const textEncoder = new TextEncoder();
|
|
18
|
+
const nameBytes = textEncoder.encode(name);
|
|
19
|
+
const lengthBuf = new Uint8Array(5);
|
|
20
|
+
const offset = new IntWrapper(0);
|
|
21
|
+
encodeVarintInt32Value(nameBytes.length, lengthBuf, offset);
|
|
22
|
+
const lengthSlice = lengthBuf.slice(0, offset.get());
|
|
23
|
+
return concatenateBuffers(lengthSlice, nameBytes);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Encodes a child count as a varint.
|
|
27
|
+
*/
|
|
28
|
+
export function encodeChildCount(count) {
|
|
29
|
+
const buffer = new Uint8Array(5);
|
|
30
|
+
const offset = new IntWrapper(0);
|
|
31
|
+
encodeVarintInt32Value(count, buffer, offset);
|
|
32
|
+
return buffer.slice(0, offset.get());
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Computes typeCode for a scalar field.
|
|
36
|
+
*/
|
|
37
|
+
export function scalarTypeCode(scalarType, nullable) {
|
|
38
|
+
return 10 + scalarType * 2 + (nullable ? 1 : 0);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=embeddedTilesetMetadataEncoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddedTilesetMetadataEncoder.js","sourceRoot":"","sources":["../../src/encoding/embeddedTilesetMetadataEncoder.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC3C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IACxC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,sBAAsB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,OAAO,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC1C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,QAAiB;IAChE,OAAO,EAAE,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import IntWrapper from \"../decoding/intWrapper\";\nimport { encodeVarintInt32Value } from \"./integerEncodingUtils\";\nimport { concatenateBuffers } from \"../decoding/decodingTestUtils\";\n\n/**\n * Encodes a single typeCode as a varint.\n */\nexport function encodeTypeCode(typeCode: number): Uint8Array {\n const buffer = new Uint8Array(5);\n const offset = new IntWrapper(0);\n encodeVarintInt32Value(typeCode, buffer, offset);\n return buffer.slice(0, offset.get());\n}\n\n/**\n * Encodes a field name as a length-prefixed UTF-8 string.\n */\nexport function encodeFieldName(name: string): Uint8Array {\n const textEncoder = new TextEncoder();\n const nameBytes = textEncoder.encode(name);\n const lengthBuf = new Uint8Array(5);\n const offset = new IntWrapper(0);\n encodeVarintInt32Value(nameBytes.length, lengthBuf, offset);\n const lengthSlice = lengthBuf.slice(0, offset.get());\n return concatenateBuffers(lengthSlice, nameBytes);\n}\n\n/**\n * Encodes a child count as a varint.\n */\nexport function encodeChildCount(count: number): Uint8Array {\n const buffer = new Uint8Array(5);\n const offset = new IntWrapper(0);\n encodeVarintInt32Value(count, buffer, offset);\n return buffer.slice(0, offset.get());\n}\n\n/**\n * Computes typeCode for a scalar field.\n */\nexport function scalarTypeCode(scalarType: number, nullable: boolean): number {\n return 10 + scalarType * 2 + (nullable ? 1 : 0);\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function encodeFloatsLE(values: Float32Array): Uint8Array;
|
|
2
|
+
export declare function encodeDoubleLE(values: Float32Array): Uint8Array;
|
|
3
|
+
export declare function encodeBooleanRle(values: boolean[]): Uint8Array;
|
|
4
|
+
export declare function encodeByteRle(values: Uint8Array): Uint8Array;
|
|
5
|
+
export declare function encodeStrings(strings: string[]): Uint8Array;
|
|
6
|
+
export declare function createStringLengths(strings: string[]): Int32Array;
|
|
7
|
+
export declare function concatenateBuffers(...buffers: Uint8Array[]): Uint8Array;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
export function encodeFloatsLE(values) {
|
|
2
|
+
const buffer = new Uint8Array(values.length * 4);
|
|
3
|
+
const view = new DataView(buffer.buffer);
|
|
4
|
+
for (let i = 0; i < values.length; i++) {
|
|
5
|
+
view.setFloat32(i * 4, values[i], true);
|
|
6
|
+
}
|
|
7
|
+
return buffer;
|
|
8
|
+
}
|
|
9
|
+
export function encodeDoubleLE(values) {
|
|
10
|
+
const buffer = new Uint8Array(values.length * 8);
|
|
11
|
+
const view = new DataView(buffer.buffer);
|
|
12
|
+
for (let i = 0; i < values.length; i++) {
|
|
13
|
+
view.setFloat64(i * 8, values[i], true);
|
|
14
|
+
}
|
|
15
|
+
return buffer;
|
|
16
|
+
}
|
|
17
|
+
export function encodeBooleanRle(values) {
|
|
18
|
+
// Pack booleans into bytes (8 booleans per byte)
|
|
19
|
+
const numBytes = Math.ceil(values.length / 8);
|
|
20
|
+
const packed = new Uint8Array(numBytes);
|
|
21
|
+
for (let i = 0; i < values.length; i++) {
|
|
22
|
+
if (values[i]) {
|
|
23
|
+
const byteIndex = Math.floor(i / 8);
|
|
24
|
+
const bitIndex = i % 8;
|
|
25
|
+
packed[byteIndex] |= 1 << bitIndex;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const result = new Uint8Array(1 + numBytes);
|
|
29
|
+
result[0] = 256 - numBytes;
|
|
30
|
+
result.set(packed, 1);
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
export function encodeByteRle(values) {
|
|
34
|
+
const result = [];
|
|
35
|
+
let i = 0;
|
|
36
|
+
while (i < values.length) {
|
|
37
|
+
const currentByte = values[i];
|
|
38
|
+
let runLength = 1;
|
|
39
|
+
while (i + runLength < values.length && values[i + runLength] === currentByte && runLength < 131) {
|
|
40
|
+
runLength++;
|
|
41
|
+
}
|
|
42
|
+
if (runLength >= 3) {
|
|
43
|
+
const header = runLength - 3;
|
|
44
|
+
result.push(Math.min(header, 0x7f));
|
|
45
|
+
result.push(currentByte);
|
|
46
|
+
i += runLength;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const literalStart = i;
|
|
50
|
+
while (i < values.length) {
|
|
51
|
+
let nextRunLength = 1;
|
|
52
|
+
if (i + 1 < values.length) {
|
|
53
|
+
while (i + nextRunLength < values.length &&
|
|
54
|
+
values[i + nextRunLength] === values[i] &&
|
|
55
|
+
nextRunLength < 3) {
|
|
56
|
+
nextRunLength++;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (nextRunLength >= 3) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
i++;
|
|
63
|
+
if (i - literalStart >= 128) {
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const numLiterals = i - literalStart;
|
|
68
|
+
const header = 256 - numLiterals;
|
|
69
|
+
result.push(header);
|
|
70
|
+
for (let j = literalStart; j < i; j++) {
|
|
71
|
+
result.push(values[j]);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return new Uint8Array(result);
|
|
76
|
+
}
|
|
77
|
+
export function encodeStrings(strings) {
|
|
78
|
+
const encoder = new TextEncoder();
|
|
79
|
+
const encoded = strings.map((s) => encoder.encode(s));
|
|
80
|
+
const totalLength = encoded.reduce((sum, arr) => sum + arr.length, 0);
|
|
81
|
+
const result = new Uint8Array(totalLength);
|
|
82
|
+
let offset = 0;
|
|
83
|
+
for (const arr of encoded) {
|
|
84
|
+
result.set(arr, offset);
|
|
85
|
+
offset += arr.length;
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
export function createStringLengths(strings) {
|
|
90
|
+
const lengths = new Int32Array(strings.length);
|
|
91
|
+
const encoder = new TextEncoder();
|
|
92
|
+
for (let i = 0; i < strings.length; i++) {
|
|
93
|
+
lengths[i] = encoder.encode(strings[i]).length;
|
|
94
|
+
}
|
|
95
|
+
return lengths;
|
|
96
|
+
}
|
|
97
|
+
export function concatenateBuffers(...buffers) {
|
|
98
|
+
const totalLength = buffers.reduce((sum, buf) => sum + buf.length, 0);
|
|
99
|
+
const result = new Uint8Array(totalLength);
|
|
100
|
+
let offset = 0;
|
|
101
|
+
for (const buffer of buffers) {
|
|
102
|
+
result.set(buffer, offset);
|
|
103
|
+
offset += buffer.length;
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=encodingUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encodingUtils.js","sourceRoot":"","sources":["../../src/encoding/encodingUtils.ts"],"names":[],"mappings":"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","sourcesContent":["export function encodeFloatsLE(values: Float32Array): Uint8Array {\n const buffer = new Uint8Array(values.length * 4);\n const view = new DataView(buffer.buffer);\n\n for (let i = 0; i < values.length; i++) {\n view.setFloat32(i * 4, values[i], true);\n }\n\n return buffer;\n}\n\nexport function encodeDoubleLE(values: Float32Array): Uint8Array {\n const buffer = new Uint8Array(values.length * 8);\n const view = new DataView(buffer.buffer);\n\n for (let i = 0; i < values.length; i++) {\n view.setFloat64(i * 8, values[i], true);\n }\n\n return buffer;\n}\n\nexport function encodeBooleanRle(values: boolean[]): Uint8Array {\n // Pack booleans into bytes (8 booleans per byte)\n const numBytes = Math.ceil(values.length / 8);\n const packed = new Uint8Array(numBytes);\n\n for (let i = 0; i < values.length; i++) {\n if (values[i]) {\n const byteIndex = Math.floor(i / 8);\n const bitIndex = i % 8;\n packed[byteIndex] |= 1 << bitIndex;\n }\n }\n\n const result = new Uint8Array(1 + numBytes);\n result[0] = 256 - numBytes;\n result.set(packed, 1);\n\n return result;\n}\n\nexport function encodeByteRle(values: Uint8Array): Uint8Array {\n const result: number[] = [];\n let i = 0;\n\n while (i < values.length) {\n const currentByte = values[i];\n let runLength = 1;\n\n while (i + runLength < values.length && values[i + runLength] === currentByte && runLength < 131) {\n runLength++;\n }\n\n if (runLength >= 3) {\n const header = runLength - 3;\n result.push(Math.min(header, 0x7f));\n result.push(currentByte);\n i += runLength;\n } else {\n const literalStart = i;\n while (i < values.length) {\n let nextRunLength = 1;\n if (i + 1 < values.length) {\n while (\n i + nextRunLength < values.length &&\n values[i + nextRunLength] === values[i] &&\n nextRunLength < 3\n ) {\n nextRunLength++;\n }\n }\n\n if (nextRunLength >= 3) {\n break;\n }\n i++;\n\n if (i - literalStart >= 128) {\n break;\n }\n }\n\n const numLiterals = i - literalStart;\n const header = 256 - numLiterals;\n result.push(header);\n for (let j = literalStart; j < i; j++) {\n result.push(values[j]);\n }\n }\n }\n\n return new Uint8Array(result);\n}\n\nexport function encodeStrings(strings: string[]): Uint8Array {\n const encoder = new TextEncoder();\n const encoded = strings.map((s) => encoder.encode(s));\n const totalLength = encoded.reduce((sum, arr) => sum + arr.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const arr of encoded) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\n\nexport function createStringLengths(strings: string[]): Int32Array {\n const lengths = new Int32Array(strings.length);\n const encoder = new TextEncoder();\n for (let i = 0; i < strings.length; i++) {\n lengths[i] = encoder.encode(strings[i]).length;\n }\n return lengths;\n}\n\nexport function concatenateBuffers(...buffers: Uint8Array[]): Uint8Array {\n const totalLength = buffers.reduce((sum, buf) => sum + buf.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n\n for (const buffer of buffers) {\n result.set(buffer, offset);\n offset += buffer.length;\n }\n\n return result;\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create symbol table from string array
|
|
3
|
+
*
|
|
4
|
+
* @param symbolStrings Array of symbol strings
|
|
5
|
+
* @returns Symbol table buffer and lengths
|
|
6
|
+
*/
|
|
7
|
+
export declare function createSymbolTable(symbolStrings: string[]): {
|
|
8
|
+
symbols: Uint8Array;
|
|
9
|
+
symbolLengths: Uint32Array;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Encode data using FSST compression with pre-defined symbol table
|
|
13
|
+
* Encoder requires pre-defined symbol table. Real FSST learns optimal symbols from data. This
|
|
14
|
+
* implementation is for testing decoder only.
|
|
15
|
+
*
|
|
16
|
+
* @param symbols Array of symbols, where each symbol can be between 1 and 8 bytes
|
|
17
|
+
* @param symbolLengths Array of symbol lengths, length of each symbol in symbols array
|
|
18
|
+
* @param uncompressedData Data to compress
|
|
19
|
+
* @returns FSST compressed data, where each entry is an index to the symbols array
|
|
20
|
+
*/
|
|
21
|
+
export declare function encodeFsst(symbols: Uint8Array, symbolLengths: Uint32Array, uncompressedData: Uint8Array): Uint8Array;
|