@maplibre/mlt 1.1.6 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/dist/decoding/bigEndianDecode.d.ts +13 -0
  2. package/dist/decoding/bigEndianDecode.js +50 -0
  3. package/dist/decoding/bigEndianDecode.js.map +1 -0
  4. package/dist/decoding/decodingTestUtils.d.ts +2 -2
  5. package/dist/decoding/decodingTestUtils.js +20 -21
  6. package/dist/decoding/decodingTestUtils.js.map +1 -1
  7. package/dist/decoding/decodingUtils.js +4 -2
  8. package/dist/decoding/decodingUtils.js.map +1 -1
  9. package/dist/decoding/fastPforDecoder.d.ts +47 -0
  10. package/dist/decoding/fastPforDecoder.js +482 -0
  11. package/dist/decoding/fastPforDecoder.js.map +1 -0
  12. package/dist/decoding/fastPforShared.d.ts +7 -0
  13. package/dist/decoding/fastPforShared.js +29 -0
  14. package/dist/decoding/fastPforShared.js.map +1 -0
  15. package/dist/decoding/fastPforUnpack.d.ts +23 -0
  16. package/dist/decoding/fastPforUnpack.js +910 -0
  17. package/dist/decoding/fastPforUnpack.js.map +1 -0
  18. package/dist/decoding/geometryDecoder.d.ts +2 -2
  19. package/dist/decoding/geometryDecoder.js +52 -49
  20. package/dist/decoding/geometryDecoder.js.map +1 -1
  21. package/dist/decoding/intWrapper.js +0 -1
  22. package/dist/decoding/intWrapper.js.map +1 -1
  23. package/dist/decoding/integerDecodingUtils.d.ts +33 -25
  24. package/dist/decoding/integerDecodingUtils.js +115 -52
  25. package/dist/decoding/integerDecodingUtils.js.map +1 -1
  26. package/dist/decoding/integerStreamDecoder.d.ts +15 -11
  27. package/dist/decoding/integerStreamDecoder.js +159 -65
  28. package/dist/decoding/integerStreamDecoder.js.map +1 -1
  29. package/dist/decoding/propertyDecoder.js +38 -36
  30. package/dist/decoding/propertyDecoder.js.map +1 -1
  31. package/dist/decoding/stringDecoder.js +19 -23
  32. package/dist/decoding/stringDecoder.js.map +1 -1
  33. package/dist/decoding/unpackNullableUtils.d.ts +2 -2
  34. package/dist/decoding/unpackNullableUtils.js.map +1 -1
  35. package/dist/encoding/bigEndianEncode.d.ts +7 -0
  36. package/dist/encoding/bigEndianEncode.js +16 -0
  37. package/dist/encoding/bigEndianEncode.js.map +1 -0
  38. package/dist/encoding/constGeometryVectorEncoder.d.ts +19 -0
  39. package/dist/encoding/constGeometryVectorEncoder.js +248 -0
  40. package/dist/encoding/constGeometryVectorEncoder.js.map +1 -0
  41. package/dist/encoding/encodingUtils.d.ts +2 -2
  42. package/dist/encoding/encodingUtils.js +3 -3
  43. package/dist/encoding/encodingUtils.js.map +1 -1
  44. package/dist/encoding/fastPforEncoder.d.ts +18 -0
  45. package/dist/encoding/fastPforEncoder.js +310 -0
  46. package/dist/encoding/fastPforEncoder.js.map +1 -0
  47. package/dist/encoding/integerEncodingUtils.d.ts +20 -20
  48. package/dist/encoding/integerEncodingUtils.js +64 -48
  49. package/dist/encoding/integerEncodingUtils.js.map +1 -1
  50. package/dist/encoding/integerStreamEncoder.d.ts +3 -2
  51. package/dist/encoding/integerStreamEncoder.js +57 -23
  52. package/dist/encoding/integerStreamEncoder.js.map +1 -1
  53. package/dist/encoding/packNullableUtils.d.ts +1 -1
  54. package/dist/encoding/packNullableUtils.js.map +1 -1
  55. package/dist/encoding/propertyEncoder.d.ts +1 -1
  56. package/dist/encoding/propertyEncoder.js +17 -24
  57. package/dist/encoding/propertyEncoder.js.map +1 -1
  58. package/dist/encoding/stringEncoder.js +9 -42
  59. package/dist/encoding/stringEncoder.js.map +1 -1
  60. package/dist/encoding/zOrderCurveEncoder.js +1 -1
  61. package/dist/encoding/zOrderCurveEncoder.js.map +1 -1
  62. package/dist/metadata/tile/logicalStreamType.d.ts +8 -12
  63. package/dist/metadata/tile/logicalStreamType.js +1 -19
  64. package/dist/metadata/tile/logicalStreamType.js.map +1 -1
  65. package/dist/metadata/tile/streamMetadataDecoder.d.ts +1 -1
  66. package/dist/metadata/tile/streamMetadataDecoder.js +9 -4
  67. package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
  68. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.d.ts +1 -1
  69. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
  70. package/dist/metadata/tileset/typeMap.d.ts +10 -2
  71. package/dist/metadata/tileset/typeMap.js +25 -15
  72. package/dist/metadata/tileset/typeMap.js.map +1 -1
  73. package/dist/mltDecoder.js +46 -47
  74. package/dist/mltDecoder.js.map +1 -1
  75. package/dist/mltMetadata.js.map +1 -1
  76. package/dist/vector/constant/int32ConstVector.d.ts +6 -0
  77. package/dist/vector/constant/int32ConstVector.js +10 -0
  78. package/dist/vector/constant/int32ConstVector.js.map +1 -0
  79. package/dist/vector/constant/int64ConstVector.d.ts +6 -0
  80. package/dist/vector/constant/int64ConstVector.js +10 -0
  81. package/dist/vector/constant/int64ConstVector.js.map +1 -0
  82. package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -2
  83. package/dist/vector/dictionary/stringDictionaryVector.js +0 -3
  84. package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
  85. package/dist/vector/featureTable.d.ts +7 -8
  86. package/dist/vector/featureTable.js +10 -42
  87. package/dist/vector/featureTable.js.map +1 -1
  88. package/dist/vector/filter/flatSelectionVector.d.ts +1 -1
  89. package/dist/vector/filter/flatSelectionVector.js +0 -2
  90. package/dist/vector/filter/flatSelectionVector.js.map +1 -1
  91. package/dist/vector/filter/selectionVectorUtils.d.ts +1 -1
  92. package/dist/vector/filter/selectionVectorUtils.js.map +1 -1
  93. package/dist/vector/filter/sequenceSelectionVector.d.ts +1 -1
  94. package/dist/vector/filter/sequenceSelectionVector.js +1 -5
  95. package/dist/vector/filter/sequenceSelectionVector.js.map +1 -1
  96. package/dist/vector/flat/bitVector.js +0 -2
  97. package/dist/vector/flat/bitVector.js.map +1 -1
  98. package/dist/vector/flat/booleanFlatVector.js +0 -1
  99. package/dist/vector/flat/booleanFlatVector.js.map +1 -1
  100. package/dist/vector/flat/{intFlatVector.d.ts → int32FlatVector.d.ts} +1 -1
  101. package/dist/vector/flat/{intFlatVector.js → int32FlatVector.js} +2 -2
  102. package/dist/vector/flat/int32FlatVector.js.map +1 -0
  103. package/dist/vector/flat/{longFlatVector.d.ts → int64FlatVector.d.ts} +1 -1
  104. package/dist/vector/flat/{longFlatVector.js → int64FlatVector.js} +2 -2
  105. package/dist/vector/flat/int64FlatVector.js.map +1 -0
  106. package/dist/vector/flat/stringFlatVector.d.ts +0 -1
  107. package/dist/vector/flat/stringFlatVector.js +0 -2
  108. package/dist/vector/flat/stringFlatVector.js.map +1 -1
  109. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -3
  110. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +0 -42
  111. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
  112. package/dist/vector/geometry/constGeometryVector.d.ts +5 -5
  113. package/dist/vector/geometry/constGeometryVector.js +1 -3
  114. package/dist/vector/geometry/constGeometryVector.js.map +1 -1
  115. package/dist/vector/geometry/constGpuVector.d.ts +4 -4
  116. package/dist/vector/geometry/constGpuVector.js +1 -3
  117. package/dist/vector/geometry/constGpuVector.js.map +1 -1
  118. package/dist/vector/geometry/flatGeometryVector.d.ts +4 -4
  119. package/dist/vector/geometry/flatGeometryVector.js +1 -5
  120. package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
  121. package/dist/vector/geometry/flatGpuVector.d.ts +3 -3
  122. package/dist/vector/geometry/flatGpuVector.js +0 -1
  123. package/dist/vector/geometry/flatGpuVector.js.map +1 -1
  124. package/dist/vector/geometry/geometryType.js.map +1 -1
  125. package/dist/vector/geometry/geometryVector.d.ts +7 -8
  126. package/dist/vector/geometry/geometryVector.js +0 -13
  127. package/dist/vector/geometry/geometryVector.js.map +1 -1
  128. package/dist/vector/geometry/geometryVectorConverter.d.ts +1 -1
  129. package/dist/vector/geometry/geometryVectorConverter.js +167 -211
  130. package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
  131. package/dist/vector/geometry/gpuVector.d.ts +6 -6
  132. package/dist/vector/geometry/gpuVector.js +0 -4
  133. package/dist/vector/geometry/gpuVector.js.map +1 -1
  134. package/dist/vector/geometry/topologyVector.d.ts +5 -9
  135. package/dist/vector/geometry/topologyVector.js +1 -19
  136. package/dist/vector/geometry/topologyVector.js.map +1 -1
  137. package/dist/vector/geometry/vertexBufferType.js.map +1 -1
  138. package/dist/vector/idVector.d.ts +8 -0
  139. package/dist/vector/idVector.js +2 -0
  140. package/dist/vector/idVector.js.map +1 -0
  141. package/dist/vector/sequence/{intSequenceVector.d.ts → int32SequenceVector.d.ts} +1 -1
  142. package/dist/vector/sequence/{intSequenceVector.js → int32SequenceVector.js} +2 -2
  143. package/dist/vector/sequence/int32SequenceVector.js.map +1 -0
  144. package/dist/vector/sequence/{longSequenceVector.d.ts → int64SequenceVector.d.ts} +1 -1
  145. package/dist/vector/sequence/{longSequenceVector.js → int64SequenceVector.js} +2 -2
  146. package/dist/vector/sequence/int64SequenceVector.js.map +1 -0
  147. package/dist/vector/sequence/sequenceVector.js +0 -1
  148. package/dist/vector/sequence/sequenceVector.js.map +1 -1
  149. package/dist/vector/variableSizeVector.js +0 -1
  150. package/dist/vector/variableSizeVector.js.map +1 -1
  151. package/dist/vector/vector.js +1 -5
  152. package/dist/vector/vector.js.map +1 -1
  153. package/dist/vector/vectorType.js.map +1 -1
  154. package/package.json +9 -10
  155. package/dist/decoding/decodingUtils.spec.d.ts +0 -1
  156. package/dist/decoding/decodingUtils.spec.js +0 -141
  157. package/dist/decoding/decodingUtils.spec.js.map +0 -1
  158. package/dist/decoding/fsstDecoder.spec.d.ts +0 -1
  159. package/dist/decoding/fsstDecoder.spec.js +0 -57
  160. package/dist/decoding/fsstDecoder.spec.js.map +0 -1
  161. package/dist/decoding/integerDecodingUtils.spec.d.ts +0 -1
  162. package/dist/decoding/integerDecodingUtils.spec.js +0 -300
  163. package/dist/decoding/integerDecodingUtils.spec.js.map +0 -1
  164. package/dist/decoding/integerStreamDecoder.spec.d.ts +0 -1
  165. package/dist/decoding/integerStreamDecoder.spec.js +0 -402
  166. package/dist/decoding/integerStreamDecoder.spec.js.map +0 -1
  167. package/dist/decoding/propertyDecoder.spec.d.ts +0 -1
  168. package/dist/decoding/propertyDecoder.spec.js +0 -448
  169. package/dist/decoding/propertyDecoder.spec.js.map +0 -1
  170. package/dist/decoding/stringDecoder.spec.d.ts +0 -1
  171. package/dist/decoding/stringDecoder.spec.js +0 -387
  172. package/dist/decoding/stringDecoder.spec.js.map +0 -1
  173. package/dist/decoding/unpackNullableUtils.spec.d.ts +0 -1
  174. package/dist/decoding/unpackNullableUtils.spec.js +0 -71
  175. package/dist/decoding/unpackNullableUtils.spec.js.map +0 -1
  176. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.d.ts +0 -1
  177. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js +0 -142
  178. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js.map +0 -1
  179. package/dist/mltDecoder.spec.d.ts +0 -1
  180. package/dist/mltDecoder.spec.js +0 -152
  181. package/dist/mltDecoder.spec.js.map +0 -1
  182. package/dist/vector/constant/intConstVector.d.ts +0 -6
  183. package/dist/vector/constant/intConstVector.js +0 -10
  184. package/dist/vector/constant/intConstVector.js.map +0 -1
  185. package/dist/vector/constant/longConstVector.d.ts +0 -6
  186. package/dist/vector/constant/longConstVector.js +0 -10
  187. package/dist/vector/constant/longConstVector.js.map +0 -1
  188. package/dist/vector/filter/flatSelectionVector.spec.d.ts +0 -1
  189. package/dist/vector/filter/flatSelectionVector.spec.js +0 -51
  190. package/dist/vector/filter/flatSelectionVector.spec.js.map +0 -1
  191. package/dist/vector/filter/selectionVectorUtil.spec.d.ts +0 -1
  192. package/dist/vector/filter/selectionVectorUtil.spec.js +0 -154
  193. package/dist/vector/filter/selectionVectorUtil.spec.js.map +0 -1
  194. package/dist/vector/filter/sequenceSelectionVector.spec.d.ts +0 -1
  195. package/dist/vector/filter/sequenceSelectionVector.spec.js +0 -115
  196. package/dist/vector/filter/sequenceSelectionVector.spec.js.map +0 -1
  197. package/dist/vector/flat/floatFlatVector.spec.d.ts +0 -1
  198. package/dist/vector/flat/floatFlatVector.spec.js +0 -14
  199. package/dist/vector/flat/floatFlatVector.spec.js.map +0 -1
  200. package/dist/vector/flat/intFlatVector.js.map +0 -1
  201. package/dist/vector/flat/intFlatVector.spec.d.ts +0 -1
  202. package/dist/vector/flat/intFlatVector.spec.js +0 -15
  203. package/dist/vector/flat/intFlatVector.spec.js.map +0 -1
  204. package/dist/vector/flat/longFlatVector.js.map +0 -1
  205. package/dist/vector/flat/longFlatVector.spec.d.ts +0 -1
  206. package/dist/vector/flat/longFlatVector.spec.js +0 -14
  207. package/dist/vector/flat/longFlatVector.spec.js.map +0 -1
  208. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.d.ts +0 -1
  209. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js +0 -28
  210. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js.map +0 -1
  211. package/dist/vector/geometry/zOrderCurve.spec.d.ts +0 -1
  212. package/dist/vector/geometry/zOrderCurve.spec.js +0 -25
  213. package/dist/vector/geometry/zOrderCurve.spec.js.map +0 -1
  214. package/dist/vector/intVector.d.ts +0 -8
  215. package/dist/vector/intVector.js +0 -2
  216. package/dist/vector/intVector.js.map +0 -1
  217. package/dist/vector/sequence/intSequenceVector.js.map +0 -1
  218. package/dist/vector/sequence/longSequenceVector.js.map +0 -1
  219. package/dist/vector/sequence/longSequenceVektor.spec.d.ts +0 -1
  220. package/dist/vector/sequence/longSequenceVektor.spec.js +0 -11
  221. package/dist/vector/sequence/longSequenceVektor.spec.js.map +0 -1
