@platforma-sdk/model 1.44.5 → 1.44.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -104,6 +104,8 @@ exports.RT_BINARY_PARTITIONED = pcolumn_data.RT_BINARY_PARTITIONED;
104
104
  exports.RT_BINARY_SUPER_PARTITIONED = pcolumn_data.RT_BINARY_SUPER_PARTITIONED;
105
105
  exports.RT_JSON_PARTITIONED = pcolumn_data.RT_JSON_PARTITIONED;
106
106
  exports.RT_JSON_SUPER_PARTITIONED = pcolumn_data.RT_JSON_SUPER_PARTITIONED;
107
+ exports.RT_PARQUET_PARTITIONED = pcolumn_data.RT_PARQUET_PARTITIONED;
108
+ exports.RT_PARQUET_SUPER_PARTITIONED = pcolumn_data.RT_PARQUET_SUPER_PARTITIONED;
107
109
  exports.RT_RESOURCE_MAP = pcolumn_data.RT_RESOURCE_MAP;
108
110
  exports.RT_RESOURCE_MAP_PARTITIONED = pcolumn_data.RT_RESOURCE_MAP_PARTITIONED;
109
111
  exports.convertOrParsePColumnData = pcolumn_data.convertOrParsePColumnData;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@ export { PFrameImpl } from './pframe.js';
12
12
  export { fromPlOption, fromPlRef } from './ref_util.js';
13
13
  export { RenderCtx, ResultPool } from './render/api.js';
14
14
  export { TreeNodeAccessor, ifDef } from './render/accessor.js';
15
- export { RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, convertOrParsePColumnData, getPartitionKeysList, getUniquePartitionKeys, parsePColumnData, parseResourceMap } from './render/util/pcolumn_data.js';
15
+ export { RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, convertOrParsePColumnData, getPartitionKeysList, getUniquePartitionKeys, parsePColumnData, parseResourceMap } from './render/util/pcolumn_data.js';
16
16
  export { Trace, TraceEntry, deriveLabels } from './render/util/label.js';
17
17
  export { filterDataInfoEntries } from './render/util/axis_filtering.js';
18
18
  export { PColumnCollection } from './render/util/column_collection.js';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.44.5";
3
+ var version = "1.44.13";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.map
@@ -1,4 +1,4 @@
1
- var version = "1.44.5";
1
+ var version = "1.44.13";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.js.map
@@ -8,9 +8,11 @@ const RT_RESOURCE_MAP = PCD_PREFIX + 'ResourceMap';
8
8
  const RT_RESOURCE_MAP_PARTITIONED = PCD_PREFIX + 'Partitioned/ResourceMap';
9
9
  const RT_JSON_PARTITIONED = PCD_PREFIX + 'JsonPartitioned';
10
10
  const RT_BINARY_PARTITIONED = PCD_PREFIX + 'BinaryPartitioned';
11
+ const RT_PARQUET_PARTITIONED = PCD_PREFIX + 'ParquetPartitioned';
11
12
  const PCD_SUP_PREFIX = PCD_PREFIX + 'Partitioned/';
12
13
  const RT_JSON_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'JsonPartitioned';
13
14
  const RT_BINARY_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'BinaryPartitioned';
