@superbuilders/primer-tives 1.1.2 → 1.1.3

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 (74) hide show
  1. package/README.md +74 -8
  2. package/dist/client/choice-state.d.ts +8 -0
  3. package/dist/client/choice-state.d.ts.map +1 -0
  4. package/dist/client/consumed.d.ts +3 -0
  5. package/dist/client/consumed.d.ts.map +1 -0
  6. package/dist/client/content.d.ts +20 -0
  7. package/dist/client/content.d.ts.map +1 -0
  8. package/dist/client/create.d.ts +20 -0
  9. package/dist/client/create.d.ts.map +1 -0
  10. package/dist/client/extended-text-state.d.ts +8 -0
  11. package/dist/client/extended-text-state.d.ts.map +1 -0
  12. package/dist/client/feedback-state.d.ts +7 -0
  13. package/dist/client/feedback-state.d.ts.map +1 -0
  14. package/dist/client/index.d.ts +11 -0
  15. package/dist/client/index.d.ts.map +1 -0
  16. package/dist/client/index.js +1095 -0
  17. package/dist/client/index.js.map +26 -0
  18. package/dist/client/match-state.d.ts +8 -0
  19. package/dist/client/match-state.d.ts.map +1 -0
  20. package/dist/client/observation-state.d.ts +6 -0
  21. package/dist/client/observation-state.d.ts.map +1 -0
  22. package/dist/client/order-state.d.ts +8 -0
  23. package/dist/client/order-state.d.ts.map +1 -0
  24. package/dist/client/pci-state.d.ts +6 -0
  25. package/dist/client/pci-state.d.ts.map +1 -0
  26. package/dist/client/pci.d.ts +38 -0
  27. package/dist/client/pci.d.ts.map +1 -0
  28. package/dist/client/session-context.d.ts +19 -0
  29. package/dist/client/session-context.d.ts.map +1 -0
  30. package/dist/client/session.d.ts +18 -0
  31. package/dist/client/session.d.ts.map +1 -0
  32. package/dist/client/text-entry-state.d.ts +8 -0
  33. package/dist/client/text-entry-state.d.ts.map +1 -0
  34. package/dist/client/transport.d.ts +46 -0
  35. package/dist/client/transport.d.ts.map +1 -0
  36. package/dist/client/types.d.ts +194 -0
  37. package/dist/client/types.d.ts.map +1 -0
  38. package/dist/contracts/index.d.ts +4 -0
  39. package/dist/contracts/index.d.ts.map +1 -0
  40. package/dist/contracts/index.js +300 -0
  41. package/dist/contracts/index.js.map +11 -0
  42. package/dist/contracts/pci-schemas.d.ts +25 -0
  43. package/dist/contracts/pci-schemas.d.ts.map +1 -0
  44. package/dist/contracts/types.d.ts +118 -0
  45. package/dist/contracts/types.d.ts.map +1 -0
  46. package/dist/contracts/validation.d.ts +92 -0
  47. package/dist/contracts/validation.d.ts.map +1 -0
  48. package/dist/errors.d.ts +23 -0
  49. package/dist/errors.d.ts.map +1 -0
  50. package/dist/errors.js +48 -0
  51. package/dist/errors.js.map +10 -0
  52. package/dist/grade-level.d.ts +5 -0
  53. package/dist/grade-level.d.ts.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +344 -0
  57. package/dist/index.js.map +12 -0
  58. package/dist/logger.d.ts +8 -0
  59. package/dist/logger.d.ts.map +1 -0
  60. package/dist/server/create-server.d.ts +44 -0
  61. package/dist/server/create-server.d.ts.map +1 -0
  62. package/dist/server/exchange.d.ts +22 -0
  63. package/dist/server/exchange.d.ts.map +1 -0
  64. package/dist/server/hints.d.ts +25 -0
  65. package/dist/server/hints.d.ts.map +1 -0
  66. package/dist/server/index.d.ts +9 -0
  67. package/dist/server/index.d.ts.map +1 -0
  68. package/dist/server/index.js +531 -0
  69. package/dist/server/index.js.map +15 -0
  70. package/dist/server/students.d.ts +12 -0
  71. package/dist/server/students.d.ts.map +1 -0
  72. package/dist/subject.d.ts +6 -0
  73. package/dist/subject.d.ts.map +1 -0
  74. package/package.json +2 -1
