@khanacademy/perseus-core 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/data-schema.d.ts +57 -12
  2. package/dist/es/index.js +2563 -221
  3. package/dist/es/index.js.map +1 -1
  4. package/dist/index.d.ts +69 -0
  5. package/dist/index.js +2597 -220
  6. package/dist/index.js.map +1 -1
  7. package/dist/parse-perseus-json/error-tracking-parse-context.d.ts +9 -0
  8. package/dist/parse-perseus-json/exhaustive-test-tool/index.d.ts +2 -0
  9. package/dist/parse-perseus-json/general-purpose-parsers/any.d.ts +2 -0
  10. package/dist/parse-perseus-json/general-purpose-parsers/array.d.ts +2 -0
  11. package/dist/parse-perseus-json/general-purpose-parsers/array.typetest.d.ts +1 -0
  12. package/dist/parse-perseus-json/general-purpose-parsers/boolean.d.ts +2 -0
  13. package/dist/parse-perseus-json/general-purpose-parsers/constant.d.ts +4 -0
  14. package/dist/parse-perseus-json/general-purpose-parsers/convert.d.ts +2 -0
  15. package/dist/parse-perseus-json/general-purpose-parsers/defaulted.d.ts +2 -0
  16. package/dist/parse-perseus-json/general-purpose-parsers/discriminated-union.d.ts +21 -0
  17. package/dist/parse-perseus-json/general-purpose-parsers/discriminated-union.typetest.d.ts +1 -0
  18. package/dist/parse-perseus-json/general-purpose-parsers/enumeration.d.ts +2 -0
  19. package/dist/parse-perseus-json/general-purpose-parsers/enumeration.typetest.d.ts +1 -0
  20. package/dist/parse-perseus-json/general-purpose-parsers/index.d.ts +17 -0
  21. package/dist/parse-perseus-json/general-purpose-parsers/is-object.d.ts +1 -0
  22. package/dist/parse-perseus-json/general-purpose-parsers/nullable.d.ts +2 -0
  23. package/dist/parse-perseus-json/general-purpose-parsers/number.d.ts +2 -0
  24. package/dist/parse-perseus-json/general-purpose-parsers/object.d.ts +6 -0
  25. package/dist/parse-perseus-json/general-purpose-parsers/optional.d.ts +2 -0
  26. package/dist/parse-perseus-json/general-purpose-parsers/pair.d.ts +2 -0
  27. package/dist/parse-perseus-json/general-purpose-parsers/pipe-parsers.d.ts +7 -0
  28. package/dist/parse-perseus-json/general-purpose-parsers/pipe-parsers.typetest.d.ts +1 -0
  29. package/dist/parse-perseus-json/general-purpose-parsers/record.d.ts +2 -0
  30. package/dist/parse-perseus-json/general-purpose-parsers/string-to-number.d.ts +2 -0
  31. package/dist/parse-perseus-json/general-purpose-parsers/string.d.ts +2 -0
  32. package/dist/parse-perseus-json/general-purpose-parsers/test-helpers.d.ts +8 -0
  33. package/dist/parse-perseus-json/general-purpose-parsers/trio.d.ts +2 -0
  34. package/dist/parse-perseus-json/general-purpose-parsers/union.d.ts +7 -0
  35. package/dist/parse-perseus-json/general-purpose-parsers/union.typetest.d.ts +1 -0
  36. package/dist/parse-perseus-json/general-purpose-parsers/unknown.d.ts +2 -0
  37. package/dist/parse-perseus-json/index.d.ts +45 -0
  38. package/dist/parse-perseus-json/object-path.d.ts +2 -0
  39. package/dist/parse-perseus-json/parse-failure-detail.d.ts +2 -0
  40. package/dist/parse-perseus-json/parse.d.ts +3 -0
  41. package/dist/parse-perseus-json/parser-types.d.ts +30 -0
  42. package/dist/parse-perseus-json/perseus-parsers/categorizer-widget.d.ts +3 -0
  43. package/dist/parse-perseus-json/perseus-parsers/cs-program-widget.d.ts +3 -0
  44. package/dist/parse-perseus-json/perseus-parsers/definition-widget.d.ts +3 -0
  45. package/dist/parse-perseus-json/perseus-parsers/dropdown-widget.d.ts +3 -0
  46. package/dist/parse-perseus-json/perseus-parsers/explanation-widget.d.ts +3 -0
  47. package/dist/parse-perseus-json/perseus-parsers/expression-widget.d.ts +3 -0
  48. package/dist/parse-perseus-json/perseus-parsers/graded-group-set-widget.d.ts +3 -0
  49. package/dist/parse-perseus-json/perseus-parsers/graded-group-widget.d.ts +16 -0
  50. package/dist/parse-perseus-json/perseus-parsers/grapher-widget.d.ts +3 -0
  51. package/dist/parse-perseus-json/perseus-parsers/group-widget.d.ts +3 -0
  52. package/dist/parse-perseus-json/perseus-parsers/hint.d.ts +3 -0
  53. package/dist/parse-perseus-json/perseus-parsers/iframe-widget.d.ts +3 -0
  54. package/dist/parse-perseus-json/perseus-parsers/image-widget.d.ts +3 -0
  55. package/dist/parse-perseus-json/perseus-parsers/images-map.d.ts +5 -0
  56. package/dist/parse-perseus-json/perseus-parsers/input-number-widget.d.ts +3 -0
  57. package/dist/parse-perseus-json/perseus-parsers/interaction-widget.d.ts +3 -0
  58. package/dist/parse-perseus-json/perseus-parsers/interactive-graph-widget.d.ts +3 -0
  59. package/dist/parse-perseus-json/perseus-parsers/label-image-widget.d.ts +3 -0
  60. package/dist/parse-perseus-json/perseus-parsers/matcher-widget.d.ts +3 -0
  61. package/dist/parse-perseus-json/perseus-parsers/matrix-widget.d.ts +3 -0
  62. package/dist/parse-perseus-json/perseus-parsers/measurer-widget.d.ts +3 -0
  63. package/dist/parse-perseus-json/perseus-parsers/molecule-renderer-widget.d.ts +3 -0
  64. package/dist/parse-perseus-json/perseus-parsers/number-line-widget.d.ts +3 -0
  65. package/dist/parse-perseus-json/perseus-parsers/numeric-input-widget.d.ts +3 -0
  66. package/dist/parse-perseus-json/perseus-parsers/orderer-widget.d.ts +3 -0
  67. package/dist/parse-perseus-json/perseus-parsers/passage-ref-widget.d.ts +3 -0
  68. package/dist/parse-perseus-json/perseus-parsers/passage-widget.d.ts +3 -0
  69. package/dist/parse-perseus-json/perseus-parsers/perseus-article.d.ts +3 -0
  70. package/dist/parse-perseus-json/perseus-parsers/perseus-image-background.d.ts +3 -0
  71. package/dist/parse-perseus-json/perseus-parsers/perseus-item.d.ts +3 -0
  72. package/dist/parse-perseus-json/perseus-parsers/perseus-renderer.d.ts +3 -0
  73. package/dist/parse-perseus-json/perseus-parsers/phet-simulation-widget.d.ts +3 -0
  74. package/dist/parse-perseus-json/perseus-parsers/plotter-widget.d.ts +3 -0
  75. package/dist/parse-perseus-json/perseus-parsers/python-program-widget.d.ts +3 -0
  76. package/dist/parse-perseus-json/perseus-parsers/radio-widget.d.ts +3 -0
  77. package/dist/parse-perseus-json/perseus-parsers/sorter-widget.d.ts +3 -0
  78. package/dist/parse-perseus-json/perseus-parsers/table-widget.d.ts +3 -0
  79. package/dist/parse-perseus-json/perseus-parsers/versioned-widget-options.d.ts +36 -0
  80. package/dist/parse-perseus-json/perseus-parsers/video-widget.d.ts +3 -0
  81. package/dist/parse-perseus-json/perseus-parsers/widget.d.ts +7 -0
  82. package/dist/parse-perseus-json/perseus-parsers/widgets-map.d.ts +3 -0
  83. package/dist/parse-perseus-json/result.d.ts +16 -0
  84. package/dist/utils/is-real-json-parse.d.ts +1 -0
  85. package/dist/utils/widget-id-utils.d.ts +38 -0
  86. package/dist/widgets/categorizer/categorizer-util.d.ts +17 -0
  87. package/dist/widgets/categorizer/index.d.ts +5 -0
  88. package/dist/widgets/cs-program/index.d.ts +5 -0
  89. package/dist/widgets/definition/index.d.ts +5 -0
  90. package/dist/widgets/dropdown/index.d.ts +5 -0
  91. package/dist/widgets/explanation/index.d.ts +5 -0
  92. package/dist/widgets/expression/expression-upgrade.d.ts +10 -0
  93. package/dist/widgets/expression/expression-util.d.ts +19 -0
  94. package/dist/widgets/expression/index.d.ts +4 -0
  95. package/dist/widgets/graded-group/index.d.ts +5 -0
  96. package/dist/widgets/graded-group-set/index.d.ts +5 -0
  97. package/dist/widgets/group/index.d.ts +5 -0
  98. package/dist/widgets/iframe/index.d.ts +5 -0
  99. package/dist/widgets/image/index.d.ts +5 -0
  100. package/dist/widgets/input-number/index.d.ts +5 -0
  101. package/dist/widgets/interaction/index.d.ts +5 -0
  102. package/dist/widgets/interactive-graph/index.d.ts +5 -0
  103. package/dist/widgets/label-image/index.d.ts +5 -0
  104. package/dist/widgets/logic-export.types.d.ts +10 -0
  105. package/dist/widgets/matcher/index.d.ts +5 -0
  106. package/dist/widgets/matrix/index.d.ts +5 -0
  107. package/dist/widgets/measurer/index.d.ts +4 -0
  108. package/dist/widgets/measurer/measurer-upgrade.d.ts +10 -0
  109. package/dist/widgets/number-line/index.d.ts +5 -0
  110. package/dist/widgets/numeric-input/index.d.ts +5 -0
  111. package/dist/widgets/orderer/index.d.ts +5 -0
  112. package/dist/widgets/orderer/orderer-util.d.ts +16 -0
  113. package/dist/widgets/passage/index.d.ts +5 -0
  114. package/dist/widgets/passage-ref/index.d.ts +4 -0
  115. package/dist/widgets/passage-ref/passage-ref-upgrade.d.ts +7 -0
  116. package/dist/widgets/passage-ref-target/index.d.ts +5 -0
  117. package/dist/widgets/phet-simulation/index.d.ts +5 -0
  118. package/dist/widgets/plotter/index.d.ts +5 -0
  119. package/dist/widgets/python-program/index.d.ts +5 -0
  120. package/dist/widgets/radio/index.d.ts +4 -0
  121. package/dist/widgets/radio/radio-upgrade.d.ts +10 -0
  122. package/dist/widgets/sorter/index.d.ts +5 -0
  123. package/dist/widgets/table/index.d.ts +5 -0
  124. package/dist/widgets/video/index.d.ts +5 -0
  125. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ import type { ParseContext, Mismatch, PathSegment } from "./parser-types";
