@media-quest/builder 0.0.24 → 0.0.26

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 (43) hide show
  1. package/package.json +15 -15
  2. package/src/Builder-option.ts +6 -8
  3. package/src/Builder-page.spec.ts +162 -320
  4. package/src/Builder-page.ts +182 -257
  5. package/src/Builder-question.spec.ts +57 -57
  6. package/src/Builder-question.ts +83 -82
  7. package/src/Builder-schema.spec.ts +96 -124
  8. package/src/Builder-schema.ts +25 -15
  9. package/src/Builder-text.spec.ts +11 -11
  10. package/src/Builder-text.ts +13 -13
  11. package/src/BuilderObject.ts +2 -33
  12. package/src/BuilderTag.ts +19 -20
  13. package/src/builder-compiler.ts +1 -1
  14. package/src/code-book/codebook-variable.ts +29 -0
  15. package/src/{codebook.ts → code-book/codebook.ts} +16 -16
  16. package/src/primitives/ID.spec.ts +39 -0
  17. package/src/primitives/ID.ts +138 -0
  18. package/src/primitives/page-prefix.ts +4 -3
  19. package/src/primitives/varID.ts +1 -0
  20. package/src/public-api.ts +28 -24
  21. package/src/rulebuilder/Builder-rule.spec.ts +3 -2
  22. package/src/rulebuilder/Builder-rule.ts +2 -1
  23. package/src/rulebuilder/RuleBuilder-test-utils.ts +12 -8
  24. package/src/rulebuilder/RuleInput.ts +30 -30
  25. package/src/rulebuilder/RuleVariable.ts +11 -26
  26. package/src/rulebuilder/SingleSelectItem.ts +9 -8
  27. package/src/rulebuilder/condition/Builder-condition-group.ts +14 -6
  28. package/src/rulebuilder/condition/Builder-condition.spec.ts +12 -12
  29. package/src/rulebuilder/condition/Builder-condition.ts +17 -13
  30. package/src/rulebuilder/index.ts +16 -3
  31. package/src/rulebuilder/page-action-manager.ts +4 -2
  32. package/src/rulebuilder/rule2/Rule2.ts +8 -8
  33. package/src/schema-config.ts +2 -2
  34. package/src/sum-score/sum-score-answer.ts +6 -0
  35. package/src/sum-score/sum-score-manager.spec.ts +189 -0
  36. package/src/sum-score/sum-score-manager.ts +154 -0
  37. package/src/sum-score/sum-score-membership.ts +45 -0
  38. package/src/sum-score/sum-score-variable.spec.ts +151 -0
  39. package/src/sum-score/sum-score-variable.ts +36 -0
  40. package/src/{variable → sum-score}/sum-score.ts +122 -138
  41. package/tsconfig.tsbuildinfo +1 -1
  42. package/src/variable/mq-variable.spec.ts +0 -146
  43. package/src/variable/mq-variable.ts +0 -68
