@openforis/arena-core 2.18.7 → 2.18.8

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.
@@ -43,7 +43,8 @@ const getChildrenMinOrMaxCount = (params) => {
43
43
  return count;
44
44
  // count can be a constant value, specified in the node def min/max count prop
45
45
  const nodeDefCount = countType === NodeDefCountType.max ? NodeDefs.getMaxCount(nodeDef) : NodeDefs.getMinCount(nodeDef);
46
- return nodeDefCount ? Number(nodeDefCount) : Number.NaN;
46
+ // count expressions (array) are evaluated into the parent node meta (childrenMinCount/childrenMaxCount)
47
+ return nodeDefCount && !Array.isArray(nodeDefCount) ? Number(nodeDefCount) : Number.NaN;
47
48
  };
48
49
  const getChildrenMaxCount = (params) => getChildrenMinOrMaxCount(Object.assign(Object.assign({}, params), { countType: NodeDefCountType.max }));
49
50
  const getChildrenMinCount = (params) => getChildrenMinOrMaxCount(Object.assign(Object.assign({}, params), { countType: NodeDefCountType.min }));
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/node/nodes.ts"],"names":[],"mappings":"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","sourcesContent":["import { Dictionary } from '../common'\nimport { NodeDef, NodeDefCountType, NodeDefs } from '../nodeDef'\nimport { Dates, Objects } from '../utils'\nimport { MutationOptions, toMutationOptions } from '../utils/mutationOptions'\nimport { ArenaRecordNode } from './node'\n\nconst isRoot = (node: ArenaRecordNode): boolean => !node.parentUuid\n\nconst areEqual = (nodeA: ArenaRecordNode, nodeB: ArenaRecordNode): boolean => nodeA.uuid === nodeB.uuid\n\nconst isChildApplicable = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child applicability is not defined for a node definition, consider it applicable\n return node.meta?.childApplicability?.[nodeDefUuid] !== false\n}\n\nconst isChildEditable = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child editability is not defined for a node definition, consider it editable\n return node.meta?.cEdit?.[nodeDefUuid] !== false\n}\n\nconst isChildVisible = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child visibility is not defined for a node definition, consider it visible\n return node.meta?.cVis?.[nodeDefUuid] !== false\n}\n\nconst isChildRequired = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child \"required if\" condition is not defined or not met for a node definition, consider it not required\n return node.meta?.cReq?.[nodeDefUuid] === true\n}\n\nconst getChildrenMinOrMaxCount = (params: {\n parentNode: ArenaRecordNode\n nodeDef: NodeDef<any>\n countType: NodeDefCountType\n}): number => {\n const { parentNode, nodeDef, countType } = params\n const countIndex =\n countType === NodeDefCountType.max ? parentNode.meta?.childrenMaxCount : parentNode.meta?.childrenMinCount\n\n const count = countIndex?.[nodeDef.uuid]\n if (!Objects.isEmpty(count)) return count!\n\n // count can be a constant value, specified in the node def min/max count prop\n const nodeDefCount =\n countType === NodeDefCountType.max ? NodeDefs.getMaxCount(nodeDef) : NodeDefs.getMinCount(nodeDef)\n return nodeDefCount ? Number(nodeDefCount) : Number.NaN\n}\n\nconst getChildrenMaxCount = (params: { parentNode: ArenaRecordNode; nodeDef: NodeDef<any> }): number =>\n getChildrenMinOrMaxCount({ ...params, countType: NodeDefCountType.max })\n\nconst getChildrenMinCount = (params: { parentNode: ArenaRecordNode; nodeDef: NodeDef<any> }): number =>\n getChildrenMinOrMaxCount({ ...params, countType: NodeDefCountType.min })\n\nconst getHierarchy = (node: ArenaRecordNode): string[] => [...(node.meta?.h ?? [])]\n\nconst getHierarchyCode = (node: ArenaRecordNode): string[] => [...(node.meta?.hCode ?? [])]\n\nconst mergeNodes = (target: ArenaRecordNode, ...sources: ArenaRecordNode[] | object[]): ArenaRecordNode =>\n Objects.deepMerge(target, ...sources) as unknown as ArenaRecordNode\n\nconst isDefaultValueApplied = (node: ArenaRecordNode): boolean => node?.meta?.defaultValueApplied ?? false\n\nconst isQualifierValueApplied = (node: ArenaRecordNode): boolean => node?.meta?.qualifierValueApplied ?? false\n\nconst isValueBlank = (node: ArenaRecordNode): boolean => Objects.isEmpty(node.value)\n\nconst isValueNotBlank = (node: ArenaRecordNode): boolean => Objects.isNotEmpty(node.value)\n\nconst hasUserInputValue = (node: ArenaRecordNode): boolean =>\n node && !isValueBlank(node) && !isDefaultValueApplied(node) && !isQualifierValueApplied(node)\n\nconst assocChildApplicability = (node: ArenaRecordNode, nodeDefUuid: string, applicable: boolean): ArenaRecordNode => {\n const childApplicability = { ...node.meta?.childApplicability }\n if (!applicable) {\n childApplicability[nodeDefUuid] = applicable\n } else {\n delete childApplicability[nodeDefUuid]\n }\n return {\n ...node,\n meta: { ...node.meta, childApplicability },\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n }\n}\n\nconst dissocChildApplicability = (node: ArenaRecordNode, nodeDefUuid: string) => {\n const childApplicability = { ...node.meta?.childApplicability }\n delete childApplicability[nodeDefUuid]\n return {\n ...node,\n meta: { ...node.meta, childApplicability },\n }\n}\n\ntype MetaBooleanDictionaryProp = 'childApplicability' | 'cEdit' | 'cVis' | 'cReq'\n\nconst updateMetaDictionary = ({\n node,\n nodeDefUuid,\n propName,\n propValue,\n defaultValue = true,\n sideEffect,\n}: {\n node: ArenaRecordNode\n nodeDefUuid: string\n propName: MetaBooleanDictionaryProp\n propValue: boolean\n defaultValue?: boolean\n sideEffect: boolean\n}): ArenaRecordNode => {\n const nodeUpdated = sideEffect ? node : { ...node }\n const metaOriginal = nodeUpdated.meta ?? {}\n const meta = sideEffect ? metaOriginal : { ...metaOriginal }\n const existingDictionary: Dictionary<boolean> = meta[propName] ?? {}\n const dictionary = sideEffect ? existingDictionary : { ...existingDictionary }\n if (propValue === defaultValue) {\n // default value: not stored\n delete dictionary[nodeDefUuid]\n } else {\n dictionary[nodeDefUuid] = propValue\n }\n meta[propName] = dictionary\n nodeUpdated.meta = meta\n nodeUpdated.updated = true\n nodeUpdated.dateModified = Dates.nowFormattedForStorage()\n return nodeUpdated\n}\n\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n options?: MutationOptions\n): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n sideEffect: boolean\n): ArenaRecordNode\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n options?: MutationOptions | boolean\n): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n return updateMetaDictionary({ node, nodeDefUuid, propName: 'cEdit', propValue: editable, sideEffect })\n}\n\nconst assocChildRequired = (\n node: ArenaRecordNode,\n nodeDefUuid: string,\n required: boolean,\n options?: MutationOptions\n): ArenaRecordNode => {\n const { sideEffect = false } = options ?? {}\n return updateMetaDictionary({\n node,\n nodeDefUuid,\n propName: 'cReq',\n propValue: required,\n defaultValue: false,\n sideEffect,\n })\n}\n\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n options?: MutationOptions\n): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n sideEffect: boolean\n): ArenaRecordNode\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n options?: MutationOptions | boolean\n): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n return updateMetaDictionary({ node, nodeDefUuid, propName: 'cVis', propValue: visible, sideEffect })\n}\n\nconst assocChildrenCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n countType: NodeDefCountType\n}): ArenaRecordNode => {\n const { node, nodeDefUuid, count, countType } = params\n const countIndex = {\n ...(countType === NodeDefCountType.max ? node.meta?.childrenMaxCount : node.meta?.childrenMinCount),\n }\n if (Number.isNaN(count)) {\n delete countIndex[nodeDefUuid]\n } else {\n countIndex[nodeDefUuid] = count\n }\n const metaUpdated = { ...node.meta }\n if (countType === NodeDefCountType.max) {\n metaUpdated.childrenMaxCount = countIndex\n } else {\n metaUpdated.childrenMinCount = countIndex\n }\n return {\n ...node,\n meta: metaUpdated,\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n }\n}\n\nconst assocChildrenMaxCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n}): ArenaRecordNode => assocChildrenCount({ ...params, countType: NodeDefCountType.max })\n\nconst assocChildrenMinCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n}): ArenaRecordNode => assocChildrenCount({ ...params, countType: NodeDefCountType.min })\n\nconst clearStatusFlagsInPlace = (node: ArenaRecordNode): ArenaRecordNode => {\n // do not use \"delete\": it would switch the node object to the (much bigger) V8 dictionary mode\n if (node.created !== undefined) node.created = undefined\n if (node.deleted !== undefined) node.deleted = undefined\n if (node.updated !== undefined) node.updated = undefined\n return node\n}\n\nconst omitStatusFlags = (node: ArenaRecordNode): ArenaRecordNode => {\n const { created: _created, deleted: _deleted, updated: _updated, ...nodeCleaned } = node\n return nodeCleaned\n}\n\nconst removeStatusFlags = ({\n node,\n sideEffect = false,\n}: {\n node: ArenaRecordNode\n sideEffect?: boolean\n}): ArenaRecordNode => (sideEffect ? clearStatusFlagsInPlace(node) : omitStatusFlags(node))\n\nfunction assocValue(node: ArenaRecordNode, value: any, options?: MutationOptions): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocValue(node: ArenaRecordNode, value: any, sideEffect: boolean): ArenaRecordNode\nfunction assocValue(node: ArenaRecordNode, value: any, options?: MutationOptions | boolean): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n const nodeUpdated = sideEffect ? node : { ...node }\n nodeUpdated.value = value\n nodeUpdated.updated = true\n nodeUpdated.dateModified = Dates.nowFormattedForStorage()\n if (isDefaultValueApplied(nodeUpdated) || isQualifierValueApplied(nodeUpdated)) {\n // reset defaultValueApplied and qualifierValueApplied flags\n const metaOriginal = nodeUpdated.meta ?? {}\n const meta = sideEffect ? metaOriginal : { ...metaOriginal }\n nodeUpdated.meta = { ...meta, defaultValueApplied: false, qualifierValueApplied: false }\n }\n return nodeUpdated\n}\n\nexport const Nodes = {\n isRoot,\n areEqual,\n isChildApplicable,\n isChildEditable,\n isChildVisible,\n isChildRequired,\n getChildrenMinOrMaxCount,\n getChildrenMaxCount,\n getChildrenMinCount,\n getHierarchy,\n getHierarchyCode,\n isDefaultValueApplied,\n isQualifierValueApplied,\n isValueBlank,\n isValueNotBlank,\n hasUserInputValue,\n // update\n assocChildApplicability,\n dissocChildApplicability,\n assocChildEditable,\n assocChildVisible,\n assocChildRequired,\n assocChildrenCount,\n assocChildrenMaxCount,\n assocChildrenMinCount,\n mergeNodes,\n removeStatusFlags,\n assocValue,\n}\n"]}
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/node/nodes.ts"],"names":[],"mappings":"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","sourcesContent":["import { Dictionary } from '../common'\nimport { NodeDef, NodeDefCountType, NodeDefs } from '../nodeDef'\nimport { Dates, Objects } from '../utils'\nimport { MutationOptions, toMutationOptions } from '../utils/mutationOptions'\nimport { ArenaRecordNode } from './node'\n\nconst isRoot = (node: ArenaRecordNode): boolean => !node.parentUuid\n\nconst areEqual = (nodeA: ArenaRecordNode, nodeB: ArenaRecordNode): boolean => nodeA.uuid === nodeB.uuid\n\nconst isChildApplicable = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child applicability is not defined for a node definition, consider it applicable\n return node.meta?.childApplicability?.[nodeDefUuid] !== false\n}\n\nconst isChildEditable = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child editability is not defined for a node definition, consider it editable\n return node.meta?.cEdit?.[nodeDefUuid] !== false\n}\n\nconst isChildVisible = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child visibility is not defined for a node definition, consider it visible\n return node.meta?.cVis?.[nodeDefUuid] !== false\n}\n\nconst isChildRequired = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child \"required if\" condition is not defined or not met for a node definition, consider it not required\n return node.meta?.cReq?.[nodeDefUuid] === true\n}\n\nconst getChildrenMinOrMaxCount = (params: {\n parentNode: ArenaRecordNode\n nodeDef: NodeDef<any>\n countType: NodeDefCountType\n}): number => {\n const { parentNode, nodeDef, countType } = params\n const countIndex =\n countType === NodeDefCountType.max ? parentNode.meta?.childrenMaxCount : parentNode.meta?.childrenMinCount\n\n const count = countIndex?.[nodeDef.uuid]\n if (!Objects.isEmpty(count)) return count!\n\n // count can be a constant value, specified in the node def min/max count prop\n const nodeDefCount =\n countType === NodeDefCountType.max ? NodeDefs.getMaxCount(nodeDef) : NodeDefs.getMinCount(nodeDef)\n // count expressions (array) are evaluated into the parent node meta (childrenMinCount/childrenMaxCount)\n return nodeDefCount && !Array.isArray(nodeDefCount) ? Number(nodeDefCount) : Number.NaN\n}\n\nconst getChildrenMaxCount = (params: { parentNode: ArenaRecordNode; nodeDef: NodeDef<any> }): number =>\n getChildrenMinOrMaxCount({ ...params, countType: NodeDefCountType.max })\n\nconst getChildrenMinCount = (params: { parentNode: ArenaRecordNode; nodeDef: NodeDef<any> }): number =>\n getChildrenMinOrMaxCount({ ...params, countType: NodeDefCountType.min })\n\nconst getHierarchy = (node: ArenaRecordNode): string[] => [...(node.meta?.h ?? [])]\n\nconst getHierarchyCode = (node: ArenaRecordNode): string[] => [...(node.meta?.hCode ?? [])]\n\nconst mergeNodes = (target: ArenaRecordNode, ...sources: ArenaRecordNode[] | object[]): ArenaRecordNode =>\n Objects.deepMerge(target, ...sources) as unknown as ArenaRecordNode\n\nconst isDefaultValueApplied = (node: ArenaRecordNode): boolean => node?.meta?.defaultValueApplied ?? false\n\nconst isQualifierValueApplied = (node: ArenaRecordNode): boolean => node?.meta?.qualifierValueApplied ?? false\n\nconst isValueBlank = (node: ArenaRecordNode): boolean => Objects.isEmpty(node.value)\n\nconst isValueNotBlank = (node: ArenaRecordNode): boolean => Objects.isNotEmpty(node.value)\n\nconst hasUserInputValue = (node: ArenaRecordNode): boolean =>\n node && !isValueBlank(node) && !isDefaultValueApplied(node) && !isQualifierValueApplied(node)\n\nconst assocChildApplicability = (node: ArenaRecordNode, nodeDefUuid: string, applicable: boolean): ArenaRecordNode => {\n const childApplicability = { ...node.meta?.childApplicability }\n if (!applicable) {\n childApplicability[nodeDefUuid] = applicable\n } else {\n delete childApplicability[nodeDefUuid]\n }\n return {\n ...node,\n meta: { ...node.meta, childApplicability },\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n }\n}\n\nconst dissocChildApplicability = (node: ArenaRecordNode, nodeDefUuid: string) => {\n const childApplicability = { ...node.meta?.childApplicability }\n delete childApplicability[nodeDefUuid]\n return {\n ...node,\n meta: { ...node.meta, childApplicability },\n }\n}\n\ntype MetaBooleanDictionaryProp = 'childApplicability' | 'cEdit' | 'cVis' | 'cReq'\n\nconst updateMetaDictionary = ({\n node,\n nodeDefUuid,\n propName,\n propValue,\n defaultValue = true,\n sideEffect,\n}: {\n node: ArenaRecordNode\n nodeDefUuid: string\n propName: MetaBooleanDictionaryProp\n propValue: boolean\n defaultValue?: boolean\n sideEffect: boolean\n}): ArenaRecordNode => {\n const nodeUpdated = sideEffect ? node : { ...node }\n const metaOriginal = nodeUpdated.meta ?? {}\n const meta = sideEffect ? metaOriginal : { ...metaOriginal }\n const existingDictionary: Dictionary<boolean> = meta[propName] ?? {}\n const dictionary = sideEffect ? existingDictionary : { ...existingDictionary }\n if (propValue === defaultValue) {\n // default value: not stored\n delete dictionary[nodeDefUuid]\n } else {\n dictionary[nodeDefUuid] = propValue\n }\n meta[propName] = dictionary\n nodeUpdated.meta = meta\n nodeUpdated.updated = true\n nodeUpdated.dateModified = Dates.nowFormattedForStorage()\n return nodeUpdated\n}\n\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n options?: MutationOptions\n): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n sideEffect: boolean\n): ArenaRecordNode\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n options?: MutationOptions | boolean\n): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n return updateMetaDictionary({ node, nodeDefUuid, propName: 'cEdit', propValue: editable, sideEffect })\n}\n\nconst assocChildRequired = (\n node: ArenaRecordNode,\n nodeDefUuid: string,\n required: boolean,\n options?: MutationOptions\n): ArenaRecordNode => {\n const { sideEffect = false } = options ?? {}\n return updateMetaDictionary({\n node,\n nodeDefUuid,\n propName: 'cReq',\n propValue: required,\n defaultValue: false,\n sideEffect,\n })\n}\n\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n options?: MutationOptions\n): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n sideEffect: boolean\n): ArenaRecordNode\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n options?: MutationOptions | boolean\n): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n return updateMetaDictionary({ node, nodeDefUuid, propName: 'cVis', propValue: visible, sideEffect })\n}\n\nconst assocChildrenCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n countType: NodeDefCountType\n}): ArenaRecordNode => {\n const { node, nodeDefUuid, count, countType } = params\n const countIndex = {\n ...(countType === NodeDefCountType.max ? node.meta?.childrenMaxCount : node.meta?.childrenMinCount),\n }\n if (Number.isNaN(count)) {\n delete countIndex[nodeDefUuid]\n } else {\n countIndex[nodeDefUuid] = count\n }\n const metaUpdated = { ...node.meta }\n if (countType === NodeDefCountType.max) {\n metaUpdated.childrenMaxCount = countIndex\n } else {\n metaUpdated.childrenMinCount = countIndex\n }\n return {\n ...node,\n meta: metaUpdated,\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n }\n}\n\nconst assocChildrenMaxCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n}): ArenaRecordNode => assocChildrenCount({ ...params, countType: NodeDefCountType.max })\n\nconst assocChildrenMinCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n}): ArenaRecordNode => assocChildrenCount({ ...params, countType: NodeDefCountType.min })\n\nconst clearStatusFlagsInPlace = (node: ArenaRecordNode): ArenaRecordNode => {\n // do not use \"delete\": it would switch the node object to the (much bigger) V8 dictionary mode\n if (node.created !== undefined) node.created = undefined\n if (node.deleted !== undefined) node.deleted = undefined\n if (node.updated !== undefined) node.updated = undefined\n return node\n}\n\nconst omitStatusFlags = (node: ArenaRecordNode): ArenaRecordNode => {\n const { created: _created, deleted: _deleted, updated: _updated, ...nodeCleaned } = node\n return nodeCleaned\n}\n\nconst removeStatusFlags = ({\n node,\n sideEffect = false,\n}: {\n node: ArenaRecordNode\n sideEffect?: boolean\n}): ArenaRecordNode => (sideEffect ? clearStatusFlagsInPlace(node) : omitStatusFlags(node))\n\nfunction assocValue(node: ArenaRecordNode, value: any, options?: MutationOptions): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocValue(node: ArenaRecordNode, value: any, sideEffect: boolean): ArenaRecordNode\nfunction assocValue(node: ArenaRecordNode, value: any, options?: MutationOptions | boolean): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n const nodeUpdated = sideEffect ? node : { ...node }\n nodeUpdated.value = value\n nodeUpdated.updated = true\n nodeUpdated.dateModified = Dates.nowFormattedForStorage()\n if (isDefaultValueApplied(nodeUpdated) || isQualifierValueApplied(nodeUpdated)) {\n // reset defaultValueApplied and qualifierValueApplied flags\n const metaOriginal = nodeUpdated.meta ?? {}\n const meta = sideEffect ? metaOriginal : { ...metaOriginal }\n nodeUpdated.meta = { ...meta, defaultValueApplied: false, qualifierValueApplied: false }\n }\n return nodeUpdated\n}\n\nexport const Nodes = {\n isRoot,\n areEqual,\n isChildApplicable,\n isChildEditable,\n isChildVisible,\n isChildRequired,\n getChildrenMinOrMaxCount,\n getChildrenMaxCount,\n getChildrenMinCount,\n getHierarchy,\n getHierarchyCode,\n isDefaultValueApplied,\n isQualifierValueApplied,\n isValueBlank,\n isValueNotBlank,\n hasUserInputValue,\n // update\n assocChildApplicability,\n dissocChildApplicability,\n assocChildEditable,\n assocChildVisible,\n assocChildRequired,\n assocChildrenCount,\n assocChildrenMaxCount,\n assocChildrenMinCount,\n mergeNodes,\n removeStatusFlags,\n assocValue,\n}\n"]}
@@ -78,7 +78,7 @@ const fix = (params) => {
78
78
  const fixNodeDefs = (params) => {
79
79
  var _a;
80
80
  const { nodeDefs, cycles } = params;
81
- const nodeDefsResult = {};
81
+ const nodeDefsResult = Object.assign({}, nodeDefs);
82
82
  const updatedNodeDefs = {};
83
83
  for (const cycle of cycles) {
84
84
  for (const nodeDef of Object.values(nodeDefs)) {
@@ -1 +1 @@
1
- {"version":3,"file":"nodeDefsFixer.js","sourceRoot":"","sources":["../../../src/survey/nodeDefsFixer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,EAAsC,QAAQ,EAAE,MAAM,YAAY,CAAA;AAEzE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAsBlC,MAAM,yBAAyB,GAAG,CAAC,MAAuD,EAAY,EAAE;;IACtG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IACpC,MAAM,SAAS,GAAG,EAAE,CAAA;IACpB,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7C,IAAI,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAA;IAC1C,OAAO,iBAAiB,EAAE,CAAC;QACzB,IAAI,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,2BAA2B,EAAE;gBACzE,WAAW,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,IAAI;gBAChC,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,UAAU,EAAE,iBAAiB;aAC9B,CAAC,CAAA;QACJ,CAAC;QACD,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC1C,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QACpC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAA;QACrD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,IAAI,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC5D,WAAW,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,IAAI;gBAChC,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,UAAU,EAAE,iBAAiB;aAC9B,CAAC,CAAA;QACJ,CAAC;QACD,iBAAiB,GAAG,iBAAiB,CAAC,UAAU,CAAA;IAClD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAwB,EAAuB,EAAE;IACrE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAChD,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;IAC5E,yHAAyH;IACzH,OAAO,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC7E,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,CAAA;AACtG,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CACpB,MAAmF,EAC9D,EAAE;IACvB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAEhE,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAErD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAA;IAE/C,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAEzC,MAAM,SAAS,GAAG,OAAO,iCAAM,MAAM,KAAE,OAAO,IAAG,CAAA;IAEjD,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;QAAE,OAAO,IAAI,CAAA;IAEpD,OAAO,OAAO,CAAC,SAAS,CAAC;QACvB,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,SAAS;QAChB,UAAU;KACX,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,MAAwB,EAAuB,EAAE,CACzE,aAAa,iCACR,MAAM,KACT,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,CACtD,aAA0B,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAA;QACvC,OAAO,CACL,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,MAAK,MAAM,CAAC,OAAO,CAAC,IAAI;YAC5C,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,QAAyB,CAAC,CAC9D,CAAA;IACH,CAAC,CAAC,IACJ,CAAA;AAEJ,MAAM,iBAAiB,GAAG,CAAC,MAAwB,EAAuB,EAAE,CAC1E,aAAa,iCACR,MAAM,KACT,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CACvD,cAAiD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACjE,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAA;QACvC,OAAO,CACL,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,MAAK,MAAM,CAAC,OAAO,CAAC,IAAI;YAC5C,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,QAAyB,CAAC,CAAC,CACjG,CAAA;IACH,CAAC,CAAC,IACJ,CAAA;AAEJ,MAAM,GAAG,GAAG,CAAC,MAAwB,EAAuB,EAAE;;IAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAC1B,IAAI,YAAY,GAAwB,YAAY,CAAC,MAAM,CAAC,CAAA;IAC5D,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,YAAY,SAAG,gBAAgB,iCAAM,MAAM,KAAE,OAAO,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,OAAO,IAAG,mCAAI,YAAY,CAAA;QAChG,YAAY,SAAG,iBAAiB,iCAAM,MAAM,KAAE,OAAO,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,OAAO,IAAG,mCAAI,YAAY,CAAA;IACnG,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,MAAyB,EAAyD,EAAE;;IACvG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACnC,MAAM,cAAc,GAAe,EAAE,CAAA;IACrC,MAAM,eAAe,GAAe,EAAE,CAAA;IAEtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,MAAM,YAAY,SAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAI,OAAO,CAAA;YAC5D,MAAM,YAAY,GAAG,GAAG,iCAAM,MAAM,KAAE,KAAK,EAAE,OAAO,EAAE,YAAY,IAAG,CAAA;YACrE,IAAI,YAAY,EAAE,CAAC;gBACjB,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAA;YAC9C,CAAC;YACD,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,YAAY,CAAA;QAC7D,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,cAAc;QACxB,eAAe;KAChB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;CACZ,CAAA","sourcesContent":["import { SystemError, SystemErrorKeys } from '../error'\nimport { NodeDef, NodeDefEntity, NodeDefMap, NodeDefs } from '../nodeDef'\nimport { NodeDefEntityLayoutChildItem } from '../nodeDef/types/entity'\nimport { Objects } from '../utils'\nimport { MutationOptions } from '../utils/mutationOptions'\n\ntype NodeDefsFixParams = MutationOptions & {\n nodeDefs: NodeDefMap\n cycles: string[]\n}\n\ntype NodeDefsInCycleFixParams = NodeDefsFixParams & {\n cycle: string\n}\n\ntype NodeDefFixParams = NodeDefsInCycleFixParams & {\n nodeDef: NodeDef<any>\n}\n\ntype LayoutPropFixParams = NodeDefFixParams & {\n propName: string\n}\n\ntype LayoutPropFixerFnParams = LayoutPropFixParams & { propOld: any }\n\nconst calculateNodeDefHierarchy = (params: { nodeDef: NodeDef<any>; nodeDefs: NodeDefMap }): string[] => {\n const { nodeDef, nodeDefs } = params\n const hierarchy = []\n const visitedNodeDefUuids = new Set<string>()\n let currentParentUuid = nodeDef.parentUuid\n while (currentParentUuid) {\n if (visitedNodeDefUuids.has(currentParentUuid)) {\n throw new SystemError(SystemErrorKeys.nodeDef.hierarchyCircularDependency, {\n nodeDefName: nodeDef.props?.name,\n nodeDefUuid: nodeDef.uuid,\n parentUuid: currentParentUuid,\n })\n }\n visitedNodeDefUuids.add(currentParentUuid)\n hierarchy.unshift(currentParentUuid)\n const currentParentNode = nodeDefs[currentParentUuid]\n if (!currentParentNode) {\n throw new SystemError(SystemErrorKeys.nodeDef.parentNotFound, {\n nodeDefName: nodeDef.props?.name,\n nodeDefUuid: nodeDef.uuid,\n parentUuid: currentParentUuid,\n })\n }\n currentParentUuid = currentParentNode.parentUuid\n }\n return hierarchy\n}\n\nconst fixHierarchy = (params: NodeDefFixParams): NodeDef<any> | null => {\n const { nodeDefs, nodeDef, sideEffect } = params\n const calculatedHierarchy = calculateNodeDefHierarchy({ nodeDefs, nodeDef })\n // compare the whole hierarchy: a node def moved to another parent at the same depth has a hierarchy with the same length\n return Objects.isEqual(calculatedHierarchy, NodeDefs.getMetaHierarchy(nodeDef))\n ? null\n : Objects.assocPath({ obj: nodeDef, path: ['meta', 'h'], value: calculatedHierarchy, sideEffect })\n}\n\nconst fixLayoutProp = (\n params: LayoutPropFixParams & { fixerFn: (params: LayoutPropFixerFnParams) => any }\n): NodeDef<any> | null => {\n const { cycle, nodeDef, propName, sideEffect, fixerFn } = params\n\n const propPath = ['props', 'layout', cycle, propName]\n\n const propOld = Objects.path(propPath)(nodeDef)\n\n if (Objects.isEmpty(propOld)) return null\n\n const propFixed = fixerFn({ ...params, propOld })\n\n if (Objects.isEqual(propOld, propFixed)) return null\n\n return Objects.assocPath({\n obj: nodeDef,\n path: propPath,\n value: propFixed,\n sideEffect,\n })\n}\n\nconst fixIndexChildren = (params: NodeDefFixParams): NodeDef<any> | null =>\n fixLayoutProp({\n ...params,\n propName: 'indexChildren',\n fixerFn: ({ nodeDefs, cycle, propOld: indexChildren }) =>\n (indexChildren as string[]).filter((childDefUuid) => {\n const childDef = nodeDefs[childDefUuid]\n return (\n childDef?.parentUuid === params.nodeDef.uuid &&\n NodeDefs.isEntity(childDef) &&\n NodeDefs.isDisplayInOwnPage(cycle)(childDef as NodeDefEntity)\n )\n }),\n })\n\nconst fixLayoutChildren = (params: NodeDefFixParams): NodeDef<any> | null =>\n fixLayoutProp({\n ...params,\n propName: 'layoutChildren',\n fixerFn: ({ nodeDefs, cycle, propOld: layoutChildren }) =>\n (layoutChildren as NodeDefEntityLayoutChildItem[]).filter((item) => {\n const childDefUuid = typeof item === 'string' ? item : item.i\n const childDef = nodeDefs[childDefUuid]\n return (\n childDef?.parentUuid === params.nodeDef.uuid &&\n (!NodeDefs.isEntity(childDef) || !NodeDefs.isDisplayInOwnPage(cycle)(childDef as NodeDefEntity))\n )\n }),\n })\n\nconst fix = (params: NodeDefFixParams): NodeDef<any> | null => {\n const { nodeDef } = params\n let nodeDefFixed: NodeDef<any> | null = fixHierarchy(params)\n if (NodeDefs.isEntity(nodeDef)) {\n nodeDefFixed = fixIndexChildren({ ...params, nodeDef: nodeDefFixed ?? nodeDef }) ?? nodeDefFixed\n nodeDefFixed = fixLayoutChildren({ ...params, nodeDef: nodeDefFixed ?? nodeDef }) ?? nodeDefFixed\n }\n return nodeDefFixed\n}\n\nconst fixNodeDefs = (params: NodeDefsFixParams): { nodeDefs: NodeDefMap; updatedNodeDefs: NodeDefMap } => {\n const { nodeDefs, cycles } = params\n const nodeDefsResult: NodeDefMap = {}\n const updatedNodeDefs: NodeDefMap = {}\n\n for (const cycle of cycles) {\n for (const nodeDef of Object.values(nodeDefs)) {\n const nodeDefToFix = nodeDefsResult[nodeDef.uuid] ?? nodeDef\n const fixedNodeDef = fix({ ...params, cycle, nodeDef: nodeDefToFix })\n if (fixedNodeDef) {\n updatedNodeDefs[nodeDef.uuid] = fixedNodeDef\n }\n nodeDefsResult[nodeDef.uuid] = fixedNodeDef ?? nodeDefToFix\n }\n }\n return {\n nodeDefs: nodeDefsResult,\n updatedNodeDefs,\n }\n}\n\nexport const NodeDefsFixer = {\n fixNodeDefs,\n}\n"]}
1
+ {"version":3,"file":"nodeDefsFixer.js","sourceRoot":"","sources":["../../../src/survey/nodeDefsFixer.ts"],"names":[],"mappings":"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","sourcesContent":["import { SystemError, SystemErrorKeys } from '../error'\nimport { NodeDef, NodeDefEntity, NodeDefMap, NodeDefs } from '../nodeDef'\nimport { NodeDefEntityLayoutChildItem } from '../nodeDef/types/entity'\nimport { Objects } from '../utils'\nimport { MutationOptions } from '../utils/mutationOptions'\n\ntype NodeDefsFixParams = MutationOptions & {\n nodeDefs: NodeDefMap\n cycles: string[]\n}\n\ntype NodeDefsInCycleFixParams = NodeDefsFixParams & {\n cycle: string\n}\n\ntype NodeDefFixParams = NodeDefsInCycleFixParams & {\n nodeDef: NodeDef<any>\n}\n\ntype LayoutPropFixParams = NodeDefFixParams & {\n propName: string\n}\n\ntype LayoutPropFixerFnParams = LayoutPropFixParams & { propOld: any }\n\nconst calculateNodeDefHierarchy = (params: { nodeDef: NodeDef<any>; nodeDefs: NodeDefMap }): string[] => {\n const { nodeDef, nodeDefs } = params\n const hierarchy = []\n const visitedNodeDefUuids = new Set<string>()\n let currentParentUuid = nodeDef.parentUuid\n while (currentParentUuid) {\n if (visitedNodeDefUuids.has(currentParentUuid)) {\n throw new SystemError(SystemErrorKeys.nodeDef.hierarchyCircularDependency, {\n nodeDefName: nodeDef.props?.name,\n nodeDefUuid: nodeDef.uuid,\n parentUuid: currentParentUuid,\n })\n }\n visitedNodeDefUuids.add(currentParentUuid)\n hierarchy.unshift(currentParentUuid)\n const currentParentNode = nodeDefs[currentParentUuid]\n if (!currentParentNode) {\n throw new SystemError(SystemErrorKeys.nodeDef.parentNotFound, {\n nodeDefName: nodeDef.props?.name,\n nodeDefUuid: nodeDef.uuid,\n parentUuid: currentParentUuid,\n })\n }\n currentParentUuid = currentParentNode.parentUuid\n }\n return hierarchy\n}\n\nconst fixHierarchy = (params: NodeDefFixParams): NodeDef<any> | null => {\n const { nodeDefs, nodeDef, sideEffect } = params\n const calculatedHierarchy = calculateNodeDefHierarchy({ nodeDefs, nodeDef })\n // compare the whole hierarchy: a node def moved to another parent at the same depth has a hierarchy with the same length\n return Objects.isEqual(calculatedHierarchy, NodeDefs.getMetaHierarchy(nodeDef))\n ? null\n : Objects.assocPath({ obj: nodeDef, path: ['meta', 'h'], value: calculatedHierarchy, sideEffect })\n}\n\nconst fixLayoutProp = (\n params: LayoutPropFixParams & { fixerFn: (params: LayoutPropFixerFnParams) => any }\n): NodeDef<any> | null => {\n const { cycle, nodeDef, propName, sideEffect, fixerFn } = params\n\n const propPath = ['props', 'layout', cycle, propName]\n\n const propOld = Objects.path(propPath)(nodeDef)\n\n if (Objects.isEmpty(propOld)) return null\n\n const propFixed = fixerFn({ ...params, propOld })\n\n if (Objects.isEqual(propOld, propFixed)) return null\n\n return Objects.assocPath({\n obj: nodeDef,\n path: propPath,\n value: propFixed,\n sideEffect,\n })\n}\n\nconst fixIndexChildren = (params: NodeDefFixParams): NodeDef<any> | null =>\n fixLayoutProp({\n ...params,\n propName: 'indexChildren',\n fixerFn: ({ nodeDefs, cycle, propOld: indexChildren }) =>\n (indexChildren as string[]).filter((childDefUuid) => {\n const childDef = nodeDefs[childDefUuid]\n return (\n childDef?.parentUuid === params.nodeDef.uuid &&\n NodeDefs.isEntity(childDef) &&\n NodeDefs.isDisplayInOwnPage(cycle)(childDef as NodeDefEntity)\n )\n }),\n })\n\nconst fixLayoutChildren = (params: NodeDefFixParams): NodeDef<any> | null =>\n fixLayoutProp({\n ...params,\n propName: 'layoutChildren',\n fixerFn: ({ nodeDefs, cycle, propOld: layoutChildren }) =>\n (layoutChildren as NodeDefEntityLayoutChildItem[]).filter((item) => {\n const childDefUuid = typeof item === 'string' ? item : item.i\n const childDef = nodeDefs[childDefUuid]\n return (\n childDef?.parentUuid === params.nodeDef.uuid &&\n (!NodeDefs.isEntity(childDef) || !NodeDefs.isDisplayInOwnPage(cycle)(childDef as NodeDefEntity))\n )\n }),\n })\n\nconst fix = (params: NodeDefFixParams): NodeDef<any> | null => {\n const { nodeDef } = params\n let nodeDefFixed: NodeDef<any> | null = fixHierarchy(params)\n if (NodeDefs.isEntity(nodeDef)) {\n nodeDefFixed = fixIndexChildren({ ...params, nodeDef: nodeDefFixed ?? nodeDef }) ?? nodeDefFixed\n nodeDefFixed = fixLayoutChildren({ ...params, nodeDef: nodeDefFixed ?? nodeDef }) ?? nodeDefFixed\n }\n return nodeDefFixed\n}\n\nconst fixNodeDefs = (params: NodeDefsFixParams): { nodeDefs: NodeDefMap; updatedNodeDefs: NodeDefMap } => {\n const { nodeDefs, cycles } = params\n const nodeDefsResult: NodeDefMap = { ...nodeDefs }\n const updatedNodeDefs: NodeDefMap = {}\n\n for (const cycle of cycles) {\n for (const nodeDef of Object.values(nodeDefs)) {\n const nodeDefToFix = nodeDefsResult[nodeDef.uuid] ?? nodeDef\n const fixedNodeDef = fix({ ...params, cycle, nodeDef: nodeDefToFix })\n if (fixedNodeDef) {\n updatedNodeDefs[nodeDef.uuid] = fixedNodeDef\n }\n nodeDefsResult[nodeDef.uuid] = fixedNodeDef ?? nodeDefToFix\n }\n }\n return {\n nodeDefs: nodeDefsResult,\n updatedNodeDefs,\n }\n}\n\nexport const NodeDefsFixer = {\n fixNodeDefs,\n}\n"]}
@@ -46,7 +46,8 @@ const getChildrenMinOrMaxCount = (params) => {
46
46
  return count;
47
47
  // count can be a constant value, specified in the node def min/max count prop
48
48
  const nodeDefCount = countType === nodeDef_1.NodeDefCountType.max ? nodeDef_1.NodeDefs.getMaxCount(nodeDef) : nodeDef_1.NodeDefs.getMinCount(nodeDef);
49
- return nodeDefCount ? Number(nodeDefCount) : Number.NaN;
49
+ // count expressions (array) are evaluated into the parent node meta (childrenMinCount/childrenMaxCount)
50
+ return nodeDefCount && !Array.isArray(nodeDefCount) ? Number(nodeDefCount) : Number.NaN;
50
51
  };
51
52
  const getChildrenMaxCount = (params) => getChildrenMinOrMaxCount(Object.assign(Object.assign({}, params), { countType: nodeDef_1.NodeDefCountType.max }));
52
53
  const getChildrenMinCount = (params) => getChildrenMinOrMaxCount(Object.assign(Object.assign({}, params), { countType: nodeDef_1.NodeDefCountType.min }));
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/node/nodes.ts"],"names":[],"mappings":"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","sourcesContent":["import { Dictionary } from '../common'\nimport { NodeDef, NodeDefCountType, NodeDefs } from '../nodeDef'\nimport { Dates, Objects } from '../utils'\nimport { MutationOptions, toMutationOptions } from '../utils/mutationOptions'\nimport { ArenaRecordNode } from './node'\n\nconst isRoot = (node: ArenaRecordNode): boolean => !node.parentUuid\n\nconst areEqual = (nodeA: ArenaRecordNode, nodeB: ArenaRecordNode): boolean => nodeA.uuid === nodeB.uuid\n\nconst isChildApplicable = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child applicability is not defined for a node definition, consider it applicable\n return node.meta?.childApplicability?.[nodeDefUuid] !== false\n}\n\nconst isChildEditable = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child editability is not defined for a node definition, consider it editable\n return node.meta?.cEdit?.[nodeDefUuid] !== false\n}\n\nconst isChildVisible = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child visibility is not defined for a node definition, consider it visible\n return node.meta?.cVis?.[nodeDefUuid] !== false\n}\n\nconst isChildRequired = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child \"required if\" condition is not defined or not met for a node definition, consider it not required\n return node.meta?.cReq?.[nodeDefUuid] === true\n}\n\nconst getChildrenMinOrMaxCount = (params: {\n parentNode: ArenaRecordNode\n nodeDef: NodeDef<any>\n countType: NodeDefCountType\n}): number => {\n const { parentNode, nodeDef, countType } = params\n const countIndex =\n countType === NodeDefCountType.max ? parentNode.meta?.childrenMaxCount : parentNode.meta?.childrenMinCount\n\n const count = countIndex?.[nodeDef.uuid]\n if (!Objects.isEmpty(count)) return count!\n\n // count can be a constant value, specified in the node def min/max count prop\n const nodeDefCount =\n countType === NodeDefCountType.max ? NodeDefs.getMaxCount(nodeDef) : NodeDefs.getMinCount(nodeDef)\n return nodeDefCount ? Number(nodeDefCount) : Number.NaN\n}\n\nconst getChildrenMaxCount = (params: { parentNode: ArenaRecordNode; nodeDef: NodeDef<any> }): number =>\n getChildrenMinOrMaxCount({ ...params, countType: NodeDefCountType.max })\n\nconst getChildrenMinCount = (params: { parentNode: ArenaRecordNode; nodeDef: NodeDef<any> }): number =>\n getChildrenMinOrMaxCount({ ...params, countType: NodeDefCountType.min })\n\nconst getHierarchy = (node: ArenaRecordNode): string[] => [...(node.meta?.h ?? [])]\n\nconst getHierarchyCode = (node: ArenaRecordNode): string[] => [...(node.meta?.hCode ?? [])]\n\nconst mergeNodes = (target: ArenaRecordNode, ...sources: ArenaRecordNode[] | object[]): ArenaRecordNode =>\n Objects.deepMerge(target, ...sources) as unknown as ArenaRecordNode\n\nconst isDefaultValueApplied = (node: ArenaRecordNode): boolean => node?.meta?.defaultValueApplied ?? false\n\nconst isQualifierValueApplied = (node: ArenaRecordNode): boolean => node?.meta?.qualifierValueApplied ?? false\n\nconst isValueBlank = (node: ArenaRecordNode): boolean => Objects.isEmpty(node.value)\n\nconst isValueNotBlank = (node: ArenaRecordNode): boolean => Objects.isNotEmpty(node.value)\n\nconst hasUserInputValue = (node: ArenaRecordNode): boolean =>\n node && !isValueBlank(node) && !isDefaultValueApplied(node) && !isQualifierValueApplied(node)\n\nconst assocChildApplicability = (node: ArenaRecordNode, nodeDefUuid: string, applicable: boolean): ArenaRecordNode => {\n const childApplicability = { ...node.meta?.childApplicability }\n if (!applicable) {\n childApplicability[nodeDefUuid] = applicable\n } else {\n delete childApplicability[nodeDefUuid]\n }\n return {\n ...node,\n meta: { ...node.meta, childApplicability },\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n }\n}\n\nconst dissocChildApplicability = (node: ArenaRecordNode, nodeDefUuid: string) => {\n const childApplicability = { ...node.meta?.childApplicability }\n delete childApplicability[nodeDefUuid]\n return {\n ...node,\n meta: { ...node.meta, childApplicability },\n }\n}\n\ntype MetaBooleanDictionaryProp = 'childApplicability' | 'cEdit' | 'cVis' | 'cReq'\n\nconst updateMetaDictionary = ({\n node,\n nodeDefUuid,\n propName,\n propValue,\n defaultValue = true,\n sideEffect,\n}: {\n node: ArenaRecordNode\n nodeDefUuid: string\n propName: MetaBooleanDictionaryProp\n propValue: boolean\n defaultValue?: boolean\n sideEffect: boolean\n}): ArenaRecordNode => {\n const nodeUpdated = sideEffect ? node : { ...node }\n const metaOriginal = nodeUpdated.meta ?? {}\n const meta = sideEffect ? metaOriginal : { ...metaOriginal }\n const existingDictionary: Dictionary<boolean> = meta[propName] ?? {}\n const dictionary = sideEffect ? existingDictionary : { ...existingDictionary }\n if (propValue === defaultValue) {\n // default value: not stored\n delete dictionary[nodeDefUuid]\n } else {\n dictionary[nodeDefUuid] = propValue\n }\n meta[propName] = dictionary\n nodeUpdated.meta = meta\n nodeUpdated.updated = true\n nodeUpdated.dateModified = Dates.nowFormattedForStorage()\n return nodeUpdated\n}\n\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n options?: MutationOptions\n): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n sideEffect: boolean\n): ArenaRecordNode\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n options?: MutationOptions | boolean\n): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n return updateMetaDictionary({ node, nodeDefUuid, propName: 'cEdit', propValue: editable, sideEffect })\n}\n\nconst assocChildRequired = (\n node: ArenaRecordNode,\n nodeDefUuid: string,\n required: boolean,\n options?: MutationOptions\n): ArenaRecordNode => {\n const { sideEffect = false } = options ?? {}\n return updateMetaDictionary({\n node,\n nodeDefUuid,\n propName: 'cReq',\n propValue: required,\n defaultValue: false,\n sideEffect,\n })\n}\n\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n options?: MutationOptions\n): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n sideEffect: boolean\n): ArenaRecordNode\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n options?: MutationOptions | boolean\n): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n return updateMetaDictionary({ node, nodeDefUuid, propName: 'cVis', propValue: visible, sideEffect })\n}\n\nconst assocChildrenCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n countType: NodeDefCountType\n}): ArenaRecordNode => {\n const { node, nodeDefUuid, count, countType } = params\n const countIndex = {\n ...(countType === NodeDefCountType.max ? node.meta?.childrenMaxCount : node.meta?.childrenMinCount),\n }\n if (Number.isNaN(count)) {\n delete countIndex[nodeDefUuid]\n } else {\n countIndex[nodeDefUuid] = count\n }\n const metaUpdated = { ...node.meta }\n if (countType === NodeDefCountType.max) {\n metaUpdated.childrenMaxCount = countIndex\n } else {\n metaUpdated.childrenMinCount = countIndex\n }\n return {\n ...node,\n meta: metaUpdated,\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n }\n}\n\nconst assocChildrenMaxCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n}): ArenaRecordNode => assocChildrenCount({ ...params, countType: NodeDefCountType.max })\n\nconst assocChildrenMinCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n}): ArenaRecordNode => assocChildrenCount({ ...params, countType: NodeDefCountType.min })\n\nconst clearStatusFlagsInPlace = (node: ArenaRecordNode): ArenaRecordNode => {\n // do not use \"delete\": it would switch the node object to the (much bigger) V8 dictionary mode\n if (node.created !== undefined) node.created = undefined\n if (node.deleted !== undefined) node.deleted = undefined\n if (node.updated !== undefined) node.updated = undefined\n return node\n}\n\nconst omitStatusFlags = (node: ArenaRecordNode): ArenaRecordNode => {\n const { created: _created, deleted: _deleted, updated: _updated, ...nodeCleaned } = node\n return nodeCleaned\n}\n\nconst removeStatusFlags = ({\n node,\n sideEffect = false,\n}: {\n node: ArenaRecordNode\n sideEffect?: boolean\n}): ArenaRecordNode => (sideEffect ? clearStatusFlagsInPlace(node) : omitStatusFlags(node))\n\nfunction assocValue(node: ArenaRecordNode, value: any, options?: MutationOptions): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocValue(node: ArenaRecordNode, value: any, sideEffect: boolean): ArenaRecordNode\nfunction assocValue(node: ArenaRecordNode, value: any, options?: MutationOptions | boolean): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n const nodeUpdated = sideEffect ? node : { ...node }\n nodeUpdated.value = value\n nodeUpdated.updated = true\n nodeUpdated.dateModified = Dates.nowFormattedForStorage()\n if (isDefaultValueApplied(nodeUpdated) || isQualifierValueApplied(nodeUpdated)) {\n // reset defaultValueApplied and qualifierValueApplied flags\n const metaOriginal = nodeUpdated.meta ?? {}\n const meta = sideEffect ? metaOriginal : { ...metaOriginal }\n nodeUpdated.meta = { ...meta, defaultValueApplied: false, qualifierValueApplied: false }\n }\n return nodeUpdated\n}\n\nexport const Nodes = {\n isRoot,\n areEqual,\n isChildApplicable,\n isChildEditable,\n isChildVisible,\n isChildRequired,\n getChildrenMinOrMaxCount,\n getChildrenMaxCount,\n getChildrenMinCount,\n getHierarchy,\n getHierarchyCode,\n isDefaultValueApplied,\n isQualifierValueApplied,\n isValueBlank,\n isValueNotBlank,\n hasUserInputValue,\n // update\n assocChildApplicability,\n dissocChildApplicability,\n assocChildEditable,\n assocChildVisible,\n assocChildRequired,\n assocChildrenCount,\n assocChildrenMaxCount,\n assocChildrenMinCount,\n mergeNodes,\n removeStatusFlags,\n assocValue,\n}\n"]}
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/node/nodes.ts"],"names":[],"mappings":"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","sourcesContent":["import { Dictionary } from '../common'\nimport { NodeDef, NodeDefCountType, NodeDefs } from '../nodeDef'\nimport { Dates, Objects } from '../utils'\nimport { MutationOptions, toMutationOptions } from '../utils/mutationOptions'\nimport { ArenaRecordNode } from './node'\n\nconst isRoot = (node: ArenaRecordNode): boolean => !node.parentUuid\n\nconst areEqual = (nodeA: ArenaRecordNode, nodeB: ArenaRecordNode): boolean => nodeA.uuid === nodeB.uuid\n\nconst isChildApplicable = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child applicability is not defined for a node definition, consider it applicable\n return node.meta?.childApplicability?.[nodeDefUuid] !== false\n}\n\nconst isChildEditable = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child editability is not defined for a node definition, consider it editable\n return node.meta?.cEdit?.[nodeDefUuid] !== false\n}\n\nconst isChildVisible = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child visibility is not defined for a node definition, consider it visible\n return node.meta?.cVis?.[nodeDefUuid] !== false\n}\n\nconst isChildRequired = (node: ArenaRecordNode, nodeDefUuid: string): boolean => {\n // if child \"required if\" condition is not defined or not met for a node definition, consider it not required\n return node.meta?.cReq?.[nodeDefUuid] === true\n}\n\nconst getChildrenMinOrMaxCount = (params: {\n parentNode: ArenaRecordNode\n nodeDef: NodeDef<any>\n countType: NodeDefCountType\n}): number => {\n const { parentNode, nodeDef, countType } = params\n const countIndex =\n countType === NodeDefCountType.max ? parentNode.meta?.childrenMaxCount : parentNode.meta?.childrenMinCount\n\n const count = countIndex?.[nodeDef.uuid]\n if (!Objects.isEmpty(count)) return count!\n\n // count can be a constant value, specified in the node def min/max count prop\n const nodeDefCount =\n countType === NodeDefCountType.max ? NodeDefs.getMaxCount(nodeDef) : NodeDefs.getMinCount(nodeDef)\n // count expressions (array) are evaluated into the parent node meta (childrenMinCount/childrenMaxCount)\n return nodeDefCount && !Array.isArray(nodeDefCount) ? Number(nodeDefCount) : Number.NaN\n}\n\nconst getChildrenMaxCount = (params: { parentNode: ArenaRecordNode; nodeDef: NodeDef<any> }): number =>\n getChildrenMinOrMaxCount({ ...params, countType: NodeDefCountType.max })\n\nconst getChildrenMinCount = (params: { parentNode: ArenaRecordNode; nodeDef: NodeDef<any> }): number =>\n getChildrenMinOrMaxCount({ ...params, countType: NodeDefCountType.min })\n\nconst getHierarchy = (node: ArenaRecordNode): string[] => [...(node.meta?.h ?? [])]\n\nconst getHierarchyCode = (node: ArenaRecordNode): string[] => [...(node.meta?.hCode ?? [])]\n\nconst mergeNodes = (target: ArenaRecordNode, ...sources: ArenaRecordNode[] | object[]): ArenaRecordNode =>\n Objects.deepMerge(target, ...sources) as unknown as ArenaRecordNode\n\nconst isDefaultValueApplied = (node: ArenaRecordNode): boolean => node?.meta?.defaultValueApplied ?? false\n\nconst isQualifierValueApplied = (node: ArenaRecordNode): boolean => node?.meta?.qualifierValueApplied ?? false\n\nconst isValueBlank = (node: ArenaRecordNode): boolean => Objects.isEmpty(node.value)\n\nconst isValueNotBlank = (node: ArenaRecordNode): boolean => Objects.isNotEmpty(node.value)\n\nconst hasUserInputValue = (node: ArenaRecordNode): boolean =>\n node && !isValueBlank(node) && !isDefaultValueApplied(node) && !isQualifierValueApplied(node)\n\nconst assocChildApplicability = (node: ArenaRecordNode, nodeDefUuid: string, applicable: boolean): ArenaRecordNode => {\n const childApplicability = { ...node.meta?.childApplicability }\n if (!applicable) {\n childApplicability[nodeDefUuid] = applicable\n } else {\n delete childApplicability[nodeDefUuid]\n }\n return {\n ...node,\n meta: { ...node.meta, childApplicability },\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n }\n}\n\nconst dissocChildApplicability = (node: ArenaRecordNode, nodeDefUuid: string) => {\n const childApplicability = { ...node.meta?.childApplicability }\n delete childApplicability[nodeDefUuid]\n return {\n ...node,\n meta: { ...node.meta, childApplicability },\n }\n}\n\ntype MetaBooleanDictionaryProp = 'childApplicability' | 'cEdit' | 'cVis' | 'cReq'\n\nconst updateMetaDictionary = ({\n node,\n nodeDefUuid,\n propName,\n propValue,\n defaultValue = true,\n sideEffect,\n}: {\n node: ArenaRecordNode\n nodeDefUuid: string\n propName: MetaBooleanDictionaryProp\n propValue: boolean\n defaultValue?: boolean\n sideEffect: boolean\n}): ArenaRecordNode => {\n const nodeUpdated = sideEffect ? node : { ...node }\n const metaOriginal = nodeUpdated.meta ?? {}\n const meta = sideEffect ? metaOriginal : { ...metaOriginal }\n const existingDictionary: Dictionary<boolean> = meta[propName] ?? {}\n const dictionary = sideEffect ? existingDictionary : { ...existingDictionary }\n if (propValue === defaultValue) {\n // default value: not stored\n delete dictionary[nodeDefUuid]\n } else {\n dictionary[nodeDefUuid] = propValue\n }\n meta[propName] = dictionary\n nodeUpdated.meta = meta\n nodeUpdated.updated = true\n nodeUpdated.dateModified = Dates.nowFormattedForStorage()\n return nodeUpdated\n}\n\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n options?: MutationOptions\n): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n sideEffect: boolean\n): ArenaRecordNode\nfunction assocChildEditable(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n options?: MutationOptions | boolean\n): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n return updateMetaDictionary({ node, nodeDefUuid, propName: 'cEdit', propValue: editable, sideEffect })\n}\n\nconst assocChildRequired = (\n node: ArenaRecordNode,\n nodeDefUuid: string,\n required: boolean,\n options?: MutationOptions\n): ArenaRecordNode => {\n const { sideEffect = false } = options ?? {}\n return updateMetaDictionary({\n node,\n nodeDefUuid,\n propName: 'cReq',\n propValue: required,\n defaultValue: false,\n sideEffect,\n })\n}\n\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n options?: MutationOptions\n): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n sideEffect: boolean\n): ArenaRecordNode\nfunction assocChildVisible(\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n options?: MutationOptions | boolean\n): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n return updateMetaDictionary({ node, nodeDefUuid, propName: 'cVis', propValue: visible, sideEffect })\n}\n\nconst assocChildrenCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n countType: NodeDefCountType\n}): ArenaRecordNode => {\n const { node, nodeDefUuid, count, countType } = params\n const countIndex = {\n ...(countType === NodeDefCountType.max ? node.meta?.childrenMaxCount : node.meta?.childrenMinCount),\n }\n if (Number.isNaN(count)) {\n delete countIndex[nodeDefUuid]\n } else {\n countIndex[nodeDefUuid] = count\n }\n const metaUpdated = { ...node.meta }\n if (countType === NodeDefCountType.max) {\n metaUpdated.childrenMaxCount = countIndex\n } else {\n metaUpdated.childrenMinCount = countIndex\n }\n return {\n ...node,\n meta: metaUpdated,\n updated: true,\n dateModified: Dates.nowFormattedForStorage(),\n }\n}\n\nconst assocChildrenMaxCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n}): ArenaRecordNode => assocChildrenCount({ ...params, countType: NodeDefCountType.max })\n\nconst assocChildrenMinCount = (params: {\n node: ArenaRecordNode\n nodeDefUuid: string\n count: number\n}): ArenaRecordNode => assocChildrenCount({ ...params, countType: NodeDefCountType.min })\n\nconst clearStatusFlagsInPlace = (node: ArenaRecordNode): ArenaRecordNode => {\n // do not use \"delete\": it would switch the node object to the (much bigger) V8 dictionary mode\n if (node.created !== undefined) node.created = undefined\n if (node.deleted !== undefined) node.deleted = undefined\n if (node.updated !== undefined) node.updated = undefined\n return node\n}\n\nconst omitStatusFlags = (node: ArenaRecordNode): ArenaRecordNode => {\n const { created: _created, deleted: _deleted, updated: _updated, ...nodeCleaned } = node\n return nodeCleaned\n}\n\nconst removeStatusFlags = ({\n node,\n sideEffect = false,\n}: {\n node: ArenaRecordNode\n sideEffect?: boolean\n}): ArenaRecordNode => (sideEffect ? clearStatusFlagsInPlace(node) : omitStatusFlags(node))\n\nfunction assocValue(node: ArenaRecordNode, value: any, options?: MutationOptions): ArenaRecordNode\n/** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */\nfunction assocValue(node: ArenaRecordNode, value: any, sideEffect: boolean): ArenaRecordNode\nfunction assocValue(node: ArenaRecordNode, value: any, options?: MutationOptions | boolean): ArenaRecordNode {\n const { sideEffect = false } = toMutationOptions(options)\n const nodeUpdated = sideEffect ? node : { ...node }\n nodeUpdated.value = value\n nodeUpdated.updated = true\n nodeUpdated.dateModified = Dates.nowFormattedForStorage()\n if (isDefaultValueApplied(nodeUpdated) || isQualifierValueApplied(nodeUpdated)) {\n // reset defaultValueApplied and qualifierValueApplied flags\n const metaOriginal = nodeUpdated.meta ?? {}\n const meta = sideEffect ? metaOriginal : { ...metaOriginal }\n nodeUpdated.meta = { ...meta, defaultValueApplied: false, qualifierValueApplied: false }\n }\n return nodeUpdated\n}\n\nexport const Nodes = {\n isRoot,\n areEqual,\n isChildApplicable,\n isChildEditable,\n isChildVisible,\n isChildRequired,\n getChildrenMinOrMaxCount,\n getChildrenMaxCount,\n getChildrenMinCount,\n getHierarchy,\n getHierarchyCode,\n isDefaultValueApplied,\n isQualifierValueApplied,\n isValueBlank,\n isValueNotBlank,\n hasUserInputValue,\n // update\n assocChildApplicability,\n dissocChildApplicability,\n assocChildEditable,\n assocChildVisible,\n assocChildRequired,\n assocChildrenCount,\n assocChildrenMaxCount,\n assocChildrenMinCount,\n mergeNodes,\n removeStatusFlags,\n assocValue,\n}\n"]}
@@ -81,7 +81,7 @@ const fix = (params) => {
81
81
  const fixNodeDefs = (params) => {
82
82
  var _a;
83
83
  const { nodeDefs, cycles } = params;
84
- const nodeDefsResult = {};
84
+ const nodeDefsResult = Object.assign({}, nodeDefs);
85
85
  const updatedNodeDefs = {};
86
86
  for (const cycle of cycles) {
87
87
  for (const nodeDef of Object.values(nodeDefs)) {
@@ -1 +1 @@
1
- {"version":3,"file":"nodeDefsFixer.js","sourceRoot":"","sources":["../../src/survey/nodeDefsFixer.ts"],"names":[],"mappings":"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","sourcesContent":["import { SystemError, SystemErrorKeys } from '../error'\nimport { NodeDef, NodeDefEntity, NodeDefMap, NodeDefs } from '../nodeDef'\nimport { NodeDefEntityLayoutChildItem } from '../nodeDef/types/entity'\nimport { Objects } from '../utils'\nimport { MutationOptions } from '../utils/mutationOptions'\n\ntype NodeDefsFixParams = MutationOptions & {\n nodeDefs: NodeDefMap\n cycles: string[]\n}\n\ntype NodeDefsInCycleFixParams = NodeDefsFixParams & {\n cycle: string\n}\n\ntype NodeDefFixParams = NodeDefsInCycleFixParams & {\n nodeDef: NodeDef<any>\n}\n\ntype LayoutPropFixParams = NodeDefFixParams & {\n propName: string\n}\n\ntype LayoutPropFixerFnParams = LayoutPropFixParams & { propOld: any }\n\nconst calculateNodeDefHierarchy = (params: { nodeDef: NodeDef<any>; nodeDefs: NodeDefMap }): string[] => {\n const { nodeDef, nodeDefs } = params\n const hierarchy = []\n const visitedNodeDefUuids = new Set<string>()\n let currentParentUuid = nodeDef.parentUuid\n while (currentParentUuid) {\n if (visitedNodeDefUuids.has(currentParentUuid)) {\n throw new SystemError(SystemErrorKeys.nodeDef.hierarchyCircularDependency, {\n nodeDefName: nodeDef.props?.name,\n nodeDefUuid: nodeDef.uuid,\n parentUuid: currentParentUuid,\n })\n }\n visitedNodeDefUuids.add(currentParentUuid)\n hierarchy.unshift(currentParentUuid)\n const currentParentNode = nodeDefs[currentParentUuid]\n if (!currentParentNode) {\n throw new SystemError(SystemErrorKeys.nodeDef.parentNotFound, {\n nodeDefName: nodeDef.props?.name,\n nodeDefUuid: nodeDef.uuid,\n parentUuid: currentParentUuid,\n })\n }\n currentParentUuid = currentParentNode.parentUuid\n }\n return hierarchy\n}\n\nconst fixHierarchy = (params: NodeDefFixParams): NodeDef<any> | null => {\n const { nodeDefs, nodeDef, sideEffect } = params\n const calculatedHierarchy = calculateNodeDefHierarchy({ nodeDefs, nodeDef })\n // compare the whole hierarchy: a node def moved to another parent at the same depth has a hierarchy with the same length\n return Objects.isEqual(calculatedHierarchy, NodeDefs.getMetaHierarchy(nodeDef))\n ? null\n : Objects.assocPath({ obj: nodeDef, path: ['meta', 'h'], value: calculatedHierarchy, sideEffect })\n}\n\nconst fixLayoutProp = (\n params: LayoutPropFixParams & { fixerFn: (params: LayoutPropFixerFnParams) => any }\n): NodeDef<any> | null => {\n const { cycle, nodeDef, propName, sideEffect, fixerFn } = params\n\n const propPath = ['props', 'layout', cycle, propName]\n\n const propOld = Objects.path(propPath)(nodeDef)\n\n if (Objects.isEmpty(propOld)) return null\n\n const propFixed = fixerFn({ ...params, propOld })\n\n if (Objects.isEqual(propOld, propFixed)) return null\n\n return Objects.assocPath({\n obj: nodeDef,\n path: propPath,\n value: propFixed,\n sideEffect,\n })\n}\n\nconst fixIndexChildren = (params: NodeDefFixParams): NodeDef<any> | null =>\n fixLayoutProp({\n ...params,\n propName: 'indexChildren',\n fixerFn: ({ nodeDefs, cycle, propOld: indexChildren }) =>\n (indexChildren as string[]).filter((childDefUuid) => {\n const childDef = nodeDefs[childDefUuid]\n return (\n childDef?.parentUuid === params.nodeDef.uuid &&\n NodeDefs.isEntity(childDef) &&\n NodeDefs.isDisplayInOwnPage(cycle)(childDef as NodeDefEntity)\n )\n }),\n })\n\nconst fixLayoutChildren = (params: NodeDefFixParams): NodeDef<any> | null =>\n fixLayoutProp({\n ...params,\n propName: 'layoutChildren',\n fixerFn: ({ nodeDefs, cycle, propOld: layoutChildren }) =>\n (layoutChildren as NodeDefEntityLayoutChildItem[]).filter((item) => {\n const childDefUuid = typeof item === 'string' ? item : item.i\n const childDef = nodeDefs[childDefUuid]\n return (\n childDef?.parentUuid === params.nodeDef.uuid &&\n (!NodeDefs.isEntity(childDef) || !NodeDefs.isDisplayInOwnPage(cycle)(childDef as NodeDefEntity))\n )\n }),\n })\n\nconst fix = (params: NodeDefFixParams): NodeDef<any> | null => {\n const { nodeDef } = params\n let nodeDefFixed: NodeDef<any> | null = fixHierarchy(params)\n if (NodeDefs.isEntity(nodeDef)) {\n nodeDefFixed = fixIndexChildren({ ...params, nodeDef: nodeDefFixed ?? nodeDef }) ?? nodeDefFixed\n nodeDefFixed = fixLayoutChildren({ ...params, nodeDef: nodeDefFixed ?? nodeDef }) ?? nodeDefFixed\n }\n return nodeDefFixed\n}\n\nconst fixNodeDefs = (params: NodeDefsFixParams): { nodeDefs: NodeDefMap; updatedNodeDefs: NodeDefMap } => {\n const { nodeDefs, cycles } = params\n const nodeDefsResult: NodeDefMap = {}\n const updatedNodeDefs: NodeDefMap = {}\n\n for (const cycle of cycles) {\n for (const nodeDef of Object.values(nodeDefs)) {\n const nodeDefToFix = nodeDefsResult[nodeDef.uuid] ?? nodeDef\n const fixedNodeDef = fix({ ...params, cycle, nodeDef: nodeDefToFix })\n if (fixedNodeDef) {\n updatedNodeDefs[nodeDef.uuid] = fixedNodeDef\n }\n nodeDefsResult[nodeDef.uuid] = fixedNodeDef ?? nodeDefToFix\n }\n }\n return {\n nodeDefs: nodeDefsResult,\n updatedNodeDefs,\n }\n}\n\nexport const NodeDefsFixer = {\n fixNodeDefs,\n}\n"]}
1
+ {"version":3,"file":"nodeDefsFixer.js","sourceRoot":"","sources":["../../src/survey/nodeDefsFixer.ts"],"names":[],"mappings":";;;AAAA,oCAAuD;AACvD,wCAAyE;AAEzE,oCAAkC;AAsBlC,MAAM,yBAAyB,GAAG,CAAC,MAAuD,EAAY,EAAE;;IACtG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IACpC,MAAM,SAAS,GAAG,EAAE,CAAA;IACpB,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7C,IAAI,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAA;IAC1C,OAAO,iBAAiB,EAAE,CAAC;QACzB,IAAI,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,mBAAW,CAAC,uBAAe,CAAC,OAAO,CAAC,2BAA2B,EAAE;gBACzE,WAAW,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,IAAI;gBAChC,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,UAAU,EAAE,iBAAiB;aAC9B,CAAC,CAAA;QACJ,CAAC;QACD,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC1C,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QACpC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAA;QACrD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,IAAI,mBAAW,CAAC,uBAAe,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC5D,WAAW,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,IAAI;gBAChC,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,UAAU,EAAE,iBAAiB;aAC9B,CAAC,CAAA;QACJ,CAAC;QACD,iBAAiB,GAAG,iBAAiB,CAAC,UAAU,CAAA;IAClD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAwB,EAAuB,EAAE;IACrE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAChD,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;IAC5E,yHAAyH;IACzH,OAAO,eAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,kBAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC7E,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,eAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,CAAA;AACtG,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CACpB,MAAmF,EAC9D,EAAE;IACvB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAEhE,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAErD,MAAM,OAAO,GAAG,eAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAA;IAE/C,IAAI,eAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAEzC,MAAM,SAAS,GAAG,OAAO,iCAAM,MAAM,KAAE,OAAO,IAAG,CAAA;IAEjD,IAAI,eAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;QAAE,OAAO,IAAI,CAAA;IAEpD,OAAO,eAAO,CAAC,SAAS,CAAC;QACvB,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,SAAS;QAChB,UAAU;KACX,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,MAAwB,EAAuB,EAAE,CACzE,aAAa,iCACR,MAAM,KACT,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,CACtD,aAA0B,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAA;QACvC,OAAO,CACL,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,MAAK,MAAM,CAAC,OAAO,CAAC,IAAI;YAC5C,kBAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,kBAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,QAAyB,CAAC,CAC9D,CAAA;IACH,CAAC,CAAC,IACJ,CAAA;AAEJ,MAAM,iBAAiB,GAAG,CAAC,MAAwB,EAAuB,EAAE,CAC1E,aAAa,iCACR,MAAM,KACT,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CACvD,cAAiD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACjE,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAA;QACvC,OAAO,CACL,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,MAAK,MAAM,CAAC,OAAO,CAAC,IAAI;YAC5C,CAAC,CAAC,kBAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,QAAyB,CAAC,CAAC,CACjG,CAAA;IACH,CAAC,CAAC,IACJ,CAAA;AAEJ,MAAM,GAAG,GAAG,CAAC,MAAwB,EAAuB,EAAE;;IAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAC1B,IAAI,YAAY,GAAwB,YAAY,CAAC,MAAM,CAAC,CAAA;IAC5D,IAAI,kBAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,YAAY,SAAG,gBAAgB,iCAAM,MAAM,KAAE,OAAO,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,OAAO,IAAG,mCAAI,YAAY,CAAA;QAChG,YAAY,SAAG,iBAAiB,iCAAM,MAAM,KAAE,OAAO,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,OAAO,IAAG,mCAAI,YAAY,CAAA;IACnG,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,MAAyB,EAAyD,EAAE;;IACvG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACnC,MAAM,cAAc,qBAAoB,QAAQ,CAAE,CAAA;IAClD,MAAM,eAAe,GAAe,EAAE,CAAA;IAEtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,MAAM,YAAY,SAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAI,OAAO,CAAA;YAC5D,MAAM,YAAY,GAAG,GAAG,iCAAM,MAAM,KAAE,KAAK,EAAE,OAAO,EAAE,YAAY,IAAG,CAAA;YACrE,IAAI,YAAY,EAAE,CAAC;gBACjB,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAA;YAC9C,CAAC;YACD,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,YAAY,CAAA;QAC7D,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,cAAc;QACxB,eAAe;KAChB,CAAA;AACH,CAAC,CAAA;AAEY,QAAA,aAAa,GAAG;IAC3B,WAAW;CACZ,CAAA","sourcesContent":["import { SystemError, SystemErrorKeys } from '../error'\nimport { NodeDef, NodeDefEntity, NodeDefMap, NodeDefs } from '../nodeDef'\nimport { NodeDefEntityLayoutChildItem } from '../nodeDef/types/entity'\nimport { Objects } from '../utils'\nimport { MutationOptions } from '../utils/mutationOptions'\n\ntype NodeDefsFixParams = MutationOptions & {\n nodeDefs: NodeDefMap\n cycles: string[]\n}\n\ntype NodeDefsInCycleFixParams = NodeDefsFixParams & {\n cycle: string\n}\n\ntype NodeDefFixParams = NodeDefsInCycleFixParams & {\n nodeDef: NodeDef<any>\n}\n\ntype LayoutPropFixParams = NodeDefFixParams & {\n propName: string\n}\n\ntype LayoutPropFixerFnParams = LayoutPropFixParams & { propOld: any }\n\nconst calculateNodeDefHierarchy = (params: { nodeDef: NodeDef<any>; nodeDefs: NodeDefMap }): string[] => {\n const { nodeDef, nodeDefs } = params\n const hierarchy = []\n const visitedNodeDefUuids = new Set<string>()\n let currentParentUuid = nodeDef.parentUuid\n while (currentParentUuid) {\n if (visitedNodeDefUuids.has(currentParentUuid)) {\n throw new SystemError(SystemErrorKeys.nodeDef.hierarchyCircularDependency, {\n nodeDefName: nodeDef.props?.name,\n nodeDefUuid: nodeDef.uuid,\n parentUuid: currentParentUuid,\n })\n }\n visitedNodeDefUuids.add(currentParentUuid)\n hierarchy.unshift(currentParentUuid)\n const currentParentNode = nodeDefs[currentParentUuid]\n if (!currentParentNode) {\n throw new SystemError(SystemErrorKeys.nodeDef.parentNotFound, {\n nodeDefName: nodeDef.props?.name,\n nodeDefUuid: nodeDef.uuid,\n parentUuid: currentParentUuid,\n })\n }\n currentParentUuid = currentParentNode.parentUuid\n }\n return hierarchy\n}\n\nconst fixHierarchy = (params: NodeDefFixParams): NodeDef<any> | null => {\n const { nodeDefs, nodeDef, sideEffect } = params\n const calculatedHierarchy = calculateNodeDefHierarchy({ nodeDefs, nodeDef })\n // compare the whole hierarchy: a node def moved to another parent at the same depth has a hierarchy with the same length\n return Objects.isEqual(calculatedHierarchy, NodeDefs.getMetaHierarchy(nodeDef))\n ? null\n : Objects.assocPath({ obj: nodeDef, path: ['meta', 'h'], value: calculatedHierarchy, sideEffect })\n}\n\nconst fixLayoutProp = (\n params: LayoutPropFixParams & { fixerFn: (params: LayoutPropFixerFnParams) => any }\n): NodeDef<any> | null => {\n const { cycle, nodeDef, propName, sideEffect, fixerFn } = params\n\n const propPath = ['props', 'layout', cycle, propName]\n\n const propOld = Objects.path(propPath)(nodeDef)\n\n if (Objects.isEmpty(propOld)) return null\n\n const propFixed = fixerFn({ ...params, propOld })\n\n if (Objects.isEqual(propOld, propFixed)) return null\n\n return Objects.assocPath({\n obj: nodeDef,\n path: propPath,\n value: propFixed,\n sideEffect,\n })\n}\n\nconst fixIndexChildren = (params: NodeDefFixParams): NodeDef<any> | null =>\n fixLayoutProp({\n ...params,\n propName: 'indexChildren',\n fixerFn: ({ nodeDefs, cycle, propOld: indexChildren }) =>\n (indexChildren as string[]).filter((childDefUuid) => {\n const childDef = nodeDefs[childDefUuid]\n return (\n childDef?.parentUuid === params.nodeDef.uuid &&\n NodeDefs.isEntity(childDef) &&\n NodeDefs.isDisplayInOwnPage(cycle)(childDef as NodeDefEntity)\n )\n }),\n })\n\nconst fixLayoutChildren = (params: NodeDefFixParams): NodeDef<any> | null =>\n fixLayoutProp({\n ...params,\n propName: 'layoutChildren',\n fixerFn: ({ nodeDefs, cycle, propOld: layoutChildren }) =>\n (layoutChildren as NodeDefEntityLayoutChildItem[]).filter((item) => {\n const childDefUuid = typeof item === 'string' ? item : item.i\n const childDef = nodeDefs[childDefUuid]\n return (\n childDef?.parentUuid === params.nodeDef.uuid &&\n (!NodeDefs.isEntity(childDef) || !NodeDefs.isDisplayInOwnPage(cycle)(childDef as NodeDefEntity))\n )\n }),\n })\n\nconst fix = (params: NodeDefFixParams): NodeDef<any> | null => {\n const { nodeDef } = params\n let nodeDefFixed: NodeDef<any> | null = fixHierarchy(params)\n if (NodeDefs.isEntity(nodeDef)) {\n nodeDefFixed = fixIndexChildren({ ...params, nodeDef: nodeDefFixed ?? nodeDef }) ?? nodeDefFixed\n nodeDefFixed = fixLayoutChildren({ ...params, nodeDef: nodeDefFixed ?? nodeDef }) ?? nodeDefFixed\n }\n return nodeDefFixed\n}\n\nconst fixNodeDefs = (params: NodeDefsFixParams): { nodeDefs: NodeDefMap; updatedNodeDefs: NodeDefMap } => {\n const { nodeDefs, cycles } = params\n const nodeDefsResult: NodeDefMap = { ...nodeDefs }\n const updatedNodeDefs: NodeDefMap = {}\n\n for (const cycle of cycles) {\n for (const nodeDef of Object.values(nodeDefs)) {\n const nodeDefToFix = nodeDefsResult[nodeDef.uuid] ?? nodeDef\n const fixedNodeDef = fix({ ...params, cycle, nodeDef: nodeDefToFix })\n if (fixedNodeDef) {\n updatedNodeDefs[nodeDef.uuid] = fixedNodeDef\n }\n nodeDefsResult[nodeDef.uuid] = fixedNodeDef ?? nodeDefToFix\n }\n }\n return {\n nodeDefs: nodeDefsResult,\n updatedNodeDefs,\n }\n}\n\nexport const NodeDefsFixer = {\n fixNodeDefs,\n}\n"]}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "name": "OpenForis",
5
5
  "email": "openforis.arena@gmail.com"
6
6
  },
7
- "version": "2.18.7",
7
+ "version": "2.18.8",
8
8
  "description": "Arena core module",
9
9
  "repository": {
10
10
  "type": "git",