@khanacademy/perseus-core 27.4.0 → 28.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.item-splitting.js","sources":["../../src/parse-perseus-json/result.ts","../../src/parse-perseus-json/error-tracking-parse-context.ts","../../src/parse-perseus-json/object-path.ts","../../src/parse-perseus-json/parse-failure-detail.ts","../../src/parse-perseus-json/parse.ts","../../src/parse-perseus-json/general-purpose-parsers/any.ts","../../src/parse-perseus-json/general-purpose-parsers/array.ts","../../src/parse-perseus-json/general-purpose-parsers/boolean.ts","../../src/parse-perseus-json/general-purpose-parsers/constant.ts","../../src/parse-perseus-json/general-purpose-parsers/defaulted.ts","../../src/parse-perseus-json/general-purpose-parsers/enumeration.ts","../../src/parse-perseus-json/general-purpose-parsers/is-plain-object.ts","../../src/parse-perseus-json/general-purpose-parsers/nullable.ts","../../src/parse-perseus-json/general-purpose-parsers/number.ts","../../src/parse-perseus-json/general-purpose-parsers/object.ts","../../src/parse-perseus-json/general-purpose-parsers/optional.ts","../../src/parse-perseus-json/general-purpose-parsers/pair.ts","../../src/parse-perseus-json/general-purpose-parsers/pipe-parsers.ts","../../src/parse-perseus-json/general-purpose-parsers/record.ts","../../src/parse-perseus-json/general-purpose-parsers/string.ts","../../src/parse-perseus-json/general-purpose-parsers/trio.ts","../../src/parse-perseus-json/general-purpose-parsers/union.ts","../../src/parse-perseus-json/perseus-parsers/perseus-image-detail.ts","../../src/parse-perseus-json/perseus-parsers/images-map.ts","../../src/parse-perseus-json/perseus-parsers/widget.ts","../../src/parse-perseus-json/perseus-parsers/categorizer-widget.ts","../../src/parse-perseus-json/perseus-parsers/cs-program-widget.ts","../../src/parse-perseus-json/perseus-parsers/definition-widget.ts","../../src/parse-perseus-json/perseus-parsers/dropdown-widget.ts","../../src/parse-perseus-json/perseus-parsers/explanation-widget.ts","../../src/keypad.ts","../../src/widgets/expression/derive-extra-keys.ts","../../src/parse-perseus-json/general-purpose-parsers/convert.ts","../../src/parse-perseus-json/perseus-parsers/expression-keys.ts","../../src/parse-perseus-json/perseus-parsers/legacy-button-sets.ts","../../src/parse-perseus-json/perseus-parsers/versioned-widget-options.ts","../../src/parse-perseus-json/perseus-parsers/expression-widget.ts","../../src/parse-perseus-json/perseus-parsers/free-response-widget.ts","../../src/parse-perseus-json/perseus-parsers/graded-group-widget.ts","../../src/parse-perseus-json/perseus-parsers/graded-group-set-widget.ts","../../src/parse-perseus-json/general-purpose-parsers/discriminated-union.ts","../../src/parse-perseus-json/perseus-parsers/grapher-widget.ts","../../src/parse-perseus-json/perseus-parsers/group-widget.ts","../../src/parse-perseus-json/perseus-parsers/iframe-widget.ts","../../src/parse-perseus-json/general-purpose-parsers/string-to-number.ts","../../src/parse-perseus-json/perseus-parsers/perseus-image-background.ts","../../src/parse-perseus-json/perseus-parsers/image-widget.ts","../../src/parse-perseus-json/perseus-parsers/input-number-widget.ts","../../src/parse-perseus-json/perseus-parsers/interaction-widget.ts","../../src/parse-perseus-json/perseus-parsers/interactive-graph-widget.ts","../../src/parse-perseus-json/perseus-parsers/label-image-widget.ts","../../src/parse-perseus-json/perseus-parsers/matcher-widget.ts","../../src/parse-perseus-json/perseus-parsers/matrix-widget.ts","../../src/parse-perseus-json/perseus-parsers/measurer-widget.ts","../../src/parse-perseus-json/perseus-parsers/molecule-renderer-widget.ts","../../src/parse-perseus-json/perseus-parsers/number-line-widget.ts","../../src/parse-perseus-json/perseus-parsers/numeric-input-widget.ts","../../src/parse-perseus-json/perseus-parsers/orderer-widget.ts","../../src/parse-perseus-json/perseus-parsers/phet-simulation-widget.ts","../../src/parse-perseus-json/perseus-parsers/plotter-widget.ts","../../src/parse-perseus-json/perseus-parsers/python-program-widget.ts","../../src/widgets/radio/derive-num-correct.ts","../../src/parse-perseus-json/perseus-parsers/radio-widget.ts","../../src/parse-perseus-json/perseus-parsers/sorter-widget.ts","../../src/parse-perseus-json/perseus-parsers/table-widget.ts","../../src/parse-perseus-json/perseus-parsers/video-widget.ts","../../src/parse-perseus-json/perseus-parsers/widget-id-components.ts","../../src/parse-perseus-json/perseus-parsers/widgets-map.ts","../../src/parse-perseus-json/perseus-parsers/perseus-renderer.ts","../../src/parse-perseus-json/perseus-parsers/perseus-article.ts","../../src/parse-perseus-json/perseus-parsers/hint.ts","../../src/parse-perseus-json/perseus-parsers/perseus-answer-area.ts","../../src/parse-perseus-json/perseus-parsers/perseus-item.ts","../../src/parse-perseus-json/perseus-parsers/grapher-user-input.ts","../../src/parse-perseus-json/index.ts","../../src/utils/deep-clone.ts","../../src/error/errors.ts","../../src/error/perseus-error.ts","../../src/utils/objective_.ts","../../src/utils/registry.ts","../../src/utils/random-util.ts","../../src/widgets/table/index.ts","../../src/widgets/core-widget-registry.ts","../../src/widgets/apply-defaults.ts","../../src/utils/split-perseus-renderer.ts","../../src/utils/split-perseus-item.ts"],"sourcesContent":["import invariant from \"tiny-invariant\";\n\nexport type Result<S, F> = Success<S> | Failure<F>;\n\nexport type Success<T> = {type: \"success\"; value: T};\nexport type Failure<T> = {type: \"failure\"; detail: T};\n\nexport function success<T>(value: T): Success<T> {\n return {type: \"success\", value};\n}\n\nexport function failure<T>(detail: T): Failure<T> {\n return {type: \"failure\", detail};\n}\n\nexport function isFailure<S, F>(result: Result<S, F>): result is Failure<F> {\n return result.type === \"failure\";\n}\n\nexport function isSuccess<S, F>(result: Result<S, F>): result is Success<S> {\n return result.type === \"success\";\n}\n\nexport function assertFailure<S, F>(\n result: Result<S, F>,\n): asserts result is Failure<F> {\n invariant(\n isFailure(result),\n \"expected result to be a Failure, but got a Success\",\n );\n}\n\nexport function assertSuccess<S, F>(\n result: Result<S, F>,\n): asserts result is Success<S> {\n invariant(\n isSuccess(result),\n \"expected result to be a Success, but got a Failure\",\n );\n}\n\n/**\n * @returns a function that transforms the `detail` value of any Failure result\n * passed to it, and leaves Success results unchanged. `mapFailure` is curried\n * for easy composition with Array.map(), mu-lambda's pipe(), etc.\n * @param f the function to apply to Failure `detail`s.\n */\nexport function mapFailure<S, DetailIn, DetailOut>(\n f: (detail: DetailIn) => DetailOut,\n): (result: Result<S, DetailIn>) => Result<S, DetailOut> {\n return (result) => {\n if (isFailure(result)) {\n return failure(f(result.detail));\n }\n return result;\n };\n}\n\n// Result's `all` function is similar to Promise.all: given an array of\n// results, it returns success if all succeeded, and failure if any failed.\nexport function all<S, F>(\n results: Array<Result<S, F>>,\n combineFailureDetails: (a: F, b: F) => F = (a) => a,\n): Result<S[], F> {\n const values: S[] = [];\n const failureDetails: F[] = [];\n for (const result of results) {\n if (result.type === \"success\") {\n values.push(result.value);\n } else {\n failureDetails.push(result.detail);\n }\n }\n\n if (failureDetails.length > 0) {\n return failure(failureDetails.reduce(combineFailureDetails));\n }\n return success(values);\n}\n","import {failure, success} from \"./result\";\n\nimport type {ParseContext, Mismatch, PathSegment} from \"./parser-types\";\nimport type {Failure, Success} from \"./result\";\n\nexport class ErrorTrackingParseContext implements ParseContext {\n constructor(private readonly path: PathSegment[]) {}\n\n failure(\n expected: string | string[],\n badValue: unknown,\n ): Failure<Mismatch[]> {\n return failure([\n {\n expected: wrapInArray(expected),\n badValue,\n path: this.path,\n },\n ]);\n }\n\n forSubtree(key: PathSegment): ParseContext {\n return new ErrorTrackingParseContext([...this.path, key]);\n }\n\n success<T>(value: T): Success<T> {\n return success(value);\n }\n}\n\nfunction wrapInArray(a: string | string[]): string[] {\n return Array.isArray(a) ? a : [a];\n}\n","import type {PathSegment} from \"./parser-types\";\n\nexport function formatPath(path: PathSegment[]): string {\n return \"(root)\" + path.map(formatPathSegment).join(\"\");\n}\n\nfunction formatPathSegment(segment: PathSegment): string {\n if (typeof segment === \"string\") {\n return validIdentifier.test(segment)\n ? \".\" + segment\n : `[${JSON.stringify(segment)}]`;\n }\n return `[${segment.toString()}]`;\n}\n\nconst validIdentifier = /^[A-Za-z$_][A-Za-z$_0-9]*$/;\n","import {formatPath} from \"./object-path\";\n\nimport type {Mismatch} from \"./parser-types\";\n\nexport function message(failure: Mismatch): string {\n const expected = conjoin(failure.expected);\n const path = formatPath(failure.path);\n const badValue = JSON.stringify(failure.badValue);\n return `At ${path} -- expected ${expected}, but got ${badValue}`;\n}\n\nfunction conjoin(items: string[]): string {\n switch (items.length) {\n // FUTURE(benchristel): handle 0 if this is reused elsewhere.\n case 1:\n return items[0];\n case 2:\n return items.join(\" or \");\n default: {\n const allButLast = items.slice(0, items.length - 1);\n const last = items[items.length - 1];\n return allButLast.join(\", \") + \", or \" + last;\n }\n }\n}\n","import {ErrorTrackingParseContext} from \"./error-tracking-parse-context\";\nimport {message} from \"./parse-failure-detail\";\nimport {failure, isFailure} from \"./result\";\n\nimport type {Parser} from \"./parser-types\";\nimport type {Result} from \"./result\";\n\nexport function parse<T>(value: unknown, parser: Parser<T>): Result<T, string> {\n const result = parser(value, new ErrorTrackingParseContext([]));\n if (isFailure(result)) {\n return failure(result.detail.map(message).join(\"; \"));\n }\n return result;\n}\n","import type {Parser} from \"../parser-types\";\n\nexport const any: Parser<any> = (rawValue, ctx) => ctx.success(rawValue);\n","import * as Result from \"../result\";\n\nimport type {ParseContext, Parser} from \"../parser-types\";\n\nexport function array<T>(elementParser: Parser<T>): Parser<T[]> {\n return (rawValue: unknown, ctx: ParseContext) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n const elementResults = rawValue.map((elem, i) =>\n elementParser(elem, ctx.forSubtree(i)),\n );\n return Result.all(elementResults, concat);\n };\n}\n\n/**\n * Like the standard `array` parser, but passes the array index to a parser factory function.\n * This allows element parsers to generate index-based default values.\n */\nexport function arrayWithIndex<T>(\n elementParserFactory: (index: number) => Parser<T>,\n): Parser<T[]> {\n return (rawValue: unknown, ctx: ParseContext) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n\n const elementResults = rawValue.map((elem, index) => {\n const elementParser = elementParserFactory(index);\n return elementParser(elem, ctx.forSubtree(index));\n });\n\n return Result.all(elementResults, concat);\n };\n}\n\nfunction concat<T>(a: T[], b: T[]): T[] {\n return [...a, ...b];\n}\n","import type {ParseContext, ParseResult} from \"../parser-types\";\n\nexport function boolean(\n rawValue: unknown,\n ctx: ParseContext,\n): ParseResult<boolean> {\n if (typeof rawValue === \"boolean\") {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"boolean\", rawValue);\n}\n","import type {Parser} from \"../parser-types\";\n\ntype Primitive = string | number | boolean | null | undefined;\n\nexport function constant<T extends Primitive>(acceptedValue: T): Parser<T> {\n return (rawValue, ctx) => {\n if (!Object.is(rawValue, acceptedValue)) {\n return ctx.failure(String(JSON.stringify(acceptedValue)), rawValue);\n }\n return ctx.success(acceptedValue);\n };\n}\n","import {success} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function defaulted<T>(\n parser: Parser<T>,\n fallback: (missingValue: null | undefined) => NoInfer<T>,\n): Parser<T> {\n return (rawValue, ctx) => {\n if (rawValue == null) {\n return success(fallback(rawValue));\n }\n return parser(rawValue, ctx);\n };\n}\n\n/**\n * Similar to defaulted, but specifically handles empty strings as invalid.\n *\n * @param fallback Function that generates a fallback value for empty/missing strings\n * @returns Parser that validates non-empty strings or uses fallback\n */\nexport function defaultedNonEmptyString(\n fallback: () => string,\n): Parser<string> {\n return (rawValue, ctx) => {\n // Handle missing/null values - use fallback\n if (rawValue == null) {\n return ctx.success(fallback());\n }\n\n // Handle string values\n if (typeof rawValue === \"string\") {\n // If empty or whitespace-only, use fallback\n if (rawValue.trim() === \"\") {\n return ctx.success(fallback());\n }\n // Valid non-empty string, use as-is\n return ctx.success(rawValue);\n }\n\n // Invalid type, expect string\n return ctx.failure(\"string\", rawValue);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function enumeration<T extends readonly string[]>(\n ...acceptedValues: T\n): Parser<T[number]> {\n return (rawValue, ctx) => {\n if (typeof rawValue === \"string\") {\n const index = acceptedValues.indexOf(rawValue);\n if (index > -1) {\n return ctx.success(acceptedValues[index]);\n }\n }\n const expected = acceptedValues.map((v) => JSON.stringify(v));\n return ctx.failure(expected, rawValue);\n };\n}\n","// See the tests for an explanation of why we need this.\nconst objectConstructorString = Object.prototype.constructor.toString();\n\nconst functionToString = Function.prototype.toString;\n\n/**\n * Checks whether a value is a plain JS object (e.g. one constructed with `{}`\n * literal syntax or `Object.create(null)`. Returns true given a plain object\n * from another realm.\n *\n * @param x - the value to check for objectiness\n */\nexport function isPlainObject(x: unknown): x is Record<keyof any, unknown> {\n if (x == null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(x);\n if (prototype == null) {\n return true;\n }\n return (\n typeof prototype.constructor === \"function\" &&\n functionToString.call(prototype.constructor) === objectConstructorString\n );\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function nullable<T>(parseValue: Parser<T>): Parser<T | null> {\n return (rawValue, ctx) => {\n if (rawValue === null) {\n return ctx.success(rawValue);\n }\n return parseValue(rawValue, ctx);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\n/**\n * Returns success if the `rawValue` is a finite real number. Fails for any\n * other value.\n */\nexport const number: Parser<number> = (rawValue, ctx) => {\n if (typeof rawValue === \"number\" && Number.isFinite(rawValue)) {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"number\", rawValue);\n};\n","import {failure, isSuccess} from \"../result\";\n\nimport {isPlainObject} from \"./is-plain-object\";\n\nimport type {OptionalizeProperties} from \"./object-types\";\nimport type {Mismatch, ParsedValue, Parser} from \"../parser-types\";\n\ntype ObjectSchema = Record<keyof any, Parser<any>>;\n\n/**\n * Creates an object parser for the given schema. At runtime,\n * `objectWithAllPropertiesRequired` behaves identically to `object`; the only\n * difference is in the return type of the parser. While `object` types\n * properties as optional if their values can be undefined,\n * `objectWithAllPropertiesRequired` types all properties as required.\n *\n * For example:\n * - `object({foo: optional(string), bar: string})` returns\n * `Parser<{foo?: undefined | string; bar: string}>`.\n * - `objectWithAllPropertiesRequired({foo: optional(string), bar: string})` returns\n * `Parser<{foo: undefined | string; bar: string}>`\n * (note: no question mark on `foo`).\n *\n * @see object\n */\nexport function objectWithAllPropertiesRequired<S extends ObjectSchema>(\n schema: S,\n): Parser<{[K in keyof S]: ParsedValue<S[K]>}> {\n // eslint-disable-next-line no-restricted-syntax\n return object(schema) as any;\n}\n\n/**\n * Given a `schema`, returns an object parser. The parser accepts an object\n * iff each sub-parser in the `schema` accepts the object's corresponding\n * property value.\n *\n * The returned parser filters out properties not present in the schema. If\n * you don't want this behavior, try `looseObject`.\n */\nexport function object<S extends ObjectSchema>(\n schema: S,\n): Parser<OptionalizeProperties<{[K in keyof S]: ParsedValue<S[K]>}>> {\n return objectParserWithInitializer(\n // Initialize the parsed value to an empty object, ensuring that\n // it only contains keys listed in the `schema`.\n () => ({}),\n schema,\n );\n}\n\n/**\n * Given a `schema`, returns an object parser. The parser accepts an object\n * iff each sub-parser in the `schema` accepts the object's corresponding\n * property value.\n *\n * The parser preserves any object properties not present in the schema. If\n * you want unrecognized properties to be filtered out instead, try `object`.\n */\nexport function looseObject<S extends ObjectSchema>(\n schema: S,\n): Parser<OptionalizeProperties<{[K in keyof S]: ParsedValue<S[K]>}>> {\n return objectParserWithInitializer(\n // Initialize the parsed value from the raw value's properties, so\n // properties not listed in the schema are preserved.\n (rawValue) => ({...rawValue}),\n schema,\n );\n}\n\ntype AnyObject = Record<keyof any, unknown>;\n\nfunction objectParserWithInitializer<S extends ObjectSchema>(\n initializeParsedValue: (rawValue: AnyObject) => AnyObject,\n schema: S,\n): Parser<OptionalizeProperties<{[K in keyof S]: ParsedValue<S[K]>}>> {\n return (rawValue, ctx) => {\n if (!isPlainObject(rawValue)) {\n return ctx.failure(\"object\", rawValue);\n }\n\n const parsed: any = initializeParsedValue(rawValue);\n const mismatches: Mismatch[] = [];\n for (const [prop, propParser] of Object.entries(schema)) {\n const result = propParser(rawValue[prop], ctx.forSubtree(prop));\n if (isSuccess(result)) {\n if (result.value !== undefined || prop in rawValue) {\n parsed[prop] = result.value;\n }\n } else {\n mismatches.push(...result.detail);\n }\n }\n\n if (mismatches.length > 0) {\n return failure(mismatches);\n }\n return ctx.success(parsed);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function optional<T>(parseValue: Parser<T>): Parser<T | undefined> {\n return (rawValue, ctx) => {\n if (rawValue === undefined) {\n return ctx.success(rawValue);\n }\n return parseValue(rawValue, ctx);\n };\n}\n","import {isFailure} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function pair<A, B>(\n parseA: Parser<A>,\n parseB: Parser<B>,\n): Parser<[A, B]> {\n return (rawValue, ctx) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n if (rawValue.length !== 2) {\n return ctx.failure(\"array of length 2\", rawValue);\n }\n const [rawA, rawB] = rawValue;\n const resultA = parseA(rawA, ctx.forSubtree(0));\n if (isFailure(resultA)) {\n return resultA;\n }\n const resultB = parseB(rawB, ctx.forSubtree(1));\n if (isFailure(resultB)) {\n return resultB;\n }\n\n return ctx.success([resultA.value, resultB.value]);\n };\n}\n","import {isFailure} from \"../result\";\n\nimport type {\n ParseContext,\n ParsedValue,\n Parser,\n PartialParser,\n} from \"../parser-types\";\n\nexport function pipeParsers<T>(p: Parser<T>): ParserPipeline<T> {\n return new ParserPipeline(p);\n}\n\nexport class ParserPipeline<T> {\n constructor(public readonly parser: Parser<T>) {}\n\n then<U>(nextParser: PartialParser<T, U>): ParserPipeline<U> {\n return new ParserPipeline<U>(composeParsers(this.parser, nextParser));\n }\n}\n\nfunction composeParsers<\n A extends Parser<any>,\n B extends PartialParser<ParsedValue<A>, any>,\n>(parserA: A, parserB: B): Parser<ParsedValue<B>> {\n return (rawValue: unknown, ctx: ParseContext) => {\n const partialResult = parserA(rawValue, ctx);\n if (isFailure(partialResult)) {\n return partialResult;\n }\n\n return parserB(partialResult.value, ctx);\n };\n}\n","import {failure, isFailure, isSuccess} from \"../result\";\n\nimport {isPlainObject} from \"./is-plain-object\";\n\nimport type {Mismatch, Parser} from \"../parser-types\";\n\nexport function record<K extends string, V>(\n parseKey: Parser<K>,\n parseValue: Parser<V>,\n): Parser<Record<K, V>> {\n return (rawValue, ctx) => {\n if (!isPlainObject(rawValue)) {\n return ctx.failure(\"object\", rawValue);\n }\n\n // eslint-disable-next-line no-restricted-syntax\n const result = {} as Record<K, V>;\n const mismatches: Mismatch[] = [];\n for (const [key, value] of Object.entries(rawValue)) {\n const entryCtx = ctx.forSubtree(key);\n const keyResult = parseKey(key, entryCtx);\n if (isFailure(keyResult)) {\n mismatches.push(...keyResult.detail);\n }\n\n const valueResult = parseValue(value, entryCtx);\n if (isFailure(valueResult)) {\n mismatches.push(...valueResult.detail);\n }\n\n if (isSuccess(keyResult) && isSuccess(valueResult)) {\n result[keyResult.value] = valueResult.value;\n }\n }\n\n if (mismatches.length > 0) {\n return failure(mismatches);\n }\n return ctx.success(result);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport const string: Parser<string> = (rawValue, ctx) => {\n if (typeof rawValue === \"string\") {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"string\", rawValue);\n};\n","import {isFailure} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function trio<A, B, C>(\n parseA: Parser<A>,\n parseB: Parser<B>,\n parseC: Parser<C>,\n): Parser<[A, B, C]> {\n return (rawValue, ctx) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n if (rawValue.length !== 3) {\n return ctx.failure(\"array of length 3\", rawValue);\n }\n\n const resultA = parseA(rawValue[0], ctx.forSubtree(0));\n if (isFailure(resultA)) {\n return resultA;\n }\n\n const resultB = parseB(rawValue[1], ctx.forSubtree(1));\n if (isFailure(resultB)) {\n return resultB;\n }\n\n const resultC = parseC(rawValue[2], ctx.forSubtree(2));\n if (isFailure(resultC)) {\n return resultC;\n }\n\n return ctx.success([resultA.value, resultB.value, resultC.value]);\n };\n}\n","import {isSuccess} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function union<T>(parseBranch: Parser<T>): UnionBuilder<T> {\n return new UnionBuilder(parseBranch);\n}\n\nexport class UnionBuilder<T> {\n constructor(public parser: Parser<T>) {}\n\n or<New>(newBranch: Parser<New>) {\n return new UnionBuilder<T | New>(either(this.parser, newBranch));\n }\n}\n\nfunction either<A, B>(parseA: Parser<A>, parseB: Parser<B>): Parser<A | B> {\n return (rawValue, ctx) => {\n const resultA = parseA(rawValue, ctx);\n if (isSuccess(resultA)) {\n return resultA;\n }\n\n return parseB(rawValue, ctx);\n };\n}\n","import {number, object} from \"../general-purpose-parsers\";\n\nexport const parsePerseusImageDetail = object({\n width: number,\n height: number,\n});\n","import {record, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusImageDetail} from \"./perseus-image-detail\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {PerseusImageDetail} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseImages: Parser<{[key: string]: PerseusImageDetail}> =\n defaulted(record(string, parsePerseusImageDetail), () => ({}));\n","import {\n boolean,\n nullable,\n number,\n object,\n objectWithAllPropertiesRequired,\n optional,\n string,\n} from \"../general-purpose-parsers\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {WidgetOptions} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport function parseWidget<Type extends string, Options extends object>(\n parseType: Parser<Type>,\n parseOptions: Parser<Options>,\n): Parser<WidgetOptions<Type, Options>> {\n return objectWithAllPropertiesRequired({\n type: parseType,\n static: optional(boolean),\n graded: optional(boolean),\n alignment: optional(string),\n options: parseOptions,\n key: optional(nullable(number)),\n version: optional(\n object({\n major: number,\n minor: number,\n }),\n ),\n });\n}\n\nexport function parseWidgetWithVersion<\n Version extends {major: number; minor: number} | undefined,\n Type extends string,\n Options extends object,\n>(\n parseVersion: Parser<Version>,\n parseType: Parser<Type>,\n parseOptions: Parser<Options>,\n): Parser<WidgetOptions<Type, Options>> {\n return objectWithAllPropertiesRequired({\n type: parseType,\n static: optional(boolean),\n graded: optional(boolean),\n alignment: optional(string),\n options: parseOptions,\n key: optional(nullable(number)),\n version: parseVersion,\n });\n}\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseCategorizerWidget = parseWidget(\n constant(\"categorizer\"),\n object({\n items: array(string),\n categories: array(string),\n randomizeItems: defaulted(boolean, () => false),\n static: defaulted(boolean, () => false),\n values: defaulted(array(defaulted(number, () => 0)), () => []),\n highlightLint: optional(boolean),\n }),\n);\n","import {\n any,\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseCSProgramWidget = parseWidget(\n constant(\"cs-program\"),\n object({\n programID: string,\n programType: any,\n settings: array(object({name: string, value: string})),\n showEditor: boolean,\n showButtons: boolean,\n height: number,\n }),\n);\n","import {boolean, constant, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseDefinitionWidget = parseWidget(\n constant(\"definition\"),\n object({\n togglePrompt: string,\n definition: string,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n object,\n string,\n optional,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseDropdownWidget = parseWidget(\n constant(\"dropdown\"),\n object({\n placeholder: defaulted(string, () => \"\"),\n ariaLabel: optional(string),\n visibleLabel: optional(string),\n static: defaulted(boolean, () => false),\n choices: array(\n object({\n content: string,\n correct: defaulted(boolean, () => false),\n }),\n ),\n }),\n);\n","import {boolean, constant, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nexport const parseExplanationWidget = parseWidget(\n constant(\"explanation\"),\n object({\n showPrompt: string,\n hidePrompt: string,\n explanation: string,\n // We wrap parseWidgetsMap in a function here to make sure it is not\n // referenced before it is defined. There is an import cycle between\n // this file and widgets-map.ts that could cause it to be undefined.\n widgets: defaulted(\n (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n () => ({}),\n ),\n static: defaulted(boolean, () => false),\n }),\n);\n","export const KeypadKeys = [\n \"PLUS\",\n \"MINUS\",\n \"NEGATIVE\",\n \"TIMES\",\n \"DIVIDE\",\n \"DECIMAL\",\n \"PERIOD\",\n \"PERCENT\",\n \"CDOT\",\n \"EQUAL\",\n \"NEQ\",\n \"GT\",\n \"LT\",\n \"GEQ\",\n \"LEQ\", // mobile native only\n \"FRAC_INCLUSIVE\", // mobile native only\n \"FRAC_EXCLUSIVE\", // mobile native only\n \"FRAC\",\n \"EXP\",\n \"EXP_2\",\n \"EXP_3\",\n \"SQRT\",\n \"CUBE_ROOT\",\n \"RADICAL\",\n \"LEFT_PAREN\",\n \"RIGHT_PAREN\",\n \"LN\",\n \"LOG\",\n \"LOG_N\",\n \"SIN\",\n \"COS\",\n \"TAN\",\n \"PI\",\n \"THETA\",\n \"UP\",\n \"RIGHT\",\n \"DOWN\",\n \"LEFT\",\n \"BACKSPACE\",\n \"DISMISS\",\n \"JUMP_OUT_PARENTHESES\",\n \"JUMP_OUT_EXPONENT\",\n \"JUMP_OUT_BASE\",\n \"JUMP_INTO_NUMERATOR\",\n \"JUMP_OUT_NUMERATOR\",\n \"JUMP_OUT_DENOMINATOR\", // Multi-functional keys.\n \"NUM_0\",\n \"NUM_1\",\n \"NUM_2\",\n \"NUM_3\",\n \"NUM_4\",\n \"NUM_5\",\n \"NUM_6\",\n \"NUM_7\",\n \"NUM_8\",\n \"NUM_9\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n] as const;\n\nexport type KeypadKey = (typeof KeypadKeys)[number];\n\nexport type KeypadType = \"FRACTION\" | \"EXPRESSION\";\n\nexport type KeypadConfiguration = {\n keypadType: KeypadType;\n extraKeys?: KeypadKey[];\n times?: boolean;\n scientific?: boolean;\n};\n\n// Used by KeypadContext to pass around a renderer reference\nexport interface KeypadContextRendererInterface {\n blur(): void;\n}\n","import * as KAS from \"@khanacademy/kas\";\n\nimport {type KeypadKey, KeypadKeys} from \"../../keypad\";\n\nimport type {PerseusExpressionWidgetOptions} from \"../../data-schema\";\n\n/**\n * Scrape the answer forms for any variables or contants (like Pi)\n * that need to be included as keys on the keypad.\n */\nfunction deriveExtraKeys(\n widgetOptions: PerseusExpressionWidgetOptions,\n): KeypadKey[] {\n if (widgetOptions.extraKeys) {\n return widgetOptions.extraKeys;\n }\n\n // If there are no extra symbols available, we include Pi anyway, so\n // that the \"extra symbols\" button doesn't appear empty.\n const defaultKeys: KeypadKey[] = [\"PI\"];\n\n if (widgetOptions.answerForms == null) {\n return defaultKeys;\n }\n\n // Extract any and all variables and constants from the answer forms.\n const uniqueExtraVariables: Partial<Record<KeypadKey, boolean>> = {};\n const uniqueExtraConstants: Partial<Record<KeypadKey, boolean>> = {};\n for (const answerForm of widgetOptions.answerForms) {\n const maybeExpr = KAS.parse(answerForm.value, widgetOptions);\n if (maybeExpr.parsed) {\n const expr = maybeExpr.expr;\n\n // The keypad expects Greek letters to be capitalized (e.g., it\n // requires `PI` instead of `pi`). Right now, it only supports Pi\n // and Theta, so we special-case.\n const isGreek = (symbol: any) =>\n symbol === \"pi\" || symbol === \"theta\";\n const toKey = (symbol: any) =>\n isGreek(symbol) ? symbol.toUpperCase() : symbol;\n const isKey = (key: string): key is KeypadKey =>\n // eslint-disable-next-line no-restricted-syntax\n KeypadKeys.includes(key as KeypadKey);\n\n for (const variable of expr.getVars()) {\n const maybeKey = toKey(variable);\n if (isKey(maybeKey)) {\n uniqueExtraVariables[maybeKey] = true;\n }\n }\n for (const constant of expr.getConsts()) {\n const maybeKey = toKey(constant);\n if (isKey(maybeKey)) {\n uniqueExtraConstants[maybeKey] = true;\n }\n }\n }\n }\n\n // eslint-disable-next-line no-restricted-syntax\n const extraVariables = Object.keys(\n uniqueExtraVariables,\n ).sort() as ReadonlyArray<KeypadKey>;\n\n // eslint-disable-next-line no-restricted-syntax\n const extraConstants = Object.keys(\n uniqueExtraConstants,\n ).sort() as ReadonlyArray<KeypadKey>;\n\n const extraKeys = [...extraVariables, ...extraConstants];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!extraKeys.length) {\n return defaultKeys;\n }\n\n return extraKeys;\n}\n\nexport default deriveExtraKeys;\n","import type {PartialParser} from \"../parser-types\";\n\n// Given a function, creates a PartialParser that converts one type to another\n// using that function. The returned parser never fails.\nexport function convert<A, B>(f: (value: A) => B): PartialParser<A, B> {\n return (rawValue, ctx) => ctx.success(f(rawValue));\n}\n","import {enumeration} from \"../general-purpose-parsers\";\n\nexport const keypadKeys = enumeration(\n \"PLUS\",\n \"MINUS\",\n \"NEGATIVE\",\n \"TIMES\",\n \"DIVIDE\",\n \"DECIMAL\",\n \"PERIOD\",\n \"PERCENT\",\n \"CDOT\",\n \"EQUAL\",\n \"NEQ\",\n \"GT\",\n \"LT\",\n \"GEQ\",\n \"LEQ\", // mobile native only\n \"FRAC_INCLUSIVE\", // mobile native only\n \"FRAC_EXCLUSIVE\", // mobile native only\n \"FRAC\",\n \"EXP\",\n \"EXP_2\",\n \"EXP_3\",\n \"SQRT\",\n \"CUBE_ROOT\",\n \"RADICAL\",\n \"LEFT_PAREN\",\n \"RIGHT_PAREN\",\n \"LN\",\n \"LOG\",\n \"LOG_N\",\n \"SIN\",\n \"COS\",\n \"TAN\",\n \"PI\",\n \"THETA\",\n \"UP\",\n \"RIGHT\",\n \"DOWN\",\n \"LEFT\",\n \"BACKSPACE\",\n \"DISMISS\",\n \"JUMP_OUT_PARENTHESES\",\n \"JUMP_OUT_EXPONENT\",\n \"JUMP_OUT_BASE\",\n \"JUMP_INTO_NUMERATOR\",\n \"JUMP_OUT_NUMERATOR\",\n \"JUMP_OUT_DENOMINATOR\", // Multi-functional keys.\n \"NUM_0\",\n \"NUM_1\",\n \"NUM_2\",\n \"NUM_3\",\n \"NUM_4\",\n \"NUM_5\",\n \"NUM_6\",\n \"NUM_7\",\n \"NUM_8\",\n \"NUM_9\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n);\n","import {array, enumeration} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nconst parseLegacyButtonSet = enumeration(\n \"basic\",\n \"basic+div\",\n \"trig\",\n \"prealgebra\",\n \"logarithms\",\n \"basic relations\",\n \"advanced relations\",\n \"scientific\",\n);\n\nexport const parseLegacyButtonSets = defaulted(\n array(parseLegacyButtonSet),\n // NOTE(benchristel): I copied the default buttonSets from\n // expression.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n () => [\n \"basic\" as const,\n \"trig\" as const,\n \"prealgebra\" as const,\n \"logarithms\" as const,\n ],\n);\n","import {\n isPlainObject,\n number,\n object,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {isFailure} from \"../result\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {Version} from \"../../data-schema\";\nimport type {ParseContext, Parser} from \"../parser-types\";\n\ntype Versioned = {\n version?: Version;\n};\n\n/**\n * Creates a parser for a widget options type with multiple major versions. Old\n * versions are migrated to the latest version. The parse fails if the input\n * data does not match any of the versions.\n *\n * @example\n * const parseOptions = versionedWidgetOptions(3, parseOptionsV3)\n * .withMigrationFrom(2, parseOptionsV2, migrateV2ToV3)\n * .withMigrationFrom(1, parseOptionsV1, migrateV1ToV2)\n * .withMigrationFrom(0, parseOptionsV0, migrateV0ToV1)\n * .parser;\n *\n * @param latestMajorVersion the latest major version of the widget options.\n * @param parseLatest a {@link Parser} for the latest version of the widget\n * options.\n * @returns a builder object, to which migrations from earlier versions can be\n * added. Migrations must be added in \"reverse chronological\" order as in the\n * example above.\n */\nexport function versionedWidgetOptions<Latest extends Versioned>(\n latestMajorVersion: number,\n parseLatest: Parser<Latest>,\n): VersionedWidgetOptionsParserBuilder<Latest, Latest> {\n return new VersionedWidgetOptionsParserBuilder(\n latestMajorVersion,\n parseLatest,\n (latest) => latest,\n (raw, ctx) =>\n ctx.failure(\"widget options with a known version number\", raw),\n );\n}\n\nclass VersionedWidgetOptionsParserBuilder<\n // The latest version of the widget options\n Latest extends Versioned,\n // A version of the widget options which we want to migrate to Latest.\n MigratableWidgetOptions extends Versioned,\n> {\n public parser: Parser<Latest>;\n\n constructor(\n majorVersion: number,\n parseThisVersion: Parser<MigratableWidgetOptions>,\n private migrateToLatest: (m: MigratableWidgetOptions) => Latest,\n private parseOtherVersions: Parser<Latest>,\n ) {\n const parseThisVersionAndMigrateToLatest = pipeParsers(\n parseThisVersion,\n ).then(convert(this.migrateToLatest)).parser;\n\n this.parser = (raw: unknown, ctx: ParseContext) => {\n if (!isPlainObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n\n const versionParseResult = parseVersionedObject(raw, ctx);\n if (isFailure(versionParseResult)) {\n return versionParseResult;\n }\n\n if (versionParseResult.value.version.major !== majorVersion) {\n return this.parseOtherVersions(raw, ctx);\n }\n\n return parseThisVersionAndMigrateToLatest(raw, ctx);\n };\n }\n\n /**\n * Add a migration from an old version of the widget options.\n */\n withMigrationFrom<Old extends Versioned>(\n majorVersion: number,\n parseOldVersion: Parser<Old>,\n migrateToNextVersion: (old: Old) => MigratableWidgetOptions,\n ): VersionedWidgetOptionsParserBuilder<Latest, Old> {\n const parseOtherVersions = this.parser;\n\n const migrateToLatest = (old: Old) =>\n this.migrateToLatest(migrateToNextVersion(old));\n\n return new VersionedWidgetOptionsParserBuilder(\n majorVersion,\n parseOldVersion,\n migrateToLatest,\n parseOtherVersions,\n );\n }\n}\n\nconst parseVersionedObject = object({\n version: defaulted(object({major: number, minor: number}), () => ({\n major: 0,\n minor: 0,\n })),\n});\n","// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport deriveExtraKeys from \"../../widgets/expression/derive-extra-keys\";\nimport {\n array,\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {keypadKeys} from \"./expression-keys\";\nimport {parseLegacyButtonSets} from \"./legacy-button-sets\";\nimport {versionedWidgetOptions} from \"./versioned-widget-options\";\nimport {parseWidgetWithVersion} from \"./widget\";\n\nimport type {ParsedValue} from \"../parser-types\";\n\nconst stringOrNumberOrNullOrUndefined = union(string)\n .or(number)\n .or(constant(null))\n .or(constant(undefined)).parser;\n\nfunction numberOrNullToString(v: string | number | null | undefined) {\n return typeof v === \"number\" || v === null ? String(v) : v;\n}\n\nconst parsePossiblyInvalidAnswerForm = object({\n // `value` is the possibly invalid part of this. It should always be a\n // string, but some answer forms don't have it. The Expression widget\n // ignores invalid values, so we can safely filter them out during parsing.\n value: optional(string),\n form: defaulted(boolean, () => false),\n simplify: defaulted(boolean, () => false),\n considered: enumeration(\"correct\", \"wrong\", \"ungraded\"),\n key: pipeParsers(stringOrNumberOrNullOrUndefined).then(\n convert(numberOrNullToString),\n ).parser,\n});\n\nfunction removeInvalidAnswerForms(\n possiblyInvalid: Array<ParsedValue<typeof parsePossiblyInvalidAnswerForm>>,\n) {\n return possiblyInvalid.flatMap((answerForm) => {\n const {value} = answerForm;\n if (value != null) {\n return [{...answerForm, value}];\n }\n return [];\n });\n}\n\nconst parseAnswerForms = pipeParsers(\n defaulted(array(parsePossiblyInvalidAnswerForm), () => []),\n).then(convert(removeInvalidAnswerForms)).parser;\n\nconst version2 = object({major: constant(2), minor: number});\nconst parseExpressionWidgetV2 = parseWidgetWithVersion(\n version2,\n constant(\"expression\"),\n object({\n answerForms: parseAnswerForms,\n functions: array(string),\n times: boolean,\n visibleLabel: optional(string),\n ariaLabel: optional(string),\n buttonSets: parseLegacyButtonSets,\n buttonsVisible: optional(enumeration(\"always\", \"never\", \"focused\")),\n extraKeys: optional(array(keypadKeys)),\n }),\n);\n\nconst version1 = object({major: constant(1), minor: number});\nconst parseExpressionWidgetV1 = parseWidgetWithVersion(\n version1,\n constant(\"expression\"),\n object({\n answerForms: parseAnswerForms,\n functions: array(string),\n times: boolean,\n visibleLabel: optional(string),\n ariaLabel: optional(string),\n buttonSets: parseLegacyButtonSets,\n buttonsVisible: optional(enumeration(\"always\", \"never\", \"focused\")),\n }),\n);\n\nfunction migrateV1ToV2(\n widget: ParsedValue<typeof parseExpressionWidgetV1>,\n): ParsedValue<typeof parseExpressionWidgetV2> {\n const {options} = widget;\n return {\n ...widget,\n version: {major: 2, minor: 0},\n options: {\n times: options.times,\n buttonSets: options.buttonSets,\n functions: options.functions,\n buttonsVisible: options.buttonsVisible,\n visibleLabel: options.visibleLabel,\n ariaLabel: options.ariaLabel,\n answerForms: options.answerForms,\n extraKeys: deriveExtraKeys(options) ?? [],\n },\n };\n}\n\nconst version0 = optional(object({major: constant(0), minor: number}));\nconst parseExpressionWidgetV0 = parseWidgetWithVersion(\n version0,\n constant(\"expression\"),\n object({\n functions: array(string),\n times: boolean,\n visibleLabel: optional(string),\n ariaLabel: optional(string),\n form: boolean,\n simplify: boolean,\n value: string,\n buttonSets: parseLegacyButtonSets,\n buttonsVisible: optional(enumeration(\"always\", \"never\", \"focused\")),\n }),\n);\n\nfunction migrateV0ToV1(\n widget: ParsedValue<typeof parseExpressionWidgetV0>,\n): ParsedValue<typeof parseExpressionWidgetV1> {\n const {options} = widget;\n return {\n ...widget,\n version: {major: 1, minor: 0},\n options: {\n times: options.times,\n // eslint-disable-next-line no-restricted-syntax\n buttonSets: options.buttonSets as any,\n functions: options.functions,\n buttonsVisible: options.buttonsVisible,\n visibleLabel: options.visibleLabel,\n ariaLabel: options.ariaLabel,\n\n answerForms: [\n {\n considered: \"correct\",\n form: options.form,\n simplify: options.simplify,\n value: options.value,\n },\n ],\n },\n };\n}\n\nexport const parseExpressionWidget = versionedWidgetOptions(\n 2,\n parseExpressionWidgetV2,\n)\n .withMigrationFrom(1, parseExpressionWidgetV1, migrateV1ToV2)\n .withMigrationFrom(0, parseExpressionWidgetV0, migrateV0ToV1).parser;\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {FreeResponseWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseFreeResponseWidget: Parser<FreeResponseWidget> = parseWidget(\n constant(\"free-response\"),\n object({\n allowUnlimitedCharacters: boolean,\n characterLimit: number,\n placeholder: string,\n question: string,\n scoringCriteria: array(\n object({\n text: string,\n }),\n ),\n }),\n);\n","import {\n boolean,\n constant,\n nullable,\n number,\n object,\n optional,\n pipeParsers,\n record,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nconst falseToNull = pipeParsers(constant(false)).then(\n convert(() => null),\n).parser;\nexport const parseGradedGroupWidgetOptions = object({\n title: defaulted(string, () => \"\"),\n hasHint: optional(nullable(boolean)),\n // This module has an import cycle with parsePerseusRenderer.\n // The anonymous function below ensures that we don't try to access\n // parsePerseusRenderer before it's defined.\n hint: union(falseToNull)\n .or(constant(null))\n .or(constant(undefined))\n .or((rawVal, ctx) => parsePerseusRenderer(rawVal, ctx)).parser,\n content: string,\n // This module has an import cycle with parseWidgetsMap.\n // The anonymous function below ensures that we don't try to access\n // parseWidgetsMap before it's defined.\n widgets: (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n widgetEnabled: optional(nullable(boolean)),\n immutableWidgets: optional(nullable(boolean)),\n images: record(\n string,\n object({\n width: number,\n height: number,\n }),\n ),\n});\n\nexport const parseGradedGroupWidget = parseWidget(\n constant(\"graded-group\"),\n parseGradedGroupWidgetOptions,\n);\n","import {array, constant, object} from \"../general-purpose-parsers\";\n\nimport {parseGradedGroupWidgetOptions} from \"./graded-group-widget\";\nimport {parseWidget} from \"./widget\";\n\nexport const parseGradedGroupSetWidget = parseWidget(\n constant(\"graded-group-set\"),\n object({gradedGroups: array(parseGradedGroupWidgetOptions)}),\n);\n","import {isPlainObject} from \"./is-plain-object\";\n\nimport type {ParseContext, Parser} from \"../parser-types\";\n\ntype Primitive = number | string | boolean | null | undefined;\n\n/**\n * discriminatedUnion() should be preferred over union() when parsing a\n * discriminated union type, because discriminatedUnion() produces more\n * understandable failure messages. It takes the discriminant as the source of\n * truth for which variant is to be parsed, and expects the other data to match\n * that variant.\n */\nexport function discriminatedUnionOn<DK extends string>(discriminantKey: DK) {\n const noMoreBranches: Parser<never> = (raw: unknown, ctx: ParseContext) => {\n if (!isPlainObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n return ctx\n .forSubtree(discriminantKey)\n .failure(\"a valid value\", raw[discriminantKey]);\n };\n\n return new DiscriminatedUnionBuilder(discriminantKey, noMoreBranches);\n}\n\nclass DiscriminatedUnionBuilder<\n DK extends string,\n Union extends {[k in DK]: Primitive},\n> {\n constructor(\n private discriminantKey: DK,\n public parser: Parser<Union>,\n ) {}\n\n withBranch<Variant extends {[k in DK]: Primitive}>(\n discriminantValue: Primitive,\n parseNewVariant: Parser<Variant>,\n ): DiscriminatedUnionBuilder<DK, Union | Variant> {\n const parseNewBranch = discriminatedUnionBranch(\n this.discriminantKey,\n discriminantValue,\n parseNewVariant,\n this.parser,\n );\n\n return new DiscriminatedUnionBuilder(\n this.discriminantKey,\n parseNewBranch,\n );\n }\n}\n\nfunction discriminatedUnionBranch<\n DK extends string,\n DV extends Primitive,\n Variant extends {[k in DK]: DV},\n Rest extends {[k in DK]: DV},\n>(\n discriminantKey: DK,\n discriminantValue: DV,\n parseVariant: Parser<Variant>,\n parseOtherBranches: Parser<Rest>,\n): Parser<Variant | Rest> {\n return (raw: unknown, ctx: ParseContext) => {\n if (!isPlainObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n\n if (raw[discriminantKey] === discriminantValue) {\n return parseVariant(raw, ctx);\n }\n\n return parseOtherBranches(raw, ctx);\n };\n}\n","import {\n array,\n boolean,\n constant,\n enumeration,\n nullable,\n number,\n object,\n optional,\n pair,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {Parser} from \"../parser-types\";\n\nconst pairOfNumbers = pair(number, number);\n\nconst pairOfPoints = pair(pairOfNumbers, pairOfNumbers);\n\nconst emptyArray: Parser<[]> = (rawVal, ctx) => {\n if (Array.isArray(rawVal) && rawVal.length === 0) {\n return ctx.success([]);\n }\n return ctx.failure(\"empty array\", rawVal);\n};\n\nconst parseCoords = union(nullable(pairOfPoints)).or(\n // We convert [] to null to support some legacy content items.\n // The widget component treats [] and null the same as of 2025-05.\n pipeParsers(emptyArray).then(convert(() => null)).parser,\n).parser;\n\nconst parseCorrect = defaulted(\n discriminatedUnionOn(\"type\")\n .withBranch(\n \"absolute_value\",\n object({\n type: constant(\"absolute_value\"),\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"exponential\",\n object({\n type: constant(\"exponential\"),\n asymptote: pairOfPoints,\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"linear\",\n object({\n type: constant(\"linear\"),\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"logarithm\",\n object({\n type: constant(\"logarithm\"),\n asymptote: pairOfPoints,\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"quadratic\",\n object({\n type: constant(\"quadratic\"),\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"sinusoid\",\n object({\n type: constant(\"sinusoid\"),\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"tangent\",\n object({\n type: constant(\"tangent\"),\n coords: parseCoords,\n }),\n ).parser,\n // Default value. This is the same as the default in DEFAULT_GRAPHER_PROPS,\n // in grapher/util.tsx. See parse-perseus-json/README.md for an explanation\n // of why we want to duplicate defaults in the parser.\n () => ({\n type: \"linear\" as const,\n coords: null,\n }),\n);\n\nexport const parseGrapherWidget = parseWidget(\n constant(\"grapher\"),\n object({\n availableTypes: array(\n enumeration(\n \"absolute_value\",\n \"exponential\",\n \"linear\",\n \"logarithm\",\n \"quadratic\",\n \"sinusoid\",\n \"tangent\",\n ),\n ),\n correct: parseCorrect,\n graph: object({\n backgroundImage: object({\n bottom: optional(number),\n height: optional(number),\n left: optional(number),\n scale: optional(number),\n url: optional(nullable(string)),\n width: optional(number),\n }),\n box: optional(pairOfNumbers),\n editableSettings: optional(\n array(enumeration(\"graph\", \"snap\", \"image\", \"measure\")),\n ),\n gridStep: optional(pairOfNumbers),\n labels: pair(string, string),\n markings: enumeration(\"graph\", \"none\", \"grid\", \"axes\"),\n range: pair(pairOfNumbers, pairOfNumbers),\n rulerLabel: constant(\"\"),\n rulerTicks: number,\n showProtractor: optional(boolean),\n showRuler: optional(boolean),\n showTooltips: optional(boolean),\n snapStep: optional(pairOfNumbers),\n step: pairOfNumbers,\n valid: optional(union(boolean).or(string).parser),\n }),\n }),\n);\n","import {constant} from \"../general-purpose-parsers\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\n\nexport const parseGroupWidget = parseWidget(\n constant(\"group\"),\n // This module has an import cycle with parsePerseusRenderer.\n // The anonymous function below ensures that we don't try to access\n // parsePerseusRenderer before it's defined.\n (rawVal, ctx) => parsePerseusRenderer(rawVal, ctx),\n);\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseIframeWidget = parseWidget(\n constant(\"iframe\"),\n object({\n url: string,\n settings: optional(array(object({name: string, value: string}))),\n width: union(number).or(string).parser,\n height: union(number).or(string).parser,\n allowFullScreen: defaulted(boolean, () => false),\n allowTopNavigation: optional(boolean),\n static: defaulted(boolean, () => false),\n }),\n);\n","import type {PartialParser} from \"../parser-types\";\n\nexport const stringToNumber: PartialParser<string | number, number> = (\n rawValue,\n ctx,\n) => {\n if (typeof rawValue === \"number\") {\n return ctx.success(rawValue);\n }\n\n const parsedNumber = +rawValue;\n if (rawValue === \"\" || isNaN(parsedNumber)) {\n return ctx.failure(\"a number or numeric string\", rawValue);\n }\n\n return ctx.success(parsedNumber);\n};\n","import {\n nullable,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {stringToNumber} from \"../general-purpose-parsers/string-to-number\";\n\nfunction emptyToZero(x: string | number): string | number {\n return x === \"\" ? 0 : x;\n}\n\nconst imageDimensionToNumber = pipeParsers(union(number).or(string).parser)\n // In this specific case, empty string is equivalent to zero. An empty\n // string parses to either NaN (using parseInt) or 0 (using unary +) and\n // CSS will treat NaN as invalid and default to 0 instead.\n .then(convert(emptyToZero))\n .then(stringToNumber).parser;\n\nconst dimensionOrUndefined = defaulted(\n optional(imageDimensionToNumber),\n () => undefined,\n);\n\nexport const parsePerseusImageBackground = object({\n url: optional(nullable(string)),\n width: dimensionOrUndefined,\n height: dimensionOrUndefined,\n top: dimensionOrUndefined,\n left: dimensionOrUndefined,\n bottom: dimensionOrUndefined,\n scale: dimensionOrUndefined,\n});\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n pair,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nconst pairOfNumbers = pair(number, number);\n\nexport const parseImageWidget = parseWidget(\n constant(\"image\"),\n object({\n title: optional(string),\n caption: optional(string),\n alt: optional(string),\n longDescription: optional(string),\n decorative: optional(boolean),\n backgroundImage: parsePerseusImageBackground,\n scale: optional(number),\n static: optional(boolean),\n labels: optional(\n array(\n object({\n content: string,\n alignment: string,\n coordinates: array(number),\n }),\n ),\n ),\n range: optional(pair(pairOfNumbers, pairOfNumbers)),\n box: optional(pairOfNumbers),\n }),\n);\n","import {\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {Parser} from \"../parser-types\";\n\nconst booleanToString: Parser<string> = (rawValue, ctx) => {\n if (typeof rawValue === \"boolean\") {\n return ctx.success(String(rawValue));\n }\n return ctx.failure(\"boolean\", rawValue);\n};\n\nexport const parseInputNumberWidget = parseWidget(\n constant(\"input-number\"),\n object({\n answerType: optional(\n enumeration(\n \"number\",\n \"decimal\",\n \"integer\",\n \"rational\",\n \"improper\",\n \"mixed\",\n \"percent\",\n \"pi\",\n ),\n ),\n inexact: optional(boolean),\n maxError: optional(union(number).or(string).parser),\n rightAlign: optional(boolean),\n simplify: enumeration(\"required\", \"optional\", \"enforced\"),\n size: enumeration(\"normal\", \"small\"),\n // TODO(benchristel): there are some content items where value is a\n // boolean, even though that makes no sense. We should figure out if\n // those content items are actually published anywhere, and consider\n // updating them.\n value: defaulted(\n union(number).or(string).or(booleanToString).parser,\n () => 0,\n ),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n pair,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nconst pairOfNumbers = pair(number, number);\nconst stringOrEmpty = defaulted(string, () => \"\");\n\nconst parseKey = pipeParsers(optional(string)).then(convert(String)).parser;\n\nconst parseFunctionElement = object({\n type: constant(\"function\"),\n key: parseKey,\n options: object({\n value: string,\n funcName: string,\n rangeMin: string,\n rangeMax: string,\n color: string,\n strokeDasharray: string,\n strokeWidth: number,\n }),\n});\n\nconst parseLabelElement = object({\n type: constant(\"label\"),\n key: parseKey,\n options: object({\n label: string,\n color: string,\n coordX: string,\n coordY: string,\n }),\n});\n\nconst parseLineElement = object({\n type: constant(\"line\"),\n key: parseKey,\n options: object({\n color: string,\n startX: string,\n startY: string,\n endX: string,\n endY: string,\n strokeDasharray: string,\n strokeWidth: number,\n arrows: string,\n }),\n});\n\nconst parseMovableLineElement = object({\n type: constant(\"movable-line\"),\n key: parseKey,\n options: object({\n startX: string,\n startY: string,\n startSubscript: number,\n endX: string,\n endY: string,\n endSubscript: number,\n constraint: string,\n snap: number,\n constraintFn: string,\n constraintXMin: string,\n constraintXMax: string,\n constraintYMin: string,\n constraintYMax: string,\n }),\n});\n\nconst parseMovablePointElement = object({\n type: constant(\"movable-point\"),\n key: parseKey,\n options: object({\n startX: string,\n startY: string,\n varSubscript: number,\n constraint: string,\n snap: number,\n constraintFn: string,\n constraintXMin: stringOrEmpty,\n constraintXMax: stringOrEmpty,\n constraintYMin: stringOrEmpty,\n constraintYMax: stringOrEmpty,\n }),\n});\n\nconst parseParametricElement = object({\n type: constant(\"parametric\"),\n key: parseKey,\n options: object({\n x: string,\n y: string,\n rangeMin: string,\n rangeMax: string,\n color: string,\n strokeDasharray: string,\n strokeWidth: number,\n }),\n});\n\nconst parsePointElement = object({\n type: constant(\"point\"),\n key: parseKey,\n options: object({\n color: string,\n coordX: string,\n coordY: string,\n }),\n});\n\nconst parseRectangleElement = object({\n type: constant(\"rectangle\"),\n key: parseKey,\n options: object({\n color: string,\n coordX: string,\n coordY: string,\n width: string,\n height: string,\n }),\n});\n\nexport const parseInteractionWidget = parseWidget(\n constant(\"interaction\"),\n object({\n static: defaulted(boolean, () => false),\n graph: object({\n editableSettings: optional(array(enumeration(\"canvas\", \"graph\"))),\n box: pairOfNumbers,\n labels: array(string),\n range: pair(pairOfNumbers, pairOfNumbers),\n gridStep: pairOfNumbers,\n markings: enumeration(\"graph\", \"grid\", \"none\", \"axes\"),\n snapStep: optional(pairOfNumbers),\n valid: optional(union(boolean).or(string).parser),\n backgroundImage: optional(parsePerseusImageBackground),\n showProtractor: optional(boolean),\n showRuler: optional(boolean),\n rulerLabel: optional(string),\n rulerTicks: optional(number),\n tickStep: pairOfNumbers,\n }),\n elements: array(\n discriminatedUnionOn(\"type\")\n .withBranch(\"function\", parseFunctionElement)\n .withBranch(\"label\", parseLabelElement)\n .withBranch(\"line\", parseLineElement)\n .withBranch(\"movable-line\", parseMovableLineElement)\n .withBranch(\"movable-point\", parseMovablePointElement)\n .withBranch(\"parametric\", parseParametricElement)\n .withBranch(\"point\", parsePointElement)\n .withBranch(\"rectangle\", parseRectangleElement).parser,\n ),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n enumeration,\n nullable,\n number,\n object,\n optional,\n pair,\n pipeParsers,\n string,\n trio,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {PerseusGraphTypeLinear} from \"../../data-schema\";\n\n// Used to represent 2-D points and ranges\nconst pairOfNumbers = pair(number, number);\n\nconst parsePerseusGraphTypeAngle = object({\n type: constant(\"angle\"),\n showAngles: optional(boolean),\n allowReflexAngles: optional(boolean),\n angleOffsetDeg: optional(nullable(number)),\n snapDegrees: optional(number),\n match: optional(constant(\"congruent\")),\n coords: optional(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n startCoords: optional(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(trio(string, string, string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeCircle = object({\n type: constant(\"circle\"),\n center: optional(pairOfNumbers),\n radius: optional(number),\n startCoords: optional(\n object({\n center: pairOfNumbers,\n radius: number,\n }),\n ),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeLinear = object({\n type: constant(\"linear\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(pair(string, string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeLinearSystem = object({\n type: constant(\"linear-system\"),\n // TODO(benchristel): default coords to empty array?\n coords: optional(nullable(array(pair(pairOfNumbers, pairOfNumbers)))),\n startCoords: optional(array(pair(pairOfNumbers, pairOfNumbers))),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeNone = object({\n type: constant(\"none\"),\n});\n\nconst parsePerseusGraphTypePoint = object({\n type: constant(\"point\"),\n numPoints: optional(union(number).or(constant(\"unlimited\")).parser),\n coords: optional(nullable(array(pairOfNumbers))),\n startCoords: optional(array(pairOfNumbers)),\n coord: optional(pairOfNumbers),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypePolygon = object({\n type: constant(\"polygon\"),\n numSides: optional(union(number).or(constant(\"unlimited\")).parser),\n showAngles: optional(boolean),\n showSides: optional(boolean),\n snapTo: optional(enumeration(\"grid\", \"angles\", \"sides\")),\n match: optional(enumeration(\"similar\", \"congruent\", \"approx\", \"exact\")),\n startCoords: optional(array(pairOfNumbers)),\n coords: optional(nullable(array(pairOfNumbers))),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeQuadratic = object({\n type: constant(\"quadratic\"),\n coords: optional(\n nullable(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n ),\n startCoords: optional(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(trio(string, string, string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeRay = object({\n type: constant(\"ray\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(pair(string, string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeSegment = object({\n type: constant(\"segment\"),\n // TODO(benchristel): default numSegments?\n numSegments: optional(number),\n coords: optional(nullable(array(pair(pairOfNumbers, pairOfNumbers)))),\n startCoords: optional(array(pair(pairOfNumbers, pairOfNumbers))),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeSinusoid = object({\n type: constant(\"sinusoid\"),\n coords: optional(nullable(array(pairOfNumbers))),\n startCoords: optional(array(pairOfNumbers)),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeExponential = object({\n type: constant(\"exponential\"),\n coords: optional(nullable(array(pairOfNumbers))),\n asymptote: optional(nullable(number)),\n startCoords: optional(\n object({\n coords: pair(pairOfNumbers, pairOfNumbers),\n asymptote: number,\n }),\n ),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeAbsoluteValue = object({\n type: constant(\"absolute-value\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(pair(string, string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeTangent = object({\n type: constant(\"tangent\"),\n coords: optional(nullable(array(pairOfNumbers))),\n startCoords: optional(array(pairOfNumbers)),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeLogarithm = object({\n type: constant(\"logarithm\"),\n coords: optional(nullable(array(pairOfNumbers))),\n asymptote: optional(nullable(number)),\n startCoords: optional(\n object({\n coords: pair(pairOfNumbers, pairOfNumbers),\n asymptote: number,\n }),\n ),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeVector = object({\n type: constant(\"vector\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n match: optional(enumeration(\"exact\", \"congruent\")),\n});\n\nexport const parsePerseusGraphType = discriminatedUnionOn(\"type\")\n .withBranch(\"absolute-value\", parsePerseusGraphTypeAbsoluteValue)\n .withBranch(\"angle\", parsePerseusGraphTypeAngle)\n .withBranch(\"circle\", parsePerseusGraphTypeCircle)\n .withBranch(\"exponential\", parsePerseusGraphTypeExponential)\n .withBranch(\"linear\", parsePerseusGraphTypeLinear)\n .withBranch(\"linear-system\", parsePerseusGraphTypeLinearSystem)\n .withBranch(\"none\", parsePerseusGraphTypeNone)\n .withBranch(\"point\", parsePerseusGraphTypePoint)\n .withBranch(\"polygon\", parsePerseusGraphTypePolygon)\n .withBranch(\"quadratic\", parsePerseusGraphTypeQuadratic)\n .withBranch(\"ray\", parsePerseusGraphTypeRay)\n .withBranch(\"segment\", parsePerseusGraphTypeSegment)\n .withBranch(\"sinusoid\", parsePerseusGraphTypeSinusoid)\n .withBranch(\"tangent\", parsePerseusGraphTypeTangent)\n .withBranch(\"logarithm\", parsePerseusGraphTypeLogarithm)\n .withBranch(\"vector\", parsePerseusGraphTypeVector).parser;\n\nconst parseLockedFigureColor = pipeParsers(\n enumeration(\n // Same as lockedFigureColorNames in data-schema.ts\n \"blue\",\n \"gold\",\n \"green\",\n \"grayH\",\n \"purple\",\n \"pink\",\n \"red\",\n // deprecated name - \"orange\" is now \"gold\"\n \"orange\",\n ),\n).then(convert((color) => (color === \"orange\" ? \"gold\" : color))).parser;\n\nconst parseLockedFigureFillType = enumeration(\n \"none\",\n \"white\",\n \"translucent\",\n \"solid\",\n);\n\nconst parseLockedLineStyle = enumeration(\"solid\", \"dashed\");\n\nconst parseStrokeWeight = defaulted(\n enumeration(\"medium\", \"thin\", \"thick\"),\n () => \"medium\" as const,\n);\n\nconst parseLockedLabelType = object({\n type: constant(\"label\"),\n coord: pairOfNumbers,\n text: string,\n color: parseLockedFigureColor,\n size: enumeration(\"small\", \"medium\", \"large\"),\n});\n\nconst parseLockedPointType = object({\n type: constant(\"point\"),\n coord: pairOfNumbers,\n color: parseLockedFigureColor,\n filled: boolean,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst parseLockedLineType = object({\n type: constant(\"line\"),\n kind: enumeration(\"line\", \"ray\", \"segment\"),\n points: pair(parseLockedPointType, parseLockedPointType),\n color: parseLockedFigureColor,\n lineStyle: parseLockedLineStyle,\n showPoint1: defaulted(boolean, () => false),\n showPoint2: defaulted(boolean, () => false),\n weight: parseStrokeWeight,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst parseLockedVectorType = object({\n type: constant(\"vector\"),\n points: pair(pairOfNumbers, pairOfNumbers),\n color: parseLockedFigureColor,\n weight: parseStrokeWeight,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst parseLockedEllipseType = object({\n type: constant(\"ellipse\"),\n center: pairOfNumbers,\n radius: pairOfNumbers,\n angle: number,\n color: parseLockedFigureColor,\n fillStyle: parseLockedFigureFillType,\n strokeStyle: parseLockedLineStyle,\n weight: parseStrokeWeight,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst parseLockedPolygonType = object({\n type: constant(\"polygon\"),\n points: array(pairOfNumbers),\n color: parseLockedFigureColor,\n showVertices: boolean,\n fillStyle: parseLockedFigureFillType,\n strokeStyle: parseLockedLineStyle,\n weight: parseStrokeWeight,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst numberOrNegativeInfinity = union(number).or(constant(-Infinity)).parser;\nconst numberOrPositiveInfinity = union(number).or(constant(Infinity)).parser;\n\n// Exported for testing.\nexport const parseLockedFunctionDomain = defaulted(\n pair(\n // NOTE: Infinity does not serialize (becomes null), so we cannot assume\n // that this function acts as a validator for the widget. This\n // will ensure that parsed data is up-to-date, but it is quite\n // probable that the data is serialized after being parsed. The\n // widget should therefore account for null values in the domain.\n defaulted(numberOrNegativeInfinity, () => -Infinity),\n defaulted(numberOrPositiveInfinity, () => Infinity),\n ),\n (): [number, number] => [-Infinity, Infinity],\n);\n\nconst parseLockedFunctionType = object({\n type: constant(\"function\"),\n color: parseLockedFigureColor,\n strokeStyle: parseLockedLineStyle,\n weight: parseStrokeWeight,\n equation: string,\n directionalAxis: enumeration(\"x\", \"y\"),\n domain: parseLockedFunctionDomain,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst parseLockedFigure = discriminatedUnionOn(\"type\")\n .withBranch(\"point\", parseLockedPointType)\n .withBranch(\"line\", parseLockedLineType)\n .withBranch(\"vector\", parseLockedVectorType)\n .withBranch(\"ellipse\", parseLockedEllipseType)\n .withBranch(\"polygon\", parseLockedPolygonType)\n .withBranch(\"function\", parseLockedFunctionType)\n .withBranch(\"label\", parseLockedLabelType).parser;\n\nconst parseLabelLocation = union(enumeration(\"onAxis\", \"alongEdge\")).or(\n // If the labelLocation is an empty string, we default to \"onAxis\".\n pipeParsers(constant(\"\")).then(convert(() => \"onAxis\" as const)).parser,\n).parser;\n\nexport const parseInteractiveGraphWidget = parseWidget(\n constant(\"interactive-graph\"),\n object({\n step: pairOfNumbers,\n // TODO(benchristel): rather than making gridStep and snapStep\n // optional, we should duplicate the defaulting logic from the\n // InteractiveGraph component. See parse-perseus-json/README.md for\n // why.\n gridStep: optional(pairOfNumbers),\n snapStep: optional(pairOfNumbers),\n backgroundImage: optional(parsePerseusImageBackground),\n markings: enumeration(\"graph\", \"grid\", \"none\", \"axes\"),\n labels: optional(array(string)),\n labelLocation: optional(parseLabelLocation),\n showProtractor: boolean,\n showRuler: optional(boolean),\n showTooltips: optional(boolean),\n rulerLabel: optional(string),\n rulerTicks: optional(number),\n range: pair(pairOfNumbers, pairOfNumbers),\n showAxisArrows: defaulted(\n object({\n xMin: boolean,\n xMax: boolean,\n yMin: boolean,\n yMax: boolean,\n }),\n () => ({\n xMin: true,\n xMax: true,\n yMin: true,\n yMax: true,\n }),\n ),\n showAxisTicks: defaulted(\n object({\n x: boolean,\n y: boolean,\n }),\n () => ({\n x: true,\n y: true,\n }),\n ),\n // NOTE(benchristel): I copied the default graph from\n // interactive-graph.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n graph: defaulted(\n parsePerseusGraphType,\n (): PerseusGraphTypeLinear => ({\n type: \"linear\" as const,\n }),\n ),\n correct: defaulted(\n parsePerseusGraphType,\n (): PerseusGraphTypeLinear => ({\n type: \"linear\" as const,\n }),\n ),\n lockedFigures: defaulted(array(parseLockedFigure), () => []),\n fullGraphAriaLabel: optional(string),\n fullGraphAriaDescription: optional(string),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseLabelImageWidget = parseWidget(\n constant(\"label-image\"),\n object({\n choices: array(string),\n imageUrl: string,\n imageAlt: string,\n imageHeight: number,\n imageWidth: number,\n markers: array(\n object({\n answers: defaulted(array(string), () => []),\n label: string,\n x: number,\n y: number,\n }),\n ),\n hideChoicesFromInstructions: boolean,\n multipleAnswers: boolean,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {ParsedValue} from \"../parser-types\";\n\nconst matcherOptions = object({\n labels: array(string),\n left: array(string),\n right: array(string),\n orderMatters: boolean,\n padding: boolean,\n});\n\nfunction getDefaultOptions(): ParsedValue<typeof matcherOptions> {\n // NOTE(benchristel): I copied these default values from the ones used\n // in the editor. See parse-perseus-json/README.md for why we want to\n // duplicate the defaults here.\n return {\n left: [\"$x$\", \"$y$\", \"$z$\"],\n right: [\"$1$\", \"$2$\", \"$3$\"],\n labels: [\"test\", \"label\"],\n orderMatters: false,\n padding: true,\n };\n}\n\nexport const parseMatcherWidget = parseWidget(\n constant(\"matcher\"),\n defaulted(matcherOptions, getDefaultOptions),\n);\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {stringToNumber} from \"../general-purpose-parsers/string-to-number\";\n\nimport {parseWidget} from \"./widget\";\n\nconst numberOrStringOrNaN = union(number).or(string).or(constant(NaN)).parser;\nconst numeric = pipeParsers(defaulted(numberOrStringOrNaN, () => NaN)).then(\n stringToNumber,\n).parser;\n\nexport const parseMatrixWidget = parseWidget(\n defaulted(constant(\"matrix\"), () => \"matrix\" as const),\n object({\n prefix: optional(string),\n suffix: optional(string),\n answers: defaulted(array(array(numeric)), () => []),\n cursorPosition: optional(array(number)),\n matrixBoardSize: array(number),\n static: optional(boolean),\n }),\n);\n","import {\n boolean,\n constant,\n number,\n object,\n pair,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nexport const parseMeasurerWidget = parseWidget(\n constant(\"measurer\"),\n object({\n // The default value for image comes from measurer.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n image: defaulted(parsePerseusImageBackground, () => ({\n url: null,\n top: 0,\n left: 0,\n })),\n showProtractor: boolean,\n showRuler: boolean,\n rulerLabel: string,\n rulerTicks: number,\n rulerPixels: number,\n rulerLength: number,\n box: pair(number, number),\n }),\n);\n","import {\n constant,\n object,\n string,\n number,\n optional,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseMoleculeRendererWidget = parseWidget(\n constant(\"molecule-renderer\"),\n object({\n widgetId: string,\n rotationAngle: optional(number),\n smiles: optional(string),\n }),\n);\n","import {\n constant,\n object,\n array,\n number,\n string,\n boolean,\n optional,\n nullable,\n pipeParsers,\n union,\n enumeration,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nconst emptyStringToNull = pipeParsers(constant(\"\")).then(\n convert(() => null),\n).parser;\n\nexport const parseNumberLineWidget = parseWidget(\n constant(\"number-line\"),\n object({\n // TODO(LEMS-3081): change `range` to `pair(number, number)` and update the related types\n // in data-schema.ts and number-line.tsx.\n range: array(number),\n labelRange: array(nullable(union(number).or(emptyStringToNull).parser)),\n labelStyle: string,\n labelTicks: boolean,\n // NOTE(matthewcurtis): I copied the default isTickCtrl from\n // number-line.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n isTickCtrl: defaulted(boolean, () => false),\n isInequality: defaulted(boolean, () => false),\n divisionRange: array(number),\n numDivisions: optional(nullable(number)),\n // NOTE(benchristel): I copied the default snapDivisions from\n // number-line.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n snapDivisions: defaulted(number, () => 2),\n tickStep: optional(nullable(number)),\n correctRel: defaulted(\n optional(enumeration(\"eq\", \"lt\", \"gt\", \"le\", \"ge\")),\n // Convert null to undefined:\n () => undefined,\n ),\n correctX: defaulted(nullable(number), () => null),\n initialX: optional(nullable(number)),\n showTooltips: optional(boolean),\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n constant,\n object,\n array,\n string,\n number,\n optional,\n enumeration,\n boolean,\n nullable,\n union,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nconst parseMathFormat = enumeration(\n \"integer\",\n \"mixed\",\n \"improper\",\n \"proper\",\n \"decimal\",\n \"percent\",\n \"pi\",\n);\n\nexport const parseSimplify = pipeParsers(\n union(constant(null))\n .or(constant(undefined))\n .or(boolean)\n .or(constant(\"true\"))\n .or(constant(\"required\"))\n .or(constant(\"correct\"))\n .or(constant(\"enforced\"))\n .or(constant(\"optional\"))\n .or(constant(\"accepted\")).parser,\n).then(convert(deprecatedSimplifyValuesToRequired)).parser;\n\nfunction deprecatedSimplifyValuesToRequired(\n simplify:\n | null\n | undefined\n | boolean\n | \"true\"\n | \"required\"\n | \"correct\"\n | \"enforced\"\n | \"optional\"\n | \"accepted\",\n): \"enforced\" | \"required\" | \"optional\" {\n switch (simplify) {\n case \"enforced\":\n case \"required\":\n case \"optional\":\n return simplify;\n // NOTE(benchristel): \"accepted\", \"correct\", \"true\", true, false,\n // undefined, and null are all treated the same as \"required\" during\n // scoring, so we convert them to \"required\" here to preserve\n // behavior. See the tests in score-numeric-input.test.ts.\n default:\n return \"required\";\n }\n}\n\nexport const parseNumericInputWidget = parseWidget(\n constant(\"numeric-input\"),\n object({\n answers: array(\n object({\n message: defaulted(string, () => \"\"),\n // TODO(benchristel): value should never be null or undefined,\n // but we have some content where it is anyway. If we backfill\n // the data, simplify this.\n value: optional(nullable(number)),\n status: string,\n answerForms: defaulted(\n optional(array(parseMathFormat)),\n () => undefined,\n ),\n strict: defaulted(boolean, () => false),\n maxError: optional(nullable(number)),\n // TODO(benchristel): simplify should never be a boolean, but we\n // have some content where it is anyway. If we ever backfill\n // the data, we should simplify `simplify`.\n simplify: parseSimplify,\n }),\n ),\n labelText: optional(string),\n size: string,\n coefficient: defaulted(boolean, () => false),\n rightAlign: optional(boolean),\n }),\n);\n","import {\n array,\n constant,\n enumeration,\n object,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\n\nimport type {PartialParser} from \"../parser-types\";\n\n// There is an import cycle between orderer-widget.ts and perseus-renderer.ts.\n// This wrapper ensures that we don't refer to parsePerseusRenderer before\n// it's defined.\nfunction parseRenderer(rawValue, ctx) {\n return parsePerseusRenderer(rawValue, ctx);\n}\n\nconst largeToAuto: PartialParser<\n \"normal\" | \"auto\" | \"large\",\n \"normal\" | \"auto\"\n> = (height, ctx) => {\n if (height === \"large\") {\n return ctx.success(\"auto\");\n }\n return ctx.success(height);\n};\n\nexport const parseOrdererWidget = parseWidget(\n constant(\"orderer\"),\n object({\n options: defaulted(array(parseRenderer), () => []),\n correctOptions: defaulted(array(parseRenderer), () => []),\n otherOptions: defaulted(array(parseRenderer), () => []),\n height: pipeParsers(enumeration(\"normal\", \"auto\", \"large\")).then(\n largeToAuto,\n ).parser,\n layout: defaulted(\n enumeration(\"horizontal\", \"vertical\"),\n () => \"horizontal\" as const,\n ),\n }),\n);\n","import {constant, object, string} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parsePhetSimulationWidget = parseWidget(\n constant(\"phet-simulation\"),\n object({\n url: string,\n description: string,\n }),\n);\n","import {\n constant,\n object,\n string,\n array,\n number,\n optional,\n nullable,\n enumeration,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nconst plotterPlotTypes = enumeration(\n \"bar\",\n \"line\",\n \"pic\",\n \"histogram\",\n \"dotplot\",\n);\n\nexport const parsePlotterWidget = parseWidget(\n constant(\"plotter\"),\n object({\n labels: array(string),\n categories: array(string),\n type: plotterPlotTypes,\n maxY: number,\n // The default value for scaleY comes from plotter.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n scaleY: defaulted(number, () => 1),\n labelInterval: optional(nullable(number)),\n // The default value for snapsPerLine comes from plotter.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n snapsPerLine: defaulted(number, () => 2),\n starting: array(number),\n correct: defaulted(array(number), () => []),\n picUrl: optional(nullable(string)),\n picSize: optional(nullable(number)),\n picBoxHeight: optional(nullable(number)),\n // NOTE(benchristel): I copied the default plotDimensions from\n // plotter.tsx. See the parse-perseus-json/README.md for an explanation\n // of why we want to duplicate the defaults here.\n plotDimensions: defaulted(array(number), () => [380, 300]),\n }),\n);\n","import {constant, object, string, number} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parsePythonProgramWidget = parseWidget(\n constant(\"python-program\"),\n object({\n programID: string,\n height: number,\n }),\n);\n","interface Choice {\n correct?: boolean;\n}\n\nexport function deriveNumCorrect(choices: Choice[]) {\n return choices.filter((c) => c.correct).length;\n}\n","// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport {deriveNumCorrect} from \"../../widgets/radio/derive-num-correct\";\nimport {\n any,\n array,\n arrayWithIndex,\n boolean,\n constant,\n defaultedNonEmptyString,\n number,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {versionedWidgetOptions} from \"./versioned-widget-options\";\nimport {parseWidgetWithVersion} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {ParsedValue} from \"../parser-types\";\n\nconst parseWidgetsMapOrUndefined = defaulted(\n // There is an import cycle between radio-widget.ts and\n // widgets-map.ts. The anonymous function below ensures that we\n // don't refer to parseWidgetsMap before it's defined.\n optional((rawVal, ctx) => parseWidgetsMap(rawVal, ctx)),\n () => undefined,\n);\n\nfunction getDefaultOptions() {\n // See parse-perseus-json/README.md for why we want these defaults here.\n return {\n choices: [\n {content: \"\", id: generateChoiceId(0)},\n {content: \"\", id: generateChoiceId(1)},\n {content: \"\", id: generateChoiceId(2)},\n {content: \"\", id: generateChoiceId(3)},\n ],\n };\n}\n\nconst parseOnePerLine = defaulted(optional(boolean), () => undefined);\nconst parseNoneOfTheAbove = defaulted(\n optional(constant(false)),\n () => undefined,\n);\n\nfunction generateChoiceId(index: number): string {\n return `radio-choice-${index}`;\n}\n\nconst version3 = optional(object({major: constant(3), minor: number}));\nconst parseRadioWidgetV3 = parseWidgetWithVersion(\n version3,\n constant(\"radio\"),\n object({\n numCorrect: optional(number),\n choices: arrayWithIndex((index) =>\n object({\n content: defaulted(string, () => \"\"),\n rationale: optional(string),\n correct: optional(boolean),\n isNoneOfTheAbove: optional(boolean),\n id: defaultedNonEmptyString(() => generateChoiceId(index)),\n }),\n ),\n hasNoneOfTheAbove: optional(boolean),\n countChoices: optional(boolean),\n randomize: optional(boolean),\n multipleSelect: optional(boolean),\n deselectEnabled: optional(boolean),\n }),\n);\n\nconst version2 = optional(object({major: constant(2), minor: number}));\nconst parseRadioWidgetV2 = parseWidgetWithVersion(\n version2,\n constant(\"radio\"),\n defaulted(\n object({\n numCorrect: optional(number),\n choices: array(\n object({\n content: defaulted(string, () => \"\"),\n clue: optional(string),\n correct: optional(boolean),\n isNoneOfTheAbove: optional(boolean),\n rationale: optional(string),\n // deprecated\n widgets: parseWidgetsMapOrUndefined,\n }),\n ),\n hasNoneOfTheAbove: optional(boolean),\n countChoices: optional(boolean),\n randomize: optional(boolean),\n multipleSelect: optional(boolean),\n deselectEnabled: optional(boolean),\n // deprecated\n onePerLine: parseOnePerLine,\n // deprecated\n displayCount: optional(any),\n // v0 props\n // `noneOfTheAbove` is still in use (but only set to `false`).\n noneOfTheAbove: parseNoneOfTheAbove,\n }),\n getDefaultOptions,\n ),\n);\n\nconst version1 = optional(object({major: constant(1), minor: number}));\nconst parseRadioWidgetV1 = parseWidgetWithVersion(\n version1,\n constant(\"radio\"),\n defaulted(\n object({\n choices: array(\n object({\n content: defaulted(string, () => \"\"),\n clue: optional(string),\n correct: optional(boolean),\n isNoneOfTheAbove: optional(boolean),\n // deprecated\n widgets: parseWidgetsMapOrUndefined,\n }),\n ),\n hasNoneOfTheAbove: optional(boolean),\n countChoices: optional(boolean),\n randomize: optional(boolean),\n multipleSelect: optional(boolean),\n deselectEnabled: optional(boolean),\n // deprecated\n onePerLine: parseOnePerLine,\n // deprecated\n displayCount: optional(any),\n // v0 props\n // `noneOfTheAbove` is still in use (but only set to `false`).\n noneOfTheAbove: parseNoneOfTheAbove,\n }),\n getDefaultOptions,\n ),\n);\n\nconst version0 = optional(object({major: constant(0), minor: number}));\nconst parseRadioWidgetV0 = parseWidgetWithVersion(\n version0,\n constant(\"radio\"),\n defaulted(\n object({\n choices: array(\n object({\n content: defaulted(string, () => \"\"),\n clue: optional(string),\n correct: optional(boolean),\n isNoneOfTheAbove: optional(boolean),\n // deprecated\n widgets: parseWidgetsMapOrUndefined,\n }),\n ),\n hasNoneOfTheAbove: optional(boolean),\n countChoices: optional(boolean),\n randomize: optional(boolean),\n multipleSelect: optional(boolean),\n deselectEnabled: optional(boolean),\n // deprecated\n onePerLine: parseOnePerLine,\n // deprecated\n displayCount: optional(any),\n // v0 props\n // `noneOfTheAbove` is still in use (but only set to `false`).\n noneOfTheAbove: parseNoneOfTheAbove,\n }),\n getDefaultOptions,\n ),\n);\n\n// migrate functions\nexport function migrateV2toV3(\n widget: ParsedValue<typeof parseRadioWidgetV2>,\n): ParsedValue<typeof parseRadioWidgetV3> {\n const {options} = widget;\n return {\n ...widget,\n version: {major: 3, minor: 0},\n options: {\n numCorrect: options.numCorrect,\n hasNoneOfTheAbove: options.hasNoneOfTheAbove,\n countChoices: options.countChoices,\n randomize: options.randomize,\n multipleSelect: options.multipleSelect,\n deselectEnabled: options.deselectEnabled,\n choices: options.choices.map((choice, index) => ({\n content: choice.content,\n rationale: choice[\"rationale\"] || choice.clue,\n correct: choice.correct,\n isNoneOfTheAbove: choice.isNoneOfTheAbove,\n id: generateChoiceId(index),\n })),\n },\n };\n}\n\nexport function migrateV1ToV2(\n widget: ParsedValue<typeof parseRadioWidgetV1>,\n): ParsedValue<typeof parseRadioWidgetV2> {\n const {options} = widget;\n return {\n ...widget,\n version: {major: 2, minor: 0},\n options: {\n ...options,\n numCorrect: deriveNumCorrect(options.choices),\n },\n };\n}\n\nexport function migrateV0ToV1(\n widget: ParsedValue<typeof parseRadioWidgetV0>,\n): ParsedValue<typeof parseRadioWidgetV1> {\n const {options} = widget;\n const {noneOfTheAbove: _, ...rest} = options;\n return {\n ...widget,\n version: {major: 1, minor: 0},\n options: {\n ...rest,\n hasNoneOfTheAbove: false,\n noneOfTheAbove: undefined,\n },\n };\n}\n\nexport const parseRadioWidget = versionedWidgetOptions(3, parseRadioWidgetV3)\n .withMigrationFrom(2, parseRadioWidgetV2, migrateV2toV3)\n .withMigrationFrom(1, parseRadioWidgetV1, migrateV1ToV2)\n .withMigrationFrom(0, parseRadioWidgetV0, migrateV0ToV1).parser;\n","import {\n array,\n boolean,\n constant,\n enumeration,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseSorterWidget = parseWidget(\n constant(\"sorter\"),\n object({\n correct: array(string),\n padding: boolean,\n layout: enumeration(\"horizontal\", \"vertical\"),\n }),\n);\n","import {\n array,\n number,\n constant,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseTableWidget = parseWidget(\n constant(\"table\"),\n object({\n headers: array(string),\n rows: number,\n columns: number,\n answers: defaulted(array(array(string)), () => []),\n }),\n);\n","import {\n constant,\n object,\n string,\n boolean,\n optional,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseVideoWidget = parseWidget(\n constant(\"video\"),\n object({\n location: string,\n static: optional(boolean),\n }),\n);\n","import {pair, string} from \"../general-purpose-parsers\";\n\nimport type {Parser} from \"../parser-types\";\n\n/**\n * Parses a string representation of a non-negative integer.\n *\n * This parser is used for the numeric part of widget IDs (e.g., the \"1\" in \"radio 1\").\n * It accepts string representations of non-negative integers, including \"0\".\n *\n * Note: The article renderer allows widget IDs with 0 (at least for image widgets),\n * but if widget IDs in an exercise contain 0, the exercise renderer may have issues.\n * We allow 0 here for compatibility with articles.\n *\n * @param rawValue - The raw value to parse, expected to be a string\n * @param ctx - The parse context for error reporting\n * @returns A ParseResult containing either the parsed number or an error\n */\nconst parseStringToNonNegativeInt: Parser<number> = (rawValue, ctx) => {\n // The article renderer seems to allow the numeric part of a widget ID to\n // be 0, at least for image widgets. However, if widget IDs in an exercise\n // contain 0, the exercise renderer will blow up. We allow 0 here for\n // compatibility with articles.\n if (typeof rawValue !== \"string\" || !/^(0|[1-9][0-9]*)$/.test(rawValue)) {\n return ctx.failure(\n \"a string representing a non-negative integer\",\n rawValue,\n );\n }\n return ctx.success(+rawValue);\n};\n\n/**\n * Parses widget ID components into a [type, number] tuple.\n *\n * Widget IDs in Perseus follow the format \"{type} {number}\" (e.g., \"radio 1\", \"dropdown 2\").\n * This parser takes the components of a widget ID (after splitting on spaces) and\n * validates that it consists of exactly two parts: a widget type string and a\n * non-negative integer.\n *\n * @type {Parser<[string, number]>} A parser that returns a tuple of [widgetType, widgetNumber]\n */\nexport const parseWidgetIdComponents = pair(\n string,\n parseStringToNonNegativeInt,\n);\n","import {\n any,\n isPlainObject,\n looseObject,\n constant,\n} from \"../general-purpose-parsers\";\nimport {isFailure} from \"../result\";\n\nimport {parseCategorizerWidget} from \"./categorizer-widget\";\nimport {parseCSProgramWidget} from \"./cs-program-widget\";\nimport {parseDefinitionWidget} from \"./definition-widget\";\nimport {parseDropdownWidget} from \"./dropdown-widget\";\nimport {parseExplanationWidget} from \"./explanation-widget\";\nimport {parseExpressionWidget} from \"./expression-widget\";\nimport {parseFreeResponseWidget} from \"./free-response-widget\";\nimport {parseGradedGroupSetWidget} from \"./graded-group-set-widget\";\nimport {parseGradedGroupWidget} from \"./graded-group-widget\";\nimport {parseGrapherWidget} from \"./grapher-widget\";\nimport {parseGroupWidget} from \"./group-widget\";\nimport {parseIframeWidget} from \"./iframe-widget\";\nimport {parseImageWidget} from \"./image-widget\";\nimport {parseInputNumberWidget} from \"./input-number-widget\";\nimport {parseInteractionWidget} from \"./interaction-widget\";\nimport {parseInteractiveGraphWidget} from \"./interactive-graph-widget\";\nimport {parseLabelImageWidget} from \"./label-image-widget\";\nimport {parseMatcherWidget} from \"./matcher-widget\";\nimport {parseMatrixWidget} from \"./matrix-widget\";\nimport {parseMeasurerWidget} from \"./measurer-widget\";\nimport {parseMoleculeRendererWidget} from \"./molecule-renderer-widget\";\nimport {parseNumberLineWidget} from \"./number-line-widget\";\nimport {parseNumericInputWidget} from \"./numeric-input-widget\";\nimport {parseOrdererWidget} from \"./orderer-widget\";\nimport {parsePhetSimulationWidget} from \"./phet-simulation-widget\";\nimport {parsePlotterWidget} from \"./plotter-widget\";\nimport {parsePythonProgramWidget} from \"./python-program-widget\";\nimport {parseRadioWidget} from \"./radio-widget\";\nimport {parseSorterWidget} from \"./sorter-widget\";\nimport {parseTableWidget} from \"./table-widget\";\nimport {parseVideoWidget} from \"./video-widget\";\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetIdComponents} from \"./widget-id-components\";\n\nimport type {\n DeprecatedStandinWidget,\n PerseusWidgetsMap,\n // TODO(LEMS-4224): don't import from outside of the parser\n // eslint-disable-next-line import/no-restricted-paths\n} from \"../../data-schema\";\nimport type {ParseContext, Parser, ParseResult} from \"../parser-types\";\n\nexport const parseWidgetsMap: Parser<PerseusWidgetsMap> = (rawValue, ctx) => {\n if (!isPlainObject(rawValue)) {\n return ctx.failure(\"PerseusWidgetsMap\", rawValue);\n }\n\n const widgetsMap: PerseusWidgetsMap = {};\n for (const key of Object.keys(rawValue)) {\n // parseWidgetsMapEntry modifies the widgetsMap. This is kind of gross,\n // but it's the only way I could find to make TypeScript check the key\n // against the widget type.\n const entryResult = parseWidgetsMapEntry(\n [key, rawValue[key]],\n widgetsMap,\n ctx.forSubtree(key),\n );\n if (isFailure(entryResult)) {\n return entryResult;\n }\n }\n\n return ctx.success(widgetsMap);\n};\n\nconst parseWidgetsMapEntry: (\n entry: [string, unknown],\n widgetMap: PerseusWidgetsMap,\n ctx: ParseContext,\n) => ParseResult<unknown> = ([id, widget], widgetMap, ctx) => {\n const idComponentsResult = parseWidgetIdComponents(\n id.split(\" \"),\n ctx.forSubtree(\"(widget ID)\"),\n );\n if (isFailure(idComponentsResult)) {\n return idComponentsResult;\n }\n const [type, n] = idComponentsResult.value;\n\n function parseAndAssign<K extends keyof PerseusWidgetsMap>(\n key: K,\n parse: Parser<PerseusWidgetsMap[K]>,\n ): ParseResult<unknown> {\n const widgetResult = parse(widget, ctx);\n if (isFailure(widgetResult)) {\n return widgetResult;\n }\n widgetMap[key] = widgetResult.value;\n return ctx.success(undefined);\n }\n\n switch (type) {\n case \"categorizer\":\n return parseAndAssign(`categorizer ${n}`, parseCategorizerWidget);\n case \"cs-program\":\n return parseAndAssign(`cs-program ${n}`, parseCSProgramWidget);\n case \"definition\":\n return parseAndAssign(`definition ${n}`, parseDefinitionWidget);\n case \"dropdown\":\n return parseAndAssign(`dropdown ${n}`, parseDropdownWidget);\n case \"explanation\":\n return parseAndAssign(`explanation ${n}`, parseExplanationWidget);\n case \"expression\":\n return parseAndAssign(`expression ${n}`, parseExpressionWidget);\n case \"free-response\":\n return parseAndAssign(\n `free-response ${n}`,\n parseFreeResponseWidget,\n );\n case \"grapher\":\n return parseAndAssign(`grapher ${n}`, parseGrapherWidget);\n case \"group\":\n return parseAndAssign(`group ${n}`, parseGroupWidget);\n case \"graded-group\":\n return parseAndAssign(`graded-group ${n}`, parseGradedGroupWidget);\n case \"graded-group-set\":\n return parseAndAssign(\n `graded-group-set ${n}`,\n parseGradedGroupSetWidget,\n );\n case \"iframe\":\n return parseAndAssign(`iframe ${n}`, parseIframeWidget);\n case \"image\":\n return parseAndAssign(`image ${n}`, parseImageWidget);\n case \"input-number\":\n return parseAndAssign(`input-number ${n}`, parseInputNumberWidget);\n case \"interaction\":\n return parseAndAssign(`interaction ${n}`, parseInteractionWidget);\n case \"interactive-graph\":\n return parseAndAssign(\n `interactive-graph ${n}`,\n parseInteractiveGraphWidget,\n );\n case \"label-image\":\n return parseAndAssign(`label-image ${n}`, parseLabelImageWidget);\n case \"matcher\":\n return parseAndAssign(`matcher ${n}`, parseMatcherWidget);\n case \"matrix\":\n return parseAndAssign(`matrix ${n}`, parseMatrixWidget);\n case \"measurer\":\n return parseAndAssign(`measurer ${n}`, parseMeasurerWidget);\n case \"molecule-renderer\":\n return parseAndAssign(\n `molecule-renderer ${n}`,\n parseMoleculeRendererWidget,\n );\n case \"number-line\":\n return parseAndAssign(`number-line ${n}`, parseNumberLineWidget);\n case \"numeric-input\":\n return parseAndAssign(\n `numeric-input ${n}`,\n parseNumericInputWidget,\n );\n case \"orderer\":\n return parseAndAssign(`orderer ${n}`, parseOrdererWidget);\n case \"phet-simulation\":\n return parseAndAssign(\n `phet-simulation ${n}`,\n parsePhetSimulationWidget,\n );\n case \"plotter\":\n return parseAndAssign(`plotter ${n}`, parsePlotterWidget);\n case \"python-program\":\n return parseAndAssign(\n `python-program ${n}`,\n parsePythonProgramWidget,\n );\n case \"radio\":\n return parseAndAssign(`radio ${n}`, parseRadioWidget);\n case \"sorter\":\n return parseAndAssign(`sorter ${n}`, parseSorterWidget);\n case \"table\":\n return parseAndAssign(`table ${n}`, parseTableWidget);\n case \"video\":\n return parseAndAssign(`video ${n}`, parseVideoWidget);\n case \"sequence\":\n // sequence is a deprecated widget type, and the corresponding\n // widget component no longer exists.\n return parseAndAssign(`sequence ${n}`, parseDeprecatedWidget);\n case \"lights-puzzle\":\n return parseAndAssign(`lights-puzzle ${n}`, parseDeprecatedWidget);\n case \"simulator\":\n return parseAndAssign(`simulator ${n}`, parseDeprecatedWidget);\n case \"transformer\":\n return parseAndAssign(`transformer ${n}`, parseDeprecatedWidget);\n case \"passage\":\n return parseAndAssign(`passage ${n}`, parseDeprecatedWidget);\n case \"passage-ref\":\n return parseAndAssign(`passage-ref ${n}`, parseDeprecatedWidget);\n case \"passage-ref-target\":\n return parseAndAssign(\n `passage-ref-target ${n}`,\n parseDeprecatedWidget,\n );\n\n default:\n return parseAndAssign(\n // eslint-disable-next-line no-restricted-syntax\n `${type} ${n}` as any,\n // eslint-disable-next-line no-restricted-syntax\n parseWidget(constant(type), any) as any,\n );\n }\n};\n\nconst parseDeprecatedWidget: Parser<DeprecatedStandinWidget> = parseWidget(\n // Ignore the incoming widget type and hardcode \"deprecated-standin\"\n (_, ctx) => ctx.success(\"deprecated-standin\" as const),\n // Allow any widget options\n looseObject({}),\n);\n","import {any, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseImages} from \"./images-map\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {PerseusRenderer} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusRenderer: Parser<PerseusRenderer> = defaulted(\n object({\n // TODO(benchristel): content is also defaulted to empty string in\n // renderer.tsx. See if we can remove one default or the other.\n content: defaulted(string, () => \"\"),\n // This module has an import cycle with parseWidgetsMap, because the\n // `group` widget can contain another renderer.\n // The anonymous function below ensures that we don't try to access\n // parseWidgetsMap before it's defined.\n widgets: defaulted(\n (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n () => ({}),\n ),\n images: parseImages,\n // deprecated\n metadata: any,\n }),\n // Default value\n () => ({\n content: \"\",\n widgets: {},\n images: {},\n }),\n);\n","import {array, union} from \"../general-purpose-parsers\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {PerseusArticle} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusArticle: Parser<PerseusArticle> = union(\n parsePerseusRenderer,\n).or(array(parsePerseusRenderer)).parser;\n","import {\n any,\n boolean,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseImages} from \"./images-map\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nexport const parseHint = object({\n replace: defaulted(optional(boolean), () => undefined),\n placeholder: defaulted(optional(boolean), () => undefined),\n content: string,\n widgets: defaulted(parseWidgetsMap, () => ({})),\n images: parseImages,\n // deprecated\n metadata: any,\n});\n","import {boolean, defaulted, object} from \"../general-purpose-parsers\";\n\nconst booleanOrFalse = defaulted(boolean, () => false);\n\nexport const parsePerseusAnswerArea = defaulted(\n object({\n calculator: booleanOrFalse,\n financialCalculatorMonthlyPayment: booleanOrFalse,\n financialCalculatorTotalAmount: booleanOrFalse,\n financialCalculatorTimeToPayOff: booleanOrFalse,\n periodicTable: booleanOrFalse,\n periodicTableWithKey: booleanOrFalse,\n }),\n () => ({\n calculator: false,\n financialCalculatorMonthlyPayment: false,\n financialCalculatorTotalAmount: false,\n financialCalculatorTimeToPayOff: false,\n periodicTable: false,\n periodicTableWithKey: false,\n }),\n);\n","import {array, object} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseHint} from \"./hint\";\nimport {parsePerseusAnswerArea} from \"./perseus-answer-area\";\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {PerseusItem} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusItem: Parser<PerseusItem> = object({\n question: parsePerseusRenderer,\n hints: defaulted(array(parseHint), () => []),\n answerArea: parsePerseusAnswerArea,\n});\n","import {\n constant,\n nullable,\n number,\n object,\n pair,\n} from \"../general-purpose-parsers\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nconst coord = pair(number, number);\nconst coordPair = pair(coord, coord);\n\nconst parseAbsoluteValueBranch = object({\n type: constant(\"absolute_value\"),\n coords: nullable(coordPair),\n});\n\nconst parseExponentialBranch = object({\n type: constant(\"exponential\"),\n asymptote: coordPair,\n coords: nullable(coordPair),\n});\n\nconst parseLinearBranch = object({\n type: constant(\"linear\"),\n coords: nullable(coordPair),\n});\n\nconst parseLogarithmBranch = object({\n type: constant(\"logarithm\"),\n asymptote: coordPair,\n coords: nullable(coordPair),\n});\n\nconst parseQuadraticBranch = object({\n type: constant(\"quadratic\"),\n coords: nullable(coordPair),\n});\n\nconst parseSinusoidBranch = object({\n type: constant(\"sinusoid\"),\n coords: nullable(coordPair),\n});\n\nconst parseTangentBranch = object({\n type: constant(\"tangent\"),\n coords: nullable(coordPair),\n});\n\nexport const parseGrapherUserInput = discriminatedUnionOn(\"type\")\n .withBranch(\"absolute_value\", parseAbsoluteValueBranch)\n .withBranch(\"exponential\", parseExponentialBranch)\n .withBranch(\"linear\", parseLinearBranch)\n .withBranch(\"logarithm\", parseLogarithmBranch)\n .withBranch(\"quadratic\", parseQuadraticBranch)\n .withBranch(\"sinusoid\", parseSinusoidBranch)\n .withBranch(\"tangent\", parseTangentBranch).parser;\n","import {parse} from \"./parse\";\nimport {parsePerseusArticle as migrateAndTypecheckPerseusArticle} from \"./perseus-parsers/perseus-article\";\nimport {parsePerseusItem as migrateAndTypecheckPerseusItem} from \"./perseus-parsers/perseus-item\";\nimport {parsePerseusRenderer as migrateAndTypecheckPerseusRenderer} from \"./perseus-parsers/perseus-renderer\";\nimport {parseUserInputMap} from \"./perseus-parsers/user-input-map\";\nimport {failure, isFailure} from \"./result\";\n\nimport type {Result} from \"./result\";\nimport type {\n PerseusItem,\n PerseusArticle,\n PerseusRenderer,\n} from \"../data-schema\";\nimport type {UserInputMap} from \"../validation.types\";\n\nexport type ParseFailureDetail = {\n /**\n * A human-readable error message describing where in the object tree\n * parsing failed.\n */\n message: string;\n /**\n * The raw result of parsing the input JSON, with no migrations applied.\n * Use at your own risk.\n */\n invalidObject: unknown;\n};\n\n/**\n * Parses a PerseusItem from a plain object or JSON string, migrates old\n * formats to the latest schema, and runtime-typechecks the result. Use this to\n * parse assessmentItem data.\n *\n * @returns a {@link Result} of the parsed PerseusItem. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is not well-formed JSON.\n */\nexport function parseAndMigratePerseusItem(\n data: unknown,\n): Result<PerseusItem, ParseFailureDetail> {\n const object: unknown = typeof data === \"string\" ? JSON.parse(data) : data;\n const result = parse(object, migrateAndTypecheckPerseusItem);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n\n/**\n * Parses a PerseusArticle from a plain object (or array) or JSON string,\n * migrates old formats to the latest schema, and runtime-typechecks the\n * result.\n *\n * @returns a {@link Result} of the parsed PerseusArticle. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is not well-formed JSON.\n */\nexport function parseAndMigratePerseusArticle(\n data: unknown,\n): Result<PerseusArticle, ParseFailureDetail> {\n const object: unknown = typeof data === \"string\" ? JSON.parse(data) : data;\n const result = parse(object, migrateAndTypecheckPerseusArticle);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n\n/**\n * Parses a UserInputMap from a plain object or JSON string, migrates old\n * formats to the latest schema, and runtime-typechecks the result.\n *\n * @returns a {@link Result} of the parsed UserInputMap. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is a string that is not well-formed\n * JSON.\n */\nexport function parseAndMigrateUserInputMap(\n data: unknown,\n): Result<UserInputMap, ParseFailureDetail> {\n const object: unknown = typeof data === \"string\" ? JSON.parse(data) : data;\n const result = parse(object, parseUserInputMap);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n\n/**\n * Parses a PerseusRenderer from a plain object or JSON string, migrates old\n * formats to the latest schema, and runtime-typechecks the result.\n *\n * @returns a {@link Result} of the parsed PerseusRenderer. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is a string that is not well-formed\n * JSON.\n */\nexport function parseAndMigratePerseusRenderer(\n data: unknown,\n): Result<PerseusRenderer, ParseFailureDetail> {\n const object: unknown = typeof data === \"string\" ? JSON.parse(data) : data;\n const result = parse(object, migrateAndTypecheckPerseusRenderer);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n","function deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n\nexport default deepClone;\n","/**\n * Errors utility for referencing the Perseus error taxonomy.\n */\nexport const Errors = Object.freeze({\n /**\n * @property {ErrorKind} Unknown The kind of error is not known.\n */\n Unknown: \"Unknown\",\n /**\n * @property {ErrorKind} Internal The error is internal to the executing code.\n */\n Internal: \"Internal\",\n /**\n * @property {ErrorKind} InvalidInput There was a problem with the provided\n * input, such as the wrong format or a null value.\n */\n InvalidInput: \"InvalidInput\",\n /**\n * @property {ErrorKind} NotAllowed There was a problem due to the state of\n * the system not matching the requested operation or input. For example,\n * trying to create a username that is valid, but is already taken by\n * another user. Use {@link InvalidInput} instead when the input isn't\n * valid regardless of the state of the system. Use {@link NotFound} when\n * the failure is due to not being able to find a resource.\n */\n NotAllowed: \"NotAllowed\",\n /**\n * @property {ErrorKind} TransientService There was a problem when making a\n * request to a service.\n */\n TransientService: \"TransientService\",\n /**\n * @property {ErrorKind} Service There was a non-transient problem when\n * making a request to service.\n */\n Service: \"Service\",\n});\n\n/**\n * @type {ErrorKind} The kind of error being reported\n */\nexport type ErrorKind = (typeof Errors)[keyof typeof Errors];\n","import type {ErrorKind} from \"./errors\";\nimport type {Metadata} from \"@khanacademy/wonder-stuff-core\";\n\ntype Options = {\n metadata?: Metadata | null | undefined;\n};\n\nexport class PerseusError extends Error {\n kind: ErrorKind;\n metadata: Metadata | null | undefined;\n\n constructor(message: string, kind: ErrorKind, options?: Options) {\n super(message);\n this.kind = kind;\n this.metadata = options?.metadata;\n }\n}\n","/**\n * _ utilities for objects\n */\n\nimport _ from \"underscore\";\n\n/**\n * Does a pluck on keys inside objects in an object\n *\n * Ex:\n * tools = {\n * translation: {\n * enabled: true\n * },\n * rotation: {\n * enabled: false\n * }\n * };\n * pluckObject(tools, \"enabled\") returns {\n * translation: true\n * rotation: false\n * }\n */\nexport const pluck = function (table: any, subKey: string): any {\n return _.object(\n _.map(table, function (value, key) {\n return [key, value[subKey]];\n }),\n );\n};\n\n/**\n * Maps an object to an object\n *\n * > mapObject({a: '1', b: '2'}, (value, key) => {\n * return value + 1;\n * });\n * {a: 2, b: 3}\n */\nexport const mapObject = function <K extends string, V, U>(\n obj: Record<K, V>,\n lambda: (arg1: V, arg2: K) => U,\n): Record<K, U> {\n const result: Record<string, any> = {};\n Object.keys(obj).forEach((key) => {\n // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'K'.\n result[key] = lambda(obj[key], key);\n });\n return result;\n};\n","class Registry<T> {\n private name: string;\n private contents: Record<string, T> = {};\n private anythingRegistered = false;\n\n constructor(name = \"Registry\") {\n this.name = name;\n }\n\n private throwIfUnregistered() {\n if (!this.anythingRegistered) {\n throw new Error(`${this.name} accessed before initialization!`);\n }\n }\n\n has(key: string): boolean {\n this.throwIfUnregistered();\n return Object.prototype.hasOwnProperty.call(this.contents, key);\n }\n\n get(key: string): T | undefined {\n this.throwIfUnregistered();\n return this.contents[key];\n }\n\n keys(): Array<string> {\n this.throwIfUnregistered();\n return Object.keys(this.contents);\n }\n\n entries(): Array<[string, T]> {\n this.throwIfUnregistered();\n return Object.entries(this.contents);\n }\n\n set(key: string, value: T): void {\n this.anythingRegistered = true;\n this.contents[key] = value;\n }\n}\n\nexport default Registry;\n","/* Note(tamara): Brought over from the perseus package packages/perseus/src/util.ts file.\n May be useful to bring other perseus package utilities here. Contains utility functions\n and types used across multiple widgets for randomization and shuffling. */\n\nimport _ from \"underscore\";\n\n/**\n * A random number generator. Should return floats in the interval [0, 1), like\n * Math.random().\n */\nexport type RNG = () => number;\n\nexport const seededRNG: (seed: number) => RNG = function (seed: number): RNG {\n let randomSeed = seed;\n\n return function () {\n // Robert Jenkins' 32 bit integer hash function.\n let seed = randomSeed;\n seed = (seed + 0x7ed55d16 + (seed << 12)) & 0xffffffff;\n seed = (seed ^ 0xc761c23c ^ (seed >>> 19)) & 0xffffffff;\n seed = (seed + 0x165667b1 + (seed << 5)) & 0xffffffff;\n seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;\n seed = (seed + 0xfd7046c5 + (seed << 3)) & 0xffffffff;\n seed = (seed ^ 0xb55a4f09 ^ (seed >>> 16)) & 0xffffffff;\n return (randomSeed = seed & 0xfffffff) / 0x10000000;\n };\n};\n\n/**\n * Shuffle an array using a given random seed or function.\n * If `ensurePermuted` is true, the input and output are guaranteed to be\n * distinct permutations.\n */\nexport function shuffle<T>(\n array: ReadonlyArray<T>,\n randomSeed: number | RNG,\n ensurePermuted = false,\n): T[] {\n let random;\n if (typeof randomSeed === \"function\") {\n random = randomSeed;\n } else {\n random = seededRNG(randomSeed);\n }\n\n function isValidShuffle(shuffled: readonly T[]) {\n return ensurePermuted ? !_.isEqual(array, shuffled) : true;\n }\n\n return constrainedShuffle(array, random, isValidShuffle);\n}\n\nexport function constrainedShuffle<T>(\n array: readonly T[],\n random: RNG,\n isValidShuffle: (shuffled: readonly T[]) => boolean,\n): T[] {\n const maxIterations = 100;\n const shuffled = [...array];\n\n // Return early if all elements are equal -- both for performance, and\n // to avoid going into an infinite loop in the (common) case where\n // isValidShuffle is checking the order of the values.\n if (shuffled.every((value) => _.isEqual(value, shuffled[0]))) {\n return shuffled;\n }\n\n for (let i = 0; i < maxIterations; i++) {\n shuffleInPlace(shuffled, random);\n if (isValidShuffle(shuffled)) {\n return shuffled;\n }\n }\n\n throw new Error(\n `constrainedShuffle: constraint not met after ${maxIterations} attempts`,\n );\n}\n\nfunction shuffleInPlace<T>(a: T[], random: RNG): void {\n // The Fisher-Yates shuffling algorithm. See:\n // https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\n for (let i = a.length - 1; i > 0; i--) {\n const k = randomIntInRange(0, i, random);\n [a[k], a[i]] = [a[i], a[k]];\n }\n}\n\nexport function randomIntInRange(\n min: number,\n max: number,\n random: RNG,\n): number {\n return Math.floor(random() * (max - min + 1)) + min;\n}\n\nexport const random: RNG = seededRNG(new Date().getTime() & 0xffffffff);\n","import {getTablePublicWidgetOptions} from \"./table-util\";\n\nimport type {TablePublicWidgetOptions} from \"./table-util\";\nimport type {PerseusTableWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type TableDefaultWidgetOptions = Pick<\n PerseusTableWidgetOptions,\n \"headers\" | \"rows\" | \"columns\" | \"answers\"\n>;\n\nconst defaultRows = 4;\nconst defaultColumns = 1;\n\n// initialize a 2D array\n// (defaultRows x defaultColumns) of empty strings\nconst answers = new Array(defaultRows)\n .fill(0)\n .map(() => new Array(defaultColumns).fill(\"\"));\n\nconst defaultWidgetOptions: TableDefaultWidgetOptions = {\n headers: [\"\"],\n rows: defaultRows,\n columns: defaultColumns,\n answers: answers,\n};\n\nconst tableWidgetLogic: WidgetLogic<\n PerseusTableWidgetOptions,\n TablePublicWidgetOptions\n> = {\n name: \"table\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getTablePublicWidgetOptions,\n accessible: true,\n};\n\nexport default tableWidgetLogic;\n","import {Errors} from \"../error/errors\";\nimport {PerseusError} from \"../error/perseus-error\";\nimport Registry from \"../utils/registry\";\n\nimport categorizerWidgetLogic from \"./categorizer\";\nimport csProgramWidgetLogic from \"./cs-program\";\nimport definitionWidgetLogic from \"./definition\";\nimport deprecatedStandinWidgetLogic from \"./deprecated-standin\";\nimport dropdownWidgetLogic from \"./dropdown\";\nimport explanationWidgetLogic from \"./explanation\";\nimport expressionWidgetLogic from \"./expression\";\nimport gradedGroupWidgetLogic from \"./graded-group\";\nimport gradedGroupSetWidgetLogic from \"./graded-group-set\";\nimport grapherWidgetLogic from \"./grapher\";\nimport groupWidgetLogic from \"./group\";\nimport iframeWidgetLogic from \"./iframe\";\nimport imageWidgetLogic from \"./image\";\nimport inputNumberWidgetLogic from \"./input-number\";\nimport interactionWidgetLogic from \"./interaction\";\nimport interactiveGraphWidgetLogic from \"./interactive-graph\";\nimport labelImageWidgetLogic from \"./label-image\";\nimport matcherWidgetLogic from \"./matcher\";\nimport matrixWidgetLogic from \"./matrix\";\nimport measurerWidgetLogic from \"./measurer\";\nimport numberLineWidgetLogic from \"./number-line\";\nimport numericInputWidgetLogic from \"./numeric-input\";\nimport ordererWidgetLogic from \"./orderer\";\nimport phetSimulationWidgetLogic from \"./phet-simulation\";\nimport plotterWidgetLogic from \"./plotter\";\nimport pythonProgramWidgetLogic from \"./python-program\";\nimport radioWidgetLogic from \"./radio\";\nimport sorterWidgetLogic from \"./sorter\";\nimport tableWidgetLogic from \"./table\";\nimport videoWidgetLogic from \"./video\";\n\nimport type {\n PublicWidgetOptionsFunction,\n WidgetLogic,\n} from \"./logic-export.types\";\nimport type {PerseusWidgetOptions, PerseusWidget} from \"../data-schema\";\nimport type {Alignment} from \"../types\";\n\nconst widgets = new Registry<WidgetLogic<any, any>>(\"Core widget registry\");\n\nexport function registerWidget(type: string, logic: WidgetLogic<any, any>) {\n widgets.set(type, logic);\n}\n\nexport function isWidgetRegistered(type: string) {\n const widgetLogic = widgets.get(type);\n return Boolean(widgetLogic);\n}\n\nexport function getCurrentVersion(type: string) {\n const widgetLogic = widgets.get(type);\n return widgetLogic?.version || {major: 0, minor: 0};\n}\n\n// TODO(LEMS-2870): getPublicWidgetOptionsFunction/PublicWidgetOptionsFunction\n// need better types\nexport const getPublicWidgetOptionsFunction = (\n type: string,\n): PublicWidgetOptionsFunction => {\n return widgets.get(type)?.getPublicWidgetOptions ?? ((i: any) => i);\n};\n\nexport function getDefaultWidgetOptions(type: string) {\n const widgetLogic = widgets.get(type);\n return widgetLogic?.defaultWidgetOptions || {};\n}\n\nexport function isAccessible(\n type: string,\n widgetOptions: PerseusWidgetOptions,\n): boolean {\n const accessible = widgets.get(type)?.accessible;\n return typeof accessible === \"function\"\n ? accessible(widgetOptions)\n : !!accessible;\n}\n\nexport const traverseChildWidgets = (\n widgetInfo: PerseusWidget,\n traverseRenderer: any,\n): PerseusWidget => {\n if (!traverseRenderer) {\n throw new PerseusError(\n \"traverseRenderer must be provided, but was not\",\n Errors.Internal,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!widgetInfo || !widgetInfo.type || !widgets.get(widgetInfo.type)) {\n return widgetInfo;\n }\n\n const widgetExports = widgets.get(widgetInfo.type);\n const props = widgetInfo.options;\n\n if (widgetExports?.traverseChildWidgets != null && props != null) {\n const newProps = widgetExports.traverseChildWidgets(\n props,\n traverseRenderer,\n );\n return {...widgetInfo, options: newProps};\n }\n return widgetInfo;\n};\n\n/**\n * Handling for the optional alignments for widgets\n * See widget-container.jsx for details on how alignments are implemented.\n */\n\n/**\n * Returns the list of supported alignments for the given (string) widget\n * type. This is used primarily at editing time to display the choices\n * for the user.\n *\n * Supported alignments are given as an array of strings in the exports of\n * a widget's module.\n */\nexport const getSupportedAlignments = (\n type: string,\n): ReadonlyArray<Alignment> => {\n const widgetLogic = widgets.get(type);\n if (!widgetLogic?.supportedAlignments?.[0]) {\n // default alignments\n return [\"default\"];\n }\n return widgetLogic?.supportedAlignments;\n};\n\n/**\n * For the given (string) widget type, determine the default alignment for\n * the widget. This is used at rendering time to go from \"default\" alignment\n * to the actual alignment displayed on the screen.\n *\n * The default alignment is given either as a string (called\n * `defaultAlignment`) or a function (called `getDefaultAlignment`) on\n * the exports of a widget's module.\n */\nexport const getDefaultAlignment = (type: string): Alignment => {\n const widgetLogic = widgets.get(type);\n if (!widgetLogic?.defaultAlignment) {\n return \"block\";\n }\n return widgetLogic.defaultAlignment;\n};\n\n/**\n * Returns the CSS class name corresponding to the specified widget alignment.\n * Uses explicit mapping to make it easy to locate related CSS style definitions.\n */\nexport const getAlignmentClassName = (\n type: string,\n alignment: Alignment,\n): string => {\n switch (alignment) {\n case \"block\":\n return \" widget-block\";\n case \"inline-block\":\n return \" widget-inline-block\";\n case \"inline\":\n return \" widget-inline\";\n case \"wrap-left\":\n return \" widget-wrap-left\";\n case \"wrap-right\":\n return \" widget-wrap-right\";\n case \"full-width\":\n return \" widget-full-width\";\n case \"default\":\n // This is for widgets that don't have supportedAlignments\n // It doesn't have any impact on styling it is used for error handling\n return getDefaultAlignment(type);\n default:\n return \"\";\n }\n};\n\n/**\n * We use a function here rather than registering widgets\n * at the top-level of the file to avoid circular dependencies.\n * Logic that needs core widget functionality\n * (like a prod or in tests)\n * need to call this function before trying to use that logic.\n */\nexport function registerCoreWidgets() {\n const widgets = [\n categorizerWidgetLogic,\n csProgramWidgetLogic,\n definitionWidgetLogic,\n deprecatedStandinWidgetLogic,\n dropdownWidgetLogic,\n explanationWidgetLogic,\n expressionWidgetLogic,\n gradedGroupWidgetLogic,\n gradedGroupSetWidgetLogic,\n grapherWidgetLogic,\n groupWidgetLogic,\n iframeWidgetLogic,\n imageWidgetLogic,\n inputNumberWidgetLogic,\n interactionWidgetLogic,\n interactiveGraphWidgetLogic,\n labelImageWidgetLogic,\n matcherWidgetLogic,\n matrixWidgetLogic,\n measurerWidgetLogic,\n numberLineWidgetLogic,\n numericInputWidgetLogic,\n ordererWidgetLogic,\n phetSimulationWidgetLogic,\n plotterWidgetLogic,\n pythonProgramWidgetLogic,\n radioWidgetLogic,\n sorterWidgetLogic,\n tableWidgetLogic,\n videoWidgetLogic,\n ];\n\n widgets.forEach((w) => {\n // eslint-disable-next-line no-restricted-syntax\n registerWidget(w.name, w as WidgetLogic<any, any>);\n });\n}\n","import {Errors} from \"../error/errors\";\nimport {PerseusError} from \"../error/perseus-error\";\nimport {mapObject} from \"../utils/objective_\";\n\nimport {\n getCurrentVersion,\n getDefaultWidgetOptions,\n getSupportedAlignments,\n} from \"./core-widget-registry\";\n\nimport type {PerseusWidget, PerseusWidgetsMap} from \"../data-schema\";\n\nexport const applyDefaultsToWidget = (\n oldWidgetInfo: PerseusWidget,\n): PerseusWidget => {\n const type = oldWidgetInfo.type;\n\n const latestVersion = getCurrentVersion(type);\n // pre-July 2014, widgets did not have a version field.\n const version = oldWidgetInfo.version ?? latestVersion;\n\n // Minor version upgrades (eg. new optional props) don't have\n // transform functions. Instead, we fill in the new props with their\n // defaults.\n const defaultOptions = getDefaultWidgetOptions(type);\n const options = {\n ...defaultOptions,\n ...oldWidgetInfo.options,\n };\n\n let alignment = oldWidgetInfo.alignment;\n\n // Widgets that support multiple alignments will \"lock in\" the\n // alignment to the alignment that would be listed first in the\n // select box.\n if (alignment == null || alignment === \"default\") {\n alignment = getSupportedAlignments(type)?.[0];\n if (!alignment) {\n throw new PerseusError(\n \"applyDefaultsToWidget: No default alignment found\",\n Errors.Internal,\n {metadata: {widgetType: type}},\n );\n }\n }\n\n return {\n // maintain other info, like type\n ...oldWidgetInfo,\n version,\n graded: oldWidgetInfo.graded ?? true,\n alignment,\n static: oldWidgetInfo.static ?? false,\n options,\n };\n};\n\nexport function applyDefaultsToWidgets(\n oldWidgetOptions: PerseusWidgetsMap,\n): PerseusWidgetsMap {\n // The cast to PerseusWidgetsMap is needed because TS can't prove that\n // every key in the map will match the associated widget's `type`\n // property.\n // eslint-disable-next-line no-restricted-syntax\n return mapObject(\n oldWidgetOptions,\n applyDefaultsToWidget,\n ) as PerseusWidgetsMap;\n}\n","import _ from \"underscore\";\n\nimport {applyDefaultsToWidgets} from \"../widgets/apply-defaults\";\nimport {getPublicWidgetOptionsFunction} from \"../widgets/core-widget-registry\";\n\nimport deepClone from \"./deep-clone\";\n\nimport type {PerseusRenderer} from \"../data-schema\";\n\n/**\n * Return a copy of a PerseusRenderer with rubric data removed (ie answers)\n *\n * @param original - the original, full PerseusRenderer (which includes the rubric - aka answer data)\n */\nexport default function splitPerseusRenderer(\n original: PerseusRenderer,\n): PerseusRenderer {\n const clone = deepClone(original);\n const originalWidgets = clone.widgets ?? {};\n\n const upgradedWidgets = applyDefaultsToWidgets(originalWidgets);\n const splitWidgets = {};\n\n for (const [id, widget] of Object.entries(upgradedWidgets)) {\n /**\n * Static widgets are presentational, used to represent concepts\n * rather than collect answers from learners. For instance we might\n * want a static InteractiveGraph that shows learners a chart before\n * we give them a Radio widget to check their understanding of the chart.\n * We need to keep the answers in this case because it's pre-scoring information.\n */\n if (widget.static) {\n splitWidgets[id] = widget;\n } else {\n const publicWidgetOptionsFun = getPublicWidgetOptionsFunction(\n widget.type,\n );\n splitWidgets[id] = {\n ...widget,\n // eslint-disable-next-line no-restricted-syntax\n options: publicWidgetOptionsFun(widget.options as any),\n };\n }\n }\n\n return {\n ...original,\n widgets: splitWidgets,\n };\n}\n","import {parseAndMigratePerseusItem} from \"../parse-perseus-json\";\nimport {isFailure} from \"../parse-perseus-json/result\";\n\nimport deepClone from \"./deep-clone\";\nimport splitPerseusRenderer from \"./split-perseus-renderer\";\n\nimport type {PerseusItem} from \"../data-schema\";\n\n/**\n * Return a copy of a PerseusItem with rubric data removed (ie answers)\n *\n * @param original - the original, full PerseusItem (which includes the rubric - aka answer data)\n */\nexport default function splitPerseusItem(original: PerseusItem): PerseusItem {\n const item = deepClone(original);\n\n return {\n ...item,\n question: splitPerseusRenderer(item.question),\n /**\n * We can't include the hints because they often contain the answer.\n *\n * However the UI needs to know how many hints there are before we have\n * answerful PerseusItems. In a crunch, we decided to replace existing hints\n * with empty hints and add a placeholder flag to signal that they're\n * not real hints.\n *\n * TODO(LEMS-3806): there's probably a better way to do this\n */\n hints: original.hints.map(() => ({\n content: \"\",\n widgets: {},\n images: {},\n placeholder: true,\n })),\n };\n}\n\n/**\n * Returns a JSON copy of a PerseusItem with rubric data (i.e. answers and\n * hints) removed. Idempotent and deterministic.\n *\n * @param data a {@linkcode PerseusItem}, either as JSON or as an object.\n * @returns {string} the answerless data formatted as JSON\n * @throws {SyntaxError} given malformed JSON or data that can't be parsed as\n * a Perseus item.\n */\nexport function splitPerseusItemJSON(data: unknown): string {\n const parseResult = parseAndMigratePerseusItem(data);\n if (isFailure(parseResult)) {\n throw new SyntaxError(parseResult.detail.message);\n }\n const item = parseResult.value;\n\n return JSON.stringify(splitPerseusItem(item));\n}\n"],"names":["success","value","type","failure","detail","isFailure","result","isSuccess","all","results","combineFailureDetails","a","values","failureDetails","push","length","reduce","ErrorTrackingParseContext","expected","badValue","wrapInArray","path","forSubtree","key","constructor","Array","isArray","formatPath","map","formatPathSegment","join","segment","validIdentifier","test","JSON","stringify","toString","message","conjoin","items","allButLast","slice","last","parse","parser","any","rawValue","ctx","array","elementParser","elementResults","elem","i","Result","concat","arrayWithIndex","elementParserFactory","index","b","boolean","constant","acceptedValue","Object","is","String","defaulted","fallback","defaultedNonEmptyString","trim","enumeration","acceptedValues","indexOf","v","objectConstructorString","prototype","functionToString","Function","isPlainObject","x","getPrototypeOf","call","nullable","parseValue","number","Number","isFinite","objectWithAllPropertiesRequired","schema","object","objectParserWithInitializer","looseObject","initializeParsedValue","parsed","mismatches","prop","propParser","entries","undefined","optional","pair","parseA","parseB","rawA","rawB","resultA","resultB","pipeParsers","p","ParserPipeline","then","nextParser","composeParsers","parserA","parserB","partialResult","record","parseKey","entryCtx","keyResult","valueResult","string","trio","parseC","resultC","union","parseBranch","UnionBuilder","or","newBranch","either","parsePerseusImageDetail","width","height","parseImages","parseWidget","parseType","parseOptions","static","graded","alignment","options","version","major","minor","parseWidgetWithVersion","parseVersion","parseCategorizerWidget","categories","randomizeItems","highlightLint","parseCSProgramWidget","programID","programType","settings","name","showEditor","showButtons","parseDefinitionWidget","togglePrompt","definition","parseDropdownWidget","placeholder","ariaLabel","visibleLabel","choices","content","correct","parseExplanationWidget","showPrompt","hidePrompt","explanation","widgets","rawVal","parseWidgetsMap","KeypadKeys","deriveExtraKeys","widgetOptions","extraKeys","defaultKeys","answerForms","uniqueExtraVariables","uniqueExtraConstants","answerForm","maybeExpr","KAS","expr","isGreek","symbol","toKey","toUpperCase","isKey","includes","variable","getVars","maybeKey","getConsts","extraVariables","keys","sort","extraConstants","convert","f","keypadKeys","parseLegacyButtonSet","parseLegacyButtonSets","versionedWidgetOptions","latestMajorVersion","parseLatest","VersionedWidgetOptionsParserBuilder","latest","raw","withMigrationFrom","majorVersion","parseOldVersion","migrateToNextVersion","parseOtherVersions","migrateToLatest","old","parseThisVersion","parseThisVersionAndMigrateToLatest","versionParseResult","parseVersionedObject","stringOrNumberOrNullOrUndefined","numberOrNullToString","parsePossiblyInvalidAnswerForm","form","simplify","considered","removeInvalidAnswerForms","possiblyInvalid","flatMap","parseAnswerForms","version2","parseExpressionWidgetV2","functions","times","buttonSets","buttonsVisible","version1","parseExpressionWidgetV1","migrateV1ToV2","widget","version0","parseExpressionWidgetV0","migrateV0ToV1","parseExpressionWidget","parseFreeResponseWidget","allowUnlimitedCharacters","characterLimit","question","scoringCriteria","text","falseToNull","parseGradedGroupWidgetOptions","title","hasHint","hint","parsePerseusRenderer","widgetEnabled","immutableWidgets","images","parseGradedGroupWidget","parseGradedGroupSetWidget","gradedGroups","discriminatedUnionOn","discriminantKey","noMoreBranches","DiscriminatedUnionBuilder","withBranch","discriminantValue","parseNewVariant","parseNewBranch","discriminatedUnionBranch","parseVariant","parseOtherBranches","pairOfNumbers","pairOfPoints","emptyArray","parseCoords","parseCorrect","coords","asymptote","parseGrapherWidget","availableTypes","graph","backgroundImage","bottom","left","scale","url","box","editableSettings","gridStep","labels","markings","range","rulerLabel","rulerTicks","showProtractor","showRuler","showTooltips","snapStep","step","valid","parseGroupWidget","parseIframeWidget","allowFullScreen","allowTopNavigation","stringToNumber","parsedNumber","isNaN","emptyToZero","imageDimensionToNumber","dimensionOrUndefined","parsePerseusImageBackground","top","parseImageWidget","caption","alt","longDescription","decorative","coordinates","booleanToString","parseInputNumberWidget","answerType","inexact","maxError","rightAlign","size","stringOrEmpty","parseFunctionElement","funcName","rangeMin","rangeMax","color","strokeDasharray","strokeWidth","parseLabelElement","label","coordX","coordY","parseLineElement","startX","startY","endX","endY","arrows","parseMovableLineElement","startSubscript","endSubscript","constraint","snap","constraintFn","constraintXMin","constraintXMax","constraintYMin","constraintYMax","parseMovablePointElement","varSubscript","parseParametricElement","y","parsePointElement","parseRectangleElement","parseInteractionWidget","tickStep","elements","parsePerseusGraphTypeAngle","showAngles","allowReflexAngles","angleOffsetDeg","snapDegrees","match","startCoords","pointLabels","showPointLabels","parsePerseusGraphTypeCircle","center","radius","parsePerseusGraphTypeLinear","parsePerseusGraphTypeLinearSystem","parsePerseusGraphTypeNone","parsePerseusGraphTypePoint","numPoints","coord","parsePerseusGraphTypePolygon","numSides","showSides","snapTo","parsePerseusGraphTypeQuadratic","parsePerseusGraphTypeRay","parsePerseusGraphTypeSegment","numSegments","parsePerseusGraphTypeSinusoid","parsePerseusGraphTypeExponential","parsePerseusGraphTypeAbsoluteValue","parsePerseusGraphTypeTangent","parsePerseusGraphTypeLogarithm","parsePerseusGraphTypeVector","parsePerseusGraphType","parseLockedFigureColor","parseLockedFigureFillType","parseLockedLineStyle","parseStrokeWeight","parseLockedLabelType","parseLockedPointType","filled","parseLockedLineType","kind","points","lineStyle","showPoint1","showPoint2","weight","parseLockedVectorType","parseLockedEllipseType","angle","fillStyle","strokeStyle","parseLockedPolygonType","showVertices","numberOrNegativeInfinity","Infinity","numberOrPositiveInfinity","parseLockedFunctionDomain","parseLockedFunctionType","equation","directionalAxis","domain","parseLockedFigure","parseLabelLocation","parseInteractiveGraphWidget","labelLocation","showAxisArrows","xMin","xMax","yMin","yMax","showAxisTicks","lockedFigures","fullGraphAriaLabel","fullGraphAriaDescription","parseLabelImageWidget","imageUrl","imageAlt","imageHeight","imageWidth","markers","answers","hideChoicesFromInstructions","multipleAnswers","matcherOptions","right","orderMatters","padding","getDefaultOptions","parseMatcherWidget","numberOrStringOrNaN","NaN","numeric","parseMatrixWidget","prefix","suffix","cursorPosition","matrixBoardSize","parseMeasurerWidget","image","rulerPixels","rulerLength","parseMoleculeRendererWidget","widgetId","rotationAngle","smiles","emptyStringToNull","parseNumberLineWidget","labelRange","labelStyle","labelTicks","isTickCtrl","isInequality","divisionRange","numDivisions","snapDivisions","correctRel","correctX","initialX","parseMathFormat","parseSimplify","deprecatedSimplifyValuesToRequired","parseNumericInputWidget","status","strict","labelText","coefficient","parseRenderer","largeToAuto","parseOrdererWidget","correctOptions","otherOptions","layout","parsePhetSimulationWidget","description","plotterPlotTypes","parsePlotterWidget","maxY","scaleY","labelInterval","snapsPerLine","starting","picUrl","picSize","picBoxHeight","plotDimensions","parsePythonProgramWidget","deriveNumCorrect","filter","c","parseWidgetsMapOrUndefined","id","generateChoiceId","parseOnePerLine","parseNoneOfTheAbove","version3","parseRadioWidgetV3","numCorrect","rationale","isNoneOfTheAbove","hasNoneOfTheAbove","countChoices","randomize","multipleSelect","deselectEnabled","parseRadioWidgetV2","clue","onePerLine","displayCount","noneOfTheAbove","parseRadioWidgetV1","parseRadioWidgetV0","migrateV2toV3","choice","_","rest","parseRadioWidget","parseSorterWidget","parseTableWidget","headers","rows","columns","parseVideoWidget","location","parseStringToNonNegativeInt","parseWidgetIdComponents","widgetsMap","entryResult","parseWidgetsMapEntry","widgetMap","idComponentsResult","split","n","parseAndAssign","widgetResult","parseDeprecatedWidget","metadata","parseHint","replace","booleanOrFalse","parsePerseusAnswerArea","calculator","financialCalculatorMonthlyPayment","financialCalculatorTotalAmount","financialCalculatorTimeToPayOff","periodicTable","periodicTableWithKey","parsePerseusItem","hints","answerArea","coordPair","parseAbsoluteValueBranch","parseExponentialBranch","parseLinearBranch","parseLogarithmBranch","parseQuadraticBranch","parseSinusoidBranch","parseTangentBranch","parseAndMigratePerseusItem","data","migrateAndTypecheckPerseusItem","invalidObject","deepClone","obj","Errors","freeze","Unknown","Internal","InvalidInput","NotAllowed","TransientService","Service","PerseusError","Error","mapObject","lambda","forEach","Registry","throwIfUnregistered","anythingRegistered","has","hasOwnProperty","contents","get","set","seededRNG","seed","randomSeed","Date","getTime","defaultRows","defaultColumns","fill","getCurrentVersion","widgetLogic","getPublicWidgetOptionsFunction","getPublicWidgetOptions","getDefaultWidgetOptions","defaultWidgetOptions","getSupportedAlignments","supportedAlignments","applyDefaultsToWidget","oldWidgetInfo","latestVersion","defaultOptions","widgetType","applyDefaultsToWidgets","oldWidgetOptions","splitPerseusRenderer","original","clone","originalWidgets","upgradedWidgets","splitWidgets","publicWidgetOptionsFun","splitPerseusItem","item","splitPerseusItemJSON","parseResult","SyntaxError"],"mappings":"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"}
1
+ {"version":3,"file":"index.item-splitting.js","sources":["../../src/parse-perseus-json/result.ts","../../src/parse-perseus-json/error-tracking-parse-context.ts","../../src/parse-perseus-json/object-path.ts","../../src/parse-perseus-json/parse-failure-detail.ts","../../src/parse-perseus-json/parse.ts","../../src/parse-perseus-json/general-purpose-parsers/any.ts","../../src/parse-perseus-json/general-purpose-parsers/array.ts","../../src/parse-perseus-json/general-purpose-parsers/boolean.ts","../../src/parse-perseus-json/general-purpose-parsers/constant.ts","../../src/parse-perseus-json/general-purpose-parsers/defaulted.ts","../../src/parse-perseus-json/general-purpose-parsers/enumeration.ts","../../src/parse-perseus-json/general-purpose-parsers/is-plain-object.ts","../../src/parse-perseus-json/general-purpose-parsers/nullable.ts","../../src/parse-perseus-json/general-purpose-parsers/number.ts","../../src/parse-perseus-json/general-purpose-parsers/object.ts","../../src/parse-perseus-json/general-purpose-parsers/optional.ts","../../src/parse-perseus-json/general-purpose-parsers/pair.ts","../../src/parse-perseus-json/general-purpose-parsers/pipe-parsers.ts","../../src/parse-perseus-json/general-purpose-parsers/record.ts","../../src/parse-perseus-json/general-purpose-parsers/string.ts","../../src/parse-perseus-json/general-purpose-parsers/trio.ts","../../src/parse-perseus-json/general-purpose-parsers/union.ts","../../src/parse-perseus-json/perseus-parsers/perseus-image-detail.ts","../../src/parse-perseus-json/perseus-parsers/images-map.ts","../../src/parse-perseus-json/perseus-parsers/widget.ts","../../src/parse-perseus-json/perseus-parsers/categorizer-widget.ts","../../src/parse-perseus-json/perseus-parsers/cs-program-widget.ts","../../src/parse-perseus-json/perseus-parsers/definition-widget.ts","../../src/parse-perseus-json/perseus-parsers/dropdown-widget.ts","../../src/parse-perseus-json/perseus-parsers/explanation-widget.ts","../../src/keypad.ts","../../src/widgets/expression/derive-extra-keys.ts","../../src/parse-perseus-json/general-purpose-parsers/convert.ts","../../src/parse-perseus-json/perseus-parsers/expression-keys.ts","../../src/parse-perseus-json/perseus-parsers/legacy-button-sets.ts","../../src/parse-perseus-json/perseus-parsers/versioned-widget-options.ts","../../src/parse-perseus-json/perseus-parsers/expression-widget.ts","../../src/parse-perseus-json/perseus-parsers/free-response-widget.ts","../../src/parse-perseus-json/perseus-parsers/graded-group-widget.ts","../../src/parse-perseus-json/perseus-parsers/graded-group-set-widget.ts","../../src/parse-perseus-json/general-purpose-parsers/discriminated-union.ts","../../src/parse-perseus-json/perseus-parsers/grapher-widget.ts","../../src/parse-perseus-json/perseus-parsers/group-widget.ts","../../src/parse-perseus-json/perseus-parsers/iframe-widget.ts","../../src/parse-perseus-json/general-purpose-parsers/string-to-number.ts","../../src/parse-perseus-json/perseus-parsers/perseus-image-background.ts","../../src/parse-perseus-json/perseus-parsers/image-widget.ts","../../src/parse-perseus-json/perseus-parsers/input-number-widget.ts","../../src/parse-perseus-json/perseus-parsers/interaction-widget.ts","../../src/parse-perseus-json/perseus-parsers/interactive-graph-widget.ts","../../src/parse-perseus-json/perseus-parsers/label-image-widget.ts","../../src/parse-perseus-json/perseus-parsers/matcher-widget.ts","../../src/parse-perseus-json/perseus-parsers/matrix-widget.ts","../../src/parse-perseus-json/perseus-parsers/measurer-widget.ts","../../src/parse-perseus-json/perseus-parsers/molecule-renderer-widget.ts","../../src/parse-perseus-json/perseus-parsers/number-line-widget.ts","../../src/parse-perseus-json/perseus-parsers/numeric-input-widget.ts","../../src/parse-perseus-json/perseus-parsers/orderer-widget.ts","../../src/parse-perseus-json/perseus-parsers/phet-simulation-widget.ts","../../src/parse-perseus-json/perseus-parsers/plotter-widget.ts","../../src/parse-perseus-json/perseus-parsers/python-program-widget.ts","../../src/widgets/radio/derive-num-correct.ts","../../src/parse-perseus-json/perseus-parsers/radio-widget.ts","../../src/parse-perseus-json/perseus-parsers/sorter-widget.ts","../../src/parse-perseus-json/perseus-parsers/table-widget.ts","../../src/parse-perseus-json/perseus-parsers/video-widget.ts","../../src/parse-perseus-json/perseus-parsers/widget-id-components.ts","../../src/parse-perseus-json/perseus-parsers/widgets-map.ts","../../src/parse-perseus-json/perseus-parsers/perseus-renderer.ts","../../src/parse-perseus-json/perseus-parsers/perseus-article.ts","../../src/parse-perseus-json/perseus-parsers/hint.ts","../../src/parse-perseus-json/perseus-parsers/perseus-answer-area.ts","../../src/parse-perseus-json/perseus-parsers/perseus-item.ts","../../src/parse-perseus-json/perseus-parsers/grapher-user-input.ts","../../src/parse-perseus-json/index.ts","../../src/utils/deep-clone.ts","../../src/error/errors.ts","../../src/error/perseus-error.ts","../../src/utils/objective_.ts","../../src/utils/registry.ts","../../src/utils/random-util.ts","../../src/widgets/table/index.ts","../../src/widgets/core-widget-registry.ts","../../src/widgets/apply-defaults.ts","../../src/utils/split-perseus-renderer.ts","../../src/utils/split-perseus-item.ts"],"sourcesContent":["import invariant from \"tiny-invariant\";\n\nexport type Result<S, F> = Success<S> | Failure<F>;\n\nexport type Success<T> = {type: \"success\"; value: T};\nexport type Failure<T> = {type: \"failure\"; detail: T};\n\nexport function success<T>(value: T): Success<T> {\n return {type: \"success\", value};\n}\n\nexport function failure<T>(detail: T): Failure<T> {\n return {type: \"failure\", detail};\n}\n\nexport function isFailure<S, F>(result: Result<S, F>): result is Failure<F> {\n return result.type === \"failure\";\n}\n\nexport function isSuccess<S, F>(result: Result<S, F>): result is Success<S> {\n return result.type === \"success\";\n}\n\nexport function assertFailure<S, F>(\n result: Result<S, F>,\n): asserts result is Failure<F> {\n invariant(\n isFailure(result),\n \"expected result to be a Failure, but got a Success\",\n );\n}\n\nexport function assertSuccess<S, F>(\n result: Result<S, F>,\n): asserts result is Success<S> {\n invariant(\n isSuccess(result),\n \"expected result to be a Success, but got a Failure\",\n );\n}\n\n/**\n * @returns a function that transforms the `detail` value of any Failure result\n * passed to it, and leaves Success results unchanged. `mapFailure` is curried\n * for easy composition with Array.map(), mu-lambda's pipe(), etc.\n * @param f the function to apply to Failure `detail`s.\n */\nexport function mapFailure<S, DetailIn, DetailOut>(\n f: (detail: DetailIn) => DetailOut,\n): (result: Result<S, DetailIn>) => Result<S, DetailOut> {\n return (result) => {\n if (isFailure(result)) {\n return failure(f(result.detail));\n }\n return result;\n };\n}\n\n// Result's `all` function is similar to Promise.all: given an array of\n// results, it returns success if all succeeded, and failure if any failed.\nexport function all<S, F>(\n results: Array<Result<S, F>>,\n combineFailureDetails: (a: F, b: F) => F = (a) => a,\n): Result<S[], F> {\n const values: S[] = [];\n const failureDetails: F[] = [];\n for (const result of results) {\n if (result.type === \"success\") {\n values.push(result.value);\n } else {\n failureDetails.push(result.detail);\n }\n }\n\n if (failureDetails.length > 0) {\n return failure(failureDetails.reduce(combineFailureDetails));\n }\n return success(values);\n}\n","import {failure, success} from \"./result\";\n\nimport type {ParseContext, Mismatch, PathSegment} from \"./parser-types\";\nimport type {Failure, Success} from \"./result\";\n\nexport class ErrorTrackingParseContext implements ParseContext {\n constructor(private readonly path: PathSegment[]) {}\n\n failure(\n expected: string | string[],\n badValue: unknown,\n ): Failure<Mismatch[]> {\n return failure([\n {\n expected: wrapInArray(expected),\n badValue,\n path: this.path,\n },\n ]);\n }\n\n forSubtree(key: PathSegment): ParseContext {\n return new ErrorTrackingParseContext([...this.path, key]);\n }\n\n success<T>(value: T): Success<T> {\n return success(value);\n }\n}\n\nfunction wrapInArray(a: string | string[]): string[] {\n return Array.isArray(a) ? a : [a];\n}\n","import type {PathSegment} from \"./parser-types\";\n\nexport function formatPath(path: PathSegment[]): string {\n return \"(root)\" + path.map(formatPathSegment).join(\"\");\n}\n\nfunction formatPathSegment(segment: PathSegment): string {\n if (typeof segment === \"string\") {\n return validIdentifier.test(segment)\n ? \".\" + segment\n : `[${JSON.stringify(segment)}]`;\n }\n return `[${segment.toString()}]`;\n}\n\nconst validIdentifier = /^[A-Za-z$_][A-Za-z$_0-9]*$/;\n","import {formatPath} from \"./object-path\";\n\nimport type {Mismatch} from \"./parser-types\";\n\nexport function message(failure: Mismatch): string {\n const expected = conjoin(failure.expected);\n const path = formatPath(failure.path);\n const badValue = JSON.stringify(failure.badValue);\n return `At ${path} -- expected ${expected}, but got ${badValue}`;\n}\n\nfunction conjoin(items: string[]): string {\n switch (items.length) {\n // FUTURE(benchristel): handle 0 if this is reused elsewhere.\n case 1:\n return items[0];\n case 2:\n return items.join(\" or \");\n default: {\n const allButLast = items.slice(0, items.length - 1);\n const last = items[items.length - 1];\n return allButLast.join(\", \") + \", or \" + last;\n }\n }\n}\n","import {ErrorTrackingParseContext} from \"./error-tracking-parse-context\";\nimport {message} from \"./parse-failure-detail\";\nimport {failure, isFailure} from \"./result\";\n\nimport type {Parser} from \"./parser-types\";\nimport type {Result} from \"./result\";\n\nexport function parse<T>(value: unknown, parser: Parser<T>): Result<T, string> {\n const result = parser(value, new ErrorTrackingParseContext([]));\n if (isFailure(result)) {\n return failure(result.detail.map(message).join(\"; \"));\n }\n return result;\n}\n","import type {Parser} from \"../parser-types\";\n\nexport const any: Parser<any> = (rawValue, ctx) => ctx.success(rawValue);\n","import * as Result from \"../result\";\n\nimport type {ParseContext, Parser} from \"../parser-types\";\n\nexport function array<T>(elementParser: Parser<T>): Parser<T[]> {\n return (rawValue: unknown, ctx: ParseContext) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n const elementResults = rawValue.map((elem, i) =>\n elementParser(elem, ctx.forSubtree(i)),\n );\n return Result.all(elementResults, concat);\n };\n}\n\n/**\n * Like the standard `array` parser, but passes the array index to a parser factory function.\n * This allows element parsers to generate index-based default values.\n */\nexport function arrayWithIndex<T>(\n elementParserFactory: (index: number) => Parser<T>,\n): Parser<T[]> {\n return (rawValue: unknown, ctx: ParseContext) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n\n const elementResults = rawValue.map((elem, index) => {\n const elementParser = elementParserFactory(index);\n return elementParser(elem, ctx.forSubtree(index));\n });\n\n return Result.all(elementResults, concat);\n };\n}\n\nfunction concat<T>(a: T[], b: T[]): T[] {\n return [...a, ...b];\n}\n","import type {ParseContext, ParseResult} from \"../parser-types\";\n\nexport function boolean(\n rawValue: unknown,\n ctx: ParseContext,\n): ParseResult<boolean> {\n if (typeof rawValue === \"boolean\") {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"boolean\", rawValue);\n}\n","import type {Parser} from \"../parser-types\";\n\ntype Primitive = string | number | boolean | null | undefined;\n\nexport function constant<T extends Primitive>(acceptedValue: T): Parser<T> {\n return (rawValue, ctx) => {\n if (!Object.is(rawValue, acceptedValue)) {\n return ctx.failure(String(JSON.stringify(acceptedValue)), rawValue);\n }\n return ctx.success(acceptedValue);\n };\n}\n","import {success} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function defaulted<T>(\n parser: Parser<T>,\n fallback: (missingValue: null | undefined) => NoInfer<T>,\n): Parser<T> {\n return (rawValue, ctx) => {\n if (rawValue == null) {\n return success(fallback(rawValue));\n }\n return parser(rawValue, ctx);\n };\n}\n\n/**\n * Similar to defaulted, but specifically handles empty strings as invalid.\n *\n * @param fallback Function that generates a fallback value for empty/missing strings\n * @returns Parser that validates non-empty strings or uses fallback\n */\nexport function defaultedNonEmptyString(\n fallback: () => string,\n): Parser<string> {\n return (rawValue, ctx) => {\n // Handle missing/null values - use fallback\n if (rawValue == null) {\n return ctx.success(fallback());\n }\n\n // Handle string values\n if (typeof rawValue === \"string\") {\n // If empty or whitespace-only, use fallback\n if (rawValue.trim() === \"\") {\n return ctx.success(fallback());\n }\n // Valid non-empty string, use as-is\n return ctx.success(rawValue);\n }\n\n // Invalid type, expect string\n return ctx.failure(\"string\", rawValue);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function enumeration<T extends readonly string[]>(\n ...acceptedValues: T\n): Parser<T[number]> {\n return (rawValue, ctx) => {\n if (typeof rawValue === \"string\") {\n const index = acceptedValues.indexOf(rawValue);\n if (index > -1) {\n return ctx.success(acceptedValues[index]);\n }\n }\n const expected = acceptedValues.map((v) => JSON.stringify(v));\n return ctx.failure(expected, rawValue);\n };\n}\n","// See the tests for an explanation of why we need this.\nconst objectConstructorString = Object.prototype.constructor.toString();\n\nconst functionToString = Function.prototype.toString;\n\n/**\n * Checks whether a value is a plain JS object (e.g. one constructed with `{}`\n * literal syntax or `Object.create(null)`. Returns true given a plain object\n * from another realm.\n *\n * @param x - the value to check for objectiness\n */\nexport function isPlainObject(x: unknown): x is Record<keyof any, unknown> {\n if (x == null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(x);\n if (prototype == null) {\n return true;\n }\n return (\n typeof prototype.constructor === \"function\" &&\n functionToString.call(prototype.constructor) === objectConstructorString\n );\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function nullable<T>(parseValue: Parser<T>): Parser<T | null> {\n return (rawValue, ctx) => {\n if (rawValue === null) {\n return ctx.success(rawValue);\n }\n return parseValue(rawValue, ctx);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\n/**\n * Returns success if the `rawValue` is a finite real number. Fails for any\n * other value.\n */\nexport const number: Parser<number> = (rawValue, ctx) => {\n if (typeof rawValue === \"number\" && Number.isFinite(rawValue)) {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"number\", rawValue);\n};\n","import {failure, isSuccess} from \"../result\";\n\nimport {isPlainObject} from \"./is-plain-object\";\n\nimport type {OptionalizeProperties} from \"./object-types\";\nimport type {Mismatch, ParsedValue, Parser} from \"../parser-types\";\n\ntype ObjectSchema = Record<keyof any, Parser<any>>;\n\n/**\n * Creates an object parser for the given schema. At runtime,\n * `objectWithAllPropertiesRequired` behaves identically to `object`; the only\n * difference is in the return type of the parser. While `object` types\n * properties as optional if their values can be undefined,\n * `objectWithAllPropertiesRequired` types all properties as required.\n *\n * For example:\n * - `object({foo: optional(string), bar: string})` returns\n * `Parser<{foo?: undefined | string; bar: string}>`.\n * - `objectWithAllPropertiesRequired({foo: optional(string), bar: string})` returns\n * `Parser<{foo: undefined | string; bar: string}>`\n * (note: no question mark on `foo`).\n *\n * @see object\n */\nexport function objectWithAllPropertiesRequired<S extends ObjectSchema>(\n schema: S,\n): Parser<{[K in keyof S]: ParsedValue<S[K]>}> {\n // eslint-disable-next-line no-restricted-syntax\n return object(schema) as any;\n}\n\n/**\n * Given a `schema`, returns an object parser. The parser accepts an object\n * iff each sub-parser in the `schema` accepts the object's corresponding\n * property value.\n *\n * The returned parser filters out properties not present in the schema. If\n * you don't want this behavior, try `looseObject`.\n */\nexport function object<S extends ObjectSchema>(\n schema: S,\n): Parser<OptionalizeProperties<{[K in keyof S]: ParsedValue<S[K]>}>> {\n return objectParserWithInitializer(\n // Initialize the parsed value to an empty object, ensuring that\n // it only contains keys listed in the `schema`.\n () => ({}),\n schema,\n );\n}\n\n/**\n * Given a `schema`, returns an object parser. The parser accepts an object\n * iff each sub-parser in the `schema` accepts the object's corresponding\n * property value.\n *\n * The parser preserves any object properties not present in the schema. If\n * you want unrecognized properties to be filtered out instead, try `object`.\n */\nexport function looseObject<S extends ObjectSchema>(\n schema: S,\n): Parser<OptionalizeProperties<{[K in keyof S]: ParsedValue<S[K]>}>> {\n return objectParserWithInitializer(\n // Initialize the parsed value from the raw value's properties, so\n // properties not listed in the schema are preserved.\n (rawValue) => ({...rawValue}),\n schema,\n );\n}\n\ntype AnyObject = Record<keyof any, unknown>;\n\nfunction objectParserWithInitializer<S extends ObjectSchema>(\n initializeParsedValue: (rawValue: AnyObject) => AnyObject,\n schema: S,\n): Parser<OptionalizeProperties<{[K in keyof S]: ParsedValue<S[K]>}>> {\n return (rawValue, ctx) => {\n if (!isPlainObject(rawValue)) {\n return ctx.failure(\"object\", rawValue);\n }\n\n const parsed: any = initializeParsedValue(rawValue);\n const mismatches: Mismatch[] = [];\n for (const [prop, propParser] of Object.entries(schema)) {\n const result = propParser(rawValue[prop], ctx.forSubtree(prop));\n if (isSuccess(result)) {\n if (result.value !== undefined || prop in rawValue) {\n parsed[prop] = result.value;\n }\n } else {\n mismatches.push(...result.detail);\n }\n }\n\n if (mismatches.length > 0) {\n return failure(mismatches);\n }\n return ctx.success(parsed);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function optional<T>(parseValue: Parser<T>): Parser<T | undefined> {\n return (rawValue, ctx) => {\n if (rawValue === undefined) {\n return ctx.success(rawValue);\n }\n return parseValue(rawValue, ctx);\n };\n}\n","import {isFailure} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function pair<A, B>(\n parseA: Parser<A>,\n parseB: Parser<B>,\n): Parser<[A, B]> {\n return (rawValue, ctx) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n if (rawValue.length !== 2) {\n return ctx.failure(\"array of length 2\", rawValue);\n }\n const [rawA, rawB] = rawValue;\n const resultA = parseA(rawA, ctx.forSubtree(0));\n if (isFailure(resultA)) {\n return resultA;\n }\n const resultB = parseB(rawB, ctx.forSubtree(1));\n if (isFailure(resultB)) {\n return resultB;\n }\n\n return ctx.success([resultA.value, resultB.value]);\n };\n}\n","import {isFailure} from \"../result\";\n\nimport type {\n ParseContext,\n ParsedValue,\n Parser,\n PartialParser,\n} from \"../parser-types\";\n\nexport function pipeParsers<T>(p: Parser<T>): ParserPipeline<T> {\n return new ParserPipeline(p);\n}\n\nexport class ParserPipeline<T> {\n constructor(public readonly parser: Parser<T>) {}\n\n then<U>(nextParser: PartialParser<T, U>): ParserPipeline<U> {\n return new ParserPipeline<U>(composeParsers(this.parser, nextParser));\n }\n}\n\nfunction composeParsers<\n A extends Parser<any>,\n B extends PartialParser<ParsedValue<A>, any>,\n>(parserA: A, parserB: B): Parser<ParsedValue<B>> {\n return (rawValue: unknown, ctx: ParseContext) => {\n const partialResult = parserA(rawValue, ctx);\n if (isFailure(partialResult)) {\n return partialResult;\n }\n\n return parserB(partialResult.value, ctx);\n };\n}\n","import {failure, isFailure, isSuccess} from \"../result\";\n\nimport {isPlainObject} from \"./is-plain-object\";\n\nimport type {Mismatch, Parser} from \"../parser-types\";\n\nexport function record<K extends string, V>(\n parseKey: Parser<K>,\n parseValue: Parser<V>,\n): Parser<Record<K, V>> {\n return (rawValue, ctx) => {\n if (!isPlainObject(rawValue)) {\n return ctx.failure(\"object\", rawValue);\n }\n\n // eslint-disable-next-line no-restricted-syntax\n const result = {} as Record<K, V>;\n const mismatches: Mismatch[] = [];\n for (const [key, value] of Object.entries(rawValue)) {\n const entryCtx = ctx.forSubtree(key);\n const keyResult = parseKey(key, entryCtx);\n if (isFailure(keyResult)) {\n mismatches.push(...keyResult.detail);\n }\n\n const valueResult = parseValue(value, entryCtx);\n if (isFailure(valueResult)) {\n mismatches.push(...valueResult.detail);\n }\n\n if (isSuccess(keyResult) && isSuccess(valueResult)) {\n result[keyResult.value] = valueResult.value;\n }\n }\n\n if (mismatches.length > 0) {\n return failure(mismatches);\n }\n return ctx.success(result);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport const string: Parser<string> = (rawValue, ctx) => {\n if (typeof rawValue === \"string\") {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"string\", rawValue);\n};\n","import {isFailure} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function trio<A, B, C>(\n parseA: Parser<A>,\n parseB: Parser<B>,\n parseC: Parser<C>,\n): Parser<[A, B, C]> {\n return (rawValue, ctx) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n if (rawValue.length !== 3) {\n return ctx.failure(\"array of length 3\", rawValue);\n }\n\n const resultA = parseA(rawValue[0], ctx.forSubtree(0));\n if (isFailure(resultA)) {\n return resultA;\n }\n\n const resultB = parseB(rawValue[1], ctx.forSubtree(1));\n if (isFailure(resultB)) {\n return resultB;\n }\n\n const resultC = parseC(rawValue[2], ctx.forSubtree(2));\n if (isFailure(resultC)) {\n return resultC;\n }\n\n return ctx.success([resultA.value, resultB.value, resultC.value]);\n };\n}\n","import {isSuccess} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function union<T>(parseBranch: Parser<T>): UnionBuilder<T> {\n return new UnionBuilder(parseBranch);\n}\n\nexport class UnionBuilder<T> {\n constructor(public parser: Parser<T>) {}\n\n or<New>(newBranch: Parser<New>) {\n return new UnionBuilder<T | New>(either(this.parser, newBranch));\n }\n}\n\nfunction either<A, B>(parseA: Parser<A>, parseB: Parser<B>): Parser<A | B> {\n return (rawValue, ctx) => {\n const resultA = parseA(rawValue, ctx);\n if (isSuccess(resultA)) {\n return resultA;\n }\n\n return parseB(rawValue, ctx);\n };\n}\n","import {number, object} from \"../general-purpose-parsers\";\n\nexport const parsePerseusImageDetail = object({\n width: number,\n height: number,\n});\n","import {record, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusImageDetail} from \"./perseus-image-detail\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {PerseusImageDetail} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseImages: Parser<{[key: string]: PerseusImageDetail}> =\n defaulted(record(string, parsePerseusImageDetail), () => ({}));\n","import {\n boolean,\n nullable,\n number,\n object,\n objectWithAllPropertiesRequired,\n optional,\n string,\n} from \"../general-purpose-parsers\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {WidgetOptions} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport function parseWidget<Type extends string, Options extends object>(\n parseType: Parser<Type>,\n parseOptions: Parser<Options>,\n): Parser<WidgetOptions<Type, Options>> {\n return objectWithAllPropertiesRequired({\n type: parseType,\n static: optional(boolean),\n graded: optional(boolean),\n alignment: optional(string),\n options: parseOptions,\n key: optional(nullable(number)),\n version: optional(\n object({\n major: number,\n minor: number,\n }),\n ),\n });\n}\n\nexport function parseWidgetWithVersion<\n Version extends {major: number; minor: number} | undefined,\n Type extends string,\n Options extends object,\n>(\n parseVersion: Parser<Version>,\n parseType: Parser<Type>,\n parseOptions: Parser<Options>,\n): Parser<WidgetOptions<Type, Options>> {\n return objectWithAllPropertiesRequired({\n type: parseType,\n static: optional(boolean),\n graded: optional(boolean),\n alignment: optional(string),\n options: parseOptions,\n key: optional(nullable(number)),\n version: parseVersion,\n });\n}\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseCategorizerWidget = parseWidget(\n constant(\"categorizer\"),\n object({\n items: array(string),\n categories: array(string),\n randomizeItems: defaulted(boolean, () => false),\n static: defaulted(boolean, () => false),\n values: defaulted(array(defaulted(number, () => 0)), () => []),\n }),\n);\n","import {\n any,\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseCSProgramWidget = parseWidget(\n constant(\"cs-program\"),\n object({\n programID: string,\n programType: any,\n settings: array(object({name: string, value: string})),\n showEditor: boolean,\n showButtons: boolean,\n height: number,\n }),\n);\n","import {boolean, constant, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseDefinitionWidget = parseWidget(\n constant(\"definition\"),\n object({\n togglePrompt: string,\n definition: string,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n object,\n string,\n optional,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseDropdownWidget = parseWidget(\n constant(\"dropdown\"),\n object({\n placeholder: defaulted(string, () => \"\"),\n ariaLabel: optional(string),\n visibleLabel: optional(string),\n static: defaulted(boolean, () => false),\n choices: array(\n object({\n content: string,\n correct: defaulted(boolean, () => false),\n }),\n ),\n }),\n);\n","import {boolean, constant, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nexport const parseExplanationWidget = parseWidget(\n constant(\"explanation\"),\n object({\n showPrompt: string,\n hidePrompt: string,\n explanation: string,\n // We wrap parseWidgetsMap in a function here to make sure it is not\n // referenced before it is defined. There is an import cycle between\n // this file and widgets-map.ts that could cause it to be undefined.\n widgets: defaulted(\n (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n () => ({}),\n ),\n static: defaulted(boolean, () => false),\n }),\n);\n","export const KeypadKeys = [\n \"PLUS\",\n \"MINUS\",\n \"NEGATIVE\",\n \"TIMES\",\n \"DIVIDE\",\n \"DECIMAL\",\n \"PERIOD\",\n \"PERCENT\",\n \"CDOT\",\n \"EQUAL\",\n \"NEQ\",\n \"GT\",\n \"LT\",\n \"GEQ\",\n \"LEQ\", // mobile native only\n \"FRAC_INCLUSIVE\", // mobile native only\n \"FRAC_EXCLUSIVE\", // mobile native only\n \"FRAC\",\n \"EXP\",\n \"EXP_2\",\n \"EXP_3\",\n \"SQRT\",\n \"CUBE_ROOT\",\n \"RADICAL\",\n \"LEFT_PAREN\",\n \"RIGHT_PAREN\",\n \"LN\",\n \"LOG\",\n \"LOG_N\",\n \"SIN\",\n \"COS\",\n \"TAN\",\n \"PI\",\n \"THETA\",\n \"UP\",\n \"RIGHT\",\n \"DOWN\",\n \"LEFT\",\n \"BACKSPACE\",\n \"DISMISS\",\n \"JUMP_OUT_PARENTHESES\",\n \"JUMP_OUT_EXPONENT\",\n \"JUMP_OUT_BASE\",\n \"JUMP_INTO_NUMERATOR\",\n \"JUMP_OUT_NUMERATOR\",\n \"JUMP_OUT_DENOMINATOR\", // Multi-functional keys.\n \"NUM_0\",\n \"NUM_1\",\n \"NUM_2\",\n \"NUM_3\",\n \"NUM_4\",\n \"NUM_5\",\n \"NUM_6\",\n \"NUM_7\",\n \"NUM_8\",\n \"NUM_9\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n] as const;\n\nexport type KeypadKey = (typeof KeypadKeys)[number];\n\nexport type KeypadType = \"FRACTION\" | \"EXPRESSION\";\n\nexport type KeypadConfiguration = {\n keypadType: KeypadType;\n extraKeys?: KeypadKey[];\n times?: boolean;\n scientific?: boolean;\n};\n\n// Used by KeypadContext to pass around a renderer reference\nexport interface KeypadContextRendererInterface {\n blur(): void;\n}\n","import * as KAS from \"@khanacademy/kas\";\n\nimport {type KeypadKey, KeypadKeys} from \"../../keypad\";\n\nimport type {PerseusExpressionWidgetOptions} from \"../../data-schema\";\n\n/**\n * Scrape the answer forms for any variables or contants (like Pi)\n * that need to be included as keys on the keypad.\n */\nfunction deriveExtraKeys(\n widgetOptions: PerseusExpressionWidgetOptions,\n): KeypadKey[] {\n if (widgetOptions.extraKeys) {\n return widgetOptions.extraKeys;\n }\n\n // If there are no extra symbols available, we include Pi anyway, so\n // that the \"extra symbols\" button doesn't appear empty.\n const defaultKeys: KeypadKey[] = [\"PI\"];\n\n if (widgetOptions.answerForms == null) {\n return defaultKeys;\n }\n\n // Extract any and all variables and constants from the answer forms.\n const uniqueExtraVariables: Partial<Record<KeypadKey, boolean>> = {};\n const uniqueExtraConstants: Partial<Record<KeypadKey, boolean>> = {};\n for (const answerForm of widgetOptions.answerForms) {\n const maybeExpr = KAS.parse(answerForm.value, widgetOptions);\n if (maybeExpr.parsed) {\n const expr = maybeExpr.expr;\n\n // The keypad expects Greek letters to be capitalized (e.g., it\n // requires `PI` instead of `pi`). Right now, it only supports Pi\n // and Theta, so we special-case.\n const isGreek = (symbol: any) =>\n symbol === \"pi\" || symbol === \"theta\";\n const toKey = (symbol: any) =>\n isGreek(symbol) ? symbol.toUpperCase() : symbol;\n const isKey = (key: string): key is KeypadKey =>\n // eslint-disable-next-line no-restricted-syntax\n KeypadKeys.includes(key as KeypadKey);\n\n for (const variable of expr.getVars()) {\n const maybeKey = toKey(variable);\n if (isKey(maybeKey)) {\n uniqueExtraVariables[maybeKey] = true;\n }\n }\n for (const constant of expr.getConsts()) {\n const maybeKey = toKey(constant);\n if (isKey(maybeKey)) {\n uniqueExtraConstants[maybeKey] = true;\n }\n }\n }\n }\n\n // eslint-disable-next-line no-restricted-syntax\n const extraVariables = Object.keys(\n uniqueExtraVariables,\n ).sort() as ReadonlyArray<KeypadKey>;\n\n // eslint-disable-next-line no-restricted-syntax\n const extraConstants = Object.keys(\n uniqueExtraConstants,\n ).sort() as ReadonlyArray<KeypadKey>;\n\n const extraKeys = [...extraVariables, ...extraConstants];\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!extraKeys.length) {\n return defaultKeys;\n }\n\n return extraKeys;\n}\n\nexport default deriveExtraKeys;\n","import type {PartialParser} from \"../parser-types\";\n\n// Given a function, creates a PartialParser that converts one type to another\n// using that function. The returned parser never fails.\nexport function convert<A, B>(f: (value: A) => B): PartialParser<A, B> {\n return (rawValue, ctx) => ctx.success(f(rawValue));\n}\n","import {enumeration} from \"../general-purpose-parsers\";\n\nexport const keypadKeys = enumeration(\n \"PLUS\",\n \"MINUS\",\n \"NEGATIVE\",\n \"TIMES\",\n \"DIVIDE\",\n \"DECIMAL\",\n \"PERIOD\",\n \"PERCENT\",\n \"CDOT\",\n \"EQUAL\",\n \"NEQ\",\n \"GT\",\n \"LT\",\n \"GEQ\",\n \"LEQ\", // mobile native only\n \"FRAC_INCLUSIVE\", // mobile native only\n \"FRAC_EXCLUSIVE\", // mobile native only\n \"FRAC\",\n \"EXP\",\n \"EXP_2\",\n \"EXP_3\",\n \"SQRT\",\n \"CUBE_ROOT\",\n \"RADICAL\",\n \"LEFT_PAREN\",\n \"RIGHT_PAREN\",\n \"LN\",\n \"LOG\",\n \"LOG_N\",\n \"SIN\",\n \"COS\",\n \"TAN\",\n \"PI\",\n \"THETA\",\n \"UP\",\n \"RIGHT\",\n \"DOWN\",\n \"LEFT\",\n \"BACKSPACE\",\n \"DISMISS\",\n \"JUMP_OUT_PARENTHESES\",\n \"JUMP_OUT_EXPONENT\",\n \"JUMP_OUT_BASE\",\n \"JUMP_INTO_NUMERATOR\",\n \"JUMP_OUT_NUMERATOR\",\n \"JUMP_OUT_DENOMINATOR\", // Multi-functional keys.\n \"NUM_0\",\n \"NUM_1\",\n \"NUM_2\",\n \"NUM_3\",\n \"NUM_4\",\n \"NUM_5\",\n \"NUM_6\",\n \"NUM_7\",\n \"NUM_8\",\n \"NUM_9\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n);\n","import {array, enumeration} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nconst parseLegacyButtonSet = enumeration(\n \"basic\",\n \"basic+div\",\n \"trig\",\n \"prealgebra\",\n \"logarithms\",\n \"basic relations\",\n \"advanced relations\",\n \"scientific\",\n);\n\nexport const parseLegacyButtonSets = defaulted(\n array(parseLegacyButtonSet),\n // NOTE(benchristel): I copied the default buttonSets from\n // expression.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n () => [\n \"basic\" as const,\n \"trig\" as const,\n \"prealgebra\" as const,\n \"logarithms\" as const,\n ],\n);\n","import {\n isPlainObject,\n number,\n object,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {isFailure} from \"../result\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {Version} from \"../../data-schema\";\nimport type {ParseContext, Parser} from \"../parser-types\";\n\ntype Versioned = {\n version?: Version;\n};\n\n/**\n * Creates a parser for a widget options type with multiple major versions. Old\n * versions are migrated to the latest version. The parse fails if the input\n * data does not match any of the versions.\n *\n * @example\n * const parseOptions = versionedWidgetOptions(3, parseOptionsV3)\n * .withMigrationFrom(2, parseOptionsV2, migrateV2ToV3)\n * .withMigrationFrom(1, parseOptionsV1, migrateV1ToV2)\n * .withMigrationFrom(0, parseOptionsV0, migrateV0ToV1)\n * .parser;\n *\n * @param latestMajorVersion the latest major version of the widget options.\n * @param parseLatest a {@link Parser} for the latest version of the widget\n * options.\n * @returns a builder object, to which migrations from earlier versions can be\n * added. Migrations must be added in \"reverse chronological\" order as in the\n * example above.\n */\nexport function versionedWidgetOptions<Latest extends Versioned>(\n latestMajorVersion: number,\n parseLatest: Parser<Latest>,\n): VersionedWidgetOptionsParserBuilder<Latest, Latest> {\n return new VersionedWidgetOptionsParserBuilder(\n latestMajorVersion,\n parseLatest,\n (latest) => latest,\n (raw, ctx) =>\n ctx.failure(\"widget options with a known version number\", raw),\n );\n}\n\nclass VersionedWidgetOptionsParserBuilder<\n // The latest version of the widget options\n Latest extends Versioned,\n // A version of the widget options which we want to migrate to Latest.\n MigratableWidgetOptions extends Versioned,\n> {\n public parser: Parser<Latest>;\n\n constructor(\n majorVersion: number,\n parseThisVersion: Parser<MigratableWidgetOptions>,\n private migrateToLatest: (m: MigratableWidgetOptions) => Latest,\n private parseOtherVersions: Parser<Latest>,\n ) {\n const parseThisVersionAndMigrateToLatest = pipeParsers(\n parseThisVersion,\n ).then(convert(this.migrateToLatest)).parser;\n\n this.parser = (raw: unknown, ctx: ParseContext) => {\n if (!isPlainObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n\n const versionParseResult = parseVersionedObject(raw, ctx);\n if (isFailure(versionParseResult)) {\n return versionParseResult;\n }\n\n if (versionParseResult.value.version.major !== majorVersion) {\n return this.parseOtherVersions(raw, ctx);\n }\n\n return parseThisVersionAndMigrateToLatest(raw, ctx);\n };\n }\n\n /**\n * Add a migration from an old version of the widget options.\n */\n withMigrationFrom<Old extends Versioned>(\n majorVersion: number,\n parseOldVersion: Parser<Old>,\n migrateToNextVersion: (old: Old) => MigratableWidgetOptions,\n ): VersionedWidgetOptionsParserBuilder<Latest, Old> {\n const parseOtherVersions = this.parser;\n\n const migrateToLatest = (old: Old) =>\n this.migrateToLatest(migrateToNextVersion(old));\n\n return new VersionedWidgetOptionsParserBuilder(\n majorVersion,\n parseOldVersion,\n migrateToLatest,\n parseOtherVersions,\n );\n }\n}\n\nconst parseVersionedObject = object({\n version: defaulted(object({major: number, minor: number}), () => ({\n major: 0,\n minor: 0,\n })),\n});\n","// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport deriveExtraKeys from \"../../widgets/expression/derive-extra-keys\";\nimport {\n array,\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {keypadKeys} from \"./expression-keys\";\nimport {parseLegacyButtonSets} from \"./legacy-button-sets\";\nimport {versionedWidgetOptions} from \"./versioned-widget-options\";\nimport {parseWidgetWithVersion} from \"./widget\";\n\nimport type {ParsedValue} from \"../parser-types\";\n\nconst stringOrNumberOrNullOrUndefined = union(string)\n .or(number)\n .or(constant(null))\n .or(constant(undefined)).parser;\n\nfunction numberOrNullToString(v: string | number | null | undefined) {\n return typeof v === \"number\" || v === null ? String(v) : v;\n}\n\nconst parsePossiblyInvalidAnswerForm = object({\n // `value` is the possibly invalid part of this. It should always be a\n // string, but some answer forms don't have it. The Expression widget\n // ignores invalid values, so we can safely filter them out during parsing.\n value: optional(string),\n form: defaulted(boolean, () => false),\n simplify: defaulted(boolean, () => false),\n considered: enumeration(\"correct\", \"wrong\", \"ungraded\"),\n key: pipeParsers(stringOrNumberOrNullOrUndefined).then(\n convert(numberOrNullToString),\n ).parser,\n});\n\nfunction removeInvalidAnswerForms(\n possiblyInvalid: Array<ParsedValue<typeof parsePossiblyInvalidAnswerForm>>,\n) {\n return possiblyInvalid.flatMap((answerForm) => {\n const {value} = answerForm;\n if (value != null) {\n return [{...answerForm, value}];\n }\n return [];\n });\n}\n\nconst parseAnswerForms = pipeParsers(\n defaulted(array(parsePossiblyInvalidAnswerForm), () => []),\n).then(convert(removeInvalidAnswerForms)).parser;\n\nconst version2 = object({major: constant(2), minor: number});\nconst parseExpressionWidgetV2 = parseWidgetWithVersion(\n version2,\n constant(\"expression\"),\n object({\n answerForms: parseAnswerForms,\n functions: array(string),\n times: boolean,\n visibleLabel: optional(string),\n ariaLabel: optional(string),\n buttonSets: parseLegacyButtonSets,\n buttonsVisible: optional(enumeration(\"always\", \"never\", \"focused\")),\n extraKeys: optional(array(keypadKeys)),\n }),\n);\n\nconst version1 = object({major: constant(1), minor: number});\nconst parseExpressionWidgetV1 = parseWidgetWithVersion(\n version1,\n constant(\"expression\"),\n object({\n answerForms: parseAnswerForms,\n functions: array(string),\n times: boolean,\n visibleLabel: optional(string),\n ariaLabel: optional(string),\n buttonSets: parseLegacyButtonSets,\n buttonsVisible: optional(enumeration(\"always\", \"never\", \"focused\")),\n }),\n);\n\nfunction migrateV1ToV2(\n widget: ParsedValue<typeof parseExpressionWidgetV1>,\n): ParsedValue<typeof parseExpressionWidgetV2> {\n const {options} = widget;\n return {\n ...widget,\n version: {major: 2, minor: 0},\n options: {\n times: options.times,\n buttonSets: options.buttonSets,\n functions: options.functions,\n buttonsVisible: options.buttonsVisible,\n visibleLabel: options.visibleLabel,\n ariaLabel: options.ariaLabel,\n answerForms: options.answerForms,\n extraKeys: deriveExtraKeys(options) ?? [],\n },\n };\n}\n\nconst version0 = optional(object({major: constant(0), minor: number}));\nconst parseExpressionWidgetV0 = parseWidgetWithVersion(\n version0,\n constant(\"expression\"),\n object({\n functions: array(string),\n times: boolean,\n visibleLabel: optional(string),\n ariaLabel: optional(string),\n form: boolean,\n simplify: boolean,\n value: string,\n buttonSets: parseLegacyButtonSets,\n buttonsVisible: optional(enumeration(\"always\", \"never\", \"focused\")),\n }),\n);\n\nfunction migrateV0ToV1(\n widget: ParsedValue<typeof parseExpressionWidgetV0>,\n): ParsedValue<typeof parseExpressionWidgetV1> {\n const {options} = widget;\n return {\n ...widget,\n version: {major: 1, minor: 0},\n options: {\n times: options.times,\n // eslint-disable-next-line no-restricted-syntax\n buttonSets: options.buttonSets as any,\n functions: options.functions,\n buttonsVisible: options.buttonsVisible,\n visibleLabel: options.visibleLabel,\n ariaLabel: options.ariaLabel,\n\n answerForms: [\n {\n considered: \"correct\",\n form: options.form,\n simplify: options.simplify,\n value: options.value,\n },\n ],\n },\n };\n}\n\nexport const parseExpressionWidget = versionedWidgetOptions(\n 2,\n parseExpressionWidgetV2,\n)\n .withMigrationFrom(1, parseExpressionWidgetV1, migrateV1ToV2)\n .withMigrationFrom(0, parseExpressionWidgetV0, migrateV0ToV1).parser;\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {FreeResponseWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseFreeResponseWidget: Parser<FreeResponseWidget> = parseWidget(\n constant(\"free-response\"),\n object({\n allowUnlimitedCharacters: boolean,\n characterLimit: number,\n placeholder: string,\n question: string,\n scoringCriteria: array(\n object({\n text: string,\n }),\n ),\n }),\n);\n","import {\n boolean,\n constant,\n nullable,\n number,\n object,\n optional,\n pipeParsers,\n record,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nconst falseToNull = pipeParsers(constant(false)).then(\n convert(() => null),\n).parser;\nexport const parseGradedGroupWidgetOptions = object({\n title: defaulted(string, () => \"\"),\n hasHint: optional(nullable(boolean)),\n // This module has an import cycle with parsePerseusRenderer.\n // The anonymous function below ensures that we don't try to access\n // parsePerseusRenderer before it's defined.\n hint: union(falseToNull)\n .or(constant(null))\n .or(constant(undefined))\n .or((rawVal, ctx) => parsePerseusRenderer(rawVal, ctx)).parser,\n content: string,\n // This module has an import cycle with parseWidgetsMap.\n // The anonymous function below ensures that we don't try to access\n // parseWidgetsMap before it's defined.\n widgets: (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n widgetEnabled: optional(nullable(boolean)),\n immutableWidgets: optional(nullable(boolean)),\n images: record(\n string,\n object({\n width: number,\n height: number,\n }),\n ),\n});\n\nexport const parseGradedGroupWidget = parseWidget(\n constant(\"graded-group\"),\n parseGradedGroupWidgetOptions,\n);\n","import {array, constant, object} from \"../general-purpose-parsers\";\n\nimport {parseGradedGroupWidgetOptions} from \"./graded-group-widget\";\nimport {parseWidget} from \"./widget\";\n\nexport const parseGradedGroupSetWidget = parseWidget(\n constant(\"graded-group-set\"),\n object({gradedGroups: array(parseGradedGroupWidgetOptions)}),\n);\n","import {isPlainObject} from \"./is-plain-object\";\n\nimport type {ParseContext, Parser} from \"../parser-types\";\n\ntype Primitive = number | string | boolean | null | undefined;\n\n/**\n * discriminatedUnion() should be preferred over union() when parsing a\n * discriminated union type, because discriminatedUnion() produces more\n * understandable failure messages. It takes the discriminant as the source of\n * truth for which variant is to be parsed, and expects the other data to match\n * that variant.\n */\nexport function discriminatedUnionOn<DK extends string>(discriminantKey: DK) {\n const noMoreBranches: Parser<never> = (raw: unknown, ctx: ParseContext) => {\n if (!isPlainObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n return ctx\n .forSubtree(discriminantKey)\n .failure(\"a valid value\", raw[discriminantKey]);\n };\n\n return new DiscriminatedUnionBuilder(discriminantKey, noMoreBranches);\n}\n\nclass DiscriminatedUnionBuilder<\n DK extends string,\n Union extends {[k in DK]: Primitive},\n> {\n constructor(\n private discriminantKey: DK,\n public parser: Parser<Union>,\n ) {}\n\n withBranch<Variant extends {[k in DK]: Primitive}>(\n discriminantValue: Primitive,\n parseNewVariant: Parser<Variant>,\n ): DiscriminatedUnionBuilder<DK, Union | Variant> {\n const parseNewBranch = discriminatedUnionBranch(\n this.discriminantKey,\n discriminantValue,\n parseNewVariant,\n this.parser,\n );\n\n return new DiscriminatedUnionBuilder(\n this.discriminantKey,\n parseNewBranch,\n );\n }\n}\n\nfunction discriminatedUnionBranch<\n DK extends string,\n DV extends Primitive,\n Variant extends {[k in DK]: DV},\n Rest extends {[k in DK]: DV},\n>(\n discriminantKey: DK,\n discriminantValue: DV,\n parseVariant: Parser<Variant>,\n parseOtherBranches: Parser<Rest>,\n): Parser<Variant | Rest> {\n return (raw: unknown, ctx: ParseContext) => {\n if (!isPlainObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n\n if (raw[discriminantKey] === discriminantValue) {\n return parseVariant(raw, ctx);\n }\n\n return parseOtherBranches(raw, ctx);\n };\n}\n","import {\n array,\n boolean,\n constant,\n enumeration,\n nullable,\n number,\n object,\n optional,\n pair,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {Parser} from \"../parser-types\";\n\nconst pairOfNumbers = pair(number, number);\n\nconst pairOfPoints = pair(pairOfNumbers, pairOfNumbers);\n\nconst emptyArray: Parser<[]> = (rawVal, ctx) => {\n if (Array.isArray(rawVal) && rawVal.length === 0) {\n return ctx.success([]);\n }\n return ctx.failure(\"empty array\", rawVal);\n};\n\nconst parseCoords = union(nullable(pairOfPoints)).or(\n // We convert [] to null to support some legacy content items.\n // The widget component treats [] and null the same as of 2025-05.\n pipeParsers(emptyArray).then(convert(() => null)).parser,\n).parser;\n\nconst parseCorrect = defaulted(\n discriminatedUnionOn(\"type\")\n .withBranch(\n \"absolute_value\",\n object({\n type: constant(\"absolute_value\"),\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"exponential\",\n object({\n type: constant(\"exponential\"),\n asymptote: pairOfPoints,\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"linear\",\n object({\n type: constant(\"linear\"),\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"logarithm\",\n object({\n type: constant(\"logarithm\"),\n asymptote: pairOfPoints,\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"quadratic\",\n object({\n type: constant(\"quadratic\"),\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"sinusoid\",\n object({\n type: constant(\"sinusoid\"),\n coords: parseCoords,\n }),\n )\n .withBranch(\n \"tangent\",\n object({\n type: constant(\"tangent\"),\n coords: parseCoords,\n }),\n ).parser,\n // Default value. This is the same as the default in DEFAULT_GRAPHER_PROPS,\n // in grapher/util.tsx. See parse-perseus-json/README.md for an explanation\n // of why we want to duplicate defaults in the parser.\n () => ({\n type: \"linear\" as const,\n coords: null,\n }),\n);\n\nexport const parseGrapherWidget = parseWidget(\n constant(\"grapher\"),\n object({\n availableTypes: array(\n enumeration(\n \"absolute_value\",\n \"exponential\",\n \"linear\",\n \"logarithm\",\n \"quadratic\",\n \"sinusoid\",\n \"tangent\",\n ),\n ),\n correct: parseCorrect,\n graph: object({\n backgroundImage: object({\n bottom: optional(number),\n height: optional(number),\n left: optional(number),\n scale: optional(number),\n url: optional(nullable(string)),\n width: optional(number),\n }),\n box: optional(pairOfNumbers),\n editableSettings: optional(\n array(enumeration(\"graph\", \"snap\", \"image\", \"measure\")),\n ),\n gridStep: optional(pairOfNumbers),\n labels: pair(string, string),\n markings: enumeration(\"graph\", \"none\", \"grid\", \"axes\"),\n range: pair(pairOfNumbers, pairOfNumbers),\n rulerLabel: constant(\"\"),\n rulerTicks: number,\n showProtractor: optional(boolean),\n showRuler: optional(boolean),\n showTooltips: optional(boolean),\n snapStep: optional(pairOfNumbers),\n step: pairOfNumbers,\n valid: optional(union(boolean).or(string).parser),\n }),\n }),\n);\n","import {constant} from \"../general-purpose-parsers\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\n\nexport const parseGroupWidget = parseWidget(\n constant(\"group\"),\n // This module has an import cycle with parsePerseusRenderer.\n // The anonymous function below ensures that we don't try to access\n // parsePerseusRenderer before it's defined.\n (rawVal, ctx) => parsePerseusRenderer(rawVal, ctx),\n);\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseIframeWidget = parseWidget(\n constant(\"iframe\"),\n object({\n url: string,\n settings: optional(array(object({name: string, value: string}))),\n width: union(number).or(string).parser,\n height: union(number).or(string).parser,\n allowFullScreen: defaulted(boolean, () => false),\n allowTopNavigation: optional(boolean),\n static: defaulted(boolean, () => false),\n }),\n);\n","import type {PartialParser} from \"../parser-types\";\n\nexport const stringToNumber: PartialParser<string | number, number> = (\n rawValue,\n ctx,\n) => {\n if (typeof rawValue === \"number\") {\n return ctx.success(rawValue);\n }\n\n const parsedNumber = +rawValue;\n if (rawValue === \"\" || isNaN(parsedNumber)) {\n return ctx.failure(\"a number or numeric string\", rawValue);\n }\n\n return ctx.success(parsedNumber);\n};\n","import {\n nullable,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {stringToNumber} from \"../general-purpose-parsers/string-to-number\";\n\nfunction emptyToZero(x: string | number): string | number {\n return x === \"\" ? 0 : x;\n}\n\nconst imageDimensionToNumber = pipeParsers(union(number).or(string).parser)\n // In this specific case, empty string is equivalent to zero. An empty\n // string parses to either NaN (using parseInt) or 0 (using unary +) and\n // CSS will treat NaN as invalid and default to 0 instead.\n .then(convert(emptyToZero))\n .then(stringToNumber).parser;\n\nconst dimensionOrUndefined = defaulted(\n optional(imageDimensionToNumber),\n () => undefined,\n);\n\nexport const parsePerseusImageBackground = object({\n url: optional(nullable(string)),\n width: dimensionOrUndefined,\n height: dimensionOrUndefined,\n top: dimensionOrUndefined,\n left: dimensionOrUndefined,\n bottom: dimensionOrUndefined,\n scale: dimensionOrUndefined,\n});\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n pair,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nconst pairOfNumbers = pair(number, number);\n\nexport const parseImageWidget = parseWidget(\n constant(\"image\"),\n object({\n title: optional(string),\n caption: optional(string),\n alt: optional(string),\n longDescription: optional(string),\n decorative: optional(boolean),\n backgroundImage: parsePerseusImageBackground,\n scale: optional(number),\n static: optional(boolean),\n labels: optional(\n array(\n object({\n content: string,\n alignment: string,\n coordinates: array(number),\n }),\n ),\n ),\n range: optional(pair(pairOfNumbers, pairOfNumbers)),\n box: optional(pairOfNumbers),\n }),\n);\n","import {\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {Parser} from \"../parser-types\";\n\nconst booleanToString: Parser<string> = (rawValue, ctx) => {\n if (typeof rawValue === \"boolean\") {\n return ctx.success(String(rawValue));\n }\n return ctx.failure(\"boolean\", rawValue);\n};\n\nexport const parseInputNumberWidget = parseWidget(\n constant(\"input-number\"),\n object({\n answerType: optional(\n enumeration(\n \"number\",\n \"decimal\",\n \"integer\",\n \"rational\",\n \"improper\",\n \"mixed\",\n \"percent\",\n \"pi\",\n ),\n ),\n inexact: optional(boolean),\n maxError: optional(union(number).or(string).parser),\n rightAlign: optional(boolean),\n simplify: enumeration(\"required\", \"optional\", \"enforced\"),\n size: enumeration(\"normal\", \"small\"),\n // TODO(benchristel): there are some content items where value is a\n // boolean, even though that makes no sense. We should figure out if\n // those content items are actually published anywhere, and consider\n // updating them.\n value: defaulted(\n union(number).or(string).or(booleanToString).parser,\n () => 0,\n ),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n pair,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nconst pairOfNumbers = pair(number, number);\nconst stringOrEmpty = defaulted(string, () => \"\");\n\nconst parseKey = pipeParsers(optional(string)).then(convert(String)).parser;\n\nconst parseFunctionElement = object({\n type: constant(\"function\"),\n key: parseKey,\n options: object({\n value: string,\n funcName: string,\n rangeMin: string,\n rangeMax: string,\n color: string,\n strokeDasharray: string,\n strokeWidth: number,\n }),\n});\n\nconst parseLabelElement = object({\n type: constant(\"label\"),\n key: parseKey,\n options: object({\n label: string,\n color: string,\n coordX: string,\n coordY: string,\n }),\n});\n\nconst parseLineElement = object({\n type: constant(\"line\"),\n key: parseKey,\n options: object({\n color: string,\n startX: string,\n startY: string,\n endX: string,\n endY: string,\n strokeDasharray: string,\n strokeWidth: number,\n arrows: string,\n }),\n});\n\nconst parseMovableLineElement = object({\n type: constant(\"movable-line\"),\n key: parseKey,\n options: object({\n startX: string,\n startY: string,\n startSubscript: number,\n endX: string,\n endY: string,\n endSubscript: number,\n constraint: string,\n snap: number,\n constraintFn: string,\n constraintXMin: string,\n constraintXMax: string,\n constraintYMin: string,\n constraintYMax: string,\n }),\n});\n\nconst parseMovablePointElement = object({\n type: constant(\"movable-point\"),\n key: parseKey,\n options: object({\n startX: string,\n startY: string,\n varSubscript: number,\n constraint: string,\n snap: number,\n constraintFn: string,\n constraintXMin: stringOrEmpty,\n constraintXMax: stringOrEmpty,\n constraintYMin: stringOrEmpty,\n constraintYMax: stringOrEmpty,\n }),\n});\n\nconst parseParametricElement = object({\n type: constant(\"parametric\"),\n key: parseKey,\n options: object({\n x: string,\n y: string,\n rangeMin: string,\n rangeMax: string,\n color: string,\n strokeDasharray: string,\n strokeWidth: number,\n }),\n});\n\nconst parsePointElement = object({\n type: constant(\"point\"),\n key: parseKey,\n options: object({\n color: string,\n coordX: string,\n coordY: string,\n }),\n});\n\nconst parseRectangleElement = object({\n type: constant(\"rectangle\"),\n key: parseKey,\n options: object({\n color: string,\n coordX: string,\n coordY: string,\n width: string,\n height: string,\n }),\n});\n\nexport const parseInteractionWidget = parseWidget(\n constant(\"interaction\"),\n object({\n static: defaulted(boolean, () => false),\n graph: object({\n editableSettings: optional(array(enumeration(\"canvas\", \"graph\"))),\n box: pairOfNumbers,\n labels: array(string),\n range: pair(pairOfNumbers, pairOfNumbers),\n gridStep: pairOfNumbers,\n markings: enumeration(\"graph\", \"grid\", \"none\", \"axes\"),\n snapStep: optional(pairOfNumbers),\n valid: optional(union(boolean).or(string).parser),\n backgroundImage: optional(parsePerseusImageBackground),\n showProtractor: optional(boolean),\n showRuler: optional(boolean),\n rulerLabel: optional(string),\n rulerTicks: optional(number),\n tickStep: pairOfNumbers,\n }),\n elements: array(\n discriminatedUnionOn(\"type\")\n .withBranch(\"function\", parseFunctionElement)\n .withBranch(\"label\", parseLabelElement)\n .withBranch(\"line\", parseLineElement)\n .withBranch(\"movable-line\", parseMovableLineElement)\n .withBranch(\"movable-point\", parseMovablePointElement)\n .withBranch(\"parametric\", parseParametricElement)\n .withBranch(\"point\", parsePointElement)\n .withBranch(\"rectangle\", parseRectangleElement).parser,\n ),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n enumeration,\n nullable,\n number,\n object,\n optional,\n pair,\n pipeParsers,\n string,\n trio,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {PerseusGraphTypeLinear} from \"../../data-schema\";\n\n// Used to represent 2-D points and ranges\nconst pairOfNumbers = pair(number, number);\n\nconst parsePerseusGraphTypeAngle = object({\n type: constant(\"angle\"),\n showAngles: optional(boolean),\n allowReflexAngles: optional(boolean),\n angleOffsetDeg: optional(nullable(number)),\n snapDegrees: optional(number),\n match: optional(constant(\"congruent\")),\n coords: optional(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n startCoords: optional(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(trio(string, string, string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeCircle = object({\n type: constant(\"circle\"),\n center: optional(pairOfNumbers),\n radius: optional(number),\n startCoords: optional(\n object({\n center: pairOfNumbers,\n radius: number,\n }),\n ),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeLinear = object({\n type: constant(\"linear\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(pair(string, string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeLinearSystem = object({\n type: constant(\"linear-system\"),\n // TODO(benchristel): default coords to empty array?\n coords: optional(nullable(array(pair(pairOfNumbers, pairOfNumbers)))),\n startCoords: optional(array(pair(pairOfNumbers, pairOfNumbers))),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeNone = object({\n type: constant(\"none\"),\n});\n\nconst parsePerseusGraphTypePoint = object({\n type: constant(\"point\"),\n numPoints: optional(union(number).or(constant(\"unlimited\")).parser),\n coords: optional(nullable(array(pairOfNumbers))),\n startCoords: optional(array(pairOfNumbers)),\n coord: optional(pairOfNumbers),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypePolygon = object({\n type: constant(\"polygon\"),\n numSides: optional(union(number).or(constant(\"unlimited\")).parser),\n showAngles: optional(boolean),\n showSides: optional(boolean),\n snapTo: optional(enumeration(\"grid\", \"angles\", \"sides\")),\n match: optional(enumeration(\"similar\", \"congruent\", \"approx\", \"exact\")),\n startCoords: optional(array(pairOfNumbers)),\n coords: optional(nullable(array(pairOfNumbers))),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeQuadratic = object({\n type: constant(\"quadratic\"),\n coords: optional(\n nullable(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n ),\n startCoords: optional(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(trio(string, string, string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeRay = object({\n type: constant(\"ray\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(pair(string, string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeSegment = object({\n type: constant(\"segment\"),\n // TODO(benchristel): default numSegments?\n numSegments: optional(number),\n coords: optional(nullable(array(pair(pairOfNumbers, pairOfNumbers)))),\n startCoords: optional(array(pair(pairOfNumbers, pairOfNumbers))),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeSinusoid = object({\n type: constant(\"sinusoid\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeExponential = object({\n type: constant(\"exponential\"),\n coords: optional(nullable(array(pairOfNumbers))),\n asymptote: optional(nullable(number)),\n startCoords: optional(\n object({\n coords: pair(pairOfNumbers, pairOfNumbers),\n asymptote: number,\n }),\n ),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeAbsoluteValue = object({\n type: constant(\"absolute-value\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(pair(string, string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeTangent = object({\n type: constant(\"tangent\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeLogarithm = object({\n type: constant(\"logarithm\"),\n coords: optional(nullable(array(pairOfNumbers))),\n asymptote: optional(nullable(number)),\n startCoords: optional(\n object({\n coords: pair(pairOfNumbers, pairOfNumbers),\n asymptote: number,\n }),\n ),\n pointLabels: optional(array(string)),\n showPointLabels: optional(boolean),\n});\n\nconst parsePerseusGraphTypeVector = object({\n type: constant(\"vector\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n match: optional(enumeration(\"exact\", \"congruent\")),\n});\n\nexport const parsePerseusGraphType = discriminatedUnionOn(\"type\")\n .withBranch(\"absolute-value\", parsePerseusGraphTypeAbsoluteValue)\n .withBranch(\"angle\", parsePerseusGraphTypeAngle)\n .withBranch(\"circle\", parsePerseusGraphTypeCircle)\n .withBranch(\"exponential\", parsePerseusGraphTypeExponential)\n .withBranch(\"linear\", parsePerseusGraphTypeLinear)\n .withBranch(\"linear-system\", parsePerseusGraphTypeLinearSystem)\n .withBranch(\"none\", parsePerseusGraphTypeNone)\n .withBranch(\"point\", parsePerseusGraphTypePoint)\n .withBranch(\"polygon\", parsePerseusGraphTypePolygon)\n .withBranch(\"quadratic\", parsePerseusGraphTypeQuadratic)\n .withBranch(\"ray\", parsePerseusGraphTypeRay)\n .withBranch(\"segment\", parsePerseusGraphTypeSegment)\n .withBranch(\"sinusoid\", parsePerseusGraphTypeSinusoid)\n .withBranch(\"tangent\", parsePerseusGraphTypeTangent)\n .withBranch(\"logarithm\", parsePerseusGraphTypeLogarithm)\n .withBranch(\"vector\", parsePerseusGraphTypeVector).parser;\n\nconst parseLockedFigureColor = pipeParsers(\n enumeration(\n // Same as lockedFigureColorNames in data-schema.ts\n \"blue\",\n \"gold\",\n \"green\",\n \"grayH\",\n \"purple\",\n \"pink\",\n \"red\",\n // deprecated name - \"orange\" is now \"gold\"\n \"orange\",\n ),\n).then(convert((color) => (color === \"orange\" ? \"gold\" : color))).parser;\n\nconst parseLockedFigureFillType = enumeration(\n \"none\",\n \"white\",\n \"translucent\",\n \"solid\",\n);\n\nconst parseLockedLineStyle = enumeration(\"solid\", \"dashed\");\n\nconst parseStrokeWeight = defaulted(\n enumeration(\"medium\", \"thin\", \"thick\"),\n () => \"medium\" as const,\n);\n\nconst parseLockedLabelType = object({\n type: constant(\"label\"),\n coord: pairOfNumbers,\n text: string,\n color: parseLockedFigureColor,\n size: enumeration(\"small\", \"medium\", \"large\"),\n});\n\nconst parseLockedPointType = object({\n type: constant(\"point\"),\n coord: pairOfNumbers,\n color: parseLockedFigureColor,\n filled: boolean,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst parseLockedLineType = object({\n type: constant(\"line\"),\n kind: enumeration(\"line\", \"ray\", \"segment\"),\n points: pair(parseLockedPointType, parseLockedPointType),\n color: parseLockedFigureColor,\n lineStyle: parseLockedLineStyle,\n showPoint1: defaulted(boolean, () => false),\n showPoint2: defaulted(boolean, () => false),\n weight: parseStrokeWeight,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst parseLockedVectorType = object({\n type: constant(\"vector\"),\n points: pair(pairOfNumbers, pairOfNumbers),\n color: parseLockedFigureColor,\n weight: parseStrokeWeight,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst parseLockedEllipseType = object({\n type: constant(\"ellipse\"),\n center: pairOfNumbers,\n radius: pairOfNumbers,\n angle: number,\n color: parseLockedFigureColor,\n fillStyle: parseLockedFigureFillType,\n strokeStyle: parseLockedLineStyle,\n weight: parseStrokeWeight,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst parseLockedPolygonType = object({\n type: constant(\"polygon\"),\n points: array(pairOfNumbers),\n color: parseLockedFigureColor,\n showVertices: boolean,\n fillStyle: parseLockedFigureFillType,\n strokeStyle: parseLockedLineStyle,\n weight: parseStrokeWeight,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst numberOrNegativeInfinity = union(number).or(constant(-Infinity)).parser;\nconst numberOrPositiveInfinity = union(number).or(constant(Infinity)).parser;\n\n// Exported for testing.\nexport const parseLockedFunctionDomain = defaulted(\n pair(\n // NOTE: Infinity does not serialize (becomes null), so we cannot assume\n // that this function acts as a validator for the widget. This\n // will ensure that parsed data is up-to-date, but it is quite\n // probable that the data is serialized after being parsed. The\n // widget should therefore account for null values in the domain.\n defaulted(numberOrNegativeInfinity, () => -Infinity),\n defaulted(numberOrPositiveInfinity, () => Infinity),\n ),\n (): [number, number] => [-Infinity, Infinity],\n);\n\nconst parseLockedFunctionType = object({\n type: constant(\"function\"),\n color: parseLockedFigureColor,\n strokeStyle: parseLockedLineStyle,\n weight: parseStrokeWeight,\n equation: string,\n directionalAxis: enumeration(\"x\", \"y\"),\n domain: parseLockedFunctionDomain,\n labels: defaulted(array(parseLockedLabelType), () => []),\n ariaLabel: optional(string),\n});\n\nconst parseLockedFigure = discriminatedUnionOn(\"type\")\n .withBranch(\"point\", parseLockedPointType)\n .withBranch(\"line\", parseLockedLineType)\n .withBranch(\"vector\", parseLockedVectorType)\n .withBranch(\"ellipse\", parseLockedEllipseType)\n .withBranch(\"polygon\", parseLockedPolygonType)\n .withBranch(\"function\", parseLockedFunctionType)\n .withBranch(\"label\", parseLockedLabelType).parser;\n\nconst parseLabelLocation = union(enumeration(\"onAxis\", \"alongEdge\")).or(\n // If the labelLocation is an empty string, we default to \"onAxis\".\n pipeParsers(constant(\"\")).then(convert(() => \"onAxis\" as const)).parser,\n).parser;\n\nexport const parseInteractiveGraphWidget = parseWidget(\n constant(\"interactive-graph\"),\n object({\n step: pairOfNumbers,\n // TODO(benchristel): rather than making gridStep and snapStep\n // optional, we should duplicate the defaulting logic from the\n // InteractiveGraph component. See parse-perseus-json/README.md for\n // why.\n gridStep: optional(pairOfNumbers),\n snapStep: optional(pairOfNumbers),\n backgroundImage: optional(parsePerseusImageBackground),\n markings: enumeration(\"graph\", \"grid\", \"none\", \"axes\"),\n labels: optional(array(string)),\n labelLocation: optional(parseLabelLocation),\n showProtractor: boolean,\n showRuler: optional(boolean),\n showTooltips: optional(boolean),\n rulerLabel: optional(string),\n rulerTicks: optional(number),\n range: pair(pairOfNumbers, pairOfNumbers),\n showAxisArrows: defaulted(\n object({\n xMin: boolean,\n xMax: boolean,\n yMin: boolean,\n yMax: boolean,\n }),\n () => ({\n xMin: true,\n xMax: true,\n yMin: true,\n yMax: true,\n }),\n ),\n showAxisTicks: defaulted(\n object({\n x: boolean,\n y: boolean,\n }),\n () => ({\n x: true,\n y: true,\n }),\n ),\n // NOTE(benchristel): I copied the default graph from\n // interactive-graph.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n graph: defaulted(\n parsePerseusGraphType,\n (): PerseusGraphTypeLinear => ({\n type: \"linear\" as const,\n }),\n ),\n correct: defaulted(\n parsePerseusGraphType,\n (): PerseusGraphTypeLinear => ({\n type: \"linear\" as const,\n }),\n ),\n lockedFigures: defaulted(array(parseLockedFigure), () => []),\n fullGraphAriaLabel: optional(string),\n fullGraphAriaDescription: optional(string),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseLabelImageWidget = parseWidget(\n constant(\"label-image\"),\n object({\n choices: array(string),\n imageUrl: string,\n imageAlt: string,\n imageHeight: number,\n imageWidth: number,\n markers: array(\n object({\n answers: defaulted(array(string), () => []),\n label: string,\n x: number,\n y: number,\n }),\n ),\n hideChoicesFromInstructions: boolean,\n multipleAnswers: boolean,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {ParsedValue} from \"../parser-types\";\n\nconst matcherOptions = object({\n labels: array(string),\n left: array(string),\n right: array(string),\n orderMatters: boolean,\n padding: boolean,\n});\n\nfunction getDefaultOptions(): ParsedValue<typeof matcherOptions> {\n // NOTE(benchristel): I copied these default values from the ones used\n // in the editor. See parse-perseus-json/README.md for why we want to\n // duplicate the defaults here.\n return {\n left: [\"$x$\", \"$y$\", \"$z$\"],\n right: [\"$1$\", \"$2$\", \"$3$\"],\n labels: [\"test\", \"label\"],\n orderMatters: false,\n padding: true,\n };\n}\n\nexport const parseMatcherWidget = parseWidget(\n constant(\"matcher\"),\n defaulted(matcherOptions, getDefaultOptions),\n);\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {stringToNumber} from \"../general-purpose-parsers/string-to-number\";\n\nimport {parseWidget} from \"./widget\";\n\nconst numberOrStringOrNaN = union(number).or(string).or(constant(NaN)).parser;\nconst numeric = pipeParsers(defaulted(numberOrStringOrNaN, () => NaN)).then(\n stringToNumber,\n).parser;\n\nexport const parseMatrixWidget = parseWidget(\n defaulted(constant(\"matrix\"), () => \"matrix\" as const),\n object({\n prefix: optional(string),\n suffix: optional(string),\n answers: defaulted(array(array(numeric)), () => []),\n cursorPosition: optional(array(number)),\n matrixBoardSize: array(number),\n static: optional(boolean),\n }),\n);\n","import {\n boolean,\n constant,\n number,\n object,\n pair,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nexport const parseMeasurerWidget = parseWidget(\n constant(\"measurer\"),\n object({\n // The default value for image comes from measurer.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n image: defaulted(parsePerseusImageBackground, () => ({\n url: null,\n top: 0,\n left: 0,\n })),\n showProtractor: boolean,\n showRuler: boolean,\n rulerLabel: string,\n rulerTicks: number,\n rulerPixels: number,\n rulerLength: number,\n box: pair(number, number),\n }),\n);\n","import {\n constant,\n object,\n string,\n number,\n optional,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseMoleculeRendererWidget = parseWidget(\n constant(\"molecule-renderer\"),\n object({\n widgetId: string,\n rotationAngle: optional(number),\n smiles: optional(string),\n }),\n);\n","import {\n constant,\n object,\n array,\n number,\n string,\n boolean,\n optional,\n nullable,\n pipeParsers,\n union,\n enumeration,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nconst emptyStringToNull = pipeParsers(constant(\"\")).then(\n convert(() => null),\n).parser;\n\nexport const parseNumberLineWidget = parseWidget(\n constant(\"number-line\"),\n object({\n // TODO(LEMS-3081): change `range` to `pair(number, number)` and update the related types\n // in data-schema.ts and number-line.tsx.\n range: array(number),\n labelRange: array(nullable(union(number).or(emptyStringToNull).parser)),\n labelStyle: string,\n labelTicks: boolean,\n // NOTE(matthewcurtis): I copied the default isTickCtrl from\n // number-line.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n isTickCtrl: defaulted(boolean, () => false),\n isInequality: defaulted(boolean, () => false),\n divisionRange: array(number),\n numDivisions: optional(nullable(number)),\n // NOTE(benchristel): I copied the default snapDivisions from\n // number-line.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n snapDivisions: defaulted(number, () => 2),\n tickStep: optional(nullable(number)),\n correctRel: defaulted(\n optional(enumeration(\"eq\", \"lt\", \"gt\", \"le\", \"ge\")),\n // Convert null to undefined:\n () => undefined,\n ),\n correctX: defaulted(nullable(number), () => null),\n initialX: optional(nullable(number)),\n showTooltips: optional(boolean),\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n constant,\n object,\n array,\n string,\n number,\n optional,\n enumeration,\n boolean,\n nullable,\n union,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nconst parseMathFormat = enumeration(\n \"integer\",\n \"mixed\",\n \"improper\",\n \"proper\",\n \"decimal\",\n \"percent\",\n \"pi\",\n);\n\nexport const parseSimplify = pipeParsers(\n union(constant(null))\n .or(constant(undefined))\n .or(boolean)\n .or(constant(\"true\"))\n .or(constant(\"required\"))\n .or(constant(\"correct\"))\n .or(constant(\"enforced\"))\n .or(constant(\"optional\"))\n .or(constant(\"accepted\")).parser,\n).then(convert(deprecatedSimplifyValuesToRequired)).parser;\n\nfunction deprecatedSimplifyValuesToRequired(\n simplify:\n | null\n | undefined\n | boolean\n | \"true\"\n | \"required\"\n | \"correct\"\n | \"enforced\"\n | \"optional\"\n | \"accepted\",\n): \"enforced\" | \"required\" | \"optional\" {\n switch (simplify) {\n case \"enforced\":\n case \"required\":\n case \"optional\":\n return simplify;\n // NOTE(benchristel): \"accepted\", \"correct\", \"true\", true, false,\n // undefined, and null are all treated the same as \"required\" during\n // scoring, so we convert them to \"required\" here to preserve\n // behavior. See the tests in score-numeric-input.test.ts.\n default:\n return \"required\";\n }\n}\n\nexport const parseNumericInputWidget = parseWidget(\n constant(\"numeric-input\"),\n object({\n answers: array(\n object({\n message: defaulted(string, () => \"\"),\n // TODO(benchristel): value should never be null or undefined,\n // but we have some content where it is anyway. If we backfill\n // the data, simplify this.\n value: optional(nullable(number)),\n status: string,\n answerForms: defaulted(\n optional(array(parseMathFormat)),\n () => undefined,\n ),\n strict: defaulted(boolean, () => false),\n maxError: optional(nullable(number)),\n // TODO(benchristel): simplify should never be a boolean, but we\n // have some content where it is anyway. If we ever backfill\n // the data, we should simplify `simplify`.\n simplify: parseSimplify,\n }),\n ),\n labelText: optional(string),\n size: string,\n coefficient: defaulted(boolean, () => false),\n rightAlign: optional(boolean),\n }),\n);\n","import {\n array,\n constant,\n enumeration,\n object,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\n\nimport type {PartialParser} from \"../parser-types\";\n\n// There is an import cycle between orderer-widget.ts and perseus-renderer.ts.\n// This wrapper ensures that we don't refer to parsePerseusRenderer before\n// it's defined.\nfunction parseRenderer(rawValue, ctx) {\n return parsePerseusRenderer(rawValue, ctx);\n}\n\nconst largeToAuto: PartialParser<\n \"normal\" | \"auto\" | \"large\",\n \"normal\" | \"auto\"\n> = (height, ctx) => {\n if (height === \"large\") {\n return ctx.success(\"auto\");\n }\n return ctx.success(height);\n};\n\nexport const parseOrdererWidget = parseWidget(\n constant(\"orderer\"),\n object({\n options: defaulted(array(parseRenderer), () => []),\n correctOptions: defaulted(array(parseRenderer), () => []),\n otherOptions: defaulted(array(parseRenderer), () => []),\n height: pipeParsers(enumeration(\"normal\", \"auto\", \"large\")).then(\n largeToAuto,\n ).parser,\n layout: defaulted(\n enumeration(\"horizontal\", \"vertical\"),\n () => \"horizontal\" as const,\n ),\n }),\n);\n","import {constant, object, string} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parsePhetSimulationWidget = parseWidget(\n constant(\"phet-simulation\"),\n object({\n url: string,\n description: string,\n }),\n);\n","import {\n constant,\n object,\n string,\n array,\n number,\n optional,\n nullable,\n enumeration,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nconst plotterPlotTypes = enumeration(\n \"bar\",\n \"line\",\n \"pic\",\n \"histogram\",\n \"dotplot\",\n);\n\nexport const parsePlotterWidget = parseWidget(\n constant(\"plotter\"),\n object({\n labels: array(string),\n categories: array(string),\n type: plotterPlotTypes,\n maxY: number,\n // The default value for scaleY comes from plotter.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n scaleY: defaulted(number, () => 1),\n labelInterval: optional(nullable(number)),\n // The default value for snapsPerLine comes from plotter.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n snapsPerLine: defaulted(number, () => 2),\n starting: array(number),\n correct: defaulted(array(number), () => []),\n picUrl: optional(nullable(string)),\n picSize: optional(nullable(number)),\n picBoxHeight: optional(nullable(number)),\n // NOTE(benchristel): I copied the default plotDimensions from\n // plotter.tsx. See the parse-perseus-json/README.md for an explanation\n // of why we want to duplicate the defaults here.\n plotDimensions: defaulted(array(number), () => [380, 300]),\n }),\n);\n","import {constant, object, string, number} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parsePythonProgramWidget = parseWidget(\n constant(\"python-program\"),\n object({\n programID: string,\n height: number,\n }),\n);\n","interface Choice {\n correct?: boolean;\n}\n\nexport function deriveNumCorrect(choices: Choice[]) {\n return choices.filter((c) => c.correct).length;\n}\n","// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport {deriveNumCorrect} from \"../../widgets/radio/derive-num-correct\";\nimport {\n any,\n array,\n arrayWithIndex,\n boolean,\n constant,\n defaultedNonEmptyString,\n number,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {versionedWidgetOptions} from \"./versioned-widget-options\";\nimport {parseWidgetWithVersion} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {ParsedValue} from \"../parser-types\";\n\nconst parseWidgetsMapOrUndefined = defaulted(\n // There is an import cycle between radio-widget.ts and\n // widgets-map.ts. The anonymous function below ensures that we\n // don't refer to parseWidgetsMap before it's defined.\n optional((rawVal, ctx) => parseWidgetsMap(rawVal, ctx)),\n () => undefined,\n);\n\nfunction getDefaultOptions() {\n // See parse-perseus-json/README.md for why we want these defaults here.\n return {\n choices: [\n {content: \"\", id: generateChoiceId(0)},\n {content: \"\", id: generateChoiceId(1)},\n {content: \"\", id: generateChoiceId(2)},\n {content: \"\", id: generateChoiceId(3)},\n ],\n };\n}\n\nconst parseOnePerLine = defaulted(optional(boolean), () => undefined);\nconst parseNoneOfTheAbove = defaulted(\n optional(constant(false)),\n () => undefined,\n);\n\nfunction generateChoiceId(index: number): string {\n return `radio-choice-${index}`;\n}\n\nconst version3 = optional(object({major: constant(3), minor: number}));\nconst parseRadioWidgetV3 = parseWidgetWithVersion(\n version3,\n constant(\"radio\"),\n object({\n numCorrect: optional(number),\n choices: arrayWithIndex((index) =>\n object({\n content: defaulted(string, () => \"\"),\n rationale: optional(string),\n correct: optional(boolean),\n isNoneOfTheAbove: optional(boolean),\n id: defaultedNonEmptyString(() => generateChoiceId(index)),\n }),\n ),\n hasNoneOfTheAbove: optional(boolean),\n countChoices: optional(boolean),\n randomize: optional(boolean),\n multipleSelect: optional(boolean),\n deselectEnabled: optional(boolean),\n }),\n);\n\nconst version2 = optional(object({major: constant(2), minor: number}));\nconst parseRadioWidgetV2 = parseWidgetWithVersion(\n version2,\n constant(\"radio\"),\n defaulted(\n object({\n numCorrect: optional(number),\n choices: array(\n object({\n content: defaulted(string, () => \"\"),\n clue: optional(string),\n correct: optional(boolean),\n isNoneOfTheAbove: optional(boolean),\n rationale: optional(string),\n // deprecated\n widgets: parseWidgetsMapOrUndefined,\n }),\n ),\n hasNoneOfTheAbove: optional(boolean),\n countChoices: optional(boolean),\n randomize: optional(boolean),\n multipleSelect: optional(boolean),\n deselectEnabled: optional(boolean),\n // deprecated\n onePerLine: parseOnePerLine,\n // deprecated\n displayCount: optional(any),\n // v0 props\n // `noneOfTheAbove` is still in use (but only set to `false`).\n noneOfTheAbove: parseNoneOfTheAbove,\n }),\n getDefaultOptions,\n ),\n);\n\nconst version1 = optional(object({major: constant(1), minor: number}));\nconst parseRadioWidgetV1 = parseWidgetWithVersion(\n version1,\n constant(\"radio\"),\n defaulted(\n object({\n choices: array(\n object({\n content: defaulted(string, () => \"\"),\n clue: optional(string),\n correct: optional(boolean),\n isNoneOfTheAbove: optional(boolean),\n // deprecated\n widgets: parseWidgetsMapOrUndefined,\n }),\n ),\n hasNoneOfTheAbove: optional(boolean),\n countChoices: optional(boolean),\n randomize: optional(boolean),\n multipleSelect: optional(boolean),\n deselectEnabled: optional(boolean),\n // deprecated\n onePerLine: parseOnePerLine,\n // deprecated\n displayCount: optional(any),\n // v0 props\n // `noneOfTheAbove` is still in use (but only set to `false`).\n noneOfTheAbove: parseNoneOfTheAbove,\n }),\n getDefaultOptions,\n ),\n);\n\nconst version0 = optional(object({major: constant(0), minor: number}));\nconst parseRadioWidgetV0 = parseWidgetWithVersion(\n version0,\n constant(\"radio\"),\n defaulted(\n object({\n choices: array(\n object({\n content: defaulted(string, () => \"\"),\n clue: optional(string),\n correct: optional(boolean),\n isNoneOfTheAbove: optional(boolean),\n // deprecated\n widgets: parseWidgetsMapOrUndefined,\n }),\n ),\n hasNoneOfTheAbove: optional(boolean),\n countChoices: optional(boolean),\n randomize: optional(boolean),\n multipleSelect: optional(boolean),\n deselectEnabled: optional(boolean),\n // deprecated\n onePerLine: parseOnePerLine,\n // deprecated\n displayCount: optional(any),\n // v0 props\n // `noneOfTheAbove` is still in use (but only set to `false`).\n noneOfTheAbove: parseNoneOfTheAbove,\n }),\n getDefaultOptions,\n ),\n);\n\n// migrate functions\nexport function migrateV2toV3(\n widget: ParsedValue<typeof parseRadioWidgetV2>,\n): ParsedValue<typeof parseRadioWidgetV3> {\n const {options} = widget;\n return {\n ...widget,\n version: {major: 3, minor: 0},\n options: {\n numCorrect: options.numCorrect,\n hasNoneOfTheAbove: options.hasNoneOfTheAbove,\n countChoices: options.countChoices,\n randomize: options.randomize,\n multipleSelect: options.multipleSelect,\n deselectEnabled: options.deselectEnabled,\n choices: options.choices.map((choice, index) => ({\n content: choice.content,\n rationale: choice[\"rationale\"] || choice.clue,\n correct: choice.correct,\n isNoneOfTheAbove: choice.isNoneOfTheAbove,\n id: generateChoiceId(index),\n })),\n },\n };\n}\n\nexport function migrateV1ToV2(\n widget: ParsedValue<typeof parseRadioWidgetV1>,\n): ParsedValue<typeof parseRadioWidgetV2> {\n const {options} = widget;\n return {\n ...widget,\n version: {major: 2, minor: 0},\n options: {\n ...options,\n numCorrect: deriveNumCorrect(options.choices),\n },\n };\n}\n\nexport function migrateV0ToV1(\n widget: ParsedValue<typeof parseRadioWidgetV0>,\n): ParsedValue<typeof parseRadioWidgetV1> {\n const {options} = widget;\n const {noneOfTheAbove: _, ...rest} = options;\n return {\n ...widget,\n version: {major: 1, minor: 0},\n options: {\n ...rest,\n hasNoneOfTheAbove: false,\n noneOfTheAbove: undefined,\n },\n };\n}\n\nexport const parseRadioWidget = versionedWidgetOptions(3, parseRadioWidgetV3)\n .withMigrationFrom(2, parseRadioWidgetV2, migrateV2toV3)\n .withMigrationFrom(1, parseRadioWidgetV1, migrateV1ToV2)\n .withMigrationFrom(0, parseRadioWidgetV0, migrateV0ToV1).parser;\n","import {\n array,\n boolean,\n constant,\n enumeration,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseSorterWidget = parseWidget(\n constant(\"sorter\"),\n object({\n correct: array(string),\n padding: boolean,\n layout: enumeration(\"horizontal\", \"vertical\"),\n }),\n);\n","import {\n array,\n number,\n constant,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseTableWidget = parseWidget(\n constant(\"table\"),\n object({\n headers: array(string),\n rows: number,\n columns: number,\n answers: defaulted(array(array(string)), () => []),\n }),\n);\n","import {\n constant,\n object,\n string,\n boolean,\n optional,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nexport const parseVideoWidget = parseWidget(\n constant(\"video\"),\n object({\n location: string,\n static: optional(boolean),\n }),\n);\n","import {pair, string} from \"../general-purpose-parsers\";\n\nimport type {Parser} from \"../parser-types\";\n\n/**\n * Parses a string representation of a non-negative integer.\n *\n * This parser is used for the numeric part of widget IDs (e.g., the \"1\" in \"radio 1\").\n * It accepts string representations of non-negative integers, including \"0\".\n *\n * Note: The article renderer allows widget IDs with 0 (at least for image widgets),\n * but if widget IDs in an exercise contain 0, the exercise renderer may have issues.\n * We allow 0 here for compatibility with articles.\n *\n * @param rawValue - The raw value to parse, expected to be a string\n * @param ctx - The parse context for error reporting\n * @returns A ParseResult containing either the parsed number or an error\n */\nconst parseStringToNonNegativeInt: Parser<number> = (rawValue, ctx) => {\n // The article renderer seems to allow the numeric part of a widget ID to\n // be 0, at least for image widgets. However, if widget IDs in an exercise\n // contain 0, the exercise renderer will blow up. We allow 0 here for\n // compatibility with articles.\n if (typeof rawValue !== \"string\" || !/^(0|[1-9][0-9]*)$/.test(rawValue)) {\n return ctx.failure(\n \"a string representing a non-negative integer\",\n rawValue,\n );\n }\n return ctx.success(+rawValue);\n};\n\n/**\n * Parses widget ID components into a [type, number] tuple.\n *\n * Widget IDs in Perseus follow the format \"{type} {number}\" (e.g., \"radio 1\", \"dropdown 2\").\n * This parser takes the components of a widget ID (after splitting on spaces) and\n * validates that it consists of exactly two parts: a widget type string and a\n * non-negative integer.\n *\n * @type {Parser<[string, number]>} A parser that returns a tuple of [widgetType, widgetNumber]\n */\nexport const parseWidgetIdComponents = pair(\n string,\n parseStringToNonNegativeInt,\n);\n","import {\n any,\n isPlainObject,\n looseObject,\n constant,\n} from \"../general-purpose-parsers\";\nimport {isFailure} from \"../result\";\n\nimport {parseCategorizerWidget} from \"./categorizer-widget\";\nimport {parseCSProgramWidget} from \"./cs-program-widget\";\nimport {parseDefinitionWidget} from \"./definition-widget\";\nimport {parseDropdownWidget} from \"./dropdown-widget\";\nimport {parseExplanationWidget} from \"./explanation-widget\";\nimport {parseExpressionWidget} from \"./expression-widget\";\nimport {parseFreeResponseWidget} from \"./free-response-widget\";\nimport {parseGradedGroupSetWidget} from \"./graded-group-set-widget\";\nimport {parseGradedGroupWidget} from \"./graded-group-widget\";\nimport {parseGrapherWidget} from \"./grapher-widget\";\nimport {parseGroupWidget} from \"./group-widget\";\nimport {parseIframeWidget} from \"./iframe-widget\";\nimport {parseImageWidget} from \"./image-widget\";\nimport {parseInputNumberWidget} from \"./input-number-widget\";\nimport {parseInteractionWidget} from \"./interaction-widget\";\nimport {parseInteractiveGraphWidget} from \"./interactive-graph-widget\";\nimport {parseLabelImageWidget} from \"./label-image-widget\";\nimport {parseMatcherWidget} from \"./matcher-widget\";\nimport {parseMatrixWidget} from \"./matrix-widget\";\nimport {parseMeasurerWidget} from \"./measurer-widget\";\nimport {parseMoleculeRendererWidget} from \"./molecule-renderer-widget\";\nimport {parseNumberLineWidget} from \"./number-line-widget\";\nimport {parseNumericInputWidget} from \"./numeric-input-widget\";\nimport {parseOrdererWidget} from \"./orderer-widget\";\nimport {parsePhetSimulationWidget} from \"./phet-simulation-widget\";\nimport {parsePlotterWidget} from \"./plotter-widget\";\nimport {parsePythonProgramWidget} from \"./python-program-widget\";\nimport {parseRadioWidget} from \"./radio-widget\";\nimport {parseSorterWidget} from \"./sorter-widget\";\nimport {parseTableWidget} from \"./table-widget\";\nimport {parseVideoWidget} from \"./video-widget\";\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetIdComponents} from \"./widget-id-components\";\n\nimport type {\n DeprecatedStandinWidget,\n PerseusWidgetsMap,\n // TODO(LEMS-4224): don't import from outside of the parser\n // eslint-disable-next-line import/no-restricted-paths\n} from \"../../data-schema\";\nimport type {ParseContext, Parser, ParseResult} from \"../parser-types\";\n\nexport const parseWidgetsMap: Parser<PerseusWidgetsMap> = (rawValue, ctx) => {\n if (!isPlainObject(rawValue)) {\n return ctx.failure(\"PerseusWidgetsMap\", rawValue);\n }\n\n const widgetsMap: PerseusWidgetsMap = {};\n for (const key of Object.keys(rawValue)) {\n // parseWidgetsMapEntry modifies the widgetsMap. This is kind of gross,\n // but it's the only way I could find to make TypeScript check the key\n // against the widget type.\n const entryResult = parseWidgetsMapEntry(\n [key, rawValue[key]],\n widgetsMap,\n ctx.forSubtree(key),\n );\n if (isFailure(entryResult)) {\n return entryResult;\n }\n }\n\n return ctx.success(widgetsMap);\n};\n\nconst parseWidgetsMapEntry: (\n entry: [string, unknown],\n widgetMap: PerseusWidgetsMap,\n ctx: ParseContext,\n) => ParseResult<unknown> = ([id, widget], widgetMap, ctx) => {\n const idComponentsResult = parseWidgetIdComponents(\n id.split(\" \"),\n ctx.forSubtree(\"(widget ID)\"),\n );\n if (isFailure(idComponentsResult)) {\n return idComponentsResult;\n }\n const [type, n] = idComponentsResult.value;\n\n function parseAndAssign<K extends keyof PerseusWidgetsMap>(\n key: K,\n parse: Parser<PerseusWidgetsMap[K]>,\n ): ParseResult<unknown> {\n const widgetResult = parse(widget, ctx);\n if (isFailure(widgetResult)) {\n return widgetResult;\n }\n widgetMap[key] = widgetResult.value;\n return ctx.success(undefined);\n }\n\n switch (type) {\n case \"categorizer\":\n return parseAndAssign(`categorizer ${n}`, parseCategorizerWidget);\n case \"cs-program\":\n return parseAndAssign(`cs-program ${n}`, parseCSProgramWidget);\n case \"definition\":\n return parseAndAssign(`definition ${n}`, parseDefinitionWidget);\n case \"dropdown\":\n return parseAndAssign(`dropdown ${n}`, parseDropdownWidget);\n case \"explanation\":\n return parseAndAssign(`explanation ${n}`, parseExplanationWidget);\n case \"expression\":\n return parseAndAssign(`expression ${n}`, parseExpressionWidget);\n case \"free-response\":\n return parseAndAssign(\n `free-response ${n}`,\n parseFreeResponseWidget,\n );\n case \"grapher\":\n return parseAndAssign(`grapher ${n}`, parseGrapherWidget);\n case \"group\":\n return parseAndAssign(`group ${n}`, parseGroupWidget);\n case \"graded-group\":\n return parseAndAssign(`graded-group ${n}`, parseGradedGroupWidget);\n case \"graded-group-set\":\n return parseAndAssign(\n `graded-group-set ${n}`,\n parseGradedGroupSetWidget,\n );\n case \"iframe\":\n return parseAndAssign(`iframe ${n}`, parseIframeWidget);\n case \"image\":\n return parseAndAssign(`image ${n}`, parseImageWidget);\n case \"input-number\":\n return parseAndAssign(`input-number ${n}`, parseInputNumberWidget);\n case \"interaction\":\n return parseAndAssign(`interaction ${n}`, parseInteractionWidget);\n case \"interactive-graph\":\n return parseAndAssign(\n `interactive-graph ${n}`,\n parseInteractiveGraphWidget,\n );\n case \"label-image\":\n return parseAndAssign(`label-image ${n}`, parseLabelImageWidget);\n case \"matcher\":\n return parseAndAssign(`matcher ${n}`, parseMatcherWidget);\n case \"matrix\":\n return parseAndAssign(`matrix ${n}`, parseMatrixWidget);\n case \"measurer\":\n return parseAndAssign(`measurer ${n}`, parseMeasurerWidget);\n case \"molecule-renderer\":\n return parseAndAssign(\n `molecule-renderer ${n}`,\n parseMoleculeRendererWidget,\n );\n case \"number-line\":\n return parseAndAssign(`number-line ${n}`, parseNumberLineWidget);\n case \"numeric-input\":\n return parseAndAssign(\n `numeric-input ${n}`,\n parseNumericInputWidget,\n );\n case \"orderer\":\n return parseAndAssign(`orderer ${n}`, parseOrdererWidget);\n case \"phet-simulation\":\n return parseAndAssign(\n `phet-simulation ${n}`,\n parsePhetSimulationWidget,\n );\n case \"plotter\":\n return parseAndAssign(`plotter ${n}`, parsePlotterWidget);\n case \"python-program\":\n return parseAndAssign(\n `python-program ${n}`,\n parsePythonProgramWidget,\n );\n case \"radio\":\n return parseAndAssign(`radio ${n}`, parseRadioWidget);\n case \"sorter\":\n return parseAndAssign(`sorter ${n}`, parseSorterWidget);\n case \"table\":\n return parseAndAssign(`table ${n}`, parseTableWidget);\n case \"video\":\n return parseAndAssign(`video ${n}`, parseVideoWidget);\n case \"sequence\":\n // sequence is a deprecated widget type, and the corresponding\n // widget component no longer exists.\n return parseAndAssign(`sequence ${n}`, parseDeprecatedWidget);\n case \"lights-puzzle\":\n return parseAndAssign(`lights-puzzle ${n}`, parseDeprecatedWidget);\n case \"simulator\":\n return parseAndAssign(`simulator ${n}`, parseDeprecatedWidget);\n case \"transformer\":\n return parseAndAssign(`transformer ${n}`, parseDeprecatedWidget);\n case \"passage\":\n return parseAndAssign(`passage ${n}`, parseDeprecatedWidget);\n case \"passage-ref\":\n return parseAndAssign(`passage-ref ${n}`, parseDeprecatedWidget);\n case \"passage-ref-target\":\n return parseAndAssign(\n `passage-ref-target ${n}`,\n parseDeprecatedWidget,\n );\n\n default:\n return parseAndAssign(\n // eslint-disable-next-line no-restricted-syntax\n `${type} ${n}` as any,\n // eslint-disable-next-line no-restricted-syntax\n parseWidget(constant(type), any) as any,\n );\n }\n};\n\nconst parseDeprecatedWidget: Parser<DeprecatedStandinWidget> = parseWidget(\n // Ignore the incoming widget type and hardcode \"deprecated-standin\"\n (_, ctx) => ctx.success(\"deprecated-standin\" as const),\n // Allow any widget options\n looseObject({}),\n);\n","import {any, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseImages} from \"./images-map\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {PerseusRenderer} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusRenderer: Parser<PerseusRenderer> = defaulted(\n object({\n // TODO(benchristel): content is also defaulted to empty string in\n // renderer.tsx. See if we can remove one default or the other.\n content: defaulted(string, () => \"\"),\n // This module has an import cycle with parseWidgetsMap, because the\n // `group` widget can contain another renderer.\n // The anonymous function below ensures that we don't try to access\n // parseWidgetsMap before it's defined.\n widgets: defaulted(\n (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n () => ({}),\n ),\n images: parseImages,\n // deprecated\n metadata: any,\n }),\n // Default value\n () => ({\n content: \"\",\n widgets: {},\n images: {},\n }),\n);\n","import {array, union} from \"../general-purpose-parsers\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {PerseusArticle} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusArticle: Parser<PerseusArticle> = union(\n parsePerseusRenderer,\n).or(array(parsePerseusRenderer)).parser;\n","import {\n any,\n boolean,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseImages} from \"./images-map\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nexport const parseHint = object({\n replace: defaulted(optional(boolean), () => undefined),\n placeholder: defaulted(optional(boolean), () => undefined),\n content: string,\n widgets: defaulted(parseWidgetsMap, () => ({})),\n images: parseImages,\n // deprecated\n metadata: any,\n});\n","import {boolean, defaulted, object} from \"../general-purpose-parsers\";\n\nconst booleanOrFalse = defaulted(boolean, () => false);\n\nexport const parsePerseusAnswerArea = defaulted(\n object({\n calculator: booleanOrFalse,\n financialCalculatorMonthlyPayment: booleanOrFalse,\n financialCalculatorTotalAmount: booleanOrFalse,\n financialCalculatorTimeToPayOff: booleanOrFalse,\n periodicTable: booleanOrFalse,\n periodicTableWithKey: booleanOrFalse,\n }),\n () => ({\n calculator: false,\n financialCalculatorMonthlyPayment: false,\n financialCalculatorTotalAmount: false,\n financialCalculatorTimeToPayOff: false,\n periodicTable: false,\n periodicTableWithKey: false,\n }),\n);\n","import {array, object} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseHint} from \"./hint\";\nimport {parsePerseusAnswerArea} from \"./perseus-answer-area\";\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\n\n// TODO(LEMS-4224): don't import from outside of the parser\n// eslint-disable-next-line import/no-restricted-paths\nimport type {PerseusItem} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusItem: Parser<PerseusItem> = object({\n question: parsePerseusRenderer,\n hints: defaulted(array(parseHint), () => []),\n answerArea: parsePerseusAnswerArea,\n});\n","import {\n constant,\n nullable,\n number,\n object,\n pair,\n} from \"../general-purpose-parsers\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nconst coord = pair(number, number);\nconst coordPair = pair(coord, coord);\n\nconst parseAbsoluteValueBranch = object({\n type: constant(\"absolute_value\"),\n coords: nullable(coordPair),\n});\n\nconst parseExponentialBranch = object({\n type: constant(\"exponential\"),\n asymptote: coordPair,\n coords: nullable(coordPair),\n});\n\nconst parseLinearBranch = object({\n type: constant(\"linear\"),\n coords: nullable(coordPair),\n});\n\nconst parseLogarithmBranch = object({\n type: constant(\"logarithm\"),\n asymptote: coordPair,\n coords: nullable(coordPair),\n});\n\nconst parseQuadraticBranch = object({\n type: constant(\"quadratic\"),\n coords: nullable(coordPair),\n});\n\nconst parseSinusoidBranch = object({\n type: constant(\"sinusoid\"),\n coords: nullable(coordPair),\n});\n\nconst parseTangentBranch = object({\n type: constant(\"tangent\"),\n coords: nullable(coordPair),\n});\n\nexport const parseGrapherUserInput = discriminatedUnionOn(\"type\")\n .withBranch(\"absolute_value\", parseAbsoluteValueBranch)\n .withBranch(\"exponential\", parseExponentialBranch)\n .withBranch(\"linear\", parseLinearBranch)\n .withBranch(\"logarithm\", parseLogarithmBranch)\n .withBranch(\"quadratic\", parseQuadraticBranch)\n .withBranch(\"sinusoid\", parseSinusoidBranch)\n .withBranch(\"tangent\", parseTangentBranch).parser;\n","import {parse} from \"./parse\";\nimport {parsePerseusArticle as migrateAndTypecheckPerseusArticle} from \"./perseus-parsers/perseus-article\";\nimport {parsePerseusItem as migrateAndTypecheckPerseusItem} from \"./perseus-parsers/perseus-item\";\nimport {parsePerseusRenderer as migrateAndTypecheckPerseusRenderer} from \"./perseus-parsers/perseus-renderer\";\nimport {parseUserInputMap} from \"./perseus-parsers/user-input-map\";\nimport {failure, isFailure} from \"./result\";\n\nimport type {Result} from \"./result\";\nimport type {\n PerseusItem,\n PerseusArticle,\n PerseusRenderer,\n} from \"../data-schema\";\nimport type {UserInputMap} from \"../validation.types\";\n\nexport type ParseFailureDetail = {\n /**\n * A human-readable error message describing where in the object tree\n * parsing failed.\n */\n message: string;\n /**\n * The raw result of parsing the input JSON, with no migrations applied.\n * Use at your own risk.\n */\n invalidObject: unknown;\n};\n\n/**\n * Parses a PerseusItem from a plain object or JSON string, migrates old\n * formats to the latest schema, and runtime-typechecks the result. Use this to\n * parse assessmentItem data.\n *\n * @returns a {@link Result} of the parsed PerseusItem. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is not well-formed JSON.\n */\nexport function parseAndMigratePerseusItem(\n data: unknown,\n): Result<PerseusItem, ParseFailureDetail> {\n const object: unknown = typeof data === \"string\" ? JSON.parse(data) : data;\n const result = parse(object, migrateAndTypecheckPerseusItem);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n\n/**\n * Parses a PerseusArticle from a plain object (or array) or JSON string,\n * migrates old formats to the latest schema, and runtime-typechecks the\n * result.\n *\n * @returns a {@link Result} of the parsed PerseusArticle. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is not well-formed JSON.\n */\nexport function parseAndMigratePerseusArticle(\n data: unknown,\n): Result<PerseusArticle, ParseFailureDetail> {\n const object: unknown = typeof data === \"string\" ? JSON.parse(data) : data;\n const result = parse(object, migrateAndTypecheckPerseusArticle);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n\n/**\n * Parses a UserInputMap from a plain object or JSON string, migrates old\n * formats to the latest schema, and runtime-typechecks the result.\n *\n * @returns a {@link Result} of the parsed UserInputMap. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is a string that is not well-formed\n * JSON.\n */\nexport function parseAndMigrateUserInputMap(\n data: unknown,\n): Result<UserInputMap, ParseFailureDetail> {\n const object: unknown = typeof data === \"string\" ? JSON.parse(data) : data;\n const result = parse(object, parseUserInputMap);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n\n/**\n * Parses a PerseusRenderer from a plain object or JSON string, migrates old\n * formats to the latest schema, and runtime-typechecks the result.\n *\n * @returns a {@link Result} of the parsed PerseusRenderer. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is a string that is not well-formed\n * JSON.\n */\nexport function parseAndMigratePerseusRenderer(\n data: unknown,\n): Result<PerseusRenderer, ParseFailureDetail> {\n const object: unknown = typeof data === \"string\" ? JSON.parse(data) : data;\n const result = parse(object, migrateAndTypecheckPerseusRenderer);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n","function deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n\nexport default deepClone;\n","/**\n * Errors utility for referencing the Perseus error taxonomy.\n */\nexport const Errors = Object.freeze({\n /**\n * @property {ErrorKind} Unknown The kind of error is not known.\n */\n Unknown: \"Unknown\",\n /**\n * @property {ErrorKind} Internal The error is internal to the executing code.\n */\n Internal: \"Internal\",\n /**\n * @property {ErrorKind} InvalidInput There was a problem with the provided\n * input, such as the wrong format or a null value.\n */\n InvalidInput: \"InvalidInput\",\n /**\n * @property {ErrorKind} NotAllowed There was a problem due to the state of\n * the system not matching the requested operation or input. For example,\n * trying to create a username that is valid, but is already taken by\n * another user. Use {@link InvalidInput} instead when the input isn't\n * valid regardless of the state of the system. Use {@link NotFound} when\n * the failure is due to not being able to find a resource.\n */\n NotAllowed: \"NotAllowed\",\n /**\n * @property {ErrorKind} TransientService There was a problem when making a\n * request to a service.\n */\n TransientService: \"TransientService\",\n /**\n * @property {ErrorKind} Service There was a non-transient problem when\n * making a request to service.\n */\n Service: \"Service\",\n});\n\n/**\n * @type {ErrorKind} The kind of error being reported\n */\nexport type ErrorKind = (typeof Errors)[keyof typeof Errors];\n","import type {ErrorKind} from \"./errors\";\nimport type {Metadata} from \"@khanacademy/wonder-stuff-core\";\n\ntype Options = {\n metadata?: Metadata | null | undefined;\n};\n\nexport class PerseusError extends Error {\n kind: ErrorKind;\n metadata: Metadata | null | undefined;\n\n constructor(message: string, kind: ErrorKind, options?: Options) {\n super(message);\n this.kind = kind;\n this.metadata = options?.metadata;\n }\n}\n","/**\n * _ utilities for objects\n */\n\nimport _ from \"underscore\";\n\n/**\n * Does a pluck on keys inside objects in an object\n *\n * Ex:\n * tools = {\n * translation: {\n * enabled: true\n * },\n * rotation: {\n * enabled: false\n * }\n * };\n * pluckObject(tools, \"enabled\") returns {\n * translation: true\n * rotation: false\n * }\n */\nexport const pluck = function (table: any, subKey: string): any {\n return _.object(\n _.map(table, function (value, key) {\n return [key, value[subKey]];\n }),\n );\n};\n\n/**\n * Maps an object to an object\n *\n * > mapObject({a: '1', b: '2'}, (value, key) => {\n * return value + 1;\n * });\n * {a: 2, b: 3}\n */\nexport const mapObject = function <K extends string, V, U>(\n obj: Record<K, V>,\n lambda: (arg1: V, arg2: K) => U,\n): Record<K, U> {\n const result: Record<string, any> = {};\n Object.keys(obj).forEach((key) => {\n // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'K'.\n result[key] = lambda(obj[key], key);\n });\n return result;\n};\n","class Registry<T> {\n private name: string;\n private contents: Record<string, T> = {};\n private anythingRegistered = false;\n\n constructor(name = \"Registry\") {\n this.name = name;\n }\n\n private throwIfUnregistered() {\n if (!this.anythingRegistered) {\n throw new Error(`${this.name} accessed before initialization!`);\n }\n }\n\n has(key: string): boolean {\n this.throwIfUnregistered();\n return Object.prototype.hasOwnProperty.call(this.contents, key);\n }\n\n get(key: string): T | undefined {\n this.throwIfUnregistered();\n return this.contents[key];\n }\n\n keys(): Array<string> {\n this.throwIfUnregistered();\n return Object.keys(this.contents);\n }\n\n entries(): Array<[string, T]> {\n this.throwIfUnregistered();\n return Object.entries(this.contents);\n }\n\n set(key: string, value: T): void {\n this.anythingRegistered = true;\n this.contents[key] = value;\n }\n}\n\nexport default Registry;\n","/* Note(tamara): Brought over from the perseus package packages/perseus/src/util.ts file.\n May be useful to bring other perseus package utilities here. Contains utility functions\n and types used across multiple widgets for randomization and shuffling. */\n\nimport _ from \"underscore\";\n\n/**\n * A random number generator. Should return floats in the interval [0, 1), like\n * Math.random().\n */\nexport type RNG = () => number;\n\nexport const seededRNG: (seed: number) => RNG = function (seed: number): RNG {\n let randomSeed = seed;\n\n return function () {\n // Robert Jenkins' 32 bit integer hash function.\n let seed = randomSeed;\n seed = (seed + 0x7ed55d16 + (seed << 12)) & 0xffffffff;\n seed = (seed ^ 0xc761c23c ^ (seed >>> 19)) & 0xffffffff;\n seed = (seed + 0x165667b1 + (seed << 5)) & 0xffffffff;\n seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;\n seed = (seed + 0xfd7046c5 + (seed << 3)) & 0xffffffff;\n seed = (seed ^ 0xb55a4f09 ^ (seed >>> 16)) & 0xffffffff;\n return (randomSeed = seed & 0xfffffff) / 0x10000000;\n };\n};\n\n/**\n * Shuffle an array using a given random seed or function.\n * If `ensurePermuted` is true, the input and output are guaranteed to be\n * distinct permutations.\n */\nexport function shuffle<T>(\n array: ReadonlyArray<T>,\n randomSeed: number | RNG,\n ensurePermuted = false,\n): T[] {\n let random;\n if (typeof randomSeed === \"function\") {\n random = randomSeed;\n } else {\n random = seededRNG(randomSeed);\n }\n\n function isValidShuffle(shuffled: readonly T[]) {\n return ensurePermuted ? !_.isEqual(array, shuffled) : true;\n }\n\n return constrainedShuffle(array, random, isValidShuffle);\n}\n\nexport function constrainedShuffle<T>(\n array: readonly T[],\n random: RNG,\n isValidShuffle: (shuffled: readonly T[]) => boolean,\n): T[] {\n const maxIterations = 100;\n const shuffled = [...array];\n\n // Return early if all elements are equal -- both for performance, and\n // to avoid going into an infinite loop in the (common) case where\n // isValidShuffle is checking the order of the values.\n if (shuffled.every((value) => _.isEqual(value, shuffled[0]))) {\n return shuffled;\n }\n\n for (let i = 0; i < maxIterations; i++) {\n shuffleInPlace(shuffled, random);\n if (isValidShuffle(shuffled)) {\n return shuffled;\n }\n }\n\n throw new Error(\n `constrainedShuffle: constraint not met after ${maxIterations} attempts`,\n );\n}\n\nfunction shuffleInPlace<T>(a: T[], random: RNG): void {\n // The Fisher-Yates shuffling algorithm. See:\n // https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\n for (let i = a.length - 1; i > 0; i--) {\n const k = randomIntInRange(0, i, random);\n [a[k], a[i]] = [a[i], a[k]];\n }\n}\n\nexport function randomIntInRange(\n min: number,\n max: number,\n random: RNG,\n): number {\n return Math.floor(random() * (max - min + 1)) + min;\n}\n\nexport const random: RNG = seededRNG(new Date().getTime() & 0xffffffff);\n","import {getTablePublicWidgetOptions} from \"./table-util\";\n\nimport type {TablePublicWidgetOptions} from \"./table-util\";\nimport type {PerseusTableWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type TableDefaultWidgetOptions = Pick<\n PerseusTableWidgetOptions,\n \"headers\" | \"rows\" | \"columns\" | \"answers\"\n>;\n\nconst defaultRows = 4;\nconst defaultColumns = 1;\n\n// initialize a 2D array\n// (defaultRows x defaultColumns) of empty strings\nconst answers = new Array(defaultRows)\n .fill(0)\n .map(() => new Array(defaultColumns).fill(\"\"));\n\nconst defaultWidgetOptions: TableDefaultWidgetOptions = {\n headers: [\"\"],\n rows: defaultRows,\n columns: defaultColumns,\n answers: answers,\n};\n\nconst tableWidgetLogic: WidgetLogic<\n PerseusTableWidgetOptions,\n TablePublicWidgetOptions\n> = {\n name: \"table\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getTablePublicWidgetOptions,\n accessible: true,\n};\n\nexport default tableWidgetLogic;\n","import {Errors} from \"../error/errors\";\nimport {PerseusError} from \"../error/perseus-error\";\nimport Registry from \"../utils/registry\";\n\nimport categorizerWidgetLogic from \"./categorizer\";\nimport csProgramWidgetLogic from \"./cs-program\";\nimport definitionWidgetLogic from \"./definition\";\nimport deprecatedStandinWidgetLogic from \"./deprecated-standin\";\nimport dropdownWidgetLogic from \"./dropdown\";\nimport explanationWidgetLogic from \"./explanation\";\nimport expressionWidgetLogic from \"./expression\";\nimport gradedGroupWidgetLogic from \"./graded-group\";\nimport gradedGroupSetWidgetLogic from \"./graded-group-set\";\nimport grapherWidgetLogic from \"./grapher\";\nimport groupWidgetLogic from \"./group\";\nimport iframeWidgetLogic from \"./iframe\";\nimport imageWidgetLogic from \"./image\";\nimport inputNumberWidgetLogic from \"./input-number\";\nimport interactionWidgetLogic from \"./interaction\";\nimport interactiveGraphWidgetLogic from \"./interactive-graph\";\nimport labelImageWidgetLogic from \"./label-image\";\nimport matcherWidgetLogic from \"./matcher\";\nimport matrixWidgetLogic from \"./matrix\";\nimport measurerWidgetLogic from \"./measurer\";\nimport numberLineWidgetLogic from \"./number-line\";\nimport numericInputWidgetLogic from \"./numeric-input\";\nimport ordererWidgetLogic from \"./orderer\";\nimport phetSimulationWidgetLogic from \"./phet-simulation\";\nimport plotterWidgetLogic from \"./plotter\";\nimport pythonProgramWidgetLogic from \"./python-program\";\nimport radioWidgetLogic from \"./radio\";\nimport sorterWidgetLogic from \"./sorter\";\nimport tableWidgetLogic from \"./table\";\nimport videoWidgetLogic from \"./video\";\n\nimport type {\n PublicWidgetOptionsFunction,\n WidgetLogic,\n} from \"./logic-export.types\";\nimport type {PerseusWidgetOptions, PerseusWidget} from \"../data-schema\";\nimport type {Alignment} from \"../types\";\n\nconst widgets = new Registry<WidgetLogic<any, any>>(\"Core widget registry\");\n\nexport function registerWidget(type: string, logic: WidgetLogic<any, any>) {\n widgets.set(type, logic);\n}\n\nexport function isWidgetRegistered(type: string) {\n const widgetLogic = widgets.get(type);\n return Boolean(widgetLogic);\n}\n\nexport function getCurrentVersion(type: string) {\n const widgetLogic = widgets.get(type);\n return widgetLogic?.version || {major: 0, minor: 0};\n}\n\n// TODO(LEMS-2870): getPublicWidgetOptionsFunction/PublicWidgetOptionsFunction\n// need better types\nexport const getPublicWidgetOptionsFunction = (\n type: string,\n): PublicWidgetOptionsFunction => {\n return widgets.get(type)?.getPublicWidgetOptions ?? ((i: any) => i);\n};\n\nexport function getDefaultWidgetOptions(type: string) {\n const widgetLogic = widgets.get(type);\n return widgetLogic?.defaultWidgetOptions || {};\n}\n\nexport function isAccessible(\n type: string,\n widgetOptions: PerseusWidgetOptions,\n): boolean {\n const accessible = widgets.get(type)?.accessible;\n return typeof accessible === \"function\"\n ? accessible(widgetOptions)\n : !!accessible;\n}\n\nexport const traverseChildWidgets = (\n widgetInfo: PerseusWidget,\n traverseRenderer: any,\n): PerseusWidget => {\n if (!traverseRenderer) {\n throw new PerseusError(\n \"traverseRenderer must be provided, but was not\",\n Errors.Internal,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!widgetInfo || !widgetInfo.type || !widgets.get(widgetInfo.type)) {\n return widgetInfo;\n }\n\n const widgetExports = widgets.get(widgetInfo.type);\n const props = widgetInfo.options;\n\n if (widgetExports?.traverseChildWidgets != null && props != null) {\n const newProps = widgetExports.traverseChildWidgets(\n props,\n traverseRenderer,\n );\n return {...widgetInfo, options: newProps};\n }\n return widgetInfo;\n};\n\n/**\n * Handling for the optional alignments for widgets\n * See widget-container.jsx for details on how alignments are implemented.\n */\n\n/**\n * Returns the list of supported alignments for the given (string) widget\n * type. This is used primarily at editing time to display the choices\n * for the user.\n *\n * Supported alignments are given as an array of strings in the exports of\n * a widget's module.\n */\nexport const getSupportedAlignments = (\n type: string,\n): ReadonlyArray<Alignment> => {\n const widgetLogic = widgets.get(type);\n if (!widgetLogic?.supportedAlignments?.[0]) {\n // default alignments\n return [\"default\"];\n }\n return widgetLogic?.supportedAlignments;\n};\n\n/**\n * For the given (string) widget type, determine the default alignment for\n * the widget. This is used at rendering time to go from \"default\" alignment\n * to the actual alignment displayed on the screen.\n *\n * The default alignment is given either as a string (called\n * `defaultAlignment`) or a function (called `getDefaultAlignment`) on\n * the exports of a widget's module.\n */\nexport const getDefaultAlignment = (type: string): Alignment => {\n const widgetLogic = widgets.get(type);\n if (!widgetLogic?.defaultAlignment) {\n return \"block\";\n }\n return widgetLogic.defaultAlignment;\n};\n\n/**\n * Returns the CSS class name corresponding to the specified widget alignment.\n * Uses explicit mapping to make it easy to locate related CSS style definitions.\n */\nexport const getAlignmentClassName = (\n type: string,\n alignment: Alignment,\n): string => {\n switch (alignment) {\n case \"block\":\n return \" widget-block\";\n case \"inline-block\":\n return \" widget-inline-block\";\n case \"inline\":\n return \" widget-inline\";\n case \"wrap-left\":\n return \" widget-wrap-left\";\n case \"wrap-right\":\n return \" widget-wrap-right\";\n case \"full-width\":\n return \" widget-full-width\";\n case \"default\":\n // This is for widgets that don't have supportedAlignments\n // It doesn't have any impact on styling it is used for error handling\n return getDefaultAlignment(type);\n default:\n return \"\";\n }\n};\n\n/**\n * We use a function here rather than registering widgets\n * at the top-level of the file to avoid circular dependencies.\n * Logic that needs core widget functionality\n * (like a prod or in tests)\n * need to call this function before trying to use that logic.\n */\nexport function registerCoreWidgets() {\n const widgets = [\n categorizerWidgetLogic,\n csProgramWidgetLogic,\n definitionWidgetLogic,\n deprecatedStandinWidgetLogic,\n dropdownWidgetLogic,\n explanationWidgetLogic,\n expressionWidgetLogic,\n gradedGroupWidgetLogic,\n gradedGroupSetWidgetLogic,\n grapherWidgetLogic,\n groupWidgetLogic,\n iframeWidgetLogic,\n imageWidgetLogic,\n inputNumberWidgetLogic,\n interactionWidgetLogic,\n interactiveGraphWidgetLogic,\n labelImageWidgetLogic,\n matcherWidgetLogic,\n matrixWidgetLogic,\n measurerWidgetLogic,\n numberLineWidgetLogic,\n numericInputWidgetLogic,\n ordererWidgetLogic,\n phetSimulationWidgetLogic,\n plotterWidgetLogic,\n pythonProgramWidgetLogic,\n radioWidgetLogic,\n sorterWidgetLogic,\n tableWidgetLogic,\n videoWidgetLogic,\n ];\n\n widgets.forEach((w) => {\n // eslint-disable-next-line no-restricted-syntax\n registerWidget(w.name, w as WidgetLogic<any, any>);\n });\n}\n","import {Errors} from \"../error/errors\";\nimport {PerseusError} from \"../error/perseus-error\";\nimport {mapObject} from \"../utils/objective_\";\n\nimport {\n getCurrentVersion,\n getDefaultWidgetOptions,\n getSupportedAlignments,\n} from \"./core-widget-registry\";\n\nimport type {PerseusWidget, PerseusWidgetsMap} from \"../data-schema\";\n\nexport const applyDefaultsToWidget = (\n oldWidgetInfo: PerseusWidget,\n): PerseusWidget => {\n const type = oldWidgetInfo.type;\n\n const latestVersion = getCurrentVersion(type);\n // pre-July 2014, widgets did not have a version field.\n const version = oldWidgetInfo.version ?? latestVersion;\n\n // Minor version upgrades (eg. new optional props) don't have\n // transform functions. Instead, we fill in the new props with their\n // defaults.\n const defaultOptions = getDefaultWidgetOptions(type);\n const options = {\n ...defaultOptions,\n ...oldWidgetInfo.options,\n };\n\n let alignment = oldWidgetInfo.alignment;\n\n // Widgets that support multiple alignments will \"lock in\" the\n // alignment to the alignment that would be listed first in the\n // select box.\n if (alignment == null || alignment === \"default\") {\n alignment = getSupportedAlignments(type)?.[0];\n if (!alignment) {\n throw new PerseusError(\n \"applyDefaultsToWidget: No default alignment found\",\n Errors.Internal,\n {metadata: {widgetType: type}},\n );\n }\n }\n\n return {\n // maintain other info, like type\n ...oldWidgetInfo,\n version,\n graded: oldWidgetInfo.graded ?? true,\n alignment,\n static: oldWidgetInfo.static ?? false,\n options,\n };\n};\n\nexport function applyDefaultsToWidgets(\n oldWidgetOptions: PerseusWidgetsMap,\n): PerseusWidgetsMap {\n // The cast to PerseusWidgetsMap is needed because TS can't prove that\n // every key in the map will match the associated widget's `type`\n // property.\n // eslint-disable-next-line no-restricted-syntax\n return mapObject(\n oldWidgetOptions,\n applyDefaultsToWidget,\n ) as PerseusWidgetsMap;\n}\n","import _ from \"underscore\";\n\nimport {applyDefaultsToWidgets} from \"../widgets/apply-defaults\";\nimport {getPublicWidgetOptionsFunction} from \"../widgets/core-widget-registry\";\n\nimport deepClone from \"./deep-clone\";\n\nimport type {PerseusRenderer} from \"../data-schema\";\n\n/**\n * Return a copy of a PerseusRenderer with rubric data removed (ie answers)\n *\n * @param original - the original, full PerseusRenderer (which includes the rubric - aka answer data)\n */\nexport default function splitPerseusRenderer(\n original: PerseusRenderer,\n): PerseusRenderer {\n const clone = deepClone(original);\n const originalWidgets = clone.widgets ?? {};\n\n const upgradedWidgets = applyDefaultsToWidgets(originalWidgets);\n const splitWidgets = {};\n\n for (const [id, widget] of Object.entries(upgradedWidgets)) {\n /**\n * Static widgets are presentational, used to represent concepts\n * rather than collect answers from learners. For instance we might\n * want a static InteractiveGraph that shows learners a chart before\n * we give them a Radio widget to check their understanding of the chart.\n * We need to keep the answers in this case because it's pre-scoring information.\n */\n if (widget.static) {\n splitWidgets[id] = widget;\n } else {\n const publicWidgetOptionsFun = getPublicWidgetOptionsFunction(\n widget.type,\n );\n splitWidgets[id] = {\n ...widget,\n // eslint-disable-next-line no-restricted-syntax\n options: publicWidgetOptionsFun(widget.options as any),\n };\n }\n }\n\n return {\n ...original,\n widgets: splitWidgets,\n };\n}\n","import {parseAndMigratePerseusItem} from \"../parse-perseus-json\";\nimport {isFailure} from \"../parse-perseus-json/result\";\n\nimport deepClone from \"./deep-clone\";\nimport splitPerseusRenderer from \"./split-perseus-renderer\";\n\nimport type {PerseusItem} from \"../data-schema\";\n\n/**\n * Return a copy of a PerseusItem with rubric data removed (ie answers)\n *\n * @param original - the original, full PerseusItem (which includes the rubric - aka answer data)\n */\nexport default function splitPerseusItem(original: PerseusItem): PerseusItem {\n const item = deepClone(original);\n\n return {\n ...item,\n question: splitPerseusRenderer(item.question),\n /**\n * We can't include the hints because they often contain the answer.\n *\n * However the UI needs to know how many hints there are before we have\n * answerful PerseusItems. In a crunch, we decided to replace existing hints\n * with empty hints and add a placeholder flag to signal that they're\n * not real hints.\n *\n * TODO(LEMS-3806): there's probably a better way to do this\n */\n hints: original.hints.map(() => ({\n content: \"\",\n widgets: {},\n images: {},\n placeholder: true,\n })),\n };\n}\n\n/**\n * Returns a JSON copy of a PerseusItem with rubric data (i.e. answers and\n * hints) removed. Idempotent and deterministic.\n *\n * @param data a {@linkcode PerseusItem}, either as JSON or as an object.\n * @returns {string} the answerless data formatted as JSON\n * @throws {SyntaxError} given malformed JSON or data that can't be parsed as\n * a Perseus item.\n */\nexport function splitPerseusItemJSON(data: unknown): string {\n const parseResult = parseAndMigratePerseusItem(data);\n if (isFailure(parseResult)) {\n throw new SyntaxError(parseResult.detail.message);\n }\n const item = parseResult.value;\n\n return JSON.stringify(splitPerseusItem(item));\n}\n"],"names":["success","value","type","failure","detail","isFailure","result","isSuccess","all","results","combineFailureDetails","a","values","failureDetails","push","length","reduce","ErrorTrackingParseContext","expected","badValue","wrapInArray","path","forSubtree","key","constructor","Array","isArray","formatPath","map","formatPathSegment","join","segment","validIdentifier","test","JSON","stringify","toString","message","conjoin","items","allButLast","slice","last","parse","parser","any","rawValue","ctx","array","elementParser","elementResults","elem","i","Result","concat","arrayWithIndex","elementParserFactory","index","b","boolean","constant","acceptedValue","Object","is","String","defaulted","fallback","defaultedNonEmptyString","trim","enumeration","acceptedValues","indexOf","v","objectConstructorString","prototype","functionToString","Function","isPlainObject","x","getPrototypeOf","call","nullable","parseValue","number","Number","isFinite","objectWithAllPropertiesRequired","schema","object","objectParserWithInitializer","looseObject","initializeParsedValue","parsed","mismatches","prop","propParser","entries","undefined","optional","pair","parseA","parseB","rawA","rawB","resultA","resultB","pipeParsers","p","ParserPipeline","then","nextParser","composeParsers","parserA","parserB","partialResult","record","parseKey","entryCtx","keyResult","valueResult","string","trio","parseC","resultC","union","parseBranch","UnionBuilder","or","newBranch","either","parsePerseusImageDetail","width","height","parseImages","parseWidget","parseType","parseOptions","static","graded","alignment","options","version","major","minor","parseWidgetWithVersion","parseVersion","parseCategorizerWidget","categories","randomizeItems","parseCSProgramWidget","programID","programType","settings","name","showEditor","showButtons","parseDefinitionWidget","togglePrompt","definition","parseDropdownWidget","placeholder","ariaLabel","visibleLabel","choices","content","correct","parseExplanationWidget","showPrompt","hidePrompt","explanation","widgets","rawVal","parseWidgetsMap","KeypadKeys","deriveExtraKeys","widgetOptions","extraKeys","defaultKeys","answerForms","uniqueExtraVariables","uniqueExtraConstants","answerForm","maybeExpr","KAS","expr","isGreek","symbol","toKey","toUpperCase","isKey","includes","variable","getVars","maybeKey","getConsts","extraVariables","keys","sort","extraConstants","convert","f","keypadKeys","parseLegacyButtonSet","parseLegacyButtonSets","versionedWidgetOptions","latestMajorVersion","parseLatest","VersionedWidgetOptionsParserBuilder","latest","raw","withMigrationFrom","majorVersion","parseOldVersion","migrateToNextVersion","parseOtherVersions","migrateToLatest","old","parseThisVersion","parseThisVersionAndMigrateToLatest","versionParseResult","parseVersionedObject","stringOrNumberOrNullOrUndefined","numberOrNullToString","parsePossiblyInvalidAnswerForm","form","simplify","considered","removeInvalidAnswerForms","possiblyInvalid","flatMap","parseAnswerForms","version2","parseExpressionWidgetV2","functions","times","buttonSets","buttonsVisible","version1","parseExpressionWidgetV1","migrateV1ToV2","widget","version0","parseExpressionWidgetV0","migrateV0ToV1","parseExpressionWidget","parseFreeResponseWidget","allowUnlimitedCharacters","characterLimit","question","scoringCriteria","text","falseToNull","parseGradedGroupWidgetOptions","title","hasHint","hint","parsePerseusRenderer","widgetEnabled","immutableWidgets","images","parseGradedGroupWidget","parseGradedGroupSetWidget","gradedGroups","discriminatedUnionOn","discriminantKey","noMoreBranches","DiscriminatedUnionBuilder","withBranch","discriminantValue","parseNewVariant","parseNewBranch","discriminatedUnionBranch","parseVariant","parseOtherBranches","pairOfNumbers","pairOfPoints","emptyArray","parseCoords","parseCorrect","coords","asymptote","parseGrapherWidget","availableTypes","graph","backgroundImage","bottom","left","scale","url","box","editableSettings","gridStep","labels","markings","range","rulerLabel","rulerTicks","showProtractor","showRuler","showTooltips","snapStep","step","valid","parseGroupWidget","parseIframeWidget","allowFullScreen","allowTopNavigation","stringToNumber","parsedNumber","isNaN","emptyToZero","imageDimensionToNumber","dimensionOrUndefined","parsePerseusImageBackground","top","parseImageWidget","caption","alt","longDescription","decorative","coordinates","booleanToString","parseInputNumberWidget","answerType","inexact","maxError","rightAlign","size","stringOrEmpty","parseFunctionElement","funcName","rangeMin","rangeMax","color","strokeDasharray","strokeWidth","parseLabelElement","label","coordX","coordY","parseLineElement","startX","startY","endX","endY","arrows","parseMovableLineElement","startSubscript","endSubscript","constraint","snap","constraintFn","constraintXMin","constraintXMax","constraintYMin","constraintYMax","parseMovablePointElement","varSubscript","parseParametricElement","y","parsePointElement","parseRectangleElement","parseInteractionWidget","tickStep","elements","parsePerseusGraphTypeAngle","showAngles","allowReflexAngles","angleOffsetDeg","snapDegrees","match","startCoords","pointLabels","showPointLabels","parsePerseusGraphTypeCircle","center","radius","parsePerseusGraphTypeLinear","parsePerseusGraphTypeLinearSystem","parsePerseusGraphTypeNone","parsePerseusGraphTypePoint","numPoints","coord","parsePerseusGraphTypePolygon","numSides","showSides","snapTo","parsePerseusGraphTypeQuadratic","parsePerseusGraphTypeRay","parsePerseusGraphTypeSegment","numSegments","parsePerseusGraphTypeSinusoid","parsePerseusGraphTypeExponential","parsePerseusGraphTypeAbsoluteValue","parsePerseusGraphTypeTangent","parsePerseusGraphTypeLogarithm","parsePerseusGraphTypeVector","parsePerseusGraphType","parseLockedFigureColor","parseLockedFigureFillType","parseLockedLineStyle","parseStrokeWeight","parseLockedLabelType","parseLockedPointType","filled","parseLockedLineType","kind","points","lineStyle","showPoint1","showPoint2","weight","parseLockedVectorType","parseLockedEllipseType","angle","fillStyle","strokeStyle","parseLockedPolygonType","showVertices","numberOrNegativeInfinity","Infinity","numberOrPositiveInfinity","parseLockedFunctionDomain","parseLockedFunctionType","equation","directionalAxis","domain","parseLockedFigure","parseLabelLocation","parseInteractiveGraphWidget","labelLocation","showAxisArrows","xMin","xMax","yMin","yMax","showAxisTicks","lockedFigures","fullGraphAriaLabel","fullGraphAriaDescription","parseLabelImageWidget","imageUrl","imageAlt","imageHeight","imageWidth","markers","answers","hideChoicesFromInstructions","multipleAnswers","matcherOptions","right","orderMatters","padding","getDefaultOptions","parseMatcherWidget","numberOrStringOrNaN","NaN","numeric","parseMatrixWidget","prefix","suffix","cursorPosition","matrixBoardSize","parseMeasurerWidget","image","rulerPixels","rulerLength","parseMoleculeRendererWidget","widgetId","rotationAngle","smiles","emptyStringToNull","parseNumberLineWidget","labelRange","labelStyle","labelTicks","isTickCtrl","isInequality","divisionRange","numDivisions","snapDivisions","correctRel","correctX","initialX","parseMathFormat","parseSimplify","deprecatedSimplifyValuesToRequired","parseNumericInputWidget","status","strict","labelText","coefficient","parseRenderer","largeToAuto","parseOrdererWidget","correctOptions","otherOptions","layout","parsePhetSimulationWidget","description","plotterPlotTypes","parsePlotterWidget","maxY","scaleY","labelInterval","snapsPerLine","starting","picUrl","picSize","picBoxHeight","plotDimensions","parsePythonProgramWidget","deriveNumCorrect","filter","c","parseWidgetsMapOrUndefined","id","generateChoiceId","parseOnePerLine","parseNoneOfTheAbove","version3","parseRadioWidgetV3","numCorrect","rationale","isNoneOfTheAbove","hasNoneOfTheAbove","countChoices","randomize","multipleSelect","deselectEnabled","parseRadioWidgetV2","clue","onePerLine","displayCount","noneOfTheAbove","parseRadioWidgetV1","parseRadioWidgetV0","migrateV2toV3","choice","_","rest","parseRadioWidget","parseSorterWidget","parseTableWidget","headers","rows","columns","parseVideoWidget","location","parseStringToNonNegativeInt","parseWidgetIdComponents","widgetsMap","entryResult","parseWidgetsMapEntry","widgetMap","idComponentsResult","split","n","parseAndAssign","widgetResult","parseDeprecatedWidget","metadata","parseHint","replace","booleanOrFalse","parsePerseusAnswerArea","calculator","financialCalculatorMonthlyPayment","financialCalculatorTotalAmount","financialCalculatorTimeToPayOff","periodicTable","periodicTableWithKey","parsePerseusItem","hints","answerArea","coordPair","parseAbsoluteValueBranch","parseExponentialBranch","parseLinearBranch","parseLogarithmBranch","parseQuadraticBranch","parseSinusoidBranch","parseTangentBranch","parseAndMigratePerseusItem","data","migrateAndTypecheckPerseusItem","invalidObject","deepClone","obj","Errors","freeze","Unknown","Internal","InvalidInput","NotAllowed","TransientService","Service","PerseusError","Error","mapObject","lambda","forEach","Registry","throwIfUnregistered","anythingRegistered","has","hasOwnProperty","contents","get","set","seededRNG","seed","randomSeed","Date","getTime","defaultRows","defaultColumns","fill","getCurrentVersion","widgetLogic","getPublicWidgetOptionsFunction","getPublicWidgetOptions","getDefaultWidgetOptions","defaultWidgetOptions","getSupportedAlignments","supportedAlignments","applyDefaultsToWidget","oldWidgetInfo","latestVersion","defaultOptions","widgetType","applyDefaultsToWidgets","oldWidgetOptions","splitPerseusRenderer","original","clone","originalWidgets","upgradedWidgets","splitWidgets","publicWidgetOptionsFun","splitPerseusItem","item","splitPerseusItemJSON","parseResult","SyntaxError"],"mappings":"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"}