keepset 0.1.0 → 0.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/index.d.ts CHANGED
@@ -1,100 +1,9 @@
1
- import { z } from "zod";
2
- //#region src/targets/graph-v1.d.ts
3
- /** A JSON scalar: the only values graph/v1 metadata may hold, so `meta` stays a flat record any consumer can tabulate. `z.number()` already rejects NaN and the infinities, which JSON cannot carry. */
4
- export declare const JsonScalarSchema: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>;
5
- type JsonScalar = z.infer<typeof JsonScalarSchema>;
6
- /** A node: an id, an optional type, and whatever else the dataset carries. The target fixes only what every graph consumer needs, so extra fields pass through untouched. */
7
- export declare const GraphNodeSchema: z.ZodObject<{
8
- id: z.ZodString;
9
- type: z.ZodOptional<z.ZodString>;
10
- }, z.core.$loose>;
11
- type GraphNode = z.infer<typeof GraphNodeSchema>;
12
- /** An edge: source and target node ids, an optional type, and whatever else the dataset carries. Direction is the dataset's own: graph/v1 records it in `meta`, never by duplicating edges. */
13
- export declare const GraphEdgeSchema: z.ZodObject<{
14
- source: z.ZodString;
15
- target: z.ZodString;
16
- type: z.ZodOptional<z.ZodString>;
17
- }, z.core.$loose>;
18
- type GraphEdge = z.infer<typeof GraphEdgeSchema>;
19
- /**
20
- * The graph/v1 normalisation target: `{ meta, nodes, edges }`, the shape the thesis pipeline's benchmark cache already uses. It describes the result `fetchDataset` resolves a graph entry to, not what a source file may contain. Beyond the field shapes it checks the two properties every consumer relies on: node ids are unique, and every edge endpoint names a node.
21
- */
22
- export declare const GraphV1Schema: z.ZodObject<{
23
- meta: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>;
24
- nodes: z.ZodArray<z.ZodObject<{
25
- id: z.ZodString;
26
- type: z.ZodOptional<z.ZodString>;
27
- }, z.core.$loose>>;
28
- edges: z.ZodArray<z.ZodObject<{
29
- source: z.ZodString;
30
- target: z.ZodString;
31
- type: z.ZodOptional<z.ZodString>;
32
- }, z.core.$loose>>;
33
- }, z.core.$strict> & {
34
- is: (value: unknown) => value is {
35
- meta: Record<string, string | number | boolean | null>;
36
- nodes: {
37
- [x: string]: unknown;
38
- id: string;
39
- type?: string | undefined;
40
- }[];
41
- edges: {
42
- [x: string]: unknown;
43
- source: string;
44
- target: string;
45
- type?: string | undefined;
46
- }[];
47
- };
48
- };
49
- type GraphV1 = z.infer<typeof GraphV1Schema>;
50
- //#endregion
51
- //#region src/categories.d.ts
52
- /** Every category id the registry knows. A category id is `<kind>/v<version>`: the kind of data, and the version of its normalisation target, so a breaking change to a target is a new category rather than an edit to an old one. */
53
- export declare const CategoryIdSchema: z.ZodEnum<{
54
- "graph/v1": "graph/v1";
55
- }>;
56
- type CategoryId = z.infer<typeof CategoryIdSchema>;
57
- /** The normalisation target each category resolves to, keyed by category id. */
58
- interface CategoryTargets {
59
- readonly "graph/v1": GraphV1;
60
- }
61
- /** The normalised shape of any category: what `fetchDataset` can resolve to. */
62
- type CategoryTarget = CategoryTargets[CategoryId];
63
- /** One category: its id, what it holds, and the schema of its normalisation target. */
64
- interface Category<Id extends CategoryId = CategoryId> {
65
- readonly id: Id;
66
- readonly description: string;
67
- readonly target: z.ZodType<CategoryTargets[Id]>;
68
- }
69
- /**
70
- * Looks up a category by id.
71
- * @param id - Any string; category ids usually come from entry documents, so the argument is untrusted.
72
- * @returns The category.
73
- * @throws UnknownCategoryError when no category has that id.
74
- */
75
- export declare function getCategory<Id extends CategoryId>(id: Id): Category<Id>;
76
- export declare function getCategory(id: string): Category;
77
- /**
78
- * Returns the schema of a category's normalisation target.
79
- * @param id - Any string, as for `getCategory`.
80
- * @returns The target schema.
81
- * @throws UnknownCategoryError when no category has that id.
82
- */
83
- export declare function getTarget<Id extends CategoryId>(id: Id): z.ZodType<CategoryTargets[Id]>;
84
- export declare function getTarget(id: string): z.ZodType<CategoryTarget>;
85
- /**
86
- * The kind of data a category holds: the part of its id before the version.
87
- * @param id - A category id.
88
- * @returns The kind, such as `graph`.
89
- */
90
- export declare function kindOf(id: CategoryId): string;
91
- /** @returns Every registered category, in id order. */
92
- export declare function listCategories(): readonly Category[];
93
- //#endregion
1
+ import { $ as SnapshotSchema, A as SemVerSchema, B as Entry, C as Dataset, D as LineageSchema, E as Lineage, F as ArchiveSchema, G as LicenceSchema, H as HttpUrlSchema, I as Citation, J as RESERVED_META_KEYS, K as Parser, L as CitationSchema, M as Archive, N as ArchiveMember, O as Manifest, P as ArchiveMemberSchema, Q as Snapshot, R as CrosswalkReference, S as CatalogueIndexSchema, T as createCatalogue, U as IdSchema, V as EntrySchema, W as Licence, X as RecipeSchema, Y as Recipe, Z as RelativePathSchema, _ as GraphV1Schema, a as CategoryTargets, b as Catalogue, c as getCategory, d as listCategories, et as Source, f as GraphEdge, g as GraphV1, h as GraphNodeSchema, i as CategoryTarget, it as waybackUrl, j as parseManifest, k as ManifestSchema, l as getTarget, m as GraphNode, n as CategoryId, nt as WaybackTimestampSchema, o as CountedKey, p as GraphEdgeSchema, q as ParserSchema, r as CategoryIdSchema, rt as parseEntry, s as countTarget, t as Category, tt as SourceSchema, u as kindOf, v as JsonScalar, w as DatasetQuery, x as CatalogueIndex, y as JsonScalarSchema, z as CrosswalkReferenceSchema } from "./categories-BIZJUKUw.js";
2
+ import { Crosswalk } from "twindex";
94
3
  //#region src/errors.d.ts