15
+ const RT_PARQUET_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'ParquetPartitioned';
14
16
  function populateResourceMapData(acc, resourceParser, data, keyPrefix = [], addEntriesWithNoData) {
15
17
  if (acc === undefined)
16
18
  return false;
@@ -121,7 +123,7 @@ function getPartitionKeysList(acc) {
121
123
  return { data, keyLength };
122
124
  }
123
125
  function getUniquePartitionKeysForDataEntries(list) {
124
- if (list.type !== 'JsonPartitioned' && list.type !== 'BinaryPartitioned')
126
+ if (list.type !== 'JsonPartitioned' && list.type !== 'BinaryPartitioned' && list.type !== 'ParquetPartitioned')
125
127
  throw new Error(`Splitting requires Partitioned DataInfoEntries, got ${list.type}`);
126
128
  const { parts, partitionKeyLength } = list;
127
129
  const result = [];
@@ -180,7 +182,9 @@ function parsePColumnData(acc, keyPrefix = []) {
180
182
  const meta = acc.getDataAsJson();
181
183
  // Prevent recursive super-partitioned resources
182
184
  if (keyPrefix.length > 0
183
- && (resourceType === RT_JSON_SUPER_PARTITIONED || resourceType === RT_BINARY_SUPER_PARTITIONED)) {
185
+ && (resourceType === RT_JSON_SUPER_PARTITIONED
186
+ || resourceType === RT_BINARY_SUPER_PARTITIONED
187
+ || resourceType === RT_PARQUET_SUPER_PARTITIONED)) {
184
188
  throw new Error(`Unexpected nested super-partitioned resource: ${resourceType}`);
185
189
  }
186
190
  switch (resourceType) {
@@ -248,6 +252,24 @@ function parsePColumnData(acc, keyPrefix = []) {
248
252
  parts,
249
253
  };
250
254
  }
255
+ case RT_PARQUET_PARTITIONED: {
256
+ if (typeof meta?.partitionKeyLength !== 'number') {
257
+ throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);
258
+ }
259
+ const parts = [];
260
+ for (const keyStr of acc.listInputFields()) {
261
+ const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });
262
+ if (value === undefined)
263
+ return undefined;
264
+ const key = [...keyPrefix, ...JSON.parse(keyStr)];
265
+ parts.push({ key, value });
266
+ }
267
+ return {
268
+ type: 'ParquetPartitioned',
269
+ partitionKeyLength: meta.partitionKeyLength,
270
+ parts,
271
+ };
272
+ }
251
273
  case RT_JSON_SUPER_PARTITIONED: {
252
274
  if (typeof meta?.superPartitionKeyLength !== 'number'
253
275
  || typeof meta?.partitionKeyLength !== 'number') {
@@ -306,6 +328,35 @@ function parsePColumnData(acc, keyPrefix = []) {
306
328
  parts,
307
329
  };
308
330
  }
331
+ case RT_PARQUET_SUPER_PARTITIONED: {
332
+ if (typeof meta?.superPartitionKeyLength !== 'number'
333
+ || typeof meta?.partitionKeyLength !== 'number') {
334
+ throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);
335
+ }
336
+ const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;
337
+ const parts = [];
338
+ // Process all super partitions
339
+ for (const supKeyStr of acc.listInputFields()) {
340
+ const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });
341
+ if (superPartition === undefined)
342
+ return undefined;
343
+ // Validate inner type
344
+ if (superPartition.resourceType.name !== RT_PARQUET_PARTITIONED) {
345
+ throw new Error(`Expected ${RT_PARQUET_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);
346
+ }
347
+ const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr));
348
+ if (innerResult === undefined)
349
+ return undefined;
350
+ if (innerResult.type !== 'ParquetPartitioned')
351
+ throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);
352
+ parts.push(...innerResult.parts);
353
+ }
354
+ return {
355
+ type: 'ParquetPartitioned',
356
+ partitionKeyLength: totalKeyLength,
357
+ parts,
358
+ };
359
+ }
309
360
  default:
310
361
  throw new Error(`Unknown resource type: ${resourceType}`);
311
362
  }
@@ -332,6 +383,8 @@ exports.RT_BINARY_PARTITIONED = RT_BINARY_PARTITIONED;
332
383
  exports.RT_BINARY_SUPER_PARTITIONED = RT_BINARY_SUPER_PARTITIONED;
333
384
  exports.RT_JSON_PARTITIONED = RT_JSON_PARTITIONED;
334
385
  exports.RT_JSON_SUPER_PARTITIONED = RT_JSON_SUPER_PARTITIONED;
386
+ exports.RT_PARQUET_PARTITIONED = RT_PARQUET_PARTITIONED;
387
+ exports.RT_PARQUET_SUPER_PARTITIONED = RT_PARQUET_SUPER_PARTITIONED;
335
388
  exports.RT_RESOURCE_MAP = RT_RESOURCE_MAP;
336
389
  exports.RT_RESOURCE_MAP_PARTITIONED = RT_RESOURCE_MAP_PARTITIONED;
337
390
  exports.convertOrParsePColumnData = convertOrParsePColumnData;
@@ -1 +1 @@
1
- {"version":3,"file":"pcolumn_data.cjs","sources":["../../../src/render/util/pcolumn_data.ts"],"sourcesContent":["import type {\n DataInfo } from '@milaboratories/pl-model-common';\nimport {\n dataInfoToEntries,\n isDataInfo,\n isDataInfoEntries,\n type BinaryChunk,\n type BinaryPartitionedDataInfoEntries,\n type DataInfoEntries,\n type JsonPartitionedDataInfoEntries,\n type PColumnDataEntry,\n type PColumnKey,\n} from '@milaboratories/pl-model-common';\nimport { TreeNodeAccessor } from '../accessor';\n\nconst PCD_PREFIX = 'PColumnData/';\n\nexport const RT_RESOURCE_MAP = PCD_PREFIX + 'ResourceMap';\nexport const RT_RESOURCE_MAP_PARTITIONED = PCD_PREFIX + 'Partitioned/ResourceMap';\n\nexport const RT_JSON_PARTITIONED = PCD_PREFIX + 'JsonPartitioned';\nexport const RT_BINARY_PARTITIONED = PCD_PREFIX + 'BinaryPartitioned';\n\nconst PCD_SUP_PREFIX = PCD_PREFIX + 'Partitioned/';\nexport const RT_JSON_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'JsonPartitioned';\nexport const RT_BINARY_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'BinaryPartitioned';\n\nexport type PColumnResourceMapEntry<T> = {\n key: PColumnKey;\n value: T;\n};\n\nexport type PColumnResourceMapData<T> = {\n isComplete: boolean;\n data: PColumnResourceMapEntry<T>[];\n};\n\nfunction populateResourceMapData<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n data: PColumnResourceMapEntry<T | undefined>[],\n keyPrefix: PColumnKey = [],\n addEntriesWithNoData: boolean,\n): boolean {\n if (acc === undefined) return false;\n switch (acc.resourceType.name) {\n case RT_RESOURCE_MAP: {\n let isComplete = acc.getInputsLocked();\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n const converted = value === undefined ? undefined : resourceParser(value);\n if (converted === undefined) isComplete = false;\n if (converted !== undefined || addEntriesWithNoData) data.push({ key, value: converted });\n }\n return isComplete;\n }\n case RT_RESOURCE_MAP_PARTITIONED: {\n let isComplete = acc.getInputsLocked();\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) isComplete = false;\n else {\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n const populateResult = populateResourceMapData(\n value,\n resourceParser,\n data,\n key,\n addEntriesWithNoData,\n );\n isComplete = isComplete && populateResult;\n }\n }\n return isComplete;\n }\n default:\n throw new Error(`Unknown resource type: ${acc.resourceType.name}`);\n }\n}\n\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: false\n): PColumnResourceMapData<NonNullable<T>>;\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: true\n): PColumnResourceMapData<T | undefined>;\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: boolean = false,\n): PColumnResourceMapData<T | undefined> {\n const data: PColumnResourceMapEntry<T | undefined>[] = [];\n const isComplete = populateResourceMapData(acc, resourceParser, data, [], addEntriesWithNoData);\n return { isComplete, data };\n}\n\nexport type PColumnKeyList = {\n /** array of keys */\n data: PColumnKey[];\n /** length of partition key */\n keyLength: number;\n};\n\nconst removeIndexSuffix = (keyStr: string): { baseKey: string; type: 'index' | 'values' } => {\n if (keyStr.endsWith('.index')) {\n return { baseKey: keyStr.substring(0, keyStr.length - 6), type: 'index' };\n } else if (keyStr.endsWith('.values')) {\n return { baseKey: keyStr.substring(0, keyStr.length - 7), type: 'values' };\n } else {\n throw new Error(`key must ends on .index/.values for binary p-column, got: ${keyStr}`);\n }\n};\n\n// @TODO define a class with various resource map operations\n/** Returns a list of all partition keys appeared in the p-column */\nexport function getPartitionKeysList(\n acc: TreeNodeAccessor | undefined,\n): PColumnKeyList | undefined {\n if (!acc) return undefined;\n\n const rt = acc.resourceType.name;\n const meta = acc.getDataAsJson<Record<string, number>>();\n const data: PColumnKey[] = [];\n\n let keyLength = 0;\n // @TODO validate meta shape\n switch (rt) {\n case RT_RESOURCE_MAP:\n keyLength = meta['keyLength'];\n break;\n\n case RT_RESOURCE_MAP_PARTITIONED:\n keyLength = meta['partitionKeyLength'] + meta['keyLength'];\n break;\n\n case RT_JSON_PARTITIONED:\n case RT_BINARY_PARTITIONED:\n keyLength = meta['partitionKeyLength'];\n break;\n\n case RT_BINARY_SUPER_PARTITIONED:\n case RT_JSON_SUPER_PARTITIONED:\n keyLength = meta['superPartitionKeyLength'] + meta['partitionKeyLength'];\n break;\n }\n\n switch (rt) {\n case RT_RESOURCE_MAP:\n case RT_JSON_PARTITIONED:\n case RT_BINARY_PARTITIONED:\n for (let keyStr of acc.listInputFields()) {\n if (rt === RT_BINARY_PARTITIONED) {\n keyStr = removeIndexSuffix(keyStr).baseKey;\n }\n const key = [...JSON.parse(keyStr)] as PColumnKey;\n data.push(key);\n }\n\n break;\n\n case RT_RESOURCE_MAP_PARTITIONED:\n case RT_BINARY_SUPER_PARTITIONED:\n case RT_JSON_SUPER_PARTITIONED:\n for (const supKeyStr of acc.listInputFields()) {\n const keyPrefix = [...JSON.parse(supKeyStr)] as PColumnKey;\n\n const value = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (value !== undefined) {\n for (let keyStr of value.listInputFields()) {\n if (rt === RT_BINARY_SUPER_PARTITIONED) {\n keyStr = removeIndexSuffix(keyStr).baseKey;\n }\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n data.push(key);\n }\n }\n }\n break;\n }\n\n return { data, keyLength };\n}\n\nfunction getUniquePartitionKeysForDataEntries(list: DataInfoEntries<unknown>): (string | number)[][] {\n if (list.type !== 'JsonPartitioned' && list.type !== 'BinaryPartitioned')\n throw new Error(`Splitting requires Partitioned DataInfoEntries, got ${list.type}`);\n\n const { parts, partitionKeyLength } = list;\n\n const result: Set<string | number>[] = [];\n for (let i = 0; i < partitionKeyLength; ++i) {\n result.push(new Set());\n }\n\n for (const part of parts) {\n const key = part.key;\n if (key.length !== partitionKeyLength) {\n throw new Error(\n `Key length (${key.length}) does not match partition length (${partitionKeyLength}) for key: ${JSON.stringify(\n key,\n )}`,\n );\n }\n for (let i = 0; i < partitionKeyLength; ++i) {\n result[i].add(key[i]);\n }\n }\n\n return result.map((s) => Array.from(s.values()));\n}\n\n/** Returns an array of unique partition keys for each column: the i-th element in the resulting 2d array contains all unique values of i-th partition axis. */\nexport function getUniquePartitionKeys(acc: DataInfoEntries<unknown>): (string | number)[][];\nexport function getUniquePartitionKeys(acc: DataInfoEntries<unknown> | TreeNodeAccessor | undefined): (string | number)[][] | undefined;\nexport function getUniquePartitionKeys(\n acc: TreeNodeAccessor | DataInfoEntries<unknown> | undefined,\n): (string | number)[][] | undefined {\n if (acc === undefined) return undefined;\n\n if (isDataInfoEntries(acc))\n return getUniquePartitionKeysForDataEntries(acc);\n\n const list = getPartitionKeysList(acc);\n if (!list) return undefined;\n\n const { data, keyLength } = list;\n\n const result: Set<string | number>[] = [];\n\n for (let i = 0; i < keyLength; ++i) {\n result.push(new Set());\n }\n\n for (const l of data) {\n if (l.length !== keyLength) {\n throw new Error('key length does not match partition length');\n }\n for (let i = 0; i < keyLength; ++i) {\n result[i].add(l[i]);\n }\n }\n\n return result.map((s) => Array.from(s.values()));\n}\n\n/**\n * Parses the PColumn data from a TreeNodeAccessor into a DataInfoEntries structure.\n * Returns undefined if any required data is missing.\n * Throws error on validation failures.\n *\n * @param acc - The TreeNodeAccessor containing PColumn data\n * @param keyPrefix - Optional key prefix for recursive calls\n * @returns DataInfoEntries representation of the PColumn data, or undefined if incomplete\n */\nexport function parsePColumnData(\n acc: TreeNodeAccessor | undefined,\n keyPrefix: PColumnKey = [],\n): JsonPartitionedDataInfoEntries<TreeNodeAccessor> | BinaryPartitionedDataInfoEntries<TreeNodeAccessor> | undefined {\n if (acc === undefined) return undefined;\n\n if (!acc.getIsReadyOrError()) return undefined;\n\n const resourceType = acc.resourceType.name;\n const meta = acc.getDataAsJson<Record<string, number>>();\n\n // Prevent recursive super-partitioned resources\n if (keyPrefix.length > 0\n && (resourceType === RT_JSON_SUPER_PARTITIONED || resourceType === RT_BINARY_SUPER_PARTITIONED)) {\n throw new Error(`Unexpected nested super-partitioned resource: ${resourceType}`);\n }\n\n switch (resourceType) {\n case RT_RESOURCE_MAP:\n case RT_RESOURCE_MAP_PARTITIONED:\n throw new Error(`Only data columns are supported, got: ${resourceType}`);\n\n case RT_JSON_PARTITIONED: {\n if (typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) return undefined;\n\n const key = [...keyPrefix, ...JSON.parse(keyStr)];\n parts.push({ key, value });\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n }\n\n case RT_BINARY_PARTITIONED: {\n if (typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const parts: PColumnDataEntry<BinaryChunk<TreeNodeAccessor>>[] = [];\n const baseKeys = new Map<string, { index?: TreeNodeAccessor; values?: TreeNodeAccessor }>();\n\n // Group fields by base key (without .index/.values suffix)\n for (const keyStr of acc.listInputFields()) {\n const suffix = removeIndexSuffix(keyStr);\n\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) return undefined;\n\n let entry = baseKeys.get(suffix.baseKey);\n if (!entry) {\n entry = {};\n baseKeys.set(suffix.baseKey, entry);\n }\n\n if (suffix.type === 'index') {\n entry.index = value;\n } else {\n entry.values = value;\n }\n }\n\n // Process complete binary chunks only\n for (const [baseKeyStr, entry] of baseKeys.entries()) {\n if (!entry.index || !entry.values) return undefined;\n\n const key = [...keyPrefix, ...JSON.parse(baseKeyStr)];\n parts.push({\n key,\n value: {\n index: entry.index,\n values: entry.values,\n },\n });\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n }\n\n case RT_JSON_SUPER_PARTITIONED: {\n if (typeof meta?.superPartitionKeyLength !== 'number'\n || typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n\n // Process all super partitions\n for (const supKeyStr of acc.listInputFields()) {\n const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (superPartition === undefined) return undefined;\n\n // Validate inner type\n if (superPartition.resourceType.name !== RT_JSON_PARTITIONED) {\n throw new Error(`Expected ${RT_JSON_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);\n }\n\n const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);\n\n if (innerResult === undefined) return undefined;\n\n if (innerResult.type !== 'JsonPartitioned')\n throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);\n\n parts.push(...innerResult.parts);\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: totalKeyLength,\n parts,\n };\n }\n\n case RT_BINARY_SUPER_PARTITIONED: {\n if (typeof meta?.superPartitionKeyLength !== 'number'\n || typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;\n const parts: PColumnDataEntry<BinaryChunk<TreeNodeAccessor>>[] = [];\n\n // Process all super partitions\n for (const supKeyStr of acc.listInputFields()) {\n const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (superPartition === undefined) return undefined;\n\n // Validate inner type\n if (superPartition.resourceType.name !== RT_BINARY_PARTITIONED) {\n throw new Error(`Expected ${RT_BINARY_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);\n }\n\n const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);\n\n if (innerResult === undefined) return undefined;\n\n if (innerResult.type !== 'BinaryPartitioned')\n throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);\n\n parts.push(...innerResult.parts);\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: totalKeyLength,\n parts,\n };\n }\n\n default:\n throw new Error(`Unknown resource type: ${resourceType}`);\n }\n}\n\n/**\n * Converts or parses the input into DataInfoEntries format.\n\n * @param acc - The input data, which can be TreeNodeAccessor, DataInfoEntries, DataInfo, or undefined.\n * @returns The data in DataInfoEntries format, or undefined if the input was undefined or data is not ready.\n */\nexport function convertOrParsePColumnData(acc: TreeNodeAccessor | DataInfoEntries<TreeNodeAccessor> | DataInfo<TreeNodeAccessor> | undefined):\nDataInfoEntries<TreeNodeAccessor> | undefined {\n if (acc === undefined) return undefined;\n\n if (isDataInfoEntries(acc)) return acc;\n if (isDataInfo(acc)) return dataInfoToEntries(acc);\n if (acc instanceof TreeNodeAccessor) return parsePColumnData(acc);\n\n throw new Error(`Unexpected input type: ${typeof acc}`);\n}\n"],"names":["isDataInfoEntries","isDataInfo","dataInfoToEntries","TreeNodeAccessor"],"mappings":"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"}
1
+ {"version":3,"file":"pcolumn_data.cjs","sources":["../../../src/render/util/pcolumn_data.ts"],"sourcesContent":["import type {\n DataInfo,\n PartitionedDataInfoEntries,\n} from '@milaboratories/pl-model-common';\nimport {\n dataInfoToEntries,\n isDataInfo,\n isDataInfoEntries,\n type BinaryChunk,\n type DataInfoEntries,\n type PColumnDataEntry,\n type PColumnKey,\n} from '@milaboratories/pl-model-common';\nimport { TreeNodeAccessor } from '../accessor';\n\nconst PCD_PREFIX = 'PColumnData/';\n\nexport const RT_RESOURCE_MAP = PCD_PREFIX + 'ResourceMap';\nexport const RT_RESOURCE_MAP_PARTITIONED = PCD_PREFIX + 'Partitioned/ResourceMap';\n\nexport const RT_JSON_PARTITIONED = PCD_PREFIX + 'JsonPartitioned';\nexport const RT_BINARY_PARTITIONED = PCD_PREFIX + 'BinaryPartitioned';\nexport const RT_PARQUET_PARTITIONED = PCD_PREFIX + 'ParquetPartitioned';\n\nconst PCD_SUP_PREFIX = PCD_PREFIX + 'Partitioned/';\nexport const RT_JSON_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'JsonPartitioned';\nexport const RT_BINARY_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'BinaryPartitioned';\nexport const RT_PARQUET_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'ParquetPartitioned';\n\nexport type PColumnResourceMapEntry<T> = {\n key: PColumnKey;\n value: T;\n};\n\nexport type PColumnResourceMapData<T> = {\n isComplete: boolean;\n data: PColumnResourceMapEntry<T>[];\n};\n\nfunction populateResourceMapData<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n data: PColumnResourceMapEntry<T | undefined>[],\n keyPrefix: PColumnKey = [],\n addEntriesWithNoData: boolean,\n): boolean {\n if (acc === undefined) return false;\n switch (acc.resourceType.name) {\n case RT_RESOURCE_MAP: {\n let isComplete = acc.getInputsLocked();\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n const converted = value === undefined ? undefined : resourceParser(value);\n if (converted === undefined) isComplete = false;\n if (converted !== undefined || addEntriesWithNoData) data.push({ key, value: converted });\n }\n return isComplete;\n }\n case RT_RESOURCE_MAP_PARTITIONED: {\n let isComplete = acc.getInputsLocked();\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) isComplete = false;\n else {\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n const populateResult = populateResourceMapData(\n value,\n resourceParser,\n data,\n key,\n addEntriesWithNoData,\n );\n isComplete = isComplete && populateResult;\n }\n }\n return isComplete;\n }\n default:\n throw new Error(`Unknown resource type: ${acc.resourceType.name}`);\n }\n}\n\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: false\n): PColumnResourceMapData<NonNullable<T>>;\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: true\n): PColumnResourceMapData<T | undefined>;\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: boolean = false,\n): PColumnResourceMapData<T | undefined> {\n const data: PColumnResourceMapEntry<T | undefined>[] = [];\n const isComplete = populateResourceMapData(acc, resourceParser, data, [], addEntriesWithNoData);\n return { isComplete, data };\n}\n\nexport type PColumnKeyList = {\n /** array of keys */\n data: PColumnKey[];\n /** length of partition key */\n keyLength: number;\n};\n\nconst removeIndexSuffix = (keyStr: string): { baseKey: string; type: 'index' | 'values' } => {\n if (keyStr.endsWith('.index')) {\n return { baseKey: keyStr.substring(0, keyStr.length - 6), type: 'index' };\n } else if (keyStr.endsWith('.values')) {\n return { baseKey: keyStr.substring(0, keyStr.length - 7), type: 'values' };\n } else {\n throw new Error(`key must ends on .index/.values for binary p-column, got: ${keyStr}`);\n }\n};\n\n// @TODO define a class with various resource map operations\n/** Returns a list of all partition keys appeared in the p-column */\nexport function getPartitionKeysList(\n acc: TreeNodeAccessor | undefined,\n): PColumnKeyList | undefined {\n if (!acc) return undefined;\n\n const rt = acc.resourceType.name;\n const meta = acc.getDataAsJson<Record<string, number>>();\n const data: PColumnKey[] = [];\n\n let keyLength = 0;\n // @TODO validate meta shape\n switch (rt) {\n case RT_RESOURCE_MAP:\n keyLength = meta['keyLength'];\n break;\n\n case RT_RESOURCE_MAP_PARTITIONED:\n keyLength = meta['partitionKeyLength'] + meta['keyLength'];\n break;\n\n case RT_JSON_PARTITIONED:\n case RT_BINARY_PARTITIONED:\n keyLength = meta['partitionKeyLength'];\n break;\n\n case RT_BINARY_SUPER_PARTITIONED:\n case RT_JSON_SUPER_PARTITIONED:\n keyLength = meta['superPartitionKeyLength'] + meta['partitionKeyLength'];\n break;\n }\n\n switch (rt) {\n case RT_RESOURCE_MAP:\n case RT_JSON_PARTITIONED:\n case RT_BINARY_PARTITIONED:\n for (let keyStr of acc.listInputFields()) {\n if (rt === RT_BINARY_PARTITIONED) {\n keyStr = removeIndexSuffix(keyStr).baseKey;\n }\n const key = [...JSON.parse(keyStr)] as PColumnKey;\n data.push(key);\n }\n\n break;\n\n case RT_RESOURCE_MAP_PARTITIONED:\n case RT_BINARY_SUPER_PARTITIONED:\n case RT_JSON_SUPER_PARTITIONED:\n for (const supKeyStr of acc.listInputFields()) {\n const keyPrefix = [...JSON.parse(supKeyStr)] as PColumnKey;\n\n const value = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (value !== undefined) {\n for (let keyStr of value.listInputFields()) {\n if (rt === RT_BINARY_SUPER_PARTITIONED) {\n keyStr = removeIndexSuffix(keyStr).baseKey;\n }\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n data.push(key);\n }\n }\n }\n break;\n }\n\n return { data, keyLength };\n}\n\nfunction getUniquePartitionKeysForDataEntries(list: DataInfoEntries<unknown>): (string | number)[][] {\n if (list.type !== 'JsonPartitioned' && list.type !== 'BinaryPartitioned' && list.type !== 'ParquetPartitioned')\n throw new Error(`Splitting requires Partitioned DataInfoEntries, got ${list.type}`);\n\n const { parts, partitionKeyLength } = list;\n\n const result: Set<string | number>[] = [];\n for (let i = 0; i < partitionKeyLength; ++i) {\n result.push(new Set());\n }\n\n for (const part of parts) {\n const key = part.key;\n if (key.length !== partitionKeyLength) {\n throw new Error(\n `Key length (${key.length}) does not match partition length (${partitionKeyLength}) for key: ${JSON.stringify(\n key,\n )}`,\n );\n }\n for (let i = 0; i < partitionKeyLength; ++i) {\n result[i].add(key[i]);\n }\n }\n\n return result.map((s) => Array.from(s.values()));\n}\n\n/** Returns an array of unique partition keys for each column: the i-th element in the resulting 2d array contains all unique values of i-th partition axis. */\nexport function getUniquePartitionKeys(acc: DataInfoEntries<unknown>): (string | number)[][];\nexport function getUniquePartitionKeys(acc: DataInfoEntries<unknown> | TreeNodeAccessor | undefined): (string | number)[][] | undefined;\nexport function getUniquePartitionKeys(\n acc: TreeNodeAccessor | DataInfoEntries<unknown> | undefined,\n): (string | number)[][] | undefined {\n if (acc === undefined) return undefined;\n\n if (isDataInfoEntries(acc))\n return getUniquePartitionKeysForDataEntries(acc);\n\n const list = getPartitionKeysList(acc);\n if (!list) return undefined;\n\n const { data, keyLength } = list;\n\n const result: Set<string | number>[] = [];\n\n for (let i = 0; i < keyLength; ++i) {\n result.push(new Set());\n }\n\n for (const l of data) {\n if (l.length !== keyLength) {\n throw new Error('key length does not match partition length');\n }\n for (let i = 0; i < keyLength; ++i) {\n result[i].add(l[i]);\n }\n }\n\n return result.map((s) => Array.from(s.values()));\n}\n\n/**\n * Parses the PColumn data from a TreeNodeAccessor into a DataInfoEntries structure.\n * Returns undefined if any required data is missing.\n * Throws error on validation failures.\n *\n * @param acc - The TreeNodeAccessor containing PColumn data\n * @param keyPrefix - Optional key prefix for recursive calls\n * @returns DataInfoEntries representation of the PColumn data, or undefined if incomplete\n */\nexport function parsePColumnData(\n acc: TreeNodeAccessor | undefined,\n keyPrefix: PColumnKey = [],\n): PartitionedDataInfoEntries<TreeNodeAccessor> | undefined {\n if (acc === undefined) return undefined;\n\n if (!acc.getIsReadyOrError()) return undefined;\n\n const resourceType = acc.resourceType.name;\n const meta = acc.getDataAsJson<Record<string, number>>();\n\n // Prevent recursive super-partitioned resources\n if (keyPrefix.length > 0\n && (resourceType === RT_JSON_SUPER_PARTITIONED\n || resourceType === RT_BINARY_SUPER_PARTITIONED\n || resourceType === RT_PARQUET_SUPER_PARTITIONED)) {\n throw new Error(`Unexpected nested super-partitioned resource: ${resourceType}`);\n }\n\n switch (resourceType) {\n case RT_RESOURCE_MAP:\n case RT_RESOURCE_MAP_PARTITIONED:\n throw new Error(`Only data columns are supported, got: ${resourceType}`);\n\n case RT_JSON_PARTITIONED: {\n if (typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) return undefined;\n\n const key = [...keyPrefix, ...JSON.parse(keyStr)];\n parts.push({ key, value });\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n }\n\n case RT_BINARY_PARTITIONED: {\n if (typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const parts: PColumnDataEntry<BinaryChunk<TreeNodeAccessor>>[] = [];\n const baseKeys = new Map<string, { index?: TreeNodeAccessor; values?: TreeNodeAccessor }>();\n\n // Group fields by base key (without .index/.values suffix)\n for (const keyStr of acc.listInputFields()) {\n const suffix = removeIndexSuffix(keyStr);\n\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) return undefined;\n\n let entry = baseKeys.get(suffix.baseKey);\n if (!entry) {\n entry = {};\n baseKeys.set(suffix.baseKey, entry);\n }\n\n if (suffix.type === 'index') {\n entry.index = value;\n } else {\n entry.values = value;\n }\n }\n\n // Process complete binary chunks only\n for (const [baseKeyStr, entry] of baseKeys.entries()) {\n if (!entry.index || !entry.values) return undefined;\n\n const key = [...keyPrefix, ...JSON.parse(baseKeyStr)];\n parts.push({\n key,\n value: {\n index: entry.index,\n values: entry.values,\n },\n });\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n }\n\n case RT_PARQUET_PARTITIONED: {\n if (typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) return undefined;\n\n const key = [...keyPrefix, ...JSON.parse(keyStr)];\n parts.push({ key, value });\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n }\n\n case RT_JSON_SUPER_PARTITIONED: {\n if (typeof meta?.superPartitionKeyLength !== 'number'\n || typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n\n // Process all super partitions\n for (const supKeyStr of acc.listInputFields()) {\n const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (superPartition === undefined) return undefined;\n\n // Validate inner type\n if (superPartition.resourceType.name !== RT_JSON_PARTITIONED) {\n throw new Error(`Expected ${RT_JSON_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);\n }\n\n const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);\n\n if (innerResult === undefined) return undefined;\n\n if (innerResult.type !== 'JsonPartitioned')\n throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);\n\n parts.push(...innerResult.parts);\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: totalKeyLength,\n parts,\n };\n }\n\n case RT_BINARY_SUPER_PARTITIONED: {\n if (typeof meta?.superPartitionKeyLength !== 'number'\n || typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;\n const parts: PColumnDataEntry<BinaryChunk<TreeNodeAccessor>>[] = [];\n\n // Process all super partitions\n for (const supKeyStr of acc.listInputFields()) {\n const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (superPartition === undefined) return undefined;\n\n // Validate inner type\n if (superPartition.resourceType.name !== RT_BINARY_PARTITIONED) {\n throw new Error(`Expected ${RT_BINARY_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);\n }\n\n const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);\n\n if (innerResult === undefined) return undefined;\n\n if (innerResult.type !== 'BinaryPartitioned')\n throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);\n\n parts.push(...innerResult.parts);\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: totalKeyLength,\n parts,\n };\n }\n\n case RT_PARQUET_SUPER_PARTITIONED: {\n if (typeof meta?.superPartitionKeyLength !== 'number'\n || typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n\n // Process all super partitions\n for (const supKeyStr of acc.listInputFields()) {\n const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (superPartition === undefined) return undefined;\n\n // Validate inner type\n if (superPartition.resourceType.name !== RT_PARQUET_PARTITIONED) {\n throw new Error(`Expected ${RT_PARQUET_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);\n }\n\n const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);\n\n if (innerResult === undefined) return undefined;\n\n if (innerResult.type !== 'ParquetPartitioned')\n throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);\n\n parts.push(...innerResult.parts);\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: totalKeyLength,\n parts,\n };\n }\n\n default:\n throw new Error(`Unknown resource type: ${resourceType}`);\n }\n}\n\n/**\n * Converts or parses the input into DataInfoEntries format.\n\n * @param acc - The input data, which can be TreeNodeAccessor, DataInfoEntries, DataInfo, or undefined.\n * @returns The data in DataInfoEntries format, or undefined if the input was undefined or data is not ready.\n */\nexport function convertOrParsePColumnData(acc: TreeNodeAccessor | DataInfoEntries<TreeNodeAccessor> | DataInfo<TreeNodeAccessor> | undefined):\nDataInfoEntries<TreeNodeAccessor> | undefined {\n if (acc === undefined) return undefined;\n\n if (isDataInfoEntries(acc)) return acc;\n if (isDataInfo(acc)) return dataInfoToEntries(acc);\n if (acc instanceof TreeNodeAccessor) return parsePColumnData(acc);\n\n throw new Error(`Unexpected input type: ${typeof acc}`);\n}\n"],"names":["isDataInfoEntries","isDataInfo","dataInfoToEntries","TreeNodeAccessor"],"mappings":"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"}
@@ -1,12 +1,14 @@
1
- import type { DataInfo } from '@milaboratories/pl-model-common';
2
- import { type BinaryPartitionedDataInfoEntries, type DataInfoEntries, type JsonPartitionedDataInfoEntries, type PColumnKey } from '@milaboratories/pl-model-common';
1
+ import type { DataInfo, PartitionedDataInfoEntries } from '@milaboratories/pl-model-common';
2
+ import { type DataInfoEntries, type PColumnKey } from '@milaboratories/pl-model-common';
3
3
  import { TreeNodeAccessor } from '../accessor';
4
4
  export declare const RT_RESOURCE_MAP: string;
5
5
  export declare const RT_RESOURCE_MAP_PARTITIONED: string;
6
6
  export declare const RT_JSON_PARTITIONED: string;
7
7
  export declare const RT_BINARY_PARTITIONED: string;
8
+ export declare const RT_PARQUET_PARTITIONED: string;
8
9
  export declare const RT_JSON_SUPER_PARTITIONED: string;
9
10
  export declare const RT_BINARY_SUPER_PARTITIONED: string;
11
+ export declare const RT_PARQUET_SUPER_PARTITIONED: string;
10
12
  export type PColumnResourceMapEntry<T> = {
11
13
  key: PColumnKey;
12
14
  value: T;
@@ -37,7 +39,7 @@ export declare function getUniquePartitionKeys(acc: DataInfoEntries<unknown> | T
37
39
  * @param keyPrefix - Optional key prefix for recursive calls
38
40
  * @returns DataInfoEntries representation of the PColumn data, or undefined if incomplete
39
41
  */
40
- export declare function parsePColumnData(acc: TreeNodeAccessor | undefined, keyPrefix?: PColumnKey): JsonPartitionedDataInfoEntries<TreeNodeAccessor> | BinaryPartitionedDataInfoEntries<TreeNodeAccessor> | undefined;
42
+ export declare function parsePColumnData(acc: TreeNodeAccessor | undefined, keyPrefix?: PColumnKey): PartitionedDataInfoEntries<TreeNodeAccessor> | undefined;
41
43
  /**
42
44
  * Converts or parses the input into DataInfoEntries format.
43
45
 
@@ -1 +1 @@
1
- {"version":3,"file":"pcolumn_data.d.ts","sourceRoot":"","sources":["../../../src/render/util/pcolumn_data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AACpD,OAAO,EAKL,KAAK,gCAAgC,EACrC,KAAK,eAAe,EACpB,KAAK,8BAA8B,EAEnC,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/C,eAAO,MAAM,eAAe,QAA6B,CAAC;AAC1D,eAAO,MAAM,2BAA2B,QAAyC,CAAC;AAElF,eAAO,MAAM,mBAAmB,QAAiC,CAAC;AAClE,eAAO,MAAM,qBAAqB,QAAmC,CAAC;AAGtE,eAAO,MAAM,yBAAyB,QAAqC,CAAC;AAC5E,eAAO,MAAM,2BAA2B,QAAuC,CAAC;AAEhF,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI;IACvC,GAAG,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;CACpC,CAAC;AA8CF,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,cAAc,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,CAAC,GAAG,SAAS,EACxD,oBAAoB,EAAE,KAAK,GAC1B,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,cAAc,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,CAAC,GAAG,SAAS,EACxD,oBAAoB,EAAE,IAAI,GACzB,sBAAsB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAWzC,MAAM,MAAM,cAAc,GAAG;IAC3B,oBAAoB;IACpB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAaF,oEAAoE;AACpE,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,gBAAgB,GAAG,SAAS,GAChC,cAAc,GAAG,SAAS,CAgE5B;AA8BD,+JAA+J;AAC/J,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;AAC7F,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,gBAAgB,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;AAgCxI;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,SAAS,GAAE,UAAe,GACzB,8BAA8B,CAAC,gBAAgB,CAAC,GAAG,gCAAgC,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAoKnH;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,SAAS,GAC5I,eAAe,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAQ5C"}
1
+ {"version":3,"file":"pcolumn_data.d.ts","sourceRoot":"","sources":["../../../src/render/util/pcolumn_data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,0BAA0B,EAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAKL,KAAK,eAAe,EAEpB,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/C,eAAO,MAAM,eAAe,QAA6B,CAAC;AAC1D,eAAO,MAAM,2BAA2B,QAAyC,CAAC;AAElF,eAAO,MAAM,mBAAmB,QAAiC,CAAC;AAClE,eAAO,MAAM,qBAAqB,QAAmC,CAAC;AACtE,eAAO,MAAM,sBAAsB,QAAoC,CAAC;AAGxE,eAAO,MAAM,yBAAyB,QAAqC,CAAC;AAC5E,eAAO,MAAM,2BAA2B,QAAuC,CAAC;AAChF,eAAO,MAAM,4BAA4B,QAAwC,CAAC;AAElF,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI;IACvC,GAAG,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;CACpC,CAAC;AA8CF,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,cAAc,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,CAAC,GAAG,SAAS,EACxD,oBAAoB,EAAE,KAAK,GAC1B,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,cAAc,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,CAAC,GAAG,SAAS,EACxD,oBAAoB,EAAE,IAAI,GACzB,sBAAsB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAWzC,MAAM,MAAM,cAAc,GAAG;IAC3B,oBAAoB;IACpB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAaF,oEAAoE;AACpE,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,gBAAgB,GAAG,SAAS,GAChC,cAAc,GAAG,SAAS,CAgE5B;AA8BD,+JAA+J;AAC/J,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;AAC7F,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,gBAAgB,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;AAgCxI;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,SAAS,GAAE,UAAe,GACzB,0BAA0B,CAAC,gBAAgB,CAAC,GAAG,SAAS,CA+N1D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,SAAS,GAC5I,eAAe,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAQ5C"}
@@ -6,9 +6,11 @@ const RT_RESOURCE_MAP = PCD_PREFIX + 'ResourceMap';
6
6
  const RT_RESOURCE_MAP_PARTITIONED = PCD_PREFIX + 'Partitioned/ResourceMap';
7
7
  const RT_JSON_PARTITIONED = PCD_PREFIX + 'JsonPartitioned';
8
8
  const RT_BINARY_PARTITIONED = PCD_PREFIX + 'BinaryPartitioned';
9
+ const RT_PARQUET_PARTITIONED = PCD_PREFIX + 'ParquetPartitioned';
9
10
  const PCD_SUP_PREFIX = PCD_PREFIX + 'Partitioned/';
10
11
  const RT_JSON_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'JsonPartitioned';
11
12
  const RT_BINARY_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'BinaryPartitioned';
13
+ const RT_PARQUET_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'ParquetPartitioned';
12
14
  function populateResourceMapData(acc, resourceParser, data, keyPrefix = [], addEntriesWithNoData) {
13
15
  if (acc === undefined)
14
16
  return false;
@@ -119,7 +121,7 @@ function getPartitionKeysList(acc) {
119
121
  return { data, keyLength };
120
122
  }
121
123
  function getUniquePartitionKeysForDataEntries(list) {
122
- if (list.type !== 'JsonPartitioned' && list.type !== 'BinaryPartitioned')
124
+ if (list.type !== 'JsonPartitioned' && list.type !== 'BinaryPartitioned' && list.type !== 'ParquetPartitioned')
123
125
  throw new Error(`Splitting requires Partitioned DataInfoEntries, got ${list.type}`);
124
126
  const { parts, partitionKeyLength } = list;
125
127
  const result = [];
@@ -178,7 +180,9 @@ function parsePColumnData(acc, keyPrefix = []) {
178
180
  const meta = acc.getDataAsJson();
179
181
  // Prevent recursive super-partitioned resources
180
182
  if (keyPrefix.length > 0
181
- && (resourceType === RT_JSON_SUPER_PARTITIONED || resourceType === RT_BINARY_SUPER_PARTITIONED)) {
183
+ && (resourceType === RT_JSON_SUPER_PARTITIONED
184
+ || resourceType === RT_BINARY_SUPER_PARTITIONED
185
+ || resourceType === RT_PARQUET_SUPER_PARTITIONED)) {
182
186
  throw new Error(`Unexpected nested super-partitioned resource: ${resourceType}`);
183
187
  }
184
188
  switch (resourceType) {
@@ -246,6 +250,24 @@ function parsePColumnData(acc, keyPrefix = []) {
246
250
  parts,
247
251
  };
248
252
  }
253
+ case RT_PARQUET_PARTITIONED: {
254
+ if (typeof meta?.partitionKeyLength !== 'number') {
255
+ throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);
256
+ }
257
+ const parts = [];
258
+ for (const keyStr of acc.listInputFields()) {
259
+ const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });
260
+ if (value === undefined)
261
+ return undefined;
262
+ const key = [...keyPrefix, ...JSON.parse(keyStr)];
263
+ parts.push({ key, value });
264
+ }
265
+ return {
266
+ type: 'ParquetPartitioned',
267
+ partitionKeyLength: meta.partitionKeyLength,
268
+ parts,
269
+ };
270
+ }
249
271
  case RT_JSON_SUPER_PARTITIONED: {
250
272
  if (typeof meta?.superPartitionKeyLength !== 'number'
251
273
  || typeof meta?.partitionKeyLength !== 'number') {
@@ -304,6 +326,35 @@ function parsePColumnData(acc, keyPrefix = []) {
304
326
  parts,
305
327
  };
306
328
  }
329
+ case RT_PARQUET_SUPER_PARTITIONED: {
330
+ if (typeof meta?.superPartitionKeyLength !== 'number'
331
+ || typeof meta?.partitionKeyLength !== 'number') {
332
+ throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);
333
+ }
334
+ const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;
335
+ const parts = [];
336
+ // Process all super partitions
337
+ for (const supKeyStr of acc.listInputFields()) {
338
+ const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });
339
+ if (superPartition === undefined)
340
+ return undefined;
341
+ // Validate inner type
342
+ if (superPartition.resourceType.name !== RT_PARQUET_PARTITIONED) {
343
+ throw new Error(`Expected ${RT_PARQUET_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);
344
+ }
345
+ const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr));
346
+ if (innerResult === undefined)
347
+ return undefined;
348
+ if (innerResult.type !== 'ParquetPartitioned')
349
+ throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);
350
+ parts.push(...innerResult.parts);
351
+ }
352
+ return {
353
+ type: 'ParquetPartitioned',
354
+ partitionKeyLength: totalKeyLength,
355
+ parts,
356
+ };
357
+ }
307
358
  default:
308
359
  throw new Error(`Unknown resource type: ${resourceType}`);
309
360
  }
@@ -326,5 +377,5 @@ function convertOrParsePColumnData(acc) {
326
377
  throw new Error(`Unexpected input type: ${typeof acc}`);
327
378
  }
328
379
 
329
- export { RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, convertOrParsePColumnData, getPartitionKeysList, getUniquePartitionKeys, parsePColumnData, parseResourceMap };
380
+ export { RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, convertOrParsePColumnData, getPartitionKeysList, getUniquePartitionKeys, parsePColumnData, parseResourceMap };
330
381
  //# sourceMappingURL=pcolumn_data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pcolumn_data.js","sources":["../../../src/render/util/pcolumn_data.ts"],"sourcesContent":["import type {\n DataInfo } from '@milaboratories/pl-model-common';\nimport {\n dataInfoToEntries,\n isDataInfo,\n isDataInfoEntries,\n type BinaryChunk,\n type BinaryPartitionedDataInfoEntries,\n type DataInfoEntries,\n type JsonPartitionedDataInfoEntries,\n type PColumnDataEntry,\n type PColumnKey,\n} from '@milaboratories/pl-model-common';\nimport { TreeNodeAccessor } from '../accessor';\n\nconst PCD_PREFIX = 'PColumnData/';\n\nexport const RT_RESOURCE_MAP = PCD_PREFIX + 'ResourceMap';\nexport const RT_RESOURCE_MAP_PARTITIONED = PCD_PREFIX + 'Partitioned/ResourceMap';\n\nexport const RT_JSON_PARTITIONED = PCD_PREFIX + 'JsonPartitioned';\nexport const RT_BINARY_PARTITIONED = PCD_PREFIX + 'BinaryPartitioned';\n\nconst PCD_SUP_PREFIX = PCD_PREFIX + 'Partitioned/';\nexport const RT_JSON_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'JsonPartitioned';\nexport const RT_BINARY_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'BinaryPartitioned';\n\nexport type PColumnResourceMapEntry<T> = {\n key: PColumnKey;\n value: T;\n};\n\nexport type PColumnResourceMapData<T> = {\n isComplete: boolean;\n data: PColumnResourceMapEntry<T>[];\n};\n\nfunction populateResourceMapData<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n data: PColumnResourceMapEntry<T | undefined>[],\n keyPrefix: PColumnKey = [],\n addEntriesWithNoData: boolean,\n): boolean {\n if (acc === undefined) return false;\n switch (acc.resourceType.name) {\n case RT_RESOURCE_MAP: {\n let isComplete = acc.getInputsLocked();\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n const converted = value === undefined ? undefined : resourceParser(value);\n if (converted === undefined) isComplete = false;\n if (converted !== undefined || addEntriesWithNoData) data.push({ key, value: converted });\n }\n return isComplete;\n }\n case RT_RESOURCE_MAP_PARTITIONED: {\n let isComplete = acc.getInputsLocked();\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) isComplete = false;\n else {\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n const populateResult = populateResourceMapData(\n value,\n resourceParser,\n data,\n key,\n addEntriesWithNoData,\n );\n isComplete = isComplete && populateResult;\n }\n }\n return isComplete;\n }\n default:\n throw new Error(`Unknown resource type: ${acc.resourceType.name}`);\n }\n}\n\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: false\n): PColumnResourceMapData<NonNullable<T>>;\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: true\n): PColumnResourceMapData<T | undefined>;\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: boolean = false,\n): PColumnResourceMapData<T | undefined> {\n const data: PColumnResourceMapEntry<T | undefined>[] = [];\n const isComplete = populateResourceMapData(acc, resourceParser, data, [], addEntriesWithNoData);\n return { isComplete, data };\n}\n\nexport type PColumnKeyList = {\n /** array of keys */\n data: PColumnKey[];\n /** length of partition key */\n keyLength: number;\n};\n\nconst removeIndexSuffix = (keyStr: string): { baseKey: string; type: 'index' | 'values' } => {\n if (keyStr.endsWith('.index')) {\n return { baseKey: keyStr.substring(0, keyStr.length - 6), type: 'index' };\n } else if (keyStr.endsWith('.values')) {\n return { baseKey: keyStr.substring(0, keyStr.length - 7), type: 'values' };\n } else {\n throw new Error(`key must ends on .index/.values for binary p-column, got: ${keyStr}`);\n }\n};\n\n// @TODO define a class with various resource map operations\n/** Returns a list of all partition keys appeared in the p-column */\nexport function getPartitionKeysList(\n acc: TreeNodeAccessor | undefined,\n): PColumnKeyList | undefined {\n if (!acc) return undefined;\n\n const rt = acc.resourceType.name;\n const meta = acc.getDataAsJson<Record<string, number>>();\n const data: PColumnKey[] = [];\n\n let keyLength = 0;\n // @TODO validate meta shape\n switch (rt) {\n case RT_RESOURCE_MAP:\n keyLength = meta['keyLength'];\n break;\n\n case RT_RESOURCE_MAP_PARTITIONED:\n keyLength = meta['partitionKeyLength'] + meta['keyLength'];\n break;\n\n case RT_JSON_PARTITIONED:\n case RT_BINARY_PARTITIONED:\n keyLength = meta['partitionKeyLength'];\n break;\n\n case RT_BINARY_SUPER_PARTITIONED:\n case RT_JSON_SUPER_PARTITIONED:\n keyLength = meta['superPartitionKeyLength'] + meta['partitionKeyLength'];\n break;\n }\n\n switch (rt) {\n case RT_RESOURCE_MAP:\n case RT_JSON_PARTITIONED:\n case RT_BINARY_PARTITIONED:\n for (let keyStr of acc.listInputFields()) {\n if (rt === RT_BINARY_PARTITIONED) {\n keyStr = removeIndexSuffix(keyStr).baseKey;\n }\n const key = [...JSON.parse(keyStr)] as PColumnKey;\n data.push(key);\n }\n\n break;\n\n case RT_RESOURCE_MAP_PARTITIONED:\n case RT_BINARY_SUPER_PARTITIONED:\n case RT_JSON_SUPER_PARTITIONED:\n for (const supKeyStr of acc.listInputFields()) {\n const keyPrefix = [...JSON.parse(supKeyStr)] as PColumnKey;\n\n const value = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (value !== undefined) {\n for (let keyStr of value.listInputFields()) {\n if (rt === RT_BINARY_SUPER_PARTITIONED) {\n keyStr = removeIndexSuffix(keyStr).baseKey;\n }\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n data.push(key);\n }\n }\n }\n break;\n }\n\n return { data, keyLength };\n}\n\nfunction getUniquePartitionKeysForDataEntries(list: DataInfoEntries<unknown>): (string | number)[][] {\n if (list.type !== 'JsonPartitioned' && list.type !== 'BinaryPartitioned')\n throw new Error(`Splitting requires Partitioned DataInfoEntries, got ${list.type}`);\n\n const { parts, partitionKeyLength } = list;\n\n const result: Set<string | number>[] = [];\n for (let i = 0; i < partitionKeyLength; ++i) {\n result.push(new Set());\n }\n\n for (const part of parts) {\n const key = part.key;\n if (key.length !== partitionKeyLength) {\n throw new Error(\n `Key length (${key.length}) does not match partition length (${partitionKeyLength}) for key: ${JSON.stringify(\n key,\n )}`,\n );\n }\n for (let i = 0; i < partitionKeyLength; ++i) {\n result[i].add(key[i]);\n }\n }\n\n return result.map((s) => Array.from(s.values()));\n}\n\n/** Returns an array of unique partition keys for each column: the i-th element in the resulting 2d array contains all unique values of i-th partition axis. */\nexport function getUniquePartitionKeys(acc: DataInfoEntries<unknown>): (string | number)[][];\nexport function getUniquePartitionKeys(acc: DataInfoEntries<unknown> | TreeNodeAccessor | undefined): (string | number)[][] | undefined;\nexport function getUniquePartitionKeys(\n acc: TreeNodeAccessor | DataInfoEntries<unknown> | undefined,\n): (string | number)[][] | undefined {\n if (acc === undefined) return undefined;\n\n if (isDataInfoEntries(acc))\n return getUniquePartitionKeysForDataEntries(acc);\n\n const list = getPartitionKeysList(acc);\n if (!list) return undefined;\n\n const { data, keyLength } = list;\n\n const result: Set<string | number>[] = [];\n\n for (let i = 0; i < keyLength; ++i) {\n result.push(new Set());\n }\n\n for (const l of data) {\n if (l.length !== keyLength) {\n throw new Error('key length does not match partition length');\n }\n for (let i = 0; i < keyLength; ++i) {\n result[i].add(l[i]);\n }\n }\n\n return result.map((s) => Array.from(s.values()));\n}\n\n/**\n * Parses the PColumn data from a TreeNodeAccessor into a DataInfoEntries structure.\n * Returns undefined if any required data is missing.\n * Throws error on validation failures.\n *\n * @param acc - The TreeNodeAccessor containing PColumn data\n * @param keyPrefix - Optional key prefix for recursive calls\n * @returns DataInfoEntries representation of the PColumn data, or undefined if incomplete\n */\nexport function parsePColumnData(\n acc: TreeNodeAccessor | undefined,\n keyPrefix: PColumnKey = [],\n): JsonPartitionedDataInfoEntries<TreeNodeAccessor> | BinaryPartitionedDataInfoEntries<TreeNodeAccessor> | undefined {\n if (acc === undefined) return undefined;\n\n if (!acc.getIsReadyOrError()) return undefined;\n\n const resourceType = acc.resourceType.name;\n const meta = acc.getDataAsJson<Record<string, number>>();\n\n // Prevent recursive super-partitioned resources\n if (keyPrefix.length > 0\n && (resourceType === RT_JSON_SUPER_PARTITIONED || resourceType === RT_BINARY_SUPER_PARTITIONED)) {\n throw new Error(`Unexpected nested super-partitioned resource: ${resourceType}`);\n }\n\n switch (resourceType) {\n case RT_RESOURCE_MAP:\n case RT_RESOURCE_MAP_PARTITIONED:\n throw new Error(`Only data columns are supported, got: ${resourceType}`);\n\n case RT_JSON_PARTITIONED: {\n if (typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) return undefined;\n\n const key = [...keyPrefix, ...JSON.parse(keyStr)];\n parts.push({ key, value });\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n }\n\n case RT_BINARY_PARTITIONED: {\n if (typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const parts: PColumnDataEntry<BinaryChunk<TreeNodeAccessor>>[] = [];\n const baseKeys = new Map<string, { index?: TreeNodeAccessor; values?: TreeNodeAccessor }>();\n\n // Group fields by base key (without .index/.values suffix)\n for (const keyStr of acc.listInputFields()) {\n const suffix = removeIndexSuffix(keyStr);\n\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) return undefined;\n\n let entry = baseKeys.get(suffix.baseKey);\n if (!entry) {\n entry = {};\n baseKeys.set(suffix.baseKey, entry);\n }\n\n if (suffix.type === 'index') {\n entry.index = value;\n } else {\n entry.values = value;\n }\n }\n\n // Process complete binary chunks only\n for (const [baseKeyStr, entry] of baseKeys.entries()) {\n if (!entry.index || !entry.values) return undefined;\n\n const key = [...keyPrefix, ...JSON.parse(baseKeyStr)];\n parts.push({\n key,\n value: {\n index: entry.index,\n values: entry.values,\n },\n });\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n }\n\n case RT_JSON_SUPER_PARTITIONED: {\n if (typeof meta?.superPartitionKeyLength !== 'number'\n || typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n\n // Process all super partitions\n for (const supKeyStr of acc.listInputFields()) {\n const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (superPartition === undefined) return undefined;\n\n // Validate inner type\n if (superPartition.resourceType.name !== RT_JSON_PARTITIONED) {\n throw new Error(`Expected ${RT_JSON_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);\n }\n\n const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);\n\n if (innerResult === undefined) return undefined;\n\n if (innerResult.type !== 'JsonPartitioned')\n throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);\n\n parts.push(...innerResult.parts);\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: totalKeyLength,\n parts,\n };\n }\n\n case RT_BINARY_SUPER_PARTITIONED: {\n if (typeof meta?.superPartitionKeyLength !== 'number'\n || typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;\n const parts: PColumnDataEntry<BinaryChunk<TreeNodeAccessor>>[] = [];\n\n // Process all super partitions\n for (const supKeyStr of acc.listInputFields()) {\n const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (superPartition === undefined) return undefined;\n\n // Validate inner type\n if (superPartition.resourceType.name !== RT_BINARY_PARTITIONED) {\n throw new Error(`Expected ${RT_BINARY_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);\n }\n\n const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);\n\n if (innerResult === undefined) return undefined;\n\n if (innerResult.type !== 'BinaryPartitioned')\n throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);\n\n parts.push(...innerResult.parts);\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: totalKeyLength,\n parts,\n };\n }\n\n default:\n throw new Error(`Unknown resource type: ${resourceType}`);\n }\n}\n\n/**\n * Converts or parses the input into DataInfoEntries format.\n\n * @param acc - The input data, which can be TreeNodeAccessor, DataInfoEntries, DataInfo, or undefined.\n * @returns The data in DataInfoEntries format, or undefined if the input was undefined or data is not ready.\n */\nexport function convertOrParsePColumnData(acc: TreeNodeAccessor | DataInfoEntries<TreeNodeAccessor> | DataInfo<TreeNodeAccessor> | undefined):\nDataInfoEntries<TreeNodeAccessor> | undefined {\n if (acc === undefined) return undefined;\n\n if (isDataInfoEntries(acc)) return acc;\n if (isDataInfo(acc)) return dataInfoToEntries(acc);\n if (acc instanceof TreeNodeAccessor) return parsePColumnData(acc);\n\n throw new Error(`Unexpected input type: ${typeof acc}`);\n}\n"],"names":[],"mappings":";;;AAeA,MAAM,UAAU,GAAG,cAAc;AAE1B,MAAM,eAAe,GAAG,UAAU,GAAG;AACrC,MAAM,2BAA2B,GAAG,UAAU,GAAG;AAEjD,MAAM,mBAAmB,GAAG,UAAU,GAAG;AACzC,MAAM,qBAAqB,GAAG,UAAU,GAAG;AAElD,MAAM,cAAc,GAAG,UAAU,GAAG,cAAc;AAC3C,MAAM,yBAAyB,GAAG,cAAc,GAAG;AACnD,MAAM,2BAA2B,GAAG,cAAc,GAAG;AAY5D,SAAS,uBAAuB,CAC9B,GAAiC,EACjC,cAAwD,EACxD,IAA8C,EAC9C,SAAA,GAAwB,EAAE,EAC1B,oBAA6B,EAAA;IAE7B,IAAI,GAAG,KAAK,SAAS;AAAE,QAAA,OAAO,KAAK;AACnC,IAAA,QAAQ,GAAG,CAAC,YAAY,CAAC,IAAI;QAC3B,KAAK,eAAe,EAAE;AACpB,YAAA,IAAI,UAAU,GAAG,GAAG,CAAC,eAAe,EAAE;YACtC,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE;AAC1C,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;AACtE,gBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAe;AAC/D,gBAAA,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC;gBACzE,IAAI,SAAS,KAAK,SAAS;oBAAE,UAAU,GAAG,KAAK;AAC/C,gBAAA,IAAI,SAAS,KAAK,SAAS,IAAI,oBAAoB;oBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YAC3F;AACA,YAAA,OAAO,UAAU;QACnB;QACA,KAAK,2BAA2B,EAAE;AAChC,YAAA,IAAI,UAAU,GAAG,GAAG,CAAC,eAAe,EAAE;YACtC,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE;AAC1C,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;gBACtE,IAAI,KAAK,KAAK,SAAS;oBAAE,UAAU,GAAG,KAAK;qBACtC;AACH,oBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAe;AAC/D,oBAAA,MAAM,cAAc,GAAG,uBAAuB,CAC5C,KAAK,EACL,cAAc,EACd,IAAI,EACJ,GAAG,EACH,oBAAoB,CACrB;AACD,oBAAA,UAAU,GAAG,UAAU,IAAI,cAAc;gBAC3C;YACF;AACA,YAAA,OAAO,UAAU;QACnB;AACA,QAAA;YACE,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,GAAG,CAAC,YAAY,CAAC,IAAI,CAAA,CAAE,CAAC;;AAExE;AAYM,SAAU,gBAAgB,CAC9B,GAAiC,EACjC,cAAwD,EACxD,uBAAgC,KAAK,EAAA;IAErC,MAAM,IAAI,GAA6C,EAAE;AACzD,IAAA,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,oBAAoB,CAAC;AAC/F,IAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;AAC7B;AASA,MAAM,iBAAiB,GAAG,CAAC,MAAc,KAAmD;AAC1F,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;IAC3E;AAAO,SAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;QACrC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC5E;SAAO;AACL,QAAA,MAAM,IAAI,KAAK,CAAC,6DAA6D,MAAM,CAAA,CAAE,CAAC;IACxF;AACF,CAAC;AAED;AACA;AACM,SAAU,oBAAoB,CAClC,GAAiC,EAAA;AAEjC,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,SAAS;AAE1B,IAAA,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI;AAChC,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,EAA0B;IACxD,MAAM,IAAI,GAAiB,EAAE;IAE7B,IAAI,SAAS,GAAG,CAAC;;IAEjB,QAAQ,EAAE;AACR,QAAA,KAAK,eAAe;AAClB,YAAA,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;YAC7B;AAEF,QAAA,KAAK,2BAA2B;YAC9B,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1D;AAEF,QAAA,KAAK,mBAAmB;AACxB,QAAA,KAAK,qBAAqB;AACxB,YAAA,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACtC;AAEF,QAAA,KAAK,2BAA2B;AAChC,QAAA,KAAK,yBAAyB;YAC5B,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACxE;;IAGJ,QAAQ,EAAE;AACR,QAAA,KAAK,eAAe;AACpB,QAAA,KAAK,mBAAmB;AACxB,QAAA,KAAK,qBAAqB;YACxB,KAAK,IAAI,MAAM,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE;AACxC,gBAAA,IAAI,EAAE,KAAK,qBAAqB,EAAE;AAChC,oBAAA,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO;gBAC5C;gBACA,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAe;AACjD,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAChB;YAEA;AAEF,QAAA,KAAK,2BAA2B;AAChC,QAAA,KAAK,2BAA2B;AAChC,QAAA,KAAK,yBAAyB;YAC5B,KAAK,MAAM,SAAS,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE;gBAC7C,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAe;AAE1D,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;AACzE,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;oBACvB,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE;AAC1C,wBAAA,IAAI,EAAE,KAAK,2BAA2B,EAAE;AACtC,4BAAA,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO;wBAC5C;AACA,wBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAe;AAC/D,wBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;oBAChB;gBACF;YACF;YACA;;AAGJ,IAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;AAC5B;AAEA,SAAS,oCAAoC,CAAC,IAA8B,EAAA;IAC1E,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB;QACtE,MAAM,IAAI,KAAK,CAAC,CAAA,oDAAA,EAAuD,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;AAErF,IAAA,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,IAAI;IAE1C,MAAM,MAAM,GAA2B,EAAE;AACzC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,EAAE,CAAC,EAAE;AAC3C,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACxB;AAEA,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,kBAAkB,EAAE;AACrC,YAAA,MAAM,IAAI,KAAK,CACb,eAAe,GAAG,CAAC,MAAM,CAAA,mCAAA,EAAsC,kBAAkB,CAAA,WAAA,EAAc,IAAI,CAAC,SAAS,CAC3G,GAAG,CACJ,CAAA,CAAE,CACJ;QACH;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,EAAE,CAAC,EAAE;YAC3C,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvB;IACF;AAEA,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAClD;AAKM,SAAU,sBAAsB,CACpC,GAA4D,EAAA;IAE5D,IAAI,GAAG,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;IAEvC,IAAI,iBAAiB,CAAC,GAAG,CAAC;AACxB,QAAA,OAAO,oCAAoC,CAAC,GAAG,CAAC;AAElD,IAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC;AACtC,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,SAAS;AAE3B,IAAA,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI;IAEhC,MAAM,MAAM,GAA2B,EAAE;AAEzC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;AAClC,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACxB;AAEA,IAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE;AAC1B,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;QAC/D;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;YAClC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB;IACF;AAEA,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAClD;AAEA;;;;;;;;AAQG;SACa,gBAAgB,CAC9B,GAAiC,EACjC,YAAwB,EAAE,EAAA;IAE1B,IAAI,GAAG,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;AAEvC,IAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE;AAAE,QAAA,OAAO,SAAS;AAE9C,IAAA,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI;AAC1C,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,EAA0B;;AAGxD,IAAA,IAAI,SAAS,CAAC,MAAM,GAAG;YACjB,YAAY,KAAK,yBAAyB,IAAI,YAAY,KAAK,2BAA2B,CAAC,EAAE;AACjG,QAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,YAAY,CAAA,CAAE,CAAC;IAClF;IAEA,QAAQ,YAAY;AAClB,QAAA,KAAK,eAAe;AACpB,QAAA,KAAK,2BAA2B;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,YAAY,CAAA,CAAE,CAAC;QAE1E,KAAK,mBAAmB,EAAE;AACxB,YAAA,IAAI,OAAO,IAAI,EAAE,kBAAkB,KAAK,QAAQ,EAAE;AAChD,gBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,YAAY,CAAA,CAAE,CAAC;YAC/E;YAEA,MAAM,KAAK,GAAyC,EAAE;YACtD,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE;AAC1C,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;gBACtE,IAAI,KAAK,KAAK,SAAS;AAAE,oBAAA,OAAO,SAAS;AAEzC,gBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACjD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;YAC5B;YAEA,OAAO;AACL,gBAAA,IAAI,EAAE,iBAAiB;gBACvB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;gBAC3C,KAAK;aACN;QACH;QAEA,KAAK,qBAAqB,EAAE;AAC1B,YAAA,IAAI,OAAO,IAAI,EAAE,kBAAkB,KAAK,QAAQ,EAAE;AAChD,gBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,YAAY,CAAA,CAAE,CAAC;YAC/E;YAEA,MAAM,KAAK,GAAsD,EAAE;AACnE,YAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmE;;YAG3F,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE;AAC1C,gBAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;AAExC,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;gBACtE,IAAI,KAAK,KAAK,SAAS;AAAE,oBAAA,OAAO,SAAS;gBAEzC,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;gBACxC,IAAI,CAAC,KAAK,EAAE;oBACV,KAAK,GAAG,EAAE;oBACV,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;gBACrC;AAEA,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AAC3B,oBAAA,KAAK,CAAC,KAAK,GAAG,KAAK;gBACrB;qBAAO;AACL,oBAAA,KAAK,CAAC,MAAM,GAAG,KAAK;gBACtB;YACF;;AAGA,YAAA,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE;gBACpD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,oBAAA,OAAO,SAAS;AAEnD,gBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACrD,KAAK,CAAC,IAAI,CAAC;oBACT,GAAG;AACH,oBAAA,KAAK,EAAE;wBACL,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;AACrB,qBAAA;AACF,iBAAA,CAAC;YACJ;YAEA,OAAO;AACL,gBAAA,IAAI,EAAE,mBAAmB;gBACzB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;gBAC3C,KAAK;aACN;QACH;QAEA,KAAK,yBAAyB,EAAE;AAC9B,YAAA,IAAI,OAAO,IAAI,EAAE,uBAAuB,KAAK;AACxC,mBAAA,OAAO,IAAI,EAAE,kBAAkB,KAAK,QAAQ,EAAE;AACjD,gBAAA,MAAM,IAAI,KAAK,CAAC,yEAAyE,YAAY,CAAA,CAAE,CAAC;YAC1G;YAEA,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,kBAAkB;YAC7E,MAAM,KAAK,GAAyC,EAAE;;YAGtD,KAAK,MAAM,SAAS,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE;AAC7C,gBAAA,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;gBAClF,IAAI,cAAc,KAAK,SAAS;AAAE,oBAAA,OAAO,SAAS;;gBAGlD,IAAI,cAAc,CAAC,YAAY,CAAC,IAAI,KAAK,mBAAmB,EAAE;AAC5D,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,SAAA,EAAY,mBAAmB,CAAA,QAAA,EAAW,YAAY,CAAA,UAAA,EAAa,cAAc,CAAC,YAAY,CAAC,IAAI,CAAA,CAAE,CAAC;gBACxH;AAEA,gBAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAe,CAAC;gBAEzF,IAAI,WAAW,KAAK,SAAS;AAAE,oBAAA,OAAO,SAAS;AAE/C,gBAAA,IAAI,WAAW,CAAC,IAAI,KAAK,iBAAiB;oBACxC,MAAM,IAAI,KAAK,CAAC,CAAA,iCAAA,EAAoC,YAAY,CAAA,EAAA,EAAK,WAAW,CAAC,IAAI,CAAA,CAAE,CAAC;gBAE1F,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;YAClC;YAEA,OAAO;AACL,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,kBAAkB,EAAE,cAAc;gBAClC,KAAK;aACN;QACH;QAEA,KAAK,2BAA2B,EAAE;AAChC,YAAA,IAAI,OAAO,IAAI,EAAE,uBAAuB,KAAK;AACxC,mBAAA,OAAO,IAAI,EAAE,kBAAkB,KAAK,QAAQ,EAAE;AACjD,gBAAA,MAAM,IAAI,KAAK,CAAC,yEAAyE,YAAY,CAAA,CAAE,CAAC;YAC1G;YAEA,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,kBAAkB;YAC7E,MAAM,KAAK,GAAsD,EAAE;;YAGnE,KAAK,MAAM,SAAS,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE;AAC7C,gBAAA,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;gBAClF,IAAI,cAAc,KAAK,SAAS;AAAE,oBAAA,OAAO,SAAS;;gBAGlD,IAAI,cAAc,CAAC,YAAY,CAAC,IAAI,KAAK,qBAAqB,EAAE;AAC9D,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,SAAA,EAAY,qBAAqB,CAAA,QAAA,EAAW,YAAY,CAAA,UAAA,EAAa,cAAc,CAAC,YAAY,CAAC,IAAI,CAAA,CAAE,CAAC;gBAC1H;AAEA,gBAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAe,CAAC;gBAEzF,IAAI,WAAW,KAAK,SAAS;AAAE,oBAAA,OAAO,SAAS;AAE/C,gBAAA,IAAI,WAAW,CAAC,IAAI,KAAK,mBAAmB;oBAC1C,MAAM,IAAI,KAAK,CAAC,CAAA,iCAAA,EAAoC,YAAY,CAAA,EAAA,EAAK,WAAW,CAAC,IAAI,CAAA,CAAE,CAAC;gBAE1F,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;YAClC;YAEA,OAAO;AACL,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,kBAAkB,EAAE,cAAc;gBAClC,KAAK;aACN;QACH;AAEA,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,CAAA,CAAE,CAAC;;AAE/D;AAEA;;;;;AAKG;AACG,SAAU,yBAAyB,CAAC,GAAkG,EAAA;IAE1I,IAAI,GAAG,KAAK,SAAS;AAAE,QAAA,OAAO,SAAS;IAEvC,IAAI,iBAAiB,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,GAAG;IACtC,IAAI,UAAU,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC;IAClD,IAAI,GAAG,YAAY,gBAAgB;AAAE,QAAA,OAAO,gBAAgB,CAAC,GAAG,CAAC;IAEjE,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,OAAO,GAAG,CAAA,CAAE,CAAC;AACzD;;;;"}
1
+ {"version":3,"file":"pcolumn_data.js","sources":["../../../src/render/util/pcolumn_data.ts"],"sourcesContent":["import type {\n DataInfo,\n PartitionedDataInfoEntries,\n} from '@milaboratories/pl-model-common';\nimport {\n dataInfoToEntries,\n isDataInfo,\n isDataInfoEntries,\n type BinaryChunk,\n type DataInfoEntries,\n type PColumnDataEntry,\n type PColumnKey,\n} from '@milaboratories/pl-model-common';\nimport { TreeNodeAccessor } from '../accessor';\n\nconst PCD_PREFIX = 'PColumnData/';\n\nexport const RT_RESOURCE_MAP = PCD_PREFIX + 'ResourceMap';\nexport const RT_RESOURCE_MAP_PARTITIONED = PCD_PREFIX + 'Partitioned/ResourceMap';\n\nexport const RT_JSON_PARTITIONED = PCD_PREFIX + 'JsonPartitioned';\nexport const RT_BINARY_PARTITIONED = PCD_PREFIX + 'BinaryPartitioned';\nexport const RT_PARQUET_PARTITIONED = PCD_PREFIX + 'ParquetPartitioned';\n\nconst PCD_SUP_PREFIX = PCD_PREFIX + 'Partitioned/';\nexport const RT_JSON_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'JsonPartitioned';\nexport const RT_BINARY_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'BinaryPartitioned';\nexport const RT_PARQUET_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'ParquetPartitioned';\n\nexport type PColumnResourceMapEntry<T> = {\n key: PColumnKey;\n value: T;\n};\n\nexport type PColumnResourceMapData<T> = {\n isComplete: boolean;\n data: PColumnResourceMapEntry<T>[];\n};\n\nfunction populateResourceMapData<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n data: PColumnResourceMapEntry<T | undefined>[],\n keyPrefix: PColumnKey = [],\n addEntriesWithNoData: boolean,\n): boolean {\n if (acc === undefined) return false;\n switch (acc.resourceType.name) {\n case RT_RESOURCE_MAP: {\n let isComplete = acc.getInputsLocked();\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n const converted = value === undefined ? undefined : resourceParser(value);\n if (converted === undefined) isComplete = false;\n if (converted !== undefined || addEntriesWithNoData) data.push({ key, value: converted });\n }\n return isComplete;\n }\n case RT_RESOURCE_MAP_PARTITIONED: {\n let isComplete = acc.getInputsLocked();\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) isComplete = false;\n else {\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n const populateResult = populateResourceMapData(\n value,\n resourceParser,\n data,\n key,\n addEntriesWithNoData,\n );\n isComplete = isComplete && populateResult;\n }\n }\n return isComplete;\n }\n default:\n throw new Error(`Unknown resource type: ${acc.resourceType.name}`);\n }\n}\n\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: false\n): PColumnResourceMapData<NonNullable<T>>;\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: true\n): PColumnResourceMapData<T | undefined>;\nexport function parseResourceMap<T>(\n acc: TreeNodeAccessor | undefined,\n resourceParser: (acc: TreeNodeAccessor) => T | undefined,\n addEntriesWithNoData: boolean = false,\n): PColumnResourceMapData<T | undefined> {\n const data: PColumnResourceMapEntry<T | undefined>[] = [];\n const isComplete = populateResourceMapData(acc, resourceParser, data, [], addEntriesWithNoData);\n return { isComplete, data };\n}\n\nexport type PColumnKeyList = {\n /** array of keys */\n data: PColumnKey[];\n /** length of partition key */\n keyLength: number;\n};\n\nconst removeIndexSuffix = (keyStr: string): { baseKey: string; type: 'index' | 'values' } => {\n if (keyStr.endsWith('.index')) {\n return { baseKey: keyStr.substring(0, keyStr.length - 6), type: 'index' };\n } else if (keyStr.endsWith('.values')) {\n return { baseKey: keyStr.substring(0, keyStr.length - 7), type: 'values' };\n } else {\n throw new Error(`key must ends on .index/.values for binary p-column, got: ${keyStr}`);\n }\n};\n\n// @TODO define a class with various resource map operations\n/** Returns a list of all partition keys appeared in the p-column */\nexport function getPartitionKeysList(\n acc: TreeNodeAccessor | undefined,\n): PColumnKeyList | undefined {\n if (!acc) return undefined;\n\n const rt = acc.resourceType.name;\n const meta = acc.getDataAsJson<Record<string, number>>();\n const data: PColumnKey[] = [];\n\n let keyLength = 0;\n // @TODO validate meta shape\n switch (rt) {\n case RT_RESOURCE_MAP:\n keyLength = meta['keyLength'];\n break;\n\n case RT_RESOURCE_MAP_PARTITIONED:\n keyLength = meta['partitionKeyLength'] + meta['keyLength'];\n break;\n\n case RT_JSON_PARTITIONED:\n case RT_BINARY_PARTITIONED:\n keyLength = meta['partitionKeyLength'];\n break;\n\n case RT_BINARY_SUPER_PARTITIONED:\n case RT_JSON_SUPER_PARTITIONED:\n keyLength = meta['superPartitionKeyLength'] + meta['partitionKeyLength'];\n break;\n }\n\n switch (rt) {\n case RT_RESOURCE_MAP:\n case RT_JSON_PARTITIONED:\n case RT_BINARY_PARTITIONED:\n for (let keyStr of acc.listInputFields()) {\n if (rt === RT_BINARY_PARTITIONED) {\n keyStr = removeIndexSuffix(keyStr).baseKey;\n }\n const key = [...JSON.parse(keyStr)] as PColumnKey;\n data.push(key);\n }\n\n break;\n\n case RT_RESOURCE_MAP_PARTITIONED:\n case RT_BINARY_SUPER_PARTITIONED:\n case RT_JSON_SUPER_PARTITIONED:\n for (const supKeyStr of acc.listInputFields()) {\n const keyPrefix = [...JSON.parse(supKeyStr)] as PColumnKey;\n\n const value = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (value !== undefined) {\n for (let keyStr of value.listInputFields()) {\n if (rt === RT_BINARY_SUPER_PARTITIONED) {\n keyStr = removeIndexSuffix(keyStr).baseKey;\n }\n const key = [...keyPrefix, ...JSON.parse(keyStr)] as PColumnKey;\n data.push(key);\n }\n }\n }\n break;\n }\n\n return { data, keyLength };\n}\n\nfunction getUniquePartitionKeysForDataEntries(list: DataInfoEntries<unknown>): (string | number)[][] {\n if (list.type !== 'JsonPartitioned' && list.type !== 'BinaryPartitioned' && list.type !== 'ParquetPartitioned')\n throw new Error(`Splitting requires Partitioned DataInfoEntries, got ${list.type}`);\n\n const { parts, partitionKeyLength } = list;\n\n const result: Set<string | number>[] = [];\n for (let i = 0; i < partitionKeyLength; ++i) {\n result.push(new Set());\n }\n\n for (const part of parts) {\n const key = part.key;\n if (key.length !== partitionKeyLength) {\n throw new Error(\n `Key length (${key.length}) does not match partition length (${partitionKeyLength}) for key: ${JSON.stringify(\n key,\n )}`,\n );\n }\n for (let i = 0; i < partitionKeyLength; ++i) {\n result[i].add(key[i]);\n }\n }\n\n return result.map((s) => Array.from(s.values()));\n}\n\n/** Returns an array of unique partition keys for each column: the i-th element in the resulting 2d array contains all unique values of i-th partition axis. */\nexport function getUniquePartitionKeys(acc: DataInfoEntries<unknown>): (string | number)[][];\nexport function getUniquePartitionKeys(acc: DataInfoEntries<unknown> | TreeNodeAccessor | undefined): (string | number)[][] | undefined;\nexport function getUniquePartitionKeys(\n acc: TreeNodeAccessor | DataInfoEntries<unknown> | undefined,\n): (string | number)[][] | undefined {\n if (acc === undefined) return undefined;\n\n if (isDataInfoEntries(acc))\n return getUniquePartitionKeysForDataEntries(acc);\n\n const list = getPartitionKeysList(acc);\n if (!list) return undefined;\n\n const { data, keyLength } = list;\n\n const result: Set<string | number>[] = [];\n\n for (let i = 0; i < keyLength; ++i) {\n result.push(new Set());\n }\n\n for (const l of data) {\n if (l.length !== keyLength) {\n throw new Error('key length does not match partition length');\n }\n for (let i = 0; i < keyLength; ++i) {\n result[i].add(l[i]);\n }\n }\n\n return result.map((s) => Array.from(s.values()));\n}\n\n/**\n * Parses the PColumn data from a TreeNodeAccessor into a DataInfoEntries structure.\n * Returns undefined if any required data is missing.\n * Throws error on validation failures.\n *\n * @param acc - The TreeNodeAccessor containing PColumn data\n * @param keyPrefix - Optional key prefix for recursive calls\n * @returns DataInfoEntries representation of the PColumn data, or undefined if incomplete\n */\nexport function parsePColumnData(\n acc: TreeNodeAccessor | undefined,\n keyPrefix: PColumnKey = [],\n): PartitionedDataInfoEntries<TreeNodeAccessor> | undefined {\n if (acc === undefined) return undefined;\n\n if (!acc.getIsReadyOrError()) return undefined;\n\n const resourceType = acc.resourceType.name;\n const meta = acc.getDataAsJson<Record<string, number>>();\n\n // Prevent recursive super-partitioned resources\n if (keyPrefix.length > 0\n && (resourceType === RT_JSON_SUPER_PARTITIONED\n || resourceType === RT_BINARY_SUPER_PARTITIONED\n || resourceType === RT_PARQUET_SUPER_PARTITIONED)) {\n throw new Error(`Unexpected nested super-partitioned resource: ${resourceType}`);\n }\n\n switch (resourceType) {\n case RT_RESOURCE_MAP:\n case RT_RESOURCE_MAP_PARTITIONED:\n throw new Error(`Only data columns are supported, got: ${resourceType}`);\n\n case RT_JSON_PARTITIONED: {\n if (typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) return undefined;\n\n const key = [...keyPrefix, ...JSON.parse(keyStr)];\n parts.push({ key, value });\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n }\n\n case RT_BINARY_PARTITIONED: {\n if (typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const parts: PColumnDataEntry<BinaryChunk<TreeNodeAccessor>>[] = [];\n const baseKeys = new Map<string, { index?: TreeNodeAccessor; values?: TreeNodeAccessor }>();\n\n // Group fields by base key (without .index/.values suffix)\n for (const keyStr of acc.listInputFields()) {\n const suffix = removeIndexSuffix(keyStr);\n\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) return undefined;\n\n let entry = baseKeys.get(suffix.baseKey);\n if (!entry) {\n entry = {};\n baseKeys.set(suffix.baseKey, entry);\n }\n\n if (suffix.type === 'index') {\n entry.index = value;\n } else {\n entry.values = value;\n }\n }\n\n // Process complete binary chunks only\n for (const [baseKeyStr, entry] of baseKeys.entries()) {\n if (!entry.index || !entry.values) return undefined;\n\n const key = [...keyPrefix, ...JSON.parse(baseKeyStr)];\n parts.push({\n key,\n value: {\n index: entry.index,\n values: entry.values,\n },\n });\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n }\n\n case RT_PARQUET_PARTITIONED: {\n if (typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n for (const keyStr of acc.listInputFields()) {\n const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });\n if (value === undefined) return undefined;\n\n const key = [...keyPrefix, ...JSON.parse(keyStr)];\n parts.push({ key, value });\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n }\n\n case RT_JSON_SUPER_PARTITIONED: {\n if (typeof meta?.superPartitionKeyLength !== 'number'\n || typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n\n // Process all super partitions\n for (const supKeyStr of acc.listInputFields()) {\n const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (superPartition === undefined) return undefined;\n\n // Validate inner type\n if (superPartition.resourceType.name !== RT_JSON_PARTITIONED) {\n throw new Error(`Expected ${RT_JSON_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);\n }\n\n const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);\n\n if (innerResult === undefined) return undefined;\n\n if (innerResult.type !== 'JsonPartitioned')\n throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);\n\n parts.push(...innerResult.parts);\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: totalKeyLength,\n parts,\n };\n }\n\n case RT_BINARY_SUPER_PARTITIONED: {\n if (typeof meta?.superPartitionKeyLength !== 'number'\n || typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;\n const parts: PColumnDataEntry<BinaryChunk<TreeNodeAccessor>>[] = [];\n\n // Process all super partitions\n for (const supKeyStr of acc.listInputFields()) {\n const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (superPartition === undefined) return undefined;\n\n // Validate inner type\n if (superPartition.resourceType.name !== RT_BINARY_PARTITIONED) {\n throw new Error(`Expected ${RT_BINARY_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);\n }\n\n const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);\n\n if (innerResult === undefined) return undefined;\n\n if (innerResult.type !== 'BinaryPartitioned')\n throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);\n\n parts.push(...innerResult.parts);\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: totalKeyLength,\n parts,\n };\n }\n\n case RT_PARQUET_SUPER_PARTITIONED: {\n if (typeof meta?.superPartitionKeyLength !== 'number'\n || typeof meta?.partitionKeyLength !== 'number') {\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);\n }\n\n const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;\n const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];\n\n // Process all super partitions\n for (const supKeyStr of acc.listInputFields()) {\n const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });\n if (superPartition === undefined) return undefined;\n\n // Validate inner type\n if (superPartition.resourceType.name !== RT_PARQUET_PARTITIONED) {\n throw new Error(`Expected ${RT_PARQUET_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);\n }\n\n const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);\n\n if (innerResult === undefined) return undefined;\n\n if (innerResult.type !== 'ParquetPartitioned')\n throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);\n\n parts.push(...innerResult.parts);\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: totalKeyLength,\n parts,\n };\n }\n\n default:\n throw new Error(`Unknown resource type: ${resourceType}`);\n }\n}\n\n/**\n * Converts or parses the input into DataInfoEntries format.\n\n * @param acc - The input data, which can be TreeNodeAccessor, DataInfoEntries, DataInfo, or undefined.\n * @returns The data in DataInfoEntries format, or undefined if the input was undefined or data is not ready.\n */\nexport function convertOrParsePColumnData(acc: TreeNodeAccessor | DataInfoEntries<TreeNodeAccessor> | DataInfo<TreeNodeAccessor> | undefined):\nDataInfoEntries<TreeNodeAccessor> | undefined {\n if (acc === undefined) return undefined;\n\n if (isDataInfoEntries(acc)) return acc;\n if (isDataInfo(acc)) return dataInfoToEntries(acc);\n if (acc instanceof TreeNodeAccessor) return parsePColumnData(acc);\n\n throw new Error(`Unexpected input type: ${typeof acc}`);\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/model",
3
- "version": "1.44.5",
3
+ "version": "1.44.13",
4
4
  "description": "Platforma.bio SDK / Block Model",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.cjs",
@@ -22,17 +22,17 @@
22
22
  "utility-types": "^3.11.0",
23
23
  "canonicalize": "~2.1.0",
24
24
  "zod": "~3.23.8",
25
- "@milaboratories/pl-model-common": "1.21.2",
25
+ "@milaboratories/pl-model-common": "1.21.3",
26
26
  "@milaboratories/pl-error-like": "1.12.5"
27
27
  },
28
28
  "devDependencies": {
29
29
  "typescript": "~5.6.3",
30
30
  "vitest": "^2.1.9",
31
31
  "fast-json-patch": "^3.1.1",
32
- "@milaboratories/helpers": "1.11.0",
32
+ "@milaboratories/helpers": "1.12.0",
33
33
  "@platforma-sdk/eslint-config": "1.1.0",
34
- "@milaboratories/ts-configs": "1.0.6",
35
34
  "@milaboratories/ts-builder": "1.0.5",
35
+ "@milaboratories/ts-configs": "1.0.6",
36
36
  "@milaboratories/build-configs": "1.0.8"
37
37
  },
38
38
  "scripts": {
@@ -1,13 +1,13 @@
1
1
  import type {
2
- DataInfo } from '@milaboratories/pl-model-common';
2
+ DataInfo,
3
+ PartitionedDataInfoEntries,
4
+ } from '@milaboratories/pl-model-common';
3
5
  import {
4
6
  dataInfoToEntries,
5
7
  isDataInfo,
6
8
  isDataInfoEntries,
7
9
  type BinaryChunk,
8
- type BinaryPartitionedDataInfoEntries,
9
10
  type DataInfoEntries,
10
- type JsonPartitionedDataInfoEntries,
11
11
  type PColumnDataEntry,
12
12
  type PColumnKey,
13
13
  } from '@milaboratories/pl-model-common';
@@ -20,10 +20,12 @@ export const RT_RESOURCE_MAP_PARTITIONED = PCD_PREFIX + 'Partitioned/ResourceMap
20
20
 
21
21
  export const RT_JSON_PARTITIONED = PCD_PREFIX + 'JsonPartitioned';
22
22
  export const RT_BINARY_PARTITIONED = PCD_PREFIX + 'BinaryPartitioned';
23
+ export const RT_PARQUET_PARTITIONED = PCD_PREFIX + 'ParquetPartitioned';
23
24
 
24
25
  const PCD_SUP_PREFIX = PCD_PREFIX + 'Partitioned/';
25
26
  export const RT_JSON_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'JsonPartitioned';
26
27
  export const RT_BINARY_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'BinaryPartitioned';
28
+ export const RT_PARQUET_SUPER_PARTITIONED = PCD_SUP_PREFIX + 'ParquetPartitioned';
27
29
 
28
30
  export type PColumnResourceMapEntry<T> = {
29
31
  key: PColumnKey;
@@ -187,7 +189,7 @@ export function getPartitionKeysList(
187
189
  }
188
190
 
189
191
  function getUniquePartitionKeysForDataEntries(list: DataInfoEntries<unknown>): (string | number)[][] {
190
- if (list.type !== 'JsonPartitioned' && list.type !== 'BinaryPartitioned')
192
+ if (list.type !== 'JsonPartitioned' && list.type !== 'BinaryPartitioned' && list.type !== 'ParquetPartitioned')
191
193
  throw new Error(`Splitting requires Partitioned DataInfoEntries, got ${list.type}`);
192
194
 
193
195
  const { parts, partitionKeyLength } = list;
@@ -260,7 +262,7 @@ export function getUniquePartitionKeys(
260
262
  export function parsePColumnData(
261
263
  acc: TreeNodeAccessor | undefined,
262
264
  keyPrefix: PColumnKey = [],
263
- ): JsonPartitionedDataInfoEntries<TreeNodeAccessor> | BinaryPartitionedDataInfoEntries<TreeNodeAccessor> | undefined {
265
+ ): PartitionedDataInfoEntries<TreeNodeAccessor> | undefined {
264
266
  if (acc === undefined) return undefined;
265
267
 
266
268
  if (!acc.getIsReadyOrError()) return undefined;
@@ -270,7 +272,9 @@ export function parsePColumnData(
270
272
 
271
273
  // Prevent recursive super-partitioned resources
272
274
  if (keyPrefix.length > 0
273
- && (resourceType === RT_JSON_SUPER_PARTITIONED || resourceType === RT_BINARY_SUPER_PARTITIONED)) {
275
+ && (resourceType === RT_JSON_SUPER_PARTITIONED
276
+ || resourceType === RT_BINARY_SUPER_PARTITIONED
277
+ || resourceType === RT_PARQUET_SUPER_PARTITIONED)) {
274
278
  throw new Error(`Unexpected nested super-partitioned resource: ${resourceType}`);
275
279
  }
276
280
 
@@ -349,6 +353,27 @@ export function parsePColumnData(
349
353
  };
350
354
  }
351
355
 
356
+ case RT_PARQUET_PARTITIONED: {
357
+ if (typeof meta?.partitionKeyLength !== 'number') {
358
+ throw new Error(`Missing partitionKeyLength in metadata for ${resourceType}`);
359
+ }
360
+
361
+ const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];
362
+ for (const keyStr of acc.listInputFields()) {
363
+ const value = acc.resolve({ field: keyStr, assertFieldType: 'Input' });
364
+ if (value === undefined) return undefined;
365
+
366
+ const key = [...keyPrefix, ...JSON.parse(keyStr)];
367
+ parts.push({ key, value });
368
+ }
369
+
370
+ return {
371
+ type: 'ParquetPartitioned',
372
+ partitionKeyLength: meta.partitionKeyLength,
373
+ parts,
374
+ };
375
+ }
376
+
352
377
  case RT_JSON_SUPER_PARTITIONED: {
353
378
  if (typeof meta?.superPartitionKeyLength !== 'number'
354
379
  || typeof meta?.partitionKeyLength !== 'number') {
@@ -421,6 +446,42 @@ export function parsePColumnData(
421
446
  };
422
447
  }
423
448
 
449
+ case RT_PARQUET_SUPER_PARTITIONED: {
450
+ if (typeof meta?.superPartitionKeyLength !== 'number'
451
+ || typeof meta?.partitionKeyLength !== 'number') {
452
+ throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${resourceType}`);
453
+ }
454
+
455
+ const totalKeyLength = meta.superPartitionKeyLength + meta.partitionKeyLength;
456
+ const parts: PColumnDataEntry<TreeNodeAccessor>[] = [];
457
+
458
+ // Process all super partitions
459
+ for (const supKeyStr of acc.listInputFields()) {
460
+ const superPartition = acc.resolve({ field: supKeyStr, assertFieldType: 'Input' });
461
+ if (superPartition === undefined) return undefined;
462
+
463
+ // Validate inner type
464
+ if (superPartition.resourceType.name !== RT_PARQUET_PARTITIONED) {
465
+ throw new Error(`Expected ${RT_PARQUET_PARTITIONED} inside ${resourceType}, but got ${superPartition.resourceType.name}`);
466
+ }
467
+
468
+ const innerResult = parsePColumnData(superPartition, JSON.parse(supKeyStr) as PColumnKey);
469
+
470
+ if (innerResult === undefined) return undefined;
471
+
472
+ if (innerResult.type !== 'ParquetPartitioned')
473
+ throw new Error(`Unexpected inner result type for ${resourceType}: ${innerResult.type}`);
474
+
475
+ parts.push(...innerResult.parts);
476
+ }
477
+
478
+ return {
479
+ type: 'ParquetPartitioned',
480
+ partitionKeyLength: totalKeyLength,
481
+ parts,
482
+ };
483
+ }
484
+
424
485
  default:
425
486
  throw new Error(`Unknown resource type: ${resourceType}`);
426
487
  }