@superbuilders/primer-tives 1.2.0 → 2.2.0
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.
- package/README.md +744 -533
- package/dist/client/choice-state.d.ts +2 -1
- package/dist/client/choice-state.d.ts.map +1 -1
- package/dist/client/create.d.ts +23 -7
- package/dist/client/create.d.ts.map +1 -1
- package/dist/client/extended-text-state.d.ts +2 -1
- package/dist/client/extended-text-state.d.ts.map +1 -1
- package/dist/client/feedback-state.d.ts +2 -2
- package/dist/client/feedback-state.d.ts.map +1 -1
- package/dist/client/index.js +226 -109
- package/dist/client/index.js.map +21 -17
- package/dist/client/match-state.d.ts +2 -1
- package/dist/client/match-state.d.ts.map +1 -1
- package/dist/client/observation-state.d.ts +2 -1
- package/dist/client/observation-state.d.ts.map +1 -1
- package/dist/client/order-state.d.ts +2 -1
- package/dist/client/order-state.d.ts.map +1 -1
- package/dist/client/pci-state.d.ts +2 -1
- package/dist/client/pci-state.d.ts.map +1 -1
- package/dist/client/session-context.d.ts +1 -1
- package/dist/client/session-context.d.ts.map +1 -1
- package/dist/client/session.d.ts +2 -2
- package/dist/client/session.d.ts.map +1 -1
- package/dist/client/text-entry-state.d.ts +2 -1
- package/dist/client/text-entry-state.d.ts.map +1 -1
- package/dist/client/transport.d.ts +13 -11
- package/dist/client/transport.d.ts.map +1 -1
- package/dist/client/types.d.ts +10 -1
- package/dist/client/types.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +4 -3
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +42 -36
- package/dist/contracts/index.js.map +6 -5
- package/dist/contracts/pci-schemas.d.ts +24 -20
- package/dist/contracts/pci-schemas.d.ts.map +1 -1
- package/dist/contracts/pci.d.ts +26 -27
- package/dist/contracts/pci.d.ts.map +1 -1
- package/dist/contracts/types.d.ts +5 -9
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/contracts/validation.d.ts +34 -23
- package/dist/contracts/validation.d.ts.map +1 -1
- package/dist/errors.d.ts +3 -6
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +5 -11
- package/dist/errors.js.map +3 -3
- package/dist/server/create-server.d.ts +3 -33
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/exchange.d.ts +7 -14
- package/dist/server/exchange.d.ts.map +1 -1
- package/dist/server/index.d.ts +1 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +32 -407
- package/dist/server/index.js.map +6 -9
- package/dist/subject-pcis.d.ts +13 -0
- package/dist/subject-pcis.d.ts.map +1 -0
- package/dist/version.d.ts +4 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +5 -1
- package/dist/server/hints.d.ts +0 -25
- package/dist/server/hints.d.ts.map +0 -1
- package/dist/server/students.d.ts +0 -12
- package/dist/server/students.d.ts.map +0 -1
package/dist/client/session.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { PrimerLogger } from "../logger";
|
|
2
2
|
import type { PciId } from "../contracts/pci";
|
|
3
3
|
import type { TransitionPhase, WireIntent } from "./session-context";
|
|
4
|
-
import type { SubjectScope } from "../subject";
|
|
5
4
|
import type { TransportResult, WireRequestBody } from "./transport";
|
|
5
|
+
import type { SubjectScope } from "../subject";
|
|
6
6
|
import type { PrimerState } from "./types";
|
|
7
7
|
interface SessionConfig<Pcis extends PciId = PciId> {
|
|
8
8
|
readonly supportedPcis: readonly Pcis[];
|
|
9
9
|
readonly subject: SubjectScope;
|
|
10
|
-
readonly
|
|
10
|
+
readonly logger: PrimerLogger;
|
|
11
11
|
readonly transport: (body: WireRequestBody<Pcis>) => Promise<TransportResult<Pcis>>;
|
|
12
12
|
}
|
|
13
13
|
declare function makeSession<Pcis extends PciId>(sc: SessionConfig<Pcis>): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/client/session.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,KAAK,EAEX,eAAe,EACf,UAAU,EACV,MAAM,oDAAoD,CAAA;AAC3D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/client/session.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,KAAK,EAEX,eAAe,EACf,UAAU,EACV,MAAM,oDAAoD,CAAA;AAC3D,OAAO,KAAK,EACX,eAAe,EACf,eAAe,EAEf,MAAM,8CAA8C,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAOvE,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAUzF,UAAU,aAAa,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IACjD,QAAQ,CAAC,aAAa,EAAE,SAAS,IAAI,EAAE,CAAA;IACvC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;CACnF;AAyBD,iBAAS,WAAW,CAAC,IAAI,SAAS,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC;sBA+DtD,UAAU,CAAC,IAAI,CAAC,SACjB,eAAe,KACpB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EAiF7B;AAED,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,YAAY,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { ContentBlock } from "../contracts/content";
|
|
1
2
|
import type { SessionContext } from "./session-context";
|
|
2
3
|
import type { PciId } from "../contracts/pci";
|
|
3
4
|
import type { RendererInteraction, RendererStimulus } from "../contracts/types";
|
|
4
5
|
import type { PrimerState } from "./types";
|
|
5
|
-
declare function textEntryState<Pcis extends PciId>(ctx: SessionContext<Pcis>, stimulus: RendererStimulus | null, interaction: Extract<RendererInteraction<Pcis>, {
|
|
6
|
+
declare function textEntryState<Pcis extends PciId>(ctx: SessionContext<Pcis>, body: ContentBlock[], stimulus: RendererStimulus | null, interaction: Extract<RendererInteraction<Pcis>, {
|
|
6
7
|
type: "text-entry";
|
|
7
8
|
}>): PrimerState<Pcis>;
|
|
8
9
|
export { textEntryState };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-entry-state.d.ts","sourceRoot":"","sources":["../../src/client/text-entry-state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"text-entry-state.d.ts","sourceRoot":"","sources":["../../src/client/text-entry-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAA;AAQjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAA;AACxF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,KAAK,EACX,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,6CAA6C,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAE3E,iBAAS,cAAc,CAAC,IAAI,SAAS,KAAK,EACzC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,IAAI,EAAE,YAAY,EAAE,EACpB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EACjC,WAAW,EAAE,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,GACrE,WAAW,CAAC,IAAI,CAAC,CAmFnB;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import type { PciId } from "../contracts/pci";
|
|
2
2
|
import type { SessionContext, WireIntent } from "./session-context";
|
|
3
3
|
import type { SubjectScope } from "../subject";
|
|
4
|
-
import type { ContentInline } from "../contracts/content";
|
|
4
|
+
import type { ContentBlock, ContentInline } from "../contracts/content";
|
|
5
5
|
import type { RendererInteraction, RendererStimulus, RendererSubmission } from "../contracts/types";
|
|
6
6
|
import type { InteractionReview } from "../contracts/review";
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
interface WireFrame<Pcis extends PciId = PciId> {
|
|
8
|
+
body: ContentBlock[];
|
|
9
9
|
stimulus: RendererStimulus | null;
|
|
10
10
|
interaction: RendererInteraction<Pcis> | null;
|
|
11
|
+
}
|
|
12
|
+
type WireResult<Pcis extends PciId = PciId> = {
|
|
13
|
+
outcome: "advanced";
|
|
14
|
+
frame: WireFrame<Pcis>;
|
|
11
15
|
} | {
|
|
12
16
|
outcome: "submitted";
|
|
13
|
-
|
|
14
|
-
interaction: RendererInteraction<Pcis>;
|
|
17
|
+
frame: WireFrame<Pcis>;
|
|
15
18
|
submission: RendererSubmission<Pcis>;
|
|
16
19
|
isCorrect: boolean;
|
|
17
20
|
feedbackContent: ContentInline[];
|
|
@@ -20,9 +23,8 @@ type WireResult<Pcis extends PciId = PciId> = {
|
|
|
20
23
|
outcome: "completed";
|
|
21
24
|
};
|
|
22
25
|
interface WireRequestBody<Pcis extends PciId = PciId> {
|
|
23
|
-
supportedPcis: readonly PciId[];
|
|
24
|
-
intent: WireIntent<Pcis>;
|
|
25
26
|
subject: SubjectScope;
|
|
27
|
+
intent: WireIntent<Pcis>;
|
|
26
28
|
}
|
|
27
29
|
type TransportResult<Pcis extends PciId = PciId> = {
|
|
28
30
|
ok: true;
|
|
@@ -31,17 +33,17 @@ type TransportResult<Pcis extends PciId = PciId> = {
|
|
|
31
33
|
ok: false;
|
|
32
34
|
error: Error;
|
|
33
35
|
};
|
|
34
|
-
interface TransportConfig
|
|
36
|
+
interface TransportConfig {
|
|
35
37
|
readonly accessToken: string;
|
|
36
|
-
readonly
|
|
38
|
+
readonly subject: SubjectScope;
|
|
37
39
|
readonly origin: string;
|
|
38
40
|
readonly fetch?: typeof globalThis.fetch;
|
|
39
41
|
readonly abort?: AbortController;
|
|
40
|
-
readonly
|
|
42
|
+
readonly logger: SessionContext["logger"];
|
|
41
43
|
}
|
|
42
44
|
declare function httpSentinel(status: number, body: string): Error;
|
|
43
45
|
declare function isAbortError(err: unknown): boolean;
|
|
44
|
-
declare function createTransport<Pcis extends PciId>(tc: TransportConfig
|
|
46
|
+
declare function createTransport<Pcis extends PciId>(tc: TransportConfig): (body: WireRequestBody<Pcis>) => Promise<TransportResult<Pcis>>;
|
|
45
47
|
export { createTransport, httpSentinel, isAbortError };
|
|
46
48
|
export type { TransportConfig, TransportResult, WireRequestBody, WireResult };
|
|
47
49
|
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oDAAoD,CAAA;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAA;AAChG,OAAO,KAAK,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,6CAA6C,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAA;AAKrF,UAAU,SAAS,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IAC7C,IAAI,EAAE,YAAY,EAAE,CAAA;IACpB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACjC,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAC7C;AAED,KAAK,UAAU,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,IACvC;IACA,OAAO,EAAE,UAAU,CAAA;IACnB,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;CACrB,GACD;IACA,OAAO,EAAE,WAAW,CAAA;IACpB,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IACtB,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAA;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,EAAE,aAAa,EAAE,CAAA;IAChC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CACrC,GACD;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAA;AAE3B,UAAU,eAAe,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IACnD,OAAO,EAAE,YAAY,CAAA;IACrB,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;CACxB;AAED,KAAK,eAAe,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,IAC5C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAA;AAE9B,UAAU,eAAe;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;CACzC;AA2DD,iBAAS,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CA+BzD;AAgCD,iBAAS,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQ3C;AAED,iBAAS,eAAe,CAAC,IAAI,SAAS,KAAK,EAAE,EAAE,EAAE,eAAe,UAWhC,eAAe,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CA8ErF;AAED,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,CAAA;AACtD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,CAAA"}
|
package/dist/client/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ContentInline } from "../contracts/content";
|
|
1
|
+
import type { ContentBlock, ContentInline } from "../contracts/content";
|
|
2
2
|
import type { PciId, PciProps, PciValue } from "../contracts/pci";
|
|
3
3
|
import type { InteractionReview } from "../contracts/review";
|
|
4
4
|
import type { MatchPair, PciInteraction, RendererChoice, RendererInteraction, RendererMatchChoice, RendererStimulus, RendererSubmission, StandardRendererInteraction } from "../contracts/types";
|
|
@@ -7,12 +7,14 @@ interface NonSerializable {
|
|
|
7
7
|
}
|
|
8
8
|
interface ObservationState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
9
9
|
readonly phase: "observation";
|
|
10
|
+
readonly body: ContentBlock[];
|
|
10
11
|
readonly stimulus: RendererStimulus | null;
|
|
11
12
|
advance(): Promise<PrimerState<Pcis>>;
|
|
12
13
|
}
|
|
13
14
|
interface ChoiceState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
14
15
|
readonly phase: "interaction";
|
|
15
16
|
readonly kind: "choice";
|
|
17
|
+
readonly body: ContentBlock[];
|
|
16
18
|
readonly stimulus: RendererStimulus | null;
|
|
17
19
|
readonly interaction: Extract<StandardRendererInteraction, {
|
|
18
20
|
type: "choice";
|
|
@@ -26,6 +28,7 @@ interface ChoiceState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
|
26
28
|
interface TextEntryState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
27
29
|
readonly phase: "interaction";
|
|
28
30
|
readonly kind: "text-entry";
|
|
31
|
+
readonly body: ContentBlock[];
|
|
29
32
|
readonly stimulus: RendererStimulus | null;
|
|
30
33
|
readonly interaction: Extract<StandardRendererInteraction, {
|
|
31
34
|
type: "text-entry";
|
|
@@ -37,6 +40,7 @@ interface ExtendedTextSingleState<Pcis extends PciId = PciId> extends NonSeriali
|
|
|
37
40
|
readonly phase: "interaction";
|
|
38
41
|
readonly kind: "extended-text";
|
|
39
42
|
readonly cardinality: "single";
|
|
43
|
+
readonly body: ContentBlock[];
|
|
40
44
|
readonly stimulus: RendererStimulus | null;
|
|
41
45
|
readonly interaction: Extract<StandardRendererInteraction, {
|
|
42
46
|
type: "extended-text";
|
|
@@ -49,6 +53,7 @@ interface ExtendedTextMultipleState<Pcis extends PciId = PciId> extends NonSeria
|
|
|
49
53
|
readonly phase: "interaction";
|
|
50
54
|
readonly kind: "extended-text";
|
|
51
55
|
readonly cardinality: "multiple";
|
|
56
|
+
readonly body: ContentBlock[];
|
|
52
57
|
readonly stimulus: RendererStimulus | null;
|
|
53
58
|
readonly interaction: Extract<StandardRendererInteraction, {
|
|
54
59
|
type: "extended-text";
|
|
@@ -63,6 +68,7 @@ type ExtendedTextState<Pcis extends PciId = PciId> = ExtendedTextSingleState<Pci
|
|
|
63
68
|
interface OrderState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
64
69
|
readonly phase: "interaction";
|
|
65
70
|
readonly kind: "order";
|
|
71
|
+
readonly body: ContentBlock[];
|
|
66
72
|
readonly stimulus: RendererStimulus | null;
|
|
67
73
|
readonly interaction: Extract<StandardRendererInteraction, {
|
|
68
74
|
type: "order";
|
|
@@ -76,6 +82,7 @@ interface OrderState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
|
76
82
|
interface MatchState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
77
83
|
readonly phase: "interaction";
|
|
78
84
|
readonly kind: "match";
|
|
85
|
+
readonly body: ContentBlock[];
|
|
79
86
|
readonly stimulus: RendererStimulus | null;
|
|
80
87
|
readonly interaction: Extract<StandardRendererInteraction, {
|
|
81
88
|
type: "match";
|
|
@@ -91,6 +98,7 @@ type PciInteractionState<Pcis extends PciId = PciId> = {
|
|
|
91
98
|
[K in Pcis]: NonSerializable & {
|
|
92
99
|
readonly phase: "interaction";
|
|
93
100
|
readonly kind: "portable-custom";
|
|
101
|
+
readonly body: ContentBlock[];
|
|
94
102
|
readonly stimulus: RendererStimulus | null;
|
|
95
103
|
readonly interaction: PciInteraction<K>;
|
|
96
104
|
readonly pciId: K;
|
|
@@ -102,6 +110,7 @@ type PciInteractionState<Pcis extends PciId = PciId> = {
|
|
|
102
110
|
type InteractionState<Pcis extends PciId = PciId> = ChoiceState<Pcis> | TextEntryState<Pcis> | ExtendedTextState<Pcis> | OrderState<Pcis> | MatchState<Pcis> | PciInteractionState<Pcis>;
|
|
103
111
|
interface FeedbackState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
104
112
|
readonly phase: "feedback";
|
|
113
|
+
readonly body: ContentBlock[];
|
|
105
114
|
readonly stimulus: RendererStimulus | null;
|
|
106
115
|
readonly interaction: RendererInteraction<Pcis>;
|
|
107
116
|
readonly submission: RendererSubmission<Pcis>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export type {
|
|
1
|
+
export type { ImageStimulus, MatchPair, PciInteraction, PciSubmission, RendererChoice, RendererInteraction, RendererMatchChoice, RendererStimulus, RendererSubmission, StandardRendererInteraction } from "./types";
|
|
2
2
|
export type { ContentBlock, ContentInline, ContentSpan } from "./content";
|
|
3
3
|
export { blocksToPlainText, inlinesToPlainText } from "./content";
|
|
4
|
-
export
|
|
4
|
+
export { PCI_IDS, isPciId } from "./pci";
|
|
5
|
+
export type { FractionInputForm, FractionInputProps, FractionInputSubmission, PciId, PciProps, PciRegistry, PciUrn, PciValue } from "./pci";
|
|
5
6
|
export type { ChoiceReview, ExtendedTextReview, InteractionReview, MatchReview, OrderReview, PciReview, ReviewRecordField, ReviewRecordFieldBaseType, ReviewScalarValue, TextEntryReview } from "./review";
|
|
6
|
-
export { ChoiceSubmissionSchema,
|
|
7
|
+
export { ChoiceSubmissionSchema, ExtendedTextSubmissionSchema, FractionInputPciSubmissionSchema, MatchPairSchema, MatchSubmissionSchema, OrderSubmissionSchema, RendererSubmissionSchema, TextEntrySubmissionSchema, submissionValidationMessage, validateSubmissionForInteraction } from "./validation";
|
|
7
8
|
export type { SubmissionValidationFailure, SubmissionValidationResult, SubmissionValidationSuccess } from "./validation";
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,aAAa,EACb,SAAS,EACT,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,MAAM,6CAA6C,CAAA;AAEpD,YAAY,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACX,MAAM,+CAA+C,CAAA;AACtD,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,+CAA+C,CAAA;AAEtD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAA;AAE5E,YAAY,EACX,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,MAAM,EACN,QAAQ,EACR,MAAM,2CAA2C,CAAA;AAElD,YAAY,EACX,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,eAAe,EACf,MAAM,8CAA8C,CAAA;AAErD,OAAO,EACN,sBAAsB,EACtB,4BAA4B,EAC5B,gCAAgC,EAChC,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"}
|
package/dist/contracts/index.js
CHANGED
|
@@ -22,31 +22,44 @@ function blocksToPlainText(blocks) {
|
|
|
22
22
|
}).join(`
|
|
23
23
|
`);
|
|
24
24
|
}
|
|
25
|
+
// src/contracts/pci.ts
|
|
26
|
+
var PCI_IDS = ["urn:primer:pci:fraction-input"];
|
|
27
|
+
function isPciId(value) {
|
|
28
|
+
for (const id of PCI_IDS) {
|
|
29
|
+
if (id === value) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
25
35
|
// src/contracts/validation.ts
|
|
26
36
|
import { z as z2 } from "zod";
|
|
27
37
|
|
|
28
38
|
// src/contracts/pci-schemas.ts
|
|
29
39
|
import { z } from "zod";
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
});
|
|
34
|
-
var DivisionRemainderSubmissionSchema = z.object({
|
|
35
|
-
quotient: z.string(),
|
|
36
|
-
remainder: z.string()
|
|
37
|
-
});
|
|
38
|
-
var FractionOperandSchema = z.object({
|
|
39
|
-
numerator: z.number(),
|
|
40
|
-
denominator: z.number()
|
|
41
|
-
});
|
|
42
|
-
var FractionAdditionPropsSchema = z.object({
|
|
43
|
-
left: FractionOperandSchema,
|
|
44
|
-
right: FractionOperandSchema
|
|
45
|
-
});
|
|
46
|
-
var FractionAdditionSubmissionSchema = z.object({
|
|
47
|
-
numerator: z.string(),
|
|
48
|
-
denominator: z.string()
|
|
40
|
+
var FractionInputPropsSchema = z.object({
|
|
41
|
+
form: z.enum(["whole", "proper", "improper", "mixed"]),
|
|
42
|
+
requireSimplified: z.boolean()
|
|
49
43
|
});
|
|
44
|
+
var FractionInputSubmissionSchema = z.discriminatedUnion("form", [
|
|
45
|
+
z.object({ form: z.literal("whole"), whole: z.string() }),
|
|
46
|
+
z.object({
|
|
47
|
+
form: z.literal("proper"),
|
|
48
|
+
numerator: z.string(),
|
|
49
|
+
denominator: z.string()
|
|
50
|
+
}),
|
|
51
|
+
z.object({
|
|
52
|
+
form: z.literal("improper"),
|
|
53
|
+
numerator: z.string(),
|
|
54
|
+
denominator: z.string()
|
|
55
|
+
}),
|
|
56
|
+
z.object({
|
|
57
|
+
form: z.literal("mixed"),
|
|
58
|
+
whole: z.string(),
|
|
59
|
+
numerator: z.string(),
|
|
60
|
+
denominator: z.string()
|
|
61
|
+
})
|
|
62
|
+
]);
|
|
50
63
|
|
|
51
64
|
// src/contracts/validation.ts
|
|
52
65
|
var MatchPairSchema = z2.object({
|
|
@@ -73,15 +86,10 @@ var MatchSubmissionSchema = z2.object({
|
|
|
73
86
|
type: z2.literal("match"),
|
|
74
87
|
pairs: z2.array(MatchPairSchema)
|
|
75
88
|
});
|
|
76
|
-
var
|
|
77
|
-
type: z2.literal("portable-custom"),
|
|
78
|
-
pciId: z2.literal("urn:primer:pci:division-remainder"),
|
|
79
|
-
value: DivisionRemainderSubmissionSchema
|
|
80
|
-
});
|
|
81
|
-
var FractionAdditionPciSubmissionSchema = z2.object({
|
|
89
|
+
var FractionInputPciSubmissionSchema = z2.object({
|
|
82
90
|
type: z2.literal("portable-custom"),
|
|
83
|
-
pciId: z2.literal("urn:primer:pci:fraction-
|
|
84
|
-
value:
|
|
91
|
+
pciId: z2.literal("urn:primer:pci:fraction-input"),
|
|
92
|
+
value: FractionInputSubmissionSchema
|
|
85
93
|
});
|
|
86
94
|
var RendererSubmissionSchema = z2.union([
|
|
87
95
|
ChoiceSubmissionSchema,
|
|
@@ -89,8 +97,7 @@ var RendererSubmissionSchema = z2.union([
|
|
|
89
97
|
ExtendedTextSubmissionSchema,
|
|
90
98
|
OrderSubmissionSchema,
|
|
91
99
|
MatchSubmissionSchema,
|
|
92
|
-
|
|
93
|
-
FractionAdditionPciSubmissionSchema
|
|
100
|
+
FractionInputPciSubmissionSchema
|
|
94
101
|
]);
|
|
95
102
|
function duplicates(values, keyOf) {
|
|
96
103
|
const seen = new Set;
|
|
@@ -142,10 +149,8 @@ function validateUsageBounds(choices, counts, side) {
|
|
|
142
149
|
}
|
|
143
150
|
function pciSubmissionSchema(pciId) {
|
|
144
151
|
switch (pciId) {
|
|
145
|
-
case "urn:primer:pci:
|
|
146
|
-
return
|
|
147
|
-
case "urn:primer:pci:fraction-addition":
|
|
148
|
-
return FractionAdditionSubmissionSchema;
|
|
152
|
+
case "urn:primer:pci:fraction-input":
|
|
153
|
+
return FractionInputSubmissionSchema;
|
|
149
154
|
}
|
|
150
155
|
const exhaustiveCheck = pciId;
|
|
151
156
|
return exhaustiveCheck;
|
|
@@ -310,17 +315,18 @@ function submissionValidationMessage(result) {
|
|
|
310
315
|
export {
|
|
311
316
|
validateSubmissionForInteraction,
|
|
312
317
|
submissionValidationMessage,
|
|
318
|
+
isPciId,
|
|
313
319
|
inlinesToPlainText,
|
|
314
320
|
blocksToPlainText,
|
|
315
321
|
TextEntrySubmissionSchema,
|
|
316
322
|
RendererSubmissionSchema,
|
|
323
|
+
PCI_IDS,
|
|
317
324
|
OrderSubmissionSchema,
|
|
318
325
|
MatchSubmissionSchema,
|
|
319
326
|
MatchPairSchema,
|
|
320
|
-
|
|
327
|
+
FractionInputPciSubmissionSchema,
|
|
321
328
|
ExtendedTextSubmissionSchema,
|
|
322
|
-
DivisionRemainderPciSubmissionSchema,
|
|
323
329
|
ChoiceSubmissionSchema
|
|
324
330
|
};
|
|
325
331
|
|
|
326
|
-
//# debugId=
|
|
332
|
+
//# debugId=CAA0A7838A9BE23D64756E2164756E21
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/contracts/content.ts", "../src/contracts/validation.ts", "../src/contracts/pci-schemas.ts"],
|
|
3
|
+
"sources": ["../src/contracts/content.ts", "../src/contracts/pci.ts", "../src/contracts/validation.ts", "../src/contracts/pci-schemas.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"type ContentSpan = { type: \"text\"; value: string } | { type: \"italic\"; value: string }\n\ntype ContentInline = ContentSpan | { type: \"latex\"; value: string }\n\ntype ContentBlock = { type: \"paragraph\"; children: ContentInline[] }\n\nfunction inlinesToPlainText(nodes: ContentInline[]): string {\n\tconst parts: string[] = []\n\tfor (const node of nodes) {\n\t\tswitch (node.type) {\n\t\t\tcase \"text\":\n\t\t\t\tparts.push(node.value)\n\t\t\t\tbreak\n\t\t\tcase \"italic\":\n\t\t\t\tparts.push(node.value)\n\t\t\t\tbreak\n\t\t\tcase \"latex\":\n\t\t\t\tparts.push(node.value)\n\t\t\t\tbreak\n\t\t}\n\t}\n\treturn parts.join(\"\")\n}\n\nfunction blocksToPlainText(blocks: ContentBlock[]): string {\n\treturn blocks\n\t\t.map(function blockText(block) {\n\t\t\treturn inlinesToPlainText(block.children)\n\t\t})\n\t\t.join(\"\\n\")\n}\n\nexport type { ContentBlock, ContentInline, ContentSpan }\nexport { blocksToPlainText, inlinesToPlainText }\n",
|
|
6
|
-
"import { z } from \"zod\"\n\nimport type { PciId } from \"@superbuilders/primer-tives/contracts/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",
|
|
7
|
-
"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"
|
|
6
|
+
"type FractionInputForm = \"whole\" | \"proper\" | \"improper\" | \"mixed\"\n\ninterface FractionInputProps {\n\tform: FractionInputForm\n\trequireSimplified: boolean\n}\n\ntype FractionInputSubmission =\n\t| { form: \"whole\"; whole: string }\n\t| { form: \"proper\"; numerator: string; denominator: string }\n\t| { form: \"improper\"; numerator: string; denominator: string }\n\t| { form: \"mixed\"; whole: string; numerator: string; denominator: string }\n\ntype PciUrn = `urn:primer:pci:${string}`\n\nconst PCI_IDS = [\"urn:primer:pci:fraction-input\"] as const\n\ninterface PciRegistry {\n\t\"urn:primer:pci:fraction-input\": {\n\t\tprops: FractionInputProps\n\t\tvalue: FractionInputSubmission\n\t}\n}\n\ntype AssertAllPciUrns = keyof PciRegistry extends PciUrn ? true : never\nconst urnCheck: AssertAllPciUrns = true\nvoid urnCheck\n\ntype PciId = keyof PciRegistry & string\ntype PciProps<K extends PciId> = PciRegistry[K][\"props\"]\ntype PciValue<K extends PciId> = PciRegistry[K][\"value\"]\n\nfunction isPciId(value: string): value is PciId {\n\tfor (const id of PCI_IDS) {\n\t\tif (id === value) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nexport { PCI_IDS, isPciId }\n\nexport type {\n\tFractionInputForm,\n\tFractionInputProps,\n\tFractionInputSubmission,\n\tPciId,\n\tPciProps,\n\tPciRegistry,\n\tPciUrn,\n\tPciValue\n}\n",
|
|
7
|
+
"import { z } from \"zod\"\n\nimport type { PciId } from \"@superbuilders/primer-tives/contracts/pci\"\n\nimport { FractionInputSubmissionSchema } 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 FractionInputPciSubmissionSchema = z.object({\n\ttype: z.literal(\"portable-custom\"),\n\tpciId: z.literal(\"urn:primer:pci:fraction-input\"),\n\tvalue: FractionInputSubmissionSchema\n})\n\nconst RendererSubmissionSchema = z.union([\n\tChoiceSubmissionSchema,\n\tTextEntrySubmissionSchema,\n\tExtendedTextSubmissionSchema,\n\tOrderSubmissionSchema,\n\tMatchSubmissionSchema,\n\tFractionInputPciSubmissionSchema\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:fraction-input\":\n\t\t\treturn FractionInputSubmissionSchema\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\tExtendedTextSubmissionSchema,\n\tFractionInputPciSubmissionSchema,\n\tMatchPairSchema,\n\tMatchSubmissionSchema,\n\tOrderSubmissionSchema,\n\tRendererSubmissionSchema,\n\tTextEntrySubmissionSchema,\n\tsubmissionValidationMessage,\n\tvalidateSubmissionForInteraction\n}\nexport type { SubmissionValidationFailure, SubmissionValidationResult, SubmissionValidationSuccess }\n",
|
|
8
|
+
"import { z } from \"zod\"\n\nconst FractionInputPropsSchema = z.object({\n\tform: z.enum([\"whole\", \"proper\", \"improper\", \"mixed\"]),\n\trequireSimplified: z.boolean()\n})\n\nconst FractionInputSubmissionSchema = z.discriminatedUnion(\"form\", [\n\tz.object({ form: z.literal(\"whole\"), whole: z.string() }),\n\tz.object({\n\t\tform: z.literal(\"proper\"),\n\t\tnumerator: z.string(),\n\t\tdenominator: z.string()\n\t}),\n\tz.object({\n\t\tform: z.literal(\"improper\"),\n\t\tnumerator: z.string(),\n\t\tdenominator: z.string()\n\t}),\n\tz.object({\n\t\tform: z.literal(\"mixed\"),\n\t\twhole: z.string(),\n\t\tnumerator: z.string(),\n\t\tdenominator: z.string()\n\t})\n])\n\nexport { FractionInputPropsSchema, FractionInputSubmissionSchema }\n"
|
|
8
9
|
],
|
|
9
|
-
"mappings": ";AAMA,SAAS,kBAAkB,CAAC,OAAgC;AAAA,EAC3D,MAAM,QAAkB,CAAC;AAAA,EACzB,WAAW,QAAQ,OAAO;AAAA,IACzB,QAAQ,KAAK;AAAA,WACP;AAAA,QACJ,MAAM,KAAK,KAAK,KAAK;AAAA,QACrB;AAAA,WACI;AAAA,QACJ,MAAM,KAAK,KAAK,KAAK;AAAA,QACrB;AAAA,WACI;AAAA,QACJ,MAAM,KAAK,KAAK,KAAK;AAAA,QACrB;AAAA;AAAA,EAEH;AAAA,EACA,OAAO,MAAM,KAAK,EAAE;AAAA;AAGrB,SAAS,iBAAiB,CAAC,QAAgC;AAAA,EAC1D,OAAO,OACL,IAAI,SAAS,SAAS,CAAC,OAAO;AAAA,IAC9B,OAAO,mBAAmB,MAAM,QAAQ;AAAA,GACxC,EACA,KAAK;AAAA,CAAI;AAAA;;
|
|
10
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "CAA0A7838A9BE23D64756E2164756E21",
|
|
11
12
|
"names": []
|
|
12
13
|
}
|
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
declare const
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
declare const FractionInputPropsSchema: z.ZodObject<{
|
|
3
|
+
form: z.ZodEnum<{
|
|
4
|
+
whole: "whole";
|
|
5
|
+
proper: "proper";
|
|
6
|
+
improper: "improper";
|
|
7
|
+
mixed: "mixed";
|
|
8
|
+
}>;
|
|
9
|
+
requireSimplified: z.ZodBoolean;
|
|
5
10
|
}, z.core.$strip>;
|
|
6
|
-
declare const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}, z.core.$strip
|
|
10
|
-
|
|
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<{
|
|
11
|
+
declare const FractionInputSubmissionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
12
|
+
form: z.ZodLiteral<"whole">;
|
|
13
|
+
whole: z.ZodString;
|
|
14
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
15
|
+
form: z.ZodLiteral<"proper">;
|
|
21
16
|
numerator: z.ZodString;
|
|
22
17
|
denominator: z.ZodString;
|
|
23
|
-
}, z.core.$strip
|
|
24
|
-
|
|
18
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
19
|
+
form: z.ZodLiteral<"improper">;
|
|
20
|
+
numerator: z.ZodString;
|
|
21
|
+
denominator: z.ZodString;
|
|
22
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
23
|
+
form: z.ZodLiteral<"mixed">;
|
|
24
|
+
whole: z.ZodString;
|
|
25
|
+
numerator: z.ZodString;
|
|
26
|
+
denominator: z.ZodString;
|
|
27
|
+
}, z.core.$strip>], "form">;
|
|
28
|
+
export { FractionInputPropsSchema, FractionInputSubmissionSchema };
|
|
25
29
|
//# sourceMappingURL=pci-schemas.d.ts.map
|
|
@@ -1 +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,
|
|
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,wBAAwB;;;;;;;;iBAG5B,CAAA;AAEF,QAAA,MAAM,6BAA6B;;;;;;;;;;;;;;;;2BAkBjC,CAAA;AAEF,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,CAAA"}
|
package/dist/contracts/pci.d.ts
CHANGED
|
@@ -1,38 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
type FractionInputForm = "whole" | "proper" | "improper" | "mixed";
|
|
2
|
+
interface FractionInputProps {
|
|
3
|
+
form: FractionInputForm;
|
|
4
|
+
requireSimplified: boolean;
|
|
4
5
|
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
left: {
|
|
11
|
-
numerator: number;
|
|
12
|
-
denominator: number;
|
|
13
|
-
};
|
|
14
|
-
right: {
|
|
15
|
-
numerator: number;
|
|
16
|
-
denominator: number;
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
interface FractionAdditionSubmission {
|
|
6
|
+
type FractionInputSubmission = {
|
|
7
|
+
form: "whole";
|
|
8
|
+
whole: string;
|
|
9
|
+
} | {
|
|
10
|
+
form: "proper";
|
|
20
11
|
numerator: string;
|
|
21
12
|
denominator: string;
|
|
22
|
-
}
|
|
13
|
+
} | {
|
|
14
|
+
form: "improper";
|
|
15
|
+
numerator: string;
|
|
16
|
+
denominator: string;
|
|
17
|
+
} | {
|
|
18
|
+
form: "mixed";
|
|
19
|
+
whole: string;
|
|
20
|
+
numerator: string;
|
|
21
|
+
denominator: string;
|
|
22
|
+
};
|
|
23
23
|
type PciUrn = `urn:primer:pci:${string}`;
|
|
24
|
+
declare const PCI_IDS: readonly ["urn:primer:pci:fraction-input"];
|
|
24
25
|
interface PciRegistry {
|
|
25
|
-
"urn:primer:pci:
|
|
26
|
-
props:
|
|
27
|
-
value:
|
|
28
|
-
};
|
|
29
|
-
"urn:primer:pci:fraction-addition": {
|
|
30
|
-
props: FractionAdditionProps;
|
|
31
|
-
value: FractionAdditionSubmission;
|
|
26
|
+
"urn:primer:pci:fraction-input": {
|
|
27
|
+
props: FractionInputProps;
|
|
28
|
+
value: FractionInputSubmission;
|
|
32
29
|
};
|
|
33
30
|
}
|
|
34
31
|
type PciId = keyof PciRegistry & string;
|
|
35
32
|
type PciProps<K extends PciId> = PciRegistry[K]["props"];
|
|
36
33
|
type PciValue<K extends PciId> = PciRegistry[K]["value"];
|
|
37
|
-
|
|
34
|
+
declare function isPciId(value: string): value is PciId;
|
|
35
|
+
export { PCI_IDS, isPciId };
|
|
36
|
+
export type { FractionInputForm, FractionInputProps, FractionInputSubmission, PciId, PciProps, PciRegistry, PciUrn, PciValue };
|
|
38
37
|
//# sourceMappingURL=pci.d.ts.map
|