2
+ import type { Failure, Success } from "./result";
3
+ export declare class ErrorTrackingParseContext implements ParseContext {
4
+ private readonly path;
5
+ constructor(path: PathSegment[]);
6
+ failure(expected: string | string[], badValue: unknown): Failure<Mismatch[]>;
7
+ forSubtree(key: PathSegment): ParseContext;
8
+ success<T>(value: T): Success<T>;
9
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env -S node -r @swc-node/register
2
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare const any: Parser<any>;
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare function array<T>(elementParser: Parser<T>): Parser<T[]>;
@@ -0,0 +1,2 @@
1
+ import type { ParseContext, ParseResult } from "../parser-types";
2
+ export declare function boolean(rawValue: unknown, ctx: ParseContext): ParseResult<boolean>;
@@ -0,0 +1,4 @@
1
+ import type { Parser } from "../parser-types";
2
+ type Primitive = string | number | boolean | null | undefined;
3
+ export declare function constant<T extends Primitive>(acceptedValue: T): Parser<T>;
4
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { PartialParser } from "../parser-types";
2
+ export declare function convert<A, B>(f: (value: A) => B): PartialParser<A, B>;
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare function defaulted<T, Default>(parser: Parser<T>, fallback: (missingValue: null | undefined) => Default): Parser<T | Default>;
@@ -0,0 +1,21 @@
1
+ import type { Parser } from "../parser-types";
2
+ type Primitive = number | string | boolean | null | undefined;
3
+ /**
4
+ * discriminatedUnion() should be preferred over union() when parsing a
5
+ * discriminated union type, because discriminatedUnion() produces more
6
+ * understandable failure messages. It takes the discriminant as the source of
7
+ * truth for which variant is to be parsed, and expects the other data to match
8
+ * that variant.
9
+ */
10
+ export declare function discriminatedUnionOn<DK extends string>(discriminantKey: DK): DiscriminatedUnionBuilder<DK, never>;
11
+ declare class DiscriminatedUnionBuilder<DK extends string, Union extends {
12
+ [k in DK]: Primitive;
13
+ }> {
14
+ private discriminantKey;
15
+ parser: Parser<Union>;
16
+ constructor(discriminantKey: DK, parser: Parser<Union>);
17
+ withBranch<Variant extends {
18
+ [k in DK]: Primitive;
19
+ }>(discriminantValue: Primitive, parseNewVariant: Parser<Variant>): DiscriminatedUnionBuilder<DK, Union | Variant>;
20
+ }
21
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare function enumeration<T extends readonly string[]>(...acceptedValues: T): Parser<T[number]>;
@@ -0,0 +1,17 @@
1
+ export * from "./any";
2
+ export * from "./array";
3
+ export * from "./boolean";
4
+ export * from "./constant";
5
+ export * from "./enumeration";
6
+ export * from "./is-object";
7
+ export * from "./nullable";
8
+ export * from "./number";
9
+ export * from "./object";
10
+ export * from "./optional";
11
+ export * from "./pair";
12
+ export * from "./pipe-parsers";
13
+ export * from "./record";
14
+ export * from "./string";
15
+ export * from "./trio";
16
+ export * from "./union";
17
+ export * from "./unknown";
@@ -0,0 +1 @@
1
+ export declare function isObject(x: unknown): x is Record<keyof any, unknown>;
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare function nullable<T>(parseValue: Parser<T>): Parser<T | null>;
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare const number: Parser<number>;
@@ -0,0 +1,6 @@
1
+ import type { ParsedValue, Parser } from "../parser-types";
2
+ type ObjectSchema = Record<keyof any, Parser<any>>;
3
+ export declare function object<S extends ObjectSchema>(schema: S): Parser<{
4
+ [K in keyof S]: ParsedValue<S[K]>;
5
+ }>;
6
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare function optional<T>(parseValue: Parser<T>): Parser<T | undefined>;
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare function pair<A, B>(parseA: Parser<A>, parseB: Parser<B>): Parser<[A, B]>;
@@ -0,0 +1,7 @@
1
+ import type { Parser, PartialParser } from "../parser-types";
2
+ export declare function pipeParsers<T>(p: Parser<T>): ParserPipeline<T>;
3
+ export declare class ParserPipeline<T> {
4
+ readonly parser: Parser<T>;
5
+ constructor(parser: Parser<T>);
6
+ then<U>(nextParser: PartialParser<T, U>): ParserPipeline<U>;
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare function record<K extends string, V>(parseKey: Parser<K>, parseValue: Parser<V>): Parser<Record<K, V>>;
@@ -0,0 +1,2 @@
1
+ import type { PartialParser } from "../parser-types";
2
+ export declare const stringToNumber: PartialParser<string | number, number>;
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare const string: Parser<string>;
@@ -0,0 +1,8 @@
1
+ import { ErrorTrackingParseContext } from "../error-tracking-parse-context";
2
+ import type { Mismatch, ParsedValue, Parser } from "../parser-types";
3
+ import type { Failure } from "../result";
4
+ export declare function ctx(): ErrorTrackingParseContext;
5
+ export declare const anyFailure: Failure<any>;
6
+ export declare const anySuccess: import("../result").Success<any>;
7
+ export declare function parseFailureWith(expected: Partial<Mismatch>): Failure<Mismatch[]>;
8
+ export declare function summonParsedValue<P extends Parser<any>>(): ParsedValue<P>;
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare function trio<A, B, C>(parseA: Parser<A>, parseB: Parser<B>, parseC: Parser<C>): Parser<[A, B, C]>;
@@ -0,0 +1,7 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare function union<T>(parseBranch: Parser<T>): UnionBuilder<T>;
3
+ export declare class UnionBuilder<T> {
4
+ parser: Parser<T>;
5
+ constructor(parser: Parser<T>);
6
+ or<New>(newBranch: Parser<New>): UnionBuilder<T | New>;
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { Parser } from "../parser-types";
2
+ export declare const unknown: Parser<unknown>;
@@ -0,0 +1,45 @@
1
+ import type { Result } from "./result";
2
+ import type { PerseusItem, PerseusArticle } from "../data-schema";
3
+ /**
4
+ * Helper to parse PerseusItem JSON
5
+ * Why not just use JSON.parse? We want:
6
+ * - To make sure types are correct
7
+ * - To give us a central place to validate/transform output if needed
8
+ * @deprecated - use parseAndMigratePerseusItem instead
9
+ * @param {string} json - the stringified PerseusItem JSON
10
+ * @returns {PerseusItem} the parsed PerseusItem object
11
+ */
12
+ export declare function parsePerseusItem(json: string): PerseusItem;
13
+ export type ParseFailureDetail = {
14
+ /**
15
+ * A human-readable error message describing where in the object tree
16
+ * parsing failed.
17
+ */
18
+ message: string;
19
+ /**
20
+ * The raw result of parsing the input JSON, with no migrations applied.
21
+ * Use at your own risk.
22
+ */
23
+ invalidObject: unknown;
24
+ };
25
+ /**
26
+ * Parses a PerseusItem from a JSON string, migrates old formats to the latest
27
+ * schema, and runtime-typechecks the result. Use this to parse assessmentItem
28
+ * data.
29
+ *
30
+ * @returns a {@link Result} of the parsed PerseusItem. If the result is a
31
+ * failure, it will contain an error message describing where in the tree
32
+ * parsing failed.
33
+ * @throws SyntaxError if the argument is not well-formed JSON.
34
+ */
35
+ export declare function parseAndMigratePerseusItem(json: string): Result<PerseusItem, ParseFailureDetail>;
36
+ /**
37
+ * Parses a PerseusArticle from a JSON string, migrates old formats to the
38
+ * latest schema, and runtime-typechecks the result.
39
+ *
40
+ * @returns a {@link Result} of the parsed PerseusArticle. If the result is a
41
+ * failure, it will contain an error message describing where in the tree
42
+ * parsing failed.
43
+ * @throws SyntaxError if the argument is not well-formed JSON.
44
+ */
45
+ export declare function parseAndMigratePerseusArticle(json: string): Result<PerseusArticle, ParseFailureDetail>;
@@ -0,0 +1,2 @@
1
+ import type { PathSegment } from "./parser-types";
2
+ export declare function formatPath(path: PathSegment[]): string;
@@ -0,0 +1,2 @@
1
+ import type { Mismatch } from "./parser-types";
2
+ export declare function message(failure: Mismatch): string;
@@ -0,0 +1,3 @@
1
+ import type { Parser } from "./parser-types";
2
+ import type { Result } from "./result";
3
+ export declare function parse<T>(value: unknown, parser: Parser<T>): Result<T, string>;
@@ -0,0 +1,30 @@
1
+ import type { Success, Failure, Result } from "./result";
2
+ export type Parser<T> = (rawVal: unknown, ctx: ParseContext) => ParseResult<T>;
3
+ export type PartialParser<Input, Output> = (rawVal: Input, ctx: ParseContext) => ParseResult<Output>;
4
+ export type ParseResult<T> = Result<T, Mismatch[]>;
5
+ export type Mismatch = {
6
+ expected: string[];
7
+ badValue: unknown;
8
+ path: PathSegment[];
9
+ };
10
+ export type PathSegment = keyof any;
11
+ export interface ParseContext {
12
+ /**
13
+ * Returns a Success result based on the current state of the parse.
14
+ * @param value The value to return in the Success.
15
+ */
16
+ success<T>(value: T): Success<T>;
17
+ /**
18
+ * Returns a Failure result based on the current state of the parse.
19
+ *
20
+ * @param expected one or more descriptions of the types that were expected.
21
+ * An array of several expected types has "any" semantics - any of the
22
+ * listed types is valid.
23
+ * @param badValue the value that caused the parse to fail.
24
+ */
25
+ failure(expected: string | string[], badValue: unknown): Failure<Mismatch[]>;
26
+ forSubtree(key: PathSegment): ParseContext;
27
+ }
28
+ export type ParsedValue<P extends Parser<any>> = Extract<ReturnType<P>, {
29
+ type: "success";
30
+ }>["value"];
@@ -0,0 +1,3 @@
1
+ import type { CategorizerWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseCategorizerWidget: Parser<CategorizerWidget>;
@@ -0,0 +1,3 @@
1
+ import type { CSProgramWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseCSProgramWidget: Parser<CSProgramWidget>;
@@ -0,0 +1,3 @@
1
+ import type { DefinitionWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseDefinitionWidget: Parser<DefinitionWidget>;
@@ -0,0 +1,3 @@
1
+ import type { DropdownWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseDropdownWidget: Parser<DropdownWidget>;
@@ -0,0 +1,3 @@
1
+ import type { ExplanationWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseExplanationWidget: Parser<ExplanationWidget>;
@@ -0,0 +1,3 @@
1
+ import type { ExpressionWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseExpressionWidget: Parser<ExpressionWidget>;
@@ -0,0 +1,3 @@
1
+ import type { GradedGroupSetWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseGradedGroupSetWidget: Parser<GradedGroupSetWidget>;
@@ -0,0 +1,16 @@
1
+ import type { GradedGroupWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseGradedGroupWidgetOptions: Parser<{
4
+ title: string;
5
+ hasHint: boolean | null | undefined;
6
+ hint: import("../..").PerseusRenderer | null | undefined;
7
+ content: string;
8
+ widgets: import("../..").MakeWidgetMap<import("../..").PerseusWidgetTypes>;
9
+ widgetEnabled: boolean | null | undefined;
10
+ immutableWidgets: boolean | null | undefined;
11
+ images: Record<string, {
12
+ width: number;
13
+ height: number;
14
+ }>;
15
+ }>;
16
+ export declare const parseGradedGroupWidget: Parser<GradedGroupWidget>;
@@ -0,0 +1,3 @@
1
+ import type { GrapherWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseGrapherWidget: Parser<GrapherWidget>;
@@ -0,0 +1,3 @@
1
+ import type { GroupWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseGroupWidget: Parser<GroupWidget>;
@@ -0,0 +1,3 @@
1
+ import type { Hint } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseHint: Parser<Hint>;
@@ -0,0 +1,3 @@
1
+ import type { IFrameWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseIframeWidget: Parser<IFrameWidget>;
@@ -0,0 +1,3 @@
1
+ import type { ImageWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseImageWidget: Parser<ImageWidget>;
@@ -0,0 +1,5 @@
1
+ import type { PerseusImageDetail } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseImages: Parser<{
4
+ [key: string]: PerseusImageDetail;
5
+ }>;
@@ -0,0 +1,3 @@
1
+ import type { InputNumberWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseInputNumberWidget: Parser<InputNumberWidget>;
@@ -0,0 +1,3 @@
1
+ import type { InteractionWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseInteractionWidget: Parser<InteractionWidget>;
@@ -0,0 +1,3 @@
1
+ import type { InteractiveGraphWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseInteractiveGraphWidget: Parser<InteractiveGraphWidget>;
@@ -0,0 +1,3 @@
1
+ import type { LabelImageWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseLabelImageWidget: Parser<LabelImageWidget>;
@@ -0,0 +1,3 @@
1
+ import type { MatcherWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseMatcherWidget: Parser<MatcherWidget>;
@@ -0,0 +1,3 @@
1
+ import type { MatrixWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseMatrixWidget: Parser<MatrixWidget>;
@@ -0,0 +1,3 @@
1
+ import type { MeasurerWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseMeasurerWidget: Parser<MeasurerWidget>;
@@ -0,0 +1,3 @@
1
+ import type { MoleculeRendererWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseMoleculeRendererWidget: Parser<MoleculeRendererWidget>;
@@ -0,0 +1,3 @@
1
+ import type { NumberLineWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseNumberLineWidget: Parser<NumberLineWidget>;
@@ -0,0 +1,3 @@
1
+ import type { NumericInputWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseNumericInputWidget: Parser<NumericInputWidget>;
@@ -0,0 +1,3 @@
1
+ import type { OrdererWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseOrdererWidget: Parser<OrdererWidget>;
@@ -0,0 +1,3 @@
1
+ import type { PassageRefWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parsePassageRefWidget: Parser<PassageRefWidget>;
@@ -0,0 +1,3 @@
1
+ import type { PassageWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parsePassageWidget: Parser<PassageWidget>;
@@ -0,0 +1,3 @@
1
+ import type { PerseusArticle } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parsePerseusArticle: Parser<PerseusArticle>;
@@ -0,0 +1,3 @@
1
+ import type { PerseusImageBackground } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parsePerseusImageBackground: Parser<PerseusImageBackground>;
@@ -0,0 +1,3 @@
1
+ import type { PerseusItem } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parsePerseusItem: Parser<PerseusItem>;
@@ -0,0 +1,3 @@
1
+ import type { PerseusRenderer } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parsePerseusRenderer: Parser<PerseusRenderer>;
@@ -0,0 +1,3 @@
1
+ import type { PhetSimulationWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parsePhetSimulationWidget: Parser<PhetSimulationWidget>;
@@ -0,0 +1,3 @@
1
+ import type { PlotterWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parsePlotterWidget: Parser<PlotterWidget>;
@@ -0,0 +1,3 @@
1
+ import type { PythonProgramWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parsePythonProgramWidget: Parser<PythonProgramWidget>;
@@ -0,0 +1,3 @@
1
+ import type { RadioWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseRadioWidget: Parser<RadioWidget>;
@@ -0,0 +1,3 @@
1
+ import type { SorterWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseSorterWidget: Parser<SorterWidget>;
@@ -0,0 +1,3 @@
1
+ import type { TableWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseTableWidget: Parser<TableWidget>;
@@ -0,0 +1,36 @@
1
+ import type { Version } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ type Versioned = {
4
+ version?: Version;
5
+ };
6
+ /**
7
+ * Creates a parser for a widget options type with multiple major versions. Old
8
+ * versions are migrated to the latest version. The parse fails if the input
9
+ * data does not match any of the versions.
10
+ *
11
+ * @example
12
+ * const parseOptions = versionedWidgetOptions(3, parseOptionsV3)
13
+ * .withMigrationFrom(2, parseOptionsV2, migrateV2ToV3)
14
+ * .withMigrationFrom(1, parseOptionsV1, migrateV1ToV2)
15
+ * .withMigrationFrom(0, parseOptionsV0, migrateV0ToV1)
16
+ * .parser;
17
+ *
18
+ * @param latestMajorVersion the latest major version of the widget options.
19
+ * @param parseLatest a {@link Parser} for the latest version of the widget
20
+ * options.
21
+ * @returns a builder object, to which migrations from earlier versions can be
22
+ * added. Migrations must be added in "reverse chronological" order as in the
23
+ * example above.
24
+ */
25
+ export declare function versionedWidgetOptions<Latest extends Versioned>(latestMajorVersion: number, parseLatest: Parser<Latest>): VersionedWidgetOptionsParserBuilder<Latest, Latest>;
26
+ declare class VersionedWidgetOptionsParserBuilder<Latest extends Versioned, MigratableWidgetOptions extends Versioned> {
27
+ private migrateToLatest;
28
+ private parseOtherVersions;
29
+ parser: Parser<Latest>;
30
+ constructor(majorVersion: number, parseThisVersion: Parser<MigratableWidgetOptions>, migrateToLatest: (m: MigratableWidgetOptions) => Latest, parseOtherVersions: Parser<Latest>);
31
+ /**
32
+ * Add a migration from an old version of the widget options.
33
+ */
34
+ withMigrationFrom<Old extends Versioned>(majorVersion: number, parseOldVersion: Parser<Old>, migrateToNextVersion: (old: Old) => MigratableWidgetOptions): VersionedWidgetOptionsParserBuilder<Latest, Old>;
35
+ }
36
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { VideoWidget } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseVideoWidget: Parser<VideoWidget>;
@@ -0,0 +1,7 @@
1
+ import type { WidgetOptions } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare function parseWidget<Type extends string, Options>(parseType: Parser<Type>, parseOptions: Parser<Options>): Parser<WidgetOptions<Type, Options>>;
4
+ export declare function parseWidgetWithVersion<Version extends {
5
+ major: number;
6
+ minor: number;
7
+ } | undefined, Type extends string, Options>(parseVersion: Parser<Version>, parseType: Parser<Type>, parseOptions: Parser<Options>): Parser<WidgetOptions<Type, Options>>;
@@ -0,0 +1,3 @@
1
+ import type { PerseusWidgetsMap } from "../../data-schema";
2
+ import type { Parser } from "../parser-types";
3
+ export declare const parseWidgetsMap: Parser<PerseusWidgetsMap>;
@@ -0,0 +1,16 @@
1
+ export type Result<S, F> = Success<S> | Failure<F>;
2
+ export type Success<T> = {
3
+ type: "success";
4
+ value: T;
5
+ };
6
+ export type Failure<T> = {
7
+ type: "failure";
8
+ detail: T;
9
+ };
10
+ export declare function success<T>(value: T): Success<T>;
11
+ export declare function failure<T>(detail: T): Failure<T>;
12
+ export declare function isFailure<S, F>(result: Result<S, F>): result is Failure<F>;
13
+ export declare function isSuccess<S, F>(result: Result<S, F>): result is Success<S>;
14
+ export declare function assertFailure<S, F>(result: Result<S, F>): asserts result is Failure<F>;
15
+ export declare function assertSuccess<S, F>(result: Result<S, F>): asserts result is Success<S>;
16
+ export declare function all<S, F>(results: Array<Result<S, F>>, combineFailureDetails?: (a: F, b: F) => F): Result<S[], F>;
@@ -0,0 +1 @@
1
+ export declare function isRealJSONParse(jsonParse: typeof JSON.parse): boolean;
@@ -0,0 +1,38 @@
1
+ import type { PerseusWidgetsMap } from "../data-schema";
2
+ /**
3
+ * Add a widget placeholder using the widget ID.
4
+ * ex. addWidget("radio 1") => "[[☃ radio 1]]"
5
+ *
6
+ * @param {string} id
7
+ * @returns {string}
8
+ */
9
+ export declare function addWidget(id: string): string;
10
+ /**
11
+ * Regex for widget placeholders in a string.
12
+ *
13
+ * First capture group is the widget ID (ex. 'radio 1')
14
+ * Second capture group is the widget type (ex. "radio)
15
+ * exec return will look like: ['[[☃ radio 1]]', 'radio 1', 'radio']
16
+ */
17
+ export declare function getWidgetRegex(): RegExp;
18
+ /**
19
+ * Extract all widget IDs, which includes the widget type and instance number.
20
+ * example output: ['radio 1', 'categorizer 1', 'categorizor 2']
21
+ *
22
+ * Content should contain Perseus widget placeholders,
23
+ * which look like: '[[☃ radio 1]]'.
24
+ *
25
+ * @param {string} content
26
+ * @returns {ReadonlyArray<string>} widgetIds
27
+ */
28
+ export declare function getWidgetIdsFromContent(content: string): ReadonlyArray<string>;
29
+ /**
30
+ * Get a list of widget IDs from content,
31
+ * but only for specific widget types
32
+ *
33
+ * @param {string} type the type of widget (ie "radio")
34
+ * @param {string} content the string to parse
35
+ * @param {PerseusWidgetsMap} widgetMap widget ID to widget map
36
+ * @returns {ReadonlyArray<string>} the widget type (ie "radio")
37
+ */
38
+ export declare function getWidgetIdsFromContentByType(type: string, content: string, widgetMap: PerseusWidgetsMap): ReadonlyArray<string>;