@openforis/arena-core 2.3.42 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/esm/record/_records/recordCompletion.js +3 -3
  2. package/dist/esm/record/_records/recordCompletion.js.map +1 -1
  3. package/dist/esm/record/_records/recordGetters.js +221 -143
  4. package/dist/esm/record/_records/recordGetters.js.map +1 -1
  5. package/dist/esm/record/_records/recordPagesValidation.js +5 -5
  6. package/dist/esm/record/_records/recordPagesValidation.js.map +1 -1
  7. package/dist/esm/record/_records/recordUtils.js +3 -7
  8. package/dist/esm/record/_records/recordUtils.js.map +1 -1
  9. package/dist/esm/record/nodePointers.js +1 -1
  10. package/dist/esm/record/nodePointers.js.map +1 -1
  11. package/dist/esm/record/recordCloner.js +1 -1
  12. package/dist/esm/record/recordCloner.js.map +1 -1
  13. package/dist/esm/record/recordExpressionEvaluator/functions.js +4 -5
  14. package/dist/esm/record/recordExpressionEvaluator/functions.js.map +1 -1
  15. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js +1 -1
  16. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  17. package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js +2 -2
  18. package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
  19. package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js +1 -1
  20. package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  21. package/dist/esm/record/recordFixer.js +5 -5
  22. package/dist/esm/record/recordFixer.js.map +1 -1
  23. package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js +2 -8
  24. package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
  25. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +6 -6
  26. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  27. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js +1 -1
  28. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  29. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js +1 -6
  30. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
  31. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js +3 -4
  32. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
  33. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js +3 -3
  34. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
  35. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js +4 -9
  36. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  37. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js +2 -3
  38. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  39. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js +1 -5
  40. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  41. package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js +2 -9
  42. package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  43. package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js +1 -1
  44. package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  45. package/dist/esm/record/recordPrettyPrinter.js +14 -12
  46. package/dist/esm/record/recordPrettyPrinter.js.map +1 -1
  47. package/dist/esm/record/recordUpdater.js +2 -2
  48. package/dist/esm/record/recordUpdater.js.map +1 -1
  49. package/dist/esm/record/recordValidator/attributeKeyValidator.js +4 -4
  50. package/dist/esm/record/recordValidator/attributeKeyValidator.js.map +1 -1
  51. package/dist/esm/record/recordValidator/attributeUniqueValidator.js +1 -1
  52. package/dist/esm/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  53. package/dist/esm/record/recordValidator/attributeValidator.js +8 -10
  54. package/dist/esm/record/recordValidator/attributeValidator.js.map +1 -1
  55. package/dist/esm/record/recordValidator/countVaildator.js +2 -2
  56. package/dist/esm/record/recordValidator/countVaildator.js.map +1 -1
  57. package/dist/esm/record/recordValidator/recordValidator.js +1 -2
  58. package/dist/esm/record/recordValidator/recordValidator.js.map +1 -1
  59. package/dist/record/_records/recordCompletion.js +3 -3
  60. package/dist/record/_records/recordCompletion.js.map +1 -1
  61. package/dist/record/_records/recordGetters.d.ts +104 -51
  62. package/dist/record/_records/recordGetters.js +221 -170
  63. package/dist/record/_records/recordGetters.js.map +1 -1
  64. package/dist/record/_records/recordPagesValidation.js +5 -5
  65. package/dist/record/_records/recordPagesValidation.js.map +1 -1
  66. package/dist/record/_records/recordUtils.js +3 -7
  67. package/dist/record/_records/recordUtils.js.map +1 -1
  68. package/dist/record/nodePointers.js +1 -1
  69. package/dist/record/nodePointers.js.map +1 -1
  70. package/dist/record/recordCloner.js +1 -1
  71. package/dist/record/recordCloner.js.map +1 -1
  72. package/dist/record/recordExpressionEvaluator/functions.js +4 -5
  73. package/dist/record/recordExpressionEvaluator/functions.js.map +1 -1
  74. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js +1 -1
  75. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  76. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js +2 -2
  77. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
  78. package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js +1 -1
  79. package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  80. package/dist/record/recordFixer.js +5 -5
  81. package/dist/record/recordFixer.js.map +1 -1
  82. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js +2 -8
  83. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
  84. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +6 -6
  85. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  86. package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js +1 -1
  87. package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  88. package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js +1 -6
  89. package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
  90. package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js +3 -4
  91. package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
  92. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js +3 -3
  93. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
  94. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js +4 -9
  95. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  96. package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js +2 -3
  97. package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  98. package/dist/record/recordNodesUpdater/recordNodesDeleter.js +1 -5
  99. package/dist/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  100. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js +2 -9
  101. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  102. package/dist/record/recordNodesUpdater/recordNodesUpdater.js +1 -1
  103. package/dist/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  104. package/dist/record/recordPrettyPrinter.js +14 -12
  105. package/dist/record/recordPrettyPrinter.js.map +1 -1
  106. package/dist/record/recordUpdater.js +2 -2
  107. package/dist/record/recordUpdater.js.map +1 -1
  108. package/dist/record/recordValidator/attributeKeyValidator.js +4 -4
  109. package/dist/record/recordValidator/attributeKeyValidator.js.map +1 -1
  110. package/dist/record/recordValidator/attributeUniqueValidator.js +1 -1
  111. package/dist/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  112. package/dist/record/recordValidator/attributeValidator.js +8 -10
  113. package/dist/record/recordValidator/attributeValidator.js.map +1 -1
  114. package/dist/record/recordValidator/countVaildator.js +2 -2
  115. package/dist/record/recordValidator/countVaildator.js.map +1 -1
  116. package/dist/record/recordValidator/recordValidator.js +1 -2
  117. package/dist/record/recordValidator/recordValidator.js.map +1 -1
  118. package/dist/record/records.d.ts +340 -40
  119. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"recordCompletion.js","sourceRoot":"","sources":["../../../src/record/_records/recordCompletion.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArenaRecordNode, Nodes } from '../../node'\nimport { NodeDef, NodeDefProps, NodeDefs, NodeDefType } from '../../nodeDef'\nimport { Survey, Surveys } from '../../survey'\nimport { Numbers } from '../../utils'\nimport { ArenaRecord } from '../record'\nimport { getChildren, getRoot } from './recordGetters'\n\nexport interface EntityCompletionStats {\n total: number\n filled: number\n}\n\nconst emptyStats = (): EntityCompletionStats => ({ total: 0, filled: 0 })\n\nconst addStats = (statsAcc: EntityCompletionStats, statsToAdd: EntityCompletionStats): void => {\n statsAcc.total += statsToAdd.total\n statsAcc.filled += statsToAdd.filled\n}\n\nconst getAttributeCompletionStats = (params: {\n record: ArenaRecord\n entity: ArenaRecordNode\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): EntityCompletionStats => {\n const { record, entity, nodeDef } = params\n\n if (NodeDefs.isMultiple(nodeDef)) {\n const minCount = Nodes.getChildrenMinCount({ parentNode: entity, nodeDef })\n if (Number.isNaN(minCount) || minCount <= 0) return emptyStats()\n\n const filledNodesCount = getChildren(entity, nodeDef.uuid)(record).filter(Nodes.isValueNotBlank).length\n\n return { total: minCount, filled: Math.min(filledNodesCount, minCount) }\n }\n\n if (!NodeDefs.isRequired(nodeDef) && !NodeDefs.isKey(nodeDef)) return emptyStats()\n\n const node = getChildren(entity, nodeDef.uuid)(record)[0]\n return { total: 1, filled: node && Nodes.isValueNotBlank(node) ? 1 : 0 }\n}\n\nconst getChildEntityCompletionStats = (params: {\n survey: Survey\n record: ArenaRecord\n parentEntity: ArenaRecordNode\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): EntityCompletionStats => {\n const { survey, record, parentEntity, nodeDef } = params\n const childEntities = getChildren(parentEntity, nodeDef.uuid)(record)\n\n if (NodeDefs.isSingle(nodeDef)) {\n const childEntity = childEntities[0]\n return childEntity ? getEntityCompletionStats({ survey, record, entity: childEntity }) : emptyStats()\n }\n\n const minCountRaw = Nodes.getChildrenMinCount({ parentNode: parentEntity, nodeDef })\n const minCount = Number.isNaN(minCountRaw) ? 0 : Math.max(minCountRaw, 0)\n // entities added beyond the min count are still expected to be complete\n const expectedCount = Math.max(minCount, childEntities.length)\n if (expectedCount === 0) return emptyStats()\n\n const stats = emptyStats()\n for (let index = 0; index < expectedCount; index++) {\n const childEntity = childEntities[index]\n // a missing repetition (below the min count) counts as a single incomplete unit\n addStats(\n stats,\n childEntity ? getEntityCompletionStats({ survey, record, entity: childEntity }) : { total: 1, filled: 0 }\n )\n }\n return stats\n}\n\nexport const getEntityCompletionStats = (params: {\n survey: Survey\n record: ArenaRecord\n entity: ArenaRecordNode\n includeNestedEntities?: boolean\n}): EntityCompletionStats => {\n const { survey, record, entity, includeNestedEntities = true } = params\n const entityDef = Surveys.getNodeDefByUuid({ survey, uuid: entity.nodeDefUuid })\n const childDefs = Surveys.getNodeDefChildren({ survey, nodeDef: entityDef })\n\n const stats = emptyStats()\n for (const childDef of childDefs) {\n if (!Nodes.isChildApplicable(entity, childDef.uuid)) continue\n\n if (NodeDefs.isEntity(childDef)) {\n if (!includeNestedEntities) continue\n addStats(stats, getChildEntityCompletionStats({ survey, record, parentEntity: entity, nodeDef: childDef }))\n } else {\n addStats(stats, getAttributeCompletionStats({ record, entity, nodeDef: childDef }))\n }\n }\n return stats\n}\n\nconst toCompletionPercent = (stats: EntityCompletionStats): number => {\n const { total, filled } = stats\n if (total <= 0) return 100\n return Numbers.roundToPrecision((filled / total) * 100, 2)\n}\n\n/**\n * Returns the percentage of completion of the given entity (0-100), considering every descendant recursively.\n * A required or key attribute is considered filled when it has a non empty value; multiple attributes and\n * entities are considered filled based on their min count (see Nodes.getChildrenMinCount).\n */\nexport const getEntityCompletionPercent = (params: {\n survey: Survey\n record: ArenaRecord\n entity: ArenaRecordNode\n}): number => toCompletionPercent(getEntityCompletionStats(params))\n\n/**\n * Returns the percentage of completion of the given entity (0-100), considering only its own attributes\n * (nested entities are ignored).\n */\nexport const getEntityOwnCompletionPercent = (params: {\n survey: Survey\n record: ArenaRecord\n entity: ArenaRecordNode\n}): number => toCompletionPercent(getEntityCompletionStats({ ...params, includeNestedEntities: false }))\n\n/**\n * Returns the percentage of completion of the given record (0-100), i.e. the completion of its root entity.\n */\nexport const getRecordCompletionPercent = (params: { survey: Survey; record: ArenaRecord }): number => {\n const { survey, record } = params\n const rootEntity = getRoot(record)\n return rootEntity ? getEntityCompletionPercent({ survey, record, entity: rootEntity }) : 0\n}\n"]}
