@khanacademy/perseus-core 0.0.0-PR862-20231207182125 → 0.0.0-PR875-20250221232857

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/LICENSE +18 -0
  2. package/dist/analytics.d.ts +37 -1
  3. package/dist/data-schema.d.ts +1033 -0
  4. package/dist/error/errors.d.ts +41 -0
  5. package/dist/error/perseus-error.d.ts +11 -0
  6. package/dist/es/index.js +3804 -36
  7. package/dist/es/index.js.map +1 -1
  8. package/dist/index.d.ts +103 -2
  9. package/dist/index.js +3921 -35
  10. package/dist/index.js.map +1 -1
  11. package/dist/parse-perseus-json/error-tracking-parse-context.d.ts +9 -0
  12. package/dist/parse-perseus-json/exhaustive-test-tool/index.d.ts +2 -0
  13. package/dist/parse-perseus-json/general-purpose-parsers/any.d.ts +2 -0
  14. package/dist/parse-perseus-json/general-purpose-parsers/array.d.ts +2 -0
  15. package/dist/parse-perseus-json/general-purpose-parsers/array.typetest.d.ts +1 -0
  16. package/dist/parse-perseus-json/general-purpose-parsers/boolean.d.ts +2 -0
  17. package/dist/parse-perseus-json/general-purpose-parsers/constant.d.ts +4 -0
  18. package/dist/parse-perseus-json/general-purpose-parsers/convert.d.ts +2 -0
  19. package/dist/parse-perseus-json/general-purpose-parsers/defaulted.d.ts +2 -0
  20. package/dist/parse-perseus-json/general-purpose-parsers/discriminated-union.d.ts +21 -0
  21. package/dist/parse-perseus-json/general-purpose-parsers/discriminated-union.typetest.d.ts +1 -0
  22. package/dist/parse-perseus-json/general-purpose-parsers/enumeration.d.ts +2 -0
  23. package/dist/parse-perseus-json/general-purpose-parsers/enumeration.typetest.d.ts +1 -0
  24. package/dist/parse-perseus-json/general-purpose-parsers/index.d.ts +16 -0
  25. package/dist/parse-perseus-json/general-purpose-parsers/is-object.d.ts +1 -0
  26. package/dist/parse-perseus-json/general-purpose-parsers/nullable.d.ts +2 -0
  27. package/dist/parse-perseus-json/general-purpose-parsers/number.d.ts +2 -0
  28. package/dist/parse-perseus-json/general-purpose-parsers/object.d.ts +6 -0
  29. package/dist/parse-perseus-json/general-purpose-parsers/optional.d.ts +2 -0
  30. package/dist/parse-perseus-json/general-purpose-parsers/pair.d.ts +2 -0
  31. package/dist/parse-perseus-json/general-purpose-parsers/pipe-parsers.d.ts +7 -0
  32. package/dist/parse-perseus-json/general-purpose-parsers/pipe-parsers.typetest.d.ts +1 -0
  33. package/dist/parse-perseus-json/general-purpose-parsers/record.d.ts +2 -0
  34. package/dist/parse-perseus-json/general-purpose-parsers/string-to-number.d.ts +2 -0
  35. package/dist/parse-perseus-json/general-purpose-parsers/string.d.ts +2 -0
  36. package/dist/parse-perseus-json/general-purpose-parsers/test-helpers.d.ts +9 -0
  37. package/dist/parse-perseus-json/general-purpose-parsers/trio.d.ts +2 -0
  38. package/dist/parse-perseus-json/general-purpose-parsers/union.d.ts +7 -0
  39. package/dist/parse-perseus-json/general-purpose-parsers/union.typetest.d.ts +1 -0
  40. package/dist/parse-perseus-json/index.d.ts +45 -0
  41. package/dist/parse-perseus-json/object-path.d.ts +2 -0
  42. package/dist/parse-perseus-json/parse-failure-detail.d.ts +2 -0
  43. package/dist/parse-perseus-json/parse.d.ts +3 -0
  44. package/dist/parse-perseus-json/parser-types.d.ts +30 -0
  45. package/dist/parse-perseus-json/perseus-parsers/categorizer-widget.d.ts +3 -0
  46. package/dist/parse-perseus-json/perseus-parsers/cs-program-widget.d.ts +3 -0
  47. package/dist/parse-perseus-json/perseus-parsers/definition-widget.d.ts +3 -0
  48. package/dist/parse-perseus-json/perseus-parsers/dropdown-widget.d.ts +3 -0
  49. package/dist/parse-perseus-json/perseus-parsers/explanation-widget.d.ts +3 -0
  50. package/dist/parse-perseus-json/perseus-parsers/expression-widget.d.ts +3 -0
  51. package/dist/parse-perseus-json/perseus-parsers/graded-group-set-widget.d.ts +3 -0
  52. package/dist/parse-perseus-json/perseus-parsers/graded-group-widget.d.ts +16 -0
  53. package/dist/parse-perseus-json/perseus-parsers/grapher-widget.d.ts +3 -0
  54. package/dist/parse-perseus-json/perseus-parsers/group-widget.d.ts +3 -0
  55. package/dist/parse-perseus-json/perseus-parsers/hint.d.ts +3 -0
  56. package/dist/parse-perseus-json/perseus-parsers/iframe-widget.d.ts +3 -0
  57. package/dist/parse-perseus-json/perseus-parsers/image-widget.d.ts +3 -0
  58. package/dist/parse-perseus-json/perseus-parsers/images-map.d.ts +5 -0
  59. package/dist/parse-perseus-json/perseus-parsers/input-number-widget.d.ts +3 -0
  60. package/dist/parse-perseus-json/perseus-parsers/interaction-widget.d.ts +3 -0
  61. package/dist/parse-perseus-json/perseus-parsers/interactive-graph-widget.d.ts +3 -0
  62. package/dist/parse-perseus-json/perseus-parsers/label-image-widget.d.ts +3 -0
  63. package/dist/parse-perseus-json/perseus-parsers/legacy-button-sets.d.ts +2 -0
  64. package/dist/parse-perseus-json/perseus-parsers/legacy-button-sets.typetest.d.ts +1 -0
  65. package/dist/parse-perseus-json/perseus-parsers/matcher-widget.d.ts +3 -0
  66. package/dist/parse-perseus-json/perseus-parsers/matrix-widget.d.ts +3 -0
  67. package/dist/parse-perseus-json/perseus-parsers/measurer-widget.d.ts +3 -0
  68. package/dist/parse-perseus-json/perseus-parsers/molecule-renderer-widget.d.ts +3 -0
  69. package/dist/parse-perseus-json/perseus-parsers/number-line-widget.d.ts +3 -0
  70. package/dist/parse-perseus-json/perseus-parsers/numeric-input-widget.d.ts +3 -0
  71. package/dist/parse-perseus-json/perseus-parsers/orderer-widget.d.ts +3 -0
  72. package/dist/parse-perseus-json/perseus-parsers/passage-ref-widget.d.ts +3 -0
  73. package/dist/parse-perseus-json/perseus-parsers/passage-widget.d.ts +3 -0
  74. package/dist/parse-perseus-json/perseus-parsers/perseus-answer-area.d.ts +2 -0
  75. package/dist/parse-perseus-json/perseus-parsers/perseus-article.d.ts +3 -0
  76. package/dist/parse-perseus-json/perseus-parsers/perseus-image-background.d.ts +3 -0
  77. package/dist/parse-perseus-json/perseus-parsers/perseus-item.d.ts +3 -0
  78. package/dist/parse-perseus-json/perseus-parsers/perseus-renderer.d.ts +3 -0
  79. package/dist/parse-perseus-json/perseus-parsers/phet-simulation-widget.d.ts +3 -0
  80. package/dist/parse-perseus-json/perseus-parsers/plotter-widget.d.ts +3 -0
  81. package/dist/parse-perseus-json/perseus-parsers/python-program-widget.d.ts +3 -0
  82. package/dist/parse-perseus-json/perseus-parsers/radio-widget.d.ts +3 -0
  83. package/dist/parse-perseus-json/perseus-parsers/sorter-widget.d.ts +3 -0
  84. package/dist/parse-perseus-json/perseus-parsers/table-widget.d.ts +3 -0
  85. package/dist/parse-perseus-json/perseus-parsers/versioned-widget-options.d.ts +36 -0
  86. package/dist/parse-perseus-json/perseus-parsers/video-widget.d.ts +3 -0
  87. package/dist/parse-perseus-json/perseus-parsers/widget.d.ts +7 -0
  88. package/dist/parse-perseus-json/perseus-parsers/widgets-map.d.ts +3 -0
  89. package/dist/parse-perseus-json/result.d.ts +23 -0
  90. package/dist/types.d.ts +13 -1
  91. package/dist/utils/deep-clone.d.ts +3 -0
  92. package/dist/utils/equality.d.ts +9 -0
  93. package/dist/utils/get-decimal-separator.d.ts +5 -0
  94. package/dist/utils/get-matrix-size.d.ts +2 -0
  95. package/dist/utils/grapher-types.d.ts +58 -0
  96. package/dist/utils/grapher-util.d.ts +20 -0
  97. package/dist/utils/is-real-json-parse.d.ts +1 -0
  98. package/dist/utils/objective_.d.ts +30 -0
  99. package/dist/utils/random-util.d.ts +5 -0
  100. package/dist/utils/split-perseus-item.d.ts +2 -0
  101. package/dist/utils/widget-id-utils.d.ts +38 -0
  102. package/dist/widgets/categorizer/categorizer-util.d.ts +17 -0
  103. package/dist/widgets/categorizer/index.d.ts +5 -0
  104. package/dist/widgets/core-widget-registry.d.ts +30 -0
  105. package/dist/widgets/cs-program/cs-program-util.d.ts +2 -0
  106. package/dist/widgets/cs-program/index.d.ts +5 -0
  107. package/dist/widgets/definition/index.d.ts +5 -0
  108. package/dist/widgets/dropdown/dropdown-util.d.ts +20 -0
  109. package/dist/widgets/dropdown/index.d.ts +5 -0
  110. package/dist/widgets/explanation/index.d.ts +5 -0
  111. package/dist/widgets/expression/expression-upgrade.d.ts +10 -0
  112. package/dist/widgets/expression/expression-util.d.ts +19 -0
  113. package/dist/widgets/expression/index.d.ts +4 -0
  114. package/dist/widgets/graded-group/index.d.ts +5 -0
  115. package/dist/widgets/graded-group-set/index.d.ts +5 -0
  116. package/dist/widgets/grapher/grapher-util.d.ts +4 -0
  117. package/dist/widgets/grapher/index.d.ts +5 -0
  118. package/dist/widgets/group/index.d.ts +5 -0
  119. package/dist/widgets/iframe/iframe-util.d.ts +2 -0
  120. package/dist/widgets/iframe/index.d.ts +5 -0
  121. package/dist/widgets/image/index.d.ts +5 -0
  122. package/dist/widgets/input-number/index.d.ts +5 -0
  123. package/dist/widgets/interaction/index.d.ts +5 -0
  124. package/dist/widgets/interactive-graph/index.d.ts +5 -0
  125. package/dist/widgets/interactive-graph/interactive-graph-util.d.ts +3 -0
  126. package/dist/widgets/label-image/index.d.ts +5 -0
  127. package/dist/widgets/label-image/label-image-util.d.ts +19 -0
  128. package/dist/widgets/logic-export.types.d.ts +42 -0
  129. package/dist/widgets/matcher/index.d.ts +5 -0
  130. package/dist/widgets/matcher/matcher-util.d.ts +28 -0
  131. package/dist/widgets/matrix/index.d.ts +5 -0
  132. package/dist/widgets/matrix/matrix-util.d.ts +4 -0
  133. package/dist/widgets/measurer/index.d.ts +4 -0
  134. package/dist/widgets/measurer/measurer-upgrade.d.ts +10 -0
  135. package/dist/widgets/number-line/index.d.ts +5 -0
  136. package/dist/widgets/number-line/number-line-util.d.ts +4 -0
  137. package/dist/widgets/numeric-input/index.d.ts +5 -0
  138. package/dist/widgets/numeric-input/numeric-input-util.d.ts +19 -0
  139. package/dist/widgets/orderer/index.d.ts +5 -0
  140. package/dist/widgets/orderer/orderer-util.d.ts +16 -0
  141. package/dist/widgets/passage/index.d.ts +5 -0
  142. package/dist/widgets/passage-ref/index.d.ts +4 -0
  143. package/dist/widgets/passage-ref/passage-ref-upgrade.d.ts +7 -0
  144. package/dist/widgets/passage-ref-target/index.d.ts +5 -0
  145. package/dist/widgets/phet-simulation/index.d.ts +5 -0
  146. package/dist/widgets/plotter/index.d.ts +5 -0
  147. package/dist/widgets/plotter/plotter-util.d.ts +12 -0
  148. package/dist/widgets/python-program/index.d.ts +5 -0
  149. package/dist/widgets/radio/index.d.ts +4 -0
  150. package/dist/widgets/radio/radio-upgrade.d.ts +10 -0
  151. package/dist/widgets/radio/radio-util.d.ts +26 -0
  152. package/dist/widgets/sorter/index.d.ts +5 -0
  153. package/dist/widgets/sorter/sorter-util.d.ts +17 -0
  154. package/dist/widgets/table/index.d.ts +5 -0
  155. package/dist/widgets/table/table-util.d.ts +4 -0
  156. package/dist/widgets/upgrade.d.ts +3 -0
  157. package/dist/widgets/video/index.d.ts +5 -0
  158. package/package.json +34 -27
  159. package/.babelrc.js +0 -8
  160. package/.eslintrc.js +0 -12
  161. package/CHANGELOG.md +0 -85
  162. package/src/analytics.ts +0 -64
  163. package/src/index.ts +0 -11
  164. package/src/types.ts +0 -30
  165. package/src/utils/add-library-version-to-perseus-debug.test.ts +0 -109
  166. package/src/utils/add-library-version-to-perseus-debug.ts +0 -52
  167. package/src/version.ts +0 -10
  168. package/tsconfig-build.json +0 -19
  169. package/tsconfig-build.tsbuildinfo +0 -1
  170. /package/dist/{utils → shared-utils}/add-library-version-to-perseus-debug.d.ts +0 -0
