@openforis/arena-core 2.3.41 → 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 (176) hide show
  1. package/dist/esm/index.js.map +1 -1
  2. package/dist/esm/node/nodes.js +12 -4
  3. package/dist/esm/node/nodes.js.map +1 -1
  4. package/dist/esm/record/_records/recordCompletion.js +3 -3
  5. package/dist/esm/record/_records/recordCompletion.js.map +1 -1
  6. package/dist/esm/record/_records/recordGetters.js +221 -143
  7. package/dist/esm/record/_records/recordGetters.js.map +1 -1
  8. package/dist/esm/record/_records/recordNodesIndexUpdater.js +6 -4
  9. package/dist/esm/record/_records/recordNodesIndexUpdater.js.map +1 -1
  10. package/dist/esm/record/_records/recordPagesValidation.js +5 -5
  11. package/dist/esm/record/_records/recordPagesValidation.js.map +1 -1
  12. package/dist/esm/record/_records/recordUpdateOptions.js.map +1 -1
  13. package/dist/esm/record/_records/recordUpdater.js +1 -1
  14. package/dist/esm/record/_records/recordUpdater.js.map +1 -1
  15. package/dist/esm/record/_records/recordUtils.js +3 -7
  16. package/dist/esm/record/_records/recordUtils.js.map +1 -1
  17. package/dist/esm/record/nodePointers.js +1 -1
  18. package/dist/esm/record/nodePointers.js.map +1 -1
  19. package/dist/esm/record/recordCloner.js +1 -1
  20. package/dist/esm/record/recordCloner.js.map +1 -1
  21. package/dist/esm/record/recordExpressionEvaluator/functions.js +4 -5
  22. package/dist/esm/record/recordExpressionEvaluator/functions.js.map +1 -1
  23. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js +1 -1
  24. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  25. package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js +2 -2
  26. package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
  27. package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js +1 -1
  28. package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  29. package/dist/esm/record/recordFixer.js +5 -5
  30. package/dist/esm/record/recordFixer.js.map +1 -1
  31. package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js +2 -8
  32. package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
  33. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +7 -7
  34. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  35. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js +1 -1
  36. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js.map +1 -1
  37. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js +1 -1
  38. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  39. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js +1 -6
  40. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
  41. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js +3 -4
  42. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
  43. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js +1 -1
  44. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js.map +1 -1
  45. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js +3 -3
  46. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
  47. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js +4 -9
  48. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  49. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js +2 -3
  50. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  51. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js +1 -1
  52. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js.map +1 -1
  53. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js +2 -6
  54. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  55. package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js +2 -9
  56. package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  57. package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js +1 -1
  58. package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  59. package/dist/esm/record/recordPrettyPrinter.js +14 -12
  60. package/dist/esm/record/recordPrettyPrinter.js.map +1 -1
  61. package/dist/esm/record/recordUpdater.js +2 -2
  62. package/dist/esm/record/recordUpdater.js.map +1 -1
  63. package/dist/esm/record/recordValidator/attributeKeyValidator.js +4 -4
  64. package/dist/esm/record/recordValidator/attributeKeyValidator.js.map +1 -1
  65. package/dist/esm/record/recordValidator/attributeUniqueValidator.js +1 -1
  66. package/dist/esm/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  67. package/dist/esm/record/recordValidator/attributeValidator.js +8 -10
  68. package/dist/esm/record/recordValidator/attributeValidator.js.map +1 -1
  69. package/dist/esm/record/recordValidator/countVaildator.js +2 -2
  70. package/dist/esm/record/recordValidator/countVaildator.js.map +1 -1
  71. package/dist/esm/record/recordValidator/recordValidator.js +1 -2
  72. package/dist/esm/record/recordValidator/recordValidator.js.map +1 -1
  73. package/dist/esm/survey/nodeDefsFixer.js.map +1 -1
  74. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsIndex.js +2 -2
  75. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsIndex.js.map +1 -1
  76. package/dist/esm/utils/index.js.map +1 -1
  77. package/dist/esm/utils/mutationOptions.js +5 -0
  78. package/dist/esm/utils/mutationOptions.js.map +1 -0
  79. package/dist/esm/validation/index.js.map +1 -1
  80. package/dist/esm/validation/validations.js +26 -19
  81. package/dist/esm/validation/validations.js.map +1 -1
  82. package/dist/index.d.ts +2 -2
  83. package/dist/index.js.map +1 -1
  84. package/dist/node/nodes.d.ts +10 -3
  85. package/dist/node/nodes.js +12 -4
  86. package/dist/node/nodes.js.map +1 -1
  87. package/dist/record/_records/recordCompletion.js +3 -3
  88. package/dist/record/_records/recordCompletion.js.map +1 -1
  89. package/dist/record/_records/recordGetters.d.ts +104 -51
  90. package/dist/record/_records/recordGetters.js +221 -170
  91. package/dist/record/_records/recordGetters.js.map +1 -1
  92. package/dist/record/_records/recordNodesIndexUpdater.d.ts +6 -3
  93. package/dist/record/_records/recordNodesIndexUpdater.js +6 -4
  94. package/dist/record/_records/recordNodesIndexUpdater.js.map +1 -1
  95. package/dist/record/_records/recordPagesValidation.js +5 -5
  96. package/dist/record/_records/recordPagesValidation.js.map +1 -1
  97. package/dist/record/_records/recordUpdateOptions.d.ts +2 -2
  98. package/dist/record/_records/recordUpdateOptions.js.map +1 -1
  99. package/dist/record/_records/recordUpdater.js +1 -1
  100. package/dist/record/_records/recordUpdater.js.map +1 -1
  101. package/dist/record/_records/recordUtils.js +3 -7
  102. package/dist/record/_records/recordUtils.js.map +1 -1
  103. package/dist/record/nodePointers.js +1 -1
  104. package/dist/record/nodePointers.js.map +1 -1
  105. package/dist/record/recordCloner.js +1 -1
  106. package/dist/record/recordCloner.js.map +1 -1
  107. package/dist/record/recordExpressionEvaluator/functions.js +4 -5
  108. package/dist/record/recordExpressionEvaluator/functions.js.map +1 -1
  109. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js +1 -1
  110. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  111. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js +2 -2
  112. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
  113. package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js +1 -1
  114. package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  115. package/dist/record/recordFixer.js +5 -5
  116. package/dist/record/recordFixer.js.map +1 -1
  117. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js +2 -8
  118. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
  119. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +7 -7
  120. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  121. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.d.ts +2 -1
  122. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js +1 -1
  123. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js.map +1 -1
  124. package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js +1 -1
  125. package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  126. package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js +1 -6
  127. package/dist/record/recordNodesUpdater/recordNodeDependentsCountUpdater.js.map +1 -1
  128. package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js +3 -4
  129. package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
  130. package/dist/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js +1 -1
  131. package/dist/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js.map +1 -1
  132. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js +3 -3
  133. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
  134. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js +4 -9
  135. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  136. package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js +2 -3
  137. package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  138. package/dist/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js +1 -1
  139. package/dist/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js.map +1 -1
  140. package/dist/record/recordNodesUpdater/recordNodesDeleter.js +2 -6
  141. package/dist/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  142. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js +2 -9
  143. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  144. package/dist/record/recordNodesUpdater/recordNodesUpdater.js +1 -1
  145. package/dist/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  146. package/dist/record/recordPrettyPrinter.js +14 -12
  147. package/dist/record/recordPrettyPrinter.js.map +1 -1
  148. package/dist/record/recordUpdater.js +2 -2
  149. package/dist/record/recordUpdater.js.map +1 -1
  150. package/dist/record/recordValidator/attributeKeyValidator.js +4 -4
  151. package/dist/record/recordValidator/attributeKeyValidator.js.map +1 -1
  152. package/dist/record/recordValidator/attributeUniqueValidator.js +1 -1
  153. package/dist/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  154. package/dist/record/recordValidator/attributeValidator.js +8 -10
  155. package/dist/record/recordValidator/attributeValidator.js.map +1 -1
  156. package/dist/record/recordValidator/countVaildator.js +2 -2
  157. package/dist/record/recordValidator/countVaildator.js.map +1 -1
  158. package/dist/record/recordValidator/recordValidator.js +1 -2
  159. package/dist/record/recordValidator/recordValidator.js.map +1 -1
  160. package/dist/record/records.d.ts +340 -40
  161. package/dist/survey/nodeDefsFixer.d.ts +2 -2
  162. package/dist/survey/nodeDefsFixer.js.map +1 -1
  163. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.d.ts +3 -6
  164. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.js +2 -2
  165. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.js.map +1 -1
  166. package/dist/utils/index.d.ts +1 -0
  167. package/dist/utils/index.js.map +1 -1
  168. package/dist/utils/mutationOptions.d.ts +14 -0
  169. package/dist/utils/mutationOptions.js +9 -0
  170. package/dist/utils/mutationOptions.js.map +1 -0
  171. package/dist/validation/index.d.ts +1 -0
  172. package/dist/validation/index.js.map +1 -1
  173. package/dist/validation/validations.d.ts +17 -2
  174. package/dist/validation/validations.js +26 -19
  175. package/dist/validation/validations.js.map +1 -1
  176. package/package.json +1 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type { AppInfo } from './app'\n\nexport { Authorizer, AuthGroupName, UserStatus, Permission, UserTitle, UserFactory, Users } from './auth'\nexport type {\n AuthGroup,\n User,\n UserAuthGroup,\n UserAuthGroupProps,\n AuthToken,\n UserAuthTokenPayload,\n UserAuthTokenService,\n UserPrefs,\n UserPrefSurveys,\n UserProps,\n UserAuthRefreshToken,\n UserAuthRefreshTokenProps,\n UserAuthRefreshTokenPayload,\n UserService,\n UserTokenPayload,\n DownloadAuthTokenPayload,\n UserGroup,\n UserGroupProps,\n UserGroupQualifier,\n UserInvitation,\n} from './auth'\n\nexport { CategoryFactory, CategoryImportColumnType, CategoryItemFactory, CategoryLevelFactory } from './category'\nexport type {\n CategoryItemProps,\n Category,\n CategoryItem,\n CategoryLevel,\n CategoryLevelProps,\n CategoryImportSummary,\n CategoryImportSummaryColumn,\n CategoryItemService,\n CategoryLevelService,\n CategoryProps,\n CategoryService,\n} from './category'\n\nexport { Categories, CategoryItems } from './category'\n\nexport { ChainFactory, ChainStatusExec, ChainNodeDefFactory } from './chain'\nexport type {\n Chain,\n ChainProps,\n ChainService,\n ChainNodeDef,\n ChainNodeDefProps,\n ChainNodeDefService,\n ChainNodeDefAggregate,\n ChainNodeDefAggregateProps,\n} from './chain'\n\nexport { TraverseMethod } from './common'\nexport type { ArenaObject, ArenaService, Dictionary, Factory, I18n } from './common'\n\nexport type { FlatDataExportOptions, ArenaExportInfoFactoryParams, ArenaExportInfo } from './dataExport'\nexport {\n FlatDataExportDefaultOptions,\n FlatDataExportOption,\n FlatDataFiles,\n FlatDataExportModel,\n FlatDataExportColumnDataType,\n ArenaExportInfoFactory,\n UniqueFileNamesGenerator,\n} from './dataExport'\n\nexport { DataQueryMode, DataQuerySummaries } from './dataQuery'\nexport type { DataQuery, DataQuerySummary, DataQuerySummaryProps } from './dataQuery'\n\nexport { SystemError } from './error'\n\nexport {\n ExpressionNodeType,\n ExpressionNodeEvaluator,\n ExpressionVariable,\n JavascriptExpressionEvaluator,\n JavascriptExpressionParser,\n} from './expression'\nexport type {\n ArrayExpression,\n BinaryExpression,\n CallExpression,\n CompoundExpression,\n ConditionalExpression,\n ExpressionContext,\n ExpressionEvaluator,\n ExpressionFunction,\n ExpressionFunctions,\n ExpressionNode,\n ExpressionNodeEvaluatorConstructor,\n MemberExpression,\n IdentifierExpression,\n LiteralExpression,\n SequenceExpression,\n ThisExpression,\n UnaryExpression,\n} from './expression'\n\nexport { ExtraPropDataType, ExtraPropsDataGenerator } from './extraProp'\nexport type { ExtraPropDef, ExtraPropDefs } from './extraProp'\n\nexport { PointFactory, Points } from './geo'\nexport type { Point } from './geo'\n\nexport { JobBase, JobEventType, JobStatus } from './job'\nexport type { Job, JobContext, JobEvent, JobSerialized } from './job'\n\nexport { LanguageCode, Languages, LanguagesISO639part2 } from './language'\nexport type { Labels } from './language'\n\nexport type { Logger } from './logger'\n\nexport type { Message } from './message'\nexport { MessageNotificationType, MessagePropsKey, MessageStatus, MessageTargetUserType, Messages } from './message'\n\nexport { NodeFactory, NodeKeys, NodeMetaKeys, Nodes, NodeValueFormatter, NodeValues } from './node'\nexport type {\n ArenaRecordNode,\n Node,\n NodeMeta,\n NodePointer,\n NodeRefData,\n NodeService,\n NodesMap,\n NodeValueCode,\n NodeValueCoordinate,\n NodeValueFile,\n NodeValueTaxon,\n} from './node'\n\nexport {\n NodeDefCountType,\n NodeDefType,\n NodeDefFactory,\n NodeDefs,\n NodeDefEntityRenderType,\n NodeDefFileType,\n NodeDefTextInputType,\n NodeDefTextRenderType,\n FormHeaderColor,\n} from './nodeDef'\n\nexport { NodeDefExpressionEvaluator, NodeDefExpressionValidator } from './nodeDefExpressionEvaluator'\nexport type { CategoryItemProvider, TaxonProvider } from './nodeDefExpressionEvaluator'\n\nexport type {\n NodeDef,\n NodeDefLayout,\n NodeDefMeta,\n NodeDefProps,\n NodeDefPropsWithLayout,\n NodeDefBoolean,\n NodeDefBooleanProps,\n NodeDefCode,\n NodeDefCodeLayout,\n NodeDefCodeProps,\n NodeDefCoordinate,\n NodeDefCoordinateProps,\n NodeDefDate,\n NodeDefDecimal,\n NodeDefDecimalProps,\n NodeDefEntity,\n NodeDefEntityChildPosition,\n NodeDefEntityLayout,\n NodeDefEntityProps,\n NodeDefPrintOrientation,\n NodeDefFile,\n NodeDefFileProps,\n NodeDefFormHeader,\n NodeDefFormHeaderProps,\n NodeDefInteger,\n NodeDefPropsAdvanced,\n NodeDefTaxon,\n NodeDefTaxonProps,\n NodeDefText,\n NodeDefTextProps,\n NodeDefTextLayout,\n NodeDefTime,\n NodeDefTimeProps,\n NodeDefExpression,\n NodeDefMap,\n NodeDefService,\n NodeDefValidations,\n} from './nodeDef'\n\nexport {\n NodePointers,\n RecordCloner,\n RecordFactory,\n RecordFixer,\n Records,\n RECORD_STEP_DEFAULT,\n RecordExpressionEvaluator,\n RecordNodesUpdater,\n RecordPrettyPrinter,\n RecordUpdater,\n RecordUpdateResult,\n RecordValidator,\n RecordValidations,\n} from './record'\nexport type {\n AttributeValidatorParams,\n AttributesValidatorParams,\n NodeCreateParams,\n NodesUpdateParams,\n ArenaRecord,\n Record,\n RecordExpressionContext,\n RecordExpressionEvaluationContext,\n RecordService,\n RecordUpdateOptions,\n RecordValidatorParams,\n SortedAttributesValidatorParams,\n} from './record'\n\nexport { ServiceRegistry, ServiceType } from './registry'\n\nexport { DEFAULT_SRS, DEFAULT_SRS_INDEX, SRSFactory } from './srs'\nexport type { SRS, SRSIndex } from './srs'\n\nexport {\n NodeDefsFixer,\n SurveyDocImages,\n SurveyDocImageFactory,\n SurveyDocPlace,\n SurveyDependencyType,\n SurveyFactory,\n SurveyFileFactory,\n SurveyFileType,\n SurveyRefDataFactory,\n SurveySecurityProp,\n Surveys,\n surveyDocImagePropKeys,\n surveySecurityDefaults,\n defaultCycle,\n} from './survey'\nexport type {\n Survey,\n SurveyCycle,\n SurveyDependency,\n SurveyDependencyGraph,\n SurveyDocImage,\n SurveyDocImageFactoryParams,\n SurveyDocImageProps,\n SurveyFile,\n SurveyFileFactoryParams,\n SurveyFileProps,\n SurveyProps,\n SurveyRefData,\n SurveySecurity,\n SurveyService,\n} from './survey'\n\nexport { Taxa, Taxonomies, TaxonomyFactory, TaxonFactory, TaxonGenerator, VernacularNameFactory } from './taxonomy'\nexport type {\n VernacularNameParams,\n TaxonomyFactoryParams,\n TaxonFactoryParams,\n Taxonomy,\n TaxonomyService,\n VernacularNameProps,\n VernacularName,\n TaxonProps,\n Taxon,\n TaxonomyProps,\n TaxonService,\n} from './taxonomy'\n\nexport { SurveyBuilder, SurveyObjectBuilders } from './tests/builder/surveyBuilder'\nexport { RecordBuilder, RecordNodeBuilders } from './tests/builder/recordBuilder'\n\nexport {\n Arrays,\n DateFormats,\n Dates,\n FileNames,\n FileProcessor,\n Numbers,\n Objects,\n Promises,\n Queue,\n RetryProcessor,\n Strings,\n UnitOfTime,\n UUIDs,\n Versions,\n} from './utils'\n\nexport type { FileProcessorConstructorArgs, ParsedVersion } from './utils'\n\nexport {\n FieldValidators,\n ValidationFactory,\n ValidationResultFactory,\n ValidationResults,\n Validations,\n ValidationSeverity,\n Validator,\n ValidatorErrorKeys,\n} from './validation'\nexport type { FieldValidator, Validation, ValidationFields, ValidationResult, ValidationCounts } from './validation'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type { AppInfo } from './app'\n\nexport { Authorizer, AuthGroupName, UserStatus, Permission, UserTitle, UserFactory, Users } from './auth'\nexport type {\n AuthGroup,\n User,\n UserAuthGroup,\n UserAuthGroupProps,\n AuthToken,\n UserAuthTokenPayload,\n UserAuthTokenService,\n UserPrefs,\n UserPrefSurveys,\n UserProps,\n UserAuthRefreshToken,\n UserAuthRefreshTokenProps,\n UserAuthRefreshTokenPayload,\n UserService,\n UserTokenPayload,\n DownloadAuthTokenPayload,\n UserGroup,\n UserGroupProps,\n UserGroupQualifier,\n UserInvitation,\n} from './auth'\n\nexport { CategoryFactory, CategoryImportColumnType, CategoryItemFactory, CategoryLevelFactory } from './category'\nexport type {\n CategoryItemProps,\n Category,\n CategoryItem,\n CategoryLevel,\n CategoryLevelProps,\n CategoryImportSummary,\n CategoryImportSummaryColumn,\n CategoryItemService,\n CategoryLevelService,\n CategoryProps,\n CategoryService,\n} from './category'\n\nexport { Categories, CategoryItems } from './category'\n\nexport { ChainFactory, ChainStatusExec, ChainNodeDefFactory } from './chain'\nexport type {\n Chain,\n ChainProps,\n ChainService,\n ChainNodeDef,\n ChainNodeDefProps,\n ChainNodeDefService,\n ChainNodeDefAggregate,\n ChainNodeDefAggregateProps,\n} from './chain'\n\nexport { TraverseMethod } from './common'\nexport type { ArenaObject, ArenaService, Dictionary, Factory, I18n } from './common'\n\nexport type { FlatDataExportOptions, ArenaExportInfoFactoryParams, ArenaExportInfo } from './dataExport'\nexport {\n FlatDataExportDefaultOptions,\n FlatDataExportOption,\n FlatDataFiles,\n FlatDataExportModel,\n FlatDataExportColumnDataType,\n ArenaExportInfoFactory,\n UniqueFileNamesGenerator,\n} from './dataExport'\n\nexport { DataQueryMode, DataQuerySummaries } from './dataQuery'\nexport type { DataQuery, DataQuerySummary, DataQuerySummaryProps } from './dataQuery'\n\nexport { SystemError } from './error'\n\nexport {\n ExpressionNodeType,\n ExpressionNodeEvaluator,\n ExpressionVariable,\n JavascriptExpressionEvaluator,\n JavascriptExpressionParser,\n} from './expression'\nexport type {\n ArrayExpression,\n BinaryExpression,\n CallExpression,\n CompoundExpression,\n ConditionalExpression,\n ExpressionContext,\n ExpressionEvaluator,\n ExpressionFunction,\n ExpressionFunctions,\n ExpressionNode,\n ExpressionNodeEvaluatorConstructor,\n MemberExpression,\n IdentifierExpression,\n LiteralExpression,\n SequenceExpression,\n ThisExpression,\n UnaryExpression,\n} from './expression'\n\nexport { ExtraPropDataType, ExtraPropsDataGenerator } from './extraProp'\nexport type { ExtraPropDef, ExtraPropDefs } from './extraProp'\n\nexport { PointFactory, Points } from './geo'\nexport type { Point } from './geo'\n\nexport { JobBase, JobEventType, JobStatus } from './job'\nexport type { Job, JobContext, JobEvent, JobSerialized } from './job'\n\nexport { LanguageCode, Languages, LanguagesISO639part2 } from './language'\nexport type { Labels } from './language'\n\nexport type { Logger } from './logger'\n\nexport type { Message } from './message'\nexport { MessageNotificationType, MessagePropsKey, MessageStatus, MessageTargetUserType, Messages } from './message'\n\nexport { NodeFactory, NodeKeys, NodeMetaKeys, Nodes, NodeValueFormatter, NodeValues } from './node'\nexport type {\n ArenaRecordNode,\n Node,\n NodeMeta,\n NodePointer,\n NodeRefData,\n NodeService,\n NodesMap,\n NodeValueCode,\n NodeValueCoordinate,\n NodeValueFile,\n NodeValueTaxon,\n} from './node'\n\nexport {\n NodeDefCountType,\n NodeDefType,\n NodeDefFactory,\n NodeDefs,\n NodeDefEntityRenderType,\n NodeDefFileType,\n NodeDefTextInputType,\n NodeDefTextRenderType,\n FormHeaderColor,\n} from './nodeDef'\n\nexport { NodeDefExpressionEvaluator, NodeDefExpressionValidator } from './nodeDefExpressionEvaluator'\nexport type { CategoryItemProvider, TaxonProvider } from './nodeDefExpressionEvaluator'\n\nexport type {\n NodeDef,\n NodeDefLayout,\n NodeDefMeta,\n NodeDefProps,\n NodeDefPropsWithLayout,\n NodeDefBoolean,\n NodeDefBooleanProps,\n NodeDefCode,\n NodeDefCodeLayout,\n NodeDefCodeProps,\n NodeDefCoordinate,\n NodeDefCoordinateProps,\n NodeDefDate,\n NodeDefDecimal,\n NodeDefDecimalProps,\n NodeDefEntity,\n NodeDefEntityChildPosition,\n NodeDefEntityLayout,\n NodeDefEntityProps,\n NodeDefPrintOrientation,\n NodeDefFile,\n NodeDefFileProps,\n NodeDefFormHeader,\n NodeDefFormHeaderProps,\n NodeDefInteger,\n NodeDefPropsAdvanced,\n NodeDefTaxon,\n NodeDefTaxonProps,\n NodeDefText,\n NodeDefTextProps,\n NodeDefTextLayout,\n NodeDefTime,\n NodeDefTimeProps,\n NodeDefExpression,\n NodeDefMap,\n NodeDefService,\n NodeDefValidations,\n} from './nodeDef'\n\nexport {\n NodePointers,\n RecordCloner,\n RecordFactory,\n RecordFixer,\n Records,\n RECORD_STEP_DEFAULT,\n RecordExpressionEvaluator,\n RecordNodesUpdater,\n RecordPrettyPrinter,\n RecordUpdater,\n RecordUpdateResult,\n RecordValidator,\n RecordValidations,\n} from './record'\nexport type {\n AttributeValidatorParams,\n AttributesValidatorParams,\n NodeCreateParams,\n NodesUpdateParams,\n ArenaRecord,\n Record,\n RecordExpressionContext,\n RecordExpressionEvaluationContext,\n RecordService,\n RecordUpdateOptions,\n RecordValidatorParams,\n SortedAttributesValidatorParams,\n} from './record'\n\nexport { ServiceRegistry, ServiceType } from './registry'\n\nexport { DEFAULT_SRS, DEFAULT_SRS_INDEX, SRSFactory } from './srs'\nexport type { SRS, SRSIndex } from './srs'\n\nexport {\n NodeDefsFixer,\n SurveyDocImages,\n SurveyDocImageFactory,\n SurveyDocPlace,\n SurveyDependencyType,\n SurveyFactory,\n SurveyFileFactory,\n SurveyFileType,\n SurveyRefDataFactory,\n SurveySecurityProp,\n Surveys,\n surveyDocImagePropKeys,\n surveySecurityDefaults,\n defaultCycle,\n} from './survey'\nexport type {\n Survey,\n SurveyCycle,\n SurveyDependency,\n SurveyDependencyGraph,\n SurveyDocImage,\n SurveyDocImageFactoryParams,\n SurveyDocImageProps,\n SurveyFile,\n SurveyFileFactoryParams,\n SurveyFileProps,\n SurveyProps,\n SurveyRefData,\n SurveySecurity,\n SurveyService,\n} from './survey'\n\nexport { Taxa, Taxonomies, TaxonomyFactory, TaxonFactory, TaxonGenerator, VernacularNameFactory } from './taxonomy'\nexport type {\n VernacularNameParams,\n TaxonomyFactoryParams,\n TaxonFactoryParams,\n Taxonomy,\n TaxonomyService,\n VernacularNameProps,\n VernacularName,\n TaxonProps,\n Taxon,\n TaxonomyProps,\n TaxonService,\n} from './taxonomy'\n\nexport { SurveyBuilder, SurveyObjectBuilders } from './tests/builder/surveyBuilder'\nexport { RecordBuilder, RecordNodeBuilders } from './tests/builder/recordBuilder'\n\nexport {\n Arrays,\n DateFormats,\n Dates,\n FileNames,\n FileProcessor,\n Numbers,\n Objects,\n Promises,\n Queue,\n RetryProcessor,\n Strings,\n UnitOfTime,\n UUIDs,\n Versions,\n} from './utils'\n\nexport type { FileProcessorConstructorArgs, MutationOptions, ParsedVersion } from './utils'\n\nexport {\n FieldValidators,\n ValidationFactory,\n ValidationResultFactory,\n ValidationResults,\n Validations,\n ValidationSeverity,\n Validator,\n ValidatorErrorKeys,\n} from './validation'\nexport type {\n DissocFieldValidationOptions,\n FieldValidator,\n Validation,\n ValidationFields,\n ValidationResult,\n ValidationCounts,\n} from './validation'\n"]}