1
+ {"version":3,"file":"recordCompletion.js","sourceRoot":"","sources":["../../../src/record/_records/recordCompletion.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArenaRecordNode, Nodes } from '../../node'\nimport { NodeDef, NodeDefProps, NodeDefs, NodeDefType } from '../../nodeDef'\nimport { Survey, Surveys } from '../../survey'\nimport { Numbers } from '../../utils'\nimport { ArenaRecord } from '../record'\nimport { getChildren, getRoot } from './recordGetters'\n\nexport interface EntityCompletionStats {\n total: number\n filled: number\n}\n\nconst emptyStats = (): EntityCompletionStats => ({ total: 0, filled: 0 })\n\nconst addStats = (statsAcc: EntityCompletionStats, statsToAdd: EntityCompletionStats): void => {\n statsAcc.total += statsToAdd.total\n statsAcc.filled += statsToAdd.filled\n}\n\nconst getAttributeCompletionStats = (params: {\n record: ArenaRecord\n entity: ArenaRecordNode\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): EntityCompletionStats => {\n const { record, entity, nodeDef } = params\n\n if (NodeDefs.isMultiple(nodeDef)) {\n const minCount = Nodes.getChildrenMinCount({ parentNode: entity, nodeDef })\n if (Number.isNaN(minCount) || minCount <= 0) return emptyStats()\n\n const filledNodesCount = getChildren({ parentNode: entity, childDefUuid: nodeDef.uuid })(record).filter(\n Nodes.isValueNotBlank\n ).length\n\n return { total: minCount, filled: Math.min(filledNodesCount, minCount) }\n }\n\n if (!NodeDefs.isRequired(nodeDef) && !NodeDefs.isKey(nodeDef)) return emptyStats()\n\n const node = getChildren({ parentNode: entity, childDefUuid: nodeDef.uuid })(record)[0]\n return { total: 1, filled: node && Nodes.isValueNotBlank(node) ? 1 : 0 }\n}\n\nconst getChildEntityCompletionStats = (params: {\n survey: Survey\n record: ArenaRecord\n parentEntity: ArenaRecordNode\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): EntityCompletionStats => {\n const { survey, record, parentEntity, nodeDef } = params\n const childEntities = getChildren({ parentNode: parentEntity, childDefUuid: nodeDef.uuid })(record)\n\n if (NodeDefs.isSingle(nodeDef)) {\n const childEntity = childEntities[0]\n return childEntity ? getEntityCompletionStats({ survey, record, entity: childEntity }) : emptyStats()\n }\n\n const minCountRaw = Nodes.getChildrenMinCount({ parentNode: parentEntity, nodeDef })\n const minCount = Number.isNaN(minCountRaw) ? 0 : Math.max(minCountRaw, 0)\n // entities added beyond the min count are still expected to be complete\n const expectedCount = Math.max(minCount, childEntities.length)\n if (expectedCount === 0) return emptyStats()\n\n const stats = emptyStats()\n for (let index = 0; index < expectedCount; index++) {\n const childEntity = childEntities[index]\n // a missing repetition (below the min count) counts as a single incomplete unit\n addStats(\n stats,\n childEntity ? getEntityCompletionStats({ survey, record, entity: childEntity }) : { total: 1, filled: 0 }\n )\n }\n return stats\n}\n\nexport const getEntityCompletionStats = (params: {\n survey: Survey\n record: ArenaRecord\n entity: ArenaRecordNode\n includeNestedEntities?: boolean\n}): EntityCompletionStats => {\n const { survey, record, entity, includeNestedEntities = true } = params\n const entityDef = Surveys.getNodeDefByUuid({ survey, uuid: entity.nodeDefUuid })\n const childDefs = Surveys.getNodeDefChildren({ survey, nodeDef: entityDef })\n\n const stats = emptyStats()\n for (const childDef of childDefs) {\n if (!Nodes.isChildApplicable(entity, childDef.uuid)) continue\n\n if (NodeDefs.isEntity(childDef)) {\n if (!includeNestedEntities) continue\n addStats(stats, getChildEntityCompletionStats({ survey, record, parentEntity: entity, nodeDef: childDef }))\n } else {\n addStats(stats, getAttributeCompletionStats({ record, entity, nodeDef: childDef }))\n }\n }\n return stats\n}\n\nconst toCompletionPercent = (stats: EntityCompletionStats): number => {\n const { total, filled } = stats\n if (total <= 0) return 100\n return Numbers.roundToPrecision((filled / total) * 100, 2)\n}\n\n/**\n * Returns the percentage of completion of the given entity (0-100), considering every descendant recursively.\n * A required or key attribute is considered filled when it has a non empty value; multiple attributes and\n * entities are considered filled based on their min count (see Nodes.getChildrenMinCount).\n */\nexport const getEntityCompletionPercent = (params: {\n survey: Survey\n record: ArenaRecord\n entity: ArenaRecordNode\n}): number => toCompletionPercent(getEntityCompletionStats(params))\n\n/**\n * Returns the percentage of completion of the given entity (0-100), considering only its own attributes\n * (nested entities are ignored).\n */\nexport const getEntityOwnCompletionPercent = (params: {\n survey: Survey\n record: ArenaRecord\n entity: ArenaRecordNode\n}): number => toCompletionPercent(getEntityCompletionStats({ ...params, includeNestedEntities: false }))\n\n/**\n * Returns the percentage of completion of the given record (0-100), i.e. the completion of its root entity.\n */\nexport const getRecordCompletionPercent = (params: { survey: Survey; record: ArenaRecord }): number => {\n const { survey, record } = params\n const rootEntity = getRoot(record)\n return rootEntity ? getEntityCompletionPercent({ survey, record, entity: rootEntity }) : 0\n}\n"]}
@@ -3,68 +3,117 @@ import { ArenaRecordNode, NodePointer, NodesMap } from '../../node';
3
3
  import { NodeDef, NodeDefCode, NodeDefCodeProps, NodeDefProps, NodeDefType } from '../../nodeDef';
