@openforis/arena-core 2.3.40 → 2.3.42

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 (208) hide show
  1. package/dist/auth/authorizer.d.ts +3 -3
  2. package/dist/auth/authorizer.js.map +1 -1
  3. package/dist/esm/auth/authorizer.js.map +1 -1
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/esm/node/factory.js.map +1 -1
  6. package/dist/esm/node/index.js.map +1 -1
  7. package/dist/esm/node/node.js.map +1 -1
  8. package/dist/esm/node/nodePointer.js.map +1 -1
  9. package/dist/esm/node/nodeValueFormatter.js.map +1 -1
  10. package/dist/esm/node/nodeValues.js.map +1 -1
  11. package/dist/esm/node/nodes.js +13 -5
  12. package/dist/esm/node/nodes.js.map +1 -1
  13. package/dist/esm/node/service.js.map +1 -1
  14. package/dist/esm/nodeDefExpressionEvaluator/functions.js.map +1 -1
  15. package/dist/esm/record/_records/recordCompletion.js.map +1 -1
  16. package/dist/esm/record/_records/recordGetters.js.map +1 -1
  17. package/dist/esm/record/_records/recordNodesIndexUpdater.js +6 -4
  18. package/dist/esm/record/_records/recordNodesIndexUpdater.js.map +1 -1
  19. package/dist/esm/record/_records/recordPagesValidation.js.map +1 -1
  20. package/dist/esm/record/_records/recordUpdateOptions.js.map +1 -1
  21. package/dist/esm/record/_records/recordUpdater.js +1 -1
  22. package/dist/esm/record/_records/recordUpdater.js.map +1 -1
  23. package/dist/esm/record/_records/recordUtils.js.map +1 -1
  24. package/dist/esm/record/factory.js.map +1 -1
  25. package/dist/esm/record/index.js.map +1 -1
  26. package/dist/esm/record/nodePointers.js.map +1 -1
  27. package/dist/esm/record/record.js.map +1 -1
  28. package/dist/esm/record/recordCloner.js.map +1 -1
  29. package/dist/esm/record/recordExpressionEvaluator/context.js.map +1 -1
  30. package/dist/esm/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  31. package/dist/esm/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
  32. package/dist/esm/record/recordExpressionEvaluator/nodeValueExtractor.js.map +1 -1
  33. package/dist/esm/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  34. package/dist/esm/record/recordFixer.js.map +1 -1
  35. package/dist/esm/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js.map +1 -1
  36. package/dist/esm/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
  37. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +1 -1
  38. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  39. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js +1 -1
  40. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js.map +1 -1
  41. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  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.map +1 -1
  46. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  47. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  48. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsUpdateParams.js.map +1 -1
  49. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js +1 -1
  50. package/dist/esm/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js.map +1 -1
  51. package/dist/esm/record/recordNodesUpdater/recordNodesCreator.js.map +1 -1
  52. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js +1 -1
  53. package/dist/esm/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  54. package/dist/esm/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  55. package/dist/esm/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  56. package/dist/esm/record/recordNodesUpdater/recordUpdateResult.js.map +1 -1
  57. package/dist/esm/record/recordPrettyPrinter.js.map +1 -1
  58. package/dist/esm/record/recordUpdater.js.map +1 -1
  59. package/dist/esm/record/recordValidator/attributeKeyValidator.js.map +1 -1
  60. package/dist/esm/record/recordValidator/attributeTypeValidator.js.map +1 -1
  61. package/dist/esm/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  62. package/dist/esm/record/recordValidator/attributeValidator.js.map +1 -1
  63. package/dist/esm/record/recordValidator/countVaildator.js.map +1 -1
  64. package/dist/esm/record/recordValidator/recordValidator.js.map +1 -1
  65. package/dist/esm/record/service.js.map +1 -1
  66. package/dist/esm/survey/nodeDefsFixer.js.map +1 -1
  67. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsIndex.js +2 -2
  68. package/dist/esm/survey/surveys/_nodeDefs/nodeDefsIndex.js.map +1 -1
  69. package/dist/esm/tests/builder/recordBuilder/attributeBuilder.js.map +1 -1
  70. package/dist/esm/tests/builder/recordBuilder/entityBuilder.js.map +1 -1
  71. package/dist/esm/tests/builder/recordBuilder/nodeBuilder.js.map +1 -1
  72. package/dist/esm/tests/builder/recordBuilder/recordBuilder.js.map +1 -1
  73. package/dist/esm/utils/index.js.map +1 -1
  74. package/dist/esm/utils/mutationOptions.js +5 -0
  75. package/dist/esm/utils/mutationOptions.js.map +1 -0
  76. package/dist/esm/validation/index.js.map +1 -1
  77. package/dist/esm/validation/validations.js +26 -19
  78. package/dist/esm/validation/validations.js.map +1 -1
  79. package/dist/index.d.ts +4 -4
  80. package/dist/index.js.map +1 -1
  81. package/dist/node/factory.d.ts +4 -4
  82. package/dist/node/factory.js.map +1 -1
  83. package/dist/node/index.d.ts +1 -2
  84. package/dist/node/index.js.map +1 -1
  85. package/dist/node/node.d.ts +7 -2
  86. package/dist/node/node.js.map +1 -1
  87. package/dist/node/nodePointer.d.ts +2 -2
  88. package/dist/node/nodePointer.js.map +1 -1
  89. package/dist/node/nodeValueFormatter.d.ts +2 -2
  90. package/dist/node/nodeValueFormatter.js.map +1 -1
  91. package/dist/node/nodeValues.d.ts +21 -21
  92. package/dist/node/nodeValues.js.map +1 -1
  93. package/dist/node/nodes.d.ts +38 -31
  94. package/dist/node/nodes.js +13 -5
  95. package/dist/node/nodes.js.map +1 -1
  96. package/dist/node/service.d.ts +6 -6
  97. package/dist/node/service.js.map +1 -1
  98. package/dist/nodeDefExpressionEvaluator/functions.js.map +1 -1
  99. package/dist/record/_records/recordCompletion.d.ts +9 -9
  100. package/dist/record/_records/recordCompletion.js.map +1 -1
  101. package/dist/record/_records/recordGetters.d.ts +69 -69
  102. package/dist/record/_records/recordGetters.js.map +1 -1
  103. package/dist/record/_records/recordNodesIndexUpdater.d.ts +13 -10
  104. package/dist/record/_records/recordNodesIndexUpdater.js +6 -4
  105. package/dist/record/_records/recordNodesIndexUpdater.js.map +1 -1
  106. package/dist/record/_records/recordPagesValidation.d.ts +11 -11
  107. package/dist/record/_records/recordPagesValidation.js.map +1 -1
  108. package/dist/record/_records/recordUpdateOptions.d.ts +2 -2
  109. package/dist/record/_records/recordUpdateOptions.js.map +1 -1
  110. package/dist/record/_records/recordUpdater.d.ts +5 -5
  111. package/dist/record/_records/recordUpdater.js +1 -1
  112. package/dist/record/_records/recordUpdater.js.map +1 -1
  113. package/dist/record/_records/recordUtils.d.ts +6 -6
  114. package/dist/record/_records/recordUtils.js.map +1 -1
  115. package/dist/record/factory.d.ts +2 -2
  116. package/dist/record/factory.js.map +1 -1
  117. package/dist/record/index.d.ts +1 -2
  118. package/dist/record/index.js.map +1 -1
  119. package/dist/record/nodePointers.d.ts +6 -6
  120. package/dist/record/nodePointers.js.map +1 -1
  121. package/dist/record/record.d.ts +8 -5
  122. package/dist/record/record.js.map +1 -1
  123. package/dist/record/recordCloner.d.ts +3 -3
  124. package/dist/record/recordCloner.js.map +1 -1
  125. package/dist/record/recordExpressionEvaluator/context.d.ts +6 -6
  126. package/dist/record/recordExpressionEvaluator/context.js.map +1 -1
  127. package/dist/record/recordExpressionEvaluator/node/identifier/identifier.js.map +1 -1
  128. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.d.ts +5 -5
  129. package/dist/record/recordExpressionEvaluator/node/identifier/nodesFinder.js.map +1 -1
  130. package/dist/record/recordExpressionEvaluator/nodeValueExtractor.d.ts +2 -2
  131. package/dist/record/recordExpressionEvaluator/nodeValueExtractor.js.map +1 -1
  132. package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.d.ts +4 -4
  133. package/dist/record/recordExpressionEvaluator/recordExpressionEvaluator.js.map +1 -1
  134. package/dist/record/recordFixer.js.map +1 -1
  135. package/dist/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.d.ts +4 -4
  136. package/dist/record/recordNodesUpdater/recordEnumeratingItemsExpressionEvaluator.js.map +1 -1
  137. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.d.ts +4 -4
  138. package/dist/record/recordNodesUpdater/recordExpressionValueConverter.js.map +1 -1
  139. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js +1 -1
  140. package/dist/record/recordNodesUpdater/recordNodeDependentsApplicableUpdater.js.map +1 -1
  141. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.d.ts +4 -3
  142. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js +1 -1
  143. package/dist/record/recordNodesUpdater/recordNodeDependentsBooleanUpdater.js.map +1 -1
  144. package/dist/record/recordNodesUpdater/recordNodeDependentsCodeAttributesUpdater.js.map +1 -1
  145. package/dist/record/recordNodesUpdater/recordNodeDependentsDefaultValuesUpdater.js.map +1 -1
  146. package/dist/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js +1 -1
  147. package/dist/record/recordNodesUpdater/recordNodeDependentsEditableUpdater.js.map +1 -1
  148. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.d.ts +2 -2
  149. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratedEntitiesUpdater.js.map +1 -1
  150. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.d.ts +2 -2
  151. package/dist/record/recordNodesUpdater/recordNodeDependentsEnumeratingItemsUpdater.js.map +1 -1
  152. package/dist/record/recordNodesUpdater/recordNodeDependentsFileNamesEvaluator.js.map +1 -1
  153. package/dist/record/recordNodesUpdater/recordNodeDependentsUpdateParams.d.ts +2 -2
  154. package/dist/record/recordNodesUpdater/recordNodeDependentsUpdateParams.js.map +1 -1
  155. package/dist/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js +1 -1
  156. package/dist/record/recordNodesUpdater/recordNodeDependentsVisibleUpdater.js.map +1 -1
  157. package/dist/record/recordNodesUpdater/recordNodesCreator.d.ts +4 -4
  158. package/dist/record/recordNodesUpdater/recordNodesCreator.js.map +1 -1
  159. package/dist/record/recordNodesUpdater/recordNodesDeleter.d.ts +3 -3
  160. package/dist/record/recordNodesUpdater/recordNodesDeleter.js +1 -1
  161. package/dist/record/recordNodesUpdater/recordNodesDeleter.js.map +1 -1
  162. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.d.ts +4 -4
  163. package/dist/record/recordNodesUpdater/recordNodesDependentsUpdaterCommons.js.map +1 -1
  164. package/dist/record/recordNodesUpdater/recordNodesUpdater.d.ts +2 -2
  165. package/dist/record/recordNodesUpdater/recordNodesUpdater.js.map +1 -1
  166. package/dist/record/recordNodesUpdater/recordUpdateResult.d.ts +6 -6
  167. package/dist/record/recordNodesUpdater/recordUpdateResult.js.map +1 -1
  168. package/dist/record/recordPrettyPrinter.d.ts +7 -7
  169. package/dist/record/recordPrettyPrinter.js.map +1 -1
  170. package/dist/record/recordUpdater.js.map +1 -1
  171. package/dist/record/recordValidator/attributeKeyValidator.d.ts +4 -4
  172. package/dist/record/recordValidator/attributeKeyValidator.js.map +1 -1
  173. package/dist/record/recordValidator/attributeTypeValidator.d.ts +4 -4
  174. package/dist/record/recordValidator/attributeTypeValidator.js.map +1 -1
  175. package/dist/record/recordValidator/attributeUniqueValidator.d.ts +4 -4
  176. package/dist/record/recordValidator/attributeUniqueValidator.js.map +1 -1
  177. package/dist/record/recordValidator/attributeValidator.d.ts +6 -6
  178. package/dist/record/recordValidator/attributeValidator.js.map +1 -1
  179. package/dist/record/recordValidator/countVaildator.d.ts +7 -7
  180. package/dist/record/recordValidator/countVaildator.js.map +1 -1
  181. package/dist/record/recordValidator/recordValidator.js.map +1 -1
  182. package/dist/record/records.d.ts +6 -6
  183. package/dist/record/service.d.ts +8 -8
  184. package/dist/record/service.js.map +1 -1
  185. package/dist/survey/nodeDefsFixer.d.ts +2 -2
  186. package/dist/survey/nodeDefsFixer.js.map +1 -1
  187. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.d.ts +3 -6
  188. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.js +2 -2
  189. package/dist/survey/surveys/_nodeDefs/nodeDefsIndex.js.map +1 -1
  190. package/dist/tests/builder/recordBuilder/attributeBuilder.d.ts +5 -5
  191. package/dist/tests/builder/recordBuilder/attributeBuilder.js.map +1 -1
  192. package/dist/tests/builder/recordBuilder/entityBuilder.d.ts +5 -5
  193. package/dist/tests/builder/recordBuilder/entityBuilder.js.map +1 -1
  194. package/dist/tests/builder/recordBuilder/nodeBuilder.d.ts +5 -5
  195. package/dist/tests/builder/recordBuilder/nodeBuilder.js.map +1 -1
  196. package/dist/tests/builder/recordBuilder/recordBuilder.d.ts +2 -2
  197. package/dist/tests/builder/recordBuilder/recordBuilder.js.map +1 -1
  198. package/dist/utils/index.d.ts +1 -0
  199. package/dist/utils/index.js.map +1 -1
  200. package/dist/utils/mutationOptions.d.ts +14 -0
  201. package/dist/utils/mutationOptions.js +9 -0
  202. package/dist/utils/mutationOptions.js.map +1 -0
  203. package/dist/validation/index.d.ts +1 -0
  204. package/dist/validation/index.js.map +1 -1
  205. package/dist/validation/validations.d.ts +17 -2
  206. package/dist/validation/validations.js +26 -19
  207. package/dist/validation/validations.js.map +1 -1
  208. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { Record } from '../record';
1
+ import { ArenaRecord } from '../record';
2
2
  import { Survey } from '../survey';
3
3
  import { AuthGroup } from './authGroup';
4
4
  import { User } from './user';
@@ -16,8 +16,8 @@ export declare const canViewRecord: (user: User, surveyInfo: Survey) => boolean;
16
16
  export declare const canExportAllRecords: (user: User, surveyInfo: Survey) => boolean;