@@ -1,4 +1,5 @@
1
1
  import { NodeDef, NodeDefCountType } from '../nodeDef';
2
+ import { MutationOptions } from '../utils/mutationOptions';
2
3
  import { ArenaRecordNode } from './node';
3
4
  declare const isRoot: (node: ArenaRecordNode) => boolean;
4
5
  declare const areEqual: (nodeA: ArenaRecordNode, nodeB: ArenaRecordNode) => boolean;
@@ -64,8 +65,12 @@ declare const dissocChildApplicability: (node: ArenaRecordNode, nodeDefUuid: str
64
65
  };
65
66
  };
66
67
  };
67
- declare const assocChildEditable: (node: ArenaRecordNode, nodeDefUuid: string, editable: boolean, sideEffect?: boolean) => ArenaRecordNode;
68
- declare const assocChildVisible: (node: ArenaRecordNode, nodeDefUuid: string, visible: boolean, sideEffect?: boolean) => ArenaRecordNode;
68
+ declare function assocChildEditable(node: ArenaRecordNode, nodeDefUuid: string, editable: boolean, options?: MutationOptions): ArenaRecordNode;
69
+ /** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */
70
+ declare function assocChildEditable(node: ArenaRecordNode, nodeDefUuid: string, editable: boolean, sideEffect: boolean): ArenaRecordNode;
71
+ declare function assocChildVisible(node: ArenaRecordNode, nodeDefUuid: string, visible: boolean, options?: MutationOptions): ArenaRecordNode;
72
+ /** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */
73
+ declare function assocChildVisible(node: ArenaRecordNode, nodeDefUuid: string, visible: boolean, sideEffect: boolean): ArenaRecordNode;
69
74
  declare const assocChildrenCount: (params: {
70
75
  node: ArenaRecordNode;
71
76
  nodeDefUuid: string;
@@ -86,7 +91,9 @@ declare const removeStatusFlags: ({ node, sideEffect, }: {
86
91
  node: ArenaRecordNode;
87
92
  sideEffect?: boolean;
88
93
  }) => ArenaRecordNode;
89
- declare const assocValue: (node: ArenaRecordNode, value: any, sideEffect?: boolean) => ArenaRecordNode;
94
+ declare function assocValue(node: ArenaRecordNode, value: any, options?: MutationOptions): ArenaRecordNode;
95
+ /** @deprecated Pass the options object instead of the positional boolean: `{ sideEffect }` */
96
+ declare function assocValue(node: ArenaRecordNode, value: any, sideEffect: boolean): ArenaRecordNode;
90
97
  export declare const Nodes: {
91
98
  isRoot: typeof isRoot;
92
99
  areEqual: typeof areEqual;
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.Nodes = void 0;
15
15
  const nodeDef_1 = require("../nodeDef");
16
16
  const utils_1 = require("../utils");
17
+ const mutationOptions_1 = require("../utils/mutationOptions");
17
18
  const isRoot = (node) => !node.parentUuid;
18
19
  const areEqual = (nodeA, nodeB) => nodeA.uuid === nodeB.uuid;
19
20
  const isChildApplicable = (node, nodeDefUuid) => {
@@ -88,8 +89,14 @@ const updateMetaDictionary = ({ node, nodeDefUuid, propName, propValue, sideEffe
88
89
  nodeUpdated.dateModified = utils_1.Dates.nowFormattedForStorage();
89
90
  return nodeUpdated;
90
91
  };
91
- const assocChildEditable = (node, nodeDefUuid, editable, sideEffect = false) => updateMetaDictionary({ node, nodeDefUuid, propName: 'cEdit', propValue: editable, sideEffect });
92
- const assocChildVisible = (node, nodeDefUuid, visible, sideEffect = false) => updateMetaDictionary({ node, nodeDefUuid, propName: 'cVis', propValue: visible, sideEffect });
92
+ function assocChildEditable(node, nodeDefUuid, editable, options) {
93
+ const { sideEffect = false } = (0, mutationOptions_1.toMutationOptions)(options);
94
+ return updateMetaDictionary({ node, nodeDefUuid, propName: 'cEdit', propValue: editable, sideEffect });
95
+ }
96
+ function assocChildVisible(node, nodeDefUuid, visible, options) {
97
+ const { sideEffect = false } = (0, mutationOptions_1.toMutationOptions)(options);
98
+ return updateMetaDictionary({ node, nodeDefUuid, propName: 'cVis', propValue: visible, sideEffect });
99
+ }
93
100
  const assocChildrenCount = (params) => {
94
101
  var _a, _b;
95
102
  const { node, nodeDefUuid, count, countType } = params;
@@ -126,8 +133,9 @@ const omitStatusFlags = (node) => {
126
133
  return nodeCleaned;
127
134
  };
128
135
  const removeStatusFlags = ({ node, sideEffect = false, }) => (sideEffect ? clearStatusFlagsInPlace(node) : omitStatusFlags(node));
129
- const assocValue = (node, value, sideEffect = false) => {
136
+ function assocValue(node, value, options) {
130
137
  var _a;
138
+ const { sideEffect = false } = (0, mutationOptions_1.toMutationOptions)(options);
131
139
  const nodeUpdated = sideEffect ? node : Object.assign({}, node);
132
140
  nodeUpdated.value = value;
133
141
  nodeUpdated.updated = true;
@@ -139,7 +147,7 @@ const assocValue = (node, value, sideEffect = false) => {
139
147
  nodeUpdated.meta = Object.assign(Object.assign({}, meta), { defaultValueApplied: false, qualifierValueApplied: false });
140
148
  }
141
149
  return nodeUpdated;
142
- };
150
+ }
143
151
  exports.Nodes = {
144
152
  isRoot,
145
153
  areEqual,
@@ -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 { 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 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'\n\nconst updateMetaDictionary = ({\n node,\n nodeDefUuid,\n propName,\n propValue,\n sideEffect,\n}: {\n node: ArenaRecordNode\n nodeDefUuid: string\n propName: MetaBooleanDictionaryProp\n propValue: any\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) {\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\nconst assocChildEditable = (\n node: ArenaRecordNode,\n nodeDefUuid: string,\n editable: boolean,\n sideEffect = false\n): ArenaRecordNode => updateMetaDictionary({ node, nodeDefUuid, propName: 'cEdit', propValue: editable, sideEffect })\n\nconst assocChildVisible = (\n node: ArenaRecordNode,\n nodeDefUuid: string,\n visible: boolean,\n sideEffect = false\n): ArenaRecordNode => updateMetaDictionary({ node, nodeDefUuid, propName: 'cVis', propValue: visible, sideEffect })\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\nconst assocValue = (node: ArenaRecordNode, value: any, sideEffect = false): ArenaRecordNode => {\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 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 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 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'\n\nconst updateMetaDictionary = ({\n node,\n nodeDefUuid,\n propName,\n propValue,\n sideEffect,\n}: {\n node: ArenaRecordNode\n nodeDefUuid: string\n propName: MetaBooleanDictionaryProp\n propValue: any\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) {\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\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 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 assocChildrenCount,\n assocChildrenMaxCount,\n assocChildrenMinCount,\n mergeNodes,\n removeStatusFlags,\n assocValue,\n}\n"]}
@@ -17,17 +17,17 @@ const getAttributeCompletionStats = (params) => {
17
17
  const minCount = node_1.Nodes.getChildrenMinCount({ parentNode: entity, nodeDef });
18
18
  if (Number.isNaN(minCount) || minCount <= 0)
19
19
  return emptyStats();
20
- const filledNodesCount = (0, recordGetters_1.getChildren)(entity, nodeDef.uuid)(record).filter(node_1.Nodes.isValueNotBlank).length;
20
+ const filledNodesCount = (0, recordGetters_1.getChildren)({ parentNode: entity, childDefUuid: nodeDef.uuid })(record).filter(node_1.Nodes.isValueNotBlank).length;
21
21
  return { total: minCount, filled: Math.min(filledNodesCount, minCount) };
22
22
  }
23
23
  if (!nodeDef_1.NodeDefs.isRequired(nodeDef) && !nodeDef_1.NodeDefs.isKey(nodeDef))
24
24
  return emptyStats();
25
- const node = (0, recordGetters_1.getChildren)(entity, nodeDef.uuid)(record)[0];
25
+ const node = (0, recordGetters_1.getChildren)({ parentNode: entity, childDefUuid: nodeDef.uuid })(record)[0];
26
26
  return { total: 1, filled: node && node_1.Nodes.isValueNotBlank(node) ? 1 : 0 };
27
27
  };
28
28
  const getChildEntityCompletionStats = (params) => {
29
29
  const { survey, record, parentEntity, nodeDef } = params;
30
- const childEntities = (0, recordGetters_1.getChildren)(parentEntity, nodeDef.uuid)(record);
30
+ const childEntities = (0, recordGetters_1.getChildren)({ parentNode: parentEntity, childDefUuid: nodeDef.uuid })(record);
31
31
  if (nodeDef_1.NodeDefs.isSingle(nodeDef)) {
32
32
  const childEntity = childEntities[0];
33
33
  return childEntity ? (0, exports.getEntityCompletionStats)({ survey, record, entity: childEntity }) : emptyStats();
@@ -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":";;;AAAA,qCAAmD;AACnD,2CAA4E;AAC5E,yCAA8C;AAC9C,uCAAqC;AAErC,mDAAsD;AAOtD,MAAM,UAAU,GAAG,GAA0B,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;AAEzE,MAAM,QAAQ,GAAG,CAAC,QAA+B,EAAE,UAAiC,EAAQ,EAAE;IAC5F,QAAQ,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IAClC,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,2BAA2B,GAAG,CAAC,MAIpC,EAAyB,EAAE;IAC1B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAE1C,IAAI,kBAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,YAAK,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;QAC3E,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;YAAE,OAAO,UAAU,EAAE,CAAA;QAEhE,MAAM,gBAAgB,GAAG,IAAA,2BAAW,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CACrG,YAAK,CAAC,eAAe,CACtB,CAAC,MAAM,CAAA;QAER,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAA;IAC1E,CAAC;IAED,IAAI,CAAC,kBAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,UAAU,EAAE,CAAA;IAElF,MAAM,IAAI,GAAG,IAAA,2BAAW,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACvF,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,YAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC1E,CAAC,CAAA;AAED,MAAM,6BAA6B,GAAG,CAAC,MAKtC,EAAyB,EAAE;IAC1B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IACxD,MAAM,aAAa,GAAG,IAAA,2BAAW,EAAC,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;IAEnG,IAAI,kBAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QACpC,OAAO,WAAW,CAAC,CAAC,CAAC,IAAA,QAAA,wBAAwB,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;IACvG,CAAC;IAED,MAAM,WAAW,GAAG,YAAK,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAA;IACpF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IACzE,wEAAwE;IACxE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9D,IAAI,aAAa,KAAK,CAAC;QAAE,OAAO,UAAU,EAAE,CAAA;IAE5C,MAAM,KAAK,GAAG,UAAU,EAAE,CAAA;IAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;QACxC,gFAAgF;QAChF,QAAQ,CACN,KAAK,EACL,WAAW,CAAC,CAAC,CAAC,IAAA,QAAA,wBAAwB,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAC1G,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAEM,MAAM,wBAAwB,GAAG,CAAC,MAKxC,EAAyB,EAAE;IAC1B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;IACvE,MAAM,SAAS,GAAG,gBAAO,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IAChF,MAAM,SAAS,GAAG,gBAAO,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;IAE5E,MAAM,KAAK,GAAG,UAAU,EAAE,CAAA;IAC1B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,YAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAQ;QAE7D,IAAI,kBAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,qBAAqB;gBAAE,SAAQ;YACpC,QAAQ,CAAC,KAAK,EAAE,6BAA6B,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC7G,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAtBY,QAAA,wBAAwB,GAAxB,wBAAwB,CAsBpC;AAED,MAAM,mBAAmB,GAAG,CAAC,KAA4B,EAAU,EAAE;IACnE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAC/B,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,GAAG,CAAA;IAC1B,OAAO,eAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAA;AAC5D,CAAC,CAAA;AAED;;;;GAIG;AACI,MAAM,0BAA0B,GAAG,CAAC,MAI1C,EAAU,EAAE,CAAC,mBAAmB,CAAC,IAAA,QAAA,wBAAwB,EAAC,MAAM,CAAC,CAAC,CAAA;AAJtD,QAAA,0BAA0B,GAA1B,0BAA0B,CAI4B;AAEnE;;;GAGG;AACI,MAAM,6BAA6B,GAAG,CAAC,MAI7C,EAAU,EAAE,CAAC,mBAAmB,CAAC,IAAA,QAAA,wBAAwB,kCAAM,MAAM,KAAE,qBAAqB,EAAE,KAAK,IAAG,CAAC,CAAA;AAJ3F,QAAA,6BAA6B,GAA7B,6BAA6B,CAI8D;AAExG;;GAEG;AACI,MAAM,0BAA0B,GAAG,CAAC,MAA+C,EAAU,EAAE;IACpG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACjC,MAAM,UAAU,GAAG,IAAA,uBAAO,EAAC,MAAM,CAAC,CAAA;IAClC,OAAO,UAAU,CAAC,CAAC,CAAC,IAAA,QAAA,0BAA0B,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5F,CAAC,CAAA;AAJY,QAAA,0BAA0B,GAA1B,0BAA0B,CAItC","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;