@@ -1,146 +0,0 @@
1
- import { MqVariable } from "./mq-variable";
2
- import { SumScoreVariable, SumScore } from "./sum-score";
3
- const createVariable = (value: number): MqVariable => {
4
- return {
5
- varId: "v" + value,
6
- label: "label for v" + value,
7
- numericValue: value,
8
- origin: "question",
9
- kind: "numeric-variable",
10
- };
11
- };
12
-
13
- const createSumScore = (basedOn: Array<{ variable: MqVariable; weight?: number }>) => {
14
- const sumVar1: SumScoreVariable = {
15
- kind: "numeric-variable",
16
- initialValue: 0,
17
- min: 0,
18
- origin: "sum-score",
19
- label: "Sum 123",
20
- varId: "sum-score-variable-id",
21
- basedOn: basedOn.map((v) => ({ varId: v.variable.varId, weight: v.weight })),
22
- };
23
- return sumVar1;
24
- };
25
-
26
- const v0 = createVariable(0);
27
- const v1 = createVariable(1);
28
- const v2 = createVariable(2);
29
- const v3 = createVariable(3);
30
- const v4 = createVariable(4);
31
- const v5 = createVariable(5);
32
- const v6 = createVariable(6);
33
- const v7 = createVariable(7);
34
- const v8 = createVariable(8);
35
- const v9 = createVariable(9);
36
-
37
- const all = [v0, v1, v2, v3, v4, v5, v6, v7, v8, v9];
38
- describe("Sum score variable.", () => {
39
- test("Is allowed SumScoreValue", () => {
40
- expect(SumScore.isAllowedValue(-1)).toBeFalsy();
41
- expect(SumScore.isAllowedValue(0)).toBeTruthy();
42
- expect(SumScore.isAllowedValue(1)).toBeTruthy();
43
- expect(SumScore.isAllowedValue(2)).toBeTruthy();
44
- expect(SumScore.isAllowedValue(3)).toBeTruthy();
45
- expect(SumScore.isAllowedValue(4)).toBeTruthy();
46
- expect(SumScore.isAllowedValue(5)).toBeTruthy();
47
- expect(SumScore.isAllowedValue(6)).toBeTruthy();
48
- expect(SumScore.isAllowedValue(7)).toBeTruthy();
49
- expect(SumScore.isAllowedValue(8)).toBeTruthy();
50
- expect(SumScore.isAllowedValue(9)).toBeFalsy();
51
- expect(SumScore.isAllowedValue(999)).toBeFalsy();
52
- });
53
-
54
- test("Will calculate 2", () => {
55
- const ss1 = createSumScore([
56
- { variable: v1, weight: 1 },
57
- { variable: v2, weight: 1 },
58
- { variable: v9, weight: 1 },
59
- ]);
60
- const score = SumScore.calculate(ss1, all);
61
- expect(score.sumScore).toBe(3);
62
- expect(score.basedOn.length).toBe(3);
63
- expect(score.avg).toBe(1.5);
64
- expect(score.skippedBy9Count).toBe(1);
65
- });
66
- test("Will calculate 5 values", () => {
67
- const ss1 = createSumScore([
68
- { variable: v1, weight: 1 },
69
- { variable: v2, weight: 1 },
70
- { variable: v4, weight: 1 },
71
- { variable: v5, weight: 1 },
72
- { variable: v6, weight: 1 },
73
- { variable: v9, weight: 0.5 },
74
- ]);
75
- const score = SumScore.calculate(ss1, all);
76
- expect(score.sumScore).toBe(18);
77
- expect(score.avg).toBe(3.6);
78
- const basedOn1 = score.basedOn[0];
79
- expect(basedOn1.value).toBe(v1.numericValue);
80
- expect(basedOn1.weight).toBe(1);
81
- expect(basedOn1.varId).toBe(v1.varId);
82
- expect(basedOn1.varLabel).toBe(v1.label);
83
- });
84
- test("Will not include 9 in includedAnswersCount", () => {
85
- const ss1 = createSumScore([
86
- { variable: v0, weight: 1 },
87
- { variable: v1, weight: 1 },
88
- { variable: v5, weight: 1 },
89
- { variable: v9, weight: 1 },
90
- ]);
91
- const score = SumScore.calculate(ss1, all);
92
- expect(score.sumScore).toBe(6);
93
- expect(score.avg).toBe(2);
94
- expect(score.includedAnswerCount).toBe(3);
95
- });
96
- test("Will calculate weight", () => {
97
- const ss1 = createSumScore([
98
- { variable: v1, weight: 1 },
99
- { variable: v8, weight: 0.5 },
100
- ]);
101
- const score = SumScore.calculate(ss1, all);
102
- expect(score.sumScore).toBe(5);
103
- });
104
- test("Will calculate many weighted variables.", () => {
105
- const ss1 = createSumScore([
106
- { variable: v1, weight: 1 },
107
- { variable: v2, weight: 0.5 },
108
- { variable: v5, weight: 1.2 },
109
- { variable: v8, weight: 2 },
110
- ]);
111
- const score = SumScore.calculate(ss1, all);
112
- expect(score.sumScore).toBe(24);
113
- });
114
- test("Will count missing answers (missingAnswersCount)", () => {
115
- const ss1 = createSumScore([
116
- { variable: v1 },
117
- { variable: v2 },
118
- { variable: v3 },
119
- { variable: v5 },
120
- { variable: v9 },
121
- ]);
122
- const missing5InDataSet = [v1, v2, v8];
123
- const score = SumScore.calculate(ss1, missing5InDataSet);
124
- expect(score.sumScore).toBe(3);
125
- expect(score.includedAnswerCount).toBe(2);
126
- expect(score.missingAnswerCount).toBe(3);
127
- expect(score.avg).toBe(1.5);
128
- expect(score.basedOn.length).toBe(2);
129
- expect(score.avg).toBe(1.5);
130
- expect(score.errorMessages.length).toBe(0);
131
- });
132
- test("includedAnswerCount + missingAnswerCount + skippedBy9Count = SumScoreVariable.basedOn.length", () => {
133
- const ss1 = createSumScore([
134
- { variable: v0 },
135
- { variable: v1 },
136
- { variable: v2 },
137
- { variable: v9 },
138
- ]);
139
- const answers = [v1, v7, v8, v9];
140
- const score = SumScore.calculate(ss1, answers);
141
-
142
- expect(score.includedAnswerCount + score.missingAnswerCount + score.skippedBy9Count).toBe(
143
- ss1.basedOn.length,
144
- );
145
- });
146
- });
@@ -1,68 +0,0 @@
1
- export interface MqVariable {
2
- readonly kind: "numeric-variable" | "numeric-range-variable" | "string-variable";
3
-
4
- label: string;
5
- varId: string;
6
- description?: string;
7
-
8
- // Values - The actual value of the variable.
9
- stringValue?: string;
10
- numericValue?: number;
11
- minValue?: number;
12
- initialValue?: number;
13
- maxValue?: number;
14
- defaultValue?: number | string;
15
- defaultMinValue?: number;
16
- defaultMaxValue?: number;
17
-
18
- // Context
19
- origin:
20
- | "question"
21
- | "form-field"
22
- | "predefined"
23
- | "event"
24
- | "calculated"
25
- | "sum-score"
26
- | "predefined-or-question";
27
-
28
- pageId?: string;
29
- eventSource?: string;
30
- pagePrefix?: string;
31
- modulePrefix?: string;
32
- moduleID?: string;
33
- pageNumber?: number;
34
-
35
- // Validations
36
- min?: number;
37
- max?: number;
38
- stepSize?: number;
39
- minLength?: number;
40
- maxLength?: number;
41
- rangeFloor?: number;
42
- rangeCeiling?: number;
43
-
44
- // Analytics
45
- options?: Array<{ label: string; value: number }>;
46
- basedOn?: Array<{ varId: string; weight?: number }>;
47
- }
48
-
49
- const MISSING = 999;
50
- export const MqVariable = {
51
- MISSING,
52
- } as const;
53
-
54
- export interface PageVariable extends MqVariable {
55
- readonly pageId: string;
56
- readonly pagePrefix: string;
57
- readonly pagePosition: number;
58
- readonly modulePrefix: string;
59
- readonly origin: "question" | "form-field";
60
- }
61
-
62
- export interface PredefinedVariable extends MqVariable {
63
- readonly origin: "predefined";
64
- readonly modulePrefix: string;
65
- readonly moduleID: string;
66
- defaultValue: number;
67
- options: Array<{ label: string; value: number }>;
68
- }