occam-furtle 2.0.86 → 2.0.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +43 -12
  2. package/lib/constants.js +5 -1
  3. package/lib/context/block.js +8 -8
  4. package/lib/dom/assignment/array.js +10 -6
  5. package/lib/dom/assignment/object.js +10 -6
  6. package/lib/dom/assignment/variable.js +3 -2
  7. package/lib/dom/assignments/variable.js +10 -6
  8. package/lib/dom/block/return.js +21 -5
  9. package/lib/dom/comparison.js +2 -14
  10. package/lib/dom/declaration/procedure.js +6 -2
  11. package/lib/dom/error.js +48 -3
  12. package/lib/dom/every.js +7 -3
  13. package/lib/dom/label.js +52 -7
  14. package/lib/dom/parameter/named.js +48 -3
  15. package/lib/dom/parameter.js +48 -4
  16. package/lib/dom/parameters/named.js +13 -9
  17. package/lib/dom/parameters.js +17 -27
  18. package/lib/dom/procedure.js +10 -6
  19. package/lib/dom/procedureCall.js +10 -6
  20. package/lib/dom/query/node.js +10 -6
  21. package/lib/dom/query/nodes.js +10 -6
  22. package/lib/dom/reduce.js +8 -4
  23. package/lib/dom/reference.js +55 -10
  24. package/lib/dom/some.js +7 -3
  25. package/lib/dom/statement/return.js +7 -3
  26. package/lib/dom/step.js +6 -2
  27. package/lib/dom/ternary.js +10 -6
  28. package/lib/dom/value/bitwise.js +10 -6
  29. package/lib/dom/value/bracketed.js +7 -3
  30. package/lib/dom/value/negated.js +10 -6
  31. package/lib/dom/value.js +35 -39
  32. package/lib/dom/values.js +5 -19
  33. package/lib/dom/variable.js +3 -3
  34. package/package.json +1 -1
  35. package/src/constants.js +1 -0
  36. package/src/context/block.js +8 -8
  37. package/src/dom/assignment/array.js +15 -8
  38. package/src/dom/assignment/object.js +15 -8
  39. package/src/dom/assignment/variable.js +2 -1
  40. package/src/dom/assignments/variable.js +16 -8
  41. package/src/dom/block/return.js +25 -4
  42. package/src/dom/comparison.js +1 -16
  43. package/src/dom/declaration/procedure.js +10 -4
  44. package/src/dom/error.js +12 -3
  45. package/src/dom/every.js +12 -6
  46. package/src/dom/label.js +20 -10
  47. package/src/dom/parameter/named.js +14 -6
  48. package/src/dom/parameter.js +12 -5
  49. package/src/dom/parameters/named.js +23 -16
  50. package/src/dom/parameters.js +32 -47
  51. package/src/dom/procedure.js +19 -15
  52. package/src/dom/procedureCall.js +15 -9
  53. package/src/dom/query/node.js +19 -12
  54. package/src/dom/query/nodes.js +19 -12
  55. package/src/dom/reduce.js +17 -14
  56. package/src/dom/reference.js +21 -15
  57. package/src/dom/some.js +12 -6
  58. package/src/dom/statement/return.js +13 -6
  59. package/src/dom/step.js +12 -6
  60. package/src/dom/ternary.js +21 -14
  61. package/src/dom/value/bitwise.js +19 -12
  62. package/src/dom/value/bracketed.js +12 -6
  63. package/src/dom/value/negated.js +16 -9
  64. package/src/dom/value.js +42 -47
  65. package/src/dom/values.js +5 -19
  66. package/src/dom/variable.js +6 -4
package/src/constants.js CHANGED
@@ -5,6 +5,7 @@ export const TRUE = "true";
5
5
  export const FALSE = "false";
6
6
  export const FUNCTION = "function";
7
7
  export const EQUAL_TO = "==";
8
+ export const UNDERSCORE = "_";
8
9
  export const CONJUNCTION = "&&";
9
10
  export const DISJUNCTION = "||";
10
11
  export const EMPTY_STRING = "";
@@ -16,12 +16,12 @@ export default class BlockContext {
16
16
  return this.context;
17
17
  }
18
18
 