4
4
  import { Survey, SurveyDependencyType } from '../../survey/survey';
5
5
  import { ArenaRecord } from '../record';
6
+ type RecordParams = {
7
+ record: ArenaRecord;
8
+ };
9
+ /**
10
+ * Record getter: takes the parameters first and the record as separate (curried) parameter: `getter(params)(record)`.
11
+ * The deprecated form, with the record inside the parameters (`getter({ record, ...params })`), is still supported.
12
+ */
13
+ type RecordGetter<P extends RecordParams, R> = {
14
+ /** @deprecated Pass the record as separate parameter: `getter(params)(record)` */
15
+ (params: P): R;
16
+ (params: Omit<P, 'record'>): (record: ArenaRecord) => R;
17
+ };
18
+ /**
19
+ * Record getter (with parameters object) that also supports the deprecated form with positional parameters:
20
+ * `getter(arg1, arg2)(record)`.
21
+ */
22
+ type PositionalRecordGetter<P, A extends unknown[], R> = {
23
+ (params: P): (record: ArenaRecord) => R;
24
+ /** @deprecated Pass the parameters as an object: `getter({ ...params })(record)` */
25
+ (...args: A): (record: ArenaRecord) => R;
26
+ };
6
27
  export declare const getCycle: (record: ArenaRecord) => string;
