All wrappers are thin value-objects — they hold a reference to the
underlying chart (and target line / note) and delegate to the
chart-utils functions. Nothing is copied; changes are made in place.
Entry points
ChartBuilder.from(chart) — wrap an existing chart
ChartBuilder.empty(bpm?, name?) — create and wrap a new chart
new LineBuilder(chart, lineIndex) — wrap a specific line
new NoteBuilder(chart, lineIndex, noteIndex) — wrap a specific note
Prototype-style chainable wrappers around RPE chart objects.
Instead of calling free functions like:
You can use the wrapper classes for a fluent, self-documenting API:
All wrappers are thin value-objects — they hold a reference to the underlying chart (and target line / note) and delegate to the chart-utils functions. Nothing is copied; changes are made in place.
Entry points
ChartBuilder.from(chart)— wrap an existing chartChartBuilder.empty(bpm?, name?)— create and wrap a new chartnew LineBuilder(chart, lineIndex)— wrap a specific linenew NoteBuilder(chart, lineIndex, noteIndex)— wrap a specific noteFull example