@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,4 +1,15 @@
1
1
  "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
2
13
  Object.defineProperty(exports, "__esModule", { value: true });
3
14
  exports.isInAnalysisStep = exports.getStep = exports.isEmpty = exports.isNodeEmpty = exports.isNodeFilledByUser = exports.getCategoryItemUuid = exports.getAncestorCodePath = exports.getDependentNodePointers = exports.findEntityWithSameKeysInAnotherRecord = exports.findEntityByKeyValues = exports.getNodeIndex = exports.getAttributeSiblings = exports.getEntitySiblings = exports.getEntityKeyValues = exports.getEntityKeyValuesByDefUuid = exports.getEntityKeyNodes = exports.getEntityKeyNodesByDefUuid = exports.findDescendantOrSelf = exports.visitDescendantsAndSelf = exports.isDescendantOf = exports.getDescendant = exports.getDescendantsOrSelf = exports.getAncestorsAndSelf = exports.getAncestor = exports.findAncestor = exports.visitAncestorsAndSelf = exports.getParentCodeAttribute = exports.getDependentCodeAttributes = exports.isNodeVisible = exports.isNodeEditable = exports.isNodeApplicable = exports.getNodesByDefUuid = exports.getParent = exports.getChild = exports.getChildren = exports.getRoot = exports.getNodesByUuids = exports.getNodeByUuid = exports.getNodesArray = exports.getNodes = exports.getCycle = void 0;
4
15
  const common_1 = require("../../common");
@@ -12,62 +23,93 @@ const record_1 = require("../record");
12
23
  const recordStep_1 = require("../recordStep");
13
24
  const recordNodesIndexReader_1 = require("./recordNodesIndexReader");
14
25
  const nodeDefSelfReferences_1 = require("./nodeDefSelfReferences");
26
+ const isRecordParams = (params) => 'record' in params;
27
+ const recordGetter = (getter) => ((params) => isRecordParams(params)
28
+ ? getter(params)
29
+ : (record) => getter(Object.assign(Object.assign({}, params), { record })));
30
+ const positionalRecordGetter = (params) => {
31
+ const { getter, isPositional, toParams } = params;
32
+ return ((...args) => {
33
+ const getterParams = isPositional(args[0]) ? toParams(...args) : args[0];
34
+ return (record) => getter(Object.assign(Object.assign({}, getterParams), { record }));
35
+ });
36
+ };
37
+ const isRecordNode = (arg) => typeof arg === 'object' && arg !== null && 'uuid' in arg && 'nodeDefUuid' in arg;
38
+ const isString = (arg) => typeof arg === 'string';
15
39
  const getCycle = (record) => { var _a; return (_a = record.cycle) !== null && _a !== void 0 ? _a : survey_1.defaultCycle; };
16
40
  exports.getCycle = getCycle;
17
41
  const getNodes = (record) => { var _a; return (_a = record.nodes) !== null && _a !== void 0 ? _a : {}; };
18
42
  exports.getNodes = getNodes;
19
43
  const getNodesArray = (record) => Object.values((0, exports.getNodes)(record));
20
44
  exports.getNodesArray = getNodesArray;
21
- const getNodeByUuid = (uuid) => (record) => { var _a; return (_a = record.nodes) === null || _a === void 0 ? void 0 : _a[uuid]; };
22
- exports.getNodeByUuid = getNodeByUuid;
23
- const getNodesByUuids = (uuids) => (record) => uuids.map((uuid) => (0, exports.getNodeByUuid)(uuid)(record));
24
- exports.getNodesByUuids = getNodesByUuids;
45
+ exports.getNodeByUuid = positionalRecordGetter({
46
+ getter: ({ record, uuid }) => { var _a; return (_a = record.nodes) === null || _a === void 0 ? void 0 : _a[uuid]; },
47
+ isPositional: isString,
48
+ toParams: (uuid) => ({ uuid }),
49
+ });
50
+ exports.getNodesByUuids = positionalRecordGetter({
51
+ getter: ({ record, uuids }) => uuids.map((uuid) => { var _a; return (_a = record.nodes) === null || _a === void 0 ? void 0 : _a[uuid]; }),
52
+ isPositional: Array.isArray,
53
+ toParams: (uuids) => ({ uuids }),
54
+ });
25
55
  const getRoot = (record) => {
26
56
  const rootUuid = record._nodesIndex ? recordNodesIndexReader_1.RecordNodesIndexReader.getNodeRootUuid(record._nodesIndex) : null;
27
57
  if (rootUuid) {
28
- return (0, exports.getNodeByUuid)(rootUuid)(record);
58
+ return (0, exports.getNodeByUuid)({ uuid: rootUuid })(record);
29
59
  }
30
60
  return (0, exports.getNodesArray)(record).find((node) => !node.parentUuid);
31
61
  };
