@platforma-sdk/model 1.45.45 → 1.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json.cjs +1 -1
- package/dist/package.json.js +1 -1
- package/dist/pframe_utils/index.cjs +1 -1
- package/dist/pframe_utils/index.cjs.map +1 -1
- package/dist/pframe_utils/index.js +2 -2
- package/dist/pframe_utils/index.js.map +1 -1
- package/package.json +3 -3
- package/src/pframe_utils/index.ts +2 -2
package/dist/package.json.cjs
CHANGED
package/dist/package.json.js
CHANGED
|
@@ -182,7 +182,7 @@ async function getColumnOrAxisValueLabelsId(handle, strAxisId) {
|
|
|
182
182
|
const labelColumns = await getColumnsFull(handle, {
|
|
183
183
|
selectedSources: [],
|
|
184
184
|
strictlyCompatible: false,
|
|
185
|
-
names: [plModelCommon.
|
|
185
|
+
names: [plModelCommon.PColumnName.Label],
|
|
186
186
|
});
|
|
187
187
|
const labelColumn = labelColumns.find(({ spec }) => {
|
|
188
188
|
return spec && spec.axesSpec.length === 1 && plModelCommon.canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/pframe_utils/index.ts"],"sourcesContent":["import { flatten, uniq } from 'es-toolkit';\n\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n PColumnSpec,\n PFrameHandle,\n PTableVector,\n UniqueValuesRequest,\n AxisId,\n CanonicalizedJson,\n FindColumnsRequest,\n FindColumnsResponse,\n FullPTableColumnData,\n PColumnIdAndSpec,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n ValueType,\n} from '@milaboratories/pl-model-common';\nimport { pTableValue, Annotation, canonicalizeAxisId, getAxisId, readAnnotation } from '@milaboratories/pl-model-common';\n\n// Types\ntype PValue = string | number | null;\n\ntype SuggestionResponse = {\n values: {\n value: string;\n label: string;\n }[];\n overflow: boolean;\n};\n\ntype SingleColumnData = {\n axesData: Record<string, PValue[]>;\n data: PValue[];\n};\n\ntype UniqueValuesResponse = {\n values: string[];\n overflow: boolean;\n};\n\ntype GetUniqueSourceValuesParams = {\n columnId: PObjectId;\n axisIdx?: number;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n};\n\ntype GetAxisUniqueValuesParams = {\n axisId: AxisId;\n parentColumnIds: PObjectId[];\n limit?: number;\n filters?: PTableRecordSingleValueFilterV2[];\n};\n\ntype GetColumnsFullParams = {\n selectedSources: PObjectId[];\n strictlyCompatible: boolean;\n types?: ValueType[];\n names?: string[];\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'];\n annotationsNotEmpty?: string[];\n};\n\n// Constants\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\n// Helper functions\nconst sortValuesPredicate = (a: { label: string }, b: { label: string }) =>\n a.label.localeCompare(b.label, 'en', { numeric: true });\n\nfunction convertColumnData(type: ValueType, response: PTableVector, absentValue: number | null = null): PValue[] {\n if (type === 'String') {\n return response.data as PValue[];\n }\n const res: PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, { absent: absentValue, na: null }) as PValue;\n }\n return res;\n}\n\nfunction createSearchFilter(\n columnId: PObjectId,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: 'bySingleColumnV2',\n column: {\n type: 'column',\n id: columnId,\n },\n predicate: {\n operator: 'StringIContains',\n substring,\n },\n };\n}\n\nfunction createAxisSearchFilter(\n axisSpec: AxisSpec,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: {\n type: axisSpec.type,\n name: axisSpec.name,\n },\n },\n predicate: {\n operator: 'StringIContains',\n substring,\n },\n };\n}\n\nfunction mapValuesToSuggestions(values: string[]): { value: string; label: string }[] {\n return values.map((v) => ({ value: String(v), label: String(v) })).sort(sortValuesPredicate);\n}\n\nfunction getPFrameDriver() {\n if (typeof platforma === 'undefined') {\n throw new Error('Platforma instance is not available');\n }\n if (typeof platforma.pFrameDriver === 'undefined') {\n throw new Error('PFrame driver is not available in the current Platforma instance');\n }\n return platforma.pFrameDriver;\n}\n\n// Core functions\nexport async function getColumnSpecById(handle: PFrameHandle, id: PObjectId): Promise<PColumnSpec | null> {\n try {\n const response = await getPFrameDriver().getColumnSpec(handle, id);\n return response ?? null;\n } catch (err) {\n console.error('PFrame: get single column error', err);\n return null;\n }\n}\n\nexport async function getSingleColumnData(\n handle: PFrameHandle,\n id: PObjectId,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<SingleColumnData> {\n try {\n const response: FullPTableColumnData[] = await getPFrameDriver().calculateTableData(handle, {\n src: {\n type: 'column',\n column: id,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n\n const axes = response.filter((item) => item.spec.type === 'axis');\n const columns = response.filter((item) => item.spec.type === 'column');\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = getAxisId(item.spec.spec as AxisSpec);\n res[canonicalizeAxisId(id)] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(columns[0].data.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error('PFrame: calculateTableData error');\n throw err;\n }\n}\n\nexport async function getColumnUniqueValues(\n handle: PFrameHandle,\n id: PObjectId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<UniqueValuesResponse> {\n const request: UniqueValuesRequest = {\n columnId: id,\n filters,\n limit,\n };\n\n try {\n const response = await getPFrameDriver().getUniqueValues(handle, request);\n if (response.overflow) {\n console.warn(`More than ${limit} values for ${id} column`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow: response.overflow,\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for column error');\n throw err;\n }\n}\n\nexport async function getAxisUniqueValues(\n handle: PFrameHandle,\n params: GetAxisUniqueValuesParams,\n): Promise<UniqueValuesResponse> {\n const { axisId, parentColumnIds, limit = UNIQUE_VALUES_LIMIT, filters = [] } = params;\n const strAxisId = canonicalizeAxisId(axisId);\n\n const parentsSpecs = (await Promise.all(parentColumnIds.map((p) => getColumnSpecById(handle, p))))\n .flatMap((spec, i): [PObjectId, PColumnSpec][] =>\n spec != null && spec.kind === 'PColumn' ? [[parentColumnIds[i], spec]] : [],\n )\n .filter(([_, spec]) =>\n spec.axesSpec.some((axisSpec) => canonicalizeAxisId(getAxisId(axisSpec)) === strAxisId),\n );\n\n if (parentsSpecs.length === 0) {\n console.warn('Axis unique values requested without parent columns');\n return { values: [], overflow: false };\n }\n\n try {\n const responses = await Promise.all(\n parentsSpecs.map(([id]) =>\n getPFrameDriver().getUniqueValues(handle, {\n columnId: id,\n axis: axisId,\n filters,\n limit,\n }),\n ),\n );\n\n const overflow = responses.some((r) => r.overflow);\n return {\n values: uniq(\n flatten(responses.map((r) =>\n Array.from(r.values.data as ArrayLike<unknown>).map(String),\n )),\n ),\n overflow,\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for axis error', err);\n return { values: [], overflow: false };\n }\n}\n\nexport async function getRequestColumnsFromSelectedSources(\n handle: PFrameHandle,\n sources: PObjectId[],\n): Promise<AxisId[]> {\n const result: AxisId[] = [];\n for (const item of sources) {\n const spec = await getColumnSpecById(handle, item);\n if (spec?.kind === 'PColumn') {\n result.push(...spec.axesSpec.map((spec) => getAxisId(spec)));\n }\n }\n return result;\n}\n\nexport async function getColumnsFull(\n handle: PFrameHandle,\n params: GetColumnsFullParams,\n): Promise<PColumnIdAndSpec[]> {\n const { selectedSources, strictlyCompatible, types, names, annotations, annotationsNotEmpty } = params;\n\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n annotationPattern: annotationsNotEmpty?.reduce((res, v) => {\n res[v] = '.+';\n return res;\n }, {} as Record<string, string>),\n },\n compatibleWith: await getRequestColumnsFromSelectedSources(handle, selectedSources),\n strictlyCompatible,\n };\n\n const response: FindColumnsResponse = await getPFrameDriver().findColumns(handle, request);\n return response.hits;\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n}\n\nexport async function getColumnOrAxisValueLabelsId(\n handle: PFrameHandle,\n strAxisId: CanonicalizedJson<AxisId>,\n): Promise<PObjectId | undefined> {\n const labelColumns = await getColumnsFull(handle, {\n selectedSources: [],\n strictlyCompatible: false,\n names: [Annotation.Label],\n });\n\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;\n });\n\n return labelColumn?.columnId;\n}\n\nfunction getDiscreteValuesFromAnnotation(columnSpec: PColumnSpec): undefined | SuggestionResponse {\n const discreteValuesStr = readAnnotation(columnSpec, Annotation.DiscreteValues);\n if (!discreteValuesStr) {\n return undefined;\n }\n\n try {\n const discreteValues: string[] = (JSON.parse(discreteValuesStr) as (string | number)[]).map((v) => String(v));\n const values = discreteValues.map((v) => ({ value: v, label: v })).sort(sortValuesPredicate);\n return { values, overflow: false };\n } catch {\n console.error(`Parsing error: discrete values annotation ${discreteValuesStr}`);\n return undefined;\n }\n}\n\nasync function getAxisValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n axisSpec: AxisSpec;\n labelsColumnId: PObjectId | undefined;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, axisSpec, labelsColumnId, limit, searchQuery, searchQueryValue } = params;\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n\n let filters: PTableRecordSingleValueFilterV2[] = [];\n\n if (labelsColumnId) {\n if (searchQuery) {\n filters = [createSearchFilter(labelsColumnId, searchQuery)];\n }\n if (searchQueryValue) {\n filters = [createAxisSearchFilter(axisSpec, searchQueryValue)];\n }\n\n const { data: dataValues, axesData } = await getSingleColumnData(handle, labelsColumnId, filters);\n const axisKeys = axesData[strAxisId];\n const values: { value: string; label: string }[] = [];\n\n for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {\n values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });\n }\n\n values.sort(sortValuesPredicate);\n return { values, overflow: !(limit === undefined || axisKeys.length < limit) };\n } else {\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n if (searchInLabelsOrValue) {\n filters = [createAxisSearchFilter(axisSpec, searchInLabelsOrValue)];\n }\n\n const response = await getAxisUniqueValues(handle, {\n axisId: getAxisId(axisSpec),\n parentColumnIds: [columnId],\n limit,\n filters,\n });\n\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n }\n}\n\nasync function getColumnValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, limit, searchQuery, searchQueryValue } = params;\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n\n const filters: PTableRecordSingleValueFilterV2[] = searchInLabelsOrValue\n ? [createSearchFilter(columnId, searchInLabelsOrValue)]\n : [];\n\n const response = await getColumnUniqueValues(handle, columnId, limit, filters);\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n}\n\nexport async function getUniqueSourceValuesWithLabels(\n handle: PFrameHandle,\n params: GetUniqueSourceValuesParams,\n): Promise<SuggestionResponse> {\n const { columnId, axisIdx, limit, searchQuery, searchQueryValue } = params;\n\n const selectedSourceSpec = await getColumnSpecById(handle, columnId);\n if (selectedSourceSpec == null || selectedSourceSpec.kind !== 'PColumn') {\n return { values: [], overflow: false };\n }\n\n // Try to get discrete values from annotation\n const discreteValues = getDiscreteValuesFromAnnotation(selectedSourceSpec);\n if (discreteValues != null) {\n return discreteValues;\n }\n\n // Handle axis values\n if (axisIdx != null) {\n const axisSpec = selectedSourceSpec.axesSpec[axisIdx];\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n const labelsColumnId = await getColumnOrAxisValueLabelsId(handle, strAxisId);\n\n return getAxisValuesWithLabels(handle, {\n columnId,\n axisSpec,\n labelsColumnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n }\n\n // Handle column values\n return getColumnValuesWithLabels(handle, {\n columnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n}\n"],"names":["pTableValue","getAxisId","canonicalizeAxisId","uniq","flatten","Annotation","readAnnotation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/pframe_utils/index.ts"],"sourcesContent":["import { flatten, uniq } from 'es-toolkit';\n\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n PColumnSpec,\n PFrameHandle,\n PTableVector,\n UniqueValuesRequest,\n AxisId,\n CanonicalizedJson,\n FindColumnsRequest,\n FindColumnsResponse,\n FullPTableColumnData,\n PColumnIdAndSpec,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n ValueType,\n} from '@milaboratories/pl-model-common';\nimport { pTableValue, Annotation, canonicalizeAxisId, getAxisId, readAnnotation, PColumnName } from '@milaboratories/pl-model-common';\n\n// Types\ntype PValue = string | number | null;\n\ntype SuggestionResponse = {\n values: {\n value: string;\n label: string;\n }[];\n overflow: boolean;\n};\n\ntype SingleColumnData = {\n axesData: Record<string, PValue[]>;\n data: PValue[];\n};\n\ntype UniqueValuesResponse = {\n values: string[];\n overflow: boolean;\n};\n\ntype GetUniqueSourceValuesParams = {\n columnId: PObjectId;\n axisIdx?: number;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n};\n\ntype GetAxisUniqueValuesParams = {\n axisId: AxisId;\n parentColumnIds: PObjectId[];\n limit?: number;\n filters?: PTableRecordSingleValueFilterV2[];\n};\n\ntype GetColumnsFullParams = {\n selectedSources: PObjectId[];\n strictlyCompatible: boolean;\n types?: ValueType[];\n names?: string[];\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'];\n annotationsNotEmpty?: string[];\n};\n\n// Constants\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\n// Helper functions\nconst sortValuesPredicate = (a: { label: string }, b: { label: string }) =>\n a.label.localeCompare(b.label, 'en', { numeric: true });\n\nfunction convertColumnData(type: ValueType, response: PTableVector, absentValue: number | null = null): PValue[] {\n if (type === 'String') {\n return response.data as PValue[];\n }\n const res: PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, { absent: absentValue, na: null }) as PValue;\n }\n return res;\n}\n\nfunction createSearchFilter(\n columnId: PObjectId,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: 'bySingleColumnV2',\n column: {\n type: 'column',\n id: columnId,\n },\n predicate: {\n operator: 'StringIContains',\n substring,\n },\n };\n}\n\nfunction createAxisSearchFilter(\n axisSpec: AxisSpec,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: {\n type: axisSpec.type,\n name: axisSpec.name,\n },\n },\n predicate: {\n operator: 'StringIContains',\n substring,\n },\n };\n}\n\nfunction mapValuesToSuggestions(values: string[]): { value: string; label: string }[] {\n return values.map((v) => ({ value: String(v), label: String(v) })).sort(sortValuesPredicate);\n}\n\nfunction getPFrameDriver() {\n if (typeof platforma === 'undefined') {\n throw new Error('Platforma instance is not available');\n }\n if (typeof platforma.pFrameDriver === 'undefined') {\n throw new Error('PFrame driver is not available in the current Platforma instance');\n }\n return platforma.pFrameDriver;\n}\n\n// Core functions\nexport async function getColumnSpecById(handle: PFrameHandle, id: PObjectId): Promise<PColumnSpec | null> {\n try {\n const response = await getPFrameDriver().getColumnSpec(handle, id);\n return response ?? null;\n } catch (err) {\n console.error('PFrame: get single column error', err);\n return null;\n }\n}\n\nexport async function getSingleColumnData(\n handle: PFrameHandle,\n id: PObjectId,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<SingleColumnData> {\n try {\n const response: FullPTableColumnData[] = await getPFrameDriver().calculateTableData(handle, {\n src: {\n type: 'column',\n column: id,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n\n const axes = response.filter((item) => item.spec.type === 'axis');\n const columns = response.filter((item) => item.spec.type === 'column');\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = getAxisId(item.spec.spec as AxisSpec);\n res[canonicalizeAxisId(id)] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(columns[0].data.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error('PFrame: calculateTableData error');\n throw err;\n }\n}\n\nexport async function getColumnUniqueValues(\n handle: PFrameHandle,\n id: PObjectId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<UniqueValuesResponse> {\n const request: UniqueValuesRequest = {\n columnId: id,\n filters,\n limit,\n };\n\n try {\n const response = await getPFrameDriver().getUniqueValues(handle, request);\n if (response.overflow) {\n console.warn(`More than ${limit} values for ${id} column`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow: response.overflow,\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for column error');\n throw err;\n }\n}\n\nexport async function getAxisUniqueValues(\n handle: PFrameHandle,\n params: GetAxisUniqueValuesParams,\n): Promise<UniqueValuesResponse> {\n const { axisId, parentColumnIds, limit = UNIQUE_VALUES_LIMIT, filters = [] } = params;\n const strAxisId = canonicalizeAxisId(axisId);\n\n const parentsSpecs = (await Promise.all(parentColumnIds.map((p) => getColumnSpecById(handle, p))))\n .flatMap((spec, i): [PObjectId, PColumnSpec][] =>\n spec != null && spec.kind === 'PColumn' ? [[parentColumnIds[i], spec]] : [],\n )\n .filter(([_, spec]) =>\n spec.axesSpec.some((axisSpec) => canonicalizeAxisId(getAxisId(axisSpec)) === strAxisId),\n );\n\n if (parentsSpecs.length === 0) {\n console.warn('Axis unique values requested without parent columns');\n return { values: [], overflow: false };\n }\n\n try {\n const responses = await Promise.all(\n parentsSpecs.map(([id]) =>\n getPFrameDriver().getUniqueValues(handle, {\n columnId: id,\n axis: axisId,\n filters,\n limit,\n }),\n ),\n );\n\n const overflow = responses.some((r) => r.overflow);\n return {\n values: uniq(\n flatten(responses.map((r) =>\n Array.from(r.values.data as ArrayLike<unknown>).map(String),\n )),\n ),\n overflow,\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for axis error', err);\n return { values: [], overflow: false };\n }\n}\n\nexport async function getRequestColumnsFromSelectedSources(\n handle: PFrameHandle,\n sources: PObjectId[],\n): Promise<AxisId[]> {\n const result: AxisId[] = [];\n for (const item of sources) {\n const spec = await getColumnSpecById(handle, item);\n if (spec?.kind === 'PColumn') {\n result.push(...spec.axesSpec.map((spec) => getAxisId(spec)));\n }\n }\n return result;\n}\n\nexport async function getColumnsFull(\n handle: PFrameHandle,\n params: GetColumnsFullParams,\n): Promise<PColumnIdAndSpec[]> {\n const { selectedSources, strictlyCompatible, types, names, annotations, annotationsNotEmpty } = params;\n\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n annotationPattern: annotationsNotEmpty?.reduce((res, v) => {\n res[v] = '.+';\n return res;\n }, {} as Record<string, string>),\n },\n compatibleWith: await getRequestColumnsFromSelectedSources(handle, selectedSources),\n strictlyCompatible,\n };\n\n const response: FindColumnsResponse = await getPFrameDriver().findColumns(handle, request);\n return response.hits;\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n}\n\nexport async function getColumnOrAxisValueLabelsId(\n handle: PFrameHandle,\n strAxisId: CanonicalizedJson<AxisId>,\n): Promise<PObjectId | undefined> {\n const labelColumns = await getColumnsFull(handle, {\n selectedSources: [],\n strictlyCompatible: false,\n names: [PColumnName.Label],\n });\n\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;\n });\n\n return labelColumn?.columnId;\n}\n\nfunction getDiscreteValuesFromAnnotation(columnSpec: PColumnSpec): undefined | SuggestionResponse {\n const discreteValuesStr = readAnnotation(columnSpec, Annotation.DiscreteValues);\n if (!discreteValuesStr) {\n return undefined;\n }\n\n try {\n const discreteValues: string[] = (JSON.parse(discreteValuesStr) as (string | number)[]).map((v) => String(v));\n const values = discreteValues.map((v) => ({ value: v, label: v })).sort(sortValuesPredicate);\n return { values, overflow: false };\n } catch {\n console.error(`Parsing error: discrete values annotation ${discreteValuesStr}`);\n return undefined;\n }\n}\n\nasync function getAxisValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n axisSpec: AxisSpec;\n labelsColumnId: PObjectId | undefined;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, axisSpec, labelsColumnId, limit, searchQuery, searchQueryValue } = params;\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n\n let filters: PTableRecordSingleValueFilterV2[] = [];\n\n if (labelsColumnId) {\n if (searchQuery) {\n filters = [createSearchFilter(labelsColumnId, searchQuery)];\n }\n if (searchQueryValue) {\n filters = [createAxisSearchFilter(axisSpec, searchQueryValue)];\n }\n\n const { data: dataValues, axesData } = await getSingleColumnData(handle, labelsColumnId, filters);\n const axisKeys = axesData[strAxisId];\n const values: { value: string; label: string }[] = [];\n\n for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {\n values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });\n }\n\n values.sort(sortValuesPredicate);\n return { values, overflow: !(limit === undefined || axisKeys.length < limit) };\n } else {\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n if (searchInLabelsOrValue) {\n filters = [createAxisSearchFilter(axisSpec, searchInLabelsOrValue)];\n }\n\n const response = await getAxisUniqueValues(handle, {\n axisId: getAxisId(axisSpec),\n parentColumnIds: [columnId],\n limit,\n filters,\n });\n\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n }\n}\n\nasync function getColumnValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, limit, searchQuery, searchQueryValue } = params;\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n\n const filters: PTableRecordSingleValueFilterV2[] = searchInLabelsOrValue\n ? [createSearchFilter(columnId, searchInLabelsOrValue)]\n : [];\n\n const response = await getColumnUniqueValues(handle, columnId, limit, filters);\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n}\n\nexport async function getUniqueSourceValuesWithLabels(\n handle: PFrameHandle,\n params: GetUniqueSourceValuesParams,\n): Promise<SuggestionResponse> {\n const { columnId, axisIdx, limit, searchQuery, searchQueryValue } = params;\n\n const selectedSourceSpec = await getColumnSpecById(handle, columnId);\n if (selectedSourceSpec == null || selectedSourceSpec.kind !== 'PColumn') {\n return { values: [], overflow: false };\n }\n\n // Try to get discrete values from annotation\n const discreteValues = getDiscreteValuesFromAnnotation(selectedSourceSpec);\n if (discreteValues != null) {\n return discreteValues;\n }\n\n // Handle axis values\n if (axisIdx != null) {\n const axisSpec = selectedSourceSpec.axesSpec[axisIdx];\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n const labelsColumnId = await getColumnOrAxisValueLabelsId(handle, strAxisId);\n\n return getAxisValuesWithLabels(handle, {\n columnId,\n axisSpec,\n labelsColumnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n }\n\n // Handle column values\n return getColumnValuesWithLabels(handle, {\n columnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n}\n"],"names":["pTableValue","getAxisId","canonicalizeAxisId","uniq","flatten","PColumnName","readAnnotation","Annotation"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { uniq, flatten } from 'es-toolkit';
|
|
2
|
-
import { getAxisId, canonicalizeAxisId,
|
|
2
|
+
import { getAxisId, canonicalizeAxisId, PColumnName, pTableValue, readAnnotation, Annotation } from '@milaboratories/pl-model-common';
|
|
3
3
|
|
|
4
4
|
// Constants
|
|
5
5
|
const UNIQUE_VALUES_LIMIT = 1000000;
|
|
@@ -180,7 +180,7 @@ async function getColumnOrAxisValueLabelsId(handle, strAxisId) {
|
|
|
180
180
|
const labelColumns = await getColumnsFull(handle, {
|
|
181
181
|
selectedSources: [],
|
|
182
182
|
strictlyCompatible: false,
|
|
183
|
-
names: [
|
|
183
|
+
names: [PColumnName.Label],
|
|
184
184
|
});
|
|
185
185
|
const labelColumn = labelColumns.find(({ spec }) => {
|
|
186
186
|
return spec && spec.axesSpec.length === 1 && canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/pframe_utils/index.ts"],"sourcesContent":["import { flatten, uniq } from 'es-toolkit';\n\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n PColumnSpec,\n PFrameHandle,\n PTableVector,\n UniqueValuesRequest,\n AxisId,\n CanonicalizedJson,\n FindColumnsRequest,\n FindColumnsResponse,\n FullPTableColumnData,\n PColumnIdAndSpec,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n ValueType,\n} from '@milaboratories/pl-model-common';\nimport { pTableValue, Annotation, canonicalizeAxisId, getAxisId, readAnnotation } from '@milaboratories/pl-model-common';\n\n// Types\ntype PValue = string | number | null;\n\ntype SuggestionResponse = {\n values: {\n value: string;\n label: string;\n }[];\n overflow: boolean;\n};\n\ntype SingleColumnData = {\n axesData: Record<string, PValue[]>;\n data: PValue[];\n};\n\ntype UniqueValuesResponse = {\n values: string[];\n overflow: boolean;\n};\n\ntype GetUniqueSourceValuesParams = {\n columnId: PObjectId;\n axisIdx?: number;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n};\n\ntype GetAxisUniqueValuesParams = {\n axisId: AxisId;\n parentColumnIds: PObjectId[];\n limit?: number;\n filters?: PTableRecordSingleValueFilterV2[];\n};\n\ntype GetColumnsFullParams = {\n selectedSources: PObjectId[];\n strictlyCompatible: boolean;\n types?: ValueType[];\n names?: string[];\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'];\n annotationsNotEmpty?: string[];\n};\n\n// Constants\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\n// Helper functions\nconst sortValuesPredicate = (a: { label: string }, b: { label: string }) =>\n a.label.localeCompare(b.label, 'en', { numeric: true });\n\nfunction convertColumnData(type: ValueType, response: PTableVector, absentValue: number | null = null): PValue[] {\n if (type === 'String') {\n return response.data as PValue[];\n }\n const res: PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, { absent: absentValue, na: null }) as PValue;\n }\n return res;\n}\n\nfunction createSearchFilter(\n columnId: PObjectId,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: 'bySingleColumnV2',\n column: {\n type: 'column',\n id: columnId,\n },\n predicate: {\n operator: 'StringIContains',\n substring,\n },\n };\n}\n\nfunction createAxisSearchFilter(\n axisSpec: AxisSpec,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: {\n type: axisSpec.type,\n name: axisSpec.name,\n },\n },\n predicate: {\n operator: 'StringIContains',\n substring,\n },\n };\n}\n\nfunction mapValuesToSuggestions(values: string[]): { value: string; label: string }[] {\n return values.map((v) => ({ value: String(v), label: String(v) })).sort(sortValuesPredicate);\n}\n\nfunction getPFrameDriver() {\n if (typeof platforma === 'undefined') {\n throw new Error('Platforma instance is not available');\n }\n if (typeof platforma.pFrameDriver === 'undefined') {\n throw new Error('PFrame driver is not available in the current Platforma instance');\n }\n return platforma.pFrameDriver;\n}\n\n// Core functions\nexport async function getColumnSpecById(handle: PFrameHandle, id: PObjectId): Promise<PColumnSpec | null> {\n try {\n const response = await getPFrameDriver().getColumnSpec(handle, id);\n return response ?? null;\n } catch (err) {\n console.error('PFrame: get single column error', err);\n return null;\n }\n}\n\nexport async function getSingleColumnData(\n handle: PFrameHandle,\n id: PObjectId,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<SingleColumnData> {\n try {\n const response: FullPTableColumnData[] = await getPFrameDriver().calculateTableData(handle, {\n src: {\n type: 'column',\n column: id,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n\n const axes = response.filter((item) => item.spec.type === 'axis');\n const columns = response.filter((item) => item.spec.type === 'column');\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = getAxisId(item.spec.spec as AxisSpec);\n res[canonicalizeAxisId(id)] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(columns[0].data.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error('PFrame: calculateTableData error');\n throw err;\n }\n}\n\nexport async function getColumnUniqueValues(\n handle: PFrameHandle,\n id: PObjectId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<UniqueValuesResponse> {\n const request: UniqueValuesRequest = {\n columnId: id,\n filters,\n limit,\n };\n\n try {\n const response = await getPFrameDriver().getUniqueValues(handle, request);\n if (response.overflow) {\n console.warn(`More than ${limit} values for ${id} column`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow: response.overflow,\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for column error');\n throw err;\n }\n}\n\nexport async function getAxisUniqueValues(\n handle: PFrameHandle,\n params: GetAxisUniqueValuesParams,\n): Promise<UniqueValuesResponse> {\n const { axisId, parentColumnIds, limit = UNIQUE_VALUES_LIMIT, filters = [] } = params;\n const strAxisId = canonicalizeAxisId(axisId);\n\n const parentsSpecs = (await Promise.all(parentColumnIds.map((p) => getColumnSpecById(handle, p))))\n .flatMap((spec, i): [PObjectId, PColumnSpec][] =>\n spec != null && spec.kind === 'PColumn' ? [[parentColumnIds[i], spec]] : [],\n )\n .filter(([_, spec]) =>\n spec.axesSpec.some((axisSpec) => canonicalizeAxisId(getAxisId(axisSpec)) === strAxisId),\n );\n\n if (parentsSpecs.length === 0) {\n console.warn('Axis unique values requested without parent columns');\n return { values: [], overflow: false };\n }\n\n try {\n const responses = await Promise.all(\n parentsSpecs.map(([id]) =>\n getPFrameDriver().getUniqueValues(handle, {\n columnId: id,\n axis: axisId,\n filters,\n limit,\n }),\n ),\n );\n\n const overflow = responses.some((r) => r.overflow);\n return {\n values: uniq(\n flatten(responses.map((r) =>\n Array.from(r.values.data as ArrayLike<unknown>).map(String),\n )),\n ),\n overflow,\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for axis error', err);\n return { values: [], overflow: false };\n }\n}\n\nexport async function getRequestColumnsFromSelectedSources(\n handle: PFrameHandle,\n sources: PObjectId[],\n): Promise<AxisId[]> {\n const result: AxisId[] = [];\n for (const item of sources) {\n const spec = await getColumnSpecById(handle, item);\n if (spec?.kind === 'PColumn') {\n result.push(...spec.axesSpec.map((spec) => getAxisId(spec)));\n }\n }\n return result;\n}\n\nexport async function getColumnsFull(\n handle: PFrameHandle,\n params: GetColumnsFullParams,\n): Promise<PColumnIdAndSpec[]> {\n const { selectedSources, strictlyCompatible, types, names, annotations, annotationsNotEmpty } = params;\n\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n annotationPattern: annotationsNotEmpty?.reduce((res, v) => {\n res[v] = '.+';\n return res;\n }, {} as Record<string, string>),\n },\n compatibleWith: await getRequestColumnsFromSelectedSources(handle, selectedSources),\n strictlyCompatible,\n };\n\n const response: FindColumnsResponse = await getPFrameDriver().findColumns(handle, request);\n return response.hits;\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n}\n\nexport async function getColumnOrAxisValueLabelsId(\n handle: PFrameHandle,\n strAxisId: CanonicalizedJson<AxisId>,\n): Promise<PObjectId | undefined> {\n const labelColumns = await getColumnsFull(handle, {\n selectedSources: [],\n strictlyCompatible: false,\n names: [Annotation.Label],\n });\n\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;\n });\n\n return labelColumn?.columnId;\n}\n\nfunction getDiscreteValuesFromAnnotation(columnSpec: PColumnSpec): undefined | SuggestionResponse {\n const discreteValuesStr = readAnnotation(columnSpec, Annotation.DiscreteValues);\n if (!discreteValuesStr) {\n return undefined;\n }\n\n try {\n const discreteValues: string[] = (JSON.parse(discreteValuesStr) as (string | number)[]).map((v) => String(v));\n const values = discreteValues.map((v) => ({ value: v, label: v })).sort(sortValuesPredicate);\n return { values, overflow: false };\n } catch {\n console.error(`Parsing error: discrete values annotation ${discreteValuesStr}`);\n return undefined;\n }\n}\n\nasync function getAxisValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n axisSpec: AxisSpec;\n labelsColumnId: PObjectId | undefined;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, axisSpec, labelsColumnId, limit, searchQuery, searchQueryValue } = params;\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n\n let filters: PTableRecordSingleValueFilterV2[] = [];\n\n if (labelsColumnId) {\n if (searchQuery) {\n filters = [createSearchFilter(labelsColumnId, searchQuery)];\n }\n if (searchQueryValue) {\n filters = [createAxisSearchFilter(axisSpec, searchQueryValue)];\n }\n\n const { data: dataValues, axesData } = await getSingleColumnData(handle, labelsColumnId, filters);\n const axisKeys = axesData[strAxisId];\n const values: { value: string; label: string }[] = [];\n\n for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {\n values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });\n }\n\n values.sort(sortValuesPredicate);\n return { values, overflow: !(limit === undefined || axisKeys.length < limit) };\n } else {\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n if (searchInLabelsOrValue) {\n filters = [createAxisSearchFilter(axisSpec, searchInLabelsOrValue)];\n }\n\n const response = await getAxisUniqueValues(handle, {\n axisId: getAxisId(axisSpec),\n parentColumnIds: [columnId],\n limit,\n filters,\n });\n\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n }\n}\n\nasync function getColumnValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, limit, searchQuery, searchQueryValue } = params;\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n\n const filters: PTableRecordSingleValueFilterV2[] = searchInLabelsOrValue\n ? [createSearchFilter(columnId, searchInLabelsOrValue)]\n : [];\n\n const response = await getColumnUniqueValues(handle, columnId, limit, filters);\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n}\n\nexport async function getUniqueSourceValuesWithLabels(\n handle: PFrameHandle,\n params: GetUniqueSourceValuesParams,\n): Promise<SuggestionResponse> {\n const { columnId, axisIdx, limit, searchQuery, searchQueryValue } = params;\n\n const selectedSourceSpec = await getColumnSpecById(handle, columnId);\n if (selectedSourceSpec == null || selectedSourceSpec.kind !== 'PColumn') {\n return { values: [], overflow: false };\n }\n\n // Try to get discrete values from annotation\n const discreteValues = getDiscreteValuesFromAnnotation(selectedSourceSpec);\n if (discreteValues != null) {\n return discreteValues;\n }\n\n // Handle axis values\n if (axisIdx != null) {\n const axisSpec = selectedSourceSpec.axesSpec[axisIdx];\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n const labelsColumnId = await getColumnOrAxisValueLabelsId(handle, strAxisId);\n\n return getAxisValuesWithLabels(handle, {\n columnId,\n axisSpec,\n labelsColumnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n }\n\n // Handle column values\n return getColumnValuesWithLabels(handle, {\n columnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/pframe_utils/index.ts"],"sourcesContent":["import { flatten, uniq } from 'es-toolkit';\n\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n PColumnSpec,\n PFrameHandle,\n PTableVector,\n UniqueValuesRequest,\n AxisId,\n CanonicalizedJson,\n FindColumnsRequest,\n FindColumnsResponse,\n FullPTableColumnData,\n PColumnIdAndSpec,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n ValueType,\n} from '@milaboratories/pl-model-common';\nimport { pTableValue, Annotation, canonicalizeAxisId, getAxisId, readAnnotation, PColumnName } from '@milaboratories/pl-model-common';\n\n// Types\ntype PValue = string | number | null;\n\ntype SuggestionResponse = {\n values: {\n value: string;\n label: string;\n }[];\n overflow: boolean;\n};\n\ntype SingleColumnData = {\n axesData: Record<string, PValue[]>;\n data: PValue[];\n};\n\ntype UniqueValuesResponse = {\n values: string[];\n overflow: boolean;\n};\n\ntype GetUniqueSourceValuesParams = {\n columnId: PObjectId;\n axisIdx?: number;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n};\n\ntype GetAxisUniqueValuesParams = {\n axisId: AxisId;\n parentColumnIds: PObjectId[];\n limit?: number;\n filters?: PTableRecordSingleValueFilterV2[];\n};\n\ntype GetColumnsFullParams = {\n selectedSources: PObjectId[];\n strictlyCompatible: boolean;\n types?: ValueType[];\n names?: string[];\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'];\n annotationsNotEmpty?: string[];\n};\n\n// Constants\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\n// Helper functions\nconst sortValuesPredicate = (a: { label: string }, b: { label: string }) =>\n a.label.localeCompare(b.label, 'en', { numeric: true });\n\nfunction convertColumnData(type: ValueType, response: PTableVector, absentValue: number | null = null): PValue[] {\n if (type === 'String') {\n return response.data as PValue[];\n }\n const res: PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, { absent: absentValue, na: null }) as PValue;\n }\n return res;\n}\n\nfunction createSearchFilter(\n columnId: PObjectId,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: 'bySingleColumnV2',\n column: {\n type: 'column',\n id: columnId,\n },\n predicate: {\n operator: 'StringIContains',\n substring,\n },\n };\n}\n\nfunction createAxisSearchFilter(\n axisSpec: AxisSpec,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: {\n type: axisSpec.type,\n name: axisSpec.name,\n },\n },\n predicate: {\n operator: 'StringIContains',\n substring,\n },\n };\n}\n\nfunction mapValuesToSuggestions(values: string[]): { value: string; label: string }[] {\n return values.map((v) => ({ value: String(v), label: String(v) })).sort(sortValuesPredicate);\n}\n\nfunction getPFrameDriver() {\n if (typeof platforma === 'undefined') {\n throw new Error('Platforma instance is not available');\n }\n if (typeof platforma.pFrameDriver === 'undefined') {\n throw new Error('PFrame driver is not available in the current Platforma instance');\n }\n return platforma.pFrameDriver;\n}\n\n// Core functions\nexport async function getColumnSpecById(handle: PFrameHandle, id: PObjectId): Promise<PColumnSpec | null> {\n try {\n const response = await getPFrameDriver().getColumnSpec(handle, id);\n return response ?? null;\n } catch (err) {\n console.error('PFrame: get single column error', err);\n return null;\n }\n}\n\nexport async function getSingleColumnData(\n handle: PFrameHandle,\n id: PObjectId,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<SingleColumnData> {\n try {\n const response: FullPTableColumnData[] = await getPFrameDriver().calculateTableData(handle, {\n src: {\n type: 'column',\n column: id,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n\n const axes = response.filter((item) => item.spec.type === 'axis');\n const columns = response.filter((item) => item.spec.type === 'column');\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = getAxisId(item.spec.spec as AxisSpec);\n res[canonicalizeAxisId(id)] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(columns[0].data.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error('PFrame: calculateTableData error');\n throw err;\n }\n}\n\nexport async function getColumnUniqueValues(\n handle: PFrameHandle,\n id: PObjectId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<UniqueValuesResponse> {\n const request: UniqueValuesRequest = {\n columnId: id,\n filters,\n limit,\n };\n\n try {\n const response = await getPFrameDriver().getUniqueValues(handle, request);\n if (response.overflow) {\n console.warn(`More than ${limit} values for ${id} column`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow: response.overflow,\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for column error');\n throw err;\n }\n}\n\nexport async function getAxisUniqueValues(\n handle: PFrameHandle,\n params: GetAxisUniqueValuesParams,\n): Promise<UniqueValuesResponse> {\n const { axisId, parentColumnIds, limit = UNIQUE_VALUES_LIMIT, filters = [] } = params;\n const strAxisId = canonicalizeAxisId(axisId);\n\n const parentsSpecs = (await Promise.all(parentColumnIds.map((p) => getColumnSpecById(handle, p))))\n .flatMap((spec, i): [PObjectId, PColumnSpec][] =>\n spec != null && spec.kind === 'PColumn' ? [[parentColumnIds[i], spec]] : [],\n )\n .filter(([_, spec]) =>\n spec.axesSpec.some((axisSpec) => canonicalizeAxisId(getAxisId(axisSpec)) === strAxisId),\n );\n\n if (parentsSpecs.length === 0) {\n console.warn('Axis unique values requested without parent columns');\n return { values: [], overflow: false };\n }\n\n try {\n const responses = await Promise.all(\n parentsSpecs.map(([id]) =>\n getPFrameDriver().getUniqueValues(handle, {\n columnId: id,\n axis: axisId,\n filters,\n limit,\n }),\n ),\n );\n\n const overflow = responses.some((r) => r.overflow);\n return {\n values: uniq(\n flatten(responses.map((r) =>\n Array.from(r.values.data as ArrayLike<unknown>).map(String),\n )),\n ),\n overflow,\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for axis error', err);\n return { values: [], overflow: false };\n }\n}\n\nexport async function getRequestColumnsFromSelectedSources(\n handle: PFrameHandle,\n sources: PObjectId[],\n): Promise<AxisId[]> {\n const result: AxisId[] = [];\n for (const item of sources) {\n const spec = await getColumnSpecById(handle, item);\n if (spec?.kind === 'PColumn') {\n result.push(...spec.axesSpec.map((spec) => getAxisId(spec)));\n }\n }\n return result;\n}\n\nexport async function getColumnsFull(\n handle: PFrameHandle,\n params: GetColumnsFullParams,\n): Promise<PColumnIdAndSpec[]> {\n const { selectedSources, strictlyCompatible, types, names, annotations, annotationsNotEmpty } = params;\n\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n annotationPattern: annotationsNotEmpty?.reduce((res, v) => {\n res[v] = '.+';\n return res;\n }, {} as Record<string, string>),\n },\n compatibleWith: await getRequestColumnsFromSelectedSources(handle, selectedSources),\n strictlyCompatible,\n };\n\n const response: FindColumnsResponse = await getPFrameDriver().findColumns(handle, request);\n return response.hits;\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n}\n\nexport async function getColumnOrAxisValueLabelsId(\n handle: PFrameHandle,\n strAxisId: CanonicalizedJson<AxisId>,\n): Promise<PObjectId | undefined> {\n const labelColumns = await getColumnsFull(handle, {\n selectedSources: [],\n strictlyCompatible: false,\n names: [PColumnName.Label],\n });\n\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;\n });\n\n return labelColumn?.columnId;\n}\n\nfunction getDiscreteValuesFromAnnotation(columnSpec: PColumnSpec): undefined | SuggestionResponse {\n const discreteValuesStr = readAnnotation(columnSpec, Annotation.DiscreteValues);\n if (!discreteValuesStr) {\n return undefined;\n }\n\n try {\n const discreteValues: string[] = (JSON.parse(discreteValuesStr) as (string | number)[]).map((v) => String(v));\n const values = discreteValues.map((v) => ({ value: v, label: v })).sort(sortValuesPredicate);\n return { values, overflow: false };\n } catch {\n console.error(`Parsing error: discrete values annotation ${discreteValuesStr}`);\n return undefined;\n }\n}\n\nasync function getAxisValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n axisSpec: AxisSpec;\n labelsColumnId: PObjectId | undefined;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, axisSpec, labelsColumnId, limit, searchQuery, searchQueryValue } = params;\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n\n let filters: PTableRecordSingleValueFilterV2[] = [];\n\n if (labelsColumnId) {\n if (searchQuery) {\n filters = [createSearchFilter(labelsColumnId, searchQuery)];\n }\n if (searchQueryValue) {\n filters = [createAxisSearchFilter(axisSpec, searchQueryValue)];\n }\n\n const { data: dataValues, axesData } = await getSingleColumnData(handle, labelsColumnId, filters);\n const axisKeys = axesData[strAxisId];\n const values: { value: string; label: string }[] = [];\n\n for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {\n values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });\n }\n\n values.sort(sortValuesPredicate);\n return { values, overflow: !(limit === undefined || axisKeys.length < limit) };\n } else {\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n if (searchInLabelsOrValue) {\n filters = [createAxisSearchFilter(axisSpec, searchInLabelsOrValue)];\n }\n\n const response = await getAxisUniqueValues(handle, {\n axisId: getAxisId(axisSpec),\n parentColumnIds: [columnId],\n limit,\n filters,\n });\n\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n }\n}\n\nasync function getColumnValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, limit, searchQuery, searchQueryValue } = params;\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n\n const filters: PTableRecordSingleValueFilterV2[] = searchInLabelsOrValue\n ? [createSearchFilter(columnId, searchInLabelsOrValue)]\n : [];\n\n const response = await getColumnUniqueValues(handle, columnId, limit, filters);\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n}\n\nexport async function getUniqueSourceValuesWithLabels(\n handle: PFrameHandle,\n params: GetUniqueSourceValuesParams,\n): Promise<SuggestionResponse> {\n const { columnId, axisIdx, limit, searchQuery, searchQueryValue } = params;\n\n const selectedSourceSpec = await getColumnSpecById(handle, columnId);\n if (selectedSourceSpec == null || selectedSourceSpec.kind !== 'PColumn') {\n return { values: [], overflow: false };\n }\n\n // Try to get discrete values from annotation\n const discreteValues = getDiscreteValuesFromAnnotation(selectedSourceSpec);\n if (discreteValues != null) {\n return discreteValues;\n }\n\n // Handle axis values\n if (axisIdx != null) {\n const axisSpec = selectedSourceSpec.axesSpec[axisIdx];\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n const labelsColumnId = await getColumnOrAxisValueLabelsId(handle, strAxisId);\n\n return getAxisValuesWithLabels(handle, {\n columnId,\n axisSpec,\n labelsColumnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n }\n\n // Handle column values\n return getColumnValuesWithLabels(handle, {\n columnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-sdk/model",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.46.0",
|
|
4
4
|
"description": "Platforma.bio SDK / Block Model",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"typescript": "~5.6.3",
|
|
32
32
|
"vitest": "^4.0.7",
|
|
33
33
|
"fast-json-patch": "^3.1.1",
|
|
34
|
-
"@milaboratories/helpers": "1.12.0",
|
|
35
34
|
"@milaboratories/build-configs": "1.0.8",
|
|
36
|
-
"@milaboratories/ts-builder": "1.0.5",
|
|
37
35
|
"@platforma-sdk/eslint-config": "1.1.0",
|
|
36
|
+
"@milaboratories/helpers": "1.12.0",
|
|
37
|
+
"@milaboratories/ts-builder": "1.0.5",
|
|
38
38
|
"@milaboratories/ts-configs": "1.0.6"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
@@ -17,7 +17,7 @@ import type {
|
|
|
17
17
|
PTableRecordSingleValueFilterV2,
|
|
18
18
|
ValueType,
|
|
19
19
|
} from '@milaboratories/pl-model-common';
|
|
20
|
-
import { pTableValue, Annotation, canonicalizeAxisId, getAxisId, readAnnotation } from '@milaboratories/pl-model-common';
|
|
20
|
+
import { pTableValue, Annotation, canonicalizeAxisId, getAxisId, readAnnotation, PColumnName } from '@milaboratories/pl-model-common';
|
|
21
21
|
|
|
22
22
|
// Types
|
|
23
23
|
type PValue = string | number | null;
|
|
@@ -300,7 +300,7 @@ export async function getColumnOrAxisValueLabelsId(
|
|
|
300
300
|
const labelColumns = await getColumnsFull(handle, {
|
|
301
301
|
selectedSources: [],
|
|
302
302
|
strictlyCompatible: false,
|
|
303
|
-
names: [
|
|
303
|
+
names: [PColumnName.Label],
|
|
304
304
|
});
|
|
305
305
|
|
|
306
306
|
const labelColumn = labelColumns.find(({ spec }) => {
|