@openforis/arena-core 2.5.4 → 2.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/survey/surveys/nodeDefs.js +4 -1
- package/dist/esm/survey/surveys/nodeDefs.js.map +1 -1
- package/dist/esm/utils/arrays.js +4 -1
- package/dist/esm/utils/arrays.js.map +1 -1
- package/dist/esm/validation/validations.js +2 -28
- package/dist/esm/validation/validations.js.map +1 -1
- package/dist/survey/surveys/nodeDefs.js +4 -1
- package/dist/survey/surveys/nodeDefs.js.map +1 -1
- package/dist/utils/arrays.js +4 -1
- package/dist/utils/arrays.js.map +1 -1
- package/dist/validation/validations.d.ts +1 -2
- package/dist/validation/validations.js +2 -28
- package/dist/validation/validations.js.map +1 -1
- package/package.json +1 -1
|
@@ -173,6 +173,9 @@ export const getNodeDefChildrenSorted = (params) => {
|
|
|
173
173
|
const { survey, nodeDef, cycle, includeAnalysis, includeLayoutElements } = params;
|
|
174
174
|
const children = getNodeDefChildren({ survey, nodeDef, includeAnalysis, includeLayoutElements }).filter(NodeDefs.isInCycle(cycle));
|
|
175
175
|
const childrenUuidsSortedByLayout = getNodeDefChildrenUuidsSortedByLayout({ nodeDef, cycle, children });
|
|
176
|
+
// position lookup in the comparator without scanning the array (-1 for children not in the layout, as indexOf)
|
|
177
|
+
const layoutIndexByUuid = new Map(childrenUuidsSortedByLayout.map((uuid, index) => [uuid, index]));
|
|
178
|
+
const getLayoutIndex = (child) => { var _a; return (_a = layoutIndexByUuid.get(child.uuid)) !== null && _a !== void 0 ? _a : -1; };
|
|
176
179
|
return children.sort((child1, child2) => {
|
|
177
180
|
var _a, _b;
|
|
178
181
|
if (includeAnalysis && (child1.analysis || child2.analysis)) {
|
|
@@ -191,7 +194,7 @@ export const getNodeDefChildrenSorted = (params) => {
|
|
|
191
194
|
return ((_a = child1.id) !== null && _a !== void 0 ? _a : 0) - ((_b = child2.id) !== null && _b !== void 0 ? _b : 0);
|
|
192
195
|
}
|
|
193
196
|
// keep sorting as defined in layout props
|
|
194
|
-
return
|
|
197
|
+
return getLayoutIndex(child1) - getLayoutIndex(child2);
|
|
195
198
|
});
|
|
196
199
|
};
|
|
197
200
|
export const visitAncestorsAndSelfNodeDef = (params) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeDefs.js","sourceRoot":"","sources":["../../../../src/survey/surveys/nodeDefs.ts"],"names":[],"mappings":"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","sourcesContent":["import { Survey } from '../survey'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefCodeProps,\n NodeDefEntity,\n NodeDefEntityChildPosition,\n NodeDefMap,\n NodeDefProps,\n NodeDefType,\n NodeDefs,\n} from '../../nodeDef'\nimport { Arrays, Objects, Queue } from '../../utils'\nimport { SystemError } from '../../error'\nimport * as NodeDefsReader from './_nodeDefs/nodeDefsReader'\nimport * as NodeDefsIndex from './_nodeDefs/nodeDefsIndex'\nimport { TraverseMethod } from '../../common'\nimport { getCategoryByUuid } from './surveysGetters'\n\nexport const getNodeDefsArray = NodeDefsReader.getNodeDefsArray\n\nexport const findNodeDefByUuid = (params: {\n survey: Survey\n uuid: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, uuid } = params\n return survey.nodeDefs?.[uuid]\n}\n\nexport const getNodeDefByUuid = (params: { survey: Survey; uuid: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, uuid } = params\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (!nodeDef) throw new SystemError('survey.nodeDefUuidNotFound', { uuid })\n return nodeDef\n}\n\nexport const findNodeDefByName = (params: {\n survey: Survey\n name: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, name } = params\n const nodeDefUuidByNameIndex = survey.nodeDefsIndex?.nodeDefUuidByName\n if (nodeDefUuidByNameIndex) {\n const uuid = nodeDefUuidByNameIndex[name]\n return findNodeDefByUuid({ survey, uuid })\n }\n return getNodeDefsArray(survey).find((nodeDef) => nodeDef.props.name === name)\n}\n\nexport const getNodeDefByName = (params: { survey: Survey; name: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, name } = params\n const nodeDef = findNodeDefByName({ survey, name })\n if (!nodeDef) {\n throw new SystemError('survey.nodeDefNameNotFound', { name })\n }\n return nodeDef\n}\n\nexport const getNodeDefsByUuids = (params: { survey: Survey; uuids: string[] }) => {\n const { survey, uuids } = params\n return uuids.map((uuid) => getNodeDefByUuid({ survey, uuid }))\n}\n\nexport const findNodeDefsByUuids = (params: {\n survey: Survey\n uuids: string[]\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, uuids } = params\n return uuids.reduce((acc: NodeDef<NodeDefType, NodeDefProps>[], uuid) => {\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (nodeDef) {\n acc.push(nodeDef)\n }\n return acc\n }, [])\n}\n\nexport const getNodeDefParent = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n if (!nodeDef.parentUuid) return undefined\n return getNodeDefByUuid({ survey, uuid: nodeDef.parentUuid }) as NodeDefEntity\n}\n\nexport const getNodeDefAncestorMultipleEntity = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n return findAncestorNodeDef({\n survey,\n nodeDef,\n predicate: (entityDef) => NodeDefs.isRoot(entityDef) || NodeDefs.isMultiple(entityDef),\n })\n}\n\nexport const isNodeDefAncestor = (params: {\n nodeDefAncestor: NodeDef<NodeDefType, NodeDefProps>\n nodeDefDescendant: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { nodeDefAncestor, nodeDefDescendant } = params\n\n return Arrays.startsWith(nodeDefDescendant.meta.h, [...nodeDefAncestor.meta.h, nodeDefAncestor.uuid])\n}\n\nexport const getNodeDefRoot = (params: { survey: Survey }): NodeDefEntity => {\n const { survey } = params\n if (!survey.nodeDefs) throw new SystemError('survey.emptyNodeDefs')\n\n const rootDefUuidInIndex = survey.nodeDefsIndex?.rootDefUuid\n\n const rootDef = rootDefUuidInIndex\n ? getNodeDefByUuid({ survey, uuid: rootDefUuidInIndex })\n : getNodeDefsArray(survey).find((nodeDef) => !nodeDef.parentUuid)\n\n if (!rootDef) throw new SystemError('survey.rootDefNotFound')\n\n return rootDef as NodeDefEntity\n}\n\nexport const getNodeDefSource = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, nodeDef } = params\n return nodeDef.virtual ? getNodeDefParent({ survey, nodeDef }) : undefined\n}\n\nexport const getNodeDefChildren = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, includeAnalysis = false, includeLayoutElements = false } = params\n\n if (!survey.nodeDefs) return []\n\n let childDefs = []\n // try to get children using index\n if (survey.nodeDefsIndex) {\n const childrenUuids = Object.keys(survey.nodeDefsIndex.childDefUuidPresenceByParentUuid?.[nodeDef.uuid] ?? {})\n childDefs = getNodeDefsByUuids({ survey, uuids: childrenUuids })\n } else {\n // calculate children\n childDefs = NodeDefsReader.calculateNodeDefChildren(nodeDef)(survey)\n }\n if (includeAnalysis && includeLayoutElements) {\n return childDefs\n }\n return childDefs.filter((childDef) => {\n if (!includeAnalysis && childDef.analysis) return false\n if (!includeLayoutElements && NodeDefs.isLayoutElement(childDef)) return false\n return true\n })\n}\n\nexport const getQualifierDefs = (params: { survey: Survey }): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey } = params\n const qualifierPresence = survey.nodeDefsIndex?.qualifierPresenceByUuid\n if (qualifierPresence) {\n const qualifierUuids = Object.keys(qualifierPresence)\n return getNodeDefsByUuids({ survey, uuids: qualifierUuids })\n } else {\n return getNodeDefsArray(survey).filter((nodeDef) => NodeDefs.isQualifier(nodeDef))\n }\n}\n\nconst getIndexInChain = (params: { survey: Survey; nodeDef: NodeDef<any> }): number => {\n const { survey, nodeDef } = params\n const areaBasedEstimatedOf = NodeDefs.getAreaBasedEstimatedOf(nodeDef)\n const areaBasedEstimatedOfNodeDef = areaBasedEstimatedOf\n ? getNodeDefByUuid({ survey, uuid: areaBasedEstimatedOf })\n : null\n const nodeDefToConsider = areaBasedEstimatedOfNodeDef ?? nodeDef\n return nodeDefToConsider?.propsAdvanced?.index ?? 0\n}\n\nconst getNodeDefChildrenUuidsSortedByLayout = (params: {\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n children: NodeDef<any>[]\n}): string[] => {\n const { nodeDef, cycle, children } = params\n\n const entityDef = nodeDef as NodeDefEntity\n\n const childrenEntitiesInOwnPageSortedUuids = NodeDefs.getChildrenEntitiesInOwnPageUuids(cycle)(entityDef) ?? []\n const layoutChildren = NodeDefs.getLayoutChildren(cycle)(entityDef) ?? []\n const childrenByUuids = children.reduce((acc: NodeDefMap, child) => {\n acc[child.uuid] = child\n return acc\n }, {})\n const childrenUuids = Object.keys(childrenByUuids)\n\n if (layoutChildren.length === 0 && childrenEntitiesInOwnPageSortedUuids.length === 0) {\n return childrenUuids\n }\n const sortedChildrenDefsInSamePageUuids = NodeDefs.isLayoutRenderTypeTable(cycle)(entityDef)\n ? (layoutChildren as string[])\n : [...(layoutChildren as NodeDefEntityChildPosition[])]\n .sort(\n (gridItem1: NodeDefEntityChildPosition, gridItem2: NodeDefEntityChildPosition) =>\n gridItem1.y - gridItem2.y || gridItem1.x - gridItem2.x\n )\n .map((gridItem) => gridItem.i)\n .filter((nodeDefUuid) => !!childrenByUuids[nodeDefUuid])\n\n const missingChildrenUuidsInLayout = childrenUuids.filter((childUuid) => {\n const childDef = childrenByUuids[childUuid]\n return (\n !sortedChildrenDefsInSamePageUuids.includes(childUuid) &&\n !childrenEntitiesInOwnPageSortedUuids.includes(childUuid) &&\n NodeDefs.isInCycle(cycle)(childDef)\n )\n })\n\n return (\n sortedChildrenDefsInSamePageUuids\n // add child uuids missing in layout at the end\n .concat(missingChildrenUuidsInLayout)\n // add child entities in own page at the very end\n .concat(childrenEntitiesInOwnPageSortedUuids)\n )\n}\n\nconst _booleanToNumber = (value: boolean | undefined): number => (value ? 1 : 0)\nconst _compareBooleans = (value1: boolean | undefined, value2: boolean | undefined): number =>\n _booleanToNumber(value1) - _booleanToNumber(value2)\n\nexport const getNodeDefChildrenSorted = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, cycle, includeAnalysis, includeLayoutElements } = params\n\n const children = getNodeDefChildren({ survey, nodeDef, includeAnalysis, includeLayoutElements }).filter(\n NodeDefs.isInCycle(cycle)\n )\n\n const childrenUuidsSortedByLayout = getNodeDefChildrenUuidsSortedByLayout({ nodeDef, cycle, children })\n\n return children.sort((child1, child2) => {\n if (includeAnalysis && (child1.analysis || child2.analysis)) {\n // analysis attribute at the end\n const analysisComparison = _compareBooleans(child1.analysis, child2.analysis)\n if (analysisComparison !== 0) return analysisComparison\n\n // sort by chain index\n const indexInChainComparison =\n getIndexInChain({ survey, nodeDef: child1 }) - getIndexInChain({ survey, nodeDef: child2 })\n if (indexInChainComparison !== 0) return indexInChainComparison\n\n // one node def is the area base estimated of the other\n const areaBasedEstimatedOfComparison = _compareBooleans(\n !!NodeDefs.getAreaBasedEstimatedOf(child1),\n !!NodeDefs.getAreaBasedEstimatedOf(child2)\n )\n if (areaBasedEstimatedOfComparison !== 0) return areaBasedEstimatedOfComparison\n\n return (child1.id ?? 0) - (child2.id ?? 0)\n }\n // keep sorting as defined in layout props\n return childrenUuidsSortedByLayout.indexOf(child1.uuid) - childrenUuidsSortedByLayout.indexOf(child2.uuid)\n })\n}\n\nexport const visitAncestorsAndSelfNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n stopIfFn?: () => boolean\n includeSelf?: boolean\n}): void => {\n const { survey, nodeDef, visitor, stopIfFn, includeSelf = true } = params\n if (includeSelf) {\n visitor(nodeDef)\n }\n let currentParent = getNodeDefParent({ survey, nodeDef })\n while (currentParent) {\n visitor(currentParent)\n if (stopIfFn?.()) {\n break\n }\n currentParent = getNodeDefParent({ survey, nodeDef: currentParent })\n }\n}\n\nexport const findAncestorNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n predicate: (entityDef: NodeDefEntity) => boolean\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef, predicate } = params\n let result: NodeDefEntity | undefined = undefined\n visitAncestorsAndSelfNodeDef({\n survey,\n nodeDef,\n // ancestors only: the node def itself is never an ancestor (e.g. a multiple attribute)\n includeSelf: false,\n visitor: (entityDef) => {\n if (predicate(entityDef)) {\n result = entityDef\n }\n },\n stopIfFn: () => !!result,\n })\n return result\n}\n\ntype NodeDefTraverseParams = {\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n shouldTraverse: (nodeDef: NodeDef<any>) => boolean\n getChildren: (nodeDef: NodeDef<any>) => NodeDef<any>[]\n}\n\nconst traverseBreadthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const queue = new Queue()\n\n queue.enqueue(nodeDef)\n\n while (!queue.isEmpty()) {\n const visitedNodeDef = queue.dequeue()\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n queue.enqueueItems(getChildren(visitedNodeDef))\n }\n }\n}\n\nconst traverseDepthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const stack: NodeDef<any>[] = []\n\n stack.push(nodeDef)\n\n while (stack.length > 0) {\n const visitedNodeDef = stack.pop()!\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n const children = getChildren(visitedNodeDef)\n // add children to stack in reverse order\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push(children[index])\n }\n }\n }\n}\n\nexport const visitDescendantsAndSelfNodeDef = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n traverseOnlySingleEntities?: boolean\n}) => {\n const {\n survey,\n cycle,\n nodeDef,\n visitor,\n includeAnalysis = false,\n traverseMethod = TraverseMethod.bfs,\n traverseOnlySingleEntities = false,\n } = params\n\n const getNodeDefChildrenInternal = (visitedNodeDef: NodeDef<any>) =>\n Objects.isEmpty(cycle)\n ? getNodeDefChildren({ survey, nodeDef: visitedNodeDef, includeAnalysis })\n : getNodeDefChildrenSorted({ survey, nodeDef: visitedNodeDef, cycle: cycle!, includeAnalysis })\n\n const shouldTraverse = (visitedNodeDef: NodeDef<any>): boolean =>\n visitedNodeDef.type === NodeDefType.entity &&\n (visitedNodeDef === nodeDef ||\n NodeDefs.isRoot(visitedNodeDef) ||\n !traverseOnlySingleEntities ||\n NodeDefs.isSingle(visitedNodeDef))\n\n const traverseParams = { nodeDef, visitor, shouldTraverse, getChildren: getNodeDefChildrenInternal }\n if (traverseMethod === TraverseMethod.bfs) {\n traverseBreadthFirst(traverseParams)\n } else {\n traverseDepthFirst(traverseParams)\n }\n}\n\nexport const visitNodeDefs = (params: {\n survey: Survey\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n}) => {\n const { survey, visitor, traverseMethod = TraverseMethod.bfs, includeAnalysis = false } = params\n const rootDef = getNodeDefRoot({ survey })\n return visitDescendantsAndSelfNodeDef({ survey, nodeDef: rootDef, visitor, traverseMethod, includeAnalysis })\n}\n\n// Node Def Code\nexport const getNodeDefParentCode = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode | undefined => {\n const { survey, nodeDef } = params\n const parentCodeDefUuid = nodeDef.props.parentCodeDefUuid\n if (!parentCodeDefUuid) return undefined\n const parentCodeDef = getNodeDefByUuid({ survey, uuid: parentCodeDefUuid })\n return parentCodeDef as NodeDefCode\n}\n\nexport const getNodeDefAncestorCodes = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n const ancestors = []\n let currentParentCode = getNodeDefParentCode({ survey, nodeDef })\n while (currentParentCode) {\n ancestors.unshift(currentParentCode)\n currentParentCode = getNodeDefParentCode({ survey, nodeDef: currentParentCode })\n }\n return ancestors\n}\n\nexport const isNodeDefParentCode = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { survey, nodeDef } = params\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.some(\n (def) => nodeDef.uuid === (def as NodeDef<NodeDefType.code, NodeDefCodeProps>).props?.parentCodeDefUuid\n )\n}\n\nexport const getNodeDefCategoryLevelIndex = (params: { survey: Survey; nodeDef: NodeDefCode }): number => {\n const { survey, nodeDef } = params\n const parentCodeNodeDef = getNodeDefParentCode({ survey, nodeDef })\n return parentCodeNodeDef ? 1 + getNodeDefCategoryLevelIndex({ survey, nodeDef: parentCodeNodeDef }) : 0\n}\n\nexport const getDependentCodeAttributeDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n\n const categoryUuid = NodeDefs.getCategoryUuid(nodeDef)\n if (!categoryUuid) return []\n\n const category = getCategoryByUuid({ survey, categoryUuid })\n const levelsCount = Object.keys(category?.levels ?? {}).length\n if (levelsCount <= 1) return []\n\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.filter(\n (def) => def.type === NodeDefType.code && NodeDefs.getParentCodeDefUuid(def as NodeDefCode) === nodeDef.uuid\n ) as NodeDefCode[]\n}\n\nexport const getDependentEnumeratedEntityDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefEntity[] => {\n const { survey, nodeDef } = params\n const result: NodeDefEntity[] = []\n const dependentCodeAttributeDefs = getDependentCodeAttributeDefs({ survey, nodeDef })\n for (const dependentCodeDef of dependentCodeAttributeDefs) {\n if (NodeDefs.isKey(dependentCodeDef)) {\n const entityDef = getNodeDefAncestorMultipleEntity({ survey, nodeDef: dependentCodeDef })\n if (entityDef && NodeDefs.isEnumerate(entityDef)) {\n result.push(entityDef)\n }\n }\n }\n return result\n}\n\nexport const getNodeDefKeys = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle?: string\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) =>\n NodeDefs.isKey(visitedNodeDef) &&\n !visitedNodeDef.deleted &&\n (Objects.isEmpty(cycle) || NodeDefs.isInCycle(cycle!)(visitedNodeDef)),\n })\n}\n\nexport const getRootKeys = (params: { survey: Survey; cycle?: string }) => {\n const { survey, cycle } = params\n const rootDef = getNodeDefRoot({ survey })\n return getNodeDefKeys({ survey, nodeDef: rootDef, cycle })\n}\n\nexport const getNodeDefEnumerator = (params: { survey: Survey; entityDef: NodeDefEntity }): NodeDefCode | undefined => {\n const { survey, entityDef } = params\n if (!entityDef.props.enumerate) return undefined\n\n const children = getNodeDefChildren({ survey, nodeDef: entityDef })\n const codeAttributeKeys = children.filter((child) => child.type === NodeDefType.code && child.props.key)\n if (codeAttributeKeys.length === 1) {\n return codeAttributeKeys[0] as NodeDefCode\n }\n return undefined\n}\n\nexport const isNodeDefEnumerator = (params: { survey: Survey; nodeDef: NodeDef<NodeDefType> }): boolean => {\n const { survey, nodeDef } = params\n if (nodeDef.type !== NodeDefType.code) return false\n const entityDef = getNodeDefParent({ survey, nodeDef })\n if (!entityDef) return false\n const enumerator = getNodeDefEnumerator({ survey, entityDef })\n return enumerator?.uuid === nodeDef.uuid\n}\n\nexport const getDescendantsInSingleEntities = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n predicate?: (visitedNodeDef: NodeDef<NodeDefType, NodeDefProps>) => boolean\n includeAnalysis?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef, predicate, includeAnalysis } = params\n const result: NodeDef<any>[] = []\n visitDescendantsAndSelfNodeDef({\n survey,\n cycle,\n nodeDef,\n visitor: (visitedNodeDef) => {\n if (!predicate || predicate(visitedNodeDef)) {\n result.push(visitedNodeDef)\n }\n },\n includeAnalysis,\n traverseOnlySingleEntities: true,\n })\n return result\n}\n\nexport const getNodeDefsIncludedInMultipleEntitySummary = (params: {\n survey: Survey\n cycle: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) => NodeDefs.isIncludedInMultipleEntitySummary(cycle)(visitedNodeDef),\n })\n}\n\nconst { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex } =\n NodeDefsIndex\nexport { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex }\n"]}
|
|
1
|
+
{"version":3,"file":"nodeDefs.js","sourceRoot":"","sources":["../../../../src/survey/surveys/nodeDefs.ts"],"names":[],"mappings":"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","sourcesContent":["import { Survey } from '../survey'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefCodeProps,\n NodeDefEntity,\n NodeDefEntityChildPosition,\n NodeDefMap,\n NodeDefProps,\n NodeDefType,\n NodeDefs,\n} from '../../nodeDef'\nimport { Arrays, Objects, Queue } from '../../utils'\nimport { SystemError } from '../../error'\nimport * as NodeDefsReader from './_nodeDefs/nodeDefsReader'\nimport * as NodeDefsIndex from './_nodeDefs/nodeDefsIndex'\nimport { TraverseMethod } from '../../common'\nimport { getCategoryByUuid } from './surveysGetters'\n\nexport const getNodeDefsArray = NodeDefsReader.getNodeDefsArray\n\nexport const findNodeDefByUuid = (params: {\n survey: Survey\n uuid: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, uuid } = params\n return survey.nodeDefs?.[uuid]\n}\n\nexport const getNodeDefByUuid = (params: { survey: Survey; uuid: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, uuid } = params\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (!nodeDef) throw new SystemError('survey.nodeDefUuidNotFound', { uuid })\n return nodeDef\n}\n\nexport const findNodeDefByName = (params: {\n survey: Survey\n name: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, name } = params\n const nodeDefUuidByNameIndex = survey.nodeDefsIndex?.nodeDefUuidByName\n if (nodeDefUuidByNameIndex) {\n const uuid = nodeDefUuidByNameIndex[name]\n return findNodeDefByUuid({ survey, uuid })\n }\n return getNodeDefsArray(survey).find((nodeDef) => nodeDef.props.name === name)\n}\n\nexport const getNodeDefByName = (params: { survey: Survey; name: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, name } = params\n const nodeDef = findNodeDefByName({ survey, name })\n if (!nodeDef) {\n throw new SystemError('survey.nodeDefNameNotFound', { name })\n }\n return nodeDef\n}\n\nexport const getNodeDefsByUuids = (params: { survey: Survey; uuids: string[] }) => {\n const { survey, uuids } = params\n return uuids.map((uuid) => getNodeDefByUuid({ survey, uuid }))\n}\n\nexport const findNodeDefsByUuids = (params: {\n survey: Survey\n uuids: string[]\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, uuids } = params\n return uuids.reduce((acc: NodeDef<NodeDefType, NodeDefProps>[], uuid) => {\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (nodeDef) {\n acc.push(nodeDef)\n }\n return acc\n }, [])\n}\n\nexport const getNodeDefParent = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n if (!nodeDef.parentUuid) return undefined\n return getNodeDefByUuid({ survey, uuid: nodeDef.parentUuid }) as NodeDefEntity\n}\n\nexport const getNodeDefAncestorMultipleEntity = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n return findAncestorNodeDef({\n survey,\n nodeDef,\n predicate: (entityDef) => NodeDefs.isRoot(entityDef) || NodeDefs.isMultiple(entityDef),\n })\n}\n\nexport const isNodeDefAncestor = (params: {\n nodeDefAncestor: NodeDef<NodeDefType, NodeDefProps>\n nodeDefDescendant: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { nodeDefAncestor, nodeDefDescendant } = params\n\n return Arrays.startsWith(nodeDefDescendant.meta.h, [...nodeDefAncestor.meta.h, nodeDefAncestor.uuid])\n}\n\nexport const getNodeDefRoot = (params: { survey: Survey }): NodeDefEntity => {\n const { survey } = params\n if (!survey.nodeDefs) throw new SystemError('survey.emptyNodeDefs')\n\n const rootDefUuidInIndex = survey.nodeDefsIndex?.rootDefUuid\n\n const rootDef = rootDefUuidInIndex\n ? getNodeDefByUuid({ survey, uuid: rootDefUuidInIndex })\n : getNodeDefsArray(survey).find((nodeDef) => !nodeDef.parentUuid)\n\n if (!rootDef) throw new SystemError('survey.rootDefNotFound')\n\n return rootDef as NodeDefEntity\n}\n\nexport const getNodeDefSource = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, nodeDef } = params\n return nodeDef.virtual ? getNodeDefParent({ survey, nodeDef }) : undefined\n}\n\nexport const getNodeDefChildren = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, includeAnalysis = false, includeLayoutElements = false } = params\n\n if (!survey.nodeDefs) return []\n\n let childDefs = []\n // try to get children using index\n if (survey.nodeDefsIndex) {\n const childrenUuids = Object.keys(survey.nodeDefsIndex.childDefUuidPresenceByParentUuid?.[nodeDef.uuid] ?? {})\n childDefs = getNodeDefsByUuids({ survey, uuids: childrenUuids })\n } else {\n // calculate children\n childDefs = NodeDefsReader.calculateNodeDefChildren(nodeDef)(survey)\n }\n if (includeAnalysis && includeLayoutElements) {\n return childDefs\n }\n return childDefs.filter((childDef) => {\n if (!includeAnalysis && childDef.analysis) return false\n if (!includeLayoutElements && NodeDefs.isLayoutElement(childDef)) return false\n return true\n })\n}\n\nexport const getQualifierDefs = (params: { survey: Survey }): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey } = params\n const qualifierPresence = survey.nodeDefsIndex?.qualifierPresenceByUuid\n if (qualifierPresence) {\n const qualifierUuids = Object.keys(qualifierPresence)\n return getNodeDefsByUuids({ survey, uuids: qualifierUuids })\n } else {\n return getNodeDefsArray(survey).filter((nodeDef) => NodeDefs.isQualifier(nodeDef))\n }\n}\n\nconst getIndexInChain = (params: { survey: Survey; nodeDef: NodeDef<any> }): number => {\n const { survey, nodeDef } = params\n const areaBasedEstimatedOf = NodeDefs.getAreaBasedEstimatedOf(nodeDef)\n const areaBasedEstimatedOfNodeDef = areaBasedEstimatedOf\n ? getNodeDefByUuid({ survey, uuid: areaBasedEstimatedOf })\n : null\n const nodeDefToConsider = areaBasedEstimatedOfNodeDef ?? nodeDef\n return nodeDefToConsider?.propsAdvanced?.index ?? 0\n}\n\nconst getNodeDefChildrenUuidsSortedByLayout = (params: {\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n children: NodeDef<any>[]\n}): string[] => {\n const { nodeDef, cycle, children } = params\n\n const entityDef = nodeDef as NodeDefEntity\n\n const childrenEntitiesInOwnPageSortedUuids = NodeDefs.getChildrenEntitiesInOwnPageUuids(cycle)(entityDef) ?? []\n const layoutChildren = NodeDefs.getLayoutChildren(cycle)(entityDef) ?? []\n const childrenByUuids = children.reduce((acc: NodeDefMap, child) => {\n acc[child.uuid] = child\n return acc\n }, {})\n const childrenUuids = Object.keys(childrenByUuids)\n\n if (layoutChildren.length === 0 && childrenEntitiesInOwnPageSortedUuids.length === 0) {\n return childrenUuids\n }\n const sortedChildrenDefsInSamePageUuids = NodeDefs.isLayoutRenderTypeTable(cycle)(entityDef)\n ? (layoutChildren as string[])\n : [...(layoutChildren as NodeDefEntityChildPosition[])]\n .sort(\n (gridItem1: NodeDefEntityChildPosition, gridItem2: NodeDefEntityChildPosition) =>\n gridItem1.y - gridItem2.y || gridItem1.x - gridItem2.x\n )\n .map((gridItem) => gridItem.i)\n .filter((nodeDefUuid) => !!childrenByUuids[nodeDefUuid])\n\n const missingChildrenUuidsInLayout = childrenUuids.filter((childUuid) => {\n const childDef = childrenByUuids[childUuid]\n return (\n !sortedChildrenDefsInSamePageUuids.includes(childUuid) &&\n !childrenEntitiesInOwnPageSortedUuids.includes(childUuid) &&\n NodeDefs.isInCycle(cycle)(childDef)\n )\n })\n\n return (\n sortedChildrenDefsInSamePageUuids\n // add child uuids missing in layout at the end\n .concat(missingChildrenUuidsInLayout)\n // add child entities in own page at the very end\n .concat(childrenEntitiesInOwnPageSortedUuids)\n )\n}\n\nconst _booleanToNumber = (value: boolean | undefined): number => (value ? 1 : 0)\nconst _compareBooleans = (value1: boolean | undefined, value2: boolean | undefined): number =>\n _booleanToNumber(value1) - _booleanToNumber(value2)\n\nexport const getNodeDefChildrenSorted = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, cycle, includeAnalysis, includeLayoutElements } = params\n\n const children = getNodeDefChildren({ survey, nodeDef, includeAnalysis, includeLayoutElements }).filter(\n NodeDefs.isInCycle(cycle)\n )\n\n const childrenUuidsSortedByLayout = getNodeDefChildrenUuidsSortedByLayout({ nodeDef, cycle, children })\n // position lookup in the comparator without scanning the array (-1 for children not in the layout, as indexOf)\n const layoutIndexByUuid = new Map(childrenUuidsSortedByLayout.map((uuid, index) => [uuid, index]))\n const getLayoutIndex = (child: NodeDef<any>): number => layoutIndexByUuid.get(child.uuid) ?? -1\n\n return children.sort((child1, child2) => {\n if (includeAnalysis && (child1.analysis || child2.analysis)) {\n // analysis attribute at the end\n const analysisComparison = _compareBooleans(child1.analysis, child2.analysis)\n if (analysisComparison !== 0) return analysisComparison\n\n // sort by chain index\n const indexInChainComparison =\n getIndexInChain({ survey, nodeDef: child1 }) - getIndexInChain({ survey, nodeDef: child2 })\n if (indexInChainComparison !== 0) return indexInChainComparison\n\n // one node def is the area base estimated of the other\n const areaBasedEstimatedOfComparison = _compareBooleans(\n !!NodeDefs.getAreaBasedEstimatedOf(child1),\n !!NodeDefs.getAreaBasedEstimatedOf(child2)\n )\n if (areaBasedEstimatedOfComparison !== 0) return areaBasedEstimatedOfComparison\n\n return (child1.id ?? 0) - (child2.id ?? 0)\n }\n // keep sorting as defined in layout props\n return getLayoutIndex(child1) - getLayoutIndex(child2)\n })\n}\n\nexport const visitAncestorsAndSelfNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n stopIfFn?: () => boolean\n includeSelf?: boolean\n}): void => {\n const { survey, nodeDef, visitor, stopIfFn, includeSelf = true } = params\n if (includeSelf) {\n visitor(nodeDef)\n }\n let currentParent = getNodeDefParent({ survey, nodeDef })\n while (currentParent) {\n visitor(currentParent)\n if (stopIfFn?.()) {\n break\n }\n currentParent = getNodeDefParent({ survey, nodeDef: currentParent })\n }\n}\n\nexport const findAncestorNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n predicate: (entityDef: NodeDefEntity) => boolean\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef, predicate } = params\n let result: NodeDefEntity | undefined = undefined\n visitAncestorsAndSelfNodeDef({\n survey,\n nodeDef,\n // ancestors only: the node def itself is never an ancestor (e.g. a multiple attribute)\n includeSelf: false,\n visitor: (entityDef) => {\n if (predicate(entityDef)) {\n result = entityDef\n }\n },\n stopIfFn: () => !!result,\n })\n return result\n}\n\ntype NodeDefTraverseParams = {\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n shouldTraverse: (nodeDef: NodeDef<any>) => boolean\n getChildren: (nodeDef: NodeDef<any>) => NodeDef<any>[]\n}\n\nconst traverseBreadthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const queue = new Queue()\n\n queue.enqueue(nodeDef)\n\n while (!queue.isEmpty()) {\n const visitedNodeDef = queue.dequeue()\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n queue.enqueueItems(getChildren(visitedNodeDef))\n }\n }\n}\n\nconst traverseDepthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const stack: NodeDef<any>[] = []\n\n stack.push(nodeDef)\n\n while (stack.length > 0) {\n const visitedNodeDef = stack.pop()!\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n const children = getChildren(visitedNodeDef)\n // add children to stack in reverse order\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push(children[index])\n }\n }\n }\n}\n\nexport const visitDescendantsAndSelfNodeDef = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n traverseOnlySingleEntities?: boolean\n}) => {\n const {\n survey,\n cycle,\n nodeDef,\n visitor,\n includeAnalysis = false,\n traverseMethod = TraverseMethod.bfs,\n traverseOnlySingleEntities = false,\n } = params\n\n const getNodeDefChildrenInternal = (visitedNodeDef: NodeDef<any>) =>\n Objects.isEmpty(cycle)\n ? getNodeDefChildren({ survey, nodeDef: visitedNodeDef, includeAnalysis })\n : getNodeDefChildrenSorted({ survey, nodeDef: visitedNodeDef, cycle: cycle!, includeAnalysis })\n\n const shouldTraverse = (visitedNodeDef: NodeDef<any>): boolean =>\n visitedNodeDef.type === NodeDefType.entity &&\n (visitedNodeDef === nodeDef ||\n NodeDefs.isRoot(visitedNodeDef) ||\n !traverseOnlySingleEntities ||\n NodeDefs.isSingle(visitedNodeDef))\n\n const traverseParams = { nodeDef, visitor, shouldTraverse, getChildren: getNodeDefChildrenInternal }\n if (traverseMethod === TraverseMethod.bfs) {\n traverseBreadthFirst(traverseParams)\n } else {\n traverseDepthFirst(traverseParams)\n }\n}\n\nexport const visitNodeDefs = (params: {\n survey: Survey\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n}) => {\n const { survey, visitor, traverseMethod = TraverseMethod.bfs, includeAnalysis = false } = params\n const rootDef = getNodeDefRoot({ survey })\n return visitDescendantsAndSelfNodeDef({ survey, nodeDef: rootDef, visitor, traverseMethod, includeAnalysis })\n}\n\n// Node Def Code\nexport const getNodeDefParentCode = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode | undefined => {\n const { survey, nodeDef } = params\n const parentCodeDefUuid = nodeDef.props.parentCodeDefUuid\n if (!parentCodeDefUuid) return undefined\n const parentCodeDef = getNodeDefByUuid({ survey, uuid: parentCodeDefUuid })\n return parentCodeDef as NodeDefCode\n}\n\nexport const getNodeDefAncestorCodes = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n const ancestors = []\n let currentParentCode = getNodeDefParentCode({ survey, nodeDef })\n while (currentParentCode) {\n ancestors.unshift(currentParentCode)\n currentParentCode = getNodeDefParentCode({ survey, nodeDef: currentParentCode })\n }\n return ancestors\n}\n\nexport const isNodeDefParentCode = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { survey, nodeDef } = params\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.some(\n (def) => nodeDef.uuid === (def as NodeDef<NodeDefType.code, NodeDefCodeProps>).props?.parentCodeDefUuid\n )\n}\n\nexport const getNodeDefCategoryLevelIndex = (params: { survey: Survey; nodeDef: NodeDefCode }): number => {\n const { survey, nodeDef } = params\n const parentCodeNodeDef = getNodeDefParentCode({ survey, nodeDef })\n return parentCodeNodeDef ? 1 + getNodeDefCategoryLevelIndex({ survey, nodeDef: parentCodeNodeDef }) : 0\n}\n\nexport const getDependentCodeAttributeDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n\n const categoryUuid = NodeDefs.getCategoryUuid(nodeDef)\n if (!categoryUuid) return []\n\n const category = getCategoryByUuid({ survey, categoryUuid })\n const levelsCount = Object.keys(category?.levels ?? {}).length\n if (levelsCount <= 1) return []\n\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.filter(\n (def) => def.type === NodeDefType.code && NodeDefs.getParentCodeDefUuid(def as NodeDefCode) === nodeDef.uuid\n ) as NodeDefCode[]\n}\n\nexport const getDependentEnumeratedEntityDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefEntity[] => {\n const { survey, nodeDef } = params\n const result: NodeDefEntity[] = []\n const dependentCodeAttributeDefs = getDependentCodeAttributeDefs({ survey, nodeDef })\n for (const dependentCodeDef of dependentCodeAttributeDefs) {\n if (NodeDefs.isKey(dependentCodeDef)) {\n const entityDef = getNodeDefAncestorMultipleEntity({ survey, nodeDef: dependentCodeDef })\n if (entityDef && NodeDefs.isEnumerate(entityDef)) {\n result.push(entityDef)\n }\n }\n }\n return result\n}\n\nexport const getNodeDefKeys = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle?: string\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) =>\n NodeDefs.isKey(visitedNodeDef) &&\n !visitedNodeDef.deleted &&\n (Objects.isEmpty(cycle) || NodeDefs.isInCycle(cycle!)(visitedNodeDef)),\n })\n}\n\nexport const getRootKeys = (params: { survey: Survey; cycle?: string }) => {\n const { survey, cycle } = params\n const rootDef = getNodeDefRoot({ survey })\n return getNodeDefKeys({ survey, nodeDef: rootDef, cycle })\n}\n\nexport const getNodeDefEnumerator = (params: { survey: Survey; entityDef: NodeDefEntity }): NodeDefCode | undefined => {\n const { survey, entityDef } = params\n if (!entityDef.props.enumerate) return undefined\n\n const children = getNodeDefChildren({ survey, nodeDef: entityDef })\n const codeAttributeKeys = children.filter((child) => child.type === NodeDefType.code && child.props.key)\n if (codeAttributeKeys.length === 1) {\n return codeAttributeKeys[0] as NodeDefCode\n }\n return undefined\n}\n\nexport const isNodeDefEnumerator = (params: { survey: Survey; nodeDef: NodeDef<NodeDefType> }): boolean => {\n const { survey, nodeDef } = params\n if (nodeDef.type !== NodeDefType.code) return false\n const entityDef = getNodeDefParent({ survey, nodeDef })\n if (!entityDef) return false\n const enumerator = getNodeDefEnumerator({ survey, entityDef })\n return enumerator?.uuid === nodeDef.uuid\n}\n\nexport const getDescendantsInSingleEntities = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n predicate?: (visitedNodeDef: NodeDef<NodeDefType, NodeDefProps>) => boolean\n includeAnalysis?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef, predicate, includeAnalysis } = params\n const result: NodeDef<any>[] = []\n visitDescendantsAndSelfNodeDef({\n survey,\n cycle,\n nodeDef,\n visitor: (visitedNodeDef) => {\n if (!predicate || predicate(visitedNodeDef)) {\n result.push(visitedNodeDef)\n }\n },\n includeAnalysis,\n traverseOnlySingleEntities: true,\n })\n return result\n}\n\nexport const getNodeDefsIncludedInMultipleEntitySummary = (params: {\n survey: Survey\n cycle: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) => NodeDefs.isIncludedInMultipleEntitySummary(cycle)(visitedNodeDef),\n })\n}\n\nconst { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex } =\n NodeDefsIndex\nexport { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex }\n"]}
|
package/dist/esm/utils/arrays.js
CHANGED
|
@@ -10,7 +10,10 @@ const addItems = (items, options) => (array) => {
|
|
|
10
10
|
};
|
|
11
11
|
const addItem = (item, options) => (array) => addItems([item], options)(array);
|
|
12
12
|
const fromNumberOfElements = (numOfElements) => Array.from(new Array(numOfElements).keys());
|
|
13
|
-
const intersection = (array1, array2) =>
|
|
13
|
+
const intersection = (array1, array2) => {
|
|
14
|
+
const items2 = new Set(array2);
|
|
15
|
+
return array1.filter((item) => items2.has(item));
|
|
16
|
+
};
|
|
14
17
|
const last = (array = []) => (array.length > 0 ? array.at(-1) : undefined);
|
|
15
18
|
const removeItem = (item) => (array) => {
|
|
16
19
|
const result = [...array];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/utils/arrays.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,MAAM,QAAQ,GACZ,CAAI,KAAU,EAAE,OAA0D,EAAE,EAAE,CAC9E,CAAC,KAAU,EAAO,EAAE;IAClB,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAA;IAClE,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACtF,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAA;QACzB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;AACjC,CAAC,CAAA;AACH,MAAM,OAAO,GACX,CAAI,IAAO,EAAE,OAA0D,EAAE,EAAE,CAC3E,CAAC,KAAU,EAAO,EAAE,CAClB,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAA;AAEpC,MAAM,oBAAoB,GAAG,CAAC,aAAqB,EAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAE7G,MAAM,YAAY,GAAG,CAAI,MAAW,EAAE,MAAW,EAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/utils/arrays.ts"],"names":[],"mappings":"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","sourcesContent":["import { Objects } from './_objects'\n\nconst addItems =\n <T>(items: T[], options?: { sideEffect?: boolean; excludeNulls?: boolean }) =>\n (array: T[]): T[] => {\n const { sideEffect = false, excludeNulls = false } = options ?? {}\n const itemsToAdd = excludeNulls ? items.filter((item) => !Objects.isNil(item)) : items\n if (sideEffect) {\n array.push(...itemsToAdd)\n return array\n }\n return array.concat(itemsToAdd)\n }\nconst addItem =\n <T>(item: T, options?: { sideEffect?: boolean; excludeNulls?: boolean }) =>\n (array: T[]): T[] =>\n addItems([item], options)(array)\n\nconst fromNumberOfElements = (numOfElements: number): number[] => Array.from(new Array(numOfElements).keys())\n\nconst intersection = <T>(array1: T[], array2: T[]): T[] => {\n const items2 = new Set(array2)\n return array1.filter((item) => items2.has(item))\n}\n\nconst last = <T>(array: T[] = []): T | undefined => (array.length > 0 ? array.at(-1) : undefined)\n\nconst removeItem =\n <T>(item: T) =>\n (array: T[]): T[] => {\n const result = [...array]\n const itemIndex = array.indexOf(item)\n if (itemIndex >= 0) {\n result.splice(itemIndex, 1)\n }\n return result\n }\n\nconst startsWith = <T>(list: T[], start: T[]): boolean => start.every((item, index) => list[index] === item)\n\nconst toArray = (value: any): any[] => {\n if (value === null || value === undefined) return []\n return Array.isArray(value) ? value : [value]\n}\n\nconst toUuidIndexedObject = (array: any[]) =>\n array.reduce((acc, item) => {\n acc[item.uuid] = item\n return acc\n }, {})\n\nexport const Arrays = {\n addItem,\n addItems,\n fromNumberOfElements,\n intersection,\n last,\n removeItem,\n startsWith,\n toArray,\n toUuidIndexedObject,\n}\n"]}
|
|
@@ -130,34 +130,6 @@ const cleanup = (validation) => {
|
|
|
130
130
|
const valid = !hasFields && errors.length === 0 && warnings.length === 0;
|
|
131
131
|
return _createValidation({ valid, fields: fieldsCleaned, hasFields, errors, warnings });
|
|
132
132
|
};
|
|
133
|
-
const mergeValidations = (validationNext, doCleanup = true) => (validationPrev) => {
|
|
134
|
-
const validationFieldsResult = Object.assign({}, getFieldValidations(validationPrev));
|
|
135
|
-
const validationFieldsNext = getFieldValidations(validationNext);
|
|
136
|
-
// iterate over new field validations: remove valid ones, merge invalid ones with previous ones
|
|
137
|
-
for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {
|
|
138
|
-
if (isValid(validationFieldNext)) {
|
|
139
|
-
if (doCleanup) {
|
|
140
|
-
// field validation valid: remove it from resulting validation
|
|
141
|
-
delete validationFieldsResult[fieldKey];
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
validationFieldsResult[fieldKey] = ValidationFactory.createInstance();
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
// field validation not valid: deep merge it with the previous one
|
|
149
|
-
const validationFieldPrev = validationFieldsResult[fieldKey];
|
|
150
|
-
const validationFieldMerged = validationFieldPrev
|
|
151
|
-
? mergeValidation(validationFieldNext, false)(validationFieldPrev)
|
|
152
|
-
: validationFieldNext;
|
|
153
|
-
validationFieldsResult[fieldKey] = validationFieldMerged;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
const validationResult = Object.assign(Object.assign({}, validationPrev), { [keys.fields]: validationFieldsResult });
|
|
157
|
-
validationResult.errors = getErrors(validationNext);
|
|
158
|
-
validationResult.warnings = getWarnings(validationNext);
|
|
159
|
-
return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult);
|
|
160
|
-
};
|
|
161
133
|
const toDissocFieldValidationOptions = (options, doCleanup) => typeof options === 'boolean' || options === undefined ? { sideEffect: options, doCleanup } : options;
|
|
162
134
|
function dissocFieldValidation(fieldKey, options, doCleanupParam) {
|
|
163
135
|
const { sideEffect = false, doCleanup = true } = toDissocFieldValidationOptions(options, doCleanupParam);
|
|
@@ -213,6 +185,8 @@ const mergeValidation = (validationNext, doCleanup = true) => (validationPrev) =
|
|
|
213
185
|
validationResult.warnings = getWarnings(validationNext);
|
|
214
186
|
return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult);
|
|
215
187
|
};
|
|
188
|
+
// same function as mergeValidation (kept for backwards compatibility)
|
|
189
|
+
const mergeValidations = mergeValidation;
|
|
216
190
|
const mergeFieldValidations = (fieldValidationsNext, fieldValidationsPrev) => {
|
|
217
191
|
const result = Object.assign({}, fieldValidationsPrev);
|
|
218
192
|
for (const [fieldKey, fieldValidationNext] of Object.entries(fieldValidationsNext)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validations.js","sourceRoot":"","sources":["../../../src/validation/validations.ts"],"names":[],"mappings":"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","sourcesContent":["import { Objects } from '../utils'\nimport { MutationOptions } from '../utils/mutationOptions'\nimport { ValidationFactory } from './factory'\nimport { Validation, ValidationCounts, ValidationFields, ValidationResult } from './validation'\n\nconst keys = {\n counts: 'counts',\n errors: 'errors',\n fields: 'fields',\n valid: 'valid',\n validation: 'validation',\n warnings: 'warnings',\n}\n\nconst hasValidation = (obj: any): boolean => !!obj?.validation\n\nconst getValidation = (obj: any): Validation => obj?.validation || ValidationFactory.createInstance()\n\nconst getFieldValidations = (validation: Validation): ValidationFields => validation?.fields ?? {}\n\nconst getFieldValidationUnsafe =\n (field: string | number) =>\n (validation: Validation): Validation | undefined => {\n if (typeof field === 'string') {\n let validationCurrent: Validation | undefined = validation\n const parts = field.split('.')\n parts.some((part) => {\n validationCurrent = getFieldValidations(validationCurrent!)[part]\n return !validationCurrent // breaks the loop if there is no field validation\n })\n return validationCurrent\n } else {\n return getFieldValidations(validation)[field]\n }\n }\n\nconst getFieldValidation =\n (field: string | number, defaultValue: Validation = ValidationFactory.createInstance()) =>\n (validation: Validation): Validation =>\n getFieldValidationUnsafe(field)(validation) ?? defaultValue\n\nconst getFieldValidationsByFields =\n (fields: (string | number)[]) =>\n (validation: Validation): ValidationFields => {\n const result: ValidationFields = {}\n for (const field of fields) {\n const fieldValidation = getFieldValidationUnsafe(field)(validation)\n if (fieldValidation) {\n result[String(field)] = fieldValidation\n }\n }\n return result\n }\n\nconst getErrors = (validation: Validation): ValidationResult[] => validation?.errors ?? []\n\nconst getWarnings = (validation: Validation): ValidationResult[] => validation?.warnings ?? []\n\nconst hasErrors = (validation: Validation): boolean => {\n const errors = getErrors(validation)\n return !Objects.isEmpty(errors) || Object.values(getFieldValidations(validation)).some(hasErrors)\n}\n\nconst hasWarnings = (validation: Validation): boolean => {\n const warnings = getWarnings(validation)\n return !Objects.isEmpty(warnings) || Object.values(getFieldValidations(validation)).some(hasWarnings)\n}\n\nconst isValid = (validation: Validation): boolean => Objects.isEmpty(validation) || validation.valid\nconst isNotValid = (validation: Validation): boolean => !isValid(validation)\nconst isObjValid = (obj: Record<string, unknown>): boolean => isValid(getValidation(obj))\n\nconst getCounts = (validation: Validation): ValidationCounts | undefined => validation?.counts\nconst getErrorsCount = (validation: Validation): number => getCounts(validation)?.errors ?? 0\nconst getWarningsCount = (validation: Validation): number => getCounts(validation)?.warnings ?? 0\n\n/**\n * Creates a validation object like ValidationFactory.createInstance does, but without checking again\n * if fields is empty (checking it is O(N) for objects with many properties).\n */\nconst _createValidation = (params: {\n valid: boolean\n fields: ValidationFields\n hasFields: boolean\n errors: ValidationResult[]\n warnings: ValidationResult[]\n}): Validation => {\n const { valid, fields, hasFields, errors, warnings } = params\n const result: Validation = { valid }\n if (errors.length > 0) result.errors = errors\n if (hasFields) result.fields = fields\n if (warnings.length > 0) result.warnings = warnings\n return result\n}\n\nconst recalculateValidity = (validation: Validation): Validation => {\n let allFieldsValid = true\n let hasFields = false\n\n const fieldsWithValidationRecalculated: ValidationFields = {}\n\n for (const [fieldKey, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationUpdated = recalculateValidity(fieldValidation)\n fieldsWithValidationRecalculated[fieldKey] = fieldValidationUpdated\n hasFields = true\n if (!fieldValidationUpdated.valid) {\n allFieldsValid = false\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the recalculated field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = allFieldsValid && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsWithValidationRecalculated, hasFields, errors, warnings })\n}\n\nconst traverse = (visitor: (visitedItem: Validation) => void) => (validation: Validation) => {\n const stack: Validation[] = []\n stack.push(validation)\n\n while (stack.length) {\n const validationCurrent = stack.pop()!\n visitor(validationCurrent)\n // Add field validations to stack\n const validationFields = getFieldValidations(validationCurrent)\n stack.push(...Object.values(validationFields))\n }\n}\n\nconst calculateCounts = (validation: Validation): ValidationCounts => {\n let errors = 0\n let warnings = 0\n\n traverse((validationCurrent) => {\n errors += getErrors(validationCurrent).length\n warnings += getWarnings(validationCurrent).length\n })(validation)\n\n return {\n errors,\n warnings,\n }\n}\n\nconst updateCounts = (validation: Validation): Validation => ({\n ...validation,\n counts: calculateCounts(validation),\n})\n\nconst calculateHasNestedErrors = (validation: Validation): boolean => calculateCounts(validation).errors > 0\nconst calculateHasNestedWarnings = (validation: Validation): boolean => calculateCounts(validation).warnings > 0\n\nconst cleanup = (validation: Validation): Validation => {\n // only not valid field validations are kept\n let hasFields = false\n const fieldsCleaned: ValidationFields = {}\n for (const [field, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationCleaned = cleanup(fieldValidation)\n if (!fieldValidationCleaned.valid) {\n fieldsCleaned[field] = fieldValidationCleaned\n hasFields = true\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the cleaned field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = !hasFields && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsCleaned, hasFields, errors, warnings })\n}\n\nconst mergeValidations =\n (validationNext: Validation, doCleanup = true) =>\n (validationPrev: Validation): Validation => {\n const validationFieldsResult = { ...getFieldValidations(validationPrev) }\n const validationFieldsNext = getFieldValidations(validationNext)\n\n // iterate over new field validations: remove valid ones, merge invalid ones with previous ones\n for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {\n if (isValid(validationFieldNext)) {\n if (doCleanup) {\n // field validation valid: remove it from resulting validation\n delete validationFieldsResult[fieldKey]\n } else {\n validationFieldsResult[fieldKey] = ValidationFactory.createInstance()\n }\n } else {\n // field validation not valid: deep merge it with the previous one\n const validationFieldPrev = validationFieldsResult[fieldKey]\n const validationFieldMerged = validationFieldPrev\n ? mergeValidation(validationFieldNext, false)(validationFieldPrev)\n : validationFieldNext\n validationFieldsResult[fieldKey] = validationFieldMerged\n }\n }\n const validationResult: Validation = { ...validationPrev, [keys.fields]: validationFieldsResult }\n validationResult.errors = getErrors(validationNext)\n validationResult.warnings = getWarnings(validationNext)\n return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult)\n }\n\n/**\n * Options of the functions removing field validations.\n */\nexport interface DissocFieldValidationOptions extends MutationOptions {\n /**\n * When true (default), the validation is cleaned up after removing the field validations (empty field validations\n * removed and validity recalculated).\n */\n doCleanup?: boolean\n}\n\nconst toDissocFieldValidationOptions = (\n options?: DissocFieldValidationOptions | boolean,\n doCleanup?: boolean\n): DissocFieldValidationOptions =>\n typeof options === 'boolean' || options === undefined ? { sideEffect: options, doCleanup } : options\n\nfunction dissocFieldValidation(\n fieldKey: string,\n options?: DissocFieldValidationOptions\n): (validation: Validation) => Validation\n/** @deprecated Pass the options object instead of the positional booleans: `{ sideEffect, doCleanup }` */\nfunction dissocFieldValidation(\n fieldKey: string,\n sideEffect?: boolean,\n doCleanup?: boolean\n): (validation: Validation) => Validation\nfunction dissocFieldValidation(\n fieldKey: string,\n options?: DissocFieldValidationOptions | boolean,\n doCleanupParam?: boolean\n): (validation: Validation) => Validation {\n const { sideEffect = false, doCleanup = true } = toDissocFieldValidationOptions(options, doCleanupParam)\n return (validation: Validation): Validation => {\n const validationUpdated = Objects.dissocPath({ obj: validation, path: ['fields', fieldKey], sideEffect })\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n}\n\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n options?: DissocFieldValidationOptions\n): (validation: Validation) => Validation\n/** @deprecated Pass the options object instead of the positional booleans: `{ sideEffect, doCleanup }` */\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n sideEffect?: boolean,\n doCleanup?: boolean\n): (validation: Validation) => Validation\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n options?: DissocFieldValidationOptions | boolean,\n doCleanupParam?: boolean\n): (validation: Validation) => Validation {\n const { sideEffect = false, doCleanup = true } = toDissocFieldValidationOptions(options, doCleanupParam)\n return (validation: Validation): Validation => {\n if (!validation?.fields) return validation\n\n const fieldsUpdated = sideEffect ? validation.fields : { ...validation.fields }\n for (const fieldKey of Object.keys(fieldsUpdated)) {\n if (fieldKey.startsWith(fieldStartsWith)) {\n delete fieldsUpdated[fieldKey]\n }\n }\n if (sideEffect) {\n validation.fields = fieldsUpdated\n return validation\n }\n const validationUpdated = { ...validation, fields: fieldsUpdated }\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n}\n\nconst mergeValidation =\n (validationNext: Validation, doCleanup = true) =>\n (validationPrev: Validation): Validation => {\n const validationFieldsResult: ValidationFields = {\n ...getFieldValidations(validationPrev),\n }\n const validationFieldsNext = getFieldValidations(validationNext)\n\n // iterate over new field validations: remove valid ones, merge invalid ones with previous ones\n for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {\n if (isValid(validationFieldNext)) {\n if (doCleanup) {\n // field validation valid: remove it from resulting validation\n delete validationFieldsResult[fieldKey]\n } else {\n validationFieldsResult[fieldKey] = ValidationFactory.createInstance()\n }\n } else {\n // field validation not valid: deep merge it with the previous one\n const validationFieldPrev = validationFieldsResult[fieldKey]\n const validationFieldMerged = validationFieldPrev\n ? mergeValidation(validationFieldNext, false)(validationFieldPrev)\n : validationFieldNext\n validationFieldsResult[fieldKey] = validationFieldMerged\n }\n }\n\n const validationResult: Validation = { ...validationPrev, fields: validationFieldsResult }\n validationResult.errors = getErrors(validationNext)\n validationResult.warnings = getWarnings(validationNext)\n\n return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult)\n }\n\nconst mergeFieldValidations = (\n fieldValidationsNext: ValidationFields,\n fieldValidationsPrev: ValidationFields\n): ValidationFields => {\n const result: ValidationFields = { ...fieldValidationsPrev }\n for (const [fieldKey, fieldValidationNext] of Object.entries(fieldValidationsNext)) {\n const fieldValidationPrev = fieldValidationsPrev[fieldKey]\n result[fieldKey] = fieldValidationPrev\n ? mergeValidation(fieldValidationNext, false)(fieldValidationPrev)\n : fieldValidationNext\n }\n return result\n}\n\nconst setValid = (valid: boolean) => (obj: object) => Objects.setInPath({ obj, path: [keys.valid], value: valid })\n\nconst setErrors = (errors: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.errors], value: errors })\n\nconst setWarnings = (warnings: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.warnings], value: warnings })\n\nconst setFieldValidations = (fieldValidations: ValidationFields) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields], value: fieldValidations })\n\nconst setFieldValidation = (field: string, fieldValidation: Validation) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields, field], value: fieldValidation })\n\nconst assocFieldValidation = (field: string, fieldValidation: Validation) => (validation: Validation) =>\n cleanup(Objects.assocPath({ obj: validation, path: [keys.fields, field], value: fieldValidation }))\n\nconst assocValidation = (v: Validation) => (obj: Record<string, unknown>) =>\n Objects.assoc({ obj, prop: 'validation', value: v })\n\nconst dissocValidation = (obj: Record<string, unknown>) => Objects.dissoc({ obj, prop: 'validation' })\n\nexport const Validations = {\n keys,\n hasValidation,\n getValidation,\n getFieldValidation,\n getFieldValidations,\n getFieldValidationsByFields,\n getErrors,\n getWarnings,\n hasErrors,\n hasWarnings,\n isValid,\n isNotValid,\n isObjValid,\n getCounts,\n getErrorsCount,\n getWarningsCount,\n recalculateValidity,\n traverse,\n calculateCounts,\n calculateHasNestedErrors,\n calculateHasNestedWarnings,\n updateCounts,\n cleanup,\n mergeValidations,\n dissocFieldValidation,\n dissocFieldValidationsStartingWith,\n mergeValidation,\n mergeFieldValidations,\n setValid,\n setErrors,\n setWarnings,\n setFieldValidations,\n assocFieldValidation,\n setFieldValidation,\n assocValidation,\n dissocValidation,\n}\n"]}
|
|
1
|
+
{"version":3,"file":"validations.js","sourceRoot":"","sources":["../../../src/validation/validations.ts"],"names":[],"mappings":"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","sourcesContent":["import { Objects } from '../utils'\nimport { MutationOptions } from '../utils/mutationOptions'\nimport { ValidationFactory } from './factory'\nimport { Validation, ValidationCounts, ValidationFields, ValidationResult } from './validation'\n\nconst keys = {\n counts: 'counts',\n errors: 'errors',\n fields: 'fields',\n valid: 'valid',\n validation: 'validation',\n warnings: 'warnings',\n}\n\nconst hasValidation = (obj: any): boolean => !!obj?.validation\n\nconst getValidation = (obj: any): Validation => obj?.validation || ValidationFactory.createInstance()\n\nconst getFieldValidations = (validation: Validation): ValidationFields => validation?.fields ?? {}\n\nconst getFieldValidationUnsafe =\n (field: string | number) =>\n (validation: Validation): Validation | undefined => {\n if (typeof field === 'string') {\n let validationCurrent: Validation | undefined = validation\n const parts = field.split('.')\n parts.some((part) => {\n validationCurrent = getFieldValidations(validationCurrent!)[part]\n return !validationCurrent // breaks the loop if there is no field validation\n })\n return validationCurrent\n } else {\n return getFieldValidations(validation)[field]\n }\n }\n\nconst getFieldValidation =\n (field: string | number, defaultValue: Validation = ValidationFactory.createInstance()) =>\n (validation: Validation): Validation =>\n getFieldValidationUnsafe(field)(validation) ?? defaultValue\n\nconst getFieldValidationsByFields =\n (fields: (string | number)[]) =>\n (validation: Validation): ValidationFields => {\n const result: ValidationFields = {}\n for (const field of fields) {\n const fieldValidation = getFieldValidationUnsafe(field)(validation)\n if (fieldValidation) {\n result[String(field)] = fieldValidation\n }\n }\n return result\n }\n\nconst getErrors = (validation: Validation): ValidationResult[] => validation?.errors ?? []\n\nconst getWarnings = (validation: Validation): ValidationResult[] => validation?.warnings ?? []\n\nconst hasErrors = (validation: Validation): boolean => {\n const errors = getErrors(validation)\n return !Objects.isEmpty(errors) || Object.values(getFieldValidations(validation)).some(hasErrors)\n}\n\nconst hasWarnings = (validation: Validation): boolean => {\n const warnings = getWarnings(validation)\n return !Objects.isEmpty(warnings) || Object.values(getFieldValidations(validation)).some(hasWarnings)\n}\n\nconst isValid = (validation: Validation): boolean => Objects.isEmpty(validation) || validation.valid\nconst isNotValid = (validation: Validation): boolean => !isValid(validation)\nconst isObjValid = (obj: Record<string, unknown>): boolean => isValid(getValidation(obj))\n\nconst getCounts = (validation: Validation): ValidationCounts | undefined => validation?.counts\nconst getErrorsCount = (validation: Validation): number => getCounts(validation)?.errors ?? 0\nconst getWarningsCount = (validation: Validation): number => getCounts(validation)?.warnings ?? 0\n\n/**\n * Creates a validation object like ValidationFactory.createInstance does, but without checking again\n * if fields is empty (checking it is O(N) for objects with many properties).\n */\nconst _createValidation = (params: {\n valid: boolean\n fields: ValidationFields\n hasFields: boolean\n errors: ValidationResult[]\n warnings: ValidationResult[]\n}): Validation => {\n const { valid, fields, hasFields, errors, warnings } = params\n const result: Validation = { valid }\n if (errors.length > 0) result.errors = errors\n if (hasFields) result.fields = fields\n if (warnings.length > 0) result.warnings = warnings\n return result\n}\n\nconst recalculateValidity = (validation: Validation): Validation => {\n let allFieldsValid = true\n let hasFields = false\n\n const fieldsWithValidationRecalculated: ValidationFields = {}\n\n for (const [fieldKey, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationUpdated = recalculateValidity(fieldValidation)\n fieldsWithValidationRecalculated[fieldKey] = fieldValidationUpdated\n hasFields = true\n if (!fieldValidationUpdated.valid) {\n allFieldsValid = false\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the recalculated field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = allFieldsValid && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsWithValidationRecalculated, hasFields, errors, warnings })\n}\n\nconst traverse = (visitor: (visitedItem: Validation) => void) => (validation: Validation) => {\n const stack: Validation[] = []\n stack.push(validation)\n\n while (stack.length) {\n const validationCurrent = stack.pop()!\n visitor(validationCurrent)\n // Add field validations to stack\n const validationFields = getFieldValidations(validationCurrent)\n stack.push(...Object.values(validationFields))\n }\n}\n\nconst calculateCounts = (validation: Validation): ValidationCounts => {\n let errors = 0\n let warnings = 0\n\n traverse((validationCurrent) => {\n errors += getErrors(validationCurrent).length\n warnings += getWarnings(validationCurrent).length\n })(validation)\n\n return {\n errors,\n warnings,\n }\n}\n\nconst updateCounts = (validation: Validation): Validation => ({\n ...validation,\n counts: calculateCounts(validation),\n})\n\nconst calculateHasNestedErrors = (validation: Validation): boolean => calculateCounts(validation).errors > 0\nconst calculateHasNestedWarnings = (validation: Validation): boolean => calculateCounts(validation).warnings > 0\n\nconst cleanup = (validation: Validation): Validation => {\n // only not valid field validations are kept\n let hasFields = false\n const fieldsCleaned: ValidationFields = {}\n for (const [field, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationCleaned = cleanup(fieldValidation)\n if (!fieldValidationCleaned.valid) {\n fieldsCleaned[field] = fieldValidationCleaned\n hasFields = true\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the cleaned field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = !hasFields && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsCleaned, hasFields, errors, warnings })\n}\n\n/**\n * Options of the functions removing field validations.\n */\nexport interface DissocFieldValidationOptions extends MutationOptions {\n /**\n * When true (default), the validation is cleaned up after removing the field validations (empty field validations\n * removed and validity recalculated).\n */\n doCleanup?: boolean\n}\n\nconst toDissocFieldValidationOptions = (\n options?: DissocFieldValidationOptions | boolean,\n doCleanup?: boolean\n): DissocFieldValidationOptions =>\n typeof options === 'boolean' || options === undefined ? { sideEffect: options, doCleanup } : options\n\nfunction dissocFieldValidation(\n fieldKey: string,\n options?: DissocFieldValidationOptions\n): (validation: Validation) => Validation\n/** @deprecated Pass the options object instead of the positional booleans: `{ sideEffect, doCleanup }` */\nfunction dissocFieldValidation(\n fieldKey: string,\n sideEffect?: boolean,\n doCleanup?: boolean\n): (validation: Validation) => Validation\nfunction dissocFieldValidation(\n fieldKey: string,\n options?: DissocFieldValidationOptions | boolean,\n doCleanupParam?: boolean\n): (validation: Validation) => Validation {\n const { sideEffect = false, doCleanup = true } = toDissocFieldValidationOptions(options, doCleanupParam)\n return (validation: Validation): Validation => {\n const validationUpdated = Objects.dissocPath({ obj: validation, path: ['fields', fieldKey], sideEffect })\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n}\n\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n options?: DissocFieldValidationOptions\n): (validation: Validation) => Validation\n/** @deprecated Pass the options object instead of the positional booleans: `{ sideEffect, doCleanup }` */\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n sideEffect?: boolean,\n doCleanup?: boolean\n): (validation: Validation) => Validation\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n options?: DissocFieldValidationOptions | boolean,\n doCleanupParam?: boolean\n): (validation: Validation) => Validation {\n const { sideEffect = false, doCleanup = true } = toDissocFieldValidationOptions(options, doCleanupParam)\n return (validation: Validation): Validation => {\n if (!validation?.fields) return validation\n\n const fieldsUpdated = sideEffect ? validation.fields : { ...validation.fields }\n for (const fieldKey of Object.keys(fieldsUpdated)) {\n if (fieldKey.startsWith(fieldStartsWith)) {\n delete fieldsUpdated[fieldKey]\n }\n }\n if (sideEffect) {\n validation.fields = fieldsUpdated\n return validation\n }\n const validationUpdated = { ...validation, fields: fieldsUpdated }\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n}\n\nconst mergeValidation =\n (validationNext: Validation, doCleanup = true) =>\n (validationPrev: Validation): Validation => {\n const validationFieldsResult: ValidationFields = {\n ...getFieldValidations(validationPrev),\n }\n const validationFieldsNext = getFieldValidations(validationNext)\n\n // iterate over new field validations: remove valid ones, merge invalid ones with previous ones\n for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {\n if (isValid(validationFieldNext)) {\n if (doCleanup) {\n // field validation valid: remove it from resulting validation\n delete validationFieldsResult[fieldKey]\n } else {\n validationFieldsResult[fieldKey] = ValidationFactory.createInstance()\n }\n } else {\n // field validation not valid: deep merge it with the previous one\n const validationFieldPrev = validationFieldsResult[fieldKey]\n const validationFieldMerged = validationFieldPrev\n ? mergeValidation(validationFieldNext, false)(validationFieldPrev)\n : validationFieldNext\n validationFieldsResult[fieldKey] = validationFieldMerged\n }\n }\n\n const validationResult: Validation = { ...validationPrev, fields: validationFieldsResult }\n validationResult.errors = getErrors(validationNext)\n validationResult.warnings = getWarnings(validationNext)\n\n return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult)\n }\n\n// same function as mergeValidation (kept for backwards compatibility)\nconst mergeValidations = mergeValidation\n\nconst mergeFieldValidations = (\n fieldValidationsNext: ValidationFields,\n fieldValidationsPrev: ValidationFields\n): ValidationFields => {\n const result: ValidationFields = { ...fieldValidationsPrev }\n for (const [fieldKey, fieldValidationNext] of Object.entries(fieldValidationsNext)) {\n const fieldValidationPrev = fieldValidationsPrev[fieldKey]\n result[fieldKey] = fieldValidationPrev\n ? mergeValidation(fieldValidationNext, false)(fieldValidationPrev)\n : fieldValidationNext\n }\n return result\n}\n\nconst setValid = (valid: boolean) => (obj: object) => Objects.setInPath({ obj, path: [keys.valid], value: valid })\n\nconst setErrors = (errors: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.errors], value: errors })\n\nconst setWarnings = (warnings: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.warnings], value: warnings })\n\nconst setFieldValidations = (fieldValidations: ValidationFields) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields], value: fieldValidations })\n\nconst setFieldValidation = (field: string, fieldValidation: Validation) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields, field], value: fieldValidation })\n\nconst assocFieldValidation = (field: string, fieldValidation: Validation) => (validation: Validation) =>\n cleanup(Objects.assocPath({ obj: validation, path: [keys.fields, field], value: fieldValidation }))\n\nconst assocValidation = (v: Validation) => (obj: Record<string, unknown>) =>\n Objects.assoc({ obj, prop: 'validation', value: v })\n\nconst dissocValidation = (obj: Record<string, unknown>) => Objects.dissoc({ obj, prop: 'validation' })\n\nexport const Validations = {\n keys,\n hasValidation,\n getValidation,\n getFieldValidation,\n getFieldValidations,\n getFieldValidationsByFields,\n getErrors,\n getWarnings,\n hasErrors,\n hasWarnings,\n isValid,\n isNotValid,\n isObjValid,\n getCounts,\n getErrorsCount,\n getWarningsCount,\n recalculateValidity,\n traverse,\n calculateCounts,\n calculateHasNestedErrors,\n calculateHasNestedWarnings,\n updateCounts,\n cleanup,\n mergeValidations,\n dissocFieldValidation,\n dissocFieldValidationsStartingWith,\n mergeValidation,\n mergeFieldValidations,\n setValid,\n setErrors,\n setWarnings,\n setFieldValidations,\n assocFieldValidation,\n setFieldValidation,\n assocValidation,\n dissocValidation,\n}\n"]}
|
|
@@ -222,6 +222,9 @@ const getNodeDefChildrenSorted = (params) => {
|
|
|
222
222
|
const { survey, nodeDef, cycle, includeAnalysis, includeLayoutElements } = params;
|
|
223
223
|
const children = (0, exports.getNodeDefChildren)({ survey, nodeDef, includeAnalysis, includeLayoutElements }).filter(nodeDef_1.NodeDefs.isInCycle(cycle));
|
|
224
224
|
const childrenUuidsSortedByLayout = getNodeDefChildrenUuidsSortedByLayout({ nodeDef, cycle, children });
|
|
225
|
+
// position lookup in the comparator without scanning the array (-1 for children not in the layout, as indexOf)
|
|
226
|
+
const layoutIndexByUuid = new Map(childrenUuidsSortedByLayout.map((uuid, index) => [uuid, index]));
|
|
227
|
+
const getLayoutIndex = (child) => { var _a; return (_a = layoutIndexByUuid.get(child.uuid)) !== null && _a !== void 0 ? _a : -1; };
|
|
225
228
|
return children.sort((child1, child2) => {
|
|
226
229
|
var _a, _b;
|
|
227
230
|
if (includeAnalysis && (child1.analysis || child2.analysis)) {
|
|
@@ -240,7 +243,7 @@ const getNodeDefChildrenSorted = (params) => {
|
|
|
240
243
|
return ((_a = child1.id) !== null && _a !== void 0 ? _a : 0) - ((_b = child2.id) !== null && _b !== void 0 ? _b : 0);
|
|
241
244
|
}
|
|
242
245
|
// keep sorting as defined in layout props
|
|
243
|
-
return
|
|
246
|
+
return getLayoutIndex(child1) - getLayoutIndex(child2);
|
|
244
247
|
});
|
|
245
248
|
};
|
|
246
249
|
exports.getNodeDefChildrenSorted = getNodeDefChildrenSorted;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeDefs.js","sourceRoot":"","sources":["../../../src/survey/surveys/nodeDefs.ts"],"names":[],"mappings":"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","sourcesContent":["import { Survey } from '../survey'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefCodeProps,\n NodeDefEntity,\n NodeDefEntityChildPosition,\n NodeDefMap,\n NodeDefProps,\n NodeDefType,\n NodeDefs,\n} from '../../nodeDef'\nimport { Arrays, Objects, Queue } from '../../utils'\nimport { SystemError } from '../../error'\nimport * as NodeDefsReader from './_nodeDefs/nodeDefsReader'\nimport * as NodeDefsIndex from './_nodeDefs/nodeDefsIndex'\nimport { TraverseMethod } from '../../common'\nimport { getCategoryByUuid } from './surveysGetters'\n\nexport const getNodeDefsArray = NodeDefsReader.getNodeDefsArray\n\nexport const findNodeDefByUuid = (params: {\n survey: Survey\n uuid: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, uuid } = params\n return survey.nodeDefs?.[uuid]\n}\n\nexport const getNodeDefByUuid = (params: { survey: Survey; uuid: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, uuid } = params\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (!nodeDef) throw new SystemError('survey.nodeDefUuidNotFound', { uuid })\n return nodeDef\n}\n\nexport const findNodeDefByName = (params: {\n survey: Survey\n name: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, name } = params\n const nodeDefUuidByNameIndex = survey.nodeDefsIndex?.nodeDefUuidByName\n if (nodeDefUuidByNameIndex) {\n const uuid = nodeDefUuidByNameIndex[name]\n return findNodeDefByUuid({ survey, uuid })\n }\n return getNodeDefsArray(survey).find((nodeDef) => nodeDef.props.name === name)\n}\n\nexport const getNodeDefByName = (params: { survey: Survey; name: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, name } = params\n const nodeDef = findNodeDefByName({ survey, name })\n if (!nodeDef) {\n throw new SystemError('survey.nodeDefNameNotFound', { name })\n }\n return nodeDef\n}\n\nexport const getNodeDefsByUuids = (params: { survey: Survey; uuids: string[] }) => {\n const { survey, uuids } = params\n return uuids.map((uuid) => getNodeDefByUuid({ survey, uuid }))\n}\n\nexport const findNodeDefsByUuids = (params: {\n survey: Survey\n uuids: string[]\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, uuids } = params\n return uuids.reduce((acc: NodeDef<NodeDefType, NodeDefProps>[], uuid) => {\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (nodeDef) {\n acc.push(nodeDef)\n }\n return acc\n }, [])\n}\n\nexport const getNodeDefParent = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n if (!nodeDef.parentUuid) return undefined\n return getNodeDefByUuid({ survey, uuid: nodeDef.parentUuid }) as NodeDefEntity\n}\n\nexport const getNodeDefAncestorMultipleEntity = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n return findAncestorNodeDef({\n survey,\n nodeDef,\n predicate: (entityDef) => NodeDefs.isRoot(entityDef) || NodeDefs.isMultiple(entityDef),\n })\n}\n\nexport const isNodeDefAncestor = (params: {\n nodeDefAncestor: NodeDef<NodeDefType, NodeDefProps>\n nodeDefDescendant: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { nodeDefAncestor, nodeDefDescendant } = params\n\n return Arrays.startsWith(nodeDefDescendant.meta.h, [...nodeDefAncestor.meta.h, nodeDefAncestor.uuid])\n}\n\nexport const getNodeDefRoot = (params: { survey: Survey }): NodeDefEntity => {\n const { survey } = params\n if (!survey.nodeDefs) throw new SystemError('survey.emptyNodeDefs')\n\n const rootDefUuidInIndex = survey.nodeDefsIndex?.rootDefUuid\n\n const rootDef = rootDefUuidInIndex\n ? getNodeDefByUuid({ survey, uuid: rootDefUuidInIndex })\n : getNodeDefsArray(survey).find((nodeDef) => !nodeDef.parentUuid)\n\n if (!rootDef) throw new SystemError('survey.rootDefNotFound')\n\n return rootDef as NodeDefEntity\n}\n\nexport const getNodeDefSource = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, nodeDef } = params\n return nodeDef.virtual ? getNodeDefParent({ survey, nodeDef }) : undefined\n}\n\nexport const getNodeDefChildren = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, includeAnalysis = false, includeLayoutElements = false } = params\n\n if (!survey.nodeDefs) return []\n\n let childDefs = []\n // try to get children using index\n if (survey.nodeDefsIndex) {\n const childrenUuids = Object.keys(survey.nodeDefsIndex.childDefUuidPresenceByParentUuid?.[nodeDef.uuid] ?? {})\n childDefs = getNodeDefsByUuids({ survey, uuids: childrenUuids })\n } else {\n // calculate children\n childDefs = NodeDefsReader.calculateNodeDefChildren(nodeDef)(survey)\n }\n if (includeAnalysis && includeLayoutElements) {\n return childDefs\n }\n return childDefs.filter((childDef) => {\n if (!includeAnalysis && childDef.analysis) return false\n if (!includeLayoutElements && NodeDefs.isLayoutElement(childDef)) return false\n return true\n })\n}\n\nexport const getQualifierDefs = (params: { survey: Survey }): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey } = params\n const qualifierPresence = survey.nodeDefsIndex?.qualifierPresenceByUuid\n if (qualifierPresence) {\n const qualifierUuids = Object.keys(qualifierPresence)\n return getNodeDefsByUuids({ survey, uuids: qualifierUuids })\n } else {\n return getNodeDefsArray(survey).filter((nodeDef) => NodeDefs.isQualifier(nodeDef))\n }\n}\n\nconst getIndexInChain = (params: { survey: Survey; nodeDef: NodeDef<any> }): number => {\n const { survey, nodeDef } = params\n const areaBasedEstimatedOf = NodeDefs.getAreaBasedEstimatedOf(nodeDef)\n const areaBasedEstimatedOfNodeDef = areaBasedEstimatedOf\n ? getNodeDefByUuid({ survey, uuid: areaBasedEstimatedOf })\n : null\n const nodeDefToConsider = areaBasedEstimatedOfNodeDef ?? nodeDef\n return nodeDefToConsider?.propsAdvanced?.index ?? 0\n}\n\nconst getNodeDefChildrenUuidsSortedByLayout = (params: {\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n children: NodeDef<any>[]\n}): string[] => {\n const { nodeDef, cycle, children } = params\n\n const entityDef = nodeDef as NodeDefEntity\n\n const childrenEntitiesInOwnPageSortedUuids = NodeDefs.getChildrenEntitiesInOwnPageUuids(cycle)(entityDef) ?? []\n const layoutChildren = NodeDefs.getLayoutChildren(cycle)(entityDef) ?? []\n const childrenByUuids = children.reduce((acc: NodeDefMap, child) => {\n acc[child.uuid] = child\n return acc\n }, {})\n const childrenUuids = Object.keys(childrenByUuids)\n\n if (layoutChildren.length === 0 && childrenEntitiesInOwnPageSortedUuids.length === 0) {\n return childrenUuids\n }\n const sortedChildrenDefsInSamePageUuids = NodeDefs.isLayoutRenderTypeTable(cycle)(entityDef)\n ? (layoutChildren as string[])\n : [...(layoutChildren as NodeDefEntityChildPosition[])]\n .sort(\n (gridItem1: NodeDefEntityChildPosition, gridItem2: NodeDefEntityChildPosition) =>\n gridItem1.y - gridItem2.y || gridItem1.x - gridItem2.x\n )\n .map((gridItem) => gridItem.i)\n .filter((nodeDefUuid) => !!childrenByUuids[nodeDefUuid])\n\n const missingChildrenUuidsInLayout = childrenUuids.filter((childUuid) => {\n const childDef = childrenByUuids[childUuid]\n return (\n !sortedChildrenDefsInSamePageUuids.includes(childUuid) &&\n !childrenEntitiesInOwnPageSortedUuids.includes(childUuid) &&\n NodeDefs.isInCycle(cycle)(childDef)\n )\n })\n\n return (\n sortedChildrenDefsInSamePageUuids\n // add child uuids missing in layout at the end\n .concat(missingChildrenUuidsInLayout)\n // add child entities in own page at the very end\n .concat(childrenEntitiesInOwnPageSortedUuids)\n )\n}\n\nconst _booleanToNumber = (value: boolean | undefined): number => (value ? 1 : 0)\nconst _compareBooleans = (value1: boolean | undefined, value2: boolean | undefined): number =>\n _booleanToNumber(value1) - _booleanToNumber(value2)\n\nexport const getNodeDefChildrenSorted = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, cycle, includeAnalysis, includeLayoutElements } = params\n\n const children = getNodeDefChildren({ survey, nodeDef, includeAnalysis, includeLayoutElements }).filter(\n NodeDefs.isInCycle(cycle)\n )\n\n const childrenUuidsSortedByLayout = getNodeDefChildrenUuidsSortedByLayout({ nodeDef, cycle, children })\n\n return children.sort((child1, child2) => {\n if (includeAnalysis && (child1.analysis || child2.analysis)) {\n // analysis attribute at the end\n const analysisComparison = _compareBooleans(child1.analysis, child2.analysis)\n if (analysisComparison !== 0) return analysisComparison\n\n // sort by chain index\n const indexInChainComparison =\n getIndexInChain({ survey, nodeDef: child1 }) - getIndexInChain({ survey, nodeDef: child2 })\n if (indexInChainComparison !== 0) return indexInChainComparison\n\n // one node def is the area base estimated of the other\n const areaBasedEstimatedOfComparison = _compareBooleans(\n !!NodeDefs.getAreaBasedEstimatedOf(child1),\n !!NodeDefs.getAreaBasedEstimatedOf(child2)\n )\n if (areaBasedEstimatedOfComparison !== 0) return areaBasedEstimatedOfComparison\n\n return (child1.id ?? 0) - (child2.id ?? 0)\n }\n // keep sorting as defined in layout props\n return childrenUuidsSortedByLayout.indexOf(child1.uuid) - childrenUuidsSortedByLayout.indexOf(child2.uuid)\n })\n}\n\nexport const visitAncestorsAndSelfNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n stopIfFn?: () => boolean\n includeSelf?: boolean\n}): void => {\n const { survey, nodeDef, visitor, stopIfFn, includeSelf = true } = params\n if (includeSelf) {\n visitor(nodeDef)\n }\n let currentParent = getNodeDefParent({ survey, nodeDef })\n while (currentParent) {\n visitor(currentParent)\n if (stopIfFn?.()) {\n break\n }\n currentParent = getNodeDefParent({ survey, nodeDef: currentParent })\n }\n}\n\nexport const findAncestorNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n predicate: (entityDef: NodeDefEntity) => boolean\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef, predicate } = params\n let result: NodeDefEntity | undefined = undefined\n visitAncestorsAndSelfNodeDef({\n survey,\n nodeDef,\n // ancestors only: the node def itself is never an ancestor (e.g. a multiple attribute)\n includeSelf: false,\n visitor: (entityDef) => {\n if (predicate(entityDef)) {\n result = entityDef\n }\n },\n stopIfFn: () => !!result,\n })\n return result\n}\n\ntype NodeDefTraverseParams = {\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n shouldTraverse: (nodeDef: NodeDef<any>) => boolean\n getChildren: (nodeDef: NodeDef<any>) => NodeDef<any>[]\n}\n\nconst traverseBreadthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const queue = new Queue()\n\n queue.enqueue(nodeDef)\n\n while (!queue.isEmpty()) {\n const visitedNodeDef = queue.dequeue()\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n queue.enqueueItems(getChildren(visitedNodeDef))\n }\n }\n}\n\nconst traverseDepthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const stack: NodeDef<any>[] = []\n\n stack.push(nodeDef)\n\n while (stack.length > 0) {\n const visitedNodeDef = stack.pop()!\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n const children = getChildren(visitedNodeDef)\n // add children to stack in reverse order\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push(children[index])\n }\n }\n }\n}\n\nexport const visitDescendantsAndSelfNodeDef = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n traverseOnlySingleEntities?: boolean\n}) => {\n const {\n survey,\n cycle,\n nodeDef,\n visitor,\n includeAnalysis = false,\n traverseMethod = TraverseMethod.bfs,\n traverseOnlySingleEntities = false,\n } = params\n\n const getNodeDefChildrenInternal = (visitedNodeDef: NodeDef<any>) =>\n Objects.isEmpty(cycle)\n ? getNodeDefChildren({ survey, nodeDef: visitedNodeDef, includeAnalysis })\n : getNodeDefChildrenSorted({ survey, nodeDef: visitedNodeDef, cycle: cycle!, includeAnalysis })\n\n const shouldTraverse = (visitedNodeDef: NodeDef<any>): boolean =>\n visitedNodeDef.type === NodeDefType.entity &&\n (visitedNodeDef === nodeDef ||\n NodeDefs.isRoot(visitedNodeDef) ||\n !traverseOnlySingleEntities ||\n NodeDefs.isSingle(visitedNodeDef))\n\n const traverseParams = { nodeDef, visitor, shouldTraverse, getChildren: getNodeDefChildrenInternal }\n if (traverseMethod === TraverseMethod.bfs) {\n traverseBreadthFirst(traverseParams)\n } else {\n traverseDepthFirst(traverseParams)\n }\n}\n\nexport const visitNodeDefs = (params: {\n survey: Survey\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n}) => {\n const { survey, visitor, traverseMethod = TraverseMethod.bfs, includeAnalysis = false } = params\n const rootDef = getNodeDefRoot({ survey })\n return visitDescendantsAndSelfNodeDef({ survey, nodeDef: rootDef, visitor, traverseMethod, includeAnalysis })\n}\n\n// Node Def Code\nexport const getNodeDefParentCode = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode | undefined => {\n const { survey, nodeDef } = params\n const parentCodeDefUuid = nodeDef.props.parentCodeDefUuid\n if (!parentCodeDefUuid) return undefined\n const parentCodeDef = getNodeDefByUuid({ survey, uuid: parentCodeDefUuid })\n return parentCodeDef as NodeDefCode\n}\n\nexport const getNodeDefAncestorCodes = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n const ancestors = []\n let currentParentCode = getNodeDefParentCode({ survey, nodeDef })\n while (currentParentCode) {\n ancestors.unshift(currentParentCode)\n currentParentCode = getNodeDefParentCode({ survey, nodeDef: currentParentCode })\n }\n return ancestors\n}\n\nexport const isNodeDefParentCode = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { survey, nodeDef } = params\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.some(\n (def) => nodeDef.uuid === (def as NodeDef<NodeDefType.code, NodeDefCodeProps>).props?.parentCodeDefUuid\n )\n}\n\nexport const getNodeDefCategoryLevelIndex = (params: { survey: Survey; nodeDef: NodeDefCode }): number => {\n const { survey, nodeDef } = params\n const parentCodeNodeDef = getNodeDefParentCode({ survey, nodeDef })\n return parentCodeNodeDef ? 1 + getNodeDefCategoryLevelIndex({ survey, nodeDef: parentCodeNodeDef }) : 0\n}\n\nexport const getDependentCodeAttributeDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n\n const categoryUuid = NodeDefs.getCategoryUuid(nodeDef)\n if (!categoryUuid) return []\n\n const category = getCategoryByUuid({ survey, categoryUuid })\n const levelsCount = Object.keys(category?.levels ?? {}).length\n if (levelsCount <= 1) return []\n\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.filter(\n (def) => def.type === NodeDefType.code && NodeDefs.getParentCodeDefUuid(def as NodeDefCode) === nodeDef.uuid\n ) as NodeDefCode[]\n}\n\nexport const getDependentEnumeratedEntityDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefEntity[] => {\n const { survey, nodeDef } = params\n const result: NodeDefEntity[] = []\n const dependentCodeAttributeDefs = getDependentCodeAttributeDefs({ survey, nodeDef })\n for (const dependentCodeDef of dependentCodeAttributeDefs) {\n if (NodeDefs.isKey(dependentCodeDef)) {\n const entityDef = getNodeDefAncestorMultipleEntity({ survey, nodeDef: dependentCodeDef })\n if (entityDef && NodeDefs.isEnumerate(entityDef)) {\n result.push(entityDef)\n }\n }\n }\n return result\n}\n\nexport const getNodeDefKeys = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle?: string\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) =>\n NodeDefs.isKey(visitedNodeDef) &&\n !visitedNodeDef.deleted &&\n (Objects.isEmpty(cycle) || NodeDefs.isInCycle(cycle!)(visitedNodeDef)),\n })\n}\n\nexport const getRootKeys = (params: { survey: Survey; cycle?: string }) => {\n const { survey, cycle } = params\n const rootDef = getNodeDefRoot({ survey })\n return getNodeDefKeys({ survey, nodeDef: rootDef, cycle })\n}\n\nexport const getNodeDefEnumerator = (params: { survey: Survey; entityDef: NodeDefEntity }): NodeDefCode | undefined => {\n const { survey, entityDef } = params\n if (!entityDef.props.enumerate) return undefined\n\n const children = getNodeDefChildren({ survey, nodeDef: entityDef })\n const codeAttributeKeys = children.filter((child) => child.type === NodeDefType.code && child.props.key)\n if (codeAttributeKeys.length === 1) {\n return codeAttributeKeys[0] as NodeDefCode\n }\n return undefined\n}\n\nexport const isNodeDefEnumerator = (params: { survey: Survey; nodeDef: NodeDef<NodeDefType> }): boolean => {\n const { survey, nodeDef } = params\n if (nodeDef.type !== NodeDefType.code) return false\n const entityDef = getNodeDefParent({ survey, nodeDef })\n if (!entityDef) return false\n const enumerator = getNodeDefEnumerator({ survey, entityDef })\n return enumerator?.uuid === nodeDef.uuid\n}\n\nexport const getDescendantsInSingleEntities = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n predicate?: (visitedNodeDef: NodeDef<NodeDefType, NodeDefProps>) => boolean\n includeAnalysis?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef, predicate, includeAnalysis } = params\n const result: NodeDef<any>[] = []\n visitDescendantsAndSelfNodeDef({\n survey,\n cycle,\n nodeDef,\n visitor: (visitedNodeDef) => {\n if (!predicate || predicate(visitedNodeDef)) {\n result.push(visitedNodeDef)\n }\n },\n includeAnalysis,\n traverseOnlySingleEntities: true,\n })\n return result\n}\n\nexport const getNodeDefsIncludedInMultipleEntitySummary = (params: {\n survey: Survey\n cycle: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) => NodeDefs.isIncludedInMultipleEntitySummary(cycle)(visitedNodeDef),\n })\n}\n\nconst { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex } =\n NodeDefsIndex\nexport { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex }\n"]}
|
|
1
|
+
{"version":3,"file":"nodeDefs.js","sourceRoot":"","sources":["../../../src/survey/surveys/nodeDefs.ts"],"names":[],"mappings":"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","sourcesContent":["import { Survey } from '../survey'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefCodeProps,\n NodeDefEntity,\n NodeDefEntityChildPosition,\n NodeDefMap,\n NodeDefProps,\n NodeDefType,\n NodeDefs,\n} from '../../nodeDef'\nimport { Arrays, Objects, Queue } from '../../utils'\nimport { SystemError } from '../../error'\nimport * as NodeDefsReader from './_nodeDefs/nodeDefsReader'\nimport * as NodeDefsIndex from './_nodeDefs/nodeDefsIndex'\nimport { TraverseMethod } from '../../common'\nimport { getCategoryByUuid } from './surveysGetters'\n\nexport const getNodeDefsArray = NodeDefsReader.getNodeDefsArray\n\nexport const findNodeDefByUuid = (params: {\n survey: Survey\n uuid: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, uuid } = params\n return survey.nodeDefs?.[uuid]\n}\n\nexport const getNodeDefByUuid = (params: { survey: Survey; uuid: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, uuid } = params\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (!nodeDef) throw new SystemError('survey.nodeDefUuidNotFound', { uuid })\n return nodeDef\n}\n\nexport const findNodeDefByName = (params: {\n survey: Survey\n name: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, name } = params\n const nodeDefUuidByNameIndex = survey.nodeDefsIndex?.nodeDefUuidByName\n if (nodeDefUuidByNameIndex) {\n const uuid = nodeDefUuidByNameIndex[name]\n return findNodeDefByUuid({ survey, uuid })\n }\n return getNodeDefsArray(survey).find((nodeDef) => nodeDef.props.name === name)\n}\n\nexport const getNodeDefByName = (params: { survey: Survey; name: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, name } = params\n const nodeDef = findNodeDefByName({ survey, name })\n if (!nodeDef) {\n throw new SystemError('survey.nodeDefNameNotFound', { name })\n }\n return nodeDef\n}\n\nexport const getNodeDefsByUuids = (params: { survey: Survey; uuids: string[] }) => {\n const { survey, uuids } = params\n return uuids.map((uuid) => getNodeDefByUuid({ survey, uuid }))\n}\n\nexport const findNodeDefsByUuids = (params: {\n survey: Survey\n uuids: string[]\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, uuids } = params\n return uuids.reduce((acc: NodeDef<NodeDefType, NodeDefProps>[], uuid) => {\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (nodeDef) {\n acc.push(nodeDef)\n }\n return acc\n }, [])\n}\n\nexport const getNodeDefParent = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n if (!nodeDef.parentUuid) return undefined\n return getNodeDefByUuid({ survey, uuid: nodeDef.parentUuid }) as NodeDefEntity\n}\n\nexport const getNodeDefAncestorMultipleEntity = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n return findAncestorNodeDef({\n survey,\n nodeDef,\n predicate: (entityDef) => NodeDefs.isRoot(entityDef) || NodeDefs.isMultiple(entityDef),\n })\n}\n\nexport const isNodeDefAncestor = (params: {\n nodeDefAncestor: NodeDef<NodeDefType, NodeDefProps>\n nodeDefDescendant: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { nodeDefAncestor, nodeDefDescendant } = params\n\n return Arrays.startsWith(nodeDefDescendant.meta.h, [...nodeDefAncestor.meta.h, nodeDefAncestor.uuid])\n}\n\nexport const getNodeDefRoot = (params: { survey: Survey }): NodeDefEntity => {\n const { survey } = params\n if (!survey.nodeDefs) throw new SystemError('survey.emptyNodeDefs')\n\n const rootDefUuidInIndex = survey.nodeDefsIndex?.rootDefUuid\n\n const rootDef = rootDefUuidInIndex\n ? getNodeDefByUuid({ survey, uuid: rootDefUuidInIndex })\n : getNodeDefsArray(survey).find((nodeDef) => !nodeDef.parentUuid)\n\n if (!rootDef) throw new SystemError('survey.rootDefNotFound')\n\n return rootDef as NodeDefEntity\n}\n\nexport const getNodeDefSource = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, nodeDef } = params\n return nodeDef.virtual ? getNodeDefParent({ survey, nodeDef }) : undefined\n}\n\nexport const getNodeDefChildren = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, includeAnalysis = false, includeLayoutElements = false } = params\n\n if (!survey.nodeDefs) return []\n\n let childDefs = []\n // try to get children using index\n if (survey.nodeDefsIndex) {\n const childrenUuids = Object.keys(survey.nodeDefsIndex.childDefUuidPresenceByParentUuid?.[nodeDef.uuid] ?? {})\n childDefs = getNodeDefsByUuids({ survey, uuids: childrenUuids })\n } else {\n // calculate children\n childDefs = NodeDefsReader.calculateNodeDefChildren(nodeDef)(survey)\n }\n if (includeAnalysis && includeLayoutElements) {\n return childDefs\n }\n return childDefs.filter((childDef) => {\n if (!includeAnalysis && childDef.analysis) return false\n if (!includeLayoutElements && NodeDefs.isLayoutElement(childDef)) return false\n return true\n })\n}\n\nexport const getQualifierDefs = (params: { survey: Survey }): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey } = params\n const qualifierPresence = survey.nodeDefsIndex?.qualifierPresenceByUuid\n if (qualifierPresence) {\n const qualifierUuids = Object.keys(qualifierPresence)\n return getNodeDefsByUuids({ survey, uuids: qualifierUuids })\n } else {\n return getNodeDefsArray(survey).filter((nodeDef) => NodeDefs.isQualifier(nodeDef))\n }\n}\n\nconst getIndexInChain = (params: { survey: Survey; nodeDef: NodeDef<any> }): number => {\n const { survey, nodeDef } = params\n const areaBasedEstimatedOf = NodeDefs.getAreaBasedEstimatedOf(nodeDef)\n const areaBasedEstimatedOfNodeDef = areaBasedEstimatedOf\n ? getNodeDefByUuid({ survey, uuid: areaBasedEstimatedOf })\n : null\n const nodeDefToConsider = areaBasedEstimatedOfNodeDef ?? nodeDef\n return nodeDefToConsider?.propsAdvanced?.index ?? 0\n}\n\nconst getNodeDefChildrenUuidsSortedByLayout = (params: {\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n children: NodeDef<any>[]\n}): string[] => {\n const { nodeDef, cycle, children } = params\n\n const entityDef = nodeDef as NodeDefEntity\n\n const childrenEntitiesInOwnPageSortedUuids = NodeDefs.getChildrenEntitiesInOwnPageUuids(cycle)(entityDef) ?? []\n const layoutChildren = NodeDefs.getLayoutChildren(cycle)(entityDef) ?? []\n const childrenByUuids = children.reduce((acc: NodeDefMap, child) => {\n acc[child.uuid] = child\n return acc\n }, {})\n const childrenUuids = Object.keys(childrenByUuids)\n\n if (layoutChildren.length === 0 && childrenEntitiesInOwnPageSortedUuids.length === 0) {\n return childrenUuids\n }\n const sortedChildrenDefsInSamePageUuids = NodeDefs.isLayoutRenderTypeTable(cycle)(entityDef)\n ? (layoutChildren as string[])\n : [...(layoutChildren as NodeDefEntityChildPosition[])]\n .sort(\n (gridItem1: NodeDefEntityChildPosition, gridItem2: NodeDefEntityChildPosition) =>\n gridItem1.y - gridItem2.y || gridItem1.x - gridItem2.x\n )\n .map((gridItem) => gridItem.i)\n .filter((nodeDefUuid) => !!childrenByUuids[nodeDefUuid])\n\n const missingChildrenUuidsInLayout = childrenUuids.filter((childUuid) => {\n const childDef = childrenByUuids[childUuid]\n return (\n !sortedChildrenDefsInSamePageUuids.includes(childUuid) &&\n !childrenEntitiesInOwnPageSortedUuids.includes(childUuid) &&\n NodeDefs.isInCycle(cycle)(childDef)\n )\n })\n\n return (\n sortedChildrenDefsInSamePageUuids\n // add child uuids missing in layout at the end\n .concat(missingChildrenUuidsInLayout)\n // add child entities in own page at the very end\n .concat(childrenEntitiesInOwnPageSortedUuids)\n )\n}\n\nconst _booleanToNumber = (value: boolean | undefined): number => (value ? 1 : 0)\nconst _compareBooleans = (value1: boolean | undefined, value2: boolean | undefined): number =>\n _booleanToNumber(value1) - _booleanToNumber(value2)\n\nexport const getNodeDefChildrenSorted = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, cycle, includeAnalysis, includeLayoutElements } = params\n\n const children = getNodeDefChildren({ survey, nodeDef, includeAnalysis, includeLayoutElements }).filter(\n NodeDefs.isInCycle(cycle)\n )\n\n const childrenUuidsSortedByLayout = getNodeDefChildrenUuidsSortedByLayout({ nodeDef, cycle, children })\n // position lookup in the comparator without scanning the array (-1 for children not in the layout, as indexOf)\n const layoutIndexByUuid = new Map(childrenUuidsSortedByLayout.map((uuid, index) => [uuid, index]))\n const getLayoutIndex = (child: NodeDef<any>): number => layoutIndexByUuid.get(child.uuid) ?? -1\n\n return children.sort((child1, child2) => {\n if (includeAnalysis && (child1.analysis || child2.analysis)) {\n // analysis attribute at the end\n const analysisComparison = _compareBooleans(child1.analysis, child2.analysis)\n if (analysisComparison !== 0) return analysisComparison\n\n // sort by chain index\n const indexInChainComparison =\n getIndexInChain({ survey, nodeDef: child1 }) - getIndexInChain({ survey, nodeDef: child2 })\n if (indexInChainComparison !== 0) return indexInChainComparison\n\n // one node def is the area base estimated of the other\n const areaBasedEstimatedOfComparison = _compareBooleans(\n !!NodeDefs.getAreaBasedEstimatedOf(child1),\n !!NodeDefs.getAreaBasedEstimatedOf(child2)\n )\n if (areaBasedEstimatedOfComparison !== 0) return areaBasedEstimatedOfComparison\n\n return (child1.id ?? 0) - (child2.id ?? 0)\n }\n // keep sorting as defined in layout props\n return getLayoutIndex(child1) - getLayoutIndex(child2)\n })\n}\n\nexport const visitAncestorsAndSelfNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n stopIfFn?: () => boolean\n includeSelf?: boolean\n}): void => {\n const { survey, nodeDef, visitor, stopIfFn, includeSelf = true } = params\n if (includeSelf) {\n visitor(nodeDef)\n }\n let currentParent = getNodeDefParent({ survey, nodeDef })\n while (currentParent) {\n visitor(currentParent)\n if (stopIfFn?.()) {\n break\n }\n currentParent = getNodeDefParent({ survey, nodeDef: currentParent })\n }\n}\n\nexport const findAncestorNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n predicate: (entityDef: NodeDefEntity) => boolean\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef, predicate } = params\n let result: NodeDefEntity | undefined = undefined\n visitAncestorsAndSelfNodeDef({\n survey,\n nodeDef,\n // ancestors only: the node def itself is never an ancestor (e.g. a multiple attribute)\n includeSelf: false,\n visitor: (entityDef) => {\n if (predicate(entityDef)) {\n result = entityDef\n }\n },\n stopIfFn: () => !!result,\n })\n return result\n}\n\ntype NodeDefTraverseParams = {\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n shouldTraverse: (nodeDef: NodeDef<any>) => boolean\n getChildren: (nodeDef: NodeDef<any>) => NodeDef<any>[]\n}\n\nconst traverseBreadthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const queue = new Queue()\n\n queue.enqueue(nodeDef)\n\n while (!queue.isEmpty()) {\n const visitedNodeDef = queue.dequeue()\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n queue.enqueueItems(getChildren(visitedNodeDef))\n }\n }\n}\n\nconst traverseDepthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const stack: NodeDef<any>[] = []\n\n stack.push(nodeDef)\n\n while (stack.length > 0) {\n const visitedNodeDef = stack.pop()!\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n const children = getChildren(visitedNodeDef)\n // add children to stack in reverse order\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push(children[index])\n }\n }\n }\n}\n\nexport const visitDescendantsAndSelfNodeDef = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n traverseOnlySingleEntities?: boolean\n}) => {\n const {\n survey,\n cycle,\n nodeDef,\n visitor,\n includeAnalysis = false,\n traverseMethod = TraverseMethod.bfs,\n traverseOnlySingleEntities = false,\n } = params\n\n const getNodeDefChildrenInternal = (visitedNodeDef: NodeDef<any>) =>\n Objects.isEmpty(cycle)\n ? getNodeDefChildren({ survey, nodeDef: visitedNodeDef, includeAnalysis })\n : getNodeDefChildrenSorted({ survey, nodeDef: visitedNodeDef, cycle: cycle!, includeAnalysis })\n\n const shouldTraverse = (visitedNodeDef: NodeDef<any>): boolean =>\n visitedNodeDef.type === NodeDefType.entity &&\n (visitedNodeDef === nodeDef ||\n NodeDefs.isRoot(visitedNodeDef) ||\n !traverseOnlySingleEntities ||\n NodeDefs.isSingle(visitedNodeDef))\n\n const traverseParams = { nodeDef, visitor, shouldTraverse, getChildren: getNodeDefChildrenInternal }\n if (traverseMethod === TraverseMethod.bfs) {\n traverseBreadthFirst(traverseParams)\n } else {\n traverseDepthFirst(traverseParams)\n }\n}\n\nexport const visitNodeDefs = (params: {\n survey: Survey\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n}) => {\n const { survey, visitor, traverseMethod = TraverseMethod.bfs, includeAnalysis = false } = params\n const rootDef = getNodeDefRoot({ survey })\n return visitDescendantsAndSelfNodeDef({ survey, nodeDef: rootDef, visitor, traverseMethod, includeAnalysis })\n}\n\n// Node Def Code\nexport const getNodeDefParentCode = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode | undefined => {\n const { survey, nodeDef } = params\n const parentCodeDefUuid = nodeDef.props.parentCodeDefUuid\n if (!parentCodeDefUuid) return undefined\n const parentCodeDef = getNodeDefByUuid({ survey, uuid: parentCodeDefUuid })\n return parentCodeDef as NodeDefCode\n}\n\nexport const getNodeDefAncestorCodes = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n const ancestors = []\n let currentParentCode = getNodeDefParentCode({ survey, nodeDef })\n while (currentParentCode) {\n ancestors.unshift(currentParentCode)\n currentParentCode = getNodeDefParentCode({ survey, nodeDef: currentParentCode })\n }\n return ancestors\n}\n\nexport const isNodeDefParentCode = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { survey, nodeDef } = params\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.some(\n (def) => nodeDef.uuid === (def as NodeDef<NodeDefType.code, NodeDefCodeProps>).props?.parentCodeDefUuid\n )\n}\n\nexport const getNodeDefCategoryLevelIndex = (params: { survey: Survey; nodeDef: NodeDefCode }): number => {\n const { survey, nodeDef } = params\n const parentCodeNodeDef = getNodeDefParentCode({ survey, nodeDef })\n return parentCodeNodeDef ? 1 + getNodeDefCategoryLevelIndex({ survey, nodeDef: parentCodeNodeDef }) : 0\n}\n\nexport const getDependentCodeAttributeDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n\n const categoryUuid = NodeDefs.getCategoryUuid(nodeDef)\n if (!categoryUuid) return []\n\n const category = getCategoryByUuid({ survey, categoryUuid })\n const levelsCount = Object.keys(category?.levels ?? {}).length\n if (levelsCount <= 1) return []\n\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.filter(\n (def) => def.type === NodeDefType.code && NodeDefs.getParentCodeDefUuid(def as NodeDefCode) === nodeDef.uuid\n ) as NodeDefCode[]\n}\n\nexport const getDependentEnumeratedEntityDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefEntity[] => {\n const { survey, nodeDef } = params\n const result: NodeDefEntity[] = []\n const dependentCodeAttributeDefs = getDependentCodeAttributeDefs({ survey, nodeDef })\n for (const dependentCodeDef of dependentCodeAttributeDefs) {\n if (NodeDefs.isKey(dependentCodeDef)) {\n const entityDef = getNodeDefAncestorMultipleEntity({ survey, nodeDef: dependentCodeDef })\n if (entityDef && NodeDefs.isEnumerate(entityDef)) {\n result.push(entityDef)\n }\n }\n }\n return result\n}\n\nexport const getNodeDefKeys = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle?: string\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) =>\n NodeDefs.isKey(visitedNodeDef) &&\n !visitedNodeDef.deleted &&\n (Objects.isEmpty(cycle) || NodeDefs.isInCycle(cycle!)(visitedNodeDef)),\n })\n}\n\nexport const getRootKeys = (params: { survey: Survey; cycle?: string }) => {\n const { survey, cycle } = params\n const rootDef = getNodeDefRoot({ survey })\n return getNodeDefKeys({ survey, nodeDef: rootDef, cycle })\n}\n\nexport const getNodeDefEnumerator = (params: { survey: Survey; entityDef: NodeDefEntity }): NodeDefCode | undefined => {\n const { survey, entityDef } = params\n if (!entityDef.props.enumerate) return undefined\n\n const children = getNodeDefChildren({ survey, nodeDef: entityDef })\n const codeAttributeKeys = children.filter((child) => child.type === NodeDefType.code && child.props.key)\n if (codeAttributeKeys.length === 1) {\n return codeAttributeKeys[0] as NodeDefCode\n }\n return undefined\n}\n\nexport const isNodeDefEnumerator = (params: { survey: Survey; nodeDef: NodeDef<NodeDefType> }): boolean => {\n const { survey, nodeDef } = params\n if (nodeDef.type !== NodeDefType.code) return false\n const entityDef = getNodeDefParent({ survey, nodeDef })\n if (!entityDef) return false\n const enumerator = getNodeDefEnumerator({ survey, entityDef })\n return enumerator?.uuid === nodeDef.uuid\n}\n\nexport const getDescendantsInSingleEntities = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n predicate?: (visitedNodeDef: NodeDef<NodeDefType, NodeDefProps>) => boolean\n includeAnalysis?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef, predicate, includeAnalysis } = params\n const result: NodeDef<any>[] = []\n visitDescendantsAndSelfNodeDef({\n survey,\n cycle,\n nodeDef,\n visitor: (visitedNodeDef) => {\n if (!predicate || predicate(visitedNodeDef)) {\n result.push(visitedNodeDef)\n }\n },\n includeAnalysis,\n traverseOnlySingleEntities: true,\n })\n return result\n}\n\nexport const getNodeDefsIncludedInMultipleEntitySummary = (params: {\n survey: Survey\n cycle: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) => NodeDefs.isIncludedInMultipleEntitySummary(cycle)(visitedNodeDef),\n })\n}\n\nconst { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex } =\n NodeDefsIndex\nexport { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex }\n"]}
|
package/dist/utils/arrays.js
CHANGED
|
@@ -13,7 +13,10 @@ const addItems = (items, options) => (array) => {
|
|
|
13
13
|
};
|
|
14
14
|
const addItem = (item, options) => (array) => addItems([item], options)(array);
|
|
15
15
|
const fromNumberOfElements = (numOfElements) => Array.from(new Array(numOfElements).keys());
|
|
16
|
-
const intersection = (array1, array2) =>
|
|
16
|
+
const intersection = (array1, array2) => {
|
|
17
|
+
const items2 = new Set(array2);
|
|
18
|
+
return array1.filter((item) => items2.has(item));
|
|
19
|
+
};
|
|
17
20
|
const last = (array = []) => (array.length > 0 ? array.at(-1) : undefined);
|
|
18
21
|
const removeItem = (item) => (array) => {
|
|
19
22
|
const result = [...array];
|
package/dist/utils/arrays.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../src/utils/arrays.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AAEpC,MAAM,QAAQ,GACZ,CAAI,KAAU,EAAE,OAA0D,EAAE,EAAE,CAC9E,CAAC,KAAU,EAAO,EAAE;IAClB,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAA;IAClE,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,kBAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACtF,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAA;QACzB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;AACjC,CAAC,CAAA;AACH,MAAM,OAAO,GACX,CAAI,IAAO,EAAE,OAA0D,EAAE,EAAE,CAC3E,CAAC,KAAU,EAAO,EAAE,CAClB,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAA;AAEpC,MAAM,oBAAoB,GAAG,CAAC,aAAqB,EAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAE7G,MAAM,YAAY,GAAG,CAAI,MAAW,EAAE,MAAW,EAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../src/utils/arrays.ts"],"names":[],"mappings":"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","sourcesContent":["import { Objects } from './_objects'\n\nconst addItems =\n <T>(items: T[], options?: { sideEffect?: boolean; excludeNulls?: boolean }) =>\n (array: T[]): T[] => {\n const { sideEffect = false, excludeNulls = false } = options ?? {}\n const itemsToAdd = excludeNulls ? items.filter((item) => !Objects.isNil(item)) : items\n if (sideEffect) {\n array.push(...itemsToAdd)\n return array\n }\n return array.concat(itemsToAdd)\n }\nconst addItem =\n <T>(item: T, options?: { sideEffect?: boolean; excludeNulls?: boolean }) =>\n (array: T[]): T[] =>\n addItems([item], options)(array)\n\nconst fromNumberOfElements = (numOfElements: number): number[] => Array.from(new Array(numOfElements).keys())\n\nconst intersection = <T>(array1: T[], array2: T[]): T[] => {\n const items2 = new Set(array2)\n return array1.filter((item) => items2.has(item))\n}\n\nconst last = <T>(array: T[] = []): T | undefined => (array.length > 0 ? array.at(-1) : undefined)\n\nconst removeItem =\n <T>(item: T) =>\n (array: T[]): T[] => {\n const result = [...array]\n const itemIndex = array.indexOf(item)\n if (itemIndex >= 0) {\n result.splice(itemIndex, 1)\n }\n return result\n }\n\nconst startsWith = <T>(list: T[], start: T[]): boolean => start.every((item, index) => list[index] === item)\n\nconst toArray = (value: any): any[] => {\n if (value === null || value === undefined) return []\n return Array.isArray(value) ? value : [value]\n}\n\nconst toUuidIndexedObject = (array: any[]) =>\n array.reduce((acc, item) => {\n acc[item.uuid] = item\n return acc\n }, {})\n\nexport const Arrays = {\n addItem,\n addItems,\n fromNumberOfElements,\n intersection,\n last,\n removeItem,\n startsWith,\n toArray,\n toUuidIndexedObject,\n}\n"]}
|
|
@@ -22,7 +22,6 @@ declare const updateCounts: (validation: Validation) => Validation;
|
|
|
22
22
|
declare const calculateHasNestedErrors: (validation: Validation) => boolean;
|
|
23
23
|
declare const calculateHasNestedWarnings: (validation: Validation) => boolean;
|
|
24
24
|
declare const cleanup: (validation: Validation) => Validation;
|
|
25
|
-
declare const mergeValidations: (validationNext: Validation, doCleanup?: boolean) => (validationPrev: Validation) => Validation;
|
|
26
25
|
/**
|
|
27
26
|
* Options of the functions removing field validations.
|
|
28
27
|
*/
|
|
@@ -80,7 +79,7 @@ export declare const Validations: {
|
|
|
80
79
|
calculateHasNestedWarnings: typeof calculateHasNestedWarnings;
|
|
81
80
|
updateCounts: typeof updateCounts;
|
|
82
81
|
cleanup: typeof cleanup;
|
|
83
|
-
mergeValidations: typeof
|
|
82
|
+
mergeValidations: typeof mergeValidation;
|
|
84
83
|
dissocFieldValidation: typeof dissocFieldValidation;
|
|
85
84
|
dissocFieldValidationsStartingWith: typeof dissocFieldValidationsStartingWith;
|
|
86
85
|
mergeValidation: typeof mergeValidation;
|
|
@@ -133,34 +133,6 @@ const cleanup = (validation) => {
|
|
|
133
133
|
const valid = !hasFields && errors.length === 0 && warnings.length === 0;
|
|
134
134
|
return _createValidation({ valid, fields: fieldsCleaned, hasFields, errors, warnings });
|
|
135
135
|
};
|
|
136
|
-
const mergeValidations = (validationNext, doCleanup = true) => (validationPrev) => {
|
|
137
|
-
const validationFieldsResult = Object.assign({}, getFieldValidations(validationPrev));
|
|
138
|
-
const validationFieldsNext = getFieldValidations(validationNext);
|
|
139
|
-
// iterate over new field validations: remove valid ones, merge invalid ones with previous ones
|
|
140
|
-
for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {
|
|
141
|
-
if (isValid(validationFieldNext)) {
|
|
142
|
-
if (doCleanup) {
|
|
143
|
-
// field validation valid: remove it from resulting validation
|
|
144
|
-
delete validationFieldsResult[fieldKey];
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
validationFieldsResult[fieldKey] = factory_1.ValidationFactory.createInstance();
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
// field validation not valid: deep merge it with the previous one
|
|
152
|
-
const validationFieldPrev = validationFieldsResult[fieldKey];
|
|
153
|
-
const validationFieldMerged = validationFieldPrev
|
|
154
|
-
? mergeValidation(validationFieldNext, false)(validationFieldPrev)
|
|
155
|
-
: validationFieldNext;
|
|
156
|
-
validationFieldsResult[fieldKey] = validationFieldMerged;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
const validationResult = Object.assign(Object.assign({}, validationPrev), { [keys.fields]: validationFieldsResult });
|
|
160
|
-
validationResult.errors = getErrors(validationNext);
|
|
161
|
-
validationResult.warnings = getWarnings(validationNext);
|
|
162
|
-
return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult);
|
|
163
|
-
};
|
|
164
136
|
const toDissocFieldValidationOptions = (options, doCleanup) => typeof options === 'boolean' || options === undefined ? { sideEffect: options, doCleanup } : options;
|
|
165
137
|
function dissocFieldValidation(fieldKey, options, doCleanupParam) {
|
|
166
138
|
const { sideEffect = false, doCleanup = true } = toDissocFieldValidationOptions(options, doCleanupParam);
|
|
@@ -216,6 +188,8 @@ const mergeValidation = (validationNext, doCleanup = true) => (validationPrev) =
|
|
|
216
188
|
validationResult.warnings = getWarnings(validationNext);
|
|
217
189
|
return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult);
|
|
218
190
|
};
|
|
191
|
+
// same function as mergeValidation (kept for backwards compatibility)
|
|
192
|
+
const mergeValidations = mergeValidation;
|
|
219
193
|
const mergeFieldValidations = (fieldValidationsNext, fieldValidationsPrev) => {
|
|
220
194
|
const result = Object.assign({}, fieldValidationsPrev);
|
|
221
195
|
for (const [fieldKey, fieldValidationNext] of Object.entries(fieldValidationsNext)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validations.js","sourceRoot":"","sources":["../../src/validation/validations.ts"],"names":[],"mappings":"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","sourcesContent":["import { Objects } from '../utils'\nimport { MutationOptions } from '../utils/mutationOptions'\nimport { ValidationFactory } from './factory'\nimport { Validation, ValidationCounts, ValidationFields, ValidationResult } from './validation'\n\nconst keys = {\n counts: 'counts',\n errors: 'errors',\n fields: 'fields',\n valid: 'valid',\n validation: 'validation',\n warnings: 'warnings',\n}\n\nconst hasValidation = (obj: any): boolean => !!obj?.validation\n\nconst getValidation = (obj: any): Validation => obj?.validation || ValidationFactory.createInstance()\n\nconst getFieldValidations = (validation: Validation): ValidationFields => validation?.fields ?? {}\n\nconst getFieldValidationUnsafe =\n (field: string | number) =>\n (validation: Validation): Validation | undefined => {\n if (typeof field === 'string') {\n let validationCurrent: Validation | undefined = validation\n const parts = field.split('.')\n parts.some((part) => {\n validationCurrent = getFieldValidations(validationCurrent!)[part]\n return !validationCurrent // breaks the loop if there is no field validation\n })\n return validationCurrent\n } else {\n return getFieldValidations(validation)[field]\n }\n }\n\nconst getFieldValidation =\n (field: string | number, defaultValue: Validation = ValidationFactory.createInstance()) =>\n (validation: Validation): Validation =>\n getFieldValidationUnsafe(field)(validation) ?? defaultValue\n\nconst getFieldValidationsByFields =\n (fields: (string | number)[]) =>\n (validation: Validation): ValidationFields => {\n const result: ValidationFields = {}\n for (const field of fields) {\n const fieldValidation = getFieldValidationUnsafe(field)(validation)\n if (fieldValidation) {\n result[String(field)] = fieldValidation\n }\n }\n return result\n }\n\nconst getErrors = (validation: Validation): ValidationResult[] => validation?.errors ?? []\n\nconst getWarnings = (validation: Validation): ValidationResult[] => validation?.warnings ?? []\n\nconst hasErrors = (validation: Validation): boolean => {\n const errors = getErrors(validation)\n return !Objects.isEmpty(errors) || Object.values(getFieldValidations(validation)).some(hasErrors)\n}\n\nconst hasWarnings = (validation: Validation): boolean => {\n const warnings = getWarnings(validation)\n return !Objects.isEmpty(warnings) || Object.values(getFieldValidations(validation)).some(hasWarnings)\n}\n\nconst isValid = (validation: Validation): boolean => Objects.isEmpty(validation) || validation.valid\nconst isNotValid = (validation: Validation): boolean => !isValid(validation)\nconst isObjValid = (obj: Record<string, unknown>): boolean => isValid(getValidation(obj))\n\nconst getCounts = (validation: Validation): ValidationCounts | undefined => validation?.counts\nconst getErrorsCount = (validation: Validation): number => getCounts(validation)?.errors ?? 0\nconst getWarningsCount = (validation: Validation): number => getCounts(validation)?.warnings ?? 0\n\n/**\n * Creates a validation object like ValidationFactory.createInstance does, but without checking again\n * if fields is empty (checking it is O(N) for objects with many properties).\n */\nconst _createValidation = (params: {\n valid: boolean\n fields: ValidationFields\n hasFields: boolean\n errors: ValidationResult[]\n warnings: ValidationResult[]\n}): Validation => {\n const { valid, fields, hasFields, errors, warnings } = params\n const result: Validation = { valid }\n if (errors.length > 0) result.errors = errors\n if (hasFields) result.fields = fields\n if (warnings.length > 0) result.warnings = warnings\n return result\n}\n\nconst recalculateValidity = (validation: Validation): Validation => {\n let allFieldsValid = true\n let hasFields = false\n\n const fieldsWithValidationRecalculated: ValidationFields = {}\n\n for (const [fieldKey, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationUpdated = recalculateValidity(fieldValidation)\n fieldsWithValidationRecalculated[fieldKey] = fieldValidationUpdated\n hasFields = true\n if (!fieldValidationUpdated.valid) {\n allFieldsValid = false\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the recalculated field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = allFieldsValid && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsWithValidationRecalculated, hasFields, errors, warnings })\n}\n\nconst traverse = (visitor: (visitedItem: Validation) => void) => (validation: Validation) => {\n const stack: Validation[] = []\n stack.push(validation)\n\n while (stack.length) {\n const validationCurrent = stack.pop()!\n visitor(validationCurrent)\n // Add field validations to stack\n const validationFields = getFieldValidations(validationCurrent)\n stack.push(...Object.values(validationFields))\n }\n}\n\nconst calculateCounts = (validation: Validation): ValidationCounts => {\n let errors = 0\n let warnings = 0\n\n traverse((validationCurrent) => {\n errors += getErrors(validationCurrent).length\n warnings += getWarnings(validationCurrent).length\n })(validation)\n\n return {\n errors,\n warnings,\n }\n}\n\nconst updateCounts = (validation: Validation): Validation => ({\n ...validation,\n counts: calculateCounts(validation),\n})\n\nconst calculateHasNestedErrors = (validation: Validation): boolean => calculateCounts(validation).errors > 0\nconst calculateHasNestedWarnings = (validation: Validation): boolean => calculateCounts(validation).warnings > 0\n\nconst cleanup = (validation: Validation): Validation => {\n // only not valid field validations are kept\n let hasFields = false\n const fieldsCleaned: ValidationFields = {}\n for (const [field, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationCleaned = cleanup(fieldValidation)\n if (!fieldValidationCleaned.valid) {\n fieldsCleaned[field] = fieldValidationCleaned\n hasFields = true\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the cleaned field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = !hasFields && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsCleaned, hasFields, errors, warnings })\n}\n\nconst mergeValidations =\n (validationNext: Validation, doCleanup = true) =>\n (validationPrev: Validation): Validation => {\n const validationFieldsResult = { ...getFieldValidations(validationPrev) }\n const validationFieldsNext = getFieldValidations(validationNext)\n\n // iterate over new field validations: remove valid ones, merge invalid ones with previous ones\n for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {\n if (isValid(validationFieldNext)) {\n if (doCleanup) {\n // field validation valid: remove it from resulting validation\n delete validationFieldsResult[fieldKey]\n } else {\n validationFieldsResult[fieldKey] = ValidationFactory.createInstance()\n }\n } else {\n // field validation not valid: deep merge it with the previous one\n const validationFieldPrev = validationFieldsResult[fieldKey]\n const validationFieldMerged = validationFieldPrev\n ? mergeValidation(validationFieldNext, false)(validationFieldPrev)\n : validationFieldNext\n validationFieldsResult[fieldKey] = validationFieldMerged\n }\n }\n const validationResult: Validation = { ...validationPrev, [keys.fields]: validationFieldsResult }\n validationResult.errors = getErrors(validationNext)\n validationResult.warnings = getWarnings(validationNext)\n return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult)\n }\n\n/**\n * Options of the functions removing field validations.\n */\nexport interface DissocFieldValidationOptions extends MutationOptions {\n /**\n * When true (default), the validation is cleaned up after removing the field validations (empty field validations\n * removed and validity recalculated).\n */\n doCleanup?: boolean\n}\n\nconst toDissocFieldValidationOptions = (\n options?: DissocFieldValidationOptions | boolean,\n doCleanup?: boolean\n): DissocFieldValidationOptions =>\n typeof options === 'boolean' || options === undefined ? { sideEffect: options, doCleanup } : options\n\nfunction dissocFieldValidation(\n fieldKey: string,\n options?: DissocFieldValidationOptions\n): (validation: Validation) => Validation\n/** @deprecated Pass the options object instead of the positional booleans: `{ sideEffect, doCleanup }` */\nfunction dissocFieldValidation(\n fieldKey: string,\n sideEffect?: boolean,\n doCleanup?: boolean\n): (validation: Validation) => Validation\nfunction dissocFieldValidation(\n fieldKey: string,\n options?: DissocFieldValidationOptions | boolean,\n doCleanupParam?: boolean\n): (validation: Validation) => Validation {\n const { sideEffect = false, doCleanup = true } = toDissocFieldValidationOptions(options, doCleanupParam)\n return (validation: Validation): Validation => {\n const validationUpdated = Objects.dissocPath({ obj: validation, path: ['fields', fieldKey], sideEffect })\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n}\n\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n options?: DissocFieldValidationOptions\n): (validation: Validation) => Validation\n/** @deprecated Pass the options object instead of the positional booleans: `{ sideEffect, doCleanup }` */\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n sideEffect?: boolean,\n doCleanup?: boolean\n): (validation: Validation) => Validation\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n options?: DissocFieldValidationOptions | boolean,\n doCleanupParam?: boolean\n): (validation: Validation) => Validation {\n const { sideEffect = false, doCleanup = true } = toDissocFieldValidationOptions(options, doCleanupParam)\n return (validation: Validation): Validation => {\n if (!validation?.fields) return validation\n\n const fieldsUpdated = sideEffect ? validation.fields : { ...validation.fields }\n for (const fieldKey of Object.keys(fieldsUpdated)) {\n if (fieldKey.startsWith(fieldStartsWith)) {\n delete fieldsUpdated[fieldKey]\n }\n }\n if (sideEffect) {\n validation.fields = fieldsUpdated\n return validation\n }\n const validationUpdated = { ...validation, fields: fieldsUpdated }\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n}\n\nconst mergeValidation =\n (validationNext: Validation, doCleanup = true) =>\n (validationPrev: Validation): Validation => {\n const validationFieldsResult: ValidationFields = {\n ...getFieldValidations(validationPrev),\n }\n const validationFieldsNext = getFieldValidations(validationNext)\n\n // iterate over new field validations: remove valid ones, merge invalid ones with previous ones\n for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {\n if (isValid(validationFieldNext)) {\n if (doCleanup) {\n // field validation valid: remove it from resulting validation\n delete validationFieldsResult[fieldKey]\n } else {\n validationFieldsResult[fieldKey] = ValidationFactory.createInstance()\n }\n } else {\n // field validation not valid: deep merge it with the previous one\n const validationFieldPrev = validationFieldsResult[fieldKey]\n const validationFieldMerged = validationFieldPrev\n ? mergeValidation(validationFieldNext, false)(validationFieldPrev)\n : validationFieldNext\n validationFieldsResult[fieldKey] = validationFieldMerged\n }\n }\n\n const validationResult: Validation = { ...validationPrev, fields: validationFieldsResult }\n validationResult.errors = getErrors(validationNext)\n validationResult.warnings = getWarnings(validationNext)\n\n return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult)\n }\n\nconst mergeFieldValidations = (\n fieldValidationsNext: ValidationFields,\n fieldValidationsPrev: ValidationFields\n): ValidationFields => {\n const result: ValidationFields = { ...fieldValidationsPrev }\n for (const [fieldKey, fieldValidationNext] of Object.entries(fieldValidationsNext)) {\n const fieldValidationPrev = fieldValidationsPrev[fieldKey]\n result[fieldKey] = fieldValidationPrev\n ? mergeValidation(fieldValidationNext, false)(fieldValidationPrev)\n : fieldValidationNext\n }\n return result\n}\n\nconst setValid = (valid: boolean) => (obj: object) => Objects.setInPath({ obj, path: [keys.valid], value: valid })\n\nconst setErrors = (errors: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.errors], value: errors })\n\nconst setWarnings = (warnings: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.warnings], value: warnings })\n\nconst setFieldValidations = (fieldValidations: ValidationFields) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields], value: fieldValidations })\n\nconst setFieldValidation = (field: string, fieldValidation: Validation) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields, field], value: fieldValidation })\n\nconst assocFieldValidation = (field: string, fieldValidation: Validation) => (validation: Validation) =>\n cleanup(Objects.assocPath({ obj: validation, path: [keys.fields, field], value: fieldValidation }))\n\nconst assocValidation = (v: Validation) => (obj: Record<string, unknown>) =>\n Objects.assoc({ obj, prop: 'validation', value: v })\n\nconst dissocValidation = (obj: Record<string, unknown>) => Objects.dissoc({ obj, prop: 'validation' })\n\nexport const Validations = {\n keys,\n hasValidation,\n getValidation,\n getFieldValidation,\n getFieldValidations,\n getFieldValidationsByFields,\n getErrors,\n getWarnings,\n hasErrors,\n hasWarnings,\n isValid,\n isNotValid,\n isObjValid,\n getCounts,\n getErrorsCount,\n getWarningsCount,\n recalculateValidity,\n traverse,\n calculateCounts,\n calculateHasNestedErrors,\n calculateHasNestedWarnings,\n updateCounts,\n cleanup,\n mergeValidations,\n dissocFieldValidation,\n dissocFieldValidationsStartingWith,\n mergeValidation,\n mergeFieldValidations,\n setValid,\n setErrors,\n setWarnings,\n setFieldValidations,\n assocFieldValidation,\n setFieldValidation,\n assocValidation,\n dissocValidation,\n}\n"]}
|
|
1
|
+
{"version":3,"file":"validations.js","sourceRoot":"","sources":["../../src/validation/validations.ts"],"names":[],"mappings":"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","sourcesContent":["import { Objects } from '../utils'\nimport { MutationOptions } from '../utils/mutationOptions'\nimport { ValidationFactory } from './factory'\nimport { Validation, ValidationCounts, ValidationFields, ValidationResult } from './validation'\n\nconst keys = {\n counts: 'counts',\n errors: 'errors',\n fields: 'fields',\n valid: 'valid',\n validation: 'validation',\n warnings: 'warnings',\n}\n\nconst hasValidation = (obj: any): boolean => !!obj?.validation\n\nconst getValidation = (obj: any): Validation => obj?.validation || ValidationFactory.createInstance()\n\nconst getFieldValidations = (validation: Validation): ValidationFields => validation?.fields ?? {}\n\nconst getFieldValidationUnsafe =\n (field: string | number) =>\n (validation: Validation): Validation | undefined => {\n if (typeof field === 'string') {\n let validationCurrent: Validation | undefined = validation\n const parts = field.split('.')\n parts.some((part) => {\n validationCurrent = getFieldValidations(validationCurrent!)[part]\n return !validationCurrent // breaks the loop if there is no field validation\n })\n return validationCurrent\n } else {\n return getFieldValidations(validation)[field]\n }\n }\n\nconst getFieldValidation =\n (field: string | number, defaultValue: Validation = ValidationFactory.createInstance()) =>\n (validation: Validation): Validation =>\n getFieldValidationUnsafe(field)(validation) ?? defaultValue\n\nconst getFieldValidationsByFields =\n (fields: (string | number)[]) =>\n (validation: Validation): ValidationFields => {\n const result: ValidationFields = {}\n for (const field of fields) {\n const fieldValidation = getFieldValidationUnsafe(field)(validation)\n if (fieldValidation) {\n result[String(field)] = fieldValidation\n }\n }\n return result\n }\n\nconst getErrors = (validation: Validation): ValidationResult[] => validation?.errors ?? []\n\nconst getWarnings = (validation: Validation): ValidationResult[] => validation?.warnings ?? []\n\nconst hasErrors = (validation: Validation): boolean => {\n const errors = getErrors(validation)\n return !Objects.isEmpty(errors) || Object.values(getFieldValidations(validation)).some(hasErrors)\n}\n\nconst hasWarnings = (validation: Validation): boolean => {\n const warnings = getWarnings(validation)\n return !Objects.isEmpty(warnings) || Object.values(getFieldValidations(validation)).some(hasWarnings)\n}\n\nconst isValid = (validation: Validation): boolean => Objects.isEmpty(validation) || validation.valid\nconst isNotValid = (validation: Validation): boolean => !isValid(validation)\nconst isObjValid = (obj: Record<string, unknown>): boolean => isValid(getValidation(obj))\n\nconst getCounts = (validation: Validation): ValidationCounts | undefined => validation?.counts\nconst getErrorsCount = (validation: Validation): number => getCounts(validation)?.errors ?? 0\nconst getWarningsCount = (validation: Validation): number => getCounts(validation)?.warnings ?? 0\n\n/**\n * Creates a validation object like ValidationFactory.createInstance does, but without checking again\n * if fields is empty (checking it is O(N) for objects with many properties).\n */\nconst _createValidation = (params: {\n valid: boolean\n fields: ValidationFields\n hasFields: boolean\n errors: ValidationResult[]\n warnings: ValidationResult[]\n}): Validation => {\n const { valid, fields, hasFields, errors, warnings } = params\n const result: Validation = { valid }\n if (errors.length > 0) result.errors = errors\n if (hasFields) result.fields = fields\n if (warnings.length > 0) result.warnings = warnings\n return result\n}\n\nconst recalculateValidity = (validation: Validation): Validation => {\n let allFieldsValid = true\n let hasFields = false\n\n const fieldsWithValidationRecalculated: ValidationFields = {}\n\n for (const [fieldKey, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationUpdated = recalculateValidity(fieldValidation)\n fieldsWithValidationRecalculated[fieldKey] = fieldValidationUpdated\n hasFields = true\n if (!fieldValidationUpdated.valid) {\n allFieldsValid = false\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the recalculated field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = allFieldsValid && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsWithValidationRecalculated, hasFields, errors, warnings })\n}\n\nconst traverse = (visitor: (visitedItem: Validation) => void) => (validation: Validation) => {\n const stack: Validation[] = []\n stack.push(validation)\n\n while (stack.length) {\n const validationCurrent = stack.pop()!\n visitor(validationCurrent)\n // Add field validations to stack\n const validationFields = getFieldValidations(validationCurrent)\n stack.push(...Object.values(validationFields))\n }\n}\n\nconst calculateCounts = (validation: Validation): ValidationCounts => {\n let errors = 0\n let warnings = 0\n\n traverse((validationCurrent) => {\n errors += getErrors(validationCurrent).length\n warnings += getWarnings(validationCurrent).length\n })(validation)\n\n return {\n errors,\n warnings,\n }\n}\n\nconst updateCounts = (validation: Validation): Validation => ({\n ...validation,\n counts: calculateCounts(validation),\n})\n\nconst calculateHasNestedErrors = (validation: Validation): boolean => calculateCounts(validation).errors > 0\nconst calculateHasNestedWarnings = (validation: Validation): boolean => calculateCounts(validation).warnings > 0\n\nconst cleanup = (validation: Validation): Validation => {\n // only not valid field validations are kept\n let hasFields = false\n const fieldsCleaned: ValidationFields = {}\n for (const [field, fieldValidation] of Object.entries(getFieldValidations(validation))) {\n const fieldValidationCleaned = cleanup(fieldValidation)\n if (!fieldValidationCleaned.valid) {\n fieldsCleaned[field] = fieldValidationCleaned\n hasFields = true\n }\n }\n const errors = getErrors(validation)\n const warnings = getWarnings(validation)\n // nested errors and warnings already make the cleaned field validations not valid:\n // checking only own errors and warnings is enough (hasErrors/hasWarnings would visit the whole subtree again)\n const valid = !hasFields && errors.length === 0 && warnings.length === 0\n\n return _createValidation({ valid, fields: fieldsCleaned, hasFields, errors, warnings })\n}\n\n/**\n * Options of the functions removing field validations.\n */\nexport interface DissocFieldValidationOptions extends MutationOptions {\n /**\n * When true (default), the validation is cleaned up after removing the field validations (empty field validations\n * removed and validity recalculated).\n */\n doCleanup?: boolean\n}\n\nconst toDissocFieldValidationOptions = (\n options?: DissocFieldValidationOptions | boolean,\n doCleanup?: boolean\n): DissocFieldValidationOptions =>\n typeof options === 'boolean' || options === undefined ? { sideEffect: options, doCleanup } : options\n\nfunction dissocFieldValidation(\n fieldKey: string,\n options?: DissocFieldValidationOptions\n): (validation: Validation) => Validation\n/** @deprecated Pass the options object instead of the positional booleans: `{ sideEffect, doCleanup }` */\nfunction dissocFieldValidation(\n fieldKey: string,\n sideEffect?: boolean,\n doCleanup?: boolean\n): (validation: Validation) => Validation\nfunction dissocFieldValidation(\n fieldKey: string,\n options?: DissocFieldValidationOptions | boolean,\n doCleanupParam?: boolean\n): (validation: Validation) => Validation {\n const { sideEffect = false, doCleanup = true } = toDissocFieldValidationOptions(options, doCleanupParam)\n return (validation: Validation): Validation => {\n const validationUpdated = Objects.dissocPath({ obj: validation, path: ['fields', fieldKey], sideEffect })\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n}\n\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n options?: DissocFieldValidationOptions\n): (validation: Validation) => Validation\n/** @deprecated Pass the options object instead of the positional booleans: `{ sideEffect, doCleanup }` */\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n sideEffect?: boolean,\n doCleanup?: boolean\n): (validation: Validation) => Validation\nfunction dissocFieldValidationsStartingWith(\n fieldStartsWith: string,\n options?: DissocFieldValidationOptions | boolean,\n doCleanupParam?: boolean\n): (validation: Validation) => Validation {\n const { sideEffect = false, doCleanup = true } = toDissocFieldValidationOptions(options, doCleanupParam)\n return (validation: Validation): Validation => {\n if (!validation?.fields) return validation\n\n const fieldsUpdated = sideEffect ? validation.fields : { ...validation.fields }\n for (const fieldKey of Object.keys(fieldsUpdated)) {\n if (fieldKey.startsWith(fieldStartsWith)) {\n delete fieldsUpdated[fieldKey]\n }\n }\n if (sideEffect) {\n validation.fields = fieldsUpdated\n return validation\n }\n const validationUpdated = { ...validation, fields: fieldsUpdated }\n return doCleanup ? cleanup(validationUpdated) : validationUpdated\n }\n}\n\nconst mergeValidation =\n (validationNext: Validation, doCleanup = true) =>\n (validationPrev: Validation): Validation => {\n const validationFieldsResult: ValidationFields = {\n ...getFieldValidations(validationPrev),\n }\n const validationFieldsNext = getFieldValidations(validationNext)\n\n // iterate over new field validations: remove valid ones, merge invalid ones with previous ones\n for (const [fieldKey, validationFieldNext] of Object.entries(validationFieldsNext)) {\n if (isValid(validationFieldNext)) {\n if (doCleanup) {\n // field validation valid: remove it from resulting validation\n delete validationFieldsResult[fieldKey]\n } else {\n validationFieldsResult[fieldKey] = ValidationFactory.createInstance()\n }\n } else {\n // field validation not valid: deep merge it with the previous one\n const validationFieldPrev = validationFieldsResult[fieldKey]\n const validationFieldMerged = validationFieldPrev\n ? mergeValidation(validationFieldNext, false)(validationFieldPrev)\n : validationFieldNext\n validationFieldsResult[fieldKey] = validationFieldMerged\n }\n }\n\n const validationResult: Validation = { ...validationPrev, fields: validationFieldsResult }\n validationResult.errors = getErrors(validationNext)\n validationResult.warnings = getWarnings(validationNext)\n\n return doCleanup ? cleanup(validationResult) : recalculateValidity(validationResult)\n }\n\n// same function as mergeValidation (kept for backwards compatibility)\nconst mergeValidations = mergeValidation\n\nconst mergeFieldValidations = (\n fieldValidationsNext: ValidationFields,\n fieldValidationsPrev: ValidationFields\n): ValidationFields => {\n const result: ValidationFields = { ...fieldValidationsPrev }\n for (const [fieldKey, fieldValidationNext] of Object.entries(fieldValidationsNext)) {\n const fieldValidationPrev = fieldValidationsPrev[fieldKey]\n result[fieldKey] = fieldValidationPrev\n ? mergeValidation(fieldValidationNext, false)(fieldValidationPrev)\n : fieldValidationNext\n }\n return result\n}\n\nconst setValid = (valid: boolean) => (obj: object) => Objects.setInPath({ obj, path: [keys.valid], value: valid })\n\nconst setErrors = (errors: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.errors], value: errors })\n\nconst setWarnings = (warnings: ValidationResult[]) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.warnings], value: warnings })\n\nconst setFieldValidations = (fieldValidations: ValidationFields) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields], value: fieldValidations })\n\nconst setFieldValidation = (field: string, fieldValidation: Validation) => (obj: object) =>\n Objects.setInPath({ obj, path: [keys.fields, field], value: fieldValidation })\n\nconst assocFieldValidation = (field: string, fieldValidation: Validation) => (validation: Validation) =>\n cleanup(Objects.assocPath({ obj: validation, path: [keys.fields, field], value: fieldValidation }))\n\nconst assocValidation = (v: Validation) => (obj: Record<string, unknown>) =>\n Objects.assoc({ obj, prop: 'validation', value: v })\n\nconst dissocValidation = (obj: Record<string, unknown>) => Objects.dissoc({ obj, prop: 'validation' })\n\nexport const Validations = {\n keys,\n hasValidation,\n getValidation,\n getFieldValidation,\n getFieldValidations,\n getFieldValidationsByFields,\n getErrors,\n getWarnings,\n hasErrors,\n hasWarnings,\n isValid,\n isNotValid,\n isObjValid,\n getCounts,\n getErrorsCount,\n getWarningsCount,\n recalculateValidity,\n traverse,\n calculateCounts,\n calculateHasNestedErrors,\n calculateHasNestedWarnings,\n updateCounts,\n cleanup,\n mergeValidations,\n dissocFieldValidation,\n dissocFieldValidationsStartingWith,\n mergeValidation,\n mergeFieldValidations,\n setValid,\n setErrors,\n setWarnings,\n setFieldValidations,\n assocFieldValidation,\n setFieldValidation,\n assocValidation,\n dissocValidation,\n}\n"]}
|