@@ -1,25 +1,23 @@
1
1
  import FeatureTable from "./vector/featureTable";
2
- import { ScalarType } from "./metadata/tileset/tilesetMetadata";
2
+ import { LogicalScalarType, ScalarType } from "./metadata/tileset/tilesetMetadata";
3
3
  import IntWrapper from "./decoding/intWrapper";
4
4
  import { decodeStreamMetadata } from "./metadata/tile/streamMetadataDecoder";
5
5
  import { VectorType } from "./vector/vectorType";
6
- import { IntFlatVector } from "./vector/flat/intFlatVector";
6
+ import { Int32FlatVector } from "./vector/flat/int32FlatVector";
7
7
  import BitVector from "./vector/flat/bitVector";
8
- import { decodeConstIntStream, decodeConstLongStream, decodeIntStream, decodeLongFloat64Stream, decodeLongStream, decodeSequenceIntStream, decodeSequenceLongStream, getVectorType, } from "./decoding/integerStreamDecoder";
9
- import { IntSequenceVector } from "./vector/sequence/intSequenceVector";
10
- import { LongFlatVector } from "./vector/flat/longFlatVector";
11
- import { LongSequenceVector } from "./vector/sequence/longSequenceVector";
8
+ import { decodeUnsignedConstInt32Stream, decodeUnsignedConstInt64Stream, decodeUnsignedInt64AsFloat64Stream, decodeUnsignedInt32Stream, decodeUnsignedInt64Stream, decodeSequenceInt32Stream, decodeSequenceInt64Stream, getVectorType, } from "./decoding/integerStreamDecoder";
9
+ import { Int32SequenceVector } from "./vector/sequence/int32SequenceVector";
10
+ import { Int64FlatVector } from "./vector/flat/int64FlatVector";
11
+ import { Int64SequenceVector } from "./vector/sequence/int64SequenceVector";
12
12
  import { decodeVarintInt32 } from "./decoding/integerDecodingUtils";
13
13
  import { decodeGeometryColumn } from "./decoding/geometryDecoder";
14
14
  import { decodePropertyColumn } from "./decoding/propertyDecoder";
15
- import { IntConstVector } from "./vector/constant/intConstVector";
16
- import { LongConstVector } from "./vector/constant/longConstVector";
15
+ import { Int32ConstVector } from "./vector/constant/int32ConstVector";
16
+ import { Int64ConstVector } from "./vector/constant/int64ConstVector";
17
17
  import { decodeBooleanRle } from "./decoding/decodingUtils";
18
18
  import { DoubleFlatVector } from "./vector/flat/doubleFlatVector";
19
19
  import { decodeEmbeddedTileSetMetadata } from "./metadata/tileset/embeddedTilesetMetadataDecoder";
