@milaboratories/pl-model-common 1.46.2 → 1.46.3

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 (205) hide show
  1. package/dist/author_marker.d.ts.map +1 -1
  2. package/dist/base32_encode.cjs.map +1 -1
  3. package/dist/base32_encode.js.map +1 -1
  4. package/dist/base64.cjs.map +1 -1
  5. package/dist/base64.d.ts.map +1 -1
  6. package/dist/base64.js.map +1 -1
  7. package/dist/bmodel/block_config.cjs.map +1 -1
  8. package/dist/bmodel/block_config.d.ts.map +1 -1
  9. package/dist/bmodel/block_config.js.map +1 -1
  10. package/dist/bmodel/code.cjs +0 -1
  11. package/dist/bmodel/code.cjs.map +1 -1
  12. package/dist/bmodel/code.d.ts.map +1 -1
  13. package/dist/bmodel/code.js.map +1 -1
  14. package/dist/bmodel/index.cjs +6 -3
  15. package/dist/bmodel/index.d.ts +2 -1
  16. package/dist/bmodel/index.js +4 -3
  17. package/dist/bmodel/normalization.cjs +2 -1
  18. package/dist/bmodel/normalization.cjs.map +1 -1
  19. package/dist/bmodel/normalization.d.ts.map +1 -1
  20. package/dist/bmodel/normalization.js +2 -1
  21. package/dist/bmodel/normalization.js.map +1 -1
  22. package/dist/branding.d.ts.map +1 -1
  23. package/dist/common_types.d.ts.map +1 -1
  24. package/dist/dialog/index.d.ts.map +1 -1
  25. package/dist/drivers/ChunkedStreamReader.cjs.map +1 -1
  26. package/dist/drivers/ChunkedStreamReader.d.ts.map +1 -1
  27. package/dist/drivers/ChunkedStreamReader.js.map +1 -1
  28. package/dist/drivers/blob.cjs +2 -1
  29. package/dist/drivers/blob.cjs.map +1 -1
  30. package/dist/drivers/blob.d.ts.map +1 -1
  31. package/dist/drivers/blob.js +2 -0
  32. package/dist/drivers/blob.js.map +1 -1
  33. package/dist/drivers/index.cjs +106 -18
  34. package/dist/drivers/index.d.ts +2 -1
  35. package/dist/drivers/index.js +19 -18
  36. package/dist/drivers/interfaces.d.ts.map +1 -1
  37. package/dist/drivers/log.cjs.map +1 -1
  38. package/dist/drivers/log.d.ts.map +1 -1
  39. package/dist/drivers/log.js.map +1 -1
  40. package/dist/drivers/ls.cjs.map +1 -1
  41. package/dist/drivers/ls.d.ts.map +1 -1
  42. package/dist/drivers/ls.js.map +1 -1
  43. package/dist/drivers/pframe/data_info.cjs.map +1 -1
  44. package/dist/drivers/pframe/data_info.d.ts.map +1 -1
  45. package/dist/drivers/pframe/data_info.js.map +1 -1
  46. package/dist/drivers/pframe/data_types.cjs.map +1 -1
  47. package/dist/drivers/pframe/data_types.d.ts.map +1 -1
  48. package/dist/drivers/pframe/data_types.js.map +1 -1
  49. package/dist/drivers/pframe/driver.d.ts.map +1 -1
  50. package/dist/drivers/pframe/filter_spec.d.ts.map +1 -1
  51. package/dist/drivers/pframe/find_columns.d.ts.map +1 -1
  52. package/dist/drivers/pframe/index.cjs +89 -14
  53. package/dist/drivers/pframe/index.d.ts +2 -1
  54. package/dist/drivers/pframe/index.js +14 -14
  55. package/dist/drivers/pframe/linker_columns.cjs +2 -2
  56. package/dist/drivers/pframe/linker_columns.cjs.map +1 -1
  57. package/dist/drivers/pframe/linker_columns.d.ts.map +1 -1
  58. package/dist/drivers/pframe/linker_columns.js +2 -2
  59. package/dist/drivers/pframe/linker_columns.js.map +1 -1
  60. package/dist/drivers/pframe/pframe.d.ts.map +1 -1
  61. package/dist/drivers/pframe/query/index.cjs +6 -1
  62. package/dist/drivers/pframe/query/index.d.ts +2 -1
  63. package/dist/drivers/pframe/query/index.js +2 -1
  64. package/dist/drivers/pframe/query/query_common.d.ts +1 -1
  65. package/dist/drivers/pframe/query/query_common.d.ts.map +1 -1
  66. package/dist/drivers/pframe/query/query_data.d.ts.map +1 -1
  67. package/dist/drivers/pframe/query/query_spec.d.ts.map +1 -1
  68. package/dist/drivers/pframe/query/utils.cjs +1 -1
  69. package/dist/drivers/pframe/query/utils.cjs.map +1 -1
  70. package/dist/drivers/pframe/query/utils.d.ts.map +1 -1
  71. package/dist/drivers/pframe/query/utils.js +1 -1
  72. package/dist/drivers/pframe/query/utils.js.map +1 -1
  73. package/dist/drivers/pframe/spec/anchored.cjs +2 -1
  74. package/dist/drivers/pframe/spec/anchored.cjs.map +1 -1
  75. package/dist/drivers/pframe/spec/anchored.d.ts.map +1 -1
  76. package/dist/drivers/pframe/spec/anchored.js +1 -0
  77. package/dist/drivers/pframe/spec/anchored.js.map +1 -1
  78. package/dist/drivers/pframe/spec/discovered_column.cjs +0 -1
  79. package/dist/drivers/pframe/spec/discovered_column.cjs.map +1 -1
  80. package/dist/drivers/pframe/spec/discovered_column.d.ts.map +1 -1
  81. package/dist/drivers/pframe/spec/discovered_column.js.map +1 -1
  82. package/dist/drivers/pframe/spec/filtered_column.cjs.map +1 -1
  83. package/dist/drivers/pframe/spec/filtered_column.d.ts.map +1 -1
  84. package/dist/drivers/pframe/spec/filtered_column.js.map +1 -1
  85. package/dist/drivers/pframe/spec/ids.cjs +1 -1
  86. package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
  87. package/dist/drivers/pframe/spec/ids.d.ts.map +1 -1
  88. package/dist/drivers/pframe/spec/ids.js.map +1 -1
  89. package/dist/drivers/pframe/spec/index.cjs +57 -7
  90. package/dist/drivers/pframe/spec/index.d.ts +2 -1
  91. package/dist/drivers/pframe/spec/index.js +8 -7
  92. package/dist/drivers/pframe/spec/native_id.cjs +1 -1
  93. package/dist/drivers/pframe/spec/native_id.cjs.map +1 -1
  94. package/dist/drivers/pframe/spec/native_id.d.ts.map +1 -1
  95. package/dist/drivers/pframe/spec/native_id.js.map +1 -1
  96. package/dist/drivers/pframe/spec/selectors.cjs.map +1 -1
  97. package/dist/drivers/pframe/spec/selectors.d.ts.map +1 -1
  98. package/dist/drivers/pframe/spec/selectors.js.map +1 -1
  99. package/dist/drivers/pframe/spec/spec.cjs +1 -2
  100. package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
  101. package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
  102. package/dist/drivers/pframe/spec/spec.js +1 -1
  103. package/dist/drivers/pframe/spec/spec.js.map +1 -1
  104. package/dist/drivers/pframe/spec_driver.d.ts.map +1 -1
  105. package/dist/drivers/pframe/table_calculate.cjs.map +1 -1
  106. package/dist/drivers/pframe/table_calculate.d.ts.map +1 -1
  107. package/dist/drivers/pframe/table_calculate.js.map +1 -1
  108. package/dist/drivers/pframe/table_common.cjs.map +1 -1
  109. package/dist/drivers/pframe/table_common.d.ts.map +1 -1
  110. package/dist/drivers/pframe/table_common.js.map +1 -1
  111. package/dist/drivers/pframe/unique_values.d.ts.map +1 -1
  112. package/dist/drivers/upload.d.ts.map +1 -1
  113. package/dist/drivers/urls.cjs.map +1 -1
  114. package/dist/drivers/urls.d.ts.map +1 -1
  115. package/dist/drivers/urls.js.map +1 -1
  116. package/dist/errors.cjs.map +1 -1
  117. package/dist/errors.d.ts.map +1 -1
  118. package/dist/errors.js.map +1 -1
  119. package/dist/flags/block_flags.cjs.map +1 -1
  120. package/dist/flags/block_flags.d.ts.map +1 -1
  121. package/dist/flags/block_flags.js.map +1 -1
  122. package/dist/flags/flag_utils.cjs +1 -0
  123. package/dist/flags/flag_utils.cjs.map +1 -1
  124. package/dist/flags/flag_utils.d.ts.map +1 -1
  125. package/dist/flags/flag_utils.js +1 -0
  126. package/dist/flags/flag_utils.js.map +1 -1
  127. package/dist/flags/index.d.ts +2 -1
  128. package/dist/flags/type_utils.d.ts.map +1 -1
  129. package/dist/httpAuth.cjs.map +1 -1
  130. package/dist/httpAuth.d.ts.map +1 -1
  131. package/dist/httpAuth.js.map +1 -1
  132. package/dist/json.cjs +1 -1
  133. package/dist/json.cjs.map +1 -1
  134. package/dist/json.d.ts.map +1 -1
  135. package/dist/json.js.map +1 -1
  136. package/dist/navigation.cjs.map +1 -1
  137. package/dist/navigation.d.ts.map +1 -1
  138. package/dist/navigation.js.map +1 -1
  139. package/dist/plid.cjs +1 -2
  140. package/dist/plid.cjs.map +1 -1
  141. package/dist/plid.d.ts.map +1 -1
  142. package/dist/plid.js +1 -1
  143. package/dist/plid.js.map +1 -1
  144. package/dist/pool/entry.d.ts.map +1 -1
  145. package/dist/pool/index.d.ts +2 -1
  146. package/dist/pool/query.cjs.map +1 -1
  147. package/dist/pool/query.d.ts.map +1 -1
  148. package/dist/pool/query.js.map +1 -1
  149. package/dist/pool/spec.cjs.map +1 -1
  150. package/dist/pool/spec.d.ts.map +1 -1
  151. package/dist/pool/spec.js.map +1 -1
  152. package/dist/pool_entry.cjs +1 -0
  153. package/dist/pool_entry.cjs.map +1 -1
  154. package/dist/pool_entry.d.ts.map +1 -1
  155. package/dist/pool_entry.js +1 -0
  156. package/dist/pool_entry.js.map +1 -1
  157. package/dist/project_id.d.ts.map +1 -1
  158. package/dist/ref.cjs +0 -1
  159. package/dist/ref.cjs.map +1 -1
  160. package/dist/ref.d.ts.map +1 -1
  161. package/dist/ref.js.map +1 -1
  162. package/dist/resource_types.cjs +4 -1
  163. package/dist/resource_types.cjs.map +1 -1
  164. package/dist/resource_types.d.ts +3 -0
  165. package/dist/resource_types.d.ts.map +1 -1
  166. package/dist/resource_types.js +4 -1
  167. package/dist/resource_types.js.map +1 -1
  168. package/dist/services/index.cjs +28 -6
  169. package/dist/services/index.d.ts +2 -1
  170. package/dist/services/index.js +7 -6
  171. package/dist/services/node_service_handlers.cjs.map +1 -1
  172. package/dist/services/node_service_handlers.d.ts.map +1 -1
  173. package/dist/services/node_service_handlers.js.map +1 -1
  174. package/dist/services/service_capabilities.cjs +4 -1
  175. package/dist/services/service_capabilities.cjs.map +1 -1
  176. package/dist/services/service_capabilities.d.ts.map +1 -1
  177. package/dist/services/service_capabilities.js +4 -1
  178. package/dist/services/service_capabilities.js.map +1 -1
  179. package/dist/services/service_declarations.cjs.map +1 -1
  180. package/dist/services/service_declarations.js.map +1 -1
  181. package/dist/services/service_injectors.cjs +1 -0
  182. package/dist/services/service_injectors.cjs.map +1 -1
  183. package/dist/services/service_injectors.d.ts +1 -1
  184. package/dist/services/service_injectors.d.ts.map +1 -1
  185. package/dist/services/service_injectors.js +1 -1
  186. package/dist/services/service_injectors.js.map +1 -1
  187. package/dist/services/service_registry.cjs.map +1 -1
  188. package/dist/services/service_registry.d.ts.map +1 -1
  189. package/dist/services/service_registry.js.map +1 -1
  190. package/dist/services/service_types.cjs.map +1 -1
  191. package/dist/services/service_types.d.ts.map +1 -1
  192. package/dist/services/service_types.js.map +1 -1
  193. package/dist/utag.d.ts.map +1 -1
  194. package/dist/util.cjs.map +1 -1
  195. package/dist/util.d.ts.map +1 -1
  196. package/dist/util.js.map +1 -1
  197. package/dist/value_or_error.cjs.map +1 -1
  198. package/dist/value_or_error.d.ts.map +1 -1
  199. package/dist/value_or_error.js.map +1 -1
  200. package/package.json +5 -5
  201. package/src/resource_types.ts +3 -0
  202. package/dist/drivers/pframe/driver.cjs +0 -6
  203. package/dist/drivers/pframe/driver.cjs.map +0 -1
  204. package/dist/drivers/pframe/driver.js +0 -6
  205. package/dist/drivers/pframe/driver.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"data_types.cjs","names":["ValueType"],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */\n readonly absent?: Uint8Array;\n};\n/** Table column data */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nexport function isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =\n | NA\n | PTableValueData<DataType>;\nexport type PTableValueBranded<\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =\n PTableValueData<DataType>;\n\nfunction pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillNA, DataType>;\nexport function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillNA, DataType>;\nexport function pTableValueBranded<\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n\n/** Supported formats for PTable file download. */\nexport type PTableDownloadFormat = \"csv\" | \"tsv\";\n\n/** Compression applied to the written file. */\nexport type PTableDownloadCompression = \"none\" | \"gzip\";\n\n/** Options for downloading PTable data to a file. */\nexport interface WritePTableToFsOptions {\n path: string;\n format: PTableDownloadFormat;\n columnIndices: number[];\n range?: TableRange;\n chunkSize?: number;\n includeHeader?: boolean;\n bom?: boolean;\n compression?: {\n type: \"gzip\";\n level?: number;\n };\n signal?: AbortSignal;\n}\n\n/** Result of a PTable file download. */\nexport interface WritePTableToFsResult {\n path: string;\n rowsWritten: number;\n bytesWritten: number;\n}\n\n/**\n * Maximum number of data rows allowed per sheet in an `xlsx` export, kept below\n * Excel's hard limit of 1,048,576. The driver rejects oversized `xlsx` exports\n * (see {@link PFrameDriver.exportPTable}); UIs use it to gate the `xlsx` option.\n */\nexport const XLSX_MAX_ROWS_PER_SHEET = 1_000_000;\n\n/** Options for {@link PFrameDriver.exportPTable}. */\nexport interface ExportPTableOptions {\n /** Destination file path; its extension selects the output format\n * (`csv`/`tsv`/`parquet`/`xlsx`). */\n path: string;\n /** Unified indices of the columns to export, in output order\n * (axes first, then data columns). */\n columnIndices: number[];\n}\n"],"mappings":";;AA4CA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,EAAE;CACzC,MAAM,OAAO,KAAM,IAAK,SAAS;AACjC,SAAQ,UAAU,cAAc,QAAQ;;AAG1C,SAAgB,UAAU,QAAsB,KAAsB;AACpE,KAAI,OAAO,KAAM,QAAO,SAAS,OAAO,MAAM,IAAI;CAGlD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAKA,aAAAA,UAAU,IACb,QAAQ,UAAqC;EAC/C,KAAKA,aAAAA,UAAU,KACb,QAAQ,UAAsC,CAAC;EACjD,KAAKA,aAAAA,UAAU,MACb,QAAO,OAAO,MAAM,MAAkC;EACxD,KAAKA,aAAAA,UAAU,OACb,QAAO,OAAO,MAAM,MAAmC;EACzD,KAAKA,aAAAA,UAAU,OACb,QAAQ,UAAwC;EAClD,KAAKA,aAAAA,UAAU,MACb,QAAQ,UAAuC;EACjD,QACE,OAAM,MAAM,0BAA0B,YAA4B;;;AAIxE,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;AAC5D,QAAO,UAAA;;AAqCT,SAAS,gBACP,QACA,KACA,SAIA;CACA,MAAM,YAAY,OAAO;AACzB,KAAI,cAAcA,aAAAA,UAAU,MAC1B,OAAM,MAAM,0BAA0B;AAGxC,KACE,WACA,cAAc,WACd,QAAQ,aAAa,KAAA,KACrB,QAAQ,aAAa,UAErB,OAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,YAAY;AAG9E,KAAI,UAAU,QAAQ,IAAI,CACxB,QAAO,SAAS,OAAO,KAAA,IAAY,QAAQ,KAAA;CAG7C,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAKA,aAAAA,UAAU,IACb,QAAO;EACT,KAAKA,aAAAA,UAAU,KACb,QAAO,OAAO,MAAiC;EACjD,KAAKA,aAAAA,UAAU,MACb,QAAO;EACT,KAAKA,aAAAA,UAAU,OACb,QAAO;EACT,KAAKA,aAAAA,UAAU,OACb,QAAQ;;;AAwBd,SAAgB,YACd,QACA,KACA,SAIA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ;;AAsB9C,SAAgB,mBAId,QACA,KACA,SAIA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ;;;;;;;AAuD9C,MAAa,0BAA0B"}
