@platforma-sdk/model 1.53.4 → 1.53.10

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":"PFrameForGraphs.cjs","sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type {\n AxisId,\n AxisSpecNormalized,\n CanonicalizedJson,\n PColumn,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n} from '@milaboratories/pl-model-common';\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec, LinkerMap,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n stringifyJson,\n} from '@milaboratories/pl-model-common';\nimport type { PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, RenderCtxBase } from '../render';\nimport { getAllRelatedColumns, getRelatedColumns } from '../pframe_utils/columns';\n\n/** Create id for column copy with added keys in axes domains */\nconst colId = (id: PObjectId, domains: (Record<string, string> | undefined)[]) => {\n let wid = id.toString();\n domains?.forEach((domain) => {\n if (domain) {\n for (const [k, v] of Object.entries(domain)) {\n wid += k;\n wid += v;\n }\n }\n });\n return wid;\n};\n\n/** All combinations with 1 key from each list */\nfunction getKeysCombinations(idsLists: AxisId[][]) {\n if (!idsLists.length) {\n return [];\n }\n let result: AxisId[][] = [[]];\n idsLists.forEach((list) => {\n const nextResult: AxisId[][] = [];\n list.forEach((key) => {\n nextResult.push(...result.map((resultItem) => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nexport function isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\nexport function isHiddenFromUIColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromUi);\n}\n\nexport type AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;\n\nexport function getAvailableWithLinkersAxes(\n linkerColumns: (PColumnEntryWithLabel | PColumnEntryUniversal)[],\n blockAxes: AxesVault,\n): AxesVault {\n const linkerMap = LinkerMap.fromColumns(linkerColumns.map(getColumnIdAndSpec));\n const availableAxes = linkerMap.getReachableByLinkersAxesFromAxesNormalized(\n [...blockAxes.values()],\n (linkerKeyId, sourceAxisId) => matchAxisId(sourceAxisId, linkerKeyId),\n );\n\n return new Map(availableAxes.map((axisSpec) => {\n const id = getAxisId(axisSpec);\n return [canonicalizeJson(id), axisSpec];\n }));\n}\n/** Add columns with fully compatible axes created from partial compatible ones */\nexport function enrichCompatible<T extends Omit<PColumn<PColumnDataUniversal>, 'data'>>(blockAxes: AxesVault, columns: T[]): T[] {\n return columns.flatMap((column) => getAdditionalColumnsForColumn(blockAxes, column));\n}\n\nfunction getAdditionalColumnsForColumn<T extends Omit<PColumn<PColumnDataUniversal>, 'data'>>(\n blockAxes: AxesVault,\n column: T,\n): T[] {\n const columnAxesIds = column.spec.axesSpec.map(getAxisId);\n\n if (columnAxesIds.every((id) => blockAxes.has(canonicalizeJson(id)))) {\n return [column]; // the column is compatible with its own domains without modifications\n }\n\n // options with different possible domains for every axis of secondary column\n const secondaryIdsOptions = columnAxesIds.map((id) => {\n const result = [];\n for (const [_, mainId] of blockAxes) {\n if (matchAxisId(mainId, id) && !matchAxisId(id, mainId)) {\n result.push(mainId);\n }\n }\n return result;\n });\n // all possible combinations of axes with added domains\n const secondaryIdsVariants = getKeysCombinations(secondaryIdsOptions);\n\n // sets of added to column domain fields\n const allAddedDomainValues = new Set<string>();\n const addedNotToAllVariantsDomainValues = new Set<string>();\n const addedByVariantsDomainValues = secondaryIdsVariants.map((idsList) => {\n const addedSet = new Set<string>();\n idsList.map((axisId, idx) => {\n const d1 = column.spec.axesSpec[idx].domain;\n const d2 = axisId.domain;\n Object.entries(d2 ?? {}).forEach(([key, value]) => {\n if (d1?.[key] === undefined) {\n const item = JSON.stringify([key, value]);\n addedSet.add(item);\n allAddedDomainValues.add(item);\n }\n });\n return ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n });\n });\n return addedSet;\n });\n [...allAddedDomainValues].forEach((addedPart) => {\n if (addedByVariantsDomainValues.some((s) => !s.has(addedPart))) {\n addedNotToAllVariantsDomainValues.add(addedPart);\n }\n });\n\n const additionalColumns = secondaryIdsVariants.map((idsList, idx) => {\n const id = colId(column.id, idsList.map((id) => id.domain));\n\n const label = readAnnotation(column.spec, Annotation.Label) ?? '';\n const labelDomainPart = ([...addedByVariantsDomainValues[idx]])\n .filter((str) => addedNotToAllVariantsDomainValues.has(str))\n .sort()\n .map((v) => JSON.parse(v)?.[1]) // use in labels only domain values, but sort them by key to save the same order in all column variants\n .join(' / ');\n\n const annotations: Annotation = {\n ...column.spec.annotations,\n [Annotation.Graph.IsVirtual]: stringifyJson(true),\n };\n if (label || labelDomainPart) {\n annotations[Annotation.Label] = label && labelDomainPart ? label + ' / ' + labelDomainPart : label + labelDomainPart;\n }\n\n return {\n ...column,\n id: id as PObjectId,\n spec: {\n ...column.spec,\n axesSpec: idsList.map((axisId, idx) => ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n })),\n annotations,\n },\n };\n });\n\n return [column, ...additionalColumns];\n}\n\n/**\n The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool\n (including linker columns and all label columns).\n Block’s columns are added to pframe as is.\n Other columns are added basing on set of axes of block’s columns, considering available with linker columns.\n Compatible columns must have at least one axis from block’s axes set. This axis of the compatible column from\n result pool must satisfy matchAxisId (it can have less domain keys than in block’s axis, but without conflicting values\n among existing ones).\n In requests to pframe (calculateTableData) columns must have strictly the same axes. For compatibility in case\n of partially matched axis we add to pframe a copy of this column with modified axis (with filled missed domains)\n and modified label (with added domain values in case if more than one copy with different domains exist).\n */\nexport function createPFrameForGraphs<A, U>(\n ctx: RenderCtxBase<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n const suitableSpec = (spec: PColumnSpec) => !isHiddenFromUIColumn(spec) && !isHiddenFromGraphColumn(spec);\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n return ctx.createPFrame(getAllRelatedColumns(ctx, suitableSpec));\n };\n\n return ctx.createPFrame(getRelatedColumns(ctx, { columns: blockColumns, predicate: suitableSpec }));\n}\n"],"names":["readAnnotationJson","Annotation","LinkerMap","getColumnIdAndSpec","matchAxisId","getAxisId","canonicalizeJson","readAnnotation","stringifyJson","getAllRelatedColumns","getRelatedColumns"],"mappings":"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"}
1
+ {"version":3,"file":"PFrameForGraphs.cjs","sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type {\n AxisId,\n AxisSpecNormalized,\n CanonicalizedJson,\n PColumn,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n} from '@milaboratories/pl-model-common';\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec, LinkerMap,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n stringifyJson,\n} from '@milaboratories/pl-model-common';\nimport type { PColumnDataUniversal, RenderCtxBase } from '../render';\nimport { getAllRelatedColumns, getRelatedColumns } from '../pframe_utils/columns';\n\n/** Create id for column copy with added keys in axes domains */\nconst colId = (id: PObjectId, domains: (Record<string, string> | undefined)[]) => {\n let wid = id.toString();\n domains?.forEach((domain) => {\n if (domain) {\n for (const [k, v] of Object.entries(domain)) {\n wid += k;\n wid += v;\n }\n }\n });\n return wid;\n};\n\n/** All combinations with 1 key from each list */\nfunction getKeysCombinations(idsLists: AxisId[][]) {\n if (!idsLists.length) {\n return [];\n }\n let result: AxisId[][] = [[]];\n idsLists.forEach((list) => {\n const nextResult: AxisId[][] = [];\n list.forEach((key) => {\n nextResult.push(...result.map((resultItem) => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nexport function isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\nexport function isHiddenFromUIColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromUi);\n}\n\nexport type AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;\n\nexport function getAvailableWithLinkersAxes(\n linkerColumns: (PColumn<PColumnDataUniversal>)[],\n blockAxes: AxesVault,\n): AxesVault {\n const linkerMap = LinkerMap.fromColumns(linkerColumns.map(getColumnIdAndSpec));\n const availableAxes = linkerMap.getReachableByLinkersAxesFromAxesNormalized(\n [...blockAxes.values()],\n (linkerKeyId, sourceAxisId) => matchAxisId(sourceAxisId, linkerKeyId),\n );\n\n return new Map(availableAxes.map((axisSpec) => {\n const id = getAxisId(axisSpec);\n return [canonicalizeJson(id), axisSpec];\n }));\n}\n/** Add columns with fully compatible axes created from partial compatible ones */\nexport function enrichCompatible<T extends Omit<PColumn<PColumnDataUniversal>, 'data'>>(blockAxes: AxesVault, columns: T[]): T[] {\n return columns.flatMap((column) => getAdditionalColumnsForColumn(blockAxes, column));\n}\n\nfunction getAdditionalColumnsForColumn<T extends Omit<PColumn<PColumnDataUniversal>, 'data'>>(\n blockAxes: AxesVault,\n column: T,\n): T[] {\n const columnAxesIds = column.spec.axesSpec.map(getAxisId);\n\n if (columnAxesIds.every((id) => blockAxes.has(canonicalizeJson(id)))) {\n return [column]; // the column is compatible with its own domains without modifications\n }\n\n // options with different possible domains for every axis of secondary column\n const secondaryIdsOptions = columnAxesIds.map((id) => {\n const result = [];\n for (const [_, mainId] of blockAxes) {\n if (matchAxisId(mainId, id) && !matchAxisId(id, mainId)) {\n result.push(mainId);\n }\n }\n return result;\n });\n // all possible combinations of axes with added domains\n const secondaryIdsVariants = getKeysCombinations(secondaryIdsOptions);\n\n // sets of added to column domain fields\n const allAddedDomainValues = new Set<string>();\n const addedNotToAllVariantsDomainValues = new Set<string>();\n const addedByVariantsDomainValues = secondaryIdsVariants.map((idsList) => {\n const addedSet = new Set<string>();\n idsList.map((axisId, idx) => {\n const d1 = column.spec.axesSpec[idx].domain;\n const d2 = axisId.domain;\n Object.entries(d2 ?? {}).forEach(([key, value]) => {\n if (d1?.[key] === undefined) {\n const item = JSON.stringify([key, value]);\n addedSet.add(item);\n allAddedDomainValues.add(item);\n }\n });\n return ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n });\n });\n return addedSet;\n });\n [...allAddedDomainValues].forEach((addedPart) => {\n if (addedByVariantsDomainValues.some((s) => !s.has(addedPart))) {\n addedNotToAllVariantsDomainValues.add(addedPart);\n }\n });\n\n const additionalColumns = secondaryIdsVariants.map((idsList, idx) => {\n const id = colId(column.id, idsList.map((id) => id.domain));\n\n const label = readAnnotation(column.spec, Annotation.Label) ?? '';\n const labelDomainPart = ([...addedByVariantsDomainValues[idx]])\n .filter((str) => addedNotToAllVariantsDomainValues.has(str))\n .sort()\n .map((v) => JSON.parse(v)?.[1]) // use in labels only domain values, but sort them by key to save the same order in all column variants\n .join(' / ');\n\n const annotations: Annotation = {\n ...column.spec.annotations,\n [Annotation.Graph.IsVirtual]: stringifyJson(true),\n };\n if (label || labelDomainPart) {\n annotations[Annotation.Label] = label && labelDomainPart ? label + ' / ' + labelDomainPart : label + labelDomainPart;\n }\n\n return {\n ...column,\n id: id as PObjectId,\n spec: {\n ...column.spec,\n axesSpec: idsList.map((axisId, idx) => ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n })),\n annotations,\n },\n };\n });\n\n return [column, ...additionalColumns];\n}\n\n/**\n The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool\n (including linker columns and all label columns).\n Block’s columns are added to pframe as is.\n Other columns are added basing on set of axes of block’s columns, considering available with linker columns.\n Compatible columns must have at least one axis from block’s axes set. This axis of the compatible column from\n result pool must satisfy matchAxisId (it can have less domain keys than in block’s axis, but without conflicting values\n among existing ones).\n In requests to pframe (calculateTableData) columns must have strictly the same axes. For compatibility in case\n of partially matched axis we add to pframe a copy of this column with modified axis (with filled missed domains)\n and modified label (with added domain values in case if more than one copy with different domains exist).\n */\nexport function createPFrameForGraphs<A, U>(\n ctx: RenderCtxBase<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n const suitableSpec = (spec: PColumnSpec) => !isHiddenFromUIColumn(spec) && !isHiddenFromGraphColumn(spec);\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n return ctx.createPFrame(getAllRelatedColumns(ctx, suitableSpec));\n };\n\n return ctx.createPFrame(getRelatedColumns(ctx, { columns: blockColumns, predicate: suitableSpec }));\n}\n"],"names":["readAnnotationJson","Annotation","LinkerMap","getColumnIdAndSpec","matchAxisId","getAxisId","canonicalizeJson","readAnnotation","stringifyJson","getAllRelatedColumns","getRelatedColumns"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import type { AxisId, AxisSpecNormalized, CanonicalizedJson, PColumn, PColumnSpec, PFrameHandle } from '@milaboratories/pl-model-common';
2
- import type { PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, RenderCtxBase } from '../render';
2
+ import type { PColumnDataUniversal, RenderCtxBase } from '../render';
3
3
  export declare function isHiddenFromGraphColumn(column: PColumnSpec): boolean;
4
4
  export declare function isHiddenFromUIColumn(column: PColumnSpec): boolean;
5
5
  export type AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;
6
- export declare function getAvailableWithLinkersAxes(linkerColumns: (PColumnEntryWithLabel | PColumnEntryUniversal)[], blockAxes: AxesVault): AxesVault;
6
+ export declare function getAvailableWithLinkersAxes(linkerColumns: (PColumn<PColumnDataUniversal>)[], blockAxes: AxesVault): AxesVault;
7
7
  /** Add columns with fully compatible axes created from partial compatible ones */
8
8
  export declare function enrichCompatible<T extends Omit<PColumn<PColumnDataUniversal>, 'data'>>(blockAxes: AxesVault, columns: T[]): T[];
9
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"PFrameForGraphs.d.ts","sourceRoot":"","sources":["../../src/components/PFrameForGraphs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,YAAY,EAEb,MAAM,iCAAiC,CAAC;AAWzC,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAiCnH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEpE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEjE;AAED,MAAM,MAAM,SAAS,GAAG,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAE3E,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,CAAC,qBAAqB,GAAG,qBAAqB,CAAC,EAAE,EAChE,SAAS,EAAE,SAAS,GACnB,SAAS,CAWX;AACD,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE/H;AAwFD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EACxC,GAAG,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EACxB,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,GAC7C,YAAY,GAAG,SAAS,CAQ1B"}
1
+ {"version":3,"file":"PFrameForGraphs.d.ts","sourceRoot":"","sources":["../../src/components/PFrameForGraphs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,YAAY,EAEb,MAAM,iCAAiC,CAAC;AAWzC,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAiCrE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEpE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEjE;AAED,MAAM,MAAM,SAAS,GAAG,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAE3E,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,EAChD,SAAS,EAAE,SAAS,GACnB,SAAS,CAWX;AACD,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE/H;AAwFD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EACxC,GAAG,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EACxB,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,GAC7C,YAAY,GAAG,SAAS,CAQ1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"PFrameForGraphs.js","sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type {\n AxisId,\n AxisSpecNormalized,\n CanonicalizedJson,\n PColumn,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n} from '@milaboratories/pl-model-common';\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec, LinkerMap,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n stringifyJson,\n} from '@milaboratories/pl-model-common';\nimport type { PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, RenderCtxBase } from '../render';\nimport { getAllRelatedColumns, getRelatedColumns } from '../pframe_utils/columns';\n\n/** Create id for column copy with added keys in axes domains */\nconst colId = (id: PObjectId, domains: (Record<string, string> | undefined)[]) => {\n let wid = id.toString();\n domains?.forEach((domain) => {\n if (domain) {\n for (const [k, v] of Object.entries(domain)) {\n wid += k;\n wid += v;\n }\n }\n });\n return wid;\n};\n\n/** All combinations with 1 key from each list */\nfunction getKeysCombinations(idsLists: AxisId[][]) {\n if (!idsLists.length) {\n return [];\n }\n let result: AxisId[][] = [[]];\n idsLists.forEach((list) => {\n const nextResult: AxisId[][] = [];\n list.forEach((key) => {\n nextResult.push(...result.map((resultItem) => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nexport function isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\nexport function isHiddenFromUIColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromUi);\n}\n\nexport type AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;\n\nexport function getAvailableWithLinkersAxes(\n linkerColumns: (PColumnEntryWithLabel | PColumnEntryUniversal)[],\n blockAxes: AxesVault,\n): AxesVault {\n const linkerMap = LinkerMap.fromColumns(linkerColumns.map(getColumnIdAndSpec));\n const availableAxes = linkerMap.getReachableByLinkersAxesFromAxesNormalized(\n [...blockAxes.values()],\n (linkerKeyId, sourceAxisId) => matchAxisId(sourceAxisId, linkerKeyId),\n );\n\n return new Map(availableAxes.map((axisSpec) => {\n const id = getAxisId(axisSpec);\n return [canonicalizeJson(id), axisSpec];\n }));\n}\n/** Add columns with fully compatible axes created from partial compatible ones */\nexport function enrichCompatible<T extends Omit<PColumn<PColumnDataUniversal>, 'data'>>(blockAxes: AxesVault, columns: T[]): T[] {\n return columns.flatMap((column) => getAdditionalColumnsForColumn(blockAxes, column));\n}\n\nfunction getAdditionalColumnsForColumn<T extends Omit<PColumn<PColumnDataUniversal>, 'data'>>(\n blockAxes: AxesVault,\n column: T,\n): T[] {\n const columnAxesIds = column.spec.axesSpec.map(getAxisId);\n\n if (columnAxesIds.every((id) => blockAxes.has(canonicalizeJson(id)))) {\n return [column]; // the column is compatible with its own domains without modifications\n }\n\n // options with different possible domains for every axis of secondary column\n const secondaryIdsOptions = columnAxesIds.map((id) => {\n const result = [];\n for (const [_, mainId] of blockAxes) {\n if (matchAxisId(mainId, id) && !matchAxisId(id, mainId)) {\n result.push(mainId);\n }\n }\n return result;\n });\n // all possible combinations of axes with added domains\n const secondaryIdsVariants = getKeysCombinations(secondaryIdsOptions);\n\n // sets of added to column domain fields\n const allAddedDomainValues = new Set<string>();\n const addedNotToAllVariantsDomainValues = new Set<string>();\n const addedByVariantsDomainValues = secondaryIdsVariants.map((idsList) => {\n const addedSet = new Set<string>();\n idsList.map((axisId, idx) => {\n const d1 = column.spec.axesSpec[idx].domain;\n const d2 = axisId.domain;\n Object.entries(d2 ?? {}).forEach(([key, value]) => {\n if (d1?.[key] === undefined) {\n const item = JSON.stringify([key, value]);\n addedSet.add(item);\n allAddedDomainValues.add(item);\n }\n });\n return ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n });\n });\n return addedSet;\n });\n [...allAddedDomainValues].forEach((addedPart) => {\n if (addedByVariantsDomainValues.some((s) => !s.has(addedPart))) {\n addedNotToAllVariantsDomainValues.add(addedPart);\n }\n });\n\n const additionalColumns = secondaryIdsVariants.map((idsList, idx) => {\n const id = colId(column.id, idsList.map((id) => id.domain));\n\n const label = readAnnotation(column.spec, Annotation.Label) ?? '';\n const labelDomainPart = ([...addedByVariantsDomainValues[idx]])\n .filter((str) => addedNotToAllVariantsDomainValues.has(str))\n .sort()\n .map((v) => JSON.parse(v)?.[1]) // use in labels only domain values, but sort them by key to save the same order in all column variants\n .join(' / ');\n\n const annotations: Annotation = {\n ...column.spec.annotations,\n [Annotation.Graph.IsVirtual]: stringifyJson(true),\n };\n if (label || labelDomainPart) {\n annotations[Annotation.Label] = label && labelDomainPart ? label + ' / ' + labelDomainPart : label + labelDomainPart;\n }\n\n return {\n ...column,\n id: id as PObjectId,\n spec: {\n ...column.spec,\n axesSpec: idsList.map((axisId, idx) => ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n })),\n annotations,\n },\n };\n });\n\n return [column, ...additionalColumns];\n}\n\n/**\n The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool\n (including linker columns and all label columns).\n Block’s columns are added to pframe as is.\n Other columns are added basing on set of axes of block’s columns, considering available with linker columns.\n Compatible columns must have at least one axis from block’s axes set. This axis of the compatible column from\n result pool must satisfy matchAxisId (it can have less domain keys than in block’s axis, but without conflicting values\n among existing ones).\n In requests to pframe (calculateTableData) columns must have strictly the same axes. For compatibility in case\n of partially matched axis we add to pframe a copy of this column with modified axis (with filled missed domains)\n and modified label (with added domain values in case if more than one copy with different domains exist).\n */\nexport function createPFrameForGraphs<A, U>(\n ctx: RenderCtxBase<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n const suitableSpec = (spec: PColumnSpec) => !isHiddenFromUIColumn(spec) && !isHiddenFromGraphColumn(spec);\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n return ctx.createPFrame(getAllRelatedColumns(ctx, suitableSpec));\n };\n\n return ctx.createPFrame(getRelatedColumns(ctx, { columns: blockColumns, predicate: suitableSpec }));\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PFrameForGraphs.js","sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type {\n AxisId,\n AxisSpecNormalized,\n CanonicalizedJson,\n PColumn,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n} from '@milaboratories/pl-model-common';\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec, LinkerMap,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n stringifyJson,\n} from '@milaboratories/pl-model-common';\nimport type { PColumnDataUniversal, RenderCtxBase } from '../render';\nimport { getAllRelatedColumns, getRelatedColumns } from '../pframe_utils/columns';\n\n/** Create id for column copy with added keys in axes domains */\nconst colId = (id: PObjectId, domains: (Record<string, string> | undefined)[]) => {\n let wid = id.toString();\n domains?.forEach((domain) => {\n if (domain) {\n for (const [k, v] of Object.entries(domain)) {\n wid += k;\n wid += v;\n }\n }\n });\n return wid;\n};\n\n/** All combinations with 1 key from each list */\nfunction getKeysCombinations(idsLists: AxisId[][]) {\n if (!idsLists.length) {\n return [];\n }\n let result: AxisId[][] = [[]];\n idsLists.forEach((list) => {\n const nextResult: AxisId[][] = [];\n list.forEach((key) => {\n nextResult.push(...result.map((resultItem) => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nexport function isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\nexport function isHiddenFromUIColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromUi);\n}\n\nexport type AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;\n\nexport function getAvailableWithLinkersAxes(\n linkerColumns: (PColumn<PColumnDataUniversal>)[],\n blockAxes: AxesVault,\n): AxesVault {\n const linkerMap = LinkerMap.fromColumns(linkerColumns.map(getColumnIdAndSpec));\n const availableAxes = linkerMap.getReachableByLinkersAxesFromAxesNormalized(\n [...blockAxes.values()],\n (linkerKeyId, sourceAxisId) => matchAxisId(sourceAxisId, linkerKeyId),\n );\n\n return new Map(availableAxes.map((axisSpec) => {\n const id = getAxisId(axisSpec);\n return [canonicalizeJson(id), axisSpec];\n }));\n}\n/** Add columns with fully compatible axes created from partial compatible ones */\nexport function enrichCompatible<T extends Omit<PColumn<PColumnDataUniversal>, 'data'>>(blockAxes: AxesVault, columns: T[]): T[] {\n return columns.flatMap((column) => getAdditionalColumnsForColumn(blockAxes, column));\n}\n\nfunction getAdditionalColumnsForColumn<T extends Omit<PColumn<PColumnDataUniversal>, 'data'>>(\n blockAxes: AxesVault,\n column: T,\n): T[] {\n const columnAxesIds = column.spec.axesSpec.map(getAxisId);\n\n if (columnAxesIds.every((id) => blockAxes.has(canonicalizeJson(id)))) {\n return [column]; // the column is compatible with its own domains without modifications\n }\n\n // options with different possible domains for every axis of secondary column\n const secondaryIdsOptions = columnAxesIds.map((id) => {\n const result = [];\n for (const [_, mainId] of blockAxes) {\n if (matchAxisId(mainId, id) && !matchAxisId(id, mainId)) {\n result.push(mainId);\n }\n }\n return result;\n });\n // all possible combinations of axes with added domains\n const secondaryIdsVariants = getKeysCombinations(secondaryIdsOptions);\n\n // sets of added to column domain fields\n const allAddedDomainValues = new Set<string>();\n const addedNotToAllVariantsDomainValues = new Set<string>();\n const addedByVariantsDomainValues = secondaryIdsVariants.map((idsList) => {\n const addedSet = new Set<string>();\n idsList.map((axisId, idx) => {\n const d1 = column.spec.axesSpec[idx].domain;\n const d2 = axisId.domain;\n Object.entries(d2 ?? {}).forEach(([key, value]) => {\n if (d1?.[key] === undefined) {\n const item = JSON.stringify([key, value]);\n addedSet.add(item);\n allAddedDomainValues.add(item);\n }\n });\n return ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n });\n });\n return addedSet;\n });\n [...allAddedDomainValues].forEach((addedPart) => {\n if (addedByVariantsDomainValues.some((s) => !s.has(addedPart))) {\n addedNotToAllVariantsDomainValues.add(addedPart);\n }\n });\n\n const additionalColumns = secondaryIdsVariants.map((idsList, idx) => {\n const id = colId(column.id, idsList.map((id) => id.domain));\n\n const label = readAnnotation(column.spec, Annotation.Label) ?? '';\n const labelDomainPart = ([...addedByVariantsDomainValues[idx]])\n .filter((str) => addedNotToAllVariantsDomainValues.has(str))\n .sort()\n .map((v) => JSON.parse(v)?.[1]) // use in labels only domain values, but sort them by key to save the same order in all column variants\n .join(' / ');\n\n const annotations: Annotation = {\n ...column.spec.annotations,\n [Annotation.Graph.IsVirtual]: stringifyJson(true),\n };\n if (label || labelDomainPart) {\n annotations[Annotation.Label] = label && labelDomainPart ? label + ' / ' + labelDomainPart : label + labelDomainPart;\n }\n\n return {\n ...column,\n id: id as PObjectId,\n spec: {\n ...column.spec,\n axesSpec: idsList.map((axisId, idx) => ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n })),\n annotations,\n },\n };\n });\n\n return [column, ...additionalColumns];\n}\n\n/**\n The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool\n (including linker columns and all label columns).\n Block’s columns are added to pframe as is.\n Other columns are added basing on set of axes of block’s columns, considering available with linker columns.\n Compatible columns must have at least one axis from block’s axes set. This axis of the compatible column from\n result pool must satisfy matchAxisId (it can have less domain keys than in block’s axis, but without conflicting values\n among existing ones).\n In requests to pframe (calculateTableData) columns must have strictly the same axes. For compatibility in case\n of partially matched axis we add to pframe a copy of this column with modified axis (with filled missed domains)\n and modified label (with added domain values in case if more than one copy with different domains exist).\n */\nexport function createPFrameForGraphs<A, U>(\n ctx: RenderCtxBase<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n const suitableSpec = (spec: PColumnSpec) => !isHiddenFromUIColumn(spec) && !isHiddenFromGraphColumn(spec);\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n return ctx.createPFrame(getAllRelatedColumns(ctx, suitableSpec));\n };\n\n return ctx.createPFrame(getRelatedColumns(ctx, { columns: blockColumns, predicate: suitableSpec }));\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.53.4";
3
+ var version = "1.53.10";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.map
@@ -1,4 +1,4 @@
1
- var version = "1.53.4";
1
+ var version = "1.53.10";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.js.map
@@ -11,7 +11,7 @@ function getAllRelatedColumns(ctx, predicate) {
11
11
  // if current block doesn't produce own columns then use all columns from result pool
12
12
  const columns = new column_collection.PColumnCollection();
13
13
  columns.addColumnProvider(ctx.resultPool);
14
- const allColumns = columns.getUniversalEntries(predicate, { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];
14
+ const allColumns = columns.getColumns(predicate, { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];
15
15
  const allAxes = new Map(allColumns
16
16
  .flatMap((column) => plModelCommon.getNormalizedAxesList(column.spec.axesSpec))
17
17
  .map((axisSpec) => {
@@ -39,7 +39,7 @@ function getRelatedColumns(ctx, { columns: rootColumns, predicate }) {
39
39
  }
40
40
  }
41
41
  // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden
42
- const linkerColumns = columns.getUniversalEntries((spec) => predicate(spec) && plModelCommon.isLinkerColumn(spec)) ?? [];
42
+ const linkerColumns = columns.getColumns((spec) => predicate(spec) && plModelCommon.isLinkerColumn(spec), { dontWaitAllData: true }) ?? [];
43
43
  const availableWithLinkersAxes = PFrameForGraphs.getAvailableWithLinkersAxes(linkerColumns, blockAxes);
44
44
  // all possible axes from connected linkers
45
45
  for (const item of availableWithLinkersAxes) {
@@ -48,7 +48,7 @@ function getRelatedColumns(ctx, { columns: rootColumns, predicate }) {
48
48
  }
49
49
  const blockAxesArr = Array.from(blockAxes.values());
50
50
  // all compatible with block columns but without label columns
51
- let compatibleWithoutLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
51
+ let compatibleWithoutLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
52
52
  const axisId = plModelCommon.getAxisId(axisSpec);
53
53
  return blockAxesArr.some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
54
54
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !plModelCommon.isLabelColumn(column.spec));
@@ -61,12 +61,12 @@ function getRelatedColumns(ctx, { columns: rootColumns, predicate }) {
61
61
  }
62
62
  const allAxesArr = Array.from(allAxes.values());
63
63
  // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)
64
- compatibleWithoutLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.every((axisSpec) => {
64
+ compatibleWithoutLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.every((axisSpec) => {
65
65
  const axisId = plModelCommon.getAxisId(axisSpec);
66
66
  return allAxesArr.some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
67
67
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !plModelCommon.isLabelColumn(column.spec));
68
68
  // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool
69
- const compatibleLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
69
+ const compatibleLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
70
70
  const axisId = plModelCommon.getAxisId(axisSpec);
71
71
  return allAxesArr.some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
72
72
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => plModelCommon.isLabelColumn(column.spec));
@@ -1 +1 @@
1
- {"version":3,"file":"columns.cjs","sources":["../../src/pframe_utils/columns.ts"],"sourcesContent":["import type { PColumn, PColumnSpec, PColumnLazy, PFrameDef } from '@milaboratories/pl-model-common';\nimport { getNormalizedAxesList, getAxisId, canonicalizeJson, isLinkerColumn, matchAxisId, isLabelColumn } from '@milaboratories/pl-model-common';\nimport type { AxesVault } from '../components';\nimport { enrichCompatible, getAvailableWithLinkersAxes } from '../components';\nimport type { RenderCtxBase, PColumnDataUniversal } from '../render';\nimport { PColumnCollection } from '../render';\n\nexport function getAllRelatedColumns<A, U>(\n ctx: RenderCtxBase<A, U>, predicate: (spec: PColumnSpec) => boolean,\n): PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>> {\n // if current block doesn't produce own columns then use all columns from result pool\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n const allColumns = columns.getUniversalEntries(predicate, { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];\n\n const allAxes: AxesVault = new Map(allColumns\n .flatMap((column) => getNormalizedAxesList(column.spec.axesSpec))\n .map((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return [canonicalizeJson(axisId), axisSpec];\n }));\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(allAxes, allColumns);\n\n return extendedColumns;\n}\n\nexport function getRelatedColumns<A, U>(ctx: RenderCtxBase<A, U>, { columns: rootColumns, predicate }: {\n columns: PColumn<PColumnDataUniversal>[];\n predicate: (spec: PColumnSpec) => boolean;\n}): PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>> {\n // if current block has its own columns then take from result pool only compatible with them\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n columns.addColumns(rootColumns);\n\n // all possible axes from block columns\n const blockAxes: AxesVault = new Map();\n // axes from block columns and compatible result pool columns\n const allAxes: AxesVault = new Map();\n for (const c of rootColumns) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n blockAxes.set(canonicalizeJson(aid), spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden\n const linkerColumns = columns.getUniversalEntries((spec) => predicate(spec) && isLinkerColumn(spec)) ?? [];\n const availableWithLinkersAxes = getAvailableWithLinkersAxes(linkerColumns, blockAxes);\n\n // all possible axes from connected linkers\n for (const item of availableWithLinkersAxes) {\n blockAxes.set(...item);\n allAxes.set(...item);\n }\n\n const blockAxesArr = Array.from(blockAxes.values());\n // all compatible with block columns but without label columns\n let compatibleWithoutLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return blockAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // extend axes set for label columns request\n for (const c of compatibleWithoutLabels) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n const allAxesArr = Array.from(allAxes.values());\n // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)\n compatibleWithoutLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.every((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool\n const compatibleLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));\n\n const compatible = [...compatibleWithoutLabels, ...compatibleLabels];\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(blockAxes, compatible);\n\n return extendedColumns;\n}\n"],"names":["PColumnCollection","getNormalizedAxesList","getAxisId","canonicalizeJson","enrichCompatible","isLinkerColumn","getAvailableWithLinkersAxes","matchAxisId","isLabelColumn"],"mappings":"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"}
1
+ {"version":3,"file":"columns.cjs","sources":["../../src/pframe_utils/columns.ts"],"sourcesContent":["import type { PColumn, PColumnSpec, PColumnLazy, PFrameDef } from '@milaboratories/pl-model-common';\nimport { getNormalizedAxesList, getAxisId, canonicalizeJson, isLinkerColumn, matchAxisId, isLabelColumn } from '@milaboratories/pl-model-common';\nimport type { AxesVault } from '../components';\nimport { enrichCompatible, getAvailableWithLinkersAxes } from '../components';\nimport type { RenderCtxBase, PColumnDataUniversal } from '../render';\nimport { PColumnCollection } from '../render';\n\nexport function getAllRelatedColumns<A, U>(\n ctx: RenderCtxBase<A, U>, predicate: (spec: PColumnSpec) => boolean,\n): PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>> {\n // if current block doesn't produce own columns then use all columns from result pool\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n const allColumns = columns.getColumns(predicate, { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];\n\n const allAxes: AxesVault = new Map(allColumns\n .flatMap((column) => getNormalizedAxesList(column.spec.axesSpec))\n .map((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return [canonicalizeJson(axisId), axisSpec];\n }));\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(allAxes, allColumns);\n\n return extendedColumns;\n}\n\nexport function getRelatedColumns<A, U>(ctx: RenderCtxBase<A, U>, { columns: rootColumns, predicate }: {\n columns: PColumn<PColumnDataUniversal>[];\n predicate: (spec: PColumnSpec) => boolean;\n}): PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>> {\n // if current block has its own columns then take from result pool only compatible with them\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n columns.addColumns(rootColumns);\n\n // all possible axes from block columns\n const blockAxes: AxesVault = new Map();\n // axes from block columns and compatible result pool columns\n const allAxes: AxesVault = new Map();\n for (const c of rootColumns) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n blockAxes.set(canonicalizeJson(aid), spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden\n const linkerColumns = columns.getColumns((spec) => predicate(spec) && isLinkerColumn(spec), { dontWaitAllData: true }) ?? [];\n const availableWithLinkersAxes = getAvailableWithLinkersAxes(linkerColumns, blockAxes);\n\n // all possible axes from connected linkers\n for (const item of availableWithLinkersAxes) {\n blockAxes.set(...item);\n allAxes.set(...item);\n }\n\n const blockAxesArr = Array.from(blockAxes.values());\n // all compatible with block columns but without label columns\n let compatibleWithoutLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return blockAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // extend axes set for label columns request\n for (const c of compatibleWithoutLabels) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n const allAxesArr = Array.from(allAxes.values());\n // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)\n compatibleWithoutLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.every((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool\n const compatibleLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));\n\n const compatible = [...compatibleWithoutLabels, ...compatibleLabels];\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(blockAxes, compatible);\n\n return extendedColumns;\n}\n"],"names":["PColumnCollection","getNormalizedAxesList","getAxisId","canonicalizeJson","enrichCompatible","isLinkerColumn","getAvailableWithLinkersAxes","matchAxisId","isLabelColumn"],"mappings":"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"}
@@ -9,7 +9,7 @@ function getAllRelatedColumns(ctx, predicate) {
9
9
  // if current block doesn't produce own columns then use all columns from result pool
10
10
  const columns = new PColumnCollection();
11
11
  columns.addColumnProvider(ctx.resultPool);
12
- const allColumns = columns.getUniversalEntries(predicate, { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];
12
+ const allColumns = columns.getColumns(predicate, { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];
13
13
  const allAxes = new Map(allColumns
14
14
  .flatMap((column) => getNormalizedAxesList(column.spec.axesSpec))
15
15
  .map((axisSpec) => {
@@ -37,7 +37,7 @@ function getRelatedColumns(ctx, { columns: rootColumns, predicate }) {
37
37
  }
38
38
  }
39
39
  // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden
40
- const linkerColumns = columns.getUniversalEntries((spec) => predicate(spec) && isLinkerColumn(spec)) ?? [];
40
+ const linkerColumns = columns.getColumns((spec) => predicate(spec) && isLinkerColumn(spec), { dontWaitAllData: true }) ?? [];
41
41
  const availableWithLinkersAxes = getAvailableWithLinkersAxes(linkerColumns, blockAxes);
42
42
  // all possible axes from connected linkers
43
43
  for (const item of availableWithLinkersAxes) {
@@ -46,7 +46,7 @@ function getRelatedColumns(ctx, { columns: rootColumns, predicate }) {
46
46
  }
47
47
  const blockAxesArr = Array.from(blockAxes.values());
48
48
  // all compatible with block columns but without label columns
49
- let compatibleWithoutLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
49
+ let compatibleWithoutLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
50
50
  const axisId = getAxisId(axisSpec);
51
51
  return blockAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
52
52
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));
@@ -59,12 +59,12 @@ function getRelatedColumns(ctx, { columns: rootColumns, predicate }) {
59
59
  }
60
60
  const allAxesArr = Array.from(allAxes.values());
61
61
  // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)
62
- compatibleWithoutLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.every((axisSpec) => {
62
+ compatibleWithoutLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.every((axisSpec) => {
63
63
  const axisId = getAxisId(axisSpec);
64
64
  return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
65
65
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));
66
66
  // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool
67
- const compatibleLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
67
+ const compatibleLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
68
68
  const axisId = getAxisId(axisSpec);
69
69
  return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
70
70
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));
@@ -1 +1 @@
1
- {"version":3,"file":"columns.js","sources":["../../src/pframe_utils/columns.ts"],"sourcesContent":["import type { PColumn, PColumnSpec, PColumnLazy, PFrameDef } from '@milaboratories/pl-model-common';\nimport { getNormalizedAxesList, getAxisId, canonicalizeJson, isLinkerColumn, matchAxisId, isLabelColumn } from '@milaboratories/pl-model-common';\nimport type { AxesVault } from '../components';\nimport { enrichCompatible, getAvailableWithLinkersAxes } from '../components';\nimport type { RenderCtxBase, PColumnDataUniversal } from '../render';\nimport { PColumnCollection } from '../render';\n\nexport function getAllRelatedColumns<A, U>(\n ctx: RenderCtxBase<A, U>, predicate: (spec: PColumnSpec) => boolean,\n): PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>> {\n // if current block doesn't produce own columns then use all columns from result pool\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n const allColumns = columns.getUniversalEntries(predicate, { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];\n\n const allAxes: AxesVault = new Map(allColumns\n .flatMap((column) => getNormalizedAxesList(column.spec.axesSpec))\n .map((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return [canonicalizeJson(axisId), axisSpec];\n }));\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(allAxes, allColumns);\n\n return extendedColumns;\n}\n\nexport function getRelatedColumns<A, U>(ctx: RenderCtxBase<A, U>, { columns: rootColumns, predicate }: {\n columns: PColumn<PColumnDataUniversal>[];\n predicate: (spec: PColumnSpec) => boolean;\n}): PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>> {\n // if current block has its own columns then take from result pool only compatible with them\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n columns.addColumns(rootColumns);\n\n // all possible axes from block columns\n const blockAxes: AxesVault = new Map();\n // axes from block columns and compatible result pool columns\n const allAxes: AxesVault = new Map();\n for (const c of rootColumns) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n blockAxes.set(canonicalizeJson(aid), spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden\n const linkerColumns = columns.getUniversalEntries((spec) => predicate(spec) && isLinkerColumn(spec)) ?? [];\n const availableWithLinkersAxes = getAvailableWithLinkersAxes(linkerColumns, blockAxes);\n\n // all possible axes from connected linkers\n for (const item of availableWithLinkersAxes) {\n blockAxes.set(...item);\n allAxes.set(...item);\n }\n\n const blockAxesArr = Array.from(blockAxes.values());\n // all compatible with block columns but without label columns\n let compatibleWithoutLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return blockAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // extend axes set for label columns request\n for (const c of compatibleWithoutLabels) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n const allAxesArr = Array.from(allAxes.values());\n // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)\n compatibleWithoutLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.every((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool\n const compatibleLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));\n\n const compatible = [...compatibleWithoutLabels, ...compatibleLabels];\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(blockAxes, compatible);\n\n return extendedColumns;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"columns.js","sources":["../../src/pframe_utils/columns.ts"],"sourcesContent":["import type { PColumn, PColumnSpec, PColumnLazy, PFrameDef } from '@milaboratories/pl-model-common';\nimport { getNormalizedAxesList, getAxisId, canonicalizeJson, isLinkerColumn, matchAxisId, isLabelColumn } from '@milaboratories/pl-model-common';\nimport type { AxesVault } from '../components';\nimport { enrichCompatible, getAvailableWithLinkersAxes } from '../components';\nimport type { RenderCtxBase, PColumnDataUniversal } from '../render';\nimport { PColumnCollection } from '../render';\n\nexport function getAllRelatedColumns<A, U>(\n ctx: RenderCtxBase<A, U>, predicate: (spec: PColumnSpec) => boolean,\n): PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>> {\n // if current block doesn't produce own columns then use all columns from result pool\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n const allColumns = columns.getColumns(predicate, { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];\n\n const allAxes: AxesVault = new Map(allColumns\n .flatMap((column) => getNormalizedAxesList(column.spec.axesSpec))\n .map((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return [canonicalizeJson(axisId), axisSpec];\n }));\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(allAxes, allColumns);\n\n return extendedColumns;\n}\n\nexport function getRelatedColumns<A, U>(ctx: RenderCtxBase<A, U>, { columns: rootColumns, predicate }: {\n columns: PColumn<PColumnDataUniversal>[];\n predicate: (spec: PColumnSpec) => boolean;\n}): PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>> {\n // if current block has its own columns then take from result pool only compatible with them\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n columns.addColumns(rootColumns);\n\n // all possible axes from block columns\n const blockAxes: AxesVault = new Map();\n // axes from block columns and compatible result pool columns\n const allAxes: AxesVault = new Map();\n for (const c of rootColumns) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n blockAxes.set(canonicalizeJson(aid), spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden\n const linkerColumns = columns.getColumns((spec) => predicate(spec) && isLinkerColumn(spec), { dontWaitAllData: true }) ?? [];\n const availableWithLinkersAxes = getAvailableWithLinkersAxes(linkerColumns, blockAxes);\n\n // all possible axes from connected linkers\n for (const item of availableWithLinkersAxes) {\n blockAxes.set(...item);\n allAxes.set(...item);\n }\n\n const blockAxesArr = Array.from(blockAxes.values());\n // all compatible with block columns but without label columns\n let compatibleWithoutLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return blockAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // extend axes set for label columns request\n for (const c of compatibleWithoutLabels) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n const allAxesArr = Array.from(allAxes.values());\n // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)\n compatibleWithoutLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.every((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool\n const compatibleLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));\n\n const compatible = [...compatibleWithoutLabels, ...compatibleLabels];\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(blockAxes, compatible);\n\n return extendedColumns;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.cjs","sources":["../../src/render/api.ts"],"sourcesContent":["import type {\n AnchoredPColumnSelector,\n AnyFunction,\n AxisId,\n DataInfo,\n Option,\n PColumn,\n PColumnLazy,\n PColumnSelector,\n PColumnSpec,\n PColumnValues,\n PFrameDef,\n PFrameHandle,\n PObject,\n PObjectId,\n PObjectSpec,\n PSpecPredicate,\n PTableDef,\n PTableHandle,\n PTableRecordFilter,\n PTableSorting,\n PlRef,\n ResolveAnchorsOptions,\n ResultCollection,\n SUniversalPColumnId,\n ValueOrError,\n} from '@milaboratories/pl-model-common';\nimport {\n AnchoredIdDeriver,\n ensurePColumn,\n extractAllColumns,\n isDataInfo,\n isPColumn,\n isPColumnSpec,\n isPlRef,\n mapDataInfo,\n mapPObjectData,\n mapPTableDef,\n mapValueInVOE,\n PColumnName,\n readAnnotation,\n selectorsToPredicate,\n withEnrichments,\n} from '@milaboratories/pl-model-common';\nimport canonicalize from 'canonicalize';\nimport type { Optional } from 'utility-types';\nimport { getCfgRenderCtx } from '../internal';\nimport { TreeNodeAccessor, ifDef } from './accessor';\nimport type { FutureRef } from './future';\nimport type { AccessorHandle, GlobalCfgRenderCtx } from './internal';\nimport { MainAccessorName, StagingAccessorName } from './internal';\nimport { PColumnCollection, type AxisLabelProvider, type ColumnProvider } from './util/column_collection';\nimport type { LabelDerivationOps } from './util/label';\nimport { deriveLabels } from './util/label';\nimport type { APColumnSelectorWithSplit } from './util/split_selectors';\nimport { patchInSetFilters } from './util/pframe_upgraders';\nimport { allPColumnsReady } from './util/pcolumn_data';\n\nexport type PColumnDataUniversal<TreeEntry = TreeNodeAccessor> = TreeEntry | DataInfo<TreeEntry> | PColumnValues;\n\n/**\n * Helper function to match domain objects\n * @param query Optional domain to match against\n * @param target Optional domain to match\n * @returns true if domains match, false otherwise\n */\nfunction matchDomain(query?: Record<string, string>, target?: Record<string, string>) {\n if (query === undefined) return target === undefined;\n if (target === undefined) return true;\n for (const k in target) {\n if (query[k] !== target[k]) return false;\n }\n return true;\n}\n\nexport type UniversalColumnOption = { label: string; value: SUniversalPColumnId };\n\n/**\n * Transforms PColumn data into the internal representation expected by the platform\n * @param data Data from a PColumn to transform\n * @returns Transformed data compatible with platform API\n */\nfunction transformPColumnData(\n data: PColumn<PColumnDataUniversal> | PColumnLazy<PColumnDataUniversal>,\n): PColumn<PColumnValues | AccessorHandle | DataInfo<AccessorHandle>> {\n return mapPObjectData(data, (d) => {\n if (d instanceof TreeNodeAccessor) {\n return d.handle;\n } else if (isDataInfo(d)) {\n return mapDataInfo(d, (accessor) => accessor.handle);\n } else {\n return d;\n }\n });\n}\n\ntype UniversalPColumnOpts = {\n labelOps?: LabelDerivationOps;\n dontWaitAllData?: boolean;\n exclude?: AnchoredPColumnSelector | AnchoredPColumnSelector[];\n} & ResolveAnchorsOptions;\n\ntype GetOptionsOpts = {\n /**\n * If true, references returned by the method will contain `requireEnrichments` flag set to true.\n * If this reference is added to the block's args, it will communicate to the platform that the block\n * expects enrichments of the referenced block to be available in the context of the current block.\n */\n refsWithEnrichments?: boolean;\n /**\n * Label derivation options.\n * If provided, it will be used to derive labels for the options.\n * If not provided, labels will be derived using the default logic.\n */\n label?: ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps;\n};\n\nexport class ResultPool implements ColumnProvider, AxisLabelProvider {\n private readonly ctx: GlobalCfgRenderCtx = getCfgRenderCtx();\n\n /**\n * @deprecated use getOptions()\n */\n public calculateOptions(predicate: PSpecPredicate): Option[] {\n return this.ctx.calculateOptions(predicate);\n }\n\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n opts?: GetOptionsOpts,\n ): Option[];\n /** @deprecated wrap label ops with { label: <...> } */\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n label?: ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps,\n ): Option[];\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n opts?: GetOptionsOpts | ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps,\n ): Option[] {\n const predicate = typeof predicateOrSelector === 'function'\n ? predicateOrSelector\n : selectorsToPredicate(predicateOrSelector);\n const filtered = this.getSpecs().entries.filter((s) => predicate(s.obj));\n\n let labelOps: LabelDerivationOps | ((spec: PObjectSpec, ref: PlRef) => string) = {};\n let refsWithEnrichments: boolean = false;\n if (typeof opts !== 'undefined') {\n if (typeof opts === 'function') {\n labelOps = opts;\n } else if (typeof opts === 'object') {\n if ('includeNativeLabel' in opts || 'separator' in opts || 'addLabelAsSuffix' in opts) {\n labelOps = opts;\n } else {\n opts = opts as GetOptionsOpts;\n labelOps = opts.label ?? {};\n refsWithEnrichments = opts.refsWithEnrichments ?? false;\n }\n }\n }\n\n if (typeof labelOps === 'object')\n return deriveLabels(filtered, (o) => o.obj, labelOps ?? {}).map(({ value: { ref }, label }) => ({\n ref: withEnrichments(ref, refsWithEnrichments),\n label,\n }));\n else\n return filtered.map(({ ref, obj }) => ({\n ref: withEnrichments(ref, refsWithEnrichments),\n label: labelOps(obj, ref),\n }));\n }\n\n public resolveAnchorCtx(anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>): AnchoredIdDeriver | undefined {\n if (anchorsOrCtx instanceof AnchoredIdDeriver) return anchorsOrCtx;\n const resolvedAnchors: Record<string, PColumnSpec> = {};\n for (const [key, value] of Object.entries(anchorsOrCtx)) {\n if (isPlRef(value)) {\n const resolvedSpec = this.getPColumnSpecByRef(value);\n if (!resolvedSpec)\n return undefined;\n resolvedAnchors[key] = resolvedSpec;\n } else {\n resolvedAnchors[key] = value;\n }\n }\n return new AnchoredIdDeriver(resolvedAnchors);\n }\n\n /**\n * Returns columns that match the provided anchors and selectors. It applies axis filters and label derivation.\n *\n * @param anchorsOrCtx - Anchor context for column selection (same as in getCanonicalOptions)\n * @param predicateOrSelectors - Predicate or selectors for filtering columns (same as in getCanonicalOptions)\n * @param opts - Optional configuration for label generation and data waiting\n * @returns A PFrameHandle for the created PFrame, or undefined if any required data is missing\n */\n public getAnchoredPColumns(\n anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>,\n predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],\n opts?: UniversalPColumnOpts,\n ): PColumn<PColumnDataUniversal>[] | undefined {\n const anchorCtx = this.resolveAnchorCtx(anchorsOrCtx);\n if (!anchorCtx) return undefined;\n return new PColumnCollection()\n .addColumnProvider(this)\n .addAxisLabelProvider(this)\n .getColumns(predicateOrSelectors, {\n ...opts,\n anchorCtx,\n });\n }\n\n /**\n * Calculates anchored identifier options for columns matching a given predicate and returns their\n * canonicalized representations.\n *\n * This function filters column specifications from the result pool that match the provided predicate,\n * creates a standardized AnchorCtx from the provided anchors, and generates a list of label-value\n * pairs for UI components (like dropdowns).\n *\n * @param anchorsOrCtx - Either:\n * - An existing AnchorCtx instance\n * - A record mapping anchor IDs to PColumnSpec objects\n * - A record mapping anchor IDs to PlRef objects (which will be resolved to PColumnSpec)\n * @param predicateOrSelectors - Either:\n * - A predicate function that takes a PColumnSpec and returns a boolean.\n * Only specs that return true will be included.\n * - An APColumnSelector object for declarative filtering, which will be\n * resolved against the provided anchors and matched using matchPColumn.\n * - An array of APColumnSelector objects - columns matching ANY selector\n * in the array will be included (OR operation).\n * @param opts - Optional configuration for label generation:\n * - labelOps: Optional configuration for label generation:\n * - includeNativeLabel: Whether to include native column labels\n * - separator: String to use between label parts (defaults to \" / \")\n * - addLabelAsSuffix: Whether to add labels as suffix instead of prefix\n * - dontWaitAllData: Whether to skip columns that don't have all data (if not set, will return undefined,\n * if at least one column that requires splitting is missing data)\n * @returns An array of objects with `label` (display text) and `value` (anchored ID string) properties,\n * or undefined if any PlRef resolution fails.\n */\n getCanonicalOptions(\n anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>,\n predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],\n opts?: UniversalPColumnOpts,\n ): { label: string; value: SUniversalPColumnId }[] | undefined {\n const anchorCtx = this.resolveAnchorCtx(anchorsOrCtx);\n if (!anchorCtx) return undefined;\n const entries = new PColumnCollection()\n .addColumnProvider(this)\n .addAxisLabelProvider(this)\n .getUniversalEntries(predicateOrSelectors, {\n ...opts,\n anchorCtx,\n });\n if (!entries) return undefined;\n return entries.map((item) => ({\n value: item.id,\n label: item.label,\n }));\n }\n\n /**\n * @deprecated use getData()\n */\n public getDataFromResultPool(): ResultCollection<PObject<TreeNodeAccessor>> {\n return this.getData();\n }\n\n public getData(): ResultCollection<PObject<TreeNodeAccessor>> {\n const result = this.ctx.getDataFromResultPool();\n return {\n isComplete: result.isComplete,\n entries: result.entries.map((e) => ({\n ref: e.ref,\n obj: {\n ...e.obj,\n data: new TreeNodeAccessor(e.obj.data, [e.ref.blockId, e.ref.name]),\n },\n })),\n };\n }\n\n /**\n * @deprecated use getDataWithErrors()\n */\n public getDataWithErrorsFromResultPool(): ResultCollection<\n Optional<PObject<ValueOrError<TreeNodeAccessor, Error>>, 'id'>\n > {\n return this.getDataWithErrors();\n }\n\n public getDataWithErrors(): ResultCollection<\n Optional<PObject<ValueOrError<TreeNodeAccessor, Error>>, 'id'>\n > {\n const result = this.ctx.getDataWithErrorsFromResultPool();\n return {\n isComplete: result.isComplete,\n entries: result.entries.map((e) => ({\n ref: e.ref,\n obj: {\n ...e.obj,\n data: mapValueInVOE(\n e.obj.data,\n (handle) => new TreeNodeAccessor(handle, [e.ref.blockId, e.ref.name]),\n ),\n },\n })),\n };\n }\n\n /**\n * @deprecated use getSpecs()\n */\n public getSpecsFromResultPool(): ResultCollection<PObjectSpec> {\n return this.getSpecs();\n }\n\n public getSpecs(): ResultCollection<PObjectSpec> {\n return this.ctx.getSpecsFromResultPool();\n }\n\n /**\n * @param ref a Ref\n * @returns data associated with the ref\n */\n public getDataByRef(ref: PlRef): PObject<TreeNodeAccessor> | undefined {\n // @TODO remove after 1 Jan 2025; forward compatibility\n if (typeof this.ctx.getDataFromResultPoolByRef === 'undefined')\n return this.getData().entries.find(\n (f) => f.ref.blockId === ref.blockId && f.ref.name === ref.name,\n )?.obj;\n const data = this.ctx.getDataFromResultPoolByRef(ref.blockId, ref.name); // Keep original call\n // Need to handle undefined case before mapping\n if (!data) return undefined;\n return mapPObjectData(\n data,\n (handle) => new TreeNodeAccessor(handle, [ref.blockId, ref.name]),\n );\n }\n\n /**\n * Returns data associated with the ref ensuring that it is a p-column.\n * @param ref a Ref\n * @returns p-column associated with the ref\n */\n public getPColumnByRef(ref: PlRef): PColumn<TreeNodeAccessor> | undefined {\n const data = this.getDataByRef(ref);\n if (!data) return undefined;\n return ensurePColumn(data);\n }\n\n /**\n * Returns spec associated with the ref ensuring that it is a p-column spec.\n * @param ref a Ref\n * @returns p-column spec associated with the ref\n */\n public getPColumnSpecByRef(ref: PlRef): PColumnSpec | undefined {\n const spec = this.getSpecByRef(ref);\n if (!spec) return undefined;\n if (!isPColumnSpec(spec)) throw new Error(`not a PColumn spec (kind = ${spec.kind})`);\n return spec;\n }\n\n /**\n * @param ref a Ref\n * @returns object spec associated with the ref\n */\n public getSpecByRef(ref: PlRef): PObjectSpec | undefined {\n return this.ctx.getSpecFromResultPoolByRef(ref.blockId, ref.name);\n }\n\n /**\n * @param spec object specification\n * @returns array of data objects with compatible specs\n * @deprecated delete this method after Jan 1, 2025\n */\n public findDataWithCompatibleSpec(spec: PColumnSpec): PObject<TreeNodeAccessor>[] {\n const result: PObject<TreeNodeAccessor>[] = [];\n\n out: for (const data of this.getData().entries) {\n if (!isPColumnSpec(data.obj.spec)) {\n continue;\n }\n\n const oth = data.obj.spec;\n\n if (spec.name !== oth.name) {\n continue;\n }\n\n if (spec.valueType !== oth.valueType) {\n continue;\n }\n\n if (spec.axesSpec.length !== oth.axesSpec.length) {\n continue;\n }\n\n if (!matchDomain(spec.domain, oth.domain)) {\n continue;\n }\n\n for (let i = 0; i < spec.axesSpec.length; ++i) {\n const qAx = spec.axesSpec[i];\n const tAx = oth.axesSpec[i];\n if (qAx.name !== tAx.name) {\n continue out;\n }\n if (qAx.type !== tAx.type) {\n continue out;\n }\n if (!matchDomain(qAx.domain, tAx.domain)) {\n continue out;\n }\n }\n\n result.push(data.obj);\n }\n return result;\n }\n\n /**\n * Find labels data for a given axis id. It will search for a label column and return its data as a map.\n * @returns a map of axis value => label\n */\n public findLabels(axis: AxisId): Record<string | number, string> | undefined {\n const dataPool = this.getData();\n for (const column of dataPool.entries) {\n if (!isPColumn(column.obj)) continue;\n\n const spec = column.obj.spec;\n if (\n spec.name === PColumnName.Label\n && spec.axesSpec.length === 1\n && spec.axesSpec[0].name === axis.name\n && spec.axesSpec[0].type === axis.type\n && matchDomain(axis.domain, spec.axesSpec[0].domain)\n ) {\n if (column.obj.data.resourceType.name !== 'PColumnData/Json') {\n throw Error(`Expected JSON column for labels, got: ${column.obj.data.resourceType.name}`);\n }\n const labels: Record<string | number, string> = Object.fromEntries(\n Object.entries(\n column.obj.data.getDataAsJson<{\n data: Record<string | number, string>;\n }>().data,\n ).map((e) => [JSON.parse(e[0])[0], e[1]]),\n );\n\n return labels;\n }\n }\n return undefined;\n }\n\n /**\n * Selects columns based on the provided selectors, returning PColumn objects\n * with lazily loaded data.\n *\n * @param selectors - A predicate function, a single selector, or an array of selectors.\n * @returns An array of PColumn objects matching the selectors. Data is loaded on first access.\n */\n public selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<TreeNodeAccessor | undefined>[] {\n const predicate = typeof selectors === 'function' ? selectors : selectorsToPredicate(selectors);\n\n const matchedSpecs = this.getSpecs().entries.filter(({ obj: spec }) => {\n if (!isPColumnSpec(spec)) return false;\n return predicate(spec);\n });\n\n // Map specs to PColumn objects with lazy data loading\n return matchedSpecs.map(({ ref, obj: spec }) => {\n // Type assertion needed because filter ensures it's PColumnSpec\n const pcolumnSpec = spec as PColumnSpec;\n let _cachedData: TreeNodeAccessor | undefined | null = null; // Use null to distinguish initial state from undefined result\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this; // Capture 'this' for use inside the getter\n\n return {\n id: canonicalize(ref) as PObjectId,\n spec: pcolumnSpec,\n get data(): TreeNodeAccessor | undefined {\n if (_cachedData !== null) {\n return _cachedData; // Return cached data (could be undefined if fetch failed)\n }\n\n _cachedData = self.getPColumnByRef(ref)?.data;\n return _cachedData;\n },\n } satisfies PColumn<TreeNodeAccessor | undefined>; // Cast needed because 'data' is a getter\n });\n }\n\n /**\n * Find labels data for a given axis id of a p-column.\n * @returns a map of axis value => label\n */\n public findLabelsForColumnAxis(column: PColumnSpec, axisIdx: number): Record<string | number, string> | undefined {\n const labels = this.findLabels(column.axesSpec[axisIdx]);\n if (!labels) return undefined;\n const axisKeys = readAnnotation(column, `pl7.app/axisKeys/${axisIdx}`);\n if (axisKeys !== undefined) {\n const keys = JSON.parse(axisKeys) as string[];\n return Object.fromEntries(keys.map((key) => {\n return [key, labels[key] ?? 'Unlabelled'];\n }));\n } else {\n return labels;\n }\n }\n}\n\n/** Main entry point to the API available within model lambdas (like outputs, sections, etc..) */\nexport abstract class RenderCtxBase<Args, Data> {\n protected readonly ctx: GlobalCfgRenderCtx;\n\n constructor() {\n this.ctx = getCfgRenderCtx();\n }\n\n private _dataCache?: { v: Data };\n\n public get data(): Data {\n if (this._dataCache === undefined) {\n const raw = this.ctx.data;\n const value = typeof raw === 'function' ? raw() : raw;\n this._dataCache = { v: value ? JSON.parse(value) : ({} as Data) };\n }\n return this._dataCache.v;\n }\n\n // lazy rendering because this feature is rarely used\n private _activeArgsCache?: { v?: Args };\n\n /**\n * Returns args snapshot the block was executed for (i.e. when \"Run\" button was pressed).\n * Returns undefined, if block was never executed or stopped mid-way execution, so that the result was cleared.\n * */\n public get activeArgs(): Args | undefined {\n if (this._activeArgsCache === undefined) {\n const raw = this.ctx.activeArgs;\n const value = typeof raw === 'function' ? raw() : raw;\n this._activeArgsCache = {\n v: value ? JSON.parse(value) : undefined,\n };\n }\n return this._activeArgsCache.v;\n }\n\n // /** Can be used to determine features provided by the desktop instance. */\n // public get featureFlags() {\n // return this.ctx.featureFlags;\n // }\n\n private getNamedAccessor(name: string): TreeNodeAccessor | undefined {\n return ifDef(\n this.ctx.getAccessorHandleByName(name),\n (accessor) => new TreeNodeAccessor(accessor, [name]),\n );\n }\n\n public get prerun(): TreeNodeAccessor | undefined {\n return this.getNamedAccessor(StagingAccessorName);\n }\n\n public get outputs(): TreeNodeAccessor | undefined {\n return this.getNamedAccessor(MainAccessorName);\n }\n\n public readonly resultPool = new ResultPool();\n\n /**\n * Find labels data for a given axis id. It will search for a label column and return its data as a map.\n * @returns a map of axis value => label\n * @deprecated Use resultPool.findLabels instead\n */\n public findLabels(axis: AxisId): Record<string | number, string> | undefined {\n return this.resultPool.findLabels(axis);\n }\n\n private verifyInlineAndExplicitColumnsSupport(columns: (PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>)[]) {\n const hasInlineColumns = columns.some((c) => !(c.data instanceof TreeNodeAccessor) || isDataInfo(c.data)); // Updated check for DataInfo\n const inlineColumnsSupport = this.ctx.featureFlags?.inlineColumnsSupport === true;\n if (hasInlineColumns && !inlineColumnsSupport) throw Error(`Inline or explicit columns not supported`); // Combined check\n\n // Removed redundant explicitColumns check\n }\n\n private patchPTableDef(def: PTableDef<PColumn<PColumnDataUniversal>>): PTableDef<PColumn<PColumnDataUniversal>> {\n if (!this.ctx.featureFlags?.pTablePartitionFiltersSupport) {\n // For old desktop move all partition filters to filters field as it doesn't read partitionFilters field\n def = {\n ...def,\n partitionFilters: [],\n filters: [...def.partitionFilters, ...def.filters],\n };\n }\n if (!this.ctx.featureFlags?.pFrameInSetFilterSupport) {\n def = {\n ...def,\n partitionFilters: patchInSetFilters(def.partitionFilters),\n filters: patchInSetFilters(def.filters),\n };\n }\n return def;\n }\n\n // TODO remove all non-PColumn fields\n public createPFrame(def: PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>>): PFrameHandle | undefined {\n this.verifyInlineAndExplicitColumnsSupport(def);\n if (!allPColumnsReady(def)) return undefined;\n return this.ctx.createPFrame(\n def.map((c) => transformPColumnData(c)),\n );\n }\n\n // TODO remove all non-PColumn fields\n public createPTable(def: PTableDef<PColumn<PColumnDataUniversal>>): PTableHandle | undefined;\n public createPTable(def: {\n columns: PColumn<PColumnDataUniversal>[];\n filters?: PTableRecordFilter[];\n /** Table sorting */\n sorting?: PTableSorting[];\n }): PTableHandle | undefined;\n public createPTable(\n def:\n | PTableDef<PColumn<PColumnDataUniversal>>\n | {\n columns: PColumn<PColumnDataUniversal>[];\n filters?: PTableRecordFilter[];\n /** Table sorting */\n sorting?: PTableSorting[];\n },\n ): PTableHandle | undefined {\n let rawDef: PTableDef<PColumn<PColumnDataUniversal>>;\n if ('columns' in def) {\n rawDef = this.patchPTableDef({\n src: {\n type: 'full',\n entries: def.columns.map((c) => ({ type: 'column', column: c })),\n },\n partitionFilters: def.filters ?? [],\n filters: [],\n sorting: def.sorting ?? [],\n });\n } else {\n rawDef = this.patchPTableDef(def);\n }\n const columns = extractAllColumns(rawDef.src);\n this.verifyInlineAndExplicitColumnsSupport(columns);\n if (!allPColumnsReady(columns)) return undefined;\n return this.ctx.createPTable(\n mapPTableDef(rawDef, (po) => transformPColumnData(po)),\n );\n }\n\n /** @deprecated scheduled for removal from SDK */\n public getBlockLabel(blockId: string): string {\n return this.ctx.getBlockLabel(blockId);\n }\n\n public getCurrentUnstableMarker(): string | undefined {\n return this.ctx.getCurrentUnstableMarker();\n }\n\n public logInfo(msg: string): void {\n this.ctx.logInfo(msg);\n }\n\n public logWarn(msg: string): void {\n this.ctx.logWarn(msg);\n }\n\n public logError(msg: string): void {\n this.ctx.logError(msg);\n }\n}\n\n/** Main entry point to the API available within model lambdas (like outputs, sections, etc..) for v3+ blocks */\nexport class RenderCtx<Args, Data> extends RenderCtxBase<Args, Data> {\n private _argsCache?: { v: Args | undefined };\n public get args(): Args | undefined {\n if (this._argsCache === undefined) {\n const raw = this.ctx.args;\n const value = typeof raw === 'function' ? raw() : raw;\n // args can be undefined when derivation fails (e.g., validation error in args())\n this._argsCache = { v: value === undefined ? undefined : JSON.parse(value) };\n }\n return this._argsCache.v;\n }\n}\n\n/** Render context for legacy v1/v2 blocks - provides backward compatibility */\nexport class RenderCtxLegacy<Args, UiState> extends RenderCtxBase<Args, UiState> {\n private _argsCache?: { v: Args };\n public get args(): Args {\n if (this._argsCache === undefined) {\n const raw = this.ctx.args;\n const value = typeof raw === 'function' ? raw() : raw;\n this._argsCache = { v: JSON.parse(value) };\n }\n return this._argsCache.v;\n }\n\n private _uiStateCache?: { v: UiState };\n\n public get uiState(): UiState {\n if (this._uiStateCache === undefined) {\n const raw = this.ctx.uiState!;\n const value = typeof raw === 'function' ? raw() : raw;\n this._uiStateCache = { v: value ? JSON.parse(value) : ({} as UiState) };\n }\n return this._uiStateCache.v;\n }\n}\n\nexport type RenderFunction<Args = unknown, State = unknown, Ret = unknown> = (\n rCtx: RenderCtx<Args, State>\n) => Ret;\n\nexport type RenderFunctionLegacy<Args = unknown, State = unknown, Ret = unknown> = (\n rCtx: RenderCtxLegacy<Args, State>\n) => Ret;\n\nexport type UnwrapFutureRef<K> =\n K extends FutureRef<infer T>\n ? T\n : K extends bigint | boolean | null | number | string | symbol | undefined\n ? K\n : { [key in keyof K]: UnwrapFutureRef<K[key]> };\n\nexport type InferRenderFunctionReturn<RF extends AnyFunction> = RF extends (...args: any) => infer R\n ? UnwrapFutureRef<R>\n : never;\n"],"names":["mapPObjectData","TreeNodeAccessor","isDataInfo","mapDataInfo","getCfgRenderCtx","selectorsToPredicate","deriveLabels","withEnrichments","AnchoredIdDeriver","isPlRef","PColumnCollection","mapValueInVOE","ensurePColumn","isPColumnSpec","isPColumn","PColumnName","readAnnotation","ifDef","accessor","StagingAccessorName","MainAccessorName","patchInSetFilters","allPColumnsReady","extractAllColumns","mapPTableDef"],"mappings":"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"}
1
+ {"version":3,"file":"api.cjs","sources":["../../src/render/api.ts"],"sourcesContent":["import type {\n AnchoredPColumnSelector,\n AnyFunction,\n AxisId,\n DataInfo,\n Option,\n PColumn,\n PColumnLazy,\n PColumnSelector,\n PColumnSpec,\n PColumnValues,\n PFrameDef,\n PFrameHandle,\n PObject,\n PObjectId,\n PObjectSpec,\n PSpecPredicate,\n PTableDef,\n PTableHandle,\n PTableRecordFilter,\n PTableSorting,\n PlRef,\n ResolveAnchorsOptions,\n ResultCollection,\n SUniversalPColumnId,\n ValueOrError,\n} from '@milaboratories/pl-model-common';\nimport {\n AnchoredIdDeriver,\n ensurePColumn,\n extractAllColumns,\n isDataInfo,\n isPColumn,\n isPColumnSpec,\n isPlRef,\n mapDataInfo,\n mapPObjectData,\n mapPTableDef,\n mapValueInVOE,\n PColumnName,\n readAnnotation,\n selectorsToPredicate,\n withEnrichments,\n} from '@milaboratories/pl-model-common';\nimport canonicalize from 'canonicalize';\nimport type { Optional } from 'utility-types';\nimport { getCfgRenderCtx } from '../internal';\nimport { TreeNodeAccessor, ifDef } from './accessor';\nimport type { FutureRef } from './future';\nimport type { AccessorHandle, GlobalCfgRenderCtx } from './internal';\nimport { MainAccessorName, StagingAccessorName } from './internal';\nimport { PColumnCollection, type AxisLabelProvider, type ColumnProvider } from './util/column_collection';\nimport type { LabelDerivationOps } from './util/label';\nimport { deriveLabels } from './util/label';\nimport type { APColumnSelectorWithSplit } from './util/split_selectors';\nimport { patchInSetFilters } from './util/pframe_upgraders';\nimport { allPColumnsReady } from './util';\n\nexport type PColumnDataUniversal<TreeEntry = TreeNodeAccessor> = TreeEntry | DataInfo<TreeEntry> | PColumnValues;\n\n/**\n * Helper function to match domain objects\n * @param query Optional domain to match against\n * @param target Optional domain to match\n * @returns true if domains match, false otherwise\n */\nfunction matchDomain(query?: Record<string, string>, target?: Record<string, string>) {\n if (query === undefined) return target === undefined;\n if (target === undefined) return true;\n for (const k in target) {\n if (query[k] !== target[k]) return false;\n }\n return true;\n}\n\nexport type UniversalColumnOption = { label: string; value: SUniversalPColumnId };\n\n/**\n * Transforms PColumn data into the internal representation expected by the platform\n * @param data Data from a PColumn to transform\n * @returns Transformed data compatible with platform API\n */\nfunction transformPColumnData(\n data: PColumn<PColumnDataUniversal> | PColumnLazy<PColumnDataUniversal>,\n): PColumn<PColumnValues | AccessorHandle | DataInfo<AccessorHandle>> {\n return mapPObjectData(data, (d) => {\n if (d instanceof TreeNodeAccessor) {\n return d.handle;\n } else if (isDataInfo(d)) {\n return mapDataInfo(d, (accessor) => accessor.handle);\n } else {\n return d;\n }\n });\n}\n\ntype UniversalPColumnOpts = {\n labelOps?: LabelDerivationOps;\n dontWaitAllData?: boolean;\n exclude?: AnchoredPColumnSelector | AnchoredPColumnSelector[];\n} & ResolveAnchorsOptions;\n\ntype GetOptionsOpts = {\n /**\n * If true, references returned by the method will contain `requireEnrichments` flag set to true.\n * If this reference is added to the block's args, it will communicate to the platform that the block\n * expects enrichments of the referenced block to be available in the context of the current block.\n */\n refsWithEnrichments?: boolean;\n /**\n * Label derivation options.\n * If provided, it will be used to derive labels for the options.\n * If not provided, labels will be derived using the default logic.\n */\n label?: ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps;\n};\n\nexport class ResultPool implements ColumnProvider, AxisLabelProvider {\n private readonly ctx: GlobalCfgRenderCtx = getCfgRenderCtx();\n\n /**\n * @deprecated use getOptions()\n */\n public calculateOptions(predicate: PSpecPredicate): Option[] {\n return this.ctx.calculateOptions(predicate);\n }\n\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n opts?: GetOptionsOpts,\n ): Option[];\n /** @deprecated wrap label ops with { label: <...> } */\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n label?: ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps,\n ): Option[];\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n opts?: GetOptionsOpts | ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps,\n ): Option[] {\n const predicate = typeof predicateOrSelector === 'function'\n ? predicateOrSelector\n : selectorsToPredicate(predicateOrSelector);\n const filtered = this.getSpecs().entries.filter((s) => predicate(s.obj));\n\n let labelOps: LabelDerivationOps | ((spec: PObjectSpec, ref: PlRef) => string) = {};\n let refsWithEnrichments: boolean = false;\n if (typeof opts !== 'undefined') {\n if (typeof opts === 'function') {\n labelOps = opts;\n } else if (typeof opts === 'object') {\n if ('includeNativeLabel' in opts || 'separator' in opts || 'addLabelAsSuffix' in opts) {\n labelOps = opts;\n } else {\n opts = opts as GetOptionsOpts;\n labelOps = opts.label ?? {};\n refsWithEnrichments = opts.refsWithEnrichments ?? false;\n }\n }\n }\n\n if (typeof labelOps === 'object')\n return deriveLabels(filtered, (o) => o.obj, labelOps ?? {}).map(({ value: { ref }, label }) => ({\n ref: withEnrichments(ref, refsWithEnrichments),\n label,\n }));\n else\n return filtered.map(({ ref, obj }) => ({\n ref: withEnrichments(ref, refsWithEnrichments),\n label: labelOps(obj, ref),\n }));\n }\n\n public resolveAnchorCtx(anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>): AnchoredIdDeriver | undefined {\n if (anchorsOrCtx instanceof AnchoredIdDeriver) return anchorsOrCtx;\n const resolvedAnchors: Record<string, PColumnSpec> = {};\n for (const [key, value] of Object.entries(anchorsOrCtx)) {\n if (isPlRef(value)) {\n const resolvedSpec = this.getPColumnSpecByRef(value);\n if (!resolvedSpec)\n return undefined;\n resolvedAnchors[key] = resolvedSpec;\n } else {\n resolvedAnchors[key] = value;\n }\n }\n return new AnchoredIdDeriver(resolvedAnchors);\n }\n\n /**\n * Returns columns that match the provided anchors and selectors. It applies axis filters and label derivation.\n *\n * @param anchorsOrCtx - Anchor context for column selection (same as in getCanonicalOptions)\n * @param predicateOrSelectors - Predicate or selectors for filtering columns (same as in getCanonicalOptions)\n * @param opts - Optional configuration for label generation and data waiting\n * @returns A PFrameHandle for the created PFrame, or undefined if any required data is missing\n */\n public getAnchoredPColumns(\n anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>,\n predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],\n opts?: UniversalPColumnOpts,\n ): PColumn<PColumnDataUniversal>[] | undefined {\n const anchorCtx = this.resolveAnchorCtx(anchorsOrCtx);\n if (!anchorCtx) return undefined;\n return new PColumnCollection()\n .addColumnProvider(this)\n .addAxisLabelProvider(this)\n .getColumns(predicateOrSelectors, {\n ...opts,\n anchorCtx,\n });\n }\n\n /**\n * Calculates anchored identifier options for columns matching a given predicate and returns their\n * canonicalized representations.\n *\n * This function filters column specifications from the result pool that match the provided predicate,\n * creates a standardized AnchorCtx from the provided anchors, and generates a list of label-value\n * pairs for UI components (like dropdowns).\n *\n * @param anchorsOrCtx - Either:\n * - An existing AnchorCtx instance\n * - A record mapping anchor IDs to PColumnSpec objects\n * - A record mapping anchor IDs to PlRef objects (which will be resolved to PColumnSpec)\n * @param predicateOrSelectors - Either:\n * - A predicate function that takes a PColumnSpec and returns a boolean.\n * Only specs that return true will be included.\n * - An APColumnSelector object for declarative filtering, which will be\n * resolved against the provided anchors and matched using matchPColumn.\n * - An array of APColumnSelector objects - columns matching ANY selector\n * in the array will be included (OR operation).\n * @param opts - Optional configuration for label generation:\n * - labelOps: Optional configuration for label generation:\n * - includeNativeLabel: Whether to include native column labels\n * - separator: String to use between label parts (defaults to \" / \")\n * - addLabelAsSuffix: Whether to add labels as suffix instead of prefix\n * - dontWaitAllData: Whether to skip columns that don't have all data (if not set, will return undefined,\n * if at least one column that requires splitting is missing data)\n * @returns An array of objects with `label` (display text) and `value` (anchored ID string) properties,\n * or undefined if any PlRef resolution fails.\n */\n getCanonicalOptions(\n anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>,\n predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],\n opts?: UniversalPColumnOpts,\n ): { label: string; value: SUniversalPColumnId }[] | undefined {\n const anchorCtx = this.resolveAnchorCtx(anchorsOrCtx);\n if (!anchorCtx) return undefined;\n const entries = new PColumnCollection()\n .addColumnProvider(this)\n .addAxisLabelProvider(this)\n .getUniversalEntries(predicateOrSelectors, {\n ...opts,\n anchorCtx,\n });\n if (!entries) return undefined;\n return entries.map((item) => ({\n value: item.id,\n label: item.label,\n }));\n }\n\n /**\n * @deprecated use getData()\n */\n public getDataFromResultPool(): ResultCollection<PObject<TreeNodeAccessor>> {\n return this.getData();\n }\n\n public getData(): ResultCollection<PObject<TreeNodeAccessor>> {\n const result = this.ctx.getDataFromResultPool();\n return {\n isComplete: result.isComplete,\n entries: result.entries.map((e) => ({\n ref: e.ref,\n obj: {\n ...e.obj,\n data: new TreeNodeAccessor(e.obj.data, [e.ref.blockId, e.ref.name]),\n },\n })),\n };\n }\n\n /**\n * @deprecated use getDataWithErrors()\n */\n public getDataWithErrorsFromResultPool(): ResultCollection<\n Optional<PObject<ValueOrError<TreeNodeAccessor, Error>>, 'id'>\n > {\n return this.getDataWithErrors();\n }\n\n public getDataWithErrors(): ResultCollection<\n Optional<PObject<ValueOrError<TreeNodeAccessor, Error>>, 'id'>\n > {\n const result = this.ctx.getDataWithErrorsFromResultPool();\n return {\n isComplete: result.isComplete,\n entries: result.entries.map((e) => ({\n ref: e.ref,\n obj: {\n ...e.obj,\n data: mapValueInVOE(\n e.obj.data,\n (handle) => new TreeNodeAccessor(handle, [e.ref.blockId, e.ref.name]),\n ),\n },\n })),\n };\n }\n\n /**\n * @deprecated use getSpecs()\n */\n public getSpecsFromResultPool(): ResultCollection<PObjectSpec> {\n return this.getSpecs();\n }\n\n public getSpecs(): ResultCollection<PObjectSpec> {\n return this.ctx.getSpecsFromResultPool();\n }\n\n /**\n * @param ref a Ref\n * @returns data associated with the ref\n */\n public getDataByRef(ref: PlRef): PObject<TreeNodeAccessor> | undefined {\n // @TODO remove after 1 Jan 2025; forward compatibility\n if (typeof this.ctx.getDataFromResultPoolByRef === 'undefined')\n return this.getData().entries.find(\n (f) => f.ref.blockId === ref.blockId && f.ref.name === ref.name,\n )?.obj;\n const data = this.ctx.getDataFromResultPoolByRef(ref.blockId, ref.name); // Keep original call\n // Need to handle undefined case before mapping\n if (!data) return undefined;\n return mapPObjectData(\n data,\n (handle) => new TreeNodeAccessor(handle, [ref.blockId, ref.name]),\n );\n }\n\n /**\n * Returns data associated with the ref ensuring that it is a p-column.\n * @param ref a Ref\n * @returns p-column associated with the ref\n */\n public getPColumnByRef(ref: PlRef): PColumn<TreeNodeAccessor> | undefined {\n const data = this.getDataByRef(ref);\n if (!data) return undefined;\n return ensurePColumn(data);\n }\n\n /**\n * Returns spec associated with the ref ensuring that it is a p-column spec.\n * @param ref a Ref\n * @returns p-column spec associated with the ref\n */\n public getPColumnSpecByRef(ref: PlRef): PColumnSpec | undefined {\n const spec = this.getSpecByRef(ref);\n if (!spec) return undefined;\n if (!isPColumnSpec(spec)) throw new Error(`not a PColumn spec (kind = ${spec.kind})`);\n return spec;\n }\n\n /**\n * @param ref a Ref\n * @returns object spec associated with the ref\n */\n public getSpecByRef(ref: PlRef): PObjectSpec | undefined {\n return this.ctx.getSpecFromResultPoolByRef(ref.blockId, ref.name);\n }\n\n /**\n * @param spec object specification\n * @returns array of data objects with compatible specs\n * @deprecated delete this method after Jan 1, 2025\n */\n public findDataWithCompatibleSpec(spec: PColumnSpec): PObject<TreeNodeAccessor>[] {\n const result: PObject<TreeNodeAccessor>[] = [];\n\n out: for (const data of this.getData().entries) {\n if (!isPColumnSpec(data.obj.spec)) {\n continue;\n }\n\n const oth = data.obj.spec;\n\n if (spec.name !== oth.name) {\n continue;\n }\n\n if (spec.valueType !== oth.valueType) {\n continue;\n }\n\n if (spec.axesSpec.length !== oth.axesSpec.length) {\n continue;\n }\n\n if (!matchDomain(spec.domain, oth.domain)) {\n continue;\n }\n\n for (let i = 0; i < spec.axesSpec.length; ++i) {\n const qAx = spec.axesSpec[i];\n const tAx = oth.axesSpec[i];\n if (qAx.name !== tAx.name) {\n continue out;\n }\n if (qAx.type !== tAx.type) {\n continue out;\n }\n if (!matchDomain(qAx.domain, tAx.domain)) {\n continue out;\n }\n }\n\n result.push(data.obj);\n }\n return result;\n }\n\n /**\n * Find labels data for a given axis id. It will search for a label column and return its data as a map.\n * @returns a map of axis value => label\n */\n public findLabels(axis: AxisId): Record<string | number, string> | undefined {\n const dataPool = this.getData();\n for (const column of dataPool.entries) {\n if (!isPColumn(column.obj)) continue;\n\n const spec = column.obj.spec;\n if (\n spec.name === PColumnName.Label\n && spec.axesSpec.length === 1\n && spec.axesSpec[0].name === axis.name\n && spec.axesSpec[0].type === axis.type\n && matchDomain(axis.domain, spec.axesSpec[0].domain)\n ) {\n if (column.obj.data.resourceType.name !== 'PColumnData/Json') {\n throw Error(`Expected JSON column for labels, got: ${column.obj.data.resourceType.name}`);\n }\n const labels: Record<string | number, string> = Object.fromEntries(\n Object.entries(\n column.obj.data.getDataAsJson<{\n data: Record<string | number, string>;\n }>().data,\n ).map((e) => [JSON.parse(e[0])[0], e[1]]),\n );\n\n return labels;\n }\n }\n return undefined;\n }\n\n /**\n * Selects columns based on the provided selectors, returning PColumn objects\n * with lazily loaded data.\n *\n * @param selectors - A predicate function, a single selector, or an array of selectors.\n * @returns An array of PColumn objects matching the selectors. Data is loaded on first access.\n */\n public selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<TreeNodeAccessor | undefined>[] {\n const predicate = typeof selectors === 'function' ? selectors : selectorsToPredicate(selectors);\n\n const matchedSpecs = this.getSpecs().entries.filter(({ obj: spec }) => {\n if (!isPColumnSpec(spec)) return false;\n return predicate(spec);\n });\n\n // Map specs to PColumn objects with lazy data loading\n return matchedSpecs.map(({ ref, obj: spec }) => {\n // Type assertion needed because filter ensures it's PColumnSpec\n const pcolumnSpec = spec as PColumnSpec;\n let _cachedData: TreeNodeAccessor | undefined | null = null; // Use null to distinguish initial state from undefined result\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this; // Capture 'this' for use inside the getter\n\n return {\n id: canonicalize(ref) as PObjectId,\n spec: pcolumnSpec,\n get data(): TreeNodeAccessor | undefined {\n if (_cachedData !== null) {\n return _cachedData; // Return cached data (could be undefined if fetch failed)\n }\n\n _cachedData = self.getPColumnByRef(ref)?.data;\n return _cachedData;\n },\n } satisfies PColumn<TreeNodeAccessor | undefined>; // Cast needed because 'data' is a getter\n });\n }\n\n /**\n * Find labels data for a given axis id of a p-column.\n * @returns a map of axis value => label\n */\n public findLabelsForColumnAxis(column: PColumnSpec, axisIdx: number): Record<string | number, string> | undefined {\n const labels = this.findLabels(column.axesSpec[axisIdx]);\n if (!labels) return undefined;\n const axisKeys = readAnnotation(column, `pl7.app/axisKeys/${axisIdx}`);\n if (axisKeys !== undefined) {\n const keys = JSON.parse(axisKeys) as string[];\n return Object.fromEntries(keys.map((key) => {\n return [key, labels[key] ?? 'Unlabelled'];\n }));\n } else {\n return labels;\n }\n }\n}\n\n/** Main entry point to the API available within model lambdas (like outputs, sections, etc..) */\nexport abstract class RenderCtxBase<Args, Data> {\n protected readonly ctx: GlobalCfgRenderCtx;\n\n constructor() {\n this.ctx = getCfgRenderCtx();\n }\n\n private _dataCache?: { v: Data };\n\n public get data(): Data {\n if (this._dataCache === undefined) {\n const raw = this.ctx.data;\n const value = typeof raw === 'function' ? raw() : raw;\n this._dataCache = { v: value ? JSON.parse(value) : ({} as Data) };\n }\n return this._dataCache.v;\n }\n\n // lazy rendering because this feature is rarely used\n private _activeArgsCache?: { v?: Args };\n\n /**\n * Returns args snapshot the block was executed for (i.e. when \"Run\" button was pressed).\n * Returns undefined, if block was never executed or stopped mid-way execution, so that the result was cleared.\n * */\n public get activeArgs(): Args | undefined {\n if (this._activeArgsCache === undefined) {\n const raw = this.ctx.activeArgs;\n const value = typeof raw === 'function' ? raw() : raw;\n this._activeArgsCache = {\n v: value ? JSON.parse(value) : undefined,\n };\n }\n return this._activeArgsCache.v;\n }\n\n // /** Can be used to determine features provided by the desktop instance. */\n // public get featureFlags() {\n // return this.ctx.featureFlags;\n // }\n\n private getNamedAccessor(name: string): TreeNodeAccessor | undefined {\n return ifDef(\n this.ctx.getAccessorHandleByName(name),\n (accessor) => new TreeNodeAccessor(accessor, [name]),\n );\n }\n\n public get prerun(): TreeNodeAccessor | undefined {\n return this.getNamedAccessor(StagingAccessorName);\n }\n\n public get outputs(): TreeNodeAccessor | undefined {\n return this.getNamedAccessor(MainAccessorName);\n }\n\n public readonly resultPool = new ResultPool();\n\n /**\n * Find labels data for a given axis id. It will search for a label column and return its data as a map.\n * @returns a map of axis value => label\n * @deprecated Use resultPool.findLabels instead\n */\n public findLabels(axis: AxisId): Record<string | number, string> | undefined {\n return this.resultPool.findLabels(axis);\n }\n\n private verifyInlineAndExplicitColumnsSupport(columns: (PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>)[]) {\n const hasInlineColumns = columns.some((c) => !(c.data instanceof TreeNodeAccessor) || isDataInfo(c.data)); // Updated check for DataInfo\n const inlineColumnsSupport = this.ctx.featureFlags?.inlineColumnsSupport === true;\n if (hasInlineColumns && !inlineColumnsSupport) throw Error(`Inline or explicit columns not supported`); // Combined check\n\n // Removed redundant explicitColumns check\n }\n\n private patchPTableDef(def: PTableDef<PColumn<PColumnDataUniversal>>): PTableDef<PColumn<PColumnDataUniversal>> {\n if (!this.ctx.featureFlags?.pTablePartitionFiltersSupport) {\n // For old desktop move all partition filters to filters field as it doesn't read partitionFilters field\n def = {\n ...def,\n partitionFilters: [],\n filters: [...def.partitionFilters, ...def.filters],\n };\n }\n if (!this.ctx.featureFlags?.pFrameInSetFilterSupport) {\n def = {\n ...def,\n partitionFilters: patchInSetFilters(def.partitionFilters),\n filters: patchInSetFilters(def.filters),\n };\n }\n return def;\n }\n\n // TODO remove all non-PColumn fields\n public createPFrame(def: PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>>): PFrameHandle | undefined {\n this.verifyInlineAndExplicitColumnsSupport(def);\n if (!allPColumnsReady(def)) return undefined;\n return this.ctx.createPFrame(\n def.map((c) => transformPColumnData(c)),\n );\n }\n\n // TODO remove all non-PColumn fields\n public createPTable(def: PTableDef<PColumn<PColumnDataUniversal>>): PTableHandle | undefined;\n public createPTable(def: {\n columns: PColumn<PColumnDataUniversal>[];\n filters?: PTableRecordFilter[];\n /** Table sorting */\n sorting?: PTableSorting[];\n }): PTableHandle | undefined;\n public createPTable(\n def:\n | PTableDef<PColumn<PColumnDataUniversal>>\n | {\n columns: PColumn<PColumnDataUniversal>[];\n filters?: PTableRecordFilter[];\n /** Table sorting */\n sorting?: PTableSorting[];\n },\n ): PTableHandle | undefined {\n let rawDef: PTableDef<PColumn<PColumnDataUniversal>>;\n if ('columns' in def) {\n rawDef = this.patchPTableDef({\n src: {\n type: 'full',\n entries: def.columns.map((c) => ({ type: 'column', column: c })),\n },\n partitionFilters: def.filters ?? [],\n filters: [],\n sorting: def.sorting ?? [],\n });\n } else {\n rawDef = this.patchPTableDef(def);\n }\n const columns = extractAllColumns(rawDef.src);\n this.verifyInlineAndExplicitColumnsSupport(columns);\n if (!allPColumnsReady(columns)) return undefined;\n return this.ctx.createPTable(\n mapPTableDef(rawDef, (po) => transformPColumnData(po)),\n );\n }\n\n /** @deprecated scheduled for removal from SDK */\n public getBlockLabel(blockId: string): string {\n return this.ctx.getBlockLabel(blockId);\n }\n\n public getCurrentUnstableMarker(): string | undefined {\n return this.ctx.getCurrentUnstableMarker();\n }\n\n public logInfo(msg: string): void {\n this.ctx.logInfo(msg);\n }\n\n public logWarn(msg: string): void {\n this.ctx.logWarn(msg);\n }\n\n public logError(msg: string): void {\n this.ctx.logError(msg);\n }\n}\n\n/** Main entry point to the API available within model lambdas (like outputs, sections, etc..) for v3+ blocks */\nexport class RenderCtx<Args, Data> extends RenderCtxBase<Args, Data> {\n private _argsCache?: { v: Args | undefined };\n public get args(): Args | undefined {\n if (this._argsCache === undefined) {\n const raw = this.ctx.args;\n const value = typeof raw === 'function' ? raw() : raw;\n // args can be undefined when derivation fails (e.g., validation error in args())\n this._argsCache = { v: value === undefined ? undefined : JSON.parse(value) };\n }\n return this._argsCache.v;\n }\n}\n\n/** Render context for legacy v1/v2 blocks - provides backward compatibility */\nexport class RenderCtxLegacy<Args, UiState> extends RenderCtxBase<Args, UiState> {\n private _argsCache?: { v: Args };\n public get args(): Args {\n if (this._argsCache === undefined) {\n const raw = this.ctx.args;\n const value = typeof raw === 'function' ? raw() : raw;\n this._argsCache = { v: JSON.parse(value) };\n }\n return this._argsCache.v;\n }\n\n private _uiStateCache?: { v: UiState };\n\n public get uiState(): UiState {\n if (this._uiStateCache === undefined) {\n const raw = this.ctx.uiState!;\n const value = typeof raw === 'function' ? raw() : raw;\n this._uiStateCache = { v: value ? JSON.parse(value) : ({} as UiState) };\n }\n return this._uiStateCache.v;\n }\n}\n\nexport type RenderFunction<Args = unknown, State = unknown, Ret = unknown> = (\n rCtx: RenderCtx<Args, State>\n) => Ret;\n\nexport type RenderFunctionLegacy<Args = unknown, State = unknown, Ret = unknown> = (\n rCtx: RenderCtxLegacy<Args, State>\n) => Ret;\n\nexport type UnwrapFutureRef<K> =\n K extends FutureRef<infer T>\n ? T\n : K extends bigint | boolean | null | number | string | symbol | undefined\n ? K\n : { [key in keyof K]: UnwrapFutureRef<K[key]> };\n\nexport type InferRenderFunctionReturn<RF extends AnyFunction> = RF extends (...args: any) => infer R\n ? UnwrapFutureRef<R>\n : never;\n"],"names":["mapPObjectData","TreeNodeAccessor","isDataInfo","mapDataInfo","getCfgRenderCtx","selectorsToPredicate","deriveLabels","withEnrichments","AnchoredIdDeriver","isPlRef","PColumnCollection","mapValueInVOE","ensurePColumn","isPColumnSpec","isPColumn","PColumnName","readAnnotation","ifDef","accessor","StagingAccessorName","MainAccessorName","patchInSetFilters","allPColumnsReady","extractAllColumns","mapPTableDef"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sources":["../../src/render/api.ts"],"sourcesContent":["import type {\n AnchoredPColumnSelector,\n AnyFunction,\n AxisId,\n DataInfo,\n Option,\n PColumn,\n PColumnLazy,\n PColumnSelector,\n PColumnSpec,\n PColumnValues,\n PFrameDef,\n PFrameHandle,\n PObject,\n PObjectId,\n PObjectSpec,\n PSpecPredicate,\n PTableDef,\n PTableHandle,\n PTableRecordFilter,\n PTableSorting,\n PlRef,\n ResolveAnchorsOptions,\n ResultCollection,\n SUniversalPColumnId,\n ValueOrError,\n} from '@milaboratories/pl-model-common';\nimport {\n AnchoredIdDeriver,\n ensurePColumn,\n extractAllColumns,\n isDataInfo,\n isPColumn,\n isPColumnSpec,\n isPlRef,\n mapDataInfo,\n mapPObjectData,\n mapPTableDef,\n mapValueInVOE,\n PColumnName,\n readAnnotation,\n selectorsToPredicate,\n withEnrichments,\n} from '@milaboratories/pl-model-common';\nimport canonicalize from 'canonicalize';\nimport type { Optional } from 'utility-types';\nimport { getCfgRenderCtx } from '../internal';\nimport { TreeNodeAccessor, ifDef } from './accessor';\nimport type { FutureRef } from './future';\nimport type { AccessorHandle, GlobalCfgRenderCtx } from './internal';\nimport { MainAccessorName, StagingAccessorName } from './internal';\nimport { PColumnCollection, type AxisLabelProvider, type ColumnProvider } from './util/column_collection';\nimport type { LabelDerivationOps } from './util/label';\nimport { deriveLabels } from './util/label';\nimport type { APColumnSelectorWithSplit } from './util/split_selectors';\nimport { patchInSetFilters } from './util/pframe_upgraders';\nimport { allPColumnsReady } from './util/pcolumn_data';\n\nexport type PColumnDataUniversal<TreeEntry = TreeNodeAccessor> = TreeEntry | DataInfo<TreeEntry> | PColumnValues;\n\n/**\n * Helper function to match domain objects\n * @param query Optional domain to match against\n * @param target Optional domain to match\n * @returns true if domains match, false otherwise\n */\nfunction matchDomain(query?: Record<string, string>, target?: Record<string, string>) {\n if (query === undefined) return target === undefined;\n if (target === undefined) return true;\n for (const k in target) {\n if (query[k] !== target[k]) return false;\n }\n return true;\n}\n\nexport type UniversalColumnOption = { label: string; value: SUniversalPColumnId };\n\n/**\n * Transforms PColumn data into the internal representation expected by the platform\n * @param data Data from a PColumn to transform\n * @returns Transformed data compatible with platform API\n */\nfunction transformPColumnData(\n data: PColumn<PColumnDataUniversal> | PColumnLazy<PColumnDataUniversal>,\n): PColumn<PColumnValues | AccessorHandle | DataInfo<AccessorHandle>> {\n return mapPObjectData(data, (d) => {\n if (d instanceof TreeNodeAccessor) {\n return d.handle;\n } else if (isDataInfo(d)) {\n return mapDataInfo(d, (accessor) => accessor.handle);\n } else {\n return d;\n }\n });\n}\n\ntype UniversalPColumnOpts = {\n labelOps?: LabelDerivationOps;\n dontWaitAllData?: boolean;\n exclude?: AnchoredPColumnSelector | AnchoredPColumnSelector[];\n} & ResolveAnchorsOptions;\n\ntype GetOptionsOpts = {\n /**\n * If true, references returned by the method will contain `requireEnrichments` flag set to true.\n * If this reference is added to the block's args, it will communicate to the platform that the block\n * expects enrichments of the referenced block to be available in the context of the current block.\n */\n refsWithEnrichments?: boolean;\n /**\n * Label derivation options.\n * If provided, it will be used to derive labels for the options.\n * If not provided, labels will be derived using the default logic.\n */\n label?: ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps;\n};\n\nexport class ResultPool implements ColumnProvider, AxisLabelProvider {\n private readonly ctx: GlobalCfgRenderCtx = getCfgRenderCtx();\n\n /**\n * @deprecated use getOptions()\n */\n public calculateOptions(predicate: PSpecPredicate): Option[] {\n return this.ctx.calculateOptions(predicate);\n }\n\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n opts?: GetOptionsOpts,\n ): Option[];\n /** @deprecated wrap label ops with { label: <...> } */\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n label?: ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps,\n ): Option[];\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n opts?: GetOptionsOpts | ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps,\n ): Option[] {\n const predicate = typeof predicateOrSelector === 'function'\n ? predicateOrSelector\n : selectorsToPredicate(predicateOrSelector);\n const filtered = this.getSpecs().entries.filter((s) => predicate(s.obj));\n\n let labelOps: LabelDerivationOps | ((spec: PObjectSpec, ref: PlRef) => string) = {};\n let refsWithEnrichments: boolean = false;\n if (typeof opts !== 'undefined') {\n if (typeof opts === 'function') {\n labelOps = opts;\n } else if (typeof opts === 'object') {\n if ('includeNativeLabel' in opts || 'separator' in opts || 'addLabelAsSuffix' in opts) {\n labelOps = opts;\n } else {\n opts = opts as GetOptionsOpts;\n labelOps = opts.label ?? {};\n refsWithEnrichments = opts.refsWithEnrichments ?? false;\n }\n }\n }\n\n if (typeof labelOps === 'object')\n return deriveLabels(filtered, (o) => o.obj, labelOps ?? {}).map(({ value: { ref }, label }) => ({\n ref: withEnrichments(ref, refsWithEnrichments),\n label,\n }));\n else\n return filtered.map(({ ref, obj }) => ({\n ref: withEnrichments(ref, refsWithEnrichments),\n label: labelOps(obj, ref),\n }));\n }\n\n public resolveAnchorCtx(anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>): AnchoredIdDeriver | undefined {\n if (anchorsOrCtx instanceof AnchoredIdDeriver) return anchorsOrCtx;\n const resolvedAnchors: Record<string, PColumnSpec> = {};\n for (const [key, value] of Object.entries(anchorsOrCtx)) {\n if (isPlRef(value)) {\n const resolvedSpec = this.getPColumnSpecByRef(value);\n if (!resolvedSpec)\n return undefined;\n resolvedAnchors[key] = resolvedSpec;\n } else {\n resolvedAnchors[key] = value;\n }\n }\n return new AnchoredIdDeriver(resolvedAnchors);\n }\n\n /**\n * Returns columns that match the provided anchors and selectors. It applies axis filters and label derivation.\n *\n * @param anchorsOrCtx - Anchor context for column selection (same as in getCanonicalOptions)\n * @param predicateOrSelectors - Predicate or selectors for filtering columns (same as in getCanonicalOptions)\n * @param opts - Optional configuration for label generation and data waiting\n * @returns A PFrameHandle for the created PFrame, or undefined if any required data is missing\n */\n public getAnchoredPColumns(\n anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>,\n predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],\n opts?: UniversalPColumnOpts,\n ): PColumn<PColumnDataUniversal>[] | undefined {\n const anchorCtx = this.resolveAnchorCtx(anchorsOrCtx);\n if (!anchorCtx) return undefined;\n return new PColumnCollection()\n .addColumnProvider(this)\n .addAxisLabelProvider(this)\n .getColumns(predicateOrSelectors, {\n ...opts,\n anchorCtx,\n });\n }\n\n /**\n * Calculates anchored identifier options for columns matching a given predicate and returns their\n * canonicalized representations.\n *\n * This function filters column specifications from the result pool that match the provided predicate,\n * creates a standardized AnchorCtx from the provided anchors, and generates a list of label-value\n * pairs for UI components (like dropdowns).\n *\n * @param anchorsOrCtx - Either:\n * - An existing AnchorCtx instance\n * - A record mapping anchor IDs to PColumnSpec objects\n * - A record mapping anchor IDs to PlRef objects (which will be resolved to PColumnSpec)\n * @param predicateOrSelectors - Either:\n * - A predicate function that takes a PColumnSpec and returns a boolean.\n * Only specs that return true will be included.\n * - An APColumnSelector object for declarative filtering, which will be\n * resolved against the provided anchors and matched using matchPColumn.\n * - An array of APColumnSelector objects - columns matching ANY selector\n * in the array will be included (OR operation).\n * @param opts - Optional configuration for label generation:\n * - labelOps: Optional configuration for label generation:\n * - includeNativeLabel: Whether to include native column labels\n * - separator: String to use between label parts (defaults to \" / \")\n * - addLabelAsSuffix: Whether to add labels as suffix instead of prefix\n * - dontWaitAllData: Whether to skip columns that don't have all data (if not set, will return undefined,\n * if at least one column that requires splitting is missing data)\n * @returns An array of objects with `label` (display text) and `value` (anchored ID string) properties,\n * or undefined if any PlRef resolution fails.\n */\n getCanonicalOptions(\n anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>,\n predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],\n opts?: UniversalPColumnOpts,\n ): { label: string; value: SUniversalPColumnId }[] | undefined {\n const anchorCtx = this.resolveAnchorCtx(anchorsOrCtx);\n if (!anchorCtx) return undefined;\n const entries = new PColumnCollection()\n .addColumnProvider(this)\n .addAxisLabelProvider(this)\n .getUniversalEntries(predicateOrSelectors, {\n ...opts,\n anchorCtx,\n });\n if (!entries) return undefined;\n return entries.map((item) => ({\n value: item.id,\n label: item.label,\n }));\n }\n\n /**\n * @deprecated use getData()\n */\n public getDataFromResultPool(): ResultCollection<PObject<TreeNodeAccessor>> {\n return this.getData();\n }\n\n public getData(): ResultCollection<PObject<TreeNodeAccessor>> {\n const result = this.ctx.getDataFromResultPool();\n return {\n isComplete: result.isComplete,\n entries: result.entries.map((e) => ({\n ref: e.ref,\n obj: {\n ...e.obj,\n data: new TreeNodeAccessor(e.obj.data, [e.ref.blockId, e.ref.name]),\n },\n })),\n };\n }\n\n /**\n * @deprecated use getDataWithErrors()\n */\n public getDataWithErrorsFromResultPool(): ResultCollection<\n Optional<PObject<ValueOrError<TreeNodeAccessor, Error>>, 'id'>\n > {\n return this.getDataWithErrors();\n }\n\n public getDataWithErrors(): ResultCollection<\n Optional<PObject<ValueOrError<TreeNodeAccessor, Error>>, 'id'>\n > {\n const result = this.ctx.getDataWithErrorsFromResultPool();\n return {\n isComplete: result.isComplete,\n entries: result.entries.map((e) => ({\n ref: e.ref,\n obj: {\n ...e.obj,\n data: mapValueInVOE(\n e.obj.data,\n (handle) => new TreeNodeAccessor(handle, [e.ref.blockId, e.ref.name]),\n ),\n },\n })),\n };\n }\n\n /**\n * @deprecated use getSpecs()\n */\n public getSpecsFromResultPool(): ResultCollection<PObjectSpec> {\n return this.getSpecs();\n }\n\n public getSpecs(): ResultCollection<PObjectSpec> {\n return this.ctx.getSpecsFromResultPool();\n }\n\n /**\n * @param ref a Ref\n * @returns data associated with the ref\n */\n public getDataByRef(ref: PlRef): PObject<TreeNodeAccessor> | undefined {\n // @TODO remove after 1 Jan 2025; forward compatibility\n if (typeof this.ctx.getDataFromResultPoolByRef === 'undefined')\n return this.getData().entries.find(\n (f) => f.ref.blockId === ref.blockId && f.ref.name === ref.name,\n )?.obj;\n const data = this.ctx.getDataFromResultPoolByRef(ref.blockId, ref.name); // Keep original call\n // Need to handle undefined case before mapping\n if (!data) return undefined;\n return mapPObjectData(\n data,\n (handle) => new TreeNodeAccessor(handle, [ref.blockId, ref.name]),\n );\n }\n\n /**\n * Returns data associated with the ref ensuring that it is a p-column.\n * @param ref a Ref\n * @returns p-column associated with the ref\n */\n public getPColumnByRef(ref: PlRef): PColumn<TreeNodeAccessor> | undefined {\n const data = this.getDataByRef(ref);\n if (!data) return undefined;\n return ensurePColumn(data);\n }\n\n /**\n * Returns spec associated with the ref ensuring that it is a p-column spec.\n * @param ref a Ref\n * @returns p-column spec associated with the ref\n */\n public getPColumnSpecByRef(ref: PlRef): PColumnSpec | undefined {\n const spec = this.getSpecByRef(ref);\n if (!spec) return undefined;\n if (!isPColumnSpec(spec)) throw new Error(`not a PColumn spec (kind = ${spec.kind})`);\n return spec;\n }\n\n /**\n * @param ref a Ref\n * @returns object spec associated with the ref\n */\n public getSpecByRef(ref: PlRef): PObjectSpec | undefined {\n return this.ctx.getSpecFromResultPoolByRef(ref.blockId, ref.name);\n }\n\n /**\n * @param spec object specification\n * @returns array of data objects with compatible specs\n * @deprecated delete this method after Jan 1, 2025\n */\n public findDataWithCompatibleSpec(spec: PColumnSpec): PObject<TreeNodeAccessor>[] {\n const result: PObject<TreeNodeAccessor>[] = [];\n\n out: for (const data of this.getData().entries) {\n if (!isPColumnSpec(data.obj.spec)) {\n continue;\n }\n\n const oth = data.obj.spec;\n\n if (spec.name !== oth.name) {\n continue;\n }\n\n if (spec.valueType !== oth.valueType) {\n continue;\n }\n\n if (spec.axesSpec.length !== oth.axesSpec.length) {\n continue;\n }\n\n if (!matchDomain(spec.domain, oth.domain)) {\n continue;\n }\n\n for (let i = 0; i < spec.axesSpec.length; ++i) {\n const qAx = spec.axesSpec[i];\n const tAx = oth.axesSpec[i];\n if (qAx.name !== tAx.name) {\n continue out;\n }\n if (qAx.type !== tAx.type) {\n continue out;\n }\n if (!matchDomain(qAx.domain, tAx.domain)) {\n continue out;\n }\n }\n\n result.push(data.obj);\n }\n return result;\n }\n\n /**\n * Find labels data for a given axis id. It will search for a label column and return its data as a map.\n * @returns a map of axis value => label\n */\n public findLabels(axis: AxisId): Record<string | number, string> | undefined {\n const dataPool = this.getData();\n for (const column of dataPool.entries) {\n if (!isPColumn(column.obj)) continue;\n\n const spec = column.obj.spec;\n if (\n spec.name === PColumnName.Label\n && spec.axesSpec.length === 1\n && spec.axesSpec[0].name === axis.name\n && spec.axesSpec[0].type === axis.type\n && matchDomain(axis.domain, spec.axesSpec[0].domain)\n ) {\n if (column.obj.data.resourceType.name !== 'PColumnData/Json') {\n throw Error(`Expected JSON column for labels, got: ${column.obj.data.resourceType.name}`);\n }\n const labels: Record<string | number, string> = Object.fromEntries(\n Object.entries(\n column.obj.data.getDataAsJson<{\n data: Record<string | number, string>;\n }>().data,\n ).map((e) => [JSON.parse(e[0])[0], e[1]]),\n );\n\n return labels;\n }\n }\n return undefined;\n }\n\n /**\n * Selects columns based on the provided selectors, returning PColumn objects\n * with lazily loaded data.\n *\n * @param selectors - A predicate function, a single selector, or an array of selectors.\n * @returns An array of PColumn objects matching the selectors. Data is loaded on first access.\n */\n public selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<TreeNodeAccessor | undefined>[] {\n const predicate = typeof selectors === 'function' ? selectors : selectorsToPredicate(selectors);\n\n const matchedSpecs = this.getSpecs().entries.filter(({ obj: spec }) => {\n if (!isPColumnSpec(spec)) return false;\n return predicate(spec);\n });\n\n // Map specs to PColumn objects with lazy data loading\n return matchedSpecs.map(({ ref, obj: spec }) => {\n // Type assertion needed because filter ensures it's PColumnSpec\n const pcolumnSpec = spec as PColumnSpec;\n let _cachedData: TreeNodeAccessor | undefined | null = null; // Use null to distinguish initial state from undefined result\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this; // Capture 'this' for use inside the getter\n\n return {\n id: canonicalize(ref) as PObjectId,\n spec: pcolumnSpec,\n get data(): TreeNodeAccessor | undefined {\n if (_cachedData !== null) {\n return _cachedData; // Return cached data (could be undefined if fetch failed)\n }\n\n _cachedData = self.getPColumnByRef(ref)?.data;\n return _cachedData;\n },\n } satisfies PColumn<TreeNodeAccessor | undefined>; // Cast needed because 'data' is a getter\n });\n }\n\n /**\n * Find labels data for a given axis id of a p-column.\n * @returns a map of axis value => label\n */\n public findLabelsForColumnAxis(column: PColumnSpec, axisIdx: number): Record<string | number, string> | undefined {\n const labels = this.findLabels(column.axesSpec[axisIdx]);\n if (!labels) return undefined;\n const axisKeys = readAnnotation(column, `pl7.app/axisKeys/${axisIdx}`);\n if (axisKeys !== undefined) {\n const keys = JSON.parse(axisKeys) as string[];\n return Object.fromEntries(keys.map((key) => {\n return [key, labels[key] ?? 'Unlabelled'];\n }));\n } else {\n return labels;\n }\n }\n}\n\n/** Main entry point to the API available within model lambdas (like outputs, sections, etc..) */\nexport abstract class RenderCtxBase<Args, Data> {\n protected readonly ctx: GlobalCfgRenderCtx;\n\n constructor() {\n this.ctx = getCfgRenderCtx();\n }\n\n private _dataCache?: { v: Data };\n\n public get data(): Data {\n if (this._dataCache === undefined) {\n const raw = this.ctx.data;\n const value = typeof raw === 'function' ? raw() : raw;\n this._dataCache = { v: value ? JSON.parse(value) : ({} as Data) };\n }\n return this._dataCache.v;\n }\n\n // lazy rendering because this feature is rarely used\n private _activeArgsCache?: { v?: Args };\n\n /**\n * Returns args snapshot the block was executed for (i.e. when \"Run\" button was pressed).\n * Returns undefined, if block was never executed or stopped mid-way execution, so that the result was cleared.\n * */\n public get activeArgs(): Args | undefined {\n if (this._activeArgsCache === undefined) {\n const raw = this.ctx.activeArgs;\n const value = typeof raw === 'function' ? raw() : raw;\n this._activeArgsCache = {\n v: value ? JSON.parse(value) : undefined,\n };\n }\n return this._activeArgsCache.v;\n }\n\n // /** Can be used to determine features provided by the desktop instance. */\n // public get featureFlags() {\n // return this.ctx.featureFlags;\n // }\n\n private getNamedAccessor(name: string): TreeNodeAccessor | undefined {\n return ifDef(\n this.ctx.getAccessorHandleByName(name),\n (accessor) => new TreeNodeAccessor(accessor, [name]),\n );\n }\n\n public get prerun(): TreeNodeAccessor | undefined {\n return this.getNamedAccessor(StagingAccessorName);\n }\n\n public get outputs(): TreeNodeAccessor | undefined {\n return this.getNamedAccessor(MainAccessorName);\n }\n\n public readonly resultPool = new ResultPool();\n\n /**\n * Find labels data for a given axis id. It will search for a label column and return its data as a map.\n * @returns a map of axis value => label\n * @deprecated Use resultPool.findLabels instead\n */\n public findLabels(axis: AxisId): Record<string | number, string> | undefined {\n return this.resultPool.findLabels(axis);\n }\n\n private verifyInlineAndExplicitColumnsSupport(columns: (PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>)[]) {\n const hasInlineColumns = columns.some((c) => !(c.data instanceof TreeNodeAccessor) || isDataInfo(c.data)); // Updated check for DataInfo\n const inlineColumnsSupport = this.ctx.featureFlags?.inlineColumnsSupport === true;\n if (hasInlineColumns && !inlineColumnsSupport) throw Error(`Inline or explicit columns not supported`); // Combined check\n\n // Removed redundant explicitColumns check\n }\n\n private patchPTableDef(def: PTableDef<PColumn<PColumnDataUniversal>>): PTableDef<PColumn<PColumnDataUniversal>> {\n if (!this.ctx.featureFlags?.pTablePartitionFiltersSupport) {\n // For old desktop move all partition filters to filters field as it doesn't read partitionFilters field\n def = {\n ...def,\n partitionFilters: [],\n filters: [...def.partitionFilters, ...def.filters],\n };\n }\n if (!this.ctx.featureFlags?.pFrameInSetFilterSupport) {\n def = {\n ...def,\n partitionFilters: patchInSetFilters(def.partitionFilters),\n filters: patchInSetFilters(def.filters),\n };\n }\n return def;\n }\n\n // TODO remove all non-PColumn fields\n public createPFrame(def: PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>>): PFrameHandle | undefined {\n this.verifyInlineAndExplicitColumnsSupport(def);\n if (!allPColumnsReady(def)) return undefined;\n return this.ctx.createPFrame(\n def.map((c) => transformPColumnData(c)),\n );\n }\n\n // TODO remove all non-PColumn fields\n public createPTable(def: PTableDef<PColumn<PColumnDataUniversal>>): PTableHandle | undefined;\n public createPTable(def: {\n columns: PColumn<PColumnDataUniversal>[];\n filters?: PTableRecordFilter[];\n /** Table sorting */\n sorting?: PTableSorting[];\n }): PTableHandle | undefined;\n public createPTable(\n def:\n | PTableDef<PColumn<PColumnDataUniversal>>\n | {\n columns: PColumn<PColumnDataUniversal>[];\n filters?: PTableRecordFilter[];\n /** Table sorting */\n sorting?: PTableSorting[];\n },\n ): PTableHandle | undefined {\n let rawDef: PTableDef<PColumn<PColumnDataUniversal>>;\n if ('columns' in def) {\n rawDef = this.patchPTableDef({\n src: {\n type: 'full',\n entries: def.columns.map((c) => ({ type: 'column', column: c })),\n },\n partitionFilters: def.filters ?? [],\n filters: [],\n sorting: def.sorting ?? [],\n });\n } else {\n rawDef = this.patchPTableDef(def);\n }\n const columns = extractAllColumns(rawDef.src);\n this.verifyInlineAndExplicitColumnsSupport(columns);\n if (!allPColumnsReady(columns)) return undefined;\n return this.ctx.createPTable(\n mapPTableDef(rawDef, (po) => transformPColumnData(po)),\n );\n }\n\n /** @deprecated scheduled for removal from SDK */\n public getBlockLabel(blockId: string): string {\n return this.ctx.getBlockLabel(blockId);\n }\n\n public getCurrentUnstableMarker(): string | undefined {\n return this.ctx.getCurrentUnstableMarker();\n }\n\n public logInfo(msg: string): void {\n this.ctx.logInfo(msg);\n }\n\n public logWarn(msg: string): void {\n this.ctx.logWarn(msg);\n }\n\n public logError(msg: string): void {\n this.ctx.logError(msg);\n }\n}\n\n/** Main entry point to the API available within model lambdas (like outputs, sections, etc..) for v3+ blocks */\nexport class RenderCtx<Args, Data> extends RenderCtxBase<Args, Data> {\n private _argsCache?: { v: Args | undefined };\n public get args(): Args | undefined {\n if (this._argsCache === undefined) {\n const raw = this.ctx.args;\n const value = typeof raw === 'function' ? raw() : raw;\n // args can be undefined when derivation fails (e.g., validation error in args())\n this._argsCache = { v: value === undefined ? undefined : JSON.parse(value) };\n }\n return this._argsCache.v;\n }\n}\n\n/** Render context for legacy v1/v2 blocks - provides backward compatibility */\nexport class RenderCtxLegacy<Args, UiState> extends RenderCtxBase<Args, UiState> {\n private _argsCache?: { v: Args };\n public get args(): Args {\n if (this._argsCache === undefined) {\n const raw = this.ctx.args;\n const value = typeof raw === 'function' ? raw() : raw;\n this._argsCache = { v: JSON.parse(value) };\n }\n return this._argsCache.v;\n }\n\n private _uiStateCache?: { v: UiState };\n\n public get uiState(): UiState {\n if (this._uiStateCache === undefined) {\n const raw = this.ctx.uiState!;\n const value = typeof raw === 'function' ? raw() : raw;\n this._uiStateCache = { v: value ? JSON.parse(value) : ({} as UiState) };\n }\n return this._uiStateCache.v;\n }\n}\n\nexport type RenderFunction<Args = unknown, State = unknown, Ret = unknown> = (\n rCtx: RenderCtx<Args, State>\n) => Ret;\n\nexport type RenderFunctionLegacy<Args = unknown, State = unknown, Ret = unknown> = (\n rCtx: RenderCtxLegacy<Args, State>\n) => Ret;\n\nexport type UnwrapFutureRef<K> =\n K extends FutureRef<infer T>\n ? T\n : K extends bigint | boolean | null | number | string | symbol | undefined\n ? K\n : { [key in keyof K]: UnwrapFutureRef<K[key]> };\n\nexport type InferRenderFunctionReturn<RF extends AnyFunction> = RF extends (...args: any) => infer R\n ? UnwrapFutureRef<R>\n : never;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sources":["../../src/render/api.ts"],"sourcesContent":["import type {\n AnchoredPColumnSelector,\n AnyFunction,\n AxisId,\n DataInfo,\n Option,\n PColumn,\n PColumnLazy,\n PColumnSelector,\n PColumnSpec,\n PColumnValues,\n PFrameDef,\n PFrameHandle,\n PObject,\n PObjectId,\n PObjectSpec,\n PSpecPredicate,\n PTableDef,\n PTableHandle,\n PTableRecordFilter,\n PTableSorting,\n PlRef,\n ResolveAnchorsOptions,\n ResultCollection,\n SUniversalPColumnId,\n ValueOrError,\n} from '@milaboratories/pl-model-common';\nimport {\n AnchoredIdDeriver,\n ensurePColumn,\n extractAllColumns,\n isDataInfo,\n isPColumn,\n isPColumnSpec,\n isPlRef,\n mapDataInfo,\n mapPObjectData,\n mapPTableDef,\n mapValueInVOE,\n PColumnName,\n readAnnotation,\n selectorsToPredicate,\n withEnrichments,\n} from '@milaboratories/pl-model-common';\nimport canonicalize from 'canonicalize';\nimport type { Optional } from 'utility-types';\nimport { getCfgRenderCtx } from '../internal';\nimport { TreeNodeAccessor, ifDef } from './accessor';\nimport type { FutureRef } from './future';\nimport type { AccessorHandle, GlobalCfgRenderCtx } from './internal';\nimport { MainAccessorName, StagingAccessorName } from './internal';\nimport { PColumnCollection, type AxisLabelProvider, type ColumnProvider } from './util/column_collection';\nimport type { LabelDerivationOps } from './util/label';\nimport { deriveLabels } from './util/label';\nimport type { APColumnSelectorWithSplit } from './util/split_selectors';\nimport { patchInSetFilters } from './util/pframe_upgraders';\nimport { allPColumnsReady } from './util';\n\nexport type PColumnDataUniversal<TreeEntry = TreeNodeAccessor> = TreeEntry | DataInfo<TreeEntry> | PColumnValues;\n\n/**\n * Helper function to match domain objects\n * @param query Optional domain to match against\n * @param target Optional domain to match\n * @returns true if domains match, false otherwise\n */\nfunction matchDomain(query?: Record<string, string>, target?: Record<string, string>) {\n if (query === undefined) return target === undefined;\n if (target === undefined) return true;\n for (const k in target) {\n if (query[k] !== target[k]) return false;\n }\n return true;\n}\n\nexport type UniversalColumnOption = { label: string; value: SUniversalPColumnId };\n\n/**\n * Transforms PColumn data into the internal representation expected by the platform\n * @param data Data from a PColumn to transform\n * @returns Transformed data compatible with platform API\n */\nfunction transformPColumnData(\n data: PColumn<PColumnDataUniversal> | PColumnLazy<PColumnDataUniversal>,\n): PColumn<PColumnValues | AccessorHandle | DataInfo<AccessorHandle>> {\n return mapPObjectData(data, (d) => {\n if (d instanceof TreeNodeAccessor) {\n return d.handle;\n } else if (isDataInfo(d)) {\n return mapDataInfo(d, (accessor) => accessor.handle);\n } else {\n return d;\n }\n });\n}\n\ntype UniversalPColumnOpts = {\n labelOps?: LabelDerivationOps;\n dontWaitAllData?: boolean;\n exclude?: AnchoredPColumnSelector | AnchoredPColumnSelector[];\n} & ResolveAnchorsOptions;\n\ntype GetOptionsOpts = {\n /**\n * If true, references returned by the method will contain `requireEnrichments` flag set to true.\n * If this reference is added to the block's args, it will communicate to the platform that the block\n * expects enrichments of the referenced block to be available in the context of the current block.\n */\n refsWithEnrichments?: boolean;\n /**\n * Label derivation options.\n * If provided, it will be used to derive labels for the options.\n * If not provided, labels will be derived using the default logic.\n */\n label?: ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps;\n};\n\nexport class ResultPool implements ColumnProvider, AxisLabelProvider {\n private readonly ctx: GlobalCfgRenderCtx = getCfgRenderCtx();\n\n /**\n * @deprecated use getOptions()\n */\n public calculateOptions(predicate: PSpecPredicate): Option[] {\n return this.ctx.calculateOptions(predicate);\n }\n\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n opts?: GetOptionsOpts,\n ): Option[];\n /** @deprecated wrap label ops with { label: <...> } */\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n label?: ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps,\n ): Option[];\n public getOptions(\n predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[],\n opts?: GetOptionsOpts | ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps,\n ): Option[] {\n const predicate = typeof predicateOrSelector === 'function'\n ? predicateOrSelector\n : selectorsToPredicate(predicateOrSelector);\n const filtered = this.getSpecs().entries.filter((s) => predicate(s.obj));\n\n let labelOps: LabelDerivationOps | ((spec: PObjectSpec, ref: PlRef) => string) = {};\n let refsWithEnrichments: boolean = false;\n if (typeof opts !== 'undefined') {\n if (typeof opts === 'function') {\n labelOps = opts;\n } else if (typeof opts === 'object') {\n if ('includeNativeLabel' in opts || 'separator' in opts || 'addLabelAsSuffix' in opts) {\n labelOps = opts;\n } else {\n opts = opts as GetOptionsOpts;\n labelOps = opts.label ?? {};\n refsWithEnrichments = opts.refsWithEnrichments ?? false;\n }\n }\n }\n\n if (typeof labelOps === 'object')\n return deriveLabels(filtered, (o) => o.obj, labelOps ?? {}).map(({ value: { ref }, label }) => ({\n ref: withEnrichments(ref, refsWithEnrichments),\n label,\n }));\n else\n return filtered.map(({ ref, obj }) => ({\n ref: withEnrichments(ref, refsWithEnrichments),\n label: labelOps(obj, ref),\n }));\n }\n\n public resolveAnchorCtx(anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>): AnchoredIdDeriver | undefined {\n if (anchorsOrCtx instanceof AnchoredIdDeriver) return anchorsOrCtx;\n const resolvedAnchors: Record<string, PColumnSpec> = {};\n for (const [key, value] of Object.entries(anchorsOrCtx)) {\n if (isPlRef(value)) {\n const resolvedSpec = this.getPColumnSpecByRef(value);\n if (!resolvedSpec)\n return undefined;\n resolvedAnchors[key] = resolvedSpec;\n } else {\n resolvedAnchors[key] = value;\n }\n }\n return new AnchoredIdDeriver(resolvedAnchors);\n }\n\n /**\n * Returns columns that match the provided anchors and selectors. It applies axis filters and label derivation.\n *\n * @param anchorsOrCtx - Anchor context for column selection (same as in getCanonicalOptions)\n * @param predicateOrSelectors - Predicate or selectors for filtering columns (same as in getCanonicalOptions)\n * @param opts - Optional configuration for label generation and data waiting\n * @returns A PFrameHandle for the created PFrame, or undefined if any required data is missing\n */\n public getAnchoredPColumns(\n anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>,\n predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],\n opts?: UniversalPColumnOpts,\n ): PColumn<PColumnDataUniversal>[] | undefined {\n const anchorCtx = this.resolveAnchorCtx(anchorsOrCtx);\n if (!anchorCtx) return undefined;\n return new PColumnCollection()\n .addColumnProvider(this)\n .addAxisLabelProvider(this)\n .getColumns(predicateOrSelectors, {\n ...opts,\n anchorCtx,\n });\n }\n\n /**\n * Calculates anchored identifier options for columns matching a given predicate and returns their\n * canonicalized representations.\n *\n * This function filters column specifications from the result pool that match the provided predicate,\n * creates a standardized AnchorCtx from the provided anchors, and generates a list of label-value\n * pairs for UI components (like dropdowns).\n *\n * @param anchorsOrCtx - Either:\n * - An existing AnchorCtx instance\n * - A record mapping anchor IDs to PColumnSpec objects\n * - A record mapping anchor IDs to PlRef objects (which will be resolved to PColumnSpec)\n * @param predicateOrSelectors - Either:\n * - A predicate function that takes a PColumnSpec and returns a boolean.\n * Only specs that return true will be included.\n * - An APColumnSelector object for declarative filtering, which will be\n * resolved against the provided anchors and matched using matchPColumn.\n * - An array of APColumnSelector objects - columns matching ANY selector\n * in the array will be included (OR operation).\n * @param opts - Optional configuration for label generation:\n * - labelOps: Optional configuration for label generation:\n * - includeNativeLabel: Whether to include native column labels\n * - separator: String to use between label parts (defaults to \" / \")\n * - addLabelAsSuffix: Whether to add labels as suffix instead of prefix\n * - dontWaitAllData: Whether to skip columns that don't have all data (if not set, will return undefined,\n * if at least one column that requires splitting is missing data)\n * @returns An array of objects with `label` (display text) and `value` (anchored ID string) properties,\n * or undefined if any PlRef resolution fails.\n */\n getCanonicalOptions(\n anchorsOrCtx: AnchoredIdDeriver | Record<string, PColumnSpec | PlRef>,\n predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],\n opts?: UniversalPColumnOpts,\n ): { label: string; value: SUniversalPColumnId }[] | undefined {\n const anchorCtx = this.resolveAnchorCtx(anchorsOrCtx);\n if (!anchorCtx) return undefined;\n const entries = new PColumnCollection()\n .addColumnProvider(this)\n .addAxisLabelProvider(this)\n .getUniversalEntries(predicateOrSelectors, {\n ...opts,\n anchorCtx,\n });\n if (!entries) return undefined;\n return entries.map((item) => ({\n value: item.id,\n label: item.label,\n }));\n }\n\n /**\n * @deprecated use getData()\n */\n public getDataFromResultPool(): ResultCollection<PObject<TreeNodeAccessor>> {\n return this.getData();\n }\n\n public getData(): ResultCollection<PObject<TreeNodeAccessor>> {\n const result = this.ctx.getDataFromResultPool();\n return {\n isComplete: result.isComplete,\n entries: result.entries.map((e) => ({\n ref: e.ref,\n obj: {\n ...e.obj,\n data: new TreeNodeAccessor(e.obj.data, [e.ref.blockId, e.ref.name]),\n },\n })),\n };\n }\n\n /**\n * @deprecated use getDataWithErrors()\n */\n public getDataWithErrorsFromResultPool(): ResultCollection<\n Optional<PObject<ValueOrError<TreeNodeAccessor, Error>>, 'id'>\n > {\n return this.getDataWithErrors();\n }\n\n public getDataWithErrors(): ResultCollection<\n Optional<PObject<ValueOrError<TreeNodeAccessor, Error>>, 'id'>\n > {\n const result = this.ctx.getDataWithErrorsFromResultPool();\n return {\n isComplete: result.isComplete,\n entries: result.entries.map((e) => ({\n ref: e.ref,\n obj: {\n ...e.obj,\n data: mapValueInVOE(\n e.obj.data,\n (handle) => new TreeNodeAccessor(handle, [e.ref.blockId, e.ref.name]),\n ),\n },\n })),\n };\n }\n\n /**\n * @deprecated use getSpecs()\n */\n public getSpecsFromResultPool(): ResultCollection<PObjectSpec> {\n return this.getSpecs();\n }\n\n public getSpecs(): ResultCollection<PObjectSpec> {\n return this.ctx.getSpecsFromResultPool();\n }\n\n /**\n * @param ref a Ref\n * @returns data associated with the ref\n */\n public getDataByRef(ref: PlRef): PObject<TreeNodeAccessor> | undefined {\n // @TODO remove after 1 Jan 2025; forward compatibility\n if (typeof this.ctx.getDataFromResultPoolByRef === 'undefined')\n return this.getData().entries.find(\n (f) => f.ref.blockId === ref.blockId && f.ref.name === ref.name,\n )?.obj;\n const data = this.ctx.getDataFromResultPoolByRef(ref.blockId, ref.name); // Keep original call\n // Need to handle undefined case before mapping\n if (!data) return undefined;\n return mapPObjectData(\n data,\n (handle) => new TreeNodeAccessor(handle, [ref.blockId, ref.name]),\n );\n }\n\n /**\n * Returns data associated with the ref ensuring that it is a p-column.\n * @param ref a Ref\n * @returns p-column associated with the ref\n */\n public getPColumnByRef(ref: PlRef): PColumn<TreeNodeAccessor> | undefined {\n const data = this.getDataByRef(ref);\n if (!data) return undefined;\n return ensurePColumn(data);\n }\n\n /**\n * Returns spec associated with the ref ensuring that it is a p-column spec.\n * @param ref a Ref\n * @returns p-column spec associated with the ref\n */\n public getPColumnSpecByRef(ref: PlRef): PColumnSpec | undefined {\n const spec = this.getSpecByRef(ref);\n if (!spec) return undefined;\n if (!isPColumnSpec(spec)) throw new Error(`not a PColumn spec (kind = ${spec.kind})`);\n return spec;\n }\n\n /**\n * @param ref a Ref\n * @returns object spec associated with the ref\n */\n public getSpecByRef(ref: PlRef): PObjectSpec | undefined {\n return this.ctx.getSpecFromResultPoolByRef(ref.blockId, ref.name);\n }\n\n /**\n * @param spec object specification\n * @returns array of data objects with compatible specs\n * @deprecated delete this method after Jan 1, 2025\n */\n public findDataWithCompatibleSpec(spec: PColumnSpec): PObject<TreeNodeAccessor>[] {\n const result: PObject<TreeNodeAccessor>[] = [];\n\n out: for (const data of this.getData().entries) {\n if (!isPColumnSpec(data.obj.spec)) {\n continue;\n }\n\n const oth = data.obj.spec;\n\n if (spec.name !== oth.name) {\n continue;\n }\n\n if (spec.valueType !== oth.valueType) {\n continue;\n }\n\n if (spec.axesSpec.length !== oth.axesSpec.length) {\n continue;\n }\n\n if (!matchDomain(spec.domain, oth.domain)) {\n continue;\n }\n\n for (let i = 0; i < spec.axesSpec.length; ++i) {\n const qAx = spec.axesSpec[i];\n const tAx = oth.axesSpec[i];\n if (qAx.name !== tAx.name) {\n continue out;\n }\n if (qAx.type !== tAx.type) {\n continue out;\n }\n if (!matchDomain(qAx.domain, tAx.domain)) {\n continue out;\n }\n }\n\n result.push(data.obj);\n }\n return result;\n }\n\n /**\n * Find labels data for a given axis id. It will search for a label column and return its data as a map.\n * @returns a map of axis value => label\n */\n public findLabels(axis: AxisId): Record<string | number, string> | undefined {\n const dataPool = this.getData();\n for (const column of dataPool.entries) {\n if (!isPColumn(column.obj)) continue;\n\n const spec = column.obj.spec;\n if (\n spec.name === PColumnName.Label\n && spec.axesSpec.length === 1\n && spec.axesSpec[0].name === axis.name\n && spec.axesSpec[0].type === axis.type\n && matchDomain(axis.domain, spec.axesSpec[0].domain)\n ) {\n if (column.obj.data.resourceType.name !== 'PColumnData/Json') {\n throw Error(`Expected JSON column for labels, got: ${column.obj.data.resourceType.name}`);\n }\n const labels: Record<string | number, string> = Object.fromEntries(\n Object.entries(\n column.obj.data.getDataAsJson<{\n data: Record<string | number, string>;\n }>().data,\n ).map((e) => [JSON.parse(e[0])[0], e[1]]),\n );\n\n return labels;\n }\n }\n return undefined;\n }\n\n /**\n * Selects columns based on the provided selectors, returning PColumn objects\n * with lazily loaded data.\n *\n * @param selectors - A predicate function, a single selector, or an array of selectors.\n * @returns An array of PColumn objects matching the selectors. Data is loaded on first access.\n */\n public selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<TreeNodeAccessor | undefined>[] {\n const predicate = typeof selectors === 'function' ? selectors : selectorsToPredicate(selectors);\n\n const matchedSpecs = this.getSpecs().entries.filter(({ obj: spec }) => {\n if (!isPColumnSpec(spec)) return false;\n return predicate(spec);\n });\n\n // Map specs to PColumn objects with lazy data loading\n return matchedSpecs.map(({ ref, obj: spec }) => {\n // Type assertion needed because filter ensures it's PColumnSpec\n const pcolumnSpec = spec as PColumnSpec;\n let _cachedData: TreeNodeAccessor | undefined | null = null; // Use null to distinguish initial state from undefined result\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this; // Capture 'this' for use inside the getter\n\n return {\n id: canonicalize(ref) as PObjectId,\n spec: pcolumnSpec,\n get data(): TreeNodeAccessor | undefined {\n if (_cachedData !== null) {\n return _cachedData; // Return cached data (could be undefined if fetch failed)\n }\n\n _cachedData = self.getPColumnByRef(ref)?.data;\n return _cachedData;\n },\n } satisfies PColumn<TreeNodeAccessor | undefined>; // Cast needed because 'data' is a getter\n });\n }\n\n /**\n * Find labels data for a given axis id of a p-column.\n * @returns a map of axis value => label\n */\n public findLabelsForColumnAxis(column: PColumnSpec, axisIdx: number): Record<string | number, string> | undefined {\n const labels = this.findLabels(column.axesSpec[axisIdx]);\n if (!labels) return undefined;\n const axisKeys = readAnnotation(column, `pl7.app/axisKeys/${axisIdx}`);\n if (axisKeys !== undefined) {\n const keys = JSON.parse(axisKeys) as string[];\n return Object.fromEntries(keys.map((key) => {\n return [key, labels[key] ?? 'Unlabelled'];\n }));\n } else {\n return labels;\n }\n }\n}\n\n/** Main entry point to the API available within model lambdas (like outputs, sections, etc..) */\nexport abstract class RenderCtxBase<Args, Data> {\n protected readonly ctx: GlobalCfgRenderCtx;\n\n constructor() {\n this.ctx = getCfgRenderCtx();\n }\n\n private _dataCache?: { v: Data };\n\n public get data(): Data {\n if (this._dataCache === undefined) {\n const raw = this.ctx.data;\n const value = typeof raw === 'function' ? raw() : raw;\n this._dataCache = { v: value ? JSON.parse(value) : ({} as Data) };\n }\n return this._dataCache.v;\n }\n\n // lazy rendering because this feature is rarely used\n private _activeArgsCache?: { v?: Args };\n\n /**\n * Returns args snapshot the block was executed for (i.e. when \"Run\" button was pressed).\n * Returns undefined, if block was never executed or stopped mid-way execution, so that the result was cleared.\n * */\n public get activeArgs(): Args | undefined {\n if (this._activeArgsCache === undefined) {\n const raw = this.ctx.activeArgs;\n const value = typeof raw === 'function' ? raw() : raw;\n this._activeArgsCache = {\n v: value ? JSON.parse(value) : undefined,\n };\n }\n return this._activeArgsCache.v;\n }\n\n // /** Can be used to determine features provided by the desktop instance. */\n // public get featureFlags() {\n // return this.ctx.featureFlags;\n // }\n\n private getNamedAccessor(name: string): TreeNodeAccessor | undefined {\n return ifDef(\n this.ctx.getAccessorHandleByName(name),\n (accessor) => new TreeNodeAccessor(accessor, [name]),\n );\n }\n\n public get prerun(): TreeNodeAccessor | undefined {\n return this.getNamedAccessor(StagingAccessorName);\n }\n\n public get outputs(): TreeNodeAccessor | undefined {\n return this.getNamedAccessor(MainAccessorName);\n }\n\n public readonly resultPool = new ResultPool();\n\n /**\n * Find labels data for a given axis id. It will search for a label column and return its data as a map.\n * @returns a map of axis value => label\n * @deprecated Use resultPool.findLabels instead\n */\n public findLabels(axis: AxisId): Record<string | number, string> | undefined {\n return this.resultPool.findLabels(axis);\n }\n\n private verifyInlineAndExplicitColumnsSupport(columns: (PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>)[]) {\n const hasInlineColumns = columns.some((c) => !(c.data instanceof TreeNodeAccessor) || isDataInfo(c.data)); // Updated check for DataInfo\n const inlineColumnsSupport = this.ctx.featureFlags?.inlineColumnsSupport === true;\n if (hasInlineColumns && !inlineColumnsSupport) throw Error(`Inline or explicit columns not supported`); // Combined check\n\n // Removed redundant explicitColumns check\n }\n\n private patchPTableDef(def: PTableDef<PColumn<PColumnDataUniversal>>): PTableDef<PColumn<PColumnDataUniversal>> {\n if (!this.ctx.featureFlags?.pTablePartitionFiltersSupport) {\n // For old desktop move all partition filters to filters field as it doesn't read partitionFilters field\n def = {\n ...def,\n partitionFilters: [],\n filters: [...def.partitionFilters, ...def.filters],\n };\n }\n if (!this.ctx.featureFlags?.pFrameInSetFilterSupport) {\n def = {\n ...def,\n partitionFilters: patchInSetFilters(def.partitionFilters),\n filters: patchInSetFilters(def.filters),\n };\n }\n return def;\n }\n\n // TODO remove all non-PColumn fields\n public createPFrame(def: PFrameDef<PColumn<PColumnDataUniversal> | PColumnLazy<undefined | PColumnDataUniversal>>): PFrameHandle | undefined {\n this.verifyInlineAndExplicitColumnsSupport(def);\n if (!allPColumnsReady(def)) return undefined;\n return this.ctx.createPFrame(\n def.map((c) => transformPColumnData(c)),\n );\n }\n\n // TODO remove all non-PColumn fields\n public createPTable(def: PTableDef<PColumn<PColumnDataUniversal>>): PTableHandle | undefined;\n public createPTable(def: {\n columns: PColumn<PColumnDataUniversal>[];\n filters?: PTableRecordFilter[];\n /** Table sorting */\n sorting?: PTableSorting[];\n }): PTableHandle | undefined;\n public createPTable(\n def:\n | PTableDef<PColumn<PColumnDataUniversal>>\n | {\n columns: PColumn<PColumnDataUniversal>[];\n filters?: PTableRecordFilter[];\n /** Table sorting */\n sorting?: PTableSorting[];\n },\n ): PTableHandle | undefined {\n let rawDef: PTableDef<PColumn<PColumnDataUniversal>>;\n if ('columns' in def) {\n rawDef = this.patchPTableDef({\n src: {\n type: 'full',\n entries: def.columns.map((c) => ({ type: 'column', column: c })),\n },\n partitionFilters: def.filters ?? [],\n filters: [],\n sorting: def.sorting ?? [],\n });\n } else {\n rawDef = this.patchPTableDef(def);\n }\n const columns = extractAllColumns(rawDef.src);\n this.verifyInlineAndExplicitColumnsSupport(columns);\n if (!allPColumnsReady(columns)) return undefined;\n return this.ctx.createPTable(\n mapPTableDef(rawDef, (po) => transformPColumnData(po)),\n );\n }\n\n /** @deprecated scheduled for removal from SDK */\n public getBlockLabel(blockId: string): string {\n return this.ctx.getBlockLabel(blockId);\n }\n\n public getCurrentUnstableMarker(): string | undefined {\n return this.ctx.getCurrentUnstableMarker();\n }\n\n public logInfo(msg: string): void {\n this.ctx.logInfo(msg);\n }\n\n public logWarn(msg: string): void {\n this.ctx.logWarn(msg);\n }\n\n public logError(msg: string): void {\n this.ctx.logError(msg);\n }\n}\n\n/** Main entry point to the API available within model lambdas (like outputs, sections, etc..) for v3+ blocks */\nexport class RenderCtx<Args, Data> extends RenderCtxBase<Args, Data> {\n private _argsCache?: { v: Args | undefined };\n public get args(): Args | undefined {\n if (this._argsCache === undefined) {\n const raw = this.ctx.args;\n const value = typeof raw === 'function' ? raw() : raw;\n // args can be undefined when derivation fails (e.g., validation error in args())\n this._argsCache = { v: value === undefined ? undefined : JSON.parse(value) };\n }\n return this._argsCache.v;\n }\n}\n\n/** Render context for legacy v1/v2 blocks - provides backward compatibility */\nexport class RenderCtxLegacy<Args, UiState> extends RenderCtxBase<Args, UiState> {\n private _argsCache?: { v: Args };\n public get args(): Args {\n if (this._argsCache === undefined) {\n const raw = this.ctx.args;\n const value = typeof raw === 'function' ? raw() : raw;\n this._argsCache = { v: JSON.parse(value) };\n }\n return this._argsCache.v;\n }\n\n private _uiStateCache?: { v: UiState };\n\n public get uiState(): UiState {\n if (this._uiStateCache === undefined) {\n const raw = this.ctx.uiState!;\n const value = typeof raw === 'function' ? raw() : raw;\n this._uiStateCache = { v: value ? JSON.parse(value) : ({} as UiState) };\n }\n return this._uiStateCache.v;\n }\n}\n\nexport type RenderFunction<Args = unknown, State = unknown, Ret = unknown> = (\n rCtx: RenderCtx<Args, State>\n) => Ret;\n\nexport type RenderFunctionLegacy<Args = unknown, State = unknown, Ret = unknown> = (\n rCtx: RenderCtxLegacy<Args, State>\n) => Ret;\n\nexport type UnwrapFutureRef<K> =\n K extends FutureRef<infer T>\n ? T\n : K extends bigint | boolean | null | number | string | symbol | undefined\n ? K\n : { [key in keyof K]: UnwrapFutureRef<K[key]> };\n\nexport type InferRenderFunctionReturn<RF extends AnyFunction> = RF extends (...args: any) => infer R\n ? UnwrapFutureRef<R>\n : never;\n"],"names":[],"mappings":";;;;;;;;;;AA4DA;;;;;AAKG;AACH,SAAS,WAAW,CAAC,KAA8B,EAAE,MAA+B,EAAA;IAClF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,KAAK,SAAS;IACpD,IAAI,MAAM,KAAK,SAAS;AAAE,QAAA,OAAO,IAAI;AACrC,IAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;QACtB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;IAC1C;AACA,IAAA,OAAO,IAAI;AACb;AAIA;;;;AAIG;AACH,SAAS,oBAAoB,CAC3B,IAAuE,EAAA;AAEvE,IAAA,OAAO,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,KAAI;AAChC,QAAA,IAAI,CAAC,YAAY,gBAAgB,EAAE;YACjC,OAAO,CAAC,CAAC,MAAM;QACjB;AAAO,aAAA,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;AACxB,YAAA,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,CAAC;QACtD;aAAO;AACL,YAAA,OAAO,CAAC;QACV;AACF,IAAA,CAAC,CAAC;AACJ;MAuBa,UAAU,CAAA;IACJ,GAAG,GAAuB,eAAe,EAAE;AAE5D;;AAEG;AACI,IAAA,gBAAgB,CAAC,SAAyB,EAAA;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC;IAC7C;IAWO,UAAU,CACf,mBAA2F,EAC3F,IAAwF,EAAA;AAExF,QAAA,MAAM,SAAS,GAAG,OAAO,mBAAmB,KAAK;AAC/C,cAAE;AACF,cAAE,oBAAoB,CAAC,mBAAmB,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAExE,IAAI,QAAQ,GAAqE,EAAE;QACnF,IAAI,mBAAmB,GAAY,KAAK;AACxC,QAAA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;AAC/B,YAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;gBAC9B,QAAQ,GAAG,IAAI;YACjB;AAAO,iBAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACnC,gBAAA,IAAI,oBAAoB,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,IAAI,kBAAkB,IAAI,IAAI,EAAE;oBACrF,QAAQ,GAAG,IAAI;gBACjB;qBAAO;oBACL,IAAI,GAAG,IAAsB;AAC7B,oBAAA,QAAQ,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;AAC3B,oBAAA,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,KAAK;gBACzD;YACF;QACF;QAEA,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAC9B,YAAA,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM;AAC9F,gBAAA,GAAG,EAAE,eAAe,CAAC,GAAG,EAAE,mBAAmB,CAAC;gBAC9C,KAAK;AACN,aAAA,CAAC,CAAC;;AAEH,YAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;AACrC,gBAAA,GAAG,EAAE,eAAe,CAAC,GAAG,EAAE,mBAAmB,CAAC;AAC9C,gBAAA,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;AAC1B,aAAA,CAAC,CAAC;IACP;AAEO,IAAA,gBAAgB,CAAC,YAAqE,EAAA;QAC3F,IAAI,YAAY,YAAY,iBAAiB;AAAE,YAAA,OAAO,YAAY;QAClE,MAAM,eAAe,GAAgC,EAAE;AACvD,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACvD,YAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;gBAClB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACpD,gBAAA,IAAI,CAAC,YAAY;AACf,oBAAA,OAAO,SAAS;AAClB,gBAAA,eAAe,CAAC,GAAG,CAAC,GAAG,YAAY;YACrC;iBAAO;AACL,gBAAA,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK;YAC9B;QACF;AACA,QAAA,OAAO,IAAI,iBAAiB,CAAC,eAAe,CAAC;IAC/C;AAEA;;;;;;;AAOG;AACI,IAAA,mBAAmB,CACxB,YAAqE,EACrE,oBAAgH,EAChH,IAA2B,EAAA;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AACrD,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,SAAS;QAChC,OAAO,IAAI,iBAAiB;aACzB,iBAAiB,CAAC,IAAI;aACtB,oBAAoB,CAAC,IAAI;aACzB,UAAU,CAAC,oBAAoB,EAAE;AAChC,YAAA,GAAG,IAAI;YACP,SAAS;AACV,SAAA,CAAC;IACN;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;AACH,IAAA,mBAAmB,CACjB,YAAqE,EACrE,oBAAgH,EAChH,IAA2B,EAAA;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AACrD,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,SAAS;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,iBAAiB;aAClC,iBAAiB,CAAC,IAAI;aACtB,oBAAoB,CAAC,IAAI;aACzB,mBAAmB,CAAC,oBAAoB,EAAE;AACzC,YAAA,GAAG,IAAI;YACP,SAAS;AACV,SAAA,CAAC;AACJ,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;YAC5B,KAAK,EAAE,IAAI,CAAC,EAAE;YACd,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,SAAA,CAAC,CAAC;IACL;AAEA;;AAEG;IACI,qBAAqB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;IAEO,OAAO,GAAA;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE;QAC/C,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,UAAU;AAC7B,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;gBAClC,GAAG,EAAE,CAAC,CAAC,GAAG;AACV,gBAAA,GAAG,EAAE;oBACH,GAAG,CAAC,CAAC,GAAG;oBACR,IAAI,EAAE,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpE,iBAAA;AACF,aAAA,CAAC,CAAC;SACJ;IACH;AAEA;;AAEG;IACI,+BAA+B,GAAA;AAGpC,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;IACjC;IAEO,iBAAiB,GAAA;QAGtB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE;QACzD,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,UAAU;AAC7B,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;gBAClC,GAAG,EAAE,CAAC,CAAC,GAAG;AACV,gBAAA,GAAG,EAAE;oBACH,GAAG,CAAC,CAAC,GAAG;AACR,oBAAA,IAAI,EAAE,aAAa,CACjB,CAAC,CAAC,GAAG,CAAC,IAAI,EACV,CAAC,MAAM,KAAK,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CACtE;AACF,iBAAA;AACF,aAAA,CAAC,CAAC;SACJ;IACH;AAEA;;AAEG;IACI,sBAAsB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IACxB;IAEO,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE;IAC1C;AAEA;;;AAGG;AACI,IAAA,YAAY,CAAC,GAAU,EAAA;;AAE5B,QAAA,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,0BAA0B,KAAK,WAAW;AAC5D,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAChC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAChE,EAAE,GAAG;AACR,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;;AAExE,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;QAC3B,OAAO,cAAc,CACnB,IAAI,EACJ,CAAC,MAAM,KAAK,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAClE;IACH;AAEA;;;;AAIG;AACI,IAAA,eAAe,CAAC,GAAU,EAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;AAC3B,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC;IAC5B;AAEA;;;;AAIG;AACI,IAAA,mBAAmB,CAAC,GAAU,EAAA;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;AACrF,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;AACI,IAAA,YAAY,CAAC,GAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC;IACnE;AAEA;;;;AAIG;AACI,IAAA,0BAA0B,CAAC,IAAiB,EAAA;QACjD,MAAM,MAAM,GAAgC,EAAE;AAE9C,QAAA,GAAG,EAAE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;YAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACjC;YACF;AAEA,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;YAEzB,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE;gBAC1B;YACF;YAEA,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,EAAE;gBACpC;YACF;AAEA,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAChD;YACF;AAEA,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;gBACzC;YACF;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE;AACzB,oBAAA,SAAS,GAAG;gBACd;gBACA,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE;AACzB,oBAAA,SAAS,GAAG;gBACd;AACA,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;AACxC,oBAAA,SAAS,GAAG;gBACd;YACF;AAEA,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB;AACA,QAAA,OAAO,MAAM;IACf;AAEA;;;AAGG;AACI,IAAA,UAAU,CAAC,IAAY,EAAA;AAC5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;AAC/B,QAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;gBAAE;AAE5B,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI;AAC5B,YAAA,IACE,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;AACvB,mBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK;mBACzB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;mBAC/B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;AAC/B,mBAAA,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EACpD;AACA,gBAAA,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,kBAAkB,EAAE;AAC5D,oBAAA,MAAM,KAAK,CAAC,CAAA,sCAAA,EAAyC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAA,CAAE,CAAC;gBAC3F;gBACA,MAAM,MAAM,GAAoC,MAAM,CAAC,WAAW,CAChE,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAEzB,CAAC,IAAI,CACV,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1C;AAED,gBAAA,OAAO,MAAM;YACf;QACF;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;;;;;AAMG;AACI,IAAA,aAAa,CAClB,SAAiF,EAAA;AAEjF,QAAA,MAAM,SAAS,GAAG,OAAO,SAAS,KAAK,UAAU,GAAG,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC;AAE/F,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAI;AACpE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,KAAK;AACtC,YAAA,OAAO,SAAS,CAAC,IAAI,CAAC;AACxB,QAAA,CAAC,CAAC;;AAGF,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAI;;YAE7C,MAAM,WAAW,GAAG,IAAmB;AACvC,YAAA,IAAI,WAAW,GAAwC,IAAI,CAAC;;AAE5D,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC;YAElB,OAAO;AACL,gBAAA,EAAE,EAAE,YAAY,CAAC,GAAG,CAAc;AAClC,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,IAAI,IAAI,GAAA;AACN,oBAAA,IAAI,WAAW,KAAK,IAAI,EAAE;wBACxB,OAAO,WAAW,CAAC;oBACrB;oBAEA,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI;AAC7C,oBAAA,OAAO,WAAW;gBACpB,CAAC;AAC8C,aAAA,CAAC;AACpD,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACI,uBAAuB,CAAC,MAAmB,EAAE,OAAe,EAAA;AACjE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,SAAS;QAC7B,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE,CAAC;AACtE,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAa;YAC7C,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBACzC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL;aAAO;AACL,YAAA,OAAO,MAAM;QACf;IACF;AACD;AAED;MACsB,aAAa,CAAA;AACd,IAAA,GAAG;AAEtB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,GAAG,GAAG,eAAe,EAAE;IAC9B;AAEQ,IAAA,UAAU;AAElB,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;AACzB,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,EAAE,GAAG,GAAG;YACrD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAI,EAAW,EAAE;QACnE;AACA,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B;;AAGQ,IAAA,gBAAgB;AAExB;;;AAGK;AACL,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;AACvC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU;AAC/B,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,EAAE,GAAG,GAAG;YACrD,IAAI,CAAC,gBAAgB,GAAG;AACtB,gBAAA,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS;aACzC;QACH;AACA,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChC;;;;;AAOQ,IAAA,gBAAgB,CAAC,IAAY,EAAA;QACnC,OAAO,KAAK,CACV,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,EACtC,CAAC,QAAQ,KAAK,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CACrD;IACH;AAEA,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;IACnD;AAEA,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;IAChD;AAEgB,IAAA,UAAU,GAAG,IAAI,UAAU,EAAE;AAE7C;;;;AAIG;AACI,IAAA,UAAU,CAAC,IAAY,EAAA;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;IACzC;AAEQ,IAAA,qCAAqC,CAAC,OAA0F,EAAA;AACtI,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,YAAY,gBAAgB,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1G,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,oBAAoB,KAAK,IAAI;QACjF,IAAI,gBAAgB,IAAI,CAAC,oBAAoB;AAAE,YAAA,MAAM,KAAK,CAAC,CAAA,wCAAA,CAA0C,CAAC,CAAC;;IAGzG;AAEQ,IAAA,cAAc,CAAC,GAA6C,EAAA;QAClE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,6BAA6B,EAAE;;AAEzD,YAAA,GAAG,GAAG;AACJ,gBAAA,GAAG,GAAG;AACN,gBAAA,gBAAgB,EAAE,EAAE;gBACpB,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC,gBAAgB,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;aACnD;QACH;QACA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,wBAAwB,EAAE;AACpD,YAAA,GAAG,GAAG;AACJ,gBAAA,GAAG,GAAG;AACN,gBAAA,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACzD,gBAAA,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;aACxC;QACH;AACA,QAAA,OAAO,GAAG;IACZ;;AAGO,IAAA,YAAY,CAAC,GAA6F,EAAA;AAC/G,QAAA,IAAI,CAAC,qCAAqC,CAAC,GAAG,CAAC;AAC/C,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,SAAS;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAC1B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAAC,CACxC;IACH;AAUO,IAAA,YAAY,CACjB,GAOG,EAAA;AAEH,QAAA,IAAI,MAAgD;AACpD,QAAA,IAAI,SAAS,IAAI,GAAG,EAAE;AACpB,YAAA,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;AAC3B,gBAAA,GAAG,EAAE;AACH,oBAAA,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACjE,iBAAA;AACD,gBAAA,gBAAgB,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;AACnC,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;AAC3B,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QACnC;QACA,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7C,QAAA,IAAI,CAAC,qCAAqC,CAAC,OAAO,CAAC;AACnD,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,SAAS;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAC1B,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,oBAAoB,CAAC,EAAE,CAAC,CAAC,CACvD;IACH;;AAGO,IAAA,aAAa,CAAC,OAAe,EAAA;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC;IACxC;IAEO,wBAAwB,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE;IAC5C;AAEO,IAAA,OAAO,CAAC,GAAW,EAAA;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IACvB;AAEO,IAAA,OAAO,CAAC,GAAW,EAAA;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IACvB;AAEO,IAAA,QAAQ,CAAC,GAAW,EAAA;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;IACxB;AACD;AAED;AACM,MAAO,SAAsB,SAAQ,aAAyB,CAAA;AAC1D,IAAA,UAAU;AAClB,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;AACzB,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,EAAE,GAAG,GAAG;;YAErD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAC9E;AACA,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B;AACD;AAED;AACM,MAAO,eAA+B,SAAQ,aAA4B,CAAA;AACtE,IAAA,UAAU;AAClB,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;AACzB,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,EAAE,GAAG,GAAG;AACrD,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAC5C;AACA,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B;AAEQ,IAAA,aAAa;AAErB,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;AACpC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAQ;AAC7B,YAAA,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,EAAE,GAAG,GAAG;YACrD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAI,EAAc,EAAE;QACzE;AACA,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7B;AACD;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/model",
3
- "version": "1.53.4",
3
+ "version": "1.53.10",
4
4
  "description": "Platforma.bio SDK / Block Model",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -23,9 +23,9 @@
23
23
  "canonicalize": "~2.1.0",
24
24
  "es-toolkit": "^1.39.10",
25
25
  "zod": "~3.23.8",
26
- "@milaboratories/ptabler-expression-js": "1.1.12",
27
- "@milaboratories/pl-model-common": "1.24.2",
28
- "@milaboratories/pl-error-like": "1.12.5"
26
+ "@milaboratories/pl-error-like": "1.12.5",
27
+ "@milaboratories/pl-model-common": "1.24.3",
28
+ "@milaboratories/ptabler-expression-js": "1.1.13"
29
29
  },
30
30
  "devDependencies": {
31
31
  "typescript": "~5.6.3",
@@ -33,10 +33,10 @@
33
33
  "@vitest/coverage-istanbul": "^4.0.16",
34
34
  "fast-json-patch": "^3.1.1",
35
35
  "@milaboratories/helpers": "1.13.0",
36
- "@milaboratories/eslint-config": "1.0.5",
37
36
  "@milaboratories/build-configs": "1.4.0",
37
+ "@milaboratories/ts-configs": "1.2.0",
38
38
  "@milaboratories/ts-builder": "1.2.4",
39
- "@milaboratories/ts-configs": "1.2.0"
39
+ "@milaboratories/eslint-config": "1.0.5"
40
40
  },
41
41
  "scripts": {
42
42
  "type-check": "ts-builder types --target node",
@@ -17,7 +17,7 @@ import {
17
17
  readAnnotationJson,
18
18
  stringifyJson,
19
19
  } from '@milaboratories/pl-model-common';
20
- import type { PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, RenderCtxBase } from '../render';
20
+ import type { PColumnDataUniversal, RenderCtxBase } from '../render';
21
21
  import { getAllRelatedColumns, getRelatedColumns } from '../pframe_utils/columns';
22
22
 
23
23
  /** Create id for column copy with added keys in axes domains */
@@ -61,7 +61,7 @@ export function isHiddenFromUIColumn(column: PColumnSpec): boolean {
61
61
  export type AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;
62
62
 
63
63
  export function getAvailableWithLinkersAxes(
64
- linkerColumns: (PColumnEntryWithLabel | PColumnEntryUniversal)[],
64
+ linkerColumns: (PColumn<PColumnDataUniversal>)[],
65
65
  blockAxes: AxesVault,
66
66
  ): AxesVault {
67
67
  const linkerMap = LinkerMap.fromColumns(linkerColumns.map(getColumnIdAndSpec));
@@ -11,7 +11,7 @@ export function getAllRelatedColumns<A, U>(
11
11
  // if current block doesn't produce own columns then use all columns from result pool
12
12
  const columns = new PColumnCollection();
13
13
  columns.addColumnProvider(ctx.resultPool);
14
- const allColumns = columns.getUniversalEntries(predicate, { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];
14
+ const allColumns = columns.getColumns(predicate, { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];
15
15
 
16
16
  const allAxes: AxesVault = new Map(allColumns
17
17
  .flatMap((column) => getNormalizedAxesList(column.spec.axesSpec))
@@ -48,7 +48,7 @@ export function getRelatedColumns<A, U>(ctx: RenderCtxBase<A, U>, { columns: roo
48
48
  }
49
49
 
50
50
  // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden
51
- const linkerColumns = columns.getUniversalEntries((spec) => predicate(spec) && isLinkerColumn(spec)) ?? [];
51
+ const linkerColumns = columns.getColumns((spec) => predicate(spec) && isLinkerColumn(spec), { dontWaitAllData: true }) ?? [];
52
52
  const availableWithLinkersAxes = getAvailableWithLinkersAxes(linkerColumns, blockAxes);
53
53
 
54
54
  // all possible axes from connected linkers
@@ -59,7 +59,7 @@ export function getRelatedColumns<A, U>(ctx: RenderCtxBase<A, U>, { columns: roo
59
59
 
60
60
  const blockAxesArr = Array.from(blockAxes.values());
61
61
  // all compatible with block columns but without label columns
62
- let compatibleWithoutLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
62
+ let compatibleWithoutLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
63
63
  const axisId = getAxisId(axisSpec);
64
64
  return blockAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
65
65
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));
@@ -74,13 +74,13 @@ export function getRelatedColumns<A, U>(ctx: RenderCtxBase<A, U>, { columns: roo
74
74
 
75
75
  const allAxesArr = Array.from(allAxes.values());
76
76
  // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)
77
- compatibleWithoutLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.every((axisSpec) => {
77
+ compatibleWithoutLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.every((axisSpec) => {
78
78
  const axisId = getAxisId(axisSpec);
79
79
  return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
80
80
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));
81
81
 
82
82
  // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool
83
- const compatibleLabels = (columns.getUniversalEntries((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
83
+ const compatibleLabels = (columns.getColumns((spec) => predicate(spec) && spec.axesSpec.some((axisSpec) => {
84
84
  const axisId = getAxisId(axisSpec);
85
85
  return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
86
86
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));
package/src/render/api.ts CHANGED
@@ -54,7 +54,7 @@ import type { LabelDerivationOps } from './util/label';
54
54
  import { deriveLabels } from './util/label';
55
55
  import type { APColumnSelectorWithSplit } from './util/split_selectors';
56
56
  import { patchInSetFilters } from './util/pframe_upgraders';
57
- import { allPColumnsReady } from './util/pcolumn_data';
57
+ import { allPColumnsReady } from './util';
58
58
 
59
59
  export type PColumnDataUniversal<TreeEntry = TreeNodeAccessor> = TreeEntry | DataInfo<TreeEntry> | PColumnValues;
60
60