@superbuilders/primer-tives 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +40 -46
  2. package/dist/choice-state.d.ts +8 -0
  3. package/dist/choice-state.d.ts.map +1 -0
  4. package/dist/client.d.ts +2 -8
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/consumed.d.ts +6 -0
  7. package/dist/consumed.d.ts.map +1 -0
  8. package/dist/errors.d.ts +2 -1
  9. package/dist/errors.d.ts.map +1 -1
  10. package/dist/extended-text-state.d.ts +8 -0
  11. package/dist/extended-text-state.d.ts.map +1 -0
  12. package/dist/feedback-state.d.ts +7 -0
  13. package/dist/feedback-state.d.ts.map +1 -0
  14. package/dist/index.d.ts +9 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +573 -0
  17. package/dist/index.js.map +21 -0
  18. package/dist/observation-state.d.ts +6 -0
  19. package/dist/observation-state.d.ts.map +1 -0
  20. package/dist/pci-state.d.ts +6 -0
  21. package/dist/pci-state.d.ts.map +1 -0
  22. package/dist/session-context.d.ts +24 -0
  23. package/dist/session-context.d.ts.map +1 -0
  24. package/dist/session.d.ts +16 -0
  25. package/dist/session.d.ts.map +1 -0
  26. package/dist/text-entry-state.d.ts +8 -0
  27. package/dist/text-entry-state.d.ts.map +1 -0
  28. package/dist/transport.d.ts +46 -0
  29. package/dist/transport.d.ts.map +1 -0
  30. package/dist/types.d.ts +5 -2
  31. package/dist/types.d.ts.map +1 -1
  32. package/package.json +4 -20
  33. package/dist/client.js +0 -400
  34. package/dist/client.js.map +0 -11
  35. package/dist/content.js +0 -27
  36. package/dist/content.js.map +0 -10
  37. package/dist/errors.js +0 -36
  38. package/dist/errors.js.map +0 -10
  39. package/dist/pci.js +0 -2
  40. package/dist/pci.js.map +0 -9
  41. package/dist/types.js +0 -2
  42. package/dist/types.js.map +0 -9
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/errors.ts", "../src/client.ts"],
4
- "sourcesContent": [
5
- "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",
6
- "import * as errors from \"@superbuilders/errors\"\nimport {\n\tErrBadRequest,\n\tErrConflict,\n\tErrForbidden,\n\tErrInvalidPublishableKey,\n\tErrJsonParse,\n\tErrMalformedPublishableKey,\n\tErrNetwork,\n\tErrNotFound,\n\tErrNotSerializable,\n\tErrRateLimited,\n\tErrServerError,\n\tErrServiceUnavailable,\n\tErrTimeout,\n\tErrUnsupportedPci,\n\tErrInvalidSubmission\n} from \"@superbuilders/primer-tives/errors\"\nimport type { PciId, PciValue } from \"@superbuilders/primer-tives/pci\"\nimport type {\n\tErroredState,\n\tPciInteraction,\n\tPciInteractionState,\n\tPrimerState,\n\tRendererChoice,\n\tRendererCorrectAnswer,\n\tRendererInteraction,\n\tRendererStimulus,\n\tRendererSubmission\n} from \"@superbuilders/primer-tives/types\"\nimport type { ContentInline } from \"@superbuilders/primer-tives/content\"\n\ninterface PrimerLogger {\n\tdebug(message: string, attributes?: Record<string, unknown>): void\n\tinfo(message: string, attributes?: Record<string, unknown>): void\n\twarn(message: string, attributes?: Record<string, unknown>): void\n\terror(message: string, attributes?: Record<string, unknown>): void\n}\n\ntype WireIntent<Pcis extends PciId = PciId> =\n\t| { kind: \"observation\" }\n\t| { kind: \"interaction\"; submission: RendererSubmission<Pcis> }\n\t| { kind: \"timeout\" }\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\nconst DEFAULT_ORIGIN = \"https://sb-primer.vercel.app\"\nconst ADVANCE_PATH = \"/api/v0/advance\"\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 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\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 === 422) {\n\t\treturn ErrUnsupportedPci\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\nconst PK_PREFIX = \"pk_\"\n\nfunction create<const Pcis extends PciId>(config: Config<Pcis>): Client<Pcis> {\n\tconst configFetch = config.fetch\n\tconst fetchFn = configFetch ? configFetch : globalThis.fetch\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\tfunction transportSignal(): AbortSignal | undefined {\n\t\tif (config.abort) {\n\t\t\treturn config.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 = config.origin ? `${config.origin}${ADVANCE_PATH}` : 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\t\"X-Primer-Publishable-Key\": config.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 = 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\tfunction makeSession(studentId: string) {\n\t\tfunction resolve(result: WireResult<Pcis>): PrimerState<Pcis> {\n\t\t\tswitch (result.outcome) {\n\t\t\t\tcase \"advanced\":\n\t\t\t\t\treturn fromAdvanced(result.stimulus, result.interaction)\n\t\t\t\tcase \"submitted\":\n\t\t\t\t\treturn feedbackState(\n\t\t\t\t\t\tresult.stimulus,\n\t\t\t\t\t\tresult.interaction,\n\t\t\t\t\t\tresult.submission,\n\t\t\t\t\t\tresult.isCorrect,\n\t\t\t\t\t\tresult.feedbackContent,\n\t\t\t\t\t\tresult.correctAnswer\n\t\t\t\t\t)\n\t\t\t\tcase \"completed\":\n\t\t\t\t\treturn { phase: \"completed\", toJSON: poisonToJSON }\n\t\t\t}\n\t\t}\n\n\t\tfunction errored(\n\t\t\terror: Error,\n\t\t\tfailedPhase: \"observation\" | \"interaction\" | \"timeout\",\n\t\t\tintent: WireIntent<Pcis>\n\t\t): ErroredState<Pcis> {\n\t\t\treturn {\n\t\t\t\tphase: \"errored\",\n\t\t\t\terror,\n\t\t\t\tfailedPhase,\n\t\t\t\tretry: function retry() {\n\t\t\t\t\tlog?.debug(\"retrying from errored state\", { failedPhase })\n\t\t\t\t\treturn execute(intent, failedPhase)\n\t\t\t\t},\n\t\t\t\ttoJSON: poisonToJSON\n\t\t\t}\n\t\t}\n\n\t\tasync function execute(\n\t\t\tintent: WireIntent<Pcis>,\n\t\t\tphase: \"observation\" | \"interaction\" | \"timeout\"\n\t\t): Promise<PrimerState<Pcis>> {\n\t\t\tconst body: WireRequestBody<Pcis> = {\n\t\t\t\tstudentId,\n\t\t\t\tsupportedPcis: config.supportedPcis,\n\t\t\t\tintent\n\t\t\t}\n\n\t\t\tconst result = await transport(body)\n\t\t\tif (!result.ok) {\n\t\t\t\treturn errored(result.error, phase, intent)\n\t\t\t}\n\n\t\t\treturn resolve(result.data)\n\t\t}\n\n\t\tfunction isPciSupported(pciId: string): boolean {\n\t\t\tfor (const id of config.supportedPcis) {\n\t\t\t\tif (id === pciId) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\n\t\tfunction fromAdvanced(\n\t\t\tstimulus: RendererStimulus | null,\n\t\t\tinteraction: RendererInteraction<Pcis> | null\n\t\t): PrimerState<Pcis> {\n\t\t\tif (interaction === null) {\n\t\t\t\treturn observationState(stimulus)\n\t\t\t}\n\t\t\tif (interaction.type === \"portable-custom\") {\n\t\t\t\tif (!isPciSupported(interaction.pciId)) {\n\t\t\t\t\tlog?.error(\"unsupported pci in frame\", { pciId: interaction.pciId })\n\t\t\t\t\treturn {\n\t\t\t\t\t\tphase: \"fatal\",\n\t\t\t\t\t\terror: errors.wrap(ErrUnsupportedPci, `pci '${interaction.pciId}'`),\n\t\t\t\t\t\ttoJSON: poisonToJSON\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pendingInteractionState(stimulus, interaction)\n\t\t}\n\n\t\tfunction observationState(stimulus: RendererStimulus | null): PrimerState<Pcis> {\n\t\t\treturn {\n\t\t\t\tphase: \"observation\",\n\t\t\t\tstimulus,\n\t\t\t\tadvance: function advance() {\n\t\t\t\t\treturn execute({ kind: \"observation\" }, \"observation\")\n\t\t\t\t},\n\t\t\t\ttoJSON: poisonToJSON\n\t\t\t}\n\t\t}\n\n\t\tfunction pendingInteractionState(\n\t\t\tstimulus: RendererStimulus | null,\n\t\t\tinteraction: RendererInteraction<Pcis>\n\t\t): PrimerState<Pcis> {\n\t\t\tswitch (interaction.type) {\n\t\t\t\tcase \"choice\":\n\t\t\t\t\treturn choiceState(\n\t\t\t\t\t\tstimulus,\n\t\t\t\t\t\tinteraction,\n\t\t\t\t\t\tinteraction.options,\n\t\t\t\t\t\tinteraction.maxChoices,\n\t\t\t\t\t\tinteraction.minChoices\n\t\t\t\t\t)\n\t\t\t\tcase \"text-entry\":\n\t\t\t\t\treturn textEntryState(stimulus, interaction)\n\t\t\t\tcase \"extended-text\":\n\t\t\t\t\treturn extendedTextState(stimulus, interaction)\n\t\t\t\tcase \"portable-custom\":\n\t\t\t\t\treturn pciInteractionState(stimulus, interaction)\n\t\t\t}\n\t\t}\n\n\t\tfunction findUnknownKey(selectedKeys: string[], options: RendererChoice[]): string | null {\n\t\t\tconst optionIds = new Set(\n\t\t\t\toptions.map(function getId(o) {\n\t\t\t\t\treturn o.identifier\n\t\t\t\t})\n\t\t\t)\n\t\t\tfor (const key of selectedKeys) {\n\t\t\t\tif (!optionIds.has(key)) {\n\t\t\t\t\treturn key\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null\n\t\t}\n\n\t\tfunction validateChoiceSubmission(\n\t\t\tselectedKeys: string[],\n\t\t\toptions: RendererChoice[],\n\t\t\tmaxChoices: number,\n\t\t\tminChoices: number\n\t\t): Error | null {\n\t\t\tif (selectedKeys.length < minChoices) {\n\t\t\t\tlog?.error(\"choice submit below minChoices\", { selectedKeys, minChoices })\n\t\t\t\treturn errors.wrap(ErrInvalidSubmission, `need at least ${minChoices} selections`)\n\t\t\t}\n\t\t\tif (selectedKeys.length > maxChoices) {\n\t\t\t\tlog?.error(\"choice submit above maxChoices\", { selectedKeys, maxChoices })\n\t\t\t\treturn errors.wrap(ErrInvalidSubmission, `at most ${maxChoices} selections`)\n\t\t\t}\n\t\t\tconst uniqueKeys = new Set(selectedKeys)\n\t\t\tif (uniqueKeys.size !== selectedKeys.length) {\n\t\t\t\tlog?.error(\"choice submit has duplicates\", { selectedKeys })\n\t\t\t\treturn errors.wrap(ErrInvalidSubmission, \"duplicate selections\")\n\t\t\t}\n\t\t\tconst unknownKey = findUnknownKey(selectedKeys, options)\n\t\t\tif (unknownKey) {\n\t\t\t\tlog?.error(\"choice submit has unknown key\", { key: unknownKey })\n\t\t\t\treturn errors.wrap(ErrInvalidSubmission, `unknown option '${unknownKey}'`)\n\t\t\t}\n\t\t\treturn null\n\t\t}\n\n\t\tfunction choiceState(\n\t\t\tstimulus: RendererStimulus | null,\n\t\t\tinteraction: Extract<RendererInteraction<Pcis>, { type: \"choice\" }>,\n\t\t\toptions: RendererChoice[],\n\t\t\tmaxChoices: number,\n\t\t\tminChoices: number\n\t\t): PrimerState<Pcis> {\n\t\t\treturn {\n\t\t\t\tphase: \"interaction\",\n\t\t\t\tkind: \"choice\",\n\t\t\t\tstimulus,\n\t\t\t\tinteraction,\n\t\t\t\toptions,\n\t\t\t\tmaxChoices,\n\t\t\t\tminChoices,\n\t\t\t\tsubmitChoice: function submitChoice(selectedKeys: string[]) {\n\t\t\t\t\tconst validationError = validateChoiceSubmission(\n\t\t\t\t\t\tselectedKeys,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tmaxChoices,\n\t\t\t\t\t\tminChoices\n\t\t\t\t\t)\n\t\t\t\t\tif (validationError) {\n\t\t\t\t\t\treturn Promise.resolve(\n\t\t\t\t\t\t\terrored(validationError, \"interaction\", {\n\t\t\t\t\t\t\t\tkind: \"interaction\",\n\t\t\t\t\t\t\t\tsubmission: { type: \"choice\", selectedKeys }\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\t{ kind: \"interaction\", submission: { type: \"choice\", selectedKeys } },\n\t\t\t\t\t\t\"interaction\"\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\ttimeout: function timeout() {\n\t\t\t\t\treturn execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\t\t},\n\t\t\t\ttoJSON: poisonToJSON\n\t\t\t}\n\t\t}\n\n\t\tfunction textEntryState(\n\t\t\tstimulus: RendererStimulus | null,\n\t\t\tinteraction: Extract<RendererInteraction<Pcis>, { type: \"text-entry\" }>\n\t\t): PrimerState<Pcis> {\n\t\t\treturn {\n\t\t\t\tphase: \"interaction\",\n\t\t\t\tkind: \"text-entry\",\n\t\t\t\tstimulus,\n\t\t\t\tinteraction,\n\t\t\t\tsubmitText: function submitText(value: string) {\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\t{ kind: \"interaction\", submission: { type: \"text-entry\", value } },\n\t\t\t\t\t\t\"interaction\"\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\ttimeout: function timeout() {\n\t\t\t\t\treturn execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\t\t},\n\t\t\t\ttoJSON: poisonToJSON\n\t\t\t}\n\t\t}\n\n\t\tfunction validateExtendedTextSubmission(\n\t\t\tvalues: string[],\n\t\t\tminStrings: number,\n\t\t\tmaxStrings: number\n\t\t): Error | null {\n\t\t\tif (values.length < minStrings) {\n\t\t\t\tlog?.error(\"extended-text submit below minStrings\", { count: values.length, minStrings })\n\t\t\t\treturn errors.wrap(ErrInvalidSubmission, `need at least ${minStrings} values`)\n\t\t\t}\n\t\t\tif (values.length > maxStrings) {\n\t\t\t\tlog?.error(\"extended-text submit above maxStrings\", { count: values.length, maxStrings })\n\t\t\t\treturn errors.wrap(ErrInvalidSubmission, `at most ${maxStrings} values`)\n\t\t\t}\n\t\t\treturn null\n\t\t}\n\n\t\tfunction extendedTextState(\n\t\t\tstimulus: RendererStimulus | null,\n\t\t\tinteraction: RendererInteraction<Pcis> & { type: \"extended-text\" }\n\t\t): PrimerState<Pcis> {\n\t\t\tconst maxStrings = interaction.maxStrings\n\t\t\tconst minStrings = interaction.minStrings\n\t\t\tif (maxStrings === 1) {\n\t\t\t\treturn {\n\t\t\t\t\tphase: \"interaction\",\n\t\t\t\t\tkind: \"extended-text\",\n\t\t\t\t\tcardinality: \"single\",\n\t\t\t\t\tstimulus,\n\t\t\t\t\tinteraction,\n\t\t\t\t\tsubmitText: function submitText(value: string) {\n\t\t\t\t\t\treturn execute(\n\t\t\t\t\t\t\t{ kind: \"interaction\", submission: { type: \"extended-text\", values: [value] } },\n\t\t\t\t\t\t\t\"interaction\"\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t\ttimeout: function timeout() {\n\t\t\t\t\t\treturn execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\t\t\t},\n\t\t\t\t\ttoJSON: poisonToJSON\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tphase: \"interaction\",\n\t\t\t\tkind: \"extended-text\",\n\t\t\t\tcardinality: \"multiple\",\n\t\t\t\tstimulus,\n\t\t\t\tinteraction,\n\t\t\t\tmaxStrings,\n\t\t\t\tminStrings,\n\t\t\t\tsubmitTexts: function submitTexts(values: string[]) {\n\t\t\t\t\tconst validationError = validateExtendedTextSubmission(values, minStrings, maxStrings)\n\t\t\t\t\tif (validationError) {\n\t\t\t\t\t\treturn Promise.resolve(\n\t\t\t\t\t\t\terrored(validationError, \"interaction\", {\n\t\t\t\t\t\t\t\tkind: \"interaction\",\n\t\t\t\t\t\t\t\tsubmission: { type: \"extended-text\", values }\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\t{ kind: \"interaction\", submission: { type: \"extended-text\", values } },\n\t\t\t\t\t\t\"interaction\"\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\ttimeout: function timeout() {\n\t\t\t\t\treturn execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\t\t},\n\t\t\t\ttoJSON: poisonToJSON\n\t\t\t}\n\t\t}\n\n\t\t// Safe cast: TS cannot verify mapped-union construction from generic Pcis.\n\t\t// The input `interaction: PciInteraction<Pcis>` guarantees pciId↔properties\n\t\t// correlation; destructuring loses TS tracking but runtime is correct.\n\t\tfunction pciInteractionState(\n\t\t\tstimulus: RendererStimulus | null,\n\t\t\tinteraction: PciInteraction<Pcis>\n\t\t): PciInteractionState<Pcis> {\n\t\t\tconst { pciId, properties } = interaction\n\t\t\tfunction submit(value: PciValue<typeof pciId>): Promise<PrimerState<Pcis>> {\n\t\t\t\tlog?.debug(\"pci submit\", { pciId })\n\t\t\t\tconst submission = { type: \"portable-custom\" as const, pciId, value }\n\t\t\t\treturn execute({ kind: \"interaction\", submission }, \"interaction\")\n\t\t\t}\n\t\t\tfunction timeout(): Promise<PrimerState<Pcis>> {\n\t\t\t\tlog?.debug(\"pci timeout\", { pciId })\n\t\t\t\treturn execute({ kind: \"timeout\" }, \"timeout\")\n\t\t\t}\n\t\t\t// biome-ignore lint/plugin: TS cannot verify mapped-union construction from generic Pcis — pciId↔properties correlation preserved by input\n\t\t\treturn {\n\t\t\t\tphase: \"interaction\",\n\t\t\t\tkind: \"portable-custom\",\n\t\t\t\tstimulus,\n\t\t\t\tinteraction,\n\t\t\t\tpciId,\n\t\t\t\tproperties,\n\t\t\t\tsubmit,\n\t\t\t\ttimeout,\n\t\t\t\ttoJSON: poisonToJSON\n\t\t\t} as PciInteractionState<Pcis>\n\t\t}\n\n\t\tfunction feedbackState(\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\t): PrimerState<Pcis> {\n\t\t\treturn {\n\t\t\t\tphase: \"feedback\",\n\t\t\t\tstimulus,\n\t\t\t\tinteraction,\n\t\t\t\tsubmission,\n\t\t\t\tisCorrect,\n\t\t\t\tfeedbackContent,\n\t\t\t\tcorrectAnswer,\n\t\t\t\tadvance: function advance() {\n\t\t\t\t\treturn execute({ kind: \"observation\" }, \"observation\")\n\t\t\t\t},\n\t\t\t\ttoJSON: poisonToJSON\n\t\t\t}\n\t\t}\n\n\t\treturn { execute }\n\t}\n\n\treturn {\n\t\tasync start(studentId: string): Promise<PrimerState<Pcis>> {\n\t\t\tlog?.debug(\"start\", { studentId })\n\t\t\tconst s = makeSession(studentId)\n\t\t\treturn s.execute({ kind: \"observation\" }, \"observation\")\n\t\t}\n\t}\n}\n\nexport { ADVANCE_PATH, DEFAULT_ORIGIN, create }\nexport type { Client, Config, PrimerLogger }\n"
7
- ],
8
- "mappings": ";AAAA;AAEA,IAAM,aAAoB,WAAI,SAAS;AACvC,IAAM,eAAsB,WAAI,YAAY;AAC5C,IAAM,oBAA2B,WAAI,iBAAiB;AACtD,IAAM,2BAAkC,WAAI,yBAAyB;AACrE,IAAM,gBAAuB,WAAI,aAAa;AAC9C,IAAM,iBAAwB,WAAI,cAAc;AAChD,IAAM,aAAoB,WAAI,SAAS;AACvC,IAAM,eAAsB,WAAI,WAAW;AAC3C,IAAM,cAAqB,WAAI,WAAW;AAC1C,IAAM,cAAqB,WAAI,UAAU;AACzC,IAAM,iBAAwB,WAAI,cAAc;AAChD,IAAM,wBAA+B,WAAI,qBAAqB;AAC9D,IAAM,qBAA4B,WACjC,0EACD;AACA,IAAM,uBAA8B,WAAI,oBAAoB;AAC5D,IAAM,6BAAoC,WAAI,2BAA2B;;AClBzE;AAuEA,IAAM,iBAAiB;AACvB,IAAM,eAAe;AAerB,SAAS,YAAY,GAAU;AAAA,EAE9B,MAAM;AAAA;AAGP,SAAS,YAAY,CAAC,QAAuB;AAAA,EAC5C,IAAI,WAAW,KAAK;AAAA,IACnB,OAAO;AAAA,EACR;AAAA,EACA,IAAI,WAAW,KAAK;AAAA,IACnB,OAAO;AAAA,EACR;AAAA,EACA,IAAI,WAAW,KAAK;AAAA,IACnB,OAAO;AAAA,EACR;AAAA,EACA,IAAI,WAAW,KAAK;AAAA,IACnB,OAAO;AAAA,EACR;AAAA,EACA,IAAI,WAAW,KAAK;AAAA,IACnB,OAAO;AAAA,EACR;AAAA,EACA,IAAI,WAAW,KAAK;AAAA,IACnB,OAAO;AAAA,EACR;AAAA,EACA,IAAI,WAAW,KAAK;AAAA,IACnB,OAAO;AAAA,EACR;AAAA,EACA,IAAI,WAAW,OAAO,WAAW,OAAO,WAAW,KAAK;AAAA,IACvD,OAAO;AAAA,EACR;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,YAAY,CAAC,KAAuB;AAAA,EAC5C,IAAI,eAAe,gBAAgB,IAAI,SAAS,cAAc;AAAA,IAC7D,OAAO;AAAA,EACR;AAAA,EACA,IAAI,eAAe,gBAAgB,IAAI,SAAS,gBAAgB;AAAA,IAC/D,OAAO;AAAA,EACR;AAAA,EACA,OAAO;AAAA;AAGR,IAAM,YAAY;AAElB,SAAS,MAAgC,CAAC,QAAoC;AAAA,EAC7E,MAAM,cAAc,OAAO;AAAA,EAC3B,MAAM,UAAU,cAAc,cAAc,WAAW;AAAA,EACvD,MAAM,MAAM,OAAO;AAAA,EAEnB,IAAI,CAAC,OAAO,eAAe,WAAW,SAAS,GAAG;AAAA,IACjD,KAAK,MAAM,6BAA6B,EAAE,QAAQ,UAAU,CAAC;AAAA,IAE7D,MAAa,aAAK,4BAA4B,wBAAwB,YAAY;AAAA,EACnF;AAAA,EAEA,SAAS,eAAe,GAA4B;AAAA,IACnD,IAAI,OAAO,OAAO;AAAA,MACjB,OAAO,OAAO,MAAM;AAAA,IACrB;AAAA,IACA;AAAA;AAAA,EAGD,eAAe,SAAS,CAAC,MAA6D;AAAA,IACrF,KAAK,MAAM,qBAAqB;AAAA,MAC/B,WAAW,KAAK;AAAA,MAChB,YAAY,KAAK,OAAO;AAAA,IACzB,CAAC;AAAA,IAED,MAAM,MAAM,OAAO,SAAS,GAAG,OAAO,SAAS,iBAAiB;AAAA,IAChE,MAAM,cAAc,MAAM,QAAQ,KAAK;AAAA,MACtC,QAAQ;AAAA,MACR,SAAS;AAAA,QACR,gBAAgB;AAAA,QAChB,4BAA4B,OAAO;AAAA,MACpC;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,MACzB,QAAQ,gBAAgB;AAAA,IACzB,CAAC,EAAE,KACF,SAAS,EAAE,CAAC,GAAa;AAAA,MACxB,OAAO,EAAE,IAAI,MAAM,UAAU,EAAE;AAAA,OAEhC,SAAS,IAAI,CAAC,KAAY;AAAA,MACzB,OAAO,EAAE,IAAI,OAAO,OAAO,IAAI;AAAA,KAEjC;AAAA,IAEA,IAAI,CAAC,YAAY,IAAI;AAAA,MACpB,IAAI,aAAa,YAAY,KAAK,GAAG;AAAA,QACpC,KAAK,MAAM,qBAAqB;AAAA,UAC/B,WAAW,KAAK;AAAA,UAChB,YAAY,KAAK,OAAO;AAAA,QACzB,CAAC;AAAA,QACD,OAAO,EAAE,IAAI,OAAO,OAAc,aAAK,YAAY,YAAY,MAAM,OAAO,EAAE;AAAA,MAC/E;AAAA,MACA,KAAK,MAAM,2BAA2B;AAAA,QACrC,WAAW,KAAK;AAAA,QAChB,OAAO,YAAY;AAAA,MACpB,CAAC;AAAA,MACD,OAAO,EAAE,IAAI,OAAO,OAAc,aAAK,YAAY,YAAY,MAAM,OAAO,EAAE;AAAA,IAC/E;AAAA,IAEA,MAAM,MAAM,YAAY;AAAA,IAExB,IAAI,CAAC,IAAI,IAAI;AAAA,MACZ,MAAM,OAAO,MAAM,IAAI,KAAK,EAAE,MAAM,SAAS,QAAQ,GAAG;AAAA,QACvD,OAAO;AAAA,OACP;AAAA,MACD,MAAM,WAAW,aAAa,IAAI,MAAM;AAAA,MACxC,KAAK,MAAM,wBAAwB;AAAA,QAClC,WAAW,KAAK;AAAA,QAChB,QAAQ,IAAI;AAAA,MACb,CAAC;AAAA,MACD,OAAO,EAAE,IAAI,OAAO,OAAc,aAAK,UAAU,IAAI,EAAE;AAAA,IACxD;AAAA,IAEA,MAAM,aAAa,MAAM,IAAI,KAAK,EAAE,KACnC,SAAS,EAAE,CAAC,MAAwB;AAAA,MACnC,OAAO,EAAE,IAAI,MAAM,KAAK;AAAA,OAEzB,SAAS,IAAI,CAAC,KAAY;AAAA,MACzB,OAAO,EAAE,IAAI,OAAO,OAAO,IAAI;AAAA,KAEjC;AAAA,IAEA,IAAI,CAAC,WAAW,IAAI;AAAA,MACnB,KAAK,MAAM,+BAA+B;AAAA,QACzC,WAAW,KAAK;AAAA,QAChB,OAAO,WAAW;AAAA,MACnB,CAAC;AAAA,MACD,OAAO,EAAE,IAAI,OAAO,OAAc,aAAK,cAAc,WAAW,MAAM,OAAO,EAAE;AAAA,IAChF;AAAA,IAEA,KAAK,MAAM,qBAAqB;AAAA,MAC/B,WAAW,KAAK;AAAA,MAChB,YAAY,KAAK,OAAO;AAAA,IACzB,CAAC;AAAA,IAED,OAAO,EAAE,IAAI,MAAM,MAAM,WAAW,KAAK;AAAA;AAAA,EAG1C,SAAS,WAAW,CAAC,WAAmB;AAAA,IACvC,SAAS,OAAO,CAAC,QAA6C;AAAA,MAC7D,QAAQ,OAAO;AAAA,aACT;AAAA,UACJ,OAAO,aAAa,OAAO,UAAU,OAAO,WAAW;AAAA,aACnD;AAAA,UACJ,OAAO,cACN,OAAO,UACP,OAAO,aACP,OAAO,YACP,OAAO,WACP,OAAO,iBACP,OAAO,aACR;AAAA,aACI;AAAA,UACJ,OAAO,EAAE,OAAO,aAAa,QAAQ,aAAa;AAAA;AAAA;AAAA,IAIrD,SAAS,OAAO,CACf,OACA,aACA,QACqB;AAAA,MACrB,OAAO;AAAA,QACN,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,OAAO,SAAS,KAAK,GAAG;AAAA,UACvB,KAAK,MAAM,+BAA+B,EAAE,YAAY,CAAC;AAAA,UACzD,OAAO,QAAQ,QAAQ,WAAW;AAAA;AAAA,QAEnC,QAAQ;AAAA,MACT;AAAA;AAAA,IAGD,eAAe,OAAO,CACrB,QACA,OAC6B;AAAA,MAC7B,MAAM,OAA8B;AAAA,QACnC;AAAA,QACA,eAAe,OAAO;AAAA,QACtB;AAAA,MACD;AAAA,MAEA,MAAM,SAAS,MAAM,UAAU,IAAI;AAAA,MACnC,IAAI,CAAC,OAAO,IAAI;AAAA,QACf,OAAO,QAAQ,OAAO,OAAO,OAAO,MAAM;AAAA,MAC3C;AAAA,MAEA,OAAO,QAAQ,OAAO,IAAI;AAAA;AAAA,IAG3B,SAAS,cAAc,CAAC,OAAwB;AAAA,MAC/C,WAAW,MAAM,OAAO,eAAe;AAAA,QACtC,IAAI,OAAO,OAAO;AAAA,UACjB,OAAO;AAAA,QACR;AAAA,MACD;AAAA,MACA,OAAO;AAAA;AAAA,IAGR,SAAS,YAAY,CACpB,UACA,aACoB;AAAA,MACpB,IAAI,gBAAgB,MAAM;AAAA,QACzB,OAAO,iBAAiB,QAAQ;AAAA,MACjC;AAAA,MACA,IAAI,YAAY,SAAS,mBAAmB;AAAA,QAC3C,IAAI,CAAC,eAAe,YAAY,KAAK,GAAG;AAAA,UACvC,KAAK,MAAM,4BAA4B,EAAE,OAAO,YAAY,MAAM,CAAC;AAAA,UACnE,OAAO;AAAA,YACN,OAAO;AAAA,YACP,OAAc,aAAK,mBAAmB,QAAQ,YAAY,QAAQ;AAAA,YAClE,QAAQ;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAAA,MACA,OAAO,wBAAwB,UAAU,WAAW;AAAA;AAAA,IAGrD,SAAS,gBAAgB,CAAC,UAAsD;AAAA,MAC/E,OAAO;AAAA,QACN,OAAO;AAAA,QACP;AAAA,QACA,SAAS,SAAS,OAAO,GAAG;AAAA,UAC3B,OAAO,QAAQ,EAAE,MAAM,cAAc,GAAG,aAAa;AAAA;AAAA,QAEtD,QAAQ;AAAA,MACT;AAAA;AAAA,IAGD,SAAS,uBAAuB,CAC/B,UACA,aACoB;AAAA,MACpB,QAAQ,YAAY;AAAA,aACd;AAAA,UACJ,OAAO,YACN,UACA,aACA,YAAY,SACZ,YAAY,YACZ,YAAY,UACb;AAAA,aACI;AAAA,UACJ,OAAO,eAAe,UAAU,WAAW;AAAA,aACvC;AAAA,UACJ,OAAO,kBAAkB,UAAU,WAAW;AAAA,aAC1C;AAAA,UACJ,OAAO,oBAAoB,UAAU,WAAW;AAAA;AAAA;AAAA,IAInD,SAAS,cAAc,CAAC,cAAwB,SAA0C;AAAA,MACzF,MAAM,YAAY,IAAI,IACrB,QAAQ,IAAI,SAAS,KAAK,CAAC,GAAG;AAAA,QAC7B,OAAO,EAAE;AAAA,OACT,CACF;AAAA,MACA,WAAW,OAAO,cAAc;AAAA,QAC/B,IAAI,CAAC,UAAU,IAAI,GAAG,GAAG;AAAA,UACxB,OAAO;AAAA,QACR;AAAA,MACD;AAAA,MACA,OAAO;AAAA;AAAA,IAGR,SAAS,wBAAwB,CAChC,cACA,SACA,YACA,YACe;AAAA,MACf,IAAI,aAAa,SAAS,YAAY;AAAA,QACrC,KAAK,MAAM,kCAAkC,EAAE,cAAc,WAAW,CAAC;AAAA,QACzE,OAAc,aAAK,sBAAsB,iBAAiB,uBAAuB;AAAA,MAClF;AAAA,MACA,IAAI,aAAa,SAAS,YAAY;AAAA,QACrC,KAAK,MAAM,kCAAkC,EAAE,cAAc,WAAW,CAAC;AAAA,QACzE,OAAc,aAAK,sBAAsB,WAAW,uBAAuB;AAAA,MAC5E;AAAA,MACA,MAAM,aAAa,IAAI,IAAI,YAAY;AAAA,MACvC,IAAI,WAAW,SAAS,aAAa,QAAQ;AAAA,QAC5C,KAAK,MAAM,gCAAgC,EAAE,aAAa,CAAC;AAAA,QAC3D,OAAc,aAAK,sBAAsB,sBAAsB;AAAA,MAChE;AAAA,MACA,MAAM,aAAa,eAAe,cAAc,OAAO;AAAA,MACvD,IAAI,YAAY;AAAA,QACf,KAAK,MAAM,iCAAiC,EAAE,KAAK,WAAW,CAAC;AAAA,QAC/D,OAAc,aAAK,sBAAsB,mBAAmB,aAAa;AAAA,MAC1E;AAAA,MACA,OAAO;AAAA;AAAA,IAGR,SAAS,WAAW,CACnB,UACA,aACA,SACA,YACA,YACoB;AAAA,MACpB,OAAO;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc,SAAS,YAAY,CAAC,cAAwB;AAAA,UAC3D,MAAM,kBAAkB,yBACvB,cACA,SACA,YACA,UACD;AAAA,UACA,IAAI,iBAAiB;AAAA,YACpB,OAAO,QAAQ,QACd,QAAQ,iBAAiB,eAAe;AAAA,cACvC,MAAM;AAAA,cACN,YAAY,EAAE,MAAM,UAAU,aAAa;AAAA,YAC5C,CAAC,CACF;AAAA,UACD;AAAA,UACA,OAAO,QACN,EAAE,MAAM,eAAe,YAAY,EAAE,MAAM,UAAU,aAAa,EAAE,GACpE,aACD;AAAA;AAAA,QAED,SAAS,SAAS,OAAO,GAAG;AAAA,UAC3B,OAAO,QAAQ,EAAE,MAAM,UAAU,GAAG,SAAS;AAAA;AAAA,QAE9C,QAAQ;AAAA,MACT;AAAA;AAAA,IAGD,SAAS,cAAc,CACtB,UACA,aACoB;AAAA,MACpB,OAAO;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,YAAY,SAAS,UAAU,CAAC,OAAe;AAAA,UAC9C,OAAO,QACN,EAAE,MAAM,eAAe,YAAY,EAAE,MAAM,cAAc,MAAM,EAAE,GACjE,aACD;AAAA;AAAA,QAED,SAAS,SAAS,OAAO,GAAG;AAAA,UAC3B,OAAO,QAAQ,EAAE,MAAM,UAAU,GAAG,SAAS;AAAA;AAAA,QAE9C,QAAQ;AAAA,MACT;AAAA;AAAA,IAGD,SAAS,8BAA8B,CACtC,QACA,YACA,YACe;AAAA,MACf,IAAI,OAAO,SAAS,YAAY;AAAA,QAC/B,KAAK,MAAM,yCAAyC,EAAE,OAAO,OAAO,QAAQ,WAAW,CAAC;AAAA,QACxF,OAAc,aAAK,sBAAsB,iBAAiB,mBAAmB;AAAA,MAC9E;AAAA,MACA,IAAI,OAAO,SAAS,YAAY;AAAA,QAC/B,KAAK,MAAM,yCAAyC,EAAE,OAAO,OAAO,QAAQ,WAAW,CAAC;AAAA,QACxF,OAAc,aAAK,sBAAsB,WAAW,mBAAmB;AAAA,MACxE;AAAA,MACA,OAAO;AAAA;AAAA,IAGR,SAAS,iBAAiB,CACzB,UACA,aACoB;AAAA,MACpB,MAAM,aAAa,YAAY;AAAA,MAC/B,MAAM,aAAa,YAAY;AAAA,MAC/B,IAAI,eAAe,GAAG;AAAA,QACrB,OAAO;AAAA,UACN,OAAO;AAAA,UACP,MAAM;AAAA,UACN,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA,YAAY,SAAS,UAAU,CAAC,OAAe;AAAA,YAC9C,OAAO,QACN,EAAE,MAAM,eAAe,YAAY,EAAE,MAAM,iBAAiB,QAAQ,CAAC,KAAK,EAAE,EAAE,GAC9E,aACD;AAAA;AAAA,UAED,SAAS,SAAS,OAAO,GAAG;AAAA,YAC3B,OAAO,QAAQ,EAAE,MAAM,UAAU,GAAG,SAAS;AAAA;AAAA,UAE9C,QAAQ;AAAA,QACT;AAAA,MACD;AAAA,MACA,OAAO;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa,SAAS,WAAW,CAAC,QAAkB;AAAA,UACnD,MAAM,kBAAkB,+BAA+B,QAAQ,YAAY,UAAU;AAAA,UACrF,IAAI,iBAAiB;AAAA,YACpB,OAAO,QAAQ,QACd,QAAQ,iBAAiB,eAAe;AAAA,cACvC,MAAM;AAAA,cACN,YAAY,EAAE,MAAM,iBAAiB,OAAO;AAAA,YAC7C,CAAC,CACF;AAAA,UACD;AAAA,UACA,OAAO,QACN,EAAE,MAAM,eAAe,YAAY,EAAE,MAAM,iBAAiB,OAAO,EAAE,GACrE,aACD;AAAA;AAAA,QAED,SAAS,SAAS,OAAO,GAAG;AAAA,UAC3B,OAAO,QAAQ,EAAE,MAAM,UAAU,GAAG,SAAS;AAAA;AAAA,QAE9C,QAAQ;AAAA,MACT;AAAA;AAAA,IAMD,SAAS,mBAAmB,CAC3B,UACA,aAC4B;AAAA,MAC5B,QAAQ,OAAO,eAAe;AAAA,MAC9B,SAAS,MAAM,CAAC,OAA2D;AAAA,QAC1E,KAAK,MAAM,cAAc,EAAE,MAAM,CAAC;AAAA,QAClC,MAAM,aAAa,EAAE,MAAM,mBAA4B,OAAO,MAAM;AAAA,QACpE,OAAO,QAAQ,EAAE,MAAM,eAAe,WAAW,GAAG,aAAa;AAAA;AAAA,MAElE,SAAS,OAAO,GAA+B;AAAA,QAC9C,KAAK,MAAM,eAAe,EAAE,MAAM,CAAC;AAAA,QACnC,OAAO,QAAQ,EAAE,MAAM,UAAU,GAAG,SAAS;AAAA;AAAA,MAG9C,OAAO;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACT;AAAA;AAAA,IAGD,SAAS,aAAa,CACrB,UACA,aACA,YACA,WACA,iBACA,eACoB;AAAA,MACpB,OAAO;AAAA,QACN,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,SAAS,OAAO,GAAG;AAAA,UAC3B,OAAO,QAAQ,EAAE,MAAM,cAAc,GAAG,aAAa;AAAA;AAAA,QAEtD,QAAQ;AAAA,MACT;AAAA;AAAA,IAGD,OAAO,EAAE,QAAQ;AAAA;AAAA,EAGlB,OAAO;AAAA,SACA,MAAK,CAAC,WAA+C;AAAA,MAC1D,KAAK,MAAM,SAAS,EAAE,UAAU,CAAC;AAAA,MACjC,MAAM,IAAI,YAAY,SAAS;AAAA,MAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,GAAG,aAAa;AAAA;AAAA,EAEzD;AAAA;",
9
- "debugId": "85D227CDC0814FAC64756E2164756E21",
10
- "names": []
11
- }
package/dist/content.js DELETED
@@ -1,27 +0,0 @@
1
- // src/content.ts
2
- function inlinesToPlainText(nodes) {
3
- const parts = [];
4
- for (const node of nodes) {
5
- switch (node.type) {
6
- case "text":
7
- parts.push(node.value);
8
- break;
9
- case "italic":
10
- parts.push(inlinesToPlainText(node.children));
11
- break;
12
- }
13
- }
14
- return parts.join("");
15
- }
16
- function blocksToPlainText(blocks) {
17
- return blocks.map(function blockText(block) {
18
- return inlinesToPlainText(block.children);
19
- }).join(`
20
- `);
21
- }
22
- export {
23
- inlinesToPlainText,
24
- blocksToPlainText
25
- };
26
-
27
- //# debugId=B2FEC3DAAEEB30A564756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/content.ts"],
4
- "sourcesContent": [
5
- "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"
6
- ],
7
- "mappings": ";AAIA,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,mBAAmB,KAAK,QAAQ,CAAC;AAAA,QAC5C;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;",
8
- "debugId": "B2FEC3DAAEEB30A564756E2164756E21",
9
- "names": []
10
- }
package/dist/errors.js DELETED
@@ -1,36 +0,0 @@
1
- // src/errors.ts
2
- import * as errors from "@superbuilders/errors";
3
- var ErrNetwork = errors.new("network");
4
- var ErrJsonParse = errors.new("json parse");
5
- var ErrUnsupportedPci = errors.new("unsupported pci");
6
- var ErrInvalidPublishableKey = errors.new("invalid publishable key");
7
- var ErrBadRequest = errors.new("bad request");
8
- var ErrServerError = errors.new("server error");
9
- var ErrTimeout = errors.new("timeout");
10
- var ErrForbidden = errors.new("forbidden");
11
- var ErrNotFound = errors.new("not found");
12
- var ErrConflict = errors.new("conflict");
13
- var ErrRateLimited = errors.new("rate limited");
14
- var ErrServiceUnavailable = errors.new("service unavailable");
15
- var ErrNotSerializable = errors.new("PrimerState is live in-memory state and must not be serialized or stored");
16
- var ErrInvalidSubmission = errors.new("invalid submission");
17
- var ErrMalformedPublishableKey = errors.new("malformed publishable key");
18
- export {
19
- ErrUnsupportedPci,
20
- ErrTimeout,
21
- ErrServiceUnavailable,
22
- ErrServerError,
23
- ErrRateLimited,
24
- ErrNotSerializable,
25
- ErrNotFound,
26
- ErrNetwork,
27
- ErrMalformedPublishableKey,
28
- ErrJsonParse,
29
- ErrInvalidSubmission,
30
- ErrInvalidPublishableKey,
31
- ErrForbidden,
32
- ErrConflict,
33
- ErrBadRequest
34
- };
35
-
36
- //# debugId=DC88F476D6E45CE664756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/errors.ts"],
4
- "sourcesContent": [
5
- "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"
6
- ],
7
- "mappings": ";AAAA;AAEA,IAAM,aAAoB,WAAI,SAAS;AACvC,IAAM,eAAsB,WAAI,YAAY;AAC5C,IAAM,oBAA2B,WAAI,iBAAiB;AACtD,IAAM,2BAAkC,WAAI,yBAAyB;AACrE,IAAM,gBAAuB,WAAI,aAAa;AAC9C,IAAM,iBAAwB,WAAI,cAAc;AAChD,IAAM,aAAoB,WAAI,SAAS;AACvC,IAAM,eAAsB,WAAI,WAAW;AAC3C,IAAM,cAAqB,WAAI,WAAW;AAC1C,IAAM,cAAqB,WAAI,UAAU;AACzC,IAAM,iBAAwB,WAAI,cAAc;AAChD,IAAM,wBAA+B,WAAI,qBAAqB;AAC9D,IAAM,qBAA4B,WACjC,0EACD;AACA,IAAM,uBAA8B,WAAI,oBAAoB;AAC5D,IAAM,6BAAoC,WAAI,2BAA2B;",
8
- "debugId": "DC88F476D6E45CE664756E2164756E21",
9
- "names": []
10
- }
package/dist/pci.js DELETED
@@ -1,2 +0,0 @@
1
-
2
- //# debugId=A38864BFD31DF2F664756E2164756E21
package/dist/pci.js.map DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [
5
- ],
6
- "mappings": "",
7
- "debugId": "A38864BFD31DF2F664756E2164756E21",
8
- "names": []
9
- }
package/dist/types.js DELETED
@@ -1,2 +0,0 @@
1
-
2
- //# debugId=9FCB033A2878230664756E2164756E21
package/dist/types.js.map DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [
5
- ],
6
- "mappings": "",
7
- "debugId": "9FCB033A2878230664756E2164756E21",
8
- "names": []
9
- }