@maplibre/mlt 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/decoding/decodingUtils.js +2 -2
- package/dist/decoding/decodingUtils.js.map +1 -1
- package/dist/decoding/geometryDecoder.js +8 -8
- package/dist/decoding/geometryDecoder.js.map +1 -1
- package/dist/decoding/integerDecodingUtils.d.ts +1 -1
- package/dist/decoding/integerDecodingUtils.js.map +1 -1
- package/dist/decoding/integerStreamDecoder.d.ts +1 -1
- package/dist/decoding/integerStreamDecoder.js.map +1 -1
- package/dist/decoding/integerStreamDecoder.spec.js +22 -4
- package/dist/decoding/integerStreamDecoder.spec.js.map +1 -1
- package/dist/decoding/propertyDecoder.js +10 -10
- package/dist/decoding/propertyDecoder.js.map +1 -1
- package/dist/decoding/propertyDecoder.spec.js +27 -24
- package/dist/decoding/propertyDecoder.spec.js.map +1 -1
- package/dist/decoding/stringDecoder.d.ts +2 -10
- package/dist/decoding/stringDecoder.js +149 -157
- package/dist/decoding/stringDecoder.js.map +1 -1
- package/dist/decoding/stringDecoder.spec.js +10 -10
- package/dist/decoding/stringDecoder.spec.js.map +1 -1
- 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.js +4 -4
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
- 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 +11 -9
- package/dist/mltDecoder.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/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 +15 -10
- package/dist/vector/geometry/zOrderCurve.spec.js.map +1 -1
- package/package.json +1 -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
|
@@ -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, beforeEach, vi } from \"vitest\";\nimport { type LogicalStreamType } from \"../metadata/tile/logicalStreamType\";\nimport * as IntegerStreamDecoder from \"./integerStreamDecoder\";\nimport * as StreamMetadataDecoder from \"../metadata/tile/streamMetadataDecoder\";\nimport { type StreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\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 * as 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, \"decodeStreamMetadata\").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.skip(\"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.skip(\"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.skip(\"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.skip(\"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.skip(\"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.skip(\"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.decodeStreamMetadata).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,5 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LogicalLevelTechnique } from "./logicalLevelTechnique";
|
|
2
|
+
import { PhysicalLevelTechnique } from "./physicalLevelTechnique";
|
|
3
|
+
import { PhysicalStreamType } from "./physicalStreamType";
|
|
4
|
+
import { LogicalStreamType } from "./logicalStreamType";
|
|
2
5
|
import type IntWrapper from "../../decoding/intWrapper";
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
export type StreamMetadata = {
|
|
7
|
+
readonly physicalStreamType: PhysicalStreamType;
|
|
8
|
+
readonly logicalStreamType: LogicalStreamType;
|
|
9
|
+
readonly logicalLevelTechnique1: LogicalLevelTechnique;
|
|
10
|
+
readonly logicalLevelTechnique2: LogicalLevelTechnique;
|
|
11
|
+
readonly physicalLevelTechnique: PhysicalLevelTechnique;
|
|
12
|
+
readonly numValues: number;
|
|
13
|
+
readonly byteLength: number;
|
|
14
|
+
/**
|
|
15
|
+
* Returns the number of decompressed values.
|
|
16
|
+
* For non-RLE streams, this is the same as numValues.
|
|
17
|
+
* For RLE streams, this is overridden to return numRleValues.
|
|
18
|
+
*/
|
|
19
|
+
readonly decompressedCount: number;
|
|
20
|
+
};
|
|
21
|
+
export type MortonEncodedStreamMetadata = StreamMetadata & {
|
|
22
|
+
readonly numBits: number;
|
|
23
|
+
readonly coordinateShift: number;
|
|
24
|
+
};
|
|
25
|
+
export type RleEncodedStreamMetadata = StreamMetadata & {
|
|
26
|
+
readonly runs: number;
|
|
27
|
+
readonly numRleValues: number;
|
|
28
|
+
};
|
|
29
|
+
export declare function decodeStreamMetadata(tile: Uint8Array, offset: IntWrapper): StreamMetadata;
|
|
@@ -1,20 +1,86 @@
|
|
|
1
|
-
import { StreamMetadata } from "./streamMetadata";
|
|
2
1
|
import { LogicalLevelTechnique } from "./logicalLevelTechnique";
|
|
3
2
|
import { PhysicalLevelTechnique } from "./physicalLevelTechnique";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
PhysicalLevelTechnique.NONE !== streamMetadata.physicalLevelTechnique) {
|
|
15
|
-
return RleEncodedStreamMetadata.decodePartial(streamMetadata, tile, offset);
|
|
16
|
-
}
|
|
17
|
-
return streamMetadata;
|
|
3
|
+
import { decodeVarintInt32 } from "../../decoding/integerDecodingUtils";
|
|
4
|
+
import { PhysicalStreamType } from "./physicalStreamType";
|
|
5
|
+
import { LogicalStreamType } from "./logicalStreamType";
|
|
6
|
+
import { DictionaryType } from "./dictionaryType";
|
|
7
|
+
import { OffsetType } from "./offsetType";
|
|
8
|
+
import { LengthType } from "./lengthType";
|
|
9
|
+
export function decodeStreamMetadata(tile, offset) {
|
|
10
|
+
const streamMetadata = decodeStreamMetadataInternal(tile, offset);
|
|
11
|
+
if (streamMetadata.logicalLevelTechnique1 === LogicalLevelTechnique.MORTON) {
|
|
12
|
+
return decodePartialMortonEncodedStreamMetadata(streamMetadata, tile, offset);
|
|
18
13
|
}
|
|
14
|
+
if ((LogicalLevelTechnique.RLE === streamMetadata.logicalLevelTechnique1 ||
|
|
15
|
+
LogicalLevelTechnique.RLE === streamMetadata.logicalLevelTechnique2) &&
|
|
16
|
+
PhysicalLevelTechnique.NONE !== streamMetadata.physicalLevelTechnique) {
|
|
17
|
+
return decodePartialRleEncodedStreamMetadata(streamMetadata, tile, offset);
|
|
18
|
+
}
|
|
19
|
+
return streamMetadata;
|
|
20
|
+
}
|
|
21
|
+
function decodePartialMortonEncodedStreamMetadata(streamMetadata, tile, offset) {
|
|
22
|
+
const mortonInfo = decodeVarintInt32(tile, offset, 2);
|
|
23
|
+
return {
|
|
24
|
+
physicalStreamType: streamMetadata.physicalStreamType,
|
|
25
|
+
logicalStreamType: streamMetadata.logicalStreamType,
|
|
26
|
+
logicalLevelTechnique1: streamMetadata.logicalLevelTechnique1,
|
|
27
|
+
logicalLevelTechnique2: streamMetadata.logicalLevelTechnique2,
|
|
28
|
+
physicalLevelTechnique: streamMetadata.physicalLevelTechnique,
|
|
29
|
+
numValues: streamMetadata.numValues,
|
|
30
|
+
byteLength: streamMetadata.byteLength,
|
|
31
|
+
decompressedCount: streamMetadata.decompressedCount,
|
|
32
|
+
numBits: mortonInfo[0],
|
|
33
|
+
coordinateShift: mortonInfo[1],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function decodePartialRleEncodedStreamMetadata(streamMetadata, tile, offset) {
|
|
37
|
+
const rleInfo = decodeVarintInt32(tile, offset, 2);
|
|
38
|
+
return {
|
|
39
|
+
physicalStreamType: streamMetadata.physicalStreamType,
|
|
40
|
+
logicalStreamType: streamMetadata.logicalStreamType,
|
|
41
|
+
logicalLevelTechnique1: streamMetadata.logicalLevelTechnique1,
|
|
42
|
+
logicalLevelTechnique2: streamMetadata.logicalLevelTechnique2,
|
|
43
|
+
physicalLevelTechnique: streamMetadata.physicalLevelTechnique,
|
|
44
|
+
numValues: streamMetadata.numValues,
|
|
45
|
+
byteLength: streamMetadata.byteLength,
|
|
46
|
+
decompressedCount: rleInfo[1],
|
|
47
|
+
runs: rleInfo[0],
|
|
48
|
+
numRleValues: rleInfo[1],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function decodeStreamMetadataInternal(tile, offset) {
|
|
52
|
+
const stream_type = tile[offset.get()];
|
|
53
|
+
const physicalStreamType = Object.values(PhysicalStreamType)[stream_type >> 4];
|
|
54
|
+
let logicalStreamType = null;
|
|
55
|
+
switch (physicalStreamType) {
|
|
56
|
+
case PhysicalStreamType.DATA:
|
|
57
|
+
logicalStreamType = new LogicalStreamType(Object.values(DictionaryType)[stream_type & 0xf]);
|
|
58
|
+
break;
|
|
59
|
+
case PhysicalStreamType.OFFSET:
|
|
60
|
+
logicalStreamType = new LogicalStreamType(null, Object.values(OffsetType)[stream_type & 0xf]);
|
|
61
|
+
break;
|
|
62
|
+
case PhysicalStreamType.LENGTH:
|
|
63
|
+
logicalStreamType = new LogicalStreamType(null, null, Object.values(LengthType)[stream_type & 0xf]);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
offset.increment();
|
|
67
|
+
const encodings_header = tile[offset.get()];
|
|
68
|
+
const llt1 = Object.values(LogicalLevelTechnique)[encodings_header >> 5];
|
|
69
|
+
const llt2 = Object.values(LogicalLevelTechnique)[(encodings_header >> 2) & 0x7];
|
|
70
|
+
const plt = Object.values(PhysicalLevelTechnique)[encodings_header & 0x3];
|
|
71
|
+
offset.increment();
|
|
72
|
+
const sizeInfo = decodeVarintInt32(tile, offset, 2);
|
|
73
|
+
const numValues = sizeInfo[0];
|
|
74
|
+
const byteLength = sizeInfo[1];
|
|
75
|
+
return {
|
|
76
|
+
physicalStreamType,
|
|
77
|
+
logicalStreamType,
|
|
78
|
+
logicalLevelTechnique1: llt1,
|
|
79
|
+
logicalLevelTechnique2: llt2,
|
|
80
|
+
physicalLevelTechnique: plt,
|
|
81
|
+
numValues,
|
|
82
|
+
byteLength,
|
|
83
|
+
decompressedCount: numValues,
|
|
84
|
+
};
|
|
19
85
|
}
|
|
20
86
|
//# sourceMappingURL=streamMetadataDecoder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamMetadataDecoder.js","sourceRoot":"","sources":["../../../src/metadata/tile/streamMetadataDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"streamMetadataDecoder.js","sourceRoot":"","sources":["../../../src/metadata/tile/streamMetadataDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { LogicalLevelTechnique } from \"./logicalLevelTechnique\";\nimport { PhysicalLevelTechnique } from \"./physicalLevelTechnique\";\nimport { decodeVarintInt32 } from \"../../decoding/integerDecodingUtils\";\nimport { PhysicalStreamType } from \"./physicalStreamType\";\nimport { LogicalStreamType } from \"./logicalStreamType\";\nimport { DictionaryType } from \"./dictionaryType\";\nimport { OffsetType } from \"./offsetType\";\nimport { LengthType } from \"./lengthType\";\nimport type IntWrapper from \"../../decoding/intWrapper\";\n\nexport type StreamMetadata = {\n readonly physicalStreamType: PhysicalStreamType;\n readonly logicalStreamType: LogicalStreamType;\n readonly logicalLevelTechnique1: LogicalLevelTechnique;\n readonly logicalLevelTechnique2: LogicalLevelTechnique;\n readonly physicalLevelTechnique: PhysicalLevelTechnique;\n readonly numValues: number;\n readonly byteLength: number;\n /**\n * Returns the number of decompressed values.\n * For non-RLE streams, this is the same as numValues.\n * For RLE streams, this is overridden to return numRleValues.\n */\n readonly decompressedCount: number;\n};\n\nexport type MortonEncodedStreamMetadata = StreamMetadata & {\n readonly numBits: number;\n readonly coordinateShift: number;\n};\n\nexport type RleEncodedStreamMetadata = StreamMetadata & {\n readonly runs: number;\n readonly numRleValues: number;\n};\n\nexport function decodeStreamMetadata(tile: Uint8Array, offset: IntWrapper): StreamMetadata {\n const streamMetadata = decodeStreamMetadataInternal(tile, offset);\n if (streamMetadata.logicalLevelTechnique1 === LogicalLevelTechnique.MORTON) {\n return decodePartialMortonEncodedStreamMetadata(streamMetadata, tile, offset);\n }\n\n if (\n (LogicalLevelTechnique.RLE === streamMetadata.logicalLevelTechnique1 ||\n LogicalLevelTechnique.RLE === streamMetadata.logicalLevelTechnique2) &&\n PhysicalLevelTechnique.NONE !== streamMetadata.physicalLevelTechnique\n ) {\n return decodePartialRleEncodedStreamMetadata(streamMetadata, tile, offset);\n }\n\n return streamMetadata;\n}\n\nfunction decodePartialMortonEncodedStreamMetadata(\n streamMetadata: StreamMetadata,\n tile: Uint8Array,\n offset: IntWrapper,\n): MortonEncodedStreamMetadata {\n const mortonInfo = decodeVarintInt32(tile, offset, 2);\n return {\n physicalStreamType: streamMetadata.physicalStreamType,\n logicalStreamType: streamMetadata.logicalStreamType,\n logicalLevelTechnique1: streamMetadata.logicalLevelTechnique1,\n logicalLevelTechnique2: streamMetadata.logicalLevelTechnique2,\n physicalLevelTechnique: streamMetadata.physicalLevelTechnique,\n numValues: streamMetadata.numValues,\n byteLength: streamMetadata.byteLength,\n decompressedCount: streamMetadata.decompressedCount,\n numBits: mortonInfo[0],\n coordinateShift: mortonInfo[1],\n };\n}\n\nfunction decodePartialRleEncodedStreamMetadata(\n streamMetadata: StreamMetadata,\n tile: Uint8Array,\n offset: IntWrapper,\n): RleEncodedStreamMetadata {\n const rleInfo = decodeVarintInt32(tile, offset, 2);\n return {\n physicalStreamType: streamMetadata.physicalStreamType,\n logicalStreamType: streamMetadata.logicalStreamType,\n logicalLevelTechnique1: streamMetadata.logicalLevelTechnique1,\n logicalLevelTechnique2: streamMetadata.logicalLevelTechnique2,\n physicalLevelTechnique: streamMetadata.physicalLevelTechnique,\n numValues: streamMetadata.numValues,\n byteLength: streamMetadata.byteLength,\n decompressedCount: rleInfo[1],\n runs: rleInfo[0],\n numRleValues: rleInfo[1],\n };\n}\n\nfunction decodeStreamMetadataInternal(tile: Uint8Array, offset: IntWrapper): StreamMetadata {\n const stream_type = tile[offset.get()];\n const physicalStreamType = Object.values(PhysicalStreamType)[stream_type >> 4] as PhysicalStreamType;\n let logicalStreamType: LogicalStreamType | null = null;\n\n switch (physicalStreamType) {\n case PhysicalStreamType.DATA:\n logicalStreamType = new LogicalStreamType(\n Object.values(DictionaryType)[stream_type & 0xf] as DictionaryType,\n );\n break;\n case PhysicalStreamType.OFFSET:\n logicalStreamType = new LogicalStreamType(null, Object.values(OffsetType)[stream_type & 0xf] as OffsetType);\n break;\n case PhysicalStreamType.LENGTH:\n logicalStreamType = new LogicalStreamType(\n null,\n null,\n Object.values(LengthType)[stream_type & 0xf] as LengthType,\n );\n break;\n }\n offset.increment();\n\n const encodings_header = tile[offset.get()];\n const llt1 = Object.values(LogicalLevelTechnique)[encodings_header >> 5] as LogicalLevelTechnique;\n const llt2 = Object.values(LogicalLevelTechnique)[(encodings_header >> 2) & 0x7] as LogicalLevelTechnique;\n const plt = Object.values(PhysicalLevelTechnique)[encodings_header & 0x3] as PhysicalLevelTechnique;\n offset.increment();\n\n const sizeInfo = decodeVarintInt32(tile, offset, 2);\n const numValues = sizeInfo[0];\n const byteLength = sizeInfo[1];\n\n return {\n physicalStreamType,\n logicalStreamType,\n logicalLevelTechnique1: llt1,\n logicalLevelTechnique2: llt2,\n physicalLevelTechnique: plt,\n numValues,\n byteLength,\n decompressedCount: numValues,\n };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { decodeVarintInt32 } from "../../decoding/integerDecodingUtils";
|
|
2
|
-
import {
|
|
2
|
+
import { columnTypeHasChildren, columnTypeHasName, decodeColumnType } from "./typeMap";
|
|
3
3
|
const textDecoder = new TextDecoder();
|
|
4
4
|
/**
|
|
5
5
|
* Decodes a length-prefixed UTF-8 string.
|
|
@@ -69,11 +69,11 @@ function decodeField(src, offset) {
|
|
|
69
69
|
*/
|
|
70
70
|
function decodeColumn(src, offset) {
|
|
71
71
|
const typeCode = decodeVarintInt32(src, offset, 1)[0] >>> 0;
|
|
72
|
-
const column =
|
|
72
|
+
const column = decodeColumnType(typeCode);
|
|
73
73
|
if (!column) {
|
|
74
74
|
throw new Error(`Unsupported column type code: ${typeCode}`);
|
|
75
75
|
}
|
|
76
|
-
if (
|
|
76
|
+
if (columnTypeHasName(typeCode)) {
|
|
77
77
|
column.name = decodeString(src, offset);
|
|
78
78
|
}
|
|
79
79
|
else {
|
|
@@ -85,7 +85,7 @@ function decodeColumn(src, offset) {
|
|
|
85
85
|
column.name = "geometry";
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
if (
|
|
88
|
+
if (columnTypeHasChildren(typeCode)) {
|
|
89
89
|
// Only STRUCT (typeCode 30) has children
|
|
90
90
|
const childCount = decodeVarintInt32(src, offset, 1)[0] >>> 0;
|
|
91
91
|
const complexCol = column.complexType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddedTilesetMetadataDecoder.js","sourceRoot":"","sources":["../../../src/metadata/tileset/embeddedTilesetMetadataDecoder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AASxE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"embeddedTilesetMetadataDecoder.js","sourceRoot":"","sources":["../../../src/metadata/tileset/embeddedTilesetMetadataDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import type IntWrapper from \"../../decoding/intWrapper\";\nimport { decodeVarintInt32 } from \"../../decoding/integerDecodingUtils\";\nimport {\n type Column,\n type ComplexField,\n type FeatureTableSchema,\n type Field,\n type ScalarField,\n type TileSetMetadata,\n} from \"./tilesetMetadata\";\nimport { columnTypeHasChildren, columnTypeHasName, decodeColumnType } from \"./typeMap\";\n\nconst enum FieldOptions {\n nullable = 1 << 0,\n complexType = 1 << 1,\n logicalType = 1 << 2,\n hasChildren = 1 << 3,\n}\n\nconst textDecoder = new TextDecoder();\n\n/**\n * Decodes a length-prefixed UTF-8 string.\n * Layout: [len: varint32][bytes: len]\n */\nfunction decodeString(src: Uint8Array, offset: IntWrapper): string {\n const length = decodeVarintInt32(src, offset, 1)[0];\n if (length === 0) {\n return \"\";\n }\n const start = offset.get();\n const end = start + length;\n const view = src.subarray(start, end);\n offset.add(length);\n return textDecoder.decode(view);\n}\n\n/**\n * Decodes a Field used as part of complex types (STRUCT children).\n * Unlike Column, Field still uses the fieldOptions bitfield for flexibility.\n */\nfunction decodeField(src: Uint8Array, offset: IntWrapper): Field {\n const fieldOptions = decodeVarintInt32(src, offset, 1)[0] >>> 0;\n const isLogical = (fieldOptions & FieldOptions.logicalType) !== 0;\n const isComplex = (fieldOptions & FieldOptions.complexType) !== 0;\n\n const typeValue = decodeVarintInt32(src, offset, 1)[0] >>> 0;\n\n const field = {} as Field;\n if ((fieldOptions & FieldOptions.nullable) !== 0) {\n field.nullable = true;\n }\n\n if (isComplex) {\n const complex = {} as ComplexField;\n if (isLogical) {\n complex.type = \"logicalType\";\n complex.logicalType = typeValue;\n } else {\n complex.type = \"physicalType\";\n complex.physicalType = typeValue;\n }\n\n if ((fieldOptions & FieldOptions.hasChildren) !== 0) {\n const childCount = decodeVarintInt32(src, offset, 1)[0] >>> 0;\n complex.children = new Array(childCount);\n for (let i = 0; i < childCount; i++) {\n complex.children[i] = decodeField(src, offset);\n }\n }\n field.type = \"complexField\";\n field.complexField = complex;\n } else {\n const scalar = {} as ScalarField;\n if (isLogical) {\n scalar.type = \"logicalType\";\n scalar.logicalType = typeValue;\n } else {\n scalar.type = \"physicalType\";\n scalar.physicalType = typeValue;\n }\n field.type = \"scalarField\";\n field.scalarField = scalar;\n }\n\n return field;\n}\n\n/**\n * The typeCode encodes the column type, nullable flag, and whether it has name/children.\n */\nfunction decodeColumn(src: Uint8Array, offset: IntWrapper): Column {\n const typeCode = decodeVarintInt32(src, offset, 1)[0] >>> 0;\n const column = decodeColumnType(typeCode);\n\n if (!column) {\n throw new Error(`Unsupported column type code: ${typeCode}`);\n }\n\n if (columnTypeHasName(typeCode)) {\n column.name = decodeString(src, offset);\n } else {\n // ID and GEOMETRY columns have implicit names\n if (typeCode >= 0 && typeCode <= 3) {\n column.name = \"id\";\n } else if (typeCode === 4) {\n column.name = \"geometry\";\n }\n }\n\n if (columnTypeHasChildren(typeCode)) {\n // Only STRUCT (typeCode 30) has children\n const childCount = decodeVarintInt32(src, offset, 1)[0] >>> 0;\n const complexCol = column.complexType;\n complexCol.children = new Array(childCount);\n for (let i = 0; i < childCount; i++) {\n complexCol.children[i] = decodeField(src, offset);\n }\n }\n\n return column;\n}\n\n/**\n * Top-level decoder for embedded tileset metadata.\n * Reads exactly ONE FeatureTableSchema from the stream.\n *\n * @param bytes The byte array containing the metadata\n * @param offset The current offset in the byte array (will be advanced)\n */\nexport function decodeEmbeddedTileSetMetadata(bytes: Uint8Array, offset: IntWrapper): [TileSetMetadata, number] {\n const meta = {} as TileSetMetadata;\n meta.featureTables = [];\n\n const table = {} as FeatureTableSchema;\n table.name = decodeString(bytes, offset);\n const extent = decodeVarintInt32(bytes, offset, 1)[0] >>> 0;\n\n const columnCount = decodeVarintInt32(bytes, offset, 1)[0] >>> 0;\n table.columns = new Array(columnCount);\n for (let j = 0; j < columnCount; j++) {\n table.columns[j] = decodeColumn(bytes, offset);\n }\n\n meta.featureTables.push(table);\n\n return [meta, extent];\n}\n"]}
|
|
@@ -7,32 +7,24 @@ import { type Column } from "./tilesetMetadata";
|
|
|
7
7
|
* - Whether the column has children (typeCode == 30 for STRUCT)
|
|
8
8
|
* - For ID types: whether it uses long (64-bit) IDs
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
static hasStreamCount(column: Column): boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Maps a scalar type code to a Column with ScalarType.
|
|
34
|
-
* Type codes 10-29 encode scalar types with nullable flag.
|
|
35
|
-
* Even codes are non-nullable, odd codes are nullable.
|
|
36
|
-
*/
|
|
37
|
-
private static mapScalarType;
|
|
38
|
-
}
|
|
10
|
+
/**
|
|
11
|
+
* Decodes a type code into a Column structure.
|
|
12
|
+
* ID columns (0-3) are represented as physical UINT_32 or UINT_64 types in TypeScript
|
|
13
|
+
*/
|
|
14
|
+
export declare function decodeColumnType(typeCode: number): Column | null;
|
|
15
|
+
/**
|
|
16
|
+
* Returns true if this type code requires a name to be stored.
|
|
17
|
+
* ID (0-3) and GEOMETRY (4) columns have implicit names.
|
|
18
|
+
* All other types (>= 10) require explicit names.
|
|
19
|
+
*/
|
|
20
|
+
export declare function columnTypeHasName(typeCode: number): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Returns true if this type code has child fields.
|
|
23
|
+
* Only STRUCT (typeCode 30) has children.
|
|
24
|
+
*/
|
|
25
|
+
export declare function columnTypeHasChildren(typeCode: number): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Determines if a stream count needs to be read for this column.
|
|
28
|
+
* Mirrors the logic in cpp/include/mlt/metadata/type_map.hpp lines 81-118
|
|
29
|
+
*/
|
|
30
|
+
export declare function hasStreamCount(column: Column): boolean;
|