@@ -0,0 +1,5 @@
1
+ import type { PerseusPassageWidgetOptions } from "../../data-schema";
2
+ import type { WidgetLogic } from "../logic-export.types";
3
+ export type PassageDefaultWidgetOptions = Pick<PerseusPassageWidgetOptions, "passageTitle" | "passageText" | "footnotes" | "showLineNumbers">;
4
+ declare const passageWidgetLogic: WidgetLogic;
5
+ export default passageWidgetLogic;
@@ -0,0 +1,4 @@
1
+ import type { WidgetLogic } from "../logic-export.types";
2
+ export type { PassageRefDefaultWidgetOptions } from "./passage-ref-upgrade";
3
+ declare const passageRefWidgetLogic: WidgetLogic;
4
+ export default passageRefWidgetLogic;
@@ -0,0 +1,7 @@
1
+ import type { PerseusPassageRefWidgetOptions } from "../../data-schema";
2
+ export declare const currentVersion: {
3
+ major: number;
4
+ minor: number;
5
+ };
6
+ export type PassageRefDefaultWidgetOptions = Pick<PerseusPassageRefWidgetOptions, "passageNumber" | "referenceNumber" | "summaryText">;
7
+ export declare const defaultWidgetOptions: PassageRefDefaultWidgetOptions;
@@ -0,0 +1,5 @@
1
+ import type { PerseusPassageRefTargetWidgetOptions } from "../../data-schema";
2
+ import type { WidgetLogic } from "../logic-export.types";
3
+ export type PassageRefTargetDefaultWidgetOptions = Pick<PerseusPassageRefTargetWidgetOptions, "content">;
4
+ declare const passageRefTargetWidgetLogic: WidgetLogic;
5
+ export default passageRefTargetWidgetLogic;
@@ -0,0 +1,5 @@
1
+ import type { PerseusPhetSimulationWidgetOptions } from "../../data-schema";
2
+ import type { WidgetLogic } from "../logic-export.types";
3
+ export type PhetSimulationDefaultWidgetOptions = Pick<PerseusPhetSimulationWidgetOptions, "url" | "description">;
4
+ declare const phetSimulationWidgetLogic: WidgetLogic;
5
+ export default phetSimulationWidgetLogic;
@@ -0,0 +1,5 @@
1
+ import type { PerseusPlotterWidgetOptions } from "../../data-schema";
2
+ import type { WidgetLogic } from "../logic-export.types";
3
+ export type PlotterDefaultWidgetOptions = Pick<PerseusPlotterWidgetOptions, "scaleY" | "maxY" | "snapsPerLine" | "correct" | "starting" | "type" | "labels" | "categories" | "picSize" | "picBoxHeight" | "plotDimensions" | "labelInterval" | "picUrl">;
4
+ declare const plotterWidgetLogic: WidgetLogic;
5
+ export default plotterWidgetLogic;
@@ -0,0 +1,12 @@
1
+ import type { PerseusPlotterWidgetOptions } from "@khanacademy/perseus-core";
2
+ /**
3
+ * For details on the individual options, see the
4
+ * PerseusPlotterWidgetOptions type
5
+ */
6
+ type PlotterPublicWidgetOptions = Omit<PerseusPlotterWidgetOptions, "correct">;
7
+ /**
8
+ * Given a PerseusPlotterWidgetOptions object, return a new object with only
9
+ * the public options that should be exposed to the client.
10
+ */
11
+ declare function getPlotterPublicWidgetOptions(options: PerseusPlotterWidgetOptions): PlotterPublicWidgetOptions;
12
+ export default getPlotterPublicWidgetOptions;
@@ -0,0 +1,5 @@
1
+ import type { PerseusPythonProgramWidgetOptions } from "../../data-schema";
2
+ import type { WidgetLogic } from "../logic-export.types";
3
+ export type PythonProgramDefaultWidgetOptions = Pick<PerseusPythonProgramWidgetOptions, "programID" | "height">;
4
+ declare const pythonProgramWidgetLogic: WidgetLogic;
5
+ export default pythonProgramWidgetLogic;
@@ -0,0 +1,4 @@
1
+ import type { WidgetLogic } from "../logic-export.types";
2
+ export type { RadioDefaultWidgetOptions } from "./radio-upgrade";
3
+ declare const radioWidgetLogic: WidgetLogic;
4
+ export default radioWidgetLogic;
@@ -0,0 +1,10 @@
1
+ import type { PerseusRadioWidgetOptions } from "../../data-schema";
2
+ export declare const currentVersion: {
3
+ major: number;
4
+ minor: number;
5
+ };
6
+ export declare const widgetOptionsUpgrades: {
7
+ readonly "1": (v0props: any) => PerseusRadioWidgetOptions;
8
+ };
9
+ export type RadioDefaultWidgetOptions = Pick<PerseusRadioWidgetOptions, "choices" | "displayCount" | "randomize" | "hasNoneOfTheAbove" | "multipleSelect" | "countChoices" | "deselectEnabled">;
10
+ export declare const defaultWidgetOptions: RadioDefaultWidgetOptions;
@@ -0,0 +1,26 @@
1
+ import type { PerseusRadioChoice, PerseusRadioWidgetOptions } from "@khanacademy/perseus-core";
2
+ /**
3
+ * For details on the individual options, see the
4
+ * PerseusRadioWidgetOptions type
5
+ */
6
+ type RadioPublicWidgetOptions = {
7
+ choices: ReadonlyArray<RadioChoicePublicData>;
8
+ hasNoneOfTheAbove?: PerseusRadioWidgetOptions["hasNoneOfTheAbove"];
9
+ countChoices?: PerseusRadioWidgetOptions["countChoices"];
10
+ randomize?: PerseusRadioWidgetOptions["randomize"];
11
+ multipleSelect?: PerseusRadioWidgetOptions["multipleSelect"];
12
+ deselectEnabled?: PerseusRadioWidgetOptions["deselectEnabled"];
13
+ onePerLine?: PerseusRadioWidgetOptions["onePerLine"];
14
+ displayCount?: PerseusRadioWidgetOptions["displayCount"];
15
+ noneOfTheAbove?: PerseusRadioWidgetOptions["noneOfTheAbove"];
16
+ };
17
+ /**
18
+ * Only the options from each Radio choice that should be exposed to the client.
19
+ */
20
+ type RadioChoicePublicData = Pick<PerseusRadioChoice, "content" | "isNoneOfTheAbove" | "widgets">;
21
+ /**
22
+ * Given a PerseusRadioWidgetOptions object, return a new object with only
23
+ * the public options that should be exposed to the client.
24
+ */
25
+ declare function getRadioPublicWidgetOptions(options: PerseusRadioWidgetOptions): RadioPublicWidgetOptions;
26
+ export default getRadioPublicWidgetOptions;
@@ -0,0 +1,5 @@
1
+ import type { PerseusSorterWidgetOptions } from "../../data-schema";
2
+ import type { WidgetLogic } from "../logic-export.types";
3
+ export type SorterDefaultWidgetOptions = Pick<PerseusSorterWidgetOptions, "correct" | "layout" | "padding">;
4
+ declare const sorterWidgetLogic: WidgetLogic;
5
+ export default sorterWidgetLogic;
@@ -0,0 +1,17 @@
1
+ import type { PerseusSorterWidgetOptions } from "@khanacademy/perseus-core";
2
+ /**
3
+ * For details on the individual options, see the
4
+ * PerseusSorterWidgetOptions type
5
+ */
6
+ type SorterPublicWidgetOptions = {
7
+ correct: PerseusSorterWidgetOptions["correct"];
8
+ padding: PerseusSorterWidgetOptions["padding"];
9
+ layout: PerseusSorterWidgetOptions["layout"];
10
+ isCorrectShuffled: boolean;
11
+ };
12
+ /**
13
+ * Given a PerseusSorterWidgetOptions object, return a new object with only
14
+ * the public options that should be exposed to the client.
15
+ */
16
+ declare function getSorterPublicWidgetOptions(options: PerseusSorterWidgetOptions): SorterPublicWidgetOptions;
17
+ export default getSorterPublicWidgetOptions;
@@ -0,0 +1,5 @@
1
+ import type { PerseusTableWidgetOptions } from "../../data-schema";
2
+ import type { WidgetLogic } from "../logic-export.types";
3
+ export type TableDefaultWidgetOptions = Pick<PerseusTableWidgetOptions, "headers" | "rows" | "columns" | "answers">;
4
+ declare const tableWidgetLogic: WidgetLogic;
5
+ export default tableWidgetLogic;
@@ -0,0 +1,4 @@
1
+ import type { PerseusTableWidgetOptions } from "@khanacademy/perseus-core";
2
+ type TablePublicWidgetOptions = Pick<PerseusTableWidgetOptions, "headers" | "rows" | "columns">;
3
+ export default function getTablePublicWidgetOptions(options: PerseusTableWidgetOptions): TablePublicWidgetOptions;
4
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { PerseusWidget, PerseusWidgetsMap } from "../data-schema";
2
+ export declare const upgradeWidgetInfoToLatestVersion: (oldWidgetInfo: PerseusWidget) => PerseusWidget;
3
+ export declare function getUpgradedWidgetOptions(oldWidgetOptions: PerseusWidgetsMap): PerseusWidgetsMap;
@@ -0,0 +1,5 @@
1
+ import type { PerseusVideoWidgetOptions } from "../../data-schema";
2
+ import type { WidgetLogic } from "../logic-export.types";
3
+ export type VideoDefaultWidgetOptions = Pick<PerseusVideoWidgetOptions, "location">;
4
+ declare const videoWidgetLogic: WidgetLogic;
5
+ export default videoWidgetLogic;
package/package.json CHANGED
@@ -1,28 +1,35 @@
1
1
  {
2
- "name": "@khanacademy/perseus-core",
3
- "description": "Shared Perseus infrastructure",
4
- "author": "Khan Academy",
5
- "license": "MIT",
6
- "version": "0.0.0-PR862-20231207182125",
7
- "publishConfig": {
8
- "access": "public"
9
- },
10
- "repository": {
11
- "type": "git",
12
- "url": "https://github.com/Khan/perseus.git",
13
- "directory": "packages/perseus-core"
14
- },
15
- "bugs": {
16
- "url": "https://github.com/Khan/perseus/issues"
17
- },
18
- "module": "dist/es/index.js",
19
- "main": "dist/index.js",
20
- "source": "src/index.ts",
21
- "scripts": {
22
- "test": "bash -c 'yarn --silent --cwd \"../..\" test ${@:0} $($([[ ${@: -1} = -* ]] || [[ ${@: -1} = bash ]]) && echo $PWD)'"
23
- },
24
- "dependencies": {},
25
- "devDependencies": {},
26
- "peerDependencies": {},
27
- "keywords": []
28
- }
2
+ "name": "@khanacademy/perseus-core",
3
+ "description": "Shared Perseus infrastructure",
4
+ "author": "Khan Academy",
5
+ "license": "MIT",
6
+ "version": "0.0.0-PR875-20250221232857",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/Khan/perseus.git",
13
+ "directory": "packages/perseus-core"
14
+ },
15
+ "bugs": {
16
+ "url": "https://github.com/Khan/perseus/issues"
17
+ },
18
+ "module": "dist/es/index.js",
19
+ "main": "dist/index.js",
20
+ "source": "src/index.ts",
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "dependencies": {},
25
+ "devDependencies": {
26
+ "@khanacademy/wonder-stuff-core": "1.5.4",
27
+ "underscore": "^1.4.4"
28
+ },
29
+ "peerDependencies": {
30
+ "@khanacademy/wonder-stuff-core": "1.5.4",
31
+ "underscore": "^1.4.4"
32
+ },
33
+ "keywords": [],
34
+ "scripts": {}
35
+ }
package/.babelrc.js DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * HACK(kevinb): Due to https://github.com/facebook/jest/issues/11741,
3
- * we need to have this file, or updating inline snapshots can fail rather
4
- * cryptically.
5
- *
6
- * We should remove this when jest is fixed.
7
- */
8
- module.exports = require("../../config/build/babel.config");
package/.eslintrc.js DELETED
@@ -1,12 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-var-requires */
2
- /* eslint-disable import/no-commonjs */
3
- const path = require("path");
4
-
5
- module.exports = {
6
- rules: {
7
- "import/no-extraneous-dependencies": [
8
- "error",
9
- {packageDir: [__dirname, path.join(__dirname, "../../")]},
10
- ],
11
- },
12
- };
package/CHANGELOG.md DELETED
@@ -1,85 +0,0 @@
1
- # @khanacademy/perseus-core
2
-
3
- ## 0.0.0-PR862-20231207182125
4
-
5
- ### Patch Changes
6
-
7
- - [#860](https://github.com/Khan/perseus/pull/860) [`1f4e17ba`](https://github.com/Khan/perseus/commit/1f4e17ba77e1491523813655af18a70285a25989) Thanks [@nixterrimus](https://github.com/nixterrimus)! - Add hover states in label-image widget
8
-
9
- * [#848](https://github.com/Khan/perseus/pull/848) [`8857950b`](https://github.com/Khan/perseus/commit/8857950bdeeb6e13bc3766b1c6545289b21cbe2a) Thanks [@nixterrimus](https://github.com/nixterrimus)! - Add analytics for label image
10
-
11
- ## 1.4.0
12
-
13
- ### Minor Changes
14
-
15
- - [#794](https://github.com/Khan/perseus/pull/794) [`a91c84fe`](https://github.com/Khan/perseus/commit/a91c84fe53827ff4333220777a9918882b7fe9f0) Thanks [@SonicScrewdriver](https://github.com/SonicScrewdriver)! - Removing the useV2Keypad apiOption as the V1 keypad is no longer in use.
16
-
17
- ### Patch Changes
18
-
19
- - [#814](https://github.com/Khan/perseus/pull/814) [`105d2060`](https://github.com/Khan/perseus/commit/105d20603d935d35cff237b17f0bfb57ca751e4c) Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Minor build change to how we provide Typescript type definitions (should be no change to build output).
20
-
21
- ## 1.3.0
22
-
23
- ### Minor Changes
24
-
25
- - [#783](https://github.com/Khan/perseus/pull/783) [`79403e06`](https://github.com/Khan/perseus/commit/79403e06eedb597d7818d6c858bbba6f51ff3fe1) Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Adds 'widgetId' to the 'perseus:widget-rendering-error' analytics event.
26
-
27
- ## 1.2.0
28
-
29
- ### Minor Changes
30
-
31
- - [#780](https://github.com/Khan/perseus/pull/780) [`376eb0e4`](https://github.com/Khan/perseus/commit/376eb0e4aaaa4c7a90fd6107a84bb74d382b077c) Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Added 'perseus:widget-rendering-error' analytics event.
32
-
33
- ## 1.1.2
34
-
35
- ### Patch Changes
36
-
37
- - 22a9c408: Fix bug caused by package version diagnostics
38
-
39
- ## 1.1.1
40
-
41
- ### Patch Changes
42
-
43
- - 55d4cd00: Print package name and version when loaded in the page
44
-
45
- ## 1.1.0
46
-
47
- ### Minor Changes
48
-
49
- - 4f4fe4f9: Added new analytics event "perseus:expression-focused"
50
-
51
- ## 1.0.0
52
-
53
- ### Major Changes
54
-
55
- - 2af4f9fa: Switch from using ProvideKeypad in ArticleRenderer to passing the keypad element down instead
56
-
57
- ## 0.2.0
58
-
59
- ### Minor Changes
60
-
61
- - dd800c22: Rename analytics prop from onEvent to onAnalyticsEvent
62
-
63
- ## 0.1.1
64
-
65
- ### Patch Changes
66
-
67
- - 57f75510: Commented RendererInterface
68
-
69
- ## 0.1.0
70
-
71
- ### Minor Changes
72
-
73
- - b4c06409: Add perseus-core to changeset
74
-
75
- ## 0.0.2
76
-
77
- ### Patch Changes
78
-
79
- - 71c631ea: Add keypad opened and closed analytics events
80
-
81
- ## 0.0.1
82
-
83
- ### Patch Changes
84
-
85
- - 1f3fdc6c: Introducing `perseus-core` for types and functionality shared across the Perseus ecosystem
package/src/analytics.ts DELETED
@@ -1,64 +0,0 @@
1
- export type VirtualKeypadVersion =
2
- | "MATH_INPUT_KEYPAD_V2"
3
- | "REACT_NATIVE_KEYPAD";
4
-
5
- /**
6
- * A type union of all the events that any package in the Perseus ecosystem can
7
- * send.
8
- */
9
- export type PerseusAnalyticsEvent =
10
- | {
11
- type: "perseus:expression-evaluated";
12
- payload: {
13
- virtualKeypadVersion: VirtualKeypadVersion;
14
- result: "correct" | "incorrect" | "invalid";
15
- };
16
- }
17
- | {
18
- type: "perseus:expression-focused";
19
- payload: null;
20
- }
21
- | {
22
- type: "perseus:widget-rendering-error";
23
- payload: {
24
- widgetType: string;
25
- widgetId: string;
26
- };
27
- }
28
- | {
29
- type: "perseus:label-image:toggle-answers-hidden";
30
- payload: null;
31
- }
32
- | {
33
- type: "perseus:label-image:marker-interacted-with";
34
- payload: null;
35
- }
36
- | {
37
- type: "perseus:label-image:choiced-interacted-with";
38
- payload: null;
39
- }
40
- | {
41
- type: "math-input:keypad-closed";
42
- payload: {
43
- virtualKeypadVersion: VirtualKeypadVersion;
44
- };
45
- }
46
- | {
47
- type: "math-input:keypad-opened";
48
- payload: {
49
- virtualKeypadVersion: VirtualKeypadVersion;
50
- };
51
- };
52
-
53
- // Add more events here as needed. Note that each event should have a `type`
54
- // key and a payload that varies by type.
55
- // | {type: "b"; payload: {name: string}};
56
- //
57
- // Event types should be formatted as "package-name:event-name" (where the
58
- // package name is the name of the package that emits the event without the
59
- // `@khanacademy/` prefix and then the name of the event.)
60
-
61
- /** A function that is called when Perseus emits an analytics event. */
62
- export type AnalyticsEventHandlerFn = (
63
- event: PerseusAnalyticsEvent,
64
- ) => Promise<void>;
package/src/index.ts DELETED
@@ -1,11 +0,0 @@
1
- export type {PerseusAnalyticsEvent, AnalyticsEventHandlerFn} from "./analytics";
2
- export type {
3
- KEScore,
4
- KeypadContextRendererInterface,
5
- RendererInterface,
6
- } from "./types";
7
-
8
- // Careful, `version.ts` uses this function so it _must_ be imported above it
9
- export {addLibraryVersionToPerseusDebug} from "./utils/add-library-version-to-perseus-debug";
10
-
11
- export {libVersion} from "./version";
package/src/types.ts DELETED
@@ -1,30 +0,0 @@
1
- // Types that can be shared between Perseus packages
2
- // ideally without causing circular dependencies
3
-
4
- // Used by KeypadContext to pass around a renderer reference
5
- export interface KeypadContextRendererInterface {
6
- blur(): void;
7
- }
8
-
9
- // TODO: this should be typed
10
- type State = any;
11
-
12
- // Interfact currently only implemented by
13
- // ServerItemRenderer
14
- export interface RendererInterface {
15
- getSerializedState(): State;
16
- restoreSerializedState(state: State, callback?: () => void): void;
17
- scoreInput(): KEScore;
18
- blur(): void;
19
- focus(): boolean | null | undefined;
20
- props: any;
21
- }
22
-
23
- export type KEScore = {
24
- empty: boolean;
25
- correct: boolean;
26
- message?: string | null | undefined;
27
- suppressAlmostThere?: boolean | null | undefined;
28
- guess: any;
29
- state: any;
30
- };
@@ -1,109 +0,0 @@
1
- import {addLibraryVersionToPerseusDebug} from "./add-library-version-to-perseus-debug";
2
-
3
- describe("add-library-version-to-perseus-debug", () => {
4
- beforeEach(() => {
5
- delete globalThis.__perseus_debug__;
6
- });
7
-
8
- it("should add the given library to __perseus_debug__", () => {
9
- // Array
10
-
11
- // Act
12
- addLibraryVersionToPerseusDebug("test-lib", "1.0.0");
13
-
14
- // Assert
15
- expect(globalThis.__perseus_debug__).toMatchInlineSnapshot(`
16
- {
17
- "test-lib": "v1.0.0",
18
- }
19
- `);
20
- });
21
-
22
- it("should extend __perseus_debug__ when multiple libraries registered", () => {
23
- // Arrange
24
-
25
- // Act
26
- addLibraryVersionToPerseusDebug("test-lib", "1.0.0");
27
- addLibraryVersionToPerseusDebug("sample-lib", "2.0.0");
28
- addLibraryVersionToPerseusDebug("utility-lib", "3.0.0");
29
-
30
- // Assert
31
- expect(globalThis.__perseus_debug__).toMatchInlineSnapshot(`
32
- {
33
- "sample-lib": "v2.0.0",
34
- "test-lib": "v1.0.0",
35
- "utility-lib": "v3.0.0",
36
- }
37
- `);
38
- });
39
-
40
- it("should convert library entry to array when multiple versions of the same library registered", () => {
41
- // Arrange
42
- jest.spyOn(console, "warn").mockImplementation();
43
-
44
- // Act
45
- addLibraryVersionToPerseusDebug("test-lib", "1.0.1");
46
- addLibraryVersionToPerseusDebug("test-lib", "4.1.8");
47
- addLibraryVersionToPerseusDebug("test-lib", "1.0.0");
48
- addLibraryVersionToPerseusDebug("test-lib", "2.0.0");
49
-
50
- // Assert
51
- expect(globalThis.__perseus_debug__).toMatchInlineSnapshot(`
52
- {
53
- "test-lib": [
54
- "v1.0.0",
55
- "v1.0.1",
56
- "v2.0.0",
57
- "v4.1.8",
58
- ],
59
- }
60
- `);
61
- });
62
-
63
- it("should warn when multiple versions of the same library registered", () => {
64
- // Arrange
65
- const warnSpy = jest.spyOn(console, "warn").mockImplementation();
66
-
67
- // Act
68
- addLibraryVersionToPerseusDebug("test-lib", "1.0.1");
69
- addLibraryVersionToPerseusDebug("test-lib", "4.1.8");
70
- addLibraryVersionToPerseusDebug("test-lib", "1.0.0");
71
- addLibraryVersionToPerseusDebug("test-lib", "2.0.0");
72
-
73
- // Assert
74
- expect(warnSpy).toHaveBeenCalledWith(
75
- expect.stringMatching(
76
- /Multiple versions of test-lib loaded on this page/,
77
- ),
78
- );
79
- });
80
-
81
- it("should not register duplicates for duplicate calls of the same library and version", () => {
82
- // Arrange
83
-
84
- // Act
85
- addLibraryVersionToPerseusDebug("test-lib", "1.0.0");
86
- addLibraryVersionToPerseusDebug("test-lib", "1.0.0");
87
- addLibraryVersionToPerseusDebug("test-lib", "1.0.0");
88
-
89
- // Assert
90
- expect(globalThis.__perseus_debug__).toMatchInlineSnapshot(`
91
- {
92
- "test-lib": "v1.0.0",
93
- }
94
- `);
95
- });
96
-
97
- it("should not warn for duplicate calls for a library of the same library and version", () => {
98
- // Arrange
99
- const warnSpy = jest.spyOn(console, "warn").mockImplementation();
100
-
101
- // Act
102
- addLibraryVersionToPerseusDebug("test-lib", "1.0.0");
103
- addLibraryVersionToPerseusDebug("test-lib", "1.0.0");
104
- addLibraryVersionToPerseusDebug("test-lib", "1.0.0");
105
-
106
- // Assert
107
- expect(warnSpy).not.toHaveBeenCalled();
108
- });
109
- });
@@ -1,52 +0,0 @@
1
- /**
2
- * Adds the given perseus library version information to the __perseus_debug__
3
- * object and ensures that the object is attached to `globalThis` (`window` in
4
- * browser environments).
5
- *
6
- * This allows each library to provide runtime version information to assist in
7
- * debugging in production environments.
8
- */
9
- export const addLibraryVersionToPerseusDebug = (
10
- libraryName: string,
11
- libraryVersion: string,
12
- ) => {
13
- // If the library version is the default value, then we don't want to
14
- // prefix it with a "v" to indicate that it is a version number.
15
- let prefix = "v";
16
- if (libraryVersion === "__lib_version__") {
17
- prefix = "";
18
- }
19
- const formattedVersion = `${prefix}${libraryVersion}`;
20
-
21
- if (typeof globalThis !== "undefined") {
22
- globalThis.__perseus_debug__ = globalThis.__perseus_debug__ ?? {};
23
-
24
- const existingVersionEntry = globalThis.__perseus_debug__[libraryName];
25
- if (existingVersionEntry) {
26
- // If we already have an entry and it doesn't match the registered
27
- // version, we morph the entry into an array and log a warning.
28
- if (existingVersionEntry !== formattedVersion) {
29
- // Existing entry might be an array already (oops, at least 2
30
- // versions of the library already loaded!).
31
- const allVersions = Array.isArray(existingVersionEntry)
32
- ? existingVersionEntry
33
- : [existingVersionEntry];
34
- allVersions.push(formattedVersion);
35
-
36
- globalThis.__perseus_debug__[libraryName] = allVersions;
37
-
38
- // eslint-disable-next-line no-console
39
- console.warn(
40
- `Multiple versions of ${libraryName} loaded on this page: ${allVersions
41
- .sort()
42
- .join(", ")}`,
43
- );
44
- }
45
- } else {
46
- globalThis.__perseus_debug__[libraryName] = formattedVersion;
47
- }
48
- } else {
49
- // eslint-disable-next-line no-console
50
- console.warn(`globalThis not found found (${formattedVersion})`);
51
- }
52
- };
package/src/version.ts DELETED
@@ -1,10 +0,0 @@
1
- // This file is processed by a Rollup plugin (replace) to inject the production
2
- // version number during the release build.
3
- // In dev, you'll never see the version number.
4
-
5
- import {addLibraryVersionToPerseusDebug} from "./utils/add-library-version-to-perseus-debug";
6
-
7
- const libName = "@khanacademy/perseus-core";
8
- export const libVersion = "__lib_version__";
9
-
10
- addLibraryVersionToPerseusDebug(libName, libVersion);
@@ -1,19 +0,0 @@
1
- {
2
- "extends": "../tsconfig-shared.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "rootDir": "src",
6
- "paths": {
7
- // NOTE(kevinb): We have to repeat this here because TS doesn't do
8
- // intelligent merge of tsconfig.json files when using `extends`.
9
- "@khanacademy/*": [
10
- "../*/src"
11
- ]
12
- }
13
- },
14
- "references": [
15
- /* Add in-repo pacakge references here, like this:
16
- {"path": "../path/to/package/tsconfig-build.json"}
17
- */
18
- ]
19
- }