95
4
  /** The root of this package's error taxonomy: every error keepset throws is a `KeepsetError`, so callers can catch the family with one check. */
96
5
  export declare class KeepsetError extends Error {
97
- constructor(message: string);
6
+ constructor(message: string, options?: ErrorOptions);
98
7
  }
99
8
  /** Thrown when a category id names no category in the registry. Carries the ids that do exist, so the message says what would have been accepted. */
100
9
  export declare class UnknownCategoryError extends KeepsetError {
@@ -102,5 +11,62 @@ export declare class UnknownCategoryError extends KeepsetError {
102
11
  readonly knownIds: readonly string[];
103
12
  constructor(categoryId: string, knownIds: readonly string[]);
104
13
  }
14
+ /** One reason a catalogue document failed its schema: the dotted path of the offending value and what is wrong with it. Zod's own issue objects are collapsed into these so the public error surface stays stable across Zod versions. */
15
+ interface SyntaxIssue {
16
+ readonly path: string;
17
+ readonly message: string;
18
+ }
19
+ /** Thrown when an entry, a catalogue manifest or a catalogue index fails its schema. Carries every issue found, not just the first, so one failed parse reports the whole document. */
20
+ export declare class CatalogueSyntaxError extends KeepsetError {
21
+ readonly document: "entry" | "manifest" | "catalogue";
22
+ readonly issues: readonly SyntaxIssue[];
23
+ constructor(document: "entry" | "manifest" | "catalogue", issues: readonly SyntaxIssue[]);
24
+ }
25
+ /** Thrown by a parser when a file does not have the format its recipe names. `line` is 1-based, counting every line of the file, so it points at the offending line in an editor. */
26
+ export declare class NativeParseError extends KeepsetError {
27
+ readonly format: string;
28
+ readonly line: number;
29
+ constructor(format: string, line: number, message: string);
30
+ }
31
+ /** Thrown when an archive does not hold exactly one member the recipe's member selector matches, or is not a well-formed archive of its stated kind. */
32
+ export declare class ArchiveError extends KeepsetError {}
33
+ /** Thrown when no entry in the catalogue has the requested id. */
34
+ export declare class DatasetNotFoundError extends KeepsetError {
35
+ readonly datasetId: string;
36
+ constructor(datasetId: string);
37
+ }
38
+ /** The step of a recipe that failed: the recipe itself (not fetchable), downloading the source, unpacking the archive, parsing the native shape, applying the crosswalk, or validating the result against the category target. */
39
+ type RecipeStep = "recipe" | "download" | "extract" | "parse" | "crosswalk" | "validate";
40
+ /** Thrown when running an entry's recipe fails. Names the entry and the failing step, and carries the underlying error as `cause`; a recipe never resolves to a partial or default-shaped result. */
41
+ export declare class RecipeError extends KeepsetError {
42
+ readonly entryId: string;
43
+ readonly step: RecipeStep;
44
+ constructor(entryId: string, step: RecipeStep, message: string, options?: ErrorOptions);
45
+ }
46
+ //#endregion
47
+ //#region src/bundled.d.ts
48
+ /**
49
+ * Lists the datasets in the bundled catalogue that match a query. Browser-safe: a pure read over the index bundled with the package.
50
+ * @param query - The filters; all must match, and none given lists everything.
51
+ * @returns The matching datasets, in entry id order.
52
+ */
53
+ export declare function listDatasets(query?: DatasetQuery): Dataset[];
54
+ /**
55
+ * Returns one dataset of the bundled catalogue: its entry (metadata and recipe) and its resolved crosswalk. Browser-safe.
56
+ * @param id - The entry id.
57
+ * @returns The dataset.
58
+ * @throws DatasetNotFoundError when no entry has that id.
59
+ */
60
+ export declare function getDataset(id: string): Dataset;
61
+ /** @returns The bundled catalogue's manifest: its id, version and repository. */
62
+ export declare function getManifest(): Manifest;
63
+ //#endregion
64
+ //#region src/serialise.d.ts
65
+ /**
66
+ * Serialises a catalogue document (an entry, a manifest or a crosswalk file) as its file holds it: two-space indented JSON with keys in ascending order and a trailing newline. The form depends only on the document's content, so parsing a file written this way and serialising the result reproduces the file byte for byte.
67
+ * @param doc - A parsed entry, manifest or crosswalk.
68
+ * @returns The file text.
69
+ */
70
+ export declare function serialise(doc: Entry | Manifest | Crosswalk): string;
105
71
  //#endregion
106
- export type { Category, CategoryId, CategoryTarget, CategoryTargets, GraphEdge, GraphNode, GraphV1, JsonScalar };
72
+ export { type Archive, type ArchiveMember, ArchiveMemberSchema, ArchiveSchema, type Catalogue, type CatalogueIndex, CatalogueIndexSchema, type Category, type CategoryId, CategoryIdSchema, type CategoryTarget, type CategoryTargets, type Citation, CitationSchema, type CountedKey, type CrosswalkReference, CrosswalkReferenceSchema, type Dataset, type DatasetQuery, type Entry, EntrySchema, type GraphEdge, GraphEdgeSchema, type GraphNode, GraphNodeSchema, type GraphV1, GraphV1Schema, HttpUrlSchema, IdSchema, type JsonScalar, JsonScalarSchema, type Licence, LicenceSchema, type Lineage, LineageSchema, type Manifest, ManifestSchema, type Parser, ParserSchema, RESERVED_META_KEYS, type Recipe, RecipeSchema, type RecipeStep, RelativePathSchema, SemVerSchema, type Snapshot, SnapshotSchema, type Source, SourceSchema, type SyntaxIssue, WaybackTimestampSchema, countTarget, createCatalogue, getCategory, getTarget, kindOf, listCategories, parseEntry, parseManifest, waybackUrl };
package/dist/index.js CHANGED
@@ -1,114 +1,22 @@
1
- import { z } from "zod";
2
- //#region src/errors.ts
3
- /** The root of this package's error taxonomy: every error keepset throws is a `KeepsetError`, so callers can catch the family with one check. */
4
- var KeepsetError = class extends Error {
5
- constructor(message) {
6
- super(message);
7
- this.name = new.target.name;
8
- }
9
- };
10
- /** Thrown when a category id names no category in the registry. Carries the ids that do exist, so the message says what would have been accepted. */
11
- var UnknownCategoryError = class extends KeepsetError {
12
- categoryId;
13
- knownIds;
14
- constructor(categoryId, knownIds) {
15
- super(`unknown category ${JSON.stringify(categoryId)}: known categories are ${knownIds.join(", ")}`);
16
- this.categoryId = categoryId;
17
- this.knownIds = knownIds;
18
- }
19
- };
20
- //#endregion
21
- //#region src/define.ts
22
- /**
23
- * Attaches a type guard to a Zod schema (the schema-attached guard pattern: validation, inference and narrowing share one definition, so the three cannot drift). This module is isolated because it is the one place in the package that augments an object in place with Object.assign, which the house lint rule that eslint.config.ts turns off for this file alone would otherwise reject: object spread is no alternative, as it copies own properties only and drops the Zod prototype's parse/refine methods.
24
- * @param schema - The schema to augment.
25
- * @returns The same schema object, now also carrying `is`.
26
- */
27
- function define(schema) {
28
- return Object.assign(schema, { is(value) {
29
- return schema.safeParse(value).success;
30
- } });
31
- }
32
- //#endregion
33
- //#region src/targets/graph-v1.ts
34
- /** A JSON scalar: the only values graph/v1 metadata may hold, so `meta` stays a flat record any consumer can tabulate. `z.number()` already rejects NaN and the infinities, which JSON cannot carry. */
35
- const JsonScalarSchema = z.union([
36
- z.string(),
37
- z.number(),
38
- z.boolean(),
39
- z.null()
40
- ]);
41
- /** A node: an id, an optional type, and whatever else the dataset carries. The target fixes only what every graph consumer needs, so extra fields pass through untouched. */
42
- const GraphNodeSchema = z.looseObject({
43
- id: z.string().min(1),
44
- type: z.string().min(1).optional()
45
- });
46
- /** An edge: source and target node ids, an optional type, and whatever else the dataset carries. Direction is the dataset's own: graph/v1 records it in `meta`, never by duplicating edges. */
47
- const GraphEdgeSchema = z.looseObject({
48
- source: z.string().min(1),
49
- target: z.string().min(1),
50
- type: z.string().min(1).optional()
51
- });
1
+ import { A as getCategory, B as DatasetNotFoundError, C as SnapshotSchema, D as waybackUrl, E as parseEntry, F as GraphNodeSchema, H as NativeParseError, I as GraphV1Schema, L as JsonScalarSchema, M as kindOf, N as listCategories, O as CategoryIdSchema, P as GraphEdgeSchema, R as ArchiveError, S as RelativePathSchema, T as WaybackTimestampSchema, U as RecipeError, V as KeepsetError, W as UnknownCategoryError, _ as IdSchema, a as createCatalogue, b as RESERVED_META_KEYS, c as ManifestSchema, d as ArchiveMemberSchema, f as ArchiveSchema, g as HttpUrlSchema, h as EntrySchema, i as CatalogueIndexSchema, j as getTarget, k as countTarget, l as SemVerSchema, m as CrosswalkReferenceSchema, n as getManifest, p as CitationSchema, r as listDatasets, s as LineageSchema, t as getDataset, u as parseManifest, v as LicenceSchema, w as SourceSchema, x as RecipeSchema, y as ParserSchema, z as CatalogueSyntaxError } from "./bundled--fOitQlP.js";
2
+ //#region src/serialise.ts
52
3
  /**
53
- * The graph/v1 normalisation target: `{ meta, nodes, edges }`, the shape the thesis pipeline's benchmark cache already uses. It describes the result `fetchDataset` resolves a graph entry to, not what a source file may contain. Beyond the field shapes it checks the two properties every consumer relies on: node ids are unique, and every edge endpoint names a node.
4
+ * Copies a JSON value with every object's keys in ascending code-unit order, the order the house JSON lint (`json/sort-keys`) requires of committed JSON. `Object.fromEntries` defines each key as an own data property, so a key such as `__proto__` stays a key.
5
+ * @param value - A JSON value.
6
+ * @returns The same value with sorted keys.
54
7
  */
55
- const GraphV1Schema = define(z.object({
56
- meta: z.record(z.string(), JsonScalarSchema),
57
- nodes: z.array(GraphNodeSchema),
58
- edges: z.array(GraphEdgeSchema)
59
- }).strict().superRefine((graph, ctx) => {
60
- const ids = /* @__PURE__ */ new Set();
61
- for (const [index, node] of graph.nodes.entries()) {
62
- if (ids.has(node.id)) ctx.addIssue({
63
- code: "custom",
64
- path: [
65
- "nodes",
66
- index,
67
- "id"
68
- ],
69
- message: `duplicate node id ${JSON.stringify(node.id)}`
70
- });
71
- ids.add(node.id);
72
- }
73
- for (const [index, edge] of graph.edges.entries()) for (const end of ["source", "target"]) if (!ids.has(edge[end])) ctx.addIssue({
74
- code: "custom",
75
- path: [
76
- "edges",
77
- index,
78
- end
79
- ],
80
- message: `edge ${end} ${JSON.stringify(edge[end])} names no node`
81
- });
82
- }));
83
- //#endregion
84
- //#region src/categories.ts
85
- /** Every category id the registry knows. A category id is `<kind>/v<version>`: the kind of data, and the version of its normalisation target, so a breaking change to a target is a new category rather than an edit to an old one. */
86
- const CategoryIdSchema = z.enum(["graph/v1"]);
87
- /** The registry. Adding a category is adding its id to `CategoryIdSchema` and its entry here, with its target schema beside graph/v1's in src/targets/: the mapped type makes the compiler reject a registry that misses an id or has one too many. */
88
- const registry = { "graph/v1": {
89
- id: "graph/v1",
90
- description: "A graph as { meta, nodes, edges }: a flat record of scalar metadata, nodes carrying at least an id, and edges carrying at least source and target node ids, with optional node and edge types.",
91
- target: GraphV1Schema
92
- } };
93
- function getCategory(id) {
94
- const parsed = CategoryIdSchema.safeParse(id);
95
- if (!parsed.success) throw new UnknownCategoryError(id, CategoryIdSchema.options);
96
- return registry[parsed.data];
97
- }
98
- function getTarget(id) {
99
- return getCategory(id).target;
8
+ function sortKeys(value) {
9
+ if (Array.isArray(value)) return value.map(sortKeys);
10
+ if (typeof value === "object" && value !== null) return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left < right ? -1 : 1).map(([key, item]) => [key, sortKeys(item)]));
11
+ return value;
100
12
  }