19
- getVariables(blocked = false) {
19
+ getVariables(nested = true) {
20
20
  const variables = [];
21
21
 
22
22
  push(variables, this.variables);
23
23
 
24
- if (!blocked) {
24
+ if (nested) {
25
25
  const contextVariables = this.context.getVariables();
26
26
 
27
27
  push(variables, contextVariables);
@@ -36,8 +36,8 @@ export default class BlockContext {
36
36
 
37
37
  isProcedurePresentByReference(reference) { return this.context.isProcedurePresentByReference(reference); }
38
38
 
39
- findVariableByVariableName(variableName, blocked = false) {
40
- const variables = this.getVariables(blocked),
39
+ findVariableByVariableName(variableName, nested = true) {
40
+ const variables = this.getVariables(nested),
41
41
  variable = variables.find((variable) => {
42
42
  const variableNameMatches = variable.matchVariableName(variableName);
43
43
 
@@ -49,18 +49,18 @@ export default class BlockContext {
49
49
  return variable;
50
50
  }
51
51
 
52
- isVariablePresentByVariableName(variableName, blocked = false) {
53
- const variable = this.findVariableByVariableName(variableName, blocked),
52
+ isVariablePresentByVariableName(variableName, nested = true) {
53
+ const variable = this.findVariableByVariableName(variableName, nested),
54
54
  variablePresent = (variable !== null);
55
55
 
56
56
  return variablePresent;
57
57
  }
58
58
 
59
59
  addVariable(variable) {
60
- const blocked = true,
60
+ const nested = false,
61
61
  variableName = variable.getName(),
62
62
  variableString = variable.getString(),
63
- variablePresent = this.isVariablePresentByVariableName(variableName, blocked);
63
+ variablePresent = this.isVariablePresentByVariableName(variableName, nested);
64
64
 
65
65
  if (variablePresent) {
66
66
  const message = `The '${variableString}' variable is already present.'`,
@@ -7,7 +7,7 @@ import { nodeQuery } from "../../utilities/query";
7
7
  import { domAssigned } from "../../dom";
8
8
  import { NODE_TYPE, NODES_TYPE } from "../../types";
9
9
 
10
- const arrayAssignmentNodeQuery = nodeQuery("/step/arrayAssignment");
10
+ const stepArrayAssignmentNodeQuery = nodeQuery("/step/arrayAssignment");
11
11
 
12
12
  export default domAssigned(class ArrayAssigment {
13
13
  constructor(string, variable, parameters) {
@@ -98,21 +98,28 @@ export default domAssigned(class ArrayAssigment {
98
98
  static fromStepNode(stepNode, context) {
99
99
  let arrayAssignment = null;
100
100
 
101
- const arrayAssignmentNode = arrayAssignmentNodeQuery(stepNode);
101
+ const stepArrayAssignmentNode = stepArrayAssignmentNodeQuery(stepNode);
102
102
 
103
- if (arrayAssignmentNode !== null) {
104
- const { Variable, Parameters } = dom,
105
- parameters = Parameters.fromArrayAssignmentNode(arrayAssignmentNode, context),
106
- variable = Variable.fromArrayAssignmentNode(arrayAssignmentNode, context),
107
- string = stringFromVariableAndParameters(variable, parameters, context);
103
+ if (stepArrayAssignmentNode !== null) {
104
+ const arrayAssignmentNode = stepArrayAssignmentNode; ///
108
105
 
109
- arrayAssignment = new ArrayAssigment(string, variable, parameters);
106
+ arrayAssignment = arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, context);
110
107
  }
111
108
 
112
109
  return arrayAssignment;
113
110
  }
114
111
  });
115
112
 
113
+ function arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, context) {
114
+ const { Variable, Parameters, ArrayAssignment } = dom,
115
+ parameters = Parameters.fromArrayAssignmentNode(arrayAssignmentNode, context),
116
+ variable = Variable.fromArrayAssignmentNode(arrayAssignmentNode, context),
117
+ string = stringFromVariableAndParameters(variable, parameters, context),
118
+ arrayAssignment = new ArrayAssignment(string, variable, parameters);
119
+
120
+ return arrayAssignment;
121
+ }
122
+
116
123
  function stringFromVariableAndParameters(variable, parameters, context) {
117
124
  const variableString = variable.getString(),
118
125
  parametersString = parameters.getString(),
@@ -9,7 +9,7 @@ import { domAssigned } from "../../dom";
9
9
  import { NODE_TYPE, NODES_TYPE, STRING_TYPE, BOOLEAN_TYPE } from "../../types";
10
10
  import { CONTENT_PARAMETER_NAME, TERMINAL_PARAMETER_NAME, CHILD_NODES_PARAMETER_NAME } from "../../parameterNames";
11
11
 
12
- const objectAssignmentNodeQuery = nodeQuery("/step/objectAssignment");
12
+ const stepObjectAssignmentNodeQuery = nodeQuery("/step/objectAssignment");
13
13
 
14
14
  export default domAssigned(class ObjectAssigment {
15
15
  constructor(string, variable, namedParameters) {
@@ -183,21 +183,28 @@ export default domAssigned(class ObjectAssigment {
183
183
  static fromStepNode(stepNode, context) {
184
184
  let objectAssignment = null;
185
185
 
186
- const objectAssignmentNode = objectAssignmentNodeQuery(stepNode);
186
+ const stepObjectAssignmentNode = stepObjectAssignmentNodeQuery(stepNode);
187
187
 
188
- if (objectAssignmentNode !== null) {
189
- const { Variable, NamedParameters } = dom,
190
- namedParameters = NamedParameters.fromObjectAssignmentNode(objectAssignmentNode, context),
191
- variable = Variable.fromObjectAssignmentNode(objectAssignmentNode, context),
192
- string = stringFromVariableAndNamesParameters(variable, namedParameters, context);
188
+ if (stepObjectAssignmentNode !== null) {
189
+ const objectAssignmentNode = stepObjectAssignmentNode; ///
193
190
 
194
- objectAssignment = new ObjectAssigment(string, variable, namedParameters);
191
+ objectAssignment = objectAssignmentFromObjectAssignmentNode(objectAssignmentNode, context);
195
192
  }
196
193
 
197
194
  return objectAssignment;
198
195
  }
199
196
  });
200
197
 
198
+ function objectAssignmentFromObjectAssignmentNode(objectAssignmentNode, context) {
199
+ const { Variable, NamedParameters, ObjectAssigment } = dom,
200
+ namedParameters = NamedParameters.fromObjectAssignmentNode(objectAssignmentNode, context),
201
+ variable = Variable.fromObjectAssignmentNode(objectAssignmentNode, context),
202
+ string = stringFromVariableAndNamesParameters(variable, namedParameters, context),
203
+ objectAssignment = new ObjectAssigment(string, variable, namedParameters);
204
+
205
+ return objectAssignment;
206
+ }
207
+
201
208
  function stringFromVariableAndNamesParameters(variable, namedParameters, context) {
202
209
  const namedParametersString = namedParameters.getString(),
203
210
  variableString = variable.getString(),
@@ -2,6 +2,7 @@
2
2
 
3
3
  import dom from "../../dom";
4
4
 
5
+ import { nodeQuery } from "../../utilities/query";
5
6
  import { domAssigned } from "../../dom";
6
7
 
7
8
  export default domAssigned(class VariableAssignment {
@@ -60,7 +61,7 @@ function variableAssignmentFromTypeAndVariableAssignmentNode(type, variableAssig
60
61
 
61
62
  function stringFromValueAndVariable(value, variable, context) {
62
63
  const variableString = variable.getString(),
63
- valueString = value.getString(),
64
+ valueString = value.asString(context),
64
65
  string = `${variableString} = ${valueString};`;
65
66
 
66
67
  return string;
@@ -6,8 +6,8 @@ import { domAssigned } from "../../dom";
6
6
  import { nodeQuery, nodesQuery } from "../../utilities/query";
7
7
 
8
8
  const typeTerminalNodeQuery = nodeQuery("/variableAssignments/@type"),
9
- variableAssignmentsNodeQuery = nodeQuery("/step/variableAssignments"),
10
- variableAssignmentNodesQuery = nodesQuery("/variableAssignments/variableAssignment");
9
+ variableAssignmentNodesQuery = nodesQuery("/variableAssignments/variableAssignment"),
10
+ stepVariableAssignmentsNodeQuery = nodeQuery("/step/variableAssignments");
11
11
 
12
12
  export default domAssigned(class VariableAssignments {
13
13
  constructor(string, array) {
@@ -40,20 +40,28 @@ export default domAssigned(class VariableAssignments {
40
40
  static fromStepNode(stepNode, context) {
41
41
  let variableAssignments = null;
42
42
 
43
- const variableAssignmentsNode = variableAssignmentsNodeQuery(stepNode);
43
+ const stepVariableAssignmentsNode = stepVariableAssignmentsNodeQuery(stepNode);
44
44
 
45
- if (variableAssignmentsNode !== null) {
46
- const type = typeFromVariableAssignmentsNode(variableAssignmentsNode, context),
47
- array = arrayFromTypeAndVariableAssignmentsNode(type, variableAssignmentsNode, context),
48
- string = stringFromArray(array, context);
45
+ if (stepVariableAssignmentsNode !== null) {
46
+ const variableAssignmentsNode = stepVariableAssignmentsNode; ///
49
47
 
50
- variableAssignments = new VariableAssignments(string, array);
48
+ variableAssignments = variableAssignmentsFromVariableAssignmentsNode(variableAssignmentsNode, context);
51
49
  }
52
50
 
53
51
  return variableAssignments;
54
52
  }
55
53
  });
56
54
 
55
+ function variableAssignmentsFromVariableAssignmentsNode(variableAssignmentsNode, context) {
56
+ const { VariableAssignments } = dom,
57
+ type = typeFromVariableAssignmentsNode(variableAssignmentsNode, context),
58
+ array = arrayFromTypeAndVariableAssignmentsNode(type, variableAssignmentsNode, context),
59
+ string = stringFromArray(array, context),
60
+ variableAssignments = new VariableAssignments(string, array);
61
+
62
+ return variableAssignments;
63
+ }
64
+
57
65
  function stringFromArray(array, context) {
58
66
  const variableAssignmentsString = array.reduce((variableAssignmentsString, variableAssignment) => {
59
67
  const variableAssignmentString = variableAssignment.getString();
@@ -9,6 +9,7 @@ import { nodeQuery, nodesQuery } from "../../utilities/query";
9
9
 
10
10
  const stepNodesQuery = nodesQuery("/returnBlock/step"),
11
11
  nonsenseNodesQuery = nodesQuery("/returnBlock/nonsense"),
12
+ valueReturnBlockNodeQuery = nodeQuery("/value/returnBlock"),
12
13
  anonymousProcedureReturnBlockNodeQuery = nodeQuery("/anonymousProcedure/returnBlock"),
13
14
  procedureDeclarationReturnBlockNodeQuery = nodeQuery("/procedureDeclaration/returnBlock");
14
15
 
@@ -37,6 +38,12 @@ export default domAssigned(class ReturnBlock {
37
38
  }
38
39
 
39
40
  evaluate(variables, context) {
41
+ if (context === undefined) {
42
+ context = variables; ///
43
+
44
+ variables = [];
45
+ }
46
+
40
47
  if (this.nonsensical) {
41
48
  const message = `The return block is nonsensical.`,
42
49
  exception = Exception.fromMessage(message);
@@ -59,10 +66,16 @@ export default domAssigned(class ReturnBlock {
59
66
 
60
67
  static name = "ReturnBlock";
61
68
 
62
- static fromProcedureDeclarationNode(procedureDeclarationNode, context) {
63
- const procedureDeclarationReturnBlockNode = procedureDeclarationReturnBlockNodeQuery(procedureDeclarationNode),
64
- returnBlockNode = procedureDeclarationReturnBlockNode, ///
65
- returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
69
+ static fromValueNode(valueNode, context) {
70
+ let returnBlock = null;
71
+
72
+ const valueReturnBlockNode = valueReturnBlockNodeQuery(valueNode);
73
+
74
+ if (valueReturnBlockNode !== null) {
75
+ const returnBlockNode = valueReturnBlockNode; ///
76
+
77
+ returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
78
+ }
66
79
 
67
80
  return returnBlock;
68
81
  }
@@ -74,6 +87,14 @@ export default domAssigned(class ReturnBlock {
74
87
 
75
88
  return returnBlock;
76
89
  }
90
+
91
+ static fromProcedureDeclarationNode(procedureDeclarationNode, context) {
92
+ const procedureDeclarationReturnBlockNode = procedureDeclarationReturnBlockNodeQuery(procedureDeclarationNode),
93
+ returnBlockNode = procedureDeclarationReturnBlockNode, ///
94
+ returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
95
+
96
+ return returnBlock;
97
+ }
77
98
  });
78
99
 
79
100
  function stringFromReturnStatement(returnStatement, context) {
@@ -10,8 +10,7 @@ import { EQUAL_TO, NOT_EQUAL_TO } from "../constants";
10
10
  const terminalNodeQuery = nodeQuery("/comparison/@*"),
11
11
  leftValueNodeQuery = nodeQuery("/comparison/value[0]"),
12
12
  rightValueNodeQuery = nodeQuery("/comparison/value[1]"),
13
- valueComparisonNodeQuery = nodeQuery("/value/comparison"),
14
- conditionComparisonNodeQuery = nodeQuery("/condition/comparison");
13
+ valueComparisonNodeQuery = nodeQuery("/value/comparison");
15
14
 
16
15
  export default domAssigned(class Comparison {
17
16
  constructor(string, negated, leftValue, rightValue) {
@@ -90,20 +89,6 @@ export default domAssigned(class Comparison {
90
89
 
91
90
  return comparison;
92
91
  }
93
-
94
- static fromConditionNode(conditionNode, context) {
95
- let comparison = null;
96
-
97
- const conditionComparisonNode = conditionComparisonNodeQuery(conditionNode);
98
-
99
- if (conditionComparisonNode !== null) {
100
- const comparisonNode = conditionComparisonNode; ///
101
-
102
- comparison = comparisonFromComparisonNode(comparisonNode, context);
103
- }
104
-
105
- return comparison;
106
- }
107
92
  });
108
93
 
109
94
  function negatedFromComparisonNode(comparisonNode) {
@@ -21,15 +21,21 @@ export default domAssigned(class ProcedureDeclaration {
21
21
  static name = "ProcedureDeclaration";
22
22
 
23
23
  static fromProcedureDeclarationNode(procedureDeclarationNode, context) {
24
- const { Procedure } = dom,
25
- procedure = Procedure.fromProcedureDeclarationNode(procedureDeclarationNode, context),
26
- string = stringFromProcedure(procedure, context),
27
- procedureDeclaration = new ProcedureDeclaration(string, procedure);
24
+ const procedureDeclaration = procedureFromProcedureDeclarationNode(procedureDeclarationNode, context);
28
25
 
29
26
  return procedureDeclaration;
30
27
  }
31
28
  });
32
29
 
30
+ function procedureFromProcedureDeclarationNode(procedureDeclarationNode, context) {
31
+ const { Procedure, ProcedureDeclaration } = dom,
32
+ procedure = Procedure.fromProcedureDeclarationNode(procedureDeclarationNode, context),
33
+ string = stringFromProcedure(procedure, context),
34
+ procedureDeclaration = new ProcedureDeclaration(string, procedure);
35
+
36
+ return procedureDeclaration;
37
+ }
38
+
33
39
  function stringFromProcedure(procedure, context) {
34
40
  const procedureString = procedure.getString(),
35
41
  string = `${procedureString};`;
package/src/dom/error.js CHANGED
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ import dom from "../dom";
4
+
3
5
  import { domAssigned } from "../dom";
4
6
 
5
7
  export default domAssigned(class Error {
@@ -14,10 +16,17 @@ export default domAssigned(class Error {
14
16
  static name = "Error";
15
17
 
16
18
  static fromErrorNode(errorNode, context) {
17
- const node = errorNode, ///
18
- string = context.nodeAsString(node),
19
- error = new Error(string);
19
+ const error = errorFromErrorNode(errorNode, context);
20
20
 
21
21
  return error;
22
22
  }
23
23
  });
24
+
25
+ function errorFromErrorNode(errorNode, context) {
26
+ const {Error} = dom,
27
+ node = errorNode, ///
28
+ string = context.nodeAsString(node),
29
+ error = new Error(string);
30
+
31
+ return error;
32
+ }
package/src/dom/every.js CHANGED
@@ -91,19 +91,25 @@ export default domAssigned(class Every {
91
91
  const valueEveryNode = valueEveryNodeQuery(valueNode);
92
92
 
93
93
  if (valueEveryNode !== null) {
94
- const { Variable, AnonymousProcedure } = dom,
95
- everyNode = valueEveryNode, ///
96
- anonymousProcedure = AnonymousProcedure.fromEveryNode(everyNode, context),
97
- variable = Variable.fromEveryNode(everyNode, context),
98
- string = stringFromVariableAndAnonymousProcedure(variable, anonymousProcedure, context);
94
+ const everyNode = valueEveryNode; ///
99
95
 
100
- every = new Every(string, variable, anonymousProcedure);
96
+ every = everyFromEveryNode(everyNode, context);
101
97
  }
102
98
 
103
99
  return every;
104
100
  }
105
101
  });
106
102
 
103
+ function everyFromEveryNode(everyNode, context) {
104
+ const { Every, Variable, AnonymousProcedure } = dom,
105
+ anonymousProcedure = AnonymousProcedure.fromEveryNode(everyNode, context),
106
+ variable = Variable.fromEveryNode(everyNode, context),
107
+ string = stringFromVariableAndAnonymousProcedure(variable, anonymousProcedure, context),
108
+ every = new Every(string, variable, anonymousProcedure);
109
+
110
+ return every;
111
+ }
112
+
107
113
  function stringFromVariableAndAnonymousProcedure(variable, anonymousProcedure, context) {
108
114
  const variableString = variable.getString(),
109
115
  anonymousProcedureString = anonymousProcedure.getString(),
package/src/dom/label.js CHANGED
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
 
3
+ import dom from "../dom";
4
+
3
5
  import { nodeQuery } from "../utilities/query";
4
6
  import { domAssigned } from "../dom";
5
7
 
6
- const labelNodeQuery = nodeQuery("/procedureDeclaration/label"),
7
- nameTerminalNodeQuery = nodeQuery("/label/@name");
8
+ const nameTerminalNodeQuery = nodeQuery("/label/@name"),
9
+ procedureDeclarationLabelNodeQuery = nodeQuery("/procedureDeclaration/label");
8
10
 
9
11
  export default domAssigned(class Label {
10
12
  constructor(string, name) {
@@ -29,20 +31,21 @@ export default domAssigned(class Label {
29
31
  static name = "Label";
30
32
 
31
33
  static fromProcedureDeclarationNode(procedureDeclarationNode, context) {
32
- const labelNode = labelNodeQuery(procedureDeclarationNode),
33
- name = nameFromLabelNode(labelNode, context),
34
- string = stringFromName(name, context),
35
- label = new Label(string, name);
34
+ const procedureDeclarationLabelNode = procedureDeclarationLabelNodeQuery(procedureDeclarationNode),
35
+ labelNode = procedureDeclarationLabelNode, ///
36
+ label = labelFromLabelNode(labelNode, context);
36
37
 
37
38
  return label;
38
39
  }
39
40
  });
40
41
 
41
- function stringFromName(name, context) {
42
- const nameString = name, ///
43
- string = nameString; ///
42
+ function labelFromLabelNode(labelNode, context) {
43
+ const { Label } = dom,
44
+ name = nameFromLabelNode(labelNode, context),
45
+ string = stringFromName(name, context),
46
+ label = new Label(string, name);
44
47
 
45
- return string;
48
+ return label;
46
49
  }
47
50
 
48
51
  function nameFromLabelNode(labelNode, context) {
@@ -53,3 +56,10 @@ function nameFromLabelNode(labelNode, context) {
53
56
  return name;
54
57
  }
55
58
 
59
+ function stringFromName(name, context) {
60
+ const nameString = name, ///
61
+ string = nameString; ///
62
+
63
+ return string;
64
+ }
65
+
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
+ import dom from "../../dom";
3
4
  import Exception from "../../exception";
4
5
 
6
+ import { nodeQuery } from "../../utilities/query";
5
7
  import { domAssigned } from "../../dom";
6
- import { nodeQuery, nodesQuery } from "../../utilities/query";
7
8
 
8
9
  const typeTerminalNodeQuery = nodeQuery("/namedParameter/@type"),
9
10
  nameTerminalNodeQuery = nodeQuery("/namedParameter/@name[0]"),
@@ -77,16 +78,23 @@ export default domAssigned(class NamedParameter {
77
78
  static name = "NamedParameter";
78
79
 
79
80
  static fromNamedParameterNode(namedParameterNode, context) {
80
- const type = typeFromNamedParameterNode(namedParameterNode, context),
81
- name = nameFromNamedParameterNode(namedParameterNode, context),
82
- asName = asNameFromNamedParameterNode(namedParameterNode, context),
83
- string = stringFromTypeNameAndAsName(type, name, asName, context),
84
- namedParameter = new NamedParameter(string, type, name, asName);
81
+ const namedParameter = namedParameterFromNamedParameterNode(namedParameterNode, context);
85
82
 
86
83
  return namedParameter;
87
84
  }
88
85
  });
89
86
 
87
+ function namedParameterFromNamedParameterNode(namedParameterNode, context) {
88
+ const { NamedParameter } = dom,
89
+ type = typeFromNamedParameterNode(namedParameterNode, context),
90
+ name = nameFromNamedParameterNode(namedParameterNode, context),
91
+ asName = asNameFromNamedParameterNode(namedParameterNode, context),
92
+ string = stringFromTypeNameAndAsName(type, name, asName, context),
93
+ namedParameter = new NamedParameter(string, type, name, asName);
94
+
95
+ return namedParameter;
96
+ }
97
+
90
98
  function stringFromTypeNameAndAsName(type, name, asName, context) {
91
99
  let string;
92
100
 
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ import dom from "../dom";
3
4
  import Exception from "../exception";
4
5
 
5
6
  import { domAssigned } from "../dom";
@@ -55,17 +56,23 @@ export default domAssigned(class Parameter {
55
56
  terminalNodesLength = terminalNodes.length;
56
57
 
57
58
  if (terminalNodesLength === 2) {
58
- const name = nameFromParameterNode(parameterNode, context),
59
- type = typeFromParameterNode(parameterNode, context),
60
- string = stringFromNameAndType(name, type, context);
61
-
62
- parameter = new Parameter(string, type, name);
59
+ parameter = parameterFromParameterNode(parameterNode, context);
63
60
  }
64
61
 
65
62
  return parameter;
66
63
  }
67
64
  });
68
65
 
66
+ function parameterFromParameterNode(parameterNode, context) {
67
+ const { Parameter } = dom,
68
+ name = nameFromParameterNode(parameterNode, context),
69
+ type = typeFromParameterNode(parameterNode, context),
70
+ string = stringFromNameAndType(name, type, context),
71
+ parameter = new Parameter(string, type, name);
72
+
73
+ return parameter;
74
+ }
75
+
69
76
  function stringFromNameAndType(name, type, context) {
70
77
  const nameString = name, ///
71
78
  typeString = type, ///
@@ -106,16 +106,34 @@ export default domAssigned(class NamedParameters {
106
106
 
107
107
  static fromObjectAssignmentNode(objectAssignmentNode, context) {
108
108
  const objectAssignmentNamedParametersNode = objectAssignmentNamedParametersNodeQuery(objectAssignmentNode),
109
- parametersNode = objectAssignmentNamedParametersNode, ///
110
- namedParameterNodes = namedParameterNodesQuery(parametersNode),
111
- array = arrayFromNamedParameterNodes(namedParameterNodes, context),
112
- string = stringFromArray(array, context),
113
- namedParameters = new NamedParameters(string, array);
109
+ namedParametersNode = objectAssignmentNamedParametersNode, ///
110
+ namedParameters = namedParametersFromNamedParametersNode(namedParametersNode, context);
114
111
 
115
112
  return namedParameters;
116
113
  }
117
114
  });
118
115
 
116
+ function namedParametersFromNamedParametersNode(namedParametersNode, context) {
117
+ const { NamedParameters } = dom,
118
+ namedParameterNodes = namedParameterNodesQuery(namedParametersNode),
119
+ array = arrayFromNamedParameterNodes(namedParameterNodes, context),
120
+ string = stringFromArray(array, context),
121
+ namedParameters = new NamedParameters(string, array);
122
+
123
+ return namedParameters;
124
+ }
125
+
126
+ function arrayFromNamedParameterNodes(namedParameterNodes, context) {
127
+ const { NamedParameter } = dom,
128
+ array = namedParameterNodes.map((namedParameterNode) => { ///
129
+ const namedParameter = NamedParameter.fromNamedParameterNode(namedParameterNode, context);
130
+
131
+ return namedParameter;
132
+ });
133
+
134
+ return array;
135
+ }
136
+
119
137
  function stringFromArray(array, context) {
120
138
  const namedParametersSString = array.reduce((namedParametersSString, namedParameter) => {
121
139
  const namedParameterString = namedParameter.getString();
@@ -130,14 +148,3 @@ function stringFromArray(array, context) {
130
148
 
131
149
  return string;
132
150
  }
133
-
134
- function arrayFromNamedParameterNodes(namedParameterNodes, context) {
135
- const { NamedParameter } = dom,
136
- array = namedParameterNodes.map((namedParameterNode) => { ///
137
- const namedParameter = NamedParameter.fromNamedParameterNode(namedParameterNode, context);
138
-
139
- return namedParameter;
140
- });
141
-
142
- return array;
143
- }