@@ -0,0 +1,194 @@
1
+ import type { ContentInline } from "./content";
2
+ import type { PciId, PciProps, PciValue } from "./pci";
3
+ import type { BodyStimulus, ImageStimulus, MatchPair, PciInteraction, PciSubmission, RendererChoice, RendererInteraction, RendererMatchChoice, RendererStimulus, RendererSubmission, StandardRendererInteraction } from "../contracts/types";
4
+ type ReviewScalarValue = {
5
+ kind: "identifier";
6
+ value: string;
7
+ } | {
8
+ kind: "string";
9
+ value: string;
10
+ } | {
11
+ kind: "integer";
12
+ value: number;
13
+ } | {
14
+ kind: "float";
15
+ value: number;
16
+ } | {
17
+ kind: "pair";
18
+ source: string;
19
+ target: string;
20
+ };
21
+ type ReviewRecordFieldBaseType = "identifier" | "string" | "integer" | "float" | "pair";
22
+ interface ReviewRecordField {
23
+ fieldIdentifier: string;
24
+ baseType: ReviewRecordFieldBaseType;
25
+ value: ReviewScalarValue | null;
26
+ }
27
+ interface ChoiceReview {
28
+ type: "choice";
29
+ correctKeys: string[];
30
+ }
31
+ interface TextEntryReview {
32
+ type: "text-entry";
33
+ correctValue: ReviewScalarValue | null;
34
+ }
35
+ interface ExtendedTextReview {
36
+ type: "extended-text";
37
+ correctValues: ReviewScalarValue[];
38
+ }
39
+ interface OrderReview {
40
+ type: "order";
41
+ correctOrder: string[];
42
+ }
43
+ interface MatchReview {
44
+ type: "match";
45
+ correctPairs: MatchPair[];
46
+ }
47
+ type PciReview<Pcis extends PciId = PciId> = {
48
+ [K in Pcis]: {
49
+ type: "portable-custom";
50
+ pciId: K;
51
+ fields: ReviewRecordField[];
52
+ };
53
+ }[Pcis];
54
+ type InteractionReview<Pcis extends PciId = PciId> = ChoiceReview | TextEntryReview | ExtendedTextReview | OrderReview | MatchReview | PciReview<Pcis>;
55
+ interface NonSerializable {
56
+ toJSON(): never;
57
+ }
58
+ interface ObservationState<Pcis extends PciId = PciId> extends NonSerializable {
59
+ readonly phase: "observation";
60
+ readonly stimulus: RendererStimulus | null;
61
+ advance(): Promise<PrimerState<Pcis>>;
62
+ }
63
+ interface ChoiceState<Pcis extends PciId = PciId> extends NonSerializable {
64
+ readonly phase: "interaction";
65
+ readonly kind: "choice";
66
+ readonly stimulus: RendererStimulus | null;
67
+ readonly interaction: Extract<StandardRendererInteraction, {
68
+ type: "choice";
69
+ }>;
70
+ readonly options: RendererChoice[];
71
+ readonly maxChoices: number;
72
+ readonly minChoices: number;
73
+ submitChoice(selectedKeys: string[]): Promise<PrimerState<Pcis>>;
74
+ timeout(): Promise<PrimerState<Pcis>>;
75
+ }
76
+ interface TextEntryState<Pcis extends PciId = PciId> extends NonSerializable {
77
+ readonly phase: "interaction";
78
+ readonly kind: "text-entry";
79
+ readonly stimulus: RendererStimulus | null;
80
+ readonly interaction: Extract<StandardRendererInteraction, {
81
+ type: "text-entry";
82
+ }>;
83
+ submitText(value: string): Promise<PrimerState<Pcis>>;
84
+ timeout(): Promise<PrimerState<Pcis>>;
85
+ }
86
+ interface ExtendedTextSingleState<Pcis extends PciId = PciId> extends NonSerializable {
87
+ readonly phase: "interaction";
88
+ readonly kind: "extended-text";
89
+ readonly cardinality: "single";
90
+ readonly stimulus: RendererStimulus | null;
91
+ readonly interaction: Extract<StandardRendererInteraction, {
92
+ type: "extended-text";
93
+ cardinality: "single";
94
+ }>;
95
+ submitText(value: string): Promise<PrimerState<Pcis>>;
96
+ timeout(): Promise<PrimerState<Pcis>>;
97
+ }
98
+ interface ExtendedTextMultipleState<Pcis extends PciId = PciId> extends NonSerializable {
99
+ readonly phase: "interaction";
100
+ readonly kind: "extended-text";
101
+ readonly cardinality: "multiple";
102
+ readonly stimulus: RendererStimulus | null;
103
+ readonly interaction: Extract<StandardRendererInteraction, {
104
+ type: "extended-text";
105
+ cardinality: "multiple";
106
+ }>;
107
+ readonly maxStrings: number;
108
+ readonly minStrings: number;
109
+ submitTexts(values: string[]): Promise<PrimerState<Pcis>>;
110
+ timeout(): Promise<PrimerState<Pcis>>;
111
+ }
112
+ type ExtendedTextState<Pcis extends PciId = PciId> = ExtendedTextSingleState<Pcis> | ExtendedTextMultipleState<Pcis>;
113
+ interface OrderState<Pcis extends PciId = PciId> extends NonSerializable {
114
+ readonly phase: "interaction";
115
+ readonly kind: "order";
116
+ readonly stimulus: RendererStimulus | null;
117
+ readonly interaction: Extract<StandardRendererInteraction, {
118
+ type: "order";
119
+ }>;
120
+ readonly choices: RendererChoice[];
121
+ readonly minChoices: number;
122
+ readonly maxChoices: number;
123
+ submitOrder(orderedKeys: string[]): Promise<PrimerState<Pcis>>;
124
+ timeout(): Promise<PrimerState<Pcis>>;
125
+ }
126
+ interface MatchState<Pcis extends PciId = PciId> extends NonSerializable {
127
+ readonly phase: "interaction";
128
+ readonly kind: "match";
129
+ readonly stimulus: RendererStimulus | null;
130
+ readonly interaction: Extract<StandardRendererInteraction, {
131
+ type: "match";
132
+ }>;
133
+ readonly sourceChoices: RendererMatchChoice[];
134
+ readonly targetChoices: RendererMatchChoice[];
135
+ readonly minAssociations: number;
136
+ readonly maxAssociations: number;
137
+ submitMatch(pairs: MatchPair[]): Promise<PrimerState<Pcis>>;
138
+ timeout(): Promise<PrimerState<Pcis>>;
139
+ }
140
+ type PciInteractionState<Pcis extends PciId = PciId> = {
141
+ [K in Pcis]: NonSerializable & {
142
+ readonly phase: "interaction";
143
+ readonly kind: "portable-custom";
144
+ readonly stimulus: RendererStimulus | null;
145
+ readonly interaction: PciInteraction<K>;
146
+ readonly pciId: K;
147
+ readonly properties: PciProps<K>;
148
+ submit(value: PciValue<K>): Promise<PrimerState<Pcis>>;
149
+ timeout(): Promise<PrimerState<Pcis>>;
150
+ };
151
+ }[Pcis];
152
+ type InteractionState<Pcis extends PciId = PciId> = ChoiceState<Pcis> | TextEntryState<Pcis> | ExtendedTextState<Pcis> | OrderState<Pcis> | MatchState<Pcis> | PciInteractionState<Pcis>;
153
+ interface FeedbackState<Pcis extends PciId = PciId> extends NonSerializable {
154
+ readonly phase: "feedback";
155
+ readonly stimulus: RendererStimulus | null;
156
+ readonly interaction: RendererInteraction<Pcis>;
157
+ readonly submission: RendererSubmission<Pcis>;
158
+ readonly isCorrect: boolean;
159
+ readonly feedbackContent: ContentInline[];
160
+ readonly review: InteractionReview<Pcis> | null;
161
+ advance(): Promise<PrimerState<Pcis>>;
162
+ }
163
+ interface CompletedState extends NonSerializable {
164
+ readonly phase: "completed";
165
+ }
166
+ interface ErroredState<Pcis extends PciId = PciId> extends NonSerializable {
167
+ readonly phase: "errored";
168
+ readonly error: Error;
169
+ readonly retriable: boolean;
170
+ retry(): Promise<PrimerState<Pcis>>;
171
+ }
172
+ interface FatalState extends NonSerializable {
173
+ readonly phase: "fatal";
174
+ readonly error: Error;
175
+ readonly retriable: false;
176
+ }
177
+ type PrimerState<Pcis extends PciId = PciId> = ObservationState<Pcis> | InteractionState<Pcis> | FeedbackState<Pcis> | CompletedState | ErroredState<Pcis> | FatalState;
178
+ type PciPendingRenderProps<K extends PciId> = {
179
+ mode: "pending";
180
+ properties: PciProps<K>;
181
+ onValueChange: (value: PciValue<K> | null) => void;
182
+ };
183
+ type PciSubmittedRenderProps<K extends PciId> = {
184
+ mode: "submitted";
185
+ properties: PciProps<K>;
186
+ submission: PciValue<K>;
187
+ review: Extract<InteractionReview<K>, {
188
+ type: "portable-custom";
189
+ pciId: K;
190
+ }> | null;
191
+ };
192
+ type PciRenderProps<K extends PciId> = PciPendingRenderProps<K> | PciSubmittedRenderProps<K>;
193
+ export type { BodyStimulus, ChoiceReview, ChoiceState, CompletedState, ErroredState, ExtendedTextMultipleState, ExtendedTextReview, ExtendedTextSingleState, ExtendedTextState, FatalState, FeedbackState, ImageStimulus, InteractionReview, InteractionState, MatchPair, MatchReview, MatchState, NonSerializable, ObservationState, OrderReview, OrderState, PciInteraction, PciInteractionState, PciPendingRenderProps, PciRenderProps, PciReview, PciSubmission, PciSubmittedRenderProps, PrimerState, RendererChoice, RendererInteraction, RendererMatchChoice, RendererStimulus, RendererSubmission, ReviewRecordField, ReviewRecordFieldBaseType, ReviewScalarValue, StandardRendererInteraction, TextEntryReview, TextEntryState };
194
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type { BodyStimulus, ImageStimulus, MatchPair, PciInteraction, PciSubmission, RendererChoice, RendererInteraction, RendererMatchChoice, RendererStimulus, RendererSubmission, StandardRendererInteraction } from "./types";
2
+ export { ChoiceSubmissionSchema, DivisionRemainderPciSubmissionSchema, ExtendedTextSubmissionSchema, FractionAdditionPciSubmissionSchema, MatchPairSchema, MatchSubmissionSchema, OrderSubmissionSchema, RendererSubmissionSchema, TextEntrySubmissionSchema, submissionValidationMessage, validateSubmissionForInteraction } from "./validation";
3
+ export type { SubmissionValidationFailure, SubmissionValidationResult, SubmissionValidationSuccess } from "./validation";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EACN,sBAAsB,EACtB,oCAAoC,EACpC,4BAA4B,EAC5B,mCAAmC,EACnC,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,gCAAgC,EAChC,MAAM,kDAAkD,CAAA;AAEzD,YAAY,EACX,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,EAC3B,MAAM,kDAAkD,CAAA"}
@@ -0,0 +1,300 @@
1
+ // src/contracts/validation.ts
2
+ import { z as z2 } from "zod";
3
+
4
+ // src/contracts/pci-schemas.ts
5
+ import { z } from "zod";
6
+ var DivisionRemainderPropsSchema = z.object({
7
+ dividend: z.number(),
8
+ divisor: z.number()
9
+ });
10
+ var DivisionRemainderSubmissionSchema = z.object({
11
+ quotient: z.string(),
12
+ remainder: z.string()
13
+ });
14
+ var FractionOperandSchema = z.object({
15
+ numerator: z.number(),
16
+ denominator: z.number()
17
+ });
18
+ var FractionAdditionPropsSchema = z.object({
19
+ left: FractionOperandSchema,
20
+ right: FractionOperandSchema
21
+ });
22
+ var FractionAdditionSubmissionSchema = z.object({
23
+ numerator: z.string(),
24
+ denominator: z.string()
25
+ });
26
+
27
+ // src/contracts/validation.ts
28
+ var MatchPairSchema = z2.object({
29
+ source: z2.string(),
30
+ target: z2.string()
31
+ });
32
+ var ChoiceSubmissionSchema = z2.object({
33
+ type: z2.literal("choice"),
34
+ selectedKeys: z2.array(z2.string())
35
+ });
36
+ var TextEntrySubmissionSchema = z2.object({
37
+ type: z2.literal("text-entry"),
38
+ value: z2.string()
39
+ });
40
+ var ExtendedTextSubmissionSchema = z2.object({
41
+ type: z2.literal("extended-text"),
42
+ values: z2.array(z2.string()).min(1)
43
+ });
44
+ var OrderSubmissionSchema = z2.object({
45
+ type: z2.literal("order"),
46
+ orderedKeys: z2.array(z2.string())
47
+ });
48
+ var MatchSubmissionSchema = z2.object({
49
+ type: z2.literal("match"),
50
+ pairs: z2.array(MatchPairSchema)
51
+ });
52
+ var DivisionRemainderPciSubmissionSchema = z2.object({
53
+ type: z2.literal("portable-custom"),
54
+ pciId: z2.literal("urn:primer:pci:division-remainder"),
55
+ value: DivisionRemainderSubmissionSchema
56
+ });
57
+ var FractionAdditionPciSubmissionSchema = z2.object({
58
+ type: z2.literal("portable-custom"),
59
+ pciId: z2.literal("urn:primer:pci:fraction-addition"),
60
+ value: FractionAdditionSubmissionSchema
61
+ });
62
+ var RendererSubmissionSchema = z2.union([
63
+ ChoiceSubmissionSchema,
64
+ TextEntrySubmissionSchema,
65
+ ExtendedTextSubmissionSchema,
66
+ OrderSubmissionSchema,
67
+ MatchSubmissionSchema,
68
+ DivisionRemainderPciSubmissionSchema,
69
+ FractionAdditionPciSubmissionSchema
70
+ ]);
71
+ function duplicates(values, keyOf) {
72
+ const seen = new Set;
73
+ const duplicated = new Set;
74
+ for (const value of values) {
75
+ const key = keyOf(value);
76
+ if (seen.has(key)) {
77
+ duplicated.add(key);
78
+ continue;
79
+ }
80
+ seen.add(key);
81
+ }
82
+ return [...duplicated];
83
+ }
84
+ function findUnknownIds(values, choices) {
85
+ const ids = new Set(choices.map(function getId(choice) {
86
+ return choice.identifier;
87
+ }));
88
+ return values.filter(function isUnknown(value) {
89
+ return !ids.has(value);
90
+ });
91
+ }
92
+ function countByIdentifier(pairs, side) {
93
+ const counts = new Map;
94
+ for (const pair of pairs) {
95
+ const key = pair[side];
96
+ const currentCount = counts.get(key);
97
+ if (currentCount === undefined) {
98
+ counts.set(key, 1);
99
+ continue;
100
+ }
101
+ counts.set(key, currentCount + 1);
102
+ }
103
+ return counts;
104
+ }
105
+ function validateUsageBounds(choices, counts, side) {
106
+ const issues = [];
107
+ for (const choice of choices) {
108
+ const maybeCount = counts.get(choice.identifier);
109
+ const count = maybeCount === undefined ? 0 : maybeCount;
110
+ if (choice.matchMax !== 0 && count > choice.matchMax) {
111
+ issues.push(`${side} '${choice.identifier}' used ${count} times, max ${choice.matchMax}`);
112
+ }
113
+ if (count < choice.matchMin) {
114
+ issues.push(`${side} '${choice.identifier}' used ${count} times, min ${choice.matchMin}`);
115
+ }
116
+ }
117
+ return issues;
118
+ }
119
+ function pciSubmissionSchema(pciId) {
120
+ switch (pciId) {
121
+ case "urn:primer:pci:division-remainder":
122
+ return DivisionRemainderSubmissionSchema;
123
+ case "urn:primer:pci:fraction-addition":
124
+ return FractionAdditionSubmissionSchema;
125
+ }
126
+ const exhaustiveCheck = pciId;
127
+ return exhaustiveCheck;
128
+ }
129
+ function typeMismatch(interactionType, submissionType) {
130
+ return `submission type '${submissionType}' does not match interaction type '${interactionType}'`;
131
+ }
132
+ function buildResult(submission, issues) {
133
+ if (issues.length > 0) {
134
+ return { ok: false, issues };
135
+ }
136
+ return { ok: true, value: submission };
137
+ }
138
+ function validateChoice(interaction, submission) {
139
+ const issues = [];
140
+ if (submission.selectedKeys.length < interaction.minChoices) {
141
+ issues.push(`need at least ${interaction.minChoices} selections`);
142
+ }
143
+ if (submission.selectedKeys.length > interaction.maxChoices) {
144
+ issues.push(`at most ${interaction.maxChoices} selections`);
145
+ }
146
+ const duplicateKeys = duplicates(submission.selectedKeys, function keyOf(value) {
147
+ return value;
148
+ });
149
+ if (duplicateKeys.length > 0) {
150
+ issues.push("duplicate selections");
151
+ }
152
+ const unknownKeys = findUnknownIds(submission.selectedKeys, interaction.options);
153
+ if (unknownKeys.length > 0) {
154
+ issues.push(`unknown options: ${unknownKeys.join(", ")}`);
155
+ }
156
+ return issues;
157
+ }
158
+ function validateExtendedText(interaction, submission) {
159
+ const issues = [];
160
+ if (interaction.cardinality === "single") {
161
+ if (submission.values.length !== 1) {
162
+ issues.push("single-cardinality extended-text requires exactly one value");
163
+ }
164
+ return issues;
165
+ }
166
+ if (submission.values.length < interaction.minStrings) {
167
+ issues.push(`need at least ${interaction.minStrings} values`);
168
+ }
169
+ if (submission.values.length > interaction.maxStrings) {
170
+ issues.push(`at most ${interaction.maxStrings} values`);
171
+ }
172
+ const duplicateValues = duplicates(submission.values, function keyOf(value) {
173
+ return value;
174
+ });
175
+ if (duplicateValues.length > 0) {
176
+ issues.push("duplicate values are not allowed for multiple-cardinality extended-text");
177
+ }
178
+ return issues;
179
+ }
180
+ function validateOrder(interaction, submission) {
181
+ const issues = [];
182
+ if (submission.orderedKeys.length < interaction.minChoices) {
183
+ issues.push(`need at least ${interaction.minChoices} selections`);
184
+ }
185
+ if (submission.orderedKeys.length > interaction.maxChoices) {
186
+ issues.push(`at most ${interaction.maxChoices} selections`);
187
+ }
188
+ const duplicateKeys = duplicates(submission.orderedKeys, function keyOf(value) {
189
+ return value;
190
+ });
191
+ if (duplicateKeys.length > 0) {
192
+ issues.push("duplicate selections");
193
+ }
194
+ const unknownKeys = findUnknownIds(submission.orderedKeys, interaction.choices);
195
+ if (unknownKeys.length > 0) {
196
+ issues.push(`unknown choices: ${unknownKeys.join(", ")}`);
197
+ }
198
+ return issues;
199
+ }
200
+ function validateMatch(interaction, submission) {
201
+ const issues = [];
202
+ if (submission.pairs.length < interaction.minAssociations) {
203
+ issues.push(`need at least ${interaction.minAssociations} associations`);
204
+ }
205
+ if (submission.pairs.length > interaction.maxAssociations) {
206
+ issues.push(`at most ${interaction.maxAssociations} associations`);
207
+ }
208
+ const duplicatePairs = duplicates(submission.pairs, function keyOf(pair) {
209
+ return `${pair.source}->${pair.target}`;
210
+ });
211
+ if (duplicatePairs.length > 0) {
212
+ issues.push("duplicate associations are not allowed");
213
+ }
214
+ const sourceIds = new Set(interaction.sourceChoices.map(function getId(choice) {
215
+ return choice.identifier;
216
+ }));
217
+ const targetIds = new Set(interaction.targetChoices.map(function getId(choice) {
218
+ return choice.identifier;
219
+ }));
220
+ for (const pair of submission.pairs) {
221
+ if (!sourceIds.has(pair.source)) {
222
+ issues.push(`unknown source '${pair.source}'`);
223
+ }
224
+ if (!targetIds.has(pair.target)) {
225
+ issues.push(`unknown target '${pair.target}'`);
226
+ }
227
+ }
228
+ const sourceCounts = countByIdentifier(submission.pairs, "source");
229
+ const targetCounts = countByIdentifier(submission.pairs, "target");
230
+ issues.push(...validateUsageBounds(interaction.sourceChoices, sourceCounts, "source"));
231
+ issues.push(...validateUsageBounds(interaction.targetChoices, targetCounts, "target"));
232
+ return issues;
233
+ }
234
+ function validatePortableCustom(interaction, submission) {
235
+ if (submission.pciId !== interaction.pciId) {
236
+ return [
237
+ `submission PCI '${submission.pciId}' does not match interaction PCI '${interaction.pciId}'`
238
+ ];
239
+ }
240
+ const schema = pciSubmissionSchema(interaction.pciId);
241
+ const result = schema.safeParse(submission.value);
242
+ if (!result.success) {
243
+ return result.error.issues.map(function toIssue(issue) {
244
+ return issue.message;
245
+ });
246
+ }
247
+ return [];
248
+ }
249
+ function validateSubmissionForInteraction(interaction, submission) {
250
+ switch (interaction.type) {
251
+ case "choice":
252
+ if (submission.type !== "choice") {
253
+ return { ok: false, issues: [typeMismatch(interaction.type, submission.type)] };
254
+ }
255
+ return buildResult(submission, validateChoice(interaction, submission));
256
+ case "text-entry":
257
+ if (submission.type !== "text-entry") {
258
+ return { ok: false, issues: [typeMismatch(interaction.type, submission.type)] };
259
+ }
260
+ return { ok: true, value: submission };
261
+ case "extended-text":
262
+ if (submission.type !== "extended-text") {
263
+ return { ok: false, issues: [typeMismatch(interaction.type, submission.type)] };
264
+ }
265
+ return buildResult(submission, validateExtendedText(interaction, submission));
266
+ case "order":
267
+ if (submission.type !== "order") {
268
+ return { ok: false, issues: [typeMismatch(interaction.type, submission.type)] };
269
+ }
270
+ return buildResult(submission, validateOrder(interaction, submission));
271
+ case "match":
272
+ if (submission.type !== "match") {
273
+ return { ok: false, issues: [typeMismatch(interaction.type, submission.type)] };
274
+ }
275
+ return buildResult(submission, validateMatch(interaction, submission));
276
+ case "portable-custom":
277
+ if (submission.type !== "portable-custom") {
278
+ return { ok: false, issues: [typeMismatch(interaction.type, submission.type)] };
279
+ }
280
+ return buildResult(submission, validatePortableCustom(interaction, submission));
281
+ }
282
+ }
283
+ function submissionValidationMessage(result) {
284
+ return result.issues.join("; ");
285
+ }
286
+ export {
287
+ validateSubmissionForInteraction,
288
+ submissionValidationMessage,
289
+ TextEntrySubmissionSchema,
290
+ RendererSubmissionSchema,
291
+ OrderSubmissionSchema,
292
+ MatchSubmissionSchema,
293
+ MatchPairSchema,
294
+ FractionAdditionPciSubmissionSchema,
295
+ ExtendedTextSubmissionSchema,
296
+ DivisionRemainderPciSubmissionSchema,
297
+ ChoiceSubmissionSchema
298
+ };
299
+
300
+ //# debugId=5A4E82ADE8F4197364756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/contracts/validation.ts", "../src/contracts/pci-schemas.ts"],
4
+ "sourcesContent": [
5
+ "import { z } from \"zod\"\n\nimport type { PciId } from \"@superbuilders/primer-tives/client/pci\"\n\nimport {\n\tDivisionRemainderSubmissionSchema,\n\tFractionAdditionSubmissionSchema\n} from \"@superbuilders/primer-tives/contracts/pci-schemas\"\nimport type {\n\tMatchPair,\n\tRendererChoice,\n\tRendererInteraction,\n\tRendererMatchChoice,\n\tRendererSubmission\n} from \"@superbuilders/primer-tives/contracts/types\"\n\nconst MatchPairSchema = z.object({\n\tsource: z.string(),\n\ttarget: z.string()\n})\n\nconst ChoiceSubmissionSchema = z.object({\n\ttype: z.literal(\"choice\"),\n\tselectedKeys: z.array(z.string())\n})\n\nconst TextEntrySubmissionSchema = z.object({\n\ttype: z.literal(\"text-entry\"),\n\tvalue: z.string()\n})\n\nconst ExtendedTextSubmissionSchema = z.object({\n\ttype: z.literal(\"extended-text\"),\n\tvalues: z.array(z.string()).min(1)\n})\n\nconst OrderSubmissionSchema = z.object({\n\ttype: z.literal(\"order\"),\n\torderedKeys: z.array(z.string())\n})\n\nconst MatchSubmissionSchema = z.object({\n\ttype: z.literal(\"match\"),\n\tpairs: z.array(MatchPairSchema)\n})\n\nconst DivisionRemainderPciSubmissionSchema = z.object({\n\ttype: z.literal(\"portable-custom\"),\n\tpciId: z.literal(\"urn:primer:pci:division-remainder\"),\n\tvalue: DivisionRemainderSubmissionSchema\n})\n\nconst FractionAdditionPciSubmissionSchema = z.object({\n\ttype: z.literal(\"portable-custom\"),\n\tpciId: z.literal(\"urn:primer:pci:fraction-addition\"),\n\tvalue: FractionAdditionSubmissionSchema\n})\n\nconst RendererSubmissionSchema = z.union([\n\tChoiceSubmissionSchema,\n\tTextEntrySubmissionSchema,\n\tExtendedTextSubmissionSchema,\n\tOrderSubmissionSchema,\n\tMatchSubmissionSchema,\n\tDivisionRemainderPciSubmissionSchema,\n\tFractionAdditionPciSubmissionSchema\n])\n\nfunction duplicates<T>(values: readonly T[], keyOf: (value: T) => string): string[] {\n\tconst seen = new Set<string>()\n\tconst duplicated = new Set<string>()\n\tfor (const value of values) {\n\t\tconst key = keyOf(value)\n\t\tif (seen.has(key)) {\n\t\t\tduplicated.add(key)\n\t\t\tcontinue\n\t\t}\n\t\tseen.add(key)\n\t}\n\treturn [...duplicated]\n}\n\nfunction findUnknownIds(values: readonly string[], choices: RendererChoice[]): string[] {\n\tconst ids = new Set(\n\t\tchoices.map(function getId(choice) {\n\t\t\treturn choice.identifier\n\t\t})\n\t)\n\treturn values.filter(function isUnknown(value) {\n\t\treturn !ids.has(value)\n\t})\n}\n\nfunction countByIdentifier(pairs: MatchPair[], side: \"source\" | \"target\"): Map<string, number> {\n\tconst counts = new Map<string, number>()\n\tfor (const pair of pairs) {\n\t\tconst key = pair[side]\n\t\tconst currentCount = counts.get(key)\n\t\tif (currentCount === undefined) {\n\t\t\tcounts.set(key, 1)\n\t\t\tcontinue\n\t\t}\n\t\tcounts.set(key, currentCount + 1)\n\t}\n\treturn counts\n}\n\nfunction validateUsageBounds(\n\tchoices: RendererMatchChoice[],\n\tcounts: Map<string, number>,\n\tside: \"source\" | \"target\"\n): string[] {\n\tconst issues: string[] = []\n\tfor (const choice of choices) {\n\t\tconst maybeCount = counts.get(choice.identifier)\n\t\tconst count = maybeCount === undefined ? 0 : maybeCount\n\t\tif (choice.matchMax !== 0 && count > choice.matchMax) {\n\t\t\tissues.push(`${side} '${choice.identifier}' used ${count} times, max ${choice.matchMax}`)\n\t\t}\n\t\tif (count < choice.matchMin) {\n\t\t\tissues.push(`${side} '${choice.identifier}' used ${count} times, min ${choice.matchMin}`)\n\t\t}\n\t}\n\treturn issues\n}\n\nfunction pciSubmissionSchema(pciId: PciId) {\n\tswitch (pciId) {\n\t\tcase \"urn:primer:pci:division-remainder\":\n\t\t\treturn DivisionRemainderSubmissionSchema\n\t\tcase \"urn:primer:pci:fraction-addition\":\n\t\t\treturn FractionAdditionSubmissionSchema\n\t}\n\tconst exhaustiveCheck: never = pciId\n\treturn exhaustiveCheck\n}\n\ntype SubmissionValidationSuccess = {\n\tok: true\n\tvalue: RendererSubmission\n}\n\ntype SubmissionValidationFailure = {\n\tok: false\n\tissues: readonly string[]\n}\n\ntype SubmissionValidationResult = SubmissionValidationSuccess | SubmissionValidationFailure\n\nfunction typeMismatch(interactionType: string, submissionType: string): string {\n\treturn `submission type '${submissionType}' does not match interaction type '${interactionType}'`\n}\n\nfunction buildResult(\n\tsubmission: RendererSubmission,\n\tissues: readonly string[]\n): SubmissionValidationResult {\n\tif (issues.length > 0) {\n\t\treturn { ok: false, issues }\n\t}\n\treturn { ok: true, value: submission }\n}\n\nfunction validateChoice(\n\tinteraction: Extract<RendererInteraction, { type: \"choice\" }>,\n\tsubmission: Extract<RendererSubmission, { type: \"choice\" }>\n): readonly string[] {\n\tconst issues: string[] = []\n\tif (submission.selectedKeys.length < interaction.minChoices) {\n\t\tissues.push(`need at least ${interaction.minChoices} selections`)\n\t}\n\tif (submission.selectedKeys.length > interaction.maxChoices) {\n\t\tissues.push(`at most ${interaction.maxChoices} selections`)\n\t}\n\tconst duplicateKeys = duplicates(submission.selectedKeys, function keyOf(value) {\n\t\treturn value\n\t})\n\tif (duplicateKeys.length > 0) {\n\t\tissues.push(\"duplicate selections\")\n\t}\n\tconst unknownKeys = findUnknownIds(submission.selectedKeys, interaction.options)\n\tif (unknownKeys.length > 0) {\n\t\tissues.push(`unknown options: ${unknownKeys.join(\", \")}`)\n\t}\n\treturn issues\n}\n\nfunction validateExtendedText(\n\tinteraction: Extract<RendererInteraction, { type: \"extended-text\" }>,\n\tsubmission: Extract<RendererSubmission, { type: \"extended-text\" }>\n): readonly string[] {\n\tconst issues: string[] = []\n\tif (interaction.cardinality === \"single\") {\n\t\tif (submission.values.length !== 1) {\n\t\t\tissues.push(\"single-cardinality extended-text requires exactly one value\")\n\t\t}\n\t\treturn issues\n\t}\n\tif (submission.values.length < interaction.minStrings) {\n\t\tissues.push(`need at least ${interaction.minStrings} values`)\n\t}\n\tif (submission.values.length > interaction.maxStrings) {\n\t\tissues.push(`at most ${interaction.maxStrings} values`)\n\t}\n\tconst duplicateValues = duplicates(submission.values, function keyOf(value) {\n\t\treturn value\n\t})\n\tif (duplicateValues.length > 0) {\n\t\tissues.push(\"duplicate values are not allowed for multiple-cardinality extended-text\")\n\t}\n\treturn issues\n}\n\nfunction validateOrder(\n\tinteraction: Extract<RendererInteraction, { type: \"order\" }>,\n\tsubmission: Extract<RendererSubmission, { type: \"order\" }>\n): readonly string[] {\n\tconst issues: string[] = []\n\tif (submission.orderedKeys.length < interaction.minChoices) {\n\t\tissues.push(`need at least ${interaction.minChoices} selections`)\n\t}\n\tif (submission.orderedKeys.length > interaction.maxChoices) {\n\t\tissues.push(`at most ${interaction.maxChoices} selections`)\n\t}\n\tconst duplicateKeys = duplicates(submission.orderedKeys, function keyOf(value) {\n\t\treturn value\n\t})\n\tif (duplicateKeys.length > 0) {\n\t\tissues.push(\"duplicate selections\")\n\t}\n\tconst unknownKeys = findUnknownIds(submission.orderedKeys, interaction.choices)\n\tif (unknownKeys.length > 0) {\n\t\tissues.push(`unknown choices: ${unknownKeys.join(\", \")}`)\n\t}\n\treturn issues\n}\n\nfunction validateMatch(\n\tinteraction: Extract<RendererInteraction, { type: \"match\" }>,\n\tsubmission: Extract<RendererSubmission, { type: \"match\" }>\n): readonly string[] {\n\tconst issues: string[] = []\n\tif (submission.pairs.length < interaction.minAssociations) {\n\t\tissues.push(`need at least ${interaction.minAssociations} associations`)\n\t}\n\tif (submission.pairs.length > interaction.maxAssociations) {\n\t\tissues.push(`at most ${interaction.maxAssociations} associations`)\n\t}\n\tconst duplicatePairs = duplicates(submission.pairs, function keyOf(pair) {\n\t\treturn `${pair.source}->${pair.target}`\n\t})\n\tif (duplicatePairs.length > 0) {\n\t\tissues.push(\"duplicate associations are not allowed\")\n\t}\n\tconst sourceIds = new Set(\n\t\tinteraction.sourceChoices.map(function getId(choice) {\n\t\t\treturn choice.identifier\n\t\t})\n\t)\n\tconst targetIds = new Set(\n\t\tinteraction.targetChoices.map(function getId(choice) {\n\t\t\treturn choice.identifier\n\t\t})\n\t)\n\tfor (const pair of submission.pairs) {\n\t\tif (!sourceIds.has(pair.source)) {\n\t\t\tissues.push(`unknown source '${pair.source}'`)\n\t\t}\n\t\tif (!targetIds.has(pair.target)) {\n\t\t\tissues.push(`unknown target '${pair.target}'`)\n\t\t}\n\t}\n\tconst sourceCounts = countByIdentifier(submission.pairs, \"source\")\n\tconst targetCounts = countByIdentifier(submission.pairs, \"target\")\n\tissues.push(...validateUsageBounds(interaction.sourceChoices, sourceCounts, \"source\"))\n\tissues.push(...validateUsageBounds(interaction.targetChoices, targetCounts, \"target\"))\n\treturn issues\n}\n\nfunction validatePortableCustom(\n\tinteraction: Extract<RendererInteraction, { type: \"portable-custom\" }>,\n\tsubmission: Extract<RendererSubmission, { type: \"portable-custom\" }>\n): readonly string[] {\n\tif (submission.pciId !== interaction.pciId) {\n\t\treturn [\n\t\t\t`submission PCI '${submission.pciId}' does not match interaction PCI '${interaction.pciId}'`\n\t\t]\n\t}\n\tconst schema = pciSubmissionSchema(interaction.pciId)\n\tconst result = schema.safeParse(submission.value)\n\tif (!result.success) {\n\t\treturn result.error.issues.map(function toIssue(issue) {\n\t\t\treturn issue.message\n\t\t})\n\t}\n\treturn []\n}\n\nfunction validateSubmissionForInteraction(\n\tinteraction: RendererInteraction,\n\tsubmission: RendererSubmission\n): SubmissionValidationResult {\n\tswitch (interaction.type) {\n\t\tcase \"choice\":\n\t\t\tif (submission.type !== \"choice\") {\n\t\t\t\treturn { ok: false, issues: [typeMismatch(interaction.type, submission.type)] }\n\t\t\t}\n\t\t\treturn buildResult(submission, validateChoice(interaction, submission))\n\t\tcase \"text-entry\":\n\t\t\tif (submission.type !== \"text-entry\") {\n\t\t\t\treturn { ok: false, issues: [typeMismatch(interaction.type, submission.type)] }\n\t\t\t}\n\t\t\treturn { ok: true, value: submission }\n\t\tcase \"extended-text\":\n\t\t\tif (submission.type !== \"extended-text\") {\n\t\t\t\treturn { ok: false, issues: [typeMismatch(interaction.type, submission.type)] }\n\t\t\t}\n\t\t\treturn buildResult(submission, validateExtendedText(interaction, submission))\n\t\tcase \"order\":\n\t\t\tif (submission.type !== \"order\") {\n\t\t\t\treturn { ok: false, issues: [typeMismatch(interaction.type, submission.type)] }\n\t\t\t}\n\t\t\treturn buildResult(submission, validateOrder(interaction, submission))\n\t\tcase \"match\":\n\t\t\tif (submission.type !== \"match\") {\n\t\t\t\treturn { ok: false, issues: [typeMismatch(interaction.type, submission.type)] }\n\t\t\t}\n\t\t\treturn buildResult(submission, validateMatch(interaction, submission))\n\t\tcase \"portable-custom\":\n\t\t\tif (submission.type !== \"portable-custom\") {\n\t\t\t\treturn { ok: false, issues: [typeMismatch(interaction.type, submission.type)] }\n\t\t\t}\n\t\t\treturn buildResult(submission, validatePortableCustom(interaction, submission))\n\t}\n}\n\nfunction submissionValidationMessage(result: SubmissionValidationFailure): string {\n\treturn result.issues.join(\"; \")\n}\n\nexport {\n\tChoiceSubmissionSchema,\n\tDivisionRemainderPciSubmissionSchema,\n\tExtendedTextSubmissionSchema,\n\tFractionAdditionPciSubmissionSchema,\n\tMatchPairSchema,\n\tMatchSubmissionSchema,\n\tOrderSubmissionSchema,\n\tRendererSubmissionSchema,\n\tTextEntrySubmissionSchema,\n\tsubmissionValidationMessage,\n\tvalidateSubmissionForInteraction\n}\nexport type { SubmissionValidationFailure, SubmissionValidationResult, SubmissionValidationSuccess }\n",
6
+ "import { z } from \"zod\"\n\nconst DivisionRemainderPropsSchema = z.object({\n\tdividend: z.number(),\n\tdivisor: z.number()\n})\n\nconst DivisionRemainderSubmissionSchema = z.object({\n\tquotient: z.string(),\n\tremainder: z.string()\n})\n\nconst FractionOperandSchema = z.object({\n\tnumerator: z.number(),\n\tdenominator: z.number()\n})\n\nconst FractionAdditionPropsSchema = z.object({\n\tleft: FractionOperandSchema,\n\tright: FractionOperandSchema\n})\n\nconst FractionAdditionSubmissionSchema = z.object({\n\tnumerator: z.string(),\n\tdenominator: z.string()\n})\n\nexport {\n\tDivisionRemainderPropsSchema,\n\tDivisionRemainderSubmissionSchema,\n\tFractionAdditionPropsSchema,\n\tFractionAdditionSubmissionSchema\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "5A4E82ADE8F4197364756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ declare const DivisionRemainderPropsSchema: z.ZodObject<{
3
+ dividend: z.ZodNumber;
4
+ divisor: z.ZodNumber;
5
+ }, z.core.$strip>;
6
+ declare const DivisionRemainderSubmissionSchema: z.ZodObject<{
7
+ quotient: z.ZodString;
8
+ remainder: z.ZodString;
9
+ }, z.core.$strip>;
10
+ declare const FractionAdditionPropsSchema: z.ZodObject<{
11
+ left: z.ZodObject<{
12
+ numerator: z.ZodNumber;
13
+ denominator: z.ZodNumber;
14
+ }, z.core.$strip>;
15
+ right: z.ZodObject<{
16
+ numerator: z.ZodNumber;
17
+ denominator: z.ZodNumber;
18
+ }, z.core.$strip>;
19
+ }, z.core.$strip>;
20
+ declare const FractionAdditionSubmissionSchema: z.ZodObject<{
21
+ numerator: z.ZodString;
22
+ denominator: z.ZodString;
23
+ }, z.core.$strip>;
24
+ export { DivisionRemainderPropsSchema, DivisionRemainderSubmissionSchema, FractionAdditionPropsSchema, FractionAdditionSubmissionSchema };
25
+ //# sourceMappingURL=pci-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pci-schemas.d.ts","sourceRoot":"","sources":["../../src/contracts/pci-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,QAAA,MAAM,4BAA4B;;;iBAGhC,CAAA;AAEF,QAAA,MAAM,iCAAiC;;;iBAGrC,CAAA;AAOF,QAAA,MAAM,2BAA2B;;;;;;;;;iBAG/B,CAAA;AAEF,QAAA,MAAM,gCAAgC;;;iBAGpC,CAAA;AAEF,OAAO,EACN,4BAA4B,EAC5B,iCAAiC,EACjC,2BAA2B,EAC3B,gCAAgC,EAChC,CAAA"}