32
62
  exports.getRoot = getRoot;
33
- const getChildren = (parentNode, childDefUuid) => (record) => {
34
- if (record._nodesIndex) {
35
- const childrenUuids = childDefUuid
36
- ? recordNodesIndexReader_1.RecordNodesIndexReader.getNodeUuidsByParentAndChildDef({
37
- parentNodeUuid: parentNode.uuid,
38
- childDefUuid,
39
- })(record._nodesIndex)
40
- : recordNodesIndexReader_1.RecordNodesIndexReader.getNodeUuidsByParent(parentNode.uuid)(record._nodesIndex);
41
- return (0, exports.getNodesByUuids)(childrenUuids)(record);
42
- }
43
- return (0, exports.getNodesArray)(record).filter((node) => node.parentUuid === parentNode.uuid && (!childDefUuid || node.nodeDefUuid == childDefUuid));
44
- };
45
- exports.getChildren = getChildren;
46
- const getChild = (parentNode, childDefUuid) => (record) => {
47
- const children = (0, exports.getChildren)(parentNode, childDefUuid)(record);
48
- const errorParams = { childDefUuid, parentNodeUuid: parentNode.uuid, recordUuid: record.uuid };
49
- if (children.length === 1) {
50
- return children[0];
51
- }
52
- if (children.length > 1) {
53
- throw new error_1.SystemError('systemError.record.multipleNodesFound', errorParams);
54
- }
55
- throw new error_1.SystemError('systemError.record.childNotFound', errorParams);
56
- };
57
- exports.getChild = getChild;
58
- const getParent = (node) => (record) => node.parentUuid ? (0, exports.getNodeByUuid)(node.parentUuid)(record) : undefined;
59
- exports.getParent = getParent;
60
- const getNodesByDefUuid = (nodeDefUuid) => (record) => {
61
- if (record._nodesIndex) {
62
- const nodeUuids = recordNodesIndexReader_1.RecordNodesIndexReader.getNodeUuidsByDef(nodeDefUuid)(record._nodesIndex);
63
- return (0, exports.getNodesByUuids)(nodeUuids)(record);
64
- }
65
- return (0, exports.getNodesArray)(record).filter((node) => node.nodeDefUuid === nodeDefUuid);
66
- };
67
- exports.getNodesByDefUuid = getNodesByDefUuid;
68
- const isNodeFlagTrue = (isChildFlagTrue) => (params) => {
63
+ exports.getChildren = positionalRecordGetter({
64
+ getter: ({ record, parentNode, childDefUuid, }) => {
65
+ if (record._nodesIndex) {
66
+ const childrenUuids = childDefUuid
67
+ ? recordNodesIndexReader_1.RecordNodesIndexReader.getNodeUuidsByParentAndChildDef({
68
+ parentNodeUuid: parentNode.uuid,
69
+ childDefUuid,
70
+ })(record._nodesIndex)
71
+ : recordNodesIndexReader_1.RecordNodesIndexReader.getNodeUuidsByParent(parentNode.uuid)(record._nodesIndex);
72
+ return (0, exports.getNodesByUuids)({ uuids: childrenUuids })(record);
73
+ }
74
+ return (0, exports.getNodesArray)(record).filter((node) => node.parentUuid === parentNode.uuid && (!childDefUuid || node.nodeDefUuid == childDefUuid));
75
+ },
76
+ isPositional: isRecordNode,
77
+ toParams: (parentNode, childDefUuid) => ({ parentNode, childDefUuid }),
78
+ });
79
+ exports.getChild = positionalRecordGetter({
80
+ getter: ({ record, parentNode, childDefUuid, }) => {
81
+ const children = (0, exports.getChildren)({ parentNode, childDefUuid })(record);
82
+ const errorParams = { childDefUuid, parentNodeUuid: parentNode.uuid, recordUuid: record.uuid };
83
+ if (children.length === 1) {
84
+ return children[0];
85
+ }
86
+ if (children.length > 1) {
87
+ throw new error_1.SystemError('systemError.record.multipleNodesFound', errorParams);
88
+ }
89
+ throw new error_1.SystemError('systemError.record.childNotFound', errorParams);
90
+ },
91
+ isPositional: isRecordNode,
92
+ toParams: (parentNode, childDefUuid) => ({ parentNode, childDefUuid }),
93
+ });
94
+ exports.getParent = positionalRecordGetter({
95
+ getter: ({ record, node }) => node.parentUuid ? (0, exports.getNodeByUuid)({ uuid: node.parentUuid })(record) : undefined,
96
+ isPositional: isRecordNode,
97
+ toParams: (node) => ({ node }),
98
+ });
99
+ exports.getNodesByDefUuid = positionalRecordGetter({
100
+ getter: ({ record, nodeDefUuid }) => {
101
+ if (record._nodesIndex) {
102
+ const nodeUuids = recordNodesIndexReader_1.RecordNodesIndexReader.getNodeUuidsByDef(nodeDefUuid)(record._nodesIndex);
103
+ return (0, exports.getNodesByUuids)({ uuids: nodeUuids })(record);
104
+ }
105
+ return (0, exports.getNodesArray)(record).filter((node) => node.nodeDefUuid === nodeDefUuid);
106
+ },
107
+ isPositional: isString,
108
+ toParams: (nodeDefUuid) => ({ nodeDefUuid }),
109
+ });
110
+ const isNodeFlagTrue = (isChildFlagTrue) => recordGetter((params) => {
69
111
  const { record, node } = params;
70
- const ancestorsAndSelf = (0, exports.getAncestorsAndSelf)({ record, node });
112
+ const ancestorsAndSelf = (0, exports.getAncestorsAndSelf)({ node })(record);
71
113
  for (let i = 0; i < ancestorsAndSelf.length - 1; i++) {
72
114
  const child = ancestorsAndSelf[i];
73
115
  const parent = ancestorsAndSelf[i + 1];
@@ -75,26 +117,29 @@ const isNodeFlagTrue = (isChildFlagTrue) => (params) => {
75
117
  return false;
76
118
  }
77
119
  return true;
78
- };
120
+ });
79
121
  exports.isNodeApplicable = isNodeFlagTrue((parent, nodeDefUuid) => node_1.Nodes.isChildApplicable(parent, nodeDefUuid));
80
122
  exports.isNodeEditable = isNodeFlagTrue((parent, nodeDefUuid) => node_1.Nodes.isChildEditable(parent, nodeDefUuid));
81
123
  exports.isNodeVisible = isNodeFlagTrue((parent, nodeDefUuid) => node_1.Nodes.isChildVisible(parent, nodeDefUuid));
82
- const getDependentCodeAttributes = (node) => (record) => {
83
- if (record._nodesIndex) {
84
- const nodeUuids = recordNodesIndexReader_1.RecordNodesIndexReader.getNodeCodeDependentUuids(node.uuid)(record._nodesIndex);
85
- return (0, exports.getNodesByUuids)(nodeUuids)(record);
86
- }
87
- throw new error_1.SystemError('record.nodesIndexNotInitialized');
88
- };
89
- exports.getDependentCodeAttributes = getDependentCodeAttributes;
124
+ exports.getDependentCodeAttributes = positionalRecordGetter({
125
+ getter: ({ record, node }) => {
126
+ if (record._nodesIndex) {
127
+ const nodeUuids = recordNodesIndexReader_1.RecordNodesIndexReader.getNodeCodeDependentUuids(node.uuid)(record._nodesIndex);
128
+ return (0, exports.getNodesByUuids)({ uuids: nodeUuids })(record);
129
+ }
130
+ throw new error_1.SystemError('record.nodesIndexNotInitialized');
131
+ },
132
+ isPositional: isRecordNode,
133
+ toParams: (node) => ({ node }),
134
+ });
90
135
  const getParentCodeAttribute = (params) => (record) => {
91
136
  const { parentNode, nodeDef } = params;
92
137
  const parentCodeDefUuid = nodeDef_1.NodeDefs.getParentCodeDefUuid(nodeDef);
93
138
  if (!parentCodeDefUuid)
94
139
  return undefined;
95
- const ancestors = (0, exports.getAncestorsAndSelf)({ record, node: parentNode });
140
+ const ancestors = (0, exports.getAncestorsAndSelf)({ node: parentNode })(record);
96
141
  for (const ancestor of ancestors) {
97
- const children = (0, exports.getChildren)(ancestor, parentCodeDefUuid)(record);
142
+ const children = (0, exports.getChildren)({ parentNode: ancestor, childDefUuid: parentCodeDefUuid })(record);
98
143
  if (children.length === 1) {
99
144
  return children[0];
100
145
  }
@@ -103,51 +148,73 @@ const getParentCodeAttribute = (params) => (record) => {
103
148
  };
104
149
  exports.getParentCodeAttribute = getParentCodeAttribute;
105
150
  // ancestors
106
- const visitAncestorsAndSelf = (node, visitor, stopIfFn) => (record) => {
107
- let currentNode = node;
108
- while (currentNode) {
109
- visitor(currentNode);
110
- if (stopIfFn === null || stopIfFn === void 0 ? void 0 : stopIfFn())
111
- break;
112
- currentNode = (0, exports.getParent)(currentNode)(record);
113
- }
114
- };
115
- exports.visitAncestorsAndSelf = visitAncestorsAndSelf;
116
- const findAncestor = (node, predicate) => (record) => {
117
- let result = undefined;
118
- (0, exports.visitAncestorsAndSelf)(node, (visitedNode) => {
119
- if (predicate(visitedNode)) {
120
- result = visitedNode;
151
+ /**
152
+ * Visits the specified node and its ancestors, from the node up to the root: the visit stops when the visitor returns true.
153
+ */
154
+ exports.visitAncestorsAndSelf = positionalRecordGetter({
155
+ getter: ({ record, node, visitor, }) => {
156
+ let currentNode = node;
157
+ while (currentNode) {
158
+ if (visitor(currentNode))
159
+ return;
160
+ currentNode = (0, exports.getParent)({ node: currentNode })(record);
121
161
  }
122
- }, () => !!result)(record);
162
+ },
163
+ isPositional: isRecordNode,
164
+ // deprecated form: the visit stops when stopIfFn returns true
165
+ toParams: (node, visitor, stopIfFn) => ({
166
+ node,
167
+ visitor: (visitedNode) => {
168
+ visitor(visitedNode);
169
+ return !!(stopIfFn === null || stopIfFn === void 0 ? void 0 : stopIfFn());
170
+ },
171
+ }),
172
+ });
173
+ /**
174
+ * Returns the first node satisfying the predicate among the specified node and its ancestors (from the node up to the root).
175
+ */
176
+ const findAncestor = (params) => (record) => {
177
+ const { node, predicate } = params;
178
+ let result = undefined;
179
+ (0, exports.visitAncestorsAndSelf)({
180
+ node,
181
+ visitor: (visitedNode) => {
182
+ if (predicate(visitedNode)) {
183
+ result = visitedNode;
184
+ return true;
185
+ }
186
+ return false;
187
+ },
188
+ })(record);
123
189
  return result;
124
190
  };
125
191
  exports.findAncestor = findAncestor;
126
- const getAncestor = (params) => {
192
+ exports.getAncestor = recordGetter((params) => {
127
193
  const { record, node, ancestorDefUuid } = params;
128
194
  if (node.nodeDefUuid === ancestorDefUuid)
129
195
  return node;
130
- let ancestor = (0, exports.getParent)(node)(record);
196
+ let ancestor = (0, exports.getParent)({ node })(record);
131
197
  while (ancestor && ancestor.nodeDefUuid !== ancestorDefUuid) {
132
- ancestor = (0, exports.getParent)(ancestor)(record);
198
+ ancestor = (0, exports.getParent)({ node: ancestor })(record);
133
199
  }
134
200
  return ancestor;
135
- };
136
- exports.getAncestor = getAncestor;
201
+ });
137
202
  /**
138
203
  * Returns the list of ancestors from the given node to the root entity
139
204
  */
140
- const getAncestorsAndSelf = (params) => {
205
+ exports.getAncestorsAndSelf = recordGetter((params) => {
141
206
  const { record, node } = params;
142
207
  const ancestors = [];
143
- (0, exports.visitAncestorsAndSelf)(node, (currentNode) => {
144
- ancestors.push(currentNode);
208
+ (0, exports.visitAncestorsAndSelf)({
209
+ node,
210
+ visitor: (currentNode) => {
211
+ ancestors.push(currentNode);
212
+ },
145
213
  })(record);
146
214
  return ancestors;
147
- };
148
- exports.getAncestorsAndSelf = getAncestorsAndSelf;
215
+ });
149
216
  // descendants
150
- const getDescendantsOrSelf = (params) => {
217
+ exports.getDescendantsOrSelf = recordGetter((params) => {
151
218
  const { record, node, nodeDefDescendant } = params;
152
219
  if (nodeDefDescendant.uuid === node.nodeDefUuid)
153
220
  return [node];
@@ -159,25 +226,23 @@ const getDescendantsOrSelf = (params) => {
159
226
  let currentDescendants = [];
160
227
  for (const currentDescendantDefUuid of descendantNodeDefUuids) {
161
228
  for (const currentAncestor of currentAncestors) {
162
- currentDescendants.push(...(0, exports.getChildren)(currentAncestor, currentDescendantDefUuid)(record));
229
+ currentDescendants.push(...(0, exports.getChildren)({ parentNode: currentAncestor, childDefUuid: currentDescendantDefUuid })(record));
163
230
  }
164
231
  currentAncestors = currentDescendants;
165
232
  currentDescendants = [];
166
233
  }
167
234
  return currentAncestors; // currentAncestors is equal to the currentDescendants of the last level
168
- };
169
- exports.getDescendantsOrSelf = getDescendantsOrSelf;
170
- const getDescendant = (params) => {
235
+ });
236
+ exports.getDescendant = recordGetter((params) => {
171
237
  const { record, node, nodeDefDescendant } = params;
172
- return (0, exports.getDescendantsOrSelf)({ record, node, nodeDefDescendant })[0];
173
- };
174
- exports.getDescendant = getDescendant;
238
+ return (0, exports.getDescendantsOrSelf)({ node, nodeDefDescendant })(record)[0];
239
+ });
175
240
  const isDescendantOf = (params) => {
176
241
  const { node, ancestor } = params;
177
242
  return node_1.Nodes.getHierarchy(node).includes(ancestor.uuid);
178
243
  };
179
244
  exports.isDescendantOf = isDescendantOf;
180
- const visitDescendantsAndSelf = (params) => {
245
+ exports.visitDescendantsAndSelf = recordGetter((params) => {
181
246
  const { record, node, visitor, traverseMethod = common_1.TraverseMethod.bfs } = params;
182
247
  if (traverseMethod === common_1.TraverseMethod.bfs) {
183
248
  const queue = new utils_1.Queue();
@@ -201,7 +266,7 @@ const visitDescendantsAndSelf = (params) => {
201
266
  // stop if visitor returns true
202
267
  return;
203
268
  }
204
- const children = (0, exports.getChildren)(visitedNode)(record);
269
+ const children = (0, exports.getChildren)({ parentNode: visitedNode })(record);
205
270
  // add children to stack in reverse order
206
271
  for (let index = children.length - 1; index >= 0; index--) {
207
272
  const child = children[index];
@@ -209,12 +274,11 @@ const visitDescendantsAndSelf = (params) => {
209
274
  }
210
275
  }
211
276
  }
212
- };
213
- exports.visitDescendantsAndSelf = visitDescendantsAndSelf;
214
- const findDescendantOrSelf = (node, predicate) => (record) => {
277
+ });
278
+ const findDescendantOrSelf = (params) => (record) => {
279
+ const { node, predicate } = params;
215
280
  let found = undefined;
216
281
  (0, exports.visitDescendantsAndSelf)({
217
- record,
218
282
  node,
219
283
  visitor: (currentNode) => {
220
284
  if (predicate(currentNode)) {
@@ -223,11 +287,11 @@ const findDescendantOrSelf = (node, predicate) => (record) => {
223
287
  }
224
288
  return false;
225
289
  },
226
- });
290
+ })(record);
227
291
  return found;
228
292
  };
229
293
  exports.findDescendantOrSelf = findDescendantOrSelf;
230
- const getClosestAncestorNode = (params) => {
294
+ const getClosestAncestorNode = recordGetter((params) => {
231
295
  const { record, node, nodeDef, dependentDef, dependencyType } = params;
232
296
  // 1a if dependent def is the same as node def, potentially all nodes with
233
297
  // nodeDefUuid === dependentDef.uuid in record could be dependent of nodeDef;
@@ -235,7 +299,7 @@ const getClosestAncestorNode = (params) => {
235
299
  // unless the node def references itself only among the children of its parent entity (e.g. validation "dbh > 0")
236
300
  if (nodeDef.uuid === dependentDef.uuid) {
237
301
  return nodeDefSelfReferences_1.NodeDefSelfReferences.isSelfReferenceLocal({ nodeDef, dependencyType })
238
- ? (0, exports.getParent)(node)(record)
302
+ ? (0, exports.getParent)({ node })(record)
239
303
  : (0, exports.getRoot)(record);
240
304
  }
241
305
  // 1 find common ancestor def
@@ -243,76 +307,71 @@ const getClosestAncestorNode = (params) => {
243
307
  if (!commonAncestorDefUuid)
244
308
  return undefined;
245
309
  // 2 get ancestor node with common parent def
246
- return (0, exports.getAncestor)({ record, node, ancestorDefUuid: commonAncestorDefUuid });
247
- };
248
- const getEntityKeyNodesByDefUuid = (params) => {
310
+ return (0, exports.getAncestor)({ node, ancestorDefUuid: commonAncestorDefUuid })(record);
311
+ });
312
+ exports.getEntityKeyNodesByDefUuid = recordGetter((params) => {
249
313
  const { survey, cycle, record, entity, keyDefs } = params;
250
314
  const nodeDef = survey_1.Surveys.getNodeDefByUuid({ survey, uuid: entity.nodeDefUuid });
251
315
  const nodeDefKeys = keyDefs !== null && keyDefs !== void 0 ? keyDefs : survey_1.Surveys.getNodeDefKeys({ survey, cycle, nodeDef });
252
316
  return nodeDefKeys.reduce((acc, nodeDefKey) => {
253
- const nodeKey = (0, exports.getDescendant)({ record, node: entity, nodeDefDescendant: nodeDefKey });
317
+ const nodeKey = (0, exports.getDescendant)({ node: entity, nodeDefDescendant: nodeDefKey })(record);
254
318
  acc[nodeDefKey.uuid] = nodeKey;
255
319
  return acc;
256
320
  }, {});
257
- };
258
- exports.getEntityKeyNodesByDefUuid = getEntityKeyNodesByDefUuid;
259
- const getEntityKeyNodes = (params) => Object.values((0, exports.getEntityKeyNodesByDefUuid)(params));
260
- exports.getEntityKeyNodes = getEntityKeyNodes;
261
- const getEntityKeyValuesByDefUuid = (params) => {
262
- const keyNodesByDefUuid = (0, exports.getEntityKeyNodesByDefUuid)(params);
321
+ });
322
+ exports.getEntityKeyNodes = recordGetter((_a) => {
323
+ var { record } = _a, otherParams = __rest(_a, ["record"]);
324
+ return Object.values((0, exports.getEntityKeyNodesByDefUuid)(otherParams)(record));
325
+ });
326
+ exports.getEntityKeyValuesByDefUuid = recordGetter((params) => {
327
+ const { record } = params, otherParams = __rest(params, ["record"]);
328
+ const keyNodesByDefUuid = (0, exports.getEntityKeyNodesByDefUuid)(otherParams)(record);
263
329
  return Object.entries(keyNodesByDefUuid).reduce((acc, [uuid, keyNode]) => {
264
330
  acc[uuid] = keyNode === null || keyNode === void 0 ? void 0 : keyNode.value;
265
331
  return acc;
266
332
  }, {});
267
- };
268
- exports.getEntityKeyValuesByDefUuid = getEntityKeyValuesByDefUuid;
269
- const getEntityKeyValues = (params) => Object.values((0, exports.getEntityKeyValuesByDefUuid)(params));
270
- exports.getEntityKeyValues = getEntityKeyValues;
271
- const getEntitySiblings = (params) => {
333
+ });
334
+ exports.getEntityKeyValues = recordGetter((_a) => {
335
+ var { record } = _a, otherParams = __rest(_a, ["record"]);
336
+ return Object.values((0, exports.getEntityKeyValuesByDefUuid)(otherParams)(record));
337
+ });
338
+ exports.getEntitySiblings = recordGetter((params) => {
272
339
  const { record, entity, includeSelf = false } = params;
273
- const parentEntity = (0, exports.getParent)(entity)(record);
340
+ const parentEntity = (0, exports.getParent)({ node: entity })(record);
274
341
  if (!parentEntity)
275
342
  return [];
276
- const siblingEntities = (0, exports.getChildren)(parentEntity, entity.nodeDefUuid)(record);
343
+ const siblingEntities = (0, exports.getChildren)({ parentNode: parentEntity, childDefUuid: entity.nodeDefUuid })(record);
277
344
  return includeSelf ? siblingEntities : siblingEntities.filter((sibling) => !node_1.Nodes.areEqual(sibling, entity));
278
- };
279
- exports.getEntitySiblings = getEntitySiblings;
280
- const getAttributeSiblings = (params) => {
345
+ });
346
+ exports.getAttributeSiblings = recordGetter((params) => {
281
347
  const { record, node, nodeDef } = params;
282
- const parentEntity = (0, exports.getParent)(node)(record);
348
+ const parentEntity = (0, exports.getParent)({ node })(record);
283
349
  if (!parentEntity)
284
350
  return [];
285
- const siblingParentEntities = (0, exports.getEntitySiblings)({ record, entity: parentEntity });
351
+ const siblingParentEntities = (0, exports.getEntitySiblings)({ entity: parentEntity })(record);
286
352
  return siblingParentEntities.reduce((siblingsAcc, siblingEntity) => {
287
- siblingsAcc.push(...(0, exports.getChildren)(siblingEntity, nodeDef.uuid)(record));
353
+ siblingsAcc.push(...(0, exports.getChildren)({ parentNode: siblingEntity, childDefUuid: nodeDef.uuid })(record));
288
354
  return siblingsAcc;
289
355
  }, []);
290
- };
291
- exports.getAttributeSiblings = getAttributeSiblings;
292
- const getNodeIndex = (params) => {
356
+ });
357
+ exports.getNodeIndex = recordGetter((params) => {
293
358
  const { record, node } = params;
294
- const parentEntity = (0, exports.getParent)(node)(record);
359
+ const parentEntity = (0, exports.getParent)({ node })(record);
295
360
  if (!parentEntity)
296
361
  return 0; // root entity
297
- const siblings = (0, exports.getChildren)(parentEntity, node.nodeDefUuid)(record);
362
+ const siblings = (0, exports.getChildren)({ parentNode: parentEntity, childDefUuid: node.nodeDefUuid })(record);
298
363
  return siblings.indexOf(node);
299
- };
300
- exports.getNodeIndex = getNodeIndex;
301
- const findEntityByKeyValues = (params) => {
364
+ });
365
+ exports.findEntityByKeyValues = recordGetter((params) => {
302
366
  const { survey, cycle, record, parentEntity, entityDefUuid, keyValuesByDefUuid } = params;
303
367
  const entityDef = survey_1.Surveys.getNodeDefByUuid({ survey, uuid: entityDefUuid });
304
- const siblingEntities = (0, exports.getChildren)(parentEntity, entityDefUuid)(record);
368
+ const siblingEntities = (0, exports.getChildren)({ parentNode: parentEntity, childDefUuid: entityDefUuid })(record);
305
369
  if (nodeDef_1.NodeDefs.isSingle(entityDef)) {
306
370
  return siblingEntities[0];
307
371
  }
308
372
  const keyDefs = survey_1.Surveys.getNodeDefKeys({ survey, cycle, nodeDef: entityDef });
309
373
  return siblingEntities.find((siblingEntity) => {
310
- const siblingEntityKeyValuesByDefUuid = (0, exports.getEntityKeyValuesByDefUuid)({
311
- survey,
312
- record,
313
- entity: siblingEntity,
314
- keyDefs,
315
- });
374
+ const siblingEntityKeyValuesByDefUuid = (0, exports.getEntityKeyValuesByDefUuid)({ survey, entity: siblingEntity, keyDefs })(record);
316
375
  return keyDefs.every((keyDef) => {
317
376
  const keyValue = siblingEntityKeyValuesByDefUuid[keyDef.uuid];
318
377
  const keyValueSearch = keyValuesByDefUuid[keyDef.uuid];
@@ -324,27 +383,19 @@ const findEntityByKeyValues = (params) => {
324
383
  });
325
384
  });
326
385
  });
327
- };
328
- exports.findEntityByKeyValues = findEntityByKeyValues;
329
- const findEntityWithSameKeysInAnotherRecord = (params) => {
386
+ });
387
+ exports.findEntityWithSameKeysInAnotherRecord = recordGetter((params) => {
330
388
  const { survey, cycle, entityUuid, record, recordOther } = params;
331
- const entity = (0, exports.getNodeByUuid)(entityUuid)(record);
389
+ const entity = (0, exports.getNodeByUuid)({ uuid: entityUuid })(record);
332
390
  if (!entity)
333
391
  return undefined;
334
392
  let otherRecordCurrentParentEntity = (0, exports.getRoot)(recordOther);
335
393
  if (!otherRecordCurrentParentEntity)
336
394
  return undefined;
337
- const entityAncestorsAndSelf = (0, exports.getAncestorsAndSelf)({
338
- record,
339
- node: entity,
340
- });
395
+ const entityAncestorsAndSelf = (0, exports.getAncestorsAndSelf)({ node: entity })(record);
341
396
  const ancestorDefUuidsAndKeys = entityAncestorsAndSelf.map((ancestor) => ({
342
397
  entityDefUuid: ancestor.nodeDefUuid,
343
- keyValuesByDefUuid: (0, exports.getEntityKeyValuesByDefUuid)({
344
- survey,
345
- record,
346
- entity: ancestor,
347
- }),
398
+ keyValuesByDefUuid: (0, exports.getEntityKeyValuesByDefUuid)({ survey, entity: ancestor })(record),
348
399
  }));
349
400
  const ancestorDefUuidsAndKeysToVisit = [...ancestorDefUuidsAndKeys].reverse();
350
401
  for (let index = 1; otherRecordCurrentParentEntity && index < ancestorDefUuidsAndKeysToVisit.length; index++) {
@@ -352,16 +403,14 @@ const findEntityWithSameKeysInAnotherRecord = (params) => {
352
403
  otherRecordCurrentParentEntity = (0, exports.findEntityByKeyValues)({
353
404
  survey,
354
405
  cycle,
355
- record: recordOther,
356
406
  parentEntity: otherRecordCurrentParentEntity,
357
407
  entityDefUuid,
358
408
  keyValuesByDefUuid,
359
- });
409
+ })(recordOther);
360
410
  }
361
411
  return otherRecordCurrentParentEntity;
362
- };
363
- exports.findEntityWithSameKeysInAnotherRecord = findEntityWithSameKeysInAnotherRecord;
364
- const getDependentNodePointers = (params) => {
412
+ });
413
+ exports.getDependentNodePointers = recordGetter((params) => {
365
414
  const { survey, record, node, dependencyType, includeSelf = false, filterFn = null } = params;
366
415
  const nodeDefUuid = node.nodeDefUuid;
367
416
  const nodeDef = survey_1.Surveys.getNodeDefByUuid({ survey, uuid: nodeDefUuid });
@@ -374,7 +423,7 @@ const getDependentNodePointers = (params) => {
374
423
  };
375
424
  for (const dependentDef of dependentDefs) {
376
425
  // 1 find common ancestor node
377
- const commonAncestorNode = getClosestAncestorNode({ record, node, nodeDef, dependentDef, dependencyType });
426
+ const commonAncestorNode = getClosestAncestorNode({ node, nodeDef, dependentDef, dependencyType })(record);
378
427
  if (!commonAncestorNode)
379
428
  continue;
380
429
  const nodeDefDependentParent = survey_1.Surveys.getNodeDefParent({ survey, nodeDef: dependentDef });
@@ -382,10 +431,9 @@ const getDependentNodePointers = (params) => {
382
431
  throw new error_1.SystemError('record.nodes.dependents.dependencyOnRootFound');
383
432
  // 2 find descendant nodes of common parent node with nodeDefUuid = dependentDef uuid
384
433
  const dependentContextNodes = (0, exports.getDescendantsOrSelf)({
385
- record,
386
434
  node: commonAncestorNode,
387
435
  nodeDefDescendant: nodeDefDependentParent,
388
- });
436
+ })(record);
389
437
  for (const dependentContextNode of dependentContextNodes) {
390
438
  addToNodePointers({
391
439
  nodeCtx: dependentContextNode,
@@ -394,7 +442,7 @@ const getDependentNodePointers = (params) => {
394
442
  }
395
443
  }
396
444
  if (includeSelf) {
397
- const parentNode = (0, exports.getParent)(node)(record);
445
+ const parentNode = (0, exports.getParent)({ node })(record);
398
446
  if (parentNode) {
399
447
  addToNodePointers({
400
448
  nodeCtx: parentNode,
@@ -403,9 +451,8 @@ const getDependentNodePointers = (params) => {
403
451
  }
404
452
  }
405
453
  return nodePointers;
406
- };
407
- exports.getDependentNodePointers = getDependentNodePointers;
408
- const getAncestorCodePath = (params) => {
454
+ });
455
+ exports.getAncestorCodePath = recordGetter((params) => {
409
456
  const { record, parentNode, nodeDef, survey } = params;
410
457
  const getCodeAttributeItemCode = (codeAttribute) => {
411
458
  var _a;
@@ -427,23 +474,27 @@ const getAncestorCodePath = (params) => {
427
474
  currentParentCodeAttribute = (0, exports.getParentCodeAttribute)({ parentNode, nodeDef: ancestorCodeDef })(record);
428
475
  }
429
476
  return codePaths;
430
- };
431
- exports.getAncestorCodePath = getAncestorCodePath;
432
- const getCategoryItemUuid = (params) => {
477
+ });
478
+ exports.getCategoryItemUuid = recordGetter((params) => {
433
479
  const { survey, nodeDef, record, parentNode, code } = params;
434
480
  const categoryUuid = nodeDef.props.categoryUuid;
435
- const codePaths = [...(0, exports.getAncestorCodePath)({ survey, record, parentNode, nodeDef }), code];
481
+ const codePaths = [...(0, exports.getAncestorCodePath)({ survey, parentNode, nodeDef })(record), code];
436
482
  const item = survey_1.Surveys.getCategoryItemByCodePaths({ survey, categoryUuid, codePaths });
437
483
  return item === null || item === void 0 ? void 0 : item.uuid;
438
- };
439
- exports.getCategoryItemUuid = getCategoryItemUuid;
440
- const isNodeFilledByUser = (node) => (record) => !!(0, exports.findDescendantOrSelf)(node, (visitedNode) => node_1.Nodes.hasUserInputValue(visitedNode))(record);
441
- exports.isNodeFilledByUser = isNodeFilledByUser;
442
- const isNodeEmpty = (node) => (record) => !(0, exports.isNodeFilledByUser)(node)(record);
443
- exports.isNodeEmpty = isNodeEmpty;
484
+ });
485
+ exports.isNodeFilledByUser = positionalRecordGetter({
486
+ getter: ({ record, node }) => !!(0, exports.findDescendantOrSelf)({ node, predicate: (visitedNode) => node_1.Nodes.hasUserInputValue(visitedNode) })(record),
487
+ isPositional: isRecordNode,
488
+ toParams: (node) => ({ node }),
489
+ });
490
+ exports.isNodeEmpty = positionalRecordGetter({
491
+ getter: ({ record, node }) => !(0, exports.isNodeFilledByUser)({ node })(record),
492
+ isPositional: isRecordNode,
493
+ toParams: (node) => ({ node }),
494
+ });
444
495
  const isEmpty = (record) => {
445
496
  const rootNode = (0, exports.getRoot)(record);
446
- return rootNode ? (0, exports.isNodeEmpty)(rootNode)(record) : true;
497
+ return rootNode ? (0, exports.isNodeEmpty)({ node: rootNode })(record) : true;
447
498
  };
448
499
  exports.isEmpty = isEmpty;
449
500
  const getStep = (record) => { var _a; return (_a = record.step) !== null && _a !== void 0 ? _a : record_1.RECORD_STEP_DEFAULT; };