Frontend uudelleenrakennettu: Astro-komponentit, Wasm pääsäikeessä, ei Workeria

Vanha frontend siirretty temp/. Uusi rakenne:
- StatusBar.astro, Terminal.astro, Editor.astro, Guide.astro
- global.css erillinen
- Wasm pääsäikeessä (ei Worker — yksinkertainen, debugattava)
- Tab-completion, dropdown, projektikortti, Monaco, GUIDE.md
- Ei tokenisointia eikä koodilaboratoriota

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jaakko Vanhala
2026-04-09 20:17:39 +03:00
parent e3fdb91ac5
commit a8c4af0975
9617 changed files with 996171 additions and 5349 deletions

View File

@@ -0,0 +1,30 @@
/**
* Wrap `modifier` to be called for each child in the nodes later given to
* `modify`.
*
* @template {Parent} Kind
* Node type.
* @param {Modifier<Kind>} modifier
* Callback called for each `child` in `parent` later given to `modify`.
* @returns {Modify<Kind>}
* Modify children of `parent`.
*/
export function modifyChildren<Kind extends import('unist').Parent>(
modifier: Modifier<Kind>
): Modify<Kind>
export type Node = import('unist').Node
export type Parent = import('unist').Parent
/**
* Callback called for each `child` in `parent` later given to `modify`.
*/
export type Modifier<Kind extends import('unist').Parent> = (
child: Kind['children'][number],
index: number,
parent: Kind
) => number | undefined | void
/**
* Modify children of `parent`.
*/
export type Modify<Kind extends import('unist').Parent> = (
parent: Kind
) => undefined

View File

@@ -0,0 +1,68 @@
/**
* @typedef {import('unist').Node} Node
* @typedef {import('unist').Parent} Parent
*/
/**
* @template {Parent} Kind
* Node type.
* @callback Modifier
* Callback called for each `child` in `parent` later given to `modify`.
* @param {Kind['children'][number]} child
* Child of `parent`.
* @param {number} index
* Position of `child` in `parent`.
* @param {Kind} parent
* Parent node.
* @returns {number | undefined | void}
* Position to move to next (optional).
*/
/**
* @template {Parent} Kind
* Node type.
* @callback Modify
* Modify children of `parent`.
* @param {Kind} parent
* Parent node.
* @returns {undefined}
* Nothing.
*/
import {arrayIterate} from 'array-iterate'
/**
* Wrap `modifier` to be called for each child in the nodes later given to
* `modify`.
*
* @template {Parent} Kind
* Node type.
* @param {Modifier<Kind>} modifier
* Callback called for each `child` in `parent` later given to `modify`.
* @returns {Modify<Kind>}
* Modify children of `parent`.
*/
export function modifyChildren(modifier) {
return modify
/** @type {Modify<Kind>} */
function modify(parent) {
if (!parent || !parent.children) {
throw new Error('Missing children in `parent` for `modifier`')
}
arrayIterate(parent.children, iteratee, parent)
}
/**
* Pass the context as the third argument to `modifier`.
*
* @this {Kind}
* @param {Node} node
* @param {number} index
* @returns {number | undefined | void}
*/
function iteratee(node, index) {
return modifier(node, index, this)
}
}