@superbuilders/primer-tives 0.2.0 → 0.3.1
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 +6 -17
- package/dist/client.d.ts +0 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/errors.d.ts +1 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/extended-text-state.d.ts +3 -3
- package/dist/extended-text-state.d.ts.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +208 -38
- package/dist/index.js.map +10 -8
- package/dist/match-state.d.ts +8 -0
- package/dist/match-state.d.ts.map +1 -0
- package/dist/order-state.d.ts +15 -0
- package/dist/order-state.d.ts.map +1 -0
- package/dist/session.d.ts +0 -3
- package/dist/session.d.ts.map +1 -1
- package/dist/transport.d.ts +0 -5
- package/dist/transport.d.ts.map +1 -1
- package/dist/types.d.ts +90 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/scope.d.ts +0 -4
- package/dist/scope.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -22,8 +22,6 @@ const client = create({
|
|
|
22
22
|
publishableKey: "pk_live_abc123",
|
|
23
23
|
origin: "https://sb-primer.vercel.app",
|
|
24
24
|
supportedPcis: ["urn:primer:pci:division-remainder"],
|
|
25
|
-
subject: "vocabulary",
|
|
26
|
-
formFactor: "drill",
|
|
27
25
|
})
|
|
28
26
|
|
|
29
27
|
let state = await client.start("student-uuid")
|
|
@@ -80,30 +78,25 @@ Every request is a POST to `https://${origin}/api/v0/advance`:
|
|
|
80
78
|
```
|
|
81
79
|
POST /api/v0/advance
|
|
82
80
|
Header: Authorization: Bearer pk_...
|
|
83
|
-
Body: { studentId, supportedPcis,
|
|
81
|
+
Body: { studentId, supportedPcis, intent }
|
|
84
82
|
```
|
|
85
83
|
|
|
86
84
|
The `origin` field is required and must be the full Primer API base URL (e.g., `https://sb-primer.vercel.app`). All requests are made as absolute URLs so the browser sends the `Origin` header for server-side origin validation. The path constant `ADVANCE_PATH` is exported for reference.
|
|
87
85
|
|
|
88
|
-
The server identifies the student, determines which content to serve, evaluates submissions, and returns the next frame. The client sends:
|
|
86
|
+
The server identifies the student, determines which content to serve based on the frontend's assigned courses, evaluates submissions, and returns the next frame. The client sends:
|
|
89
87
|
|
|
90
88
|
- `studentId` — who is being advanced
|
|
91
89
|
- `supportedPcis` — which custom interaction types the renderer can handle
|
|
92
|
-
- `subject` — optional subject filter (`"vocabulary"`, `"civics"`, `"math"`)
|
|
93
|
-
- `formFactor` — optional form factor filter (`"drill"`, `"lesson"`)
|
|
94
90
|
- `intent` — `{ kind: "observation" }`, `{ kind: "interaction", submission: ... }`, or `{ kind: "timeout" }`
|
|
95
91
|
|
|
92
|
+
Course resolution is entirely server-side. The publishable key identifies the frontend, and the server looks up which courses are assigned to that frontend. The client has no knowledge of courses, subjects, or form factors.
|
|
93
|
+
|
|
96
94
|
## Configuration
|
|
97
95
|
|
|
98
96
|
```ts
|
|
99
|
-
type Subject = "vocabulary" | "civics" | "math"
|
|
100
|
-
type FormFactor = "drill" | "lesson"
|
|
101
|
-
|
|
102
97
|
interface Config<Pcis extends PciId = PciId> {
|
|
103
98
|
readonly publishableKey: string
|
|
104
99
|
readonly supportedPcis: readonly Pcis[]
|
|
105
|
-
readonly subject?: Subject
|
|
106
|
-
readonly formFactor?: FormFactor
|
|
107
100
|
readonly origin: string
|
|
108
101
|
readonly fetch?: typeof globalThis.fetch
|
|
109
102
|
readonly abort?: AbortController
|
|
@@ -115,8 +108,6 @@ interface Config<Pcis extends PciId = PciId> {
|
|
|
115
108
|
|---|---|---|
|
|
116
109
|
| `publishableKey` | yes | Must start with `pk_`. Sent as `Authorization: Bearer pk_...` header |
|
|
117
110
|
| `supportedPcis` | yes | PCI URNs the renderer handles. `[]` if none |
|
|
118
|
-
| `subject` | no | Subject filter: `"vocabulary"`, `"civics"`, `"math"`. Combined with `formFactor` to resolve a course. |
|
|
119
|
-
| `formFactor` | no | Form factor filter: `"drill"`, `"lesson"`. Combined with `subject` to resolve a course. |
|
|
120
111
|
| `origin` | yes | Base URL for the Primer API (e.g., `https://sb-primer.vercel.app`). All requests are cross-origin to ensure the browser sends the Origin header for server-side validation |
|
|
121
112
|
| `fetch` | no | Custom fetch. Defaults to `globalThis.fetch` |
|
|
122
113
|
| `abort` | no | AbortController for cancelling in-flight requests |
|
|
@@ -241,8 +232,7 @@ Causes:
|
|
|
241
232
|
- Origin not allowed (403 — `ErrForbidden`)
|
|
242
233
|
- Resource not found (404 — `ErrNotFound`)
|
|
243
234
|
- Malformed request (400 — `ErrBadRequest`)
|
|
244
|
-
- Unsupported PCI (422
|
|
245
|
-
- Form factor not found (422 — `ErrFormFactorNotFound`)
|
|
235
|
+
- Unsupported PCI (422 — `ErrUnsupportedPci`)
|
|
246
236
|
|
|
247
237
|
## Client-side validation
|
|
248
238
|
|
|
@@ -285,7 +275,6 @@ if (errors.is(state.error, ErrNetwork)) { /* handle */ }
|
|
|
285
275
|
| `ErrForbidden` | 403 — origin not allowed |
|
|
286
276
|
| `ErrNotFound` | 404 — resource not found |
|
|
287
277
|
| `ErrUnsupportedPci` | 422 — server sent a PCI the client can't handle |
|
|
288
|
-
| `ErrFormFactorNotFound` | 422 — requested form factor tag matches no sequences |
|
|
289
278
|
|
|
290
279
|
**Thrown directly** (not wrapped in errored/fatal):
|
|
291
280
|
|
|
@@ -359,7 +348,7 @@ Everything is exported from the package root:
|
|
|
359
348
|
|
|
360
349
|
```ts
|
|
361
350
|
import { create, ADVANCE_PATH } from "@superbuilders/primer-tives"
|
|
362
|
-
import { ErrNetwork, ErrTimeout,
|
|
351
|
+
import { ErrNetwork, ErrTimeout, ErrUnsupportedPci } from "@superbuilders/primer-tives"
|
|
363
352
|
import { inlinesToPlainText, blocksToPlainText } from "@superbuilders/primer-tives"
|
|
364
353
|
import type { PrimerState, Config, Client, PrimerLogger } from "@superbuilders/primer-tives"
|
|
365
354
|
import type { ContentBlock, ContentInline } from "@superbuilders/primer-tives"
|
package/dist/client.d.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import type { PciId } from "./pci";
|
|
2
|
-
import type { FormFactor, Subject } from "./scope";
|
|
3
2
|
import type { PrimerLogger } from "./session-context";
|
|
4
3
|
import type { PrimerState } from "./types";
|
|
5
4
|
interface Config<Pcis extends PciId = PciId> {
|
|
6
5
|
readonly publishableKey: string;
|
|
7
6
|
readonly supportedPcis: readonly Pcis[];
|
|
8
|
-
readonly subject?: Subject;
|
|
9
|
-
readonly formFactor?: FormFactor;
|
|
10
7
|
readonly origin: string;
|
|
11
8
|
readonly fetch?: typeof globalThis.fetch;
|
|
12
9
|
readonly abort?: AbortController;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAA;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAMpE,UAAU,MAAM,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,SAAS,IAAI,EAAE,CAAA;IACvC,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,CAAC,EAAE,YAAY,CAAA;CAC9B;AAED,UAAU,MAAM,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IAC1C,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;CACpD;AAED,iBAAS,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAyC5E;AAED,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -11,8 +11,7 @@ declare const ErrConflict: Error;
|
|
|
11
11
|
declare const ErrRateLimited: Error;
|
|
12
12
|
declare const ErrServiceUnavailable: Error;
|
|
13
13
|
declare const ErrNotSerializable: Error;
|
|
14
|
-
declare const ErrFormFactorNotFound: Error;
|
|
15
14
|
declare const ErrInvalidSubmission: Error;
|
|
16
15
|
declare const ErrMalformedPublishableKey: Error;
|
|
17
|
-
export { ErrBadRequest, ErrConflict,
|
|
16
|
+
export { ErrBadRequest, ErrConflict, ErrForbidden, ErrInvalidPublishableKey, ErrInvalidSubmission, ErrMalformedPublishableKey, ErrJsonParse, ErrNetwork, ErrNotFound, ErrNotSerializable, ErrRateLimited, ErrServerError, ErrServiceUnavailable, ErrTimeout, ErrUnsupportedPci };
|
|
18
17
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,UAAU,OAAwB,CAAA;AACxC,QAAA,MAAM,YAAY,OAA2B,CAAA;AAC7C,QAAA,MAAM,iBAAiB,OAAgC,CAAA;AACvD,QAAA,MAAM,wBAAwB,OAAwC,CAAA;AACtE,QAAA,MAAM,aAAa,OAA4B,CAAA;AAC/C,QAAA,MAAM,cAAc,OAA6B,CAAA;AACjD,QAAA,MAAM,UAAU,OAAwB,CAAA;AACxC,QAAA,MAAM,YAAY,OAA0B,CAAA;AAC5C,QAAA,MAAM,WAAW,OAA0B,CAAA;AAC3C,QAAA,MAAM,WAAW,OAAyB,CAAA;AAC1C,QAAA,MAAM,cAAc,OAA6B,CAAA;AACjD,QAAA,MAAM,qBAAqB,OAAoC,CAAA;AAC/D,QAAA,MAAM,kBAAkB,OAEvB,CAAA;AACD,QAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,UAAU,OAAwB,CAAA;AACxC,QAAA,MAAM,YAAY,OAA2B,CAAA;AAC7C,QAAA,MAAM,iBAAiB,OAAgC,CAAA;AACvD,QAAA,MAAM,wBAAwB,OAAwC,CAAA;AACtE,QAAA,MAAM,aAAa,OAA4B,CAAA;AAC/C,QAAA,MAAM,cAAc,OAA6B,CAAA;AACjD,QAAA,MAAM,UAAU,OAAwB,CAAA;AACxC,QAAA,MAAM,YAAY,OAA0B,CAAA;AAC5C,QAAA,MAAM,WAAW,OAA0B,CAAA;AAC3C,QAAA,MAAM,WAAW,OAAyB,CAAA;AAC1C,QAAA,MAAM,cAAc,OAA6B,CAAA;AACjD,QAAA,MAAM,qBAAqB,OAAoC,CAAA;AAC/D,QAAA,MAAM,kBAAkB,OAEvB,CAAA;AACD,QAAA,MAAM,oBAAoB,OAAmC,CAAA;AAC7D,QAAA,MAAM,0BAA0B,OAA0C,CAAA;AAE1E,OAAO,EACN,aAAa,EACb,WAAW,EACX,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,YAAY,EACZ,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { SessionContext } from "./session-context";
|
|
2
2
|
import type { PciId } from "./pci";
|
|
3
|
-
import type { PrimerState,
|
|
4
|
-
declare function extendedTextState<Pcis extends PciId>(ctx: SessionContext<Pcis>, stimulus: RendererStimulus | null, interaction:
|
|
3
|
+
import type { PrimerState, RendererStimulus, StandardRendererInteraction } from "./types";
|
|
4
|
+
declare function extendedTextState<Pcis extends PciId>(ctx: SessionContext<Pcis>, stimulus: RendererStimulus | null, interaction: Extract<StandardRendererInteraction, {
|
|
5
5
|
type: "extended-text";
|
|
6
|
-
}): PrimerState<Pcis>;
|
|
6
|
+
}>): PrimerState<Pcis>;
|
|
7
7
|
export { extendedTextState };
|
|
8
8
|
//# sourceMappingURL=extended-text-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extended-text-state.d.ts","sourceRoot":"","sources":["../src/extended-text-state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EACX,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"extended-text-state.d.ts","sourceRoot":"","sources":["../src/extended-text-state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EACX,WAAW,EACX,gBAAgB,EAChB,2BAA2B,EAC3B,MAAM,mCAAmC,CAAA;AAoB1C,iBAAS,iBAAiB,CAAC,IAAI,SAAS,KAAK,EAC5C,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EACjC,WAAW,EAAE,OAAO,CAAC,2BAA2B,EAAE;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC,GAC1E,WAAW,CAAC,IAAI,CAAC,CAuEnB;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
export { create } from "./client";
|
|
2
2
|
export type { Client, Config, PrimerLogger } from "./client";
|
|
3
|
-
export type { FormFactor, Subject } from "./scope";
|
|
4
3
|
export { ADVANCE_PATH } from "./transport";
|
|
5
|
-
export { ErrBadRequest, ErrConflict, ErrForbidden, ErrInvalidPublishableKey, ErrInvalidSubmission, ErrJsonParse, ErrMalformedPublishableKey, ErrNetwork, ErrNotFound, ErrNotSerializable, ErrRateLimited, ErrServerError, ErrServiceUnavailable, ErrTimeout,
|
|
6
|
-
export type { BodyStimulus, ChoiceState, CompletedState, ErroredState, ExtendedTextMultipleState, ExtendedTextSingleState, ExtendedTextState, FatalState, FeedbackState, ImageStimulus, InteractionState, NonSerializable, ObservationState, PciInteraction, PciInteractionState, PciRenderProps, PciSubmission, PrimerState, RendererChoice, RendererCorrectAnswer, RendererCorrectScalarValue, RendererInteraction, RendererStimulus, RendererSubmission, TextEntryState } from "./types";
|
|
4
|
+
export { ErrBadRequest, ErrConflict, ErrForbidden, ErrInvalidPublishableKey, ErrInvalidSubmission, ErrJsonParse, ErrMalformedPublishableKey, ErrNetwork, ErrNotFound, ErrNotSerializable, ErrRateLimited, ErrServerError, ErrServiceUnavailable, ErrTimeout, ErrUnsupportedPci } from "./errors";
|
|
5
|
+
export type { BodyStimulus, ChoiceState, CompletedState, ErroredState, ExtendedTextMultipleState, ExtendedTextSingleState, ExtendedTextState, FatalState, FeedbackState, ImageStimulus, InteractionState, MatchState, NonSerializable, ObservationState, OrderState, PciInteraction, PciInteractionState, PciRenderProps, PciSubmission, PrimerState, RendererChoice, RendererMatchChoice, RendererCorrectAnswer, RendererCorrectScalarValue, RendererInteraction, StandardRendererInteraction, RendererStimulus, RendererSubmission, TextEntryState } from "./types";
|
|
7
6
|
export type { ContentBlock, ContentInline } from "./content";
|
|
8
7
|
export { blocksToPlainText, inlinesToPlainText } from "./content";
|
|
9
8
|
export type { DivisionRemainderProps, DivisionRemainderSubmission, FractionAdditionProps, FractionAdditionSubmission, PciId, PciProps, PciRegistry, PciUrn, PciValue } from "./pci";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAA;AAC3D,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAEtF,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAA;AAC3D,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAEtF,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAA;AAEpE,OAAO,EACN,aAAa,EACb,WAAW,EACX,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACZ,0BAA0B,EAC1B,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,MAAM,oCAAoC,CAAA;AAE3C,YAAY,EACX,YAAY,EACZ,WAAW,EACX,cAAc,EACd,YAAY,EACZ,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,MAAM,mCAAmC,CAAA;AAE1C,YAAY,EACX,YAAY,EACZ,aAAa,EACb,MAAM,qCAAqC,CAAA;AAE5C,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,qCAAqC,CAAA;AAE5C,YAAY,EACX,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,0BAA0B,EAC1B,KAAK,EACL,QAAQ,EACR,WAAW,EACX,MAAM,EACN,QAAQ,EACR,MAAM,iCAAiC,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/client.ts
|
|
2
|
-
import * as
|
|
2
|
+
import * as errors8 from "@superbuilders/errors";
|
|
3
3
|
|
|
4
4
|
// src/errors.ts
|
|
5
5
|
import * as errors from "@superbuilders/errors";
|
|
@@ -16,7 +16,6 @@ var ErrConflict = errors.new("conflict");
|
|
|
16
16
|
var ErrRateLimited = errors.new("rate limited");
|
|
17
17
|
var ErrServiceUnavailable = errors.new("service unavailable");
|
|
18
18
|
var ErrNotSerializable = errors.new("PrimerState is live in-memory state and must not be serialized or stored");
|
|
19
|
-
var ErrFormFactorNotFound = errors.new("form factor not found");
|
|
20
19
|
var ErrInvalidSubmission = errors.new("invalid submission");
|
|
21
20
|
var ErrMalformedPublishableKey = errors.new("malformed publishable key");
|
|
22
21
|
|
|
@@ -47,22 +46,6 @@ function httpSentinel(status) {
|
|
|
47
46
|
}
|
|
48
47
|
return ErrServerError;
|
|
49
48
|
}
|
|
50
|
-
function jsonParseOrNull(text) {
|
|
51
|
-
const result = errors2.trySync(function parse() {
|
|
52
|
-
return JSON.parse(text);
|
|
53
|
-
});
|
|
54
|
-
if (result.error) {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
return result.data;
|
|
58
|
-
}
|
|
59
|
-
function resolve422(body) {
|
|
60
|
-
const parsed = jsonParseOrNull(body);
|
|
61
|
-
if (parsed && typeof parsed.error === "string" && parsed.error === "form factor not found") {
|
|
62
|
-
return ErrFormFactorNotFound;
|
|
63
|
-
}
|
|
64
|
-
return ErrUnsupportedPci;
|
|
65
|
-
}
|
|
66
49
|
function isAbortError(err) {
|
|
67
50
|
if (err instanceof DOMException && err.name === "AbortError") {
|
|
68
51
|
return true;
|
|
@@ -119,7 +102,7 @@ function createTransport(tc) {
|
|
|
119
102
|
const text = await res.text().catch(function fallback() {
|
|
120
103
|
return "";
|
|
121
104
|
});
|
|
122
|
-
const sentinel = res.status === 422 ?
|
|
105
|
+
const sentinel = res.status === 422 ? ErrUnsupportedPci : httpSentinel(res.status);
|
|
123
106
|
log?.error("transport http error", {
|
|
124
107
|
studentId: body.studentId,
|
|
125
108
|
status: res.status
|
|
@@ -148,7 +131,7 @@ function createTransport(tc) {
|
|
|
148
131
|
}
|
|
149
132
|
|
|
150
133
|
// src/session.ts
|
|
151
|
-
import * as
|
|
134
|
+
import * as errors7 from "@superbuilders/errors";
|
|
152
135
|
|
|
153
136
|
// src/consumed.ts
|
|
154
137
|
function poisonToJSON() {
|
|
@@ -238,9 +221,7 @@ function validateExtendedTextSubmission(log, values, minStrings, maxStrings) {
|
|
|
238
221
|
return null;
|
|
239
222
|
}
|
|
240
223
|
function extendedTextState(ctx, stimulus, interaction) {
|
|
241
|
-
|
|
242
|
-
const minStrings = interaction.minStrings;
|
|
243
|
-
if (maxStrings === 1) {
|
|
224
|
+
if (interaction.cardinality === "single") {
|
|
244
225
|
let pending2;
|
|
245
226
|
return {
|
|
246
227
|
phase: "interaction",
|
|
@@ -272,13 +253,13 @@ function extendedTextState(ctx, stimulus, interaction) {
|
|
|
272
253
|
cardinality: "multiple",
|
|
273
254
|
stimulus,
|
|
274
255
|
interaction,
|
|
275
|
-
maxStrings,
|
|
276
|
-
minStrings,
|
|
256
|
+
maxStrings: interaction.maxStrings,
|
|
257
|
+
minStrings: interaction.minStrings,
|
|
277
258
|
submitTexts: function submitTexts(values) {
|
|
278
259
|
if (pending) {
|
|
279
260
|
return pending;
|
|
280
261
|
}
|
|
281
|
-
const validationError = validateExtendedTextSubmission(ctx.log, values, minStrings, maxStrings);
|
|
262
|
+
const validationError = validateExtendedTextSubmission(ctx.log, values, interaction.minStrings, interaction.maxStrings);
|
|
282
263
|
if (validationError) {
|
|
283
264
|
return Promise.resolve(ctx.errored(validationError, "interaction", {
|
|
284
265
|
kind: "interaction",
|
|
@@ -321,6 +302,130 @@ function feedbackState(ctx, stimulus, interaction, submission, isCorrect, feedba
|
|
|
321
302
|
};
|
|
322
303
|
}
|
|
323
304
|
|
|
305
|
+
// src/match-state.ts
|
|
306
|
+
import * as errors5 from "@superbuilders/errors";
|
|
307
|
+
function bumpCount(counts, key) {
|
|
308
|
+
const prev = counts.get(key);
|
|
309
|
+
const next = prev === undefined ? 1 : prev + 1;
|
|
310
|
+
counts.set(key, next);
|
|
311
|
+
}
|
|
312
|
+
function getCount(counts, key) {
|
|
313
|
+
const recorded = counts.get(key);
|
|
314
|
+
return recorded === undefined ? 0 : recorded;
|
|
315
|
+
}
|
|
316
|
+
function validateAssociationBounds(log, pairs, minAssociations, maxAssociations) {
|
|
317
|
+
if (pairs.length < minAssociations) {
|
|
318
|
+
log?.error("match submit below minAssociations", { pairs, minAssociations });
|
|
319
|
+
return errors5.wrap(ErrInvalidSubmission, `need at least ${minAssociations} associations`);
|
|
320
|
+
}
|
|
321
|
+
if (pairs.length > maxAssociations) {
|
|
322
|
+
log?.error("match submit above maxAssociations", { pairs, maxAssociations });
|
|
323
|
+
return errors5.wrap(ErrInvalidSubmission, `at most ${maxAssociations} associations`);
|
|
324
|
+
}
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
function validatePairsReferToKnownChoices(log, pairs, sourceIds, targetIds) {
|
|
328
|
+
for (const pair of pairs) {
|
|
329
|
+
if (!sourceIds.has(pair.source)) {
|
|
330
|
+
log?.error("match submit has unknown source", { source: pair.source });
|
|
331
|
+
return errors5.wrap(ErrInvalidSubmission, `unknown source '${pair.source}'`);
|
|
332
|
+
}
|
|
333
|
+
if (!targetIds.has(pair.target)) {
|
|
334
|
+
log?.error("match submit has unknown target", { target: pair.target });
|
|
335
|
+
return errors5.wrap(ErrInvalidSubmission, `unknown target '${pair.target}'`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return null;
|
|
339
|
+
}
|
|
340
|
+
function validateChoiceCaps(log, side, choices, counts) {
|
|
341
|
+
for (const choice of choices) {
|
|
342
|
+
const count = getCount(counts, choice.identifier);
|
|
343
|
+
if (choice.matchMax !== 0 && count > choice.matchMax) {
|
|
344
|
+
log?.error(`match submit exceeds ${side} matchMax`, {
|
|
345
|
+
identifier: choice.identifier,
|
|
346
|
+
count,
|
|
347
|
+
matchMax: choice.matchMax
|
|
348
|
+
});
|
|
349
|
+
return errors5.wrap(ErrInvalidSubmission, `${side} '${choice.identifier}' used ${count} times, max ${choice.matchMax}`);
|
|
350
|
+
}
|
|
351
|
+
if (count < choice.matchMin) {
|
|
352
|
+
log?.error(`match submit below ${side} matchMin`, {
|
|
353
|
+
identifier: choice.identifier,
|
|
354
|
+
count,
|
|
355
|
+
matchMin: choice.matchMin
|
|
356
|
+
});
|
|
357
|
+
return errors5.wrap(ErrInvalidSubmission, `${side} '${choice.identifier}' used ${count} times, min ${choice.matchMin}`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return null;
|
|
361
|
+
}
|
|
362
|
+
function validateMatchSubmission(log, pairs, sourceChoices, targetChoices, minAssociations, maxAssociations) {
|
|
363
|
+
const boundsError = validateAssociationBounds(log, pairs, minAssociations, maxAssociations);
|
|
364
|
+
if (boundsError) {
|
|
365
|
+
return boundsError;
|
|
366
|
+
}
|
|
367
|
+
const sourceIds = new Set(sourceChoices.map(function getId(c) {
|
|
368
|
+
return c.identifier;
|
|
369
|
+
}));
|
|
370
|
+
const targetIds = new Set(targetChoices.map(function getId(c) {
|
|
371
|
+
return c.identifier;
|
|
372
|
+
}));
|
|
373
|
+
const referenceError = validatePairsReferToKnownChoices(log, pairs, sourceIds, targetIds);
|
|
374
|
+
if (referenceError) {
|
|
375
|
+
return referenceError;
|
|
376
|
+
}
|
|
377
|
+
const sourceCounts = new Map;
|
|
378
|
+
const targetCounts = new Map;
|
|
379
|
+
for (const pair of pairs) {
|
|
380
|
+
bumpCount(sourceCounts, pair.source);
|
|
381
|
+
bumpCount(targetCounts, pair.target);
|
|
382
|
+
}
|
|
383
|
+
const sourceCapError = validateChoiceCaps(log, "source", sourceChoices, sourceCounts);
|
|
384
|
+
if (sourceCapError) {
|
|
385
|
+
return sourceCapError;
|
|
386
|
+
}
|
|
387
|
+
const targetCapError = validateChoiceCaps(log, "target", targetChoices, targetCounts);
|
|
388
|
+
if (targetCapError) {
|
|
389
|
+
return targetCapError;
|
|
390
|
+
}
|
|
391
|
+
return null;
|
|
392
|
+
}
|
|
393
|
+
function matchState(ctx, stimulus, interaction) {
|
|
394
|
+
let pending;
|
|
395
|
+
return {
|
|
396
|
+
phase: "interaction",
|
|
397
|
+
kind: "match",
|
|
398
|
+
stimulus,
|
|
399
|
+
interaction,
|
|
400
|
+
sourceChoices: interaction.sourceChoices,
|
|
401
|
+
targetChoices: interaction.targetChoices,
|
|
402
|
+
minAssociations: interaction.minAssociations,
|
|
403
|
+
maxAssociations: interaction.maxAssociations,
|
|
404
|
+
submitMatch: function submitMatch(pairs) {
|
|
405
|
+
if (pending) {
|
|
406
|
+
return pending;
|
|
407
|
+
}
|
|
408
|
+
const validationError = validateMatchSubmission(ctx.log, pairs, interaction.sourceChoices, interaction.targetChoices, interaction.minAssociations, interaction.maxAssociations);
|
|
409
|
+
if (validationError) {
|
|
410
|
+
return Promise.resolve(ctx.errored(validationError, "interaction", {
|
|
411
|
+
kind: "interaction",
|
|
412
|
+
submission: { type: "match", pairs }
|
|
413
|
+
}));
|
|
414
|
+
}
|
|
415
|
+
pending = ctx.execute({ kind: "interaction", submission: { type: "match", pairs } }, "interaction");
|
|
416
|
+
return pending;
|
|
417
|
+
},
|
|
418
|
+
timeout: function timeout() {
|
|
419
|
+
if (pending) {
|
|
420
|
+
return pending;
|
|
421
|
+
}
|
|
422
|
+
pending = ctx.execute({ kind: "timeout" }, "timeout");
|
|
423
|
+
return pending;
|
|
424
|
+
},
|
|
425
|
+
toJSON: poisonToJSON
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
|
|
324
429
|
// src/observation-state.ts
|
|
325
430
|
function observationState(ctx, stimulus) {
|
|
326
431
|
let pending;
|
|
@@ -338,6 +443,75 @@ function observationState(ctx, stimulus) {
|
|
|
338
443
|
};
|
|
339
444
|
}
|
|
340
445
|
|
|
446
|
+
// src/order-state.ts
|
|
447
|
+
import * as errors6 from "@superbuilders/errors";
|
|
448
|
+
function findUnknownKey2(orderedKeys, choices) {
|
|
449
|
+
const choiceIds = new Set(choices.map(function getId(c) {
|
|
450
|
+
return c.identifier;
|
|
451
|
+
}));
|
|
452
|
+
for (const key of orderedKeys) {
|
|
453
|
+
if (!choiceIds.has(key)) {
|
|
454
|
+
return key;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return null;
|
|
458
|
+
}
|
|
459
|
+
function validateOrderSubmission(log, orderedKeys, choices, minChoices, maxChoices) {
|
|
460
|
+
if (orderedKeys.length < minChoices) {
|
|
461
|
+
log?.error("order submit below minChoices", { orderedKeys, minChoices });
|
|
462
|
+
return errors6.wrap(ErrInvalidSubmission, `need at least ${minChoices} selections`);
|
|
463
|
+
}
|
|
464
|
+
if (orderedKeys.length > maxChoices) {
|
|
465
|
+
log?.error("order submit above maxChoices", { orderedKeys, maxChoices });
|
|
466
|
+
return errors6.wrap(ErrInvalidSubmission, `at most ${maxChoices} selections`);
|
|
467
|
+
}
|
|
468
|
+
const uniqueKeys = new Set(orderedKeys);
|
|
469
|
+
if (uniqueKeys.size !== orderedKeys.length) {
|
|
470
|
+
log?.error("order submit has duplicates", { orderedKeys });
|
|
471
|
+
return errors6.wrap(ErrInvalidSubmission, "duplicate selections");
|
|
472
|
+
}
|
|
473
|
+
const unknownKey = findUnknownKey2(orderedKeys, choices);
|
|
474
|
+
if (unknownKey) {
|
|
475
|
+
log?.error("order submit has unknown key", { key: unknownKey });
|
|
476
|
+
return errors6.wrap(ErrInvalidSubmission, `unknown choice '${unknownKey}'`);
|
|
477
|
+
}
|
|
478
|
+
return null;
|
|
479
|
+
}
|
|
480
|
+
function orderState(ctx, stimulus, interaction) {
|
|
481
|
+
let pending;
|
|
482
|
+
return {
|
|
483
|
+
phase: "interaction",
|
|
484
|
+
kind: "order",
|
|
485
|
+
stimulus,
|
|
486
|
+
interaction,
|
|
487
|
+
choices: interaction.choices,
|
|
488
|
+
minChoices: interaction.minChoices,
|
|
489
|
+
maxChoices: interaction.maxChoices,
|
|
490
|
+
submitOrder: function submitOrder(orderedKeys) {
|
|
491
|
+
if (pending) {
|
|
492
|
+
return pending;
|
|
493
|
+
}
|
|
494
|
+
const validationError = validateOrderSubmission(ctx.log, orderedKeys, interaction.choices, interaction.minChoices, interaction.maxChoices);
|
|
495
|
+
if (validationError) {
|
|
496
|
+
return Promise.resolve(ctx.errored(validationError, "interaction", {
|
|
497
|
+
kind: "interaction",
|
|
498
|
+
submission: { type: "order", orderedKeys }
|
|
499
|
+
}));
|
|
500
|
+
}
|
|
501
|
+
pending = ctx.execute({ kind: "interaction", submission: { type: "order", orderedKeys } }, "interaction");
|
|
502
|
+
return pending;
|
|
503
|
+
},
|
|
504
|
+
timeout: function timeout() {
|
|
505
|
+
if (pending) {
|
|
506
|
+
return pending;
|
|
507
|
+
}
|
|
508
|
+
pending = ctx.execute({ kind: "timeout" }, "timeout");
|
|
509
|
+
return pending;
|
|
510
|
+
},
|
|
511
|
+
toJSON: poisonToJSON
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
|
|
341
515
|
// src/pci-state.ts
|
|
342
516
|
function pciInteractionState(ctx, stimulus, interaction) {
|
|
343
517
|
let pending;
|
|
@@ -401,7 +575,6 @@ function textEntryState(ctx, stimulus, interaction) {
|
|
|
401
575
|
// src/session.ts
|
|
402
576
|
var FATAL_SENTINELS = [
|
|
403
577
|
ErrBadRequest,
|
|
404
|
-
ErrFormFactorNotFound,
|
|
405
578
|
ErrInvalidPublishableKey,
|
|
406
579
|
ErrForbidden,
|
|
407
580
|
ErrNotFound,
|
|
@@ -409,7 +582,7 @@ var FATAL_SENTINELS = [
|
|
|
409
582
|
];
|
|
410
583
|
function isFatalError(err) {
|
|
411
584
|
for (const sentinel of FATAL_SENTINELS) {
|
|
412
|
-
if (
|
|
585
|
+
if (errors7.is(err, sentinel)) {
|
|
413
586
|
return true;
|
|
414
587
|
}
|
|
415
588
|
}
|
|
@@ -448,8 +621,6 @@ function makeSession(sc) {
|
|
|
448
621
|
const body = {
|
|
449
622
|
studentId: sc.studentId,
|
|
450
623
|
supportedPcis: sc.supportedPcis,
|
|
451
|
-
subject: sc.subject,
|
|
452
|
-
formFactor: sc.formFactor,
|
|
453
624
|
intent
|
|
454
625
|
};
|
|
455
626
|
const result = await sc.transport(body);
|
|
@@ -479,7 +650,7 @@ function makeSession(sc) {
|
|
|
479
650
|
log?.error("unsupported pci in frame", { pciId: interaction.pciId });
|
|
480
651
|
return {
|
|
481
652
|
phase: "fatal",
|
|
482
|
-
error:
|
|
653
|
+
error: errors7.wrap(ErrUnsupportedPci, `pci '${interaction.pciId}'`),
|
|
483
654
|
toJSON: poisonToJSON
|
|
484
655
|
};
|
|
485
656
|
}
|
|
@@ -494,6 +665,10 @@ function makeSession(sc) {
|
|
|
494
665
|
return textEntryState(ctx, stimulus, interaction);
|
|
495
666
|
case "extended-text":
|
|
496
667
|
return extendedTextState(ctx, stimulus, interaction);
|
|
668
|
+
case "order":
|
|
669
|
+
return orderState(ctx, stimulus, interaction);
|
|
670
|
+
case "match":
|
|
671
|
+
return matchState(ctx, stimulus, interaction);
|
|
497
672
|
case "portable-custom":
|
|
498
673
|
return pciInteractionState(ctx, stimulus, interaction);
|
|
499
674
|
}
|
|
@@ -508,13 +683,11 @@ function create(config) {
|
|
|
508
683
|
const log = config.logger;
|
|
509
684
|
if (!config.publishableKey.startsWith(PK_PREFIX)) {
|
|
510
685
|
log?.error("malformed publishable key", { prefix: PK_PREFIX });
|
|
511
|
-
throw
|
|
686
|
+
throw errors8.wrap(ErrMalformedPublishableKey, `key must start with '${PK_PREFIX}'`);
|
|
512
687
|
}
|
|
513
688
|
const transport = createTransport({
|
|
514
689
|
publishableKey: config.publishableKey,
|
|
515
690
|
supportedPcis: config.supportedPcis,
|
|
516
|
-
subject: config.subject,
|
|
517
|
-
formFactor: config.formFactor,
|
|
518
691
|
origin: config.origin,
|
|
519
692
|
fetch: config.fetch,
|
|
520
693
|
abort: config.abort,
|
|
@@ -526,8 +699,6 @@ function create(config) {
|
|
|
526
699
|
const s = makeSession({
|
|
527
700
|
studentId,
|
|
528
701
|
supportedPcis: config.supportedPcis,
|
|
529
|
-
subject: config.subject,
|
|
530
|
-
formFactor: config.formFactor,
|
|
531
702
|
log,
|
|
532
703
|
transport
|
|
533
704
|
});
|
|
@@ -581,11 +752,10 @@ export {
|
|
|
581
752
|
ErrJsonParse,
|
|
582
753
|
ErrInvalidSubmission,
|
|
583
754
|
ErrInvalidPublishableKey,
|
|
584
|
-
ErrFormFactorNotFound,
|
|
585
755
|
ErrForbidden,
|
|
586
756
|
ErrConflict,
|
|
587
757
|
ErrBadRequest,
|
|
588
758
|
ADVANCE_PATH
|
|
589
759
|
};
|
|
590
760
|
|
|
591
|
-
//# debugId=
|
|
761
|
+
//# debugId=1EA25D8C44F28E9064756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/client.ts", "../src/errors.ts", "../src/transport.ts", "../src/session.ts", "../src/consumed.ts", "../src/choice-state.ts", "../src/extended-text-state.ts", "../src/feedback-state.ts", "../src/observation-state.ts", "../src/pci-state.ts", "../src/text-entry-state.ts", "../src/content.ts"],
|
|
3
|
+
"sources": ["../src/client.ts", "../src/errors.ts", "../src/transport.ts", "../src/session.ts", "../src/consumed.ts", "../src/choice-state.ts", "../src/extended-text-state.ts", "../src/feedback-state.ts", "../src/match-state.ts", "../src/observation-state.ts", "../src/order-state.ts", "../src/pci-state.ts", "../src/text-entry-state.ts", "../src/content.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import * as errors from \"@superbuilders/errors\"\nimport { ErrMalformedPublishableKey } from \"@superbuilders/primer-tives/errors\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type {
|
|
6
|
-
"import * as errors from \"@superbuilders/errors\"\n\nconst ErrNetwork = errors.new(\"network\")\nconst ErrJsonParse = errors.new(\"json parse\")\nconst ErrUnsupportedPci = errors.new(\"unsupported pci\")\nconst ErrInvalidPublishableKey = errors.new(\"invalid publishable key\")\nconst ErrBadRequest = errors.new(\"bad request\")\nconst ErrServerError = errors.new(\"server error\")\nconst ErrTimeout = errors.new(\"timeout\")\nconst ErrForbidden = errors.new(\"forbidden\")\nconst ErrNotFound = errors.new(\"not found\")\nconst ErrConflict = errors.new(\"conflict\")\nconst ErrRateLimited = errors.new(\"rate limited\")\nconst ErrServiceUnavailable = errors.new(\"service unavailable\")\nconst ErrNotSerializable = errors.new(\n\t\"PrimerState is live in-memory state and must not be serialized or stored\"\n)\nconst
|
|
7
|
-
"import * as errors from \"@superbuilders/errors\"\nimport {\n\tErrBadRequest,\n\tErrConflict,\n\tErrForbidden,\n\
|
|
8
|
-
"import * as errors from \"@superbuilders/errors\"\nimport { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport {\n\tErrBadRequest,\n\tErrForbidden,\n\
|
|
5
|
+
"import * as errors from \"@superbuilders/errors\"\nimport { ErrMalformedPublishableKey } from \"@superbuilders/primer-tives/errors\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type { PrimerLogger } from \"@superbuilders/primer-tives/session-context\"\nimport type { PrimerState } from \"@superbuilders/primer-tives/types\"\nimport { createTransport } from \"@superbuilders/primer-tives/transport\"\nimport { makeSession } from \"@superbuilders/primer-tives/session\"\n\nconst PK_PREFIX = \"pk_\"\n\ninterface Config<Pcis extends PciId = PciId> {\n\treadonly publishableKey: string\n\treadonly supportedPcis: readonly Pcis[]\n\treadonly origin: string\n\treadonly fetch?: typeof globalThis.fetch\n\treadonly abort?: AbortController\n\treadonly logger?: PrimerLogger\n}\n\ninterface Client<Pcis extends PciId = PciId> {\n\tstart(studentId: string): Promise<PrimerState<Pcis>>\n}\n\nfunction create<const Pcis extends PciId>(config: Config<Pcis>): Client<Pcis> {\n\tconst log = config.logger\n\n\tif (!config.publishableKey.startsWith(PK_PREFIX)) {\n\t\tlog?.error(\"malformed publishable key\", { prefix: PK_PREFIX })\n\t\t// biome-ignore lint/plugin: client SDK — log is optional config.logger, not slog\n\t\tthrow errors.wrap(ErrMalformedPublishableKey, `key must start with '${PK_PREFIX}'`)\n\t}\n\n\tconst transport = createTransport({\n\t\tpublishableKey: config.publishableKey,\n\t\tsupportedPcis: config.supportedPcis,\n\t\torigin: config.origin,\n\t\tfetch: config.fetch,\n\t\tabort: config.abort,\n\t\tlog\n\t})\n\n\tlet startPromise: Promise<PrimerState<Pcis>> | undefined\n\n\tasync function doStart(studentId: string): Promise<PrimerState<Pcis>> {\n\t\tlog?.debug(\"start\", { studentId })\n\t\tconst s = makeSession({\n\t\t\tstudentId,\n\t\t\tsupportedPcis: config.supportedPcis,\n\t\t\tlog,\n\t\t\ttransport\n\t\t})\n\t\treturn s.execute({ kind: \"observation\" }, \"observation\")\n\t}\n\n\treturn {\n\t\tstart(studentId: string): Promise<PrimerState<Pcis>> {\n\t\t\tif (startPromise) {\n\t\t\t\tlog?.debug(\"start already called\")\n\t\t\t\treturn startPromise\n\t\t\t}\n\t\t\tstartPromise = doStart(studentId)\n\t\t\treturn startPromise\n\t\t}\n\t}\n}\n\nexport { create }\nexport type { Client, Config, PrimerLogger }\n",
|
|
6
|
+
"import * as errors from \"@superbuilders/errors\"\n\nconst ErrNetwork = errors.new(\"network\")\nconst ErrJsonParse = errors.new(\"json parse\")\nconst ErrUnsupportedPci = errors.new(\"unsupported pci\")\nconst ErrInvalidPublishableKey = errors.new(\"invalid publishable key\")\nconst ErrBadRequest = errors.new(\"bad request\")\nconst ErrServerError = errors.new(\"server error\")\nconst ErrTimeout = errors.new(\"timeout\")\nconst ErrForbidden = errors.new(\"forbidden\")\nconst ErrNotFound = errors.new(\"not found\")\nconst ErrConflict = errors.new(\"conflict\")\nconst ErrRateLimited = errors.new(\"rate limited\")\nconst ErrServiceUnavailable = errors.new(\"service unavailable\")\nconst ErrNotSerializable = errors.new(\n\t\"PrimerState is live in-memory state and must not be serialized or stored\"\n)\nconst ErrInvalidSubmission = errors.new(\"invalid submission\")\nconst ErrMalformedPublishableKey = errors.new(\"malformed publishable key\")\n\nexport {\n\tErrBadRequest,\n\tErrConflict,\n\tErrForbidden,\n\tErrInvalidPublishableKey,\n\tErrInvalidSubmission,\n\tErrMalformedPublishableKey,\n\tErrJsonParse,\n\tErrNetwork,\n\tErrNotFound,\n\tErrNotSerializable,\n\tErrRateLimited,\n\tErrServerError,\n\tErrServiceUnavailable,\n\tErrTimeout,\n\tErrUnsupportedPci\n}\n",
|
|
7
|
+
"import * as errors from \"@superbuilders/errors\"\nimport {\n\tErrBadRequest,\n\tErrConflict,\n\tErrForbidden,\n\tErrInvalidPublishableKey,\n\tErrJsonParse,\n\tErrNetwork,\n\tErrNotFound,\n\tErrRateLimited,\n\tErrServerError,\n\tErrServiceUnavailable,\n\tErrTimeout,\n\tErrUnsupportedPci\n} from \"@superbuilders/primer-tives/errors\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type { SessionContext, WireIntent } from \"@superbuilders/primer-tives/session-context\"\nimport type { ContentInline } from \"@superbuilders/primer-tives/content\"\nimport type {\n\tRendererCorrectAnswer,\n\tRendererInteraction,\n\tRendererStimulus,\n\tRendererSubmission\n} from \"@superbuilders/primer-tives/types\"\n\nconst ADVANCE_PATH = \"/api/v0/advance\"\n\ntype WireResult<Pcis extends PciId = PciId> =\n\t| {\n\t\t\toutcome: \"advanced\"\n\t\t\tstimulus: RendererStimulus | null\n\t\t\tinteraction: RendererInteraction<Pcis> | null\n\t }\n\t| {\n\t\t\toutcome: \"submitted\"\n\t\t\tstimulus: RendererStimulus | null\n\t\t\tinteraction: RendererInteraction<Pcis>\n\t\t\tsubmission: RendererSubmission<Pcis>\n\t\t\tisCorrect: boolean\n\t\t\tfeedbackContent: ContentInline[]\n\t\t\tcorrectAnswer: RendererCorrectAnswer | null\n\t }\n\t| { outcome: \"completed\" }\n\ninterface WireRequestBody<Pcis extends PciId = PciId> {\n\tstudentId: string\n\tsupportedPcis: readonly PciId[]\n\tintent: WireIntent<Pcis>\n}\n\ntype TransportResult<Pcis extends PciId = PciId> =\n\t| { ok: true; data: WireResult<Pcis> }\n\t| { ok: false; error: Error }\n\ninterface TransportConfig<Pcis extends PciId = PciId> {\n\treadonly publishableKey: string\n\treadonly supportedPcis: readonly Pcis[]\n\treadonly origin: string\n\treadonly fetch?: typeof globalThis.fetch\n\treadonly abort?: AbortController\n\treadonly log: SessionContext[\"log\"]\n}\n\nfunction httpSentinel(status: number): Error {\n\tif (status === 400) {\n\t\treturn ErrBadRequest\n\t}\n\tif (status === 401) {\n\t\treturn ErrInvalidPublishableKey\n\t}\n\tif (status === 403) {\n\t\treturn ErrForbidden\n\t}\n\tif (status === 404) {\n\t\treturn ErrNotFound\n\t}\n\tif (status === 409) {\n\t\treturn ErrConflict\n\t}\n\tif (status === 429) {\n\t\treturn ErrRateLimited\n\t}\n\tif (status === 502 || status === 503 || status === 504) {\n\t\treturn ErrServiceUnavailable\n\t}\n\treturn ErrServerError\n}\n\nfunction isAbortError(err: unknown): boolean {\n\tif (err instanceof DOMException && err.name === \"AbortError\") {\n\t\treturn true\n\t}\n\tif (err instanceof DOMException && err.name === \"TimeoutError\") {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunction createTransport<Pcis extends PciId>(tc: TransportConfig<Pcis>) {\n\tconst fetchFn = tc.fetch ? tc.fetch : globalThis.fetch\n\tconst log = tc.log\n\n\tfunction transportSignal(): AbortSignal | undefined {\n\t\tif (tc.abort) {\n\t\t\treturn tc.abort.signal\n\t\t}\n\t\treturn undefined\n\t}\n\n\tasync function transport(body: WireRequestBody<Pcis>): Promise<TransportResult<Pcis>> {\n\t\tlog?.debug(\"transport request\", {\n\t\t\tstudentId: body.studentId,\n\t\t\tintentKind: body.intent.kind\n\t\t})\n\n\t\tconst url = `${tc.origin}${ADVANCE_PATH}`\n\t\tconst fetchResult = await fetchFn(url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\tAuthorization: `Bearer ${tc.publishableKey}`\n\t\t\t},\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: transportSignal()\n\t\t}).then(\n\t\t\tfunction ok(r: Response) {\n\t\t\t\treturn { ok: true, response: r } as const\n\t\t\t},\n\t\t\tfunction fail(err: Error) {\n\t\t\t\treturn { ok: false, error: err } as const\n\t\t\t}\n\t\t)\n\n\t\tif (!fetchResult.ok) {\n\t\t\tif (isAbortError(fetchResult.error)) {\n\t\t\t\tlog?.error(\"transport timeout\", {\n\t\t\t\t\tstudentId: body.studentId,\n\t\t\t\t\tintentKind: body.intent.kind\n\t\t\t\t})\n\t\t\t\treturn { ok: false, error: errors.wrap(ErrTimeout, fetchResult.error.message) }\n\t\t\t}\n\t\t\tlog?.error(\"transport network error\", {\n\t\t\t\tstudentId: body.studentId,\n\t\t\t\terror: fetchResult.error\n\t\t\t})\n\t\t\treturn { ok: false, error: errors.wrap(ErrNetwork, fetchResult.error.message) }\n\t\t}\n\n\t\tconst res = fetchResult.response\n\n\t\tif (!res.ok) {\n\t\t\tconst text = await res.text().catch(function fallback() {\n\t\t\t\treturn \"\"\n\t\t\t})\n\t\t\tconst sentinel = res.status === 422 ? ErrUnsupportedPci : httpSentinel(res.status)\n\t\t\tlog?.error(\"transport http error\", {\n\t\t\t\tstudentId: body.studentId,\n\t\t\t\tstatus: res.status\n\t\t\t})\n\t\t\treturn { ok: false, error: errors.wrap(sentinel, text) }\n\t\t}\n\n\t\tconst jsonResult = await res.json().then(\n\t\t\tfunction ok(data: WireResult<Pcis>) {\n\t\t\t\treturn { ok: true, data } as const\n\t\t\t},\n\t\t\tfunction fail(err: Error) {\n\t\t\t\treturn { ok: false, error: err } as const\n\t\t\t}\n\t\t)\n\n\t\tif (!jsonResult.ok) {\n\t\t\tlog?.error(\"transport json parse failed\", {\n\t\t\t\tstudentId: body.studentId,\n\t\t\t\terror: jsonResult.error\n\t\t\t})\n\t\t\treturn { ok: false, error: errors.wrap(ErrJsonParse, jsonResult.error.message) }\n\t\t}\n\n\t\tlog?.debug(\"transport success\", {\n\t\t\tstudentId: body.studentId,\n\t\t\tintentKind: body.intent.kind\n\t\t})\n\n\t\treturn { ok: true, data: jsonResult.data }\n\t}\n\n\treturn transport\n}\n\nexport { ADVANCE_PATH, createTransport, httpSentinel, isAbortError }\nexport type { TransportConfig, TransportResult, WireRequestBody, WireResult }\n",
|
|
8
|
+
"import * as errors from \"@superbuilders/errors\"\nimport { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport {\n\tErrBadRequest,\n\tErrForbidden,\n\tErrInvalidPublishableKey,\n\tErrNotFound,\n\tErrUnsupportedPci\n} from \"@superbuilders/primer-tives/errors\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type {\n\tPrimerLogger,\n\tSessionContext,\n\tTransitionPhase,\n\tWireIntent\n} from \"@superbuilders/primer-tives/session-context\"\nimport type {\n\tTransportResult,\n\tWireRequestBody,\n\tWireResult\n} from \"@superbuilders/primer-tives/transport\"\nimport type {\n\tErroredState,\n\tPrimerState,\n\tRendererInteraction,\n\tRendererStimulus\n} from \"@superbuilders/primer-tives/types\"\nimport { choiceState } from \"@superbuilders/primer-tives/choice-state\"\nimport { extendedTextState } from \"@superbuilders/primer-tives/extended-text-state\"\nimport { feedbackState } from \"@superbuilders/primer-tives/feedback-state\"\nimport { matchState } from \"@superbuilders/primer-tives/match-state\"\nimport { observationState } from \"@superbuilders/primer-tives/observation-state\"\nimport { orderState } from \"@superbuilders/primer-tives/order-state\"\nimport { pciInteractionState } from \"@superbuilders/primer-tives/pci-state\"\nimport { textEntryState } from \"@superbuilders/primer-tives/text-entry-state\"\n\ninterface SessionConfig<Pcis extends PciId = PciId> {\n\treadonly studentId: string\n\treadonly supportedPcis: readonly Pcis[]\n\treadonly log: PrimerLogger | undefined\n\treadonly transport: (body: WireRequestBody<Pcis>) => Promise<TransportResult<Pcis>>\n}\n\nconst FATAL_SENTINELS = [\n\tErrBadRequest,\n\tErrInvalidPublishableKey,\n\tErrForbidden,\n\tErrNotFound,\n\tErrUnsupportedPci\n]\n\nfunction isFatalError(err: Error): boolean {\n\tfor (const sentinel of FATAL_SENTINELS) {\n\t\tif (errors.is(err, sentinel)) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunction makeSession<Pcis extends PciId>(sc: SessionConfig<Pcis>) {\n\tconst log = sc.log\n\n\tfunction resolve(result: WireResult<Pcis>): PrimerState<Pcis> {\n\t\tswitch (result.outcome) {\n\t\t\tcase \"advanced\":\n\t\t\t\treturn fromAdvanced(result.stimulus, result.interaction)\n\t\t\tcase \"submitted\":\n\t\t\t\treturn feedbackState(\n\t\t\t\t\tctx,\n\t\t\t\t\tresult.stimulus,\n\t\t\t\t\tresult.interaction,\n\t\t\t\t\tresult.submission,\n\t\t\t\t\tresult.isCorrect,\n\t\t\t\t\tresult.feedbackContent,\n\t\t\t\t\tresult.correctAnswer\n\t\t\t\t)\n\t\t\tcase \"completed\":\n\t\t\t\treturn { phase: \"completed\", toJSON: poisonToJSON }\n\t\t}\n\t}\n\n\tfunction errored(\n\t\terror: Error,\n\t\tfailedPhase: TransitionPhase,\n\t\tintent: WireIntent<Pcis>\n\t): ErroredState<Pcis> {\n\t\tlet pending: Promise<PrimerState<Pcis>> | undefined\n\t\treturn {\n\t\t\tphase: \"errored\",\n\t\t\terror,\n\t\t\tfailedPhase,\n\t\t\tretry: function retry() {\n\t\t\t\tif (pending) {\n\t\t\t\t\treturn pending\n\t\t\t\t}\n\t\t\t\tlog?.debug(\"retrying from errored state\", { failedPhase })\n\t\t\t\tpending = execute(intent, failedPhase)\n\t\t\t\treturn pending\n\t\t\t},\n\t\t\ttoJSON: poisonToJSON\n\t\t}\n\t}\n\n\tasync function execute(\n\t\tintent: WireIntent<Pcis>,\n\t\tphase: TransitionPhase\n\t): Promise<PrimerState<Pcis>> {\n\t\tconst body: WireRequestBody<Pcis> = {\n\t\t\tstudentId: sc.studentId,\n\t\t\tsupportedPcis: sc.supportedPcis,\n\t\t\tintent\n\t\t}\n\n\t\tconst result = await sc.transport(body)\n\t\tif (!result.ok) {\n\t\t\tif (isFatalError(result.error)) {\n\t\t\t\tlog?.error(\"fatal transport error\", { error: result.error, phase })\n\t\t\t\treturn { phase: \"fatal\", error: result.error, toJSON: poisonToJSON }\n\t\t\t}\n\t\t\treturn errored(result.error, phase, intent)\n\t\t}\n\n\t\treturn resolve(result.data)\n\t}\n\n\tfunction isPciSupported(pciId: string): boolean {\n\t\tfor (const id of sc.supportedPcis) {\n\t\t\tif (id === pciId) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tfunction fromAdvanced(\n\t\tstimulus: RendererStimulus | null,\n\t\tinteraction: RendererInteraction<Pcis> | null\n\t): PrimerState<Pcis> {\n\t\tif (interaction === null) {\n\t\t\treturn observationState(ctx, stimulus)\n\t\t}\n\t\tif (interaction.type === \"portable-custom\") {\n\t\t\tif (!isPciSupported(interaction.pciId)) {\n\t\t\t\tlog?.error(\"unsupported pci in frame\", { pciId: interaction.pciId })\n\t\t\t\treturn {\n\t\t\t\t\tphase: \"fatal\",\n\t\t\t\t\terror: errors.wrap(ErrUnsupportedPci, `pci '${interaction.pciId}'`),\n\t\t\t\t\ttoJSON: poisonToJSON\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn pendingInteractionState(stimulus, interaction)\n\t}\n\n\tfunction pendingInteractionState(\n\t\tstimulus: RendererStimulus | null,\n\t\tinteraction: RendererInteraction<Pcis>\n\t): PrimerState<Pcis> {\n\t\tswitch (interaction.type) {\n\t\t\tcase \"choice\":\n\t\t\t\treturn choiceState(\n\t\t\t\t\tctx,\n\t\t\t\t\tstimulus,\n\t\t\t\t\tinteraction,\n\t\t\t\t\tinteraction.options,\n\t\t\t\t\tinteraction.maxChoices,\n\t\t\t\t\tinteraction.minChoices\n\t\t\t\t)\n\t\t\tcase \"text-entry\":\n\t\t\t\treturn textEntryState(ctx, stimulus, interaction)\n\t\t\tcase \"extended-text\":\n\t\t\t\treturn extendedTextState(ctx, stimulus, interaction)\n\t\t\tcase \"order\":\n\t\t\t\treturn orderState(ctx, stimulus, interaction)\n\t\t\tcase \"match\":\n\t\t\t\treturn matchState(ctx, stimulus, interaction)\n\t\t\tcase \"portable-custom\":\n\t\t\t\treturn pciInteractionState(ctx, stimulus, interaction)\n\t\t}\n\t}\n\n\tconst ctx: SessionContext<Pcis> = { log, execute, errored }\n\n\treturn { execute }\n}\n\nexport { makeSession }\nexport type { SessionConfig }\n",
|
|
9
9
|
"import { ErrNotSerializable } from \"@superbuilders/primer-tives/errors\"\n\nfunction poisonToJSON(): never {\n\t// biome-ignore lint/plugin: intentional toJSON trap — logging here would spam on every accidental serialize attempt\n\tthrow ErrNotSerializable\n}\n\nexport { poisonToJSON }\n",
|
|
10
10
|
"import { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport { ErrInvalidSubmission } from \"@superbuilders/primer-tives/errors\"\nimport type { SessionContext } from \"@superbuilders/primer-tives/session-context\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type {\n\tPrimerState,\n\tRendererChoice,\n\tRendererInteraction,\n\tRendererStimulus\n} from \"@superbuilders/primer-tives/types\"\nimport * as errors from \"@superbuilders/errors\"\n\nfunction findUnknownKey(selectedKeys: string[], options: RendererChoice[]): string | null {\n\tconst optionIds = new Set(\n\t\toptions.map(function getId(o) {\n\t\t\treturn o.identifier\n\t\t})\n\t)\n\tfor (const key of selectedKeys) {\n\t\tif (!optionIds.has(key)) {\n\t\t\treturn key\n\t\t}\n\t}\n\treturn null\n}\n\nfunction validateChoiceSubmission(\n\tlog: SessionContext[\"log\"],\n\tselectedKeys: string[],\n\toptions: RendererChoice[],\n\tmaxChoices: number,\n\tminChoices: number\n): Error | null {\n\tif (selectedKeys.length < minChoices) {\n\t\tlog?.error(\"choice submit below minChoices\", { selectedKeys, minChoices })\n\t\treturn errors.wrap(ErrInvalidSubmission, `need at least ${minChoices} selections`)\n\t}\n\tif (selectedKeys.length > maxChoices) {\n\t\tlog?.error(\"choice submit above maxChoices\", { selectedKeys, maxChoices })\n\t\treturn errors.wrap(ErrInvalidSubmission, `at most ${maxChoices} selections`)\n\t}\n\tconst uniqueKeys = new Set(selectedKeys)\n\tif (uniqueKeys.size !== selectedKeys.length) {\n\t\tlog?.error(\"choice submit has duplicates\", { selectedKeys })\n\t\treturn errors.wrap(ErrInvalidSubmission, \"duplicate selections\")\n\t}\n\tconst unknownKey = findUnknownKey(selectedKeys, options)\n\tif (unknownKey) {\n\t\tlog?.error(\"choice submit has unknown key\", { key: unknownKey })\n\t\treturn errors.wrap(ErrInvalidSubmission, `unknown option '${unknownKey}'`)\n\t}\n\treturn null\n}\n\nfunction choiceState<Pcis extends PciId>(\n\tctx: SessionContext<Pcis>,\n\tstimulus: RendererStimulus | null,\n\tinteraction: Extract<RendererInteraction<Pcis>, { type: \"choice\" }>,\n\toptions: RendererChoice[],\n\tmaxChoices: number,\n\tminChoices: number\n): PrimerState<Pcis> {\n\tlet pending: Promise<PrimerState<Pcis>> | undefined\n\treturn {\n\t\tphase: \"interaction\",\n\t\tkind: \"choice\",\n\t\tstimulus,\n\t\tinteraction,\n\t\toptions,\n\t\tmaxChoices,\n\t\tminChoices,\n\t\tsubmitChoice: function submitChoice(selectedKeys: string[]) {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tconst validationError = validateChoiceSubmission(\n\t\t\t\tctx.log,\n\t\t\t\tselectedKeys,\n\t\t\t\toptions,\n\t\t\t\tmaxChoices,\n\t\t\t\tminChoices\n\t\t\t)\n\t\t\tif (validationError) {\n\t\t\t\treturn Promise.resolve(\n\t\t\t\t\tctx.errored(validationError, \"interaction\", {\n\t\t\t\t\t\tkind: \"interaction\",\n\t\t\t\t\t\tsubmission: { type: \"choice\", selectedKeys }\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t}\n\t\t\tpending = ctx.execute(\n\t\t\t\t{ kind: \"interaction\", submission: { type: \"choice\", selectedKeys } },\n\t\t\t\t\"interaction\"\n\t\t\t)\n\t\t\treturn pending\n\t\t},\n\t\ttimeout: function timeout() {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tpending = ctx.execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\treturn pending\n\t\t},\n\t\ttoJSON: poisonToJSON\n\t}\n}\n\nexport { choiceState }\n",
|
|
11
|
-
"import { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport { ErrInvalidSubmission } from \"@superbuilders/primer-tives/errors\"\nimport type { SessionContext } from \"@superbuilders/primer-tives/session-context\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type {\n\tPrimerState,\n\
|
|
11
|
+
"import { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport { ErrInvalidSubmission } from \"@superbuilders/primer-tives/errors\"\nimport type { SessionContext } from \"@superbuilders/primer-tives/session-context\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type {\n\tPrimerState,\n\tRendererStimulus,\n\tStandardRendererInteraction\n} from \"@superbuilders/primer-tives/types\"\nimport * as errors from \"@superbuilders/errors\"\n\nfunction validateExtendedTextSubmission(\n\tlog: SessionContext[\"log\"],\n\tvalues: string[],\n\tminStrings: number,\n\tmaxStrings: number\n): Error | null {\n\tif (values.length < minStrings) {\n\t\tlog?.error(\"extended-text submit below minStrings\", { count: values.length, minStrings })\n\t\treturn errors.wrap(ErrInvalidSubmission, `need at least ${minStrings} values`)\n\t}\n\tif (values.length > maxStrings) {\n\t\tlog?.error(\"extended-text submit above maxStrings\", { count: values.length, maxStrings })\n\t\treturn errors.wrap(ErrInvalidSubmission, `at most ${maxStrings} values`)\n\t}\n\treturn null\n}\n\nfunction extendedTextState<Pcis extends PciId>(\n\tctx: SessionContext<Pcis>,\n\tstimulus: RendererStimulus | null,\n\tinteraction: Extract<StandardRendererInteraction, { type: \"extended-text\" }>\n): PrimerState<Pcis> {\n\tif (interaction.cardinality === \"single\") {\n\t\tlet pending: Promise<PrimerState<Pcis>> | undefined\n\t\treturn {\n\t\t\tphase: \"interaction\",\n\t\t\tkind: \"extended-text\",\n\t\t\tcardinality: \"single\",\n\t\t\tstimulus,\n\t\t\tinteraction,\n\t\t\tsubmitText: function submitText(value: string) {\n\t\t\t\tif (pending) {\n\t\t\t\t\treturn pending\n\t\t\t\t}\n\t\t\t\tpending = ctx.execute(\n\t\t\t\t\t{ kind: \"interaction\", submission: { type: \"extended-text\", values: [value] } },\n\t\t\t\t\t\"interaction\"\n\t\t\t\t)\n\t\t\t\treturn pending\n\t\t\t},\n\t\t\ttimeout: function timeout() {\n\t\t\t\tif (pending) {\n\t\t\t\t\treturn pending\n\t\t\t\t}\n\t\t\t\tpending = ctx.execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\t\treturn pending\n\t\t\t},\n\t\t\ttoJSON: poisonToJSON\n\t\t}\n\t}\n\tlet pending: Promise<PrimerState<Pcis>> | undefined\n\treturn {\n\t\tphase: \"interaction\",\n\t\tkind: \"extended-text\",\n\t\tcardinality: \"multiple\",\n\t\tstimulus,\n\t\tinteraction,\n\t\tmaxStrings: interaction.maxStrings,\n\t\tminStrings: interaction.minStrings,\n\t\tsubmitTexts: function submitTexts(values: string[]) {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tconst validationError = validateExtendedTextSubmission(\n\t\t\t\tctx.log,\n\t\t\t\tvalues,\n\t\t\t\tinteraction.minStrings,\n\t\t\t\tinteraction.maxStrings\n\t\t\t)\n\t\t\tif (validationError) {\n\t\t\t\treturn Promise.resolve(\n\t\t\t\t\tctx.errored(validationError, \"interaction\", {\n\t\t\t\t\t\tkind: \"interaction\",\n\t\t\t\t\t\tsubmission: { type: \"extended-text\", values }\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t}\n\t\t\tpending = ctx.execute(\n\t\t\t\t{ kind: \"interaction\", submission: { type: \"extended-text\", values } },\n\t\t\t\t\"interaction\"\n\t\t\t)\n\t\t\treturn pending\n\t\t},\n\t\ttimeout: function timeout() {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tpending = ctx.execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\treturn pending\n\t\t},\n\t\ttoJSON: poisonToJSON\n\t}\n}\n\nexport { extendedTextState }\n",
|
|
12
12
|
"import { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport type { ContentInline } from \"@superbuilders/primer-tives/content\"\nimport type { SessionContext } from \"@superbuilders/primer-tives/session-context\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type {\n\tPrimerState,\n\tRendererCorrectAnswer,\n\tRendererInteraction,\n\tRendererStimulus,\n\tRendererSubmission\n} from \"@superbuilders/primer-tives/types\"\n\nfunction feedbackState<Pcis extends PciId>(\n\tctx: SessionContext<Pcis>,\n\tstimulus: RendererStimulus | null,\n\tinteraction: RendererInteraction<Pcis>,\n\tsubmission: RendererSubmission<Pcis>,\n\tisCorrect: boolean,\n\tfeedbackContent: ContentInline[],\n\tcorrectAnswer: RendererCorrectAnswer | null\n): PrimerState<Pcis> {\n\tlet pending: Promise<PrimerState<Pcis>> | undefined\n\treturn {\n\t\tphase: \"feedback\",\n\t\tstimulus,\n\t\tinteraction,\n\t\tsubmission,\n\t\tisCorrect,\n\t\tfeedbackContent,\n\t\tcorrectAnswer,\n\t\tadvance: function advance() {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tpending = ctx.execute({ kind: \"observation\" }, \"observation\")\n\t\t\treturn pending\n\t\t},\n\t\ttoJSON: poisonToJSON\n\t}\n}\n\nexport { feedbackState }\n",
|
|
13
|
+
"import * as errors from \"@superbuilders/errors\"\nimport { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport { ErrInvalidSubmission } from \"@superbuilders/primer-tives/errors\"\nimport type { SessionContext } from \"@superbuilders/primer-tives/session-context\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type {\n\tPrimerState,\n\tRendererMatchChoice,\n\tRendererStimulus,\n\tStandardRendererInteraction\n} from \"@superbuilders/primer-tives/types\"\n\nfunction bumpCount(counts: Map<string, number>, key: string): void {\n\tconst prev = counts.get(key)\n\tconst next = prev === undefined ? 1 : prev + 1\n\tcounts.set(key, next)\n}\n\nfunction getCount(counts: Map<string, number>, key: string): number {\n\tconst recorded = counts.get(key)\n\treturn recorded === undefined ? 0 : recorded\n}\n\nfunction validateAssociationBounds(\n\tlog: SessionContext[\"log\"],\n\tpairs: Array<{ source: string; target: string }>,\n\tminAssociations: number,\n\tmaxAssociations: number\n): Error | null {\n\tif (pairs.length < minAssociations) {\n\t\tlog?.error(\"match submit below minAssociations\", { pairs, minAssociations })\n\t\treturn errors.wrap(ErrInvalidSubmission, `need at least ${minAssociations} associations`)\n\t}\n\tif (pairs.length > maxAssociations) {\n\t\tlog?.error(\"match submit above maxAssociations\", { pairs, maxAssociations })\n\t\treturn errors.wrap(ErrInvalidSubmission, `at most ${maxAssociations} associations`)\n\t}\n\treturn null\n}\n\nfunction validatePairsReferToKnownChoices(\n\tlog: SessionContext[\"log\"],\n\tpairs: Array<{ source: string; target: string }>,\n\tsourceIds: ReadonlySet<string>,\n\ttargetIds: ReadonlySet<string>\n): Error | null {\n\tfor (const pair of pairs) {\n\t\tif (!sourceIds.has(pair.source)) {\n\t\t\tlog?.error(\"match submit has unknown source\", { source: pair.source })\n\t\t\treturn errors.wrap(ErrInvalidSubmission, `unknown source '${pair.source}'`)\n\t\t}\n\t\tif (!targetIds.has(pair.target)) {\n\t\t\tlog?.error(\"match submit has unknown target\", { target: pair.target })\n\t\t\treturn errors.wrap(ErrInvalidSubmission, `unknown target '${pair.target}'`)\n\t\t}\n\t}\n\treturn null\n}\n\nfunction validateChoiceCaps(\n\tlog: SessionContext[\"log\"],\n\tside: \"source\" | \"target\",\n\tchoices: RendererMatchChoice[],\n\tcounts: Map<string, number>\n): Error | null {\n\tfor (const choice of choices) {\n\t\tconst count = getCount(counts, choice.identifier)\n\t\tif (choice.matchMax !== 0 && count > choice.matchMax) {\n\t\t\tlog?.error(`match submit exceeds ${side} matchMax`, {\n\t\t\t\tidentifier: choice.identifier,\n\t\t\t\tcount,\n\t\t\t\tmatchMax: choice.matchMax\n\t\t\t})\n\t\t\treturn errors.wrap(\n\t\t\t\tErrInvalidSubmission,\n\t\t\t\t`${side} '${choice.identifier}' used ${count} times, max ${choice.matchMax}`\n\t\t\t)\n\t\t}\n\t\tif (count < choice.matchMin) {\n\t\t\tlog?.error(`match submit below ${side} matchMin`, {\n\t\t\t\tidentifier: choice.identifier,\n\t\t\t\tcount,\n\t\t\t\tmatchMin: choice.matchMin\n\t\t\t})\n\t\t\treturn errors.wrap(\n\t\t\t\tErrInvalidSubmission,\n\t\t\t\t`${side} '${choice.identifier}' used ${count} times, min ${choice.matchMin}`\n\t\t\t)\n\t\t}\n\t}\n\treturn null\n}\n\nfunction validateMatchSubmission(\n\tlog: SessionContext[\"log\"],\n\tpairs: Array<{ source: string; target: string }>,\n\tsourceChoices: RendererMatchChoice[],\n\ttargetChoices: RendererMatchChoice[],\n\tminAssociations: number,\n\tmaxAssociations: number\n): Error | null {\n\tconst boundsError = validateAssociationBounds(log, pairs, minAssociations, maxAssociations)\n\tif (boundsError) {\n\t\treturn boundsError\n\t}\n\tconst sourceIds = new Set(\n\t\tsourceChoices.map(function getId(c) {\n\t\t\treturn c.identifier\n\t\t})\n\t)\n\tconst targetIds = new Set(\n\t\ttargetChoices.map(function getId(c) {\n\t\t\treturn c.identifier\n\t\t})\n\t)\n\tconst referenceError = validatePairsReferToKnownChoices(log, pairs, sourceIds, targetIds)\n\tif (referenceError) {\n\t\treturn referenceError\n\t}\n\tconst sourceCounts = new Map<string, number>()\n\tconst targetCounts = new Map<string, number>()\n\tfor (const pair of pairs) {\n\t\tbumpCount(sourceCounts, pair.source)\n\t\tbumpCount(targetCounts, pair.target)\n\t}\n\tconst sourceCapError = validateChoiceCaps(log, \"source\", sourceChoices, sourceCounts)\n\tif (sourceCapError) {\n\t\treturn sourceCapError\n\t}\n\tconst targetCapError = validateChoiceCaps(log, \"target\", targetChoices, targetCounts)\n\tif (targetCapError) {\n\t\treturn targetCapError\n\t}\n\treturn null\n}\n\nfunction matchState<Pcis extends PciId>(\n\tctx: SessionContext<Pcis>,\n\tstimulus: RendererStimulus | null,\n\tinteraction: Extract<StandardRendererInteraction, { type: \"match\" }>\n): PrimerState<Pcis> {\n\tlet pending: Promise<PrimerState<Pcis>> | undefined\n\treturn {\n\t\tphase: \"interaction\",\n\t\tkind: \"match\",\n\t\tstimulus,\n\t\tinteraction,\n\t\tsourceChoices: interaction.sourceChoices,\n\t\ttargetChoices: interaction.targetChoices,\n\t\tminAssociations: interaction.minAssociations,\n\t\tmaxAssociations: interaction.maxAssociations,\n\t\tsubmitMatch: function submitMatch(pairs: Array<{ source: string; target: string }>) {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tconst validationError = validateMatchSubmission(\n\t\t\t\tctx.log,\n\t\t\t\tpairs,\n\t\t\t\tinteraction.sourceChoices,\n\t\t\t\tinteraction.targetChoices,\n\t\t\t\tinteraction.minAssociations,\n\t\t\t\tinteraction.maxAssociations\n\t\t\t)\n\t\t\tif (validationError) {\n\t\t\t\treturn Promise.resolve(\n\t\t\t\t\tctx.errored(validationError, \"interaction\", {\n\t\t\t\t\t\tkind: \"interaction\",\n\t\t\t\t\t\tsubmission: { type: \"match\", pairs }\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t}\n\t\t\tpending = ctx.execute(\n\t\t\t\t{ kind: \"interaction\", submission: { type: \"match\", pairs } },\n\t\t\t\t\"interaction\"\n\t\t\t)\n\t\t\treturn pending\n\t\t},\n\t\ttimeout: function timeout() {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tpending = ctx.execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\treturn pending\n\t\t},\n\t\ttoJSON: poisonToJSON\n\t}\n}\n\nexport { matchState }\n",
|
|
13
14
|
"import { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport type { SessionContext } from \"@superbuilders/primer-tives/session-context\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type { PrimerState, RendererStimulus } from \"@superbuilders/primer-tives/types\"\n\nfunction observationState<Pcis extends PciId>(\n\tctx: SessionContext<Pcis>,\n\tstimulus: RendererStimulus | null\n): PrimerState<Pcis> {\n\tlet pending: Promise<PrimerState<Pcis>> | undefined\n\treturn {\n\t\tphase: \"observation\",\n\t\tstimulus,\n\t\tadvance: function advance() {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tpending = ctx.execute({ kind: \"observation\" }, \"observation\")\n\t\t\treturn pending\n\t\t},\n\t\ttoJSON: poisonToJSON\n\t}\n}\n\nexport { observationState }\n",
|
|
15
|
+
"import * as errors from \"@superbuilders/errors\"\nimport { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport type { ContentInline } from \"@superbuilders/primer-tives/content\"\nimport { ErrInvalidSubmission } from \"@superbuilders/primer-tives/errors\"\nimport type { SessionContext } from \"@superbuilders/primer-tives/session-context\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type {\n\tPrimerState,\n\tRendererChoice,\n\tRendererStimulus\n} from \"@superbuilders/primer-tives/types\"\n\ninterface OrderInteractionWire {\n\ttype: \"order\"\n\tprompt: ContentInline[]\n\tchoices: RendererChoice[]\n\tshuffle: boolean\n\tminChoices: number\n\tmaxChoices: number\n}\n\nfunction findUnknownKey(orderedKeys: string[], choices: RendererChoice[]): string | null {\n\tconst choiceIds = new Set(\n\t\tchoices.map(function getId(c) {\n\t\t\treturn c.identifier\n\t\t})\n\t)\n\tfor (const key of orderedKeys) {\n\t\tif (!choiceIds.has(key)) {\n\t\t\treturn key\n\t\t}\n\t}\n\treturn null\n}\n\nfunction validateOrderSubmission(\n\tlog: SessionContext[\"log\"],\n\torderedKeys: string[],\n\tchoices: RendererChoice[],\n\tminChoices: number,\n\tmaxChoices: number\n): Error | null {\n\tif (orderedKeys.length < minChoices) {\n\t\tlog?.error(\"order submit below minChoices\", { orderedKeys, minChoices })\n\t\treturn errors.wrap(ErrInvalidSubmission, `need at least ${minChoices} selections`)\n\t}\n\tif (orderedKeys.length > maxChoices) {\n\t\tlog?.error(\"order submit above maxChoices\", { orderedKeys, maxChoices })\n\t\treturn errors.wrap(ErrInvalidSubmission, `at most ${maxChoices} selections`)\n\t}\n\tconst uniqueKeys = new Set(orderedKeys)\n\tif (uniqueKeys.size !== orderedKeys.length) {\n\t\tlog?.error(\"order submit has duplicates\", { orderedKeys })\n\t\treturn errors.wrap(ErrInvalidSubmission, \"duplicate selections\")\n\t}\n\tconst unknownKey = findUnknownKey(orderedKeys, choices)\n\tif (unknownKey) {\n\t\tlog?.error(\"order submit has unknown key\", { key: unknownKey })\n\t\treturn errors.wrap(ErrInvalidSubmission, `unknown choice '${unknownKey}'`)\n\t}\n\treturn null\n}\n\nfunction orderState<Pcis extends PciId>(\n\tctx: SessionContext<Pcis>,\n\tstimulus: RendererStimulus | null,\n\tinteraction: OrderInteractionWire\n): PrimerState<Pcis> {\n\tlet pending: Promise<PrimerState<Pcis>> | undefined\n\treturn {\n\t\tphase: \"interaction\",\n\t\tkind: \"order\",\n\t\tstimulus,\n\t\tinteraction,\n\t\tchoices: interaction.choices,\n\t\tminChoices: interaction.minChoices,\n\t\tmaxChoices: interaction.maxChoices,\n\t\tsubmitOrder: function submitOrder(orderedKeys: string[]) {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tconst validationError = validateOrderSubmission(\n\t\t\t\tctx.log,\n\t\t\t\torderedKeys,\n\t\t\t\tinteraction.choices,\n\t\t\t\tinteraction.minChoices,\n\t\t\t\tinteraction.maxChoices\n\t\t\t)\n\t\t\tif (validationError) {\n\t\t\t\treturn Promise.resolve(\n\t\t\t\t\tctx.errored(validationError, \"interaction\", {\n\t\t\t\t\t\tkind: \"interaction\",\n\t\t\t\t\t\tsubmission: { type: \"order\", orderedKeys }\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t}\n\t\t\tpending = ctx.execute(\n\t\t\t\t{ kind: \"interaction\", submission: { type: \"order\", orderedKeys } },\n\t\t\t\t\"interaction\"\n\t\t\t)\n\t\t\treturn pending\n\t\t},\n\t\ttimeout: function timeout() {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tpending = ctx.execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\treturn pending\n\t\t},\n\t\ttoJSON: poisonToJSON\n\t}\n}\n\nexport { orderState }\n",
|
|
14
16
|
"import { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport type { PciId, PciValue } from \"@superbuilders/primer-tives/pci\"\nimport type { SessionContext } from \"@superbuilders/primer-tives/session-context\"\nimport type {\n\tPciInteraction,\n\tPciInteractionState,\n\tPrimerState,\n\tRendererStimulus\n} from \"@superbuilders/primer-tives/types\"\n\nfunction pciInteractionState<Pcis extends PciId>(\n\tctx: SessionContext<Pcis>,\n\tstimulus: RendererStimulus | null,\n\tinteraction: PciInteraction<Pcis>\n): PciInteractionState<Pcis> {\n\tlet pending: Promise<PrimerState<Pcis>> | undefined\n\tconst { pciId, properties } = interaction\n\tfunction submit(value: PciValue<typeof pciId>): Promise<PrimerState<Pcis>> {\n\t\tif (pending) {\n\t\t\treturn pending\n\t\t}\n\t\tctx.log?.debug(\"pci submit\", { pciId })\n\t\tconst submission = { type: \"portable-custom\" as const, pciId, value }\n\t\tpending = ctx.execute({ kind: \"interaction\", submission }, \"interaction\")\n\t\treturn pending\n\t}\n\tfunction timeout(): Promise<PrimerState<Pcis>> {\n\t\tif (pending) {\n\t\t\treturn pending\n\t\t}\n\t\tctx.log?.debug(\"pci timeout\", { pciId })\n\t\tpending = ctx.execute({ kind: \"timeout\" }, \"timeout\")\n\t\treturn pending\n\t}\n\t// biome-ignore lint/plugin: TS cannot verify mapped-union construction from generic Pcis — pciId↔properties correlation preserved by input\n\treturn {\n\t\tphase: \"interaction\",\n\t\tkind: \"portable-custom\",\n\t\tstimulus,\n\t\tinteraction,\n\t\tpciId,\n\t\tproperties,\n\t\tsubmit,\n\t\ttimeout,\n\t\ttoJSON: poisonToJSON\n\t} as PciInteractionState<Pcis>\n}\n\nexport { pciInteractionState }\n",
|
|
15
17
|
"import { poisonToJSON } from \"@superbuilders/primer-tives/consumed\"\nimport type { SessionContext } from \"@superbuilders/primer-tives/session-context\"\nimport type { PciId } from \"@superbuilders/primer-tives/pci\"\nimport type {\n\tPrimerState,\n\tRendererInteraction,\n\tRendererStimulus\n} from \"@superbuilders/primer-tives/types\"\n\nfunction textEntryState<Pcis extends PciId>(\n\tctx: SessionContext<Pcis>,\n\tstimulus: RendererStimulus | null,\n\tinteraction: Extract<RendererInteraction<Pcis>, { type: \"text-entry\" }>\n): PrimerState<Pcis> {\n\tlet pending: Promise<PrimerState<Pcis>> | undefined\n\treturn {\n\t\tphase: \"interaction\",\n\t\tkind: \"text-entry\",\n\t\tstimulus,\n\t\tinteraction,\n\t\tsubmitText: function submitText(value: string) {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tpending = ctx.execute(\n\t\t\t\t{ kind: \"interaction\", submission: { type: \"text-entry\", value } },\n\t\t\t\t\"interaction\"\n\t\t\t)\n\t\t\treturn pending\n\t\t},\n\t\ttimeout: function timeout() {\n\t\t\tif (pending) {\n\t\t\t\treturn pending\n\t\t\t}\n\t\t\tpending = ctx.execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\treturn pending\n\t\t},\n\t\ttoJSON: poisonToJSON\n\t}\n}\n\nexport { textEntryState }\n",
|
|
16
18
|
"type ContentInline = { type: \"text\"; value: string } | { type: \"italic\"; children: ContentInline[] }\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(inlinesToPlainText(node.children))\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 }\nexport { blocksToPlainText, inlinesToPlainText }\n"
|
|
17
19
|
],
|
|
18
|
-
"mappings": "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",
|
|
19
|
-
"debugId": "
|
|
20
|
+
"mappings": "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",
|
|
21
|
+
"debugId": "1EA25D8C44F28E9064756E2164756E21",
|
|
20
22
|
"names": []
|
|
21
23
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SessionContext } from "./session-context";
|
|
2
|
+
import type { PciId } from "./pci";
|
|
3
|
+
import type { PrimerState, RendererStimulus, StandardRendererInteraction } from "./types";
|
|
4
|
+
declare function matchState<Pcis extends PciId>(ctx: SessionContext<Pcis>, stimulus: RendererStimulus | null, interaction: Extract<StandardRendererInteraction, {
|
|
5
|
+
type: "match";
|
|
6
|
+
}>): PrimerState<Pcis>;
|
|
7
|
+
export { matchState };
|
|
8
|
+
//# sourceMappingURL=match-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match-state.d.ts","sourceRoot":"","sources":["../src/match-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EACX,WAAW,EAEX,gBAAgB,EAChB,2BAA2B,EAC3B,MAAM,mCAAmC,CAAA;AA8H1C,iBAAS,UAAU,CAAC,IAAI,SAAS,KAAK,EACrC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EACjC,WAAW,EAAE,OAAO,CAAC,2BAA2B,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,GAClE,WAAW,CAAC,IAAI,CAAC,CA8CnB;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ContentInline } from "./content";
|
|
2
|
+
import type { SessionContext } from "./session-context";
|
|
3
|
+
import type { PciId } from "./pci";
|
|
4
|
+
import type { PrimerState, RendererChoice, RendererStimulus } from "./types";
|
|
5
|
+
interface OrderInteractionWire {
|
|
6
|
+
type: "order";
|
|
7
|
+
prompt: ContentInline[];
|
|
8
|
+
choices: RendererChoice[];
|
|
9
|
+
shuffle: boolean;
|
|
10
|
+
minChoices: number;
|
|
11
|
+
maxChoices: number;
|
|
12
|
+
}
|
|
13
|
+
declare function orderState<Pcis extends PciId>(ctx: SessionContext<Pcis>, stimulus: RendererStimulus | null, interaction: OrderInteractionWire): PrimerState<Pcis>;
|
|
14
|
+
export { orderState };
|
|
15
|
+
//# sourceMappingURL=order-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-state.d.ts","sourceRoot":"","sources":["../src/order-state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EACX,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,MAAM,mCAAmC,CAAA;AAE1C,UAAU,oBAAoB;IAC7B,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,EAAE,CAAA;IACvB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CAClB;AA4CD,iBAAS,UAAU,CAAC,IAAI,SAAS,KAAK,EACrC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EACjC,WAAW,EAAE,oBAAoB,GAC/B,WAAW,CAAC,IAAI,CAAC,CA4CnB;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
|
package/dist/session.d.ts
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import type { PciId } from "./pci";
|
|
2
|
-
import type { FormFactor, Subject } from "./scope";
|
|
3
2
|
import type { PrimerLogger, TransitionPhase, WireIntent } from "./session-context";
|
|
4
3
|
import type { TransportResult, WireRequestBody } from "./transport";
|
|
5
4
|
import type { PrimerState } from "./types";
|
|
6
5
|
interface SessionConfig<Pcis extends PciId = PciId> {
|
|
7
6
|
readonly studentId: string;
|
|
8
7
|
readonly supportedPcis: readonly Pcis[];
|
|
9
|
-
readonly subject?: Subject;
|
|
10
|
-
readonly formFactor?: FormFactor;
|
|
11
8
|
readonly log: PrimerLogger | undefined;
|
|
12
9
|
readonly transport: (body: WireRequestBody<Pcis>) => Promise<TransportResult<Pcis>>;
|
|
13
10
|
}
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EACX,YAAY,EAEZ,eAAe,EACf,UAAU,EACV,MAAM,6CAA6C,CAAA;AACpD,OAAO,KAAK,EACX,eAAe,EACf,eAAe,EAEf,MAAM,uCAAuC,CAAA;AAC9C,OAAO,KAAK,EAEX,WAAW,EAGX,MAAM,mCAAmC,CAAA;AAU1C,UAAU,aAAa,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,IAAI,EAAE,CAAA;IACvC,QAAQ,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;CACnF;AAmBD,iBAAS,WAAW,CAAC,IAAI,SAAS,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC;sBA6CtD,UAAU,CAAC,IAAI,CAAC,SACjB,eAAe,KACpB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EA8E7B;AAED,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,YAAY,EAAE,aAAa,EAAE,CAAA"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { PciId } from "./pci";
|
|
2
|
-
import type { FormFactor, Subject } from "./scope";
|
|
3
2
|
import type { SessionContext, WireIntent } from "./session-context";
|
|
4
3
|
import type { ContentInline } from "./content";
|
|
5
4
|
import type { RendererCorrectAnswer, RendererInteraction, RendererStimulus, RendererSubmission } from "./types";
|
|
@@ -22,8 +21,6 @@ type WireResult<Pcis extends PciId = PciId> = {
|
|
|
22
21
|
interface WireRequestBody<Pcis extends PciId = PciId> {
|
|
23
22
|
studentId: string;
|
|
24
23
|
supportedPcis: readonly PciId[];
|
|
25
|
-
subject?: Subject;
|
|
26
|
-
formFactor?: FormFactor;
|
|
27
24
|
intent: WireIntent<Pcis>;
|
|
28
25
|
}
|
|
29
26
|
type TransportResult<Pcis extends PciId = PciId> = {
|
|
@@ -36,8 +33,6 @@ type TransportResult<Pcis extends PciId = PciId> = {
|
|
|
36
33
|
interface TransportConfig<Pcis extends PciId = PciId> {
|
|
37
34
|
readonly publishableKey: string;
|
|
38
35
|
readonly supportedPcis: readonly Pcis[];
|
|
39
|
-
readonly subject?: Subject;
|
|
40
|
-
readonly formFactor?: FormFactor;
|
|
41
36
|
readonly origin: string;
|
|
42
37
|
readonly fetch?: typeof globalThis.fetch;
|
|
43
38
|
readonly abort?: AbortController;
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,6CAA6C,CAAA;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACxE,OAAO,KAAK,EACX,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,mCAAmC,CAAA;AAE1C,QAAA,MAAM,YAAY,oBAAoB,CAAA;AAEtC,KAAK,UAAU,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,IACvC;IACA,OAAO,EAAE,UAAU,CAAA;IACnB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACjC,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAC5C,GACD;IACA,OAAO,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACjC,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAA;IACtC,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAA;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,EAAE,aAAa,EAAE,CAAA;IAChC,aAAa,EAAE,qBAAqB,GAAG,IAAI,CAAA;CAC1C,GACD;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAA;AAE3B,UAAU,eAAe,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IACnD,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,SAAS,KAAK,EAAE,CAAA;IAC/B,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,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,SAAS,IAAI,EAAE,CAAA;IACvC,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,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CACnC;AAED,iBAAS,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAuB3C;AAED,iBAAS,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQ3C;AAED,iBAAS,eAAe,CAAC,IAAI,SAAS,KAAK,EAAE,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,UAWtC,eAAe,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CA+ErF;AAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,CAAA;AACpE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,CAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -44,6 +44,20 @@ interface RendererChoice {
|
|
|
44
44
|
identifier: string;
|
|
45
45
|
content: ContentInline[];
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* A choice in a match interaction — QTI 3.0 simpleAssociableChoice.
|
|
49
|
+
*
|
|
50
|
+
* matchMax: maximum number of pairs this choice may participate in.
|
|
51
|
+
* 0 = unbounded (QTI convention).
|
|
52
|
+
* matchMin: minimum number of pairs this choice must participate in.
|
|
53
|
+
* 0 = no minimum (QTI default).
|
|
54
|
+
*/
|
|
55
|
+
interface RendererMatchChoice {
|
|
56
|
+
identifier: string;
|
|
57
|
+
content: ContentInline[];
|
|
58
|
+
matchMax: number;
|
|
59
|
+
matchMin: number;
|
|
60
|
+
}
|
|
47
61
|
type PciInteraction<Pcis extends PciId = PciId> = {
|
|
48
62
|
[K in Pcis]: {
|
|
49
63
|
type: "portable-custom";
|
|
@@ -52,7 +66,7 @@ type PciInteraction<Pcis extends PciId = PciId> = {
|
|
|
52
66
|
properties: PciProps<K>;
|
|
53
67
|
};
|
|
54
68
|
}[Pcis];
|
|
55
|
-
type
|
|
69
|
+
type StandardRendererInteraction = {
|
|
56
70
|
type: "choice";
|
|
57
71
|
prompt: ContentInline[];
|
|
58
72
|
options: RendererChoice[];
|
|
@@ -68,15 +82,41 @@ type RendererInteraction<Pcis extends PciId = PciId> = {
|
|
|
68
82
|
placeholderText?: string;
|
|
69
83
|
} | {
|
|
70
84
|
type: "extended-text";
|
|
85
|
+
cardinality: "single";
|
|
71
86
|
prompt: ContentInline[];
|
|
72
87
|
format: "plain";
|
|
88
|
+
expectedLength?: number;
|
|
73
89
|
expectedLines?: number;
|
|
90
|
+
patternMask?: string;
|
|
91
|
+
placeholderText?: string;
|
|
92
|
+
} | {
|
|
93
|
+
type: "extended-text";
|
|
94
|
+
cardinality: "multiple";
|
|
95
|
+
prompt: ContentInline[];
|
|
96
|
+
format: "plain";
|
|
74
97
|
expectedLength?: number;
|
|
98
|
+
expectedLines?: number;
|
|
75
99
|
patternMask?: string;
|
|
76
100
|
placeholderText?: string;
|
|
77
|
-
maxStrings: number;
|
|
78
101
|
minStrings: number;
|
|
79
|
-
|
|
102
|
+
maxStrings: number;
|
|
103
|
+
} | {
|
|
104
|
+
type: "order";
|
|
105
|
+
prompt: ContentInline[];
|
|
106
|
+
choices: RendererChoice[];
|
|
107
|
+
shuffle: boolean;
|
|
108
|
+
minChoices: number;
|
|
109
|
+
maxChoices: number;
|
|
110
|
+
} | {
|
|
111
|
+
type: "match";
|
|
112
|
+
prompt: ContentInline[];
|
|
113
|
+
sourceChoices: RendererMatchChoice[];
|
|
114
|
+
targetChoices: RendererMatchChoice[];
|
|
115
|
+
shuffle: boolean;
|
|
116
|
+
minAssociations: number;
|
|
117
|
+
maxAssociations: number;
|
|
118
|
+
};
|
|
119
|
+
type RendererInteraction<Pcis extends PciId = PciId> = StandardRendererInteraction | PciInteraction<Pcis>;
|
|
80
120
|
type PciSubmission<Pcis extends PciId = PciId> = {
|
|
81
121
|
[K in Pcis]: {
|
|
82
122
|
type: "portable-custom";
|
|
@@ -93,6 +133,15 @@ type RendererSubmission<Pcis extends PciId = PciId> = {
|
|
|
93
133
|
} | {
|
|
94
134
|
type: "extended-text";
|
|
95
135
|
values: string[];
|
|
136
|
+
} | {
|
|
137
|
+
type: "order";
|
|
138
|
+
orderedKeys: string[];
|
|
139
|
+
} | {
|
|
140
|
+
type: "match";
|
|
141
|
+
pairs: Array<{
|
|
142
|
+
source: string;
|
|
143
|
+
target: string;
|
|
144
|
+
}>;
|
|
96
145
|
} | PciSubmission<Pcis>;
|
|
97
146
|
interface ObservationState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
98
147
|
readonly phase: "observation";
|
|
@@ -103,7 +152,7 @@ interface ChoiceState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
|
103
152
|
readonly phase: "interaction";
|
|
104
153
|
readonly kind: "choice";
|
|
105
154
|
readonly stimulus: RendererStimulus | null;
|
|
106
|
-
readonly interaction: Extract<
|
|
155
|
+
readonly interaction: Extract<StandardRendererInteraction, {
|
|
107
156
|
type: "choice";
|
|
108
157
|
}>;
|
|
109
158
|
readonly options: RendererChoice[];
|
|
@@ -116,7 +165,7 @@ interface TextEntryState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
|
116
165
|
readonly phase: "interaction";
|
|
117
166
|
readonly kind: "text-entry";
|
|
118
167
|
readonly stimulus: RendererStimulus | null;
|
|
119
|
-
readonly interaction: Extract<
|
|
168
|
+
readonly interaction: Extract<StandardRendererInteraction, {
|
|
120
169
|
type: "text-entry";
|
|
121
170
|
}>;
|
|
122
171
|
submitText(value: string): Promise<PrimerState<Pcis>>;
|
|
@@ -127,8 +176,9 @@ interface ExtendedTextSingleState<Pcis extends PciId = PciId> extends NonSeriali
|
|
|
127
176
|
readonly kind: "extended-text";
|
|
128
177
|
readonly cardinality: "single";
|
|
129
178
|
readonly stimulus: RendererStimulus | null;
|
|
130
|
-
readonly interaction: Extract<
|
|
179
|
+
readonly interaction: Extract<StandardRendererInteraction, {
|
|
131
180
|
type: "extended-text";
|
|
181
|
+
cardinality: "single";
|
|
132
182
|
}>;
|
|
133
183
|
submitText(value: string): Promise<PrimerState<Pcis>>;
|
|
134
184
|
timeout(): Promise<PrimerState<Pcis>>;
|
|
@@ -138,8 +188,9 @@ interface ExtendedTextMultipleState<Pcis extends PciId = PciId> extends NonSeria
|
|
|
138
188
|
readonly kind: "extended-text";
|
|
139
189
|
readonly cardinality: "multiple";
|
|
140
190
|
readonly stimulus: RendererStimulus | null;
|
|
141
|
-
readonly interaction: Extract<
|
|
191
|
+
readonly interaction: Extract<StandardRendererInteraction, {
|
|
142
192
|
type: "extended-text";
|
|
193
|
+
cardinality: "multiple";
|
|
143
194
|
}>;
|
|
144
195
|
readonly maxStrings: number;
|
|
145
196
|
readonly minStrings: number;
|
|
@@ -147,6 +198,36 @@ interface ExtendedTextMultipleState<Pcis extends PciId = PciId> extends NonSeria
|
|
|
147
198
|
timeout(): Promise<PrimerState<Pcis>>;
|
|
148
199
|
}
|
|
149
200
|
type ExtendedTextState<Pcis extends PciId = PciId> = ExtendedTextSingleState<Pcis> | ExtendedTextMultipleState<Pcis>;
|
|
201
|
+
interface OrderState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
202
|
+
readonly phase: "interaction";
|
|
203
|
+
readonly kind: "order";
|
|
204
|
+
readonly stimulus: RendererStimulus | null;
|
|
205
|
+
readonly interaction: Extract<StandardRendererInteraction, {
|
|
206
|
+
type: "order";
|
|
207
|
+
}>;
|
|
208
|
+
readonly choices: RendererChoice[];
|
|
209
|
+
readonly minChoices: number;
|
|
210
|
+
readonly maxChoices: number;
|
|
211
|
+
submitOrder(orderedKeys: string[]): Promise<PrimerState<Pcis>>;
|
|
212
|
+
timeout(): Promise<PrimerState<Pcis>>;
|
|
213
|
+
}
|
|
214
|
+
interface MatchState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
215
|
+
readonly phase: "interaction";
|
|
216
|
+
readonly kind: "match";
|
|
217
|
+
readonly stimulus: RendererStimulus | null;
|
|
218
|
+
readonly interaction: Extract<StandardRendererInteraction, {
|
|
219
|
+
type: "match";
|
|
220
|
+
}>;
|
|
221
|
+
readonly sourceChoices: RendererMatchChoice[];
|
|
222
|
+
readonly targetChoices: RendererMatchChoice[];
|
|
223
|
+
readonly minAssociations: number;
|
|
224
|
+
readonly maxAssociations: number;
|
|
225
|
+
submitMatch(pairs: Array<{
|
|
226
|
+
source: string;
|
|
227
|
+
target: string;
|
|
228
|
+
}>): Promise<PrimerState<Pcis>>;
|
|
229
|
+
timeout(): Promise<PrimerState<Pcis>>;
|
|
230
|
+
}
|
|
150
231
|
type PciInteractionState<Pcis extends PciId = PciId> = {
|
|
151
232
|
[K in Pcis]: NonSerializable & {
|
|
152
233
|
readonly phase: "interaction";
|
|
@@ -159,7 +240,7 @@ type PciInteractionState<Pcis extends PciId = PciId> = {
|
|
|
159
240
|
timeout(): Promise<PrimerState<Pcis>>;
|
|
160
241
|
};
|
|
161
242
|
}[Pcis];
|
|
162
|
-
type InteractionState<Pcis extends PciId = PciId> = ChoiceState<Pcis> | TextEntryState<Pcis> | ExtendedTextState<Pcis> | PciInteractionState<Pcis>;
|
|
243
|
+
type InteractionState<Pcis extends PciId = PciId> = ChoiceState<Pcis> | TextEntryState<Pcis> | ExtendedTextState<Pcis> | OrderState<Pcis> | MatchState<Pcis> | PciInteractionState<Pcis>;
|
|
163
244
|
interface FeedbackState<Pcis extends PciId = PciId> extends NonSerializable {
|
|
164
245
|
readonly phase: "feedback";
|
|
165
246
|
readonly stimulus: RendererStimulus | null;
|
|
@@ -189,5 +270,5 @@ interface PciRenderProps<K extends PciId> {
|
|
|
189
270
|
submitted: boolean;
|
|
190
271
|
onValueChange: (value: PciValue<K> | null) => void;
|
|
191
272
|
}
|
|
192
|
-
export type { BodyStimulus, ChoiceState, CompletedState, ErroredState, ExtendedTextMultipleState, ExtendedTextSingleState, ExtendedTextState, FatalState, FeedbackState, ImageStimulus, InteractionState, NonSerializable, ObservationState, PciInteraction, PciInteractionState, PciRenderProps, PciSubmission, PrimerState, RendererChoice, RendererCorrectAnswer, RendererCorrectScalarValue, RendererInteraction, RendererStimulus, RendererSubmission, TextEntryState };
|
|
273
|
+
export type { BodyStimulus, ChoiceState, CompletedState, ErroredState, ExtendedTextMultipleState, ExtendedTextSingleState, ExtendedTextState, FatalState, FeedbackState, ImageStimulus, InteractionState, MatchState, NonSerializable, ObservationState, OrderState, PciInteraction, PciInteractionState, PciRenderProps, PciSubmission, PrimerState, RendererChoice, RendererMatchChoice, RendererCorrectAnswer, RendererCorrectScalarValue, RendererInteraction, StandardRendererInteraction, RendererStimulus, RendererSubmission, TextEntryState };
|
|
193
274
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACtF,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAEhF,KAAK,0BAA0B,GAC5B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnC,KAAK,qBAAqB,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,0BAA0B,GAAG,IAAI,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,0BAA0B,EAAE,CAAA;CAAE,GAC1D;IACA,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,KAAK,CAAC;QACb,eAAe,EAAE,MAAM,CAAA;QACvB,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;QACvD,KAAK,EAAE,0BAA0B,GAAG,IAAI,CAAA;KACxC,CAAC,CAAA;CACD,CAAA;AAEJ,UAAU,eAAe;IACxB,MAAM,IAAI,KAAK,CAAA;CACf;AAED,UAAU,YAAY;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,YAAY,EAAE,CAAA;CACpB;AAED,UAAU,aAAa;IACtB,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,aAAa,EAAE,CAAA;IAC5B,GAAG,EAAE,MAAM,CAAA;CACX;AAED,KAAK,gBAAgB,GAAG,YAAY,GAAG,aAAa,CAAA;AAEpD,UAAU,cAAc;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,aAAa,EAAE,CAAA;CACxB;AAED,KAAK,cAAc,CAAC,IAAI,SAAS,KAAK,GAAG,KAAK,IAAI;KAChD,CAAC,IAAI,IAAI,GAAG;QACZ,IAAI,EAAE,iBAAiB,CAAA;QACvB,MAAM,EAAE,aAAa,EAAE,CAAA;QACvB,KAAK,EAAE,CAAC,CAAA;QACR,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;KACvB;CACD,CAAC,IAAI,CAAC,CAAA;AAEP,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/scope.d.ts
DELETED
package/dist/scope.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAA;AAE/C,KAAK,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEpC,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA"}
|