20
- import { hasStreamCount } from "./metadata/tileset/typeMap";
21
- const ID_COLUMN_NAME = "id";
22
- const GEOMETRY_COLUMN_NAME = "geometry";
20
+ import { hasStreamCount, isGeometryColumn, isLogicalIdColumn } from "./metadata/tileset/typeMap";
23
21
  /**
24
22
  * Decodes a tile with embedded metadata (Tag 0x01 format).
25
23
  * This is the primary decoder function for MLT tiles.
@@ -44,19 +42,15 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
44
42
  offset.set(blockEnd);
45
43
  continue;
46
44
  }
47
- // Decode embedded metadata and extent (one of each per block)
48
- const decode = decodeEmbeddedTileSetMetadata(tile, offset);
49
- const metadata = decode[0];
50
- const extent = decode[1];
45
+ const [metadata, extent] = decodeEmbeddedTileSetMetadata(tile, offset);
51
46
  const featureTableMetadata = metadata.featureTables[0];
52
- // Decode columns from streams
53
47
  let idVector = null;
54
48
  let geometryVector = null;
55
49
  const propertyVectors = [];
56
50
  let numFeatures = 0;
57
51
  for (const columnMetadata of featureTableMetadata.columns) {
58
52
  const columnName = columnMetadata.name;
59
- if (columnName === ID_COLUMN_NAME) {
53
+ if (isLogicalIdColumn(columnMetadata)) {
60
54
  let nullabilityBuffer = null;
61
55
  // Check column metadata nullable flag, not numStreams (ID columns don't have stream count)
62
56
  if (columnMetadata.nullable) {
@@ -67,10 +61,11 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
67
61
  nullabilityBuffer = new BitVector(values, presentStreamMetadata.numValues);
68
62
  }
69
63
  const idDataStreamMetadata = decodeStreamMetadata(tile, offset);
70
- numFeatures = idDataStreamMetadata.decompressedCount;
64
+ // decompressedCount is the count WITHOUT nulls, but we may have nulls
65
+ numFeatures = nullabilityBuffer ? nullabilityBuffer.size() : idDataStreamMetadata.decompressedCount;
71
66
  idVector = decodeIdColumn(tile, columnMetadata, offset, columnName, idDataStreamMetadata, nullabilityBuffer ?? numFeatures, idWithinMaxSafeInteger);
72
67
  }
73
- else if (columnName === GEOMETRY_COLUMN_NAME) {
68
+ else if (isGeometryColumn(columnMetadata)) {
74
69
  const numStreams = decodeVarintInt32(tile, offset, 1)[0];
75
70
  // If no ID column, get numFeatures from geometry type stream metadata
76
71
  if (numFeatures === 0) {
@@ -85,9 +80,8 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
85
80
  geometryVector = decodeGeometryColumn(tile, numStreams, offset, numFeatures, geometryScaling);
86
81
  }
87
82
  else {
88
- // Property columns: STRING and STRUCT have stream count, others don't
89
- const hasStreamCnt = hasStreamCount(columnMetadata);
90
- const numStreams = hasStreamCnt ? decodeVarintInt32(tile, offset, 1)[0] : 1;
83
+ const columnHasStreamCount = hasStreamCount(columnMetadata);
84
+ const numStreams = columnHasStreamCount ? decodeVarintInt32(tile, offset, 1)[0] : 1;
91
85
  if (numStreams === 0) {
92
86
  continue;
93
87
  }
@@ -111,42 +105,47 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
111
105
  return featureTables;
112
106
  }
113
107
  function decodeIdColumn(tile, columnMetadata, offset, columnName, idDataStreamMetadata, sizeOrNullabilityBuffer, idWithinMaxSafeInteger = false) {
114
- const idDataType = columnMetadata.scalarType.physicalType;
115
- const vectorType = getVectorType(idDataStreamMetadata, sizeOrNullabilityBuffer, tile, offset);
108
+ const scalarTypeMetadata = columnMetadata.scalarType;
109
+ if (!scalarTypeMetadata ||
110
+ scalarTypeMetadata.type !== "logicalType" ||
111
+ scalarTypeMetadata.logicalType !== LogicalScalarType.ID) {
112
+ throw new Error(`ID column must be a logical ID scalar type: ${columnName}`);
113
+ }
114
+ const idDataType = scalarTypeMetadata.longID ? ScalarType.UINT_64 : ScalarType.UINT_32;
115
+ const nullabilityBuffer = typeof sizeOrNullabilityBuffer === "number" ? undefined : sizeOrNullabilityBuffer;
116
+ const vectorType = getVectorType(idDataStreamMetadata, sizeOrNullabilityBuffer, tile, offset, idDataType === ScalarType.UINT_64 ? "int64" : "int32");
116
117
  if (idDataType === ScalarType.UINT_32) {
117
118
  switch (vectorType) {
118
119
  case VectorType.FLAT: {
119
- const id = decodeIntStream(tile, offset, idDataStreamMetadata, false);
120
- return new IntFlatVector(columnName, id, sizeOrNullabilityBuffer);
120
+ const id = decodeUnsignedInt32Stream(tile, offset, idDataStreamMetadata, undefined, nullabilityBuffer);
121
+ return new Int32FlatVector(columnName, id, sizeOrNullabilityBuffer);
121
122
  }
122
123
  case VectorType.SEQUENCE: {
123
- const id = decodeSequenceIntStream(tile, offset, idDataStreamMetadata);
124
- return new IntSequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
124
+ const id = decodeSequenceInt32Stream(tile, offset, idDataStreamMetadata);
125
+ return new Int32SequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
125
126
  }
126
127
  case VectorType.CONST: {
127
- const id = decodeConstIntStream(tile, offset, idDataStreamMetadata, false);
128
- return new IntConstVector(columnName, id, sizeOrNullabilityBuffer);
128
+ const id = decodeUnsignedConstInt32Stream(tile, offset, idDataStreamMetadata);
129
+ return new Int32ConstVector(columnName, id, sizeOrNullabilityBuffer, false);
129
130
  }
130
131
  }
131
132
  }
132
- else {
133
- switch (vectorType) {
134
- case VectorType.FLAT: {
135
- if (idWithinMaxSafeInteger) {
136
- const id = decodeLongFloat64Stream(tile, offset, idDataStreamMetadata, false);
137
- return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);
138
- }
139
- const id = decodeLongStream(tile, offset, idDataStreamMetadata, false);
140
- return new LongFlatVector(columnName, id, sizeOrNullabilityBuffer);
141
- }
142
- case VectorType.SEQUENCE: {
143
- const id = decodeSequenceLongStream(tile, offset, idDataStreamMetadata);
144
- return new LongSequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
145
- }
146
- case VectorType.CONST: {
147
- const id = decodeConstLongStream(tile, offset, idDataStreamMetadata, false);
148
- return new LongConstVector(columnName, id, sizeOrNullabilityBuffer);
133
+ switch (vectorType) {
134
+ case VectorType.FLAT: {
135
+ if (idWithinMaxSafeInteger) {
136
+ const id = decodeUnsignedInt64AsFloat64Stream(tile, offset, idDataStreamMetadata);
137
+ return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);
149
138
  }
139
+ const id = decodeUnsignedInt64Stream(tile, offset, idDataStreamMetadata, nullabilityBuffer);
140
+ return new Int64FlatVector(columnName, id, sizeOrNullabilityBuffer);
141
+ }
142
+ case VectorType.SEQUENCE: {
143
+ const id = decodeSequenceInt64Stream(tile, offset, idDataStreamMetadata);
144
+ return new Int64SequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
145
+ }
146
+ case VectorType.CONST: {
147
+ const id = decodeUnsignedConstInt64Stream(tile, offset, idDataStreamMetadata);
148
+ return new Int64ConstVector(columnName, id, sizeOrNullabilityBuffer, false);
150
149
  }
151
150
  }
152
151
  throw new Error("Vector type not supported for id column.");
@@ -1 +1 @@
1
- {"version":3,"file":"mltDecoder.js","sourceRoot":"","sources":["../src/mltDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import FeatureTable from \"./vector/featureTable\";\nimport { type Column, ScalarType } from \"./metadata/tileset/tilesetMetadata\";\nimport IntWrapper from \"./decoding/intWrapper\";\nimport { decodeStreamMetadata, type RleEncodedStreamMetadata } from \"./metadata/tile/streamMetadataDecoder\";\nimport { VectorType } from \"./vector/vectorType\";\nimport { IntFlatVector } from \"./vector/flat/intFlatVector\";\nimport BitVector from \"./vector/flat/bitVector\";\nimport {\n decodeConstIntStream,\n decodeConstLongStream,\n decodeIntStream,\n decodeLongFloat64Stream,\n decodeLongStream,\n decodeSequenceIntStream,\n decodeSequenceLongStream,\n getVectorType,\n} from \"./decoding/integerStreamDecoder\";\nimport { IntSequenceVector } from \"./vector/sequence/intSequenceVector\";\nimport { LongFlatVector } from \"./vector/flat/longFlatVector\";\nimport { LongSequenceVector } from \"./vector/sequence/longSequenceVector\";\nimport { type IntVector } from \"./vector/intVector\";\nimport { decodeVarintInt32 } from \"./decoding/integerDecodingUtils\";\nimport { decodeGeometryColumn } from \"./decoding/geometryDecoder\";\nimport { decodePropertyColumn } from \"./decoding/propertyDecoder\";\nimport { IntConstVector } from \"./vector/constant/intConstVector\";\nimport { LongConstVector } from \"./vector/constant/longConstVector\";\nimport type GeometryScaling from \"./decoding/geometryScaling\";\nimport { decodeBooleanRle } from \"./decoding/decodingUtils\";\nimport { DoubleFlatVector } from \"./vector/flat/doubleFlatVector\";\nimport { decodeEmbeddedTileSetMetadata } from \"./metadata/tileset/embeddedTilesetMetadataDecoder\";\nimport { hasStreamCount } from \"./metadata/tileset/typeMap\";\nimport { type StreamMetadata } from \"./metadata/tile/streamMetadataDecoder\";\nimport { type GeometryVector } from \"./vector/geometry/geometryVector\";\nimport type Vector from \"./vector/vector\";\nimport { type GpuVector } from \"./vector/geometry/gpuVector\";\n\nconst ID_COLUMN_NAME = \"id\";\nconst GEOMETRY_COLUMN_NAME = \"geometry\";\n\n/**\n * Decodes a tile with embedded metadata (Tag 0x01 format).\n * This is the primary decoder function for MLT tiles.\n *\n * @param tile The tile data to decode (will be decompressed if gzip-compressed)\n * @param geometryScaling Optional geometry scaling parameters\n * @param idWithinMaxSafeInteger If true, limits ID values to JavaScript safe integer range (53 bits)\n */\nexport default function decodeTile(\n tile: Uint8Array,\n geometryScaling?: GeometryScaling,\n idWithinMaxSafeInteger = true,\n): FeatureTable[] {\n const offset = new IntWrapper(0);\n const featureTables: FeatureTable[] = [];\n\n while (offset.get() < tile.length) {\n const blockLength = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n const blockStart = offset.get();\n const blockEnd = blockStart + blockLength;\n if (blockEnd > tile.length) {\n throw new Error(`Block overruns tile: ${blockEnd} > ${tile.length}`);\n }\n\n const tag = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n if (tag !== 1) {\n // Skip unknown block types\n offset.set(blockEnd);\n continue;\n }\n\n // Decode embedded metadata and extent (one of each per block)\n const decode = decodeEmbeddedTileSetMetadata(tile, offset);\n const metadata = decode[0];\n const extent = decode[1];\n const featureTableMetadata = metadata.featureTables[0];\n\n // Decode columns from streams\n let idVector: IntVector | null = null;\n let geometryVector: GeometryVector | GpuVector | null = null;\n const propertyVectors: Vector[] = [];\n let numFeatures = 0;\n\n for (const columnMetadata of featureTableMetadata.columns) {\n const columnName = columnMetadata.name;\n\n if (columnName === ID_COLUMN_NAME) {\n let nullabilityBuffer = null;\n // Check column metadata nullable flag, not numStreams (ID columns don't have stream count)\n if (columnMetadata.nullable) {\n const presentStreamMetadata = decodeStreamMetadata(tile, offset);\n const streamDataStart = offset.get();\n const values = decodeBooleanRle(tile, presentStreamMetadata.numValues, presentStreamMetadata.byteLength, offset);\n offset.set(streamDataStart + presentStreamMetadata.byteLength);\n nullabilityBuffer = new BitVector(values, presentStreamMetadata.numValues);\n }\n\n const idDataStreamMetadata = decodeStreamMetadata(tile, offset);\n numFeatures = idDataStreamMetadata.decompressedCount;\n\n idVector = decodeIdColumn(\n tile,\n columnMetadata,\n offset,\n columnName,\n idDataStreamMetadata,\n nullabilityBuffer ?? numFeatures,\n idWithinMaxSafeInteger,\n );\n } else if (columnName === GEOMETRY_COLUMN_NAME) {\n const numStreams = decodeVarintInt32(tile, offset, 1)[0];\n\n // If no ID column, get numFeatures from geometry type stream metadata\n if (numFeatures === 0) {\n const savedOffset = offset.get();\n const geometryTypeMetadata = decodeStreamMetadata(tile, offset);\n numFeatures = geometryTypeMetadata.decompressedCount;\n offset.set(savedOffset); // Reset to re-read in decodeGeometryColumn\n }\n\n if (geometryScaling) {\n geometryScaling.scale = geometryScaling.extent / extent;\n }\n\n geometryVector = decodeGeometryColumn(tile, numStreams, offset, numFeatures, geometryScaling);\n } else {\n // Property columns: STRING and STRUCT have stream count, others don't\n const hasStreamCnt = hasStreamCount(columnMetadata);\n const numStreams = hasStreamCnt ? decodeVarintInt32(tile, offset, 1)[0] : 1;\n\n if (numStreams === 0) {\n continue;\n }\n\n const propertyVector = decodePropertyColumn(\n tile,\n offset,\n columnMetadata,\n numStreams,\n numFeatures,\n undefined,\n );\n if (propertyVector) {\n if (Array.isArray(propertyVector)) {\n for (const property of propertyVector) {\n propertyVectors.push(property);\n }\n } else {\n propertyVectors.push(propertyVector);\n }\n }\n }\n }\n\n const featureTable = new FeatureTable(\n featureTableMetadata.name,\n geometryVector,\n idVector,\n propertyVectors,\n extent,\n );\n featureTables.push(featureTable);\n offset.set(blockEnd);\n }\n\n return featureTables;\n}\n\nfunction decodeIdColumn(\n tile: Uint8Array,\n columnMetadata: Column,\n offset: IntWrapper,\n columnName: string,\n idDataStreamMetadata: StreamMetadata,\n sizeOrNullabilityBuffer: number | BitVector,\n idWithinMaxSafeInteger: boolean = false,\n): IntVector {\n const idDataType = columnMetadata.scalarType.physicalType;\n const vectorType = getVectorType(idDataStreamMetadata, sizeOrNullabilityBuffer, tile, offset);\n if (idDataType === ScalarType.UINT_32) {\n switch (vectorType) {\n case VectorType.FLAT: {\n const id = decodeIntStream(tile, offset, idDataStreamMetadata, false);\n return new IntFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceIntStream(tile, offset, idDataStreamMetadata);\n return new IntSequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeConstIntStream(tile, offset, idDataStreamMetadata, false);\n return new IntConstVector(columnName, id, sizeOrNullabilityBuffer);\n }\n }\n } else {\n switch (vectorType) {\n case VectorType.FLAT: {\n if (idWithinMaxSafeInteger) {\n const id = decodeLongFloat64Stream(tile, offset, idDataStreamMetadata, false);\n return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n\n const id = decodeLongStream(tile, offset, idDataStreamMetadata, false);\n return new LongFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceLongStream(tile, offset, idDataStreamMetadata);\n return new LongSequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeConstLongStream(tile, offset, idDataStreamMetadata, false);\n return new LongConstVector(columnName, id, sizeOrNullabilityBuffer);\n }\n }\n }\n\n throw new Error(\"Vector type not supported for id column.\");\n}\n"]}
1
+ {"version":3,"file":"mltDecoder.js","sourceRoot":"","sources":["../src/mltDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import FeatureTable from \"./vector/featureTable\";\nimport { type Column, LogicalScalarType, ScalarType } from \"./metadata/tileset/tilesetMetadata\";\nimport IntWrapper from \"./decoding/intWrapper\";\nimport { decodeStreamMetadata, type RleEncodedStreamMetadata } from \"./metadata/tile/streamMetadataDecoder\";\nimport { VectorType } from \"./vector/vectorType\";\nimport { Int32FlatVector } from \"./vector/flat/int32FlatVector\";\nimport BitVector from \"./vector/flat/bitVector\";\nimport {\n decodeUnsignedConstInt32Stream,\n decodeUnsignedConstInt64Stream,\n decodeUnsignedInt64AsFloat64Stream,\n decodeUnsignedInt32Stream,\n decodeUnsignedInt64Stream,\n decodeSequenceInt32Stream,\n decodeSequenceInt64Stream,\n getVectorType,\n} from \"./decoding/integerStreamDecoder\";\nimport { Int32SequenceVector } from \"./vector/sequence/int32SequenceVector\";\nimport { Int64FlatVector } from \"./vector/flat/int64FlatVector\";\nimport { Int64SequenceVector } from \"./vector/sequence/int64SequenceVector\";\nimport type { IdVector } from \"./vector/idVector\";\nimport { decodeVarintInt32 } from \"./decoding/integerDecodingUtils\";\nimport { decodeGeometryColumn } from \"./decoding/geometryDecoder\";\nimport { decodePropertyColumn } from \"./decoding/propertyDecoder\";\nimport { Int32ConstVector } from \"./vector/constant/int32ConstVector\";\nimport { Int64ConstVector } from \"./vector/constant/int64ConstVector\";\nimport type GeometryScaling from \"./decoding/geometryScaling\";\nimport { decodeBooleanRle } from \"./decoding/decodingUtils\";\nimport { DoubleFlatVector } from \"./vector/flat/doubleFlatVector\";\nimport { decodeEmbeddedTileSetMetadata } from \"./metadata/tileset/embeddedTilesetMetadataDecoder\";\nimport { hasStreamCount, isGeometryColumn, isLogicalIdColumn } from \"./metadata/tileset/typeMap\";\nimport type { StreamMetadata } from \"./metadata/tile/streamMetadataDecoder\";\nimport type { GeometryVector } from \"./vector/geometry/geometryVector\";\nimport type Vector from \"./vector/vector\";\nimport type { GpuVector } from \"./vector/geometry/gpuVector\";\n\n/**\n * Decodes a tile with embedded metadata (Tag 0x01 format).\n * This is the primary decoder function for MLT tiles.\n *\n * @param tile The tile data to decode (will be decompressed if gzip-compressed)\n * @param geometryScaling Optional geometry scaling parameters\n * @param idWithinMaxSafeInteger If true, limits ID values to JavaScript safe integer range (53 bits)\n */\nexport default function decodeTile(\n tile: Uint8Array,\n geometryScaling?: GeometryScaling,\n idWithinMaxSafeInteger = true,\n): FeatureTable[] {\n const offset = new IntWrapper(0);\n const featureTables: FeatureTable[] = [];\n\n while (offset.get() < tile.length) {\n const blockLength = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n const blockStart = offset.get();\n const blockEnd = blockStart + blockLength;\n if (blockEnd > tile.length) {\n throw new Error(`Block overruns tile: ${blockEnd} > ${tile.length}`);\n }\n\n const tag = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n if (tag !== 1) {\n // Skip unknown block types\n offset.set(blockEnd);\n continue;\n }\n\n const [metadata, extent] = decodeEmbeddedTileSetMetadata(tile, offset);\n const featureTableMetadata = metadata.featureTables[0];\n\n let idVector: IdVector | null = null;\n let geometryVector: GeometryVector | GpuVector | null = null;\n const propertyVectors: Vector[] = [];\n let numFeatures = 0;\n\n for (const columnMetadata of featureTableMetadata.columns) {\n const columnName = columnMetadata.name;\n\n if (isLogicalIdColumn(columnMetadata)) {\n let nullabilityBuffer = null;\n // Check column metadata nullable flag, not numStreams (ID columns don't have stream count)\n if (columnMetadata.nullable) {\n const presentStreamMetadata = decodeStreamMetadata(tile, offset);\n const streamDataStart = offset.get();\n const values = decodeBooleanRle(\n tile,\n presentStreamMetadata.numValues,\n presentStreamMetadata.byteLength,\n offset,\n );\n offset.set(streamDataStart + presentStreamMetadata.byteLength);\n nullabilityBuffer = new BitVector(values, presentStreamMetadata.numValues);\n }\n\n const idDataStreamMetadata = decodeStreamMetadata(tile, offset);\n // decompressedCount is the count WITHOUT nulls, but we may have nulls\n numFeatures = nullabilityBuffer ? nullabilityBuffer.size() : idDataStreamMetadata.decompressedCount;\n\n idVector = decodeIdColumn(\n tile,\n columnMetadata,\n offset,\n columnName,\n idDataStreamMetadata,\n nullabilityBuffer ?? numFeatures,\n idWithinMaxSafeInteger,\n );\n } else if (isGeometryColumn(columnMetadata)) {\n const numStreams = decodeVarintInt32(tile, offset, 1)[0];\n\n // If no ID column, get numFeatures from geometry type stream metadata\n if (numFeatures === 0) {\n const savedOffset = offset.get();\n const geometryTypeMetadata = decodeStreamMetadata(tile, offset);\n numFeatures = geometryTypeMetadata.decompressedCount;\n offset.set(savedOffset); // Reset to re-read in decodeGeometryColumn\n }\n\n if (geometryScaling) {\n geometryScaling.scale = geometryScaling.extent / extent;\n }\n\n geometryVector = decodeGeometryColumn(tile, numStreams, offset, numFeatures, geometryScaling);\n } else {\n const columnHasStreamCount = hasStreamCount(columnMetadata);\n const numStreams = columnHasStreamCount ? decodeVarintInt32(tile, offset, 1)[0] : 1;\n\n if (numStreams === 0) {\n continue;\n }\n\n const propertyVector = decodePropertyColumn(\n tile,\n offset,\n columnMetadata,\n numStreams,\n numFeatures,\n undefined,\n );\n if (propertyVector) {\n if (Array.isArray(propertyVector)) {\n for (const property of propertyVector) {\n propertyVectors.push(property);\n }\n } else {\n propertyVectors.push(propertyVector);\n }\n }\n }\n }\n\n const featureTable = new FeatureTable(\n featureTableMetadata.name,\n geometryVector,\n idVector,\n propertyVectors,\n extent,\n );\n featureTables.push(featureTable);\n offset.set(blockEnd);\n }\n\n return featureTables;\n}\n\nfunction decodeIdColumn(\n tile: Uint8Array,\n columnMetadata: Column,\n offset: IntWrapper,\n columnName: string,\n idDataStreamMetadata: StreamMetadata,\n sizeOrNullabilityBuffer: number | BitVector,\n idWithinMaxSafeInteger = false,\n): IdVector {\n const scalarTypeMetadata = columnMetadata.scalarType;\n if (\n !scalarTypeMetadata ||\n scalarTypeMetadata.type !== \"logicalType\" ||\n scalarTypeMetadata.logicalType !== LogicalScalarType.ID\n ) {\n throw new Error(`ID column must be a logical ID scalar type: ${columnName}`);\n }\n\n const idDataType = scalarTypeMetadata.longID ? ScalarType.UINT_64 : ScalarType.UINT_32;\n const nullabilityBuffer = typeof sizeOrNullabilityBuffer === \"number\" ? undefined : sizeOrNullabilityBuffer;\n\n const vectorType = getVectorType(\n idDataStreamMetadata,\n sizeOrNullabilityBuffer,\n tile,\n offset,\n idDataType === ScalarType.UINT_64 ? \"int64\" : \"int32\",\n );\n if (idDataType === ScalarType.UINT_32) {\n switch (vectorType) {\n case VectorType.FLAT: {\n const id = decodeUnsignedInt32Stream(tile, offset, idDataStreamMetadata, undefined, nullabilityBuffer);\n return new Int32FlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceInt32Stream(tile, offset, idDataStreamMetadata);\n return new Int32SequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeUnsignedConstInt32Stream(tile, offset, idDataStreamMetadata);\n return new Int32ConstVector(columnName, id, sizeOrNullabilityBuffer, false);\n }\n }\n }\n switch (vectorType) {\n case VectorType.FLAT: {\n if (idWithinMaxSafeInteger) {\n const id = decodeUnsignedInt64AsFloat64Stream(tile, offset, idDataStreamMetadata);\n return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n const id = decodeUnsignedInt64Stream(tile, offset, idDataStreamMetadata, nullabilityBuffer);\n return new Int64FlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceInt64Stream(tile, offset, idDataStreamMetadata);\n return new Int64SequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeUnsignedConstInt64Stream(tile, offset, idDataStreamMetadata);\n return new Int64ConstVector(columnName, id, sizeOrNullabilityBuffer, false);\n }\n }\n\n throw new Error(\"Vector type not supported for id column.\");\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mltMetadata.js","sourceRoot":"","sources":["../src/mltMetadata.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAWX;AAXD,WAAY,cAAc;IACtB,uDAAM,CAAA;IACN,qDAAK,CAAA;IACL,uDAAM,CAAA;IACN,uDAAM,CAAA;IACN,yDAAO,CAAA;IACP,yDAAO,CAAA;IACP,2DAAQ,CAAA;IACR,+DAAU,CAAA;IACV,+DAAU,CAAA;IACV,iEAAW,CAAA;AACf,CAAC,EAXW,cAAc,KAAd,cAAc,QAWzB;AAED,MAAM,CAAN,IAAY,cAeX;AAfD,WAAY,cAAc;IACtB;;;SAGK;IACL,qDAAK,CAAA;IACL,uDAAM,CAAA;IACN,mEAAY,CAAA;IACZ,iDAAG,CAAA;IACH,iEAAW,CAAA;IACX,2DAAQ,CAAA;IACR,+DAAU,CAAA;IACV,mFAAoB,CAAA;IACpB,6FAAyB,CAAA;IACzB,iGAA2B,CAAA;AAC/B,CAAC,EAfW,cAAc,KAAd,cAAc,QAezB","sourcesContent":["export enum ColumnDataType {\n STRING,\n FLOAT,\n DOUBLE,\n INT_64,\n UINT_64,\n BOOLEAN,\n GEOMETRY,\n GEOMETRY_M,\n GEOMETRY_Z,\n GEOMETRY_ZM,\n}\n\nexport enum ColumnEncoding {\n /*\n * String -> no dictionary coding\n * Geometry -> standard unsorted encoding\n * */\n PLAIN,\n VARINT,\n DELTA_VARINT,\n RLE,\n BOOLEAN_RLE,\n BYTE_RLE,\n DICTIONARY,\n LOCALIZED_DICTIONARY,\n ORDERED_GEOMETRY_ENCODING,\n INDEXED_COORDINATE_ENCODING,\n}\n\nexport interface ColumnMetadata {\n columnName: string;\n columnType: ColumnDataType;\n columnEncoding: ColumnEncoding;\n streams: Map<string, StreamMetadata>;\n}\n\nexport interface StreamMetadata {\n numValues: number;\n byteLength: number;\n}\n\nexport interface LayerMetadata {\n name: string;\n numColumns: number;\n numFeatures: number;\n columnMetadata: ColumnMetadata[];\n}\n"]}
1
+ {"version":3,"file":"mltMetadata.js","sourceRoot":"","sources":["../src/mltMetadata.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAWX;AAXD,WAAY,cAAc;IACtB,uDAAU,CAAA;IACV,qDAAS,CAAA;IACT,uDAAU,CAAA;IACV,uDAAU,CAAA;IACV,yDAAW,CAAA;IACX,yDAAW,CAAA;IACX,2DAAY,CAAA;IACZ,+DAAc,CAAA;IACd,+DAAc,CAAA;IACd,iEAAe,CAAA;AACnB,CAAC,EAXW,cAAc,KAAd,cAAc,QAWzB;AAED,MAAM,CAAN,IAAY,cAeX;AAfD,WAAY,cAAc;IACtB;;;SAGK;IACL,qDAAS,CAAA;IACT,uDAAU,CAAA;IACV,mEAAgB,CAAA;IAChB,iDAAO,CAAA;IACP,iEAAe,CAAA;IACf,2DAAY,CAAA;IACZ,+DAAc,CAAA;IACd,mFAAwB,CAAA;IACxB,6FAA6B,CAAA;IAC7B,iGAA+B,CAAA;AACnC,CAAC,EAfW,cAAc,KAAd,cAAc,QAezB","sourcesContent":["export enum ColumnDataType {\n STRING = 0,\n FLOAT = 1,\n DOUBLE = 2,\n INT_64 = 3,\n UINT_64 = 4,\n BOOLEAN = 5,\n GEOMETRY = 6,\n GEOMETRY_M = 7,\n GEOMETRY_Z = 8,\n GEOMETRY_ZM = 9,\n}\n\nexport enum ColumnEncoding {\n /*\n * String -> no dictionary coding\n * Geometry -> standard unsorted encoding\n * */\n PLAIN = 0,\n VARINT = 1,\n DELTA_VARINT = 2,\n RLE = 3,\n BOOLEAN_RLE = 4,\n BYTE_RLE = 5,\n DICTIONARY = 6,\n LOCALIZED_DICTIONARY = 7,\n ORDERED_GEOMETRY_ENCODING = 8,\n INDEXED_COORDINATE_ENCODING = 9,\n}\n\nexport interface ColumnMetadata {\n columnName: string;\n columnType: ColumnDataType;\n columnEncoding: ColumnEncoding;\n streams: Map<string, StreamMetadata>;\n}\n\nexport interface StreamMetadata {\n numValues: number;\n byteLength: number;\n}\n\nexport interface LayerMetadata {\n name: string;\n numColumns: number;\n numFeatures: number;\n columnMetadata: ColumnMetadata[];\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type BitVector from "../flat/bitVector";
2
+ import Vector from "../vector";
3
+ export declare class Int32ConstVector extends Vector<Int32Array | Uint32Array, number> {
4
+ constructor(name: string, value: number, sizeOrNullabilityBuffer: number | BitVector, isSigned: boolean);
5
+ protected getValueFromBuffer(_index: number): number;
6
+ }
@@ -0,0 +1,10 @@
1
+ import Vector from "../vector";
2
+ export class Int32ConstVector extends Vector {
3
+ constructor(name, value, sizeOrNullabilityBuffer, isSigned) {
4
+ super(name, isSigned ? Int32Array.of(value) : Uint32Array.of(value), sizeOrNullabilityBuffer);
5
+ }
6
+ getValueFromBuffer(_index) {
7
+ return this.dataBuffer[0];
8
+ }
9
+ }
10
+ //# sourceMappingURL=int32ConstVector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int32ConstVector.js","sourceRoot":"","sources":["../../../src/vector/constant/int32ConstVector.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,MAAM,OAAO,gBAAiB,SAAQ,MAAwC;IAC1E,YAAmB,IAAY,EAAE,KAAa,EAAE,uBAA2C,EAAE,QAAiB;QAC1G,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC,CAAC;IAClG,CAAC;IAES,kBAAkB,CAAC,MAAc;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;CACJ","sourcesContent":["import type BitVector from \"../flat/bitVector\";\nimport Vector from \"../vector\";\n\nexport class Int32ConstVector extends Vector<Int32Array | Uint32Array, number> {\n public constructor(name: string, value: number, sizeOrNullabilityBuffer: number | BitVector, isSigned: boolean) {\n super(name, isSigned ? Int32Array.of(value) : Uint32Array.of(value), sizeOrNullabilityBuffer);\n }\n\n protected getValueFromBuffer(_index: number): number {\n return this.dataBuffer[0];\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type BitVector from "../flat/bitVector";
2
+ import Vector from "../vector";
3
+ export declare class Int64ConstVector extends Vector<BigInt64Array | BigUint64Array, bigint> {
4
+ constructor(name: string, value: bigint, sizeOrNullabilityBuffer: number | BitVector, isSigned: boolean);
5
+ protected getValueFromBuffer(_index: number): bigint;
6
+ }
@@ -0,0 +1,10 @@
1
+ import Vector from "../vector";
2
+ export class Int64ConstVector extends Vector {
3
+ constructor(name, value, sizeOrNullabilityBuffer, isSigned) {
4
+ super(name, isSigned ? BigInt64Array.of(value) : BigUint64Array.of(value), sizeOrNullabilityBuffer);
5
+ }
6
+ getValueFromBuffer(_index) {
7
+ return this.dataBuffer[0];
8
+ }
9
+ }
10
+ //# sourceMappingURL=int64ConstVector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int64ConstVector.js","sourceRoot":"","sources":["../../../src/vector/constant/int64ConstVector.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,MAAM,OAAO,gBAAiB,SAAQ,MAA8C;IAChF,YAAmB,IAAY,EAAE,KAAa,EAAE,uBAA2C,EAAE,QAAiB;QAC1G,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC,CAAC;IACxG,CAAC;IAES,kBAAkB,CAAC,MAAc;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;CACJ","sourcesContent":["import type BitVector from \"../flat/bitVector\";\nimport Vector from \"../vector\";\n\nexport class Int64ConstVector extends Vector<BigInt64Array | BigUint64Array, bigint> {\n public constructor(name: string, value: bigint, sizeOrNullabilityBuffer: number | BitVector, isSigned: boolean) {\n super(name, isSigned ? BigInt64Array.of(value) : BigUint64Array.of(value), sizeOrNullabilityBuffer);\n }\n\n protected getValueFromBuffer(_index: number): bigint {\n return this.dataBuffer[0];\n }\n}\n"]}
@@ -2,7 +2,6 @@ import { VariableSizeVector } from "../variableSizeVector";
2
2
  import type BitVector from "../flat/bitVector";
3
3
  export declare class StringDictionaryVector extends VariableSizeVector<Uint8Array, string> {
4
4
  private readonly indexBuffer;
5
- private readonly textEncoder;
6
- constructor(name: string, indexBuffer: Int32Array, offsetBuffer: Uint32Array, dictionaryBuffer: Uint8Array, nullabilityBuffer?: BitVector);
5
+ constructor(name: string, indexBuffer: Uint32Array, offsetBuffer: Uint32Array, dictionaryBuffer: Uint8Array, nullabilityBuffer?: BitVector);
7
6
  protected getValueFromBuffer(index: number): string;
8
7
  }
@@ -1,13 +1,10 @@
1
1
  import { VariableSizeVector } from "../variableSizeVector";
2
2
  import { decodeString } from "../../decoding/decodingUtils";
3
3
  export class StringDictionaryVector extends VariableSizeVector {
4
- indexBuffer;
5
- textEncoder;
6
4
  constructor(name, indexBuffer, offsetBuffer, dictionaryBuffer, nullabilityBuffer) {
7
5
  super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);
8
6
  this.indexBuffer = indexBuffer;
9
7
  this.indexBuffer = indexBuffer;
10
- this.textEncoder = new TextEncoder();
11
8
  }
12
9
  getValueFromBuffer(index) {
13
10
  const offset = this.indexBuffer[index];
@@ -1 +1 @@
1
- {"version":3,"file":"stringDictionaryVector.js","sourceRoot":"","sources":["../../../src/vector/dictionary/stringDictionaryVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,sBAAuB,SAAQ,kBAAsC;IAKzD;IAJJ,WAAW,CAAc;IAE1C,YACI,IAAY,EACK,WAAuB,EACxC,YAAyB,EACzB,gBAA4B,EAC5B,iBAA6B;QAE7B,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QALpE,gBAAW,GAAX,WAAW,CAAY;QAMxC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACzC,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;CACJ","sourcesContent":["import { VariableSizeVector } from \"../variableSizeVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { decodeString } from \"../../decoding/decodingUtils\";\n\nexport class StringDictionaryVector extends VariableSizeVector<Uint8Array, string> {\n private readonly textEncoder: TextEncoder;\n\n constructor(\n name: string,\n private readonly indexBuffer: Int32Array,\n offsetBuffer: Uint32Array,\n dictionaryBuffer: Uint8Array,\n nullabilityBuffer?: BitVector,\n ) {\n super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);\n this.indexBuffer = indexBuffer;\n this.textEncoder = new TextEncoder();\n }\n\n protected getValueFromBuffer(index: number): string {\n const offset = this.indexBuffer[index];\n const start = this.offsetBuffer[offset];\n const end = this.offsetBuffer[offset + 1];\n return decodeString(this.dataBuffer, start, end);\n }\n}\n"]}
1
+ {"version":3,"file":"stringDictionaryVector.js","sourceRoot":"","sources":["../../../src/vector/dictionary/stringDictionaryVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,sBAAuB,SAAQ,kBAAsC;IAC9E,YACI,IAAY,EACK,WAAwB,EACzC,YAAyB,EACzB,gBAA4B,EAC5B,iBAA6B;QAE7B,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QALpE,gBAAW,GAAX,WAAW,CAAa;QAMzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;CACJ","sourcesContent":["import { VariableSizeVector } from \"../variableSizeVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { decodeString } from \"../../decoding/decodingUtils\";\n\nexport class StringDictionaryVector extends VariableSizeVector<Uint8Array, string> {\n constructor(\n name: string,\n private readonly indexBuffer: Uint32Array,\n offsetBuffer: Uint32Array,\n dictionaryBuffer: Uint8Array,\n nullabilityBuffer?: BitVector,\n ) {\n super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);\n this.indexBuffer = indexBuffer;\n }\n\n protected getValueFromBuffer(index: number): string {\n const offset = this.indexBuffer[index];\n const start = this.offsetBuffer[offset];\n const end = this.offsetBuffer[offset + 1];\n return decodeString(this.dataBuffer, start, end);\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { type Geometry, type GeometryVector } from "./geometry/geometryVector";
1
+ import type { Geometry, GeometryVector } from "./geometry/geometryVector";
2
2
  import type Vector from "./vector";
3
- import { type IntVector } from "./intVector";
4
- import { type GpuVector } from "./geometry/gpuVector";
3
+ import type { IdVector } from "./idVector";
4
+ import type { GpuVector } from "./geometry/gpuVector";
5
5
  export interface Feature {
6
6
  id: number | bigint;
7
7
  geometry: Geometry;
@@ -9,25 +9,24 @@ export interface Feature {
9
9
  [key: string]: unknown;
10
10
  };
11
11
  }
12
- export default class FeatureTable implements Iterable<Feature> {
12
+ export default class FeatureTable {
13
13
  private readonly _name;
14
14
  private readonly _geometryVector;
15
15
  private readonly _idVector?;
16
16
  private readonly _propertyVectors?;
17
17
  private readonly _extent;
18
18
  private propertyVectorsMap;
19
- constructor(_name: string, _geometryVector: GeometryVector | GpuVector, _idVector?: IntVector, _propertyVectors?: Vector[], _extent?: number);
19
+ constructor(_name: string, _geometryVector: GeometryVector | GpuVector, _idVector?: IdVector, _propertyVectors?: Vector[], _extent?: number);
20
20
  get name(): string;
21
- get idVector(): IntVector;
21
+ get idVector(): IdVector;
22
22
  get geometryVector(): GeometryVector | GpuVector;
23
23
  get propertyVectors(): Vector[];
24
24
  getPropertyVector(name: string): Vector;
25
- [Symbol.iterator](): Iterator<Feature>;
26
25
  get numFeatures(): number;
27
26
  get extent(): number;
28
27
  /**
29
28
  * Returns all features as an array
30
29
  */
31
30
  getFeatures(): Feature[];
32
- private containsMaxSaveIntegerValues;
31
+ private containsMaxSafeIntegerValues;
33
32
  }
@@ -1,14 +1,8 @@
1
- import { IntFlatVector } from "./flat/intFlatVector";
1
+ import { Int32FlatVector } from "./flat/int32FlatVector";
2
2
  import { DoubleFlatVector } from "./flat/doubleFlatVector";
3
- import { IntSequenceVector } from "./sequence/intSequenceVector";
4
- import { IntConstVector } from "./constant/intConstVector";
3
+ import { Int32SequenceVector } from "./sequence/int32SequenceVector";
4
+ import { Int32ConstVector } from "./constant/int32ConstVector";
5
5
  export default class FeatureTable {
6
- _name;
7
- _geometryVector;
8
- _idVector;
9
- _propertyVectors;
10
- _extent;
11
- propertyVectorsMap;
12
6
  constructor(_name, _geometryVector, _idVector, _propertyVectors, _extent = 4096) {
13
7
  this._name = _name;
14
8
  this._geometryVector = _geometryVector;
@@ -34,32 +28,6 @@ export default class FeatureTable {
34
28
  }
35
29
  return this.propertyVectorsMap.get(name);
36
30
  }
37
- *[Symbol.iterator]() {
38
- const geometryIterator = this.geometryVector[Symbol.iterator]();
39
- let index = 0;
40
- while (index < this.numFeatures) {
41
- let id;
42
- if (this.idVector) {
43
- id = this.containsMaxSaveIntegerValues(this.idVector)
44
- ? Number(this.idVector.getValue(index))
45
- : this.idVector.getValue(index);
46
- }
47
- const geometry = geometryIterator?.next().value;
48
- const properties = {};
49
- for (const propertyColumn of this.propertyVectors) {
50
- if (!propertyColumn) {
51
- continue;
52
- }
53
- const columnName = propertyColumn.name;
54
- const propertyValue = propertyColumn.getValue(index);
55
- if (propertyValue !== null) {
56
- properties[columnName] = propertyValue;
57
- }
58
- }
59
- index++;
60
- yield { id, geometry, properties };
61
- }
62
- }
63
31
  get numFeatures() {
64
32
  return this.geometryVector.numGeometries;
65
33
  }
@@ -75,9 +43,8 @@ export default class FeatureTable {
75
43
  for (let i = 0; i < this.numFeatures; i++) {
76
44
  let id;
77
45
  if (this.idVector) {
78
- id = this.containsMaxSaveIntegerValues(this.idVector)
79
- ? Number(this.idVector.getValue(i))
80
- : this.idVector.getValue(i);
46
+ const idValue = this.idVector.getValue(i);
47
+ id = this.containsMaxSafeIntegerValues(this.idVector) && idValue !== null ? Number(idValue) : idValue;
81
48
  }
82
49
  const geometry = {
83
50
  coordinates: geometries[i],
@@ -97,10 +64,11 @@ export default class FeatureTable {
97
64
  }
98
65
  return features;
99
66
  }
100
- containsMaxSaveIntegerValues(intVector) {
101
- return (intVector instanceof IntFlatVector ||
102
- (intVector instanceof IntConstVector && intVector instanceof IntSequenceVector) ||
103
- intVector instanceof DoubleFlatVector);
67
+ containsMaxSafeIntegerValues(idVector) {
68
+ return (idVector instanceof Int32FlatVector ||
69
+ idVector instanceof Int32ConstVector ||
70
+ idVector instanceof Int32SequenceVector ||
71
+ idVector instanceof DoubleFlatVector);
104
72
  }
105
73
  }
106
74
  //# sourceMappingURL=featureTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"featureTable.js","sourceRoot":"","sources":["../../src/vector/featureTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Geometry, type GeometryVector } from \"./geometry/geometryVector\";\nimport type Vector from \"./vector\";\nimport { type IntVector } from \"./intVector\";\nimport { IntFlatVector } from \"./flat/intFlatVector\";\nimport { DoubleFlatVector } from \"./flat/doubleFlatVector\";\nimport { IntSequenceVector } from \"./sequence/intSequenceVector\";\nimport { IntConstVector } from \"./constant/intConstVector\";\nimport { type GpuVector } from \"./geometry/gpuVector\";\n\nexport interface Feature {\n id: number | bigint;\n geometry: Geometry;\n properties: { [key: string]: unknown };\n}\n\nexport default class FeatureTable implements Iterable<Feature> {\n private propertyVectorsMap: Map<string, Vector>;\n\n constructor(\n private readonly _name: string,\n private readonly _geometryVector: GeometryVector | GpuVector,\n private readonly _idVector?: IntVector,\n private readonly _propertyVectors?: Vector[],\n private readonly _extent = 4096,\n ) {}\n\n get name(): string {\n return this._name;\n }\n\n get idVector(): IntVector {\n return this._idVector;\n }\n\n get geometryVector(): GeometryVector | GpuVector {\n return this._geometryVector;\n }\n\n get propertyVectors(): Vector[] {\n return this._propertyVectors;\n }\n\n getPropertyVector(name: string): Vector {\n if (!this.propertyVectorsMap) {\n this.propertyVectorsMap = new Map(this._propertyVectors.map((vector) => [vector.name, vector]));\n }\n\n return this.propertyVectorsMap.get(name);\n }\n\n *[Symbol.iterator](): Iterator<Feature> {\n const geometryIterator = this.geometryVector[Symbol.iterator]();\n let index = 0;\n\n while (index < this.numFeatures) {\n let id;\n if (this.idVector) {\n id = this.containsMaxSaveIntegerValues(this.idVector)\n ? Number(this.idVector.getValue(index))\n : this.idVector.getValue(index);\n }\n\n const geometry = geometryIterator?.next().value;\n\n const properties: { [key: string]: unknown } = {};\n for (const propertyColumn of this.propertyVectors) {\n if (!propertyColumn) {\n continue;\n }\n\n const columnName = propertyColumn.name;\n const propertyValue = propertyColumn.getValue(index);\n if (propertyValue !== null) {\n properties[columnName] = propertyValue;\n }\n }\n\n index++;\n yield { id, geometry, properties };\n }\n }\n\n get numFeatures(): number {\n return this.geometryVector.numGeometries;\n }\n\n get extent(): number {\n return this._extent;\n }\n\n /**\n * Returns all features as an array\n */\n getFeatures(): Feature[] {\n const features: Feature[] = [];\n const geometries = this.geometryVector.getGeometries();\n\n for (let i = 0; i < this.numFeatures; i++) {\n let id;\n if (this.idVector) {\n id = this.containsMaxSaveIntegerValues(this.idVector)\n ? Number(this.idVector.getValue(i))\n : this.idVector.getValue(i);\n }\n\n const geometry = {\n coordinates: geometries[i],\n type: this.geometryVector.geometryType(i),\n };\n\n const properties: { [key: string]: unknown } = {};\n for (const propertyColumn of this.propertyVectors) {\n if (!propertyColumn) continue;\n const columnName = propertyColumn.name;\n const propertyValue = propertyColumn.getValue(i);\n if (propertyValue !== null) {\n properties[columnName] = propertyValue;\n }\n }\n\n features.push({ id, geometry, properties });\n }\n return features;\n }\n\n private containsMaxSaveIntegerValues(intVector: IntVector) {\n return (\n intVector instanceof IntFlatVector ||\n (intVector instanceof IntConstVector && intVector instanceof IntSequenceVector) ||\n intVector instanceof DoubleFlatVector\n );\n }\n}\n"]}
1
+ {"version":3,"file":"featureTable.js","sourceRoot":"","sources":["../../src/vector/featureTable.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Geometry, GeometryVector } from \"./geometry/geometryVector\";\nimport type Vector from \"./vector\";\nimport type { IdVector } from \"./idVector\";\nimport { Int32FlatVector } from \"./flat/int32FlatVector\";\nimport { DoubleFlatVector } from \"./flat/doubleFlatVector\";\nimport { Int32SequenceVector } from \"./sequence/int32SequenceVector\";\nimport { Int32ConstVector } from \"./constant/int32ConstVector\";\nimport type { GpuVector } from \"./geometry/gpuVector\";\n\nexport interface Feature {\n id: number | bigint;\n geometry: Geometry;\n properties: { [key: string]: unknown };\n}\n\nexport default class FeatureTable {\n private propertyVectorsMap: Map<string, Vector>;\n\n constructor(\n private readonly _name: string,\n private readonly _geometryVector: GeometryVector | GpuVector,\n private readonly _idVector?: IdVector,\n private readonly _propertyVectors?: Vector[],\n private readonly _extent = 4096,\n ) {}\n\n get name(): string {\n return this._name;\n }\n\n get idVector(): IdVector {\n return this._idVector;\n }\n\n get geometryVector(): GeometryVector | GpuVector {\n return this._geometryVector;\n }\n\n get propertyVectors(): Vector[] {\n return this._propertyVectors;\n }\n\n getPropertyVector(name: string): Vector {\n if (!this.propertyVectorsMap) {\n this.propertyVectorsMap = new Map(this._propertyVectors.map((vector) => [vector.name, vector]));\n }\n\n return this.propertyVectorsMap.get(name);\n }\n\n get numFeatures(): number {\n return this.geometryVector.numGeometries;\n }\n\n get extent(): number {\n return this._extent;\n }\n\n /**\n * Returns all features as an array\n */\n getFeatures(): Feature[] {\n const features: Feature[] = [];\n const geometries = this.geometryVector.getGeometries();\n\n for (let i = 0; i < this.numFeatures; i++) {\n let id;\n if (this.idVector) {\n const idValue = this.idVector.getValue(i);\n id = this.containsMaxSafeIntegerValues(this.idVector) && idValue !== null ? Number(idValue) : idValue;\n }\n const geometry = {\n coordinates: geometries[i],\n type: this.geometryVector.geometryType(i),\n };\n\n const properties: { [key: string]: unknown } = {};\n for (const propertyColumn of this.propertyVectors) {\n if (!propertyColumn) continue;\n const columnName = propertyColumn.name;\n const propertyValue = propertyColumn.getValue(i);\n if (propertyValue !== null) {\n properties[columnName] = propertyValue;\n }\n }\n\n features.push({ id, geometry, properties });\n }\n return features;\n }\n\n private containsMaxSafeIntegerValues(idVector: IdVector) {\n return (\n idVector instanceof Int32FlatVector ||\n idVector instanceof Int32ConstVector ||\n idVector instanceof Int32SequenceVector ||\n idVector instanceof DoubleFlatVector\n );\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type SelectionVector } from "./selectionVector";
1
+ import type { SelectionVector } from "./selectionVector";
2
2
  /**
3
3
  * Array-based SelectionVector for non-sequential selections.
4
4
  * Stores indices explicitly, suitable for irregular patterns and frequent modifications.
@@ -3,8 +3,6 @@
3
3
  * Stores indices explicitly, suitable for irregular patterns and frequent modifications.
4
4
  */
5
5
  export class FlatSelectionVector {
6
- _selectionVector;
7
- _limit;
8
6
  /**
9
7
  * @param _selectionVector
10
8
  * @param _limit In write mode the limit of a Buffer is the limit of how much data you can write into the buffer.
@@ -1 +1 @@
1
- {"version":3,"file":"flatSelectionVector.js","sourceRoot":"","sources":["../../../src/vector/filter/flatSelectionVector.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAOhB;IACA;IAPZ;;;;OAIG;IACH,YACY,gBAA0B,EAC1B,MAAe;QADf,qBAAgB,GAAhB,gBAAgB,CAAU;QAC1B,WAAM,GAAN,MAAM,CAAS;QAEvB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa,EAAE,KAAa;QACjC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACzC,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,kBAAkB;IAClB,eAAe;QACX,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ","sourcesContent":["import { type SelectionVector } from \"./selectionVector\";\n\n/**\n * Array-based SelectionVector for non-sequential selections.\n * Stores indices explicitly, suitable for irregular patterns and frequent modifications.\n */\nexport class FlatSelectionVector implements SelectionVector {\n /**\n * @param _selectionVector\n * @param _limit In write mode the limit of a Buffer is the limit of how much data you can write into the buffer.\n * In write mode the limit is equal to the capacity of the Buffer.\n */\n constructor(\n private _selectionVector: number[],\n private _limit?: number,\n ) {\n if (!this._limit) {\n this._limit = this._selectionVector.length;\n }\n }\n\n /** @inheritdoc */\n getIndex(index: number): number {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n\n return this._selectionVector[index];\n }\n\n /** @inheritdoc */\n setIndex(index: number, value: number): void {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n\n this._selectionVector[index] = value;\n }\n\n /** @inheritdoc */\n setLimit(limit: number): void {\n if (limit < 0 || limit > this.capacity) {\n throw new RangeError(\"Limit out of bounds\");\n }\n this._limit = limit;\n }\n\n /** @inheritdoc */\n selectionValues(): number[] {\n return this._selectionVector;\n }\n\n /** @inheritdoc */\n get capacity() {\n return this._selectionVector.length;\n }\n\n /** @inheritdoc */\n get limit() {\n return this._limit;\n }\n}\n"]}
1
+ {"version":3,"file":"flatSelectionVector.js","sourceRoot":"","sources":["../../../src/vector/filter/flatSelectionVector.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAC5B;;;;OAIG;IACH,YACY,gBAA0B,EAC1B,MAAe;QADf,qBAAgB,GAAhB,gBAAgB,CAAU;QAC1B,WAAM,GAAN,MAAM,CAAS;QAEvB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa,EAAE,KAAa;QACjC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACzC,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,kBAAkB;IAClB,eAAe;QACX,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ","sourcesContent":["import type { SelectionVector } from \"./selectionVector\";\n\n/**\n * Array-based SelectionVector for non-sequential selections.\n * Stores indices explicitly, suitable for irregular patterns and frequent modifications.\n */\nexport class FlatSelectionVector implements SelectionVector {\n /**\n * @param _selectionVector\n * @param _limit In write mode the limit of a Buffer is the limit of how much data you can write into the buffer.\n * In write mode the limit is equal to the capacity of the Buffer.\n */\n constructor(\n private _selectionVector: number[],\n private _limit?: number,\n ) {\n if (!this._limit) {\n this._limit = this._selectionVector.length;\n }\n }\n\n /** @inheritdoc */\n getIndex(index: number): number {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n\n return this._selectionVector[index];\n }\n\n /** @inheritdoc */\n setIndex(index: number, value: number): void {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n\n this._selectionVector[index] = value;\n }\n\n /** @inheritdoc */\n setLimit(limit: number): void {\n if (limit < 0 || limit > this.capacity) {\n throw new RangeError(\"Limit out of bounds\");\n }\n this._limit = limit;\n }\n\n /** @inheritdoc */\n selectionValues(): number[] {\n return this._selectionVector;\n }\n\n /** @inheritdoc */\n get capacity() {\n return this._selectionVector.length;\n }\n\n /** @inheritdoc */\n get limit() {\n return this._limit;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type SelectionVector } from "./selectionVector";
1
+ import type { SelectionVector } from "./selectionVector";
2
2
  import type BitVector from "../flat/bitVector";
3
3
  import { SequenceSelectionVector } from "./sequenceSelectionVector";
4
4
  export declare function createSelectionVector(size: number): SequenceSelectionVector;
@@ -1 +1 @@
1
- {"version":3,"file":"selectionVectorUtils.js","sourceRoot":"","sources":["../../../src/vector/filter/selectionVectorUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAC9C,OAAO,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAAY,EAAE,iBAA6B;IACrF,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,oFAAoF;QACpF,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,OAAO,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CACzC,eAAgC,EAChC,iBAA6B;IAE7B,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChD,oFAAoF;QACpF,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3D,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import { type SelectionVector } from \"./selectionVector\";\nimport { FlatSelectionVector } from \"./flatSelectionVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { SequenceSelectionVector } from \"./sequenceSelectionVector\";\n\nexport function createSelectionVector(size: number) {\n return new SequenceSelectionVector(0, 1, size);\n}\n\n/**\n * Creates a selection vector containing indices of non-null values.\n * @param size - The total number of elements to consider\n * @param nullabilityBuffer - Optional bit vector where 1=not null, 0=null. If undefined/null, all values are considered non-null.\n */\nexport function createNullableSelectionVector(size: number, nullabilityBuffer?: BitVector): SelectionVector {\n const selectionVector = [];\n for (let i = 0; i < size; i++) {\n // Include index if no nullability buffer (all non-null) OR if bit is set (non-null)\n if (!nullabilityBuffer || nullabilityBuffer.get(i)) {\n selectionVector.push(i);\n }\n }\n return new FlatSelectionVector(selectionVector);\n}\n\n/**\n * Filters an existing selection vector to include only non-null values.\n * @param selectionVector - The input selection vector to filter\n * @param nullabilityBuffer - Optional bit vector where 1=not null, 0=null. If undefined/null, all values are considered non-null.\n */\nexport function updateNullableSelectionVector(\n selectionVector: SelectionVector,\n nullabilityBuffer?: BitVector,\n): SelectionVector {\n const filteredIndices = [];\n for (let i = 0; i < selectionVector.limit; i++) {\n const vectorIndex = selectionVector.getIndex(i);\n // Include index if no nullability buffer (all non-null) OR if bit is set (non-null)\n if (!nullabilityBuffer || nullabilityBuffer.get(vectorIndex)) {\n filteredIndices.push(vectorIndex);\n }\n }\n return new FlatSelectionVector(filteredIndices);\n}\n"]}
1
+ {"version":3,"file":"selectionVectorUtils.js","sourceRoot":"","sources":["../../../src/vector/filter/selectionVectorUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAC9C,OAAO,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAAY,EAAE,iBAA6B;IACrF,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,oFAAoF;QACpF,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,OAAO,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CACzC,eAAgC,EAChC,iBAA6B;IAE7B,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChD,oFAAoF;QACpF,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3D,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import type { SelectionVector } from \"./selectionVector\";\nimport { FlatSelectionVector } from \"./flatSelectionVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { SequenceSelectionVector } from \"./sequenceSelectionVector\";\n\nexport function createSelectionVector(size: number) {\n return new SequenceSelectionVector(0, 1, size);\n}\n\n/**\n * Creates a selection vector containing indices of non-null values.\n * @param size - The total number of elements to consider\n * @param nullabilityBuffer - Optional bit vector where 1=not null, 0=null. If undefined/null, all values are considered non-null.\n */\nexport function createNullableSelectionVector(size: number, nullabilityBuffer?: BitVector): SelectionVector {\n const selectionVector = [];\n for (let i = 0; i < size; i++) {\n // Include index if no nullability buffer (all non-null) OR if bit is set (non-null)\n if (!nullabilityBuffer || nullabilityBuffer.get(i)) {\n selectionVector.push(i);\n }\n }\n return new FlatSelectionVector(selectionVector);\n}\n\n/**\n * Filters an existing selection vector to include only non-null values.\n * @param selectionVector - The input selection vector to filter\n * @param nullabilityBuffer - Optional bit vector where 1=not null, 0=null. If undefined/null, all values are considered non-null.\n */\nexport function updateNullableSelectionVector(\n selectionVector: SelectionVector,\n nullabilityBuffer?: BitVector,\n): SelectionVector {\n const filteredIndices = [];\n for (let i = 0; i < selectionVector.limit; i++) {\n const vectorIndex = selectionVector.getIndex(i);\n // Include index if no nullability buffer (all non-null) OR if bit is set (non-null)\n if (!nullabilityBuffer || nullabilityBuffer.get(vectorIndex)) {\n filteredIndices.push(vectorIndex);\n }\n }\n return new FlatSelectionVector(filteredIndices);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type SelectionVector } from "./selectionVector";
1
+ import type { SelectionVector } from "./selectionVector";
2
2
  /**
3
3
  * Memory-efficient SelectionVector for arithmetic sequences (base + index * delta).
4
4
  * Calculates values on-demand, only materializes when modified.
@@ -3,16 +3,12 @@
3
3
  * Calculates values on-demand, only materializes when modified.
4
4
  */
5
5
  export class SequenceSelectionVector {
6
- _baseValue;
7
- _delta;
8
- _limit;
9
- _capacity;
10
- _materializedArray = null;
11
6
  constructor(_baseValue, _delta, _limit, _capacity = _limit) {
12
7
  this._baseValue = _baseValue;
13
8
  this._delta = _delta;
14
9
  this._limit = _limit;
15
10
  this._capacity = _capacity;
11
+ this._materializedArray = null;
16
12
  }
17
13
  /** @inheritdoc */
18
14
  get limit() {
@@ -1 +1 @@
1
- {"version":3,"file":"sequenceSelectionVector.js","sourceRoot":"","sources":["../../../src/vector/filter/sequenceSelectionVector.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAIX;IACA;IACT;IACS;IANb,kBAAkB,GAAoB,IAAI,CAAC;IAEnD,YACqB,UAAkB,EAClB,MAAc,EACvB,MAAc,EACL,YAAoB,MAAM;QAH1B,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAQ;QACvB,WAAM,GAAN,MAAM,CAAQ;QACL,cAAS,GAAT,SAAS,CAAiB;IAC5C,CAAC;IAEJ,kBAAkB;IAClB,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,kBAAkB;IAClB,eAAe;QACX,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAEO,WAAW;QACf,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/C,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa,EAAE,KAAa;QACjC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;CACJ","sourcesContent":["import { type SelectionVector } from \"./selectionVector\";\n\n/**\n * Memory-efficient SelectionVector for arithmetic sequences (base + index * delta).\n * Calculates values on-demand, only materializes when modified.\n */\nexport class SequenceSelectionVector implements SelectionVector {\n private _materializedArray: number[] | null = null;\n\n constructor(\n private readonly _baseValue: number,\n private readonly _delta: number,\n private _limit: number,\n private readonly _capacity: number = _limit,\n ) {}\n\n /** @inheritdoc */\n get limit(): number {\n return this._limit;\n }\n\n /** @inheritdoc */\n get capacity(): number {\n return this._capacity;\n }\n\n /** @inheritdoc */\n selectionValues(): number[] {\n if (!this._materializedArray) {\n this._materializedArray = this.materialize();\n }\n return this._materializedArray;\n }\n\n private materialize(): number[] {\n const arr = new Array<number>(this._capacity);\n for (let i = 0; i < this._capacity; i++) {\n arr[i] = this._baseValue + i * this._delta;\n }\n return arr;\n }\n\n /** @inheritdoc */\n getIndex(index: number): number {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n if (this._materializedArray) {\n return this._materializedArray[index];\n }\n return this._baseValue + index * this._delta;\n }\n\n /** @inheritdoc */\n setIndex(index: number, value: number): void {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n if (!this._materializedArray) {\n this._materializedArray = this.materialize();\n }\n this._materializedArray[index] = value;\n }\n\n /** @inheritdoc */\n setLimit(limit: number): void {\n if (limit < 0 || limit > this.capacity) {\n throw new RangeError(\"Limit out of bounds\");\n }\n this._limit = limit;\n }\n}\n"]}
1
+ {"version":3,"file":"sequenceSelectionVector.js","sourceRoot":"","sources":["../../../src/vector/filter/sequenceSelectionVector.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAGhC,YACqB,UAAkB,EAClB,MAAc,EACvB,MAAc,EACL,YAAoB,MAAM;QAH1B,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAQ;QACvB,WAAM,GAAN,MAAM,CAAQ;QACL,cAAS,GAAT,SAAS,CAAiB;QANvC,uBAAkB,GAAoB,IAAI,CAAC;IAOhD,CAAC;IAEJ,kBAAkB;IAClB,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,kBAAkB;IAClB,eAAe;QACX,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAEO,WAAW;QACf,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/C,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa,EAAE,KAAa;QACjC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;CACJ","sourcesContent":["import type { SelectionVector } from \"./selectionVector\";\n\n/**\n * Memory-efficient SelectionVector for arithmetic sequences (base + index * delta).\n * Calculates values on-demand, only materializes when modified.\n */\nexport class SequenceSelectionVector implements SelectionVector {\n private _materializedArray: number[] | null = null;\n\n constructor(\n private readonly _baseValue: number,\n private readonly _delta: number,\n private _limit: number,\n private readonly _capacity: number = _limit,\n ) {}\n\n /** @inheritdoc */\n get limit(): number {\n return this._limit;\n }\n\n /** @inheritdoc */\n get capacity(): number {\n return this._capacity;\n }\n\n /** @inheritdoc */\n selectionValues(): number[] {\n if (!this._materializedArray) {\n this._materializedArray = this.materialize();\n }\n return this._materializedArray;\n }\n\n private materialize(): number[] {\n const arr = new Array<number>(this._capacity);\n for (let i = 0; i < this._capacity; i++) {\n arr[i] = this._baseValue + i * this._delta;\n }\n return arr;\n }\n\n /** @inheritdoc */\n getIndex(index: number): number {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n if (this._materializedArray) {\n return this._materializedArray[index];\n }\n return this._baseValue + index * this._delta;\n }\n\n /** @inheritdoc */\n setIndex(index: number, value: number): void {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n if (!this._materializedArray) {\n this._materializedArray = this.materialize();\n }\n this._materializedArray[index] = value;\n }\n\n /** @inheritdoc */\n setLimit(limit: number): void {\n if (limit < 0 || limit > this.capacity) {\n throw new RangeError(\"Limit out of bounds\");\n }\n this._limit = limit;\n }\n}\n"]}