@khanacademy/perseus-core 7.1.1 → 8.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.
- package/dist/data-schema.d.ts +11 -20
- package/dist/es/index.js +10 -8
- package/dist/es/index.js.map +1 -1
- package/dist/feature-flags.d.ts +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +10 -7
- package/dist/index.js.map +1 -1
- package/dist/parse-perseus-json/general-purpose-parsers/object-types.d.ts +11 -0
- package/dist/parse-perseus-json/general-purpose-parsers/object-types.typetest.d.ts +1 -0
- package/dist/parse-perseus-json/general-purpose-parsers/object.d.ts +5 -1
- package/dist/parse-perseus-json/perseus-parsers/dropdown-user-input.d.ts +2 -2
- package/dist/parse-perseus-json/perseus-parsers/graded-group-widget.d.ts +4 -4
- package/dist/parse-perseus-json/perseus-parsers/numeric-input-user-input.d.ts +2 -2
- package/dist/parse-perseus-json/perseus-parsers/radio-user-input.d.ts +2 -2
- package/dist/parse-perseus-json/perseus-parsers/radio-widget.d.ts +18 -3
- package/dist/parse-perseus-json/perseus-parsers/radio-widget.typetest.d.ts +1 -0
- package/dist/parse-perseus-json/perseus-parsers/widget.d.ts +2 -2
- package/dist/utils/split-perseus-item.d.ts +2 -2
- package/dist/utils/test-utils.d.ts +11 -0
- package/package.json +3 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* These types were inspired by:
|
|
3
|
+
* - https://stackoverflow.com/questions/56863875/typescript-how-do-you-filter-a-types-properties-to-those-of-a-certain-type
|
|
4
|
+
* (public domain)
|
|
5
|
+
* - https://github.com/ianstormtaylor/superstruct/blob/e414c8afd3b69f6bc0173b8ee25f71d8e5694f01/src/utils.ts
|
|
6
|
+
* (MIT license)
|
|
7
|
+
*/
|
|
8
|
+
export type OptionalizeProperties<T extends object> = Omit<T, OptionalKeysOf<T>> & Partial<Pick<T, OptionalKeysOf<T>>>;
|
|
9
|
+
export type OptionalKeysOf<T extends object> = {
|
|
10
|
+
[K in keyof T]-?: undefined extends T[K] ? K : never;
|
|
11
|
+
}[keyof T];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import type { OptionalizeProperties } from "./object-types";
|
|
1
2
|
import type { ParsedValue, Parser } from "../parser-types";
|
|
2
3
|
type ObjectSchema = Record<keyof any, Parser<any>>;
|
|
3
|
-
export declare function
|
|
4
|
+
export declare function objectWithAllPropertiesRequired<S extends ObjectSchema>(schema: S): Parser<{
|
|
4
5
|
[K in keyof S]: ParsedValue<S[K]>;
|
|
5
6
|
}>;
|
|
7
|
+
export declare function object<S extends ObjectSchema>(schema: S): Parser<OptionalizeProperties<{
|
|
8
|
+
[K in keyof S]: ParsedValue<S[K]>;
|
|
9
|
+
}>>;
|
|
6
10
|
export {};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const parseDropdownUserInput: import("../parser-types").Parser<{
|
|
1
|
+
export declare const parseDropdownUserInput: import("../parser-types").Parser<import("../general-purpose-parsers/object-types").OptionalizeProperties<{
|
|
2
2
|
value: number;
|
|
3
|
-
}
|
|
3
|
+
}>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { GradedGroupWidget } from "../../data-schema";
|
|
2
2
|
import type { Parser } from "../parser-types";
|
|
3
|
-
export declare const parseGradedGroupWidgetOptions: Parser<{
|
|
3
|
+
export declare const parseGradedGroupWidgetOptions: Parser<import("../general-purpose-parsers/object-types").OptionalizeProperties<{
|
|
4
4
|
title: string;
|
|
5
5
|
hasHint: boolean | null | undefined;
|
|
6
6
|
hint: import("../..").PerseusRenderer | null | undefined;
|
|
@@ -8,9 +8,9 @@ export declare const parseGradedGroupWidgetOptions: Parser<{
|
|
|
8
8
|
widgets: import("../..").MakeWidgetMap<import("../..").PerseusWidgetTypes>;
|
|
9
9
|
widgetEnabled: boolean | null | undefined;
|
|
10
10
|
immutableWidgets: boolean | null | undefined;
|
|
11
|
-
images: Record<string, {
|
|
11
|
+
images: Record<string, import("../general-purpose-parsers/object-types").OptionalizeProperties<{
|
|
12
12
|
width: number;
|
|
13
13
|
height: number;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
14
|
+
}>>;
|
|
15
|
+
}>>;
|
|
16
16
|
export declare const parseGradedGroupWidget: Parser<GradedGroupWidget>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const parseNumericInputUserInput: import("../parser-types").Parser<{
|
|
1
|
+
export declare const parseNumericInputUserInput: import("../parser-types").Parser<import("../general-purpose-parsers/object-types").OptionalizeProperties<{
|
|
2
2
|
currentValue: string;
|
|
3
|
-
}
|
|
3
|
+
}>>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const parseRadioUserInput: import("../parser-types").Parser<{
|
|
1
|
+
export declare const parseRadioUserInput: import("../parser-types").Parser<import("../general-purpose-parsers/object-types").OptionalizeProperties<{
|
|
2
2
|
choicesSelected: boolean[];
|
|
3
|
-
}
|
|
3
|
+
}>>;
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export declare const parseRadioWidget: import("../parser-types").Parser<import("../..").WidgetOptions<"radio", import("../general-purpose-parsers/object-types").OptionalizeProperties<{
|
|
2
|
+
numCorrect: number | undefined;
|
|
3
|
+
choices: import("../general-purpose-parsers/object-types").OptionalizeProperties<{
|
|
4
|
+
content: string;
|
|
5
|
+
clue: string | undefined;
|
|
6
|
+
correct: boolean | undefined;
|
|
7
|
+
isNoneOfTheAbove: boolean | undefined;
|
|
8
|
+
widgets: import("../..").MakeWidgetMap<import("../..").PerseusWidgetTypes> | undefined;
|
|
9
|
+
}>[];
|
|
10
|
+
hasNoneOfTheAbove: boolean | undefined;
|
|
11
|
+
countChoices: boolean | undefined;
|
|
12
|
+
randomize: boolean | undefined;
|
|
13
|
+
multipleSelect: boolean | undefined;
|
|
14
|
+
deselectEnabled: boolean | undefined;
|
|
15
|
+
onePerLine: boolean | undefined;
|
|
16
|
+
displayCount: any;
|
|
17
|
+
noneOfTheAbove: false | undefined;
|
|
18
|
+
}>>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { WidgetOptions } from "../../data-schema";
|
|
2
2
|
import type { Parser } from "../parser-types";
|
|
3
|
-
export declare function parseWidget<Type extends string, Options>(parseType: Parser<Type>, parseOptions: Parser<Options>): Parser<WidgetOptions<Type, Options>>;
|
|
3
|
+
export declare function parseWidget<Type extends string, Options extends object>(parseType: Parser<Type>, parseOptions: Parser<Options>): Parser<WidgetOptions<Type, Options>>;
|
|
4
4
|
export declare function parseWidgetWithVersion<Version extends {
|
|
5
5
|
major: number;
|
|
6
6
|
minor: number;
|
|
7
|
-
} | undefined, Type extends string, Options>(parseVersion: Parser<Version>, parseType: Parser<Type>, parseOptions: Parser<Options>): Parser<WidgetOptions<Type, Options>>;
|
|
7
|
+
} | undefined, Type extends string, Options extends object>(parseVersion: Parser<Version>, parseType: Parser<Type>, parseOptions: Parser<Options>): Parser<WidgetOptions<Type, Options>>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PerseusItem } from "../data-schema";
|
|
2
2
|
/**
|
|
3
3
|
* Return a copy of a Perseus item with rubric data removed (ie answers)
|
|
4
4
|
*
|
|
5
5
|
* @param originalItem - the original, full Perseus item (which includes the rubric - aka answer data)
|
|
6
6
|
*/
|
|
7
|
-
export default function splitPerseusItem(originalItem:
|
|
7
|
+
export default function splitPerseusItem(originalItem: PerseusItem): PerseusItem;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PerseusItem } from "../data-schema";
|
|
2
|
+
/**
|
|
3
|
+
* Generate a Perseus item object for testing purposes.
|
|
4
|
+
*
|
|
5
|
+
* In order to better type Perseus objects used in testing, this function
|
|
6
|
+
* uses a basic Perseus object and updates it with custom values as needed.
|
|
7
|
+
*
|
|
8
|
+
* @param {Partial<PerseusItem>} customFields
|
|
9
|
+
* @returns {PerseusItem}
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateTestPerseusItem(customFields?: Partial<PerseusItem>): PerseusItem;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Shared Perseus infrastructure",
|
|
4
4
|
"author": "Khan Academy",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "
|
|
6
|
+
"version": "8.0.0",
|
|
7
7
|
"publishConfig": {
|
|
8
8
|
"access": "public"
|
|
9
9
|
},
|
|
@@ -22,13 +22,13 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@khanacademy/kas": "2.0.
|
|
25
|
+
"@khanacademy/kas": "2.0.2",
|
|
26
26
|
"@khanacademy/perseus-utils": "2.0.1"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@khanacademy/wonder-stuff-core": "1.5.4",
|
|
30
30
|
"underscore": "^1.4.4",
|
|
31
|
-
"perseus-build-settings": "0.6.
|
|
31
|
+
"perseus-build-settings": "0.6.1"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@khanacademy/wonder-stuff-core": "1.5.4",
|