@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":";;;;KAGY,cAAA,GAAiB,UAAU;AAAA,KAC3B,eAAA,GAAkB,aAAa;AAAA,KAC/B,gBAAA,GAAmB,YAAY;AAAA,KAC/B,iBAAA,GAAoB,YAAY;AAAA,KAChC,iBAAA;AAAA,KACA,gBAAA,WAA2B,UAAU;AAAA,KACrC,gBAAA,kBAAkC,SAAA,IAAa,QAAA,gBAAwB,SAAA,CAAU,GAAA,GACzF,cAAA,GACA,QAAA,gBAAwB,SAAA,CAAU,IAAA,GAChC,eAAA,GACA,QAAA,gBAAwB,SAAA,CAAU,KAAA,GAChC,gBAAA,GACA,QAAA,gBAAwB,SAAA,CAAU,MAAA,GAChC,iBAAA,GACA,QAAA,gBAAwB,SAAA,CAAU,MAAA,GAChC,iBAAA,GACA,QAAA,gBAAwB,SAAA,CAAU,KAAA,GAChC,gBAAA;AAAA,KAEF,WAAA,GAAc,gBAAgB,CAAC,SAAA;AAAA,KAE/B,iBAAA,kBAAmC,SAAA;kCAEpC,IAAA,EAAM,QAAA,EAtB0B;EAAA,SAyBhC,IAAA,EAAM,gBAAA,CAAiB,QAAA;EAxBN;;;AAAe;AAC3C;EAD4B,SA+BjB,IAAA,GAAO,UAAA;WAGP,MAAA,GAAS,UAAA;AAAA;AAhCpB;AAAA,KAmCY,YAAA,GAAe,iBAAiB,CAAC,SAAA;AAAA,iBAQ7B,SAAA,CAAU,MAAA,EAAQ,YAAY,EAAE,GAAA;AAAA,cAwBnC,QAAA;AAAA,KACD,QAAA,UAAkB,QAAQ;AAnEtC;AAAA,iBAsEgB,UAAA,CAAW,KAAA,YAAiB,KAAA,IAAS,QAAQ;AAAA,KAIjD,kBAAA,GAAqB,OAAA,CAAQ,SAAA,SAAkB,SAAA,CAAU,KAAA;AAAA,KAEzD,cAAA;AAAA,KACA,eAAA;AAAA,KACA,gBAAA;AAAA,KACA,iBAAA;AAAA,KACA,iBAAA;AAAA,KACA,eAAA,kBAAiC,kBAAA,IAC3C,QAAA,gBAAwB,SAAA,CAAU,GAAA,GAC9B,cAAA,GACA,QAAA,gBAAwB,SAAA,CAAU,IAAA,GAChC,eAAA,GACA,QAAA,gBAAwB,SAAA,CAAU,KAAA,GAChC,gBAAA,GACA,QAAA,gBAAwB,SAAA,CAAU,MAAA,GAChC,iBAAA,GACA,QAAA,gBAAwB,SAAA,CAAU,MAAA,GAChC,iBAAA;AAAA,KAEF,sBAAA,kBAAwC,kBAAA,IAAsB,OAAA,CACxE,eAAA,CAAgB,QAAA,GAChB,QAAA;AAAA,KAEU,WAAA,MAAiB,QAAA,mBAA2B,kBAAA,GAAqB,kBAAA,IACzE,EAAA,GACA,eAAA,CAAgB,QAAA;AAAA,KACR,kBAAA,MACL,QAAA,mBACY,kBAAA,GAAqB,kBAAA,IACpC,EAAA,GAAK,sBAAA,CAAuB,QAAA;AAAA,KAEpB,eAAA,kBAAiC,kBAAA,GAAqB,kBAAA,IAChE,eAAA,CAAgB,QAAA;;iBA4CF,WAAA,kBAA6B,SAAA,EAC3C,MAAA,EAAQ,iBAAA,CAAkB,QAAA,GAC1B,GAAA,WACC,QAAA,SAAiB,kBAAA,GAAqB,WAAA,CAAY,QAAA,EAAU,QAAA;AAAA,iBAC/C,WAAA,0BAAqC,SAAA,EACnD,MAAA,EAAQ,iBAAA,CAAkB,QAAA,GAC1B,GAAA,UACA,OAAA;EACE,EAAA,EAAI,MAAA;AAAA,IAEL,QAAA,SAAiB,kBAAA,GAAqB,WAAA,CAAY,MAAA,EAAQ,QAAA;AAAA,iBAC7C,WAAA,0BAAqC,kBAAA,EACnD,MAAA,EAAQ,iBAAA,CAAkB,SAAA,GAC1B,GAAA,UACA,OAAA;EACE,EAAA,EAAI,MAAA;EACJ,QAAA,EAAU,QAAA;AAAA,IAEX,WAAA,CAAY,MAAA,EAAQ,QAAA;AAAA,iBAYP,kBAAA,kBAAoC,SAAA,EAClD,MAAA,EAAQ,iBAAA,CAAkB,QAAA,GAC1B,GAAA,WACC,QAAA,SAAiB,kBAAA,GAAqB,kBAAA,CAAmB,QAAA,EAAU,QAAA;AAAA,iBACtD,kBAAA,0BAA4C,SAAA,EAC1D,MAAA,EAAQ,iBAAA,CAAkB,QAAA,GAC1B,GAAA,UACA,OAAA;EACE,EAAA,EAAI,MAAA;AAAA,IAEL,QAAA,SAAiB,kBAAA,GAAqB,kBAAA,CAAmB,MAAA,EAAQ,QAAA;AAAA,iBACpD,kBAAA,0BAA4C,kBAAA,EAC1D,MAAA,EAAQ,iBAAA,CAAkB,SAAA,GAC1B,GAAA,UACA,OAAA;EACE,EAAA,EAAI,MAAA;EACJ,QAAA,EAAU,QAAA;AAAA,IAEX,kBAAA,CAAmB,MAAA,EAAQ,QAAA;;KAgBlB,UAAA;EArNuE,qDAuNxE,MAAA,UAtNP;EAAA,SAyNO,MAAM;AAAA;;KAIL,WAAA;EA1NN,6EA4NJ,OAAA,UA5NsC;EA+NtC,IAAI;AAAA;;KAIM,oBAAA;;KAGA,yBAAA;;UAGK,sBAAA;EACf,IAAA;EACA,MAAA,EAAQ,oBAAA;EACR,aAAA;EAtO4C;;;AAChB;AAE9B;;;;AAAoD;AAEpD;;EA6OE,WAAA;EACA,KAAA,GAAQ,UAAA;EACR,SAAA;EACA,aAAA;EACA,GAAA;EACA,WAAA;IACE,IAAA;IACA,KAAA;EAAA;EAEF,MAAA,GAAS,WAAA;AAAA;;UAIM,qBAAA;EACf,IAAA;EACA,WAAA;EACA,YAAA;AAAA;;;;;AA9O4B;cAsPjB,uBAAA;;UAGI,mBAAA;EAtPU;AAA2B;EAyPpD,IAAA;EAjPuB;;EAoPvB,aAAA;EApPgC;;;;AAAyB;AAwB3D;;;;AAA4B;AAC5B;EAuOE,WAAA;AAAA"}
|
|
@@ -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.
|
|
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-
|
|
32
|
-
"@milaboratories/ts-
|
|
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
|
}
|