Hong-Phuc Bui
2023-05-17 364cbe7f4a92a11ebb7f4fbe48cf84862f151f32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import { MathCoach } from "./MathCoach";
/**
 * Hilfsfunktionen für Werkzeug-Entwickler. Diese werden nicht durch die `ide-lib.js`
 * ausgeliefert!
 */
export declare namespace Helpers {
    /**
     * Bildet die MathCoach API nach, sodass diese auch Offline (ohne IDE)
     * verfügbar ist. (Siehe auch `createStorageBasedApi`).
     *
     * **Hinweis**: Wenn die echte MathCoach-API der IDE verfügbar ist, hat der Aufruf
     * dieser Funktion keinen Seiteneffekt.
     *
     * Anwendungsbeispiel
     *
     *      import { Helpers } from "@mathcoach/ide-api";
     *      Helpers.enableOfflineUsageIfNecessary();
     *      MC.isReady() // use the api
     *
     * @param contextFileExtension Datei-Erweiterung der Kontext-Datei (Das Werkzeug soll
     * jedoch unabhängig von der Endung arbeiten können)
     * @returns Gibt `true` zurück, wenn die Offline-Funktionalität aktiviert
     * wurde, andernfalls `false`
     */
    function enableOfflineUsageIfNecessary(contextFileExtension?: string): boolean;
    /**
     * Implementierung der MathCoach API zu Testzwecken.
     *
     * Das Dateisystem wird durch einen Storage implementiert. Einige Features der
     * IDE (beispielsweise der Navigator) sind nicht verfügbar und führen keine Aktionen
     * durch. Alle Aktionen werden in der Browser-Console geloggt.
     *
     * Anwendungsbeispiel
     *
     *      import { Helpers } from "@mathcoach/ide-api";
     *      const _MC = Helpers.createStorageBasedApi();
     *      const contextFile = await _MC.ide.getContextFile() // use the api
     *
     * @param contextFileExtension Die Datei-Erweiterung der Kontext-Datei. Das Werkzeug sollte
     *      unabhängig davon implementiert sein, da der Administrator der MathCoach IDE unter
     *      Umständen auf eine Alternative ausweichen muss.
     * @param storage Storage-Implementierung, die zum Speichern von Dateien verwendet werden
     *      soll. Standardmäßig wird der `LocalStorage` des Browsers verwendet
     *      bzw. falls nicht verfügbar der `InMemoryStorage`.
     *
     */
    function createStorageBasedApi(contextFileExtension?: string, storage?: Storage): MathCoach.Api;
    /**
     * Type Guard, der prüft, ob es sich um eine gültige `MathCoach.File`-Referenz handelt.
     *
     * @param maybeFile Ein beliebiges Objekt, das geprüft werden soll
     */
    function isFile(maybeFile: any): maybeFile is MathCoach.File;
    /**
     * Bildet die Kontext-Datei auf eine Aufgaben-Datei mit selben Namen ab.
     *
     * Ein Werkzeug speichert sein Datenmodell in der sogenannten Kontext-Datei. Soll
     * eine MathCoach-Aufgabe generiert werden, ist es sinnvoll, wenn die Aufgaben-Datei
     * den selben Namen wie die Kontext-Datei trägt (natürlich mit anderer Dateiendung).
     *
     * Beispielsweise wird eine Dateireferenz mit dem Pfad `"/path/to/myExercise.mcq.json"`
     * auf eine Dateireferenz mit dem Pfad `"/path/to/myExercise.groovy"` abgebildet.
     *
     * Anwendungsbeispiel
     *
     *      import { Helpers } from "@mathcoach/ide-api";
     *      const contextFile: MathCoach.File = await MC.ide.getContextFile();
     *      const exerciseFile: MathCoach.File = Helpers.contextFileToExerciseFile(contextFile);
     */
    function contextFileToExerciseFile(contextFile: MathCoach.File): MathCoach.File;
    /**
     * Storage auf Basis einer Map. Kann z.B. bei Unit-Tests verwendet
     * werden, beid denen der LocalStorage nicht verfügbar ist.
     */
    class InMemoryStorage implements Storage {
        private readonly items;
        get length(): number;
        clear(): void;
        getItem(key: string): string | null;
        key(_index: number): string | null;
        removeItem(key: string): void;
        setItem(key: string, value: string): void;
    }
}