7
28
  export declare const getNodes: (record: ArenaRecord) => Dictionary<ArenaRecordNode>;
8
29
  export declare const getNodesArray: (record: ArenaRecord) => ArenaRecordNode[];
9
- export declare const getNodeByUuid: (uuid: string) => (record: ArenaRecord) => ArenaRecordNode | undefined;
10
- export declare const getNodesByUuids: (uuids: string[]) => (record: ArenaRecord) => ArenaRecordNode[];
30
+ export declare const getNodeByUuid: PositionalRecordGetter<{
31
+ uuid: string;
32
+ }, [uuid: string], ArenaRecordNode | undefined>;
33
+ export declare const getNodesByUuids: PositionalRecordGetter<{
34
+ uuids: string[];
35
+ }, [uuids: string[]], ArenaRecordNode[]>;
11
36
  export declare const getRoot: (record: ArenaRecord) => ArenaRecordNode | undefined;
12
- export declare const getChildren: (parentNode: ArenaRecordNode, childDefUuid?: string) => (record: ArenaRecord) => ArenaRecordNode[];
13
- export declare const getChild: (parentNode: ArenaRecordNode, childDefUuid: string) => (record: ArenaRecord) => ArenaRecordNode;
14
- export declare const getParent: (node: ArenaRecordNode) => (record: ArenaRecord) => ArenaRecordNode | undefined;
15
- export declare const getNodesByDefUuid: (nodeDefUuid: string) => (record: ArenaRecord) => ArenaRecordNode[];
16
- export declare const isNodeApplicable: (params: {
17
- record: ArenaRecord;
37
+ export declare const getChildren: PositionalRecordGetter<{
38
+ parentNode: ArenaRecordNode;
39
+ childDefUuid?: string;
40
+ }, [parentNode: ArenaRecordNode, childDefUuid?: string | undefined], ArenaRecordNode[]>;
41
+ export declare const getChild: PositionalRecordGetter<{
42
+ parentNode: ArenaRecordNode;
43
+ childDefUuid: string;
44
+ }, [parentNode: ArenaRecordNode, childDefUuid: string], ArenaRecordNode>;
45
+ export declare const getParent: PositionalRecordGetter<{
18
46
  node: ArenaRecordNode;
19
- }) => boolean;
20
- export declare const isNodeEditable: (params: {
21
- record: ArenaRecord;
47
+ }, [node: ArenaRecordNode], ArenaRecordNode | undefined>;
48
+ export declare const getNodesByDefUuid: PositionalRecordGetter<{
49
+ nodeDefUuid: string;
50
+ }, [nodeDefUuid: string], ArenaRecordNode[]>;
51
+ export declare const isNodeApplicable: RecordGetter<RecordParams & {
22
52
  node: ArenaRecordNode;
23
- }) => boolean;
24
- export declare const isNodeVisible: (params: {
25
- record: ArenaRecord;
53
+ }, boolean>;
54
+ export declare const isNodeEditable: RecordGetter<RecordParams & {
26
55
  node: ArenaRecordNode;
27
- }) => boolean;
28
- export declare const getDependentCodeAttributes: (node: ArenaRecordNode) => (record: ArenaRecord) => ArenaRecordNode[];
56
+ }, boolean>;
57
+ export declare const isNodeVisible: RecordGetter<RecordParams & {
58
+ node: ArenaRecordNode;
59
+ }, boolean>;
60
+ export declare const getDependentCodeAttributes: PositionalRecordGetter<{
61
+ node: ArenaRecordNode;
62
+ }, [node: ArenaRecordNode], ArenaRecordNode[]>;
29
63
  export declare const getParentCodeAttribute: (params: {
30
64
  parentNode: ArenaRecordNode;
31
65
  nodeDef: NodeDefCode;
32
66
  }) => (record: ArenaRecord) => ArenaRecordNode | undefined;
