- TypeScript 94.5%
- Shell 5.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
pack / pack (push) Successful in 12s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
| .forgejo/workflows | ||
| .githooks | ||
| befehle-aufrufen | ||
| befehle-erkennen | ||
| funktionen | ||
| kommentare-erkennen | ||
| konsole-ausgeben | ||
| locales | ||
| scripts | ||
| variablen | ||
| zahl-oder-text | ||
| .gitignore | ||
| .npmrc | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
JavaScript-Grundlagen
Challenge-Paket für den Einstieg in JavaScript (ab der 5. Schulstufe): die Sprache selbst, ausgeführt in der Konsole der Plattform. Es dient als Referenz für weitere Pakete: Aufbau, Schrittarten, Prüfungen, eigenes Feedback und Tests sind hier vollständig vorgeführt.
| Challenge | Frage | Inhalt |
|---|---|---|
kommentare-erkennen |
Was ist ein Kommentar? | Zeilen- und Blockkommentare, auskommentieren |
befehle-erkennen |
Wie erkenne ich einen Befehl? | Befehle, Reihenfolge, Laufzeit- und Syntaxfehler |
befehle-aufrufen |
Wie rufe ich einen Befehl auf? | Name, Klammern, Argumente, Befehle mit Ergebnis (Math.max, Math.round) |
zahl-oder-text |
Zahl oder Text? | Datentypen Zahl und Text, + und * |
konsole-ausgeben |
Wie gebe ich etwas aus? | console.log, Rechnungen, Texte verbinden |
variablen |
Variablen | let, const, Wert ändern, Variablen im Text |
funktionen |
Funktionen | eigene Befehle, Parameter, return |
Alle mit drei Stufen (normal, erweitert, experte), in dieser Reihenfolge (aivopod.ablauf).
Verwendete Schrittarten: lesen, markieren, vorhersagen, zuordnen, aendern, schreiben.
zahl-oder-text hat den Parameter zahl (Standard 5), den eine Zuweisung über config ändern kann.
variablen zeigt einen eigenen Prüfer (eigen) mit Feedback aus locales/de.json.
Weiter geht es mit javascript-grundlagen-2 (Entscheidungen, Schleifen, Listen, Objekte) und dann javascript-und-die-website.
Umbenannt: Bis Version 1.1.0 hieß das Paket grundlagen (drei Challenges). Kurse mit grundlagen behalten es; der neue Name beginnt bei 2.0.0, weil das Tag v1.1.0 im Repository dem alten Paket gehört. Braucht Aivopod 0.5.
Aufbau
javascript-grundlagen/
├── package.json Name, Version, Sprachen ("aivopod": { "sprachen": ["de"] })
├── kommentare-erkennen/
│ ├── index.ts die Challenge (export default defineChallenge(…))
│ ├── index.test.ts Tests mit typischen Fehlern aus dem Unterricht
│ └── assets/ Bilder dieser Challenge (PNG, JPEG, WebP, GIF, SVG; höchstens 512 KB)
├── befehle-erkennen/
└── zahl-oder-text/
Ein Paket darf nur @aivopod/sdk und eigene Dateien importieren. Bilder werden mit  eingebunden; externe Adressen sind nicht erlaubt.
Arbeiten am Paket
Das SDK kommt aus der npm-Registry der Organisation (.npmrc), in der Version der Plattform. Dazu braucht es das CLI aivopod (Installation: siehe aivopod-cli).
npm install # das SDK aus der Registry
npm run typecheck # TypeScript
aivopod pack test # alle Tests des Pakets, ohne vitest
aivopod pack build # bündeln, Bilder, Icons und Schritt-IDs prüfen → dist/
aivopod pack preview # im Browser durchspielen, mit Prüfung und Feedback
Veröffentlichen
Die Version in package.json erhöhen und nach main bringen. Die CI prüft die neue Version gegen
das letzte Release (Patch: nur Texte; Nebenversion: Änderungen in bestehenden Challenges oder im
Ablauf; Hauptversion: andere Challenges) und legt das Release v<version> mit
javascript-grundlagen-<version>.zip und Prüfsumme an (scripts/pack-release.sh). Plattformen, die die
Organisation aivopod-challenges als Quelle eingetragen haben, bieten es dann an; das Repo trägt
dafür das Thema aivopod-pack.
aivopod.ablauf in package.json legt die Reihenfolge fest, in der ein Kurs die Challenges
bekommt, wenn das Paket als Ganzes zugewiesen wird (aivopod assign --pack javascript-grundlagen);
aivopod.titel ist die Überschrift des Moduls.
Die CI (.forgejo/workflows/pack.yml) baut und testet jedes Push mit dem CLI derselben Version; git config core.hooksPath .githooks lässt die Tests vor jedem Push laufen.
Vor dem Veröffentlichen einer Änderung die Version in package.json erhöhen: Eine veröffentlichte Version ist unveränderlich. Schritt-IDs dürfen sich innerhalb einer Version nie ändern, weil die Ergebnisse der Schüler:innen daran hängen.
Tests schreiben
import { describe, expectFail, expectPass, test } from "@aivopod/sdk/test";
import ch from "./index.ts";
test("Fehler: den Befehl mitmarkiert", () =>
expectFail(ch, {
stufe: "normal",
schritt: "finde-kommentare",
antwort: { bereiche: [[0, 47]] },
feedback: "zu-viel-markiert",
}));
Die Tests laufen mit demselben Prüfprogramm wie im Browser der Schüler:innen. Was hier besteht, besteht auch dort. Bereiche für markieren am besten aus dem Code berechnen (indexOf) statt abzuzählen.