17
17
  export declare const canViewNotOwnedRecords: (user: User, surveyInfo: Survey) => boolean;
18
18
  export declare const canExportRecordsList: (user: User, surveyInfo: Survey) => boolean;
19
- export declare const canEditRecord: (user: User, record: Record, allowAnalysisStepEdit?: boolean) => boolean;
20
- declare const canChangeRecordProps: (user: User, record: Record) => boolean;
19
+ export declare const canEditRecord: (user: User, record: ArenaRecord, allowAnalysisStepEdit?: boolean) => boolean;
20
+ declare const canChangeRecordProps: (user: User, record: ArenaRecord) => boolean;
21
21
  declare const canImportRecords: (user: User, surveyInfo: Survey) => boolean;
22
22
  declare const canViewUser: (user: User, _surveyInfo: Survey, userToView: User) => boolean;
23
23
  declare const canViewOtherUsersEmail: ({ user, surveyInfo }: {
@@ -1 +1 @@
1
- {"version":3,"file":"authorizer.js","sourceRoot":"","sources":["../../src/auth/authorizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Record, Records } from '../record'\nimport { Survey, Surveys } from '../survey'\nimport { AuthGroup, AuthGroupName } from './authGroup'\nimport { AuthGroups } from './authGroups'\nimport { Permission, RecordStepPermission } from './permission'\nimport { User } from './user'\nimport { Users } from './users'\n\n// ======\n// ====== Survey\n// ======\n\nconst _getSurveyUserGroup = (user: User, surveyInfo: Survey, includeSystemAdmin = true): AuthGroup | undefined =>\n surveyInfo ? Users.getAuthGroupBySurveyUuid(surveyInfo.uuid, includeSystemAdmin)(user) : undefined\n\nconst _hasAuthGroupForSurvey = ({ user, surveyInfo }: { user: User; surveyInfo: Survey }): boolean =>\n Boolean(_getSurveyUserGroup(user, surveyInfo))\n\nconst _hasSurveyPermission =\n (permission: Permission) =>\n (user: User, surveyInfo: Survey): boolean => {\n if (!user) return false\n\n if (Users.isSystemAdmin(user)) return true\n\n if (!surveyInfo) return false\n\n const authGroup = _getSurveyUserGroup(user, surveyInfo)\n if (!authGroup) return false\n\n return AuthGroups.getPermissions(authGroup).includes(permission)\n }\n\nconst _hasPermissionInSomeGroup =\n (permission: Permission) =>\n (user: User): boolean => {\n if (Users.isSystemAdmin(user)) return true\n const groups = Users.getAuthGroups(user)\n return groups.some((group) => AuthGroups.getPermissions(group).includes(permission))\n }\n\n// CREATE\nconst canCreateSurvey = _hasPermissionInSomeGroup(Permission.surveyCreate)\nconst canCreateTemplate = (user: User): boolean => Users.isSystemAdmin(user)\nconst getMaxSurveysUserCanCreate = (user: User): number => {\n if (Users.isSystemAdmin(user)) return Number.NaN\n if (canCreateSurvey(user)) return Users.getMaxSurveys(user)\n return 0\n}\n\n// READ\nconst canViewSurvey = (user: User, surveyInfo: Survey): boolean =>\n Users.isSystemAdmin(user) || _hasAuthGroupForSurvey({ user, surveyInfo })\nconst canExportSurvey = _hasSurveyPermission(Permission.recordAnalyse)\nconst canExportSurveysList = (user: User): boolean => Users.isSystemAdmin(user)\nconst canViewTemplates = (user: User): boolean => Users.isSystemAdmin(user)\n// UPDATE\nconst canEditSurvey = _hasSurveyPermission(Permission.surveyEdit)\nconst canEditSurveyConfig = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditSurveyOwner = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditTemplates = (user: User): boolean => Users.isSystemAdmin(user)\nconst canRefreshAllSurveyRdbs = (user: User): boolean => Users.isSystemAdmin(user)\n\n// ======\n// ====== Record\n// ======\n\n// CREATE\nexport const canCreateRecord = _hasSurveyPermission(Permission.recordCreate)\n\n// READ\nexport const canViewRecord = _hasSurveyPermission(Permission.recordView)\nexport const canExportAllRecords = _hasSurveyPermission(Permission.recordCleanse)\nexport const canViewNotOwnedRecords = (user: User, surveyInfo: Survey): boolean => {\n if (!surveyInfo || !canViewSurvey(user, surveyInfo)) return false\n\n const { uuid: surveyUuid } = surveyInfo\n const groupInCurrentSurvey = Users.getAuthGroupBySurveyUuid(surveyUuid)(user)\n const groupName = groupInCurrentSurvey?.name\n\n if (groupName === AuthGroupName.dataEditor) {\n return Surveys.isDataEditorViewNotOwnedRecordsAllowed(surveyInfo)\n }\n if (groupName === AuthGroupName.dataAnalyst) {\n return Surveys.isDataAnalystViewNotOwnedRecordsAllowed(surveyInfo)\n }\n if (canExportAllRecords(user, surveyInfo)) return true\n\n return false\n}\nexport const canExportRecordsList = _hasSurveyPermission(Permission.surveyEdit)\n\n// UPDATE\nexport const canEditRecord = (user: User, record: Record, allowAnalysisStepEdit = false): boolean => {\n if (\n !user ||\n !record ||\n // records in analysis cannot be edited\n (!allowAnalysisStepEdit && Records.isInAnalysisStep(record))\n ) {\n return false\n }\n // system admin does not have an auth group associated to the survey, but he can always edit records;\n if (Users.isSystemAdmin(user)) {\n return true\n }\n const { surveyUuid, ownerUuid } = record\n // if user doesn't have an auth group associated to the survey, he cannot edit records\n const userAuthGroup = Users.getAuthGroupBySurveyUuid(surveyUuid)(user)\n if (!userAuthGroup) return false\n\n // groups without the record edit permission (e.g. survey guests) cannot edit records,\n // even when their record steps permission allows it (record steps permissions are used also to view records)\n if (!AuthGroups.getPermissions(userAuthGroup).includes(Permission.recordEdit)) return false\n\n // Level = 'all' or 'own'. If 'own', user can only edit records assigned to him\n // If 'all', he can edit all survey's records\n // permission checks must not throw: a group without record steps cannot edit records\n const level = AuthGroups.getRecordSteps(userAuthGroup)?.[Records.getStep(record)]\n return level === RecordStepPermission.all || (level === RecordStepPermission.own && ownerUuid === user.uuid)\n}\n\nconst canChangeRecordProps = (user: User, record: Record) => canEditRecord(user, record, true)\n\nconst canDeleteRecord = canEditRecord\n\nconst canDemoteRecord = canChangeRecordProps\n\nconst canChangeRecordOwner = canChangeRecordProps\n\nconst canChangeRecordStep = canChangeRecordProps\n\nconst canCleanseRecords = _hasSurveyPermission(Permission.recordCleanse)\n\nconst canExportRecords = _hasSurveyPermission(Permission.recordView)\n\nconst canImportRecords = (user: User, surveyInfo: Survey) =>\n surveyInfo?.published && _hasSurveyPermission(Permission.recordCreate)(user, surveyInfo)\n\nconst canAnalyzeRecords = _hasSurveyPermission(Permission.recordAnalyse)\n\nconst canUpdateRecordsStep = canAnalyzeRecords\n\n// ======\n// ====== Explorer\n// ======\n\nconst canUseExplorer = canCleanseRecords\n\n// ======\n// ====== Map\n// ======\n\nconst canUseMap = canAnalyzeRecords\n\n// ======\n// ====== Users\n// ======\n\n// CREATE\nconst canInviteUsers = _hasSurveyPermission(Permission.userInvite)\n\n// READ\nconst canViewSurveyUsers = _hasSurveyPermission(Permission.userInvite)\n\nconst _usersBelongToSameSurvey = ({ user, userToView }: { user: User; userToView: User }) =>\n Users.getAuthGroups(user).some(\n (authGroupUser) =>\n AuthGroups.isSurveyGroup(authGroupUser) &&\n Users.getAuthGroups(userToView).some(\n (authGroupUserToView) =>\n AuthGroups.isSurveyGroup(authGroupUserToView) &&\n AuthGroups.getSurveyUuid(authGroupUserToView) === AuthGroups.getSurveyUuid(authGroupUser)\n )\n )\n\nconst canViewUser = (user: User, _surveyInfo: Survey, userToView: User) =>\n Users.isSystemAdmin(user) || Users.isEqual(userToView)(user) || _usersBelongToSameSurvey({ user, userToView })\n\nconst canViewOtherUsersEmail = ({ user, surveyInfo }: { user: User; surveyInfo: Survey }) =>\n Users.isSystemAdmin(user) || canInviteUsers(user, surveyInfo)\n\nconst canViewOtherUsersNameInSameSurvey = (user: User, surveyInfo: Survey): boolean =>\n _hasSurveyPermission(Permission.recordView)(user, surveyInfo)\n\nconst canViewAllUsers = (user: User) => Users.isSystemAdmin(user)\n\n// EDIT\nconst _hasUserEditAccess = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n Users.isSystemAdmin(user) ||\n (_hasSurveyPermission(Permission.userEdit)(user, surveyInfo) &&\n // user to update has an auth group in the same survey\n _hasAuthGroupForSurvey({ user: userToUpdate, surveyInfo }))\n\nconst canCreateUsers = (user: User): boolean => Users.isSystemAdmin(user)\n\nconst canEditUser = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n Users.hasAccepted(userToUpdate) &&\n (Users.isEqual(user)(userToUpdate) || _hasUserEditAccess(user, surveyInfo, userToUpdate))\n\nconst canEditUserEmail = (user: User): boolean => Users.isSystemAdmin(user)\n\nconst canEditUserGroup = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n !Users.isEqual(user)(userToUpdate) && _hasUserEditAccess(user, surveyInfo, userToUpdate)\n\nconst canRemoveUser = (user: User, surveyInfo: Survey, userToRemove: User): boolean =>\n !Users.isEqual(user)(userToRemove) &&\n !Users.isSystemAdmin(userToRemove) &&\n _hasUserEditAccess(user, surveyInfo, userToRemove)\n\nconst canEditUserSurveyManager = (user: User) => Users.isSystemAdmin(user)\nconst canEditUserMaxSurveys = (user: User) => Users.isSystemAdmin(user)\n\n// USER ACCESS REQUESTS\nconst canViewUsersAccessRequests = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditUsersAccessRequests = (user: User): boolean => Users.isSystemAdmin(user)\n\n// INVITE\nconst getUserGroupsCanAssign = ({\n user,\n surveyInfo = null,\n editingLoggedUser = false,\n showOnlySurveyGroups = false,\n}: {\n user: User\n surveyInfo?: Survey | null\n editingLoggedUser?: boolean\n showOnlySurveyGroups?: boolean\n}) => {\n const groups = []\n\n let surveyGroups: AuthGroup[] = []\n if (editingLoggedUser && !surveyInfo) {\n // This can happen for system administrators when they don't have an active survey\n surveyGroups = []\n } else if (surveyInfo) {\n if (surveyInfo.published) {\n surveyGroups = Surveys.getAuthGroups(surveyInfo)\n } else {\n const adminGroup = Surveys.getAuthGroupAdmin(surveyInfo)\n surveyGroups = adminGroup ? [adminGroup] : []\n }\n }\n\n // do not allow surveyEditor group selection (remove surveyEditor group completely?)\n surveyGroups = surveyGroups.filter((group) => group.name !== AuthGroupName.surveyEditor)\n\n groups.push(...surveyGroups)\n\n if (!showOnlySurveyGroups && (Users.isSystemAdmin(user) || Users.isSurveyManager(user))) {\n // Add SystemAdmin or SurveyManager group if current user is a SystemAdmin or SurveyManager himself\n const userNonSurveyGroups = Users.getAuthGroups(user).filter((group) => !AuthGroups.isSurveyGroup(group))\n groups.push(...userNonSurveyGroups)\n }\n return AuthGroups.sortGroups(groups)\n}\n\nexport const Authorizer = {\n // Survey\n canCreateSurvey,\n canCreateTemplate,\n getMaxSurveysUserCanCreate,\n canViewSurvey,\n canExportSurvey,\n canExportSurveysList,\n canViewTemplates,\n canEditSurvey,\n canEditSurveyConfig,\n canEditSurveyOwner,\n canEditTemplates,\n canRefreshAllSurveyRdbs,\n // Record\n canCreateRecord,\n canViewRecord,\n canExportAllRecords,\n canViewNotOwnedRecords,\n canExportRecordsList,\n canEditRecord,\n canDeleteRecord,\n canDemoteRecord,\n canChangeRecordOwner,\n canChangeRecordStep,\n canCleanseRecords,\n canExportRecords,\n canImportRecords,\n canAnalyzeRecords,\n canUpdateRecordsStep,\n // Explorer\n canUseExplorer,\n // Map\n canUseMap,\n // Users\n canInviteUsers,\n canViewSurveyUsers,\n canViewUser,\n canViewOtherUsersEmail,\n canViewOtherUsersNameInSameSurvey,\n canViewAllUsers,\n canCreateUsers,\n canEditUser,\n canEditUserEmail,\n canEditUserGroup,\n canRemoveUser,\n canEditUserSurveyManager,\n canEditUserMaxSurveys,\n // User Access Requests\n canViewUsersAccessRequests,\n canEditUsersAccessRequests,\n // Invite\n getUserGroupsCanAssign,\n}\n"]}
1
+ {"version":3,"file":"authorizer.js","sourceRoot":"","sources":["../../src/auth/authorizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArenaRecord, Records } from '../record'\nimport { Survey, Surveys } from '../survey'\nimport { AuthGroup, AuthGroupName } from './authGroup'\nimport { AuthGroups } from './authGroups'\nimport { Permission, RecordStepPermission } from './permission'\nimport { User } from './user'\nimport { Users } from './users'\n\n// ======\n// ====== Survey\n// ======\n\nconst _getSurveyUserGroup = (user: User, surveyInfo: Survey, includeSystemAdmin = true): AuthGroup | undefined =>\n surveyInfo ? Users.getAuthGroupBySurveyUuid(surveyInfo.uuid, includeSystemAdmin)(user) : undefined\n\nconst _hasAuthGroupForSurvey = ({ user, surveyInfo }: { user: User; surveyInfo: Survey }): boolean =>\n Boolean(_getSurveyUserGroup(user, surveyInfo))\n\nconst _hasSurveyPermission =\n (permission: Permission) =>\n (user: User, surveyInfo: Survey): boolean => {\n if (!user) return false\n\n if (Users.isSystemAdmin(user)) return true\n\n if (!surveyInfo) return false\n\n const authGroup = _getSurveyUserGroup(user, surveyInfo)\n if (!authGroup) return false\n\n return AuthGroups.getPermissions(authGroup).includes(permission)\n }\n\nconst _hasPermissionInSomeGroup =\n (permission: Permission) =>\n (user: User): boolean => {\n if (Users.isSystemAdmin(user)) return true\n const groups = Users.getAuthGroups(user)\n return groups.some((group) => AuthGroups.getPermissions(group).includes(permission))\n }\n\n// CREATE\nconst canCreateSurvey = _hasPermissionInSomeGroup(Permission.surveyCreate)\nconst canCreateTemplate = (user: User): boolean => Users.isSystemAdmin(user)\nconst getMaxSurveysUserCanCreate = (user: User): number => {\n if (Users.isSystemAdmin(user)) return Number.NaN\n if (canCreateSurvey(user)) return Users.getMaxSurveys(user)\n return 0\n}\n\n// READ\nconst canViewSurvey = (user: User, surveyInfo: Survey): boolean =>\n Users.isSystemAdmin(user) || _hasAuthGroupForSurvey({ user, surveyInfo })\nconst canExportSurvey = _hasSurveyPermission(Permission.recordAnalyse)\nconst canExportSurveysList = (user: User): boolean => Users.isSystemAdmin(user)\nconst canViewTemplates = (user: User): boolean => Users.isSystemAdmin(user)\n// UPDATE\nconst canEditSurvey = _hasSurveyPermission(Permission.surveyEdit)\nconst canEditSurveyConfig = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditSurveyOwner = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditTemplates = (user: User): boolean => Users.isSystemAdmin(user)\nconst canRefreshAllSurveyRdbs = (user: User): boolean => Users.isSystemAdmin(user)\n\n// ======\n// ====== Record\n// ======\n\n// CREATE\nexport const canCreateRecord = _hasSurveyPermission(Permission.recordCreate)\n\n// READ\nexport const canViewRecord = _hasSurveyPermission(Permission.recordView)\nexport const canExportAllRecords = _hasSurveyPermission(Permission.recordCleanse)\nexport const canViewNotOwnedRecords = (user: User, surveyInfo: Survey): boolean => {\n if (!surveyInfo || !canViewSurvey(user, surveyInfo)) return false\n\n const { uuid: surveyUuid } = surveyInfo\n const groupInCurrentSurvey = Users.getAuthGroupBySurveyUuid(surveyUuid)(user)\n const groupName = groupInCurrentSurvey?.name\n\n if (groupName === AuthGroupName.dataEditor) {\n return Surveys.isDataEditorViewNotOwnedRecordsAllowed(surveyInfo)\n }\n if (groupName === AuthGroupName.dataAnalyst) {\n return Surveys.isDataAnalystViewNotOwnedRecordsAllowed(surveyInfo)\n }\n if (canExportAllRecords(user, surveyInfo)) return true\n\n return false\n}\nexport const canExportRecordsList = _hasSurveyPermission(Permission.surveyEdit)\n\n// UPDATE\nexport const canEditRecord = (user: User, record: ArenaRecord, allowAnalysisStepEdit = false): boolean => {\n if (\n !user ||\n !record ||\n // records in analysis cannot be edited\n (!allowAnalysisStepEdit && Records.isInAnalysisStep(record))\n ) {\n return false\n }\n // system admin does not have an auth group associated to the survey, but he can always edit records;\n if (Users.isSystemAdmin(user)) {\n return true\n }\n const { surveyUuid, ownerUuid } = record\n // if user doesn't have an auth group associated to the survey, he cannot edit records\n const userAuthGroup = Users.getAuthGroupBySurveyUuid(surveyUuid)(user)\n if (!userAuthGroup) return false\n\n // groups without the record edit permission (e.g. survey guests) cannot edit records,\n // even when their record steps permission allows it (record steps permissions are used also to view records)\n if (!AuthGroups.getPermissions(userAuthGroup).includes(Permission.recordEdit)) return false\n\n // Level = 'all' or 'own'. If 'own', user can only edit records assigned to him\n // If 'all', he can edit all survey's records\n // permission checks must not throw: a group without record steps cannot edit records\n const level = AuthGroups.getRecordSteps(userAuthGroup)?.[Records.getStep(record)]\n return level === RecordStepPermission.all || (level === RecordStepPermission.own && ownerUuid === user.uuid)\n}\n\nconst canChangeRecordProps = (user: User, record: ArenaRecord) => canEditRecord(user, record, true)\n\nconst canDeleteRecord = canEditRecord\n\nconst canDemoteRecord = canChangeRecordProps\n\nconst canChangeRecordOwner = canChangeRecordProps\n\nconst canChangeRecordStep = canChangeRecordProps\n\nconst canCleanseRecords = _hasSurveyPermission(Permission.recordCleanse)\n\nconst canExportRecords = _hasSurveyPermission(Permission.recordView)\n\nconst canImportRecords = (user: User, surveyInfo: Survey) =>\n surveyInfo?.published && _hasSurveyPermission(Permission.recordCreate)(user, surveyInfo)\n\nconst canAnalyzeRecords = _hasSurveyPermission(Permission.recordAnalyse)\n\nconst canUpdateRecordsStep = canAnalyzeRecords\n\n// ======\n// ====== Explorer\n// ======\n\nconst canUseExplorer = canCleanseRecords\n\n// ======\n// ====== Map\n// ======\n\nconst canUseMap = canAnalyzeRecords\n\n// ======\n// ====== Users\n// ======\n\n// CREATE\nconst canInviteUsers = _hasSurveyPermission(Permission.userInvite)\n\n// READ\nconst canViewSurveyUsers = _hasSurveyPermission(Permission.userInvite)\n\nconst _usersBelongToSameSurvey = ({ user, userToView }: { user: User; userToView: User }) =>\n Users.getAuthGroups(user).some(\n (authGroupUser) =>\n AuthGroups.isSurveyGroup(authGroupUser) &&\n Users.getAuthGroups(userToView).some(\n (authGroupUserToView) =>\n AuthGroups.isSurveyGroup(authGroupUserToView) &&\n AuthGroups.getSurveyUuid(authGroupUserToView) === AuthGroups.getSurveyUuid(authGroupUser)\n )\n )\n\nconst canViewUser = (user: User, _surveyInfo: Survey, userToView: User) =>\n Users.isSystemAdmin(user) || Users.isEqual(userToView)(user) || _usersBelongToSameSurvey({ user, userToView })\n\nconst canViewOtherUsersEmail = ({ user, surveyInfo }: { user: User; surveyInfo: Survey }) =>\n Users.isSystemAdmin(user) || canInviteUsers(user, surveyInfo)\n\nconst canViewOtherUsersNameInSameSurvey = (user: User, surveyInfo: Survey): boolean =>\n _hasSurveyPermission(Permission.recordView)(user, surveyInfo)\n\nconst canViewAllUsers = (user: User) => Users.isSystemAdmin(user)\n\n// EDIT\nconst _hasUserEditAccess = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n Users.isSystemAdmin(user) ||\n (_hasSurveyPermission(Permission.userEdit)(user, surveyInfo) &&\n // user to update has an auth group in the same survey\n _hasAuthGroupForSurvey({ user: userToUpdate, surveyInfo }))\n\nconst canCreateUsers = (user: User): boolean => Users.isSystemAdmin(user)\n\nconst canEditUser = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n Users.hasAccepted(userToUpdate) &&\n (Users.isEqual(user)(userToUpdate) || _hasUserEditAccess(user, surveyInfo, userToUpdate))\n\nconst canEditUserEmail = (user: User): boolean => Users.isSystemAdmin(user)\n\nconst canEditUserGroup = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n !Users.isEqual(user)(userToUpdate) && _hasUserEditAccess(user, surveyInfo, userToUpdate)\n\nconst canRemoveUser = (user: User, surveyInfo: Survey, userToRemove: User): boolean =>\n !Users.isEqual(user)(userToRemove) &&\n !Users.isSystemAdmin(userToRemove) &&\n _hasUserEditAccess(user, surveyInfo, userToRemove)\n\nconst canEditUserSurveyManager = (user: User) => Users.isSystemAdmin(user)\nconst canEditUserMaxSurveys = (user: User) => Users.isSystemAdmin(user)\n\n// USER ACCESS REQUESTS\nconst canViewUsersAccessRequests = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditUsersAccessRequests = (user: User): boolean => Users.isSystemAdmin(user)\n\n// INVITE\nconst getUserGroupsCanAssign = ({\n user,\n surveyInfo = null,\n editingLoggedUser = false,\n showOnlySurveyGroups = false,\n}: {\n user: User\n surveyInfo?: Survey | null\n editingLoggedUser?: boolean\n showOnlySurveyGroups?: boolean\n}) => {\n const groups = []\n\n let surveyGroups: AuthGroup[] = []\n if (editingLoggedUser && !surveyInfo) {\n // This can happen for system administrators when they don't have an active survey\n surveyGroups = []\n } else if (surveyInfo) {\n if (surveyInfo.published) {\n surveyGroups = Surveys.getAuthGroups(surveyInfo)\n } else {\n const adminGroup = Surveys.getAuthGroupAdmin(surveyInfo)\n surveyGroups = adminGroup ? [adminGroup] : []\n }\n }\n\n // do not allow surveyEditor group selection (remove surveyEditor group completely?)\n surveyGroups = surveyGroups.filter((group) => group.name !== AuthGroupName.surveyEditor)\n\n groups.push(...surveyGroups)\n\n if (!showOnlySurveyGroups && (Users.isSystemAdmin(user) || Users.isSurveyManager(user))) {\n // Add SystemAdmin or SurveyManager group if current user is a SystemAdmin or SurveyManager himself\n const userNonSurveyGroups = Users.getAuthGroups(user).filter((group) => !AuthGroups.isSurveyGroup(group))\n groups.push(...userNonSurveyGroups)\n }\n return AuthGroups.sortGroups(groups)\n}\n\nexport const Authorizer = {\n // Survey\n canCreateSurvey,\n canCreateTemplate,\n getMaxSurveysUserCanCreate,\n canViewSurvey,\n canExportSurvey,\n canExportSurveysList,\n canViewTemplates,\n canEditSurvey,\n canEditSurveyConfig,\n canEditSurveyOwner,\n canEditTemplates,\n canRefreshAllSurveyRdbs,\n // Record\n canCreateRecord,\n canViewRecord,\n canExportAllRecords,\n canViewNotOwnedRecords,\n canExportRecordsList,\n canEditRecord,\n canDeleteRecord,\n canDemoteRecord,\n canChangeRecordOwner,\n canChangeRecordStep,\n canCleanseRecords,\n canExportRecords,\n canImportRecords,\n canAnalyzeRecords,\n canUpdateRecordsStep,\n // Explorer\n canUseExplorer,\n // Map\n canUseMap,\n // Users\n canInviteUsers,\n canViewSurveyUsers,\n canViewUser,\n canViewOtherUsersEmail,\n canViewOtherUsersNameInSameSurvey,\n canViewAllUsers,\n canCreateUsers,\n canEditUser,\n canEditUserEmail,\n canEditUserGroup,\n canRemoveUser,\n canEditUserSurveyManager,\n canEditUserMaxSurveys,\n // User Access Requests\n canViewUsersAccessRequests,\n canEditUsersAccessRequests,\n // Invite\n getUserGroupsCanAssign,\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"authorizer.js","sourceRoot":"","sources":["../../../src/auth/authorizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Record, Records } from '../record'\nimport { Survey, Surveys } from '../survey'\nimport { AuthGroup, AuthGroupName } from './authGroup'\nimport { AuthGroups } from './authGroups'\nimport { Permission, RecordStepPermission } from './permission'\nimport { User } from './user'\nimport { Users } from './users'\n\n// ======\n// ====== Survey\n// ======\n\nconst _getSurveyUserGroup = (user: User, surveyInfo: Survey, includeSystemAdmin = true): AuthGroup | undefined =>\n surveyInfo ? Users.getAuthGroupBySurveyUuid(surveyInfo.uuid, includeSystemAdmin)(user) : undefined\n\nconst _hasAuthGroupForSurvey = ({ user, surveyInfo }: { user: User; surveyInfo: Survey }): boolean =>\n Boolean(_getSurveyUserGroup(user, surveyInfo))\n\nconst _hasSurveyPermission =\n (permission: Permission) =>\n (user: User, surveyInfo: Survey): boolean => {\n if (!user) return false\n\n if (Users.isSystemAdmin(user)) return true\n\n if (!surveyInfo) return false\n\n const authGroup = _getSurveyUserGroup(user, surveyInfo)\n if (!authGroup) return false\n\n return AuthGroups.getPermissions(authGroup).includes(permission)\n }\n\nconst _hasPermissionInSomeGroup =\n (permission: Permission) =>\n (user: User): boolean => {\n if (Users.isSystemAdmin(user)) return true\n const groups = Users.getAuthGroups(user)\n return groups.some((group) => AuthGroups.getPermissions(group).includes(permission))\n }\n\n// CREATE\nconst canCreateSurvey = _hasPermissionInSomeGroup(Permission.surveyCreate)\nconst canCreateTemplate = (user: User): boolean => Users.isSystemAdmin(user)\nconst getMaxSurveysUserCanCreate = (user: User): number => {\n if (Users.isSystemAdmin(user)) return Number.NaN\n if (canCreateSurvey(user)) return Users.getMaxSurveys(user)\n return 0\n}\n\n// READ\nconst canViewSurvey = (user: User, surveyInfo: Survey): boolean =>\n Users.isSystemAdmin(user) || _hasAuthGroupForSurvey({ user, surveyInfo })\nconst canExportSurvey = _hasSurveyPermission(Permission.recordAnalyse)\nconst canExportSurveysList = (user: User): boolean => Users.isSystemAdmin(user)\nconst canViewTemplates = (user: User): boolean => Users.isSystemAdmin(user)\n// UPDATE\nconst canEditSurvey = _hasSurveyPermission(Permission.surveyEdit)\nconst canEditSurveyConfig = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditSurveyOwner = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditTemplates = (user: User): boolean => Users.isSystemAdmin(user)\nconst canRefreshAllSurveyRdbs = (user: User): boolean => Users.isSystemAdmin(user)\n\n// ======\n// ====== Record\n// ======\n\n// CREATE\nexport const canCreateRecord = _hasSurveyPermission(Permission.recordCreate)\n\n// READ\nexport const canViewRecord = _hasSurveyPermission(Permission.recordView)\nexport const canExportAllRecords = _hasSurveyPermission(Permission.recordCleanse)\nexport const canViewNotOwnedRecords = (user: User, surveyInfo: Survey): boolean => {\n if (!surveyInfo || !canViewSurvey(user, surveyInfo)) return false\n\n const { uuid: surveyUuid } = surveyInfo\n const groupInCurrentSurvey = Users.getAuthGroupBySurveyUuid(surveyUuid)(user)\n const groupName = groupInCurrentSurvey?.name\n\n if (groupName === AuthGroupName.dataEditor) {\n return Surveys.isDataEditorViewNotOwnedRecordsAllowed(surveyInfo)\n }\n if (groupName === AuthGroupName.dataAnalyst) {\n return Surveys.isDataAnalystViewNotOwnedRecordsAllowed(surveyInfo)\n }\n if (canExportAllRecords(user, surveyInfo)) return true\n\n return false\n}\nexport const canExportRecordsList = _hasSurveyPermission(Permission.surveyEdit)\n\n// UPDATE\nexport const canEditRecord = (user: User, record: Record, allowAnalysisStepEdit = false): boolean => {\n if (\n !user ||\n !record ||\n // records in analysis cannot be edited\n (!allowAnalysisStepEdit && Records.isInAnalysisStep(record))\n ) {\n return false\n }\n // system admin does not have an auth group associated to the survey, but he can always edit records;\n if (Users.isSystemAdmin(user)) {\n return true\n }\n const { surveyUuid, ownerUuid } = record\n // if user doesn't have an auth group associated to the survey, he cannot edit records\n const userAuthGroup = Users.getAuthGroupBySurveyUuid(surveyUuid)(user)\n if (!userAuthGroup) return false\n\n // groups without the record edit permission (e.g. survey guests) cannot edit records,\n // even when their record steps permission allows it (record steps permissions are used also to view records)\n if (!AuthGroups.getPermissions(userAuthGroup).includes(Permission.recordEdit)) return false\n\n // Level = 'all' or 'own'. If 'own', user can only edit records assigned to him\n // If 'all', he can edit all survey's records\n // permission checks must not throw: a group without record steps cannot edit records\n const level = AuthGroups.getRecordSteps(userAuthGroup)?.[Records.getStep(record)]\n return level === RecordStepPermission.all || (level === RecordStepPermission.own && ownerUuid === user.uuid)\n}\n\nconst canChangeRecordProps = (user: User, record: Record) => canEditRecord(user, record, true)\n\nconst canDeleteRecord = canEditRecord\n\nconst canDemoteRecord = canChangeRecordProps\n\nconst canChangeRecordOwner = canChangeRecordProps\n\nconst canChangeRecordStep = canChangeRecordProps\n\nconst canCleanseRecords = _hasSurveyPermission(Permission.recordCleanse)\n\nconst canExportRecords = _hasSurveyPermission(Permission.recordView)\n\nconst canImportRecords = (user: User, surveyInfo: Survey) =>\n surveyInfo?.published && _hasSurveyPermission(Permission.recordCreate)(user, surveyInfo)\n\nconst canAnalyzeRecords = _hasSurveyPermission(Permission.recordAnalyse)\n\nconst canUpdateRecordsStep = canAnalyzeRecords\n\n// ======\n// ====== Explorer\n// ======\n\nconst canUseExplorer = canCleanseRecords\n\n// ======\n// ====== Map\n// ======\n\nconst canUseMap = canAnalyzeRecords\n\n// ======\n// ====== Users\n// ======\n\n// CREATE\nconst canInviteUsers = _hasSurveyPermission(Permission.userInvite)\n\n// READ\nconst canViewSurveyUsers = _hasSurveyPermission(Permission.userInvite)\n\nconst _usersBelongToSameSurvey = ({ user, userToView }: { user: User; userToView: User }) =>\n Users.getAuthGroups(user).some(\n (authGroupUser) =>\n AuthGroups.isSurveyGroup(authGroupUser) &&\n Users.getAuthGroups(userToView).some(\n (authGroupUserToView) =>\n AuthGroups.isSurveyGroup(authGroupUserToView) &&\n AuthGroups.getSurveyUuid(authGroupUserToView) === AuthGroups.getSurveyUuid(authGroupUser)\n )\n )\n\nconst canViewUser = (user: User, _surveyInfo: Survey, userToView: User) =>\n Users.isSystemAdmin(user) || Users.isEqual(userToView)(user) || _usersBelongToSameSurvey({ user, userToView })\n\nconst canViewOtherUsersEmail = ({ user, surveyInfo }: { user: User; surveyInfo: Survey }) =>\n Users.isSystemAdmin(user) || canInviteUsers(user, surveyInfo)\n\nconst canViewOtherUsersNameInSameSurvey = (user: User, surveyInfo: Survey): boolean =>\n _hasSurveyPermission(Permission.recordView)(user, surveyInfo)\n\nconst canViewAllUsers = (user: User) => Users.isSystemAdmin(user)\n\n// EDIT\nconst _hasUserEditAccess = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n Users.isSystemAdmin(user) ||\n (_hasSurveyPermission(Permission.userEdit)(user, surveyInfo) &&\n // user to update has an auth group in the same survey\n _hasAuthGroupForSurvey({ user: userToUpdate, surveyInfo }))\n\nconst canCreateUsers = (user: User): boolean => Users.isSystemAdmin(user)\n\nconst canEditUser = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n Users.hasAccepted(userToUpdate) &&\n (Users.isEqual(user)(userToUpdate) || _hasUserEditAccess(user, surveyInfo, userToUpdate))\n\nconst canEditUserEmail = (user: User): boolean => Users.isSystemAdmin(user)\n\nconst canEditUserGroup = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n !Users.isEqual(user)(userToUpdate) && _hasUserEditAccess(user, surveyInfo, userToUpdate)\n\nconst canRemoveUser = (user: User, surveyInfo: Survey, userToRemove: User): boolean =>\n !Users.isEqual(user)(userToRemove) &&\n !Users.isSystemAdmin(userToRemove) &&\n _hasUserEditAccess(user, surveyInfo, userToRemove)\n\nconst canEditUserSurveyManager = (user: User) => Users.isSystemAdmin(user)\nconst canEditUserMaxSurveys = (user: User) => Users.isSystemAdmin(user)\n\n// USER ACCESS REQUESTS\nconst canViewUsersAccessRequests = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditUsersAccessRequests = (user: User): boolean => Users.isSystemAdmin(user)\n\n// INVITE\nconst getUserGroupsCanAssign = ({\n user,\n surveyInfo = null,\n editingLoggedUser = false,\n showOnlySurveyGroups = false,\n}: {\n user: User\n surveyInfo?: Survey | null\n editingLoggedUser?: boolean\n showOnlySurveyGroups?: boolean\n}) => {\n const groups = []\n\n let surveyGroups: AuthGroup[] = []\n if (editingLoggedUser && !surveyInfo) {\n // This can happen for system administrators when they don't have an active survey\n surveyGroups = []\n } else if (surveyInfo) {\n if (surveyInfo.published) {\n surveyGroups = Surveys.getAuthGroups(surveyInfo)\n } else {\n const adminGroup = Surveys.getAuthGroupAdmin(surveyInfo)\n surveyGroups = adminGroup ? [adminGroup] : []\n }\n }\n\n // do not allow surveyEditor group selection (remove surveyEditor group completely?)\n surveyGroups = surveyGroups.filter((group) => group.name !== AuthGroupName.surveyEditor)\n\n groups.push(...surveyGroups)\n\n if (!showOnlySurveyGroups && (Users.isSystemAdmin(user) || Users.isSurveyManager(user))) {\n // Add SystemAdmin or SurveyManager group if current user is a SystemAdmin or SurveyManager himself\n const userNonSurveyGroups = Users.getAuthGroups(user).filter((group) => !AuthGroups.isSurveyGroup(group))\n groups.push(...userNonSurveyGroups)\n }\n return AuthGroups.sortGroups(groups)\n}\n\nexport const Authorizer = {\n // Survey\n canCreateSurvey,\n canCreateTemplate,\n getMaxSurveysUserCanCreate,\n canViewSurvey,\n canExportSurvey,\n canExportSurveysList,\n canViewTemplates,\n canEditSurvey,\n canEditSurveyConfig,\n canEditSurveyOwner,\n canEditTemplates,\n canRefreshAllSurveyRdbs,\n // Record\n canCreateRecord,\n canViewRecord,\n canExportAllRecords,\n canViewNotOwnedRecords,\n canExportRecordsList,\n canEditRecord,\n canDeleteRecord,\n canDemoteRecord,\n canChangeRecordOwner,\n canChangeRecordStep,\n canCleanseRecords,\n canExportRecords,\n canImportRecords,\n canAnalyzeRecords,\n canUpdateRecordsStep,\n // Explorer\n canUseExplorer,\n // Map\n canUseMap,\n // Users\n canInviteUsers,\n canViewSurveyUsers,\n canViewUser,\n canViewOtherUsersEmail,\n canViewOtherUsersNameInSameSurvey,\n canViewAllUsers,\n canCreateUsers,\n canEditUser,\n canEditUserEmail,\n canEditUserGroup,\n canRemoveUser,\n canEditUserSurveyManager,\n canEditUserMaxSurveys,\n // User Access Requests\n canViewUsersAccessRequests,\n canEditUsersAccessRequests,\n // Invite\n getUserGroupsCanAssign,\n}\n"]}
1
+ {"version":3,"file":"authorizer.js","sourceRoot":"","sources":["../../../src/auth/authorizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArenaRecord, Records } from '../record'\nimport { Survey, Surveys } from '../survey'\nimport { AuthGroup, AuthGroupName } from './authGroup'\nimport { AuthGroups } from './authGroups'\nimport { Permission, RecordStepPermission } from './permission'\nimport { User } from './user'\nimport { Users } from './users'\n\n// ======\n// ====== Survey\n// ======\n\nconst _getSurveyUserGroup = (user: User, surveyInfo: Survey, includeSystemAdmin = true): AuthGroup | undefined =>\n surveyInfo ? Users.getAuthGroupBySurveyUuid(surveyInfo.uuid, includeSystemAdmin)(user) : undefined\n\nconst _hasAuthGroupForSurvey = ({ user, surveyInfo }: { user: User; surveyInfo: Survey }): boolean =>\n Boolean(_getSurveyUserGroup(user, surveyInfo))\n\nconst _hasSurveyPermission =\n (permission: Permission) =>\n (user: User, surveyInfo: Survey): boolean => {\n if (!user) return false\n\n if (Users.isSystemAdmin(user)) return true\n\n if (!surveyInfo) return false\n\n const authGroup = _getSurveyUserGroup(user, surveyInfo)\n if (!authGroup) return false\n\n return AuthGroups.getPermissions(authGroup).includes(permission)\n }\n\nconst _hasPermissionInSomeGroup =\n (permission: Permission) =>\n (user: User): boolean => {\n if (Users.isSystemAdmin(user)) return true\n const groups = Users.getAuthGroups(user)\n return groups.some((group) => AuthGroups.getPermissions(group).includes(permission))\n }\n\n// CREATE\nconst canCreateSurvey = _hasPermissionInSomeGroup(Permission.surveyCreate)\nconst canCreateTemplate = (user: User): boolean => Users.isSystemAdmin(user)\nconst getMaxSurveysUserCanCreate = (user: User): number => {\n if (Users.isSystemAdmin(user)) return Number.NaN\n if (canCreateSurvey(user)) return Users.getMaxSurveys(user)\n return 0\n}\n\n// READ\nconst canViewSurvey = (user: User, surveyInfo: Survey): boolean =>\n Users.isSystemAdmin(user) || _hasAuthGroupForSurvey({ user, surveyInfo })\nconst canExportSurvey = _hasSurveyPermission(Permission.recordAnalyse)\nconst canExportSurveysList = (user: User): boolean => Users.isSystemAdmin(user)\nconst canViewTemplates = (user: User): boolean => Users.isSystemAdmin(user)\n// UPDATE\nconst canEditSurvey = _hasSurveyPermission(Permission.surveyEdit)\nconst canEditSurveyConfig = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditSurveyOwner = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditTemplates = (user: User): boolean => Users.isSystemAdmin(user)\nconst canRefreshAllSurveyRdbs = (user: User): boolean => Users.isSystemAdmin(user)\n\n// ======\n// ====== Record\n// ======\n\n// CREATE\nexport const canCreateRecord = _hasSurveyPermission(Permission.recordCreate)\n\n// READ\nexport const canViewRecord = _hasSurveyPermission(Permission.recordView)\nexport const canExportAllRecords = _hasSurveyPermission(Permission.recordCleanse)\nexport const canViewNotOwnedRecords = (user: User, surveyInfo: Survey): boolean => {\n if (!surveyInfo || !canViewSurvey(user, surveyInfo)) return false\n\n const { uuid: surveyUuid } = surveyInfo\n const groupInCurrentSurvey = Users.getAuthGroupBySurveyUuid(surveyUuid)(user)\n const groupName = groupInCurrentSurvey?.name\n\n if (groupName === AuthGroupName.dataEditor) {\n return Surveys.isDataEditorViewNotOwnedRecordsAllowed(surveyInfo)\n }\n if (groupName === AuthGroupName.dataAnalyst) {\n return Surveys.isDataAnalystViewNotOwnedRecordsAllowed(surveyInfo)\n }\n if (canExportAllRecords(user, surveyInfo)) return true\n\n return false\n}\nexport const canExportRecordsList = _hasSurveyPermission(Permission.surveyEdit)\n\n// UPDATE\nexport const canEditRecord = (user: User, record: ArenaRecord, allowAnalysisStepEdit = false): boolean => {\n if (\n !user ||\n !record ||\n // records in analysis cannot be edited\n (!allowAnalysisStepEdit && Records.isInAnalysisStep(record))\n ) {\n return false\n }\n // system admin does not have an auth group associated to the survey, but he can always edit records;\n if (Users.isSystemAdmin(user)) {\n return true\n }\n const { surveyUuid, ownerUuid } = record\n // if user doesn't have an auth group associated to the survey, he cannot edit records\n const userAuthGroup = Users.getAuthGroupBySurveyUuid(surveyUuid)(user)\n if (!userAuthGroup) return false\n\n // groups without the record edit permission (e.g. survey guests) cannot edit records,\n // even when their record steps permission allows it (record steps permissions are used also to view records)\n if (!AuthGroups.getPermissions(userAuthGroup).includes(Permission.recordEdit)) return false\n\n // Level = 'all' or 'own'. If 'own', user can only edit records assigned to him\n // If 'all', he can edit all survey's records\n // permission checks must not throw: a group without record steps cannot edit records\n const level = AuthGroups.getRecordSteps(userAuthGroup)?.[Records.getStep(record)]\n return level === RecordStepPermission.all || (level === RecordStepPermission.own && ownerUuid === user.uuid)\n}\n\nconst canChangeRecordProps = (user: User, record: ArenaRecord) => canEditRecord(user, record, true)\n\nconst canDeleteRecord = canEditRecord\n\nconst canDemoteRecord = canChangeRecordProps\n\nconst canChangeRecordOwner = canChangeRecordProps\n\nconst canChangeRecordStep = canChangeRecordProps\n\nconst canCleanseRecords = _hasSurveyPermission(Permission.recordCleanse)\n\nconst canExportRecords = _hasSurveyPermission(Permission.recordView)\n\nconst canImportRecords = (user: User, surveyInfo: Survey) =>\n surveyInfo?.published && _hasSurveyPermission(Permission.recordCreate)(user, surveyInfo)\n\nconst canAnalyzeRecords = _hasSurveyPermission(Permission.recordAnalyse)\n\nconst canUpdateRecordsStep = canAnalyzeRecords\n\n// ======\n// ====== Explorer\n// ======\n\nconst canUseExplorer = canCleanseRecords\n\n// ======\n// ====== Map\n// ======\n\nconst canUseMap = canAnalyzeRecords\n\n// ======\n// ====== Users\n// ======\n\n// CREATE\nconst canInviteUsers = _hasSurveyPermission(Permission.userInvite)\n\n// READ\nconst canViewSurveyUsers = _hasSurveyPermission(Permission.userInvite)\n\nconst _usersBelongToSameSurvey = ({ user, userToView }: { user: User; userToView: User }) =>\n Users.getAuthGroups(user).some(\n (authGroupUser) =>\n AuthGroups.isSurveyGroup(authGroupUser) &&\n Users.getAuthGroups(userToView).some(\n (authGroupUserToView) =>\n AuthGroups.isSurveyGroup(authGroupUserToView) &&\n AuthGroups.getSurveyUuid(authGroupUserToView) === AuthGroups.getSurveyUuid(authGroupUser)\n )\n )\n\nconst canViewUser = (user: User, _surveyInfo: Survey, userToView: User) =>\n Users.isSystemAdmin(user) || Users.isEqual(userToView)(user) || _usersBelongToSameSurvey({ user, userToView })\n\nconst canViewOtherUsersEmail = ({ user, surveyInfo }: { user: User; surveyInfo: Survey }) =>\n Users.isSystemAdmin(user) || canInviteUsers(user, surveyInfo)\n\nconst canViewOtherUsersNameInSameSurvey = (user: User, surveyInfo: Survey): boolean =>\n _hasSurveyPermission(Permission.recordView)(user, surveyInfo)\n\nconst canViewAllUsers = (user: User) => Users.isSystemAdmin(user)\n\n// EDIT\nconst _hasUserEditAccess = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n Users.isSystemAdmin(user) ||\n (_hasSurveyPermission(Permission.userEdit)(user, surveyInfo) &&\n // user to update has an auth group in the same survey\n _hasAuthGroupForSurvey({ user: userToUpdate, surveyInfo }))\n\nconst canCreateUsers = (user: User): boolean => Users.isSystemAdmin(user)\n\nconst canEditUser = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n Users.hasAccepted(userToUpdate) &&\n (Users.isEqual(user)(userToUpdate) || _hasUserEditAccess(user, surveyInfo, userToUpdate))\n\nconst canEditUserEmail = (user: User): boolean => Users.isSystemAdmin(user)\n\nconst canEditUserGroup = (user: User, surveyInfo: Survey, userToUpdate: User): boolean =>\n !Users.isEqual(user)(userToUpdate) && _hasUserEditAccess(user, surveyInfo, userToUpdate)\n\nconst canRemoveUser = (user: User, surveyInfo: Survey, userToRemove: User): boolean =>\n !Users.isEqual(user)(userToRemove) &&\n !Users.isSystemAdmin(userToRemove) &&\n _hasUserEditAccess(user, surveyInfo, userToRemove)\n\nconst canEditUserSurveyManager = (user: User) => Users.isSystemAdmin(user)\nconst canEditUserMaxSurveys = (user: User) => Users.isSystemAdmin(user)\n\n// USER ACCESS REQUESTS\nconst canViewUsersAccessRequests = (user: User): boolean => Users.isSystemAdmin(user)\nconst canEditUsersAccessRequests = (user: User): boolean => Users.isSystemAdmin(user)\n\n// INVITE\nconst getUserGroupsCanAssign = ({\n user,\n surveyInfo = null,\n editingLoggedUser = false,\n showOnlySurveyGroups = false,\n}: {\n user: User\n surveyInfo?: Survey | null\n editingLoggedUser?: boolean\n showOnlySurveyGroups?: boolean\n}) => {\n const groups = []\n\n let surveyGroups: AuthGroup[] = []\n if (editingLoggedUser && !surveyInfo) {\n // This can happen for system administrators when they don't have an active survey\n surveyGroups = []\n } else if (surveyInfo) {\n if (surveyInfo.published) {\n surveyGroups = Surveys.getAuthGroups(surveyInfo)\n } else {\n const adminGroup = Surveys.getAuthGroupAdmin(surveyInfo)\n surveyGroups = adminGroup ? [adminGroup] : []\n }\n }\n\n // do not allow surveyEditor group selection (remove surveyEditor group completely?)\n surveyGroups = surveyGroups.filter((group) => group.name !== AuthGroupName.surveyEditor)\n\n groups.push(...surveyGroups)\n\n if (!showOnlySurveyGroups && (Users.isSystemAdmin(user) || Users.isSurveyManager(user))) {\n // Add SystemAdmin or SurveyManager group if current user is a SystemAdmin or SurveyManager himself\n const userNonSurveyGroups = Users.getAuthGroups(user).filter((group) => !AuthGroups.isSurveyGroup(group))\n groups.push(...userNonSurveyGroups)\n }\n return AuthGroups.sortGroups(groups)\n}\n\nexport const Authorizer = {\n // Survey\n canCreateSurvey,\n canCreateTemplate,\n getMaxSurveysUserCanCreate,\n canViewSurvey,\n canExportSurvey,\n canExportSurveysList,\n canViewTemplates,\n canEditSurvey,\n canEditSurveyConfig,\n canEditSurveyOwner,\n canEditTemplates,\n canRefreshAllSurveyRdbs,\n // Record\n canCreateRecord,\n canViewRecord,\n canExportAllRecords,\n canViewNotOwnedRecords,\n canExportRecordsList,\n canEditRecord,\n canDeleteRecord,\n canDemoteRecord,\n canChangeRecordOwner,\n canChangeRecordStep,\n canCleanseRecords,\n canExportRecords,\n canImportRecords,\n canAnalyzeRecords,\n canUpdateRecordsStep,\n // Explorer\n canUseExplorer,\n // Map\n canUseMap,\n // Users\n canInviteUsers,\n canViewSurveyUsers,\n canViewUser,\n canViewOtherUsersEmail,\n canViewOtherUsersNameInSameSurvey,\n canViewAllUsers,\n canCreateUsers,\n canEditUser,\n canEditUserEmail,\n canEditUserGroup,\n canRemoveUser,\n canEditUserSurveyManager,\n canEditUserMaxSurveys,\n // User Access Requests\n canViewUsersAccessRequests,\n canEditUsersAccessRequests,\n // Invite\n getUserGroupsCanAssign,\n}\n"]}
@@ -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 Node,\n Node as ArenaRecordNode,\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 Record,\n Record as ArenaRecord,\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 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/node/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAWvC,MAAM,CAAC,MAAM,WAAW,GAAqC;IAC3D,cAAc,EAAE,CAAC,MAAyB,EAAQ,EAAE;;;QAClD,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;QACzE,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAA;QAE1C,OAAO;YACL,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,IAAI,EAAE;gBACJ,CAAC,EAAE,CAAC,GAAG,OAAC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,0CAAE,CAAC,mCAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,EAAC,CAAC,CAAC,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACrF;YACD,WAAW;YACX,UAAU,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI;YAC5B,UAAU;YACV,UAAU;YACV,KAAK;YACL,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;SACjB,CAAA;IACH,CAAC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAqC;IACtE,cAAc,EAAE,CAAC,MAAyB,EAAQ,EAAE;QAClD,uCACK,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,KACrC,WAAW,EAAE,IAAI,IAClB;IACH,CAAC;CACF,CAAA","sourcesContent":["import { Factory } from '../common'\nimport { Dates, UUIDs } from '../utils'\nimport { Node } from './node'\n\nexport type NodeFactoryParams = {\n nodeDefUuid: string\n recordUuid: string\n parentNode?: Node\n surveyUuid?: string\n value?: any\n}\n\nexport const NodeFactory: Factory<Node, NodeFactoryParams> = {\n createInstance: (params: NodeFactoryParams): Node => {\n const { nodeDefUuid, recordUuid, parentNode, surveyUuid, value } = params\n const now = Dates.nowFormattedForStorage()\n\n return {\n created: true,\n dateCreated: now,\n dateModified: now,\n meta: {\n h: [...(parentNode?.meta?.h ?? []), ...(parentNode?.uuid ? [parentNode?.uuid] : [])],\n },\n nodeDefUuid,\n parentUuid: parentNode?.uuid,\n recordUuid,\n surveyUuid,\n value,\n uuid: UUIDs.v4(),\n }\n },\n}\n\nexport const NodePlaceholderFactory: Factory<Node, NodeFactoryParams> = {\n createInstance: (params: NodeFactoryParams): Node => {\n return {\n ...NodeFactory.createInstance(params),\n placeholder: true,\n }\n },\n}\n"]}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/node/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAWvC,MAAM,CAAC,MAAM,WAAW,GAAgD;IACtE,cAAc,EAAE,CAAC,MAAyB,EAAmB,EAAE;;;QAC7D,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;QACzE,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAA;QAE1C,OAAO;YACL,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,IAAI,EAAE;gBACJ,CAAC,EAAE,CAAC,GAAG,OAAC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,0CAAE,CAAC,mCAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,EAAC,CAAC,CAAC,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACrF;YACD,WAAW;YACX,UAAU,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI;YAC5B,UAAU;YACV,UAAU;YACV,KAAK;YACL,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;SACjB,CAAA;IACH,CAAC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAgD;IACjF,cAAc,EAAE,CAAC,MAAyB,EAAmB,EAAE;QAC7D,uCACK,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,KACrC,WAAW,EAAE,IAAI,IAClB;IACH,CAAC;CACF,CAAA","sourcesContent":["import { Factory } from '../common'\nimport { Dates, UUIDs } from '../utils'\nimport { ArenaRecordNode } from './node'\n\nexport type NodeFactoryParams = {\n nodeDefUuid: string\n recordUuid: string\n parentNode?: ArenaRecordNode\n surveyUuid?: string\n value?: any\n}\n\nexport const NodeFactory: Factory<ArenaRecordNode, NodeFactoryParams> = {\n createInstance: (params: NodeFactoryParams): ArenaRecordNode => {\n const { nodeDefUuid, recordUuid, parentNode, surveyUuid, value } = params\n const now = Dates.nowFormattedForStorage()\n\n return {\n created: true,\n dateCreated: now,\n dateModified: now,\n meta: {\n h: [...(parentNode?.meta?.h ?? []), ...(parentNode?.uuid ? [parentNode?.uuid] : [])],\n },\n nodeDefUuid,\n parentUuid: parentNode?.uuid,\n recordUuid,\n surveyUuid,\n value,\n uuid: UUIDs.v4(),\n }\n },\n}\n\nexport const NodePlaceholderFactory: Factory<ArenaRecordNode, NodeFactoryParams> = {\n createInstance: (params: NodeFactoryParams): ArenaRecordNode => {\n return {\n ...NodeFactory.createInstance(params),\n placeholder: true,\n }\n },\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAM/C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA","sourcesContent":["export type { Node, NodeMeta, NodeRefData, NodesMap } from './node'\nexport type { Node as ArenaRecordNode } from './node'\n\nexport { NodeKeys, NodeMetaKeys } from './node'\n\nexport type { NodePointer } from './nodePointer'\n\nexport type { NodeValueCode, NodeValueCoordinate, NodeValueFile, NodeValueTaxon } from './nodeValue'\n\nexport { NodeFactory } from './factory'\n\nexport { Nodes } from './nodes'\n\nexport { NodeValueFormatter } from './nodeValueFormatter'\n\nexport { NodeValues } from './nodeValues'\n\nexport type { NodeService } from './service'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAM/C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA","sourcesContent":["export type { ArenaRecordNode, Node, NodeMeta, NodeRefData, NodesMap } from './node'\n\nexport { NodeKeys, NodeMetaKeys } from './node'\n\nexport type { NodePointer } from './nodePointer'\n\nexport type { NodeValueCode, NodeValueCoordinate, NodeValueFile, NodeValueTaxon } from './nodeValue'\n\nexport { NodeFactory } from './factory'\n\nexport { Nodes } from './nodes'\n\nexport { NodeValueFormatter } from './nodeValueFormatter'\n\nexport { NodeValues } from './nodeValues'\n\nexport type { NodeService } from './service'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/node/node.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,MAAM,CAAN,IAAY,YAEX;AAFD,WAAY,YAAY;IACtB,uBAAO,CAAA;AACT,CAAC,EAFW,YAAY,KAAZ,YAAY,QAEvB","sourcesContent":["import { CategoryItem } from '../category'\nimport { Taxon } from '../taxonomy'\n\nexport enum NodeKeys {\n meta = 'meta',\n value = 'value',\n}\n\nexport enum NodeMetaKeys {\n h = 'h',\n}\n\nexport interface NodeMeta {\n /**\n * Applicability of the node children (by definition UUID). If not defined, the children are applicable by default.\n */\n childApplicability?: { [uuid: string]: boolean }\n /**\n * Whether the node children (by definition UUID) are editable (true) or read-only (false).\n * If not defined, the children are editable by default.\n */\n cEdit?: { [uuid: string]: boolean }\n /**\n * Maximum number of children (by definition UUID) for the node.\n */\n childrenMaxCount?: { [uuid: string]: number }\n /**\n * Minimum number of children (by definition UUID) for the node.\n */\n childrenMinCount?: { [uuid: string]: number }\n /**\n * Whether the node children (by definition UUID) are visible (true) or hidden (false).\n * If not defined, the children are visible by default.\n */\n cVis?: { [uuid: string]: boolean }\n /**\n * Hierarchy of ancestor node UUIDs.\n */\n h?: string[]\n /**\n * Hierarchy of code attribute ancestor UUIDs (according to the parent code defs specified).\n */\n hCode?: string[]\n /**\n * True if the value has been auto-filled from the node default value\n */\n defaultValueApplied?: boolean\n /**\n * True if the value has been auto-filled from the user group qualifier\n */\n qualifierValueApplied?: boolean\n}\n\nexport interface NodeRefData {\n categoryItem?: CategoryItem\n taxon?: Taxon\n}\n\nexport interface Node {\n dateCreated?: string\n dateModified?: string\n id?: number\n meta?: NodeMeta\n nodeDefUuid: string\n parentUuid?: string\n recordUuid: string\n refData?: NodeRefData\n uuid: string\n value?: any\n placeholder?: boolean\n surveyUuid?: string\n\n // transient status variables\n /**\n * Record node has been created but not persisted yet.\n */\n created?: boolean\n /**\n * Record node has been deleted.\n */\n deleted?: boolean\n /**\n * Record node has been modified but not persisted yet.\n */\n updated?: boolean\n}\n\nexport interface NodesMap {\n [key: string]: Node\n}\n"]}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/node/node.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,MAAM,CAAN,IAAY,YAEX;AAFD,WAAY,YAAY;IACtB,uBAAO,CAAA;AACT,CAAC,EAFW,YAAY,KAAZ,YAAY,QAEvB","sourcesContent":["import { CategoryItem } from '../category'\nimport { Taxon } from '../taxonomy'\n\nexport enum NodeKeys {\n meta = 'meta',\n value = 'value',\n}\n\nexport enum NodeMetaKeys {\n h = 'h',\n}\n\nexport interface NodeMeta {\n /**\n * Applicability of the node children (by definition UUID). If not defined, the children are applicable by default.\n */\n childApplicability?: { [uuid: string]: boolean }\n /**\n * Whether the node children (by definition UUID) are editable (true) or read-only (false).\n * If not defined, the children are editable by default.\n */\n cEdit?: { [uuid: string]: boolean }\n /**\n * Maximum number of children (by definition UUID) for the node.\n */\n childrenMaxCount?: { [uuid: string]: number }\n /**\n * Minimum number of children (by definition UUID) for the node.\n */\n childrenMinCount?: { [uuid: string]: number }\n /**\n * Whether the node children (by definition UUID) are visible (true) or hidden (false).\n * If not defined, the children are visible by default.\n */\n cVis?: { [uuid: string]: boolean }\n /**\n * Hierarchy of ancestor node UUIDs.\n */\n h?: string[]\n /**\n * Hierarchy of code attribute ancestor UUIDs (according to the parent code defs specified).\n */\n hCode?: string[]\n /**\n * True if the value has been auto-filled from the node default value\n */\n defaultValueApplied?: boolean\n /**\n * True if the value has been auto-filled from the user group qualifier\n */\n qualifierValueApplied?: boolean\n}\n\nexport interface NodeRefData {\n categoryItem?: CategoryItem\n taxon?: Taxon\n}\n\nexport interface ArenaRecordNode {\n dateCreated?: string\n dateModified?: string\n id?: number\n meta?: NodeMeta\n nodeDefUuid: string\n parentUuid?: string\n recordUuid: string\n refData?: NodeRefData\n uuid: string\n value?: any\n placeholder?: boolean\n surveyUuid?: string\n\n // transient status variables\n /**\n * Record node has been created but not persisted yet.\n */\n created?: boolean\n /**\n * Record node has been deleted.\n */\n deleted?: boolean\n /**\n * Record node has been modified but not persisted yet.\n */\n updated?: boolean\n}\n\n/**\n * @deprecated Use ArenaRecordNode: this name shadows the DOM Node type.\n * It will be removed in the next major version.\n */\nexport type Node = ArenaRecordNode\n\nexport interface NodesMap {\n [key: string]: ArenaRecordNode\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodePointer.js","sourceRoot":"","sources":["../../../src/node/nodePointer.ts"],"names":[],"mappings":"","sourcesContent":["import { Node } from './node'\nimport { NodeDef, NodeDefProps, NodeDefType } from '../nodeDef'\n\nexport interface NodePointer {\n nodeCtx: Node\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}\n"]}
1
+ {"version":3,"file":"nodePointer.js","sourceRoot":"","sources":["../../../src/node/nodePointer.ts"],"names":[],"mappings":"","sourcesContent":["import { ArenaRecordNode } from './node'\nimport { NodeDef, NodeDefProps, NodeDefType } from '../nodeDef'\n\nexport interface NodePointer {\n nodeCtx: ArenaRecordNode\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeValueFormatter.js","sourceRoot":"","sources":["../../../src/node/nodeValueFormatter.ts"],"names":[],"mappings":"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","sourcesContent":["import { CategoryItem, CategoryItems } from '../category'\nimport { LanguageCode } from '../language'\nimport { NodeDef, NodeDefCode, NodeDefDecimal, NodeDefs, NodeDefType } from '../nodeDef'\nimport { Survey, Surveys } from '../survey'\nimport { Taxa } from '../taxonomy'\nimport { DateFormats, Dates, Numbers, Objects, Strings } from '../utils'\nimport { Node } from './node'\nimport { NodeValues } from './nodeValues'\n\nconst extractCategoryItem = (params: { survey: Survey; node?: Node; value: any }): CategoryItem | undefined => {\n const { survey, node, value } = params\n\n const itemUuid = NodeValues.getValueItemUuid(value)\n if (!itemUuid) return undefined\n\n const item = node?.refData?.categoryItem ?? Surveys.getCategoryItemByUuid({ survey, itemUuid })\n // check the validity of the reference data category item\n return item?.props && Objects.isNotEmpty(CategoryItems.getCode(item)) ? item : undefined\n}\n\ntype FormatParams = {\n survey: Survey\n cycle: string\n nodeDef: NodeDef<NodeDefType>\n node?: Node\n value: any\n showLabel?: boolean\n quoteLabels?: boolean\n lang?: LanguageCode\n}\n\nconst formatters: { [key in NodeDefType]?: (params: FormatParams) => any } = {\n [NodeDefType.code]: (params: FormatParams) => {\n const { survey, cycle, nodeDef, node, value, showLabel, quoteLabels, lang } = params\n\n if (!showLabel) {\n // item code already inside value, no need to get category item\n const itemCode = NodeValues.getValueCode(value)\n if (!Objects.isEmpty(itemCode)) return itemCode\n }\n const categoryItem = extractCategoryItem({ survey, node, value })\n if (!categoryItem) return null\n\n if (showLabel) {\n let result\n if (NodeDefs.isCodeShown(cycle)(nodeDef as NodeDefCode)) {\n result = CategoryItems.getLabelWithCode(categoryItem, lang!)\n } else {\n result = CategoryItems.getLabel(categoryItem, lang!, true)\n }\n return quoteLabels ? Strings.quote(result) : result\n }\n return CategoryItems.getCode(categoryItem)\n },\n [NodeDefType.date]: (params: FormatParams) => {\n const { value } = params\n const dateParsed = Dates.parseISO(value)\n return Dates.format(dateParsed, DateFormats.dateDisplay)\n },\n [NodeDefType.decimal]: (params: FormatParams) => {\n const { value, nodeDef } = params\n return Numbers.formatDecimal(value, NodeDefs.getMaxNumberDecimalDigits(nodeDef as NodeDefDecimal))\n },\n [NodeDefType.integer]: (params: FormatParams) => {\n const { value } = params\n return Numbers.formatInteger(Number(value))\n },\n [NodeDefType.taxon]: (params: FormatParams) => {\n const { survey, value, showLabel } = params\n const taxonUuid = NodeValues.getValueTaxonUuid(value)\n if (!taxonUuid) return null\n const taxon = Surveys.getTaxonByUuid({ survey, taxonUuid })\n if (!taxon) return null\n return showLabel ? Taxa.getScientificName(taxon) : Taxa.getCode(taxon)\n },\n [NodeDefType.text]: (params: FormatParams) => {\n const { value, quoteLabels } = params\n return quoteLabels ? Strings.quote(value) : value\n },\n}\n\nconst format = (params: FormatParams) => {\n const { nodeDef, value } = params\n if (Objects.isEmpty(value)) {\n return ''\n }\n const formatter = formatters[NodeDefs.getType(nodeDef)]\n const formatValue = (v: any) => (formatter ? formatter({ ...params, value: v }) : v)\n\n return NodeDefs.isMultiple(nodeDef) && Array.isArray(value) ? value.map(formatValue).join(', ') : formatValue(value)\n}\n\nexport const NodeValueFormatter = {\n format,\n}\n"]}
1
+ {"version":3,"file":"nodeValueFormatter.js","sourceRoot":"","sources":["../../../src/node/nodeValueFormatter.ts"],"names":[],"mappings":"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","sourcesContent":["import { CategoryItem, CategoryItems } from '../category'\nimport { LanguageCode } from '../language'\nimport { NodeDef, NodeDefCode, NodeDefDecimal, NodeDefs, NodeDefType } from '../nodeDef'\nimport { Survey, Surveys } from '../survey'\nimport { Taxa } from '../taxonomy'\nimport { DateFormats, Dates, Numbers, Objects, Strings } from '../utils'\nimport { ArenaRecordNode } from './node'\nimport { NodeValues } from './nodeValues'\n\nconst extractCategoryItem = (params: {\n survey: Survey\n node?: ArenaRecordNode\n value: any\n}): CategoryItem | undefined => {\n const { survey, node, value } = params\n\n const itemUuid = NodeValues.getValueItemUuid(value)\n if (!itemUuid) return undefined\n\n const item = node?.refData?.categoryItem ?? Surveys.getCategoryItemByUuid({ survey, itemUuid })\n // check the validity of the reference data category item\n return item?.props && Objects.isNotEmpty(CategoryItems.getCode(item)) ? item : undefined\n}\n\ntype FormatParams = {\n survey: Survey\n cycle: string\n nodeDef: NodeDef<NodeDefType>\n node?: ArenaRecordNode\n value: any\n showLabel?: boolean\n quoteLabels?: boolean\n lang?: LanguageCode\n}\n\nconst formatters: { [key in NodeDefType]?: (params: FormatParams) => any } = {\n [NodeDefType.code]: (params: FormatParams) => {\n const { survey, cycle, nodeDef, node, value, showLabel, quoteLabels, lang } = params\n\n if (!showLabel) {\n // item code already inside value, no need to get category item\n const itemCode = NodeValues.getValueCode(value)\n if (!Objects.isEmpty(itemCode)) return itemCode\n }\n const categoryItem = extractCategoryItem({ survey, node, value })\n if (!categoryItem) return null\n\n if (showLabel) {\n let result\n if (NodeDefs.isCodeShown(cycle)(nodeDef as NodeDefCode)) {\n result = CategoryItems.getLabelWithCode(categoryItem, lang!)\n } else {\n result = CategoryItems.getLabel(categoryItem, lang!, true)\n }\n return quoteLabels ? Strings.quote(result) : result\n }\n return CategoryItems.getCode(categoryItem)\n },\n [NodeDefType.date]: (params: FormatParams) => {\n const { value } = params\n const dateParsed = Dates.parseISO(value)\n return Dates.format(dateParsed, DateFormats.dateDisplay)\n },\n [NodeDefType.decimal]: (params: FormatParams) => {\n const { value, nodeDef } = params\n return Numbers.formatDecimal(value, NodeDefs.getMaxNumberDecimalDigits(nodeDef as NodeDefDecimal))\n },\n [NodeDefType.integer]: (params: FormatParams) => {\n const { value } = params\n return Numbers.formatInteger(Number(value))\n },\n [NodeDefType.taxon]: (params: FormatParams) => {\n const { survey, value, showLabel } = params\n const taxonUuid = NodeValues.getValueTaxonUuid(value)\n if (!taxonUuid) return null\n const taxon = Surveys.getTaxonByUuid({ survey, taxonUuid })\n if (!taxon) return null\n return showLabel ? Taxa.getScientificName(taxon) : Taxa.getCode(taxon)\n },\n [NodeDefType.text]: (params: FormatParams) => {\n const { value, quoteLabels } = params\n return quoteLabels ? Strings.quote(value) : value\n },\n}\n\nconst format = (params: FormatParams) => {\n const { nodeDef, value } = params\n if (Objects.isEmpty(value)) {\n return ''\n }\n const formatter = formatters[NodeDefs.getType(nodeDef)]\n const formatValue = (v: any) => (formatter ? formatter({ ...params, value: v }) : v)\n\n return NodeDefs.isMultiple(nodeDef) && Array.isArray(value) ? value.map(formatValue).join(', ') : formatValue(value)\n}\n\nexport const NodeValueFormatter = {\n format,\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeValues.js","sourceRoot":"","sources":["../../../src/node/nodeValues.ts"],"names":[],"mappings":"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","sourcesContent":["import { CategoryItems } from '../category'\nimport { Point, PointFactory } from '../geo'\nimport { NodeDef, NodeDefCode, NodeDefProps, NodeDefType } from '../nodeDef'\nimport { Record, Records } from '../record'\nimport { Survey, Surveys } from '../survey'\nimport { DateFormats, Dates, Objects } from '../utils'\nimport { Node } from './node'\nimport { NodeValueCoordinate } from './nodeValue/coordinate'\nimport {\n ValuePropsCode,\n ValuePropsCoordinate,\n ValuePropsDate,\n ValuePropsFile,\n ValuePropsTaxon,\n ValuePropsTime,\n} from './nodeValueProps'\n\n/**\n * Props of node value indexed by node def type.\n * The node definitions here are only the ones of \"composite\" attributes.\n */\nexport const ValuePropsByType: { [key in NodeDefType]: { [key: string]: string } | null } = {\n [NodeDefType.boolean]: null,\n [NodeDefType.code]: ValuePropsCode,\n [NodeDefType.coordinate]: ValuePropsCoordinate,\n [NodeDefType.date]: ValuePropsDate,\n [NodeDefType.decimal]: null,\n [NodeDefType.geo]: null,\n [NodeDefType.entity]: null,\n [NodeDefType.file]: ValuePropsFile,\n [NodeDefType.integer]: null,\n [NodeDefType.taxon]: ValuePropsTaxon,\n [NodeDefType.time]: ValuePropsTime,\n [NodeDefType.text]: null,\n // layout elements\n [NodeDefType.formHeader]: null,\n}\n\nconst getValuePropRaw = (params: { value: any; prop: string; defaultValue?: any }): any => {\n const { value, prop, defaultValue } = params\n const valueProp = value?.[prop]\n return valueProp === undefined ? defaultValue : valueProp\n}\n\nconst getNodeValuePropRaw = (params: { node: Node; prop: string; defaultValue?: any }): any => {\n const { node, prop, defaultValue } = params\n return getValuePropRaw({ value: node.value, prop, defaultValue })\n}\n\n// Code\nconst newCodeValue = (params: { itemUuid: string }) => {\n const { itemUuid } = params\n return { [ValuePropsCode[ValuePropsCode.itemUuid]]: itemUuid }\n}\n\nconst getItemUuid = (node: Node): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsCode[ValuePropsCode.itemUuid] })\n\nconst getValueCode = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsCode[ValuePropsCode.code] })\n\nconst getValueItemUuid = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsCode[ValuePropsCode.itemUuid] })\n\nconst getDateTimePart = (params: { node: Node; index: number; separator: string }): number => {\n const { node, index, separator } = params\n return Number((node.value ?? '').split(separator)[index]?.trim())\n}\n\n// Date\nconst getDatePart =\n (index: number) =>\n (node: Node): number =>\n getDateTimePart({ node, index, separator: '-' })\nconst getDateYear = getDatePart(0)\nconst getDateMonth = getDatePart(1)\nconst getDateDay = getDatePart(2)\n\nconst _datePropGetters: { [key in ValuePropsDate]: (node: Node) => number } = {\n [ValuePropsDate.day]: getDateDay,\n [ValuePropsDate.month]: getDateMonth,\n [ValuePropsDate.year]: getDateYear,\n}\n\n// File\nconst getFileName = (node: Node): string | undefined => getNodeValuePropRaw({ node, prop: ValuePropsFile.fileName })\nconst getFileNameCalculated = (node: Node): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsFile.fileNameCalculated })\nconst getFileSize = (node: Node): string | undefined => getNodeValuePropRaw({ node, prop: ValuePropsFile.fileSize })\nconst getFileUuid = (node: Node): string | undefined => getNodeValuePropRaw({ node, prop: ValuePropsFile.fileUuid })\n\n// Taxon\nconst getTaxonUuid = (node: Node): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsTaxon[ValuePropsTaxon.taxonUuid] })\nconst getValueTaxonUuid = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsTaxon[ValuePropsTaxon.taxonUuid] })\nconst getScientificName = (node: Node): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsTaxon[ValuePropsTaxon.scientificName] })\nconst getValueScientificName = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsTaxon[ValuePropsTaxon.scientificName] })\nconst getVernacularName = (node: Node): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsTaxon[ValuePropsTaxon.vernacularName] })\nconst getValueVernacularName = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsTaxon[ValuePropsTaxon.vernacularName] })\nconst getVernacularNameUuid = (node: Node): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsTaxon[ValuePropsTaxon.vernacularNameUuid] })\nconst getValueVernacularNameUuid = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsTaxon[ValuePropsTaxon.vernacularNameUuid] })\n\n// Time\nconst _getTimePart =\n (index: number) =>\n (node: Node): number =>\n getDateTimePart({ node, index, separator: ':' })\nconst getTimeHour = _getTimePart(0)\nconst getTimeMinute = _getTimePart(1)\nconst getTimeSeconds = (node: Node): number => {\n const parts = (node.value ?? '').split(':')\n return parts.length > 2 ? _getTimePart(2)(node) : 0\n}\n\nconst _timePropGetters: { [key in ValuePropsTime]: any } = {\n [ValuePropsTime.hour]: getTimeHour,\n [ValuePropsTime.minute]: getTimeMinute,\n [ValuePropsTime.seconds]: getTimeSeconds,\n}\n\nconst _valuePropGetters: { [key in NodeDefType]?: (prop: string) => (node: Node) => number } = {\n [NodeDefType.date]: (prop: string) => _datePropGetters[ValuePropsDate[prop as keyof typeof ValuePropsDate]],\n [NodeDefType.time]: (prop: string) => _timePropGetters[ValuePropsTime[prop as keyof typeof ValuePropsTime]],\n}\n\nconst isValueProp = (params: { nodeDef: NodeDef<NodeDefType, NodeDefProps>; prop: string }): boolean => {\n const { nodeDef, prop } = params\n return Object.values(ValuePropsByType[nodeDef.type] ?? {}).includes(prop)\n}\n\nconst getNodeValueProp = (params: { nodeDef: NodeDef<NodeDefType, NodeDefProps>; node: Node; prop: string }): any => {\n const { nodeDef, node, prop } = params\n const propGetter: any = _valuePropGetters[nodeDef.type]\n return propGetter ? propGetter(prop)(node) : getNodeValuePropRaw({ node, prop })\n}\n\n// value compare\n\nconst singlePropValueEqualComparator = (params: NodeValuesCompareParams): boolean => {\n const { value, valueSearch } = params\n return value === valueSearch || String(value) === String(valueSearch)\n}\n\nconst extractCategoryItemUuidFromValue = (params: NodeValuesCompareParams): string | undefined => {\n const { survey, nodeDef, record, parentNode, value } = params\n const valueItemUuid = getValueItemUuid(value)\n if (valueItemUuid) {\n return valueItemUuid\n }\n // find itemUuid by code\n const valueCode = getValueCode(value)\n if (Objects.isEmpty(valueCode)) return undefined\n\n const nodeDefCode = nodeDef as NodeDefCode\n const code = valueCode!\n const categoryUuid = nodeDefCode.props?.categoryUuid\n const levelIndex = Surveys.getNodeDefCategoryLevelIndex({ survey, nodeDef: nodeDefCode })\n if (levelIndex === 0) {\n return Surveys.getCategoryItemUuidByCode({ survey, categoryUuid, parentItemUuid: undefined, code })\n }\n if (!record || !parentNode) return undefined\n\n const parentCodeAttribute = Records.getParentCodeAttribute({ parentNode, nodeDef: nodeDef as NodeDefCode })(record)\n if (!parentCodeAttribute) return undefined\n\n const parentItemUuid = getItemUuid(parentCodeAttribute)\n if (!parentItemUuid) return undefined\n\n return Surveys.getCategoryItemUuidByCode({\n survey,\n categoryUuid,\n parentItemUuid,\n code,\n })\n}\n\nconst extractCategoryItemCodeFromValue = (params: { survey: Survey; value: any }): string | undefined => {\n const { survey, value } = params\n const itemUuid = getValueItemUuid(value)\n if (itemUuid) {\n const item = Surveys.getCategoryItemByUuid({ survey, itemUuid })\n return item ? CategoryItems.getCode(item) : undefined\n }\n return getValueCode(value)\n}\n\nconst dateTimeComparator =\n (params: { formatsSource: DateFormats[]; formatTo: DateFormats }) =>\n (paramsComparator: NodeValuesCompareParams): boolean => {\n const { formatsSource, formatTo } = params\n const { value, valueSearch } = paramsComparator\n const toDateTime = (val: any) => {\n if (val instanceof Date) {\n return Dates.format(val, formatTo)\n }\n const formatFrom = formatsSource.find((format) => Dates.isValidDateInFormat(val, format))\n return formatFrom ? Dates.convertDate({ dateStr: val, formatFrom, formatTo }) : null\n }\n const dateTime = toDateTime(value)\n const dateTimeSearch = toDateTime(valueSearch)\n return !!dateTime && !!dateTimeSearch && dateTime === dateTimeSearch\n }\n\nconst valueComparatorByNodeDefType: { [key in NodeDefType]?: (params: NodeValuesCompareParams) => boolean } = {\n [NodeDefType.boolean]: singlePropValueEqualComparator,\n [NodeDefType.code]: (params: NodeValuesCompareParams): boolean => {\n const { survey, record, value, valueSearch, strict } = params\n if (!strict || !record) {\n // compare just codes (record not available, tricky to find the \"correct\" category item without knowing its parent item)\n const code = extractCategoryItemCodeFromValue({ survey, value })\n const codeSearch = extractCategoryItemCodeFromValue({ survey, value: valueSearch })\n return !!code && !!codeSearch && code === codeSearch\n }\n const itemUuid = extractCategoryItemUuidFromValue(params)\n const itemUuidSearch = extractCategoryItemUuidFromValue({\n ...params,\n value: valueSearch,\n })\n return !!itemUuidSearch && !!itemUuid && itemUuidSearch === itemUuid\n },\n [NodeDefType.coordinate]: (params: NodeValuesCompareParams) => {\n const { value, valueSearch } = params\n return Objects.isEqual(value, valueSearch)\n },\n [NodeDefType.date]: dateTimeComparator({\n formatsSource: [DateFormats.dateDisplay, DateFormats.dateStorage],\n formatTo: DateFormats.dateStorage,\n }),\n [NodeDefType.decimal]: singlePropValueEqualComparator,\n [NodeDefType.integer]: singlePropValueEqualComparator,\n [NodeDefType.taxon]: ({ value, valueSearch }) => {\n if (value === valueSearch) return true\n if (!value) return false\n if (!valueSearch) return false\n return value[ValuePropsTaxon.taxonUuid] === valueSearch[ValuePropsTaxon.taxonUuid]\n },\n [NodeDefType.text]: singlePropValueEqualComparator,\n [NodeDefType.time]: dateTimeComparator({\n formatsSource: [DateFormats.timeStorage, DateFormats.timeWithSeconds],\n formatTo: DateFormats.timeWithSeconds,\n }),\n}\n\ninterface NodeValuesCompareParams {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, any>\n value: any\n valueSearch: any\n record?: Record\n parentNode?: Node\n strict?: boolean\n}\n\nconst isValueEqual = (params: NodeValuesCompareParams): boolean => {\n const { survey, nodeDef, value, valueSearch, record = undefined, parentNode = undefined, strict = false } = params\n if (value === valueSearch) return true\n if (Objects.isEmpty(value) || Objects.isEmpty(valueSearch)) return false\n\n const valueComparator = valueComparatorByNodeDefType[nodeDef.type]\n if (!valueComparator) {\n return Objects.isEqual(value, valueSearch)\n }\n return valueComparator({ survey, nodeDef, record, parentNode, value, valueSearch, strict })\n}\n\nconst getValueAsPoint = (params: { survey: Survey; node: Node }): Point | null => {\n const { survey, node } = params\n const nodeValue = node?.value\n\n if (!nodeValue) return null\n\n const nodeDef = Surveys.getNodeDefByUuid({ survey, uuid: node.nodeDefUuid })\n if (nodeDef.type === NodeDefType.coordinate) {\n const { x, y, srs } = nodeValue as NodeValueCoordinate\n\n const srsObject = Surveys.getSRSByCode(srs)(survey)\n if (!srsObject) return null\n\n return PointFactory.createInstance({ srs, x, y })\n }\n return null\n}\n\nexport const NodeValues = {\n ValuePropsByType,\n ValuePropsCode,\n ValuePropsCoordinate,\n ValuePropsDate,\n ValuePropsFile,\n ValuePropsTaxon,\n ValuePropsTime,\n\n getNodeValueProp,\n isValueProp,\n\n // coordinate\n getValueAsPoint,\n\n // code\n newCodeValue,\n getItemUuid,\n getValueCode,\n getValueItemUuid,\n\n // date\n getDateYear,\n getDateMonth,\n getDateDay,\n\n // file\n getFileName,\n getFileNameCalculated,\n getFileSize,\n getFileUuid,\n\n // taxon\n getTaxonUuid,\n getValueTaxonUuid,\n getScientificName,\n getValueScientificName,\n getVernacularName,\n getValueVernacularName,\n getVernacularNameUuid,\n getValueVernacularNameUuid,\n\n // time\n getTimeHour,\n getTimeMinute,\n getTimeSeconds,\n\n // utils\n isValueEqual,\n}\n"]}
1
+ {"version":3,"file":"nodeValues.js","sourceRoot":"","sources":["../../../src/node/nodeValues.ts"],"names":[],"mappings":"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","sourcesContent":["import { CategoryItems } from '../category'\nimport { Point, PointFactory } from '../geo'\nimport { NodeDef, NodeDefCode, NodeDefProps, NodeDefType } from '../nodeDef'\nimport { ArenaRecord, Records } from '../record'\nimport { Survey, Surveys } from '../survey'\nimport { DateFormats, Dates, Objects } from '../utils'\nimport { ArenaRecordNode } from './node'\nimport { NodeValueCoordinate } from './nodeValue/coordinate'\nimport {\n ValuePropsCode,\n ValuePropsCoordinate,\n ValuePropsDate,\n ValuePropsFile,\n ValuePropsTaxon,\n ValuePropsTime,\n} from './nodeValueProps'\n\n/**\n * Props of node value indexed by node def type.\n * The node definitions here are only the ones of \"composite\" attributes.\n */\nexport const ValuePropsByType: { [key in NodeDefType]: { [key: string]: string } | null } = {\n [NodeDefType.boolean]: null,\n [NodeDefType.code]: ValuePropsCode,\n [NodeDefType.coordinate]: ValuePropsCoordinate,\n [NodeDefType.date]: ValuePropsDate,\n [NodeDefType.decimal]: null,\n [NodeDefType.geo]: null,\n [NodeDefType.entity]: null,\n [NodeDefType.file]: ValuePropsFile,\n [NodeDefType.integer]: null,\n [NodeDefType.taxon]: ValuePropsTaxon,\n [NodeDefType.time]: ValuePropsTime,\n [NodeDefType.text]: null,\n // layout elements\n [NodeDefType.formHeader]: null,\n}\n\nconst getValuePropRaw = (params: { value: any; prop: string; defaultValue?: any }): any => {\n const { value, prop, defaultValue } = params\n const valueProp = value?.[prop]\n return valueProp === undefined ? defaultValue : valueProp\n}\n\nconst getNodeValuePropRaw = (params: { node: ArenaRecordNode; prop: string; defaultValue?: any }): any => {\n const { node, prop, defaultValue } = params\n return getValuePropRaw({ value: node.value, prop, defaultValue })\n}\n\n// Code\nconst newCodeValue = (params: { itemUuid: string }) => {\n const { itemUuid } = params\n return { [ValuePropsCode[ValuePropsCode.itemUuid]]: itemUuid }\n}\n\nconst getItemUuid = (node: ArenaRecordNode): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsCode[ValuePropsCode.itemUuid] })\n\nconst getValueCode = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsCode[ValuePropsCode.code] })\n\nconst getValueItemUuid = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsCode[ValuePropsCode.itemUuid] })\n\nconst getDateTimePart = (params: { node: ArenaRecordNode; index: number; separator: string }): number => {\n const { node, index, separator } = params\n return Number((node.value ?? '').split(separator)[index]?.trim())\n}\n\n// Date\nconst getDatePart =\n (index: number) =>\n (node: ArenaRecordNode): number =>\n getDateTimePart({ node, index, separator: '-' })\nconst getDateYear = getDatePart(0)\nconst getDateMonth = getDatePart(1)\nconst getDateDay = getDatePart(2)\n\nconst _datePropGetters: { [key in ValuePropsDate]: (node: ArenaRecordNode) => number } = {\n [ValuePropsDate.day]: getDateDay,\n [ValuePropsDate.month]: getDateMonth,\n [ValuePropsDate.year]: getDateYear,\n}\n\n// File\nconst getFileName = (node: ArenaRecordNode): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsFile.fileName })\nconst getFileNameCalculated = (node: ArenaRecordNode): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsFile.fileNameCalculated })\nconst getFileSize = (node: ArenaRecordNode): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsFile.fileSize })\nconst getFileUuid = (node: ArenaRecordNode): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsFile.fileUuid })\n\n// Taxon\nconst getTaxonUuid = (node: ArenaRecordNode): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsTaxon[ValuePropsTaxon.taxonUuid] })\nconst getValueTaxonUuid = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsTaxon[ValuePropsTaxon.taxonUuid] })\nconst getScientificName = (node: ArenaRecordNode): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsTaxon[ValuePropsTaxon.scientificName] })\nconst getValueScientificName = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsTaxon[ValuePropsTaxon.scientificName] })\nconst getVernacularName = (node: ArenaRecordNode): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsTaxon[ValuePropsTaxon.vernacularName] })\nconst getValueVernacularName = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsTaxon[ValuePropsTaxon.vernacularName] })\nconst getVernacularNameUuid = (node: ArenaRecordNode): string | undefined =>\n getNodeValuePropRaw({ node, prop: ValuePropsTaxon[ValuePropsTaxon.vernacularNameUuid] })\nconst getValueVernacularNameUuid = (value: any): string | undefined =>\n getValuePropRaw({ value, prop: ValuePropsTaxon[ValuePropsTaxon.vernacularNameUuid] })\n\n// Time\nconst _getTimePart =\n (index: number) =>\n (node: ArenaRecordNode): number =>\n getDateTimePart({ node, index, separator: ':' })\nconst getTimeHour = _getTimePart(0)\nconst getTimeMinute = _getTimePart(1)\nconst getTimeSeconds = (node: ArenaRecordNode): number => {\n const parts = (node.value ?? '').split(':')\n return parts.length > 2 ? _getTimePart(2)(node) : 0\n}\n\nconst _timePropGetters: { [key in ValuePropsTime]: any } = {\n [ValuePropsTime.hour]: getTimeHour,\n [ValuePropsTime.minute]: getTimeMinute,\n [ValuePropsTime.seconds]: getTimeSeconds,\n}\n\nconst _valuePropGetters: { [key in NodeDefType]?: (prop: string) => (node: ArenaRecordNode) => number } = {\n [NodeDefType.date]: (prop: string) => _datePropGetters[ValuePropsDate[prop as keyof typeof ValuePropsDate]],\n [NodeDefType.time]: (prop: string) => _timePropGetters[ValuePropsTime[prop as keyof typeof ValuePropsTime]],\n}\n\nconst isValueProp = (params: { nodeDef: NodeDef<NodeDefType, NodeDefProps>; prop: string }): boolean => {\n const { nodeDef, prop } = params\n return Object.values(ValuePropsByType[nodeDef.type] ?? {}).includes(prop)\n}\n\nconst getNodeValueProp = (params: {\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n node: ArenaRecordNode\n prop: string\n}): any => {\n const { nodeDef, node, prop } = params\n const propGetter: any = _valuePropGetters[nodeDef.type]\n return propGetter ? propGetter(prop)(node) : getNodeValuePropRaw({ node, prop })\n}\n\n// value compare\n\nconst singlePropValueEqualComparator = (params: NodeValuesCompareParams): boolean => {\n const { value, valueSearch } = params\n return value === valueSearch || String(value) === String(valueSearch)\n}\n\nconst extractCategoryItemUuidFromValue = (params: NodeValuesCompareParams): string | undefined => {\n const { survey, nodeDef, record, parentNode, value } = params\n const valueItemUuid = getValueItemUuid(value)\n if (valueItemUuid) {\n return valueItemUuid\n }\n // find itemUuid by code\n const valueCode = getValueCode(value)\n if (Objects.isEmpty(valueCode)) return undefined\n\n const nodeDefCode = nodeDef as NodeDefCode\n const code = valueCode!\n const categoryUuid = nodeDefCode.props?.categoryUuid\n const levelIndex = Surveys.getNodeDefCategoryLevelIndex({ survey, nodeDef: nodeDefCode })\n if (levelIndex === 0) {\n return Surveys.getCategoryItemUuidByCode({ survey, categoryUuid, parentItemUuid: undefined, code })\n }\n if (!record || !parentNode) return undefined\n\n const parentCodeAttribute = Records.getParentCodeAttribute({ parentNode, nodeDef: nodeDef as NodeDefCode })(record)\n if (!parentCodeAttribute) return undefined\n\n const parentItemUuid = getItemUuid(parentCodeAttribute)\n if (!parentItemUuid) return undefined\n\n return Surveys.getCategoryItemUuidByCode({\n survey,\n categoryUuid,\n parentItemUuid,\n code,\n })\n}\n\nconst extractCategoryItemCodeFromValue = (params: { survey: Survey; value: any }): string | undefined => {\n const { survey, value } = params\n const itemUuid = getValueItemUuid(value)\n if (itemUuid) {\n const item = Surveys.getCategoryItemByUuid({ survey, itemUuid })\n return item ? CategoryItems.getCode(item) : undefined\n }\n return getValueCode(value)\n}\n\nconst dateTimeComparator =\n (params: { formatsSource: DateFormats[]; formatTo: DateFormats }) =>\n (paramsComparator: NodeValuesCompareParams): boolean => {\n const { formatsSource, formatTo } = params\n const { value, valueSearch } = paramsComparator\n const toDateTime = (val: any) => {\n if (val instanceof Date) {\n return Dates.format(val, formatTo)\n }\n const formatFrom = formatsSource.find((format) => Dates.isValidDateInFormat(val, format))\n return formatFrom ? Dates.convertDate({ dateStr: val, formatFrom, formatTo }) : null\n }\n const dateTime = toDateTime(value)\n const dateTimeSearch = toDateTime(valueSearch)\n return !!dateTime && !!dateTimeSearch && dateTime === dateTimeSearch\n }\n\nconst valueComparatorByNodeDefType: { [key in NodeDefType]?: (params: NodeValuesCompareParams) => boolean } = {\n [NodeDefType.boolean]: singlePropValueEqualComparator,\n [NodeDefType.code]: (params: NodeValuesCompareParams): boolean => {\n const { survey, record, value, valueSearch, strict } = params\n if (!strict || !record) {\n // compare just codes (record not available, tricky to find the \"correct\" category item without knowing its parent item)\n const code = extractCategoryItemCodeFromValue({ survey, value })\n const codeSearch = extractCategoryItemCodeFromValue({ survey, value: valueSearch })\n return !!code && !!codeSearch && code === codeSearch\n }\n const itemUuid = extractCategoryItemUuidFromValue(params)\n const itemUuidSearch = extractCategoryItemUuidFromValue({\n ...params,\n value: valueSearch,\n })\n return !!itemUuidSearch && !!itemUuid && itemUuidSearch === itemUuid\n },\n [NodeDefType.coordinate]: (params: NodeValuesCompareParams) => {\n const { value, valueSearch } = params\n return Objects.isEqual(value, valueSearch)\n },\n [NodeDefType.date]: dateTimeComparator({\n formatsSource: [DateFormats.dateDisplay, DateFormats.dateStorage],\n formatTo: DateFormats.dateStorage,\n }),\n [NodeDefType.decimal]: singlePropValueEqualComparator,\n [NodeDefType.integer]: singlePropValueEqualComparator,\n [NodeDefType.taxon]: ({ value, valueSearch }) => {\n if (value === valueSearch) return true\n if (!value) return false\n if (!valueSearch) return false\n return value[ValuePropsTaxon.taxonUuid] === valueSearch[ValuePropsTaxon.taxonUuid]\n },\n [NodeDefType.text]: singlePropValueEqualComparator,\n [NodeDefType.time]: dateTimeComparator({\n formatsSource: [DateFormats.timeStorage, DateFormats.timeWithSeconds],\n formatTo: DateFormats.timeWithSeconds,\n }),\n}\n\ninterface NodeValuesCompareParams {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, any>\n value: any\n valueSearch: any\n record?: ArenaRecord\n parentNode?: ArenaRecordNode\n strict?: boolean\n}\n\nconst isValueEqual = (params: NodeValuesCompareParams): boolean => {\n const { survey, nodeDef, value, valueSearch, record = undefined, parentNode = undefined, strict = false } = params\n if (value === valueSearch) return true\n if (Objects.isEmpty(value) || Objects.isEmpty(valueSearch)) return false\n\n const valueComparator = valueComparatorByNodeDefType[nodeDef.type]\n if (!valueComparator) {\n return Objects.isEqual(value, valueSearch)\n }\n return valueComparator({ survey, nodeDef, record, parentNode, value, valueSearch, strict })\n}\n\nconst getValueAsPoint = (params: { survey: Survey; node: ArenaRecordNode }): Point | null => {\n const { survey, node } = params\n const nodeValue = node?.value\n\n if (!nodeValue) return null\n\n const nodeDef = Surveys.getNodeDefByUuid({ survey, uuid: node.nodeDefUuid })\n if (nodeDef.type === NodeDefType.coordinate) {\n const { x, y, srs } = nodeValue as NodeValueCoordinate\n\n const srsObject = Surveys.getSRSByCode(srs)(survey)\n if (!srsObject) return null\n\n return PointFactory.createInstance({ srs, x, y })\n }\n return null\n}\n\nexport const NodeValues = {\n ValuePropsByType,\n ValuePropsCode,\n ValuePropsCoordinate,\n ValuePropsDate,\n ValuePropsFile,\n ValuePropsTaxon,\n ValuePropsTime,\n\n getNodeValueProp,\n isValueProp,\n\n // coordinate\n getValueAsPoint,\n\n // code\n newCodeValue,\n getItemUuid,\n getValueCode,\n getValueItemUuid,\n\n // date\n getDateYear,\n getDateMonth,\n getDateDay,\n\n // file\n getFileName,\n getFileNameCalculated,\n getFileSize,\n getFileUuid,\n\n // taxon\n getTaxonUuid,\n getValueTaxonUuid,\n getScientificName,\n getValueScientificName,\n getVernacularName,\n getValueVernacularName,\n getVernacularNameUuid,\n getValueVernacularNameUuid,\n\n // time\n getTimeHour,\n getTimeMinute,\n getTimeSeconds,\n\n // utils\n isValueEqual,\n}\n"]}
@@ -11,6 +11,7 @@ var __rest = (this && this.__rest) || function (s, e) {
11
11
  };
12
12
  import { NodeDefCountType, NodeDefs } from '../nodeDef';
13
13
  import { Dates, Objects } from '../utils';
14
+ import { toMutationOptions } from '../utils/mutationOptions';
14
15
  const isRoot = (node) => !node.parentUuid;
15
16
  const areEqual = (nodeA, nodeB) => nodeA.uuid === nodeB.uuid;
16
17
  const isChildApplicable = (node, nodeDefUuid) => {
@@ -85,8 +86,14 @@ const updateMetaDictionary = ({ node, nodeDefUuid, propName, propValue, sideEffe
85
86
  nodeUpdated.dateModified = Dates.nowFormattedForStorage();
86
87
  return nodeUpdated;
87
88
  };
88
- const assocChildEditable = (node, nodeDefUuid, editable, sideEffect = false) => updateMetaDictionary({ node, nodeDefUuid, propName: 'cEdit', propValue: editable, sideEffect });
89
- const assocChildVisible = (node, nodeDefUuid, visible, sideEffect = false) => updateMetaDictionary({ node, nodeDefUuid, propName: 'cVis', propValue: visible, sideEffect });
89
+ function assocChildEditable(node, nodeDefUuid, editable, options) {
90
+ const { sideEffect = false } = toMutationOptions(options);
91
+ return updateMetaDictionary({ node, nodeDefUuid, propName: 'cEdit', propValue: editable, sideEffect });
92
+ }
93
+ function assocChildVisible(node, nodeDefUuid, visible, options) {
94
+ const { sideEffect = false } = toMutationOptions(options);
95
+ return updateMetaDictionary({ node, nodeDefUuid, propName: 'cVis', propValue: visible, sideEffect });
96
+ }
90
97
  const assocChildrenCount = (params) => {
91
98
  var _a, _b;
92
99
  const { node, nodeDefUuid, count, countType } = params;
@@ -122,9 +129,10 @@ const omitStatusFlags = (node) => {
122
129
  const { created: _created, deleted: _deleted, updated: _updated } = node, nodeCleaned = __rest(node, ["created", "deleted", "updated"]);
123
130
  return nodeCleaned;
124
131
  };
125
- const removeStatusFlags = ({ node, sideEffect = false }) => sideEffect ? clearStatusFlagsInPlace(node) : omitStatusFlags(node);
126
- const assocValue = (node, value, sideEffect = false) => {
132
+ const removeStatusFlags = ({ node, sideEffect = false, }) => (sideEffect ? clearStatusFlagsInPlace(node) : omitStatusFlags(node));
133
+ function assocValue(node, value, options) {
127
134
  var _a;
135
+ const { sideEffect = false } = toMutationOptions(options);
128
136
  const nodeUpdated = sideEffect ? node : Object.assign({}, node);
129
137
  nodeUpdated.value = value;
130
138
  nodeUpdated.updated = true;
@@ -136,7 +144,7 @@ const assocValue = (node, value, sideEffect = false) => {
136
144
  nodeUpdated.meta = Object.assign(Object.assign({}, meta), { defaultValueApplied: false, qualifierValueApplied: false });
137
145
  }
138
146
  return nodeUpdated;
139
- };
147
+ }
140
148
  export const Nodes = {
141
149
  isRoot,
142
150
  areEqual,