@milaboratories/pl-model-common 1.47.2 → 1.47.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"data_types.cjs","names":["ValueType"],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */\n readonly absent?: Uint8Array;\n};\n/** Table column data */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nexport function isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =\n | NA\n | PTableValueData<DataType>;\nexport type PTableValueBranded<\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =\n PTableValueData<DataType>;\n\nfunction pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillNA, DataType>;\nexport function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillNA, DataType>;\nexport function pTableValueBranded<\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n\n/** Supported formats for PTable file download. */\nexport type PTableDownloadFormat = \"csv\" | \"tsv\";\n\n/** Compression applied to the written file. */\nexport type PTableDownloadCompression = \"none\" | \"gzip\";\n\n/** Options for downloading PTable data to a file. */\nexport interface WritePTableToFsOptions {\n path: string;\n format: PTableDownloadFormat;\n columnIndices: number[];\n range?: TableRange;\n chunkSize?: number;\n includeHeader?: boolean;\n bom?: boolean;\n compression?: {\n type: \"gzip\";\n level?: number;\n };\n signal?: AbortSignal;\n}\n\n/** Result of a PTable file download. */\nexport interface WritePTableToFsResult {\n path: string;\n rowsWritten: number;\n bytesWritten: number;\n}\n\n/**\n * Maximum number of data rows allowed per sheet in an `xlsx` export, kept below\n * Excel's hard limit of 1,048,576. The driver rejects oversized `xlsx` exports\n * (see {@link PFrameDriver.exportPTable}); UIs use it to gate the `xlsx` option.\n */\nexport const XLSX_MAX_ROWS_PER_SHEET = 1_000_000;\n\n/** Options for {@link PFrameDriver.exportPTable}. */\nexport interface ExportPTableOptions {\n /** Destination file path; its extension selects the output format\n * (`csv`/`tsv`/`parquet`/`xlsx`). */\n path: string;\n /** Unified indices of the columns to export, in output order\n * (axes first, then data columns). */\n columnIndices: number[];\n}\n"],"mappings":";;AA4CA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,CAAC;CACxC,MAAM,OAAO,KAAM,IAAK,SAAS;CACjC,QAAQ,UAAU,cAAc,QAAQ;AAC1C;AAEA,SAAgB,UAAU,QAAsB,KAAsB;CACpE,IAAI,OAAO,MAAM,OAAO,SAAS,OAAO,MAAM,GAAG;CAGjD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAKA,aAAAA,UAAU,KACb,OAAQ,UAAqC;EAC/C,KAAKA,aAAAA,UAAU,MACb,OAAQ,UAAsC,CAAC;EACjD,KAAKA,aAAAA,UAAU,OACb,OAAO,OAAO,MAAM,KAAiC;EACvD,KAAKA,aAAAA,UAAU,QACb,OAAO,OAAO,MAAM,KAAkC;EACxD,KAAKA,aAAAA,UAAU,QACb,OAAQ,UAAwC;EAClD,KAAKA,aAAAA,UAAU,OACb,OAAQ,UAAuC;EACjD,SACE,MAAM,MAAM,0BAA0B,WAA2B;CACrE;AACF;AAEA,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;CAC5D,OAAO,UAAA;AACT;AAoCA,SAAS,gBACP,QACA,KACA,SAIA;CACA,MAAM,YAAY,OAAO;CACzB,IAAI,cAAcA,aAAAA,UAAU,OAC1B,MAAM,MAAM,yBAAyB;CAGvC,IACE,WACA,cAAc,WACd,QAAQ,aAAa,KAAA,KACrB,QAAQ,aAAa,WAErB,MAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,WAAW;CAG7E,IAAI,UAAU,QAAQ,GAAG,GACvB,OAAO,SAAS,OAAO,KAAA,IAAY,QAAQ,KAAA;CAG7C,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAKA,aAAAA,UAAU,KACb,OAAO;EACT,KAAKA,aAAAA,UAAU,MACb,OAAO,OAAO,KAAgC;EAChD,KAAKA,aAAAA,UAAU,OACb,OAAO;EACT,KAAKA,aAAAA,UAAU,QACb,OAAO;EACT,KAAKA,aAAAA,UAAU,QACb,OAAQ;CACZ;AACF;AAsBA,SAAgB,YACd,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;AAqBA,SAAgB,mBAId,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;;;;;;AAsDA,MAAa,0BAA0B"}
1
+ {"version":3,"file":"data_types.cjs","names":["ValueType"],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */\n readonly absent?: Uint8Array;\n};\n/** Table column data */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nexport function isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =\n | NA\n | PTableValueData<DataType>;\nexport type PTableValueBranded<\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =\n PTableValueData<DataType>;\n\nfunction pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillNA, DataType>;\nexport function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillNA, DataType>;\nexport function pTableValueBranded<\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n\n/** Supported formats for PTable file download. */\nexport type PTableDownloadFormat = \"csv\" | \"tsv\";\n\n/** Compression applied to the written file. */\nexport type PTableDownloadCompression = \"none\" | \"gzip\";\n\n/** Options for downloading PTable data to a file. */\nexport interface WritePTableToFsOptions {\n path: string;\n format: PTableDownloadFormat;\n columnIndices: number[];\n /**\n * Optional header names aligned 1:1 with {@link columnIndices}. When provided,\n * each is written verbatim — letting callers supply disambiguated labels the\n * spec's intrinsic `pl7.app/label` may not carry. When omitted (or an\n * individual entry is empty), the header falls back to the column's\n * spec-derived label.\n *\n * Additive on purpose: the UI (ui-vue) and the desktop-app runtime version\n * independently, so a newer UI must not send a shape an older runtime cannot\n * read. Older runtimes ignore this field and use {@link columnIndices} alone.\n */\n headerNames?: string[];\n range?: TableRange;\n chunkSize?: number;\n includeHeader?: boolean;\n bom?: boolean;\n compression?: {\n type: \"gzip\";\n level?: number;\n };\n signal?: AbortSignal;\n}\n\n/** Result of a PTable file download. */\nexport interface WritePTableToFsResult {\n path: string;\n rowsWritten: number;\n bytesWritten: number;\n}\n\n/**\n * Maximum number of data rows allowed per sheet in an `xlsx` export, kept below\n * Excel's hard limit of 1,048,576. The driver rejects oversized `xlsx` exports\n * (see {@link PFrameDriver.exportPTable}); UIs use it to gate the `xlsx` option.\n */\nexport const XLSX_MAX_ROWS_PER_SHEET = 1_000_000;\n\n/** Options for {@link PFrameDriver.exportPTable}. */\nexport interface ExportPTableOptions {\n /** Destination file path; its extension selects the output format\n * (`csv`/`tsv`/`parquet`/`xlsx`). */\n path: string;\n /** Unified indices of the columns to export, in output order\n * (axes first, then data columns). */\n columnIndices: number[];\n /**\n * Optional header names aligned 1:1 with {@link columnIndices}. When provided,\n * each is written verbatim — letting callers supply disambiguated labels the\n * spec's intrinsic `pl7.app/label` may not carry. When omitted (or an\n * individual entry is empty), the header falls back to the column's\n * spec-derived label.\n *\n * Additive on purpose: the UI (ui-vue) and the desktop-app runtime version\n * independently, so a newer UI must not send a shape an older runtime cannot\n * read. Older runtimes ignore this field and use {@link columnIndices} alone.\n */\n headerNames?: string[];\n}\n"],"mappings":";;AA4CA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,CAAC;CACxC,MAAM,OAAO,KAAM,IAAK,SAAS;CACjC,QAAQ,UAAU,cAAc,QAAQ;AAC1C;AAEA,SAAgB,UAAU,QAAsB,KAAsB;CACpE,IAAI,OAAO,MAAM,OAAO,SAAS,OAAO,MAAM,GAAG;CAGjD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAKA,aAAAA,UAAU,KACb,OAAQ,UAAqC;EAC/C,KAAKA,aAAAA,UAAU,MACb,OAAQ,UAAsC,CAAC;EACjD,KAAKA,aAAAA,UAAU,OACb,OAAO,OAAO,MAAM,KAAiC;EACvD,KAAKA,aAAAA,UAAU,QACb,OAAO,OAAO,MAAM,KAAkC;EACxD,KAAKA,aAAAA,UAAU,QACb,OAAQ,UAAwC;EAClD,KAAKA,aAAAA,UAAU,OACb,OAAQ,UAAuC;EACjD,SACE,MAAM,MAAM,0BAA0B,WAA2B;CACrE;AACF;AAEA,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;CAC5D,OAAO,UAAA;AACT;AAoCA,SAAS,gBACP,QACA,KACA,SAIA;CACA,MAAM,YAAY,OAAO;CACzB,IAAI,cAAcA,aAAAA,UAAU,OAC1B,MAAM,MAAM,yBAAyB;CAGvC,IACE,WACA,cAAc,WACd,QAAQ,aAAa,KAAA,KACrB,QAAQ,aAAa,WAErB,MAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,WAAW;CAG7E,IAAI,UAAU,QAAQ,GAAG,GACvB,OAAO,SAAS,OAAO,KAAA,IAAY,QAAQ,KAAA;CAG7C,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAKA,aAAAA,UAAU,KACb,OAAO;EACT,KAAKA,aAAAA,UAAU,MACb,OAAO,OAAO,KAAgC;EAChD,KAAKA,aAAAA,UAAU,OACb,OAAO;EACT,KAAKA,aAAAA,UAAU,QACb,OAAO;EACT,KAAKA,aAAAA,UAAU,QACb,OAAQ;CACZ;AACF;AAsBA,SAAgB,YACd,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;AAqBA,SAAgB,mBAId,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;;;;;;AAkEA,MAAa,0BAA0B"}
@@ -75,6 +75,18 @@ interface WritePTableToFsOptions {
75
75
  path: string;
76
76
  format: PTableDownloadFormat;
77
77
  columnIndices: number[];
78
+ /**
79
+ * Optional header names aligned 1:1 with {@link columnIndices}. When provided,
80
+ * each is written verbatim — letting callers supply disambiguated labels the
81
+ * spec's intrinsic `pl7.app/label` may not carry. When omitted (or an
82
+ * individual entry is empty), the header falls back to the column's
83
+ * spec-derived label.
84
+ *
85
+ * Additive on purpose: the UI (ui-vue) and the desktop-app runtime version
86
+ * independently, so a newer UI must not send a shape an older runtime cannot
87
+ * read. Older runtimes ignore this field and use {@link columnIndices} alone.
88
+ */
89
+ headerNames?: string[];
78
90
  range?: TableRange;
79
91
  chunkSize?: number;
80
92
  includeHeader?: boolean;
@@ -105,6 +117,18 @@ interface ExportPTableOptions {
105
117
  /** Unified indices of the columns to export, in output order
106
118
  * (axes first, then data columns). */
107
119
  columnIndices: number[];
120
+ /**
121
+ * Optional header names aligned 1:1 with {@link columnIndices}. When provided,
122
+ * each is written verbatim — letting callers supply disambiguated labels the
123
+ * spec's intrinsic `pl7.app/label` may not carry. When omitted (or an
124
+ * individual entry is empty), the header falls back to the column's
125
+ * spec-derived label.
126
+ *
127
+ * Additive on purpose: the UI (ui-vue) and the desktop-app runtime version
128
+ * independently, so a newer UI must not send a shape an older runtime cannot
129
+ * read. Older runtimes ignore this field and use {@link columnIndices} alone.
130
+ */
131
+ headerNames?: string[];
108
132
  }
109
133
  //#endregion
110
134
  export { ExportPTableOptions, PTableDownloadCompression, PTableDownloadFormat, PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, WritePTableToFsOptions, WritePTableToFsResult, XLSX_MAX_ROWS_PER_SHEET, isPTableNA, isValueNA, pTableValue, pTableValueBranded };
@@ -1 +1 @@
1
- {"version":3,"file":"data_types.d.ts","names":[],"sources":["../../../src/drivers/pframe/data_types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"data_types.d.ts","names":[],"sources":["../../../src/drivers/pframe/data_types.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"data_types.js","names":[],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */\n readonly absent?: Uint8Array;\n};\n/** Table column data */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nexport function isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =\n | NA\n | PTableValueData<DataType>;\nexport type PTableValueBranded<\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =\n PTableValueData<DataType>;\n\nfunction pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillNA, DataType>;\nexport function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillNA, DataType>;\nexport function pTableValueBranded<\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n\n/** Supported formats for PTable file download. */\nexport type PTableDownloadFormat = \"csv\" | \"tsv\";\n\n/** Compression applied to the written file. */\nexport type PTableDownloadCompression = \"none\" | \"gzip\";\n\n/** Options for downloading PTable data to a file. */\nexport interface WritePTableToFsOptions {\n path: string;\n format: PTableDownloadFormat;\n columnIndices: number[];\n range?: TableRange;\n chunkSize?: number;\n includeHeader?: boolean;\n bom?: boolean;\n compression?: {\n type: \"gzip\";\n level?: number;\n };\n signal?: AbortSignal;\n}\n\n/** Result of a PTable file download. */\nexport interface WritePTableToFsResult {\n path: string;\n rowsWritten: number;\n bytesWritten: number;\n}\n\n/**\n * Maximum number of data rows allowed per sheet in an `xlsx` export, kept below\n * Excel's hard limit of 1,048,576. The driver rejects oversized `xlsx` exports\n * (see {@link PFrameDriver.exportPTable}); UIs use it to gate the `xlsx` option.\n */\nexport const XLSX_MAX_ROWS_PER_SHEET = 1_000_000;\n\n/** Options for {@link PFrameDriver.exportPTable}. */\nexport interface ExportPTableOptions {\n /** Destination file path; its extension selects the output format\n * (`csv`/`tsv`/`parquet`/`xlsx`). */\n path: string;\n /** Unified indices of the columns to export, in output order\n * (axes first, then data columns). */\n columnIndices: number[];\n}\n"],"mappings":";;AA4CA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,CAAC;CACxC,MAAM,OAAO,KAAM,IAAK,SAAS;CACjC,QAAQ,UAAU,cAAc,QAAQ;AAC1C;AAEA,SAAgB,UAAU,QAAsB,KAAsB;CACpE,IAAI,OAAO,MAAM,OAAO,SAAS,OAAO,MAAM,GAAG;CAGjD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAK,UAAU,KACb,OAAQ,UAAqC;EAC/C,KAAK,UAAU,MACb,OAAQ,UAAsC,CAAC;EACjD,KAAK,UAAU,OACb,OAAO,OAAO,MAAM,KAAiC;EACvD,KAAK,UAAU,QACb,OAAO,OAAO,MAAM,KAAkC;EACxD,KAAK,UAAU,QACb,OAAQ,UAAwC;EAClD,KAAK,UAAU,OACb,OAAQ,UAAuC;EACjD,SACE,MAAM,MAAM,0BAA0B,WAA2B;CACrE;AACF;AAEA,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;CAC5D,OAAO,UAAA;AACT;AAoCA,SAAS,gBACP,QACA,KACA,SAIA;CACA,MAAM,YAAY,OAAO;CACzB,IAAI,cAAc,UAAU,OAC1B,MAAM,MAAM,yBAAyB;CAGvC,IACE,WACA,cAAc,WACd,QAAQ,aAAa,KAAA,KACrB,QAAQ,aAAa,WAErB,MAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,WAAW;CAG7E,IAAI,UAAU,QAAQ,GAAG,GACvB,OAAO,SAAS,OAAO,KAAA,IAAY,QAAQ,KAAA;CAG7C,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAK,UAAU,KACb,OAAO;EACT,KAAK,UAAU,MACb,OAAO,OAAO,KAAgC;EAChD,KAAK,UAAU,OACb,OAAO;EACT,KAAK,UAAU,QACb,OAAO;EACT,KAAK,UAAU,QACb,OAAQ;CACZ;AACF;AAsBA,SAAgB,YACd,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;AAqBA,SAAgB,mBAId,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;;;;;;AAsDA,MAAa,0BAA0B"}
1
+ {"version":3,"file":"data_types.js","names":[],"sources":["../../../src/drivers/pframe/data_types.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport { ValueType } from \"./spec/spec\";\n\nexport type PVectorDataInt = Int32Array;\nexport type PVectorDataLong = BigInt64Array;\nexport type PVectorDataFloat = Float32Array;\nexport type PVectorDataDouble = Float64Array;\nexport type PVectorDataString = (null | string)[];\nexport type PVectorDataBytes = (null | Uint8Array)[];\nexport type PVectorDataTyped<DataType extends ValueType> = DataType extends typeof ValueType.Int\n ? PVectorDataInt\n : DataType extends typeof ValueType.Long\n ? PVectorDataLong\n : DataType extends typeof ValueType.Float\n ? PVectorDataFloat\n : DataType extends typeof ValueType.Double\n ? PVectorDataDouble\n : DataType extends typeof ValueType.String\n ? PVectorDataString\n : DataType extends typeof ValueType.Bytes\n ? PVectorDataBytes\n : never;\nexport type PVectorData = PVectorDataTyped<ValueType>;\n\nexport type PTableVectorTyped<DataType extends ValueType> = {\n /** Stored data type */\n readonly type: DataType;\n\n /** Values for present positions */\n readonly data: PVectorDataTyped<DataType>;\n\n /**\n * Encoded bit array marking some elements of this vector as NA,\n * call {@link bitSet} to read the data.\n * In old desktop versions NA values are encoded as magic values in data array.\n * */\n readonly isNA?: Uint8Array;\n\n /** @deprecated Always empty. Kept for backwards compatibility with old blocks. */\n readonly absent?: Uint8Array;\n};\n/** Table column data */\nexport type PTableVector = PTableVectorTyped<ValueType>;\n\nfunction isBitSet(bitVector: Uint8Array, offset: number): boolean {\n const chunkIndex = Math.floor(offset / 8);\n const mask = 1 << (7 - (offset % 8));\n return (bitVector[chunkIndex] & mask) > 0;\n}\n\nexport function isValueNA(vector: PTableVector, row: number): boolean {\n if (vector.isNA) return isBitSet(vector.isNA, row);\n\n // Check for legacy magic values to support old desktop versions\n const valueType = vector.type;\n const value = vector.data[row];\n switch (valueType) {\n case ValueType.Int:\n return (value as PVectorDataInt[number]) === -2147483648;\n case ValueType.Long:\n return (value as PVectorDataLong[number]) === -9007199254740991n;\n case ValueType.Float:\n return Number.isNaN(value as PVectorDataFloat[number]);\n case ValueType.Double:\n return Number.isNaN(value as PVectorDataDouble[number]);\n case ValueType.String:\n return (value as PVectorDataString[number]) === null;\n case ValueType.Bytes:\n return (value as PVectorDataBytes[number]) === null;\n default:\n throw Error(`unsupported data type: ${valueType satisfies never}`);\n }\n}\n\nexport const PTableNA = null;\nexport type PTableNA = typeof PTableNA;\n\n/** Type guard for NA value */\nexport function isPTableNA(value: unknown): value is PTableNA {\n return value === PTableNA;\n}\n\nexport type ValueTypeSupported = Exclude<ValueType, typeof ValueType.Bytes>;\n\nexport type PTableValueInt = number;\nexport type PTableValueLong = number;\nexport type PTableValueFloat = number;\nexport type PTableValueDouble = number;\nexport type PTableValueString = string;\nexport type PTableValueData<DataType extends ValueTypeSupported> =\n DataType extends typeof ValueType.Int\n ? PTableValueInt\n : DataType extends typeof ValueType.Long\n ? PTableValueLong\n : DataType extends typeof ValueType.Float\n ? PTableValueFloat\n : DataType extends typeof ValueType.Double\n ? PTableValueDouble\n : DataType extends typeof ValueType.String\n ? PTableValueString\n : never;\nexport type PTableValueDataBranded<DataType extends ValueTypeSupported> = Branded<\n PTableValueData<DataType>,\n DataType\n>;\nexport type PTableValue<NA = PTableNA, DataType extends ValueTypeSupported = ValueTypeSupported> =\n | NA\n | PTableValueData<DataType>;\nexport type PTableValueBranded<\n NA = PTableNA,\n DataType extends ValueTypeSupported = ValueTypeSupported,\n> = NA | PTableValueDataBranded<DataType>;\n\nexport type PTableValueAxis<DataType extends ValueTypeSupported = ValueTypeSupported> =\n PTableValueData<DataType>;\n\nfunction pTableValueImpl<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n const valueType = column.type;\n if (valueType === ValueType.Bytes) {\n throw Error(\"Bytes not yet supported\");\n }\n\n if (\n options &&\n \"dataType\" in options &&\n options.dataType !== undefined &&\n options.dataType !== valueType\n ) {\n throw Error(`expected column of type ${options.dataType}, got ${valueType}`);\n }\n\n if (isValueNA(column, row)) {\n return options?.na !== undefined ? options.na : PTableNA;\n }\n\n const value = column.data[row]!;\n switch (valueType) {\n case ValueType.Int:\n return value as PVectorDataInt[number];\n case ValueType.Long:\n return Number(value as PVectorDataLong[number]);\n case ValueType.Float:\n return value as PVectorDataFloat[number];\n case ValueType.Double:\n return value as PVectorDataDouble[number];\n case ValueType.String:\n return (value as PVectorDataString[number])!;\n }\n}\n\n/** Read PTableValue from PTable column at specified row */\nexport function pTableValue<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValue<PTableNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValue<FillNA, DataType> : never;\nexport function pTableValue<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValue<FillNA, DataType>;\nexport function pTableValue<FillNA = PTableNA, DataType extends ValueType = ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\nexport function pTableValueBranded<DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n): DataType extends ValueTypeSupported ? PTableValueBranded<PTableNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueType>(\n column: PTableVectorTyped<DataType>,\n row: number,\n options: {\n na: FillNA;\n },\n): DataType extends ValueTypeSupported ? PTableValueBranded<FillNA, DataType> : never;\nexport function pTableValueBranded<FillNA, DataType extends ValueTypeSupported>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options: {\n na: FillNA;\n dataType: DataType;\n },\n): PTableValueBranded<FillNA, DataType>;\nexport function pTableValueBranded<\n FillNA = PTableNA,\n DataType extends ValueType = ValueTypeSupported,\n>(\n column: PTableVectorTyped<ValueType>,\n row: number,\n options?: {\n na?: FillNA;\n dataType?: DataType;\n },\n) {\n return pTableValueImpl(column, row, options);\n}\n\n/** Used in requests to partially retrieve table's data */\nexport type TableRange = {\n /** Index of the first record to retrieve */\n readonly offset: number;\n\n /** Block length */\n readonly length: number;\n};\n\n/** Unified information about table shape */\nexport type PTableShape = {\n /** Number of unified table columns, including all axes and PColumn values */\n columns: number;\n\n /** Number of rows */\n rows: number;\n};\n\n/** Supported formats for PTable file download. */\nexport type PTableDownloadFormat = \"csv\" | \"tsv\";\n\n/** Compression applied to the written file. */\nexport type PTableDownloadCompression = \"none\" | \"gzip\";\n\n/** Options for downloading PTable data to a file. */\nexport interface WritePTableToFsOptions {\n path: string;\n format: PTableDownloadFormat;\n columnIndices: number[];\n /**\n * Optional header names aligned 1:1 with {@link columnIndices}. When provided,\n * each is written verbatim — letting callers supply disambiguated labels the\n * spec's intrinsic `pl7.app/label` may not carry. When omitted (or an\n * individual entry is empty), the header falls back to the column's\n * spec-derived label.\n *\n * Additive on purpose: the UI (ui-vue) and the desktop-app runtime version\n * independently, so a newer UI must not send a shape an older runtime cannot\n * read. Older runtimes ignore this field and use {@link columnIndices} alone.\n */\n headerNames?: string[];\n range?: TableRange;\n chunkSize?: number;\n includeHeader?: boolean;\n bom?: boolean;\n compression?: {\n type: \"gzip\";\n level?: number;\n };\n signal?: AbortSignal;\n}\n\n/** Result of a PTable file download. */\nexport interface WritePTableToFsResult {\n path: string;\n rowsWritten: number;\n bytesWritten: number;\n}\n\n/**\n * Maximum number of data rows allowed per sheet in an `xlsx` export, kept below\n * Excel's hard limit of 1,048,576. The driver rejects oversized `xlsx` exports\n * (see {@link PFrameDriver.exportPTable}); UIs use it to gate the `xlsx` option.\n */\nexport const XLSX_MAX_ROWS_PER_SHEET = 1_000_000;\n\n/** Options for {@link PFrameDriver.exportPTable}. */\nexport interface ExportPTableOptions {\n /** Destination file path; its extension selects the output format\n * (`csv`/`tsv`/`parquet`/`xlsx`). */\n path: string;\n /** Unified indices of the columns to export, in output order\n * (axes first, then data columns). */\n columnIndices: number[];\n /**\n * Optional header names aligned 1:1 with {@link columnIndices}. When provided,\n * each is written verbatim — letting callers supply disambiguated labels the\n * spec's intrinsic `pl7.app/label` may not carry. When omitted (or an\n * individual entry is empty), the header falls back to the column's\n * spec-derived label.\n *\n * Additive on purpose: the UI (ui-vue) and the desktop-app runtime version\n * independently, so a newer UI must not send a shape an older runtime cannot\n * read. Older runtimes ignore this field and use {@link columnIndices} alone.\n */\n headerNames?: string[];\n}\n"],"mappings":";;AA4CA,SAAS,SAAS,WAAuB,QAAyB;CAChE,MAAM,aAAa,KAAK,MAAM,SAAS,CAAC;CACxC,MAAM,OAAO,KAAM,IAAK,SAAS;CACjC,QAAQ,UAAU,cAAc,QAAQ;AAC1C;AAEA,SAAgB,UAAU,QAAsB,KAAsB;CACpE,IAAI,OAAO,MAAM,OAAO,SAAS,OAAO,MAAM,GAAG;CAGjD,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAK,UAAU,KACb,OAAQ,UAAqC;EAC/C,KAAK,UAAU,MACb,OAAQ,UAAsC,CAAC;EACjD,KAAK,UAAU,OACb,OAAO,OAAO,MAAM,KAAiC;EACvD,KAAK,UAAU,QACb,OAAO,OAAO,MAAM,KAAkC;EACxD,KAAK,UAAU,QACb,OAAQ,UAAwC;EAClD,KAAK,UAAU,OACb,OAAQ,UAAuC;EACjD,SACE,MAAM,MAAM,0BAA0B,WAA2B;CACrE;AACF;AAEA,MAAa,WAAW;;AAIxB,SAAgB,WAAW,OAAmC;CAC5D,OAAO,UAAA;AACT;AAoCA,SAAS,gBACP,QACA,KACA,SAIA;CACA,MAAM,YAAY,OAAO;CACzB,IAAI,cAAc,UAAU,OAC1B,MAAM,MAAM,yBAAyB;CAGvC,IACE,WACA,cAAc,WACd,QAAQ,aAAa,KAAA,KACrB,QAAQ,aAAa,WAErB,MAAM,MAAM,2BAA2B,QAAQ,SAAS,QAAQ,WAAW;CAG7E,IAAI,UAAU,QAAQ,GAAG,GACvB,OAAO,SAAS,OAAO,KAAA,IAAY,QAAQ,KAAA;CAG7C,MAAM,QAAQ,OAAO,KAAK;CAC1B,QAAQ,WAAR;EACE,KAAK,UAAU,KACb,OAAO;EACT,KAAK,UAAU,MACb,OAAO,OAAO,KAAgC;EAChD,KAAK,UAAU,OACb,OAAO;EACT,KAAK,UAAU,QACb,OAAO;EACT,KAAK,UAAU,QACb,OAAQ;CACZ;AACF;AAsBA,SAAgB,YACd,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;AAqBA,SAAgB,mBAId,QACA,KACA,SAIA;CACA,OAAO,gBAAgB,QAAQ,KAAK,OAAO;AAC7C;;;;;;AAkEA,MAAa,0BAA0B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-model-common",
3
- "version": "1.47.2",
3
+ "version": "1.47.3",
4
4
  "description": "Platforma SDK Model",
5
5
  "files": [
6
6
  "./dist/**/*",
@@ -28,8 +28,8 @@
28
28
  "typescript": "~5.9.3",
29
29
  "vitest": "^4.1.3",
30
30
  "@milaboratories/build-configs": "2.0.0",
31
- "@milaboratories/ts-configs": "1.3.1",
32
- "@milaboratories/ts-builder": "1.6.1"
31
+ "@milaboratories/ts-builder": "1.6.1",
32
+ "@milaboratories/ts-configs": "1.3.1"
33
33
  },
34
34
  "scripts": {
35
35
  "build": "ts-builder build --target node",
@@ -248,6 +248,18 @@ export interface WritePTableToFsOptions {
248
248
  path: string;
249
249
  format: PTableDownloadFormat;
250
250
  columnIndices: number[];
251
+ /**
252
+ * Optional header names aligned 1:1 with {@link columnIndices}. When provided,
253
+ * each is written verbatim — letting callers supply disambiguated labels the
254
+ * spec's intrinsic `pl7.app/label` may not carry. When omitted (or an
255
+ * individual entry is empty), the header falls back to the column's
256
+ * spec-derived label.
257
+ *
258
+ * Additive on purpose: the UI (ui-vue) and the desktop-app runtime version
259
+ * independently, so a newer UI must not send a shape an older runtime cannot
260
+ * read. Older runtimes ignore this field and use {@link columnIndices} alone.
261
+ */
262
+ headerNames?: string[];
251
263
  range?: TableRange;
252
264
  chunkSize?: number;
253
265
  includeHeader?: boolean;
@@ -281,4 +293,16 @@ export interface ExportPTableOptions {
281
293
  /** Unified indices of the columns to export, in output order
282
294
  * (axes first, then data columns). */
283
295
  columnIndices: number[];
296
+ /**
297
+ * Optional header names aligned 1:1 with {@link columnIndices}. When provided,
298
+ * each is written verbatim — letting callers supply disambiguated labels the
299
+ * spec's intrinsic `pl7.app/label` may not carry. When omitted (or an
300
+ * individual entry is empty), the header falls back to the column's
301
+ * spec-derived label.
302
+ *
303
+ * Additive on purpose: the UI (ui-vue) and the desktop-app runtime version
304
+ * independently, so a newer UI must not send a shape an older runtime cannot
305
+ * read. Older runtimes ignore this field and use {@link columnIndices} alone.
306
+ */
307
+ headerNames?: string[];
284
308
  }