33
- export declare const visitAncestorsAndSelf: (node: ArenaRecordNode, visitor: (node: ArenaRecordNode) => void, stopIfFn?: () => boolean) => (record: ArenaRecord) => void;
34
- export declare const findAncestor: (node: ArenaRecordNode, predicate: (node: ArenaRecordNode) => boolean) => (record: ArenaRecord) => ArenaRecordNode | undefined;
35
- export declare const getAncestor: (params: {
67
+ /**
68
+ * Visits the specified node and its ancestors, from the node up to the root: the visit stops when the visitor returns true.
69
+ */
70
+ export declare const visitAncestorsAndSelf: PositionalRecordGetter<{
71
+ node: ArenaRecordNode;
72
+ visitor: (node: ArenaRecordNode) => boolean | void;
73
+ }, [node: ArenaRecordNode, visitor: (node: ArenaRecordNode) => void, stopIfFn?: (() => boolean) | undefined], void>;
74
+ /**
75
+ * Returns the first node satisfying the predicate among the specified node and its ancestors (from the node up to the root).
76
+ */
77
+ export declare const findAncestor: (params: {
78
+ node: ArenaRecordNode;
79
+ predicate: (node: ArenaRecordNode) => boolean;
80
+ }) => (record: ArenaRecord) => ArenaRecordNode | undefined;
81
+ export declare const getAncestor: RecordGetter<{
36
82
  record: ArenaRecord;
37
83
  node: ArenaRecordNode;
38
84
  ancestorDefUuid: string;
39
- }) => ArenaRecordNode | undefined;
85
+ }, ArenaRecordNode | undefined>;
40
86
  /**
41
87
  * Returns the list of ancestors from the given node to the root entity
42
88
  */
