@milaboratories/pl-model-common 1.21.8 → 1.21.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.
@@ -151,11 +151,26 @@ class LinkerMap {
151
151
  return axes;
152
152
  }
153
153
  /** Get all axes that can be connected to sourceAxes by linkers */
154
- getReachableByLinkersAxesFromAxes(sourceAxes) {
155
- const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);
154
+ getReachableByLinkersAxesFromAxesNormalized(sourceAxes, matchAxisIdFn) {
155
+ let startKeys = [];
156
+ if (matchAxisIdFn) {
157
+ const sourceAxisIdsGrouped = sourceAxes.map((axis) => spec.getArrayFromAxisTree(spec.getAxesTree(axis)).map(spec.getAxisId));
158
+ for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {
159
+ const matched = this.keyAxesIds.find((keyIds) => keyIds.every((linkerKeyAxisId) => sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId))));
160
+ if (matched) {
161
+ startKeys.push(json.canonicalizeJson(matched));
162
+ }
163
+ }
164
+ }
165
+ else {
166
+ startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);
167
+ }
156
168
  const availableKeys = this.searchAvailableAxesKeys(startKeys);
157
169
  return this.getAxesListFromKeysList([...availableKeys]);
158
170
  }
171
+ getReachableByLinkersAxesFromAxes(sourceAxes, matchAxisIdFn) {
172
+ return this.getReachableByLinkersAxesFromAxesNormalized(spec.getNormalizedAxesList(sourceAxes), matchAxisIdFn);
173
+ }
159
174
  static getLinkerKeyFromAxisSpec(axis) {
160
175
  return json.canonicalizeJson(spec.getArrayFromAxisTree(spec.getAxesTree(axis)).map(spec.getAxisId));
161
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"linker_columns.cjs","sources":["../../../src/drivers/pframe/linker_columns.ts"],"sourcesContent":["import {\n canonicalizeJson,\n parseJson,\n type CanonicalizedJson,\n} from '../../json';\nimport {\n Annotation,\n readAnnotationJson,\n type AxisSpec,\n type PColumnIdAndSpec,\n type AxisSpecNormalized,\n type AxisId,\n getAxisId,\n getNormalizedAxesList,\n getArrayFromAxisTree,\n getAxesTree,\n} from './spec/spec';\n\ntype LinkerKey = CanonicalizedJson<AxisId[]>;\nexport type CompositeLinkerMap = Map<\n LinkerKey,\n {\n keyAxesSpec: AxisSpecNormalized[]; // axis specs - source for the key\n linkWith: Map<LinkerKey, PColumnIdAndSpec>; // for every axis (possibly in group with parents - available by linkers another axes and corresponding linkers)\n }\n>;\n\ninterface LinkersData {\n data: CompositeLinkerMap;\n}\nexport class LinkerMap implements LinkersData {\n /** Graph of linkers connected by axes (single or grouped by parents) */\n readonly data: CompositeLinkerMap;\n\n constructor(linkerMap: CompositeLinkerMap) {\n this.data = linkerMap;\n }\n\n get keys() {\n return this.data.keys();\n }\n\n get keyAxesIds() {\n return [...this.data.keys()].map(parseJson);\n }\n\n static fromColumns(columns: PColumnIdAndSpec[]) {\n const result: CompositeLinkerMap = new Map();\n for (const linker of columns.filter((l) => !!readAnnotationJson(l.spec, Annotation.IsLinkerColumn))) {\n const groups = LinkerMap.getAxesGroups(getNormalizedAxesList(linker.spec.axesSpec)); // split input axes into groups by parent links from annotation\n\n if (groups.length !== 2) {\n continue; // not a valid linker column\n }\n const [left, right] = groups;\n\n // In case of group:\n // A - C\n // \\_ B _ D\n // E/\n // put 2 variants as keys:\n // A - C\n // \\_ B _ D\n // and\n // E - B - D\n const leftKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(left).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n const rightKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(right).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n\n for (const [keyLeft, spec] of leftKeyVariants) {\n if (!result.has(keyLeft)) {\n result.set(keyLeft, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight, spec] of rightKeyVariants) {\n if (!result.has(keyRight)) {\n result.set(keyRight, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyLeft] of leftKeyVariants) {\n for (const [keyRight] of rightKeyVariants) {\n result.get(keyLeft)?.linkWith.set(keyRight, linker);\n result.get(keyRight)?.linkWith.set(keyLeft, linker);\n }\n }\n }\n return new this(result);\n }\n\n /** Get all available nodes of linker graphs if start from sourceAxesKeys */\n searchAvailableAxesKeys(sourceAxesKeys: LinkerKey[]): Set<LinkerKey> {\n const startKeys = new Set(sourceAxesKeys);\n const allAvailableKeys = new Set<LinkerKey>();\n let nextKeys = sourceAxesKeys;\n while (nextKeys.length) {\n const next: LinkerKey[] = [];\n for (const key of nextKeys) {\n const node = this.data.get(key);\n if (!node) continue;\n for (const availableKey of node.linkWith.keys()) {\n if (!allAvailableKeys.has(availableKey) && !startKeys.has(availableKey)) {\n next.push(availableKey);\n allAvailableKeys.add(availableKey);\n }\n }\n }\n nextKeys = next;\n }\n return allAvailableKeys;\n }\n\n /** Get all linker columns that are necessary to reach endKey from startKey */\n searchLinkerPath(startKey: LinkerKey, endKey: LinkerKey): PColumnIdAndSpec[] {\n const previous: Record<LinkerKey, LinkerKey> = {};\n let nextIds = new Set([startKey]);\n const visited = new Set([startKey]);\n while (nextIds.size) {\n const next = new Set<LinkerKey>();\n for (const nextId of nextIds) {\n const node = this.data.get(nextId);\n if (!node) continue;\n for (const availableId of node.linkWith.keys()) {\n previous[availableId] = nextId;\n if (availableId === endKey) {\n const ids: LinkerKey[] = [];\n let current = endKey;\n while (previous[current] !== startKey) {\n ids.push(current);\n current = previous[current];\n }\n ids.push(current);\n return ids.map((id: LinkerKey) => this.data.get(id)!.linkWith.get(previous[id])!);\n } else if (!visited.has(availableId)) {\n next.add(availableId);\n visited.add(availableId);\n }\n }\n }\n nextIds = next;\n }\n return [];\n }\n\n getLinkerColumnsForAxes({\n from: sourceAxes,\n to: targetAxes,\n throwWhenNoLinkExists = true,\n }: {\n from: AxisSpecNormalized[];\n to: AxisSpecNormalized[];\n throwWhenNoLinkExists?: boolean;\n }): PColumnIdAndSpec[] {\n // start keys - all possible keys in linker map using sourceAxes (for example, all axes of block's columns or all axes of columns in data-inputs)\n const startKeys: LinkerKey[] = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n return Array.from(\n new Map(\n LinkerMap.getAxesRoots(targetAxes)\n .map(LinkerMap.getLinkerKeyFromAxisSpec) // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n .flatMap((targetKey) => {\n const linkers = startKeys\n .map((startKey) => this.searchLinkerPath(startKey, targetKey))\n .reduce((shortestPath, path) => (shortestPath.length && shortestPath.length < path.length) || !path.length ? shortestPath : path,\n [] as PColumnIdAndSpec[])\n .map((linker) => [linker.columnId, linker] as const);\n if (!linkers.length && throwWhenNoLinkExists) {\n throw Error(`Unable to find linker column for ${targetKey}`);\n }\n return linkers;\n }),\n ).values(),\n );\n }\n\n /** Get list of axisSpecs from keys of linker columns map */\n getAxesListFromKeysList(keys: LinkerKey[]): AxisSpecNormalized[] {\n return Array.from(\n new Map(\n keys.flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])\n .map((axis) => [canonicalizeJson(getAxisId(axis)), axis]),\n ).values(),\n );\n }\n\n /** Get axes of target axes that are impossible to be linked to source axes with current linker map */\n getNonLinkableAxes(\n sourceAxes: AxisSpecNormalized[],\n targetAxes: AxisSpecNormalized[],\n ): AxisSpecNormalized[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n const targetKeys = targetAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n const axes = Array.from(\n new Map(\n targetAxes\n .filter((_targetAxis, idx) => {\n const targetKey = targetKeys[idx];\n return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);\n })\n .flatMap((axis) => getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [canonicalizeJson(getAxisId(axis)), axis])),\n ).values(),\n );\n return axes;\n }\n\n /** Get all axes that can be connected to sourceAxes by linkers */\n getReachableByLinkersAxesFromAxes(sourceAxes: AxisSpecNormalized[]): AxisSpec[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n const availableKeys = this.searchAvailableAxesKeys(startKeys);\n return this.getAxesListFromKeysList([...availableKeys]);\n }\n\n static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n }\n\n /** Split array of axes into several arrays by parents: axes of one group are parents for each other.\n There are no order inside every group. */\n static getAxesGroups(axesSpec: AxisSpecNormalized[]): AxisSpecNormalized[][] {\n switch (axesSpec.length) {\n case 0: return [];\n case 1: return [[axesSpec[0]]];\n default: break;\n }\n\n const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));\n const axisParentsIdxs = axesSpec.map(\n (spec) => new Set(\n spec.parentAxesSpec\n .map((spec) => canonicalizeJson(getAxisId(spec)))\n .map((el) => {\n const idx = axisKeys.indexOf(el);\n if (idx === -1) {\n throw new Error(`malformed axesSpec: ${JSON.stringify(axesSpec)}, unable to locate parent ${el}`);\n }\n return idx;\n }),\n ),\n );\n\n const allIdxs = [...axesSpec.keys()];\n const groups: number[][] = []; // groups of axis indexes\n\n const usedIdxs = new Set<number>();\n let nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n while (nextFreeEl !== undefined) {\n const currentGroup = [nextFreeEl];\n usedIdxs.add(nextFreeEl);\n\n let nextElsOfCurrentGroup = [nextFreeEl];\n while (nextElsOfCurrentGroup.length) {\n const next = new Set<number>();\n for (const groupIdx of nextElsOfCurrentGroup) {\n const groupElementParents = axisParentsIdxs[groupIdx];\n allIdxs.forEach((idx) => {\n if (idx === groupIdx || usedIdxs.has(idx)) {\n return;\n }\n const parents = axisParentsIdxs[idx];\n if (parents.has(groupIdx) || groupElementParents.has(idx)) {\n currentGroup.push(idx);\n next.add(idx);\n usedIdxs.add(idx);\n }\n });\n }\n nextElsOfCurrentGroup = [...next];\n }\n\n groups.push([...currentGroup]);\n nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n };\n\n return groups.map((group) => group.map((idx) => axesSpec[idx]));\n }\n\n /** Get all axes that are not parents of any other axis */\n static getAxesRoots(axes: AxisSpecNormalized[]): AxisSpecNormalized[] {\n const parentsSet = new Set(axes.flatMap((axis) => axis.parentAxesSpec).map((spec) => canonicalizeJson(getAxisId(spec))));\n return axes.filter((axis) => !parentsSet.has(canonicalizeJson(getAxisId(axis))));\n }\n}\n"],"names":["parseJson","readAnnotationJson","Annotation","getNormalizedAxesList","getArrayFromAxisTree","getAxesTree","canonicalizeJson","getAxisId","spec"],"mappings":"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"}
1
+ {"version":3,"file":"linker_columns.cjs","sources":["../../../src/drivers/pframe/linker_columns.ts"],"sourcesContent":["import {\n canonicalizeJson,\n parseJson,\n type CanonicalizedJson,\n} from '../../json';\nimport {\n Annotation,\n readAnnotationJson,\n type AxisSpec,\n type PColumnIdAndSpec,\n type AxisSpecNormalized,\n type AxisId,\n getAxisId,\n getNormalizedAxesList,\n getArrayFromAxisTree,\n getAxesTree,\n} from './spec/spec';\n\ntype LinkerKey = CanonicalizedJson<AxisId[]>;\nexport type CompositeLinkerMap = Map<\n LinkerKey,\n {\n keyAxesSpec: AxisSpecNormalized[]; // axis specs - source for the key\n linkWith: Map<LinkerKey, PColumnIdAndSpec>; // for every axis (possibly in group with parents - available by linkers another axes and corresponding linkers)\n }\n>;\n\ninterface LinkersData {\n data: CompositeLinkerMap;\n}\nexport class LinkerMap implements LinkersData {\n /** Graph of linkers connected by axes (single or grouped by parents) */\n readonly data: CompositeLinkerMap;\n\n constructor(linkerMap: CompositeLinkerMap) {\n this.data = linkerMap;\n }\n\n get keys() {\n return this.data.keys();\n }\n\n get keyAxesIds() {\n return [...this.data.keys()].map(parseJson);\n }\n\n static fromColumns(columns: PColumnIdAndSpec[]) {\n const result: CompositeLinkerMap = new Map();\n for (const linker of columns.filter((l) => !!readAnnotationJson(l.spec, Annotation.IsLinkerColumn))) {\n const groups = LinkerMap.getAxesGroups(getNormalizedAxesList(linker.spec.axesSpec)); // split input axes into groups by parent links from annotation\n\n if (groups.length !== 2) {\n continue; // not a valid linker column\n }\n const [left, right] = groups;\n\n // In case of group:\n // A - C\n // \\_ B _ D\n // E/\n // put 2 variants as keys:\n // A - C\n // \\_ B _ D\n // and\n // E - B - D\n const leftKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(left).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n const rightKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(right).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n\n for (const [keyLeft, spec] of leftKeyVariants) {\n if (!result.has(keyLeft)) {\n result.set(keyLeft, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight, spec] of rightKeyVariants) {\n if (!result.has(keyRight)) {\n result.set(keyRight, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyLeft] of leftKeyVariants) {\n for (const [keyRight] of rightKeyVariants) {\n result.get(keyLeft)?.linkWith.set(keyRight, linker);\n result.get(keyRight)?.linkWith.set(keyLeft, linker);\n }\n }\n }\n return new this(result);\n }\n\n /** Get all available nodes of linker graphs if start from sourceAxesKeys */\n searchAvailableAxesKeys(sourceAxesKeys: LinkerKey[]): Set<LinkerKey> {\n const startKeys = new Set(sourceAxesKeys);\n const allAvailableKeys = new Set<LinkerKey>();\n let nextKeys = sourceAxesKeys;\n while (nextKeys.length) {\n const next: LinkerKey[] = [];\n for (const key of nextKeys) {\n const node = this.data.get(key);\n if (!node) continue;\n for (const availableKey of node.linkWith.keys()) {\n if (!allAvailableKeys.has(availableKey) && !startKeys.has(availableKey)) {\n next.push(availableKey);\n allAvailableKeys.add(availableKey);\n }\n }\n }\n nextKeys = next;\n }\n return allAvailableKeys;\n }\n\n /** Get all linker columns that are necessary to reach endKey from startKey */\n searchLinkerPath(startKey: LinkerKey, endKey: LinkerKey): PColumnIdAndSpec[] {\n const previous: Record<LinkerKey, LinkerKey> = {};\n let nextIds = new Set([startKey]);\n const visited = new Set([startKey]);\n while (nextIds.size) {\n const next = new Set<LinkerKey>();\n for (const nextId of nextIds) {\n const node = this.data.get(nextId);\n if (!node) continue;\n for (const availableId of node.linkWith.keys()) {\n previous[availableId] = nextId;\n if (availableId === endKey) {\n const ids: LinkerKey[] = [];\n let current = endKey;\n while (previous[current] !== startKey) {\n ids.push(current);\n current = previous[current];\n }\n ids.push(current);\n return ids.map((id: LinkerKey) => this.data.get(id)!.linkWith.get(previous[id])!);\n } else if (!visited.has(availableId)) {\n next.add(availableId);\n visited.add(availableId);\n }\n }\n }\n nextIds = next;\n }\n return [];\n }\n\n getLinkerColumnsForAxes({\n from: sourceAxes,\n to: targetAxes,\n throwWhenNoLinkExists = true,\n }: {\n from: AxisSpecNormalized[];\n to: AxisSpecNormalized[];\n throwWhenNoLinkExists?: boolean;\n }): PColumnIdAndSpec[] {\n // start keys - all possible keys in linker map using sourceAxes (for example, all axes of block's columns or all axes of columns in data-inputs)\n const startKeys: LinkerKey[] = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n return Array.from(\n new Map(\n LinkerMap.getAxesRoots(targetAxes)\n .map(LinkerMap.getLinkerKeyFromAxisSpec) // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n .flatMap((targetKey) => {\n const linkers = startKeys\n .map((startKey) => this.searchLinkerPath(startKey, targetKey))\n .reduce((shortestPath, path) => (shortestPath.length && shortestPath.length < path.length) || !path.length ? shortestPath : path,\n [] as PColumnIdAndSpec[])\n .map((linker) => [linker.columnId, linker] as const);\n if (!linkers.length && throwWhenNoLinkExists) {\n throw Error(`Unable to find linker column for ${targetKey}`);\n }\n return linkers;\n }),\n ).values(),\n );\n }\n\n /** Get list of axisSpecs from keys of linker columns map */\n getAxesListFromKeysList(keys: LinkerKey[]): AxisSpecNormalized[] {\n return Array.from(\n new Map(\n keys.flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])\n .map((axis) => [canonicalizeJson(getAxisId(axis)), axis]),\n ).values(),\n );\n }\n\n /** Get axes of target axes that are impossible to be linked to source axes with current linker map */\n getNonLinkableAxes(\n sourceAxes: AxisSpecNormalized[],\n targetAxes: AxisSpecNormalized[],\n ): AxisSpecNormalized[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n const targetKeys = targetAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n const axes = Array.from(\n new Map(\n targetAxes\n .filter((_targetAxis, idx) => {\n const targetKey = targetKeys[idx];\n return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);\n })\n .flatMap((axis) => getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [canonicalizeJson(getAxisId(axis)), axis])),\n ).values(),\n );\n return axes;\n }\n\n /** Get all axes that can be connected to sourceAxes by linkers */\n getReachableByLinkersAxesFromAxesNormalized(\n sourceAxes: AxisSpecNormalized[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n let startKeys: CanonicalizedJson<AxisId[]>[] = [];\n\n if (matchAxisIdFn) {\n const sourceAxisIdsGrouped: AxisId[][] = sourceAxes.map((axis) => getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {\n const matched = this.keyAxesIds.find(\n (keyIds: AxisId[]) => keyIds.every(\n (linkerKeyAxisId) => sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched));\n }\n }\n } else {\n startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n }\n\n const availableKeys = this.searchAvailableAxesKeys(startKeys);\n return this.getAxesListFromKeysList([...availableKeys]);\n }\n\n getReachableByLinkersAxesFromAxes(\n sourceAxes: AxisSpec[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n return this.getReachableByLinkersAxesFromAxesNormalized(getNormalizedAxesList(sourceAxes), matchAxisIdFn);\n }\n\n static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n }\n\n /** Split array of axes into several arrays by parents: axes of one group are parents for each other.\n There are no order inside every group. */\n static getAxesGroups(axesSpec: AxisSpecNormalized[]): AxisSpecNormalized[][] {\n switch (axesSpec.length) {\n case 0: return [];\n case 1: return [[axesSpec[0]]];\n default: break;\n }\n\n const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));\n const axisParentsIdxs = axesSpec.map(\n (spec) => new Set(\n spec.parentAxesSpec\n .map((spec) => canonicalizeJson(getAxisId(spec)))\n .map((el) => {\n const idx = axisKeys.indexOf(el);\n if (idx === -1) {\n throw new Error(`malformed axesSpec: ${JSON.stringify(axesSpec)}, unable to locate parent ${el}`);\n }\n return idx;\n }),\n ),\n );\n\n const allIdxs = [...axesSpec.keys()];\n const groups: number[][] = []; // groups of axis indexes\n\n const usedIdxs = new Set<number>();\n let nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n while (nextFreeEl !== undefined) {\n const currentGroup = [nextFreeEl];\n usedIdxs.add(nextFreeEl);\n\n let nextElsOfCurrentGroup = [nextFreeEl];\n while (nextElsOfCurrentGroup.length) {\n const next = new Set<number>();\n for (const groupIdx of nextElsOfCurrentGroup) {\n const groupElementParents = axisParentsIdxs[groupIdx];\n allIdxs.forEach((idx) => {\n if (idx === groupIdx || usedIdxs.has(idx)) {\n return;\n }\n const parents = axisParentsIdxs[idx];\n if (parents.has(groupIdx) || groupElementParents.has(idx)) {\n currentGroup.push(idx);\n next.add(idx);\n usedIdxs.add(idx);\n }\n });\n }\n nextElsOfCurrentGroup = [...next];\n }\n\n groups.push([...currentGroup]);\n nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n };\n\n return groups.map((group) => group.map((idx) => axesSpec[idx]));\n }\n\n /** Get all axes that are not parents of any other axis */\n static getAxesRoots(axes: AxisSpecNormalized[]): AxisSpecNormalized[] {\n const parentsSet = new Set(axes.flatMap((axis) => axis.parentAxesSpec).map((spec) => canonicalizeJson(getAxisId(spec))));\n return axes.filter((axis) => !parentsSet.has(canonicalizeJson(getAxisId(axis))));\n }\n}\n"],"names":["parseJson","readAnnotationJson","Annotation","getNormalizedAxesList","getArrayFromAxisTree","getAxesTree","canonicalizeJson","getAxisId","spec"],"mappings":";;;;;MA8Ba,SAAS,CAAA;;AAEX,IAAA,IAAI;AAEb,IAAA,WAAA,CAAY,SAA6B,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;IACvB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAACA,cAAS,CAAC;IAC7C;IAEA,OAAO,WAAW,CAAC,OAA2B,EAAA;AAC5C,QAAA,MAAM,MAAM,GAAuB,IAAI,GAAG,EAAE;QAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAACC,uBAAkB,CAAC,CAAC,CAAC,IAAI,EAAEC,eAAU,CAAC,cAAc,CAAC,CAAC,EAAE;AACnG,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAACC,0BAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEpF,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,gBAAA,SAAS;YACX;AACA,YAAA,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM;;;;;;;;;;AAW5B,YAAA,MAAM,eAAe,GAAwC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBACrG,MAAM,IAAI,GAAGC,yBAAoB,CAACC,gBAAW,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAGC,qBAAgB,CAAC,IAAI,CAAC,GAAG,CAACC,cAAS,CAAC,CAAC;AACjD,gBAAA,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;AACpB,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,gBAAgB,GAAwC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBACvG,MAAM,IAAI,GAAGH,yBAAoB,CAACC,gBAAW,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAGC,qBAAgB,CAAC,IAAI,CAAC,GAAG,CAACC,cAAS,CAAC,CAAC;AACjD,gBAAA,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;AACpB,YAAA,CAAC,CAAC;YAEF,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,eAAe,EAAE;gBAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACxB,oBAAA,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBACjE;YACF;YACA,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,gBAAgB,EAAE;gBAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACzB,oBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBAClE;YACF;AACA,YAAA,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,eAAe,EAAE;AACvC,gBAAA,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE;AACzC,oBAAA,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AACnD,oBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;gBACrD;YACF;QACF;AACA,QAAA,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;IACzB;;AAGA,IAAA,uBAAuB,CAAC,cAA2B,EAAA;AACjD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC;AACzC,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAa;QAC7C,IAAI,QAAQ,GAAG,cAAc;AAC7B,QAAA,OAAO,QAAQ,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,GAAgB,EAAE;AAC5B,YAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/B,gBAAA,IAAI,CAAC,IAAI;oBAAE;gBACX,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;AAC/C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AACvE,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACvB,wBAAA,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC;oBACpC;gBACF;YACF;YACA,QAAQ,GAAG,IAAI;QACjB;AACA,QAAA,OAAO,gBAAgB;IACzB;;IAGA,gBAAgB,CAAC,QAAmB,EAAE,MAAiB,EAAA;QACrD,MAAM,QAAQ,GAAiC,EAAE;QACjD,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AACnC,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAa;AACjC,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,gBAAA,IAAI,CAAC,IAAI;oBAAE;gBACX,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;AAC9C,oBAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,MAAM;AAC9B,oBAAA,IAAI,WAAW,KAAK,MAAM,EAAE;wBAC1B,MAAM,GAAG,GAAgB,EAAE;wBAC3B,IAAI,OAAO,GAAG,MAAM;AACpB,wBAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE;AACrC,4BAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACjB,4BAAA,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;wBAC7B;AACA,wBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACjB,wBAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAa,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAC;oBACnF;yBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACpC,wBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AACrB,wBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;oBAC1B;gBACF;YACF;YACA,OAAO,GAAG,IAAI;QAChB;AACA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,uBAAuB,CAAC,EACtB,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,qBAAqB,GAAG,IAAI,GAK7B,EAAA;;QAEC,MAAM,SAAS,GAAgB,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;AAEjF,QAAA,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CACL,SAAS,CAAC,YAAY,CAAC,UAAU;AAC9B,aAAA,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;AACvC,aAAA,OAAO,CAAC,CAAC,SAAS,KAAI;YACrB,MAAM,OAAO,GAAG;AACb,iBAAA,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC5D,iBAAA,MAAM,CAAC,CAAC,YAAY,EAAE,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,IAAI,EAC9H,EAAwB;AACzB,iBAAA,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAU,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,qBAAqB,EAAE;AAC5C,gBAAA,MAAM,KAAK,CAAC,CAAA,iCAAA,EAAoC,SAAS,CAAA,CAAE,CAAC;YAC9D;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC,CACL,CAAC,MAAM,EAAE,CACX;IACH;;AAGA,IAAA,uBAAuB,CAAC,IAAiB,EAAA;AACvC,QAAA,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CACL,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,IAAI,EAAE;aACxD,GAAG,CAAC,CAAC,IAAI,KAAK,CAACD,qBAAgB,CAACC,cAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAC5D,CAAC,MAAM,EAAE,CACX;IACH;;IAGA,kBAAkB,CAChB,UAAgC,EAChC,UAAgC,EAAA;QAEhC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;;QAEpE,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;QAErE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACrB,IAAI,GAAG,CACL;AACG,aAAA,MAAM,CAAC,CAAC,WAAW,EAAE,GAAG,KAAI;AAC3B,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;YACjC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC;AACzF,QAAA,CAAC;AACA,aAAA,OAAO,CAAC,CAAC,IAAI,KAAKH,yBAAoB,CAACC,gBAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAACC,qBAAgB,CAACC,cAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CACvH,CAAC,MAAM,EAAE,CACX;AACD,QAAA,OAAO,IAAI;IACb;;IAGA,2CAA2C,CACzC,UAAgC,EAChC,aAA2E,EAAA;QAE3E,IAAI,SAAS,GAAkC,EAAE;QAEjD,IAAI,aAAa,EAAE;YACjB,MAAM,oBAAoB,GAAe,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAKH,yBAAoB,CAACC,gBAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAACE,cAAS,CAAC,CAAC;AACzH,YAAA,KAAK,MAAM,kBAAkB,IAAI,oBAAoB,EAAE;AACrD,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAClC,CAAC,MAAgB,KAAK,MAAM,CAAC,KAAK,CAChC,CAAC,eAAe,KAAK,kBAAkB,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,aAAa,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,CAC7G,CACF;gBACD,IAAI,OAAO,EAAE;oBACX,SAAS,CAAC,IAAI,CAACD,qBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC3C;YACF;QACF;aAAO;YACL,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;QAChE;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC;QAC7D,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;IACzD;IAEA,iCAAiC,CAC/B,UAAsB,EACtB,aAA2E,EAAA;QAE3E,OAAO,IAAI,CAAC,2CAA2C,CAACH,0BAAqB,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3G;IAEA,OAAO,wBAAwB,CAAC,IAAwB,EAAA;AACtD,QAAA,OAAOG,qBAAgB,CAACF,yBAAoB,CAACC,gBAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAACE,cAAS,CAAC,CAAC;IACjF;AAEA;AAC4C;IAC5C,OAAO,aAAa,CAAC,QAA8B,EAAA;AACjD,QAAA,QAAQ,QAAQ,CAAC,MAAM;AACrB,YAAA,KAAK,CAAC,EAAE,OAAO,EAAE;AACjB,YAAA,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;;AAIhC,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAACC,MAAI,KAAKF,qBAAgB,CAACC,cAAS,CAACC,MAAI,CAAC,CAAC,CAAC;AAC1E,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAClC,CAACA,MAAI,KAAK,IAAI,GAAG,CACfA,MAAI,CAAC;AACF,aAAA,GAAG,CAAC,CAACA,MAAI,KAAKF,qBAAgB,CAACC,cAAS,CAACC,MAAI,CAAC,CAAC;AAC/C,aAAA,GAAG,CAAC,CAAC,EAAE,KAAI;YACV,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;AAChC,YAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAE,CAAC;YACnG;AACA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACL,CACF;QAED,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpC,QAAA,MAAM,MAAM,GAAe,EAAE,CAAC;AAE9B,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU;AAClC,QAAA,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1D,QAAA,OAAO,UAAU,KAAK,SAAS,EAAE;AAC/B,YAAA,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC;AACjC,YAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AAExB,YAAA,IAAI,qBAAqB,GAAG,CAAC,UAAU,CAAC;AACxC,YAAA,OAAO,qBAAqB,CAAC,MAAM,EAAE;AACnC,gBAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,gBAAA,KAAK,MAAM,QAAQ,IAAI,qBAAqB,EAAE;AAC5C,oBAAA,MAAM,mBAAmB,GAAG,eAAe,CAAC,QAAQ,CAAC;AACrD,oBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;wBACtB,IAAI,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;4BACzC;wBACF;AACA,wBAAA,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC;AACpC,wBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACzD,4BAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,4BAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACb,4BAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;wBACnB;AACF,oBAAA,CAAC,CAAC;gBACJ;AACA,gBAAA,qBAAqB,GAAG,CAAC,GAAG,IAAI,CAAC;YACnC;YAEA,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;AAC9B,YAAA,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxD;QAEA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE;;IAGA,OAAO,YAAY,CAAC,IAA0B,EAAA;AAC5C,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAACA,MAAI,KAAKF,qBAAgB,CAACC,cAAS,CAACC,MAAI,CAAC,CAAC,CAAC,CAAC;QACxH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAACF,qBAAgB,CAACC,cAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClF;AACD;;;;"}
@@ -31,7 +31,8 @@ export declare class LinkerMap implements LinkersData {
31
31
  /** Get axes of target axes that are impossible to be linked to source axes with current linker map */
32
32
  getNonLinkableAxes(sourceAxes: AxisSpecNormalized[], targetAxes: AxisSpecNormalized[]): AxisSpecNormalized[];
33
33
  /** Get all axes that can be connected to sourceAxes by linkers */
34
- getReachableByLinkersAxesFromAxes(sourceAxes: AxisSpecNormalized[]): AxisSpec[];
34
+ getReachableByLinkersAxesFromAxesNormalized(sourceAxes: AxisSpecNormalized[], matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean): AxisSpecNormalized[];
35
+ getReachableByLinkersAxesFromAxes(sourceAxes: AxisSpec[], matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean): AxisSpecNormalized[];
35
36
  static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey;
36
37
  /** Split array of axes into several arrays by parents: axes of one group are parents for each other.
37
38
  There are no order inside every group. */
@@ -1 +1 @@
1
- {"version":3,"file":"linker_columns.d.ts","sourceRoot":"","sources":["../../../src/drivers/pframe/linker_columns.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,MAAM,EAKZ,MAAM,aAAa,CAAC;AAErB,KAAK,SAAS,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7C,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAClC,SAAS,EACT;IACE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;CAC5C,CACF,CAAC;AAEF,UAAU,WAAW;IACnB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AACD,qBAAa,SAAU,YAAW,WAAW;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;gBAEtB,SAAS,EAAE,kBAAkB;IAIzC,IAAI,IAAI;;OAEP;IAED,IAAI,UAAU,eAEb;IAED,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE;IAkD9C,4EAA4E;IAC5E,uBAAuB,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC;IAqBpE,8EAA8E;IAC9E,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,gBAAgB,EAAE;IA+B5E,uBAAuB,CAAC,EACtB,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,qBAA4B,GAC7B,EAAE;QACD,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAC3B,EAAE,EAAE,kBAAkB,EAAE,CAAC;QACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;KACjC,GAAG,gBAAgB,EAAE;IAuBtB,6DAA6D;IAC7D,uBAAuB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,kBAAkB,EAAE;IAShE,sGAAsG;IACtG,kBAAkB,CAChB,UAAU,EAAE,kBAAkB,EAAE,EAChC,UAAU,EAAE,kBAAkB,EAAE,GAC/B,kBAAkB,EAAE;IAkBvB,kEAAkE;IAClE,iCAAiC,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,QAAQ,EAAE;IAM/E,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,SAAS;IAIpE;gDAC4C;IAC5C,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE,EAAE;IA0D5E,0DAA0D;IAC1D,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE;CAItE"}
1
+ {"version":3,"file":"linker_columns.d.ts","sourceRoot":"","sources":["../../../src/drivers/pframe/linker_columns.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,MAAM,EAKZ,MAAM,aAAa,CAAC;AAErB,KAAK,SAAS,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7C,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAClC,SAAS,EACT;IACE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;CAC5C,CACF,CAAC;AAEF,UAAU,WAAW;IACnB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AACD,qBAAa,SAAU,YAAW,WAAW;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;gBAEtB,SAAS,EAAE,kBAAkB;IAIzC,IAAI,IAAI;;OAEP;IAED,IAAI,UAAU,eAEb;IAED,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE;IAkD9C,4EAA4E;IAC5E,uBAAuB,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC;IAqBpE,8EAA8E;IAC9E,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,gBAAgB,EAAE;IA+B5E,uBAAuB,CAAC,EACtB,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,qBAA4B,GAC7B,EAAE;QACD,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAC3B,EAAE,EAAE,kBAAkB,EAAE,CAAC;QACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;KACjC,GAAG,gBAAgB,EAAE;IAuBtB,6DAA6D;IAC7D,uBAAuB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,kBAAkB,EAAE;IAShE,sGAAsG;IACtG,kBAAkB,CAChB,UAAU,EAAE,kBAAkB,EAAE,EAChC,UAAU,EAAE,kBAAkB,EAAE,GAC/B,kBAAkB,EAAE;IAkBvB,kEAAkE;IAClE,2CAA2C,CACzC,UAAU,EAAE,kBAAkB,EAAE,EAChC,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,GAC1E,kBAAkB,EAAE;IAuBvB,iCAAiC,CAC/B,UAAU,EAAE,QAAQ,EAAE,EACtB,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,GAC1E,kBAAkB,EAAE;IAIvB,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,SAAS;IAIpE;gDAC4C;IAC5C,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE,EAAE;IA0D5E,0DAA0D;IAC1D,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE;CAItE"}
@@ -149,11 +149,26 @@ class LinkerMap {
149
149
  return axes;
150
150
  }
151
151
  /** Get all axes that can be connected to sourceAxes by linkers */
152
- getReachableByLinkersAxesFromAxes(sourceAxes) {
153
- const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);
152
+ getReachableByLinkersAxesFromAxesNormalized(sourceAxes, matchAxisIdFn) {
153
+ let startKeys = [];
154
+ if (matchAxisIdFn) {
155
+ const sourceAxisIdsGrouped = sourceAxes.map((axis) => getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));
156
+ for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {
157
+ const matched = this.keyAxesIds.find((keyIds) => keyIds.every((linkerKeyAxisId) => sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId))));
158
+ if (matched) {
159
+ startKeys.push(canonicalizeJson(matched));
160
+ }
161
+ }
162
+ }
163
+ else {
164
+ startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);
165
+ }
154
166
  const availableKeys = this.searchAvailableAxesKeys(startKeys);
