@khanacademy/perseus-core 3.2.0 → 3.3.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 +57 -12
- package/dist/es/index.js +2563 -221
- package/dist/es/index.js.map +1 -1
- package/dist/index.d.ts +69 -0
- package/dist/index.js +2597 -220
- package/dist/index.js.map +1 -1
- package/dist/parse-perseus-json/error-tracking-parse-context.d.ts +9 -0
- package/dist/parse-perseus-json/exhaustive-test-tool/index.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/any.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/array.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/array.typetest.d.ts +1 -0
- package/dist/parse-perseus-json/general-purpose-parsers/boolean.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/constant.d.ts +4 -0
- package/dist/parse-perseus-json/general-purpose-parsers/convert.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/defaulted.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/discriminated-union.d.ts +21 -0
- package/dist/parse-perseus-json/general-purpose-parsers/discriminated-union.typetest.d.ts +1 -0
- package/dist/parse-perseus-json/general-purpose-parsers/enumeration.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/enumeration.typetest.d.ts +1 -0
- package/dist/parse-perseus-json/general-purpose-parsers/index.d.ts +17 -0
- package/dist/parse-perseus-json/general-purpose-parsers/is-object.d.ts +1 -0
- package/dist/parse-perseus-json/general-purpose-parsers/nullable.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/number.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/object.d.ts +6 -0
- package/dist/parse-perseus-json/general-purpose-parsers/optional.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/pair.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/pipe-parsers.d.ts +7 -0
- package/dist/parse-perseus-json/general-purpose-parsers/pipe-parsers.typetest.d.ts +1 -0
- package/dist/parse-perseus-json/general-purpose-parsers/record.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/string-to-number.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/string.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/test-helpers.d.ts +8 -0
- package/dist/parse-perseus-json/general-purpose-parsers/trio.d.ts +2 -0
- package/dist/parse-perseus-json/general-purpose-parsers/union.d.ts +7 -0
- package/dist/parse-perseus-json/general-purpose-parsers/union.typetest.d.ts +1 -0
- package/dist/parse-perseus-json/general-purpose-parsers/unknown.d.ts +2 -0
- package/dist/parse-perseus-json/index.d.ts +45 -0
- package/dist/parse-perseus-json/object-path.d.ts +2 -0
- package/dist/parse-perseus-json/parse-failure-detail.d.ts +2 -0
- package/dist/parse-perseus-json/parse.d.ts +3 -0
- package/dist/parse-perseus-json/parser-types.d.ts +30 -0
- package/dist/parse-perseus-json/perseus-parsers/categorizer-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/cs-program-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/definition-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/dropdown-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/explanation-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/expression-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/graded-group-set-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/graded-group-widget.d.ts +16 -0
- package/dist/parse-perseus-json/perseus-parsers/grapher-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/group-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/hint.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/iframe-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/image-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/images-map.d.ts +5 -0
- package/dist/parse-perseus-json/perseus-parsers/input-number-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/interaction-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/interactive-graph-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/label-image-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/matcher-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/matrix-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/measurer-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/molecule-renderer-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/number-line-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/numeric-input-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/orderer-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/passage-ref-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/passage-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/perseus-article.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/perseus-image-background.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/perseus-item.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/perseus-renderer.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/phet-simulation-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/plotter-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/python-program-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/radio-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/sorter-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/table-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/versioned-widget-options.d.ts +36 -0
- package/dist/parse-perseus-json/perseus-parsers/video-widget.d.ts +3 -0
- package/dist/parse-perseus-json/perseus-parsers/widget.d.ts +7 -0
- package/dist/parse-perseus-json/perseus-parsers/widgets-map.d.ts +3 -0
- package/dist/parse-perseus-json/result.d.ts +16 -0
- package/dist/utils/is-real-json-parse.d.ts +1 -0
- package/dist/utils/widget-id-utils.d.ts +38 -0
- package/dist/widgets/categorizer/categorizer-util.d.ts +17 -0
- package/dist/widgets/categorizer/index.d.ts +5 -0
- package/dist/widgets/cs-program/index.d.ts +5 -0
- package/dist/widgets/definition/index.d.ts +5 -0
- package/dist/widgets/dropdown/index.d.ts +5 -0
- package/dist/widgets/explanation/index.d.ts +5 -0
- package/dist/widgets/expression/expression-upgrade.d.ts +10 -0
- package/dist/widgets/expression/expression-util.d.ts +19 -0
- package/dist/widgets/expression/index.d.ts +4 -0
- package/dist/widgets/graded-group/index.d.ts +5 -0
- package/dist/widgets/graded-group-set/index.d.ts +5 -0
- package/dist/widgets/group/index.d.ts +5 -0
- package/dist/widgets/iframe/index.d.ts +5 -0
- package/dist/widgets/image/index.d.ts +5 -0
- package/dist/widgets/input-number/index.d.ts +5 -0
- package/dist/widgets/interaction/index.d.ts +5 -0
- package/dist/widgets/interactive-graph/index.d.ts +5 -0
- package/dist/widgets/label-image/index.d.ts +5 -0
- package/dist/widgets/logic-export.types.d.ts +10 -0
- package/dist/widgets/matcher/index.d.ts +5 -0
- package/dist/widgets/matrix/index.d.ts +5 -0
- package/dist/widgets/measurer/index.d.ts +4 -0
- package/dist/widgets/measurer/measurer-upgrade.d.ts +10 -0
- package/dist/widgets/number-line/index.d.ts +5 -0
- package/dist/widgets/numeric-input/index.d.ts +5 -0
- package/dist/widgets/orderer/index.d.ts +5 -0
- package/dist/widgets/orderer/orderer-util.d.ts +16 -0
- package/dist/widgets/passage/index.d.ts +5 -0
- package/dist/widgets/passage-ref/index.d.ts +4 -0
- package/dist/widgets/passage-ref/passage-ref-upgrade.d.ts +7 -0
- package/dist/widgets/passage-ref-target/index.d.ts +5 -0
- package/dist/widgets/phet-simulation/index.d.ts +5 -0
- package/dist/widgets/plotter/index.d.ts +5 -0
- package/dist/widgets/python-program/index.d.ts +5 -0
- package/dist/widgets/radio/index.d.ts +4 -0
- package/dist/widgets/radio/radio-upgrade.d.ts +10 -0
- package/dist/widgets/sorter/index.d.ts +5 -0
- package/dist/widgets/table/index.d.ts +5 -0
- package/dist/widgets/video/index.d.ts +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ParseContext, Mismatch, PathSegment } from "./parser-types";
|
|
2
|
+
import type { Failure, Success } from "./result";
|
|
3
|
+
export declare class ErrorTrackingParseContext implements ParseContext {
|
|
4
|
+
private readonly path;
|
|
5
|
+
constructor(path: PathSegment[]);
|
|
6
|
+
failure(expected: string | string[], badValue: unknown): Failure<Mismatch[]>;
|
|
7
|
+
forSubtree(key: PathSegment): ParseContext;
|
|
8
|
+
success<T>(value: T): Success<T>;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Parser } from "../parser-types";
|
|
2
|
+
type Primitive = number | string | boolean | null | undefined;
|
|
3
|
+
/**
|
|
4
|
+
* discriminatedUnion() should be preferred over union() when parsing a
|
|
5
|
+
* discriminated union type, because discriminatedUnion() produces more
|
|
6
|
+
* understandable failure messages. It takes the discriminant as the source of
|
|
7
|
+
* truth for which variant is to be parsed, and expects the other data to match
|
|
8
|
+
* that variant.
|
|
9
|
+
*/
|
|
10
|
+
export declare function discriminatedUnionOn<DK extends string>(discriminantKey: DK): DiscriminatedUnionBuilder<DK, never>;
|
|
11
|
+
declare class DiscriminatedUnionBuilder<DK extends string, Union extends {
|
|
12
|
+
[k in DK]: Primitive;
|
|
13
|
+
}> {
|
|
14
|
+
private discriminantKey;
|
|
15
|
+
parser: Parser<Union>;
|
|
16
|
+
constructor(discriminantKey: DK, parser: Parser<Union>);
|
|
17
|
+
withBranch<Variant extends {
|
|
18
|
+
[k in DK]: Primitive;
|
|
19
|
+
}>(discriminantValue: Primitive, parseNewVariant: Parser<Variant>): DiscriminatedUnionBuilder<DK, Union | Variant>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from "./any";
|
|
2
|
+
export * from "./array";
|
|
3
|
+
export * from "./boolean";
|
|
4
|
+
export * from "./constant";
|
|
5
|
+
export * from "./enumeration";
|
|
6
|
+
export * from "./is-object";
|
|
7
|
+
export * from "./nullable";
|
|
8
|
+
export * from "./number";
|
|
9
|
+
export * from "./object";
|
|
10
|
+
export * from "./optional";
|
|
11
|
+
export * from "./pair";
|
|
12
|
+
export * from "./pipe-parsers";
|
|
13
|
+
export * from "./record";
|
|
14
|
+
export * from "./string";
|
|
15
|
+
export * from "./trio";
|
|
16
|
+
export * from "./union";
|
|
17
|
+
export * from "./unknown";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isObject(x: unknown): x is Record<keyof any, unknown>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Parser, PartialParser } from "../parser-types";
|
|
2
|
+
export declare function pipeParsers<T>(p: Parser<T>): ParserPipeline<T>;
|
|
3
|
+
export declare class ParserPipeline<T> {
|
|
4
|
+
readonly parser: Parser<T>;
|
|
5
|
+
constructor(parser: Parser<T>);
|
|
6
|
+
then<U>(nextParser: PartialParser<T, U>): ParserPipeline<U>;
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ErrorTrackingParseContext } from "../error-tracking-parse-context";
|
|
2
|
+
import type { Mismatch, ParsedValue, Parser } from "../parser-types";
|
|
3
|
+
import type { Failure } from "../result";
|
|
4
|
+
export declare function ctx(): ErrorTrackingParseContext;
|
|
5
|
+
export declare const anyFailure: Failure<any>;
|
|
6
|
+
export declare const anySuccess: import("../result").Success<any>;
|
|
7
|
+
export declare function parseFailureWith(expected: Partial<Mismatch>): Failure<Mismatch[]>;
|
|
8
|
+
export declare function summonParsedValue<P extends Parser<any>>(): ParsedValue<P>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Parser } from "../parser-types";
|
|
2
|
+
export declare function union<T>(parseBranch: Parser<T>): UnionBuilder<T>;
|
|
3
|
+
export declare class UnionBuilder<T> {
|
|
4
|
+
parser: Parser<T>;
|
|
5
|
+
constructor(parser: Parser<T>);
|
|
6
|
+
or<New>(newBranch: Parser<New>): UnionBuilder<T | New>;
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Result } from "./result";
|
|
2
|
+
import type { PerseusItem, PerseusArticle } from "../data-schema";
|
|
3
|
+
/**
|
|
4
|
+
* Helper to parse PerseusItem JSON
|
|
5
|
+
* Why not just use JSON.parse? We want:
|
|
6
|
+
* - To make sure types are correct
|
|
7
|
+
* - To give us a central place to validate/transform output if needed
|
|
8
|
+
* @deprecated - use parseAndMigratePerseusItem instead
|
|
9
|
+
* @param {string} json - the stringified PerseusItem JSON
|
|
10
|
+
* @returns {PerseusItem} the parsed PerseusItem object
|
|
11
|
+
*/
|
|
12
|
+
export declare function parsePerseusItem(json: string): PerseusItem;
|
|
13
|
+
export type ParseFailureDetail = {
|
|
14
|
+
/**
|
|
15
|
+
* A human-readable error message describing where in the object tree
|
|
16
|
+
* parsing failed.
|
|
17
|
+
*/
|
|
18
|
+
message: string;
|
|
19
|
+
/**
|
|
20
|
+
* The raw result of parsing the input JSON, with no migrations applied.
|
|
21
|
+
* Use at your own risk.
|
|
22
|
+
*/
|
|
23
|
+
invalidObject: unknown;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Parses a PerseusItem from a JSON string, migrates old formats to the latest
|
|
27
|
+
* schema, and runtime-typechecks the result. Use this to parse assessmentItem
|
|
28
|
+
* data.
|
|
29
|
+
*
|
|
30
|
+
* @returns a {@link Result} of the parsed PerseusItem. If the result is a
|
|
31
|
+
* failure, it will contain an error message describing where in the tree
|
|
32
|
+
* parsing failed.
|
|
33
|
+
* @throws SyntaxError if the argument is not well-formed JSON.
|
|
34
|
+
*/
|
|
35
|
+
export declare function parseAndMigratePerseusItem(json: string): Result<PerseusItem, ParseFailureDetail>;
|
|
36
|
+
/**
|
|
37
|
+
* Parses a PerseusArticle from a JSON string, migrates old formats to the
|
|
38
|
+
* latest schema, and runtime-typechecks the result.
|
|
39
|
+
*
|
|
40
|
+
* @returns a {@link Result} of the parsed PerseusArticle. If the result is a
|
|
41
|
+
* failure, it will contain an error message describing where in the tree
|
|
42
|
+
* parsing failed.
|
|
43
|
+
* @throws SyntaxError if the argument is not well-formed JSON.
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseAndMigratePerseusArticle(json: string): Result<PerseusArticle, ParseFailureDetail>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Success, Failure, Result } from "./result";
|
|
2
|
+
export type Parser<T> = (rawVal: unknown, ctx: ParseContext) => ParseResult<T>;
|
|
3
|
+
export type PartialParser<Input, Output> = (rawVal: Input, ctx: ParseContext) => ParseResult<Output>;
|
|
4
|
+
export type ParseResult<T> = Result<T, Mismatch[]>;
|
|
5
|
+
export type Mismatch = {
|
|
6
|
+
expected: string[];
|
|
7
|
+
badValue: unknown;
|
|
8
|
+
path: PathSegment[];
|
|
9
|
+
};
|
|
10
|
+
export type PathSegment = keyof any;
|
|
11
|
+
export interface ParseContext {
|
|
12
|
+
/**
|
|
13
|
+
* Returns a Success result based on the current state of the parse.
|
|
14
|
+
* @param value The value to return in the Success.
|
|
15
|
+
*/
|
|
16
|
+
success<T>(value: T): Success<T>;
|
|
17
|
+
/**
|
|
18
|
+
* Returns a Failure result based on the current state of the parse.
|
|
19
|
+
*
|
|
20
|
+
* @param expected one or more descriptions of the types that were expected.
|
|
21
|
+
* An array of several expected types has "any" semantics - any of the
|
|
22
|
+
* listed types is valid.
|
|
23
|
+
* @param badValue the value that caused the parse to fail.
|
|
24
|
+
*/
|
|
25
|
+
failure(expected: string | string[], badValue: unknown): Failure<Mismatch[]>;
|
|
26
|
+
forSubtree(key: PathSegment): ParseContext;
|
|
27
|
+
}
|
|
28
|
+
export type ParsedValue<P extends Parser<any>> = Extract<ReturnType<P>, {
|
|
29
|
+
type: "success";
|
|
30
|
+
}>["value"];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { GradedGroupWidget } from "../../data-schema";
|
|
2
|
+
import type { Parser } from "../parser-types";
|
|
3
|
+
export declare const parseGradedGroupWidgetOptions: Parser<{
|
|
4
|
+
title: string;
|
|
5
|
+
hasHint: boolean | null | undefined;
|
|
6
|
+
hint: import("../..").PerseusRenderer | null | undefined;
|
|
7
|
+
content: string;
|
|
8
|
+
widgets: import("../..").MakeWidgetMap<import("../..").PerseusWidgetTypes>;
|
|
9
|
+
widgetEnabled: boolean | null | undefined;
|
|
10
|
+
immutableWidgets: boolean | null | undefined;
|
|
11
|
+
images: Record<string, {
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
}>;
|
|
15
|
+
}>;
|
|
16
|
+
export declare const parseGradedGroupWidget: Parser<GradedGroupWidget>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Version } from "../../data-schema";
|
|
2
|
+
import type { Parser } from "../parser-types";
|
|
3
|
+
type Versioned = {
|
|
4
|
+
version?: Version;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Creates a parser for a widget options type with multiple major versions. Old
|
|
8
|
+
* versions are migrated to the latest version. The parse fails if the input
|
|
9
|
+
* data does not match any of the versions.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const parseOptions = versionedWidgetOptions(3, parseOptionsV3)
|
|
13
|
+
* .withMigrationFrom(2, parseOptionsV2, migrateV2ToV3)
|
|
14
|
+
* .withMigrationFrom(1, parseOptionsV1, migrateV1ToV2)
|
|
15
|
+
* .withMigrationFrom(0, parseOptionsV0, migrateV0ToV1)
|
|
16
|
+
* .parser;
|
|
17
|
+
*
|
|
18
|
+
* @param latestMajorVersion the latest major version of the widget options.
|
|
19
|
+
* @param parseLatest a {@link Parser} for the latest version of the widget
|
|
20
|
+
* options.
|
|
21
|
+
* @returns a builder object, to which migrations from earlier versions can be
|
|
22
|
+
* added. Migrations must be added in "reverse chronological" order as in the
|
|
23
|
+
* example above.
|
|
24
|
+
*/
|
|
25
|
+
export declare function versionedWidgetOptions<Latest extends Versioned>(latestMajorVersion: number, parseLatest: Parser<Latest>): VersionedWidgetOptionsParserBuilder<Latest, Latest>;
|
|
26
|
+
declare class VersionedWidgetOptionsParserBuilder<Latest extends Versioned, MigratableWidgetOptions extends Versioned> {
|
|
27
|
+
private migrateToLatest;
|
|
28
|
+
private parseOtherVersions;
|
|
29
|
+
parser: Parser<Latest>;
|
|
30
|
+
constructor(majorVersion: number, parseThisVersion: Parser<MigratableWidgetOptions>, migrateToLatest: (m: MigratableWidgetOptions) => Latest, parseOtherVersions: Parser<Latest>);
|
|
31
|
+
/**
|
|
32
|
+
* Add a migration from an old version of the widget options.
|
|
33
|
+
*/
|
|
34
|
+
withMigrationFrom<Old extends Versioned>(majorVersion: number, parseOldVersion: Parser<Old>, migrateToNextVersion: (old: Old) => MigratableWidgetOptions): VersionedWidgetOptionsParserBuilder<Latest, Old>;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WidgetOptions } from "../../data-schema";
|
|
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>>;
|
|
4
|
+
export declare function parseWidgetWithVersion<Version extends {
|
|
5
|
+
major: number;
|
|
6
|
+
minor: number;
|
|
7
|
+
} | undefined, Type extends string, Options>(parseVersion: Parser<Version>, parseType: Parser<Type>, parseOptions: Parser<Options>): Parser<WidgetOptions<Type, Options>>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type Result<S, F> = Success<S> | Failure<F>;
|
|
2
|
+
export type Success<T> = {
|
|
3
|
+
type: "success";
|
|
4
|
+
value: T;
|
|
5
|
+
};
|
|
6
|
+
export type Failure<T> = {
|
|
7
|
+
type: "failure";
|
|
8
|
+
detail: T;
|
|
9
|
+
};
|
|
10
|
+
export declare function success<T>(value: T): Success<T>;
|
|
11
|
+
export declare function failure<T>(detail: T): Failure<T>;
|
|
12
|
+
export declare function isFailure<S, F>(result: Result<S, F>): result is Failure<F>;
|
|
13
|
+
export declare function isSuccess<S, F>(result: Result<S, F>): result is Success<S>;
|
|
14
|
+
export declare function assertFailure<S, F>(result: Result<S, F>): asserts result is Failure<F>;
|
|
15
|
+
export declare function assertSuccess<S, F>(result: Result<S, F>): asserts result is Success<S>;
|
|
16
|
+
export declare function all<S, F>(results: Array<Result<S, F>>, combineFailureDetails?: (a: F, b: F) => F): Result<S[], F>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isRealJSONParse(jsonParse: typeof JSON.parse): boolean;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { PerseusWidgetsMap } from "../data-schema";
|
|
2
|
+
/**
|
|
3
|
+
* Add a widget placeholder using the widget ID.
|
|
4
|
+
* ex. addWidget("radio 1") => "[[☃ radio 1]]"
|
|
5
|
+
*
|
|
6
|
+
* @param {string} id
|
|
7
|
+
* @returns {string}
|
|
8
|
+
*/
|
|
9
|
+
export declare function addWidget(id: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Regex for widget placeholders in a string.
|
|
12
|
+
*
|
|
13
|
+
* First capture group is the widget ID (ex. 'radio 1')
|
|
14
|
+
* Second capture group is the widget type (ex. "radio)
|
|
15
|
+
* exec return will look like: ['[[☃ radio 1]]', 'radio 1', 'radio']
|
|
16
|
+
*/
|
|
17
|
+
export declare function getWidgetRegex(): RegExp;
|
|
18
|
+
/**
|
|
19
|
+
* Extract all widget IDs, which includes the widget type and instance number.
|
|
20
|
+
* example output: ['radio 1', 'categorizer 1', 'categorizor 2']
|
|
21
|
+
*
|
|
22
|
+
* Content should contain Perseus widget placeholders,
|
|
23
|
+
* which look like: '[[☃ radio 1]]'.
|
|
24
|
+
*
|
|
25
|
+
* @param {string} content
|
|
26
|
+
* @returns {ReadonlyArray<string>} widgetIds
|
|
27
|
+
*/
|
|
28
|
+
export declare function getWidgetIdsFromContent(content: string): ReadonlyArray<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Get a list of widget IDs from content,
|
|
31
|
+
* but only for specific widget types
|
|
32
|
+
*
|
|
33
|
+
* @param {string} type the type of widget (ie "radio")
|
|
34
|
+
* @param {string} content the string to parse
|
|
35
|
+
* @param {PerseusWidgetsMap} widgetMap widget ID to widget map
|
|
36
|
+
* @returns {ReadonlyArray<string>} the widget type (ie "radio")
|
|
37
|
+
*/
|
|
38
|
+
export declare function getWidgetIdsFromContentByType(type: string, content: string, widgetMap: PerseusWidgetsMap): ReadonlyArray<string>;
|