@khanacademy/perseus-score 2.0.0 → 2.1.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.
- package/dist/es/index.js +397 -178
- package/dist/es/index.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +400 -176
- package/dist/index.js.map +1 -1
- package/dist/score.d.ts +21 -0
- package/dist/util/score-noop.d.ts +11 -0
- package/dist/util/test-helpers.d.ts +14 -0
- package/dist/validate.d.ts +7 -0
- package/dist/validation.types.d.ts +2 -0
- package/dist/widgets/group/score-group.d.ts +3 -0
- package/dist/widgets/group/validate-group.d.ts +3 -0
- package/dist/widgets/mock-widget/mock-widget-validation.types.d.ts +6 -0
- package/dist/widgets/mock-widget/score-mock-widget.d.ts +4 -0
- package/dist/widgets/mock-widget/validate-mock-widget.d.ts +4 -0
- package/dist/widgets/widget-registry.d.ts +4 -0
- package/package.json +4 -4
package/dist/score.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PerseusScore, UserInputMap } from "./validation.types";
|
|
2
|
+
import type { PerseusRenderer, PerseusWidgetsMap } from "@khanacademy/perseus-core";
|
|
3
|
+
/**
|
|
4
|
+
* If a widget says that it is empty once it is graded.
|
|
5
|
+
* Trying to encapsulate references to the score format.
|
|
6
|
+
*/
|
|
7
|
+
export declare function scoreIsEmpty(score: PerseusScore): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Combine two score objects.
|
|
10
|
+
*
|
|
11
|
+
* Given two score objects for two different widgets, combine them so that
|
|
12
|
+
* if one is wrong, the total score is wrong, etc.
|
|
13
|
+
*/
|
|
14
|
+
export declare function combineScores(scoreA: PerseusScore, scoreB: PerseusScore): PerseusScore;
|
|
15
|
+
export declare function flattenScores(widgetScoreMap: {
|
|
16
|
+
[widgetId: string]: PerseusScore;
|
|
17
|
+
}): PerseusScore;
|
|
18
|
+
export declare function scorePerseusItem(perseusRenderData: PerseusRenderer, userInputMap: UserInputMap, locale: string): PerseusScore;
|
|
19
|
+
export declare function scoreWidgetsFunctional(widgets: PerseusWidgetsMap, widgetIds: ReadonlyArray<string>, userInputMap: UserInputMap, locale: string): {
|
|
20
|
+
[widgetId: string]: PerseusScore;
|
|
21
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PerseusScore } from "../validation.types";
|
|
2
|
+
/**
|
|
3
|
+
* Several widgets don't have "right"/"wrong" scoring logic,
|
|
4
|
+
* so this just says to move on past those widgets
|
|
5
|
+
*
|
|
6
|
+
* TODO(LEMS-2543) widgets that use this probably shouldn't have any
|
|
7
|
+
* scoring logic and the thing scoring an exercise
|
|
8
|
+
* should just know to skip these
|
|
9
|
+
*/
|
|
10
|
+
declare function scoreNoop(points?: number): PerseusScore;
|
|
11
|
+
export default scoreNoop;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DropdownWidget, ExpressionWidget } from "@khanacademy/perseus-core";
|
|
2
|
+
export declare function getTestDropdownWidget(): DropdownWidget;
|
|
3
|
+
export declare function getExpressionWidget(): ExpressionWidget;
|
|
4
|
+
export declare function getLegacyExpressionWidget(): {
|
|
5
|
+
type: string;
|
|
6
|
+
options: {
|
|
7
|
+
times: boolean;
|
|
8
|
+
buttonSets: string[];
|
|
9
|
+
functions: never[];
|
|
10
|
+
form: boolean;
|
|
11
|
+
simplify: boolean;
|
|
12
|
+
value: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { UserInputMap, ValidationDataMap } from "./validation.types";
|
|
2
|
+
/**
|
|
3
|
+
* Checks the given user input to see if any answerable widgets have not been
|
|
4
|
+
* "filled in" (ie. if they're empty). Another way to think about this
|
|
5
|
+
* function is that its a check to see if we can score the provided input.
|
|
6
|
+
*/
|
|
7
|
+
export declare function emptyWidgetsFunctional(widgets: ValidationDataMap, widgetIds: ReadonlyArray<string>, userInputMap: UserInputMap, locale: string): ReadonlyArray<string>;
|
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
31
|
import type { GrapherAnswerTypes, PerseusDropdownChoice, PerseusExpressionAnswerForm, PerseusGradedGroupSetWidgetOptions, PerseusGradedGroupWidgetOptions, PerseusGraphType, PerseusGroupWidgetOptions, PerseusMatrixWidgetAnswers, PerseusNumericInputAnswer, PerseusOrdererWidgetOptions, PerseusRadioChoice, PerseusGraphCorrectType, MakeWidgetMap, Relationship } from "@khanacademy/perseus-core";
|
|
32
|
+
export type WidgetValidatorFunction = (userInput: UserInput, validationData: ValidationData, locale: string) => ValidationResult;
|
|
33
|
+
export type WidgetScorerFunction = (userInput: UserInput, rubric: Rubric, locale?: string) => PerseusScore;
|
|
32
34
|
export type PerseusScore = {
|
|
33
35
|
type: "invalid";
|
|
34
36
|
message?: string | null | undefined;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { PerseusGroupUserInput, PerseusGroupValidationData, ValidationResult } from "../../validation.types";
|
|
2
|
+
declare function validateGroup(userInput: PerseusGroupUserInput, validationData: PerseusGroupValidationData, locale: string): ValidationResult;
|
|
3
|
+
export default validateGroup;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PerseusMockWidgetRubric, PerseusMockWidgetUserInput } from "./mock-widget-validation.types";
|
|
2
|
+
import type { PerseusScore } from "../../validation.types";
|
|
3
|
+
declare function scoreMockWidget(userInput: PerseusMockWidgetUserInput, rubric: PerseusMockWidgetRubric): PerseusScore;
|
|
4
|
+
export default scoreMockWidget;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PerseusMockWidgetUserInput } from "./mock-widget-validation.types";
|
|
2
|
+
import type { ValidationResult } from "../../validation.types";
|
|
3
|
+
declare function validateMockWidget(userInput: PerseusMockWidgetUserInput): ValidationResult;
|
|
4
|
+
export default validateMockWidget;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WidgetScorerFunction, WidgetValidatorFunction } from "../validation.types";
|
|
2
|
+
export declare function registerWidget(type: string, scorer: WidgetScorerFunction, validator?: WidgetValidatorFunction): void;
|
|
3
|
+
export declare const getWidgetValidator: (name: string) => WidgetValidatorFunction | null;
|
|
4
|
+
export declare const getWidgetScorer: (name: string) => WidgetScorerFunction | null;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Perseus score",
|
|
4
4
|
"author": "Khan Academy",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "2.
|
|
6
|
+
"version": "2.1.0",
|
|
7
7
|
"publishConfig": {
|
|
8
8
|
"access": "public"
|
|
9
9
|
},
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"test": "bash -c 'yarn --silent --cwd \"../..\" test ${@:0} $($([[ ${@: -1} = -* ]] || [[ ${@: -1} = bash ]]) && echo $PWD)'"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@khanacademy/kas": "^0.4.
|
|
30
|
-
"@khanacademy/kmath": "^0.3.
|
|
31
|
-
"@khanacademy/perseus-core": "3.
|
|
29
|
+
"@khanacademy/kas": "^0.4.13",
|
|
30
|
+
"@khanacademy/kmath": "^0.3.2",
|
|
31
|
+
"@khanacademy/perseus-core": "3.4.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {},
|
|
34
34
|
"peerDependencies": {},
|