1
+ {"version":3,"file":"data_types.cjs","names":["ValueType"],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */\n readonly absent?: Uint8Array;\n};\n/** Table column data */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nexport function isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =\n | NA\n | PTableValueData<DataType>;\nexport type PTableValueBranded<\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =\n PTableValueData<DataType>;\n\nfunction pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillNA, DataType>;\nexport function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillNA, DataType>;\nexport function pTableValueBranded<\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n\n/** Supported formats for PTable file download. */\nexport type PTableDownloadFormat = \"csv\" | \"tsv\";\n\n/** Compression applied to the written file. */\nexport type PTableDownloadCompression = \"none\" | \"gzip\";\n\n/** Options for downloading PTable data to a file. */\nexport interface WritePTableToFsOptions {\n path: string;\n format: PTableDownloadFormat;\n columnIndices: number[];\n range?: TableRange;\n chunkSize?: number;\n includeHeader?: boolean;\n bom?: boolean;\n compression?: {\n type: \"gzip\";\n level?: number;\n };\n signal?: AbortSignal;\n}\n\n/** Result of a PTable file download. */\nexport interface WritePTableToFsResult {\n path: string;\n rowsWritten: number;\n bytesWritten: number;\n}\n\n/**\n * Maximum number of data rows allowed per sheet in an `xlsx` export, kept below\n * Excel's hard limit of 1,048,576. The driver rejects oversized `xlsx` exports\n * (see {@link PFrameDriver.exportPTable}); UIs use it to gate the `xlsx` option.\n */\nexport const XLSX_MAX_ROWS_PER_SHEET = 1_000_000;\n\n/** Options for {@link PFrameDriver.exportPTable}. */\nexport interface ExportPTableOptions {\n /** Destination file path; its extension selects the output format\n * (`csv`/`tsv`/`parquet`/`xlsx`). */\n path: string;\n /** Unified indices of the columns to export, in output order\n * (axes first, then data columns). */\n columnIndices: number[];\n}\n"],"mappings":";;AA4CA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,CAAC;CACxC,MAAM,OAAO,KAAM,IAAK,SAAS;CACjC,QAAQ,UAAU,cAAc,QAAQ;AAC1C;AAEA,SAAgB,UAAU,QAAsB,KAAsB;CACpE,IAAI,OAAO,MAAM,OAAO,SAAS,OAAO,MAAM,GAAG;CAGjD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAKA,aAAAA,UAAU,KACb,OAAQ,UAAqC;EAC/C,KAAKA,aAAAA,UAAU,MACb,OAAQ,UAAsC,CAAC;EACjD,KAAKA,aAAAA,UAAU,OACb,OAAO,OAAO,MAAM,KAAiC;EACvD,KAAKA,aAAAA,UAAU,QACb,OAAO,OAAO,MAAM,KAAkC;EACxD,KAAKA,aAAAA,UAAU,QACb,OAAQ,UAAwC;EAClD,KAAKA,aAAAA,UAAU,OACb,OAAQ,UAAuC;EACjD,SACE,MAAM,MAAM,0BAA0B,WAA2B;CACrE;AACF;AAEA,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;CAC5D,OAAO,UAAA;AACT;AAoCA,SAAS,gBACP,QACA,KACA,SAIA;CACA,MAAM,YAAY,OAAO;CACzB,IAAI,cAAcA,aAAAA,UAAU,OAC1B,MAAM,MAAM,yBAAyB;CAGvC,IACE,WACA,cAAc,WACd,QAAQ,aAAa,KAAA,KACrB,QAAQ,aAAa,WAErB,MAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,WAAW;CAG7E,IAAI,UAAU,QAAQ,GAAG,GACvB,OAAO,SAAS,OAAO,KAAA,IAAY,QAAQ,KAAA;CAG7C,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAKA,aAAAA,UAAU,KACb,OAAO;EACT,KAAKA,aAAAA,UAAU,MACb,OAAO,OAAO,KAAgC;EAChD,KAAKA,aAAAA,UAAU,OACb,OAAO;EACT,KAAKA,aAAAA,UAAU,QACb,OAAO;EACT,KAAKA,aAAAA,UAAU,QACb,OAAQ;CACZ;AACF;AAsBA,SAAgB,YACd,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;AAqBA,SAAgB,mBAId,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;;;;;;AAsDA,MAAa,0BAA0B"}
@@ -1 +1 @@
1
- {"version":3,"file":"data_types.d.ts","names":[],"sources":["../../../src/drivers/pframe/data_types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"data_types.d.ts","names":[],"sources":["../../../src/drivers/pframe/data_types.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"data_types.js","names":[],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */\n readonly absent?: Uint8Array;\n};\n/** Table column data */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nexport function isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =\n | NA\n | PTableValueData<DataType>;\nexport type PTableValueBranded<\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =\n PTableValueData<DataType>;\n\nfunction pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillNA, DataType>;\nexport function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillNA, DataType>;\nexport function pTableValueBranded<\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n\n/** Supported formats for PTable file download. */\nexport type PTableDownloadFormat = \"csv\" | \"tsv\";\n\n/** Compression applied to the written file. */\nexport type PTableDownloadCompression = \"none\" | \"gzip\";\n\n/** Options for downloading PTable data to a file. */\nexport interface WritePTableToFsOptions {\n path: string;\n format: PTableDownloadFormat;\n columnIndices: number[];\n range?: TableRange;\n chunkSize?: number;\n includeHeader?: boolean;\n bom?: boolean;\n compression?: {\n type: \"gzip\";\n level?: number;\n };\n signal?: AbortSignal;\n}\n\n/** Result of a PTable file download. */\nexport interface WritePTableToFsResult {\n path: string;\n rowsWritten: number;\n bytesWritten: number;\n}\n\n/**\n * Maximum number of data rows allowed per sheet in an `xlsx` export, kept below\n * Excel's hard limit of 1,048,576. The driver rejects oversized `xlsx` exports\n * (see {@link PFrameDriver.exportPTable}); UIs use it to gate the `xlsx` option.\n */\nexport const XLSX_MAX_ROWS_PER_SHEET = 1_000_000;\n\n/** Options for {@link PFrameDriver.exportPTable}. */\nexport interface ExportPTableOptions {\n /** Destination file path; its extension selects the output format\n * (`csv`/`tsv`/`parquet`/`xlsx`). */\n path: string;\n /** Unified indices of the columns to export, in output order\n * (axes first, then data columns). */\n columnIndices: number[];\n}\n"],"mappings":";;AA4CA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,EAAE;CACzC,MAAM,OAAO,KAAM,IAAK,SAAS;AACjC,SAAQ,UAAU,cAAc,QAAQ;;AAG1C,SAAgB,UAAU,QAAsB,KAAsB;AACpE,KAAI,OAAO,KAAM,QAAO,SAAS,OAAO,MAAM,IAAI;CAGlD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAK,UAAU,IACb,QAAQ,UAAqC;EAC/C,KAAK,UAAU,KACb,QAAQ,UAAsC,CAAC;EACjD,KAAK,UAAU,MACb,QAAO,OAAO,MAAM,MAAkC;EACxD,KAAK,UAAU,OACb,QAAO,OAAO,MAAM,MAAmC;EACzD,KAAK,UAAU,OACb,QAAQ,UAAwC;EAClD,KAAK,UAAU,MACb,QAAQ,UAAuC;EACjD,QACE,OAAM,MAAM,0BAA0B,YAA4B;;;AAIxE,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;AAC5D,QAAO,UAAA;;AAqCT,SAAS,gBACP,QACA,KACA,SAIA;CACA,MAAM,YAAY,OAAO;AACzB,KAAI,cAAc,UAAU,MAC1B,OAAM,MAAM,0BAA0B;AAGxC,KACE,WACA,cAAc,WACd,QAAQ,aAAa,KAAA,KACrB,QAAQ,aAAa,UAErB,OAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,YAAY;AAG9E,KAAI,UAAU,QAAQ,IAAI,CACxB,QAAO,SAAS,OAAO,KAAA,IAAY,QAAQ,KAAA;CAG7C,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAQ,WAAR;EACE,KAAK,UAAU,IACb,QAAO;EACT,KAAK,UAAU,KACb,QAAO,OAAO,MAAiC;EACjD,KAAK,UAAU,MACb,QAAO;EACT,KAAK,UAAU,OACb,QAAO;EACT,KAAK,UAAU,OACb,QAAQ;;;AAwBd,SAAgB,YACd,QACA,KACA,SAIA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ;;AAsB9C,SAAgB,mBAId,QACA,KACA,SAIA;AACA,QAAO,gBAAgB,QAAQ,KAAK,QAAQ;;;;;;;AAuD9C,MAAa,0BAA0B"}
1
+ {"version":3,"file":"data_types.js","names":[],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */\n readonly absent?: Uint8Array;\n};\n/** Table column data */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nexport function isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =\n | NA\n | PTableValueData<DataType>;\nexport type PTableValueBranded<\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =\n PTableValueData<DataType>;\n\nfunction pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillNA, DataType>;\nexport function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillNA, DataType>;\nexport function pTableValueBranded<\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n\n/** Supported formats for PTable file download. */\nexport type PTableDownloadFormat = \"csv\" | \"tsv\";\n\n/** Compression applied to the written file. */\nexport type PTableDownloadCompression = \"none\" | \"gzip\";\n\n/** Options for downloading PTable data to a file. */\nexport interface WritePTableToFsOptions {\n path: string;\n format: PTableDownloadFormat;\n columnIndices: number[];\n range?: TableRange;\n chunkSize?: number;\n includeHeader?: boolean;\n bom?: boolean;\n compression?: {\n type: \"gzip\";\n level?: number;\n };\n signal?: AbortSignal;\n}\n\n/** Result of a PTable file download. */\nexport interface WritePTableToFsResult {\n path: string;\n rowsWritten: number;\n bytesWritten: number;\n}\n\n/**\n * Maximum number of data rows allowed per sheet in an `xlsx` export, kept below\n * Excel's hard limit of 1,048,576. The driver rejects oversized `xlsx` exports\n * (see {@link PFrameDriver.exportPTable}); UIs use it to gate the `xlsx` option.\n */\nexport const XLSX_MAX_ROWS_PER_SHEET = 1_000_000;\n\n/** Options for {@link PFrameDriver.exportPTable}. */\nexport interface ExportPTableOptions {\n /** Destination file path; its extension selects the output format\n * (`csv`/`tsv`/`parquet`/`xlsx`). */\n path: string;\n /** Unified indices of the columns to export, in output order\n * (axes first, then data columns). */\n columnIndices: number[];\n}\n"],"mappings":";;AA4CA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,CAAC;CACxC,MAAM,OAAO,KAAM,IAAK,SAAS;CACjC,QAAQ,UAAU,cAAc,QAAQ;AAC1C;AAEA,SAAgB,UAAU,QAAsB,KAAsB;CACpE,IAAI,OAAO,MAAM,OAAO,SAAS,OAAO,MAAM,GAAG;CAGjD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAK,UAAU,KACb,OAAQ,UAAqC;EAC/C,KAAK,UAAU,MACb,OAAQ,UAAsC,CAAC;EACjD,KAAK,UAAU,OACb,OAAO,OAAO,MAAM,KAAiC;EACvD,KAAK,UAAU,QACb,OAAO,OAAO,MAAM,KAAkC;EACxD,KAAK,UAAU,QACb,OAAQ,UAAwC;EAClD,KAAK,UAAU,OACb,OAAQ,UAAuC;EACjD,SACE,MAAM,MAAM,0BAA0B,WAA2B;CACrE;AACF;AAEA,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;CAC5D,OAAO,UAAA;AACT;AAoCA,SAAS,gBACP,QACA,KACA,SAIA;CACA,MAAM,YAAY,OAAO;CACzB,IAAI,cAAc,UAAU,OAC1B,MAAM,MAAM,yBAAyB;CAGvC,IACE,WACA,cAAc,WACd,QAAQ,aAAa,KAAA,KACrB,QAAQ,aAAa,WAErB,MAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,WAAW;CAG7E,IAAI,UAAU,QAAQ,GAAG,GACvB,OAAO,SAAS,OAAO,KAAA,IAAY,QAAQ,KAAA;CAG7C,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAK,UAAU,KACb,OAAO;EACT,KAAK,UAAU,MACb,OAAO,OAAO,KAAgC;EAChD,KAAK,UAAU,OACb,OAAO;EACT,KAAK,UAAU,QACb,OAAO;EACT,KAAK,UAAU,QACb,OAAQ;CACZ;AACF;AAsBA,SAAgB,YACd,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;AAqBA,SAAgB,mBAId,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;;;;;;AAsDA,MAAa,0BAA0B"}
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","names":[],"sources":["../../../src/drivers/pframe/driver.ts"],"mappings":";;;;;;;;;;;;;KAuBY,YAAA,GAAe,OAAA;;KAGf,YAAA,GAAe,OAAA;;UAGV,iBAAA,OAAwB,OAAA,UAAiB,aAAA,GAAgB,QAAA;EACxE,YAAA,CAAa,GAAA,EAAK,SAAA,CAAU,GAAA,IAAO,YAAA;EACnC,YAAA,CAAa,GAAA,EAAK,SAAA,CAAU,GAAA,IAAO,YAAA;EACnC,cAAA,CAAe,GAAA,EAAK,WAAA,CAAY,GAAA,IAAO,YAAA;AAAA;;UAIxB,YAAA;EAPiB;;;;EAgBhC,WAAA,CAAY,MAAA,EAAQ,YAAA,EAAc,OAAA,EAAS,kBAAA,GAAqB,OAAA,CAAQ,mBAAA;EAf5C;EAkB5B,aAAA,CAAc,MAAA,EAAQ,YAAA,EAAc,QAAA,EAAU,SAAA,GAAY,OAAA,CAAQ,WAAA;EAlB/B;EAqBnC,WAAA,CAAY,MAAA,EAAQ,YAAA,GAAe,OAAA,CAAQ,gBAAA;EApBzB;EAuBlB,kBAAA,CACE,MAAA,EAAQ,YAAA,EACR,OAAA,EAAS,yBAAA,CAA0B,SAAA,GACnC,KAAA,GAAQ,UAAA,GACP,OAAA,CAAQ,0BAAA;EA1BqB;EA6BhC,eAAA,CACE,MAAA,EAAQ,YAAA,EACR,OAAA,EAAS,mBAAA,GACR,OAAA,CAAQ,oBAAA;EAhC4B;EAuCvC,QAAA,CAAS,MAAA,EAAQ,YAAA,GAAe,OAAA,CAAQ,WAAA;EAvCW;;;;;;;;;EAkDnD,OAAA,CAAQ,MAAA,EAAQ,YAAA,GAAe,OAAA,CAAQ,gBAAA;EAnDvC;;;;;;;;EA6DA,OAAA,CACE,MAAA,EAAQ,YAAA,EACR,aAAA,YACA,KAAA,GAAQ,UAAA,GACP,OAAA,CAAQ,YAAA;EAhE4B;;;AAIzC;EAkEE,eAAA,CACE,MAAA,EAAQ,YAAA,EACR,OAAA,EAAS,sBAAA,GACR,OAAA,CAAQ,qBAAA;;;;;;;;;;;;;EAcX,YAAA,CAAa,MAAA,EAAQ,YAAA,EAAc,OAAA,EAAS,mBAAA,GAAsB,OAAA;AAAA"}
1
+ {"version":3,"file":"driver.d.ts","names":[],"sources":["../../../src/drivers/pframe/driver.ts"],"mappings":";;;;;;;;;;;;;KAuBY,YAAA,GAAe,OAAO;;KAGtB,YAAA,GAAe,OAAO;;UAGjB,iBAAA,OAAwB,OAAA,UAAiB,aAAA,GAAgB,QAAA;EACxE,YAAA,CAAa,GAAA,EAAK,SAAA,CAAU,GAAA,IAAO,YAAA;EACnC,YAAA,CAAa,GAAA,EAAK,SAAA,CAAU,GAAA,IAAO,YAAA;EACnC,cAAA,CAAe,GAAA,EAAK,WAAA,CAAY,GAAA,IAAO,YAAA;AAAA;AANP;AAAA,UAUjB,YAAA;EAPiB;;;;EAgBhC,WAAA,CAAY,MAAA,EAAQ,YAAA,EAAc,OAAA,EAAS,kBAAA,GAAqB,OAAA,CAAQ,mBAAA;EAf5C;EAkB5B,aAAA,CAAc,MAAA,EAAQ,YAAA,EAAc,QAAA,EAAU,SAAA,GAAY,OAAA,CAAQ,WAAA;EAlB/B;EAqBnC,WAAA,CAAY,MAAA,EAAQ,YAAA,GAAe,OAAA,CAAQ,gBAAA;EApBzB;EAuBlB,kBAAA,CACE,MAAA,EAAQ,YAAA,EACR,OAAA,EAAS,yBAAA,CAA0B,SAAA,GACnC,KAAA,GAAQ,UAAA,GACP,OAAA,CAAQ,0BAAA;EA1BqB;EA6BhC,eAAA,CACE,MAAA,EAAQ,YAAA,EACR,OAAA,EAAS,mBAAA,GACR,OAAA,CAAQ,oBAAA;EAhC4B;EAuCvC,QAAA,CAAS,MAAA,EAAQ,YAAA,GAAe,OAAA,CAAQ,WAAA;EAvCW;;;;;;;;;EAkDnD,OAAA,CAAQ,MAAA,EAAQ,YAAA,GAAe,OAAA,CAAQ,gBAAA;EAnDvC;;;;;;;;EA6DA,OAAA,CACE,MAAA,EAAQ,YAAA,EACR,aAAA,YACA,KAAA,GAAQ,UAAA,GACP,OAAA,CAAQ,YAAA;EAhE4B;;AAAY;AAIrD;EAkEE,eAAA,CACE,MAAA,EAAQ,YAAA,EACR,OAAA,EAAS,sBAAA,GACR,OAAA,CAAQ,qBAAA;;;;;;;;;;;;;EAcX,YAAA,CAAa,MAAA,EAAQ,YAAA,EAAc,OAAA,EAAS,mBAAA,GAAsB,OAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"filter_spec.d.ts","names":[],"sources":["../../../src/drivers/pframe/filter_spec.ts"],"mappings":"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"}
1
+ {"version":3,"file":"filter_spec.d.ts","names":[],"sources":["../../../src/drivers/pframe/filter_spec.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"find_columns.d.ts","names":[],"sources":["../../../src/drivers/pframe/find_columns.ts"],"mappings":";;;;;;AASA;;;;UAAiB,kBAAA;EAEQ;EAAA,SAAd,YAAA,EAAc,YAAA;EAGE;EAAA,SAAhB,cAAA,EAAgB,MAAA;EAQE;;AAI7B;;;;EAJ6B,SAAlB,kBAAA;AAAA;;UAIM,mBAAA;;WAEN,IAAA,EAAM,gBAAA;AAAA"}
1
+ {"version":3,"file":"find_columns.d.ts","names":[],"sources":["../../../src/drivers/pframe/find_columns.ts"],"mappings":";;;;;;AASA;;;;UAAiB,kBAAA;EAEQ;EAAA,SAAd,YAAA,EAAc,YAAA;EAGE;EAAA,SAAhB,cAAA,EAAgB,MAAM;EAQJ;AAAA;AAI7B;;;;EAJ6B,SAAlB,kBAAA;AAAA;;UAIM,mBAAA;;WAEN,IAAA,EAAM,gBAAgB;AAAA"}
@@ -1,16 +1,91 @@
1
- require("./data_info.cjs");
2
- require("./spec/spec.cjs");
3
- require("./data_types.cjs");
4
- require("./query/utils.cjs");
1
+ const require_data_info = require("./data_info.cjs");
2
+ const require_spec = require("./spec/spec.cjs");
3
+ const require_data_types = require("./data_types.cjs");
4
+ const require_utils = require("./query/utils.cjs");
5
5
  require("./query/index.cjs");
6
- require("./table_calculate.cjs");
7
- require("./table_common.cjs");
8
- require("./spec/ids.cjs");
9
- require("./spec/anchored.cjs");
10
- require("./spec/filtered_column.cjs");
11
- require("./spec/selectors.cjs");
12
- require("./spec/native_id.cjs");
13
- require("./spec/discovered_column.cjs");
6
+ const require_table_calculate = require("./table_calculate.cjs");
7
+ const require_table_common = require("./table_common.cjs");
8
+ const require_ids = require("./spec/ids.cjs");
9
+ const require_anchored = require("./spec/anchored.cjs");
10
+ const require_filtered_column = require("./spec/filtered_column.cjs");
11
+ const require_selectors = require("./spec/selectors.cjs");
12
+ const require_native_id = require("./spec/native_id.cjs");
13
+ const require_discovered_column = require("./spec/discovered_column.cjs");
14
14
  require("./spec/index.cjs");
15
- require("./driver.cjs");
16
- require("./linker_columns.cjs");
15
+ const require_linker_columns = require("./linker_columns.cjs");
16
+ exports.AnchoredIdDeriver = require_anchored.AnchoredIdDeriver;
17
+ exports.Annotation = require_spec.Annotation;
18
+ exports.AnnotationJson = require_spec.AnnotationJson;
19
+ exports.Domain = require_spec.Domain;
20
+ exports.DomainJson = require_spec.DomainJson;
21
+ exports.LinkerMap = require_linker_columns.LinkerMap;
22
+ exports.PAxisName = require_spec.PAxisName;
23
+ exports.PColumnName = require_spec.PColumnName;
24
+ exports.PTableNA = require_data_types.PTableNA;
25
+ exports.ValueType = require_spec.ValueType;
26
+ exports.XLSX_MAX_ROWS_PER_SHEET = require_data_types.XLSX_MAX_ROWS_PER_SHEET;
27
+ exports.canonicalizeAxisId = require_spec.canonicalizeAxisId;
28
+ exports.canonicalizeAxisWithParents = require_spec.canonicalizeAxisWithParents;
29
+ exports.collectSpecQueryColumns = require_utils.collectSpecQueryColumns;
30
+ exports.createDiscoveredPColumnId = require_discovered_column.createDiscoveredPColumnId;
31
+ exports.dataInfoToEntries = require_data_info.dataInfoToEntries;
32
+ exports.deriveNativeId = require_native_id.deriveNativeId;
33
+ exports.distillDiscoveredPColumn = require_discovered_column.distillDiscoveredPColumn;
34
+ exports.entriesToDataInfo = require_data_info.entriesToDataInfo;
35
+ exports.getArrayFromAxisTree = require_spec.getArrayFromAxisTree;
36
+ exports.getAxesId = require_spec.getAxesId;
37
+ exports.getAxesTree = require_spec.getAxesTree;
38
+ exports.getAxisId = require_spec.getAxisId;
39
+ exports.getColumnIdAndSpec = require_spec.getColumnIdAndSpec;
40
+ exports.getDenormalizedAxesList = require_spec.getDenormalizedAxesList;
41
+ exports.getNormalizedAxesList = require_spec.getNormalizedAxesList;
42
+ exports.getPColumnSpecId = require_spec.getPColumnSpecId;
43
+ exports.getPTableColumnId = require_table_common.getPTableColumnId;
44
+ exports.getSetFromAxisTree = require_spec.getSetFromAxisTree;
45
+ exports.getTypeFromPColumnOrAxisSpec = require_spec.getTypeFromPColumnOrAxisSpec;
46
+ exports.isAnchoredPColumnId = require_selectors.isAnchoredPColumnId;
47
+ exports.isAxisId = require_spec.isAxisId;
48
+ exports.isBooleanExpression = require_utils.isBooleanExpression;
49
+ exports.isDataInfo = require_data_info.isDataInfo;
50
+ exports.isDataInfoEntries = require_data_info.isDataInfoEntries;
51
+ exports.isDiscoveredPColumn = require_discovered_column.isDiscoveredPColumn;
52
+ exports.isFilteredPColumn = require_filtered_column.isFilteredPColumn;
53
+ exports.isLabelColumn = require_spec.isLabelColumn;
54
+ exports.isLinkerColumn = require_spec.isLinkerColumn;
55
+ exports.isPTableNA = require_data_types.isPTableNA;
56
+ exports.isPartitionedDataInfoEntries = require_data_info.isPartitionedDataInfoEntries;
57
+ exports.isValueNA = require_data_types.isValueNA;
58
+ exports.legacyColumnSelectorsToPredicate = require_selectors.legacyColumnSelectorsToPredicate;
59
+ exports.mapDataInfo = require_data_info.mapDataInfo;
60
+ exports.mapDataInfoEntries = require_data_info.mapDataInfoEntries;
61
+ exports.mapJoinEntry = require_table_calculate.mapJoinEntry;
62
+ exports.mapPTableDef = require_table_calculate.mapPTableDef;
63
+ exports.mapPTableDefV2 = require_table_calculate.mapPTableDefV2;
64
+ exports.mapSpecQueryColumns = require_utils.mapSpecQueryColumns;
65
+ exports.matchAxis = require_selectors.matchAxis;
66
+ exports.matchAxisId = require_spec.matchAxisId;
67
+ exports.matchMultiColumnSelector = require_selectors.matchMultiColumnSelector;
68
+ exports.matchPColumn = require_selectors.matchPColumn;
69
+ exports.multiColumnSelectorsToPredicate = require_selectors.multiColumnSelectorsToPredicate;
70
+ exports.pTableValue = require_data_types.pTableValue;
71
+ exports.pTableValueBranded = require_data_types.pTableValueBranded;
72
+ exports.parseColumnId = require_ids.parseColumnId;
73
+ exports.parseDiscoveredPColumnId = require_discovered_column.parseDiscoveredPColumnId;
74
+ exports.readAnnotation = require_spec.readAnnotation;
75
+ exports.readAnnotationJson = require_spec.readAnnotationJson;
76
+ exports.readAnnotationJsonOrThrow = require_spec.readAnnotationJsonOrThrow;
77
+ exports.readDomain = require_spec.readDomain;
78
+ exports.readDomainJson = require_spec.readDomainJson;
79
+ exports.readDomainJsonOrThrow = require_spec.readDomainJsonOrThrow;
80
+ exports.readMetadata = require_spec.readMetadata;
81
+ exports.readMetadataJson = require_spec.readMetadataJson;
82
+ exports.readMetadataJsonOrThrow = require_spec.readMetadataJsonOrThrow;
83
+ exports.resolveAnchors = require_anchored.resolveAnchors;
84
+ exports.resolveAnnotationParents = require_spec.resolveAnnotationParents;
85
+ exports.sortJoinEntry = require_table_calculate.sortJoinEntry;
86
+ exports.sortPTableDef = require_table_calculate.sortPTableDef;
87
+ exports.sortSpecQuery = require_utils.sortSpecQuery;
88
+ exports.stringifyColumnId = require_ids.stringifyColumnId;
89
+ exports.stringifyDiscoveredPColumnId = require_discovered_column.stringifyDiscoveredPColumnId;
90
+ exports.traverseQuerySpec = require_utils.traverseQuerySpec;
91
+ exports.visitDataInfo = require_data_info.visitDataInfo;
@@ -20,4 +20,5 @@ import { PTable } from "./table.js";
20
20
  import { UniqueValuesRequest, UniqueValuesResponse } from "./unique_values.js";
21
21
  import { CompositeLinkerMap, LinkerMap } from "./linker_columns.js";
22
22
  import { PFrame, PFrameDef } from "./pframe.js";
23
- import { PFrameDriver, PFrameHandle, PFrameModelDriver, PTableHandle } from "./driver.js";
23
+ import { PFrameDriver, PFrameHandle, PFrameModelDriver, PTableHandle } from "./driver.js";
24
+ export { AAxisSelector, ADomain, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAxisRefByIdx, AnchorAxisRefByMatcher, AnchorAxisRefByName, AnchorDomainRef, AnchoredColumnMatchStrategy, AnchoredIdDeriver, AnchoredPColumnId, AnchoredPColumnSelector, Annotation, AnnotationDataStatus, AnnotationJson, ArtificialColumnJoinEntry, AxesId, AxesSpec, AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, AxisId, AxisQualification, AxisSpec, AxisSpecNormalized, AxisTree, AxisValueType, BinaryChunk, BinaryPartitionedDataInfo, BinaryPartitionedDataInfoEntries, BuildQueryInput, CalculateTableDataRequest, CalculateTableDataResponse, ColumnAxesWithQualifications, ColumnFilter, ColumnJoinEntry, ColumnValueType, CompositeLinkerMap, ConstantAxisFilter, DataExprAxisRef, DataExprColumnRef, DataInfo, DataInfoEntries, DataQuery, DataQueryBooleanExpression, DataQueryColumn, DataQueryExpression, DataQueryFilter, DataQueryInlineColumn, DataQueryJoinEntry, DataQueryLinkerJoin, DataQueryLinkerJoinLinker, DataQueryOuterJoin, DataQuerySliceAxes, DataQuerySort, DataQuerySparseToDenseColumn, DataQuerySymmetricJoin, DataQueryTransformColumns, DeleteColumnRequest, DeleteColumnResponse, DiscoverColumnsConstraints, DiscoverColumnsFilterStep, DiscoverColumnsLinkerStep, DiscoverColumnsMappingVariant, DiscoverColumnsRequest, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, DiscoverColumnsStepInfo, DiscoveredPColumn, DiscoveredPColumnId, Domain, DomainJson, EvaluateQueryResponse, ExportPTableOptions, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilteredPColumn, FilteredPColumnId, FindColumnsRequest, FindColumnsResponse, FullJoin, FullPTableColumnData, InferFilterSpecCommonLeaf, InferFilterSpecCommonNode, InferFilterSpecLeaf, InferFilterSpecLeafColumn, InlineColumnJoinEntry, InnerJoin, JoinEntry, JsonDataInfo, JsonDataInfoEntries, JsonPartitionedDataInfo, JsonPartitionedDataInfoEntries, LegacyAxisSelector, LinkerMap, MatcherMap, Metadata, MetadataJson, MultiAxisSelector, MultiColumnSelector, NativePObjectId, OuterJoin, PAxisName, PColumn, PColumnDataEntry, PColumnIdAndSpec, PColumnKey, PColumnLazy, PColumnName, PColumnSelector, PColumnSpec, PColumnSpecId, PColumnValue, PColumnValues, PColumnValuesEntry, PDataColumnSpec, PFrame, PFrameDef, PFrameDriver, PFrameHandle, PFrameModelDriver, PFrameSpecDriver, PTable, PTableColumnId, PTableColumnIdAxis, PTableColumnIdColumn, PTableColumnSpec, PTableColumnSpecAxis, PTableColumnSpecColumn, PTableDef, PTableDefV2, PTableDownloadCompression, PTableDownloadFormat, PTableHandle, PTableNA, PTableRecordFilter, PTableRecordSingleValueFilterV2, PTableShape, PTableSorting, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PUniversalColumnSpec, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, ParquetChunk, ParquetChunkMapping, ParquetChunkMappingAxis, ParquetChunkMappingColumn, ParquetChunkMetadata, ParquetChunkStats, ParquetPartitionedDataInfo, ParquetPartitionedDataInfoEntries, PartitionedDataInfoEntries, ResolveAnchorsOptions, RootFilterSpec, SUniversalPColumnId, SingleAxisSelector, SingleValueAndPredicateV2, SingleValueEqualPredicate, SingleValueGreaterOrEqualPredicate, SingleValueGreaterPredicate, SingleValueIEqualPredicate, SingleValueInSetPredicate, SingleValueIsNAPredicate, SingleValueLessOrEqualPredicate, SingleValueLessPredicate, SingleValueMatchesPredicate, SingleValueNotPredicateV2, SingleValueOrPredicateV2, SingleValuePredicateV2, SingleValueStringContainsFuzzyPredicate, SingleValueStringContainsPredicate, SingleValueStringIContainsFuzzyPredicate, SingleValueStringIContainsPredicate, SlicedColumnJoinEntry, SpecExprAxisRef, SpecExprColumnRef, SpecFrameHandle, SpecQuery, SpecQueryBooleanExpression, SpecQueryColumn, SpecQueryExpression, SpecQueryFilter, SpecQueryInlineColumn, SpecQueryJoinEntry, SpecQueryLinkerJoin, SpecQueryLinkerJoinLinker, SpecQueryOuterJoin, SpecQuerySliceAxes, SpecQuerySort, SpecQuerySparseToDenseColumn, SpecQuerySymmetricJoin, SpecQueryTransformColumns, StringMatcher, TableRange, Trace, TraceEntry, UniqueValuesRequest, UniqueValuesResponse, UniversalPColumnId, ValueType, ValueTypeSupported, WritePTableToFsOptions, WritePTableToFsResult, XLSX_MAX_ROWS_PER_SHEET, canonicalizeAxisId, canonicalizeAxisWithParents, collectSpecQueryColumns, createDiscoveredPColumnId, dataInfoToEntries, deriveNativeId, distillDiscoveredPColumn, entriesToDataInfo, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getPTableColumnId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAnchoredPColumnId, isAxisId, isBooleanExpression, isDataInfo, isDataInfoEntries, isDiscoveredPColumn, isFilteredPColumn, isLabelColumn, isLinkerColumn, isPTableNA, isPartitionedDataInfoEntries, isValueNA, legacyColumnSelectorsToPredicate, mapDataInfo, mapDataInfoEntries, mapJoinEntry, mapPTableDef, mapPTableDefV2, mapSpecQueryColumns, matchAxis, matchAxisId, matchMultiColumnSelector, matchPColumn, multiColumnSelectorsToPredicate, pTableValue, pTableValueBranded, parseColumnId, parseDiscoveredPColumnId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, resolveAnchors, resolveAnnotationParents, sortJoinEntry, sortPTableDef, sortSpecQuery, stringifyColumnId, stringifyDiscoveredPColumnId, traverseQuerySpec, visitDataInfo };
@@ -1,16 +1,16 @@
1
- import "./data_info.js";
2
- import "./spec/spec.js";
3
- import "./data_types.js";
4
- import "./query/utils.js";
1
+ import { dataInfoToEntries, entriesToDataInfo, isDataInfo, isDataInfoEntries, isPartitionedDataInfoEntries, mapDataInfo, mapDataInfoEntries, visitDataInfo } from "./data_info.js";
2
+ import { Annotation, AnnotationJson, Domain, DomainJson, PAxisName, PColumnName, ValueType, canonicalizeAxisId, canonicalizeAxisWithParents, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAxisId, isLabelColumn, isLinkerColumn, matchAxisId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, resolveAnnotationParents } from "./spec/spec.js";
3
+ import { PTableNA, XLSX_MAX_ROWS_PER_SHEET, isPTableNA, isValueNA, pTableValue, pTableValueBranded } from "./data_types.js";
4
+ import { collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec } from "./query/utils.js";
5
5
  import "./query/index.js";
6
- import "./table_calculate.js";
7
- import "./table_common.js";
8
- import "./spec/ids.js";
9
- import "./spec/anchored.js";
10
- import "./spec/filtered_column.js";
11
- import "./spec/selectors.js";
12
- import "./spec/native_id.js";
13
- import "./spec/discovered_column.js";
6
+ import { mapJoinEntry, mapPTableDef, mapPTableDefV2, sortJoinEntry, sortPTableDef } from "./table_calculate.js";
7
+ import { getPTableColumnId } from "./table_common.js";
8
+ import { parseColumnId, stringifyColumnId } from "./spec/ids.js";
9
+ import { AnchoredIdDeriver, resolveAnchors } from "./spec/anchored.js";
10
+ import { isFilteredPColumn } from "./spec/filtered_column.js";
11
+ import { isAnchoredPColumnId, legacyColumnSelectorsToPredicate, matchAxis, matchMultiColumnSelector, matchPColumn, multiColumnSelectorsToPredicate } from "./spec/selectors.js";
12
+ import { deriveNativeId } from "./spec/native_id.js";
13
+ import { createDiscoveredPColumnId, distillDiscoveredPColumn, isDiscoveredPColumn, parseDiscoveredPColumnId, stringifyDiscoveredPColumnId } from "./spec/discovered_column.js";
14
14
  import "./spec/index.js";
15
- import "./driver.js";
16
- import "./linker_columns.js";
15
+ import { LinkerMap } from "./linker_columns.js";
16
+ export { AnchoredIdDeriver, Annotation, AnnotationJson, Domain, DomainJson, LinkerMap, PAxisName, PColumnName, PTableNA, ValueType, XLSX_MAX_ROWS_PER_SHEET, canonicalizeAxisId, canonicalizeAxisWithParents, collectSpecQueryColumns, createDiscoveredPColumnId, dataInfoToEntries, deriveNativeId, distillDiscoveredPColumn, entriesToDataInfo, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getPTableColumnId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAnchoredPColumnId, isAxisId, isBooleanExpression, isDataInfo, isDataInfoEntries, isDiscoveredPColumn, isFilteredPColumn, isLabelColumn, isLinkerColumn, isPTableNA, isPartitionedDataInfoEntries, isValueNA, legacyColumnSelectorsToPredicate, mapDataInfo, mapDataInfoEntries, mapJoinEntry, mapPTableDef, mapPTableDefV2, mapSpecQueryColumns, matchAxis, matchAxisId, matchMultiColumnSelector, matchPColumn, multiColumnSelectorsToPredicate, pTableValue, pTableValueBranded, parseColumnId, parseDiscoveredPColumnId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, resolveAnchors, resolveAnnotationParents, sortJoinEntry, sortPTableDef, sortSpecQuery, stringifyColumnId, stringifyDiscoveredPColumnId, traverseQuerySpec, visitDataInfo };
@@ -61,8 +61,8 @@ var LinkerMap = class LinkerMap {
61
61
  /** Get all linker columns that are necessary to reach endKey from startKey */
62
62
  searchLinkerPath(startKey, endKey) {
63
63
  const previous = {};
64
- let nextIds = new Set([startKey]);
65
- const visited = new Set([startKey]);
64
+ let nextIds = /* @__PURE__ */ new Set([startKey]);
65
+ const visited = /* @__PURE__ */ new Set([startKey]);
66
66
  while (nextIds.size) {
67
67
  const next = /* @__PURE__ */ new Set();
68
68
  for (const nextId of nextIds) {
@@ -1 +1 @@
1
- {"version":3,"file":"linker_columns.cjs","names":["parseJson","readAnnotationJson","Annotation","getNormalizedAxesList","getArrayFromAxisTree","getAxesTree","canonicalizeJson","getAxisId"],"sources":["../../../src/drivers/pframe/linker_columns.ts"],"sourcesContent":["import { canonicalizeJson, parseJson, type CanonicalizedJson } from \"../../json\";\nimport {\n Annotation,\n readAnnotationJson,\n type AxisSpec,\n type PColumnIdAndSpec,\n type AxisSpecNormalized,\n type AxisId,\n getAxisId,\n getNormalizedAxesList,\n getArrayFromAxisTree,\n getAxesTree,\n} from \"./spec/spec\";\n\ntype LinkerKey = CanonicalizedJson<AxisId[]>;\nexport type CompositeLinkerMap = Map<\n LinkerKey,\n {\n keyAxesSpec: AxisSpecNormalized[]; // axis specs - source for the key\n linkWith: Map<LinkerKey, PColumnIdAndSpec>; // for every axis (possibly in group with parents - available by linkers another axes and corresponding linkers)\n }\n>;\n\ninterface LinkersData {\n data: CompositeLinkerMap;\n}\nexport class LinkerMap implements LinkersData {\n /** Graph of linkers connected by axes (single or grouped by parents) */\n readonly data: CompositeLinkerMap;\n\n constructor(linkerMap: CompositeLinkerMap) {\n this.data = linkerMap;\n }\n\n get keys() {\n return this.data.keys();\n }\n\n get keyAxesIds() {\n return [...this.data.keys()].map(parseJson);\n }\n\n static fromColumns(columns: PColumnIdAndSpec[]) {\n const result: CompositeLinkerMap = new Map();\n for (const linker of columns.filter(\n (l) => !!readAnnotationJson(l.spec, Annotation.IsLinkerColumn),\n )) {\n const groups = LinkerMap.getAxesGroups(getNormalizedAxesList(linker.spec.axesSpec)); // split input axes into groups by parent links from annotation\n\n if (groups.length !== 2) {\n continue; // not a valid linker column\n }\n const [left, right] = groups;\n\n // In case of group:\n // A - C\n // \\_ B _ D\n // E/\n // put 2 variants as keys:\n // A - C\n // \\_ B _ D\n // and\n // E - B - D\n const leftKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(left).map(\n (axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n },\n );\n const rightKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(\n right,\n ).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n\n for (const [keyLeft, spec] of leftKeyVariants) {\n if (!result.has(keyLeft)) {\n result.set(keyLeft, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight, spec] of rightKeyVariants) {\n if (!result.has(keyRight)) {\n result.set(keyRight, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight] of rightKeyVariants) {\n for (const [keyLeft] of leftKeyVariants) {\n result.get(keyRight)?.linkWith.set(keyLeft, linker);\n }\n }\n }\n return new this(result);\n }\n\n /** Get all available nodes of linker graphs if start from sourceAxesKeys */\n searchAvailableAxesKeys(sourceAxesKeys: LinkerKey[]): Set<LinkerKey> {\n const startKeys = new Set(sourceAxesKeys);\n const allAvailableKeys = new Set<LinkerKey>();\n let nextKeys = sourceAxesKeys;\n while (nextKeys.length) {\n const next: LinkerKey[] = [];\n for (const key of nextKeys) {\n const node = this.data.get(key);\n if (!node) continue;\n for (const availableKey of node.linkWith.keys()) {\n if (!allAvailableKeys.has(availableKey) && !startKeys.has(availableKey)) {\n next.push(availableKey);\n allAvailableKeys.add(availableKey);\n }\n }\n }\n nextKeys = next;\n }\n return allAvailableKeys;\n }\n\n /** Get all linker columns that are necessary to reach endKey from startKey */\n searchLinkerPath(startKey: LinkerKey, endKey: LinkerKey): PColumnIdAndSpec[] {\n const previous: Record<LinkerKey, LinkerKey> = {};\n let nextIds = new Set([startKey]);\n const visited = new Set([startKey]);\n while (nextIds.size) {\n const next = new Set<LinkerKey>();\n for (const nextId of nextIds) {\n const node = this.data.get(nextId);\n if (!node) continue;\n for (const availableId of node.linkWith.keys()) {\n previous[availableId] = nextId;\n if (availableId === endKey) {\n const ids: LinkerKey[] = [];\n let current = endKey;\n while (previous[current] !== startKey) {\n ids.push(current);\n current = previous[current];\n }\n ids.push(current);\n // Edge (previous[id] -> id) is stored at the \"from\" node in one-directional map\n return ids.map((id: LinkerKey) => this.data.get(previous[id])!.linkWith.get(id)!);\n } else if (!visited.has(availableId)) {\n next.add(availableId);\n visited.add(availableId);\n }\n }\n }\n nextIds = next;\n }\n return [];\n }\n\n getLinkerColumnsForAxes({\n from: sourceAxes,\n to: targetAxes,\n throwWhenNoLinkExists = true,\n }: {\n from: AxisSpecNormalized[];\n to: AxisSpecNormalized[];\n throwWhenNoLinkExists?: boolean;\n }): PColumnIdAndSpec[] {\n // start keys - all possible keys in linker map using sourceAxes (for example, all axes of block's columns or all axes of columns in data-inputs)\n const startKeys: LinkerKey[] = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n return Array.from(\n new Map(\n LinkerMap.getAxesRoots(targetAxes)\n .map(LinkerMap.getLinkerKeyFromAxisSpec) // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n .flatMap((targetKey) => {\n const linkers = startKeys\n .map((startKey) => this.searchLinkerPath(startKey, targetKey))\n .reduce(\n (shortestPath, path) =>\n (shortestPath.length && shortestPath.length < path.length) || !path.length\n ? shortestPath\n : path,\n [] as PColumnIdAndSpec[],\n )\n .map((linker) => [linker.columnId, linker] as const);\n if (!linkers.length && throwWhenNoLinkExists) {\n throw Error(`Unable to find linker column for ${targetKey}`);\n }\n return linkers;\n }),\n ).values(),\n );\n }\n\n /** Get list of axisSpecs from keys of linker columns map */\n getAxesListFromKeysList(keys: LinkerKey[]): AxisSpecNormalized[] {\n return Array.from(\n new Map(\n keys\n .flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])\n .map((axis) => [canonicalizeJson(getAxisId(axis)), axis]),\n ).values(),\n );\n }\n\n /** Get axes of target axes that are impossible to be linked to source axes with current linker map */\n getNonLinkableAxes(\n sourceAxes: AxisSpecNormalized[],\n targetAxes: AxisSpecNormalized[],\n ): AxisSpecNormalized[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n const targetKeys = targetAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n const axes = Array.from(\n new Map(\n targetAxes\n .filter((_targetAxis, idx) => {\n const targetKey = targetKeys[idx];\n return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);\n })\n .flatMap((axis) =>\n getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [\n canonicalizeJson(getAxisId(axis)),\n axis,\n ]),\n ),\n ).values(),\n );\n return axes;\n }\n\n /** Get all axes that can be connected to sourceAxes by linkers */\n getReachableByLinkersAxesFromAxesNormalized(\n sourceAxes: AxisSpecNormalized[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n let startKeys: CanonicalizedJson<AxisId[]>[] = [];\n\n if (matchAxisIdFn) {\n const sourceAxisIdsGrouped: AxisId[][] = sourceAxes.map((axis) =>\n getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId),\n );\n for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {\n const matched = this.keyAxesIds.find((keyIds: AxisId[]) =>\n keyIds.every((linkerKeyAxisId) =>\n sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched));\n }\n }\n } else {\n startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n }\n\n const availableKeys = this.searchAvailableAxesKeys(startKeys);\n return this.getAxesListFromKeysList([...availableKeys]);\n }\n\n getReachableByLinkersAxesFromAxes(\n sourceAxes: AxisSpec[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n return this.getReachableByLinkersAxesFromAxesNormalized(\n getNormalizedAxesList(sourceAxes),\n matchAxisIdFn,\n );\n }\n\n static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n }\n\n /** Split array of axes into several arrays by parents: axes of one group are parents for each other.\n There are no order inside every group. */\n static getAxesGroups(axesSpec: AxisSpecNormalized[]): AxisSpecNormalized[][] {\n switch (axesSpec.length) {\n case 0:\n return [];\n case 1:\n return [[axesSpec[0]]];\n default:\n break;\n }\n\n const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));\n const axisParentsIdxs = axesSpec.map(\n (spec) =>\n new Set(\n spec.parentAxesSpec\n .map((spec) => canonicalizeJson(getAxisId(spec)))\n .map((el) => {\n const idx = axisKeys.indexOf(el);\n if (idx === -1) {\n throw new Error(\n `malformed axesSpec: ${JSON.stringify(axesSpec)}, unable to locate parent ${el}`,\n );\n }\n return idx;\n }),\n ),\n );\n\n const allIdxs = [...axesSpec.keys()];\n const groups: number[][] = []; // groups of axis indexes\n\n const usedIdxs = new Set<number>();\n let nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n while (nextFreeEl !== undefined) {\n const currentGroup = [nextFreeEl];\n usedIdxs.add(nextFreeEl);\n\n let nextElsOfCurrentGroup = [nextFreeEl];\n while (nextElsOfCurrentGroup.length) {\n const next = new Set<number>();\n for (const groupIdx of nextElsOfCurrentGroup) {\n const groupElementParents = axisParentsIdxs[groupIdx];\n allIdxs.forEach((idx) => {\n if (idx === groupIdx || usedIdxs.has(idx)) {\n return;\n }\n const parents = axisParentsIdxs[idx];\n if (parents.has(groupIdx) || groupElementParents.has(idx)) {\n currentGroup.push(idx);\n next.add(idx);\n usedIdxs.add(idx);\n }\n });\n }\n nextElsOfCurrentGroup = [...next];\n }\n\n groups.push([...currentGroup]);\n nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n }\n\n return groups.map((group) => group.map((idx) => axesSpec[idx]));\n }\n\n /** Get all axes that are not parents of any other axis */\n static getAxesRoots(axes: AxisSpecNormalized[]): AxisSpecNormalized[] {\n const parentsSet = new Set(\n axes.flatMap((axis) => axis.parentAxesSpec).map((spec) => canonicalizeJson(getAxisId(spec))),\n );\n return axes.filter((axis) => !parentsSet.has(canonicalizeJson(getAxisId(axis))));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"linker_columns.cjs","names":["parseJson","readAnnotationJson","Annotation","getNormalizedAxesList","getArrayFromAxisTree","getAxesTree","canonicalizeJson","getAxisId"],"sources":["../../../src/drivers/pframe/linker_columns.ts"],"sourcesContent":["import { canonicalizeJson, parseJson, type CanonicalizedJson } from \"../../json\";\nimport {\n Annotation,\n readAnnotationJson,\n type AxisSpec,\n type PColumnIdAndSpec,\n type AxisSpecNormalized,\n type AxisId,\n getAxisId,\n getNormalizedAxesList,\n getArrayFromAxisTree,\n getAxesTree,\n} from \"./spec/spec\";\n\ntype LinkerKey = CanonicalizedJson<AxisId[]>;\nexport type CompositeLinkerMap = Map<\n LinkerKey,\n {\n keyAxesSpec: AxisSpecNormalized[]; // axis specs - source for the key\n linkWith: Map<LinkerKey, PColumnIdAndSpec>; // for every axis (possibly in group with parents - available by linkers another axes and corresponding linkers)\n }\n>;\n\ninterface LinkersData {\n data: CompositeLinkerMap;\n}\nexport class LinkerMap implements LinkersData {\n /** Graph of linkers connected by axes (single or grouped by parents) */\n readonly data: CompositeLinkerMap;\n\n constructor(linkerMap: CompositeLinkerMap) {\n this.data = linkerMap;\n }\n\n get keys() {\n return this.data.keys();\n }\n\n get keyAxesIds() {\n return [...this.data.keys()].map(parseJson);\n }\n\n static fromColumns(columns: PColumnIdAndSpec[]) {\n const result: CompositeLinkerMap = new Map();\n for (const linker of columns.filter(\n (l) => !!readAnnotationJson(l.spec, Annotation.IsLinkerColumn),\n )) {\n const groups = LinkerMap.getAxesGroups(getNormalizedAxesList(linker.spec.axesSpec)); // split input axes into groups by parent links from annotation\n\n if (groups.length !== 2) {\n continue; // not a valid linker column\n }\n const [left, right] = groups;\n\n // In case of group:\n // A - C\n // \\_ B _ D\n // E/\n // put 2 variants as keys:\n // A - C\n // \\_ B _ D\n // and\n // E - B - D\n const leftKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(left).map(\n (axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n },\n );\n const rightKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(\n right,\n ).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n\n for (const [keyLeft, spec] of leftKeyVariants) {\n if (!result.has(keyLeft)) {\n result.set(keyLeft, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight, spec] of rightKeyVariants) {\n if (!result.has(keyRight)) {\n result.set(keyRight, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight] of rightKeyVariants) {\n for (const [keyLeft] of leftKeyVariants) {\n result.get(keyRight)?.linkWith.set(keyLeft, linker);\n }\n }\n }\n return new this(result);\n }\n\n /** Get all available nodes of linker graphs if start from sourceAxesKeys */\n searchAvailableAxesKeys(sourceAxesKeys: LinkerKey[]): Set<LinkerKey> {\n const startKeys = new Set(sourceAxesKeys);\n const allAvailableKeys = new Set<LinkerKey>();\n let nextKeys = sourceAxesKeys;\n while (nextKeys.length) {\n const next: LinkerKey[] = [];\n for (const key of nextKeys) {\n const node = this.data.get(key);\n if (!node) continue;\n for (const availableKey of node.linkWith.keys()) {\n if (!allAvailableKeys.has(availableKey) && !startKeys.has(availableKey)) {\n next.push(availableKey);\n allAvailableKeys.add(availableKey);\n }\n }\n }\n nextKeys = next;\n }\n return allAvailableKeys;\n }\n\n /** Get all linker columns that are necessary to reach endKey from startKey */\n searchLinkerPath(startKey: LinkerKey, endKey: LinkerKey): PColumnIdAndSpec[] {\n const previous: Record<LinkerKey, LinkerKey> = {};\n let nextIds = new Set([startKey]);\n const visited = new Set([startKey]);\n while (nextIds.size) {\n const next = new Set<LinkerKey>();\n for (const nextId of nextIds) {\n const node = this.data.get(nextId);\n if (!node) continue;\n for (const availableId of node.linkWith.keys()) {\n previous[availableId] = nextId;\n if (availableId === endKey) {\n const ids: LinkerKey[] = [];\n let current = endKey;\n while (previous[current] !== startKey) {\n ids.push(current);\n current = previous[current];\n }\n ids.push(current);\n // Edge (previous[id] -> id) is stored at the \"from\" node in one-directional map\n return ids.map((id: LinkerKey) => this.data.get(previous[id])!.linkWith.get(id)!);\n } else if (!visited.has(availableId)) {\n next.add(availableId);\n visited.add(availableId);\n }\n }\n }\n nextIds = next;\n }\n return [];\n }\n\n getLinkerColumnsForAxes({\n from: sourceAxes,\n to: targetAxes,\n throwWhenNoLinkExists = true,\n }: {\n from: AxisSpecNormalized[];\n to: AxisSpecNormalized[];\n throwWhenNoLinkExists?: boolean;\n }): PColumnIdAndSpec[] {\n // start keys - all possible keys in linker map using sourceAxes (for example, all axes of block's columns or all axes of columns in data-inputs)\n const startKeys: LinkerKey[] = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n return Array.from(\n new Map(\n LinkerMap.getAxesRoots(targetAxes)\n .map(LinkerMap.getLinkerKeyFromAxisSpec) // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n .flatMap((targetKey) => {\n const linkers = startKeys\n .map((startKey) => this.searchLinkerPath(startKey, targetKey))\n .reduce(\n (shortestPath, path) =>\n (shortestPath.length && shortestPath.length < path.length) || !path.length\n ? shortestPath\n : path,\n [] as PColumnIdAndSpec[],\n )\n .map((linker) => [linker.columnId, linker] as const);\n if (!linkers.length && throwWhenNoLinkExists) {\n throw Error(`Unable to find linker column for ${targetKey}`);\n }\n return linkers;\n }),\n ).values(),\n );\n }\n\n /** Get list of axisSpecs from keys of linker columns map */\n getAxesListFromKeysList(keys: LinkerKey[]): AxisSpecNormalized[] {\n return Array.from(\n new Map(\n keys\n .flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])\n .map((axis) => [canonicalizeJson(getAxisId(axis)), axis]),\n ).values(),\n );\n }\n\n /** Get axes of target axes that are impossible to be linked to source axes with current linker map */\n getNonLinkableAxes(\n sourceAxes: AxisSpecNormalized[],\n targetAxes: AxisSpecNormalized[],\n ): AxisSpecNormalized[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n const targetKeys = targetAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n const axes = Array.from(\n new Map(\n targetAxes\n .filter((_targetAxis, idx) => {\n const targetKey = targetKeys[idx];\n return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);\n })\n .flatMap((axis) =>\n getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [\n canonicalizeJson(getAxisId(axis)),\n axis,\n ]),\n ),\n ).values(),\n );\n return axes;\n }\n\n /** Get all axes that can be connected to sourceAxes by linkers */\n getReachableByLinkersAxesFromAxesNormalized(\n sourceAxes: AxisSpecNormalized[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n let startKeys: CanonicalizedJson<AxisId[]>[] = [];\n\n if (matchAxisIdFn) {\n const sourceAxisIdsGrouped: AxisId[][] = sourceAxes.map((axis) =>\n getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId),\n );\n for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {\n const matched = this.keyAxesIds.find((keyIds: AxisId[]) =>\n keyIds.every((linkerKeyAxisId) =>\n sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched));\n }\n }\n } else {\n startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n }\n\n const availableKeys = this.searchAvailableAxesKeys(startKeys);\n return this.getAxesListFromKeysList([...availableKeys]);\n }\n\n getReachableByLinkersAxesFromAxes(\n sourceAxes: AxisSpec[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n return this.getReachableByLinkersAxesFromAxesNormalized(\n getNormalizedAxesList(sourceAxes),\n matchAxisIdFn,\n );\n }\n\n static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n }\n\n /** Split array of axes into several arrays by parents: axes of one group are parents for each other.\n There are no order inside every group. */\n static getAxesGroups(axesSpec: AxisSpecNormalized[]): AxisSpecNormalized[][] {\n switch (axesSpec.length) {\n case 0:\n return [];\n case 1:\n return [[axesSpec[0]]];\n default:\n break;\n }\n\n const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));\n const axisParentsIdxs = axesSpec.map(\n (spec) =>\n new Set(\n spec.parentAxesSpec\n .map((spec) => canonicalizeJson(getAxisId(spec)))\n .map((el) => {\n const idx = axisKeys.indexOf(el);\n if (idx === -1) {\n throw new Error(\n `malformed axesSpec: ${JSON.stringify(axesSpec)}, unable to locate parent ${el}`,\n );\n }\n return idx;\n }),\n ),\n );\n\n const allIdxs = [...axesSpec.keys()];\n const groups: number[][] = []; // groups of axis indexes\n\n const usedIdxs = new Set<number>();\n let nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n while (nextFreeEl !== undefined) {\n const currentGroup = [nextFreeEl];\n usedIdxs.add(nextFreeEl);\n\n let nextElsOfCurrentGroup = [nextFreeEl];\n while (nextElsOfCurrentGroup.length) {\n const next = new Set<number>();\n for (const groupIdx of nextElsOfCurrentGroup) {\n const groupElementParents = axisParentsIdxs[groupIdx];\n allIdxs.forEach((idx) => {\n if (idx === groupIdx || usedIdxs.has(idx)) {\n return;\n }\n const parents = axisParentsIdxs[idx];\n if (parents.has(groupIdx) || groupElementParents.has(idx)) {\n currentGroup.push(idx);\n next.add(idx);\n usedIdxs.add(idx);\n }\n });\n }\n nextElsOfCurrentGroup = [...next];\n }\n\n groups.push([...currentGroup]);\n nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n }\n\n return groups.map((group) => group.map((idx) => axesSpec[idx]));\n }\n\n /** Get all axes that are not parents of any other axis */\n static getAxesRoots(axes: AxisSpecNormalized[]): AxisSpecNormalized[] {\n const parentsSet = new Set(\n axes.flatMap((axis) => axis.parentAxesSpec).map((spec) => canonicalizeJson(getAxisId(spec))),\n );\n return axes.filter((axis) => !parentsSet.has(canonicalizeJson(getAxisId(axis))));\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"linker_columns.d.ts","names":[],"sources":["../../../src/drivers/pframe/linker_columns.ts"],"mappings":";;;;KAcK,SAAA,GAAY,iBAAA,CAAkB,MAAA;AAAA,KACvB,kBAAA,GAAqB,GAAA,CAC/B,SAAA;EAEE,WAAA,EAAa,kBAAA;EACb,QAAA,EAAU,GAAA,CAAI,SAAA,EAAW,gBAAA;AAAA;AAAA,UAInB,WAAA;EACR,IAAA,EAAM,kBAAA;AAAA;AAAA,cAEK,SAAA,YAAqB,WAAA;;WAEvB,IAAA,EAAM,kBAAA;cAEH,SAAA,EAAW,kBAAA;EAAA,IAInB,IAAA,CAAA,GAAI,WAAA;;;MAIJ,UAAA,CAAA,GAAU,MAAA;EAAA,OAIP,WAAA,CAAY,OAAA,EAAS,gBAAA,KAAkB,SAAA;EA3BZ;EAmFlC,uBAAA,CAAwB,cAAA,EAAgB,SAAA,KAAc,GAAA,CAAI,SAAA;EAlF1D;EAwGA,gBAAA,CAAiB,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,SAAA,GAAY,gBAAA;EAgC1D,uBAAA,CAAA;IACE,IAAA,EAAM,UAAA;IACN,EAAA,EAAI,UAAA;IACJ;EAAA;IAEA,IAAA,EAAM,kBAAA;IACN,EAAA,EAAI,kBAAA;IACJ,qBAAA;EAAA,IACE,gBAAA;EA7IuC;EA0K3C,uBAAA,CAAwB,IAAA,EAAM,SAAA,KAAc,kBAAA;EAtKpC;EAiLR,kBAAA,CACE,UAAA,EAAY,kBAAA,IACZ,UAAA,EAAY,kBAAA,KACX,kBAAA;;EAwBH,2CAAA,CACE,UAAA,EAAY,kBAAA,IACZ,aAAA,IAAiB,cAAA,EAAgB,MAAA,EAAQ,cAAA,EAAgB,MAAA,eACxD,kBAAA;EAyBH,iCAAA,CACE,UAAA,EAAY,QAAA,IACZ,aAAA,IAAiB,cAAA,EAAgB,MAAA,EAAQ,cAAA,EAAgB,MAAA,eACxD,kBAAA;EAAA,OAOI,wBAAA,CAAyB,IAAA,EAAM,kBAAA,GAAqB,SAAA;EA/OtC;;EAAA,OAqPd,aAAA,CAAc,QAAA,EAAU,kBAAA,KAAuB,kBAAA;EAjP/B;EAAA,OAkThB,YAAA,CAAa,IAAA,EAAM,kBAAA,KAAuB,kBAAA;AAAA"}
1
+ {"version":3,"file":"linker_columns.d.ts","names":[],"sources":["../../../src/drivers/pframe/linker_columns.ts"],"mappings":";;;;KAcK,SAAA,GAAY,iBAAiB,CAAC,MAAA;AAAA,KACvB,kBAAA,GAAqB,GAAA,CAC/B,SAAA;EAEE,WAAA,EAAa,kBAAA;EACb,QAAA,EAAU,GAAA,CAAI,SAAA,EAAW,gBAAA;AAAA;AAAA,UAInB,WAAA;EACR,IAAA,EAAM,kBAAkB;AAAA;AAAA,cAEb,SAAA,YAAqB,WAAA;;WAEvB,IAAA,EAAM,kBAAA;cAEH,SAAA,EAAW,kBAAA;EAAA,IAInB,IAAA,IAAI,WAAA;;;MAIJ,UAAA,IAAU,MAAA;EAAA,OAIP,WAAA,CAAY,OAAA,EAAS,gBAAA,KAAkB,SAAA;EA3BZ;EAmFlC,uBAAA,CAAwB,cAAA,EAAgB,SAAA,KAAc,GAAA,CAAI,SAAA;EAlF1D;EAwGA,gBAAA,CAAiB,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,SAAA,GAAY,gBAAA;EAgC1D,uBAAA;IACE,IAAA,EAAM,UAAA;IACN,EAAA,EAAI,UAAA;IACJ;EAAA;IAEA,IAAA,EAAM,kBAAA;IACN,EAAA,EAAI,kBAAA;IACJ,qBAAA;EAAA,IACE,gBAAA;EA7IuC;EA0K3C,uBAAA,CAAwB,IAAA,EAAM,SAAA,KAAc,kBAAA;EAtKpC;EAiLR,kBAAA,CACE,UAAA,EAAY,kBAAA,IACZ,UAAA,EAAY,kBAAA,KACX,kBAAA;;EAwBH,2CAAA,CACE,UAAA,EAAY,kBAAA,IACZ,aAAA,IAAiB,cAAA,EAAgB,MAAA,EAAQ,cAAA,EAAgB,MAAA,eACxD,kBAAA;EAyBH,iCAAA,CACE,UAAA,EAAY,QAAA,IACZ,aAAA,IAAiB,cAAA,EAAgB,MAAA,EAAQ,cAAA,EAAgB,MAAA,eACxD,kBAAA;EAAA,OAOI,wBAAA,CAAyB,IAAA,EAAM,kBAAA,GAAqB,SAAA;EA/OtC;;EAAA,OAqPd,aAAA,CAAc,QAAA,EAAU,kBAAA,KAAuB,kBAAA;EAjP/B;EAAA,OAkThB,YAAA,CAAa,IAAA,EAAM,kBAAA,KAAuB,kBAAA;AAAA"}
@@ -61,8 +61,8 @@ var LinkerMap = class LinkerMap {
61
61
  /** Get all linker columns that are necessary to reach endKey from startKey */
62
62
  searchLinkerPath(startKey, endKey) {
63
63
  const previous = {};
64
- let nextIds = new Set([startKey]);
65
- const visited = new Set([startKey]);
64
+ let nextIds = /* @__PURE__ */ new Set([startKey]);
65
+ const visited = /* @__PURE__ */ new Set([startKey]);
66
66
  while (nextIds.size) {
67
67
  const next = /* @__PURE__ */ new Set();
68
68
  for (const nextId of nextIds) {
@@ -1 +1 @@
1
- {"version":3,"file":"linker_columns.js","names":[],"sources":["../../../src/drivers/pframe/linker_columns.ts"],"sourcesContent":["import { canonicalizeJson, parseJson, type CanonicalizedJson } from \"../../json\";\nimport {\n Annotation,\n readAnnotationJson,\n type AxisSpec,\n type PColumnIdAndSpec,\n type AxisSpecNormalized,\n type AxisId,\n getAxisId,\n getNormalizedAxesList,\n getArrayFromAxisTree,\n getAxesTree,\n} from \"./spec/spec\";\n\ntype LinkerKey = CanonicalizedJson<AxisId[]>;\nexport type CompositeLinkerMap = Map<\n LinkerKey,\n {\n keyAxesSpec: AxisSpecNormalized[]; // axis specs - source for the key\n linkWith: Map<LinkerKey, PColumnIdAndSpec>; // for every axis (possibly in group with parents - available by linkers another axes and corresponding linkers)\n }\n>;\n\ninterface LinkersData {\n data: CompositeLinkerMap;\n}\nexport class LinkerMap implements LinkersData {\n /** Graph of linkers connected by axes (single or grouped by parents) */\n readonly data: CompositeLinkerMap;\n\n constructor(linkerMap: CompositeLinkerMap) {\n this.data = linkerMap;\n }\n\n get keys() {\n return this.data.keys();\n }\n\n get keyAxesIds() {\n return [...this.data.keys()].map(parseJson);\n }\n\n static fromColumns(columns: PColumnIdAndSpec[]) {\n const result: CompositeLinkerMap = new Map();\n for (const linker of columns.filter(\n (l) => !!readAnnotationJson(l.spec, Annotation.IsLinkerColumn),\n )) {\n const groups = LinkerMap.getAxesGroups(getNormalizedAxesList(linker.spec.axesSpec)); // split input axes into groups by parent links from annotation\n\n if (groups.length !== 2) {\n continue; // not a valid linker column\n }\n const [left, right] = groups;\n\n // In case of group:\n // A - C\n // \\_ B _ D\n // E/\n // put 2 variants as keys:\n // A - C\n // \\_ B _ D\n // and\n // E - B - D\n const leftKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(left).map(\n (axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n },\n );\n const rightKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(\n right,\n ).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n\n for (const [keyLeft, spec] of leftKeyVariants) {\n if (!result.has(keyLeft)) {\n result.set(keyLeft, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight, spec] of rightKeyVariants) {\n if (!result.has(keyRight)) {\n result.set(keyRight, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight] of rightKeyVariants) {\n for (const [keyLeft] of leftKeyVariants) {\n result.get(keyRight)?.linkWith.set(keyLeft, linker);\n }\n }\n }\n return new this(result);\n }\n\n /** Get all available nodes of linker graphs if start from sourceAxesKeys */\n searchAvailableAxesKeys(sourceAxesKeys: LinkerKey[]): Set<LinkerKey> {\n const startKeys = new Set(sourceAxesKeys);\n const allAvailableKeys = new Set<LinkerKey>();\n let nextKeys = sourceAxesKeys;\n while (nextKeys.length) {\n const next: LinkerKey[] = [];\n for (const key of nextKeys) {\n const node = this.data.get(key);\n if (!node) continue;\n for (const availableKey of node.linkWith.keys()) {\n if (!allAvailableKeys.has(availableKey) && !startKeys.has(availableKey)) {\n next.push(availableKey);\n allAvailableKeys.add(availableKey);\n }\n }\n }\n nextKeys = next;\n }\n return allAvailableKeys;\n }\n\n /** Get all linker columns that are necessary to reach endKey from startKey */\n searchLinkerPath(startKey: LinkerKey, endKey: LinkerKey): PColumnIdAndSpec[] {\n const previous: Record<LinkerKey, LinkerKey> = {};\n let nextIds = new Set([startKey]);\n const visited = new Set([startKey]);\n while (nextIds.size) {\n const next = new Set<LinkerKey>();\n for (const nextId of nextIds) {\n const node = this.data.get(nextId);\n if (!node) continue;\n for (const availableId of node.linkWith.keys()) {\n previous[availableId] = nextId;\n if (availableId === endKey) {\n const ids: LinkerKey[] = [];\n let current = endKey;\n while (previous[current] !== startKey) {\n ids.push(current);\n current = previous[current];\n }\n ids.push(current);\n // Edge (previous[id] -> id) is stored at the \"from\" node in one-directional map\n return ids.map((id: LinkerKey) => this.data.get(previous[id])!.linkWith.get(id)!);\n } else if (!visited.has(availableId)) {\n next.add(availableId);\n visited.add(availableId);\n }\n }\n }\n nextIds = next;\n }\n return [];\n }\n\n getLinkerColumnsForAxes({\n from: sourceAxes,\n to: targetAxes,\n throwWhenNoLinkExists = true,\n }: {\n from: AxisSpecNormalized[];\n to: AxisSpecNormalized[];\n throwWhenNoLinkExists?: boolean;\n }): PColumnIdAndSpec[] {\n // start keys - all possible keys in linker map using sourceAxes (for example, all axes of block's columns or all axes of columns in data-inputs)\n const startKeys: LinkerKey[] = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n return Array.from(\n new Map(\n LinkerMap.getAxesRoots(targetAxes)\n .map(LinkerMap.getLinkerKeyFromAxisSpec) // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n .flatMap((targetKey) => {\n const linkers = startKeys\n .map((startKey) => this.searchLinkerPath(startKey, targetKey))\n .reduce(\n (shortestPath, path) =>\n (shortestPath.length && shortestPath.length < path.length) || !path.length\n ? shortestPath\n : path,\n [] as PColumnIdAndSpec[],\n )\n .map((linker) => [linker.columnId, linker] as const);\n if (!linkers.length && throwWhenNoLinkExists) {\n throw Error(`Unable to find linker column for ${targetKey}`);\n }\n return linkers;\n }),\n ).values(),\n );\n }\n\n /** Get list of axisSpecs from keys of linker columns map */\n getAxesListFromKeysList(keys: LinkerKey[]): AxisSpecNormalized[] {\n return Array.from(\n new Map(\n keys\n .flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])\n .map((axis) => [canonicalizeJson(getAxisId(axis)), axis]),\n ).values(),\n );\n }\n\n /** Get axes of target axes that are impossible to be linked to source axes with current linker map */\n getNonLinkableAxes(\n sourceAxes: AxisSpecNormalized[],\n targetAxes: AxisSpecNormalized[],\n ): AxisSpecNormalized[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n const targetKeys = targetAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n const axes = Array.from(\n new Map(\n targetAxes\n .filter((_targetAxis, idx) => {\n const targetKey = targetKeys[idx];\n return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);\n })\n .flatMap((axis) =>\n getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [\n canonicalizeJson(getAxisId(axis)),\n axis,\n ]),\n ),\n ).values(),\n );\n return axes;\n }\n\n /** Get all axes that can be connected to sourceAxes by linkers */\n getReachableByLinkersAxesFromAxesNormalized(\n sourceAxes: AxisSpecNormalized[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n let startKeys: CanonicalizedJson<AxisId[]>[] = [];\n\n if (matchAxisIdFn) {\n const sourceAxisIdsGrouped: AxisId[][] = sourceAxes.map((axis) =>\n getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId),\n );\n for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {\n const matched = this.keyAxesIds.find((keyIds: AxisId[]) =>\n keyIds.every((linkerKeyAxisId) =>\n sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched));\n }\n }\n } else {\n startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n }\n\n const availableKeys = this.searchAvailableAxesKeys(startKeys);\n return this.getAxesListFromKeysList([...availableKeys]);\n }\n\n getReachableByLinkersAxesFromAxes(\n sourceAxes: AxisSpec[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n return this.getReachableByLinkersAxesFromAxesNormalized(\n getNormalizedAxesList(sourceAxes),\n matchAxisIdFn,\n );\n }\n\n static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n }\n\n /** Split array of axes into several arrays by parents: axes of one group are parents for each other.\n There are no order inside every group. */\n static getAxesGroups(axesSpec: AxisSpecNormalized[]): AxisSpecNormalized[][] {\n switch (axesSpec.length) {\n case 0:\n return [];\n case 1:\n return [[axesSpec[0]]];\n default:\n break;\n }\n\n const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));\n const axisParentsIdxs = axesSpec.map(\n (spec) =>\n new Set(\n spec.parentAxesSpec\n .map((spec) => canonicalizeJson(getAxisId(spec)))\n .map((el) => {\n const idx = axisKeys.indexOf(el);\n if (idx === -1) {\n throw new Error(\n `malformed axesSpec: ${JSON.stringify(axesSpec)}, unable to locate parent ${el}`,\n );\n }\n return idx;\n }),\n ),\n );\n\n const allIdxs = [...axesSpec.keys()];\n const groups: number[][] = []; // groups of axis indexes\n\n const usedIdxs = new Set<number>();\n let nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n while (nextFreeEl !== undefined) {\n const currentGroup = [nextFreeEl];\n usedIdxs.add(nextFreeEl);\n\n let nextElsOfCurrentGroup = [nextFreeEl];\n while (nextElsOfCurrentGroup.length) {\n const next = new Set<number>();\n for (const groupIdx of nextElsOfCurrentGroup) {\n const groupElementParents = axisParentsIdxs[groupIdx];\n allIdxs.forEach((idx) => {\n if (idx === groupIdx || usedIdxs.has(idx)) {\n return;\n }\n const parents = axisParentsIdxs[idx];\n if (parents.has(groupIdx) || groupElementParents.has(idx)) {\n currentGroup.push(idx);\n next.add(idx);\n usedIdxs.add(idx);\n }\n });\n }\n nextElsOfCurrentGroup = [...next];\n }\n\n groups.push([...currentGroup]);\n nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n }\n\n return groups.map((group) => group.map((idx) => axesSpec[idx]));\n }\n\n /** Get all axes that are not parents of any other axis */\n static getAxesRoots(axes: AxisSpecNormalized[]): AxisSpecNormalized[] {\n const parentsSet = new Set(\n axes.flatMap((axis) => axis.parentAxesSpec).map((spec) => canonicalizeJson(getAxisId(spec))),\n );\n return axes.filter((axis) => !parentsSet.has(canonicalizeJson(getAxisId(axis))));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"linker_columns.js","names":[],"sources":["../../../src/drivers/pframe/linker_columns.ts"],"sourcesContent":["import { canonicalizeJson, parseJson, type CanonicalizedJson } from \"../../json\";\nimport {\n Annotation,\n readAnnotationJson,\n type AxisSpec,\n type PColumnIdAndSpec,\n type AxisSpecNormalized,\n type AxisId,\n getAxisId,\n getNormalizedAxesList,\n getArrayFromAxisTree,\n getAxesTree,\n} from \"./spec/spec\";\n\ntype LinkerKey = CanonicalizedJson<AxisId[]>;\nexport type CompositeLinkerMap = Map<\n LinkerKey,\n {\n keyAxesSpec: AxisSpecNormalized[]; // axis specs - source for the key\n linkWith: Map<LinkerKey, PColumnIdAndSpec>; // for every axis (possibly in group with parents - available by linkers another axes and corresponding linkers)\n }\n>;\n\ninterface LinkersData {\n data: CompositeLinkerMap;\n}\nexport class LinkerMap implements LinkersData {\n /** Graph of linkers connected by axes (single or grouped by parents) */\n readonly data: CompositeLinkerMap;\n\n constructor(linkerMap: CompositeLinkerMap) {\n this.data = linkerMap;\n }\n\n get keys() {\n return this.data.keys();\n }\n\n get keyAxesIds() {\n return [...this.data.keys()].map(parseJson);\n }\n\n static fromColumns(columns: PColumnIdAndSpec[]) {\n const result: CompositeLinkerMap = new Map();\n for (const linker of columns.filter(\n (l) => !!readAnnotationJson(l.spec, Annotation.IsLinkerColumn),\n )) {\n const groups = LinkerMap.getAxesGroups(getNormalizedAxesList(linker.spec.axesSpec)); // split input axes into groups by parent links from annotation\n\n if (groups.length !== 2) {\n continue; // not a valid linker column\n }\n const [left, right] = groups;\n\n // In case of group:\n // A - C\n // \\_ B _ D\n // E/\n // put 2 variants as keys:\n // A - C\n // \\_ B _ D\n // and\n // E - B - D\n const leftKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(left).map(\n (axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n },\n );\n const rightKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(\n right,\n ).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n\n for (const [keyLeft, spec] of leftKeyVariants) {\n if (!result.has(keyLeft)) {\n result.set(keyLeft, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight, spec] of rightKeyVariants) {\n if (!result.has(keyRight)) {\n result.set(keyRight, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight] of rightKeyVariants) {\n for (const [keyLeft] of leftKeyVariants) {\n result.get(keyRight)?.linkWith.set(keyLeft, linker);\n }\n }\n }\n return new this(result);\n }\n\n /** Get all available nodes of linker graphs if start from sourceAxesKeys */\n searchAvailableAxesKeys(sourceAxesKeys: LinkerKey[]): Set<LinkerKey> {\n const startKeys = new Set(sourceAxesKeys);\n const allAvailableKeys = new Set<LinkerKey>();\n let nextKeys = sourceAxesKeys;\n while (nextKeys.length) {\n const next: LinkerKey[] = [];\n for (const key of nextKeys) {\n const node = this.data.get(key);\n if (!node) continue;\n for (const availableKey of node.linkWith.keys()) {\n if (!allAvailableKeys.has(availableKey) && !startKeys.has(availableKey)) {\n next.push(availableKey);\n allAvailableKeys.add(availableKey);\n }\n }\n }\n nextKeys = next;\n }\n return allAvailableKeys;\n }\n\n /** Get all linker columns that are necessary to reach endKey from startKey */\n searchLinkerPath(startKey: LinkerKey, endKey: LinkerKey): PColumnIdAndSpec[] {\n const previous: Record<LinkerKey, LinkerKey> = {};\n let nextIds = new Set([startKey]);\n const visited = new Set([startKey]);\n while (nextIds.size) {\n const next = new Set<LinkerKey>();\n for (const nextId of nextIds) {\n const node = this.data.get(nextId);\n if (!node) continue;\n for (const availableId of node.linkWith.keys()) {\n previous[availableId] = nextId;\n if (availableId === endKey) {\n const ids: LinkerKey[] = [];\n let current = endKey;\n while (previous[current] !== startKey) {\n ids.push(current);\n current = previous[current];\n }\n ids.push(current);\n // Edge (previous[id] -> id) is stored at the \"from\" node in one-directional map\n return ids.map((id: LinkerKey) => this.data.get(previous[id])!.linkWith.get(id)!);\n } else if (!visited.has(availableId)) {\n next.add(availableId);\n visited.add(availableId);\n }\n }\n }\n nextIds = next;\n }\n return [];\n }\n\n getLinkerColumnsForAxes({\n from: sourceAxes,\n to: targetAxes,\n throwWhenNoLinkExists = true,\n }: {\n from: AxisSpecNormalized[];\n to: AxisSpecNormalized[];\n throwWhenNoLinkExists?: boolean;\n }): PColumnIdAndSpec[] {\n // start keys - all possible keys in linker map using sourceAxes (for example, all axes of block's columns or all axes of columns in data-inputs)\n const startKeys: LinkerKey[] = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n return Array.from(\n new Map(\n LinkerMap.getAxesRoots(targetAxes)\n .map(LinkerMap.getLinkerKeyFromAxisSpec) // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n .flatMap((targetKey) => {\n const linkers = startKeys\n .map((startKey) => this.searchLinkerPath(startKey, targetKey))\n .reduce(\n (shortestPath, path) =>\n (shortestPath.length && shortestPath.length < path.length) || !path.length\n ? shortestPath\n : path,\n [] as PColumnIdAndSpec[],\n )\n .map((linker) => [linker.columnId, linker] as const);\n if (!linkers.length && throwWhenNoLinkExists) {\n throw Error(`Unable to find linker column for ${targetKey}`);\n }\n return linkers;\n }),\n ).values(),\n );\n }\n\n /** Get list of axisSpecs from keys of linker columns map */\n getAxesListFromKeysList(keys: LinkerKey[]): AxisSpecNormalized[] {\n return Array.from(\n new Map(\n keys\n .flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])\n .map((axis) => [canonicalizeJson(getAxisId(axis)), axis]),\n ).values(),\n );\n }\n\n /** Get axes of target axes that are impossible to be linked to source axes with current linker map */\n getNonLinkableAxes(\n sourceAxes: AxisSpecNormalized[],\n targetAxes: AxisSpecNormalized[],\n ): AxisSpecNormalized[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n const targetKeys = targetAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n const axes = Array.from(\n new Map(\n targetAxes\n .filter((_targetAxis, idx) => {\n const targetKey = targetKeys[idx];\n return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);\n })\n .flatMap((axis) =>\n getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [\n canonicalizeJson(getAxisId(axis)),\n axis,\n ]),\n ),\n ).values(),\n );\n return axes;\n }\n\n /** Get all axes that can be connected to sourceAxes by linkers */\n getReachableByLinkersAxesFromAxesNormalized(\n sourceAxes: AxisSpecNormalized[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n let startKeys: CanonicalizedJson<AxisId[]>[] = [];\n\n if (matchAxisIdFn) {\n const sourceAxisIdsGrouped: AxisId[][] = sourceAxes.map((axis) =>\n getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId),\n );\n for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {\n const matched = this.keyAxesIds.find((keyIds: AxisId[]) =>\n keyIds.every((linkerKeyAxisId) =>\n sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched));\n }\n }\n } else {\n startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n }\n\n const availableKeys = this.searchAvailableAxesKeys(startKeys);\n return this.getAxesListFromKeysList([...availableKeys]);\n }\n\n getReachableByLinkersAxesFromAxes(\n sourceAxes: AxisSpec[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n return this.getReachableByLinkersAxesFromAxesNormalized(\n getNormalizedAxesList(sourceAxes),\n matchAxisIdFn,\n );\n }\n\n static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n }\n\n /** Split array of axes into several arrays by parents: axes of one group are parents for each other.\n There are no order inside every group. */\n static getAxesGroups(axesSpec: AxisSpecNormalized[]): AxisSpecNormalized[][] {\n switch (axesSpec.length) {\n case 0:\n return [];\n case 1:\n return [[axesSpec[0]]];\n default:\n break;\n }\n\n const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));\n const axisParentsIdxs = axesSpec.map(\n (spec) =>\n new Set(\n spec.parentAxesSpec\n .map((spec) => canonicalizeJson(getAxisId(spec)))\n .map((el) => {\n const idx = axisKeys.indexOf(el);\n if (idx === -1) {\n throw new Error(\n `malformed axesSpec: ${JSON.stringify(axesSpec)}, unable to locate parent ${el}`,\n );\n }\n return idx;\n }),\n ),\n );\n\n const allIdxs = [...axesSpec.keys()];\n const groups: number[][] = []; // groups of axis indexes\n\n const usedIdxs = new Set<number>();\n let nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n while (nextFreeEl !== undefined) {\n const currentGroup = [nextFreeEl];\n usedIdxs.add(nextFreeEl);\n\n let nextElsOfCurrentGroup = [nextFreeEl];\n while (nextElsOfCurrentGroup.length) {\n const next = new Set<number>();\n for (const groupIdx of nextElsOfCurrentGroup) {\n const groupElementParents = axisParentsIdxs[groupIdx];\n allIdxs.forEach((idx) => {\n if (idx === groupIdx || usedIdxs.has(idx)) {\n return;\n }\n const parents = axisParentsIdxs[idx];\n if (parents.has(groupIdx) || groupElementParents.has(idx)) {\n currentGroup.push(idx);\n next.add(idx);\n usedIdxs.add(idx);\n }\n });\n }\n nextElsOfCurrentGroup = [...next];\n }\n\n groups.push([...currentGroup]);\n nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n }\n\n return groups.map((group) => group.map((idx) => axesSpec[idx]));\n }\n\n /** Get all axes that are not parents of any other axis */\n static getAxesRoots(axes: AxisSpecNormalized[]): AxisSpecNormalized[] {\n const parentsSet = new Set(\n axes.flatMap((axis) => axis.parentAxesSpec).map((spec) => canonicalizeJson(getAxisId(spec))),\n );\n return axes.filter((axis) => !parentsSet.has(canonicalizeJson(getAxisId(axis))));\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pframe.d.ts","names":[],"sources":["../../../src/drivers/pframe/pframe.ts"],"mappings":";;;;;;;;UAQiB,MAAA;;AAAjB;;;EAKE,WAAA,CAAY,OAAA,EAAS,kBAAA,GAAqB,OAAA,CAAQ,mBAAA;EAAA;EAGlD,aAAA,CAAc,QAAA,EAAU,SAAA,GAAY,OAAA,CAAQ,WAAA;EAApB;EAGxB,WAAA,IAAe,OAAA,CAAQ,gBAAA;EAHa;EAMpC,kBAAA,CACE,OAAA,EAAS,yBAAA,CAA0B,SAAA,GACnC,KAAA,GAAQ,UAAA,GACP,OAAA,CAAQ,0BAAA;EANI;EASf,eAAA,CAAgB,OAAA,EAAS,mBAAA,GAAsB,OAAA,CAAQ,oBAAA;AAAA;;KAI7C,SAAA,QAAiB,GAAA"}
1
+ {"version":3,"file":"pframe.d.ts","names":[],"sources":["../../../src/drivers/pframe/pframe.ts"],"mappings":";;;;;;;;UAQiB,MAAA;;AAAjB;;;EAKE,WAAA,CAAY,OAAA,EAAS,kBAAA,GAAqB,OAAA,CAAQ,mBAAA;EAAA;EAGlD,aAAA,CAAc,QAAA,EAAU,SAAA,GAAY,OAAA,CAAQ,WAAA;EAApB;EAGxB,WAAA,IAAe,OAAA,CAAQ,gBAAA;EAHa;EAMpC,kBAAA,CACE,OAAA,EAAS,yBAAA,CAA0B,SAAA,GACnC,KAAA,GAAQ,UAAA,GACP,OAAA,CAAQ,0BAAA;EANI;EASf,eAAA,CAAgB,OAAA,EAAS,mBAAA,GAAsB,OAAA,CAAQ,oBAAA;AAAA;;KAI7C,SAAA,QAAiB,GAAG"}
@@ -1 +1,6 @@
1
- require("./utils.cjs");
1
+ const require_utils = require("./utils.cjs");
2
+ exports.collectSpecQueryColumns = require_utils.collectSpecQueryColumns;
3
+ exports.isBooleanExpression = require_utils.isBooleanExpression;
4
+ exports.mapSpecQueryColumns = require_utils.mapSpecQueryColumns;
5
+ exports.sortSpecQuery = require_utils.sortSpecQuery;
6
+ exports.traverseQuerySpec = require_utils.traverseQuerySpec;
@@ -1,3 +1,4 @@
1
1
  import { SpecExprAxisRef, SpecExprColumnRef, SpecQuery, SpecQueryBooleanExpression, SpecQueryColumn, SpecQueryExpression, SpecQueryFilter, SpecQueryInlineColumn, SpecQueryJoinEntry, SpecQueryLinkerJoin, SpecQueryLinkerJoinLinker, SpecQueryOuterJoin, SpecQuerySliceAxes, SpecQuerySort, SpecQuerySparseToDenseColumn, SpecQuerySymmetricJoin, SpecQueryTransformColumns } from "./query_spec.js";
2
2
  import { DataExprAxisRef, DataExprColumnRef, DataQuery, DataQueryBooleanExpression, DataQueryColumn, DataQueryExpression, DataQueryFilter, DataQueryInlineColumn, DataQueryJoinEntry, DataQueryLinkerJoin, DataQueryLinkerJoinLinker, DataQueryOuterJoin, DataQuerySliceAxes, DataQuerySort, DataQuerySparseToDenseColumn, DataQuerySymmetricJoin, DataQueryTransformColumns } from "./query_data.js";
3
- import { collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec } from "./utils.js";
3
+ import { collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec } from "./utils.js";
4
+ export { DataExprAxisRef, DataExprColumnRef, DataQuery, DataQueryBooleanExpression, DataQueryColumn, DataQueryExpression, DataQueryFilter, DataQueryInlineColumn, DataQueryJoinEntry, DataQueryLinkerJoin, DataQueryLinkerJoinLinker, DataQueryOuterJoin, DataQuerySliceAxes, DataQuerySort, DataQuerySparseToDenseColumn, DataQuerySymmetricJoin, DataQueryTransformColumns, SpecExprAxisRef, SpecExprColumnRef, SpecQuery, SpecQueryBooleanExpression, SpecQueryColumn, SpecQueryExpression, SpecQueryFilter, SpecQueryInlineColumn, SpecQueryJoinEntry, SpecQueryLinkerJoin, SpecQueryLinkerJoinLinker, SpecQueryOuterJoin, SpecQuerySliceAxes, SpecQuerySort, SpecQuerySparseToDenseColumn, SpecQuerySymmetricJoin, SpecQueryTransformColumns, collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec };
@@ -1 +1,2 @@
1
- import "./utils.js";
1
+ import { collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec } from "./utils.js";
2
+ export { collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec };
@@ -1024,5 +1024,5 @@ interface QueryTransformColumns<Q, E, SO> {
1024
1024
  columns: [TransformColumnEntry<E, SO>, ...TransformColumnEntry<E, SO>[]];
1025
1025
  }
1026
1026
  //#endregion
1027
- export { ColumnTypeSpec, ExprAxisRef, ExprCast, ExprColumnRef, ExprConditional, ExprConstant, ExprFillNull, ExprIsIn, ExprIsNull, ExprLogicalUnary, ExprLogicalVariadic, ExprNumericBinary, ExprNumericComparison, ExprNumericUnary, ExprRanking, ExprStringContains, ExprStringContainsFuzzy, ExprStringEquals, ExprStringRegex, InferBooleanExpressionUnion, QueryColumn, QueryFilter, QueryInlineColumn, QueryJoinEntry, QueryLinkerJoin, QueryOuterJoin, QuerySliceAxes, QuerySort, QuerySparseToDenseColumn, QuerySymmetricJoin, QueryTransformColumns };
1027
+ export { ColumnTypeSpec, ExprAxisRef, ExprCast, ExprColumnRef, ExprConditional, ExprConditionalCase, ExprConstant, ExprFillNull, ExprIsIn, ExprIsNull, ExprLogicalUnary, ExprLogicalVariadic, ExprNumericBinary, ExprNumericComparison, ExprNumericUnary, ExprRanking, ExprStringContains, ExprStringContainsFuzzy, ExprStringEquals, ExprStringRegex, InferBooleanExpressionUnion, NumericBinaryOperand, NumericComparisonOperand, NumericUnaryOperand, QueryAxisSelector, QueryColumn, QueryColumnSelector, QueryFilter, QueryInlineColumn, QueryJoinEntry, QueryLinkerJoin, QueryOuterJoin, QuerySelector, QuerySliceAxes, QuerySort, QuerySparseToDenseColumn, QuerySymmetricJoin, QueryTransformColumns, RankingKind, TransformColumnEntry, TransformColumnsMode };
1028
1028
  //# sourceMappingURL=query_common.d.ts.map