101
13
  /**
102
- * The kind of data a category holds: the part of its id before the version.
103
- * @param id - A category id.
104
- * @returns The kind, such as `graph`.
14
+ * Serialises a catalogue document (an entry, a manifest or a crosswalk file) as its file holds it: two-space indented JSON with keys in ascending order and a trailing newline. The form depends only on the document's content, so parsing a file written this way and serialising the result reproduces the file byte for byte.
15
+ * @param doc - A parsed entry, manifest or crosswalk.
16
+ * @returns The file text.
105
17
  */
106
- function kindOf(id) {
107
- return id.slice(0, id.indexOf("/"));
108
- }
109
- /** @returns Every registered category, in id order. */
110
- function listCategories() {
111
- return CategoryIdSchema.options.map((id) => getCategory(id));
18
+ function serialise(doc) {
19
+ return `${JSON.stringify(sortKeys(doc), void 0, 2)}\n`;
112
20
  }
113
21
  //#endregion
114
- export { CategoryIdSchema, GraphEdgeSchema, GraphNodeSchema, GraphV1Schema, JsonScalarSchema, KeepsetError, UnknownCategoryError, getCategory, getTarget, kindOf, listCategories };
22
+ export { ArchiveError, ArchiveMemberSchema, ArchiveSchema, CatalogueIndexSchema, CatalogueSyntaxError, CategoryIdSchema, CitationSchema, CrosswalkReferenceSchema, DatasetNotFoundError, EntrySchema, GraphEdgeSchema, GraphNodeSchema, GraphV1Schema, HttpUrlSchema, IdSchema, JsonScalarSchema, KeepsetError, LicenceSchema, LineageSchema, ManifestSchema, NativeParseError, ParserSchema, RESERVED_META_KEYS, RecipeError, RecipeSchema, RelativePathSchema, SemVerSchema, SnapshotSchema, SourceSchema, UnknownCategoryError, WaybackTimestampSchema, countTarget, createCatalogue, getCategory, getDataset, getManifest, getTarget, kindOf, listCategories, listDatasets, parseEntry, parseManifest, serialise, waybackUrl };
@@ -0,0 +1,58 @@
1
+ import { B as Entry, C as Dataset, Q as Snapshot, et as Source, i as CategoryTarget } from "../categories-BIZJUKUw.js";
2
+ //#region src/node/fetch-dataset.d.ts
3
+ /** The network port a recipe downloads through: the platform `fetch`, or a stand-in under test. */
4
+ export type FetchPort = (url: string, init: {
5
+ readonly signal?: AbortSignal;
6
+ }) => Promise<Response>;
7
+ /** What a fetch may be given beyond the dataset: the network port, an abort signal and the clock that dates the provenance record. */
8
+ export interface FetchOptions {
9
+ readonly fetch?: FetchPort;
10
+ readonly signal?: AbortSignal;
11
+ readonly now?: () => Date;
12
+ }
13
+ /** Where a fetched result's bytes came from: enough to say which entry, catalogue and source produced it, which URL was actually requested, when, and exactly which bytes arrived. */
14
+ export interface Provenance {
15
+ readonly entryId: string;
16
+ readonly catalogue: Dataset["catalogue"];
17
+ readonly category: Entry["category"];
18
+ readonly source: {
19
+ readonly url: string;
20
+ readonly status: Source["status"];
21
+ readonly snapshot?: Snapshot;
22
+ };
23
+ readonly fetchedUrl: string;
24
+ readonly retrievedAt: string;
25
+ readonly sha256: string;
26
+ readonly byteLength: number;
27
+ readonly member?: string;
28
+ }
29
+ /** A fetched dataset: the resolved category target, the provenance of the bytes it came from, and any warnings, such as a count that differs from the one the entry records. */
30
+ export interface FetchedDataset {
31
+ readonly dataset: Dataset;
32
+ readonly data: CategoryTarget;
33
+ readonly provenance: Provenance;
34
+ readonly warnings: readonly string[];
35
+ }
36
+ /**
37
+ * The URL a recipe downloads a source from. A dead source is fetched from its pinned snapshot in the Wayback Machine's `id_` form, which serves the archived bytes as they were captured rather than wrapped in the archive's page chrome.
38
+ * @param source - The source.
39
+ * @returns The URL to request.
40
+ */
41
+ export declare function downloadUrl(source: Source): string;
42
+ /**
43
+ * Runs a dataset's recipe: downloads the source (from its pinned snapshot when the source is dead), unpacks the archive, parses the native shape, applies the twindex crosswalk and validates the result against the category target. The native document the crosswalk receives is the parser's output with `meta` built from the entry.
44
+ * @param dataset - A dataset from any catalogue.
45
+ * @param options - The network port, abort signal and clock.
46
+ * @returns The resolved target with its provenance and any count warnings.
47
+ * @throws RecipeError naming the entry and the failing step; nothing partial or default-shaped is ever returned.
48
+ */
49
+ export declare function fetchEntry(dataset: Dataset, options?: FetchOptions): Promise<FetchedDataset>;
50
+ /**
51
+ * Fetches a dataset of the bundled catalogue by id and resolves it to its category's target shape, so `fetchDataset("cora")` yields graph/v1 `{ meta, nodes, edges }` directly. Node-only: it downloads with the platform `fetch` and unpacks with Node's zlib.
52
+ * @param id - The entry id.
53
+ * @param options - The network port, abort signal and clock.
54
+ * @returns The resolved target with its provenance and any count warnings.
55
+ * @throws DatasetNotFoundError when no entry has that id, and RecipeError naming the entry and the failing step when the recipe fails.
56
+ */
57
+ export declare function fetchDataset(id: string, options?: FetchOptions): Promise<FetchedDataset>;
58
+ //#endregion