Skip to content

Commit 0df0b19

Browse files
authored
Move Perseus JSON parsers to perseus-core (#2155)
## Summary: These parsers will need to run in a NodeJS service for server-side scoring. The server needs to be able to import them without also pulling in JSX. Moving them to perseus-core means we can't validate dynamically-registered widgets as strictly, but that seems like a small sacrifice given that a) dynamic widgets are not currently used in production, and b) the validation we can do on them would not be particularly strict in any case. Issue: LEMS-2774 Test plan: `yarn test` Author: benchristel Reviewers: handeyeco, jeremywiebe, benchristel Required Reviewers: Approved By: handeyeco, jeremywiebe Checks: ✅ Publish npm snapshot (ubuntu-latest, 20.x), ✅ Check for .changeset entries for all changed files (ubuntu-latest, 20.x), ✅ Cypress (ubuntu-latest, 20.x), ✅ Lint, Typecheck, Format, and Test (ubuntu-latest, 20.x), ✅ Publish Storybook to Chromatic (ubuntu-latest, 20.x), ✅ Check builds for changes in size (ubuntu-latest, 20.x) Pull Request URL: #2155
1 parent 8f89557 commit 0df0b19

File tree

171 files changed

+127
-92
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

171 files changed

+127
-92
lines changed

.changeset/forty-eels-play.md

+9

packages/perseus-core/src/index.ts

+14
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,20 @@ export {
2424
export {default as deepClone} from "./utils/deep-clone";
2525
export * as GrapherUtil from "./utils/grapher-util";
2626

27+
export {
28+
parsePerseusItem,
29+
parseAndMigratePerseusItem,
30+
parseAndMigratePerseusArticle,
31+
} from "./parse-perseus-json";
32+
33+
export {
34+
isSuccess,
35+
isFailure,
36+
type Result,
37+
type Success,
38+
type Failure,
39+
} from "./parse-perseus-json/result";
40+
2741
export {libVersion} from "./version";
2842

2943
export {Errors} from "./error/errors";

packages/perseus/src/util/parse-perseus-json/index.ts renamed to packages/perseus-core/src/parse-perseus-json/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import {isRealJSONParse} from "../is-real-json-parse";
1+
import {isRealJSONParse} from "../utils/is-real-json-parse";
22

33
import {parse} from "./parse";
44
import {parsePerseusArticle as migrateAndTypecheckPerseusArticle} from "./perseus-parsers/perseus-article";
55
import {parsePerseusItem as migrateAndTypecheckPerseusItem} from "./perseus-parsers/perseus-item";
66
import {failure, isFailure} from "./result";
77

88
import type {Result} from "./result";
9-
import type {PerseusItem, PerseusArticle} from "@khanacademy/perseus-core";
9+
import type {PerseusItem, PerseusArticle} from "../data-schema";
1010

1111
/**
1212
* Helper to parse PerseusItem JSON

packages/perseus/src/util/parse-perseus-json/parse-perseus-json.test.ts renamed to packages/perseus-core/src/parse-perseus-json/parse-perseus-json.test.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import {jest} from "@jest/globals";
22

33
import {assertFailure, assertSuccess, success} from "./result";
44

5-
import {parseAndMigratePerseusItem, parseAndMigratePerseusArticle} from ".";
5+
import {
6+
parseAndMigratePerseusItem,
7+
parseAndMigratePerseusArticle,
8+
} from "./index";
69

710
describe("parseAndMigratePerseusItem", () => {
811
it("should parse JSON", () => {

packages/perseus/src/util/parse-perseus-json/perseus-parsers/categorizer-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/categorizer-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1111

1212
import {parseWidget} from "./widget";
1313

14+
import type {CategorizerWidget} from "../../data-schema";
1415
import type {Parser} from "../parser-types";
15-
import type {CategorizerWidget} from "@khanacademy/perseus-core";
1616

1717
export const parseCategorizerWidget: Parser<CategorizerWidget> = parseWidget(
1818
constant("categorizer"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/cs-program-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/cs-program-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1111

1212
import {parseWidget} from "./widget";
1313

14+
import type {CSProgramWidget} from "../../data-schema";
1415
import type {Parser} from "../parser-types";
15-
import type {CSProgramWidget} from "@khanacademy/perseus-core";
1616

1717
export const parseCSProgramWidget: Parser<CSProgramWidget> = parseWidget(
1818
constant("cs-program"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/definition-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/definition-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
33

44
import {parseWidget} from "./widget";
55

6+
import type {DefinitionWidget} from "../../data-schema";
67
import type {Parser} from "../parser-types";
7-
import type {DefinitionWidget} from "@khanacademy/perseus-core";
88

99
export const parseDefinitionWidget: Parser<DefinitionWidget> = parseWidget(
1010
constant("definition"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/dropdown-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/dropdown-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1010

1111
import {parseWidget} from "./widget";
1212

13+
import type {DropdownWidget} from "../../data-schema";
1314
import type {Parser} from "../parser-types";
14-
import type {DropdownWidget} from "@khanacademy/perseus-core";
1515

1616
export const parseDropdownWidget: Parser<DropdownWidget> = parseWidget(
1717
constant("dropdown"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/explanation-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/explanation-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
44
import {parseWidget} from "./widget";
55
import {parseWidgetsMap} from "./widgets-map";
66

7+
import type {ExplanationWidget} from "../../data-schema";
78
import type {Parser} from "../parser-types";
8-
import type {ExplanationWidget} from "@khanacademy/perseus-core";
99

1010
export const parseExplanationWidget: Parser<ExplanationWidget> = parseWidget(
1111
constant("explanation"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/expression-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/expression-widget.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1616
import {versionedWidgetOptions} from "./versioned-widget-options";
1717
import {parseWidgetWithVersion} from "./widget";
1818

19-
import type {ParsedValue, Parser} from "../parser-types";
2019
import type {
2120
ExpressionWidget,
2221
PerseusExpressionAnswerForm,
23-
} from "@khanacademy/perseus-core";
22+
} from "../../data-schema";
23+
import type {ParsedValue, Parser} from "../parser-types";
2424

2525
const stringOrNumberOrNullOrUndefined = union(string)
2626
.or(number)

packages/perseus/src/util/parse-perseus-json/perseus-parsers/graded-group-set-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/graded-group-set-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import {array, constant, object} from "../general-purpose-parsers";
33
import {parseGradedGroupWidgetOptions} from "./graded-group-widget";
44
import {parseWidget} from "./widget";
55

6+
import type {GradedGroupSetWidget} from "../../data-schema";
67
import type {Parser} from "../parser-types";
7-
import type {GradedGroupSetWidget} from "@khanacademy/perseus-core";
88

99
export const parseGradedGroupSetWidget: Parser<GradedGroupSetWidget> =
1010
parseWidget(

packages/perseus/src/util/parse-perseus-json/perseus-parsers/graded-group-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/graded-group-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import {parsePerseusRenderer} from "./perseus-renderer";
1717
import {parseWidget} from "./widget";
1818
import {parseWidgetsMap} from "./widgets-map";
1919

20+
import type {GradedGroupWidget} from "../../data-schema";
2021
import type {Parser} from "../parser-types";
21-
import type {GradedGroupWidget} from "@khanacademy/perseus-core";
2222

2323
const falseToNull = pipeParsers(constant(false)).then(
2424
convert(() => null),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/grapher-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/grapher-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import {discriminatedUnionOn} from "../general-purpose-parsers/discriminated-uni
1515

1616
import {parseWidget} from "./widget";
1717

18+
import type {GrapherWidget} from "../../data-schema";
1819
import type {Parser} from "../parser-types";
19-
import type {GrapherWidget} from "@khanacademy/perseus-core";
2020

2121
const pairOfNumbers = pair(number, number);
2222

packages/perseus/src/util/parse-perseus-json/perseus-parsers/group-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/group-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import {constant} from "../general-purpose-parsers";
33
import {parsePerseusRenderer} from "./perseus-renderer";
44
import {parseWidget} from "./widget";
55

6+
import type {GroupWidget} from "../../data-schema";
67
import type {Parser} from "../parser-types";
7-
import type {GroupWidget} from "@khanacademy/perseus-core";
88

99
export const parseGroupWidget: Parser<GroupWidget> = parseWidget(
1010
constant("group"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/hint.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/hint.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1010
import {parseImages} from "./images-map";
1111
import {parseWidgetsMap} from "./widgets-map";
1212

13+
import type {Hint} from "../../data-schema";
1314
import type {Parser} from "../parser-types";
14-
import type {Hint} from "@khanacademy/perseus-core";
1515

1616
export const parseHint: Parser<Hint> = object({
1717
replace: optional(boolean),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/iframe-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/iframe-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1212

1313
import {parseWidget} from "./widget";
1414

15+
import type {IFrameWidget} from "../../data-schema";
1516
import type {Parser} from "../parser-types";
16-
import type {IFrameWidget} from "@khanacademy/perseus-core";
1717

1818
export const parseIframeWidget: Parser<IFrameWidget> = parseWidget(
1919
constant("iframe"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/image-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/image-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import {
1212
import {parsePerseusImageBackground} from "./perseus-image-background";
1313
import {parseWidget} from "./widget";
1414

15+
import type {ImageWidget} from "../../data-schema";
1516
import type {Parser} from "../parser-types";
16-
import type {ImageWidget} from "@khanacademy/perseus-core";
1717

1818
const pairOfNumbers = pair(number, number);
1919

packages/perseus/src/util/parse-perseus-json/perseus-parsers/images-map.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/images-map.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {number, object, record, string} from "../general-purpose-parsers";
22
import {defaulted} from "../general-purpose-parsers/defaulted";
33

4+
import type {PerseusImageDetail} from "../../data-schema";
45
import type {Parser} from "../parser-types";
5-
import type {PerseusImageDetail} from "@khanacademy/perseus-core";
66

77
export const parseImages: Parser<{[key: string]: PerseusImageDetail}> =
88
defaulted(

packages/perseus/src/util/parse-perseus-json/perseus-parsers/input-number-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/input-number-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {
1111

1212
import {parseWidget} from "./widget";
1313

14+
import type {InputNumberWidget} from "../../data-schema";
1415
import type {Parser} from "../parser-types";
15-
import type {InputNumberWidget} from "@khanacademy/perseus-core";
1616

1717
const booleanToString: Parser<string> = (rawValue, ctx) => {
1818
if (typeof rawValue === "boolean") {

packages/perseus/src/util/parse-perseus-json/perseus-parsers/interaction-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/interaction-widget.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ import {discriminatedUnionOn} from "../general-purpose-parsers/discriminated-uni
1818
import {parsePerseusImageBackground} from "./perseus-image-background";
1919
import {parseWidget} from "./widget";
2020

21-
import type {Parser} from "../parser-types";
2221
import type {
2322
InteractionWidget,
2423
PerseusInteractionElement,
25-
} from "@khanacademy/perseus-core";
24+
} from "../../data-schema";
25+
import type {Parser} from "../parser-types";
2626

2727
const pairOfNumbers = pair(number, number);
2828
const stringOrEmpty = defaulted(string, () => "");

packages/perseus/src/util/parse-perseus-json/perseus-parsers/interactive-graph-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/interactive-graph-widget.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import {lockedFigureColorNames} from "@khanacademy/perseus-core";
2-
1+
import {lockedFigureColorNames} from "../../data-schema";
32
import {
43
array,
54
boolean,
@@ -20,7 +19,6 @@ import {discriminatedUnionOn} from "../general-purpose-parsers/discriminated-uni
2019
import {parsePerseusImageBackground} from "./perseus-image-background";
2120
import {parseWidget} from "./widget";
2221

23-
import type {Parser} from "../parser-types";
2422
import type {
2523
InteractiveGraphWidget,
2624
LockedEllipseType,
@@ -46,7 +44,8 @@ import type {
4644
PerseusGraphTypeRay,
4745
PerseusGraphTypeSegment,
4846
PerseusGraphTypeSinusoid,
49-
} from "@khanacademy/perseus-core";
47+
} from "../../data-schema";
48+
import type {Parser} from "../parser-types";
5049

5150
// Used to represent 2-D points and ranges
5251
const pairOfNumbers = pair(number, number);

packages/perseus/src/util/parse-perseus-json/perseus-parsers/label-image-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/label-image-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1010

1111
import {parseWidget} from "./widget";
1212

13+
import type {LabelImageWidget} from "../../data-schema";
1314
import type {Parser} from "../parser-types";
14-
import type {LabelImageWidget} from "@khanacademy/perseus-core";
1515

1616
export const parseLabelImageWidget: Parser<LabelImageWidget> = parseWidget(
1717
constant("label-image"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/matcher-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/matcher-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import {
88

99
import {parseWidget} from "./widget";
1010

11+
import type {MatcherWidget} from "../../data-schema";
1112
import type {Parser} from "../parser-types";
12-
import type {MatcherWidget} from "@khanacademy/perseus-core";
1313

1414
export const parseMatcherWidget: Parser<MatcherWidget> = parseWidget(
1515
constant("matcher"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/matrix-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/matrix-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import {stringToNumber} from "../general-purpose-parsers/string-to-number";
1414

1515
import {parseWidget} from "./widget";
1616

17+
import type {MatrixWidget} from "../../data-schema";
1718
import type {Parser} from "../parser-types";
18-
import type {MatrixWidget} from "@khanacademy/perseus-core";
1919

2020
const numberOrString = union(number).or(string).parser;
2121
const numeric = pipeParsers(defaulted(numberOrString, () => NaN)).then(

packages/perseus/src/util/parse-perseus-json/perseus-parsers/measurer-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/measurer-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1111
import {parsePerseusImageBackground} from "./perseus-image-background";
1212
import {parseWidget} from "./widget";
1313

14+
import type {MeasurerWidget} from "../../data-schema";
1415
import type {Parser} from "../parser-types";
15-
import type {MeasurerWidget} from "@khanacademy/perseus-core";
1616

1717
export const parseMeasurerWidget: Parser<MeasurerWidget> = parseWidget(
1818
constant("measurer"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/molecule-renderer-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/molecule-renderer-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import {
88

99
import {parseWidget} from "./widget";
1010

11+
import type {MoleculeRendererWidget} from "../../data-schema";
1112
import type {Parser} from "../parser-types";
12-
import type {MoleculeRendererWidget} from "@khanacademy/perseus-core";
1313

1414
export const parseMoleculeRendererWidget: Parser<MoleculeRendererWidget> =
1515
parseWidget(

packages/perseus/src/util/parse-perseus-json/perseus-parsers/number-line-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/number-line-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1515

1616
import {parseWidget} from "./widget";
1717

18+
import type {NumberLineWidget} from "../../data-schema";
1819
import type {Parser} from "../parser-types";
19-
import type {NumberLineWidget} from "@khanacademy/perseus-core";
2020

2121
const emptyStringToNull = pipeParsers(constant("")).then(
2222
convert(() => null),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/numeric-input-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/numeric-input-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1616

1717
import {parseWidget} from "./widget";
1818

19+
import type {NumericInputWidget} from "../../data-schema";
1920
import type {Parser} from "../parser-types";
20-
import type {NumericInputWidget} from "@khanacademy/perseus-core";
2121

2222
const parseMathFormat = enumeration(
2323
"integer",

packages/perseus/src/util/parse-perseus-json/perseus-parsers/orderer-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/orderer-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1010
import {parsePerseusRenderer} from "./perseus-renderer";
1111
import {parseWidget} from "./widget";
1212

13+
import type {OrdererWidget} from "../../data-schema";
1314
import type {Parser, PartialParser} from "../parser-types";
14-
import type {OrdererWidget} from "@khanacademy/perseus-core";
1515

1616
// There is an import cycle between orderer-widget.ts and perseus-renderer.ts.
1717
// This wrapper ensures that we don't refer to parsePerseusRenderer before

packages/perseus/src/util/parse-perseus-json/perseus-parsers/passage-ref-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/passage-ref-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import {
88

99
import {parseWidget} from "./widget";
1010

11+
import type {PassageRefWidget} from "../../data-schema";
1112
import type {Parser} from "../parser-types";
12-
import type {PassageRefWidget} from "@khanacademy/perseus-core";
1313

1414
export const parsePassageRefWidget: Parser<PassageRefWidget> = parseWidget(
1515
constant("passage-ref"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/passage-widget.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/passage-widget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
33

44
import {parseWidget} from "./widget";
55

6+
import type {PassageWidget} from "../../data-schema";
67
import type {Parser} from "../parser-types";
7-
import type {PassageWidget} from "@khanacademy/perseus-core";
88

99
export const parsePassageWidget: Parser<PassageWidget> = parseWidget(
1010
constant("passage"),

packages/perseus/src/util/parse-perseus-json/perseus-parsers/perseus-article.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/perseus-article.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import {array, union} from "../general-purpose-parsers";
22

33
import {parsePerseusRenderer} from "./perseus-renderer";
44

5+
import type {PerseusArticle} from "../../data-schema";
56
import type {Parser} from "../parser-types";
6-
import type {PerseusArticle} from "@khanacademy/perseus-core";
77

88
export const parsePerseusArticle: Parser<PerseusArticle> = union(
99
parsePerseusRenderer,

packages/perseus/src/util/parse-perseus-json/perseus-parsers/perseus-image-background.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/perseus-image-background.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import {
1010
import {convert} from "../general-purpose-parsers/convert";
1111
import {stringToNumber} from "../general-purpose-parsers/string-to-number";
1212

13+
import type {PerseusImageBackground} from "../../data-schema";
1314
import type {Parser} from "../parser-types";
14-
import type {PerseusImageBackground} from "@khanacademy/perseus-core";
1515

1616
function emptyToZero(x: string | number): string | number {
1717
return x === "" ? 0 : x;

packages/perseus/src/util/parse-perseus-json/perseus-parsers/perseus-item.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/perseus-item.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import {ItemExtras} from "@khanacademy/perseus-core";
2-
1+
import {ItemExtras} from "../../data-schema";
32
import {
43
any,
54
array,
@@ -16,8 +15,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
1615
import {parseHint} from "./hint";
1716
import {parsePerseusRenderer} from "./perseus-renderer";
1817

18+
import type {PerseusItem} from "../../data-schema";
1919
import type {ParseContext, Parser, ParseResult} from "../parser-types";
20-
import type {PerseusItem} from "@khanacademy/perseus-core";
2120

2221
export const parsePerseusItem: Parser<PerseusItem> = object({
2322
question: parsePerseusRenderer,

packages/perseus/src/util/parse-perseus-json/perseus-parsers/perseus-renderer.ts renamed to packages/perseus-core/src/parse-perseus-json/perseus-parsers/perseus-renderer.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import {defaulted} from "../general-purpose-parsers/defaulted";
44
import {parseImages} from "./images-map";
55
import {parseWidgetsMap} from "./widgets-map";
66

7+
import type {PerseusRenderer} from "../../data-schema";
78
import type {Parser} from "../parser-types";
8-
import type {PerseusRenderer} from "@khanacademy/perseus-core";
99

1010
export const parsePerseusRenderer: Parser<PerseusRenderer> = defaulted(
1111
object({

0 commit comments

Comments
 (0)