155
167
  return this.getAxesListFromKeysList([...availableKeys]);
156
168
  }
169
+ getReachableByLinkersAxesFromAxes(sourceAxes, matchAxisIdFn) {
170
+ return this.getReachableByLinkersAxesFromAxesNormalized(getNormalizedAxesList(sourceAxes), matchAxisIdFn);
171
+ }
157
172
  static getLinkerKeyFromAxisSpec(axis) {
158
173
  return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));
159
174
  }
@@ -1 +1 @@
1
- {"version":3,"file":"linker_columns.js","sources":["../../../src/drivers/pframe/linker_columns.ts"],"sourcesContent":["import {\n canonicalizeJson,\n parseJson,\n type CanonicalizedJson,\n} from '../../json';\nimport {\n Annotation,\n readAnnotationJson,\n type AxisSpec,\n type PColumnIdAndSpec,\n type AxisSpecNormalized,\n type AxisId,\n getAxisId,\n getNormalizedAxesList,\n getArrayFromAxisTree,\n getAxesTree,\n} from './spec/spec';\n\ntype LinkerKey = CanonicalizedJson<AxisId[]>;\nexport type CompositeLinkerMap = Map<\n LinkerKey,\n {\n keyAxesSpec: AxisSpecNormalized[]; // axis specs - source for the key\n linkWith: Map<LinkerKey, PColumnIdAndSpec>; // for every axis (possibly in group with parents - available by linkers another axes and corresponding linkers)\n }\n>;\n\ninterface LinkersData {\n data: CompositeLinkerMap;\n}\nexport class LinkerMap implements LinkersData {\n /** Graph of linkers connected by axes (single or grouped by parents) */\n readonly data: CompositeLinkerMap;\n\n constructor(linkerMap: CompositeLinkerMap) {\n this.data = linkerMap;\n }\n\n get keys() {\n return this.data.keys();\n }\n\n get keyAxesIds() {\n return [...this.data.keys()].map(parseJson);\n }\n\n static fromColumns(columns: PColumnIdAndSpec[]) {\n const result: CompositeLinkerMap = new Map();\n for (const linker of columns.filter((l) => !!readAnnotationJson(l.spec, Annotation.IsLinkerColumn))) {\n const groups = LinkerMap.getAxesGroups(getNormalizedAxesList(linker.spec.axesSpec)); // split input axes into groups by parent links from annotation\n\n if (groups.length !== 2) {\n continue; // not a valid linker column\n }\n const [left, right] = groups;\n\n // In case of group:\n // A - C\n // \\_ B _ D\n // E/\n // put 2 variants as keys:\n // A - C\n // \\_ B _ D\n // and\n // E - B - D\n const leftKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(left).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n const rightKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(right).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n\n for (const [keyLeft, spec] of leftKeyVariants) {\n if (!result.has(keyLeft)) {\n result.set(keyLeft, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight, spec] of rightKeyVariants) {\n if (!result.has(keyRight)) {\n result.set(keyRight, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyLeft] of leftKeyVariants) {\n for (const [keyRight] of rightKeyVariants) {\n result.get(keyLeft)?.linkWith.set(keyRight, linker);\n result.get(keyRight)?.linkWith.set(keyLeft, linker);\n }\n }\n }\n return new this(result);\n }\n\n /** Get all available nodes of linker graphs if start from sourceAxesKeys */\n searchAvailableAxesKeys(sourceAxesKeys: LinkerKey[]): Set<LinkerKey> {\n const startKeys = new Set(sourceAxesKeys);\n const allAvailableKeys = new Set<LinkerKey>();\n let nextKeys = sourceAxesKeys;\n while (nextKeys.length) {\n const next: LinkerKey[] = [];\n for (const key of nextKeys) {\n const node = this.data.get(key);\n if (!node) continue;\n for (const availableKey of node.linkWith.keys()) {\n if (!allAvailableKeys.has(availableKey) && !startKeys.has(availableKey)) {\n next.push(availableKey);\n allAvailableKeys.add(availableKey);\n }\n }\n }\n nextKeys = next;\n }\n return allAvailableKeys;\n }\n\n /** Get all linker columns that are necessary to reach endKey from startKey */\n searchLinkerPath(startKey: LinkerKey, endKey: LinkerKey): PColumnIdAndSpec[] {\n const previous: Record<LinkerKey, LinkerKey> = {};\n let nextIds = new Set([startKey]);\n const visited = new Set([startKey]);\n while (nextIds.size) {\n const next = new Set<LinkerKey>();\n for (const nextId of nextIds) {\n const node = this.data.get(nextId);\n if (!node) continue;\n for (const availableId of node.linkWith.keys()) {\n previous[availableId] = nextId;\n if (availableId === endKey) {\n const ids: LinkerKey[] = [];\n let current = endKey;\n while (previous[current] !== startKey) {\n ids.push(current);\n current = previous[current];\n }\n ids.push(current);\n return ids.map((id: LinkerKey) => this.data.get(id)!.linkWith.get(previous[id])!);\n } else if (!visited.has(availableId)) {\n next.add(availableId);\n visited.add(availableId);\n }\n }\n }\n nextIds = next;\n }\n return [];\n }\n\n getLinkerColumnsForAxes({\n from: sourceAxes,\n to: targetAxes,\n throwWhenNoLinkExists = true,\n }: {\n from: AxisSpecNormalized[];\n to: AxisSpecNormalized[];\n throwWhenNoLinkExists?: boolean;\n }): PColumnIdAndSpec[] {\n // start keys - all possible keys in linker map using sourceAxes (for example, all axes of block's columns or all axes of columns in data-inputs)\n const startKeys: LinkerKey[] = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n return Array.from(\n new Map(\n LinkerMap.getAxesRoots(targetAxes)\n .map(LinkerMap.getLinkerKeyFromAxisSpec) // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n .flatMap((targetKey) => {\n const linkers = startKeys\n .map((startKey) => this.searchLinkerPath(startKey, targetKey))\n .reduce((shortestPath, path) => (shortestPath.length && shortestPath.length < path.length) || !path.length ? shortestPath : path,\n [] as PColumnIdAndSpec[])\n .map((linker) => [linker.columnId, linker] as const);\n if (!linkers.length && throwWhenNoLinkExists) {\n throw Error(`Unable to find linker column for ${targetKey}`);\n }\n return linkers;\n }),\n ).values(),\n );\n }\n\n /** Get list of axisSpecs from keys of linker columns map */\n getAxesListFromKeysList(keys: LinkerKey[]): AxisSpecNormalized[] {\n return Array.from(\n new Map(\n keys.flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])\n .map((axis) => [canonicalizeJson(getAxisId(axis)), axis]),\n ).values(),\n );\n }\n\n /** Get axes of target axes that are impossible to be linked to source axes with current linker map */\n getNonLinkableAxes(\n sourceAxes: AxisSpecNormalized[],\n targetAxes: AxisSpecNormalized[],\n ): AxisSpecNormalized[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n const targetKeys = targetAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n const axes = Array.from(\n new Map(\n targetAxes\n .filter((_targetAxis, idx) => {\n const targetKey = targetKeys[idx];\n return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);\n })\n .flatMap((axis) => getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [canonicalizeJson(getAxisId(axis)), axis])),\n ).values(),\n );\n return axes;\n }\n\n /** Get all axes that can be connected to sourceAxes by linkers */\n getReachableByLinkersAxesFromAxes(sourceAxes: AxisSpecNormalized[]): AxisSpec[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n const availableKeys = this.searchAvailableAxesKeys(startKeys);\n return this.getAxesListFromKeysList([...availableKeys]);\n }\n\n static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n }\n\n /** Split array of axes into several arrays by parents: axes of one group are parents for each other.\n There are no order inside every group. */\n static getAxesGroups(axesSpec: AxisSpecNormalized[]): AxisSpecNormalized[][] {\n switch (axesSpec.length) {\n case 0: return [];\n case 1: return [[axesSpec[0]]];\n default: break;\n }\n\n const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));\n const axisParentsIdxs = axesSpec.map(\n (spec) => new Set(\n spec.parentAxesSpec\n .map((spec) => canonicalizeJson(getAxisId(spec)))\n .map((el) => {\n const idx = axisKeys.indexOf(el);\n if (idx === -1) {\n throw new Error(`malformed axesSpec: ${JSON.stringify(axesSpec)}, unable to locate parent ${el}`);\n }\n return idx;\n }),\n ),\n );\n\n const allIdxs = [...axesSpec.keys()];\n const groups: number[][] = []; // groups of axis indexes\n\n const usedIdxs = new Set<number>();\n let nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n while (nextFreeEl !== undefined) {\n const currentGroup = [nextFreeEl];\n usedIdxs.add(nextFreeEl);\n\n let nextElsOfCurrentGroup = [nextFreeEl];\n while (nextElsOfCurrentGroup.length) {\n const next = new Set<number>();\n for (const groupIdx of nextElsOfCurrentGroup) {\n const groupElementParents = axisParentsIdxs[groupIdx];\n allIdxs.forEach((idx) => {\n if (idx === groupIdx || usedIdxs.has(idx)) {\n return;\n }\n const parents = axisParentsIdxs[idx];\n if (parents.has(groupIdx) || groupElementParents.has(idx)) {\n currentGroup.push(idx);\n next.add(idx);\n usedIdxs.add(idx);\n }\n });\n }\n nextElsOfCurrentGroup = [...next];\n }\n\n groups.push([...currentGroup]);\n nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n };\n\n return groups.map((group) => group.map((idx) => axesSpec[idx]));\n }\n\n /** Get all axes that are not parents of any other axis */\n static getAxesRoots(axes: AxisSpecNormalized[]): AxisSpecNormalized[] {\n const parentsSet = new Set(axes.flatMap((axis) => axis.parentAxesSpec).map((spec) => canonicalizeJson(getAxisId(spec))));\n return axes.filter((axis) => !parentsSet.has(canonicalizeJson(getAxisId(axis))));\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linker_columns.js","sources":["../../../src/drivers/pframe/linker_columns.ts"],"sourcesContent":["import {\n canonicalizeJson,\n parseJson,\n type CanonicalizedJson,\n} from '../../json';\nimport {\n Annotation,\n readAnnotationJson,\n type AxisSpec,\n type PColumnIdAndSpec,\n type AxisSpecNormalized,\n type AxisId,\n getAxisId,\n getNormalizedAxesList,\n getArrayFromAxisTree,\n getAxesTree,\n} from './spec/spec';\n\ntype LinkerKey = CanonicalizedJson<AxisId[]>;\nexport type CompositeLinkerMap = Map<\n LinkerKey,\n {\n keyAxesSpec: AxisSpecNormalized[]; // axis specs - source for the key\n linkWith: Map<LinkerKey, PColumnIdAndSpec>; // for every axis (possibly in group with parents - available by linkers another axes and corresponding linkers)\n }\n>;\n\ninterface LinkersData {\n data: CompositeLinkerMap;\n}\nexport class LinkerMap implements LinkersData {\n /** Graph of linkers connected by axes (single or grouped by parents) */\n readonly data: CompositeLinkerMap;\n\n constructor(linkerMap: CompositeLinkerMap) {\n this.data = linkerMap;\n }\n\n get keys() {\n return this.data.keys();\n }\n\n get keyAxesIds() {\n return [...this.data.keys()].map(parseJson);\n }\n\n static fromColumns(columns: PColumnIdAndSpec[]) {\n const result: CompositeLinkerMap = new Map();\n for (const linker of columns.filter((l) => !!readAnnotationJson(l.spec, Annotation.IsLinkerColumn))) {\n const groups = LinkerMap.getAxesGroups(getNormalizedAxesList(linker.spec.axesSpec)); // split input axes into groups by parent links from annotation\n\n if (groups.length !== 2) {\n continue; // not a valid linker column\n }\n const [left, right] = groups;\n\n // In case of group:\n // A - C\n // \\_ B _ D\n // E/\n // put 2 variants as keys:\n // A - C\n // \\_ B _ D\n // and\n // E - B - D\n const leftKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(left).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n const rightKeyVariants: [LinkerKey, AxisSpecNormalized[]][] = LinkerMap.getAxesRoots(right).map((axis) => {\n const axes = getArrayFromAxisTree(getAxesTree(axis));\n const key = canonicalizeJson(axes.map(getAxisId));\n return [key, axes];\n });\n\n for (const [keyLeft, spec] of leftKeyVariants) {\n if (!result.has(keyLeft)) {\n result.set(keyLeft, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyRight, spec] of rightKeyVariants) {\n if (!result.has(keyRight)) {\n result.set(keyRight, { keyAxesSpec: spec, linkWith: new Map() });\n }\n }\n for (const [keyLeft] of leftKeyVariants) {\n for (const [keyRight] of rightKeyVariants) {\n result.get(keyLeft)?.linkWith.set(keyRight, linker);\n result.get(keyRight)?.linkWith.set(keyLeft, linker);\n }\n }\n }\n return new this(result);\n }\n\n /** Get all available nodes of linker graphs if start from sourceAxesKeys */\n searchAvailableAxesKeys(sourceAxesKeys: LinkerKey[]): Set<LinkerKey> {\n const startKeys = new Set(sourceAxesKeys);\n const allAvailableKeys = new Set<LinkerKey>();\n let nextKeys = sourceAxesKeys;\n while (nextKeys.length) {\n const next: LinkerKey[] = [];\n for (const key of nextKeys) {\n const node = this.data.get(key);\n if (!node) continue;\n for (const availableKey of node.linkWith.keys()) {\n if (!allAvailableKeys.has(availableKey) && !startKeys.has(availableKey)) {\n next.push(availableKey);\n allAvailableKeys.add(availableKey);\n }\n }\n }\n nextKeys = next;\n }\n return allAvailableKeys;\n }\n\n /** Get all linker columns that are necessary to reach endKey from startKey */\n searchLinkerPath(startKey: LinkerKey, endKey: LinkerKey): PColumnIdAndSpec[] {\n const previous: Record<LinkerKey, LinkerKey> = {};\n let nextIds = new Set([startKey]);\n const visited = new Set([startKey]);\n while (nextIds.size) {\n const next = new Set<LinkerKey>();\n for (const nextId of nextIds) {\n const node = this.data.get(nextId);\n if (!node) continue;\n for (const availableId of node.linkWith.keys()) {\n previous[availableId] = nextId;\n if (availableId === endKey) {\n const ids: LinkerKey[] = [];\n let current = endKey;\n while (previous[current] !== startKey) {\n ids.push(current);\n current = previous[current];\n }\n ids.push(current);\n return ids.map((id: LinkerKey) => this.data.get(id)!.linkWith.get(previous[id])!);\n } else if (!visited.has(availableId)) {\n next.add(availableId);\n visited.add(availableId);\n }\n }\n }\n nextIds = next;\n }\n return [];\n }\n\n getLinkerColumnsForAxes({\n from: sourceAxes,\n to: targetAxes,\n throwWhenNoLinkExists = true,\n }: {\n from: AxisSpecNormalized[];\n to: AxisSpecNormalized[];\n throwWhenNoLinkExists?: boolean;\n }): PColumnIdAndSpec[] {\n // start keys - all possible keys in linker map using sourceAxes (for example, all axes of block's columns or all axes of columns in data-inputs)\n const startKeys: LinkerKey[] = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n return Array.from(\n new Map(\n LinkerMap.getAxesRoots(targetAxes)\n .map(LinkerMap.getLinkerKeyFromAxisSpec) // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n .flatMap((targetKey) => {\n const linkers = startKeys\n .map((startKey) => this.searchLinkerPath(startKey, targetKey))\n .reduce((shortestPath, path) => (shortestPath.length && shortestPath.length < path.length) || !path.length ? shortestPath : path,\n [] as PColumnIdAndSpec[])\n .map((linker) => [linker.columnId, linker] as const);\n if (!linkers.length && throwWhenNoLinkExists) {\n throw Error(`Unable to find linker column for ${targetKey}`);\n }\n return linkers;\n }),\n ).values(),\n );\n }\n\n /** Get list of axisSpecs from keys of linker columns map */\n getAxesListFromKeysList(keys: LinkerKey[]): AxisSpecNormalized[] {\n return Array.from(\n new Map(\n keys.flatMap((key) => this.data.get(key)?.keyAxesSpec ?? [])\n .map((axis) => [canonicalizeJson(getAxisId(axis)), axis]),\n ).values(),\n );\n }\n\n /** Get axes of target axes that are impossible to be linked to source axes with current linker map */\n getNonLinkableAxes(\n sourceAxes: AxisSpecNormalized[],\n targetAxes: AxisSpecNormalized[],\n ): AxisSpecNormalized[] {\n const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n // target keys contain all axes to be linked; if some of target axes has parents they must be in the key\n const targetKeys = targetAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n\n const axes = Array.from(\n new Map(\n targetAxes\n .filter((_targetAxis, idx) => {\n const targetKey = targetKeys[idx];\n return !startKeys.some((startKey) => this.searchLinkerPath(startKey, targetKey).length);\n })\n .flatMap((axis) => getArrayFromAxisTree(getAxesTree(axis)).map((axis) => [canonicalizeJson(getAxisId(axis)), axis])),\n ).values(),\n );\n return axes;\n }\n\n /** Get all axes that can be connected to sourceAxes by linkers */\n getReachableByLinkersAxesFromAxesNormalized(\n sourceAxes: AxisSpecNormalized[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n let startKeys: CanonicalizedJson<AxisId[]>[] = [];\n\n if (matchAxisIdFn) {\n const sourceAxisIdsGrouped: AxisId[][] = sourceAxes.map((axis) => getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {\n const matched = this.keyAxesIds.find(\n (keyIds: AxisId[]) => keyIds.every(\n (linkerKeyAxisId) => sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched));\n }\n }\n } else {\n startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);\n }\n\n const availableKeys = this.searchAvailableAxesKeys(startKeys);\n return this.getAxesListFromKeysList([...availableKeys]);\n }\n\n getReachableByLinkersAxesFromAxes(\n sourceAxes: AxisSpec[],\n matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,\n ): AxisSpecNormalized[] {\n return this.getReachableByLinkersAxesFromAxesNormalized(getNormalizedAxesList(sourceAxes), matchAxisIdFn);\n }\n\n static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n }\n\n /** Split array of axes into several arrays by parents: axes of one group are parents for each other.\n There are no order inside every group. */\n static getAxesGroups(axesSpec: AxisSpecNormalized[]): AxisSpecNormalized[][] {\n switch (axesSpec.length) {\n case 0: return [];\n case 1: return [[axesSpec[0]]];\n default: break;\n }\n\n const axisKeys = axesSpec.map((spec) => canonicalizeJson(getAxisId(spec)));\n const axisParentsIdxs = axesSpec.map(\n (spec) => new Set(\n spec.parentAxesSpec\n .map((spec) => canonicalizeJson(getAxisId(spec)))\n .map((el) => {\n const idx = axisKeys.indexOf(el);\n if (idx === -1) {\n throw new Error(`malformed axesSpec: ${JSON.stringify(axesSpec)}, unable to locate parent ${el}`);\n }\n return idx;\n }),\n ),\n );\n\n const allIdxs = [...axesSpec.keys()];\n const groups: number[][] = []; // groups of axis indexes\n\n const usedIdxs = new Set<number>();\n let nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n while (nextFreeEl !== undefined) {\n const currentGroup = [nextFreeEl];\n usedIdxs.add(nextFreeEl);\n\n let nextElsOfCurrentGroup = [nextFreeEl];\n while (nextElsOfCurrentGroup.length) {\n const next = new Set<number>();\n for (const groupIdx of nextElsOfCurrentGroup) {\n const groupElementParents = axisParentsIdxs[groupIdx];\n allIdxs.forEach((idx) => {\n if (idx === groupIdx || usedIdxs.has(idx)) {\n return;\n }\n const parents = axisParentsIdxs[idx];\n if (parents.has(groupIdx) || groupElementParents.has(idx)) {\n currentGroup.push(idx);\n next.add(idx);\n usedIdxs.add(idx);\n }\n });\n }\n nextElsOfCurrentGroup = [...next];\n }\n\n groups.push([...currentGroup]);\n nextFreeEl = allIdxs.find((idx) => !usedIdxs.has(idx));\n };\n\n return groups.map((group) => group.map((idx) => axesSpec[idx]));\n }\n\n /** Get all axes that are not parents of any other axis */\n static getAxesRoots(axes: AxisSpecNormalized[]): AxisSpecNormalized[] {\n const parentsSet = new Set(axes.flatMap((axis) => axis.parentAxesSpec).map((spec) => canonicalizeJson(getAxisId(spec))));\n return axes.filter((axis) => !parentsSet.has(canonicalizeJson(getAxisId(axis))));\n }\n}\n"],"names":[],"mappings":";;;MA8Ba,SAAS,CAAA;;AAEX,IAAA,IAAI;AAEb,IAAA,WAAA,CAAY,SAA6B,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;IACvB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;IAC7C;IAEA,OAAO,WAAW,CAAC,OAA2B,EAAA;AAC5C,QAAA,MAAM,MAAM,GAAuB,IAAI,GAAG,EAAE;QAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC,EAAE;AACnG,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEpF,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,gBAAA,SAAS;YACX;AACA,YAAA,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM;;;;;;;;;;AAW5B,YAAA,MAAM,eAAe,GAAwC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBACrG,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACjD,gBAAA,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;AACpB,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,gBAAgB,GAAwC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBACvG,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACjD,gBAAA,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;AACpB,YAAA,CAAC,CAAC;YAEF,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,eAAe,EAAE;gBAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACxB,oBAAA,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBACjE;YACF;YACA,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,gBAAgB,EAAE;gBAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACzB,oBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBAClE;YACF;AACA,YAAA,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,eAAe,EAAE;AACvC,gBAAA,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE;AACzC,oBAAA,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AACnD,oBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;gBACrD;YACF;QACF;AACA,QAAA,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;IACzB;;AAGA,IAAA,uBAAuB,CAAC,cAA2B,EAAA;AACjD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC;AACzC,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAa;QAC7C,IAAI,QAAQ,GAAG,cAAc;AAC7B,QAAA,OAAO,QAAQ,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,GAAgB,EAAE;AAC5B,YAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/B,gBAAA,IAAI,CAAC,IAAI;oBAAE;gBACX,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;AAC/C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AACvE,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACvB,wBAAA,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC;oBACpC;gBACF;YACF;YACA,QAAQ,GAAG,IAAI;QACjB;AACA,QAAA,OAAO,gBAAgB;IACzB;;IAGA,gBAAgB,CAAC,QAAmB,EAAE,MAAiB,EAAA;QACrD,MAAM,QAAQ,GAAiC,EAAE;QACjD,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AACnC,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAa;AACjC,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,gBAAA,IAAI,CAAC,IAAI;oBAAE;gBACX,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;AAC9C,oBAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,MAAM;AAC9B,oBAAA,IAAI,WAAW,KAAK,MAAM,EAAE;wBAC1B,MAAM,GAAG,GAAgB,EAAE;wBAC3B,IAAI,OAAO,GAAG,MAAM;AACpB,wBAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE;AACrC,4BAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACjB,4BAAA,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;wBAC7B;AACA,wBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACjB,wBAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAa,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAC;oBACnF;yBAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACpC,wBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AACrB,wBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;oBAC1B;gBACF;YACF;YACA,OAAO,GAAG,IAAI;QAChB;AACA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,uBAAuB,CAAC,EACtB,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,qBAAqB,GAAG,IAAI,GAK7B,EAAA;;QAEC,MAAM,SAAS,GAAgB,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;AAEjF,QAAA,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CACL,SAAS,CAAC,YAAY,CAAC,UAAU;AAC9B,aAAA,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;AACvC,aAAA,OAAO,CAAC,CAAC,SAAS,KAAI;YACrB,MAAM,OAAO,GAAG;AACb,iBAAA,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC5D,iBAAA,MAAM,CAAC,CAAC,YAAY,EAAE,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,IAAI,EAC9H,EAAwB;AACzB,iBAAA,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAU,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,qBAAqB,EAAE;AAC5C,gBAAA,MAAM,KAAK,CAAC,CAAA,iCAAA,EAAoC,SAAS,CAAA,CAAE,CAAC;YAC9D;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC,CACL,CAAC,MAAM,EAAE,CACX;IACH;;AAGA,IAAA,uBAAuB,CAAC,IAAiB,EAAA;AACvC,QAAA,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CACL,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,IAAI,EAAE;aACxD,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAC5D,CAAC,MAAM,EAAE,CACX;IACH;;IAGA,kBAAkB,CAChB,UAAgC,EAChC,UAAgC,EAAA;QAEhC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;;QAEpE,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;QAErE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACrB,IAAI,GAAG,CACL;AACG,aAAA,MAAM,CAAC,CAAC,WAAW,EAAE,GAAG,KAAI;AAC3B,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;YACjC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC;AACzF,QAAA,CAAC;AACA,aAAA,OAAO,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CACvH,CAAC,MAAM,EAAE,CACX;AACD,QAAA,OAAO,IAAI;IACb;;IAGA,2CAA2C,CACzC,UAAgC,EAChC,aAA2E,EAAA;QAE3E,IAAI,SAAS,GAAkC,EAAE;QAEjD,IAAI,aAAa,EAAE;YACjB,MAAM,oBAAoB,GAAe,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACzH,YAAA,KAAK,MAAM,kBAAkB,IAAI,oBAAoB,EAAE;AACrD,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAClC,CAAC,MAAgB,KAAK,MAAM,CAAC,KAAK,CAChC,CAAC,eAAe,KAAK,kBAAkB,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,aAAa,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,CAC7G,CACF;gBACD,IAAI,OAAO,EAAE;oBACX,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC3C;YACF;QACF;aAAO;YACL,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;QAChE;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC;QAC7D,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;IACzD;IAEA,iCAAiC,CAC/B,UAAsB,EACtB,aAA2E,EAAA;QAE3E,OAAO,IAAI,CAAC,2CAA2C,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3G;IAEA,OAAO,wBAAwB,CAAC,IAAwB,EAAA;AACtD,QAAA,OAAO,gBAAgB,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjF;AAEA;AAC4C;IAC5C,OAAO,aAAa,CAAC,QAA8B,EAAA;AACjD,QAAA,QAAQ,QAAQ,CAAC,MAAM;AACrB,YAAA,KAAK,CAAC,EAAE,OAAO,EAAE;AACjB,YAAA,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;;AAIhC,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAClC,CAAC,IAAI,KAAK,IAAI,GAAG,CACf,IAAI,CAAC;AACF,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/C,aAAA,GAAG,CAAC,CAAC,EAAE,KAAI;YACV,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;AAChC,YAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAE,CAAC;YACnG;AACA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACL,CACF;QAED,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpC,QAAA,MAAM,MAAM,GAAe,EAAE,CAAC;AAE9B,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU;AAClC,QAAA,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1D,QAAA,OAAO,UAAU,KAAK,SAAS,EAAE;AAC/B,YAAA,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC;AACjC,YAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AAExB,YAAA,IAAI,qBAAqB,GAAG,CAAC,UAAU,CAAC;AACxC,YAAA,OAAO,qBAAqB,CAAC,MAAM,EAAE;AACnC,gBAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,gBAAA,KAAK,MAAM,QAAQ,IAAI,qBAAqB,EAAE;AAC5C,oBAAA,MAAM,mBAAmB,GAAG,eAAe,CAAC,QAAQ,CAAC;AACrD,oBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;wBACtB,IAAI,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;4BACzC;wBACF;AACA,wBAAA,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC;AACpC,wBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACzD,4BAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,4BAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACb,4BAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;wBACnB;AACF,oBAAA,CAAC,CAAC;gBACJ;AACA,gBAAA,qBAAqB,GAAG,CAAC,GAAG,IAAI,CAAC;YACnC;YAEA,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;AAC9B,YAAA,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxD;QAEA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE;;IAGA,OAAO,YAAY,CAAC,IAA0B,EAAA;AAC5C,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClF;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"spec.cjs","sources":["../../../../src/drivers/pframe/spec/spec.ts"],"sourcesContent":["import { ensureError } from '../../../errors';\nimport {\n canonicalizeJson,\n type CanonicalizedJson,\n type StringifiedJson,\n} from '../../../json';\nimport type {\n PObject,\n PObjectId,\n PObjectSpec,\n} from '../../../pool';\nimport { z } from 'zod';\n\nexport const ValueType = {\n Int: 'Int',\n Long: 'Long',\n Float: 'Float',\n Double: 'Double',\n String: 'String',\n Bytes: 'Bytes',\n} as const;\n\n/** PFrame columns and axes within them may store one of these types. */\nexport type ValueType = (typeof ValueType)[keyof typeof ValueType];\n\nexport type Metadata = Record<string, string>;\n\nexport function readMetadata<U extends Metadata, T extends keyof U = keyof U>(\n metadata: Metadata | undefined,\n key: T,\n): U[T] | undefined {\n return (metadata as U | undefined)?.[key];\n}\n\ntype MetadataJsonImpl<M> = {\n [P in keyof M as (M[P] extends StringifiedJson ? P : never)]: M[P] extends StringifiedJson<infer U> ? z.ZodType<U> : never;\n};\nexport type MetadataJson<M> = MetadataJsonImpl<Required<M>>;\n\nexport function readMetadataJsonOrThrow<M extends Metadata, T extends keyof MetadataJson<M>>(\n metadata: Metadata | undefined,\n metadataJson: MetadataJson<M>,\n key: T,\n methodNameInError: string = 'readMetadataJsonOrThrow',\n): z.infer<MetadataJson<M>[T]> | undefined {\n const json = readMetadata<M, T>(metadata, key);\n if (json === undefined) return undefined;\n\n const schema = metadataJson[key];\n try {\n const value = JSON.parse(json);\n return schema.parse(value);\n } catch (error: unknown) {\n throw new Error(\n `${methodNameInError} failed, `\n + `key: ${String(key)}, `\n + `value: ${json}, `\n + `error: ${ensureError(error)}`,\n );\n }\n}\n\nexport function readMetadataJson<M extends Metadata, T extends keyof MetadataJson<M>>(\n metadata: Metadata | undefined,\n metadataJson: MetadataJson<M>,\n key: T,\n): z.infer<MetadataJson<M>[T]> | undefined {\n try {\n return readMetadataJsonOrThrow(metadata, metadataJson, key);\n } catch {\n return undefined; // treat invalid values as unset\n }\n}\n\n/// Well-known domains\nexport const Domain = {\n Alphabet: 'pl7.app/alphabet',\n BlockId: 'pl7.app/blockId',\n} as const;\n\nexport type Domain = Metadata & Partial<{\n [Domain.Alphabet]: 'nucleotide' | 'aminoacid' | string;\n [Domain.BlockId]: string;\n}>;\n\nexport type DomainJson = MetadataJson<Domain>;\nexport const DomainJson: DomainJson = {};\n\n/// Helper function for reading plain domain values\nexport function readDomain<T extends keyof Domain>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): Domain[T] | undefined {\n return readMetadata<Domain, T>(spec?.domain, key);\n}\n\n/// Helper function for reading json-encoded domain values, throws on JSON parsing error\nexport function readDomainJsonOrThrow<T extends keyof DomainJson>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<DomainJson[T]> | undefined {\n return readMetadataJsonOrThrow<Domain, T>(spec?.domain, DomainJson, key, 'readDomainJsonOrThrow');\n}\n\n/// Helper function for reading json-encoded domain values, returns undefined on JSON parsing error\nexport function readDomainJson<T extends keyof DomainJson>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<DomainJson[T]> | undefined {\n return readMetadataJson<Domain, T>(spec?.domain, DomainJson, key);\n}\n\n/// Well-known annotations\nexport const Annotation = {\n AxisNature: 'pl7.app/axisNature',\n Alphabet: 'pl7.app/alphabet',\n Description: 'pl7.app/description',\n DiscreteValues: 'pl7.app/discreteValues',\n Format: 'pl7.app/format',\n Graph: {\n Axis: {\n HighCardinality: 'pl7.app/graph/axis/highCardinality',\n LowerLimit: 'pl7.app/graph/axis/lowerLimit',\n SymmetricRange: 'pl7.app/graph/axis/symmetricRange',\n UpperLimit: 'pl7.app/graph/axis/upperLimit',\n },\n IsDenseAxis: 'pl7.app/graph/isDenseAxis',\n IsVirtual: 'pl7.app/graph/isVirtual',\n Palette: 'pl7.app/graph/palette',\n Thresholds: 'pl7.app/graph/thresholds',\n TreatAbsentValuesAs: 'pl7.app/graph/treatAbsentValuesAs',\n },\n HideDataFromUi: 'pl7.app/hideDataFromUi',\n HideDataFromGraphs: 'pl7.app/hideDataFromGraphs',\n IsDiscreteFilter: 'pl7.app/isDiscreteFilter',\n IsLinkerColumn: 'pl7.app/isLinkerColumn',\n IsSubset: 'pl7.app/isSubset',\n Label: 'pl7.app/label',\n Max: 'pl7.app/max',\n Min: 'pl7.app/min',\n MultipliesBy: 'pl7.app/multipliesBy',\n Parents: 'pl7.app/parents',\n Sequence: {\n Annotation: {\n Mapping: 'pl7.app/sequence/annotation/mapping',\n },\n IsAnnotation: 'pl7.app/sequence/isAnnotation',\n },\n Table: {\n FontFamily: 'pl7.app/table/fontFamily',\n OrderPriority: 'pl7.app/table/orderPriority',\n Visibility: 'pl7.app/table/visibility',\n },\n Trace: 'pl7.app/trace',\n} as const;\n\nexport type Annotation = Metadata & Partial<{\n [Annotation.Alphabet]: 'nucleotide' | 'aminoacid' | string;\n [Annotation.AxisNature]: 'homogeneous' | 'heterogeneous' | 'scaleCompatible' | string;\n [Annotation.Description]: string;\n [Annotation.DiscreteValues]: StringifiedJson<number[]> | StringifiedJson<string[]>;\n [Annotation.Format]: string;\n [Annotation.Graph.Axis.HighCardinality]: StringifiedJson<boolean>;\n [Annotation.Graph.Axis.LowerLimit]: StringifiedJson<number>;\n [Annotation.Graph.Axis.SymmetricRange]: StringifiedJson<boolean>;\n [Annotation.Graph.Axis.UpperLimit]: StringifiedJson<number>;\n [Annotation.Graph.IsDenseAxis]: StringifiedJson<boolean>;\n [Annotation.Graph.IsVirtual]: StringifiedJson<boolean>;\n [Annotation.Graph.Palette]: StringifiedJson<{ mapping: Record<string, number>; name: string }>;\n [Annotation.Graph.Thresholds]: StringifiedJson<{ columnId: { valueType: ValueType; name: string }; value: number }[]>;\n [Annotation.Graph.TreatAbsentValuesAs]: StringifiedJson<number>;\n [Annotation.HideDataFromUi]: StringifiedJson<boolean>;\n [Annotation.HideDataFromGraphs]: StringifiedJson<boolean>;\n [Annotation.IsDiscreteFilter]: StringifiedJson<boolean>;\n [Annotation.IsLinkerColumn]: StringifiedJson<boolean>;\n [Annotation.IsSubset]: StringifiedJson<boolean>;\n [Annotation.Label]: string;\n [Annotation.Max]: StringifiedJson<number>;\n [Annotation.Min]: StringifiedJson<number>;\n [Annotation.MultipliesBy]: StringifiedJson<AxisSpec['name'][]>;\n [Annotation.Parents]: StringifiedJson<AxisSpec['name'][]>;\n [Annotation.Sequence.Annotation.Mapping]: StringifiedJson<Record<string, string>>;\n [Annotation.Sequence.IsAnnotation]: StringifiedJson<boolean>;\n [Annotation.Table.FontFamily]: string;\n [Annotation.Table.OrderPriority]: StringifiedJson<number>;\n [Annotation.Table.Visibility]: 'hidden' | 'optional' | string;\n [Annotation.Trace]: StringifiedJson<Record<string, unknown>>;\n}>;\n\n// export const AxisSpec = z.object({\n// type: z.nativeEnum(ValueType),\n// name: z.string(),\n// domain: z.record(z.string(), z.string()).optional(),\n// annotations: z.record(z.string(), z.string()).optional(),\n// parentAxes: z.array(z.number()).optional(),\n// }).passthrough();\n//\n// type Expect<T extends true> = T;\n// type Equal<X, Y> =\n// (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n//\n// type _test = Expect<Equal<\n// Readonly<z.infer<typeof AxisSpec>>,\n// Readonly<AxisSpec & Record<string, unknown>>\n// >>;\n\nexport type AnnotationJson = MetadataJson<Annotation>;\n\nconst ValueTypeSchema = z.enum(['Int', 'Long', 'Float', 'Double', 'String'] as const);\nexport const AnnotationJson: AnnotationJson = {\n [Annotation.DiscreteValues]: z.array(z.string()).or(z.array(z.number())),\n [Annotation.Graph.Axis.HighCardinality]: z.boolean(),\n [Annotation.Graph.Axis.LowerLimit]: z.number(),\n [Annotation.Graph.Axis.UpperLimit]: z.number(),\n [Annotation.Graph.Axis.SymmetricRange]: z.boolean(),\n [Annotation.Graph.IsDenseAxis]: z.boolean(),\n [Annotation.Graph.Palette]: z.object({ mapping: z.record(z.number()), name: z.string() }),\n [Annotation.Graph.Thresholds]: z.array(\n z.object({\n columnId: z.object({ valueType: ValueTypeSchema, name: z.string() }),\n value: z.number(),\n }),\n ),\n [Annotation.Graph.TreatAbsentValuesAs]: z.number(),\n [Annotation.Graph.IsVirtual]: z.boolean(),\n [Annotation.HideDataFromUi]: z.boolean(),\n [Annotation.HideDataFromGraphs]: z.boolean(),\n [Annotation.IsDiscreteFilter]: z.boolean(),\n [Annotation.IsLinkerColumn]: z.boolean(),\n [Annotation.IsSubset]: z.boolean(),\n [Annotation.Max]: z.number(),\n [Annotation.Min]: z.number(),\n [Annotation.MultipliesBy]: z.array(z.string()),\n [Annotation.Parents]: z.array(z.string()),\n [Annotation.Sequence.Annotation.Mapping]: z.record(z.string(), z.string()),\n [Annotation.Sequence.IsAnnotation]: z.boolean(),\n [Annotation.Table.OrderPriority]: z.number(),\n [Annotation.Trace]: z.record(z.string(), z.unknown()),\n};\n\n/// Helper function for reading plain annotation values\nexport function readAnnotation<T extends keyof Annotation>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): Annotation[T] | undefined {\n return readMetadata<Annotation, T>(spec?.annotations, key);\n}\n\n/// Helper function for reading json-encoded annotation values, throws on JSON parsing error\nexport function readAnnotationJsonOrThrow<T extends keyof AnnotationJson>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<AnnotationJson[T]> | undefined {\n return readMetadataJsonOrThrow<Annotation, T>(spec?.annotations, AnnotationJson, key, 'readAnnotationJsonOrThrow');\n}\n\n/// Helper function for reading json-encoded annotation values, returns undefined on JSON parsing error\nexport function readAnnotationJson<T extends keyof AnnotationJson>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<AnnotationJson[T]> | undefined {\n return readMetadataJson<Annotation, T>(spec?.annotations, AnnotationJson, key);\n}\n\nexport function isLinkerColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.IsLinkerColumn);\n}\n\n/**\n * Specification of an individual axis.\n *\n * Each axis is a part of a composite key that addresses data inside the PColumn.\n *\n * Each record inside a PColumn is addressed by a unique tuple of values set for\n * all the axes specified in the column spec.\n */\nexport type AxisSpec = {\n /** Type of the axis value. Should not use non-key types like float or double. */\n readonly type: ValueType;\n\n /** Name of the axis */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** Any additional information attached to the axis that does not affect its\n * identifier */\n readonly annotations?: Record<string, string>;\n\n /**\n * Parent axes provide contextual grouping for the axis in question, establishing\n * a hierarchy where the current axis is dependent on one or more axes for its\n * full definition and meaning. For instance, in a data structure where each\n * \"container\" axis may contain multiple \"item\" axes, the `item` axis would\n * list the index of the `container` axis in this field to denote its dependency.\n *\n * This means that the identity or significance of the `item` axis is only\n * interpretable when combined with its parent `container` axis. An `item` axis\n * index by itself may be non-unique and only gains uniqueness within the context\n * of its parent `container`. Therefore, the `parentAxes` field is essential for\n * mapping these relationships and ensuring data coherence across nested or\n * multi-level data models.\n *\n * A list of zero-based indices of parent axes in the overall axes specification\n * from the column spec. Each index corresponds to the position of a parent axis\n * in the list that defines the structure of the data model.\n */\n readonly parentAxes?: number[];\n};\n\n/** Parents are specs, not indexes; normalized axis can be used considering its parents independently from column */\nexport interface AxisSpecNormalized extends Omit<AxisSpec, 'parentAxes'> {\n parentAxesSpec: AxisSpecNormalized[];\n}\n\n/** Tree: axis is a root, its parents are children */\nexport type AxisTree = {\n axis: AxisSpecNormalized;\n children: AxisTree[]; // parents\n};\n\nfunction makeAxisTree(axis: AxisSpecNormalized): AxisTree {\n return { axis, children: [] };\n}\n\n/** Build tree by axis parents annotations */\nexport function getAxesTree(rootAxis: AxisSpecNormalized): AxisTree {\n const root = makeAxisTree(rootAxis);\n let nodesQ = [root];\n while (nodesQ.length) {\n const nextNodes: AxisTree[] = [];\n for (const node of nodesQ) {\n node.children = node.axis.parentAxesSpec.map(makeAxisTree);\n nextNodes.push(...node.children);\n }\n nodesQ = nextNodes;\n }\n return root;\n}\n\n/** Get set of canonicalized axisIds from axisTree */\nexport function getSetFromAxisTree(tree: AxisTree): Set<CanonicalizedJson<AxisId>> {\n const set = new Set([canonicalizeJson(getAxisId(tree.axis))]);\n let nodesQ = [tree];\n while (nodesQ.length) {\n const nextNodes = [];\n for (const node of nodesQ) {\n for (const parent of node.children) {\n set.add(canonicalizeJson(getAxisId(parent.axis)));\n nextNodes.push(parent);\n }\n }\n nodesQ = nextNodes;\n }\n return set;\n}\n\n/** Get array of axisSpecs from axisTree */\nexport function getArrayFromAxisTree(tree: AxisTree): AxisSpecNormalized[] {\n const res = [tree.axis];\n let nodesQ = [tree];\n while (nodesQ.length) {\n const nextNodes = [];\n for (const node of nodesQ) {\n for (const parent of node.children) {\n res.push(parent.axis);\n nextNodes.push(parent);\n }\n }\n nodesQ = nextNodes;\n }\n return res;\n}\n\nexport function canonicalizeAxisWithParents(axis: AxisSpecNormalized) {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n}\n\nfunction normalizingAxesComparator(axis1: AxisSpecNormalized, axis2: AxisSpecNormalized): 1 | -1 | 0 {\n if (axis1.name !== axis2.name) {\n return axis1.name < axis2.name ? 1 : -1;\n }\n if (axis1.type !== axis2.type) {\n return axis1.type < axis2.type ? 1 : -1;\n }\n const domain1 = canonicalizeJson(axis1.domain ?? {});\n const domain2 = canonicalizeJson(axis2.domain ?? {});\n if (domain1 !== domain2) {\n return domain1 < domain2 ? 1 : -1;\n }\n\n const parents1 = canonicalizeAxisWithParents(axis1);\n const parents2 = canonicalizeAxisWithParents(axis2);\n\n if (parents1 !== parents2) {\n return parents1 < parents2 ? 1 : -1;\n }\n\n const annotation1 = canonicalizeJson(axis1.annotations ?? {});\n const annotation2 = canonicalizeJson(axis2.annotations ?? {});\n if (annotation1 !== annotation2) {\n return annotation1 < annotation2 ? 1 : -1;\n }\n return 0;\n}\n\nfunction parseParentsFromAnnotations(axis: AxisSpec) {\n const parentsList = readAnnotationJson(axis, Annotation.Parents);\n if (parentsList === undefined) {\n return [];\n }\n return parentsList;\n}\n\nfunction sortParentsDeep(axisSpec: AxisSpecNormalized) {\n axisSpec.parentAxesSpec.forEach(sortParentsDeep);\n axisSpec.parentAxesSpec.sort(normalizingAxesComparator);\n}\n\nfunction hasCycleOfParents(axisSpec: AxisSpecNormalized) {\n const root = makeAxisTree(axisSpec);\n let nodesQ = [root];\n const ancestors = new Set(canonicalizeJson(getAxisId(axisSpec)));\n while (nodesQ.length) {\n const nextNodes: AxisTree[] = [];\n const levelIds = new Set<CanonicalizedJson<AxisId>>();\n for (const node of nodesQ) {\n node.children = node.axis.parentAxesSpec.map(makeAxisTree);\n for (const child of node.children) {\n const childId = canonicalizeJson(getAxisId(child.axis));\n if (!levelIds.has(childId)) {\n nextNodes.push(child);\n levelIds.add(childId);\n if (ancestors.has(childId)) {\n return true;\n }\n ancestors.add(childId);\n }\n }\n }\n nodesQ = nextNodes;\n }\n return false;\n}\n\n/** Create list of normalized axisSpec (parents are in array of specs, not indexes) */\nexport function getNormalizedAxesList(axes: AxisSpec[]): AxisSpecNormalized[] {\n if (!axes.length) {\n return [];\n }\n const modifiedAxes: AxisSpecNormalized[] = axes.map((axis) => {\n const { parentAxes: _, ...copiedRest } = axis;\n return { ...copiedRest, annotations: { ...copiedRest.annotations }, parentAxesSpec: [] };\n });\n\n axes.forEach((axis, idx) => {\n const modifiedAxis = modifiedAxes[idx];\n if (axis.parentAxes) { // if we have parents by indexes then take from the list\n modifiedAxis.parentAxesSpec = axis.parentAxes.map((idx) => modifiedAxes[idx]);\n } else { // else try to parse from annotation name\n const parents = parseParentsFromAnnotations(axis).map((name) => modifiedAxes.find((axis) => axis.name === name));\n modifiedAxis.parentAxesSpec = parents.some((p) => p === undefined) ? [] : parents as AxisSpecNormalized[];\n\n delete modifiedAxis.annotations?.[Annotation.Parents];\n }\n });\n\n if (modifiedAxes.some(hasCycleOfParents)) { // Axes list is broken\n modifiedAxes.forEach((axis) => {\n axis.parentAxesSpec = [];\n });\n } else {\n modifiedAxes.forEach((axis) => {\n sortParentsDeep(axis);\n });\n }\n\n return modifiedAxes;\n}\n\n/** Create list of regular axisSpec from normalized (parents are indexes, inside of current axes list) */\nexport function getDenormalizedAxesList(axesSpec: AxisSpecNormalized[]): AxisSpec[] {\n const idsList = axesSpec.map((axisSpec) => canonicalizeJson(getAxisId(axisSpec)));\n return axesSpec.map((axisSpec) => {\n const parentsIds = axisSpec.parentAxesSpec.map((axisSpec) => canonicalizeJson(getAxisId(axisSpec)));\n const parentIdxs = parentsIds.map((id) => idsList.indexOf(id));\n const { parentAxesSpec: _, ...copiedRest } = axisSpec;\n if (parentIdxs.length) {\n return { ...copiedRest, parentAxes: parentIdxs } as AxisSpec;\n }\n return copiedRest;\n });\n}\n\n/** Common type representing spec for all the axes in a column */\nexport type AxesSpec = AxisSpec[];\n\n/// Well-known column names\nexport const PColumnName = {\n Label: 'pl7.app/label',\n Table: {\n RowSelection: 'pl7.app/table/row-selection',\n },\n} as const;\n\nexport function isLabelColumn(column: PColumnSpec) {\n return column.axesSpec.length === 1 && column.name === PColumnName.Label;\n}\n\n/**\n * Full column specification including all axes specs and specs of the column\n * itself.\n *\n * A PColumn in its essence represents a mapping from a fixed size, explicitly\n * typed tuple to an explicitly typed value.\n *\n * (axis1Value1, axis2Value1, ...) -> columnValue\n *\n * Each element in tuple correspond to the axis having the same index in axesSpec.\n */\nexport type PUniversalColumnSpec = PObjectSpec & {\n /** Defines specific type of BObject, the most generic type of unit of\n * information in Platforma Project. */\n readonly kind: 'PColumn';\n\n /** Type of column values */\n readonly valueType: string;\n\n /** Column name */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** Any additional information attached to the column that does not affect its\n * identifier */\n readonly annotations?: Record<string, string>;\n\n /** A list of zero-based indices of parent axes from the {@link axesSpec} array. */\n readonly parentAxes?: number[];\n\n /** Axes specifications */\n readonly axesSpec: AxesSpec;\n};\n\n/**\n * Specification of a data column.\n *\n * Data column is a specialized type of PColumn that stores only simple values (strings and numbers)\n * addressed by multiple keys. This is in contrast to other PColumn variants that can store more complex\n * values like files or other abstract data types. Data columns are optimized for storing and processing\n * basic tabular data.\n */\nexport type PDataColumnSpec = PUniversalColumnSpec & {\n /** Type of column values */\n readonly valueType: ValueType;\n};\n\n// @todo: change this to PUniversalColumnSpec\nexport type PColumnSpec = PDataColumnSpec;\n\n/** Unique PColumnSpec identifier */\nexport type PColumnSpecId = {\n /** Defines specific type of BObject, the most generic type of unit of\n * information in Platforma Project. */\n readonly kind: 'PColumn';\n\n /** Type of column values */\n readonly valueType: ValueType;\n\n /** Column name */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** A list of zero-based indices of parent axes from the {@link axesSpec} array. */\n readonly parentAxes?: number[];\n\n /** Axes id */\n readonly axesId: AxesId;\n};\n\nexport function getPColumnSpecId(spec: PColumnSpec): PColumnSpecId {\n return {\n kind: spec.kind,\n valueType: spec.valueType,\n name: spec.name,\n domain: spec.domain,\n parentAxes: spec.parentAxes,\n axesId: getAxesId(spec.axesSpec),\n };\n}\n\nexport interface PColumn<Data> extends PObject<Data> {\n /** PColumn spec, allowing it to be found among other PObjects */\n readonly spec: PColumnSpec;\n}\n\n/** Columns in a PFrame also have internal identifier, this object represents\n * combination of specs and such id */\nexport interface PColumnIdAndSpec {\n /** Internal column id within the PFrame */\n readonly columnId: PObjectId;\n\n /** Column spec */\n readonly spec: PColumnSpec;\n}\n\n/** Get column id and spec from a column */\nexport function getColumnIdAndSpec<Data>(column: PColumn<Data>): PColumnIdAndSpec {\n return {\n columnId: column.id,\n spec: column.spec,\n };\n}\n\n/** Information returned by {@link PFrame.listColumns} method */\nexport interface PColumnInfo extends PColumnIdAndSpec {\n /** True if data was associated with this PColumn */\n readonly hasData: boolean;\n}\n\nexport interface AxisId {\n /** Type of the axis or column value. For an axis should not use non-key\n * types like float or double. */\n readonly type: ValueType;\n\n /** Name of the axis or column */\n readonly name: string;\n\n /** Adds auxiliary information to the axis or column name and type to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n}\n\n/** Array of axis ids */\nexport type AxesId = AxisId[];\n\n/** Extracts axis ids from axis spec */\nexport function getAxisId(spec: AxisSpec): AxisId {\n const { type, name, domain } = spec;\n const result = { type, name };\n if (domain && Object.entries(domain).length > 0) {\n Object.assign(result, { domain });\n }\n return result;\n}\n\n/** Extracts axes ids from axes spec array from column spec */\nexport function getAxesId(spec: AxesSpec): AxesId {\n return spec.map(getAxisId);\n}\n\n/** Canonicalizes axis id */\nexport function canonicalizeAxisId(id: AxisId): CanonicalizedJson<AxisId> {\n return canonicalizeJson(getAxisId(id));\n}\n\n/** Returns true if all domains from query are found in target */\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\n/** Returns whether \"match\" axis id is compatible with the \"query\" */\nexport function matchAxisId(query: AxisId, target: AxisId): boolean {\n return query.name === target.name && matchDomain(query.domain, target.domain);\n}\n\nexport function getTypeFromPColumnOrAxisSpec(spec: PColumnSpec | AxisSpec): ValueType {\n return 'valueType' in spec ? spec.valueType : spec.type;\n}\n\nexport function isAxisId(id: unknown): id is AxisId {\n return typeof id === 'object' && id !== null && 'name' in id && 'type' in id;\n}\n"],"names":["ensureError","z","canonicalizeJson"],"mappings":"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"}
1
+ {"version":3,"file":"spec.cjs","sources":["../../../../src/drivers/pframe/spec/spec.ts"],"sourcesContent":["import { ensureError } from '../../../errors';\nimport {\n canonicalizeJson,\n type CanonicalizedJson,\n type StringifiedJson,\n} from '../../../json';\nimport type {\n PObject,\n PObjectId,\n PObjectSpec,\n} from '../../../pool';\nimport { z } from 'zod';\n\nexport const ValueType = {\n Int: 'Int',\n Long: 'Long',\n Float: 'Float',\n Double: 'Double',\n String: 'String',\n Bytes: 'Bytes',\n} as const;\n\n/** PFrame columns and axes within them may store one of these types. */\nexport type ValueType = (typeof ValueType)[keyof typeof ValueType];\n\nexport type Metadata = Record<string, string>;\n\nexport function readMetadata<U extends Metadata, T extends keyof U = keyof U>(\n metadata: Metadata | undefined,\n key: T,\n): U[T] | undefined {\n return (metadata as U | undefined)?.[key];\n}\n\ntype MetadataJsonImpl<M> = {\n [P in keyof M as (M[P] extends StringifiedJson ? P : never)]: M[P] extends StringifiedJson<infer U> ? z.ZodType<U> : never;\n};\nexport type MetadataJson<M> = MetadataJsonImpl<Required<M>>;\n\nexport function readMetadataJsonOrThrow<M extends Metadata, T extends keyof MetadataJson<M>>(\n metadata: Metadata | undefined,\n metadataJson: MetadataJson<M>,\n key: T,\n methodNameInError: string = 'readMetadataJsonOrThrow',\n): z.infer<MetadataJson<M>[T]> | undefined {\n const json = readMetadata<M, T>(metadata, key);\n if (json === undefined) return undefined;\n\n const schema = metadataJson[key];\n try {\n const value = JSON.parse(json);\n return schema.parse(value);\n } catch (error: unknown) {\n throw new Error(\n `${methodNameInError} failed, `\n + `key: ${String(key)}, `\n + `value: ${json}, `\n + `error: ${ensureError(error)}`,\n );\n }\n}\n\nexport function readMetadataJson<M extends Metadata, T extends keyof MetadataJson<M>>(\n metadata: Metadata | undefined,\n metadataJson: MetadataJson<M>,\n key: T,\n): z.infer<MetadataJson<M>[T]> | undefined {\n try {\n return readMetadataJsonOrThrow(metadata, metadataJson, key);\n } catch {\n return undefined; // treat invalid values as unset\n }\n}\n\n/// Well-known domains\nexport const Domain = {\n Alphabet: 'pl7.app/alphabet',\n BlockId: 'pl7.app/blockId',\n} as const;\n\nexport type Domain = Metadata & Partial<{\n [Domain.Alphabet]: 'nucleotide' | 'aminoacid' | string;\n [Domain.BlockId]: string;\n}>;\n\nexport type DomainJson = MetadataJson<Domain>;\nexport const DomainJson: DomainJson = {};\n\n/// Helper function for reading plain domain values\nexport function readDomain<T extends keyof Domain>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): Domain[T] | undefined {\n return readMetadata<Domain, T>(spec?.domain, key);\n}\n\n/// Helper function for reading json-encoded domain values, throws on JSON parsing error\nexport function readDomainJsonOrThrow<T extends keyof DomainJson>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<DomainJson[T]> | undefined {\n return readMetadataJsonOrThrow<Domain, T>(spec?.domain, DomainJson, key, 'readDomainJsonOrThrow');\n}\n\n/// Helper function for reading json-encoded domain values, returns undefined on JSON parsing error\nexport function readDomainJson<T extends keyof DomainJson>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<DomainJson[T]> | undefined {\n return readMetadataJson<Domain, T>(spec?.domain, DomainJson, key);\n}\n\n/// Well-known annotations\nexport const Annotation = {\n AxisNature: 'pl7.app/axisNature',\n Alphabet: 'pl7.app/alphabet',\n Description: 'pl7.app/description',\n DiscreteValues: 'pl7.app/discreteValues',\n Format: 'pl7.app/format',\n Graph: {\n Axis: {\n HighCardinality: 'pl7.app/graph/axis/highCardinality',\n LowerLimit: 'pl7.app/graph/axis/lowerLimit',\n SymmetricRange: 'pl7.app/graph/axis/symmetricRange',\n UpperLimit: 'pl7.app/graph/axis/upperLimit',\n },\n IsDenseAxis: 'pl7.app/graph/isDenseAxis',\n IsVirtual: 'pl7.app/graph/isVirtual',\n Palette: 'pl7.app/graph/palette',\n Thresholds: 'pl7.app/graph/thresholds',\n TreatAbsentValuesAs: 'pl7.app/graph/treatAbsentValuesAs',\n },\n HideDataFromUi: 'pl7.app/hideDataFromUi',\n HideDataFromGraphs: 'pl7.app/hideDataFromGraphs',\n IsDiscreteFilter: 'pl7.app/isDiscreteFilter',\n IsLinkerColumn: 'pl7.app/isLinkerColumn',\n IsSubset: 'pl7.app/isSubset',\n Label: 'pl7.app/label',\n Max: 'pl7.app/max',\n Min: 'pl7.app/min',\n MultipliesBy: 'pl7.app/multipliesBy',\n Parents: 'pl7.app/parents',\n Sequence: {\n Annotation: {\n Mapping: 'pl7.app/sequence/annotation/mapping',\n },\n IsAnnotation: 'pl7.app/sequence/isAnnotation',\n },\n Table: {\n FontFamily: 'pl7.app/table/fontFamily',\n OrderPriority: 'pl7.app/table/orderPriority',\n Visibility: 'pl7.app/table/visibility',\n },\n Trace: 'pl7.app/trace',\n} as const;\n\nexport type Annotation = Metadata & Partial<{\n [Annotation.Alphabet]: 'nucleotide' | 'aminoacid' | string;\n [Annotation.AxisNature]: 'homogeneous' | 'heterogeneous' | 'scaleCompatible' | string;\n [Annotation.Description]: string;\n [Annotation.DiscreteValues]: StringifiedJson<number[]> | StringifiedJson<string[]>;\n [Annotation.Format]: string;\n [Annotation.Graph.Axis.HighCardinality]: StringifiedJson<boolean>;\n [Annotation.Graph.Axis.LowerLimit]: StringifiedJson<number>;\n [Annotation.Graph.Axis.SymmetricRange]: StringifiedJson<boolean>;\n [Annotation.Graph.Axis.UpperLimit]: StringifiedJson<number>;\n [Annotation.Graph.IsDenseAxis]: StringifiedJson<boolean>;\n [Annotation.Graph.IsVirtual]: StringifiedJson<boolean>;\n [Annotation.Graph.Palette]: StringifiedJson<{ mapping: Record<string, number>; name: string }>;\n [Annotation.Graph.Thresholds]: StringifiedJson<{ columnId: { valueType: ValueType; name: string }; value: number }[]>;\n [Annotation.Graph.TreatAbsentValuesAs]: StringifiedJson<number>;\n [Annotation.HideDataFromUi]: StringifiedJson<boolean>;\n [Annotation.HideDataFromGraphs]: StringifiedJson<boolean>;\n [Annotation.IsDiscreteFilter]: StringifiedJson<boolean>;\n [Annotation.IsLinkerColumn]: StringifiedJson<boolean>;\n [Annotation.IsSubset]: StringifiedJson<boolean>;\n [Annotation.Label]: string;\n [Annotation.Max]: StringifiedJson<number>;\n [Annotation.Min]: StringifiedJson<number>;\n [Annotation.MultipliesBy]: StringifiedJson<AxisSpec['name'][]>;\n [Annotation.Parents]: StringifiedJson<AxisSpec['name'][]>;\n [Annotation.Sequence.Annotation.Mapping]: StringifiedJson<Record<string, string>>;\n [Annotation.Sequence.IsAnnotation]: StringifiedJson<boolean>;\n [Annotation.Table.FontFamily]: string;\n [Annotation.Table.OrderPriority]: StringifiedJson<number>;\n [Annotation.Table.Visibility]: 'hidden' | 'optional' | string;\n [Annotation.Trace]: StringifiedJson<Record<string, unknown>>;\n}>;\n\n// export const AxisSpec = z.object({\n// type: z.nativeEnum(ValueType),\n// name: z.string(),\n// domain: z.record(z.string(), z.string()).optional(),\n// annotations: z.record(z.string(), z.string()).optional(),\n// parentAxes: z.array(z.number()).optional(),\n// }).passthrough();\n//\n// type Expect<T extends true> = T;\n// type Equal<X, Y> =\n// (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n//\n// type _test = Expect<Equal<\n// Readonly<z.infer<typeof AxisSpec>>,\n// Readonly<AxisSpec & Record<string, unknown>>\n// >>;\n\nexport type AnnotationJson = MetadataJson<Annotation>;\n\nconst ValueTypeSchema = z.enum(['Int', 'Long', 'Float', 'Double', 'String'] as const);\nexport const AnnotationJson: AnnotationJson = {\n [Annotation.DiscreteValues]: z.array(z.string()).or(z.array(z.number())),\n [Annotation.Graph.Axis.HighCardinality]: z.boolean(),\n [Annotation.Graph.Axis.LowerLimit]: z.number(),\n [Annotation.Graph.Axis.UpperLimit]: z.number(),\n [Annotation.Graph.Axis.SymmetricRange]: z.boolean(),\n [Annotation.Graph.IsDenseAxis]: z.boolean(),\n [Annotation.Graph.Palette]: z.object({ mapping: z.record(z.number()), name: z.string() }),\n [Annotation.Graph.Thresholds]: z.array(\n z.object({\n columnId: z.object({ valueType: ValueTypeSchema, name: z.string() }),\n value: z.number(),\n }),\n ),\n [Annotation.Graph.TreatAbsentValuesAs]: z.number(),\n [Annotation.Graph.IsVirtual]: z.boolean(),\n [Annotation.HideDataFromUi]: z.boolean(),\n [Annotation.HideDataFromGraphs]: z.boolean(),\n [Annotation.IsDiscreteFilter]: z.boolean(),\n [Annotation.IsLinkerColumn]: z.boolean(),\n [Annotation.IsSubset]: z.boolean(),\n [Annotation.Max]: z.number(),\n [Annotation.Min]: z.number(),\n [Annotation.MultipliesBy]: z.array(z.string()),\n [Annotation.Parents]: z.array(z.string()),\n [Annotation.Sequence.Annotation.Mapping]: z.record(z.string(), z.string()),\n [Annotation.Sequence.IsAnnotation]: z.boolean(),\n [Annotation.Table.OrderPriority]: z.number(),\n [Annotation.Trace]: z.record(z.string(), z.unknown()),\n};\n\n/// Helper function for reading plain annotation values\nexport function readAnnotation<T extends keyof Annotation>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): Annotation[T] | undefined {\n return readMetadata<Annotation, T>(spec?.annotations, key);\n}\n\n/// Helper function for reading json-encoded annotation values, throws on JSON parsing error\nexport function readAnnotationJsonOrThrow<T extends keyof AnnotationJson>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<AnnotationJson[T]> | undefined {\n return readMetadataJsonOrThrow<Annotation, T>(spec?.annotations, AnnotationJson, key, 'readAnnotationJsonOrThrow');\n}\n\n/// Helper function for reading json-encoded annotation values, returns undefined on JSON parsing error\nexport function readAnnotationJson<T extends keyof AnnotationJson>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<AnnotationJson[T]> | undefined {\n return readMetadataJson<Annotation, T>(spec?.annotations, AnnotationJson, key);\n}\n\nexport function isLinkerColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.IsLinkerColumn);\n}\n\n/**\n * Specification of an individual axis.\n *\n * Each axis is a part of a composite key that addresses data inside the PColumn.\n *\n * Each record inside a PColumn is addressed by a unique tuple of values set for\n * all the axes specified in the column spec.\n */\nexport type AxisSpec = {\n /** Type of the axis value. Should not use non-key types like float or double. */\n readonly type: ValueType;\n\n /** Name of the axis */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** Any additional information attached to the axis that does not affect its\n * identifier */\n readonly annotations?: Record<string, string>;\n\n /**\n * Parent axes provide contextual grouping for the axis in question, establishing\n * a hierarchy where the current axis is dependent on one or more axes for its\n * full definition and meaning. For instance, in a data structure where each\n * \"container\" axis may contain multiple \"item\" axes, the `item` axis would\n * list the index of the `container` axis in this field to denote its dependency.\n *\n * This means that the identity or significance of the `item` axis is only\n * interpretable when combined with its parent `container` axis. An `item` axis\n * index by itself may be non-unique and only gains uniqueness within the context\n * of its parent `container`. Therefore, the `parentAxes` field is essential for\n * mapping these relationships and ensuring data coherence across nested or\n * multi-level data models.\n *\n * A list of zero-based indices of parent axes in the overall axes specification\n * from the column spec. Each index corresponds to the position of a parent axis\n * in the list that defines the structure of the data model.\n */\n readonly parentAxes?: number[];\n};\n\n/** Parents are specs, not indexes; normalized axis can be used considering its parents independently from column */\nexport interface AxisSpecNormalized extends Omit<AxisSpec, 'parentAxes'> {\n parentAxesSpec: AxisSpecNormalized[];\n}\n\n/** Tree: axis is a root, its parents are children */\nexport type AxisTree = {\n axis: AxisSpecNormalized;\n children: AxisTree[]; // parents\n};\n\nfunction makeAxisTree(axis: AxisSpecNormalized): AxisTree {\n return { axis, children: [] };\n}\n\n/** Build tree by axis parents annotations */\nexport function getAxesTree(rootAxis: AxisSpecNormalized): AxisTree {\n const root = makeAxisTree(rootAxis);\n let nodesQ = [root];\n while (nodesQ.length) {\n const nextNodes: AxisTree[] = [];\n for (const node of nodesQ) {\n node.children = node.axis.parentAxesSpec.map(makeAxisTree);\n nextNodes.push(...node.children);\n }\n nodesQ = nextNodes;\n }\n return root;\n}\n\n/** Get set of canonicalized axisIds from axisTree */\nexport function getSetFromAxisTree(tree: AxisTree): Set<CanonicalizedJson<AxisId>> {\n const set = new Set([canonicalizeJson(getAxisId(tree.axis))]);\n let nodesQ = [tree];\n while (nodesQ.length) {\n const nextNodes = [];\n for (const node of nodesQ) {\n for (const parent of node.children) {\n set.add(canonicalizeJson(getAxisId(parent.axis)));\n nextNodes.push(parent);\n }\n }\n nodesQ = nextNodes;\n }\n return set;\n}\n\n/** Get array of axisSpecs from axisTree */\nexport function getArrayFromAxisTree(tree: AxisTree): AxisSpecNormalized[] {\n const res = [tree.axis];\n let nodesQ = [tree];\n while (nodesQ.length) {\n const nextNodes = [];\n for (const node of nodesQ) {\n for (const parent of node.children) {\n res.push(parent.axis);\n nextNodes.push(parent);\n }\n }\n nodesQ = nextNodes;\n }\n return res;\n}\n\nexport function canonicalizeAxisWithParents(axis: AxisSpecNormalized) {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n}\n\nfunction normalizingAxesComparator(axis1: AxisSpecNormalized, axis2: AxisSpecNormalized): 1 | -1 | 0 {\n if (axis1.name !== axis2.name) {\n return axis1.name < axis2.name ? 1 : -1;\n }\n if (axis1.type !== axis2.type) {\n return axis1.type < axis2.type ? 1 : -1;\n }\n const domain1 = canonicalizeJson(axis1.domain ?? {});\n const domain2 = canonicalizeJson(axis2.domain ?? {});\n if (domain1 !== domain2) {\n return domain1 < domain2 ? 1 : -1;\n }\n\n const parents1 = canonicalizeAxisWithParents(axis1);\n const parents2 = canonicalizeAxisWithParents(axis2);\n\n if (parents1 !== parents2) {\n return parents1 < parents2 ? 1 : -1;\n }\n\n const annotation1 = canonicalizeJson(axis1.annotations ?? {});\n const annotation2 = canonicalizeJson(axis2.annotations ?? {});\n if (annotation1 !== annotation2) {\n return annotation1 < annotation2 ? 1 : -1;\n }\n return 0;\n}\n\nfunction parseParentsFromAnnotations(axis: AxisSpec) {\n const parentsList = readAnnotationJson(axis, Annotation.Parents);\n if (parentsList === undefined) {\n return [];\n }\n return parentsList;\n}\n\nfunction sortParentsDeep(axisSpec: AxisSpecNormalized) {\n axisSpec.parentAxesSpec.forEach(sortParentsDeep);\n axisSpec.parentAxesSpec.sort(normalizingAxesComparator);\n}\n\nfunction hasCycleOfParents(axisSpec: AxisSpecNormalized) {\n const root = makeAxisTree(axisSpec);\n let nodesQ = [root];\n const ancestors = new Set(canonicalizeJson(getAxisId(axisSpec)));\n while (nodesQ.length) {\n const nextNodes: AxisTree[] = [];\n const levelIds = new Set<CanonicalizedJson<AxisId>>();\n for (const node of nodesQ) {\n node.children = node.axis.parentAxesSpec.map(makeAxisTree);\n for (const child of node.children) {\n const childId = canonicalizeJson(getAxisId(child.axis));\n if (!levelIds.has(childId)) {\n nextNodes.push(child);\n levelIds.add(childId);\n if (ancestors.has(childId)) {\n return true;\n }\n ancestors.add(childId);\n }\n }\n }\n nodesQ = nextNodes;\n }\n return false;\n}\n\n/** Create list of normalized axisSpec (parents are in array of specs, not indexes) */\nexport function getNormalizedAxesList(axes: AxisSpec[]): AxisSpecNormalized[] {\n if (!axes.length) {\n return [];\n }\n const modifiedAxes: AxisSpecNormalized[] = axes.map((axis) => {\n const { parentAxes: _, ...copiedRest } = axis;\n return { ...copiedRest, annotations: { ...copiedRest.annotations }, parentAxesSpec: [] };\n });\n\n axes.forEach((axis, idx) => {\n const modifiedAxis = modifiedAxes[idx];\n if (axis.parentAxes) { // if we have parents by indexes then take from the list\n modifiedAxis.parentAxesSpec = axis.parentAxes.map((idx) => modifiedAxes[idx]);\n } else { // else try to parse from annotation name\n const parents = parseParentsFromAnnotations(axis).map((name) => modifiedAxes.find((axis) => axis.name === name));\n modifiedAxis.parentAxesSpec = parents.some((p) => p === undefined) ? [] : parents as AxisSpecNormalized[];\n\n delete modifiedAxis.annotations?.[Annotation.Parents];\n }\n });\n\n if (modifiedAxes.some(hasCycleOfParents)) { // Axes list is broken\n modifiedAxes.forEach((axis) => {\n axis.parentAxesSpec = [];\n });\n } else {\n modifiedAxes.forEach((axis) => {\n sortParentsDeep(axis);\n });\n }\n\n return modifiedAxes;\n}\n\n/** Create list of regular axisSpec from normalized (parents are indexes, inside of current axes list) */\nexport function getDenormalizedAxesList(axesSpec: AxisSpecNormalized[]): AxisSpec[] {\n const idsList = axesSpec.map((axisSpec) => canonicalizeJson(getAxisId(axisSpec)));\n return axesSpec.map((axisSpec) => {\n const parentsIds = axisSpec.parentAxesSpec.map((axisSpec) => canonicalizeJson(getAxisId(axisSpec)));\n const parentIdxs = parentsIds.map((id) => idsList.indexOf(id));\n const { parentAxesSpec: _, ...copiedRest } = axisSpec;\n if (parentIdxs.length) {\n return { ...copiedRest, parentAxes: parentIdxs } as AxisSpec;\n }\n return copiedRest;\n });\n}\n\n/** Common type representing spec for all the axes in a column */\nexport type AxesSpec = AxisSpec[];\n\n/// Well-known column names\nexport const PColumnName = {\n Label: 'pl7.app/label',\n Table: {\n RowSelection: 'pl7.app/table/row-selection',\n },\n} as const;\n\nexport function isLabelColumn(column: PColumnSpec) {\n return column.axesSpec.length === 1 && column.name === PColumnName.Label;\n}\n\n/**\n * Full column specification including all axes specs and specs of the column\n * itself.\n *\n * A PColumn in its essence represents a mapping from a fixed size, explicitly\n * typed tuple to an explicitly typed value.\n *\n * (axis1Value1, axis2Value1, ...) -> columnValue\n *\n * Each element in tuple correspond to the axis having the same index in axesSpec.\n */\nexport type PUniversalColumnSpec = PObjectSpec & {\n /** Defines specific type of BObject, the most generic type of unit of\n * information in Platforma Project. */\n readonly kind: 'PColumn';\n\n /** Type of column values */\n readonly valueType: string;\n\n /** Column name */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** Any additional information attached to the column that does not affect its\n * identifier */\n readonly annotations?: Record<string, string>;\n\n /** A list of zero-based indices of parent axes from the {@link axesSpec} array. */\n readonly parentAxes?: number[];\n\n /** Axes specifications */\n readonly axesSpec: AxesSpec;\n};\n\n/**\n * Specification of a data column.\n *\n * Data column is a specialized type of PColumn that stores only simple values (strings and numbers)\n * addressed by multiple keys. This is in contrast to other PColumn variants that can store more complex\n * values like files or other abstract data types. Data columns are optimized for storing and processing\n * basic tabular data.\n */\nexport type PDataColumnSpec = PUniversalColumnSpec & {\n /** Type of column values */\n readonly valueType: ValueType;\n};\n\n// @todo: change this to PUniversalColumnSpec\nexport type PColumnSpec = PDataColumnSpec;\n\n/** Unique PColumnSpec identifier */\nexport type PColumnSpecId = {\n /** Defines specific type of BObject, the most generic type of unit of\n * information in Platforma Project. */\n readonly kind: 'PColumn';\n\n /** Type of column values */\n readonly valueType: ValueType;\n\n /** Column name */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** A list of zero-based indices of parent axes from the {@link axesSpec} array. */\n readonly parentAxes?: number[];\n\n /** Axes id */\n readonly axesId: AxesId;\n};\n\nexport function getPColumnSpecId(spec: PColumnSpec): PColumnSpecId {\n return {\n kind: spec.kind,\n valueType: spec.valueType,\n name: spec.name,\n domain: spec.domain,\n parentAxes: spec.parentAxes,\n axesId: getAxesId(spec.axesSpec),\n };\n}\n\nexport interface PColumn<Data> extends PObject<Data> {\n /** PColumn spec, allowing it to be found among other PObjects */\n readonly spec: PColumnSpec;\n}\n\nexport type PColumnLazy<T> = PColumn<() => T>;\n\n/** Columns in a PFrame also have internal identifier, this object represents\n * combination of specs and such id */\nexport interface PColumnIdAndSpec {\n /** Internal column id within the PFrame */\n readonly columnId: PObjectId;\n\n /** Column spec */\n readonly spec: PColumnSpec;\n}\n\n/** Get column id and spec from a column */\nexport function getColumnIdAndSpec<Data>(column: PColumn<Data>): PColumnIdAndSpec {\n return {\n columnId: column.id,\n spec: column.spec,\n };\n}\n\n/** Information returned by {@link PFrame.listColumns} method */\nexport interface PColumnInfo extends PColumnIdAndSpec {\n /** True if data was associated with this PColumn */\n readonly hasData: boolean;\n}\n\nexport interface AxisId {\n /** Type of the axis or column value. For an axis should not use non-key\n * types like float or double. */\n readonly type: ValueType;\n\n /** Name of the axis or column */\n readonly name: string;\n\n /** Adds auxiliary information to the axis or column name and type to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n}\n\n/** Array of axis ids */\nexport type AxesId = AxisId[];\n\n/** Extracts axis ids from axis spec */\nexport function getAxisId(spec: AxisSpec): AxisId {\n const { type, name, domain } = spec;\n const result = { type, name };\n if (domain && Object.entries(domain).length > 0) {\n Object.assign(result, { domain });\n }\n return result;\n}\n\n/** Extracts axes ids from axes spec array from column spec */\nexport function getAxesId(spec: AxesSpec): AxesId {\n return spec.map(getAxisId);\n}\n\n/** Canonicalizes axis id */\nexport function canonicalizeAxisId(id: AxisId): CanonicalizedJson<AxisId> {\n return canonicalizeJson(getAxisId(id));\n}\n\n/** Returns true if all domains from query are found in target */\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\n/** Returns whether \"match\" axis id is compatible with the \"query\" */\nexport function matchAxisId(query: AxisId, target: AxisId): boolean {\n return query.name === target.name && matchDomain(query.domain, target.domain);\n}\n\nexport function getTypeFromPColumnOrAxisSpec(spec: PColumnSpec | AxisSpec): ValueType {\n return 'valueType' in spec ? spec.valueType : spec.type;\n}\n\nexport function isAxisId(id: unknown): id is AxisId {\n return typeof id === 'object' && id !== null && 'name' in id && 'type' in id;\n}\n"],"names":["ensureError","z","canonicalizeJson"],"mappings":"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"}
@@ -268,6 +268,7 @@ export interface PColumn<Data> extends PObject<Data> {
268
268
  /** PColumn spec, allowing it to be found among other PObjects */
269
269
  readonly spec: PColumnSpec;
270
270
  }
271
+ export type PColumnLazy<T> = PColumn<() => T>;
271
272
  /** Columns in a PFrame also have internal identifier, this object represents
272
273
  * combination of specs and such id */
273
274
  export interface PColumnIdAndSpec {
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../../src/drivers/pframe/spec/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../../src/drivers/pframe/spec/spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sources":["../../../../src/drivers/pframe/spec/spec.ts"],"sourcesContent":["import { ensureError } from '../../../errors';\nimport {\n canonicalizeJson,\n type CanonicalizedJson,\n type StringifiedJson,\n} from '../../../json';\nimport type {\n PObject,\n PObjectId,\n PObjectSpec,\n} from '../../../pool';\nimport { z } from 'zod';\n\nexport const ValueType = {\n Int: 'Int',\n Long: 'Long',\n Float: 'Float',\n Double: 'Double',\n String: 'String',\n Bytes: 'Bytes',\n} as const;\n\n/** PFrame columns and axes within them may store one of these types. */\nexport type ValueType = (typeof ValueType)[keyof typeof ValueType];\n\nexport type Metadata = Record<string, string>;\n\nexport function readMetadata<U extends Metadata, T extends keyof U = keyof U>(\n metadata: Metadata | undefined,\n key: T,\n): U[T] | undefined {\n return (metadata as U | undefined)?.[key];\n}\n\ntype MetadataJsonImpl<M> = {\n [P in keyof M as (M[P] extends StringifiedJson ? P : never)]: M[P] extends StringifiedJson<infer U> ? z.ZodType<U> : never;\n};\nexport type MetadataJson<M> = MetadataJsonImpl<Required<M>>;\n\nexport function readMetadataJsonOrThrow<M extends Metadata, T extends keyof MetadataJson<M>>(\n metadata: Metadata | undefined,\n metadataJson: MetadataJson<M>,\n key: T,\n methodNameInError: string = 'readMetadataJsonOrThrow',\n): z.infer<MetadataJson<M>[T]> | undefined {\n const json = readMetadata<M, T>(metadata, key);\n if (json === undefined) return undefined;\n\n const schema = metadataJson[key];\n try {\n const value = JSON.parse(json);\n return schema.parse(value);\n } catch (error: unknown) {\n throw new Error(\n `${methodNameInError} failed, `\n + `key: ${String(key)}, `\n + `value: ${json}, `\n + `error: ${ensureError(error)}`,\n );\n }\n}\n\nexport function readMetadataJson<M extends Metadata, T extends keyof MetadataJson<M>>(\n metadata: Metadata | undefined,\n metadataJson: MetadataJson<M>,\n key: T,\n): z.infer<MetadataJson<M>[T]> | undefined {\n try {\n return readMetadataJsonOrThrow(metadata, metadataJson, key);\n } catch {\n return undefined; // treat invalid values as unset\n }\n}\n\n/// Well-known domains\nexport const Domain = {\n Alphabet: 'pl7.app/alphabet',\n BlockId: 'pl7.app/blockId',\n} as const;\n\nexport type Domain = Metadata & Partial<{\n [Domain.Alphabet]: 'nucleotide' | 'aminoacid' | string;\n [Domain.BlockId]: string;\n}>;\n\nexport type DomainJson = MetadataJson<Domain>;\nexport const DomainJson: DomainJson = {};\n\n/// Helper function for reading plain domain values\nexport function readDomain<T extends keyof Domain>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): Domain[T] | undefined {\n return readMetadata<Domain, T>(spec?.domain, key);\n}\n\n/// Helper function for reading json-encoded domain values, throws on JSON parsing error\nexport function readDomainJsonOrThrow<T extends keyof DomainJson>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<DomainJson[T]> | undefined {\n return readMetadataJsonOrThrow<Domain, T>(spec?.domain, DomainJson, key, 'readDomainJsonOrThrow');\n}\n\n/// Helper function for reading json-encoded domain values, returns undefined on JSON parsing error\nexport function readDomainJson<T extends keyof DomainJson>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<DomainJson[T]> | undefined {\n return readMetadataJson<Domain, T>(spec?.domain, DomainJson, key);\n}\n\n/// Well-known annotations\nexport const Annotation = {\n AxisNature: 'pl7.app/axisNature',\n Alphabet: 'pl7.app/alphabet',\n Description: 'pl7.app/description',\n DiscreteValues: 'pl7.app/discreteValues',\n Format: 'pl7.app/format',\n Graph: {\n Axis: {\n HighCardinality: 'pl7.app/graph/axis/highCardinality',\n LowerLimit: 'pl7.app/graph/axis/lowerLimit',\n SymmetricRange: 'pl7.app/graph/axis/symmetricRange',\n UpperLimit: 'pl7.app/graph/axis/upperLimit',\n },\n IsDenseAxis: 'pl7.app/graph/isDenseAxis',\n IsVirtual: 'pl7.app/graph/isVirtual',\n Palette: 'pl7.app/graph/palette',\n Thresholds: 'pl7.app/graph/thresholds',\n TreatAbsentValuesAs: 'pl7.app/graph/treatAbsentValuesAs',\n },\n HideDataFromUi: 'pl7.app/hideDataFromUi',\n HideDataFromGraphs: 'pl7.app/hideDataFromGraphs',\n IsDiscreteFilter: 'pl7.app/isDiscreteFilter',\n IsLinkerColumn: 'pl7.app/isLinkerColumn',\n IsSubset: 'pl7.app/isSubset',\n Label: 'pl7.app/label',\n Max: 'pl7.app/max',\n Min: 'pl7.app/min',\n MultipliesBy: 'pl7.app/multipliesBy',\n Parents: 'pl7.app/parents',\n Sequence: {\n Annotation: {\n Mapping: 'pl7.app/sequence/annotation/mapping',\n },\n IsAnnotation: 'pl7.app/sequence/isAnnotation',\n },\n Table: {\n FontFamily: 'pl7.app/table/fontFamily',\n OrderPriority: 'pl7.app/table/orderPriority',\n Visibility: 'pl7.app/table/visibility',\n },\n Trace: 'pl7.app/trace',\n} as const;\n\nexport type Annotation = Metadata & Partial<{\n [Annotation.Alphabet]: 'nucleotide' | 'aminoacid' | string;\n [Annotation.AxisNature]: 'homogeneous' | 'heterogeneous' | 'scaleCompatible' | string;\n [Annotation.Description]: string;\n [Annotation.DiscreteValues]: StringifiedJson<number[]> | StringifiedJson<string[]>;\n [Annotation.Format]: string;\n [Annotation.Graph.Axis.HighCardinality]: StringifiedJson<boolean>;\n [Annotation.Graph.Axis.LowerLimit]: StringifiedJson<number>;\n [Annotation.Graph.Axis.SymmetricRange]: StringifiedJson<boolean>;\n [Annotation.Graph.Axis.UpperLimit]: StringifiedJson<number>;\n [Annotation.Graph.IsDenseAxis]: StringifiedJson<boolean>;\n [Annotation.Graph.IsVirtual]: StringifiedJson<boolean>;\n [Annotation.Graph.Palette]: StringifiedJson<{ mapping: Record<string, number>; name: string }>;\n [Annotation.Graph.Thresholds]: StringifiedJson<{ columnId: { valueType: ValueType; name: string }; value: number }[]>;\n [Annotation.Graph.TreatAbsentValuesAs]: StringifiedJson<number>;\n [Annotation.HideDataFromUi]: StringifiedJson<boolean>;\n [Annotation.HideDataFromGraphs]: StringifiedJson<boolean>;\n [Annotation.IsDiscreteFilter]: StringifiedJson<boolean>;\n [Annotation.IsLinkerColumn]: StringifiedJson<boolean>;\n [Annotation.IsSubset]: StringifiedJson<boolean>;\n [Annotation.Label]: string;\n [Annotation.Max]: StringifiedJson<number>;\n [Annotation.Min]: StringifiedJson<number>;\n [Annotation.MultipliesBy]: StringifiedJson<AxisSpec['name'][]>;\n [Annotation.Parents]: StringifiedJson<AxisSpec['name'][]>;\n [Annotation.Sequence.Annotation.Mapping]: StringifiedJson<Record<string, string>>;\n [Annotation.Sequence.IsAnnotation]: StringifiedJson<boolean>;\n [Annotation.Table.FontFamily]: string;\n [Annotation.Table.OrderPriority]: StringifiedJson<number>;\n [Annotation.Table.Visibility]: 'hidden' | 'optional' | string;\n [Annotation.Trace]: StringifiedJson<Record<string, unknown>>;\n}>;\n\n// export const AxisSpec = z.object({\n// type: z.nativeEnum(ValueType),\n// name: z.string(),\n// domain: z.record(z.string(), z.string()).optional(),\n// annotations: z.record(z.string(), z.string()).optional(),\n// parentAxes: z.array(z.number()).optional(),\n// }).passthrough();\n//\n// type Expect<T extends true> = T;\n// type Equal<X, Y> =\n// (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n//\n// type _test = Expect<Equal<\n// Readonly<z.infer<typeof AxisSpec>>,\n// Readonly<AxisSpec & Record<string, unknown>>\n// >>;\n\nexport type AnnotationJson = MetadataJson<Annotation>;\n\nconst ValueTypeSchema = z.enum(['Int', 'Long', 'Float', 'Double', 'String'] as const);\nexport const AnnotationJson: AnnotationJson = {\n [Annotation.DiscreteValues]: z.array(z.string()).or(z.array(z.number())),\n [Annotation.Graph.Axis.HighCardinality]: z.boolean(),\n [Annotation.Graph.Axis.LowerLimit]: z.number(),\n [Annotation.Graph.Axis.UpperLimit]: z.number(),\n [Annotation.Graph.Axis.SymmetricRange]: z.boolean(),\n [Annotation.Graph.IsDenseAxis]: z.boolean(),\n [Annotation.Graph.Palette]: z.object({ mapping: z.record(z.number()), name: z.string() }),\n [Annotation.Graph.Thresholds]: z.array(\n z.object({\n columnId: z.object({ valueType: ValueTypeSchema, name: z.string() }),\n value: z.number(),\n }),\n ),\n [Annotation.Graph.TreatAbsentValuesAs]: z.number(),\n [Annotation.Graph.IsVirtual]: z.boolean(),\n [Annotation.HideDataFromUi]: z.boolean(),\n [Annotation.HideDataFromGraphs]: z.boolean(),\n [Annotation.IsDiscreteFilter]: z.boolean(),\n [Annotation.IsLinkerColumn]: z.boolean(),\n [Annotation.IsSubset]: z.boolean(),\n [Annotation.Max]: z.number(),\n [Annotation.Min]: z.number(),\n [Annotation.MultipliesBy]: z.array(z.string()),\n [Annotation.Parents]: z.array(z.string()),\n [Annotation.Sequence.Annotation.Mapping]: z.record(z.string(), z.string()),\n [Annotation.Sequence.IsAnnotation]: z.boolean(),\n [Annotation.Table.OrderPriority]: z.number(),\n [Annotation.Trace]: z.record(z.string(), z.unknown()),\n};\n\n/// Helper function for reading plain annotation values\nexport function readAnnotation<T extends keyof Annotation>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): Annotation[T] | undefined {\n return readMetadata<Annotation, T>(spec?.annotations, key);\n}\n\n/// Helper function for reading json-encoded annotation values, throws on JSON parsing error\nexport function readAnnotationJsonOrThrow<T extends keyof AnnotationJson>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<AnnotationJson[T]> | undefined {\n return readMetadataJsonOrThrow<Annotation, T>(spec?.annotations, AnnotationJson, key, 'readAnnotationJsonOrThrow');\n}\n\n/// Helper function for reading json-encoded annotation values, returns undefined on JSON parsing error\nexport function readAnnotationJson<T extends keyof AnnotationJson>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<AnnotationJson[T]> | undefined {\n return readMetadataJson<Annotation, T>(spec?.annotations, AnnotationJson, key);\n}\n\nexport function isLinkerColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.IsLinkerColumn);\n}\n\n/**\n * Specification of an individual axis.\n *\n * Each axis is a part of a composite key that addresses data inside the PColumn.\n *\n * Each record inside a PColumn is addressed by a unique tuple of values set for\n * all the axes specified in the column spec.\n */\nexport type AxisSpec = {\n /** Type of the axis value. Should not use non-key types like float or double. */\n readonly type: ValueType;\n\n /** Name of the axis */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** Any additional information attached to the axis that does not affect its\n * identifier */\n readonly annotations?: Record<string, string>;\n\n /**\n * Parent axes provide contextual grouping for the axis in question, establishing\n * a hierarchy where the current axis is dependent on one or more axes for its\n * full definition and meaning. For instance, in a data structure where each\n * \"container\" axis may contain multiple \"item\" axes, the `item` axis would\n * list the index of the `container` axis in this field to denote its dependency.\n *\n * This means that the identity or significance of the `item` axis is only\n * interpretable when combined with its parent `container` axis. An `item` axis\n * index by itself may be non-unique and only gains uniqueness within the context\n * of its parent `container`. Therefore, the `parentAxes` field is essential for\n * mapping these relationships and ensuring data coherence across nested or\n * multi-level data models.\n *\n * A list of zero-based indices of parent axes in the overall axes specification\n * from the column spec. Each index corresponds to the position of a parent axis\n * in the list that defines the structure of the data model.\n */\n readonly parentAxes?: number[];\n};\n\n/** Parents are specs, not indexes; normalized axis can be used considering its parents independently from column */\nexport interface AxisSpecNormalized extends Omit<AxisSpec, 'parentAxes'> {\n parentAxesSpec: AxisSpecNormalized[];\n}\n\n/** Tree: axis is a root, its parents are children */\nexport type AxisTree = {\n axis: AxisSpecNormalized;\n children: AxisTree[]; // parents\n};\n\nfunction makeAxisTree(axis: AxisSpecNormalized): AxisTree {\n return { axis, children: [] };\n}\n\n/** Build tree by axis parents annotations */\nexport function getAxesTree(rootAxis: AxisSpecNormalized): AxisTree {\n const root = makeAxisTree(rootAxis);\n let nodesQ = [root];\n while (nodesQ.length) {\n const nextNodes: AxisTree[] = [];\n for (const node of nodesQ) {\n node.children = node.axis.parentAxesSpec.map(makeAxisTree);\n nextNodes.push(...node.children);\n }\n nodesQ = nextNodes;\n }\n return root;\n}\n\n/** Get set of canonicalized axisIds from axisTree */\nexport function getSetFromAxisTree(tree: AxisTree): Set<CanonicalizedJson<AxisId>> {\n const set = new Set([canonicalizeJson(getAxisId(tree.axis))]);\n let nodesQ = [tree];\n while (nodesQ.length) {\n const nextNodes = [];\n for (const node of nodesQ) {\n for (const parent of node.children) {\n set.add(canonicalizeJson(getAxisId(parent.axis)));\n nextNodes.push(parent);\n }\n }\n nodesQ = nextNodes;\n }\n return set;\n}\n\n/** Get array of axisSpecs from axisTree */\nexport function getArrayFromAxisTree(tree: AxisTree): AxisSpecNormalized[] {\n const res = [tree.axis];\n let nodesQ = [tree];\n while (nodesQ.length) {\n const nextNodes = [];\n for (const node of nodesQ) {\n for (const parent of node.children) {\n res.push(parent.axis);\n nextNodes.push(parent);\n }\n }\n nodesQ = nextNodes;\n }\n return res;\n}\n\nexport function canonicalizeAxisWithParents(axis: AxisSpecNormalized) {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n}\n\nfunction normalizingAxesComparator(axis1: AxisSpecNormalized, axis2: AxisSpecNormalized): 1 | -1 | 0 {\n if (axis1.name !== axis2.name) {\n return axis1.name < axis2.name ? 1 : -1;\n }\n if (axis1.type !== axis2.type) {\n return axis1.type < axis2.type ? 1 : -1;\n }\n const domain1 = canonicalizeJson(axis1.domain ?? {});\n const domain2 = canonicalizeJson(axis2.domain ?? {});\n if (domain1 !== domain2) {\n return domain1 < domain2 ? 1 : -1;\n }\n\n const parents1 = canonicalizeAxisWithParents(axis1);\n const parents2 = canonicalizeAxisWithParents(axis2);\n\n if (parents1 !== parents2) {\n return parents1 < parents2 ? 1 : -1;\n }\n\n const annotation1 = canonicalizeJson(axis1.annotations ?? {});\n const annotation2 = canonicalizeJson(axis2.annotations ?? {});\n if (annotation1 !== annotation2) {\n return annotation1 < annotation2 ? 1 : -1;\n }\n return 0;\n}\n\nfunction parseParentsFromAnnotations(axis: AxisSpec) {\n const parentsList = readAnnotationJson(axis, Annotation.Parents);\n if (parentsList === undefined) {\n return [];\n }\n return parentsList;\n}\n\nfunction sortParentsDeep(axisSpec: AxisSpecNormalized) {\n axisSpec.parentAxesSpec.forEach(sortParentsDeep);\n axisSpec.parentAxesSpec.sort(normalizingAxesComparator);\n}\n\nfunction hasCycleOfParents(axisSpec: AxisSpecNormalized) {\n const root = makeAxisTree(axisSpec);\n let nodesQ = [root];\n const ancestors = new Set(canonicalizeJson(getAxisId(axisSpec)));\n while (nodesQ.length) {\n const nextNodes: AxisTree[] = [];\n const levelIds = new Set<CanonicalizedJson<AxisId>>();\n for (const node of nodesQ) {\n node.children = node.axis.parentAxesSpec.map(makeAxisTree);\n for (const child of node.children) {\n const childId = canonicalizeJson(getAxisId(child.axis));\n if (!levelIds.has(childId)) {\n nextNodes.push(child);\n levelIds.add(childId);\n if (ancestors.has(childId)) {\n return true;\n }\n ancestors.add(childId);\n }\n }\n }\n nodesQ = nextNodes;\n }\n return false;\n}\n\n/** Create list of normalized axisSpec (parents are in array of specs, not indexes) */\nexport function getNormalizedAxesList(axes: AxisSpec[]): AxisSpecNormalized[] {\n if (!axes.length) {\n return [];\n }\n const modifiedAxes: AxisSpecNormalized[] = axes.map((axis) => {\n const { parentAxes: _, ...copiedRest } = axis;\n return { ...copiedRest, annotations: { ...copiedRest.annotations }, parentAxesSpec: [] };\n });\n\n axes.forEach((axis, idx) => {\n const modifiedAxis = modifiedAxes[idx];\n if (axis.parentAxes) { // if we have parents by indexes then take from the list\n modifiedAxis.parentAxesSpec = axis.parentAxes.map((idx) => modifiedAxes[idx]);\n } else { // else try to parse from annotation name\n const parents = parseParentsFromAnnotations(axis).map((name) => modifiedAxes.find((axis) => axis.name === name));\n modifiedAxis.parentAxesSpec = parents.some((p) => p === undefined) ? [] : parents as AxisSpecNormalized[];\n\n delete modifiedAxis.annotations?.[Annotation.Parents];\n }\n });\n\n if (modifiedAxes.some(hasCycleOfParents)) { // Axes list is broken\n modifiedAxes.forEach((axis) => {\n axis.parentAxesSpec = [];\n });\n } else {\n modifiedAxes.forEach((axis) => {\n sortParentsDeep(axis);\n });\n }\n\n return modifiedAxes;\n}\n\n/** Create list of regular axisSpec from normalized (parents are indexes, inside of current axes list) */\nexport function getDenormalizedAxesList(axesSpec: AxisSpecNormalized[]): AxisSpec[] {\n const idsList = axesSpec.map((axisSpec) => canonicalizeJson(getAxisId(axisSpec)));\n return axesSpec.map((axisSpec) => {\n const parentsIds = axisSpec.parentAxesSpec.map((axisSpec) => canonicalizeJson(getAxisId(axisSpec)));\n const parentIdxs = parentsIds.map((id) => idsList.indexOf(id));\n const { parentAxesSpec: _, ...copiedRest } = axisSpec;\n if (parentIdxs.length) {\n return { ...copiedRest, parentAxes: parentIdxs } as AxisSpec;\n }\n return copiedRest;\n });\n}\n\n/** Common type representing spec for all the axes in a column */\nexport type AxesSpec = AxisSpec[];\n\n/// Well-known column names\nexport const PColumnName = {\n Label: 'pl7.app/label',\n Table: {\n RowSelection: 'pl7.app/table/row-selection',\n },\n} as const;\n\nexport function isLabelColumn(column: PColumnSpec) {\n return column.axesSpec.length === 1 && column.name === PColumnName.Label;\n}\n\n/**\n * Full column specification including all axes specs and specs of the column\n * itself.\n *\n * A PColumn in its essence represents a mapping from a fixed size, explicitly\n * typed tuple to an explicitly typed value.\n *\n * (axis1Value1, axis2Value1, ...) -> columnValue\n *\n * Each element in tuple correspond to the axis having the same index in axesSpec.\n */\nexport type PUniversalColumnSpec = PObjectSpec & {\n /** Defines specific type of BObject, the most generic type of unit of\n * information in Platforma Project. */\n readonly kind: 'PColumn';\n\n /** Type of column values */\n readonly valueType: string;\n\n /** Column name */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** Any additional information attached to the column that does not affect its\n * identifier */\n readonly annotations?: Record<string, string>;\n\n /** A list of zero-based indices of parent axes from the {@link axesSpec} array. */\n readonly parentAxes?: number[];\n\n /** Axes specifications */\n readonly axesSpec: AxesSpec;\n};\n\n/**\n * Specification of a data column.\n *\n * Data column is a specialized type of PColumn that stores only simple values (strings and numbers)\n * addressed by multiple keys. This is in contrast to other PColumn variants that can store more complex\n * values like files or other abstract data types. Data columns are optimized for storing and processing\n * basic tabular data.\n */\nexport type PDataColumnSpec = PUniversalColumnSpec & {\n /** Type of column values */\n readonly valueType: ValueType;\n};\n\n// @todo: change this to PUniversalColumnSpec\nexport type PColumnSpec = PDataColumnSpec;\n\n/** Unique PColumnSpec identifier */\nexport type PColumnSpecId = {\n /** Defines specific type of BObject, the most generic type of unit of\n * information in Platforma Project. */\n readonly kind: 'PColumn';\n\n /** Type of column values */\n readonly valueType: ValueType;\n\n /** Column name */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** A list of zero-based indices of parent axes from the {@link axesSpec} array. */\n readonly parentAxes?: number[];\n\n /** Axes id */\n readonly axesId: AxesId;\n};\n\nexport function getPColumnSpecId(spec: PColumnSpec): PColumnSpecId {\n return {\n kind: spec.kind,\n valueType: spec.valueType,\n name: spec.name,\n domain: spec.domain,\n parentAxes: spec.parentAxes,\n axesId: getAxesId(spec.axesSpec),\n };\n}\n\nexport interface PColumn<Data> extends PObject<Data> {\n /** PColumn spec, allowing it to be found among other PObjects */\n readonly spec: PColumnSpec;\n}\n\n/** Columns in a PFrame also have internal identifier, this object represents\n * combination of specs and such id */\nexport interface PColumnIdAndSpec {\n /** Internal column id within the PFrame */\n readonly columnId: PObjectId;\n\n /** Column spec */\n readonly spec: PColumnSpec;\n}\n\n/** Get column id and spec from a column */\nexport function getColumnIdAndSpec<Data>(column: PColumn<Data>): PColumnIdAndSpec {\n return {\n columnId: column.id,\n spec: column.spec,\n };\n}\n\n/** Information returned by {@link PFrame.listColumns} method */\nexport interface PColumnInfo extends PColumnIdAndSpec {\n /** True if data was associated with this PColumn */\n readonly hasData: boolean;\n}\n\nexport interface AxisId {\n /** Type of the axis or column value. For an axis should not use non-key\n * types like float or double. */\n readonly type: ValueType;\n\n /** Name of the axis or column */\n readonly name: string;\n\n /** Adds auxiliary information to the axis or column name and type to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n}\n\n/** Array of axis ids */\nexport type AxesId = AxisId[];\n\n/** Extracts axis ids from axis spec */\nexport function getAxisId(spec: AxisSpec): AxisId {\n const { type, name, domain } = spec;\n const result = { type, name };\n if (domain && Object.entries(domain).length > 0) {\n Object.assign(result, { domain });\n }\n return result;\n}\n\n/** Extracts axes ids from axes spec array from column spec */\nexport function getAxesId(spec: AxesSpec): AxesId {\n return spec.map(getAxisId);\n}\n\n/** Canonicalizes axis id */\nexport function canonicalizeAxisId(id: AxisId): CanonicalizedJson<AxisId> {\n return canonicalizeJson(getAxisId(id));\n}\n\n/** Returns true if all domains from query are found in target */\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\n/** Returns whether \"match\" axis id is compatible with the \"query\" */\nexport function matchAxisId(query: AxisId, target: AxisId): boolean {\n return query.name === target.name && matchDomain(query.domain, target.domain);\n}\n\nexport function getTypeFromPColumnOrAxisSpec(spec: PColumnSpec | AxisSpec): ValueType {\n return 'valueType' in spec ? spec.valueType : spec.type;\n}\n\nexport function isAxisId(id: unknown): id is AxisId {\n return typeof id === 'object' && id !== null && 'name' in id && 'type' in id;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.js","sources":["../../../../src/drivers/pframe/spec/spec.ts"],"sourcesContent":["import { ensureError } from '../../../errors';\nimport {\n canonicalizeJson,\n type CanonicalizedJson,\n type StringifiedJson,\n} from '../../../json';\nimport type {\n PObject,\n PObjectId,\n PObjectSpec,\n} from '../../../pool';\nimport { z } from 'zod';\n\nexport const ValueType = {\n Int: 'Int',\n Long: 'Long',\n Float: 'Float',\n Double: 'Double',\n String: 'String',\n Bytes: 'Bytes',\n} as const;\n\n/** PFrame columns and axes within them may store one of these types. */\nexport type ValueType = (typeof ValueType)[keyof typeof ValueType];\n\nexport type Metadata = Record<string, string>;\n\nexport function readMetadata<U extends Metadata, T extends keyof U = keyof U>(\n metadata: Metadata | undefined,\n key: T,\n): U[T] | undefined {\n return (metadata as U | undefined)?.[key];\n}\n\ntype MetadataJsonImpl<M> = {\n [P in keyof M as (M[P] extends StringifiedJson ? P : never)]: M[P] extends StringifiedJson<infer U> ? z.ZodType<U> : never;\n};\nexport type MetadataJson<M> = MetadataJsonImpl<Required<M>>;\n\nexport function readMetadataJsonOrThrow<M extends Metadata, T extends keyof MetadataJson<M>>(\n metadata: Metadata | undefined,\n metadataJson: MetadataJson<M>,\n key: T,\n methodNameInError: string = 'readMetadataJsonOrThrow',\n): z.infer<MetadataJson<M>[T]> | undefined {\n const json = readMetadata<M, T>(metadata, key);\n if (json === undefined) return undefined;\n\n const schema = metadataJson[key];\n try {\n const value = JSON.parse(json);\n return schema.parse(value);\n } catch (error: unknown) {\n throw new Error(\n `${methodNameInError} failed, `\n + `key: ${String(key)}, `\n + `value: ${json}, `\n + `error: ${ensureError(error)}`,\n );\n }\n}\n\nexport function readMetadataJson<M extends Metadata, T extends keyof MetadataJson<M>>(\n metadata: Metadata | undefined,\n metadataJson: MetadataJson<M>,\n key: T,\n): z.infer<MetadataJson<M>[T]> | undefined {\n try {\n return readMetadataJsonOrThrow(metadata, metadataJson, key);\n } catch {\n return undefined; // treat invalid values as unset\n }\n}\n\n/// Well-known domains\nexport const Domain = {\n Alphabet: 'pl7.app/alphabet',\n BlockId: 'pl7.app/blockId',\n} as const;\n\nexport type Domain = Metadata & Partial<{\n [Domain.Alphabet]: 'nucleotide' | 'aminoacid' | string;\n [Domain.BlockId]: string;\n}>;\n\nexport type DomainJson = MetadataJson<Domain>;\nexport const DomainJson: DomainJson = {};\n\n/// Helper function for reading plain domain values\nexport function readDomain<T extends keyof Domain>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): Domain[T] | undefined {\n return readMetadata<Domain, T>(spec?.domain, key);\n}\n\n/// Helper function for reading json-encoded domain values, throws on JSON parsing error\nexport function readDomainJsonOrThrow<T extends keyof DomainJson>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<DomainJson[T]> | undefined {\n return readMetadataJsonOrThrow<Domain, T>(spec?.domain, DomainJson, key, 'readDomainJsonOrThrow');\n}\n\n/// Helper function for reading json-encoded domain values, returns undefined on JSON parsing error\nexport function readDomainJson<T extends keyof DomainJson>(\n spec: { domain?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<DomainJson[T]> | undefined {\n return readMetadataJson<Domain, T>(spec?.domain, DomainJson, key);\n}\n\n/// Well-known annotations\nexport const Annotation = {\n AxisNature: 'pl7.app/axisNature',\n Alphabet: 'pl7.app/alphabet',\n Description: 'pl7.app/description',\n DiscreteValues: 'pl7.app/discreteValues',\n Format: 'pl7.app/format',\n Graph: {\n Axis: {\n HighCardinality: 'pl7.app/graph/axis/highCardinality',\n LowerLimit: 'pl7.app/graph/axis/lowerLimit',\n SymmetricRange: 'pl7.app/graph/axis/symmetricRange',\n UpperLimit: 'pl7.app/graph/axis/upperLimit',\n },\n IsDenseAxis: 'pl7.app/graph/isDenseAxis',\n IsVirtual: 'pl7.app/graph/isVirtual',\n Palette: 'pl7.app/graph/palette',\n Thresholds: 'pl7.app/graph/thresholds',\n TreatAbsentValuesAs: 'pl7.app/graph/treatAbsentValuesAs',\n },\n HideDataFromUi: 'pl7.app/hideDataFromUi',\n HideDataFromGraphs: 'pl7.app/hideDataFromGraphs',\n IsDiscreteFilter: 'pl7.app/isDiscreteFilter',\n IsLinkerColumn: 'pl7.app/isLinkerColumn',\n IsSubset: 'pl7.app/isSubset',\n Label: 'pl7.app/label',\n Max: 'pl7.app/max',\n Min: 'pl7.app/min',\n MultipliesBy: 'pl7.app/multipliesBy',\n Parents: 'pl7.app/parents',\n Sequence: {\n Annotation: {\n Mapping: 'pl7.app/sequence/annotation/mapping',\n },\n IsAnnotation: 'pl7.app/sequence/isAnnotation',\n },\n Table: {\n FontFamily: 'pl7.app/table/fontFamily',\n OrderPriority: 'pl7.app/table/orderPriority',\n Visibility: 'pl7.app/table/visibility',\n },\n Trace: 'pl7.app/trace',\n} as const;\n\nexport type Annotation = Metadata & Partial<{\n [Annotation.Alphabet]: 'nucleotide' | 'aminoacid' | string;\n [Annotation.AxisNature]: 'homogeneous' | 'heterogeneous' | 'scaleCompatible' | string;\n [Annotation.Description]: string;\n [Annotation.DiscreteValues]: StringifiedJson<number[]> | StringifiedJson<string[]>;\n [Annotation.Format]: string;\n [Annotation.Graph.Axis.HighCardinality]: StringifiedJson<boolean>;\n [Annotation.Graph.Axis.LowerLimit]: StringifiedJson<number>;\n [Annotation.Graph.Axis.SymmetricRange]: StringifiedJson<boolean>;\n [Annotation.Graph.Axis.UpperLimit]: StringifiedJson<number>;\n [Annotation.Graph.IsDenseAxis]: StringifiedJson<boolean>;\n [Annotation.Graph.IsVirtual]: StringifiedJson<boolean>;\n [Annotation.Graph.Palette]: StringifiedJson<{ mapping: Record<string, number>; name: string }>;\n [Annotation.Graph.Thresholds]: StringifiedJson<{ columnId: { valueType: ValueType; name: string }; value: number }[]>;\n [Annotation.Graph.TreatAbsentValuesAs]: StringifiedJson<number>;\n [Annotation.HideDataFromUi]: StringifiedJson<boolean>;\n [Annotation.HideDataFromGraphs]: StringifiedJson<boolean>;\n [Annotation.IsDiscreteFilter]: StringifiedJson<boolean>;\n [Annotation.IsLinkerColumn]: StringifiedJson<boolean>;\n [Annotation.IsSubset]: StringifiedJson<boolean>;\n [Annotation.Label]: string;\n [Annotation.Max]: StringifiedJson<number>;\n [Annotation.Min]: StringifiedJson<number>;\n [Annotation.MultipliesBy]: StringifiedJson<AxisSpec['name'][]>;\n [Annotation.Parents]: StringifiedJson<AxisSpec['name'][]>;\n [Annotation.Sequence.Annotation.Mapping]: StringifiedJson<Record<string, string>>;\n [Annotation.Sequence.IsAnnotation]: StringifiedJson<boolean>;\n [Annotation.Table.FontFamily]: string;\n [Annotation.Table.OrderPriority]: StringifiedJson<number>;\n [Annotation.Table.Visibility]: 'hidden' | 'optional' | string;\n [Annotation.Trace]: StringifiedJson<Record<string, unknown>>;\n}>;\n\n// export const AxisSpec = z.object({\n// type: z.nativeEnum(ValueType),\n// name: z.string(),\n// domain: z.record(z.string(), z.string()).optional(),\n// annotations: z.record(z.string(), z.string()).optional(),\n// parentAxes: z.array(z.number()).optional(),\n// }).passthrough();\n//\n// type Expect<T extends true> = T;\n// type Equal<X, Y> =\n// (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n//\n// type _test = Expect<Equal<\n// Readonly<z.infer<typeof AxisSpec>>,\n// Readonly<AxisSpec & Record<string, unknown>>\n// >>;\n\nexport type AnnotationJson = MetadataJson<Annotation>;\n\nconst ValueTypeSchema = z.enum(['Int', 'Long', 'Float', 'Double', 'String'] as const);\nexport const AnnotationJson: AnnotationJson = {\n [Annotation.DiscreteValues]: z.array(z.string()).or(z.array(z.number())),\n [Annotation.Graph.Axis.HighCardinality]: z.boolean(),\n [Annotation.Graph.Axis.LowerLimit]: z.number(),\n [Annotation.Graph.Axis.UpperLimit]: z.number(),\n [Annotation.Graph.Axis.SymmetricRange]: z.boolean(),\n [Annotation.Graph.IsDenseAxis]: z.boolean(),\n [Annotation.Graph.Palette]: z.object({ mapping: z.record(z.number()), name: z.string() }),\n [Annotation.Graph.Thresholds]: z.array(\n z.object({\n columnId: z.object({ valueType: ValueTypeSchema, name: z.string() }),\n value: z.number(),\n }),\n ),\n [Annotation.Graph.TreatAbsentValuesAs]: z.number(),\n [Annotation.Graph.IsVirtual]: z.boolean(),\n [Annotation.HideDataFromUi]: z.boolean(),\n [Annotation.HideDataFromGraphs]: z.boolean(),\n [Annotation.IsDiscreteFilter]: z.boolean(),\n [Annotation.IsLinkerColumn]: z.boolean(),\n [Annotation.IsSubset]: z.boolean(),\n [Annotation.Max]: z.number(),\n [Annotation.Min]: z.number(),\n [Annotation.MultipliesBy]: z.array(z.string()),\n [Annotation.Parents]: z.array(z.string()),\n [Annotation.Sequence.Annotation.Mapping]: z.record(z.string(), z.string()),\n [Annotation.Sequence.IsAnnotation]: z.boolean(),\n [Annotation.Table.OrderPriority]: z.number(),\n [Annotation.Trace]: z.record(z.string(), z.unknown()),\n};\n\n/// Helper function for reading plain annotation values\nexport function readAnnotation<T extends keyof Annotation>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): Annotation[T] | undefined {\n return readMetadata<Annotation, T>(spec?.annotations, key);\n}\n\n/// Helper function for reading json-encoded annotation values, throws on JSON parsing error\nexport function readAnnotationJsonOrThrow<T extends keyof AnnotationJson>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<AnnotationJson[T]> | undefined {\n return readMetadataJsonOrThrow<Annotation, T>(spec?.annotations, AnnotationJson, key, 'readAnnotationJsonOrThrow');\n}\n\n/// Helper function for reading json-encoded annotation values, returns undefined on JSON parsing error\nexport function readAnnotationJson<T extends keyof AnnotationJson>(\n spec: { annotations?: Metadata | undefined } | undefined,\n key: T,\n): z.infer<AnnotationJson[T]> | undefined {\n return readMetadataJson<Annotation, T>(spec?.annotations, AnnotationJson, key);\n}\n\nexport function isLinkerColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.IsLinkerColumn);\n}\n\n/**\n * Specification of an individual axis.\n *\n * Each axis is a part of a composite key that addresses data inside the PColumn.\n *\n * Each record inside a PColumn is addressed by a unique tuple of values set for\n * all the axes specified in the column spec.\n */\nexport type AxisSpec = {\n /** Type of the axis value. Should not use non-key types like float or double. */\n readonly type: ValueType;\n\n /** Name of the axis */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** Any additional information attached to the axis that does not affect its\n * identifier */\n readonly annotations?: Record<string, string>;\n\n /**\n * Parent axes provide contextual grouping for the axis in question, establishing\n * a hierarchy where the current axis is dependent on one or more axes for its\n * full definition and meaning. For instance, in a data structure where each\n * \"container\" axis may contain multiple \"item\" axes, the `item` axis would\n * list the index of the `container` axis in this field to denote its dependency.\n *\n * This means that the identity or significance of the `item` axis is only\n * interpretable when combined with its parent `container` axis. An `item` axis\n * index by itself may be non-unique and only gains uniqueness within the context\n * of its parent `container`. Therefore, the `parentAxes` field is essential for\n * mapping these relationships and ensuring data coherence across nested or\n * multi-level data models.\n *\n * A list of zero-based indices of parent axes in the overall axes specification\n * from the column spec. Each index corresponds to the position of a parent axis\n * in the list that defines the structure of the data model.\n */\n readonly parentAxes?: number[];\n};\n\n/** Parents are specs, not indexes; normalized axis can be used considering its parents independently from column */\nexport interface AxisSpecNormalized extends Omit<AxisSpec, 'parentAxes'> {\n parentAxesSpec: AxisSpecNormalized[];\n}\n\n/** Tree: axis is a root, its parents are children */\nexport type AxisTree = {\n axis: AxisSpecNormalized;\n children: AxisTree[]; // parents\n};\n\nfunction makeAxisTree(axis: AxisSpecNormalized): AxisTree {\n return { axis, children: [] };\n}\n\n/** Build tree by axis parents annotations */\nexport function getAxesTree(rootAxis: AxisSpecNormalized): AxisTree {\n const root = makeAxisTree(rootAxis);\n let nodesQ = [root];\n while (nodesQ.length) {\n const nextNodes: AxisTree[] = [];\n for (const node of nodesQ) {\n node.children = node.axis.parentAxesSpec.map(makeAxisTree);\n nextNodes.push(...node.children);\n }\n nodesQ = nextNodes;\n }\n return root;\n}\n\n/** Get set of canonicalized axisIds from axisTree */\nexport function getSetFromAxisTree(tree: AxisTree): Set<CanonicalizedJson<AxisId>> {\n const set = new Set([canonicalizeJson(getAxisId(tree.axis))]);\n let nodesQ = [tree];\n while (nodesQ.length) {\n const nextNodes = [];\n for (const node of nodesQ) {\n for (const parent of node.children) {\n set.add(canonicalizeJson(getAxisId(parent.axis)));\n nextNodes.push(parent);\n }\n }\n nodesQ = nextNodes;\n }\n return set;\n}\n\n/** Get array of axisSpecs from axisTree */\nexport function getArrayFromAxisTree(tree: AxisTree): AxisSpecNormalized[] {\n const res = [tree.axis];\n let nodesQ = [tree];\n while (nodesQ.length) {\n const nextNodes = [];\n for (const node of nodesQ) {\n for (const parent of node.children) {\n res.push(parent.axis);\n nextNodes.push(parent);\n }\n }\n nodesQ = nextNodes;\n }\n return res;\n}\n\nexport function canonicalizeAxisWithParents(axis: AxisSpecNormalized) {\n return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n}\n\nfunction normalizingAxesComparator(axis1: AxisSpecNormalized, axis2: AxisSpecNormalized): 1 | -1 | 0 {\n if (axis1.name !== axis2.name) {\n return axis1.name < axis2.name ? 1 : -1;\n }\n if (axis1.type !== axis2.type) {\n return axis1.type < axis2.type ? 1 : -1;\n }\n const domain1 = canonicalizeJson(axis1.domain ?? {});\n const domain2 = canonicalizeJson(axis2.domain ?? {});\n if (domain1 !== domain2) {\n return domain1 < domain2 ? 1 : -1;\n }\n\n const parents1 = canonicalizeAxisWithParents(axis1);\n const parents2 = canonicalizeAxisWithParents(axis2);\n\n if (parents1 !== parents2) {\n return parents1 < parents2 ? 1 : -1;\n }\n\n const annotation1 = canonicalizeJson(axis1.annotations ?? {});\n const annotation2 = canonicalizeJson(axis2.annotations ?? {});\n if (annotation1 !== annotation2) {\n return annotation1 < annotation2 ? 1 : -1;\n }\n return 0;\n}\n\nfunction parseParentsFromAnnotations(axis: AxisSpec) {\n const parentsList = readAnnotationJson(axis, Annotation.Parents);\n if (parentsList === undefined) {\n return [];\n }\n return parentsList;\n}\n\nfunction sortParentsDeep(axisSpec: AxisSpecNormalized) {\n axisSpec.parentAxesSpec.forEach(sortParentsDeep);\n axisSpec.parentAxesSpec.sort(normalizingAxesComparator);\n}\n\nfunction hasCycleOfParents(axisSpec: AxisSpecNormalized) {\n const root = makeAxisTree(axisSpec);\n let nodesQ = [root];\n const ancestors = new Set(canonicalizeJson(getAxisId(axisSpec)));\n while (nodesQ.length) {\n const nextNodes: AxisTree[] = [];\n const levelIds = new Set<CanonicalizedJson<AxisId>>();\n for (const node of nodesQ) {\n node.children = node.axis.parentAxesSpec.map(makeAxisTree);\n for (const child of node.children) {\n const childId = canonicalizeJson(getAxisId(child.axis));\n if (!levelIds.has(childId)) {\n nextNodes.push(child);\n levelIds.add(childId);\n if (ancestors.has(childId)) {\n return true;\n }\n ancestors.add(childId);\n }\n }\n }\n nodesQ = nextNodes;\n }\n return false;\n}\n\n/** Create list of normalized axisSpec (parents are in array of specs, not indexes) */\nexport function getNormalizedAxesList(axes: AxisSpec[]): AxisSpecNormalized[] {\n if (!axes.length) {\n return [];\n }\n const modifiedAxes: AxisSpecNormalized[] = axes.map((axis) => {\n const { parentAxes: _, ...copiedRest } = axis;\n return { ...copiedRest, annotations: { ...copiedRest.annotations }, parentAxesSpec: [] };\n });\n\n axes.forEach((axis, idx) => {\n const modifiedAxis = modifiedAxes[idx];\n if (axis.parentAxes) { // if we have parents by indexes then take from the list\n modifiedAxis.parentAxesSpec = axis.parentAxes.map((idx) => modifiedAxes[idx]);\n } else { // else try to parse from annotation name\n const parents = parseParentsFromAnnotations(axis).map((name) => modifiedAxes.find((axis) => axis.name === name));\n modifiedAxis.parentAxesSpec = parents.some((p) => p === undefined) ? [] : parents as AxisSpecNormalized[];\n\n delete modifiedAxis.annotations?.[Annotation.Parents];\n }\n });\n\n if (modifiedAxes.some(hasCycleOfParents)) { // Axes list is broken\n modifiedAxes.forEach((axis) => {\n axis.parentAxesSpec = [];\n });\n } else {\n modifiedAxes.forEach((axis) => {\n sortParentsDeep(axis);\n });\n }\n\n return modifiedAxes;\n}\n\n/** Create list of regular axisSpec from normalized (parents are indexes, inside of current axes list) */\nexport function getDenormalizedAxesList(axesSpec: AxisSpecNormalized[]): AxisSpec[] {\n const idsList = axesSpec.map((axisSpec) => canonicalizeJson(getAxisId(axisSpec)));\n return axesSpec.map((axisSpec) => {\n const parentsIds = axisSpec.parentAxesSpec.map((axisSpec) => canonicalizeJson(getAxisId(axisSpec)));\n const parentIdxs = parentsIds.map((id) => idsList.indexOf(id));\n const { parentAxesSpec: _, ...copiedRest } = axisSpec;\n if (parentIdxs.length) {\n return { ...copiedRest, parentAxes: parentIdxs } as AxisSpec;\n }\n return copiedRest;\n });\n}\n\n/** Common type representing spec for all the axes in a column */\nexport type AxesSpec = AxisSpec[];\n\n/// Well-known column names\nexport const PColumnName = {\n Label: 'pl7.app/label',\n Table: {\n RowSelection: 'pl7.app/table/row-selection',\n },\n} as const;\n\nexport function isLabelColumn(column: PColumnSpec) {\n return column.axesSpec.length === 1 && column.name === PColumnName.Label;\n}\n\n/**\n * Full column specification including all axes specs and specs of the column\n * itself.\n *\n * A PColumn in its essence represents a mapping from a fixed size, explicitly\n * typed tuple to an explicitly typed value.\n *\n * (axis1Value1, axis2Value1, ...) -> columnValue\n *\n * Each element in tuple correspond to the axis having the same index in axesSpec.\n */\nexport type PUniversalColumnSpec = PObjectSpec & {\n /** Defines specific type of BObject, the most generic type of unit of\n * information in Platforma Project. */\n readonly kind: 'PColumn';\n\n /** Type of column values */\n readonly valueType: string;\n\n /** Column name */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** Any additional information attached to the column that does not affect its\n * identifier */\n readonly annotations?: Record<string, string>;\n\n /** A list of zero-based indices of parent axes from the {@link axesSpec} array. */\n readonly parentAxes?: number[];\n\n /** Axes specifications */\n readonly axesSpec: AxesSpec;\n};\n\n/**\n * Specification of a data column.\n *\n * Data column is a specialized type of PColumn that stores only simple values (strings and numbers)\n * addressed by multiple keys. This is in contrast to other PColumn variants that can store more complex\n * values like files or other abstract data types. Data columns are optimized for storing and processing\n * basic tabular data.\n */\nexport type PDataColumnSpec = PUniversalColumnSpec & {\n /** Type of column values */\n readonly valueType: ValueType;\n};\n\n// @todo: change this to PUniversalColumnSpec\nexport type PColumnSpec = PDataColumnSpec;\n\n/** Unique PColumnSpec identifier */\nexport type PColumnSpecId = {\n /** Defines specific type of BObject, the most generic type of unit of\n * information in Platforma Project. */\n readonly kind: 'PColumn';\n\n /** Type of column values */\n readonly valueType: ValueType;\n\n /** Column name */\n readonly name: string;\n\n /** Adds auxiliary information to the axis name, type and parents to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n\n /** A list of zero-based indices of parent axes from the {@link axesSpec} array. */\n readonly parentAxes?: number[];\n\n /** Axes id */\n readonly axesId: AxesId;\n};\n\nexport function getPColumnSpecId(spec: PColumnSpec): PColumnSpecId {\n return {\n kind: spec.kind,\n valueType: spec.valueType,\n name: spec.name,\n domain: spec.domain,\n parentAxes: spec.parentAxes,\n axesId: getAxesId(spec.axesSpec),\n };\n}\n\nexport interface PColumn<Data> extends PObject<Data> {\n /** PColumn spec, allowing it to be found among other PObjects */\n readonly spec: PColumnSpec;\n}\n\nexport type PColumnLazy<T> = PColumn<() => T>;\n\n/** Columns in a PFrame also have internal identifier, this object represents\n * combination of specs and such id */\nexport interface PColumnIdAndSpec {\n /** Internal column id within the PFrame */\n readonly columnId: PObjectId;\n\n /** Column spec */\n readonly spec: PColumnSpec;\n}\n\n/** Get column id and spec from a column */\nexport function getColumnIdAndSpec<Data>(column: PColumn<Data>): PColumnIdAndSpec {\n return {\n columnId: column.id,\n spec: column.spec,\n };\n}\n\n/** Information returned by {@link PFrame.listColumns} method */\nexport interface PColumnInfo extends PColumnIdAndSpec {\n /** True if data was associated with this PColumn */\n readonly hasData: boolean;\n}\n\nexport interface AxisId {\n /** Type of the axis or column value. For an axis should not use non-key\n * types like float or double. */\n readonly type: ValueType;\n\n /** Name of the axis or column */\n readonly name: string;\n\n /** Adds auxiliary information to the axis or column name and type to form a\n * unique identifier */\n readonly domain?: Record<string, string>;\n}\n\n/** Array of axis ids */\nexport type AxesId = AxisId[];\n\n/** Extracts axis ids from axis spec */\nexport function getAxisId(spec: AxisSpec): AxisId {\n const { type, name, domain } = spec;\n const result = { type, name };\n if (domain && Object.entries(domain).length > 0) {\n Object.assign(result, { domain });\n }\n return result;\n}\n\n/** Extracts axes ids from axes spec array from column spec */\nexport function getAxesId(spec: AxesSpec): AxesId {\n return spec.map(getAxisId);\n}\n\n/** Canonicalizes axis id */\nexport function canonicalizeAxisId(id: AxisId): CanonicalizedJson<AxisId> {\n return canonicalizeJson(getAxisId(id));\n}\n\n/** Returns true if all domains from query are found in target */\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\n/** Returns whether \"match\" axis id is compatible with the \"query\" */\nexport function matchAxisId(query: AxisId, target: AxisId): boolean {\n return query.name === target.name && matchDomain(query.domain, target.domain);\n}\n\nexport function getTypeFromPColumnOrAxisSpec(spec: PColumnSpec | AxisSpec): ValueType {\n return 'valueType' in spec ? spec.valueType : spec.type;\n}\n\nexport function isAxisId(id: unknown): id is AxisId {\n return typeof id === 'object' && id !== null && 'name' in id && 'type' in id;\n}\n"],"names":[],"mappings":"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"}
@@ -24,7 +24,7 @@ function mapPObjectData(pObj, cb) {
24
24
  ? undefined
25
25
  : {
26
26
  ...pObj,
27
- data: cb(pObj.data),
27
+ data: cb(typeof pObj.data === 'function' ? pObj.data() : pObj.data),
28
28
  };
29
29
  }
30
30
  function extractAllColumns(entry) {
@@ -1 +1 @@
1
- {"version":3,"file":"spec.cjs","sources":["../../src/pool/spec.ts"],"sourcesContent":["import type { Branded } from '../branding';\nimport type { JoinEntry, PColumn, PColumnSpec } from '../drivers';\nimport { assertNever } from '../util';\nimport type { ResultPoolEntry } from './entry';\n\n/** Any object exported into the result pool by the block always have spec attached to it */\nexport type PObjectSpec = {\n /** PObject kind discriminator */\n readonly kind: string;\n\n /** Name is common part of PObject identity */\n readonly name: string;\n\n /** Domain is a set of key-value pairs that can be used to identify the object */\n readonly domain?: Record<string, string>;\n\n /** Additional information attached to the object */\n readonly annotations?: Record<string, string>;\n};\n\n/** Stable PObject id */\nexport type PObjectId = Branded<string, 'PColumnId'>;\n\n/**\n * Full PObject representation.\n *\n * @template Data type of the object referencing or describing the \"data\" part of the PObject\n * */\nexport interface PObject<Data> {\n /** Fully rendered PObjects are assigned a stable identifier. */\n readonly id: PObjectId;\n\n /** PObject spec, allowing it to be found among other PObjects */\n readonly spec: PObjectSpec;\n\n /** A handle to data object */\n readonly data: Data;\n}\n\nexport function isPColumnSpec(spec: PObjectSpec): spec is PColumnSpec {\n return spec.kind === 'PColumn';\n}\n\nexport function isPColumn<T>(obj: PObject<T>): obj is PColumn<T> {\n return isPColumnSpec(obj.spec);\n}\n\nexport function isPColumnSpecResult(\n r: ResultPoolEntry<PObjectSpec>,\n): r is ResultPoolEntry<PColumnSpec> {\n return isPColumnSpec(r.obj);\n}\n\nexport function isPColumnResult<T>(\n r: ResultPoolEntry<PObject<T>>,\n): r is ResultPoolEntry<PColumn<T>> {\n return isPColumnSpec(r.obj.spec);\n}\n\nexport function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n}\n\nexport function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PColumn<D1> | undefined,\n cb: (d: D1) => D2\n): PColumn<D2> | undefined;\nexport function mapPObjectData<D1, D2>(pObj: PObject<D1>, cb: (d: D1) => D2): PObject<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2\n): PObject<D2> | undefined;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined {\n return pObj === undefined\n ? undefined\n : {\n ...pObj,\n data: cb(pObj.data),\n };\n}\n\nexport function extractAllColumns<D>(entry: JoinEntry<PColumn<D>>): PColumn<D>[] {\n const columns = new Map<PObjectId, PColumn<D>>();\n const addAllColumns = (entry: JoinEntry<PColumn<D>>) => {\n switch (entry.type) {\n case 'column':\n columns.set(entry.column.id, entry.column);\n return;\n case 'slicedColumn':\n columns.set(entry.column.id, entry.column);\n return;\n case 'artificialColumn':\n columns.set(entry.column.id, entry.column);\n return;\n case 'inlineColumn':\n return;\n case 'full':\n case 'inner':\n for (const e of entry.entries) addAllColumns(e);\n return;\n case 'outer':\n addAllColumns(entry.primary);\n for (const e of entry.secondary) addAllColumns(e);\n return;\n default:\n assertNever(entry);\n }\n };\n addAllColumns(entry);\n return [...columns.values()];\n}\n"],"names":["assertNever"],"mappings":";;;;AAuCM,SAAU,aAAa,CAAC,IAAiB,EAAA;AAC7C,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS;AAChC;AAEM,SAAU,SAAS,CAAI,GAAe,EAAA;AAC1C,IAAA,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC;AAEM,SAAU,mBAAmB,CACjC,CAA+B,EAAA;AAE/B,IAAA,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7B;AAEM,SAAU,eAAe,CAC7B,CAA8B,EAAA;IAE9B,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC;AAEM,SAAU,aAAa,CAAI,GAAe,EAAA;AAC9C,IAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;AAC/E,IAAA,OAAO,GAAG;AACZ;AAYM,SAAU,cAAc,CAC5B,IAA6B,EAC7B,EAAiB,EAAA;IAEjB,OAAO,IAAI,KAAK;AACd,UAAE;AACF,UAAE;AACE,YAAA,GAAG,IAAI;AACP,YAAA,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACpB;AACP;AAEM,SAAU,iBAAiB,CAAI,KAA4B,EAAA;AAC/D,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB;AAChD,IAAA,MAAM,aAAa,GAAG,CAAC,KAA4B,KAAI;AACrD,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,kBAAkB;AACrB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,cAAc;gBACjB;AACF,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,OAAO;AACV,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO;oBAAE,aAAa,CAAC,CAAC,CAAC;gBAC/C;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5B,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS;oBAAE,aAAa,CAAC,CAAC,CAAC;gBACjD;AACF,YAAA;gBACEA,gBAAW,CAAC,KAAK,CAAC;;AAExB,IAAA,CAAC;IACD,aAAa,CAAC,KAAK,CAAC;AACpB,IAAA,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAC9B;;;;;;;;;;"}
1
+ {"version":3,"file":"spec.cjs","sources":["../../src/pool/spec.ts"],"sourcesContent":["import type { Branded } from '../branding';\nimport type { JoinEntry, PColumn, PColumnLazy, PColumnSpec } from '../drivers';\nimport { assertNever } from '../util';\nimport type { ResultPoolEntry } from './entry';\n\n/** Any object exported into the result pool by the block always have spec attached to it */\nexport type PObjectSpec = {\n /** PObject kind discriminator */\n readonly kind: string;\n\n /** Name is common part of PObject identity */\n readonly name: string;\n\n /** Domain is a set of key-value pairs that can be used to identify the object */\n readonly domain?: Record<string, string>;\n\n /** Additional information attached to the object */\n readonly annotations?: Record<string, string>;\n};\n\n/** Stable PObject id */\nexport type PObjectId = Branded<string, 'PColumnId'>;\n\n/**\n * Full PObject representation.\n *\n * @template Data type of the object referencing or describing the \"data\" part of the PObject\n * */\nexport interface PObject<Data> {\n /** Fully rendered PObjects are assigned a stable identifier. */\n readonly id: PObjectId;\n\n /** PObject spec, allowing it to be found among other PObjects */\n readonly spec: PObjectSpec;\n\n /** A handle to data object */\n readonly data: Data;\n}\n\nexport function isPColumnSpec(spec: PObjectSpec): spec is PColumnSpec {\n return spec.kind === 'PColumn';\n}\n\nexport function isPColumn<T>(obj: PObject<T>): obj is PColumn<T> {\n return isPColumnSpec(obj.spec);\n}\n\nexport function isPColumnSpecResult(\n r: ResultPoolEntry<PObjectSpec>,\n): r is ResultPoolEntry<PColumnSpec> {\n return isPColumnSpec(r.obj);\n}\n\nexport function isPColumnResult<T>(\n r: ResultPoolEntry<PObject<T>>,\n): r is ResultPoolEntry<PColumn<T>> {\n return isPColumnSpec(r.obj.spec);\n}\n\nexport function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n}\n\nexport function mapPObjectData<D1, D2>(pObj: PColumn<D1> | PColumnLazy<D1>, cb: (d: D1) => D2): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PColumn<D1> | undefined,\n cb: (d: D1) => D2\n): PColumn<D2> | undefined;\nexport function mapPObjectData<D1, D2>(pObj: PObject<D1>, cb: (d: D1) => D2): PObject<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2\n): PObject<D2> | undefined;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined {\n return pObj === undefined\n ? undefined\n : {\n ...pObj,\n data: cb(typeof pObj.data === 'function' ? pObj.data() : pObj.data),\n };\n}\n\nexport function extractAllColumns<D>(entry: JoinEntry<PColumn<D>>): PColumn<D>[] {\n const columns = new Map<PObjectId, PColumn<D>>();\n const addAllColumns = (entry: JoinEntry<PColumn<D>>) => {\n switch (entry.type) {\n case 'column':\n columns.set(entry.column.id, entry.column);\n return;\n case 'slicedColumn':\n columns.set(entry.column.id, entry.column);\n return;\n case 'artificialColumn':\n columns.set(entry.column.id, entry.column);\n return;\n case 'inlineColumn':\n return;\n case 'full':\n case 'inner':\n for (const e of entry.entries) addAllColumns(e);\n return;\n case 'outer':\n addAllColumns(entry.primary);\n for (const e of entry.secondary) addAllColumns(e);\n return;\n default:\n assertNever(entry);\n }\n };\n addAllColumns(entry);\n return [...columns.values()];\n}\n"],"names":["assertNever"],"mappings":";;;;AAuCM,SAAU,aAAa,CAAC,IAAiB,EAAA;AAC7C,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS;AAChC;AAEM,SAAU,SAAS,CAAI,GAAe,EAAA;AAC1C,IAAA,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC;AAEM,SAAU,mBAAmB,CACjC,CAA+B,EAAA;AAE/B,IAAA,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7B;AAEM,SAAU,eAAe,CAC7B,CAA8B,EAAA;IAE9B,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC;AAEM,SAAU,aAAa,CAAI,GAAe,EAAA;AAC9C,IAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;AAC/E,IAAA,OAAO,GAAG;AACZ;AAaM,SAAU,cAAc,CAC5B,IAA6B,EAC7B,EAAiB,EAAA;IAEjB,OAAO,IAAI,KAAK;AACd,UAAE;AACF,UAAE;AACE,YAAA,GAAG,IAAI;YACP,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;SACpE;AACP;AAEM,SAAU,iBAAiB,CAAI,KAA4B,EAAA;AAC/D,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB;AAChD,IAAA,MAAM,aAAa,GAAG,CAAC,KAA4B,KAAI;AACrD,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,kBAAkB;AACrB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,cAAc;gBACjB;AACF,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,OAAO;AACV,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO;oBAAE,aAAa,CAAC,CAAC,CAAC;gBAC/C;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5B,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS;oBAAE,aAAa,CAAC,CAAC,CAAC;gBACjD;AACF,YAAA;gBACEA,gBAAW,CAAC,KAAK,CAAC;;AAExB,IAAA,CAAC;IACD,aAAa,CAAC,KAAK,CAAC;AACpB,IAAA,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAC9B;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import type { Branded } from '../branding';
2
- import type { JoinEntry, PColumn, PColumnSpec } from '../drivers';
2
+ import type { JoinEntry, PColumn, PColumnLazy, PColumnSpec } from '../drivers';
3
3
  import type { ResultPoolEntry } from './entry';
4
4
  /** Any object exported into the result pool by the block always have spec attached to it */
5
5
  export type PObjectSpec = {
@@ -32,6 +32,7 @@ export declare function isPColumn<T>(obj: PObject<T>): obj is PColumn<T>;
32
32
  export declare function isPColumnSpecResult(r: ResultPoolEntry<PObjectSpec>): r is ResultPoolEntry<PColumnSpec>;
33
33
  export declare function isPColumnResult<T>(r: ResultPoolEntry<PObject<T>>): r is ResultPoolEntry<PColumn<T>>;
34
34
  export declare function ensurePColumn<T>(obj: PObject<T>): PColumn<T>;
35
+ export declare function mapPObjectData<D1, D2>(pObj: PColumn<D1> | PColumnLazy<D1>, cb: (d: D1) => D2): PColumn<D2>;
35
36
  export declare function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;
36
37
  export declare function mapPObjectData<D1, D2>(pObj: PColumn<D1> | undefined, cb: (d: D1) => D2): PColumn<D2> | undefined;
37
38
  export declare function mapPObjectData<D1, D2>(pObj: PObject<D1>, cb: (d: D1) => D2): PObject<D2>;
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/pool/spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAElE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,4FAA4F;AAC5F,MAAM,MAAM,WAAW,GAAG;IACxB,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzC,oDAAoD;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C,CAAC;AAEF,wBAAwB;AACxB,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAErD;;;;KAIK;AACL,MAAM,WAAW,OAAO,CAAC,IAAI;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IAEvB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,WAAW,CAEpE;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAE/D;AAED,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,GAC9B,CAAC,IAAI,eAAe,CAAC,WAAW,CAAC,CAEnC;AAED,wBAAgB,eAAe,CAAC,CAAC,EAC/B,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAC7B,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAElC;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAG5D;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AAC1F,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,EACnC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,SAAS,EAC7B,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAChB,OAAO,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;AAC3B,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AAC1F,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,EACnC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,SAAS,EAC7B,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAChB,OAAO,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;AAa3B,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CA6B/E"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/pool/spec.ts"],"names":[],"mappings":"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"}
package/dist/pool/spec.js CHANGED
@@ -22,7 +22,7 @@ function mapPObjectData(pObj, cb) {
22
22
  ? undefined
23
23
  : {
24
24
  ...pObj,
25
- data: cb(pObj.data),
25
+ data: cb(typeof pObj.data === 'function' ? pObj.data() : pObj.data),
26
26
  };
27
27
  }
28
28
  function extractAllColumns(entry) {
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sources":["../../src/pool/spec.ts"],"sourcesContent":["import type { Branded } from '../branding';\nimport type { JoinEntry, PColumn, PColumnSpec } from '../drivers';\nimport { assertNever } from '../util';\nimport type { ResultPoolEntry } from './entry';\n\n/** Any object exported into the result pool by the block always have spec attached to it */\nexport type PObjectSpec = {\n /** PObject kind discriminator */\n readonly kind: string;\n\n /** Name is common part of PObject identity */\n readonly name: string;\n\n /** Domain is a set of key-value pairs that can be used to identify the object */\n readonly domain?: Record<string, string>;\n\n /** Additional information attached to the object */\n readonly annotations?: Record<string, string>;\n};\n\n/** Stable PObject id */\nexport type PObjectId = Branded<string, 'PColumnId'>;\n\n/**\n * Full PObject representation.\n *\n * @template Data type of the object referencing or describing the \"data\" part of the PObject\n * */\nexport interface PObject<Data> {\n /** Fully rendered PObjects are assigned a stable identifier. */\n readonly id: PObjectId;\n\n /** PObject spec, allowing it to be found among other PObjects */\n readonly spec: PObjectSpec;\n\n /** A handle to data object */\n readonly data: Data;\n}\n\nexport function isPColumnSpec(spec: PObjectSpec): spec is PColumnSpec {\n return spec.kind === 'PColumn';\n}\n\nexport function isPColumn<T>(obj: PObject<T>): obj is PColumn<T> {\n return isPColumnSpec(obj.spec);\n}\n\nexport function isPColumnSpecResult(\n r: ResultPoolEntry<PObjectSpec>,\n): r is ResultPoolEntry<PColumnSpec> {\n return isPColumnSpec(r.obj);\n}\n\nexport function isPColumnResult<T>(\n r: ResultPoolEntry<PObject<T>>,\n): r is ResultPoolEntry<PColumn<T>> {\n return isPColumnSpec(r.obj.spec);\n}\n\nexport function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n}\n\nexport function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PColumn<D1> | undefined,\n cb: (d: D1) => D2\n): PColumn<D2> | undefined;\nexport function mapPObjectData<D1, D2>(pObj: PObject<D1>, cb: (d: D1) => D2): PObject<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2\n): PObject<D2> | undefined;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined {\n return pObj === undefined\n ? undefined\n : {\n ...pObj,\n data: cb(pObj.data),\n };\n}\n\nexport function extractAllColumns<D>(entry: JoinEntry<PColumn<D>>): PColumn<D>[] {\n const columns = new Map<PObjectId, PColumn<D>>();\n const addAllColumns = (entry: JoinEntry<PColumn<D>>) => {\n switch (entry.type) {\n case 'column':\n columns.set(entry.column.id, entry.column);\n return;\n case 'slicedColumn':\n columns.set(entry.column.id, entry.column);\n return;\n case 'artificialColumn':\n columns.set(entry.column.id, entry.column);\n return;\n case 'inlineColumn':\n return;\n case 'full':\n case 'inner':\n for (const e of entry.entries) addAllColumns(e);\n return;\n case 'outer':\n addAllColumns(entry.primary);\n for (const e of entry.secondary) addAllColumns(e);\n return;\n default:\n assertNever(entry);\n }\n };\n addAllColumns(entry);\n return [...columns.values()];\n}\n"],"names":[],"mappings":";;AAuCM,SAAU,aAAa,CAAC,IAAiB,EAAA;AAC7C,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS;AAChC;AAEM,SAAU,SAAS,CAAI,GAAe,EAAA;AAC1C,IAAA,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC;AAEM,SAAU,mBAAmB,CACjC,CAA+B,EAAA;AAE/B,IAAA,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7B;AAEM,SAAU,eAAe,CAC7B,CAA8B,EAAA;IAE9B,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC;AAEM,SAAU,aAAa,CAAI,GAAe,EAAA;AAC9C,IAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;AAC/E,IAAA,OAAO,GAAG;AACZ;AAYM,SAAU,cAAc,CAC5B,IAA6B,EAC7B,EAAiB,EAAA;IAEjB,OAAO,IAAI,KAAK;AACd,UAAE;AACF,UAAE;AACE,YAAA,GAAG,IAAI;AACP,YAAA,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACpB;AACP;AAEM,SAAU,iBAAiB,CAAI,KAA4B,EAAA;AAC/D,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB;AAChD,IAAA,MAAM,aAAa,GAAG,CAAC,KAA4B,KAAI;AACrD,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,kBAAkB;AACrB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,cAAc;gBACjB;AACF,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,OAAO;AACV,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO;oBAAE,aAAa,CAAC,CAAC,CAAC;gBAC/C;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5B,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS;oBAAE,aAAa,CAAC,CAAC,CAAC;gBACjD;AACF,YAAA;gBACE,WAAW,CAAC,KAAK,CAAC;;AAExB,IAAA,CAAC;IACD,aAAa,CAAC,KAAK,CAAC;AACpB,IAAA,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAC9B;;;;"}
1
+ {"version":3,"file":"spec.js","sources":["../../src/pool/spec.ts"],"sourcesContent":["import type { Branded } from '../branding';\nimport type { JoinEntry, PColumn, PColumnLazy, PColumnSpec } from '../drivers';\nimport { assertNever } from '../util';\nimport type { ResultPoolEntry } from './entry';\n\n/** Any object exported into the result pool by the block always have spec attached to it */\nexport type PObjectSpec = {\n /** PObject kind discriminator */\n readonly kind: string;\n\n /** Name is common part of PObject identity */\n readonly name: string;\n\n /** Domain is a set of key-value pairs that can be used to identify the object */\n readonly domain?: Record<string, string>;\n\n /** Additional information attached to the object */\n readonly annotations?: Record<string, string>;\n};\n\n/** Stable PObject id */\nexport type PObjectId = Branded<string, 'PColumnId'>;\n\n/**\n * Full PObject representation.\n *\n * @template Data type of the object referencing or describing the \"data\" part of the PObject\n * */\nexport interface PObject<Data> {\n /** Fully rendered PObjects are assigned a stable identifier. */\n readonly id: PObjectId;\n\n /** PObject spec, allowing it to be found among other PObjects */\n readonly spec: PObjectSpec;\n\n /** A handle to data object */\n readonly data: Data;\n}\n\nexport function isPColumnSpec(spec: PObjectSpec): spec is PColumnSpec {\n return spec.kind === 'PColumn';\n}\n\nexport function isPColumn<T>(obj: PObject<T>): obj is PColumn<T> {\n return isPColumnSpec(obj.spec);\n}\n\nexport function isPColumnSpecResult(\n r: ResultPoolEntry<PObjectSpec>,\n): r is ResultPoolEntry<PColumnSpec> {\n return isPColumnSpec(r.obj);\n}\n\nexport function isPColumnResult<T>(\n r: ResultPoolEntry<PObject<T>>,\n): r is ResultPoolEntry<PColumn<T>> {\n return isPColumnSpec(r.obj.spec);\n}\n\nexport function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n}\n\nexport function mapPObjectData<D1, D2>(pObj: PColumn<D1> | PColumnLazy<D1>, cb: (d: D1) => D2): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PColumn<D1> | undefined,\n cb: (d: D1) => D2\n): PColumn<D2> | undefined;\nexport function mapPObjectData<D1, D2>(pObj: PObject<D1>, cb: (d: D1) => D2): PObject<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2\n): PObject<D2> | undefined;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined {\n return pObj === undefined\n ? undefined\n : {\n ...pObj,\n data: cb(typeof pObj.data === 'function' ? pObj.data() : pObj.data),\n };\n}\n\nexport function extractAllColumns<D>(entry: JoinEntry<PColumn<D>>): PColumn<D>[] {\n const columns = new Map<PObjectId, PColumn<D>>();\n const addAllColumns = (entry: JoinEntry<PColumn<D>>) => {\n switch (entry.type) {\n case 'column':\n columns.set(entry.column.id, entry.column);\n return;\n case 'slicedColumn':\n columns.set(entry.column.id, entry.column);\n return;\n case 'artificialColumn':\n columns.set(entry.column.id, entry.column);\n return;\n case 'inlineColumn':\n return;\n case 'full':\n case 'inner':\n for (const e of entry.entries) addAllColumns(e);\n return;\n case 'outer':\n addAllColumns(entry.primary);\n for (const e of entry.secondary) addAllColumns(e);\n return;\n default:\n assertNever(entry);\n }\n };\n addAllColumns(entry);\n return [...columns.values()];\n}\n"],"names":[],"mappings":";;AAuCM,SAAU,aAAa,CAAC,IAAiB,EAAA;AAC7C,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS;AAChC;AAEM,SAAU,SAAS,CAAI,GAAe,EAAA;AAC1C,IAAA,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC;AAEM,SAAU,mBAAmB,CACjC,CAA+B,EAAA;AAE/B,IAAA,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7B;AAEM,SAAU,eAAe,CAC7B,CAA8B,EAAA;IAE9B,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC;AAEM,SAAU,aAAa,CAAI,GAAe,EAAA;AAC9C,IAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;AAC/E,IAAA,OAAO,GAAG;AACZ;AAaM,SAAU,cAAc,CAC5B,IAA6B,EAC7B,EAAiB,EAAA;IAEjB,OAAO,IAAI,KAAK;AACd,UAAE;AACF,UAAE;AACE,YAAA,GAAG,IAAI;YACP,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;SACpE;AACP;AAEM,SAAU,iBAAiB,CAAI,KAA4B,EAAA;AAC/D,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB;AAChD,IAAA,MAAM,aAAa,GAAG,CAAC,KAA4B,KAAI;AACrD,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,kBAAkB;AACrB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C;AACF,YAAA,KAAK,cAAc;gBACjB;AACF,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,OAAO;AACV,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO;oBAAE,aAAa,CAAC,CAAC,CAAC;gBAC/C;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5B,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS;oBAAE,aAAa,CAAC,CAAC,CAAC;gBACjD;AACF,YAAA;gBACE,WAAW,CAAC,KAAK,CAAC;;AAExB,IAAA,CAAC;IACD,aAAa,CAAC,KAAK,CAAC;AACpB,IAAA,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAC9B;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-model-common",
3
- "version": "1.21.8",
3
+ "version": "1.21.10",
4
4
  "description": "Platforma SDK Model",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -25,10 +25,10 @@
25
25
  "eslint": "^9.25.1",
26
26
  "typescript": "~5.6.3",
27
27
  "vitest": "^4.0.7",
28
- "@milaboratories/build-configs": "1.0.8",
28
+ "@milaboratories/ts-builder": "1.0.6",
29
+ "@milaboratories/build-configs": "1.0.9",
29
30
  "@platforma-sdk/eslint-config": "1.1.0",
30
- "@milaboratories/ts-configs": "1.0.6",
31
- "@milaboratories/ts-builder": "1.0.5"
31
+ "@milaboratories/ts-configs": "1.0.6"
32
32
  },
33
33
  "scripts": {
34
34
  "type-check": "ts-builder types --target node",
@@ -237,12 +237,12 @@ describe('Linker columns', () => {
237
237
  const linkersMap = LinkerMap.fromColumns([linker1, linker2]);
238
238
 
239
239
  expect(
240
- new Set(linkersMap.getReachableByLinkersAxesFromAxes(group2Normalized).map(a => a.name))
240
+ new Set(linkersMap.getReachableByLinkersAxesFromAxesNormalized(group2Normalized).map(a => a.name))
241
241
  ).toEqual(
242
242
  new Set(([...group1, ...group3]).map(a => a.name))
243
243
  );
244
- expect(linkersMap.getReachableByLinkersAxesFromAxes([axisDn])).toEqual([]);
245
- expect(linkersMap.getReachableByLinkersAxesFromAxes([axisBn])).toEqual([]);
244
+ expect(linkersMap.getReachableByLinkersAxesFromAxesNormalized([axisDn])).toEqual([]);
245
+ expect(linkersMap.getReachableByLinkersAxesFromAxesNormalized([axisBn])).toEqual([]);
246
246
  });
247
247
 
248
248
  test('Order of parents should not matter', () => {
@@ -257,8 +257,8 @@ describe('Linker columns', () => {
257
257
  makeLinkerColumn({ name: 'linker1', from: [axisA, axisB, axisC1], to: [axisD] })
258
258
  ]);
259
259
 
260
- expect(linkerMap.getReachableByLinkersAxesFromAxes([c2])).not.toHaveLength(0);
261
- expect(linkerMap.getReachableByLinkersAxesFromAxes([c1])).not.toHaveLength(0);
260
+ expect(linkerMap.getReachableByLinkersAxesFromAxesNormalized([c2])).not.toHaveLength(0);
261
+ expect(linkerMap.getReachableByLinkersAxesFromAxesNormalized([c1])).not.toHaveLength(0);
262
262
  })
263
263
 
264
264
  test('Non-linkable axes', () => {
@@ -212,12 +212,39 @@ export class LinkerMap implements LinkersData {
212
212
  }
213
213
 
214
214
  /** Get all axes that can be connected to sourceAxes by linkers */
215
- getReachableByLinkersAxesFromAxes(sourceAxes: AxisSpecNormalized[]): AxisSpec[] {
216
- const startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);
215
+ getReachableByLinkersAxesFromAxesNormalized(
216
+ sourceAxes: AxisSpecNormalized[],
217
+ matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,
218
+ ): AxisSpecNormalized[] {
219
+ let startKeys: CanonicalizedJson<AxisId[]>[] = [];
220
+
221
+ if (matchAxisIdFn) {
222
+ const sourceAxisIdsGrouped: AxisId[][] = sourceAxes.map((axis) => getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));
223
+ for (const sourceAxisIdsGroup of sourceAxisIdsGrouped) {
224
+ const matched = this.keyAxesIds.find(
225
+ (keyIds: AxisId[]) => keyIds.every(
226
+ (linkerKeyAxisId) => sourceAxisIdsGroup.find((sourceAxisId) => matchAxisIdFn(linkerKeyAxisId, sourceAxisId)),
227
+ ),
228
+ );
229
+ if (matched) {
230
+ startKeys.push(canonicalizeJson(matched));
231
+ }
232
+ }
233
+ } else {
234
+ startKeys = sourceAxes.map(LinkerMap.getLinkerKeyFromAxisSpec);
235
+ }
236
+
217
237
  const availableKeys = this.searchAvailableAxesKeys(startKeys);
218
238
  return this.getAxesListFromKeysList([...availableKeys]);
219
239
  }
220
240
 
241
+ getReachableByLinkersAxesFromAxes(
242
+ sourceAxes: AxisSpec[],
243
+ matchAxisIdFn?: (axisIdOfLinker: AxisId, axisIdOfSource: AxisId) => boolean,
244
+ ): AxisSpecNormalized[] {
245
+ return this.getReachableByLinkersAxesFromAxesNormalized(getNormalizedAxesList(sourceAxes), matchAxisIdFn);
246
+ }
247
+
221
248
  static getLinkerKeyFromAxisSpec(axis: AxisSpecNormalized): LinkerKey {
222
249
  return canonicalizeJson(getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));
223
250
  }
@@ -601,6 +601,8 @@ export interface PColumn<Data> extends PObject<Data> {
601
601
  readonly spec: PColumnSpec;
602
602
  }
603
603
 
604
+ export type PColumnLazy<T> = PColumn<() => T>;
605
+
604
606
  /** Columns in a PFrame also have internal identifier, this object represents
605
607
  * combination of specs and such id */
606
608
  export interface PColumnIdAndSpec {
package/src/pool/spec.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Branded } from '../branding';
2
- import type { JoinEntry, PColumn, PColumnSpec } from '../drivers';
2
+ import type { JoinEntry, PColumn, PColumnLazy, PColumnSpec } from '../drivers';
3
3
  import { assertNever } from '../util';
4
4
  import type { ResultPoolEntry } from './entry';
5
5
 
@@ -62,6 +62,7 @@ export function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {
62
62
  return obj;
63
63
  }
64
64
 
65
+ export function mapPObjectData<D1, D2>(pObj: PColumn<D1> | PColumnLazy<D1>, cb: (d: D1) => D2): PColumn<D2>;
65
66
  export function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;
66
67
  export function mapPObjectData<D1, D2>(
67
68
  pObj: PColumn<D1> | undefined,
@@ -80,7 +81,7 @@ export function mapPObjectData<D1, D2>(
80
81
  ? undefined
81
82
  : {
82
83
  ...pObj,
83
- data: cb(pObj.data),
84
+ data: cb(typeof pObj.data === 'function' ? pObj.data() : pObj.data),
84
85
  };
85
86
  }
86
87