@openforis/arena-core 2.5.2 → 2.5.4

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.
@@ -21,11 +21,10 @@ export class NodeDefExpressionEvaluator extends JavascriptExpressionEvaluator {
21
21
  [ExpressionNodeType.This]: NodeDefThisEvaluator,
22
22
  });
23
23
  }
24
- _eval(params) {
25
- return __awaiter(this, void 0, void 0, function* () {
24
+ _eval(params_1) {
25
+ return __awaiter(this, arguments, void 0, function* (params, referencedNodeDefUuids = new Set()) {
26
26
  const { expression, user, survey, nodeDef, isContextParent = true, selfReferenceAllowed = true, itemsFilter = false, } = params;
27
27
  const nodeDefContext = isContextParent ? getNodeDefParent({ survey, nodeDef }) : nodeDef;
28
- const referencedNodeDefUuids = new Set();
29
28
  const context = {
30
29
  user,
31
30
  survey,
@@ -40,15 +39,21 @@ export class NodeDefExpressionEvaluator extends JavascriptExpressionEvaluator {
40
39
  return { result, referencedNodeDefUuids };
41
40
  });
42
41
  }
42
+ /**
43
+ * Finds the node defs referenced by the expression.
44
+ * If the evaluation fails, the node defs referenced before the error are returned: an empty set would drop
45
+ * all the dependencies of the expression.
46
+ */
43
47
  findReferencedNodeDefUuids(params) {
44
48
  return __awaiter(this, void 0, void 0, function* () {
49
+ const referencedNodeDefUuids = new Set();
45
50
  try {
46
- const { referencedNodeDefUuids } = yield this._eval(params);
47
- return referencedNodeDefUuids;
51
+ yield this._eval(params, referencedNodeDefUuids);
48
52
  }
49
53
  catch (_a) {
50
- return new Set();
54
+ // invalid expression (reported by the expression validator): keep the references found so far
51
55
  }
56
+ return referencedNodeDefUuids;
52
57
  });
53
58
  }
54
59
  evalExpression(params) {
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/nodeDefExpressionEvaluator/evaluator.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAA;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAIxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAY7D,MAAM,OAAO,0BAA2B,SAAQ,6BAAuD;IACrG;QACE,KAAK,CAAC,0BAA0B,EAAE;YAChC,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,0BAA0B;YAC3D,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,sBAAsB;YACnD,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,oBAAoB;SAChD,CAAC,CAAA;IACJ,CAAC;IAEK,KAAK,CAAC,MAAiC;;YAC3C,MAAM,EACJ,UAAU,EACV,IAAI,EACJ,MAAM,EACN,OAAO,EACP,eAAe,GAAG,IAAI,EACtB,oBAAoB,GAAG,IAAI,EAC3B,WAAW,GAAG,KAAK,GACpB,GAAG,MAAM,CAAA;YAEV,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;YAExF,MAAM,sBAAsB,GAAgB,IAAI,GAAG,EAAE,CAAA;YAErD,MAAM,OAAO,GAA6B;gBACxC,IAAI;gBACJ,MAAM;gBACN,cAAc,EAAE,OAAO;gBACvB,cAAc;gBACd,MAAM,EAAE,OAAO;gBACf,oBAAoB;gBACpB,sBAAsB;gBACtB,WAAW;aACZ,CAAA;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACvD,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAA;QAC3C,CAAC;KAAA;IAEK,0BAA0B,CAAC,MAAiC;;YAChE,IAAI,CAAC;gBACH,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,OAAO,sBAAsB,CAAA;YAC/B,CAAC;uBAAO,CAAC;gBACP,OAAO,IAAI,GAAG,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;KAAA;IAEK,cAAc,CAAC,MAAiC;;YACpD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC3C,OAAO,MAAM,CAAA;QACf,CAAC;KAAA;CACF","sourcesContent":["import { User } from '../auth'\nimport { ExpressionNodeType, JavascriptExpressionEvaluator } from '../expression'\nimport { NodeDefIdentifierEvaluator } from './node/identifier'\nimport { NodeDefMemberEvaluator } from './node/member'\nimport { NodeDefThisEvaluator } from './node/thisEvaluator'\nimport { nodeDefExpressionFunctions } from './functions'\nimport { NodeDefExpressionContext } from './context'\nimport { NodeDef } from '../nodeDef/nodeDef'\nimport { Survey } from '../survey'\nimport { getNodeDefParent } from '../survey/surveys/nodeDefs'\n\nexport type ExpressionEvaluatorParams = {\n expression: string\n user?: User\n survey: Survey\n nodeDef: NodeDef<any>\n isContextParent?: boolean\n selfReferenceAllowed?: boolean\n itemsFilter?: boolean\n}\n\nexport class NodeDefExpressionEvaluator extends JavascriptExpressionEvaluator<NodeDefExpressionContext> {\n constructor() {\n super(nodeDefExpressionFunctions, {\n [ExpressionNodeType.Identifier]: NodeDefIdentifierEvaluator,\n [ExpressionNodeType.Member]: NodeDefMemberEvaluator,\n [ExpressionNodeType.This]: NodeDefThisEvaluator,\n })\n }\n\n async _eval(params: ExpressionEvaluatorParams): Promise<{ result: any; referencedNodeDefUuids: Set<string> }> {\n const {\n expression,\n user,\n survey,\n nodeDef,\n isContextParent = true,\n selfReferenceAllowed = true,\n itemsFilter = false,\n } = params\n\n const nodeDefContext = isContextParent ? getNodeDefParent({ survey, nodeDef }) : nodeDef\n\n const referencedNodeDefUuids: Set<string> = new Set()\n\n const context: NodeDefExpressionContext = {\n user,\n survey,\n nodeDefCurrent: nodeDef,\n nodeDefContext,\n object: nodeDef,\n selfReferenceAllowed,\n referencedNodeDefUuids,\n itemsFilter,\n }\n const result = await this.evaluate(expression, context)\n return { result, referencedNodeDefUuids }\n }\n\n async findReferencedNodeDefUuids(params: ExpressionEvaluatorParams): Promise<Set<string>> {\n try {\n const { referencedNodeDefUuids } = await this._eval(params)\n return referencedNodeDefUuids\n } catch {\n return new Set()\n }\n }\n\n async evalExpression(params: ExpressionEvaluatorParams): Promise<any> {\n const { result } = await this._eval(params)\n return result\n }\n}\n"]}
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/nodeDefExpressionEvaluator/evaluator.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAA;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAIxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAY7D,MAAM,OAAO,0BAA2B,SAAQ,6BAAuD;IACrG;QACE,KAAK,CAAC,0BAA0B,EAAE;YAChC,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,0BAA0B;YAC3D,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,sBAAsB;YACnD,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,oBAAoB;SAChD,CAAC,CAAA;IACJ,CAAC;IAEK,KAAK;6DACT,MAAiC,EACjC,sBAAsB,GAAgB,IAAI,GAAG,EAAE;YAE/C,MAAM,EACJ,UAAU,EACV,IAAI,EACJ,MAAM,EACN,OAAO,EACP,eAAe,GAAG,IAAI,EACtB,oBAAoB,GAAG,IAAI,EAC3B,WAAW,GAAG,KAAK,GACpB,GAAG,MAAM,CAAA;YAEV,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;YAExF,MAAM,OAAO,GAA6B;gBACxC,IAAI;gBACJ,MAAM;gBACN,cAAc,EAAE,OAAO;gBACvB,cAAc;gBACd,MAAM,EAAE,OAAO;gBACf,oBAAoB;gBACpB,sBAAsB;gBACtB,WAAW;aACZ,CAAA;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACvD,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAA;QAC3C,CAAC;KAAA;IAED;;;;OAIG;IACG,0BAA0B,CAAC,MAAiC;;YAChE,MAAM,sBAAsB,GAAgB,IAAI,GAAG,EAAE,CAAA;YACrD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;YAClD,CAAC;uBAAO,CAAC;gBACP,8FAA8F;YAChG,CAAC;YACD,OAAO,sBAAsB,CAAA;QAC/B,CAAC;KAAA;IAEK,cAAc,CAAC,MAAiC;;YACpD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC3C,OAAO,MAAM,CAAA;QACf,CAAC;KAAA;CACF","sourcesContent":["import { User } from '../auth'\nimport { ExpressionNodeType, JavascriptExpressionEvaluator } from '../expression'\nimport { NodeDefIdentifierEvaluator } from './node/identifier'\nimport { NodeDefMemberEvaluator } from './node/member'\nimport { NodeDefThisEvaluator } from './node/thisEvaluator'\nimport { nodeDefExpressionFunctions } from './functions'\nimport { NodeDefExpressionContext } from './context'\nimport { NodeDef } from '../nodeDef/nodeDef'\nimport { Survey } from '../survey'\nimport { getNodeDefParent } from '../survey/surveys/nodeDefs'\n\nexport type ExpressionEvaluatorParams = {\n expression: string\n user?: User\n survey: Survey\n nodeDef: NodeDef<any>\n isContextParent?: boolean\n selfReferenceAllowed?: boolean\n itemsFilter?: boolean\n}\n\nexport class NodeDefExpressionEvaluator extends JavascriptExpressionEvaluator<NodeDefExpressionContext> {\n constructor() {\n super(nodeDefExpressionFunctions, {\n [ExpressionNodeType.Identifier]: NodeDefIdentifierEvaluator,\n [ExpressionNodeType.Member]: NodeDefMemberEvaluator,\n [ExpressionNodeType.This]: NodeDefThisEvaluator,\n })\n }\n\n async _eval(\n params: ExpressionEvaluatorParams,\n referencedNodeDefUuids: Set<string> = new Set()\n ): Promise<{ result: any; referencedNodeDefUuids: Set<string> }> {\n const {\n expression,\n user,\n survey,\n nodeDef,\n isContextParent = true,\n selfReferenceAllowed = true,\n itemsFilter = false,\n } = params\n\n const nodeDefContext = isContextParent ? getNodeDefParent({ survey, nodeDef }) : nodeDef\n\n const context: NodeDefExpressionContext = {\n user,\n survey,\n nodeDefCurrent: nodeDef,\n nodeDefContext,\n object: nodeDef,\n selfReferenceAllowed,\n referencedNodeDefUuids,\n itemsFilter,\n }\n const result = await this.evaluate(expression, context)\n return { result, referencedNodeDefUuids }\n }\n\n /**\n * Finds the node defs referenced by the expression.\n * If the evaluation fails, the node defs referenced before the error are returned: an empty set would drop\n * all the dependencies of the expression.\n */\n async findReferencedNodeDefUuids(params: ExpressionEvaluatorParams): Promise<Set<string>> {\n const referencedNodeDefUuids: Set<string> = new Set()\n try {\n await this._eval(params, referencedNodeDefUuids)\n } catch {\n // invalid expression (reported by the expression validator): keep the references found so far\n }\n return referencedNodeDefUuids\n }\n\n async evalExpression(params: ExpressionEvaluatorParams): Promise<any> {\n const { result } = await this._eval(params)\n return result\n }\n}\n"]}
@@ -105,14 +105,21 @@ export const deleteNodeDefIndex = (nodeDef) => (survey) => {
105
105
  return surveyUpdated;
106
106
  };
107
107
  // ==== CREATE
108
+ /**
109
+ * Builds the node defs index of the survey.
110
+ *
111
+ * @param survey - The survey.
112
+ * @returns A copy of the survey with the node defs index (the survey passed in is not modified).
113
+ */
108
114
  export const buildAndAssocNodeDefsIndex = (survey) => {
109
- survey.nodeDefsIndex = {
110
- childDefUuidPresenceByParentUuid: {},
111
- qualifierPresenceByUuid: {},
112
- };
115
+ // the new index is built in place: it belongs only to the copy of the survey
116
+ const surveyUpdated = Object.assign(Object.assign({}, survey), { nodeDefsIndex: {
117
+ childDefUuidPresenceByParentUuid: {},
118
+ qualifierPresenceByUuid: {},
119
+ } });
113
120
  getNodeDefsArray(survey)
114
121
  .sort((nodeDef1, nodeDef2) => { var _a, _b; return ((_a = nodeDef1.id) !== null && _a !== void 0 ? _a : 0) - ((_b = nodeDef2.id) !== null && _b !== void 0 ? _b : 0); })
115
- .forEach((nodeDef) => addNodeDefToIndex(nodeDef, { sideEffect: true })(survey));
116
- return survey;
122
+ .forEach((nodeDef) => addNodeDefToIndex(nodeDef, { sideEffect: true })(surveyUpdated));
123
+ return surveyUpdated;
117
124
  };
118
125
  //# sourceMappingURL=nodeDefsIndex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeDefsIndex.js","sourceRoot":"","sources":["../../../../../src/survey/surveys/_nodeDefs/nodeDefsIndex.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeDef, NodeDefs } from '../../../nodeDef'\nimport { Objects } from '../../../utils'\nimport { MutationOptions } from '../../../utils/mutationOptions'\nimport { Survey, SurveyNodeDefsIndex } from '../../survey'\nimport { getNodeDefsArray } from './nodeDefsReader'\n\nconst keys = {\n nodeDefsIndex: 'nodeDefsIndex',\n}\n\n// keys and values must match: forces every property of SurveyNodeDefsIndex to be present here,\n// and a rename/typo on either side becomes a compile error instead of a silent runtime mismatch.\nconst indexKeys: { [K in keyof SurveyNodeDefsIndex]-?: K } = {\n childDefUuidPresenceByParentUuid: 'childDefUuidPresenceByParentUuid',\n nodeDefUuidByName: 'nodeDefUuidByName',\n qualifierPresenceByUuid: 'qualifierPresenceByUuid',\n rootDefUuid: 'rootDefUuid',\n}\n\n// ==== UPDATE\n\nexport const addNodeDefToIndex =\n (nodeDef: NodeDef<any>, options: MutationOptions = {}) =>\n (survey: Survey): Survey => {\n const { sideEffect = false } = options\n\n const { analysis, parentUuid, temporary, uuid } = nodeDef\n const name = NodeDefs.getName(nodeDef)\n\n let surveyUpdated: Survey = Objects.assocPath({\n obj: survey,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, name],\n value: nodeDef.uuid,\n sideEffect,\n })\n\n if (parentUuid) {\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, parentUuid, uuid],\n value: true,\n sideEffect,\n }) as Survey\n } else if (!temporary && !analysis) {\n // nodeDef is root\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.rootDefUuid],\n value: uuid,\n sideEffect,\n }) as Survey\n }\n\n if (NodeDefs.isQualifier(nodeDef)) {\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.qualifierPresenceByUuid, uuid],\n value: true,\n sideEffect,\n }) as Survey\n }\n return surveyUpdated\n }\n\nexport const updateNodeDefUuidByNameIndex =\n (nodeDef: NodeDef<any>, nodeDefPrevious?: NodeDef<any>, options?: MutationOptions) =>\n (survey: Survey): Survey => {\n const { sideEffect } = options ?? {}\n let surveyUpdated = survey\n const currentName = NodeDefs.getName(nodeDef)\n const previousName = nodeDefPrevious ? NodeDefs.getName(nodeDefPrevious) : ''\n if (currentName !== previousName) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, previousName],\n sideEffect,\n })\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, currentName],\n value: nodeDef.uuid,\n sideEffect,\n })\n }\n return surveyUpdated\n }\n\n// ==== DELETE\n\nexport const deleteNodeDefIndex =\n (nodeDef: NodeDef<any>) =>\n (survey: Survey): Survey => {\n const { parentUuid, uuid } = nodeDef\n const name = NodeDefs.getName(nodeDef)\n\n let surveyUpdated: Survey = Objects.dissocPath({\n obj: survey,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, uuid],\n })\n\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, name],\n })\n\n if (parentUuid) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, parentUuid, uuid],\n })\n } else if (survey.nodeDefsIndex?.rootDefUuid === uuid) {\n // node def is root (other node defs without parent, e.g. temporary or analysis ones, are not)\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.rootDefUuid],\n })\n }\n\n if (NodeDefs.isQualifier(nodeDef)) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.qualifierPresenceByUuid, uuid],\n })\n }\n return surveyUpdated\n }\n\n// ==== CREATE\n\nexport const buildAndAssocNodeDefsIndex = (survey: Survey): Survey => {\n survey.nodeDefsIndex = {\n childDefUuidPresenceByParentUuid: {},\n qualifierPresenceByUuid: {},\n }\n getNodeDefsArray(survey)\n .sort((nodeDef1: NodeDef<any>, nodeDef2: NodeDef<any>) => (nodeDef1.id ?? 0) - (nodeDef2.id ?? 0))\n .forEach((nodeDef) => addNodeDefToIndex(nodeDef, { sideEffect: true })(survey))\n\n return survey\n}\n"]}
1
+ {"version":3,"file":"nodeDefsIndex.js","sourceRoot":"","sources":["../../../../../src/survey/surveys/_nodeDefs/nodeDefsIndex.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeDef, NodeDefs } from '../../../nodeDef'\nimport { Objects } from '../../../utils'\nimport { MutationOptions } from '../../../utils/mutationOptions'\nimport { Survey, SurveyNodeDefsIndex } from '../../survey'\nimport { getNodeDefsArray } from './nodeDefsReader'\n\nconst keys = {\n nodeDefsIndex: 'nodeDefsIndex',\n}\n\n// keys and values must match: forces every property of SurveyNodeDefsIndex to be present here,\n// and a rename/typo on either side becomes a compile error instead of a silent runtime mismatch.\nconst indexKeys: { [K in keyof SurveyNodeDefsIndex]-?: K } = {\n childDefUuidPresenceByParentUuid: 'childDefUuidPresenceByParentUuid',\n nodeDefUuidByName: 'nodeDefUuidByName',\n qualifierPresenceByUuid: 'qualifierPresenceByUuid',\n rootDefUuid: 'rootDefUuid',\n}\n\n// ==== UPDATE\n\nexport const addNodeDefToIndex =\n (nodeDef: NodeDef<any>, options: MutationOptions = {}) =>\n (survey: Survey): Survey => {\n const { sideEffect = false } = options\n\n const { analysis, parentUuid, temporary, uuid } = nodeDef\n const name = NodeDefs.getName(nodeDef)\n\n let surveyUpdated: Survey = Objects.assocPath({\n obj: survey,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, name],\n value: nodeDef.uuid,\n sideEffect,\n })\n\n if (parentUuid) {\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, parentUuid, uuid],\n value: true,\n sideEffect,\n }) as Survey\n } else if (!temporary && !analysis) {\n // nodeDef is root\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.rootDefUuid],\n value: uuid,\n sideEffect,\n }) as Survey\n }\n\n if (NodeDefs.isQualifier(nodeDef)) {\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.qualifierPresenceByUuid, uuid],\n value: true,\n sideEffect,\n }) as Survey\n }\n return surveyUpdated\n }\n\nexport const updateNodeDefUuidByNameIndex =\n (nodeDef: NodeDef<any>, nodeDefPrevious?: NodeDef<any>, options?: MutationOptions) =>\n (survey: Survey): Survey => {\n const { sideEffect } = options ?? {}\n let surveyUpdated = survey\n const currentName = NodeDefs.getName(nodeDef)\n const previousName = nodeDefPrevious ? NodeDefs.getName(nodeDefPrevious) : ''\n if (currentName !== previousName) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, previousName],\n sideEffect,\n })\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, currentName],\n value: nodeDef.uuid,\n sideEffect,\n })\n }\n return surveyUpdated\n }\n\n// ==== DELETE\n\nexport const deleteNodeDefIndex =\n (nodeDef: NodeDef<any>) =>\n (survey: Survey): Survey => {\n const { parentUuid, uuid } = nodeDef\n const name = NodeDefs.getName(nodeDef)\n\n let surveyUpdated: Survey = Objects.dissocPath({\n obj: survey,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, uuid],\n })\n\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, name],\n })\n\n if (parentUuid) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, parentUuid, uuid],\n })\n } else if (survey.nodeDefsIndex?.rootDefUuid === uuid) {\n // node def is root (other node defs without parent, e.g. temporary or analysis ones, are not)\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.rootDefUuid],\n })\n }\n\n if (NodeDefs.isQualifier(nodeDef)) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.qualifierPresenceByUuid, uuid],\n })\n }\n return surveyUpdated\n }\n\n// ==== CREATE\n\n/**\n * Builds the node defs index of the survey.\n *\n * @param survey - The survey.\n * @returns A copy of the survey with the node defs index (the survey passed in is not modified).\n */\nexport const buildAndAssocNodeDefsIndex = (survey: Survey): Survey => {\n // the new index is built in place: it belongs only to the copy of the survey\n const surveyUpdated: Survey = {\n ...survey,\n nodeDefsIndex: {\n childDefUuidPresenceByParentUuid: {},\n qualifierPresenceByUuid: {},\n },\n }\n getNodeDefsArray(survey)\n .sort((nodeDef1: NodeDef<any>, nodeDef2: NodeDef<any>) => (nodeDef1.id ?? 0) - (nodeDef2.id ?? 0))\n .forEach((nodeDef) => addNodeDefToIndex(nodeDef, { sideEffect: true })(surveyUpdated))\n\n return surveyUpdated\n}\n"]}
@@ -227,11 +227,17 @@ export const removeNodeDefDependencies = (params) => {
227
227
  const graphsUpdated = dependencyTypes.reduce((dependencyGraphAcc, type) => _removeNodeDefDependenciesOfType({ graphs: dependencyGraphAcc, dependencyType: type, nodeDefUuid }), graphs);
228
228
  return Object.assign(Object.assign({}, survey), { dependencyGraph: graphsUpdated });
229
229
  };
230
+ /**
231
+ * Builds the dependency graph of the survey.
232
+ *
233
+ * @param survey - The survey.
234
+ * @returns A copy of the survey with the dependency graph (the survey passed in is not modified).
235
+ */
230
236
  export const buildAndAssocDependencyGraph = (survey) => __awaiter(void 0, void 0, void 0, function* () {
231
- survey.dependencyGraph = newDependencyGraph();
232
- const sideEffect = true; // when the dependency graph is built from scratch, do side effect to avoid re-creating objects
237
+ // the new graph is built from scratch with side effect (to avoid re-creating objects): it belongs only to the copy of the survey
238
+ const sideEffect = true;
233
239
  // add dependencies for every node def
234
- let surveyUpdated = survey;
240
+ let surveyUpdated = Object.assign(Object.assign({}, survey), { dependencyGraph: newDependencyGraph() });
235
241
  for (const nodeDef of SurveyNodeDefs.getNodeDefsArray(survey)) {
236
242
  // sequential: each iteration updates the survey
237
243
  surveyUpdated = yield addNodeDefDependencies({ nodeDef, survey: surveyUpdated, sideEffect }); // NOSONAR
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../src/survey/surveys/dependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import * as SurveyNodeDefs from './nodeDefs'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefEntity,\n NodeDefExpression,\n NodeDefFile,\n NodeDefProps,\n NodeDefs,\n NodeDefType,\n} from '../../nodeDef'\nimport { NodeDefExpressionEvaluator } from '../../nodeDefExpressionEvaluator'\n\nimport { Survey, SurveyDependencyGraph, SurveyDependencyType } from '../survey'\nimport { Arrays, Objects } from '../../utils'\nimport { NodeDefExpressionFactory } from '../../nodeDef/nodeDef'\nimport { Dictionary } from '../../common'\n\nconst functionsRequiringOnUpdateDependency = ['recordDateLastModified']\n\nconst isContextParentByDependencyType = {\n [SurveyDependencyType.applicable]: true,\n [SurveyDependencyType.defaultValues]: true,\n [SurveyDependencyType.editable]: true,\n [SurveyDependencyType.enumeratingItems]: true,\n [SurveyDependencyType.fileName]: true,\n [SurveyDependencyType.formula]: false,\n [SurveyDependencyType.maxCount]: true,\n [SurveyDependencyType.minCount]: true,\n [SurveyDependencyType.onUpdate]: true,\n [SurveyDependencyType.parentCode]: false,\n [SurveyDependencyType.validations]: true,\n [SurveyDependencyType.visible]: true,\n}\n\nconst selfReferenceAllowedByDependencyType = {\n [SurveyDependencyType.applicable]: false,\n [SurveyDependencyType.defaultValues]: false,\n [SurveyDependencyType.editable]: false,\n [SurveyDependencyType.enumeratingItems]: false,\n [SurveyDependencyType.fileName]: false,\n [SurveyDependencyType.formula]: false,\n [SurveyDependencyType.maxCount]: false,\n [SurveyDependencyType.minCount]: false,\n [SurveyDependencyType.onUpdate]: false,\n [SurveyDependencyType.parentCode]: false,\n [SurveyDependencyType.validations]: true,\n [SurveyDependencyType.visible]: false,\n}\n\nconst newDependencyGraph = () => ({\n [SurveyDependencyType.applicable]: {},\n [SurveyDependencyType.defaultValues]: {},\n [SurveyDependencyType.editable]: {},\n [SurveyDependencyType.enumeratingItems]: {},\n [SurveyDependencyType.fileName]: {},\n [SurveyDependencyType.formula]: {},\n [SurveyDependencyType.maxCount]: {},\n [SurveyDependencyType.minCount]: {},\n [SurveyDependencyType.onUpdate]: {},\n [SurveyDependencyType.parentCode]: {},\n [SurveyDependencyType.validations]: {},\n [SurveyDependencyType.visible]: {},\n})\n\nconst getDependencyGraph = (survey: Survey): SurveyDependencyGraph => survey.dependencyGraph ?? newDependencyGraph()\n\nconst getDependencies = (params: {\n graphs: SurveyDependencyGraph\n type: SurveyDependencyType\n nodeDefUuid: string\n}): Array<string> => {\n const { graphs, type, nodeDefUuid } = params\n return type === SurveyDependencyType.onUpdate ? [] : ((graphs?.[type]?.[nodeDefUuid] ?? []) as string[])\n}\n\nexport const getNodeDefDependents = (params: {\n survey: Survey\n nodeDefUuid: string\n dependencyType?: SurveyDependencyType\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDefUuid, dependencyType } = params\n const dependencyGraph = getDependencyGraph(survey)\n\n const dependentUuids = new Set<string>()\n\n const dependencyTypes: SurveyDependencyType[] = dependencyType\n ? [dependencyType]\n : Object.values(SurveyDependencyType)\n\n for (const depType of dependencyTypes) {\n const dependentUuidsTemp = getDependencies({ graphs: dependencyGraph, type: depType, nodeDefUuid })\n for (const dependentUuid of dependentUuidsTemp) {\n dependentUuids.add(dependentUuid)\n }\n }\n return dependentUuids.size > 0 ? SurveyNodeDefs.findNodeDefsByUuids({ survey, uuids: [...dependentUuids] }) : []\n}\n\nexport const getOnUpdateDependents = (params: { survey: Survey }) => {\n const { survey } = params\n const dependencyGraph = getDependencyGraph(survey)\n const sourceDefUuids = Object.keys(dependencyGraph[SurveyDependencyType.onUpdate] ?? {})\n return sourceDefUuids.length > 0 ? SurveyNodeDefs.findNodeDefsByUuids({ survey, uuids: sourceDefUuids }) : []\n}\n\n// UPDATE\n\nconst addDependency = (params: {\n graphs: SurveyDependencyGraph\n type: SurveyDependencyType\n nodeDefUuid: string\n nodeDefDepUuid: string\n sideEffect: boolean\n}): SurveyDependencyGraph => {\n const { graphs, type, nodeDefUuid, nodeDefDepUuid, sideEffect = false } = params\n const deps = getDependencies({ graphs, type, nodeDefUuid })\n const depsUpdated = Arrays.addItem(nodeDefDepUuid, { sideEffect })(deps)\n return Objects.assocPath({ obj: graphs, path: [type, nodeDefUuid], value: depsUpdated, sideEffect })\n}\n\nconst addDependencies = async (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType>\n type: SurveyDependencyType\n graphs: SurveyDependencyGraph\n expressions: NodeDefExpression[]\n sideEffect?: boolean\n}): Promise<SurveyDependencyGraph> => {\n const { survey, nodeDef, type, expressions, graphs: graphsParam, sideEffect = false } = params\n\n if (!expressions || expressions.length === 0) return graphsParam\n\n let graphsUpdated = sideEffect ? graphsParam : { ...graphsParam }\n\n const isContextParent = isContextParentByDependencyType[type]\n const selfReferenceAllowed = selfReferenceAllowedByDependencyType[type]\n\n const findReferencedNodeDefs = async (\n expression: string | undefined\n ): Promise<{ [key: string]: NodeDef<NodeDefType> }> => {\n if (!expression) return {}\n\n const referencedNodeDefUuids = await new NodeDefExpressionEvaluator().findReferencedNodeDefUuids({\n expression,\n survey,\n nodeDef,\n isContextParent,\n selfReferenceAllowed,\n })\n const referencedNodeDefsByUuid: Dictionary<NodeDef<any>> = {}\n for (const uuid of referencedNodeDefUuids) {\n referencedNodeDefsByUuid[uuid] = SurveyNodeDefs.getNodeDefByUuid({ survey, uuid })\n }\n return referencedNodeDefsByUuid\n }\n\n const referencedNodeDefsArray = await Promise.all(\n expressions.flatMap((nodeDefExpr) => [\n findReferencedNodeDefs(nodeDefExpr.expression),\n findReferencedNodeDefs(nodeDefExpr.applyIf),\n ])\n )\n const referencedNodeDefs: Dictionary<NodeDef<any>> = Object.assign({}, ...referencedNodeDefsArray)\n\n for (const nodeDefRef of Object.values(referencedNodeDefs)) {\n graphsUpdated = addDependency({\n graphs: graphsUpdated,\n type,\n nodeDefUuid: nodeDefRef.uuid,\n nodeDefDepUuid: nodeDef.uuid,\n sideEffect,\n })\n }\n\n return graphsUpdated\n}\n\nexport const addNodeDefDependencies = async (params: {\n nodeDef: NodeDef<NodeDefType>\n survey: Survey\n sideEffect?: boolean\n}): Promise<Survey> => {\n const { nodeDef, survey, sideEffect = false } = params\n const graphs = getDependencyGraph(survey)\n let graphsUpdated = sideEffect ? graphs : { ...graphs }\n\n const _addDependencies = async (type: SurveyDependencyType, expressions: NodeDefExpression[]) => {\n let _graphUpdated = await addDependencies({\n survey,\n nodeDef,\n type,\n expressions,\n graphs: graphsUpdated,\n sideEffect,\n })\n // add onUpdate dependencies\n if (\n expressions.some((expression) =>\n functionsRequiringOnUpdateDependency.some(\n (functionName) => expression.applyIf?.includes(functionName) || expression.expression?.includes(functionName)\n )\n )\n ) {\n _graphUpdated = Objects.assocPath({\n obj: _graphUpdated,\n path: [SurveyDependencyType.onUpdate, nodeDef.uuid],\n value: true,\n sideEffect,\n })\n }\n return _graphUpdated\n }\n graphsUpdated = await _addDependencies(SurveyDependencyType.applicable, NodeDefs.getApplicable(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.defaultValues, NodeDefs.getDefaultValues(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.editable, NodeDefs.getEditableIf(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.validations, NodeDefs.getValidationsExpressions(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.visible, NodeDefs.getVisibleIf(nodeDef))\n const maxCount = NodeDefs.getMaxCount(nodeDef)\n if (Array.isArray(maxCount)) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.maxCount, maxCount)\n }\n const minCount = NodeDefs.getMinCount(nodeDef)\n if (Array.isArray(minCount)) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.minCount, minCount)\n }\n // file name expression\n if (NodeDefs.getType(nodeDef) === NodeDefType.file) {\n const fileNameExpression = NodeDefs.getFileNameExpression(nodeDef as NodeDefFile)\n if (fileNameExpression) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.fileName, [\n NodeDefExpressionFactory.createInstance({ expression: fileNameExpression }),\n ])\n }\n }\n if (NodeDefs.isEntity(nodeDef)) {\n const enumeratingItemsExpression = NodeDefs.getEnumeratingItemsExpression(nodeDef as NodeDefEntity)\n if (enumeratingItemsExpression) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.enumeratingItems, [\n NodeDefExpressionFactory.createInstance({ expression: enumeratingItemsExpression }),\n ])\n }\n }\n // parent code\n if (NodeDefs.getType(nodeDef) === NodeDefType.code) {\n const parentCodeDefUuid = NodeDefs.getParentCodeDefUuid(nodeDef as NodeDefCode)\n if (parentCodeDefUuid) {\n graphsUpdated = addDependency({\n graphs: graphsUpdated,\n type: SurveyDependencyType.parentCode,\n nodeDefUuid: parentCodeDefUuid,\n nodeDefDepUuid: nodeDef.uuid,\n sideEffect,\n })\n }\n }\n if (sideEffect) {\n survey.dependencyGraph = graphsUpdated\n return survey\n }\n return { ...survey, dependencyGraph: graphsUpdated }\n}\n\n// DELETE\n\nconst _removeNodeDefDependenciesOfType = (params: {\n graphs: SurveyDependencyGraph\n dependencyType: SurveyDependencyType\n nodeDefUuid: string\n}): SurveyDependencyGraph => {\n const { graphs, nodeDefUuid, dependencyType } = params\n\n const graphsUpdated = { ...graphs }\n let graphUpdated = { ...graphsUpdated[dependencyType] }\n // dissoc nodeDefUuid dependency as dependent\n graphUpdated = Objects.dissoc({ obj: graphUpdated, prop: nodeDefUuid })\n\n if (dependencyType !== SurveyDependencyType.onUpdate) {\n // dissoc nodeDefUuid dependency from sources (if any)\n for (const [key, dependentUuids] of Object.entries(graphUpdated)) {\n graphUpdated[key] = Arrays.removeItem(nodeDefUuid)(dependentUuids as string[])\n }\n }\n\n graphsUpdated[dependencyType] = graphUpdated\n return graphsUpdated\n}\n\nexport const removeNodeDefDependencies = (params: {\n survey: Survey\n nodeDefUuid: string\n dependencyType?: SurveyDependencyType\n}): Survey => {\n const { survey, nodeDefUuid, dependencyType = null } = params\n const graphs = getDependencyGraph(survey)\n const dependencyTypes = dependencyType ? [dependencyType] : (Object.keys(graphs) as SurveyDependencyType[])\n const graphsUpdated = dependencyTypes.reduce(\n (dependencyGraphAcc, type) =>\n _removeNodeDefDependenciesOfType({ graphs: dependencyGraphAcc, dependencyType: type, nodeDefUuid }),\n graphs\n )\n return { ...survey, dependencyGraph: graphsUpdated }\n}\n\nexport const buildAndAssocDependencyGraph = async (survey: Survey): Promise<Survey> => {\n survey.dependencyGraph = newDependencyGraph()\n\n const sideEffect = true // when the dependency graph is built from scratch, do side effect to avoid re-creating objects\n\n // add dependencies for every node def\n let surveyUpdated = survey\n for (const nodeDef of SurveyNodeDefs.getNodeDefsArray(survey)) {\n // sequential: each iteration updates the survey\n surveyUpdated = await addNodeDefDependencies({ nodeDef, survey: surveyUpdated, sideEffect }) // NOSONAR\n }\n return surveyUpdated\n}\n"]}
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../src/survey/surveys/dependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import * as SurveyNodeDefs from './nodeDefs'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefEntity,\n NodeDefExpression,\n NodeDefFile,\n NodeDefProps,\n NodeDefs,\n NodeDefType,\n} from '../../nodeDef'\nimport { NodeDefExpressionEvaluator } from '../../nodeDefExpressionEvaluator'\n\nimport { Survey, SurveyDependencyGraph, SurveyDependencyType } from '../survey'\nimport { Arrays, Objects } from '../../utils'\nimport { NodeDefExpressionFactory } from '../../nodeDef/nodeDef'\nimport { Dictionary } from '../../common'\n\nconst functionsRequiringOnUpdateDependency = ['recordDateLastModified']\n\nconst isContextParentByDependencyType = {\n [SurveyDependencyType.applicable]: true,\n [SurveyDependencyType.defaultValues]: true,\n [SurveyDependencyType.editable]: true,\n [SurveyDependencyType.enumeratingItems]: true,\n [SurveyDependencyType.fileName]: true,\n [SurveyDependencyType.formula]: false,\n [SurveyDependencyType.maxCount]: true,\n [SurveyDependencyType.minCount]: true,\n [SurveyDependencyType.onUpdate]: true,\n [SurveyDependencyType.parentCode]: false,\n [SurveyDependencyType.validations]: true,\n [SurveyDependencyType.visible]: true,\n}\n\nconst selfReferenceAllowedByDependencyType = {\n [SurveyDependencyType.applicable]: false,\n [SurveyDependencyType.defaultValues]: false,\n [SurveyDependencyType.editable]: false,\n [SurveyDependencyType.enumeratingItems]: false,\n [SurveyDependencyType.fileName]: false,\n [SurveyDependencyType.formula]: false,\n [SurveyDependencyType.maxCount]: false,\n [SurveyDependencyType.minCount]: false,\n [SurveyDependencyType.onUpdate]: false,\n [SurveyDependencyType.parentCode]: false,\n [SurveyDependencyType.validations]: true,\n [SurveyDependencyType.visible]: false,\n}\n\nconst newDependencyGraph = () => ({\n [SurveyDependencyType.applicable]: {},\n [SurveyDependencyType.defaultValues]: {},\n [SurveyDependencyType.editable]: {},\n [SurveyDependencyType.enumeratingItems]: {},\n [SurveyDependencyType.fileName]: {},\n [SurveyDependencyType.formula]: {},\n [SurveyDependencyType.maxCount]: {},\n [SurveyDependencyType.minCount]: {},\n [SurveyDependencyType.onUpdate]: {},\n [SurveyDependencyType.parentCode]: {},\n [SurveyDependencyType.validations]: {},\n [SurveyDependencyType.visible]: {},\n})\n\nconst getDependencyGraph = (survey: Survey): SurveyDependencyGraph => survey.dependencyGraph ?? newDependencyGraph()\n\nconst getDependencies = (params: {\n graphs: SurveyDependencyGraph\n type: SurveyDependencyType\n nodeDefUuid: string\n}): Array<string> => {\n const { graphs, type, nodeDefUuid } = params\n return type === SurveyDependencyType.onUpdate ? [] : ((graphs?.[type]?.[nodeDefUuid] ?? []) as string[])\n}\n\nexport const getNodeDefDependents = (params: {\n survey: Survey\n nodeDefUuid: string\n dependencyType?: SurveyDependencyType\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDefUuid, dependencyType } = params\n const dependencyGraph = getDependencyGraph(survey)\n\n const dependentUuids = new Set<string>()\n\n const dependencyTypes: SurveyDependencyType[] = dependencyType\n ? [dependencyType]\n : Object.values(SurveyDependencyType)\n\n for (const depType of dependencyTypes) {\n const dependentUuidsTemp = getDependencies({ graphs: dependencyGraph, type: depType, nodeDefUuid })\n for (const dependentUuid of dependentUuidsTemp) {\n dependentUuids.add(dependentUuid)\n }\n }\n return dependentUuids.size > 0 ? SurveyNodeDefs.findNodeDefsByUuids({ survey, uuids: [...dependentUuids] }) : []\n}\n\nexport const getOnUpdateDependents = (params: { survey: Survey }) => {\n const { survey } = params\n const dependencyGraph = getDependencyGraph(survey)\n const sourceDefUuids = Object.keys(dependencyGraph[SurveyDependencyType.onUpdate] ?? {})\n return sourceDefUuids.length > 0 ? SurveyNodeDefs.findNodeDefsByUuids({ survey, uuids: sourceDefUuids }) : []\n}\n\n// UPDATE\n\nconst addDependency = (params: {\n graphs: SurveyDependencyGraph\n type: SurveyDependencyType\n nodeDefUuid: string\n nodeDefDepUuid: string\n sideEffect: boolean\n}): SurveyDependencyGraph => {\n const { graphs, type, nodeDefUuid, nodeDefDepUuid, sideEffect = false } = params\n const deps = getDependencies({ graphs, type, nodeDefUuid })\n const depsUpdated = Arrays.addItem(nodeDefDepUuid, { sideEffect })(deps)\n return Objects.assocPath({ obj: graphs, path: [type, nodeDefUuid], value: depsUpdated, sideEffect })\n}\n\nconst addDependencies = async (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType>\n type: SurveyDependencyType\n graphs: SurveyDependencyGraph\n expressions: NodeDefExpression[]\n sideEffect?: boolean\n}): Promise<SurveyDependencyGraph> => {\n const { survey, nodeDef, type, expressions, graphs: graphsParam, sideEffect = false } = params\n\n if (!expressions || expressions.length === 0) return graphsParam\n\n let graphsUpdated = sideEffect ? graphsParam : { ...graphsParam }\n\n const isContextParent = isContextParentByDependencyType[type]\n const selfReferenceAllowed = selfReferenceAllowedByDependencyType[type]\n\n const findReferencedNodeDefs = async (\n expression: string | undefined\n ): Promise<{ [key: string]: NodeDef<NodeDefType> }> => {\n if (!expression) return {}\n\n const referencedNodeDefUuids = await new NodeDefExpressionEvaluator().findReferencedNodeDefUuids({\n expression,\n survey,\n nodeDef,\n isContextParent,\n selfReferenceAllowed,\n })\n const referencedNodeDefsByUuid: Dictionary<NodeDef<any>> = {}\n for (const uuid of referencedNodeDefUuids) {\n referencedNodeDefsByUuid[uuid] = SurveyNodeDefs.getNodeDefByUuid({ survey, uuid })\n }\n return referencedNodeDefsByUuid\n }\n\n const referencedNodeDefsArray = await Promise.all(\n expressions.flatMap((nodeDefExpr) => [\n findReferencedNodeDefs(nodeDefExpr.expression),\n findReferencedNodeDefs(nodeDefExpr.applyIf),\n ])\n )\n const referencedNodeDefs: Dictionary<NodeDef<any>> = Object.assign({}, ...referencedNodeDefsArray)\n\n for (const nodeDefRef of Object.values(referencedNodeDefs)) {\n graphsUpdated = addDependency({\n graphs: graphsUpdated,\n type,\n nodeDefUuid: nodeDefRef.uuid,\n nodeDefDepUuid: nodeDef.uuid,\n sideEffect,\n })\n }\n\n return graphsUpdated\n}\n\nexport const addNodeDefDependencies = async (params: {\n nodeDef: NodeDef<NodeDefType>\n survey: Survey\n sideEffect?: boolean\n}): Promise<Survey> => {\n const { nodeDef, survey, sideEffect = false } = params\n const graphs = getDependencyGraph(survey)\n let graphsUpdated = sideEffect ? graphs : { ...graphs }\n\n const _addDependencies = async (type: SurveyDependencyType, expressions: NodeDefExpression[]) => {\n let _graphUpdated = await addDependencies({\n survey,\n nodeDef,\n type,\n expressions,\n graphs: graphsUpdated,\n sideEffect,\n })\n // add onUpdate dependencies\n if (\n expressions.some((expression) =>\n functionsRequiringOnUpdateDependency.some(\n (functionName) => expression.applyIf?.includes(functionName) || expression.expression?.includes(functionName)\n )\n )\n ) {\n _graphUpdated = Objects.assocPath({\n obj: _graphUpdated,\n path: [SurveyDependencyType.onUpdate, nodeDef.uuid],\n value: true,\n sideEffect,\n })\n }\n return _graphUpdated\n }\n graphsUpdated = await _addDependencies(SurveyDependencyType.applicable, NodeDefs.getApplicable(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.defaultValues, NodeDefs.getDefaultValues(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.editable, NodeDefs.getEditableIf(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.validations, NodeDefs.getValidationsExpressions(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.visible, NodeDefs.getVisibleIf(nodeDef))\n const maxCount = NodeDefs.getMaxCount(nodeDef)\n if (Array.isArray(maxCount)) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.maxCount, maxCount)\n }\n const minCount = NodeDefs.getMinCount(nodeDef)\n if (Array.isArray(minCount)) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.minCount, minCount)\n }\n // file name expression\n if (NodeDefs.getType(nodeDef) === NodeDefType.file) {\n const fileNameExpression = NodeDefs.getFileNameExpression(nodeDef as NodeDefFile)\n if (fileNameExpression) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.fileName, [\n NodeDefExpressionFactory.createInstance({ expression: fileNameExpression }),\n ])\n }\n }\n if (NodeDefs.isEntity(nodeDef)) {\n const enumeratingItemsExpression = NodeDefs.getEnumeratingItemsExpression(nodeDef as NodeDefEntity)\n if (enumeratingItemsExpression) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.enumeratingItems, [\n NodeDefExpressionFactory.createInstance({ expression: enumeratingItemsExpression }),\n ])\n }\n }\n // parent code\n if (NodeDefs.getType(nodeDef) === NodeDefType.code) {\n const parentCodeDefUuid = NodeDefs.getParentCodeDefUuid(nodeDef as NodeDefCode)\n if (parentCodeDefUuid) {\n graphsUpdated = addDependency({\n graphs: graphsUpdated,\n type: SurveyDependencyType.parentCode,\n nodeDefUuid: parentCodeDefUuid,\n nodeDefDepUuid: nodeDef.uuid,\n sideEffect,\n })\n }\n }\n if (sideEffect) {\n survey.dependencyGraph = graphsUpdated\n return survey\n }\n return { ...survey, dependencyGraph: graphsUpdated }\n}\n\n// DELETE\n\nconst _removeNodeDefDependenciesOfType = (params: {\n graphs: SurveyDependencyGraph\n dependencyType: SurveyDependencyType\n nodeDefUuid: string\n}): SurveyDependencyGraph => {\n const { graphs, nodeDefUuid, dependencyType } = params\n\n const graphsUpdated = { ...graphs }\n let graphUpdated = { ...graphsUpdated[dependencyType] }\n // dissoc nodeDefUuid dependency as dependent\n graphUpdated = Objects.dissoc({ obj: graphUpdated, prop: nodeDefUuid })\n\n if (dependencyType !== SurveyDependencyType.onUpdate) {\n // dissoc nodeDefUuid dependency from sources (if any)\n for (const [key, dependentUuids] of Object.entries(graphUpdated)) {\n graphUpdated[key] = Arrays.removeItem(nodeDefUuid)(dependentUuids as string[])\n }\n }\n\n graphsUpdated[dependencyType] = graphUpdated\n return graphsUpdated\n}\n\nexport const removeNodeDefDependencies = (params: {\n survey: Survey\n nodeDefUuid: string\n dependencyType?: SurveyDependencyType\n}): Survey => {\n const { survey, nodeDefUuid, dependencyType = null } = params\n const graphs = getDependencyGraph(survey)\n const dependencyTypes = dependencyType ? [dependencyType] : (Object.keys(graphs) as SurveyDependencyType[])\n const graphsUpdated = dependencyTypes.reduce(\n (dependencyGraphAcc, type) =>\n _removeNodeDefDependenciesOfType({ graphs: dependencyGraphAcc, dependencyType: type, nodeDefUuid }),\n graphs\n )\n return { ...survey, dependencyGraph: graphsUpdated }\n}\n\n/**\n * Builds the dependency graph of the survey.\n *\n * @param survey - The survey.\n * @returns A copy of the survey with the dependency graph (the survey passed in is not modified).\n */\nexport const buildAndAssocDependencyGraph = async (survey: Survey): Promise<Survey> => {\n // the new graph is built from scratch with side effect (to avoid re-creating objects): it belongs only to the copy of the survey\n const sideEffect = true\n\n // add dependencies for every node def\n let surveyUpdated: Survey = { ...survey, dependencyGraph: newDependencyGraph() }\n for (const nodeDef of SurveyNodeDefs.getNodeDefsArray(survey)) {\n // sequential: each iteration updates the survey\n surveyUpdated = await addNodeDefDependencies({ nodeDef, survey: surveyUpdated, sideEffect }) // NOSONAR\n }\n return surveyUpdated\n}\n"]}
@@ -296,15 +296,7 @@ export const getNodeDefAncestorCodes = (params) => {
296
296
  export const isNodeDefParentCode = (params) => {
297
297
  const { survey, nodeDef } = params;
298
298
  const nodeDefsArray = getNodeDefsArray(survey);
299
- return nodeDefsArray.some((def) => {
300
- try {
301
- return nodeDef.uuid === def.props.parentCodeDefUuid;
302
- }
303
- catch (_a) {
304
- // ignore it: def is not a code attribute definition
305
- return;
306
- }
307
- });
299
+ return nodeDefsArray.some((def) => { var _a; return nodeDef.uuid === ((_a = def.props) === null || _a === void 0 ? void 0 : _a.parentCodeDefUuid); });
308
300
  };
309
301
  export const getNodeDefCategoryLevelIndex = (params) => {
310
302
  const { survey, nodeDef } = params;
@@ -1 +1 @@
1
- {"version":3,"file":"nodeDefs.js","sourceRoot":"","sources":["../../../../src/survey/surveys/nodeDefs.ts"],"names":[],"mappings":"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","sourcesContent":["import { Survey } from '../survey'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefCodeProps,\n NodeDefEntity,\n NodeDefEntityChildPosition,\n NodeDefMap,\n NodeDefProps,\n NodeDefType,\n NodeDefs,\n} from '../../nodeDef'\nimport { Arrays, Objects, Queue } from '../../utils'\nimport { SystemError } from '../../error'\nimport * as NodeDefsReader from './_nodeDefs/nodeDefsReader'\nimport * as NodeDefsIndex from './_nodeDefs/nodeDefsIndex'\nimport { TraverseMethod } from '../../common'\nimport { getCategoryByUuid } from './surveysGetters'\n\nexport const getNodeDefsArray = NodeDefsReader.getNodeDefsArray\n\nexport const findNodeDefByUuid = (params: {\n survey: Survey\n uuid: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, uuid } = params\n return survey.nodeDefs?.[uuid]\n}\n\nexport const getNodeDefByUuid = (params: { survey: Survey; uuid: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, uuid } = params\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (!nodeDef) throw new SystemError('survey.nodeDefUuidNotFound', { uuid })\n return nodeDef\n}\n\nexport const findNodeDefByName = (params: {\n survey: Survey\n name: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, name } = params\n const nodeDefUuidByNameIndex = survey.nodeDefsIndex?.nodeDefUuidByName\n if (nodeDefUuidByNameIndex) {\n const uuid = nodeDefUuidByNameIndex[name]\n return findNodeDefByUuid({ survey, uuid })\n }\n return getNodeDefsArray(survey).find((nodeDef) => nodeDef.props.name === name)\n}\n\nexport const getNodeDefByName = (params: { survey: Survey; name: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, name } = params\n const nodeDef = findNodeDefByName({ survey, name })\n if (!nodeDef) {\n throw new SystemError('survey.nodeDefNameNotFound', { name })\n }\n return nodeDef\n}\n\nexport const getNodeDefsByUuids = (params: { survey: Survey; uuids: string[] }) => {\n const { survey, uuids } = params\n return uuids.map((uuid) => getNodeDefByUuid({ survey, uuid }))\n}\n\nexport const findNodeDefsByUuids = (params: {\n survey: Survey\n uuids: string[]\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, uuids } = params\n return uuids.reduce((acc: NodeDef<NodeDefType, NodeDefProps>[], uuid) => {\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (nodeDef) {\n acc.push(nodeDef)\n }\n return acc\n }, [])\n}\n\nexport const getNodeDefParent = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n if (!nodeDef.parentUuid) return undefined\n return getNodeDefByUuid({ survey, uuid: nodeDef.parentUuid }) as NodeDefEntity\n}\n\nexport const getNodeDefAncestorMultipleEntity = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n return findAncestorNodeDef({\n survey,\n nodeDef,\n predicate: (entityDef) => NodeDefs.isRoot(entityDef) || NodeDefs.isMultiple(entityDef),\n })\n}\n\nexport const isNodeDefAncestor = (params: {\n nodeDefAncestor: NodeDef<NodeDefType, NodeDefProps>\n nodeDefDescendant: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { nodeDefAncestor, nodeDefDescendant } = params\n\n return Arrays.startsWith(nodeDefDescendant.meta.h, [...nodeDefAncestor.meta.h, nodeDefAncestor.uuid])\n}\n\nexport const getNodeDefRoot = (params: { survey: Survey }): NodeDefEntity => {\n const { survey } = params\n if (!survey.nodeDefs) throw new SystemError('survey.emptyNodeDefs')\n\n const rootDefUuidInIndex = survey.nodeDefsIndex?.rootDefUuid\n\n const rootDef = rootDefUuidInIndex\n ? getNodeDefByUuid({ survey, uuid: rootDefUuidInIndex })\n : getNodeDefsArray(survey).find((nodeDef) => !nodeDef.parentUuid)\n\n if (!rootDef) throw new SystemError('survey.rootDefNotFound')\n\n return rootDef as NodeDefEntity\n}\n\nexport const getNodeDefSource = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, nodeDef } = params\n return nodeDef.virtual ? getNodeDefParent({ survey, nodeDef }) : undefined\n}\n\nexport const getNodeDefChildren = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, includeAnalysis = false, includeLayoutElements = false } = params\n\n if (!survey.nodeDefs) return []\n\n let childDefs = []\n // try to get children using index\n if (survey.nodeDefsIndex) {\n const childrenUuids = Object.keys(survey.nodeDefsIndex.childDefUuidPresenceByParentUuid?.[nodeDef.uuid] ?? {})\n childDefs = getNodeDefsByUuids({ survey, uuids: childrenUuids })\n } else {\n // calculate children\n childDefs = NodeDefsReader.calculateNodeDefChildren(nodeDef)(survey)\n }\n if (includeAnalysis && includeLayoutElements) {\n return childDefs\n }\n return childDefs.filter((childDef) => {\n if (!includeAnalysis && childDef.analysis) return false\n if (!includeLayoutElements && NodeDefs.isLayoutElement(childDef)) return false\n return true\n })\n}\n\nexport const getQualifierDefs = (params: { survey: Survey }): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey } = params\n const qualifierPresence = survey.nodeDefsIndex?.qualifierPresenceByUuid\n if (qualifierPresence) {\n const qualifierUuids = Object.keys(qualifierPresence)\n return getNodeDefsByUuids({ survey, uuids: qualifierUuids })\n } else {\n return getNodeDefsArray(survey).filter((nodeDef) => NodeDefs.isQualifier(nodeDef))\n }\n}\n\nconst getIndexInChain = (params: { survey: Survey; nodeDef: NodeDef<any> }): number => {\n const { survey, nodeDef } = params\n const areaBasedEstimatedOf = NodeDefs.getAreaBasedEstimatedOf(nodeDef)\n const areaBasedEstimatedOfNodeDef = areaBasedEstimatedOf\n ? getNodeDefByUuid({ survey, uuid: areaBasedEstimatedOf })\n : null\n const nodeDefToConsider = areaBasedEstimatedOfNodeDef ?? nodeDef\n return nodeDefToConsider?.propsAdvanced?.index ?? 0\n}\n\nconst getNodeDefChildrenUuidsSortedByLayout = (params: {\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n children: NodeDef<any>[]\n}): string[] => {\n const { nodeDef, cycle, children } = params\n\n const entityDef = nodeDef as NodeDefEntity\n\n const childrenEntitiesInOwnPageSortedUuids = NodeDefs.getChildrenEntitiesInOwnPageUuids(cycle)(entityDef) ?? []\n const layoutChildren = NodeDefs.getLayoutChildren(cycle)(entityDef) ?? []\n const childrenByUuids = children.reduce((acc: NodeDefMap, child) => {\n acc[child.uuid] = child\n return acc\n }, {})\n const childrenUuids = Object.keys(childrenByUuids)\n\n if (layoutChildren.length === 0 && childrenEntitiesInOwnPageSortedUuids.length === 0) {\n return childrenUuids\n }\n const sortedChildrenDefsInSamePageUuids = NodeDefs.isLayoutRenderTypeTable(cycle)(entityDef)\n ? (layoutChildren as string[])\n : [...(layoutChildren as NodeDefEntityChildPosition[])]\n .sort(\n (gridItem1: NodeDefEntityChildPosition, gridItem2: NodeDefEntityChildPosition) =>\n gridItem1.y - gridItem2.y || gridItem1.x - gridItem2.x\n )\n .map((gridItem) => gridItem.i)\n .filter((nodeDefUuid) => !!childrenByUuids[nodeDefUuid])\n\n const missingChildrenUuidsInLayout = childrenUuids.filter((childUuid) => {\n const childDef = childrenByUuids[childUuid]\n return (\n !sortedChildrenDefsInSamePageUuids.includes(childUuid) &&\n !childrenEntitiesInOwnPageSortedUuids.includes(childUuid) &&\n NodeDefs.isInCycle(cycle)(childDef)\n )\n })\n\n return (\n sortedChildrenDefsInSamePageUuids\n // add child uuids missing in layout at the end\n .concat(missingChildrenUuidsInLayout)\n // add child entities in own page at the very end\n .concat(childrenEntitiesInOwnPageSortedUuids)\n )\n}\n\nconst _booleanToNumber = (value: boolean | undefined): number => (value ? 1 : 0)\nconst _compareBooleans = (value1: boolean | undefined, value2: boolean | undefined): number =>\n _booleanToNumber(value1) - _booleanToNumber(value2)\n\nexport const getNodeDefChildrenSorted = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, cycle, includeAnalysis, includeLayoutElements } = params\n\n const children = getNodeDefChildren({ survey, nodeDef, includeAnalysis, includeLayoutElements }).filter(\n NodeDefs.isInCycle(cycle)\n )\n\n const childrenUuidsSortedByLayout = getNodeDefChildrenUuidsSortedByLayout({ nodeDef, cycle, children })\n\n return children.sort((child1, child2) => {\n if (includeAnalysis && (child1.analysis || child2.analysis)) {\n // analysis attribute at the end\n const analysisComparison = _compareBooleans(child1.analysis, child2.analysis)\n if (analysisComparison !== 0) return analysisComparison\n\n // sort by chain index\n const indexInChainComparison =\n getIndexInChain({ survey, nodeDef: child1 }) - getIndexInChain({ survey, nodeDef: child2 })\n if (indexInChainComparison !== 0) return indexInChainComparison\n\n // one node def is the area base estimated of the other\n const areaBasedEstimatedOfComparison = _compareBooleans(\n !!NodeDefs.getAreaBasedEstimatedOf(child1),\n !!NodeDefs.getAreaBasedEstimatedOf(child2)\n )\n if (areaBasedEstimatedOfComparison !== 0) return areaBasedEstimatedOfComparison\n\n return (child1.id ?? 0) - (child2.id ?? 0)\n }\n // keep sorting as defined in layout props\n return childrenUuidsSortedByLayout.indexOf(child1.uuid) - childrenUuidsSortedByLayout.indexOf(child2.uuid)\n })\n}\n\nexport const visitAncestorsAndSelfNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n stopIfFn?: () => boolean\n includeSelf?: boolean\n}): void => {\n const { survey, nodeDef, visitor, stopIfFn, includeSelf = true } = params\n if (includeSelf) {\n visitor(nodeDef)\n }\n let currentParent = getNodeDefParent({ survey, nodeDef })\n while (currentParent) {\n visitor(currentParent)\n if (stopIfFn?.()) {\n break\n }\n currentParent = getNodeDefParent({ survey, nodeDef: currentParent })\n }\n}\n\nexport const findAncestorNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n predicate: (entityDef: NodeDefEntity) => boolean\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef, predicate } = params\n let result: NodeDefEntity | undefined = undefined\n visitAncestorsAndSelfNodeDef({\n survey,\n nodeDef,\n // ancestors only: the node def itself is never an ancestor (e.g. a multiple attribute)\n includeSelf: false,\n visitor: (entityDef) => {\n if (predicate(entityDef)) {\n result = entityDef\n }\n },\n stopIfFn: () => !!result,\n })\n return result\n}\n\ntype NodeDefTraverseParams = {\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n shouldTraverse: (nodeDef: NodeDef<any>) => boolean\n getChildren: (nodeDef: NodeDef<any>) => NodeDef<any>[]\n}\n\nconst traverseBreadthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const queue = new Queue()\n\n queue.enqueue(nodeDef)\n\n while (!queue.isEmpty()) {\n const visitedNodeDef = queue.dequeue()\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n queue.enqueueItems(getChildren(visitedNodeDef))\n }\n }\n}\n\nconst traverseDepthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const stack: NodeDef<any>[] = []\n\n stack.push(nodeDef)\n\n while (stack.length > 0) {\n const visitedNodeDef = stack.pop()!\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n const children = getChildren(visitedNodeDef)\n // add children to stack in reverse order\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push(children[index])\n }\n }\n }\n}\n\nexport const visitDescendantsAndSelfNodeDef = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n traverseOnlySingleEntities?: boolean\n}) => {\n const {\n survey,\n cycle,\n nodeDef,\n visitor,\n includeAnalysis = false,\n traverseMethod = TraverseMethod.bfs,\n traverseOnlySingleEntities = false,\n } = params\n\n const getNodeDefChildrenInternal = (visitedNodeDef: NodeDef<any>) =>\n Objects.isEmpty(cycle)\n ? getNodeDefChildren({ survey, nodeDef: visitedNodeDef, includeAnalysis })\n : getNodeDefChildrenSorted({ survey, nodeDef: visitedNodeDef, cycle: cycle!, includeAnalysis })\n\n const shouldTraverse = (visitedNodeDef: NodeDef<any>): boolean =>\n visitedNodeDef.type === NodeDefType.entity &&\n (visitedNodeDef === nodeDef ||\n NodeDefs.isRoot(visitedNodeDef) ||\n !traverseOnlySingleEntities ||\n NodeDefs.isSingle(visitedNodeDef))\n\n const traverseParams = { nodeDef, visitor, shouldTraverse, getChildren: getNodeDefChildrenInternal }\n if (traverseMethod === TraverseMethod.bfs) {\n traverseBreadthFirst(traverseParams)\n } else {\n traverseDepthFirst(traverseParams)\n }\n}\n\nexport const visitNodeDefs = (params: {\n survey: Survey\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n}) => {\n const { survey, visitor, traverseMethod = TraverseMethod.bfs, includeAnalysis = false } = params\n const rootDef = getNodeDefRoot({ survey })\n return visitDescendantsAndSelfNodeDef({ survey, nodeDef: rootDef, visitor, traverseMethod, includeAnalysis })\n}\n\n// Node Def Code\nexport const getNodeDefParentCode = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode | undefined => {\n const { survey, nodeDef } = params\n const parentCodeDefUuid = nodeDef.props.parentCodeDefUuid\n if (!parentCodeDefUuid) return undefined\n const parentCodeDef = getNodeDefByUuid({ survey, uuid: parentCodeDefUuid })\n return parentCodeDef as NodeDefCode\n}\n\nexport const getNodeDefAncestorCodes = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n const ancestors = []\n let currentParentCode = getNodeDefParentCode({ survey, nodeDef })\n while (currentParentCode) {\n ancestors.unshift(currentParentCode)\n currentParentCode = getNodeDefParentCode({ survey, nodeDef: currentParentCode })\n }\n return ancestors\n}\n\nexport const isNodeDefParentCode = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { survey, nodeDef } = params\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.some((def) => {\n try {\n return nodeDef.uuid === (def as NodeDef<NodeDefType.code, NodeDefCodeProps>).props.parentCodeDefUuid\n } catch {\n // ignore it: def is not a code attribute definition\n return\n }\n })\n}\n\nexport const getNodeDefCategoryLevelIndex = (params: { survey: Survey; nodeDef: NodeDefCode }): number => {\n const { survey, nodeDef } = params\n const parentCodeNodeDef = getNodeDefParentCode({ survey, nodeDef })\n return parentCodeNodeDef ? 1 + getNodeDefCategoryLevelIndex({ survey, nodeDef: parentCodeNodeDef }) : 0\n}\n\nexport const getDependentCodeAttributeDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n\n const categoryUuid = NodeDefs.getCategoryUuid(nodeDef)\n if (!categoryUuid) return []\n\n const category = getCategoryByUuid({ survey, categoryUuid })\n const levelsCount = Object.keys(category?.levels ?? {}).length\n if (levelsCount <= 1) return []\n\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.filter(\n (def) => def.type === NodeDefType.code && NodeDefs.getParentCodeDefUuid(def as NodeDefCode) === nodeDef.uuid\n ) as NodeDefCode[]\n}\n\nexport const getDependentEnumeratedEntityDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefEntity[] => {\n const { survey, nodeDef } = params\n const result: NodeDefEntity[] = []\n const dependentCodeAttributeDefs = getDependentCodeAttributeDefs({ survey, nodeDef })\n for (const dependentCodeDef of dependentCodeAttributeDefs) {\n if (NodeDefs.isKey(dependentCodeDef)) {\n const entityDef = getNodeDefAncestorMultipleEntity({ survey, nodeDef: dependentCodeDef })\n if (entityDef && NodeDefs.isEnumerate(entityDef)) {\n result.push(entityDef)\n }\n }\n }\n return result\n}\n\nexport const getNodeDefKeys = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle?: string\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) =>\n NodeDefs.isKey(visitedNodeDef) &&\n !visitedNodeDef.deleted &&\n (Objects.isEmpty(cycle) || NodeDefs.isInCycle(cycle!)(visitedNodeDef)),\n })\n}\n\nexport const getRootKeys = (params: { survey: Survey; cycle?: string }) => {\n const { survey, cycle } = params\n const rootDef = getNodeDefRoot({ survey })\n return getNodeDefKeys({ survey, nodeDef: rootDef, cycle })\n}\n\nexport const getNodeDefEnumerator = (params: { survey: Survey; entityDef: NodeDefEntity }): NodeDefCode | undefined => {\n const { survey, entityDef } = params\n if (!entityDef.props.enumerate) return undefined\n\n const children = getNodeDefChildren({ survey, nodeDef: entityDef })\n const codeAttributeKeys = children.filter((child) => child.type === NodeDefType.code && child.props.key)\n if (codeAttributeKeys.length === 1) {\n return codeAttributeKeys[0] as NodeDefCode\n }\n return undefined\n}\n\nexport const isNodeDefEnumerator = (params: { survey: Survey; nodeDef: NodeDef<NodeDefType> }): boolean => {\n const { survey, nodeDef } = params\n if (nodeDef.type !== NodeDefType.code) return false\n const entityDef = getNodeDefParent({ survey, nodeDef })\n if (!entityDef) return false\n const enumerator = getNodeDefEnumerator({ survey, entityDef })\n return enumerator?.uuid === nodeDef.uuid\n}\n\nexport const getDescendantsInSingleEntities = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n predicate?: (visitedNodeDef: NodeDef<NodeDefType, NodeDefProps>) => boolean\n includeAnalysis?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef, predicate, includeAnalysis } = params\n const result: NodeDef<any>[] = []\n visitDescendantsAndSelfNodeDef({\n survey,\n cycle,\n nodeDef,\n visitor: (visitedNodeDef) => {\n if (!predicate || predicate(visitedNodeDef)) {\n result.push(visitedNodeDef)\n }\n },\n includeAnalysis,\n traverseOnlySingleEntities: true,\n })\n return result\n}\n\nexport const getNodeDefsIncludedInMultipleEntitySummary = (params: {\n survey: Survey\n cycle: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) => NodeDefs.isIncludedInMultipleEntitySummary(cycle)(visitedNodeDef),\n })\n}\n\nconst { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex } =\n NodeDefsIndex\nexport { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex }\n"]}
1
+ {"version":3,"file":"nodeDefs.js","sourceRoot":"","sources":["../../../../src/survey/surveys/nodeDefs.ts"],"names":[],"mappings":"AACA,OAAO,EAQL,WAAW,EACX,QAAQ,GACT,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,cAAc,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,aAAa,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC,gBAAgB,CAAA;AAE/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAGjC,EAAkD,EAAE;;IACnD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAC/B,OAAO,MAAA,MAAM,CAAC,QAAQ,0CAAG,IAAI,CAAC,CAAA;AAChC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAwC,EAAsC,EAAE;IAC/G,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAC/B,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,WAAW,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3E,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAGjC,EAAkD,EAAE;;IACnD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAC/B,MAAM,sBAAsB,GAAG,MAAA,MAAM,CAAC,aAAa,0CAAE,iBAAiB,CAAA;IACtE,IAAI,sBAAsB,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAA;QACzC,OAAO,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAChF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAwC,EAAsC,EAAE;IAC/G,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAC/B,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,WAAW,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA2C,EAAE,EAAE;IAChF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAChC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AAChE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAGnC,EAAwC,EAAE;IACzC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAChC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAyC,EAAE,IAAI,EAAE,EAAE;QACtE,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAGhC,EAA6B,EAAE;IAC9B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAClC,IAAI,CAAC,OAAO,CAAC,UAAU;QAAE,OAAO,SAAS,CAAA;IACzC,OAAO,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,CAAkB,CAAA;AAChF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,MAGhD,EAA6B,EAAE;IAC9B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAClC,OAAO,mBAAmB,CAAC;QACzB,MAAM;QACN,OAAO;QACP,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;KACvF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAGjC,EAAW,EAAE;IACZ,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAA;IAErD,OAAO,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;AACvG,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAA0B,EAAiB,EAAE;;IAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACzB,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,MAAM,IAAI,WAAW,CAAC,sBAAsB,CAAC,CAAA;IAEnE,MAAM,kBAAkB,GAAG,MAAA,MAAM,CAAC,aAAa,0CAAE,WAAW,CAAA;IAE5D,MAAM,OAAO,GAAG,kBAAkB;QAChC,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;QACxD,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAEnE,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,WAAW,CAAC,wBAAwB,CAAC,CAAA;IAE7D,OAAO,OAAwB,CAAA;AACjC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAGhC,EAAkD,EAAE;IACnD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAClC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC5E,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAKlC,EAAwC,EAAE;;;IACzC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,KAAK,EAAE,qBAAqB,GAAG,KAAK,EAAE,GAAG,MAAM,CAAA;IAE1F,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAA;IAE/B,IAAI,SAAS,GAAG,EAAE,CAAA;IAClB,kCAAkC;IAClC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,OAAC,MAAA,MAAM,CAAC,aAAa,CAAC,gCAAgC,0CAAG,OAAO,CAAC,IAAI,CAAC,mCAAI,EAAE,CAAC,CAAA;QAC9G,SAAS,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAA;IAClE,CAAC;SAAM,CAAC;QACN,qBAAqB;QACrB,SAAS,GAAG,cAAc,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;IACtE,CAAC;IACD,IAAI,eAAe,IAAI,qBAAqB,EAAE,CAAC;QAC7C,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnC,IAAI,CAAC,eAAe,IAAI,QAAQ,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAA;QACvD,IAAI,CAAC,qBAAqB,IAAI,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAA;QAC9E,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAA0B,EAAwC,EAAE;;IACnG,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACzB,MAAM,iBAAiB,GAAG,MAAA,MAAM,CAAC,aAAa,0CAAE,uBAAuB,CAAA;IACvE,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACrD,OAAO,kBAAkB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAA;IAC9D,CAAC;SAAM,CAAC;QACN,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;IACpF,CAAC;AACH,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,MAAiD,EAAU,EAAE;;;IACpF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAClC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAA;IACtE,MAAM,2BAA2B,GAAG,oBAAoB;QACtD,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;QAC1D,CAAC,CAAC,IAAI,CAAA;IACR,MAAM,iBAAiB,GAAG,2BAA2B,aAA3B,2BAA2B,cAA3B,2BAA2B,GAAI,OAAO,CAAA;IAChE,aAAO,MAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,aAAa,0CAAE,KAAK,mCAAI,CAAC,CAAA;AACrD,CAAC,CAAA;AAED,MAAM,qCAAqC,GAAG,CAAC,MAI9C,EAAY,EAAE;;IACb,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAE3C,MAAM,SAAS,GAAG,OAAwB,CAAA;IAE1C,MAAM,oCAAoC,SAAG,QAAQ,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,mCAAI,EAAE,CAAA;IAC/G,MAAM,cAAc,SAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,mCAAI,EAAE,CAAA;IACzE,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAe,EAAE,KAAK,EAAE,EAAE;QACjE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;QACvB,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAElD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,oCAAoC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrF,OAAO,aAAa,CAAA;IACtB,CAAC;IACD,MAAM,iCAAiC,GAAG,QAAQ,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;QAC1F,CAAC,CAAE,cAA2B;QAC9B,CAAC,CAAC,CAAC,GAAI,cAA+C,CAAC;aAClD,IAAI,CACH,CAAC,SAAqC,EAAE,SAAqC,EAAE,EAAE,CAC/E,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CACzD;aACA,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC7B,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAA;IAE9D,MAAM,4BAA4B,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE;QACtE,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;QAC3C,OAAO,CACL,CAAC,iCAAiC,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtD,CAAC,oCAAoC,CAAC,QAAQ,CAAC,SAAS,CAAC;YACzD,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CACpC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,CACL,iCAAiC;QAC/B,+CAA+C;SAC9C,MAAM,CAAC,4BAA4B,CAAC;QACrC,iDAAiD;SAChD,MAAM,CAAC,oCAAoC,CAAC,CAChD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,KAA0B,EAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAChF,MAAM,gBAAgB,GAAG,CAAC,MAA2B,EAAE,MAA2B,EAAU,EAAE,CAC5F,gBAAgB,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;AAErD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAMxC,EAAwC,EAAE;IACzC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAA;IAEjF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC,CAAC,MAAM,CACrG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAC1B,CAAA;IAED,MAAM,2BAA2B,GAAG,qCAAqC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;IAEvG,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;;QACtC,IAAI,eAAe,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,gCAAgC;YAChC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC7E,IAAI,kBAAkB,KAAK,CAAC;gBAAE,OAAO,kBAAkB,CAAA;YAEvD,sBAAsB;YACtB,MAAM,sBAAsB,GAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;YAC7F,IAAI,sBAAsB,KAAK,CAAC;gBAAE,OAAO,sBAAsB,CAAA;YAE/D,uDAAuD;YACvD,MAAM,8BAA8B,GAAG,gBAAgB,CACrD,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAC1C,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAC3C,CAAA;YACD,IAAI,8BAA8B,KAAK,CAAC;gBAAE,OAAO,8BAA8B,CAAA;YAE/E,OAAO,OAAC,MAAM,CAAC,EAAE,mCAAI,CAAC,CAAC,GAAG,OAAC,MAAM,CAAC,EAAE,mCAAI,CAAC,CAAC,CAAA;QAC5C,CAAC;QACD,0CAA0C;QAC1C,OAAO,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5G,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,MAM5C,EAAQ,EAAE;IACT,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;IACzE,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC;IACD,IAAI,aAAa,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IACzD,OAAO,aAAa,EAAE,CAAC;QACrB,OAAO,CAAC,aAAa,CAAC,CAAA;QACtB,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,EAAI,EAAE,CAAC;YACjB,MAAK;QACP,CAAC;QACD,aAAa,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;IACtE,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAInC,EAA6B,EAAE;IAC9B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IAC7C,IAAI,MAAM,GAA8B,SAAS,CAAA;IACjD,4BAA4B,CAAC;QAC3B,MAAM;QACN,OAAO;QACP,uFAAuF;QACvF,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE;YACrB,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,SAAS,CAAA;YACpB,CAAC;QACH,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM;KACzB,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AASD,MAAM,oBAAoB,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAyB,EAAE,EAAE;IACxG,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IAEzB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEtB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACxB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAEtC,OAAO,CAAC,cAAc,CAAC,CAAA;QAEvB,IAAI,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAyB,EAAE,EAAE;IACtG,MAAM,KAAK,GAAmB,EAAE,CAAA;IAEhC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEnB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;QAEnC,OAAO,CAAC,cAAc,CAAC,CAAA;QAEvB,IAAI,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,CAAA;YAC5C,yCAAyC;YACzC,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC1D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,MAQ9C,EAAE,EAAE;IACH,MAAM,EACJ,MAAM,EACN,KAAK,EACL,OAAO,EACP,OAAO,EACP,eAAe,GAAG,KAAK,EACvB,cAAc,GAAG,cAAc,CAAC,GAAG,EACnC,0BAA0B,GAAG,KAAK,GACnC,GAAG,MAAM,CAAA;IAEV,MAAM,0BAA0B,GAAG,CAAC,cAA4B,EAAE,EAAE,CAClE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;QAC1E,CAAC,CAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,KAAM,EAAE,eAAe,EAAE,CAAC,CAAA;IAEnG,MAAM,cAAc,GAAG,CAAC,cAA4B,EAAW,EAAE,CAC/D,cAAc,CAAC,IAAI,KAAK,WAAW,CAAC,MAAM;QAC1C,CAAC,cAAc,KAAK,OAAO;YACzB,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;YAC/B,CAAC,0BAA0B;YAC3B,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAA;IAEtC,MAAM,cAAc,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAA;IACpG,IAAI,cAAc,KAAK,cAAc,CAAC,GAAG,EAAE,CAAC;QAC1C,oBAAoB,CAAC,cAAc,CAAC,CAAA;IACtC,CAAC;SAAM,CAAC;QACN,kBAAkB,CAAC,cAAc,CAAC,CAAA;IACpC,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAK7B,EAAE,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,KAAK,EAAE,GAAG,MAAM,CAAA;IAChG,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1C,OAAO,8BAA8B,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,CAAA;AAC/G,CAAC,CAAA;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAgD,EAA2B,EAAE;IAChH,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAClC,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAA;IACzD,IAAI,CAAC,iBAAiB;QAAE,OAAO,SAAS,CAAA;IACxC,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAA;IAC3E,OAAO,aAA4B,CAAA;AACrC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAgD,EAAiB,EAAE;IACzG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAClC,MAAM,SAAS,GAAG,EAAE,CAAA;IACpB,IAAI,iBAAiB,GAAG,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IACjE,OAAO,iBAAiB,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QACpC,iBAAiB,GAAG,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAGnC,EAAW,EAAE;IACZ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAClC,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC9C,OAAO,aAAa,CAAC,IAAI,CACvB,CAAC,GAAG,EAAE,EAAE,kBAAC,OAAO,CAAC,IAAI,MAAK,MAAC,GAAmD,CAAC,KAAK,0CAAE,iBAAiB,CAAA,GAAA,CACxG,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,MAAgD,EAAU,EAAE;IACvG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAClC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IACnE,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,4BAA4B,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACzG,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,MAAgD,EAAiB,EAAE;;IAC/G,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAElC,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACtD,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAA;IAE5B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;IAC5D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,OAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAA;IAC9D,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,EAAE,CAAA;IAE/B,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC9C,OAAO,aAAa,CAAC,MAAM,CACzB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,GAAkB,CAAC,KAAK,OAAO,CAAC,IAAI,CAC5F,CAAA;AACpB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,MAAgD,EAAmB,EAAE;IACpH,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAClC,MAAM,MAAM,GAAoB,EAAE,CAAA;IAClC,MAAM,0BAA0B,GAAG,6BAA6B,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IACrF,KAAK,MAAM,gBAAgB,IAAI,0BAA0B,EAAE,CAAC;QAC1D,IAAI,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,gCAAgC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAA;YACzF,IAAI,SAAS,IAAI,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAI9B,EAAwC,EAAE;IACzC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAEzC,OAAO,8BAA8B,CAAC;QACpC,MAAM;QACN,KAAK;QACL,OAAO;QACP,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE,CAC5B,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;YAC9B,CAAC,cAAc,CAAC,OAAO;YACvB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAM,CAAC,CAAC,cAAc,CAAC,CAAC;KACzE,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAA0C,EAAE,EAAE;IACxE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAChC,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1C,OAAO,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;AAC5D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAoD,EAA2B,EAAE;IACpH,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IACpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,SAAS,CAAA;IAEhD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;IACnE,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxG,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,iBAAiB,CAAC,CAAC,CAAgB,CAAA;IAC5C,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAyD,EAAW,EAAE;IACxG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAClC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IACnD,MAAM,SAAS,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IACvD,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAA;IAC5B,MAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;IAC9D,OAAO,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,MAAK,OAAO,CAAC,IAAI,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,MAM9C,EAAwC,EAAE;IACzC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,CAAA;IACrE,MAAM,MAAM,GAAmB,EAAE,CAAA;IACjC,8BAA8B,CAAC;QAC7B,MAAM;QACN,KAAK;QACL,OAAO;QACP,OAAO,EAAE,CAAC,cAAc,EAAE,EAAE;YAC1B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QACD,eAAe;QACf,0BAA0B,EAAE,IAAI;KACjC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,0CAA0C,GAAG,CAAC,MAI1D,EAAwC,EAAE;IACzC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IACzC,OAAO,8BAA8B,CAAC;QACpC,MAAM;QACN,KAAK;QACL,OAAO;QACP,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC;KACjG,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,GACvG,aAAa,CAAA;AACf,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,CAAA","sourcesContent":["import { Survey } from '../survey'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefCodeProps,\n NodeDefEntity,\n NodeDefEntityChildPosition,\n NodeDefMap,\n NodeDefProps,\n NodeDefType,\n NodeDefs,\n} from '../../nodeDef'\nimport { Arrays, Objects, Queue } from '../../utils'\nimport { SystemError } from '../../error'\nimport * as NodeDefsReader from './_nodeDefs/nodeDefsReader'\nimport * as NodeDefsIndex from './_nodeDefs/nodeDefsIndex'\nimport { TraverseMethod } from '../../common'\nimport { getCategoryByUuid } from './surveysGetters'\n\nexport const getNodeDefsArray = NodeDefsReader.getNodeDefsArray\n\nexport const findNodeDefByUuid = (params: {\n survey: Survey\n uuid: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, uuid } = params\n return survey.nodeDefs?.[uuid]\n}\n\nexport const getNodeDefByUuid = (params: { survey: Survey; uuid: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, uuid } = params\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (!nodeDef) throw new SystemError('survey.nodeDefUuidNotFound', { uuid })\n return nodeDef\n}\n\nexport const findNodeDefByName = (params: {\n survey: Survey\n name: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, name } = params\n const nodeDefUuidByNameIndex = survey.nodeDefsIndex?.nodeDefUuidByName\n if (nodeDefUuidByNameIndex) {\n const uuid = nodeDefUuidByNameIndex[name]\n return findNodeDefByUuid({ survey, uuid })\n }\n return getNodeDefsArray(survey).find((nodeDef) => nodeDef.props.name === name)\n}\n\nexport const getNodeDefByName = (params: { survey: Survey; name: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, name } = params\n const nodeDef = findNodeDefByName({ survey, name })\n if (!nodeDef) {\n throw new SystemError('survey.nodeDefNameNotFound', { name })\n }\n return nodeDef\n}\n\nexport const getNodeDefsByUuids = (params: { survey: Survey; uuids: string[] }) => {\n const { survey, uuids } = params\n return uuids.map((uuid) => getNodeDefByUuid({ survey, uuid }))\n}\n\nexport const findNodeDefsByUuids = (params: {\n survey: Survey\n uuids: string[]\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, uuids } = params\n return uuids.reduce((acc: NodeDef<NodeDefType, NodeDefProps>[], uuid) => {\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (nodeDef) {\n acc.push(nodeDef)\n }\n return acc\n }, [])\n}\n\nexport const getNodeDefParent = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n if (!nodeDef.parentUuid) return undefined\n return getNodeDefByUuid({ survey, uuid: nodeDef.parentUuid }) as NodeDefEntity\n}\n\nexport const getNodeDefAncestorMultipleEntity = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n return findAncestorNodeDef({\n survey,\n nodeDef,\n predicate: (entityDef) => NodeDefs.isRoot(entityDef) || NodeDefs.isMultiple(entityDef),\n })\n}\n\nexport const isNodeDefAncestor = (params: {\n nodeDefAncestor: NodeDef<NodeDefType, NodeDefProps>\n nodeDefDescendant: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { nodeDefAncestor, nodeDefDescendant } = params\n\n return Arrays.startsWith(nodeDefDescendant.meta.h, [...nodeDefAncestor.meta.h, nodeDefAncestor.uuid])\n}\n\nexport const getNodeDefRoot = (params: { survey: Survey }): NodeDefEntity => {\n const { survey } = params\n if (!survey.nodeDefs) throw new SystemError('survey.emptyNodeDefs')\n\n const rootDefUuidInIndex = survey.nodeDefsIndex?.rootDefUuid\n\n const rootDef = rootDefUuidInIndex\n ? getNodeDefByUuid({ survey, uuid: rootDefUuidInIndex })\n : getNodeDefsArray(survey).find((nodeDef) => !nodeDef.parentUuid)\n\n if (!rootDef) throw new SystemError('survey.rootDefNotFound')\n\n return rootDef as NodeDefEntity\n}\n\nexport const getNodeDefSource = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, nodeDef } = params\n return nodeDef.virtual ? getNodeDefParent({ survey, nodeDef }) : undefined\n}\n\nexport const getNodeDefChildren = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, includeAnalysis = false, includeLayoutElements = false } = params\n\n if (!survey.nodeDefs) return []\n\n let childDefs = []\n // try to get children using index\n if (survey.nodeDefsIndex) {\n const childrenUuids = Object.keys(survey.nodeDefsIndex.childDefUuidPresenceByParentUuid?.[nodeDef.uuid] ?? {})\n childDefs = getNodeDefsByUuids({ survey, uuids: childrenUuids })\n } else {\n // calculate children\n childDefs = NodeDefsReader.calculateNodeDefChildren(nodeDef)(survey)\n }\n if (includeAnalysis && includeLayoutElements) {\n return childDefs\n }\n return childDefs.filter((childDef) => {\n if (!includeAnalysis && childDef.analysis) return false\n if (!includeLayoutElements && NodeDefs.isLayoutElement(childDef)) return false\n return true\n })\n}\n\nexport const getQualifierDefs = (params: { survey: Survey }): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey } = params\n const qualifierPresence = survey.nodeDefsIndex?.qualifierPresenceByUuid\n if (qualifierPresence) {\n const qualifierUuids = Object.keys(qualifierPresence)\n return getNodeDefsByUuids({ survey, uuids: qualifierUuids })\n } else {\n return getNodeDefsArray(survey).filter((nodeDef) => NodeDefs.isQualifier(nodeDef))\n }\n}\n\nconst getIndexInChain = (params: { survey: Survey; nodeDef: NodeDef<any> }): number => {\n const { survey, nodeDef } = params\n const areaBasedEstimatedOf = NodeDefs.getAreaBasedEstimatedOf(nodeDef)\n const areaBasedEstimatedOfNodeDef = areaBasedEstimatedOf\n ? getNodeDefByUuid({ survey, uuid: areaBasedEstimatedOf })\n : null\n const nodeDefToConsider = areaBasedEstimatedOfNodeDef ?? nodeDef\n return nodeDefToConsider?.propsAdvanced?.index ?? 0\n}\n\nconst getNodeDefChildrenUuidsSortedByLayout = (params: {\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n children: NodeDef<any>[]\n}): string[] => {\n const { nodeDef, cycle, children } = params\n\n const entityDef = nodeDef as NodeDefEntity\n\n const childrenEntitiesInOwnPageSortedUuids = NodeDefs.getChildrenEntitiesInOwnPageUuids(cycle)(entityDef) ?? []\n const layoutChildren = NodeDefs.getLayoutChildren(cycle)(entityDef) ?? []\n const childrenByUuids = children.reduce((acc: NodeDefMap, child) => {\n acc[child.uuid] = child\n return acc\n }, {})\n const childrenUuids = Object.keys(childrenByUuids)\n\n if (layoutChildren.length === 0 && childrenEntitiesInOwnPageSortedUuids.length === 0) {\n return childrenUuids\n }\n const sortedChildrenDefsInSamePageUuids = NodeDefs.isLayoutRenderTypeTable(cycle)(entityDef)\n ? (layoutChildren as string[])\n : [...(layoutChildren as NodeDefEntityChildPosition[])]\n .sort(\n (gridItem1: NodeDefEntityChildPosition, gridItem2: NodeDefEntityChildPosition) =>\n gridItem1.y - gridItem2.y || gridItem1.x - gridItem2.x\n )\n .map((gridItem) => gridItem.i)\n .filter((nodeDefUuid) => !!childrenByUuids[nodeDefUuid])\n\n const missingChildrenUuidsInLayout = childrenUuids.filter((childUuid) => {\n const childDef = childrenByUuids[childUuid]\n return (\n !sortedChildrenDefsInSamePageUuids.includes(childUuid) &&\n !childrenEntitiesInOwnPageSortedUuids.includes(childUuid) &&\n NodeDefs.isInCycle(cycle)(childDef)\n )\n })\n\n return (\n sortedChildrenDefsInSamePageUuids\n // add child uuids missing in layout at the end\n .concat(missingChildrenUuidsInLayout)\n // add child entities in own page at the very end\n .concat(childrenEntitiesInOwnPageSortedUuids)\n )\n}\n\nconst _booleanToNumber = (value: boolean | undefined): number => (value ? 1 : 0)\nconst _compareBooleans = (value1: boolean | undefined, value2: boolean | undefined): number =>\n _booleanToNumber(value1) - _booleanToNumber(value2)\n\nexport const getNodeDefChildrenSorted = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, cycle, includeAnalysis, includeLayoutElements } = params\n\n const children = getNodeDefChildren({ survey, nodeDef, includeAnalysis, includeLayoutElements }).filter(\n NodeDefs.isInCycle(cycle)\n )\n\n const childrenUuidsSortedByLayout = getNodeDefChildrenUuidsSortedByLayout({ nodeDef, cycle, children })\n\n return children.sort((child1, child2) => {\n if (includeAnalysis && (child1.analysis || child2.analysis)) {\n // analysis attribute at the end\n const analysisComparison = _compareBooleans(child1.analysis, child2.analysis)\n if (analysisComparison !== 0) return analysisComparison\n\n // sort by chain index\n const indexInChainComparison =\n getIndexInChain({ survey, nodeDef: child1 }) - getIndexInChain({ survey, nodeDef: child2 })\n if (indexInChainComparison !== 0) return indexInChainComparison\n\n // one node def is the area base estimated of the other\n const areaBasedEstimatedOfComparison = _compareBooleans(\n !!NodeDefs.getAreaBasedEstimatedOf(child1),\n !!NodeDefs.getAreaBasedEstimatedOf(child2)\n )\n if (areaBasedEstimatedOfComparison !== 0) return areaBasedEstimatedOfComparison\n\n return (child1.id ?? 0) - (child2.id ?? 0)\n }\n // keep sorting as defined in layout props\n return childrenUuidsSortedByLayout.indexOf(child1.uuid) - childrenUuidsSortedByLayout.indexOf(child2.uuid)\n })\n}\n\nexport const visitAncestorsAndSelfNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n stopIfFn?: () => boolean\n includeSelf?: boolean\n}): void => {\n const { survey, nodeDef, visitor, stopIfFn, includeSelf = true } = params\n if (includeSelf) {\n visitor(nodeDef)\n }\n let currentParent = getNodeDefParent({ survey, nodeDef })\n while (currentParent) {\n visitor(currentParent)\n if (stopIfFn?.()) {\n break\n }\n currentParent = getNodeDefParent({ survey, nodeDef: currentParent })\n }\n}\n\nexport const findAncestorNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n predicate: (entityDef: NodeDefEntity) => boolean\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef, predicate } = params\n let result: NodeDefEntity | undefined = undefined\n visitAncestorsAndSelfNodeDef({\n survey,\n nodeDef,\n // ancestors only: the node def itself is never an ancestor (e.g. a multiple attribute)\n includeSelf: false,\n visitor: (entityDef) => {\n if (predicate(entityDef)) {\n result = entityDef\n }\n },\n stopIfFn: () => !!result,\n })\n return result\n}\n\ntype NodeDefTraverseParams = {\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n shouldTraverse: (nodeDef: NodeDef<any>) => boolean\n getChildren: (nodeDef: NodeDef<any>) => NodeDef<any>[]\n}\n\nconst traverseBreadthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const queue = new Queue()\n\n queue.enqueue(nodeDef)\n\n while (!queue.isEmpty()) {\n const visitedNodeDef = queue.dequeue()\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n queue.enqueueItems(getChildren(visitedNodeDef))\n }\n }\n}\n\nconst traverseDepthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const stack: NodeDef<any>[] = []\n\n stack.push(nodeDef)\n\n while (stack.length > 0) {\n const visitedNodeDef = stack.pop()!\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n const children = getChildren(visitedNodeDef)\n // add children to stack in reverse order\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push(children[index])\n }\n }\n }\n}\n\nexport const visitDescendantsAndSelfNodeDef = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n traverseOnlySingleEntities?: boolean\n}) => {\n const {\n survey,\n cycle,\n nodeDef,\n visitor,\n includeAnalysis = false,\n traverseMethod = TraverseMethod.bfs,\n traverseOnlySingleEntities = false,\n } = params\n\n const getNodeDefChildrenInternal = (visitedNodeDef: NodeDef<any>) =>\n Objects.isEmpty(cycle)\n ? getNodeDefChildren({ survey, nodeDef: visitedNodeDef, includeAnalysis })\n : getNodeDefChildrenSorted({ survey, nodeDef: visitedNodeDef, cycle: cycle!, includeAnalysis })\n\n const shouldTraverse = (visitedNodeDef: NodeDef<any>): boolean =>\n visitedNodeDef.type === NodeDefType.entity &&\n (visitedNodeDef === nodeDef ||\n NodeDefs.isRoot(visitedNodeDef) ||\n !traverseOnlySingleEntities ||\n NodeDefs.isSingle(visitedNodeDef))\n\n const traverseParams = { nodeDef, visitor, shouldTraverse, getChildren: getNodeDefChildrenInternal }\n if (traverseMethod === TraverseMethod.bfs) {\n traverseBreadthFirst(traverseParams)\n } else {\n traverseDepthFirst(traverseParams)\n }\n}\n\nexport const visitNodeDefs = (params: {\n survey: Survey\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n}) => {\n const { survey, visitor, traverseMethod = TraverseMethod.bfs, includeAnalysis = false } = params\n const rootDef = getNodeDefRoot({ survey })\n return visitDescendantsAndSelfNodeDef({ survey, nodeDef: rootDef, visitor, traverseMethod, includeAnalysis })\n}\n\n// Node Def Code\nexport const getNodeDefParentCode = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode | undefined => {\n const { survey, nodeDef } = params\n const parentCodeDefUuid = nodeDef.props.parentCodeDefUuid\n if (!parentCodeDefUuid) return undefined\n const parentCodeDef = getNodeDefByUuid({ survey, uuid: parentCodeDefUuid })\n return parentCodeDef as NodeDefCode\n}\n\nexport const getNodeDefAncestorCodes = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n const ancestors = []\n let currentParentCode = getNodeDefParentCode({ survey, nodeDef })\n while (currentParentCode) {\n ancestors.unshift(currentParentCode)\n currentParentCode = getNodeDefParentCode({ survey, nodeDef: currentParentCode })\n }\n return ancestors\n}\n\nexport const isNodeDefParentCode = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { survey, nodeDef } = params\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.some(\n (def) => nodeDef.uuid === (def as NodeDef<NodeDefType.code, NodeDefCodeProps>).props?.parentCodeDefUuid\n )\n}\n\nexport const getNodeDefCategoryLevelIndex = (params: { survey: Survey; nodeDef: NodeDefCode }): number => {\n const { survey, nodeDef } = params\n const parentCodeNodeDef = getNodeDefParentCode({ survey, nodeDef })\n return parentCodeNodeDef ? 1 + getNodeDefCategoryLevelIndex({ survey, nodeDef: parentCodeNodeDef }) : 0\n}\n\nexport const getDependentCodeAttributeDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n\n const categoryUuid = NodeDefs.getCategoryUuid(nodeDef)\n if (!categoryUuid) return []\n\n const category = getCategoryByUuid({ survey, categoryUuid })\n const levelsCount = Object.keys(category?.levels ?? {}).length\n if (levelsCount <= 1) return []\n\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.filter(\n (def) => def.type === NodeDefType.code && NodeDefs.getParentCodeDefUuid(def as NodeDefCode) === nodeDef.uuid\n ) as NodeDefCode[]\n}\n\nexport const getDependentEnumeratedEntityDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefEntity[] => {\n const { survey, nodeDef } = params\n const result: NodeDefEntity[] = []\n const dependentCodeAttributeDefs = getDependentCodeAttributeDefs({ survey, nodeDef })\n for (const dependentCodeDef of dependentCodeAttributeDefs) {\n if (NodeDefs.isKey(dependentCodeDef)) {\n const entityDef = getNodeDefAncestorMultipleEntity({ survey, nodeDef: dependentCodeDef })\n if (entityDef && NodeDefs.isEnumerate(entityDef)) {\n result.push(entityDef)\n }\n }\n }\n return result\n}\n\nexport const getNodeDefKeys = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle?: string\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) =>\n NodeDefs.isKey(visitedNodeDef) &&\n !visitedNodeDef.deleted &&\n (Objects.isEmpty(cycle) || NodeDefs.isInCycle(cycle!)(visitedNodeDef)),\n })\n}\n\nexport const getRootKeys = (params: { survey: Survey; cycle?: string }) => {\n const { survey, cycle } = params\n const rootDef = getNodeDefRoot({ survey })\n return getNodeDefKeys({ survey, nodeDef: rootDef, cycle })\n}\n\nexport const getNodeDefEnumerator = (params: { survey: Survey; entityDef: NodeDefEntity }): NodeDefCode | undefined => {\n const { survey, entityDef } = params\n if (!entityDef.props.enumerate) return undefined\n\n const children = getNodeDefChildren({ survey, nodeDef: entityDef })\n const codeAttributeKeys = children.filter((child) => child.type === NodeDefType.code && child.props.key)\n if (codeAttributeKeys.length === 1) {\n return codeAttributeKeys[0] as NodeDefCode\n }\n return undefined\n}\n\nexport const isNodeDefEnumerator = (params: { survey: Survey; nodeDef: NodeDef<NodeDefType> }): boolean => {\n const { survey, nodeDef } = params\n if (nodeDef.type !== NodeDefType.code) return false\n const entityDef = getNodeDefParent({ survey, nodeDef })\n if (!entityDef) return false\n const enumerator = getNodeDefEnumerator({ survey, entityDef })\n return enumerator?.uuid === nodeDef.uuid\n}\n\nexport const getDescendantsInSingleEntities = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n predicate?: (visitedNodeDef: NodeDef<NodeDefType, NodeDefProps>) => boolean\n includeAnalysis?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef, predicate, includeAnalysis } = params\n const result: NodeDef<any>[] = []\n visitDescendantsAndSelfNodeDef({\n survey,\n cycle,\n nodeDef,\n visitor: (visitedNodeDef) => {\n if (!predicate || predicate(visitedNodeDef)) {\n result.push(visitedNodeDef)\n }\n },\n includeAnalysis,\n traverseOnlySingleEntities: true,\n })\n return result\n}\n\nexport const getNodeDefsIncludedInMultipleEntitySummary = (params: {\n survey: Survey\n cycle: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) => NodeDefs.isIncludedInMultipleEntitySummary(cycle)(visitedNodeDef),\n })\n}\n\nconst { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex } =\n NodeDefsIndex\nexport { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex }\n"]}
@@ -14,10 +14,15 @@ export type ExpressionEvaluatorParams = {
14
14
  };
15
15
  export declare class NodeDefExpressionEvaluator extends JavascriptExpressionEvaluator<NodeDefExpressionContext> {
16
16
  constructor();
17
- _eval(params: ExpressionEvaluatorParams): Promise<{
17
+ _eval(params: ExpressionEvaluatorParams, referencedNodeDefUuids?: Set<string>): Promise<{
18
18
  result: any;
19
19
  referencedNodeDefUuids: Set<string>;
20
20
  }>;
21
+ /**
22
+ * Finds the node defs referenced by the expression.
23
+ * If the evaluation fails, the node defs referenced before the error are returned: an empty set would drop
24
+ * all the dependencies of the expression.
25
+ */
21
26
  findReferencedNodeDefUuids(params: ExpressionEvaluatorParams): Promise<Set<string>>;
22
27
  evalExpression(params: ExpressionEvaluatorParams): Promise<any>;
23
28
  }
@@ -24,11 +24,10 @@ class NodeDefExpressionEvaluator extends expression_1.JavascriptExpressionEvalua
24
24
  [expression_1.ExpressionNodeType.This]: thisEvaluator_1.NodeDefThisEvaluator,
25
25
  });
26
26
  }
27
- _eval(params) {
28
- return __awaiter(this, void 0, void 0, function* () {
27
+ _eval(params_1) {
28
+ return __awaiter(this, arguments, void 0, function* (params, referencedNodeDefUuids = new Set()) {
29
29
  const { expression, user, survey, nodeDef, isContextParent = true, selfReferenceAllowed = true, itemsFilter = false, } = params;
30
30
  const nodeDefContext = isContextParent ? (0, nodeDefs_1.getNodeDefParent)({ survey, nodeDef }) : nodeDef;
31
- const referencedNodeDefUuids = new Set();
32
31
  const context = {
33
32
  user,
34
33
  survey,
@@ -43,15 +42,21 @@ class NodeDefExpressionEvaluator extends expression_1.JavascriptExpressionEvalua
43
42
  return { result, referencedNodeDefUuids };
44
43
  });
45
44
  }
45
+ /**
46
+ * Finds the node defs referenced by the expression.
47
+ * If the evaluation fails, the node defs referenced before the error are returned: an empty set would drop
48
+ * all the dependencies of the expression.
49
+ */
46
50
  findReferencedNodeDefUuids(params) {
47
51
  return __awaiter(this, void 0, void 0, function* () {
52
+ const referencedNodeDefUuids = new Set();
48
53
  try {
49
- const { referencedNodeDefUuids } = yield this._eval(params);
50
- return referencedNodeDefUuids;
54
+ yield this._eval(params, referencedNodeDefUuids);
51
55
  }
52
56
  catch (_a) {
53
- return new Set();
57
+ // invalid expression (reported by the expression validator): keep the references found so far
54
58
  }
59
+ return referencedNodeDefUuids;
55
60
  });
56
61
  }
57
62
  evalExpression(params) {
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/nodeDefExpressionEvaluator/evaluator.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,8CAAiF;AACjF,kDAA8D;AAC9D,0CAAsD;AACtD,wDAA2D;AAC3D,2CAAwD;AAIxD,yDAA6D;AAY7D,gCAAwC,SAAQ,0CAAuD;IACrG;QACE,KAAK,CAAC,sCAA0B,EAAE;YAChC,CAAC,+BAAkB,CAAC,UAAU,CAAC,EAAE,uCAA0B;YAC3D,CAAC,+BAAkB,CAAC,MAAM,CAAC,EAAE,+BAAsB;YACnD,CAAC,+BAAkB,CAAC,IAAI,CAAC,EAAE,oCAAoB;SAChD,CAAC,CAAA;IACJ,CAAC;IAEK,KAAK,CAAC,MAAiC;;YAC3C,MAAM,EACJ,UAAU,EACV,IAAI,EACJ,MAAM,EACN,OAAO,EACP,eAAe,GAAG,IAAI,EACtB,oBAAoB,GAAG,IAAI,EAC3B,WAAW,GAAG,KAAK,GACpB,GAAG,MAAM,CAAA;YAEV,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,IAAA,2BAAgB,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;YAExF,MAAM,sBAAsB,GAAgB,IAAI,GAAG,EAAE,CAAA;YAErD,MAAM,OAAO,GAA6B;gBACxC,IAAI;gBACJ,MAAM;gBACN,cAAc,EAAE,OAAO;gBACvB,cAAc;gBACd,MAAM,EAAE,OAAO;gBACf,oBAAoB;gBACpB,sBAAsB;gBACtB,WAAW;aACZ,CAAA;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACvD,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAA;QAC3C,CAAC;KAAA;IAEK,0BAA0B,CAAC,MAAiC;;YAChE,IAAI,CAAC;gBACH,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,OAAO,sBAAsB,CAAA;YAC/B,CAAC;uBAAO,CAAC;gBACP,OAAO,IAAI,GAAG,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;KAAA;IAEK,cAAc,CAAC,MAAiC;;YACpD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC3C,OAAO,MAAM,CAAA;QACf,CAAC;KAAA;CACF","sourcesContent":["import { User } from '../auth'\nimport { ExpressionNodeType, JavascriptExpressionEvaluator } from '../expression'\nimport { NodeDefIdentifierEvaluator } from './node/identifier'\nimport { NodeDefMemberEvaluator } from './node/member'\nimport { NodeDefThisEvaluator } from './node/thisEvaluator'\nimport { nodeDefExpressionFunctions } from './functions'\nimport { NodeDefExpressionContext } from './context'\nimport { NodeDef } from '../nodeDef/nodeDef'\nimport { Survey } from '../survey'\nimport { getNodeDefParent } from '../survey/surveys/nodeDefs'\n\nexport type ExpressionEvaluatorParams = {\n expression: string\n user?: User\n survey: Survey\n nodeDef: NodeDef<any>\n isContextParent?: boolean\n selfReferenceAllowed?: boolean\n itemsFilter?: boolean\n}\n\nexport class NodeDefExpressionEvaluator extends JavascriptExpressionEvaluator<NodeDefExpressionContext> {\n constructor() {\n super(nodeDefExpressionFunctions, {\n [ExpressionNodeType.Identifier]: NodeDefIdentifierEvaluator,\n [ExpressionNodeType.Member]: NodeDefMemberEvaluator,\n [ExpressionNodeType.This]: NodeDefThisEvaluator,\n })\n }\n\n async _eval(params: ExpressionEvaluatorParams): Promise<{ result: any; referencedNodeDefUuids: Set<string> }> {\n const {\n expression,\n user,\n survey,\n nodeDef,\n isContextParent = true,\n selfReferenceAllowed = true,\n itemsFilter = false,\n } = params\n\n const nodeDefContext = isContextParent ? getNodeDefParent({ survey, nodeDef }) : nodeDef\n\n const referencedNodeDefUuids: Set<string> = new Set()\n\n const context: NodeDefExpressionContext = {\n user,\n survey,\n nodeDefCurrent: nodeDef,\n nodeDefContext,\n object: nodeDef,\n selfReferenceAllowed,\n referencedNodeDefUuids,\n itemsFilter,\n }\n const result = await this.evaluate(expression, context)\n return { result, referencedNodeDefUuids }\n }\n\n async findReferencedNodeDefUuids(params: ExpressionEvaluatorParams): Promise<Set<string>> {\n try {\n const { referencedNodeDefUuids } = await this._eval(params)\n return referencedNodeDefUuids\n } catch {\n return new Set()\n }\n }\n\n async evalExpression(params: ExpressionEvaluatorParams): Promise<any> {\n const { result } = await this._eval(params)\n return result\n }\n}\n"]}
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/nodeDefExpressionEvaluator/evaluator.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,8CAAiF;AACjF,kDAA8D;AAC9D,0CAAsD;AACtD,wDAA2D;AAC3D,2CAAwD;AAIxD,yDAA6D;AAY7D,gCAAwC,SAAQ,0CAAuD;IACrG;QACE,KAAK,CAAC,sCAA0B,EAAE;YAChC,CAAC,+BAAkB,CAAC,UAAU,CAAC,EAAE,uCAA0B;YAC3D,CAAC,+BAAkB,CAAC,MAAM,CAAC,EAAE,+BAAsB;YACnD,CAAC,+BAAkB,CAAC,IAAI,CAAC,EAAE,oCAAoB;SAChD,CAAC,CAAA;IACJ,CAAC;IAEK,KAAK;6DACT,MAAiC,EACjC,sBAAsB,GAAgB,IAAI,GAAG,EAAE;YAE/C,MAAM,EACJ,UAAU,EACV,IAAI,EACJ,MAAM,EACN,OAAO,EACP,eAAe,GAAG,IAAI,EACtB,oBAAoB,GAAG,IAAI,EAC3B,WAAW,GAAG,KAAK,GACpB,GAAG,MAAM,CAAA;YAEV,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,IAAA,2BAAgB,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;YAExF,MAAM,OAAO,GAA6B;gBACxC,IAAI;gBACJ,MAAM;gBACN,cAAc,EAAE,OAAO;gBACvB,cAAc;gBACd,MAAM,EAAE,OAAO;gBACf,oBAAoB;gBACpB,sBAAsB;gBACtB,WAAW;aACZ,CAAA;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACvD,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAA;QAC3C,CAAC;KAAA;IAED;;;;OAIG;IACG,0BAA0B,CAAC,MAAiC;;YAChE,MAAM,sBAAsB,GAAgB,IAAI,GAAG,EAAE,CAAA;YACrD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;YAClD,CAAC;uBAAO,CAAC;gBACP,8FAA8F;YAChG,CAAC;YACD,OAAO,sBAAsB,CAAA;QAC/B,CAAC;KAAA;IAEK,cAAc,CAAC,MAAiC;;YACpD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC3C,OAAO,MAAM,CAAA;QACf,CAAC;KAAA;CACF","sourcesContent":["import { User } from '../auth'\nimport { ExpressionNodeType, JavascriptExpressionEvaluator } from '../expression'\nimport { NodeDefIdentifierEvaluator } from './node/identifier'\nimport { NodeDefMemberEvaluator } from './node/member'\nimport { NodeDefThisEvaluator } from './node/thisEvaluator'\nimport { nodeDefExpressionFunctions } from './functions'\nimport { NodeDefExpressionContext } from './context'\nimport { NodeDef } from '../nodeDef/nodeDef'\nimport { Survey } from '../survey'\nimport { getNodeDefParent } from '../survey/surveys/nodeDefs'\n\nexport type ExpressionEvaluatorParams = {\n expression: string\n user?: User\n survey: Survey\n nodeDef: NodeDef<any>\n isContextParent?: boolean\n selfReferenceAllowed?: boolean\n itemsFilter?: boolean\n}\n\nexport class NodeDefExpressionEvaluator extends JavascriptExpressionEvaluator<NodeDefExpressionContext> {\n constructor() {\n super(nodeDefExpressionFunctions, {\n [ExpressionNodeType.Identifier]: NodeDefIdentifierEvaluator,\n [ExpressionNodeType.Member]: NodeDefMemberEvaluator,\n [ExpressionNodeType.This]: NodeDefThisEvaluator,\n })\n }\n\n async _eval(\n params: ExpressionEvaluatorParams,\n referencedNodeDefUuids: Set<string> = new Set()\n ): Promise<{ result: any; referencedNodeDefUuids: Set<string> }> {\n const {\n expression,\n user,\n survey,\n nodeDef,\n isContextParent = true,\n selfReferenceAllowed = true,\n itemsFilter = false,\n } = params\n\n const nodeDefContext = isContextParent ? getNodeDefParent({ survey, nodeDef }) : nodeDef\n\n const context: NodeDefExpressionContext = {\n user,\n survey,\n nodeDefCurrent: nodeDef,\n nodeDefContext,\n object: nodeDef,\n selfReferenceAllowed,\n referencedNodeDefUuids,\n itemsFilter,\n }\n const result = await this.evaluate(expression, context)\n return { result, referencedNodeDefUuids }\n }\n\n /**\n * Finds the node defs referenced by the expression.\n * If the evaluation fails, the node defs referenced before the error are returned: an empty set would drop\n * all the dependencies of the expression.\n */\n async findReferencedNodeDefUuids(params: ExpressionEvaluatorParams): Promise<Set<string>> {\n const referencedNodeDefUuids: Set<string> = new Set()\n try {\n await this._eval(params, referencedNodeDefUuids)\n } catch {\n // invalid expression (reported by the expression validator): keep the references found so far\n }\n return referencedNodeDefUuids\n }\n\n async evalExpression(params: ExpressionEvaluatorParams): Promise<any> {\n const { result } = await this._eval(params)\n return result\n }\n}\n"]}
@@ -4,4 +4,10 @@ import { Survey } from '../../survey';
4
4
  export declare const addNodeDefToIndex: (nodeDef: NodeDef<any>, options?: MutationOptions) => (survey: Survey) => Survey;
5
5
  export declare const updateNodeDefUuidByNameIndex: (nodeDef: NodeDef<any>, nodeDefPrevious?: NodeDef<any>, options?: MutationOptions) => (survey: Survey) => Survey;
6
6
  export declare const deleteNodeDefIndex: (nodeDef: NodeDef<any>) => (survey: Survey) => Survey;
7
+ /**
8
+ * Builds the node defs index of the survey.
9
+ *
10
+ * @param survey - The survey.
11
+ * @returns A copy of the survey with the node defs index (the survey passed in is not modified).
12
+ */
7
13
  export declare const buildAndAssocNodeDefsIndex: (survey: Survey) => Survey;
@@ -111,15 +111,22 @@ const deleteNodeDefIndex = (nodeDef) => (survey) => {
111
111
  };
112
112
  exports.deleteNodeDefIndex = deleteNodeDefIndex;
113
113
  // ==== CREATE
114
+ /**
115
+ * Builds the node defs index of the survey.
116
+ *
117
+ * @param survey - The survey.
118
+ * @returns A copy of the survey with the node defs index (the survey passed in is not modified).
119
+ */
114
120
  const buildAndAssocNodeDefsIndex = (survey) => {
115
- survey.nodeDefsIndex = {
116
- childDefUuidPresenceByParentUuid: {},
117
- qualifierPresenceByUuid: {},
118
- };
121
+ // the new index is built in place: it belongs only to the copy of the survey
122
+ const surveyUpdated = Object.assign(Object.assign({}, survey), { nodeDefsIndex: {
123
+ childDefUuidPresenceByParentUuid: {},
124
+ qualifierPresenceByUuid: {},
125
+ } });
119
126
  (0, nodeDefsReader_1.getNodeDefsArray)(survey)
120
127
  .sort((nodeDef1, nodeDef2) => { var _a, _b; return ((_a = nodeDef1.id) !== null && _a !== void 0 ? _a : 0) - ((_b = nodeDef2.id) !== null && _b !== void 0 ? _b : 0); })
121
- .forEach((nodeDef) => (0, exports.addNodeDefToIndex)(nodeDef, { sideEffect: true })(survey));
122
- return survey;
128
+ .forEach((nodeDef) => (0, exports.addNodeDefToIndex)(nodeDef, { sideEffect: true })(surveyUpdated));
129
+ return surveyUpdated;
123
130
  };
124
131
  exports.buildAndAssocNodeDefsIndex = buildAndAssocNodeDefsIndex;
125
132
  //# sourceMappingURL=nodeDefsIndex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeDefsIndex.js","sourceRoot":"","sources":["../../../../src/survey/surveys/_nodeDefs/nodeDefsIndex.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeDef, NodeDefs } from '../../../nodeDef'\nimport { Objects } from '../../../utils'\nimport { MutationOptions } from '../../../utils/mutationOptions'\nimport { Survey, SurveyNodeDefsIndex } from '../../survey'\nimport { getNodeDefsArray } from './nodeDefsReader'\n\nconst keys = {\n nodeDefsIndex: 'nodeDefsIndex',\n}\n\n// keys and values must match: forces every property of SurveyNodeDefsIndex to be present here,\n// and a rename/typo on either side becomes a compile error instead of a silent runtime mismatch.\nconst indexKeys: { [K in keyof SurveyNodeDefsIndex]-?: K } = {\n childDefUuidPresenceByParentUuid: 'childDefUuidPresenceByParentUuid',\n nodeDefUuidByName: 'nodeDefUuidByName',\n qualifierPresenceByUuid: 'qualifierPresenceByUuid',\n rootDefUuid: 'rootDefUuid',\n}\n\n// ==== UPDATE\n\nexport const addNodeDefToIndex =\n (nodeDef: NodeDef<any>, options: MutationOptions = {}) =>\n (survey: Survey): Survey => {\n const { sideEffect = false } = options\n\n const { analysis, parentUuid, temporary, uuid } = nodeDef\n const name = NodeDefs.getName(nodeDef)\n\n let surveyUpdated: Survey = Objects.assocPath({\n obj: survey,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, name],\n value: nodeDef.uuid,\n sideEffect,\n })\n\n if (parentUuid) {\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, parentUuid, uuid],\n value: true,\n sideEffect,\n }) as Survey\n } else if (!temporary && !analysis) {\n // nodeDef is root\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.rootDefUuid],\n value: uuid,\n sideEffect,\n }) as Survey\n }\n\n if (NodeDefs.isQualifier(nodeDef)) {\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.qualifierPresenceByUuid, uuid],\n value: true,\n sideEffect,\n }) as Survey\n }\n return surveyUpdated\n }\n\nexport const updateNodeDefUuidByNameIndex =\n (nodeDef: NodeDef<any>, nodeDefPrevious?: NodeDef<any>, options?: MutationOptions) =>\n (survey: Survey): Survey => {\n const { sideEffect } = options ?? {}\n let surveyUpdated = survey\n const currentName = NodeDefs.getName(nodeDef)\n const previousName = nodeDefPrevious ? NodeDefs.getName(nodeDefPrevious) : ''\n if (currentName !== previousName) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, previousName],\n sideEffect,\n })\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, currentName],\n value: nodeDef.uuid,\n sideEffect,\n })\n }\n return surveyUpdated\n }\n\n// ==== DELETE\n\nexport const deleteNodeDefIndex =\n (nodeDef: NodeDef<any>) =>\n (survey: Survey): Survey => {\n const { parentUuid, uuid } = nodeDef\n const name = NodeDefs.getName(nodeDef)\n\n let surveyUpdated: Survey = Objects.dissocPath({\n obj: survey,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, uuid],\n })\n\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, name],\n })\n\n if (parentUuid) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, parentUuid, uuid],\n })\n } else if (survey.nodeDefsIndex?.rootDefUuid === uuid) {\n // node def is root (other node defs without parent, e.g. temporary or analysis ones, are not)\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.rootDefUuid],\n })\n }\n\n if (NodeDefs.isQualifier(nodeDef)) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.qualifierPresenceByUuid, uuid],\n })\n }\n return surveyUpdated\n }\n\n// ==== CREATE\n\nexport const buildAndAssocNodeDefsIndex = (survey: Survey): Survey => {\n survey.nodeDefsIndex = {\n childDefUuidPresenceByParentUuid: {},\n qualifierPresenceByUuid: {},\n }\n getNodeDefsArray(survey)\n .sort((nodeDef1: NodeDef<any>, nodeDef2: NodeDef<any>) => (nodeDef1.id ?? 0) - (nodeDef2.id ?? 0))\n .forEach((nodeDef) => addNodeDefToIndex(nodeDef, { sideEffect: true })(survey))\n\n return survey\n}\n"]}
1
+ {"version":3,"file":"nodeDefsIndex.js","sourceRoot":"","sources":["../../../../src/survey/surveys/_nodeDefs/nodeDefsIndex.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeDef, NodeDefs } from '../../../nodeDef'\nimport { Objects } from '../../../utils'\nimport { MutationOptions } from '../../../utils/mutationOptions'\nimport { Survey, SurveyNodeDefsIndex } from '../../survey'\nimport { getNodeDefsArray } from './nodeDefsReader'\n\nconst keys = {\n nodeDefsIndex: 'nodeDefsIndex',\n}\n\n// keys and values must match: forces every property of SurveyNodeDefsIndex to be present here,\n// and a rename/typo on either side becomes a compile error instead of a silent runtime mismatch.\nconst indexKeys: { [K in keyof SurveyNodeDefsIndex]-?: K } = {\n childDefUuidPresenceByParentUuid: 'childDefUuidPresenceByParentUuid',\n nodeDefUuidByName: 'nodeDefUuidByName',\n qualifierPresenceByUuid: 'qualifierPresenceByUuid',\n rootDefUuid: 'rootDefUuid',\n}\n\n// ==== UPDATE\n\nexport const addNodeDefToIndex =\n (nodeDef: NodeDef<any>, options: MutationOptions = {}) =>\n (survey: Survey): Survey => {\n const { sideEffect = false } = options\n\n const { analysis, parentUuid, temporary, uuid } = nodeDef\n const name = NodeDefs.getName(nodeDef)\n\n let surveyUpdated: Survey = Objects.assocPath({\n obj: survey,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, name],\n value: nodeDef.uuid,\n sideEffect,\n })\n\n if (parentUuid) {\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, parentUuid, uuid],\n value: true,\n sideEffect,\n }) as Survey\n } else if (!temporary && !analysis) {\n // nodeDef is root\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.rootDefUuid],\n value: uuid,\n sideEffect,\n }) as Survey\n }\n\n if (NodeDefs.isQualifier(nodeDef)) {\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.qualifierPresenceByUuid, uuid],\n value: true,\n sideEffect,\n }) as Survey\n }\n return surveyUpdated\n }\n\nexport const updateNodeDefUuidByNameIndex =\n (nodeDef: NodeDef<any>, nodeDefPrevious?: NodeDef<any>, options?: MutationOptions) =>\n (survey: Survey): Survey => {\n const { sideEffect } = options ?? {}\n let surveyUpdated = survey\n const currentName = NodeDefs.getName(nodeDef)\n const previousName = nodeDefPrevious ? NodeDefs.getName(nodeDefPrevious) : ''\n if (currentName !== previousName) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, previousName],\n sideEffect,\n })\n surveyUpdated = Objects.assocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, currentName],\n value: nodeDef.uuid,\n sideEffect,\n })\n }\n return surveyUpdated\n }\n\n// ==== DELETE\n\nexport const deleteNodeDefIndex =\n (nodeDef: NodeDef<any>) =>\n (survey: Survey): Survey => {\n const { parentUuid, uuid } = nodeDef\n const name = NodeDefs.getName(nodeDef)\n\n let surveyUpdated: Survey = Objects.dissocPath({\n obj: survey,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, uuid],\n })\n\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.nodeDefUuidByName, name],\n })\n\n if (parentUuid) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.childDefUuidPresenceByParentUuid, parentUuid, uuid],\n })\n } else if (survey.nodeDefsIndex?.rootDefUuid === uuid) {\n // node def is root (other node defs without parent, e.g. temporary or analysis ones, are not)\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.rootDefUuid],\n })\n }\n\n if (NodeDefs.isQualifier(nodeDef)) {\n surveyUpdated = Objects.dissocPath({\n obj: surveyUpdated,\n path: [keys.nodeDefsIndex, indexKeys.qualifierPresenceByUuid, uuid],\n })\n }\n return surveyUpdated\n }\n\n// ==== CREATE\n\n/**\n * Builds the node defs index of the survey.\n *\n * @param survey - The survey.\n * @returns A copy of the survey with the node defs index (the survey passed in is not modified).\n */\nexport const buildAndAssocNodeDefsIndex = (survey: Survey): Survey => {\n // the new index is built in place: it belongs only to the copy of the survey\n const surveyUpdated: Survey = {\n ...survey,\n nodeDefsIndex: {\n childDefUuidPresenceByParentUuid: {},\n qualifierPresenceByUuid: {},\n },\n }\n getNodeDefsArray(survey)\n .sort((nodeDef1: NodeDef<any>, nodeDef2: NodeDef<any>) => (nodeDef1.id ?? 0) - (nodeDef2.id ?? 0))\n .forEach((nodeDef) => addNodeDefToIndex(nodeDef, { sideEffect: true })(surveyUpdated))\n\n return surveyUpdated\n}\n"]}
@@ -18,4 +18,10 @@ export declare const removeNodeDefDependencies: (params: {
18
18
  nodeDefUuid: string;
19
19
  dependencyType?: SurveyDependencyType;
20
20
  }) => Survey;
21
+ /**
22
+ * Builds the dependency graph of the survey.
23
+ *
24
+ * @param survey - The survey.
25
+ * @returns A copy of the survey with the dependency graph (the survey passed in is not modified).
26
+ */
21
27
  export declare const buildAndAssocDependencyGraph: (survey: Survey) => Promise<Survey>;
@@ -267,11 +267,17 @@ const removeNodeDefDependencies = (params) => {
267
267
  return Object.assign(Object.assign({}, survey), { dependencyGraph: graphsUpdated });
268
268
  };
269
269
  exports.removeNodeDefDependencies = removeNodeDefDependencies;
270
+ /**
271
+ * Builds the dependency graph of the survey.
272
+ *
273
+ * @param survey - The survey.
274
+ * @returns A copy of the survey with the dependency graph (the survey passed in is not modified).
275
+ */
270
276
  const buildAndAssocDependencyGraph = (survey) => __awaiter(void 0, void 0, void 0, function* () {
271
- survey.dependencyGraph = newDependencyGraph();
272
- const sideEffect = true; // when the dependency graph is built from scratch, do side effect to avoid re-creating objects
277
+ // the new graph is built from scratch with side effect (to avoid re-creating objects): it belongs only to the copy of the survey
278
+ const sideEffect = true;
273
279
  // add dependencies for every node def
274
- let surveyUpdated = survey;
280
+ let surveyUpdated = Object.assign(Object.assign({}, survey), { dependencyGraph: newDependencyGraph() });
275
281
  for (const nodeDef of SurveyNodeDefs.getNodeDefsArray(survey)) {
276
282
  // sequential: each iteration updates the survey
277
283
  surveyUpdated = yield (0, exports.addNodeDefDependencies)({ nodeDef, survey: surveyUpdated, sideEffect }); // NOSONAR
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/survey/surveys/dependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import * as SurveyNodeDefs from './nodeDefs'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefEntity,\n NodeDefExpression,\n NodeDefFile,\n NodeDefProps,\n NodeDefs,\n NodeDefType,\n} from '../../nodeDef'\nimport { NodeDefExpressionEvaluator } from '../../nodeDefExpressionEvaluator'\n\nimport { Survey, SurveyDependencyGraph, SurveyDependencyType } from '../survey'\nimport { Arrays, Objects } from '../../utils'\nimport { NodeDefExpressionFactory } from '../../nodeDef/nodeDef'\nimport { Dictionary } from '../../common'\n\nconst functionsRequiringOnUpdateDependency = ['recordDateLastModified']\n\nconst isContextParentByDependencyType = {\n [SurveyDependencyType.applicable]: true,\n [SurveyDependencyType.defaultValues]: true,\n [SurveyDependencyType.editable]: true,\n [SurveyDependencyType.enumeratingItems]: true,\n [SurveyDependencyType.fileName]: true,\n [SurveyDependencyType.formula]: false,\n [SurveyDependencyType.maxCount]: true,\n [SurveyDependencyType.minCount]: true,\n [SurveyDependencyType.onUpdate]: true,\n [SurveyDependencyType.parentCode]: false,\n [SurveyDependencyType.validations]: true,\n [SurveyDependencyType.visible]: true,\n}\n\nconst selfReferenceAllowedByDependencyType = {\n [SurveyDependencyType.applicable]: false,\n [SurveyDependencyType.defaultValues]: false,\n [SurveyDependencyType.editable]: false,\n [SurveyDependencyType.enumeratingItems]: false,\n [SurveyDependencyType.fileName]: false,\n [SurveyDependencyType.formula]: false,\n [SurveyDependencyType.maxCount]: false,\n [SurveyDependencyType.minCount]: false,\n [SurveyDependencyType.onUpdate]: false,\n [SurveyDependencyType.parentCode]: false,\n [SurveyDependencyType.validations]: true,\n [SurveyDependencyType.visible]: false,\n}\n\nconst newDependencyGraph = () => ({\n [SurveyDependencyType.applicable]: {},\n [SurveyDependencyType.defaultValues]: {},\n [SurveyDependencyType.editable]: {},\n [SurveyDependencyType.enumeratingItems]: {},\n [SurveyDependencyType.fileName]: {},\n [SurveyDependencyType.formula]: {},\n [SurveyDependencyType.maxCount]: {},\n [SurveyDependencyType.minCount]: {},\n [SurveyDependencyType.onUpdate]: {},\n [SurveyDependencyType.parentCode]: {},\n [SurveyDependencyType.validations]: {},\n [SurveyDependencyType.visible]: {},\n})\n\nconst getDependencyGraph = (survey: Survey): SurveyDependencyGraph => survey.dependencyGraph ?? newDependencyGraph()\n\nconst getDependencies = (params: {\n graphs: SurveyDependencyGraph\n type: SurveyDependencyType\n nodeDefUuid: string\n}): Array<string> => {\n const { graphs, type, nodeDefUuid } = params\n return type === SurveyDependencyType.onUpdate ? [] : ((graphs?.[type]?.[nodeDefUuid] ?? []) as string[])\n}\n\nexport const getNodeDefDependents = (params: {\n survey: Survey\n nodeDefUuid: string\n dependencyType?: SurveyDependencyType\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDefUuid, dependencyType } = params\n const dependencyGraph = getDependencyGraph(survey)\n\n const dependentUuids = new Set<string>()\n\n const dependencyTypes: SurveyDependencyType[] = dependencyType\n ? [dependencyType]\n : Object.values(SurveyDependencyType)\n\n for (const depType of dependencyTypes) {\n const dependentUuidsTemp = getDependencies({ graphs: dependencyGraph, type: depType, nodeDefUuid })\n for (const dependentUuid of dependentUuidsTemp) {\n dependentUuids.add(dependentUuid)\n }\n }\n return dependentUuids.size > 0 ? SurveyNodeDefs.findNodeDefsByUuids({ survey, uuids: [...dependentUuids] }) : []\n}\n\nexport const getOnUpdateDependents = (params: { survey: Survey }) => {\n const { survey } = params\n const dependencyGraph = getDependencyGraph(survey)\n const sourceDefUuids = Object.keys(dependencyGraph[SurveyDependencyType.onUpdate] ?? {})\n return sourceDefUuids.length > 0 ? SurveyNodeDefs.findNodeDefsByUuids({ survey, uuids: sourceDefUuids }) : []\n}\n\n// UPDATE\n\nconst addDependency = (params: {\n graphs: SurveyDependencyGraph\n type: SurveyDependencyType\n nodeDefUuid: string\n nodeDefDepUuid: string\n sideEffect: boolean\n}): SurveyDependencyGraph => {\n const { graphs, type, nodeDefUuid, nodeDefDepUuid, sideEffect = false } = params\n const deps = getDependencies({ graphs, type, nodeDefUuid })\n const depsUpdated = Arrays.addItem(nodeDefDepUuid, { sideEffect })(deps)\n return Objects.assocPath({ obj: graphs, path: [type, nodeDefUuid], value: depsUpdated, sideEffect })\n}\n\nconst addDependencies = async (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType>\n type: SurveyDependencyType\n graphs: SurveyDependencyGraph\n expressions: NodeDefExpression[]\n sideEffect?: boolean\n}): Promise<SurveyDependencyGraph> => {\n const { survey, nodeDef, type, expressions, graphs: graphsParam, sideEffect = false } = params\n\n if (!expressions || expressions.length === 0) return graphsParam\n\n let graphsUpdated = sideEffect ? graphsParam : { ...graphsParam }\n\n const isContextParent = isContextParentByDependencyType[type]\n const selfReferenceAllowed = selfReferenceAllowedByDependencyType[type]\n\n const findReferencedNodeDefs = async (\n expression: string | undefined\n ): Promise<{ [key: string]: NodeDef<NodeDefType> }> => {\n if (!expression) return {}\n\n const referencedNodeDefUuids = await new NodeDefExpressionEvaluator().findReferencedNodeDefUuids({\n expression,\n survey,\n nodeDef,\n isContextParent,\n selfReferenceAllowed,\n })\n const referencedNodeDefsByUuid: Dictionary<NodeDef<any>> = {}\n for (const uuid of referencedNodeDefUuids) {\n referencedNodeDefsByUuid[uuid] = SurveyNodeDefs.getNodeDefByUuid({ survey, uuid })\n }\n return referencedNodeDefsByUuid\n }\n\n const referencedNodeDefsArray = await Promise.all(\n expressions.flatMap((nodeDefExpr) => [\n findReferencedNodeDefs(nodeDefExpr.expression),\n findReferencedNodeDefs(nodeDefExpr.applyIf),\n ])\n )\n const referencedNodeDefs: Dictionary<NodeDef<any>> = Object.assign({}, ...referencedNodeDefsArray)\n\n for (const nodeDefRef of Object.values(referencedNodeDefs)) {\n graphsUpdated = addDependency({\n graphs: graphsUpdated,\n type,\n nodeDefUuid: nodeDefRef.uuid,\n nodeDefDepUuid: nodeDef.uuid,\n sideEffect,\n })\n }\n\n return graphsUpdated\n}\n\nexport const addNodeDefDependencies = async (params: {\n nodeDef: NodeDef<NodeDefType>\n survey: Survey\n sideEffect?: boolean\n}): Promise<Survey> => {\n const { nodeDef, survey, sideEffect = false } = params\n const graphs = getDependencyGraph(survey)\n let graphsUpdated = sideEffect ? graphs : { ...graphs }\n\n const _addDependencies = async (type: SurveyDependencyType, expressions: NodeDefExpression[]) => {\n let _graphUpdated = await addDependencies({\n survey,\n nodeDef,\n type,\n expressions,\n graphs: graphsUpdated,\n sideEffect,\n })\n // add onUpdate dependencies\n if (\n expressions.some((expression) =>\n functionsRequiringOnUpdateDependency.some(\n (functionName) => expression.applyIf?.includes(functionName) || expression.expression?.includes(functionName)\n )\n )\n ) {\n _graphUpdated = Objects.assocPath({\n obj: _graphUpdated,\n path: [SurveyDependencyType.onUpdate, nodeDef.uuid],\n value: true,\n sideEffect,\n })\n }\n return _graphUpdated\n }\n graphsUpdated = await _addDependencies(SurveyDependencyType.applicable, NodeDefs.getApplicable(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.defaultValues, NodeDefs.getDefaultValues(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.editable, NodeDefs.getEditableIf(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.validations, NodeDefs.getValidationsExpressions(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.visible, NodeDefs.getVisibleIf(nodeDef))\n const maxCount = NodeDefs.getMaxCount(nodeDef)\n if (Array.isArray(maxCount)) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.maxCount, maxCount)\n }\n const minCount = NodeDefs.getMinCount(nodeDef)\n if (Array.isArray(minCount)) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.minCount, minCount)\n }\n // file name expression\n if (NodeDefs.getType(nodeDef) === NodeDefType.file) {\n const fileNameExpression = NodeDefs.getFileNameExpression(nodeDef as NodeDefFile)\n if (fileNameExpression) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.fileName, [\n NodeDefExpressionFactory.createInstance({ expression: fileNameExpression }),\n ])\n }\n }\n if (NodeDefs.isEntity(nodeDef)) {\n const enumeratingItemsExpression = NodeDefs.getEnumeratingItemsExpression(nodeDef as NodeDefEntity)\n if (enumeratingItemsExpression) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.enumeratingItems, [\n NodeDefExpressionFactory.createInstance({ expression: enumeratingItemsExpression }),\n ])\n }\n }\n // parent code\n if (NodeDefs.getType(nodeDef) === NodeDefType.code) {\n const parentCodeDefUuid = NodeDefs.getParentCodeDefUuid(nodeDef as NodeDefCode)\n if (parentCodeDefUuid) {\n graphsUpdated = addDependency({\n graphs: graphsUpdated,\n type: SurveyDependencyType.parentCode,\n nodeDefUuid: parentCodeDefUuid,\n nodeDefDepUuid: nodeDef.uuid,\n sideEffect,\n })\n }\n }\n if (sideEffect) {\n survey.dependencyGraph = graphsUpdated\n return survey\n }\n return { ...survey, dependencyGraph: graphsUpdated }\n}\n\n// DELETE\n\nconst _removeNodeDefDependenciesOfType = (params: {\n graphs: SurveyDependencyGraph\n dependencyType: SurveyDependencyType\n nodeDefUuid: string\n}): SurveyDependencyGraph => {\n const { graphs, nodeDefUuid, dependencyType } = params\n\n const graphsUpdated = { ...graphs }\n let graphUpdated = { ...graphsUpdated[dependencyType] }\n // dissoc nodeDefUuid dependency as dependent\n graphUpdated = Objects.dissoc({ obj: graphUpdated, prop: nodeDefUuid })\n\n if (dependencyType !== SurveyDependencyType.onUpdate) {\n // dissoc nodeDefUuid dependency from sources (if any)\n for (const [key, dependentUuids] of Object.entries(graphUpdated)) {\n graphUpdated[key] = Arrays.removeItem(nodeDefUuid)(dependentUuids as string[])\n }\n }\n\n graphsUpdated[dependencyType] = graphUpdated\n return graphsUpdated\n}\n\nexport const removeNodeDefDependencies = (params: {\n survey: Survey\n nodeDefUuid: string\n dependencyType?: SurveyDependencyType\n}): Survey => {\n const { survey, nodeDefUuid, dependencyType = null } = params\n const graphs = getDependencyGraph(survey)\n const dependencyTypes = dependencyType ? [dependencyType] : (Object.keys(graphs) as SurveyDependencyType[])\n const graphsUpdated = dependencyTypes.reduce(\n (dependencyGraphAcc, type) =>\n _removeNodeDefDependenciesOfType({ graphs: dependencyGraphAcc, dependencyType: type, nodeDefUuid }),\n graphs\n )\n return { ...survey, dependencyGraph: graphsUpdated }\n}\n\nexport const buildAndAssocDependencyGraph = async (survey: Survey): Promise<Survey> => {\n survey.dependencyGraph = newDependencyGraph()\n\n const sideEffect = true // when the dependency graph is built from scratch, do side effect to avoid re-creating objects\n\n // add dependencies for every node def\n let surveyUpdated = survey\n for (const nodeDef of SurveyNodeDefs.getNodeDefsArray(survey)) {\n // sequential: each iteration updates the survey\n surveyUpdated = await addNodeDefDependencies({ nodeDef, survey: surveyUpdated, sideEffect }) // NOSONAR\n }\n return surveyUpdated\n}\n"]}
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/survey/surveys/dependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import * as SurveyNodeDefs from './nodeDefs'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefEntity,\n NodeDefExpression,\n NodeDefFile,\n NodeDefProps,\n NodeDefs,\n NodeDefType,\n} from '../../nodeDef'\nimport { NodeDefExpressionEvaluator } from '../../nodeDefExpressionEvaluator'\n\nimport { Survey, SurveyDependencyGraph, SurveyDependencyType } from '../survey'\nimport { Arrays, Objects } from '../../utils'\nimport { NodeDefExpressionFactory } from '../../nodeDef/nodeDef'\nimport { Dictionary } from '../../common'\n\nconst functionsRequiringOnUpdateDependency = ['recordDateLastModified']\n\nconst isContextParentByDependencyType = {\n [SurveyDependencyType.applicable]: true,\n [SurveyDependencyType.defaultValues]: true,\n [SurveyDependencyType.editable]: true,\n [SurveyDependencyType.enumeratingItems]: true,\n [SurveyDependencyType.fileName]: true,\n [SurveyDependencyType.formula]: false,\n [SurveyDependencyType.maxCount]: true,\n [SurveyDependencyType.minCount]: true,\n [SurveyDependencyType.onUpdate]: true,\n [SurveyDependencyType.parentCode]: false,\n [SurveyDependencyType.validations]: true,\n [SurveyDependencyType.visible]: true,\n}\n\nconst selfReferenceAllowedByDependencyType = {\n [SurveyDependencyType.applicable]: false,\n [SurveyDependencyType.defaultValues]: false,\n [SurveyDependencyType.editable]: false,\n [SurveyDependencyType.enumeratingItems]: false,\n [SurveyDependencyType.fileName]: false,\n [SurveyDependencyType.formula]: false,\n [SurveyDependencyType.maxCount]: false,\n [SurveyDependencyType.minCount]: false,\n [SurveyDependencyType.onUpdate]: false,\n [SurveyDependencyType.parentCode]: false,\n [SurveyDependencyType.validations]: true,\n [SurveyDependencyType.visible]: false,\n}\n\nconst newDependencyGraph = () => ({\n [SurveyDependencyType.applicable]: {},\n [SurveyDependencyType.defaultValues]: {},\n [SurveyDependencyType.editable]: {},\n [SurveyDependencyType.enumeratingItems]: {},\n [SurveyDependencyType.fileName]: {},\n [SurveyDependencyType.formula]: {},\n [SurveyDependencyType.maxCount]: {},\n [SurveyDependencyType.minCount]: {},\n [SurveyDependencyType.onUpdate]: {},\n [SurveyDependencyType.parentCode]: {},\n [SurveyDependencyType.validations]: {},\n [SurveyDependencyType.visible]: {},\n})\n\nconst getDependencyGraph = (survey: Survey): SurveyDependencyGraph => survey.dependencyGraph ?? newDependencyGraph()\n\nconst getDependencies = (params: {\n graphs: SurveyDependencyGraph\n type: SurveyDependencyType\n nodeDefUuid: string\n}): Array<string> => {\n const { graphs, type, nodeDefUuid } = params\n return type === SurveyDependencyType.onUpdate ? [] : ((graphs?.[type]?.[nodeDefUuid] ?? []) as string[])\n}\n\nexport const getNodeDefDependents = (params: {\n survey: Survey\n nodeDefUuid: string\n dependencyType?: SurveyDependencyType\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDefUuid, dependencyType } = params\n const dependencyGraph = getDependencyGraph(survey)\n\n const dependentUuids = new Set<string>()\n\n const dependencyTypes: SurveyDependencyType[] = dependencyType\n ? [dependencyType]\n : Object.values(SurveyDependencyType)\n\n for (const depType of dependencyTypes) {\n const dependentUuidsTemp = getDependencies({ graphs: dependencyGraph, type: depType, nodeDefUuid })\n for (const dependentUuid of dependentUuidsTemp) {\n dependentUuids.add(dependentUuid)\n }\n }\n return dependentUuids.size > 0 ? SurveyNodeDefs.findNodeDefsByUuids({ survey, uuids: [...dependentUuids] }) : []\n}\n\nexport const getOnUpdateDependents = (params: { survey: Survey }) => {\n const { survey } = params\n const dependencyGraph = getDependencyGraph(survey)\n const sourceDefUuids = Object.keys(dependencyGraph[SurveyDependencyType.onUpdate] ?? {})\n return sourceDefUuids.length > 0 ? SurveyNodeDefs.findNodeDefsByUuids({ survey, uuids: sourceDefUuids }) : []\n}\n\n// UPDATE\n\nconst addDependency = (params: {\n graphs: SurveyDependencyGraph\n type: SurveyDependencyType\n nodeDefUuid: string\n nodeDefDepUuid: string\n sideEffect: boolean\n}): SurveyDependencyGraph => {\n const { graphs, type, nodeDefUuid, nodeDefDepUuid, sideEffect = false } = params\n const deps = getDependencies({ graphs, type, nodeDefUuid })\n const depsUpdated = Arrays.addItem(nodeDefDepUuid, { sideEffect })(deps)\n return Objects.assocPath({ obj: graphs, path: [type, nodeDefUuid], value: depsUpdated, sideEffect })\n}\n\nconst addDependencies = async (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType>\n type: SurveyDependencyType\n graphs: SurveyDependencyGraph\n expressions: NodeDefExpression[]\n sideEffect?: boolean\n}): Promise<SurveyDependencyGraph> => {\n const { survey, nodeDef, type, expressions, graphs: graphsParam, sideEffect = false } = params\n\n if (!expressions || expressions.length === 0) return graphsParam\n\n let graphsUpdated = sideEffect ? graphsParam : { ...graphsParam }\n\n const isContextParent = isContextParentByDependencyType[type]\n const selfReferenceAllowed = selfReferenceAllowedByDependencyType[type]\n\n const findReferencedNodeDefs = async (\n expression: string | undefined\n ): Promise<{ [key: string]: NodeDef<NodeDefType> }> => {\n if (!expression) return {}\n\n const referencedNodeDefUuids = await new NodeDefExpressionEvaluator().findReferencedNodeDefUuids({\n expression,\n survey,\n nodeDef,\n isContextParent,\n selfReferenceAllowed,\n })\n const referencedNodeDefsByUuid: Dictionary<NodeDef<any>> = {}\n for (const uuid of referencedNodeDefUuids) {\n referencedNodeDefsByUuid[uuid] = SurveyNodeDefs.getNodeDefByUuid({ survey, uuid })\n }\n return referencedNodeDefsByUuid\n }\n\n const referencedNodeDefsArray = await Promise.all(\n expressions.flatMap((nodeDefExpr) => [\n findReferencedNodeDefs(nodeDefExpr.expression),\n findReferencedNodeDefs(nodeDefExpr.applyIf),\n ])\n )\n const referencedNodeDefs: Dictionary<NodeDef<any>> = Object.assign({}, ...referencedNodeDefsArray)\n\n for (const nodeDefRef of Object.values(referencedNodeDefs)) {\n graphsUpdated = addDependency({\n graphs: graphsUpdated,\n type,\n nodeDefUuid: nodeDefRef.uuid,\n nodeDefDepUuid: nodeDef.uuid,\n sideEffect,\n })\n }\n\n return graphsUpdated\n}\n\nexport const addNodeDefDependencies = async (params: {\n nodeDef: NodeDef<NodeDefType>\n survey: Survey\n sideEffect?: boolean\n}): Promise<Survey> => {\n const { nodeDef, survey, sideEffect = false } = params\n const graphs = getDependencyGraph(survey)\n let graphsUpdated = sideEffect ? graphs : { ...graphs }\n\n const _addDependencies = async (type: SurveyDependencyType, expressions: NodeDefExpression[]) => {\n let _graphUpdated = await addDependencies({\n survey,\n nodeDef,\n type,\n expressions,\n graphs: graphsUpdated,\n sideEffect,\n })\n // add onUpdate dependencies\n if (\n expressions.some((expression) =>\n functionsRequiringOnUpdateDependency.some(\n (functionName) => expression.applyIf?.includes(functionName) || expression.expression?.includes(functionName)\n )\n )\n ) {\n _graphUpdated = Objects.assocPath({\n obj: _graphUpdated,\n path: [SurveyDependencyType.onUpdate, nodeDef.uuid],\n value: true,\n sideEffect,\n })\n }\n return _graphUpdated\n }\n graphsUpdated = await _addDependencies(SurveyDependencyType.applicable, NodeDefs.getApplicable(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.defaultValues, NodeDefs.getDefaultValues(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.editable, NodeDefs.getEditableIf(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.validations, NodeDefs.getValidationsExpressions(nodeDef))\n graphsUpdated = await _addDependencies(SurveyDependencyType.visible, NodeDefs.getVisibleIf(nodeDef))\n const maxCount = NodeDefs.getMaxCount(nodeDef)\n if (Array.isArray(maxCount)) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.maxCount, maxCount)\n }\n const minCount = NodeDefs.getMinCount(nodeDef)\n if (Array.isArray(minCount)) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.minCount, minCount)\n }\n // file name expression\n if (NodeDefs.getType(nodeDef) === NodeDefType.file) {\n const fileNameExpression = NodeDefs.getFileNameExpression(nodeDef as NodeDefFile)\n if (fileNameExpression) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.fileName, [\n NodeDefExpressionFactory.createInstance({ expression: fileNameExpression }),\n ])\n }\n }\n if (NodeDefs.isEntity(nodeDef)) {\n const enumeratingItemsExpression = NodeDefs.getEnumeratingItemsExpression(nodeDef as NodeDefEntity)\n if (enumeratingItemsExpression) {\n graphsUpdated = await _addDependencies(SurveyDependencyType.enumeratingItems, [\n NodeDefExpressionFactory.createInstance({ expression: enumeratingItemsExpression }),\n ])\n }\n }\n // parent code\n if (NodeDefs.getType(nodeDef) === NodeDefType.code) {\n const parentCodeDefUuid = NodeDefs.getParentCodeDefUuid(nodeDef as NodeDefCode)\n if (parentCodeDefUuid) {\n graphsUpdated = addDependency({\n graphs: graphsUpdated,\n type: SurveyDependencyType.parentCode,\n nodeDefUuid: parentCodeDefUuid,\n nodeDefDepUuid: nodeDef.uuid,\n sideEffect,\n })\n }\n }\n if (sideEffect) {\n survey.dependencyGraph = graphsUpdated\n return survey\n }\n return { ...survey, dependencyGraph: graphsUpdated }\n}\n\n// DELETE\n\nconst _removeNodeDefDependenciesOfType = (params: {\n graphs: SurveyDependencyGraph\n dependencyType: SurveyDependencyType\n nodeDefUuid: string\n}): SurveyDependencyGraph => {\n const { graphs, nodeDefUuid, dependencyType } = params\n\n const graphsUpdated = { ...graphs }\n let graphUpdated = { ...graphsUpdated[dependencyType] }\n // dissoc nodeDefUuid dependency as dependent\n graphUpdated = Objects.dissoc({ obj: graphUpdated, prop: nodeDefUuid })\n\n if (dependencyType !== SurveyDependencyType.onUpdate) {\n // dissoc nodeDefUuid dependency from sources (if any)\n for (const [key, dependentUuids] of Object.entries(graphUpdated)) {\n graphUpdated[key] = Arrays.removeItem(nodeDefUuid)(dependentUuids as string[])\n }\n }\n\n graphsUpdated[dependencyType] = graphUpdated\n return graphsUpdated\n}\n\nexport const removeNodeDefDependencies = (params: {\n survey: Survey\n nodeDefUuid: string\n dependencyType?: SurveyDependencyType\n}): Survey => {\n const { survey, nodeDefUuid, dependencyType = null } = params\n const graphs = getDependencyGraph(survey)\n const dependencyTypes = dependencyType ? [dependencyType] : (Object.keys(graphs) as SurveyDependencyType[])\n const graphsUpdated = dependencyTypes.reduce(\n (dependencyGraphAcc, type) =>\n _removeNodeDefDependenciesOfType({ graphs: dependencyGraphAcc, dependencyType: type, nodeDefUuid }),\n graphs\n )\n return { ...survey, dependencyGraph: graphsUpdated }\n}\n\n/**\n * Builds the dependency graph of the survey.\n *\n * @param survey - The survey.\n * @returns A copy of the survey with the dependency graph (the survey passed in is not modified).\n */\nexport const buildAndAssocDependencyGraph = async (survey: Survey): Promise<Survey> => {\n // the new graph is built from scratch with side effect (to avoid re-creating objects): it belongs only to the copy of the survey\n const sideEffect = true\n\n // add dependencies for every node def\n let surveyUpdated: Survey = { ...survey, dependencyGraph: newDependencyGraph() }\n for (const nodeDef of SurveyNodeDefs.getNodeDefsArray(survey)) {\n // sequential: each iteration updates the survey\n surveyUpdated = await addNodeDefDependencies({ nodeDef, survey: surveyUpdated, sideEffect }) // NOSONAR\n }\n return surveyUpdated\n}\n"]}
@@ -352,15 +352,7 @@ exports.getNodeDefAncestorCodes = getNodeDefAncestorCodes;
352
352
  const isNodeDefParentCode = (params) => {
353
353
  const { survey, nodeDef } = params;
354
354
  const nodeDefsArray = (0, exports.getNodeDefsArray)(survey);
355
- return nodeDefsArray.some((def) => {
356
- try {
357
- return nodeDef.uuid === def.props.parentCodeDefUuid;
358
- }
359
- catch (_a) {
360
- // ignore it: def is not a code attribute definition
361
- return;
362
- }
363
- });
355
+ return nodeDefsArray.some((def) => { var _a; return nodeDef.uuid === ((_a = def.props) === null || _a === void 0 ? void 0 : _a.parentCodeDefUuid); });
364
356
  };
365
357
  exports.isNodeDefParentCode = isNodeDefParentCode;
366
358
  const getNodeDefCategoryLevelIndex = (params) => {
@@ -1 +1 @@
1
- {"version":3,"file":"nodeDefs.js","sourceRoot":"","sources":["../../../src/survey/surveys/nodeDefs.ts"],"names":[],"mappings":"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","sourcesContent":["import { Survey } from '../survey'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefCodeProps,\n NodeDefEntity,\n NodeDefEntityChildPosition,\n NodeDefMap,\n NodeDefProps,\n NodeDefType,\n NodeDefs,\n} from '../../nodeDef'\nimport { Arrays, Objects, Queue } from '../../utils'\nimport { SystemError } from '../../error'\nimport * as NodeDefsReader from './_nodeDefs/nodeDefsReader'\nimport * as NodeDefsIndex from './_nodeDefs/nodeDefsIndex'\nimport { TraverseMethod } from '../../common'\nimport { getCategoryByUuid } from './surveysGetters'\n\nexport const getNodeDefsArray = NodeDefsReader.getNodeDefsArray\n\nexport const findNodeDefByUuid = (params: {\n survey: Survey\n uuid: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, uuid } = params\n return survey.nodeDefs?.[uuid]\n}\n\nexport const getNodeDefByUuid = (params: { survey: Survey; uuid: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, uuid } = params\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (!nodeDef) throw new SystemError('survey.nodeDefUuidNotFound', { uuid })\n return nodeDef\n}\n\nexport const findNodeDefByName = (params: {\n survey: Survey\n name: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, name } = params\n const nodeDefUuidByNameIndex = survey.nodeDefsIndex?.nodeDefUuidByName\n if (nodeDefUuidByNameIndex) {\n const uuid = nodeDefUuidByNameIndex[name]\n return findNodeDefByUuid({ survey, uuid })\n }\n return getNodeDefsArray(survey).find((nodeDef) => nodeDef.props.name === name)\n}\n\nexport const getNodeDefByName = (params: { survey: Survey; name: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, name } = params\n const nodeDef = findNodeDefByName({ survey, name })\n if (!nodeDef) {\n throw new SystemError('survey.nodeDefNameNotFound', { name })\n }\n return nodeDef\n}\n\nexport const getNodeDefsByUuids = (params: { survey: Survey; uuids: string[] }) => {\n const { survey, uuids } = params\n return uuids.map((uuid) => getNodeDefByUuid({ survey, uuid }))\n}\n\nexport const findNodeDefsByUuids = (params: {\n survey: Survey\n uuids: string[]\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, uuids } = params\n return uuids.reduce((acc: NodeDef<NodeDefType, NodeDefProps>[], uuid) => {\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (nodeDef) {\n acc.push(nodeDef)\n }\n return acc\n }, [])\n}\n\nexport const getNodeDefParent = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n if (!nodeDef.parentUuid) return undefined\n return getNodeDefByUuid({ survey, uuid: nodeDef.parentUuid }) as NodeDefEntity\n}\n\nexport const getNodeDefAncestorMultipleEntity = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n return findAncestorNodeDef({\n survey,\n nodeDef,\n predicate: (entityDef) => NodeDefs.isRoot(entityDef) || NodeDefs.isMultiple(entityDef),\n })\n}\n\nexport const isNodeDefAncestor = (params: {\n nodeDefAncestor: NodeDef<NodeDefType, NodeDefProps>\n nodeDefDescendant: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { nodeDefAncestor, nodeDefDescendant } = params\n\n return Arrays.startsWith(nodeDefDescendant.meta.h, [...nodeDefAncestor.meta.h, nodeDefAncestor.uuid])\n}\n\nexport const getNodeDefRoot = (params: { survey: Survey }): NodeDefEntity => {\n const { survey } = params\n if (!survey.nodeDefs) throw new SystemError('survey.emptyNodeDefs')\n\n const rootDefUuidInIndex = survey.nodeDefsIndex?.rootDefUuid\n\n const rootDef = rootDefUuidInIndex\n ? getNodeDefByUuid({ survey, uuid: rootDefUuidInIndex })\n : getNodeDefsArray(survey).find((nodeDef) => !nodeDef.parentUuid)\n\n if (!rootDef) throw new SystemError('survey.rootDefNotFound')\n\n return rootDef as NodeDefEntity\n}\n\nexport const getNodeDefSource = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, nodeDef } = params\n return nodeDef.virtual ? getNodeDefParent({ survey, nodeDef }) : undefined\n}\n\nexport const getNodeDefChildren = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, includeAnalysis = false, includeLayoutElements = false } = params\n\n if (!survey.nodeDefs) return []\n\n let childDefs = []\n // try to get children using index\n if (survey.nodeDefsIndex) {\n const childrenUuids = Object.keys(survey.nodeDefsIndex.childDefUuidPresenceByParentUuid?.[nodeDef.uuid] ?? {})\n childDefs = getNodeDefsByUuids({ survey, uuids: childrenUuids })\n } else {\n // calculate children\n childDefs = NodeDefsReader.calculateNodeDefChildren(nodeDef)(survey)\n }\n if (includeAnalysis && includeLayoutElements) {\n return childDefs\n }\n return childDefs.filter((childDef) => {\n if (!includeAnalysis && childDef.analysis) return false\n if (!includeLayoutElements && NodeDefs.isLayoutElement(childDef)) return false\n return true\n })\n}\n\nexport const getQualifierDefs = (params: { survey: Survey }): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey } = params\n const qualifierPresence = survey.nodeDefsIndex?.qualifierPresenceByUuid\n if (qualifierPresence) {\n const qualifierUuids = Object.keys(qualifierPresence)\n return getNodeDefsByUuids({ survey, uuids: qualifierUuids })\n } else {\n return getNodeDefsArray(survey).filter((nodeDef) => NodeDefs.isQualifier(nodeDef))\n }\n}\n\nconst getIndexInChain = (params: { survey: Survey; nodeDef: NodeDef<any> }): number => {\n const { survey, nodeDef } = params\n const areaBasedEstimatedOf = NodeDefs.getAreaBasedEstimatedOf(nodeDef)\n const areaBasedEstimatedOfNodeDef = areaBasedEstimatedOf\n ? getNodeDefByUuid({ survey, uuid: areaBasedEstimatedOf })\n : null\n const nodeDefToConsider = areaBasedEstimatedOfNodeDef ?? nodeDef\n return nodeDefToConsider?.propsAdvanced?.index ?? 0\n}\n\nconst getNodeDefChildrenUuidsSortedByLayout = (params: {\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n children: NodeDef<any>[]\n}): string[] => {\n const { nodeDef, cycle, children } = params\n\n const entityDef = nodeDef as NodeDefEntity\n\n const childrenEntitiesInOwnPageSortedUuids = NodeDefs.getChildrenEntitiesInOwnPageUuids(cycle)(entityDef) ?? []\n const layoutChildren = NodeDefs.getLayoutChildren(cycle)(entityDef) ?? []\n const childrenByUuids = children.reduce((acc: NodeDefMap, child) => {\n acc[child.uuid] = child\n return acc\n }, {})\n const childrenUuids = Object.keys(childrenByUuids)\n\n if (layoutChildren.length === 0 && childrenEntitiesInOwnPageSortedUuids.length === 0) {\n return childrenUuids\n }\n const sortedChildrenDefsInSamePageUuids = NodeDefs.isLayoutRenderTypeTable(cycle)(entityDef)\n ? (layoutChildren as string[])\n : [...(layoutChildren as NodeDefEntityChildPosition[])]\n .sort(\n (gridItem1: NodeDefEntityChildPosition, gridItem2: NodeDefEntityChildPosition) =>\n gridItem1.y - gridItem2.y || gridItem1.x - gridItem2.x\n )\n .map((gridItem) => gridItem.i)\n .filter((nodeDefUuid) => !!childrenByUuids[nodeDefUuid])\n\n const missingChildrenUuidsInLayout = childrenUuids.filter((childUuid) => {\n const childDef = childrenByUuids[childUuid]\n return (\n !sortedChildrenDefsInSamePageUuids.includes(childUuid) &&\n !childrenEntitiesInOwnPageSortedUuids.includes(childUuid) &&\n NodeDefs.isInCycle(cycle)(childDef)\n )\n })\n\n return (\n sortedChildrenDefsInSamePageUuids\n // add child uuids missing in layout at the end\n .concat(missingChildrenUuidsInLayout)\n // add child entities in own page at the very end\n .concat(childrenEntitiesInOwnPageSortedUuids)\n )\n}\n\nconst _booleanToNumber = (value: boolean | undefined): number => (value ? 1 : 0)\nconst _compareBooleans = (value1: boolean | undefined, value2: boolean | undefined): number =>\n _booleanToNumber(value1) - _booleanToNumber(value2)\n\nexport const getNodeDefChildrenSorted = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, cycle, includeAnalysis, includeLayoutElements } = params\n\n const children = getNodeDefChildren({ survey, nodeDef, includeAnalysis, includeLayoutElements }).filter(\n NodeDefs.isInCycle(cycle)\n )\n\n const childrenUuidsSortedByLayout = getNodeDefChildrenUuidsSortedByLayout({ nodeDef, cycle, children })\n\n return children.sort((child1, child2) => {\n if (includeAnalysis && (child1.analysis || child2.analysis)) {\n // analysis attribute at the end\n const analysisComparison = _compareBooleans(child1.analysis, child2.analysis)\n if (analysisComparison !== 0) return analysisComparison\n\n // sort by chain index\n const indexInChainComparison =\n getIndexInChain({ survey, nodeDef: child1 }) - getIndexInChain({ survey, nodeDef: child2 })\n if (indexInChainComparison !== 0) return indexInChainComparison\n\n // one node def is the area base estimated of the other\n const areaBasedEstimatedOfComparison = _compareBooleans(\n !!NodeDefs.getAreaBasedEstimatedOf(child1),\n !!NodeDefs.getAreaBasedEstimatedOf(child2)\n )\n if (areaBasedEstimatedOfComparison !== 0) return areaBasedEstimatedOfComparison\n\n return (child1.id ?? 0) - (child2.id ?? 0)\n }\n // keep sorting as defined in layout props\n return childrenUuidsSortedByLayout.indexOf(child1.uuid) - childrenUuidsSortedByLayout.indexOf(child2.uuid)\n })\n}\n\nexport const visitAncestorsAndSelfNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n stopIfFn?: () => boolean\n includeSelf?: boolean\n}): void => {\n const { survey, nodeDef, visitor, stopIfFn, includeSelf = true } = params\n if (includeSelf) {\n visitor(nodeDef)\n }\n let currentParent = getNodeDefParent({ survey, nodeDef })\n while (currentParent) {\n visitor(currentParent)\n if (stopIfFn?.()) {\n break\n }\n currentParent = getNodeDefParent({ survey, nodeDef: currentParent })\n }\n}\n\nexport const findAncestorNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n predicate: (entityDef: NodeDefEntity) => boolean\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef, predicate } = params\n let result: NodeDefEntity | undefined = undefined\n visitAncestorsAndSelfNodeDef({\n survey,\n nodeDef,\n // ancestors only: the node def itself is never an ancestor (e.g. a multiple attribute)\n includeSelf: false,\n visitor: (entityDef) => {\n if (predicate(entityDef)) {\n result = entityDef\n }\n },\n stopIfFn: () => !!result,\n })\n return result\n}\n\ntype NodeDefTraverseParams = {\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n shouldTraverse: (nodeDef: NodeDef<any>) => boolean\n getChildren: (nodeDef: NodeDef<any>) => NodeDef<any>[]\n}\n\nconst traverseBreadthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const queue = new Queue()\n\n queue.enqueue(nodeDef)\n\n while (!queue.isEmpty()) {\n const visitedNodeDef = queue.dequeue()\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n queue.enqueueItems(getChildren(visitedNodeDef))\n }\n }\n}\n\nconst traverseDepthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const stack: NodeDef<any>[] = []\n\n stack.push(nodeDef)\n\n while (stack.length > 0) {\n const visitedNodeDef = stack.pop()!\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n const children = getChildren(visitedNodeDef)\n // add children to stack in reverse order\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push(children[index])\n }\n }\n }\n}\n\nexport const visitDescendantsAndSelfNodeDef = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n traverseOnlySingleEntities?: boolean\n}) => {\n const {\n survey,\n cycle,\n nodeDef,\n visitor,\n includeAnalysis = false,\n traverseMethod = TraverseMethod.bfs,\n traverseOnlySingleEntities = false,\n } = params\n\n const getNodeDefChildrenInternal = (visitedNodeDef: NodeDef<any>) =>\n Objects.isEmpty(cycle)\n ? getNodeDefChildren({ survey, nodeDef: visitedNodeDef, includeAnalysis })\n : getNodeDefChildrenSorted({ survey, nodeDef: visitedNodeDef, cycle: cycle!, includeAnalysis })\n\n const shouldTraverse = (visitedNodeDef: NodeDef<any>): boolean =>\n visitedNodeDef.type === NodeDefType.entity &&\n (visitedNodeDef === nodeDef ||\n NodeDefs.isRoot(visitedNodeDef) ||\n !traverseOnlySingleEntities ||\n NodeDefs.isSingle(visitedNodeDef))\n\n const traverseParams = { nodeDef, visitor, shouldTraverse, getChildren: getNodeDefChildrenInternal }\n if (traverseMethod === TraverseMethod.bfs) {\n traverseBreadthFirst(traverseParams)\n } else {\n traverseDepthFirst(traverseParams)\n }\n}\n\nexport const visitNodeDefs = (params: {\n survey: Survey\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n}) => {\n const { survey, visitor, traverseMethod = TraverseMethod.bfs, includeAnalysis = false } = params\n const rootDef = getNodeDefRoot({ survey })\n return visitDescendantsAndSelfNodeDef({ survey, nodeDef: rootDef, visitor, traverseMethod, includeAnalysis })\n}\n\n// Node Def Code\nexport const getNodeDefParentCode = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode | undefined => {\n const { survey, nodeDef } = params\n const parentCodeDefUuid = nodeDef.props.parentCodeDefUuid\n if (!parentCodeDefUuid) return undefined\n const parentCodeDef = getNodeDefByUuid({ survey, uuid: parentCodeDefUuid })\n return parentCodeDef as NodeDefCode\n}\n\nexport const getNodeDefAncestorCodes = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n const ancestors = []\n let currentParentCode = getNodeDefParentCode({ survey, nodeDef })\n while (currentParentCode) {\n ancestors.unshift(currentParentCode)\n currentParentCode = getNodeDefParentCode({ survey, nodeDef: currentParentCode })\n }\n return ancestors\n}\n\nexport const isNodeDefParentCode = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { survey, nodeDef } = params\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.some((def) => {\n try {\n return nodeDef.uuid === (def as NodeDef<NodeDefType.code, NodeDefCodeProps>).props.parentCodeDefUuid\n } catch {\n // ignore it: def is not a code attribute definition\n return\n }\n })\n}\n\nexport const getNodeDefCategoryLevelIndex = (params: { survey: Survey; nodeDef: NodeDefCode }): number => {\n const { survey, nodeDef } = params\n const parentCodeNodeDef = getNodeDefParentCode({ survey, nodeDef })\n return parentCodeNodeDef ? 1 + getNodeDefCategoryLevelIndex({ survey, nodeDef: parentCodeNodeDef }) : 0\n}\n\nexport const getDependentCodeAttributeDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n\n const categoryUuid = NodeDefs.getCategoryUuid(nodeDef)\n if (!categoryUuid) return []\n\n const category = getCategoryByUuid({ survey, categoryUuid })\n const levelsCount = Object.keys(category?.levels ?? {}).length\n if (levelsCount <= 1) return []\n\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.filter(\n (def) => def.type === NodeDefType.code && NodeDefs.getParentCodeDefUuid(def as NodeDefCode) === nodeDef.uuid\n ) as NodeDefCode[]\n}\n\nexport const getDependentEnumeratedEntityDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefEntity[] => {\n const { survey, nodeDef } = params\n const result: NodeDefEntity[] = []\n const dependentCodeAttributeDefs = getDependentCodeAttributeDefs({ survey, nodeDef })\n for (const dependentCodeDef of dependentCodeAttributeDefs) {\n if (NodeDefs.isKey(dependentCodeDef)) {\n const entityDef = getNodeDefAncestorMultipleEntity({ survey, nodeDef: dependentCodeDef })\n if (entityDef && NodeDefs.isEnumerate(entityDef)) {\n result.push(entityDef)\n }\n }\n }\n return result\n}\n\nexport const getNodeDefKeys = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle?: string\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) =>\n NodeDefs.isKey(visitedNodeDef) &&\n !visitedNodeDef.deleted &&\n (Objects.isEmpty(cycle) || NodeDefs.isInCycle(cycle!)(visitedNodeDef)),\n })\n}\n\nexport const getRootKeys = (params: { survey: Survey; cycle?: string }) => {\n const { survey, cycle } = params\n const rootDef = getNodeDefRoot({ survey })\n return getNodeDefKeys({ survey, nodeDef: rootDef, cycle })\n}\n\nexport const getNodeDefEnumerator = (params: { survey: Survey; entityDef: NodeDefEntity }): NodeDefCode | undefined => {\n const { survey, entityDef } = params\n if (!entityDef.props.enumerate) return undefined\n\n const children = getNodeDefChildren({ survey, nodeDef: entityDef })\n const codeAttributeKeys = children.filter((child) => child.type === NodeDefType.code && child.props.key)\n if (codeAttributeKeys.length === 1) {\n return codeAttributeKeys[0] as NodeDefCode\n }\n return undefined\n}\n\nexport const isNodeDefEnumerator = (params: { survey: Survey; nodeDef: NodeDef<NodeDefType> }): boolean => {\n const { survey, nodeDef } = params\n if (nodeDef.type !== NodeDefType.code) return false\n const entityDef = getNodeDefParent({ survey, nodeDef })\n if (!entityDef) return false\n const enumerator = getNodeDefEnumerator({ survey, entityDef })\n return enumerator?.uuid === nodeDef.uuid\n}\n\nexport const getDescendantsInSingleEntities = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n predicate?: (visitedNodeDef: NodeDef<NodeDefType, NodeDefProps>) => boolean\n includeAnalysis?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef, predicate, includeAnalysis } = params\n const result: NodeDef<any>[] = []\n visitDescendantsAndSelfNodeDef({\n survey,\n cycle,\n nodeDef,\n visitor: (visitedNodeDef) => {\n if (!predicate || predicate(visitedNodeDef)) {\n result.push(visitedNodeDef)\n }\n },\n includeAnalysis,\n traverseOnlySingleEntities: true,\n })\n return result\n}\n\nexport const getNodeDefsIncludedInMultipleEntitySummary = (params: {\n survey: Survey\n cycle: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) => NodeDefs.isIncludedInMultipleEntitySummary(cycle)(visitedNodeDef),\n })\n}\n\nconst { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex } =\n NodeDefsIndex\nexport { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex }\n"]}
1
+ {"version":3,"file":"nodeDefs.js","sourceRoot":"","sources":["../../../src/survey/surveys/nodeDefs.ts"],"names":[],"mappings":"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","sourcesContent":["import { Survey } from '../survey'\nimport {\n NodeDef,\n NodeDefCode,\n NodeDefCodeProps,\n NodeDefEntity,\n NodeDefEntityChildPosition,\n NodeDefMap,\n NodeDefProps,\n NodeDefType,\n NodeDefs,\n} from '../../nodeDef'\nimport { Arrays, Objects, Queue } from '../../utils'\nimport { SystemError } from '../../error'\nimport * as NodeDefsReader from './_nodeDefs/nodeDefsReader'\nimport * as NodeDefsIndex from './_nodeDefs/nodeDefsIndex'\nimport { TraverseMethod } from '../../common'\nimport { getCategoryByUuid } from './surveysGetters'\n\nexport const getNodeDefsArray = NodeDefsReader.getNodeDefsArray\n\nexport const findNodeDefByUuid = (params: {\n survey: Survey\n uuid: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, uuid } = params\n return survey.nodeDefs?.[uuid]\n}\n\nexport const getNodeDefByUuid = (params: { survey: Survey; uuid: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, uuid } = params\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (!nodeDef) throw new SystemError('survey.nodeDefUuidNotFound', { uuid })\n return nodeDef\n}\n\nexport const findNodeDefByName = (params: {\n survey: Survey\n name: string\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, name } = params\n const nodeDefUuidByNameIndex = survey.nodeDefsIndex?.nodeDefUuidByName\n if (nodeDefUuidByNameIndex) {\n const uuid = nodeDefUuidByNameIndex[name]\n return findNodeDefByUuid({ survey, uuid })\n }\n return getNodeDefsArray(survey).find((nodeDef) => nodeDef.props.name === name)\n}\n\nexport const getNodeDefByName = (params: { survey: Survey; name: string }): NodeDef<NodeDefType, NodeDefProps> => {\n const { survey, name } = params\n const nodeDef = findNodeDefByName({ survey, name })\n if (!nodeDef) {\n throw new SystemError('survey.nodeDefNameNotFound', { name })\n }\n return nodeDef\n}\n\nexport const getNodeDefsByUuids = (params: { survey: Survey; uuids: string[] }) => {\n const { survey, uuids } = params\n return uuids.map((uuid) => getNodeDefByUuid({ survey, uuid }))\n}\n\nexport const findNodeDefsByUuids = (params: {\n survey: Survey\n uuids: string[]\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, uuids } = params\n return uuids.reduce((acc: NodeDef<NodeDefType, NodeDefProps>[], uuid) => {\n const nodeDef = findNodeDefByUuid({ survey, uuid })\n if (nodeDef) {\n acc.push(nodeDef)\n }\n return acc\n }, [])\n}\n\nexport const getNodeDefParent = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n if (!nodeDef.parentUuid) return undefined\n return getNodeDefByUuid({ survey, uuid: nodeDef.parentUuid }) as NodeDefEntity\n}\n\nexport const getNodeDefAncestorMultipleEntity = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef } = params\n return findAncestorNodeDef({\n survey,\n nodeDef,\n predicate: (entityDef) => NodeDefs.isRoot(entityDef) || NodeDefs.isMultiple(entityDef),\n })\n}\n\nexport const isNodeDefAncestor = (params: {\n nodeDefAncestor: NodeDef<NodeDefType, NodeDefProps>\n nodeDefDescendant: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { nodeDefAncestor, nodeDefDescendant } = params\n\n return Arrays.startsWith(nodeDefDescendant.meta.h, [...nodeDefAncestor.meta.h, nodeDefAncestor.uuid])\n}\n\nexport const getNodeDefRoot = (params: { survey: Survey }): NodeDefEntity => {\n const { survey } = params\n if (!survey.nodeDefs) throw new SystemError('survey.emptyNodeDefs')\n\n const rootDefUuidInIndex = survey.nodeDefsIndex?.rootDefUuid\n\n const rootDef = rootDefUuidInIndex\n ? getNodeDefByUuid({ survey, uuid: rootDefUuidInIndex })\n : getNodeDefsArray(survey).find((nodeDef) => !nodeDef.parentUuid)\n\n if (!rootDef) throw new SystemError('survey.rootDefNotFound')\n\n return rootDef as NodeDefEntity\n}\n\nexport const getNodeDefSource = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps> | undefined => {\n const { survey, nodeDef } = params\n return nodeDef.virtual ? getNodeDefParent({ survey, nodeDef }) : undefined\n}\n\nexport const getNodeDefChildren = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, includeAnalysis = false, includeLayoutElements = false } = params\n\n if (!survey.nodeDefs) return []\n\n let childDefs = []\n // try to get children using index\n if (survey.nodeDefsIndex) {\n const childrenUuids = Object.keys(survey.nodeDefsIndex.childDefUuidPresenceByParentUuid?.[nodeDef.uuid] ?? {})\n childDefs = getNodeDefsByUuids({ survey, uuids: childrenUuids })\n } else {\n // calculate children\n childDefs = NodeDefsReader.calculateNodeDefChildren(nodeDef)(survey)\n }\n if (includeAnalysis && includeLayoutElements) {\n return childDefs\n }\n return childDefs.filter((childDef) => {\n if (!includeAnalysis && childDef.analysis) return false\n if (!includeLayoutElements && NodeDefs.isLayoutElement(childDef)) return false\n return true\n })\n}\n\nexport const getQualifierDefs = (params: { survey: Survey }): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey } = params\n const qualifierPresence = survey.nodeDefsIndex?.qualifierPresenceByUuid\n if (qualifierPresence) {\n const qualifierUuids = Object.keys(qualifierPresence)\n return getNodeDefsByUuids({ survey, uuids: qualifierUuids })\n } else {\n return getNodeDefsArray(survey).filter((nodeDef) => NodeDefs.isQualifier(nodeDef))\n }\n}\n\nconst getIndexInChain = (params: { survey: Survey; nodeDef: NodeDef<any> }): number => {\n const { survey, nodeDef } = params\n const areaBasedEstimatedOf = NodeDefs.getAreaBasedEstimatedOf(nodeDef)\n const areaBasedEstimatedOfNodeDef = areaBasedEstimatedOf\n ? getNodeDefByUuid({ survey, uuid: areaBasedEstimatedOf })\n : null\n const nodeDefToConsider = areaBasedEstimatedOfNodeDef ?? nodeDef\n return nodeDefToConsider?.propsAdvanced?.index ?? 0\n}\n\nconst getNodeDefChildrenUuidsSortedByLayout = (params: {\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n children: NodeDef<any>[]\n}): string[] => {\n const { nodeDef, cycle, children } = params\n\n const entityDef = nodeDef as NodeDefEntity\n\n const childrenEntitiesInOwnPageSortedUuids = NodeDefs.getChildrenEntitiesInOwnPageUuids(cycle)(entityDef) ?? []\n const layoutChildren = NodeDefs.getLayoutChildren(cycle)(entityDef) ?? []\n const childrenByUuids = children.reduce((acc: NodeDefMap, child) => {\n acc[child.uuid] = child\n return acc\n }, {})\n const childrenUuids = Object.keys(childrenByUuids)\n\n if (layoutChildren.length === 0 && childrenEntitiesInOwnPageSortedUuids.length === 0) {\n return childrenUuids\n }\n const sortedChildrenDefsInSamePageUuids = NodeDefs.isLayoutRenderTypeTable(cycle)(entityDef)\n ? (layoutChildren as string[])\n : [...(layoutChildren as NodeDefEntityChildPosition[])]\n .sort(\n (gridItem1: NodeDefEntityChildPosition, gridItem2: NodeDefEntityChildPosition) =>\n gridItem1.y - gridItem2.y || gridItem1.x - gridItem2.x\n )\n .map((gridItem) => gridItem.i)\n .filter((nodeDefUuid) => !!childrenByUuids[nodeDefUuid])\n\n const missingChildrenUuidsInLayout = childrenUuids.filter((childUuid) => {\n const childDef = childrenByUuids[childUuid]\n return (\n !sortedChildrenDefsInSamePageUuids.includes(childUuid) &&\n !childrenEntitiesInOwnPageSortedUuids.includes(childUuid) &&\n NodeDefs.isInCycle(cycle)(childDef)\n )\n })\n\n return (\n sortedChildrenDefsInSamePageUuids\n // add child uuids missing in layout at the end\n .concat(missingChildrenUuidsInLayout)\n // add child entities in own page at the very end\n .concat(childrenEntitiesInOwnPageSortedUuids)\n )\n}\n\nconst _booleanToNumber = (value: boolean | undefined): number => (value ? 1 : 0)\nconst _compareBooleans = (value1: boolean | undefined, value2: boolean | undefined): number =>\n _booleanToNumber(value1) - _booleanToNumber(value2)\n\nexport const getNodeDefChildrenSorted = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle: string\n includeAnalysis?: boolean\n includeLayoutElements?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, nodeDef, cycle, includeAnalysis, includeLayoutElements } = params\n\n const children = getNodeDefChildren({ survey, nodeDef, includeAnalysis, includeLayoutElements }).filter(\n NodeDefs.isInCycle(cycle)\n )\n\n const childrenUuidsSortedByLayout = getNodeDefChildrenUuidsSortedByLayout({ nodeDef, cycle, children })\n\n return children.sort((child1, child2) => {\n if (includeAnalysis && (child1.analysis || child2.analysis)) {\n // analysis attribute at the end\n const analysisComparison = _compareBooleans(child1.analysis, child2.analysis)\n if (analysisComparison !== 0) return analysisComparison\n\n // sort by chain index\n const indexInChainComparison =\n getIndexInChain({ survey, nodeDef: child1 }) - getIndexInChain({ survey, nodeDef: child2 })\n if (indexInChainComparison !== 0) return indexInChainComparison\n\n // one node def is the area base estimated of the other\n const areaBasedEstimatedOfComparison = _compareBooleans(\n !!NodeDefs.getAreaBasedEstimatedOf(child1),\n !!NodeDefs.getAreaBasedEstimatedOf(child2)\n )\n if (areaBasedEstimatedOfComparison !== 0) return areaBasedEstimatedOfComparison\n\n return (child1.id ?? 0) - (child2.id ?? 0)\n }\n // keep sorting as defined in layout props\n return childrenUuidsSortedByLayout.indexOf(child1.uuid) - childrenUuidsSortedByLayout.indexOf(child2.uuid)\n })\n}\n\nexport const visitAncestorsAndSelfNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n stopIfFn?: () => boolean\n includeSelf?: boolean\n}): void => {\n const { survey, nodeDef, visitor, stopIfFn, includeSelf = true } = params\n if (includeSelf) {\n visitor(nodeDef)\n }\n let currentParent = getNodeDefParent({ survey, nodeDef })\n while (currentParent) {\n visitor(currentParent)\n if (stopIfFn?.()) {\n break\n }\n currentParent = getNodeDefParent({ survey, nodeDef: currentParent })\n }\n}\n\nexport const findAncestorNodeDef = (params: {\n survey: Survey\n nodeDef: NodeDef<any>\n predicate: (entityDef: NodeDefEntity) => boolean\n}): NodeDefEntity | undefined => {\n const { survey, nodeDef, predicate } = params\n let result: NodeDefEntity | undefined = undefined\n visitAncestorsAndSelfNodeDef({\n survey,\n nodeDef,\n // ancestors only: the node def itself is never an ancestor (e.g. a multiple attribute)\n includeSelf: false,\n visitor: (entityDef) => {\n if (predicate(entityDef)) {\n result = entityDef\n }\n },\n stopIfFn: () => !!result,\n })\n return result\n}\n\ntype NodeDefTraverseParams = {\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n shouldTraverse: (nodeDef: NodeDef<any>) => boolean\n getChildren: (nodeDef: NodeDef<any>) => NodeDef<any>[]\n}\n\nconst traverseBreadthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const queue = new Queue()\n\n queue.enqueue(nodeDef)\n\n while (!queue.isEmpty()) {\n const visitedNodeDef = queue.dequeue()\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n queue.enqueueItems(getChildren(visitedNodeDef))\n }\n }\n}\n\nconst traverseDepthFirst = ({ nodeDef, visitor, shouldTraverse, getChildren }: NodeDefTraverseParams) => {\n const stack: NodeDef<any>[] = []\n\n stack.push(nodeDef)\n\n while (stack.length > 0) {\n const visitedNodeDef = stack.pop()!\n\n visitor(visitedNodeDef)\n\n if (shouldTraverse(visitedNodeDef)) {\n const children = getChildren(visitedNodeDef)\n // add children to stack in reverse order\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push(children[index])\n }\n }\n }\n}\n\nexport const visitDescendantsAndSelfNodeDef = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<any>\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n traverseOnlySingleEntities?: boolean\n}) => {\n const {\n survey,\n cycle,\n nodeDef,\n visitor,\n includeAnalysis = false,\n traverseMethod = TraverseMethod.bfs,\n traverseOnlySingleEntities = false,\n } = params\n\n const getNodeDefChildrenInternal = (visitedNodeDef: NodeDef<any>) =>\n Objects.isEmpty(cycle)\n ? getNodeDefChildren({ survey, nodeDef: visitedNodeDef, includeAnalysis })\n : getNodeDefChildrenSorted({ survey, nodeDef: visitedNodeDef, cycle: cycle!, includeAnalysis })\n\n const shouldTraverse = (visitedNodeDef: NodeDef<any>): boolean =>\n visitedNodeDef.type === NodeDefType.entity &&\n (visitedNodeDef === nodeDef ||\n NodeDefs.isRoot(visitedNodeDef) ||\n !traverseOnlySingleEntities ||\n NodeDefs.isSingle(visitedNodeDef))\n\n const traverseParams = { nodeDef, visitor, shouldTraverse, getChildren: getNodeDefChildrenInternal }\n if (traverseMethod === TraverseMethod.bfs) {\n traverseBreadthFirst(traverseParams)\n } else {\n traverseDepthFirst(traverseParams)\n }\n}\n\nexport const visitNodeDefs = (params: {\n survey: Survey\n visitor: (nodeDef: NodeDef<any>) => void\n includeAnalysis?: boolean\n traverseMethod?: TraverseMethod\n}) => {\n const { survey, visitor, traverseMethod = TraverseMethod.bfs, includeAnalysis = false } = params\n const rootDef = getNodeDefRoot({ survey })\n return visitDescendantsAndSelfNodeDef({ survey, nodeDef: rootDef, visitor, traverseMethod, includeAnalysis })\n}\n\n// Node Def Code\nexport const getNodeDefParentCode = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode | undefined => {\n const { survey, nodeDef } = params\n const parentCodeDefUuid = nodeDef.props.parentCodeDefUuid\n if (!parentCodeDefUuid) return undefined\n const parentCodeDef = getNodeDefByUuid({ survey, uuid: parentCodeDefUuid })\n return parentCodeDef as NodeDefCode\n}\n\nexport const getNodeDefAncestorCodes = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n const ancestors = []\n let currentParentCode = getNodeDefParentCode({ survey, nodeDef })\n while (currentParentCode) {\n ancestors.unshift(currentParentCode)\n currentParentCode = getNodeDefParentCode({ survey, nodeDef: currentParentCode })\n }\n return ancestors\n}\n\nexport const isNodeDefParentCode = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): boolean => {\n const { survey, nodeDef } = params\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.some(\n (def) => nodeDef.uuid === (def as NodeDef<NodeDefType.code, NodeDefCodeProps>).props?.parentCodeDefUuid\n )\n}\n\nexport const getNodeDefCategoryLevelIndex = (params: { survey: Survey; nodeDef: NodeDefCode }): number => {\n const { survey, nodeDef } = params\n const parentCodeNodeDef = getNodeDefParentCode({ survey, nodeDef })\n return parentCodeNodeDef ? 1 + getNodeDefCategoryLevelIndex({ survey, nodeDef: parentCodeNodeDef }) : 0\n}\n\nexport const getDependentCodeAttributeDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefCode[] => {\n const { survey, nodeDef } = params\n\n const categoryUuid = NodeDefs.getCategoryUuid(nodeDef)\n if (!categoryUuid) return []\n\n const category = getCategoryByUuid({ survey, categoryUuid })\n const levelsCount = Object.keys(category?.levels ?? {}).length\n if (levelsCount <= 1) return []\n\n const nodeDefsArray = getNodeDefsArray(survey)\n return nodeDefsArray.filter(\n (def) => def.type === NodeDefType.code && NodeDefs.getParentCodeDefUuid(def as NodeDefCode) === nodeDef.uuid\n ) as NodeDefCode[]\n}\n\nexport const getDependentEnumeratedEntityDefs = (params: { survey: Survey; nodeDef: NodeDefCode }): NodeDefEntity[] => {\n const { survey, nodeDef } = params\n const result: NodeDefEntity[] = []\n const dependentCodeAttributeDefs = getDependentCodeAttributeDefs({ survey, nodeDef })\n for (const dependentCodeDef of dependentCodeAttributeDefs) {\n if (NodeDefs.isKey(dependentCodeDef)) {\n const entityDef = getNodeDefAncestorMultipleEntity({ survey, nodeDef: dependentCodeDef })\n if (entityDef && NodeDefs.isEnumerate(entityDef)) {\n result.push(entityDef)\n }\n }\n }\n return result\n}\n\nexport const getNodeDefKeys = (params: {\n survey: Survey\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n cycle?: string\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) =>\n NodeDefs.isKey(visitedNodeDef) &&\n !visitedNodeDef.deleted &&\n (Objects.isEmpty(cycle) || NodeDefs.isInCycle(cycle!)(visitedNodeDef)),\n })\n}\n\nexport const getRootKeys = (params: { survey: Survey; cycle?: string }) => {\n const { survey, cycle } = params\n const rootDef = getNodeDefRoot({ survey })\n return getNodeDefKeys({ survey, nodeDef: rootDef, cycle })\n}\n\nexport const getNodeDefEnumerator = (params: { survey: Survey; entityDef: NodeDefEntity }): NodeDefCode | undefined => {\n const { survey, entityDef } = params\n if (!entityDef.props.enumerate) return undefined\n\n const children = getNodeDefChildren({ survey, nodeDef: entityDef })\n const codeAttributeKeys = children.filter((child) => child.type === NodeDefType.code && child.props.key)\n if (codeAttributeKeys.length === 1) {\n return codeAttributeKeys[0] as NodeDefCode\n }\n return undefined\n}\n\nexport const isNodeDefEnumerator = (params: { survey: Survey; nodeDef: NodeDef<NodeDefType> }): boolean => {\n const { survey, nodeDef } = params\n if (nodeDef.type !== NodeDefType.code) return false\n const entityDef = getNodeDefParent({ survey, nodeDef })\n if (!entityDef) return false\n const enumerator = getNodeDefEnumerator({ survey, entityDef })\n return enumerator?.uuid === nodeDef.uuid\n}\n\nexport const getDescendantsInSingleEntities = (params: {\n survey: Survey\n cycle?: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n predicate?: (visitedNodeDef: NodeDef<NodeDefType, NodeDefProps>) => boolean\n includeAnalysis?: boolean\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef, predicate, includeAnalysis } = params\n const result: NodeDef<any>[] = []\n visitDescendantsAndSelfNodeDef({\n survey,\n cycle,\n nodeDef,\n visitor: (visitedNodeDef) => {\n if (!predicate || predicate(visitedNodeDef)) {\n result.push(visitedNodeDef)\n }\n },\n includeAnalysis,\n traverseOnlySingleEntities: true,\n })\n return result\n}\n\nexport const getNodeDefsIncludedInMultipleEntitySummary = (params: {\n survey: Survey\n cycle: string\n nodeDef: NodeDef<NodeDefType, NodeDefProps>\n}): NodeDef<NodeDefType, NodeDefProps>[] => {\n const { survey, cycle, nodeDef } = params\n return getDescendantsInSingleEntities({\n survey,\n cycle,\n nodeDef,\n predicate: (visitedNodeDef) => NodeDefs.isIncludedInMultipleEntitySummary(cycle)(visitedNodeDef),\n })\n}\n\nconst { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex } =\n NodeDefsIndex\nexport { buildAndAssocNodeDefsIndex, addNodeDefToIndex, updateNodeDefUuidByNameIndex, deleteNodeDefIndex }\n"]}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "name": "OpenForis",
5
5
  "email": "openforis.arena@gmail.com"
6
6
  },
7
- "version": "2.5.2",
7
+ "version": "2.5.4",
8
8
  "description": "Arena core module",
9
9
  "repository": {
10
10
  "type": "git",