43
- export declare const getAncestorsAndSelf: (params: {
89
+ export declare const getAncestorsAndSelf: RecordGetter<{
44
90
  record: ArenaRecord;
45
91
  node: ArenaRecordNode;
46
- }) => Array<ArenaRecordNode>;
47
- export declare const getDescendantsOrSelf: (params: {
92
+ }, ArenaRecordNode[]>;
93
+ export declare const getDescendantsOrSelf: RecordGetter<{
48
94
  record: ArenaRecord;
49
95
  node: ArenaRecordNode;
50
96
  nodeDefDescendant: NodeDef<any>;
51
- }) => ArenaRecordNode[];
52
- export declare const getDescendant: (params: {
97
+ }, ArenaRecordNode[]>;
98
+ export declare const getDescendant: RecordGetter<{
53
99
  record: ArenaRecord;
54
100
  node: ArenaRecordNode;
55
101
  nodeDefDescendant: NodeDef<any>;
56
- }) => ArenaRecordNode;
102
+ }, ArenaRecordNode>;
57
103
  export declare const isDescendantOf: (params: {
58
104
  node: ArenaRecordNode;
59
105
  ancestor: ArenaRecordNode;
60
106
  }) => boolean;
61
- export declare const visitDescendantsAndSelf: (params: {
107
+ export declare const visitDescendantsAndSelf: RecordGetter<{
62
108
  record: ArenaRecord;
63
109
  node: ArenaRecordNode;
64
110
  visitor: (node: ArenaRecordNode) => boolean | void;
65
111
  traverseMethod?: TraverseMethod;
66
- }) => void;
67
- export declare const findDescendantOrSelf: (node: ArenaRecordNode, predicate: (node: ArenaRecordNode) => boolean) => (record: ArenaRecord) => ArenaRecordNode | undefined;
112
+ }, void>;
113
+ export declare const findDescendantOrSelf: (params: {
114
+ node: ArenaRecordNode;
115
+ predicate: (node: ArenaRecordNode) => boolean;
116
+ }) => (record: ArenaRecord) => ArenaRecordNode | undefined;
68
117
  type EntityKeyNodesGetterParams = {
69
118
  survey: Survey;
70
119
  cycle?: string;
@@ -72,62 +121,66 @@ type EntityKeyNodesGetterParams = {
72
121
  entity: ArenaRecordNode;
73
122
  keyDefs?: NodeDef<NodeDefType, NodeDefProps>[];
74
123
  };
75
- export declare const getEntityKeyNodesByDefUuid: (params: EntityKeyNodesGetterParams) => NodesMap;
76
- export declare const getEntityKeyNodes: (params: EntityKeyNodesGetterParams) => ArenaRecordNode[];
77
- export declare const getEntityKeyValuesByDefUuid: (params: EntityKeyNodesGetterParams) => Dictionary<any>;
78
- export declare const getEntityKeyValues: (params: EntityKeyNodesGetterParams) => any[];
79
- export declare const getEntitySiblings: (params: {
124
+ export declare const getEntityKeyNodesByDefUuid: RecordGetter<EntityKeyNodesGetterParams, NodesMap>;
125
+ export declare const getEntityKeyNodes: RecordGetter<EntityKeyNodesGetterParams, ArenaRecordNode[]>;
126
+ export declare const getEntityKeyValuesByDefUuid: RecordGetter<EntityKeyNodesGetterParams, Dictionary<any>>;
127
+ export declare const getEntityKeyValues: RecordGetter<EntityKeyNodesGetterParams, any[]>;
128
+ export declare const getEntitySiblings: RecordGetter<{
80
129
  record: ArenaRecord;
81
130
  entity: ArenaRecordNode;
82
131
  includeSelf?: boolean;
83
- }) => ArenaRecordNode[];
84
- export declare const getAttributeSiblings: (params: {
132
+ }, ArenaRecordNode[]>;
133
+ export declare const getAttributeSiblings: RecordGetter<{
85
134
  record: ArenaRecord;
86
135
  node: ArenaRecordNode;
87
136
  nodeDef: NodeDef<NodeDefType, NodeDefProps>;
88
- }) => ArenaRecordNode[];
89
- export declare const getNodeIndex: (params: {
137
+ }, ArenaRecordNode[]>;
138
+ export declare const getNodeIndex: RecordGetter<{
90
139
  record: ArenaRecord;
91
140
  node: ArenaRecordNode;
92
- }) => number;
93
- export declare const findEntityByKeyValues: (params: {
141
+ }, number>;
142
+ export declare const findEntityByKeyValues: RecordGetter<{
94
143
  survey: Survey;
95
144
  cycle: string;
96
145
  record: ArenaRecord;
97
146
  parentEntity: ArenaRecordNode;
98
147
  entityDefUuid: string;
99
148
  keyValuesByDefUuid: Dictionary<any>;
100
- }) => ArenaRecordNode | undefined;
101
- export declare const findEntityWithSameKeysInAnotherRecord: (params: {
149
+ }, ArenaRecordNode | undefined>;
150
+ export declare const findEntityWithSameKeysInAnotherRecord: RecordGetter<{
102
151
  survey: Survey;
103
152
  cycle: string;
104
153
  entityUuid: string;
105
154
  record: ArenaRecord;
106
155
  recordOther: ArenaRecord;
107
- }) => ArenaRecordNode | undefined;
108
- export declare const getDependentNodePointers: (params: {
156
+ }, ArenaRecordNode | undefined>;
157
+ export declare const getDependentNodePointers: RecordGetter<{
109
158
  survey: Survey;
110
159
  record: ArenaRecord;
111
160
  node: ArenaRecordNode;
112
161
  dependencyType: SurveyDependencyType;
113
162
  includeSelf?: boolean;
114
163
  filterFn?: (nodePointer: NodePointer) => boolean;
115
- }) => NodePointer[];
116
- export declare const getAncestorCodePath: (params: {
164
+ }, NodePointer[]>;
165
+ export declare const getAncestorCodePath: RecordGetter<{
117
166
  survey: Survey;
118
167
  record: ArenaRecord;
119
168
  parentNode: ArenaRecordNode;
120
169
  nodeDef: NodeDef<NodeDefType.code, NodeDefCodeProps>;
121
- }) => string[];
122
- export declare const getCategoryItemUuid: (params: {
170
+ }, string[]>;
171
+ export declare const getCategoryItemUuid: RecordGetter<{
123
172
  survey: Survey;
124
173
  nodeDef: NodeDef<NodeDefType.code, NodeDefCodeProps>;
125
174
  record: ArenaRecord;
126
175
  parentNode: ArenaRecordNode;
127
176
  code: string;
128
- }) => string | undefined;
129
- export declare const isNodeFilledByUser: (node: ArenaRecordNode) => (record: ArenaRecord) => boolean;
130
- export declare const isNodeEmpty: (node: ArenaRecordNode) => (record: ArenaRecord) => boolean;
177
+ }, string | undefined>;
178
+ export declare const isNodeFilledByUser: PositionalRecordGetter<{
179
+ node: ArenaRecordNode;
180
+ }, [node: ArenaRecordNode], boolean>;
181
+ export declare const isNodeEmpty: PositionalRecordGetter<{
182
+ node: ArenaRecordNode;
183
+ }, [node: ArenaRecordNode], boolean>;
131
184
  export declare const isEmpty: (record: ArenaRecord) => boolean;
132
185
  export declare const getStep: (record: ArenaRecord) => string;
133
186
  export declare const isInAnalysisStep: (record: ArenaRecord) => boolean;