From f02ff108dc384e4640e2f9f70edad71875170574 Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Wed, 3 Sep 2025 02:33:03 -0400
Subject: [PATCH 01/14] big improvement to UI
---
src/components/ConfigModal.tsx | 96 +++++++
src/components/MidiDevices.tsx | 32 +++
src/hooks/use_module.ts | 7 +
src/jamscribe_module.tsx | 115 +++++---
src/styles.css | 484 +++++++++++++++++++++++++++++++++
5 files changed, 693 insertions(+), 41 deletions(-)
create mode 100644 src/components/ConfigModal.tsx
create mode 100644 src/components/MidiDevices.tsx
create mode 100644 src/hooks/use_module.ts
create mode 100644 src/styles.css
diff --git a/src/components/ConfigModal.tsx b/src/components/ConfigModal.tsx
new file mode 100644
index 0000000..aa4a8e7
--- /dev/null
+++ b/src/components/ConfigModal.tsx
@@ -0,0 +1,96 @@
+import React, { useRef, useEffect } from 'react';
+import { RecordingConfig } from '../services/recorder';
+
+type ConfigModalProps = {
+ isOpen: boolean;
+ onClose: () => void;
+ recordingConfig: RecordingConfig;
+ draftInactivityTimeLimit: number;
+ onDraftInactivityTimeLimitChange: (newLimit: number) => void;
+ submitInactivityTimeLimitChange: () => void;
+};
+
+export function asModal
void }>(
+ Component: React.ComponentType
+) {
+ return (props: P) => {
+ const dialogRef = useRef(null);
+
+ useEffect(() => {
+ const dialog = dialogRef.current;
+ if (!dialog) return;
+
+ if (props.isOpen) {
+ dialog.showModal();
+ } else {
+ dialog.close();
+ }
+ }, [props.isOpen]);
+
+ const handleClose = () => {
+ props.onClose();
+ };
+
+ return (
+
+ );
+ };
+}
+
+function ConfigModalBase({
+ onClose,
+ recordingConfig,
+ draftInactivityTimeLimit,
+ onDraftInactivityTimeLimitChange,
+ submitInactivityTimeLimitChange
+}: ConfigModalProps) {
+ return (
+
+
+
⚙️ Recording Settings
+
+
+
+
+
onDraftInactivityTimeLimitChange(parseInt(e.target.value))}
+ min={1}
+ max={300}
+ />
+
+ Recording will automatically stop after this many seconds of inactivity
+
+
+
+
+
+
+
+
+ );
+}
+
+export const ConfigModal = asModal(ConfigModalBase);
\ No newline at end of file
diff --git a/src/components/MidiDevices.tsx b/src/components/MidiDevices.tsx
new file mode 100644
index 0000000..df3d6e7
--- /dev/null
+++ b/src/components/MidiDevices.tsx
@@ -0,0 +1,32 @@
+import React from 'react';
+import '@jamtools/core/modules/io/io_module';
+import {useModule} from '../hooks/use_module';
+
+export const MidiDevices: React.FC = () => {
+ const ioModule = useModule('io');
+ const midiDevices = ioModule.midiDeviceState.useState().midiInputDevices;
+
+ return (
+
+
+
🎹 MIDI Input Devices
+
+ {midiDevices && midiDevices.length > 0 ? (
+
+ {midiDevices.map((device, index) => (
+ -
+ 🎹
+ {device}
+
+ ))}
+
+ ) : (
+
+
🎹
+
No MIDI input devices connected
+
Connect a MIDI device to start recording
+
+ )}
+
+ );
+};
diff --git a/src/hooks/use_module.ts b/src/hooks/use_module.ts
new file mode 100644
index 0000000..6c51d85
--- /dev/null
+++ b/src/hooks/use_module.ts
@@ -0,0 +1,7 @@
+import {useSpringboardEngine} from 'springboard/engine/engine';
+import {AllModules} from 'springboard/module_registry/module_registry';
+
+export const useModule = (moduleId: ModuleId): AllModules[ModuleId] => {
+ const engine = useSpringboardEngine();
+ return engine.moduleRegistry.getModule(moduleId);
+};
diff --git a/src/jamscribe_module.tsx b/src/jamscribe_module.tsx
index 23e3979..4c356c2 100644
--- a/src/jamscribe_module.tsx
+++ b/src/jamscribe_module.tsx
@@ -1,5 +1,5 @@
// TODO: useState isn't working for some reason
-import React from 'react';
+import React, {useState} from 'react';
import springboard from 'springboard';
@@ -25,6 +25,9 @@ fileSaver = {
// @platform end
import {MidiRecorderImpl} from './services/recorder';
+import {ConfigModal} from './components/ConfigModal';
+import {MidiDevices} from './components/MidiDevices';
+import './styles.css';
type DraftedFile = {
name: string;
@@ -122,51 +125,81 @@ const Main = ({
onDraftInactivityTimeLimitChange,
submitInactivityTimeLimitChange
}: MainProps) => {
+ const [isConfigModalOpen, setIsConfigModalOpen] = useState(false);
+
return (
- <>
-
-
- Config
-
-
- {JSON.stringify(recordingConfig, null, 2)}
-
- onDraftInactivityTimeLimitChange(parseInt(e.target.value))}
- />
+
+
+ 🎵 JamScribe
-
-
- Files
-
- {availableFiles.map(file => (
- - {
-
- }}
- >
- {file.name}
-
- ))}
-
-
-
-
- {logs.map((msg, i) => (
- -
- {msg}
-
- ))}
-
+
+
+
setIsConfigModalOpen(false)}
+ recordingConfig={recordingConfig}
+ draftInactivityTimeLimit={draftInactivityTimeLimit}
+ onDraftInactivityTimeLimitChange={onDraftInactivityTimeLimitChange}
+ submitInactivityTimeLimitChange={submitInactivityTimeLimitChange}
+ />
+
+
+
+
+
+
+
+
📁 Recorded Files
+
+ {availableFiles.length > 0 ? (
+
+ {availableFiles.map(file => (
+
{
+ // Handle file click
+ }}
+ >
+
🎼
+
{file.name}
+
+ ))}
+
+ ) : (
+
+
📭
+
No recordings yet. Start playing to record MIDI!
+
+ )}
+
+
+
+
+
+
📋 Activity Log
+
+
+ {logs.length > 0 ? (
+ logs.map((msg, i) => (
+ -
+ {msg}
+
+ ))
+ ) : (
+ -
+ Waiting for activity...
+
+ )}
+
+
- >
+
);
}
diff --git a/src/styles.css b/src/styles.css
new file mode 100644
index 0000000..bca1eed
--- /dev/null
+++ b/src/styles.css
@@ -0,0 +1,484 @@
+/* Root variables for consistent theming */
+:root {
+ --primary-color: #5e72e4;
+ --primary-hover: #4c63d2;
+ --secondary-color: #6c757d;
+ --success-color: #2dce89;
+ --danger-color: #f5365c;
+ --warning-color: #fb6340;
+ --info-color: #11cdef;
+ --dark: #32325d;
+ --darker: #212529;
+ --light: #f4f5f7;
+ --lighter: #fafbfc;
+ --text-primary: #32325d;
+ --text-secondary: #8898aa;
+ --border-color: #e9ecef;
+ --shadow-sm: 0 1px 3px rgba(50, 50, 93, 0.15), 0 1px 0 rgba(0, 0, 0, 0.02);
+ --shadow-md: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08);
+ --shadow-lg: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);
+ --transition: all 0.2s ease;
+ --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
+}
+
+/* Global styles */
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: var(--font-family);
+ color: var(--text-primary);
+ background-color: var(--lighter);
+ margin: 0;
+ padding: 0;
+}
+
+/* App container */
+.app-container {
+ min-height: 100vh;
+ padding: 2rem;
+ max-width: 1200px;
+ margin: 0 auto;
+}
+
+/* Header */
+.app-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 2rem;
+ padding-bottom: 1.5rem;
+ border-bottom: 1px solid var(--border-color);
+}
+
+.app-title {
+ font-size: 2rem;
+ font-weight: 600;
+ color: var(--text-primary);
+ margin: 0;
+}
+
+/* Button styles */
+button {
+ font-family: var(--font-family);
+ font-size: 0.875rem;
+ font-weight: 500;
+ padding: 0.625rem 1.25rem;
+ border-radius: 0.375rem;
+ border: none;
+ cursor: pointer;
+ transition: var(--transition);
+ outline: none;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.btn-primary {
+ background-color: var(--primary-color);
+ color: white;
+}
+
+.btn-primary:hover {
+ background-color: var(--primary-hover);
+ transform: translateY(-1px);
+ box-shadow: var(--shadow-md);
+}
+
+.btn-secondary {
+ background-color: var(--secondary-color);
+ color: white;
+}
+
+.btn-secondary:hover {
+ background-color: #5a6268;
+ transform: translateY(-1px);
+}
+
+.btn-outline {
+ background-color: transparent;
+ color: var(--primary-color);
+ border: 1px solid var(--primary-color);
+}
+
+.btn-outline:hover {
+ background-color: var(--primary-color);
+ color: white;
+}
+
+/* Card component */
+.card {
+ background-color: white;
+ border-radius: 0.5rem;
+ border: 1px solid var(--border-color);
+ padding: 1.5rem;
+ margin-bottom: 1.5rem;
+ box-shadow: var(--shadow-sm);
+ transition: var(--transition);
+}
+
+.card:hover {
+ box-shadow: var(--shadow-md);
+}
+
+.card-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 1rem;
+}
+
+.card-title {
+ font-size: 1.125rem;
+ font-weight: 600;
+ color: var(--text-primary);
+ margin: 0;
+}
+
+/* Grid layout */
+.main-grid {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 1.5rem;
+}
+
+@media (min-width: 768px) {
+ .main-grid {
+ grid-template-columns: 2fr 1fr;
+ }
+}
+
+/* MIDI devices section */
+.midi-devices-card {
+ background-color: white;
+}
+
+.device-list {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.device-item {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+ padding: 0.875rem 1rem;
+ background-color: var(--light);
+ border-radius: 0.375rem;
+ margin-bottom: 0.5rem;
+ border: 1px solid transparent;
+ transition: var(--transition);
+}
+
+.device-item:hover {
+ background-color: var(--lighter);
+ border-color: var(--primary-color);
+}
+
+.device-icon {
+ font-size: 1.5rem;
+}
+
+.device-name {
+ font-weight: 500;
+ color: var(--text-primary);
+}
+
+.empty-state {
+ text-align: center;
+ padding: 2rem;
+ color: var(--text-secondary);
+}
+
+.empty-state-icon {
+ font-size: 3rem;
+ margin-bottom: 0.5rem;
+ opacity: 0.5;
+}
+
+/* Files section */
+.files-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
+ gap: 1rem;
+}
+
+.file-item {
+ padding: 1rem;
+ background-color: var(--light);
+ border-radius: 0.375rem;
+ border: 1px solid transparent;
+ cursor: pointer;
+ transition: var(--transition);
+ text-align: center;
+}
+
+.file-item:hover {
+ background-color: var(--lighter);
+ border-color: var(--primary-color);
+ transform: translateY(-2px);
+}
+
+.file-icon {
+ font-size: 2rem;
+ margin-bottom: 0.5rem;
+ color: var(--primary-color);
+}
+
+.file-name {
+ font-size: 0.875rem;
+ color: var(--text-primary);
+ word-break: break-word;
+}
+
+/* Logs section */
+.logs-card {
+ max-height: 400px;
+ overflow-y: auto;
+}
+
+.log-list {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.log-item {
+ padding: 0.5rem 0.75rem;
+ border-bottom: 1px solid var(--border-color);
+ font-size: 0.875rem;
+ color: var(--text-secondary);
+ font-family: 'Monaco', 'Consolas', monospace;
+}
+
+.log-item:last-child {
+ border-bottom: none;
+}
+
+/* Modal/Dialog styles */
+dialog {
+ padding: 0;
+ border: none;
+ border-radius: 0.5rem;
+ box-shadow: var(--shadow-lg);
+ max-width: 500px;
+ width: 90%;
+}
+
+dialog::backdrop {
+ background-color: rgba(0, 0, 0, 0.5);
+ backdrop-filter: blur(4px);
+}
+
+.modal-header {
+ padding: 1.5rem;
+ border-bottom: 1px solid var(--border-color);
+}
+
+.modal-title {
+ font-size: 1.25rem;
+ font-weight: 600;
+ color: var(--text-primary);
+ margin: 0;
+}
+
+.modal-body {
+ padding: 1.5rem;
+}
+
+.modal-footer {
+ padding: 1rem 1.5rem;
+ background-color: var(--light);
+ border-top: 1px solid var(--border-color);
+ display: flex;
+ justify-content: flex-end;
+ gap: 0.5rem;
+}
+
+/* Form elements */
+.form-group {
+ margin-bottom: 1.5rem;
+}
+
+.form-label {
+ display: block;
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: var(--text-primary);
+ margin-bottom: 0.5rem;
+}
+
+.form-input {
+ width: 100%;
+ padding: 0.625rem 0.875rem;
+ font-size: 0.875rem;
+ border: 1px solid var(--border-color);
+ border-radius: 0.375rem;
+ transition: var(--transition);
+ font-family: var(--font-family);
+}
+
+.form-input:focus {
+ outline: none;
+ border-color: var(--primary-color);
+ box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1);
+}
+
+input[type="number"] {
+ width: auto;
+ min-width: 100px;
+}
+
+/* Utility classes */
+.text-muted {
+ color: var(--text-secondary);
+}
+
+.mb-0 {
+ margin-bottom: 0;
+}
+
+/* Animations */
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ transform: translateY(10px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.fade-in {
+ animation: fadeIn 0.3s ease;
+}
+
+/* Scrollbar styling */
+::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+}
+
+::-webkit-scrollbar-track {
+ background: var(--light);
+}
+
+::-webkit-scrollbar-thumb {
+ background: var(--border-color);
+ border-radius: 4px;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background: var(--text-secondary);
+}
+
+/* Recording status indicator */
+.recording-status {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.5rem 1rem;
+ background-color: var(--lighter);
+ border-radius: 9999px;
+ font-size: 0.875rem;
+ font-weight: 500;
+}
+
+.recording-status.active {
+ background-color: #fef3f2;
+ color: var(--danger-color);
+}
+
+.recording-indicator {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background-color: var(--text-secondary);
+}
+
+.recording-status.active .recording-indicator {
+ background-color: var(--danger-color);
+ animation: pulse 1.5s ease-in-out infinite;
+}
+
+@keyframes pulse {
+ 0%, 100% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.3;
+ }
+}
+
+/* Badge styles */
+.badge {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.25rem 0.75rem;
+ font-size: 0.75rem;
+ font-weight: 600;
+ border-radius: 9999px;
+ background-color: var(--light);
+ color: var(--text-secondary);
+}
+
+.badge-success {
+ background-color: #d1fae5;
+ color: var(--success-color);
+}
+
+.badge-primary {
+ background-color: #e0e7ff;
+ color: var(--primary-color);
+}
+
+/* File item hover effects */
+.file-item {
+ position: relative;
+ overflow: hidden;
+}
+
+.file-item::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(135deg, transparent, rgba(94, 114, 228, 0.1));
+ opacity: 0;
+ transition: opacity 0.3s ease;
+}
+
+.file-item:hover::before {
+ opacity: 1;
+}
+
+/* Device status indicators */
+.device-status {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background-color: var(--success-color);
+ flex-shrink: 0;
+}
+
+/* Loading spinner */
+.spinner {
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ border: 2px solid var(--light);
+ border-top-color: var(--primary-color);
+ border-radius: 50%;
+ animation: spin 0.8s linear infinite;
+}
+
+@keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
From eea4caba980ba3b55ff47844f3ab1816b7abb99b Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Wed, 3 Sep 2025 02:33:17 -0400
Subject: [PATCH 02/14] upgrade springboard to 0.16.0
---
package.json | 16 +-
pnpm-lock.yaml | 501 +++++++++++++++++++++----------------------------
2 files changed, 218 insertions(+), 299 deletions(-)
diff --git a/package.json b/package.json
index c290144..fdd7a39 100644
--- a/package.json
+++ b/package.json
@@ -11,17 +11,19 @@
"license": "ISC",
"description": "",
"dependencies": {
- "@jamtools/core": "0.15.0-rc20",
- "@springboardjs/data-storage": "0.15.0-rc20",
- "@springboardjs/platforms-browser": "0.15.0-rc20",
- "@springboardjs/platforms-node": "0.15.0-rc20",
+ "@jamtools/core": "0.16.0",
+ "@springboardjs/data-storage": "0.16.0",
+ "@springboardjs/platforms-browser": "0.16.0",
+ "@springboardjs/platforms-node": "0.16.0",
"hono": "4.7.6",
+ "mic": "^2.1.2",
"react": "^19.1.0",
- "springboard": "0.15.0-rc20",
- "springboard-cli": "0.15.0-rc20",
- "springboard-server": "0.15.0-rc20"
+ "springboard": "0.16.0",
+ "springboard-cli": "0.16.0",
+ "springboard-server": "0.16.0"
},
"devDependencies": {
+ "@types/node": "^24.0.14",
"@types/react": "^19.1.2"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e4f4b53..f937d6a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,33 +9,39 @@ importers:
.:
dependencies:
'@jamtools/core':
- specifier: 0.15.0-rc20
- version: 0.15.0-rc20(@tonejs/midi@2.0.28)(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.16.0
+ version: 0.16.0(@springboardjs/platforms-browser@0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@springboardjs/data-storage':
- specifier: 0.15.0-rc20
- version: 0.15.0-rc20(kysely@0.28.1)
+ specifier: 0.16.0
+ version: 0.16.0(kysely@0.28.1)
'@springboardjs/platforms-browser':
- specifier: 0.15.0-rc20
- version: 0.15.0-rc20(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.16.0
+ version: 0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@springboardjs/platforms-node':
- specifier: 0.15.0-rc20
- version: 0.15.0-rc20(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ specifier: 0.16.0
+ version: 0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
hono:
specifier: 4.7.6
version: 4.7.6
+ mic:
+ specifier: ^2.1.2
+ version: 2.1.2
react:
specifier: ^19.1.0
version: 19.1.0
springboard:
- specifier: 0.15.0-rc20
- version: 0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ specifier: 0.16.0
+ version: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
springboard-cli:
- specifier: 0.15.0-rc20
- version: 0.15.0-rc20(@springboardjs/platforms-browser@0.15.0-rc20(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@springboardjs/platforms-node@0.15.0-rc20(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(springboard-server@0.15.0-rc20(@springboardjs/data-storage@0.15.0-rc20(kysely@0.28.1))(@trpc/server@10.45.2)(hono@4.7.6)(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.16.0
+ version: 0.16.0(@springboardjs/platforms-browser@0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(springboard-server@0.16.0(@springboardjs/data-storage@0.16.0(kysely@0.28.1))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
springboard-server:
- specifier: 0.15.0-rc20
- version: 0.15.0-rc20(@springboardjs/data-storage@0.15.0-rc20(kysely@0.28.1))(@trpc/server@10.45.2)(hono@4.7.6)(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.16.0
+ version: 0.16.0(@springboardjs/data-storage@0.16.0(kysely@0.28.1))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
devDependencies:
+ '@types/node':
+ specifier: ^24.0.14
+ version: 24.0.14
'@types/react':
specifier: ^19.1.2
version: 19.1.2
@@ -46,146 +52,158 @@ packages:
resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
engines: {node: '>=6.9.0'}
- '@esbuild/aix-ppc64@0.23.1':
- resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==}
+ '@esbuild/aix-ppc64@0.25.9':
+ resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.23.1':
- resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==}
+ '@esbuild/android-arm64@0.25.9':
+ resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.23.1':
- resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==}
+ '@esbuild/android-arm@0.25.9':
+ resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.23.1':
- resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==}
+ '@esbuild/android-x64@0.25.9':
+ resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.23.1':
- resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==}
+ '@esbuild/darwin-arm64@0.25.9':
+ resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.23.1':
- resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==}
+ '@esbuild/darwin-x64@0.25.9':
+ resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.23.1':
- resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==}
+ '@esbuild/freebsd-arm64@0.25.9':
+ resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.23.1':
- resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==}
+ '@esbuild/freebsd-x64@0.25.9':
+ resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.23.1':
- resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==}
+ '@esbuild/linux-arm64@0.25.9':
+ resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.23.1':
- resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==}
+ '@esbuild/linux-arm@0.25.9':
+ resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.23.1':
- resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==}
+ '@esbuild/linux-ia32@0.25.9':
+ resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.23.1':
- resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==}
+ '@esbuild/linux-loong64@0.25.9':
+ resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.23.1':
- resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==}
+ '@esbuild/linux-mips64el@0.25.9':
+ resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.23.1':
- resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==}
+ '@esbuild/linux-ppc64@0.25.9':
+ resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.23.1':
- resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==}
+ '@esbuild/linux-riscv64@0.25.9':
+ resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.23.1':
- resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==}
+ '@esbuild/linux-s390x@0.25.9':
+ resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.23.1':
- resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==}
+ '@esbuild/linux-x64@0.25.9':
+ resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-x64@0.23.1':
- resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==}
+ '@esbuild/netbsd-arm64@0.25.9':
+ resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.25.9':
+ resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.23.1':
- resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==}
+ '@esbuild/openbsd-arm64@0.25.9':
+ resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.23.1':
- resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==}
+ '@esbuild/openbsd-x64@0.25.9':
+ resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/sunos-x64@0.23.1':
- resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==}
+ '@esbuild/openharmony-arm64@0.25.9':
+ resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.25.9':
+ resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.23.1':
- resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==}
+ '@esbuild/win32-arm64@0.25.9':
+ resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.23.1':
- resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==}
+ '@esbuild/win32-ia32@0.25.9':
+ resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.23.1':
- resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==}
+ '@esbuild/win32-x64@0.25.9':
+ resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -203,18 +221,16 @@ packages:
'@hono/node-server': ^1.11.1
hono: ^4.6.0
- '@hono/trpc-server@0.3.4':
- resolution: {integrity: sha512-xFOPjUPnII70FgicDzOJy1ufIoBTu8eF578zGiDOrYOrYN8CJe140s9buzuPkX+SwJRYK8LjEBHywqZtxdm8aA==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- '@trpc/server': ^10.10.0 || >11.0.0-rc
- hono: '>=4.*'
-
- '@jamtools/core@0.15.0-rc20':
- resolution: {integrity: sha512-ZfpSYOnCQnwS4AUUljF9dMFmcaKArGwNbpGYitkfZ5tUIJdMMNhVxC47YSpA0MFftl/Kk2cZGOabFHPYw/GKIQ==}
+ '@jamtools/core@0.16.0':
+ resolution: {integrity: sha512-LfQ7EcYly7m1B2UUwoLp/xkhWiJ/ID1KXw7XV/8HYEuatJ7SvbFGAy7MzOhzJPzWi9HZpyj4RcGID6akz9/nZQ==}
peerDependencies:
+ '@springboardjs/platforms-browser': 0.16.0
'@tonejs/midi': ^2.0.0
- springboard: 0.15.0-rc20
+ springboard: 0.16.0
+ svelte: '>= 5'
+ peerDependenciesMeta:
+ svelte:
+ optional: true
'@julusian/midi@3.6.1':
resolution: {integrity: sha512-sC6tTMAMZsHOQILAv/R0On5tKKhzBQUjdyYWzh9l0UQeNry12CFIyRWK1Mep5xCHWCTUB0w4gxngpciA5PgN/Q==}
@@ -224,34 +240,29 @@ packages:
resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
engines: {node: '>=14.0.0'}
- '@springboardjs/data-storage@0.15.0-rc20':
- resolution: {integrity: sha512-ff7kd/NgieXQj/15644NTVvWz904oNXIpJ7BSrjlBnmsRGDRHrt9YrCB3v03Y1NXCn/3GsM4qiMO13MEDCcq1Q==}
+ '@springboardjs/data-storage@0.16.0':
+ resolution: {integrity: sha512-g1KLUtq6kw5BAfuxFjhAzIVR9eLQXwzMNLCRgPU/9KW5NHfL8DUVSUha7Nb7tt+1jPwtH4AIfraDIrSbrbSsBQ==}
peerDependencies:
kysely: '>= 0.24.0'
- '@springboardjs/platforms-browser@0.15.0-rc20':
- resolution: {integrity: sha512-6EcpEeEcgTYCbvXmiUZTvm/gL7hq23js9bA1tlWi9RmHnH5kIQSUACSuJwF87Yu4o+amOSMrD4yXZBg73l2e9g==}
+ '@springboardjs/platforms-browser@0.16.0':
+ resolution: {integrity: sha512-1XgKgdOtUX3skK6cOy30B2dG7XBDH+yBHmEhIXXc2VJ7L7f9CjuJvTatwApNdV9N1tFe3AQYX5VOpGRmVuhQZQ==}
peerDependencies:
react-router-dom: ^6
- springboard: 0.15.0-rc20
+ springboard: 0.16.0
- '@springboardjs/platforms-node@0.15.0-rc20':
- resolution: {integrity: sha512-gEeC8HIWHPTH48nMVXaLJDXi1cWPc9o5ZDEA+v3dsob2/5YPQ4+JLXoIDPWKO7hqKDlbeSiiUC3LwJjHdq514A==}
+ '@springboardjs/platforms-node@0.16.0':
+ resolution: {integrity: sha512-MZvBU0ugpW+NeR5dH93PkGKyDuJd8G2LEg4ysFug6Tgt0HKJ9DqV0AoYy2fKIwsJ+v46BhkO+YlXQlTg8criiA==}
peerDependencies:
isomorphic-ws: ^4.0.1
- springboard: 0.15.0-rc20
+ springboard: 0.16.0
ws: ^8.18.0
'@tonejs/midi@2.0.28':
resolution: {integrity: sha512-RII6YpInPsOZ5t3Si/20QKpNqB1lZ2OCFJSOzJxz38YdY/3zqDr3uaml4JuCWkdixuPqP1/TBnXzhQ39csyoVg==}
- '@trpc/client@10.45.2':
- resolution: {integrity: sha512-ykALM5kYWTLn1zYuUOZ2cPWlVfrXhc18HzBDyRhoPYN0jey4iQHEFSEowfnhg1RvYnrAVjNBgHNeSAXjrDbGwg==}
- peerDependencies:
- '@trpc/server': 10.45.2
-
- '@trpc/server@10.45.2':
- resolution: {integrity: sha512-wOrSThNNE4HUnuhJG6PfDRp4L2009KDVxsd+2VYH8ro6o/7/jwYZ8Uu5j+VaW+mOmc8EHerHzGcdbGNQSAUPgg==}
+ '@types/node@24.0.14':
+ resolution: {integrity: sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==}
'@types/react@19.1.2':
resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==}
@@ -349,8 +360,8 @@ packages:
end-of-stream@1.4.4:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
- esbuild@0.23.1:
- resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==}
+ esbuild@0.25.9:
+ resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==}
engines: {node: '>=18'}
hasBin: true
@@ -421,6 +432,9 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ mic@2.1.2:
+ resolution: {integrity: sha512-rpl4tgdXX24sAzYwjRc5OZfGNAuhUIIjdd0cw8+Ubq7rp3iGhi40AdqcwurDWhEZADk60tPOxb3E2MpoeLeyxw==}
+
midi-file@1.2.4:
resolution: {integrity: sha512-B5SnBC6i2bwJIXTY9MElIydJwAmnKx+r5eJ1jknTLetzLflEl0GWveuBB6ACrQpecSRkOB6fhTx1PwXk2BVxnA==}
@@ -456,61 +470,11 @@ packages:
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- pg-cloudflare@1.1.1:
- resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==}
-
- pg-connection-string@2.7.0:
- resolution: {integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==}
-
- pg-int8@1.0.1:
- resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
- engines: {node: '>=4.0.0'}
-
- pg-pool@3.8.0:
- resolution: {integrity: sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw==}
- peerDependencies:
- pg: '>=8.0'
-
- pg-protocol@1.8.0:
- resolution: {integrity: sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==}
-
- pg-types@2.2.0:
- resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
- engines: {node: '>=4'}
-
- pg@8.14.1:
- resolution: {integrity: sha512-0TdbqfjwIun9Fm/r89oB7RFQ0bLgduAhiIqIXOsyKoiC/L54DbuAAzIEN/9Op0f1Po9X7iCPXGoa/Ah+2aI8Xw==}
- engines: {node: '>= 8.0.0'}
- peerDependencies:
- pg-native: '>=3.0.1'
- peerDependenciesMeta:
- pg-native:
- optional: true
-
- pgpass@1.0.5:
- resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==}
-
pkg-prebuilds@1.0.0:
resolution: {integrity: sha512-D9wlkXZCmjxj2kBHTw3fGSyjoahr33breGBoJcoezpi7ouYS59DJVOHMZ+dgqacSrZiJo4qtkXxLQTE+BqXJmQ==}
engines: {node: '>= 14.15.0'}
hasBin: true
- postgres-array@2.0.0:
- resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
- engines: {node: '>=4'}
-
- postgres-bytea@1.0.0:
- resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
- engines: {node: '>=0.10.0'}
-
- postgres-date@1.0.7:
- resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
- engines: {node: '>=0.10.0'}
-
- postgres-interval@1.2.0:
- resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
- engines: {node: '>=0.10.0'}
-
prebuild-install@7.1.3:
resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
engines: {node: '>=10'}
@@ -589,30 +553,27 @@ packages:
soundfont-player@0.12.0:
resolution: {integrity: sha512-8BJIsAt7h1PK3thSZDgF6zecgGhYkK74JnZO8WRZi3h34qG6H/DYlnv7cpRvL7Q9C8N6qld4Qwj7nJsX1gYjEA==}
- split2@4.2.0:
- resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
- engines: {node: '>= 10.x'}
-
- springboard-cli@0.15.0-rc20:
- resolution: {integrity: sha512-yfO+YVR8RuMfSOWfawnRVq4ep+j+DpGf53Ul+cJx8DlgN0GqcAdMAMJalALiFiTExN2SAYHCUK/F+WnYNnhtJQ==}
+ springboard-cli@0.16.0:
+ resolution: {integrity: sha512-WggFT3NWiReHlDJ/WbjCrXgneCPRqakma960F2UtwxKMwxqahSOHajKU2rTmMMR389FJ5X0IHzJZfqT/kl3S5Q==}
hasBin: true
peerDependencies:
- '@springboardjs/platforms-browser': 0.15.0-rc20
- '@springboardjs/platforms-node': 0.15.0-rc20
- springboard: 0.15.0-rc20
- springboard-server: 0.15.0-rc20
+ '@springboardjs/platforms-browser': 0.16.0
+ '@springboardjs/platforms-node': 0.16.0
+ springboard: 0.16.0
+ springboard-server: 0.16.0
- springboard-server@0.15.0-rc20:
- resolution: {integrity: sha512-sEbT8bXwY5fF9/DmWBU6l+zrbwOSNPa+Mr+cdjHfbkgc1Tij/Zxl7O9f6o00HIQNA+kBrQrAuxy5G/LzHv4rGg==}
+ springboard-server@0.16.0:
+ resolution: {integrity: sha512-E2XkkZqsuD9Eih36LNRzjSQt2+q/xYR3G5ZHUf/XgjvfhOU2yIb6NoN/IkC2N7rD+B0LfssVpM04K5uCX0JIiQ==}
peerDependencies:
- '@springboardjs/data-storage': 0.15.0-rc20
+ '@springboardjs/data-storage': 0.16.0
+ '@springboardjs/platforms-node': 0.16.0
hono: ^4.6.7
- springboard: 0.15.0-rc20
+ springboard: 0.16.0
- springboard@0.15.0-rc20:
- resolution: {integrity: sha512-Hy1wu2Mk8b+3hyRPppy/hiwRF9HHQ7qeOjW2l6MS7AKrD7Dt2HygkgaH5sXZySE8N9cJQodj1WkBPpvxMuI/Cw==}
+ springboard@0.16.0:
+ resolution: {integrity: sha512-W+3Pkum1dw/RCh+q5LmhPFvUGFY9mfnFlU43JiJ+AX9IFuKG5iPG0oH8dYh0XJVZ1BxTmNnAr2r0m5a8qJeqUA==}
peerDependencies:
- '@trpc/client': ^10.45.2
+ immer: ^10.1.1
json-rpc-2.0: ^1.7.0
react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -663,6 +624,9 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ undici-types@7.8.0:
+ resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}
+
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -689,10 +653,6 @@ packages:
utf-8-validate:
optional: true
- xtend@4.0.2:
- resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
- engines: {node: '>=0.4'}
-
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -714,76 +674,82 @@ snapshots:
dependencies:
regenerator-runtime: 0.14.1
- '@esbuild/aix-ppc64@0.23.1':
+ '@esbuild/aix-ppc64@0.25.9':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.9':
+ optional: true
+
+ '@esbuild/android-arm@0.25.9':
optional: true
- '@esbuild/android-arm64@0.23.1':
+ '@esbuild/android-x64@0.25.9':
optional: true
- '@esbuild/android-arm@0.23.1':
+ '@esbuild/darwin-arm64@0.25.9':
optional: true
- '@esbuild/android-x64@0.23.1':
+ '@esbuild/darwin-x64@0.25.9':
optional: true
- '@esbuild/darwin-arm64@0.23.1':
+ '@esbuild/freebsd-arm64@0.25.9':
optional: true
- '@esbuild/darwin-x64@0.23.1':
+ '@esbuild/freebsd-x64@0.25.9':
optional: true
- '@esbuild/freebsd-arm64@0.23.1':
+ '@esbuild/linux-arm64@0.25.9':
optional: true
- '@esbuild/freebsd-x64@0.23.1':
+ '@esbuild/linux-arm@0.25.9':
optional: true
- '@esbuild/linux-arm64@0.23.1':
+ '@esbuild/linux-ia32@0.25.9':
optional: true
- '@esbuild/linux-arm@0.23.1':
+ '@esbuild/linux-loong64@0.25.9':
optional: true
- '@esbuild/linux-ia32@0.23.1':
+ '@esbuild/linux-mips64el@0.25.9':
optional: true
- '@esbuild/linux-loong64@0.23.1':
+ '@esbuild/linux-ppc64@0.25.9':
optional: true
- '@esbuild/linux-mips64el@0.23.1':
+ '@esbuild/linux-riscv64@0.25.9':
optional: true
- '@esbuild/linux-ppc64@0.23.1':
+ '@esbuild/linux-s390x@0.25.9':
optional: true
- '@esbuild/linux-riscv64@0.23.1':
+ '@esbuild/linux-x64@0.25.9':
optional: true
- '@esbuild/linux-s390x@0.23.1':
+ '@esbuild/netbsd-arm64@0.25.9':
optional: true
- '@esbuild/linux-x64@0.23.1':
+ '@esbuild/netbsd-x64@0.25.9':
optional: true
- '@esbuild/netbsd-x64@0.23.1':
+ '@esbuild/openbsd-arm64@0.25.9':
optional: true
- '@esbuild/openbsd-arm64@0.23.1':
+ '@esbuild/openbsd-x64@0.25.9':
optional: true
- '@esbuild/openbsd-x64@0.23.1':
+ '@esbuild/openharmony-arm64@0.25.9':
optional: true
- '@esbuild/sunos-x64@0.23.1':
+ '@esbuild/sunos-x64@0.25.9':
optional: true
- '@esbuild/win32-arm64@0.23.1':
+ '@esbuild/win32-arm64@0.25.9':
optional: true
- '@esbuild/win32-ia32@0.23.1':
+ '@esbuild/win32-ia32@0.25.9':
optional: true
- '@esbuild/win32-x64@0.23.1':
+ '@esbuild/win32-x64@0.25.9':
optional: true
'@hono/node-server@1.14.1(hono@4.7.6)':
@@ -799,18 +765,15 @@ snapshots:
- bufferutil
- utf-8-validate
- '@hono/trpc-server@0.3.4(@trpc/server@10.45.2)(hono@4.7.6)':
- dependencies:
- '@trpc/server': 10.45.2
- hono: 4.7.6
-
- '@jamtools/core@0.15.0-rc20(@tonejs/midi@2.0.28)(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
+ '@jamtools/core@0.16.0(@springboardjs/platforms-browser@0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
dependencies:
+ '@springboardjs/platforms-browser': 0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@tonejs/midi': 2.0.28
easymidi: 3.1.0
+ immer: 10.1.1
midi-file: 1.2.4
soundfont-player: 0.12.0
- springboard: 0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
webmidi: 3.1.12
'@julusian/midi@3.6.1':
@@ -820,26 +783,25 @@ snapshots:
'@remix-run/router@1.23.0': {}
- '@springboardjs/data-storage@0.15.0-rc20(kysely@0.28.1)':
+ '@springboardjs/data-storage@0.16.0(kysely@0.28.1)':
dependencies:
- '@trpc/client': 10.45.2(@trpc/server@10.45.2)
- '@trpc/server': 10.45.2
better-sqlite3: 11.9.1
kysely: 0.28.1
- pg: 8.14.1
zod: 3.24.3
- transitivePeerDependencies:
- - pg-native
- '@springboardjs/platforms-browser@0.15.0-rc20(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
+ '@springboardjs/platforms-browser@0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
dependencies:
+ json-rpc-2.0: 1.7.0
react-router-dom: 6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- springboard: 0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ reconnecting-websocket: 4.4.0
+ springboard: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
- '@springboardjs/platforms-node@0.15.0-rc20(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)':
+ '@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)':
dependencies:
isomorphic-ws: 4.0.1(ws@8.18.1)
- springboard: 0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ json-rpc-2.0: 1.7.0
+ reconnecting-websocket: 4.4.0
+ springboard: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
ws: 8.18.1
'@tonejs/midi@2.0.28':
@@ -847,11 +809,9 @@ snapshots:
array-flatten: 3.0.0
midi-file: 1.2.4
- '@trpc/client@10.45.2(@trpc/server@10.45.2)':
+ '@types/node@24.0.14':
dependencies:
- '@trpc/server': 10.45.2
-
- '@trpc/server@10.45.2': {}
+ undici-types: 7.8.0
'@types/react@19.1.2':
dependencies:
@@ -951,32 +911,34 @@ snapshots:
dependencies:
once: 1.4.0
- esbuild@0.23.1:
+ esbuild@0.25.9:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.23.1
- '@esbuild/android-arm': 0.23.1
- '@esbuild/android-arm64': 0.23.1
- '@esbuild/android-x64': 0.23.1
- '@esbuild/darwin-arm64': 0.23.1
- '@esbuild/darwin-x64': 0.23.1
- '@esbuild/freebsd-arm64': 0.23.1
- '@esbuild/freebsd-x64': 0.23.1
- '@esbuild/linux-arm': 0.23.1
- '@esbuild/linux-arm64': 0.23.1
- '@esbuild/linux-ia32': 0.23.1
- '@esbuild/linux-loong64': 0.23.1
- '@esbuild/linux-mips64el': 0.23.1
- '@esbuild/linux-ppc64': 0.23.1
- '@esbuild/linux-riscv64': 0.23.1
- '@esbuild/linux-s390x': 0.23.1
- '@esbuild/linux-x64': 0.23.1
- '@esbuild/netbsd-x64': 0.23.1
- '@esbuild/openbsd-arm64': 0.23.1
- '@esbuild/openbsd-x64': 0.23.1
- '@esbuild/sunos-x64': 0.23.1
- '@esbuild/win32-arm64': 0.23.1
- '@esbuild/win32-ia32': 0.23.1
- '@esbuild/win32-x64': 0.23.1
+ '@esbuild/aix-ppc64': 0.25.9
+ '@esbuild/android-arm': 0.25.9
+ '@esbuild/android-arm64': 0.25.9
+ '@esbuild/android-x64': 0.25.9
+ '@esbuild/darwin-arm64': 0.25.9
+ '@esbuild/darwin-x64': 0.25.9
+ '@esbuild/freebsd-arm64': 0.25.9
+ '@esbuild/freebsd-x64': 0.25.9
+ '@esbuild/linux-arm': 0.25.9
+ '@esbuild/linux-arm64': 0.25.9
+ '@esbuild/linux-ia32': 0.25.9
+ '@esbuild/linux-loong64': 0.25.9
+ '@esbuild/linux-mips64el': 0.25.9
+ '@esbuild/linux-ppc64': 0.25.9
+ '@esbuild/linux-riscv64': 0.25.9
+ '@esbuild/linux-s390x': 0.25.9
+ '@esbuild/linux-x64': 0.25.9
+ '@esbuild/netbsd-arm64': 0.25.9
+ '@esbuild/netbsd-x64': 0.25.9
+ '@esbuild/openbsd-arm64': 0.25.9
+ '@esbuild/openbsd-x64': 0.25.9
+ '@esbuild/openharmony-arm64': 0.25.9
+ '@esbuild/sunos-x64': 0.25.9
+ '@esbuild/win32-arm64': 0.25.9
+ '@esbuild/win32-ia32': 0.25.9
+ '@esbuild/win32-x64': 0.25.9
escalade@3.2.0: {}
@@ -1023,6 +985,8 @@ snapshots:
lodash@4.17.21: {}
+ mic@2.1.2: {}
+
midi-file@1.2.4: {}
midimessage@1.0.5: {}
@@ -1049,55 +1013,10 @@ snapshots:
dependencies:
wrappy: 1.0.2
- pg-cloudflare@1.1.1:
- optional: true
-
- pg-connection-string@2.7.0: {}
-
- pg-int8@1.0.1: {}
-
- pg-pool@3.8.0(pg@8.14.1):
- dependencies:
- pg: 8.14.1
-
- pg-protocol@1.8.0: {}
-
- pg-types@2.2.0:
- dependencies:
- pg-int8: 1.0.1
- postgres-array: 2.0.0
- postgres-bytea: 1.0.0
- postgres-date: 1.0.7
- postgres-interval: 1.2.0
-
- pg@8.14.1:
- dependencies:
- pg-connection-string: 2.7.0
- pg-pool: 3.8.0(pg@8.14.1)
- pg-protocol: 1.8.0
- pg-types: 2.2.0
- pgpass: 1.0.5
- optionalDependencies:
- pg-cloudflare: 1.1.1
-
- pgpass@1.0.5:
- dependencies:
- split2: 4.2.0
-
pkg-prebuilds@1.0.0:
dependencies:
yargs: 17.7.2
- postgres-array@2.0.0: {}
-
- postgres-bytea@1.0.0: {}
-
- postgres-date@1.0.7: {}
-
- postgres-interval@1.2.0:
- dependencies:
- xtend: 4.0.2
-
prebuild-install@7.1.3:
dependencies:
detect-libc: 2.0.3
@@ -1188,35 +1107,33 @@ snapshots:
note-parser: 2.0.1
sample-player: 0.5.5
- split2@4.2.0: {}
-
- springboard-cli@0.15.0-rc20(@springboardjs/platforms-browser@0.15.0-rc20(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@springboardjs/platforms-node@0.15.0-rc20(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(springboard-server@0.15.0-rc20(@springboardjs/data-storage@0.15.0-rc20(kysely@0.28.1))(@trpc/server@10.45.2)(hono@4.7.6)(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
+ springboard-cli@0.16.0(@springboardjs/platforms-browser@0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(springboard-server@0.16.0(@springboardjs/data-storage@0.16.0(kysely@0.28.1))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
dependencies:
- '@springboardjs/platforms-browser': 0.15.0-rc20(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
- '@springboardjs/platforms-node': 0.15.0-rc20(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ '@springboardjs/platforms-browser': 0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ '@springboardjs/platforms-node': 0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
commander: 12.1.0
concurrently: 9.1.2
- esbuild: 0.23.1
- springboard: 0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
- springboard-server: 0.15.0-rc20(@springboardjs/data-storage@0.15.0-rc20(kysely@0.28.1))(@trpc/server@10.45.2)(hono@4.7.6)(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ esbuild: 0.25.9
+ springboard: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard-server: 0.16.0(@springboardjs/data-storage@0.16.0(kysely@0.28.1))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ tslib: 2.8.1
typescript: 5.8.3
- springboard-server@0.15.0-rc20(@springboardjs/data-storage@0.15.0-rc20(kysely@0.28.1))(@trpc/server@10.45.2)(hono@4.7.6)(springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
+ springboard-server@0.16.0(@springboardjs/data-storage@0.16.0(kysely@0.28.1))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
dependencies:
'@hono/node-server': 1.14.1(hono@4.7.6)
'@hono/node-ws': 1.1.1(@hono/node-server@1.14.1(hono@4.7.6))(hono@4.7.6)
- '@hono/trpc-server': 0.3.4(@trpc/server@10.45.2)(hono@4.7.6)
- '@springboardjs/data-storage': 0.15.0-rc20(kysely@0.28.1)
+ '@springboardjs/data-storage': 0.16.0(kysely@0.28.1)
+ '@springboardjs/platforms-node': 0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
hono: 4.7.6
- springboard: 0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ json-rpc-2.0: 1.7.0
+ springboard: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
transitivePeerDependencies:
- - '@trpc/server'
- bufferutil
- utf-8-validate
- springboard@0.15.0-rc20(@trpc/client@10.45.2(@trpc/server@10.45.2))(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2):
+ springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2):
dependencies:
- '@trpc/client': 10.45.2(@trpc/server@10.45.2)
dexie: 4.0.11
immer: 10.1.1
json-rpc-2.0: 1.7.0
@@ -1278,6 +1195,8 @@ snapshots:
typescript@5.8.3: {}
+ undici-types@7.8.0: {}
+
util-deprecate@1.0.2: {}
webmidi@3.1.12:
@@ -1296,8 +1215,6 @@ snapshots:
ws@8.18.1: {}
- xtend@4.0.2: {}
-
y18n@5.0.8: {}
yargs-parser@21.1.1: {}
From a795f1cfb242170129fc9d9aa31edaa8b1c7828e Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Wed, 3 Sep 2025 02:33:30 -0400
Subject: [PATCH 03/14] add tsconfig.json
---
tsconfig.json | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 114 insertions(+)
create mode 100644 tsconfig.json
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..0a40a16
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,114 @@
+{
+ "compilerOptions": {
+ /* Visit https://aka.ms/tsconfig to read more about this file */
+ "jsx": "react",
+
+ /* Projects */
+ // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
+ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
+ // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
+ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
+ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
+ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
+
+ /* Language and Environment */
+ "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
+ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
+ // "jsx": "preserve", /* Specify what JSX code is generated. */
+ // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
+ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
+ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
+ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
+ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
+ // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
+ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
+ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
+ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
+
+ /* Modules */
+ "module": "commonjs", /* Specify what module code is generated. */
+ // "rootDir": "./", /* Specify the root folder within your source files. */
+ // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
+ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
+ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
+ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
+ // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
+ // "types": [], /* Specify type package names to be included without being referenced in a source file. */
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
+ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
+ // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
+ // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
+ // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
+ // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
+ // "resolveJsonModule": true, /* Enable importing .json files. */
+ // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
+ // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
+
+ /* JavaScript Support */
+ // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
+ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
+ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
+
+ /* Emit */
+ // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
+ // "declarationMap": true, /* Create sourcemaps for d.ts files. */
+ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
+ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
+ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
+ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
+ // "outDir": "./", /* Specify an output folder for all emitted files. */
+ // "removeComments": true, /* Disable emitting comments. */
+ // "noEmit": true, /* Disable emitting files from a compilation. */
+ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
+ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
+ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
+ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
+ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
+ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
+ // "newLine": "crlf", /* Set the newline character for emitting files. */
+ // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
+ // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
+ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
+ // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
+ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
+ // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
+
+ /* Interop Constraints */
+ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
+ // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
+ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
+ "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
+ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
+ "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
+
+ /* Type Checking */
+ "strict": true, /* Enable all strict type-checking options. */
+ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
+ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
+ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
+ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
+ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
+ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
+ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
+ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
+ // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
+ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
+ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
+ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
+ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
+ // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
+ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
+ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
+ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
+ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
+
+ /* Completeness */
+ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */,
+ "paths": {
+ // "~/*": ["./packages/jamtools/*"],
+ }
+ },
+ "exclude": []
+}
From 4738248de590c47231eda33c73a1c48ea1421ad6 Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Wed, 3 Sep 2025 02:37:40 -0400
Subject: [PATCH 04/14] add ci.yml for type checking
---
.github/workflows/ci.yml | 45 ++++++++++++++++++++++++++++++++++++++++
package.json | 3 ++-
2 files changed, 47 insertions(+), 1 deletion(-)
create mode 100644 .github/workflows/ci.yml
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..94c63f4
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,45 @@
+name: CI
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v4
+ with:
+ version: 9.13.2
+ - name: Install Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: 'pnpm'
+
+ - name: Install modules
+ run: pnpm i
+ - name: Build app
+ run: npm run build
+
+ types:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Install pnpm
+ uses: pnpm/action-setup@v4
+ with:
+ version: 9.13.2
+ - name: Install Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: 'pnpm'
+ - name: Install modules
+ run: pnpm i
+ - name: Check Types
+ run: npm run check-types
diff --git a/package.json b/package.json
index fdd7a39..221bfb5 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,8 @@
"main": "index.js",
"scripts": {
"dev": "sb dev src/index.tsx",
- "build": "sb build src/index.tsx"
+ "build": "sb build src/index.tsx",
+ "check-types": "tsc --noEmit"
},
"keywords": [],
"author": "",
From 80181e1094e1e55ec1e41cfc59b93d329e3397b5 Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Thu, 11 Sep 2025 01:24:50 -0400
Subject: [PATCH 05/14] update jamtools core
---
package.json | 14 +++---
pnpm-lock.yaml | 114 ++++++++++++++++++++++++-------------------------
2 files changed, 64 insertions(+), 64 deletions(-)
diff --git a/package.json b/package.json
index 221bfb5..fb37f3e 100644
--- a/package.json
+++ b/package.json
@@ -12,16 +12,16 @@
"license": "ISC",
"description": "",
"dependencies": {
- "@jamtools/core": "0.16.0",
- "@springboardjs/data-storage": "0.16.0",
- "@springboardjs/platforms-browser": "0.16.0",
- "@springboardjs/platforms-node": "0.16.0",
+ "@jamtools/core": "0.0.1-dev-midipoller-1",
+ "@springboardjs/data-storage": "0.0.1-dev-midipoller-1",
+ "@springboardjs/platforms-browser": "0.0.1-dev-midipoller-1",
+ "@springboardjs/platforms-node": "0.0.1-dev-midipoller-1",
"hono": "4.7.6",
"mic": "^2.1.2",
"react": "^19.1.0",
- "springboard": "0.16.0",
- "springboard-cli": "0.16.0",
- "springboard-server": "0.16.0"
+ "springboard": "0.0.1-dev-midipoller-1",
+ "springboard-cli": "0.0.1-dev-midipoller-1",
+ "springboard-server": "0.0.1-dev-midipoller-1"
},
"devDependencies": {
"@types/node": "^24.0.14",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f937d6a..75aec78 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,17 +9,17 @@ importers:
.:
dependencies:
'@jamtools/core':
- specifier: 0.16.0
- version: 0.16.0(@springboardjs/platforms-browser@0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-1
+ version: 0.0.1-dev-midipoller-1(@springboardjs/platforms-browser@0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@springboardjs/data-storage':
- specifier: 0.16.0
- version: 0.16.0(kysely@0.28.1)
+ specifier: 0.0.1-dev-midipoller-1
+ version: 0.0.1-dev-midipoller-1(kysely@0.28.1)
'@springboardjs/platforms-browser':
- specifier: 0.16.0
- version: 0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-1
+ version: 0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@springboardjs/platforms-node':
- specifier: 0.16.0
- version: 0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ specifier: 0.0.1-dev-midipoller-1
+ version: 0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
hono:
specifier: 4.7.6
version: 4.7.6
@@ -30,14 +30,14 @@ importers:
specifier: ^19.1.0
version: 19.1.0
springboard:
- specifier: 0.16.0
- version: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ specifier: 0.0.1-dev-midipoller-1
+ version: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
springboard-cli:
- specifier: 0.16.0
- version: 0.16.0(@springboardjs/platforms-browser@0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(springboard-server@0.16.0(@springboardjs/data-storage@0.16.0(kysely@0.28.1))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-1
+ version: 0.0.1-dev-midipoller-1(bfcad46c28e361a461b4556f25d6c4d5)
springboard-server:
- specifier: 0.16.0
- version: 0.16.0(@springboardjs/data-storage@0.16.0(kysely@0.28.1))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-1
+ version: 0.0.1-dev-midipoller-1(@springboardjs/data-storage@0.0.1-dev-midipoller-1(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
devDependencies:
'@types/node':
specifier: ^24.0.14
@@ -221,12 +221,12 @@ packages:
'@hono/node-server': ^1.11.1
hono: ^4.6.0
- '@jamtools/core@0.16.0':
- resolution: {integrity: sha512-LfQ7EcYly7m1B2UUwoLp/xkhWiJ/ID1KXw7XV/8HYEuatJ7SvbFGAy7MzOhzJPzWi9HZpyj4RcGID6akz9/nZQ==}
+ '@jamtools/core@0.0.1-dev-midipoller-1':
+ resolution: {integrity: sha512-gLFlMvor5nXZlUtimRXVKohuaZNxzph7+2EZA0SEuGFsBGrwlrfmOxmGRqenNzcrmO+G1IVItiacifIiY4q24g==}
peerDependencies:
- '@springboardjs/platforms-browser': 0.16.0
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-1
'@tonejs/midi': ^2.0.0
- springboard: 0.16.0
+ springboard: 0.0.1-dev-midipoller-1
svelte: '>= 5'
peerDependenciesMeta:
svelte:
@@ -240,22 +240,22 @@ packages:
resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
engines: {node: '>=14.0.0'}
- '@springboardjs/data-storage@0.16.0':
- resolution: {integrity: sha512-g1KLUtq6kw5BAfuxFjhAzIVR9eLQXwzMNLCRgPU/9KW5NHfL8DUVSUha7Nb7tt+1jPwtH4AIfraDIrSbrbSsBQ==}
+ '@springboardjs/data-storage@0.0.1-dev-midipoller-1':
+ resolution: {integrity: sha512-a1tRfUzr6sUCYnOqG5nB9GqusFYXxaiHCuJAc5QUlpTvqsEvg27mUb6nqpUyLUvhgBFb3E7pbkv9lO1jvA8vzA==}
peerDependencies:
kysely: '>= 0.24.0'
- '@springboardjs/platforms-browser@0.16.0':
- resolution: {integrity: sha512-1XgKgdOtUX3skK6cOy30B2dG7XBDH+yBHmEhIXXc2VJ7L7f9CjuJvTatwApNdV9N1tFe3AQYX5VOpGRmVuhQZQ==}
+ '@springboardjs/platforms-browser@0.0.1-dev-midipoller-1':
+ resolution: {integrity: sha512-LdandEat3Dr6C559sdqgNzNjat4FdytlIoZeUPUpcC6Of8yFd406sYXUpdAZo57ynbwjh/2W9sJzW1fBlxP5DQ==}
peerDependencies:
react-router-dom: ^6
- springboard: 0.16.0
+ springboard: 0.0.1-dev-midipoller-1
- '@springboardjs/platforms-node@0.16.0':
- resolution: {integrity: sha512-MZvBU0ugpW+NeR5dH93PkGKyDuJd8G2LEg4ysFug6Tgt0HKJ9DqV0AoYy2fKIwsJ+v46BhkO+YlXQlTg8criiA==}
+ '@springboardjs/platforms-node@0.0.1-dev-midipoller-1':
+ resolution: {integrity: sha512-ZRwQ/JsYYz9Ph2nHXs7pYIveTx82+G1hdFKwYOMqlt3oqfJGFQ39cQg5LniPpuakAtQJPGh5fFAzcH+AY+jOyw==}
peerDependencies:
isomorphic-ws: ^4.0.1
- springboard: 0.16.0
+ springboard: 0.0.1-dev-midipoller-1
ws: ^8.18.0
'@tonejs/midi@2.0.28':
@@ -553,25 +553,25 @@ packages:
soundfont-player@0.12.0:
resolution: {integrity: sha512-8BJIsAt7h1PK3thSZDgF6zecgGhYkK74JnZO8WRZi3h34qG6H/DYlnv7cpRvL7Q9C8N6qld4Qwj7nJsX1gYjEA==}
- springboard-cli@0.16.0:
- resolution: {integrity: sha512-WggFT3NWiReHlDJ/WbjCrXgneCPRqakma960F2UtwxKMwxqahSOHajKU2rTmMMR389FJ5X0IHzJZfqT/kl3S5Q==}
+ springboard-cli@0.0.1-dev-midipoller-1:
+ resolution: {integrity: sha512-M1jR01TLej1umDtIdv9egm5jGwDs2/dLwJD2C5jZDa26brcNPDKOs3MT/GoOx6m0qrk6MzXme0GacCczMA5WEw==}
hasBin: true
peerDependencies:
- '@springboardjs/platforms-browser': 0.16.0
- '@springboardjs/platforms-node': 0.16.0
- springboard: 0.16.0
- springboard-server: 0.16.0
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-1
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-1
+ springboard: 0.0.1-dev-midipoller-1
+ springboard-server: 0.0.1-dev-midipoller-1
- springboard-server@0.16.0:
- resolution: {integrity: sha512-E2XkkZqsuD9Eih36LNRzjSQt2+q/xYR3G5ZHUf/XgjvfhOU2yIb6NoN/IkC2N7rD+B0LfssVpM04K5uCX0JIiQ==}
+ springboard-server@0.0.1-dev-midipoller-1:
+ resolution: {integrity: sha512-uSQhDFW8c+Dk1Di0ZTT9i2q64QsuguFKIFUAcpoWHMxhYxXedK0WXfVO2+S/2gz3nmIm6biIhgt3IzGLULfNiA==}
peerDependencies:
- '@springboardjs/data-storage': 0.16.0
- '@springboardjs/platforms-node': 0.16.0
+ '@springboardjs/data-storage': 0.0.1-dev-midipoller-1
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-1
hono: ^4.6.7
- springboard: 0.16.0
+ springboard: 0.0.1-dev-midipoller-1
- springboard@0.16.0:
- resolution: {integrity: sha512-W+3Pkum1dw/RCh+q5LmhPFvUGFY9mfnFlU43JiJ+AX9IFuKG5iPG0oH8dYh0XJVZ1BxTmNnAr2r0m5a8qJeqUA==}
+ springboard@0.0.1-dev-midipoller-1:
+ resolution: {integrity: sha512-m/8PQUMIJzw6F1UE7wCMkSlL3x4W7zXwn5yCkCI9jlwvh8xQcPto6NnfzU4RcfmbkJtxNjvgW5zgBaMCJYgfiw==}
peerDependencies:
immer: ^10.1.1
json-rpc-2.0: ^1.7.0
@@ -765,15 +765,15 @@ snapshots:
- bufferutil
- utf-8-validate
- '@jamtools/core@0.16.0(@springboardjs/platforms-browser@0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
+ '@jamtools/core@0.0.1-dev-midipoller-1(@springboardjs/platforms-browser@0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
dependencies:
- '@springboardjs/platforms-browser': 0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@tonejs/midi': 2.0.28
easymidi: 3.1.0
immer: 10.1.1
midi-file: 1.2.4
soundfont-player: 0.12.0
- springboard: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
webmidi: 3.1.12
'@julusian/midi@3.6.1':
@@ -783,25 +783,25 @@ snapshots:
'@remix-run/router@1.23.0': {}
- '@springboardjs/data-storage@0.16.0(kysely@0.28.1)':
+ '@springboardjs/data-storage@0.0.1-dev-midipoller-1(kysely@0.28.1)':
dependencies:
better-sqlite3: 11.9.1
kysely: 0.28.1
zod: 3.24.3
- '@springboardjs/platforms-browser@0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
+ '@springboardjs/platforms-browser@0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
dependencies:
json-rpc-2.0: 1.7.0
react-router-dom: 6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
reconnecting-websocket: 4.4.0
- springboard: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
- '@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)':
+ '@springboardjs/platforms-node@0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)':
dependencies:
isomorphic-ws: 4.0.1(ws@8.18.1)
json-rpc-2.0: 1.7.0
reconnecting-websocket: 4.4.0
- springboard: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
ws: 8.18.1
'@tonejs/midi@2.0.28':
@@ -1107,32 +1107,32 @@ snapshots:
note-parser: 2.0.1
sample-player: 0.5.5
- springboard-cli@0.16.0(@springboardjs/platforms-browser@0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(springboard-server@0.16.0(@springboardjs/data-storage@0.16.0(kysely@0.28.1))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
+ springboard-cli@0.0.1-dev-midipoller-1(bfcad46c28e361a461b4556f25d6c4d5):
dependencies:
- '@springboardjs/platforms-browser': 0.16.0(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
- '@springboardjs/platforms-node': 0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
commander: 12.1.0
concurrently: 9.1.2
esbuild: 0.25.9
- springboard: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
- springboard-server: 0.16.0(@springboardjs/data-storage@0.16.0(kysely@0.28.1))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ springboard: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard-server: 0.0.1-dev-midipoller-1(@springboardjs/data-storage@0.0.1-dev-midipoller-1(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
tslib: 2.8.1
typescript: 5.8.3
- springboard-server@0.16.0(@springboardjs/data-storage@0.16.0(kysely@0.28.1))(@springboardjs/platforms-node@0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
+ springboard-server@0.0.1-dev-midipoller-1(@springboardjs/data-storage@0.0.1-dev-midipoller-1(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
dependencies:
'@hono/node-server': 1.14.1(hono@4.7.6)
'@hono/node-ws': 1.1.1(@hono/node-server@1.14.1(hono@4.7.6))(hono@4.7.6)
- '@springboardjs/data-storage': 0.16.0(kysely@0.28.1)
- '@springboardjs/platforms-node': 0.16.0(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ '@springboardjs/data-storage': 0.0.1-dev-midipoller-1(kysely@0.28.1)
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
hono: 4.7.6
json-rpc-2.0: 1.7.0
- springboard: 0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- springboard@0.16.0(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2):
+ springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2):
dependencies:
dexie: 4.0.11
immer: 10.1.1
From 379d7d68e3970c92301228c42a6d1b0e38910a59 Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Wed, 17 Sep 2025 14:46:55 -0400
Subject: [PATCH 06/14] fix midi file write issue, and make UI log messages
look better
---
.gitignore | 1 +
src/jamscribe_module.tsx | 46 ++++++++++++++++++++++++++++++++++------
src/services/recorder.ts | 22 ++++++++++++++-----
src/styles.css | 18 ++++++++++++++++
4 files changed, 75 insertions(+), 12 deletions(-)
diff --git a/.gitignore b/.gitignore
index f06235c..f1df25c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
node_modules
dist
+midi_files
diff --git a/src/jamscribe_module.tsx b/src/jamscribe_module.tsx
index 4c356c2..1342b83 100644
--- a/src/jamscribe_module.tsx
+++ b/src/jamscribe_module.tsx
@@ -18,8 +18,7 @@ fileSaver = {
fs.mkdirSync('midi_files')
}
- const content = buffer.toString();
- await fs.promises.writeFile(fileName, content);
+ await fs.promises.writeFile(fileName, buffer);
},
};
// @platform end
@@ -46,7 +45,11 @@ springboard.registerModule('JamScribe', {}, async (moduleAPI) => {
const recordingConfig = await moduleAPI.statesAPI.createPersistentState('recordingConfig', initialRecordingConfig);
const draftRecordingConfig = await moduleAPI.statesAPI.createSharedState('draftRecordingConfig', recordingConfig.getState());
- const logMessages = await moduleAPI.statesAPI.createSharedState('logMessages', []);
+ type LogMessage = {
+ message: string;
+ timestamp: Date;
+ };
+ const logMessages = await moduleAPI.statesAPI.createSharedState('logMessages', []);
const draftedFiles = await moduleAPI.statesAPI.createSharedState('draftedFiles', []);
const changeDraftInactivityTimeLimit = moduleAPI.createAction('changeDraftInactivityTimeLimit', {}, async ({limit}: {limit: number}) => {
@@ -106,8 +109,13 @@ springboard.registerModule('JamScribe', {}, async (moduleAPI) => {
recorder.initialize();
});
+type LogMessage = {
+ message: string;
+ timestamp: Date;
+};
+
type MainProps = {
- logs: string[];
+ logs: LogMessage[];
availableFiles: DraftedFile[];
recordingConfig: RecordingConfig;
@@ -187,11 +195,35 @@ const Main = ({
{logs.length > 0 ? (
- logs.map((msg, i) => (
+ [...logs].reverse().map((logEntry, i) => {
+ const formatTime = (date: Date | string | number) => {
+ const dateObj = new Date(date);
+ const now = new Date();
+ const isToday = dateObj.toDateString() === now.toDateString();
+ const timeStr = dateObj.toLocaleTimeString('en-US', {
+ hour: 'numeric',
+ minute: '2-digit',
+ hour12: true
+ });
+
+ if (isToday) {
+ return timeStr;
+ } else {
+ const dateStr = dateObj.toLocaleDateString('en-US', {
+ month: 'short',
+ day: 'numeric'
+ });
+ return `${dateStr} ${timeStr}`;
+ }
+ };
+
+ return (
-
- {msg}
+ {formatTime(logEntry.timestamp)}
+ {logEntry.message}
- ))
+ );
+ })
) : (
-
Waiting for activity...
diff --git a/src/services/recorder.ts b/src/services/recorder.ts
index f44c07a..cd6e267 100644
--- a/src/services/recorder.ts
+++ b/src/services/recorder.ts
@@ -23,7 +23,7 @@ type Logger = {
};
export type FileSaver = {
- writeFile: (fileName: string, buffer: Buffer) => void;
+ writeFile: (fileName: string, buffer: Buffer) => void | Promise;
}
export type RecordingConfig = {
@@ -38,6 +38,18 @@ export class MidiRecorderImpl {
constructor(private onInputEvent: Subject, private logger: Logger, private fileSaver: FileSaver, private recordingConfigState: StateSupervisor) { }
+ private formatDeviceName(deviceName: string): string {
+ // Truncate long device names and remove common suffixes
+ const cleaned = deviceName.replace(/ Air Bluetooth$/, '').replace(/ Bluetooth$/, '');
+ return cleaned.length > 20 ? cleaned.substring(0, 17) + '...' : cleaned;
+ }
+
+ private formatFilePath(filePath: string): string {
+ // Show just the filename without the full path
+ const fileName = filePath.split('/').pop() || filePath;
+ return fileName.length > 30 ? '...' + fileName.substring(fileName.length - 27) : fileName;
+ }
+
public initialize = () => {
this.onInputEvent.subscribe(this.handleMidiEvent);
};
@@ -51,7 +63,7 @@ export class MidiRecorderImpl {
// Store the event in memory
if (!this.recordedEvents[deviceName]?.length) {
- this.logger.log(`Started recording ${deviceName}. Will stop after ${this.getInactivityLimit() / 1000} seconds`);
+ this.logger.log(`Started recording ${this.formatDeviceName(deviceName)}`);
this.recordedEvents[deviceName] = [];
this.notifyUserOfStartRecording();
}
@@ -62,7 +74,7 @@ export class MidiRecorderImpl {
// Stop recording and save all recorded MIDI events to a file
private stopRecordingForAllDevices = () => {
- this.logger.log('Stopping all recordings due to inactivity...');
+ this.logger.log('Stopping recordings due to inactivity');
Object.keys(this.recordedEvents).forEach((deviceName) => {
this.saveRecordedMidiToFile(deviceName);
@@ -81,7 +93,7 @@ export class MidiRecorderImpl {
}
this.deviceTimeouts[deviceName] = setTimeout(() => {
- this.logger.log(`Device ${deviceName} is now inactive.`);
+ this.logger.log(`${this.formatDeviceName(deviceName)} inactive`);
this.deviceActivity[deviceName] = false;
const allInactive = Object.values(this.deviceActivity).every(isActive => !isActive);
@@ -132,7 +144,7 @@ export class MidiRecorderImpl {
try {
const outputBuffer = Buffer.from(writeMidi(midiData));
this.fileSaver.writeFile(midiFilePath, outputBuffer);
- this.logger.log(`MIDI file saved for device: ${deviceName} at ${midiFilePath}`);
+ this.logger.log(`MIDI saved: ${this.formatFilePath(midiFilePath)}`);
this.notifyUserOfNewRecordedSession();
} catch (error) {
this.logger.log(`Error while saving MIDI file for ${deviceName}: ${(error as Error).message}`);
diff --git a/src/styles.css b/src/styles.css
index bca1eed..849b080 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -251,12 +251,30 @@ button {
font-size: 0.875rem;
color: var(--text-secondary);
font-family: 'Monaco', 'Consolas', monospace;
+ display: flex;
+ gap: 0.75rem;
+ align-items: flex-start;
+ line-height: 1.4;
}
.log-item:last-child {
border-bottom: none;
}
+.log-timestamp {
+ flex-shrink: 0;
+ color: var(--text-secondary);
+ font-weight: 500;
+ min-width: 60px;
+}
+
+.log-message {
+ color: var(--text-primary);
+ word-break: break-word;
+ overflow-wrap: break-word;
+ flex: 1;
+}
+
/* Modal/Dialog styles */
dialog {
padding: 0;
From bc6d0402a1ea586c83a51aea825b619c463f19cc Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Wed, 17 Sep 2025 14:53:07 -0400
Subject: [PATCH 07/14] fix log styling
---
src/jamscribe_module.tsx | 9 +++------
tsconfig.json | 2 +-
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/src/jamscribe_module.tsx b/src/jamscribe_module.tsx
index 1342b83..3ce8f4e 100644
--- a/src/jamscribe_module.tsx
+++ b/src/jamscribe_module.tsx
@@ -45,10 +45,6 @@ springboard.registerModule('JamScribe', {}, async (moduleAPI) => {
const recordingConfig = await moduleAPI.statesAPI.createPersistentState('recordingConfig', initialRecordingConfig);
const draftRecordingConfig = await moduleAPI.statesAPI.createSharedState('draftRecordingConfig', recordingConfig.getState());
- type LogMessage = {
- message: string;
- timestamp: Date;
- };
const logMessages = await moduleAPI.statesAPI.createSharedState('logMessages', []);
const draftedFiles = await moduleAPI.statesAPI.createSharedState('draftedFiles', []);
@@ -94,7 +90,7 @@ springboard.registerModule('JamScribe', {}, async (moduleAPI) => {
const log = (msg: string) => {
console.log(msg);
logMessages.setState(logs => {
- return [...logs, msg]
+ return [...logs, { message: msg, timestamp: new Date(), id: Math.random().toString().slice(2) }]
});
}
@@ -110,6 +106,7 @@ springboard.registerModule('JamScribe', {}, async (moduleAPI) => {
});
type LogMessage = {
+ id: string;
message: string;
timestamp: Date;
};
@@ -218,7 +215,7 @@ const Main = ({
};
return (
-
-
+
-
{formatTime(logEntry.timestamp)}
{logEntry.message}
diff --git a/tsconfig.json b/tsconfig.json
index 0a40a16..957d748 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -110,5 +110,5 @@
// "~/*": ["./packages/jamtools/*"],
}
},
- "exclude": []
+ "exclude": ["./daw", "src/services/audio_recorder.ts"]
}
From dbfaca3f7d79769031ecf5de05feae16b2a3dfbb Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Sat, 20 Sep 2025 20:09:38 -0400
Subject: [PATCH 08/14] update jamtools
---
package.json | 14 +++---
pnpm-lock.yaml | 114 ++++++++++++++++++++++++-------------------------
2 files changed, 64 insertions(+), 64 deletions(-)
diff --git a/package.json b/package.json
index fb37f3e..27c5c9d 100644
--- a/package.json
+++ b/package.json
@@ -12,16 +12,16 @@
"license": "ISC",
"description": "",
"dependencies": {
- "@jamtools/core": "0.0.1-dev-midipoller-1",
- "@springboardjs/data-storage": "0.0.1-dev-midipoller-1",
- "@springboardjs/platforms-browser": "0.0.1-dev-midipoller-1",
- "@springboardjs/platforms-node": "0.0.1-dev-midipoller-1",
+ "@jamtools/core": "0.0.1-dev-midipoller-2",
+ "@springboardjs/data-storage": "0.0.1-dev-midipoller-2",
+ "@springboardjs/platforms-browser": "0.0.1-dev-midipoller-2",
+ "@springboardjs/platforms-node": "0.0.1-dev-midipoller-2",
"hono": "4.7.6",
"mic": "^2.1.2",
"react": "^19.1.0",
- "springboard": "0.0.1-dev-midipoller-1",
- "springboard-cli": "0.0.1-dev-midipoller-1",
- "springboard-server": "0.0.1-dev-midipoller-1"
+ "springboard": "0.0.1-dev-midipoller-2",
+ "springboard-cli": "0.0.1-dev-midipoller-2",
+ "springboard-server": "0.0.1-dev-midipoller-2"
},
"devDependencies": {
"@types/node": "^24.0.14",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 75aec78..62909a8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,17 +9,17 @@ importers:
.:
dependencies:
'@jamtools/core':
- specifier: 0.0.1-dev-midipoller-1
- version: 0.0.1-dev-midipoller-1(@springboardjs/platforms-browser@0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-2
+ version: 0.0.1-dev-midipoller-2(@springboardjs/platforms-browser@0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@springboardjs/data-storage':
- specifier: 0.0.1-dev-midipoller-1
- version: 0.0.1-dev-midipoller-1(kysely@0.28.1)
+ specifier: 0.0.1-dev-midipoller-2
+ version: 0.0.1-dev-midipoller-2(kysely@0.28.1)
'@springboardjs/platforms-browser':
- specifier: 0.0.1-dev-midipoller-1
- version: 0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-2
+ version: 0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@springboardjs/platforms-node':
- specifier: 0.0.1-dev-midipoller-1
- version: 0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ specifier: 0.0.1-dev-midipoller-2
+ version: 0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
hono:
specifier: 4.7.6
version: 4.7.6
@@ -30,14 +30,14 @@ importers:
specifier: ^19.1.0
version: 19.1.0
springboard:
- specifier: 0.0.1-dev-midipoller-1
- version: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ specifier: 0.0.1-dev-midipoller-2
+ version: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
springboard-cli:
- specifier: 0.0.1-dev-midipoller-1
- version: 0.0.1-dev-midipoller-1(bfcad46c28e361a461b4556f25d6c4d5)
+ specifier: 0.0.1-dev-midipoller-2
+ version: 0.0.1-dev-midipoller-2(eea953fa3fbba9b1873e34c60da1549e)
springboard-server:
- specifier: 0.0.1-dev-midipoller-1
- version: 0.0.1-dev-midipoller-1(@springboardjs/data-storage@0.0.1-dev-midipoller-1(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-2
+ version: 0.0.1-dev-midipoller-2(@springboardjs/data-storage@0.0.1-dev-midipoller-2(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
devDependencies:
'@types/node':
specifier: ^24.0.14
@@ -221,12 +221,12 @@ packages:
'@hono/node-server': ^1.11.1
hono: ^4.6.0
- '@jamtools/core@0.0.1-dev-midipoller-1':
- resolution: {integrity: sha512-gLFlMvor5nXZlUtimRXVKohuaZNxzph7+2EZA0SEuGFsBGrwlrfmOxmGRqenNzcrmO+G1IVItiacifIiY4q24g==}
+ '@jamtools/core@0.0.1-dev-midipoller-2':
+ resolution: {integrity: sha512-VnIhN4epRoy4FC8W3ycaMvdRJUN9JW+0P9EOf9dtJZeK+k12EeIJAhE+tFfTdZ84eSS1FbJgMqULmmH9/vxPLw==}
peerDependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-1
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-2
'@tonejs/midi': ^2.0.0
- springboard: 0.0.1-dev-midipoller-1
+ springboard: 0.0.1-dev-midipoller-2
svelte: '>= 5'
peerDependenciesMeta:
svelte:
@@ -240,22 +240,22 @@ packages:
resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
engines: {node: '>=14.0.0'}
- '@springboardjs/data-storage@0.0.1-dev-midipoller-1':
- resolution: {integrity: sha512-a1tRfUzr6sUCYnOqG5nB9GqusFYXxaiHCuJAc5QUlpTvqsEvg27mUb6nqpUyLUvhgBFb3E7pbkv9lO1jvA8vzA==}
+ '@springboardjs/data-storage@0.0.1-dev-midipoller-2':
+ resolution: {integrity: sha512-OV9igDtRxYSQaJ6B2ozdI5SQPYrrQ4uFvrx/jwTI8Ad8OnlvQIRDzWx8lZNTiR084VevPqDrK0tl8hO8tYqKWA==}
peerDependencies:
kysely: '>= 0.24.0'
- '@springboardjs/platforms-browser@0.0.1-dev-midipoller-1':
- resolution: {integrity: sha512-LdandEat3Dr6C559sdqgNzNjat4FdytlIoZeUPUpcC6Of8yFd406sYXUpdAZo57ynbwjh/2W9sJzW1fBlxP5DQ==}
+ '@springboardjs/platforms-browser@0.0.1-dev-midipoller-2':
+ resolution: {integrity: sha512-9XA9Smrb6bt2tLiw18hdHTBsafX1Hf1v0m17tI8UnHwh6emHooT4wjcPac95uROd0S7zRo/pO8Q8AeQFZvCvzQ==}
peerDependencies:
react-router-dom: ^6
- springboard: 0.0.1-dev-midipoller-1
+ springboard: 0.0.1-dev-midipoller-2
- '@springboardjs/platforms-node@0.0.1-dev-midipoller-1':
- resolution: {integrity: sha512-ZRwQ/JsYYz9Ph2nHXs7pYIveTx82+G1hdFKwYOMqlt3oqfJGFQ39cQg5LniPpuakAtQJPGh5fFAzcH+AY+jOyw==}
+ '@springboardjs/platforms-node@0.0.1-dev-midipoller-2':
+ resolution: {integrity: sha512-K/GpNsOxopb/tmCHHzuW1WN+XdfZMQ0sOX8pobh+KRSW/mQpy/GG2YEvLUQRDieKUf7O4oQhTGDT6KvElsJVig==}
peerDependencies:
isomorphic-ws: ^4.0.1
- springboard: 0.0.1-dev-midipoller-1
+ springboard: 0.0.1-dev-midipoller-2
ws: ^8.18.0
'@tonejs/midi@2.0.28':
@@ -553,25 +553,25 @@ packages:
soundfont-player@0.12.0:
resolution: {integrity: sha512-8BJIsAt7h1PK3thSZDgF6zecgGhYkK74JnZO8WRZi3h34qG6H/DYlnv7cpRvL7Q9C8N6qld4Qwj7nJsX1gYjEA==}
- springboard-cli@0.0.1-dev-midipoller-1:
- resolution: {integrity: sha512-M1jR01TLej1umDtIdv9egm5jGwDs2/dLwJD2C5jZDa26brcNPDKOs3MT/GoOx6m0qrk6MzXme0GacCczMA5WEw==}
+ springboard-cli@0.0.1-dev-midipoller-2:
+ resolution: {integrity: sha512-FDP4/RDbWoq3J0dZ2zlSq92Ler9w61nzSVQBaql3HptiHDt4XdV/T2rG4V3OuCI8DUcKpGFM04VQEujcgq/Kqg==}
hasBin: true
peerDependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-1
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-1
- springboard: 0.0.1-dev-midipoller-1
- springboard-server: 0.0.1-dev-midipoller-1
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-2
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-2
+ springboard: 0.0.1-dev-midipoller-2
+ springboard-server: 0.0.1-dev-midipoller-2
- springboard-server@0.0.1-dev-midipoller-1:
- resolution: {integrity: sha512-uSQhDFW8c+Dk1Di0ZTT9i2q64QsuguFKIFUAcpoWHMxhYxXedK0WXfVO2+S/2gz3nmIm6biIhgt3IzGLULfNiA==}
+ springboard-server@0.0.1-dev-midipoller-2:
+ resolution: {integrity: sha512-7vs9dCpWswczNdSUlLoZPZe0pZI0uHkXay4OfBrBzPcFq422NCPXS+Gluvrl+hikG0k4IMsO72DdS7MVe+wRYg==}
peerDependencies:
- '@springboardjs/data-storage': 0.0.1-dev-midipoller-1
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-1
+ '@springboardjs/data-storage': 0.0.1-dev-midipoller-2
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-2
hono: ^4.6.7
- springboard: 0.0.1-dev-midipoller-1
+ springboard: 0.0.1-dev-midipoller-2
- springboard@0.0.1-dev-midipoller-1:
- resolution: {integrity: sha512-m/8PQUMIJzw6F1UE7wCMkSlL3x4W7zXwn5yCkCI9jlwvh8xQcPto6NnfzU4RcfmbkJtxNjvgW5zgBaMCJYgfiw==}
+ springboard@0.0.1-dev-midipoller-2:
+ resolution: {integrity: sha512-7BZmoui1kNMmKql0Gejecnm7zS7X+DYieCylzTt/ihAgpVwDw6mqguNEca1SslkC8w9RRGKSS9cHqev9Bujx4w==}
peerDependencies:
immer: ^10.1.1
json-rpc-2.0: ^1.7.0
@@ -765,15 +765,15 @@ snapshots:
- bufferutil
- utf-8-validate
- '@jamtools/core@0.0.1-dev-midipoller-1(@springboardjs/platforms-browser@0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
+ '@jamtools/core@0.0.1-dev-midipoller-2(@springboardjs/platforms-browser@0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
dependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@tonejs/midi': 2.0.28
easymidi: 3.1.0
immer: 10.1.1
midi-file: 1.2.4
soundfont-player: 0.12.0
- springboard: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
webmidi: 3.1.12
'@julusian/midi@3.6.1':
@@ -783,25 +783,25 @@ snapshots:
'@remix-run/router@1.23.0': {}
- '@springboardjs/data-storage@0.0.1-dev-midipoller-1(kysely@0.28.1)':
+ '@springboardjs/data-storage@0.0.1-dev-midipoller-2(kysely@0.28.1)':
dependencies:
better-sqlite3: 11.9.1
kysely: 0.28.1
zod: 3.24.3
- '@springboardjs/platforms-browser@0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
+ '@springboardjs/platforms-browser@0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
dependencies:
json-rpc-2.0: 1.7.0
react-router-dom: 6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
reconnecting-websocket: 4.4.0
- springboard: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
- '@springboardjs/platforms-node@0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)':
+ '@springboardjs/platforms-node@0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)':
dependencies:
isomorphic-ws: 4.0.1(ws@8.18.1)
json-rpc-2.0: 1.7.0
reconnecting-websocket: 4.4.0
- springboard: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
ws: 8.18.1
'@tonejs/midi@2.0.28':
@@ -1107,32 +1107,32 @@ snapshots:
note-parser: 2.0.1
sample-player: 0.5.5
- springboard-cli@0.0.1-dev-midipoller-1(bfcad46c28e361a461b4556f25d6c4d5):
+ springboard-cli@0.0.1-dev-midipoller-2(eea953fa3fbba9b1873e34c60da1549e):
dependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-1(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
commander: 12.1.0
concurrently: 9.1.2
esbuild: 0.25.9
- springboard: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
- springboard-server: 0.0.1-dev-midipoller-1(@springboardjs/data-storage@0.0.1-dev-midipoller-1(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ springboard: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard-server: 0.0.1-dev-midipoller-2(@springboardjs/data-storage@0.0.1-dev-midipoller-2(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
tslib: 2.8.1
typescript: 5.8.3
- springboard-server@0.0.1-dev-midipoller-1(@springboardjs/data-storage@0.0.1-dev-midipoller-1(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
+ springboard-server@0.0.1-dev-midipoller-2(@springboardjs/data-storage@0.0.1-dev-midipoller-2(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
dependencies:
'@hono/node-server': 1.14.1(hono@4.7.6)
'@hono/node-ws': 1.1.1(@hono/node-server@1.14.1(hono@4.7.6))(hono@4.7.6)
- '@springboardjs/data-storage': 0.0.1-dev-midipoller-1(kysely@0.28.1)
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-1(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ '@springboardjs/data-storage': 0.0.1-dev-midipoller-2(kysely@0.28.1)
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
hono: 4.7.6
json-rpc-2.0: 1.7.0
- springboard: 0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- springboard@0.0.1-dev-midipoller-1(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2):
+ springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2):
dependencies:
dexie: 4.0.11
immer: 10.1.1
From 2a28d133f0d434d49a3a57c0e6c93bee3d997f9d Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Sat, 20 Sep 2025 21:35:49 -0400
Subject: [PATCH 09/14] update jamtools
---
package.json | 14 +++---
pnpm-lock.yaml | 114 ++++++++++++++++++++++++-------------------------
2 files changed, 64 insertions(+), 64 deletions(-)
diff --git a/package.json b/package.json
index 27c5c9d..3085dd4 100644
--- a/package.json
+++ b/package.json
@@ -12,16 +12,16 @@
"license": "ISC",
"description": "",
"dependencies": {
- "@jamtools/core": "0.0.1-dev-midipoller-2",
- "@springboardjs/data-storage": "0.0.1-dev-midipoller-2",
- "@springboardjs/platforms-browser": "0.0.1-dev-midipoller-2",
- "@springboardjs/platforms-node": "0.0.1-dev-midipoller-2",
+ "@jamtools/core": "0.0.1-dev-midipoller-3",
+ "@springboardjs/data-storage": "0.0.1-dev-midipoller-3",
+ "@springboardjs/platforms-browser": "0.0.1-dev-midipoller-3",
+ "@springboardjs/platforms-node": "0.0.1-dev-midipoller-3",
"hono": "4.7.6",
"mic": "^2.1.2",
"react": "^19.1.0",
- "springboard": "0.0.1-dev-midipoller-2",
- "springboard-cli": "0.0.1-dev-midipoller-2",
- "springboard-server": "0.0.1-dev-midipoller-2"
+ "springboard": "0.0.1-dev-midipoller-3",
+ "springboard-cli": "0.0.1-dev-midipoller-3",
+ "springboard-server": "0.0.1-dev-midipoller-3"
},
"devDependencies": {
"@types/node": "^24.0.14",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 62909a8..b13f2dd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,17 +9,17 @@ importers:
.:
dependencies:
'@jamtools/core':
- specifier: 0.0.1-dev-midipoller-2
- version: 0.0.1-dev-midipoller-2(@springboardjs/platforms-browser@0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-3
+ version: 0.0.1-dev-midipoller-3(@springboardjs/platforms-browser@0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@springboardjs/data-storage':
- specifier: 0.0.1-dev-midipoller-2
- version: 0.0.1-dev-midipoller-2(kysely@0.28.1)
+ specifier: 0.0.1-dev-midipoller-3
+ version: 0.0.1-dev-midipoller-3(kysely@0.28.1)
'@springboardjs/platforms-browser':
- specifier: 0.0.1-dev-midipoller-2
- version: 0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-3
+ version: 0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@springboardjs/platforms-node':
- specifier: 0.0.1-dev-midipoller-2
- version: 0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ specifier: 0.0.1-dev-midipoller-3
+ version: 0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
hono:
specifier: 4.7.6
version: 4.7.6
@@ -30,14 +30,14 @@ importers:
specifier: ^19.1.0
version: 19.1.0
springboard:
- specifier: 0.0.1-dev-midipoller-2
- version: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ specifier: 0.0.1-dev-midipoller-3
+ version: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
springboard-cli:
- specifier: 0.0.1-dev-midipoller-2
- version: 0.0.1-dev-midipoller-2(eea953fa3fbba9b1873e34c60da1549e)
+ specifier: 0.0.1-dev-midipoller-3
+ version: 0.0.1-dev-midipoller-3(64188156b58cb552eb5d4b56612341ae)
springboard-server:
- specifier: 0.0.1-dev-midipoller-2
- version: 0.0.1-dev-midipoller-2(@springboardjs/data-storage@0.0.1-dev-midipoller-2(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-3
+ version: 0.0.1-dev-midipoller-3(@springboardjs/data-storage@0.0.1-dev-midipoller-3(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
devDependencies:
'@types/node':
specifier: ^24.0.14
@@ -221,12 +221,12 @@ packages:
'@hono/node-server': ^1.11.1
hono: ^4.6.0
- '@jamtools/core@0.0.1-dev-midipoller-2':
- resolution: {integrity: sha512-VnIhN4epRoy4FC8W3ycaMvdRJUN9JW+0P9EOf9dtJZeK+k12EeIJAhE+tFfTdZ84eSS1FbJgMqULmmH9/vxPLw==}
+ '@jamtools/core@0.0.1-dev-midipoller-3':
+ resolution: {integrity: sha512-sLTBCd8ERBSpbxE6WbTaHtFTFVQfeo6cMxgF8yBhpDR8muiSMJOJLUR1ly0sfSrsTVXBVCzeAjtjTluas84hBQ==}
peerDependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-2
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-3
'@tonejs/midi': ^2.0.0
- springboard: 0.0.1-dev-midipoller-2
+ springboard: 0.0.1-dev-midipoller-3
svelte: '>= 5'
peerDependenciesMeta:
svelte:
@@ -240,22 +240,22 @@ packages:
resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
engines: {node: '>=14.0.0'}
- '@springboardjs/data-storage@0.0.1-dev-midipoller-2':
- resolution: {integrity: sha512-OV9igDtRxYSQaJ6B2ozdI5SQPYrrQ4uFvrx/jwTI8Ad8OnlvQIRDzWx8lZNTiR084VevPqDrK0tl8hO8tYqKWA==}
+ '@springboardjs/data-storage@0.0.1-dev-midipoller-3':
+ resolution: {integrity: sha512-PHciZ8f/0UWflas2fLb3zACfwXSiQxnPFDx29495XlYgpXv4qHjeRjqjhIEN8K8qNfKvilwuu09y0DHrk/tH4g==}
peerDependencies:
kysely: '>= 0.24.0'
- '@springboardjs/platforms-browser@0.0.1-dev-midipoller-2':
- resolution: {integrity: sha512-9XA9Smrb6bt2tLiw18hdHTBsafX1Hf1v0m17tI8UnHwh6emHooT4wjcPac95uROd0S7zRo/pO8Q8AeQFZvCvzQ==}
+ '@springboardjs/platforms-browser@0.0.1-dev-midipoller-3':
+ resolution: {integrity: sha512-mNNy0aNcVhrD3Z2SB/fXyRxYGqC0O9jy6NWRnJ2oITRythsSvNceegDsnq/9Vk4cCQcQFXXwN1bSVdkjR7f6eg==}
peerDependencies:
react-router-dom: ^6
- springboard: 0.0.1-dev-midipoller-2
+ springboard: 0.0.1-dev-midipoller-3
- '@springboardjs/platforms-node@0.0.1-dev-midipoller-2':
- resolution: {integrity: sha512-K/GpNsOxopb/tmCHHzuW1WN+XdfZMQ0sOX8pobh+KRSW/mQpy/GG2YEvLUQRDieKUf7O4oQhTGDT6KvElsJVig==}
+ '@springboardjs/platforms-node@0.0.1-dev-midipoller-3':
+ resolution: {integrity: sha512-XBGQFTy6M8yZqZSs2Mh7GdamU1D8RCfCckJW+gZaTbGfpgeH3jd6c/U7vuyQb4mXydeiPFC6fOHtvekepT7uYA==}
peerDependencies:
isomorphic-ws: ^4.0.1
- springboard: 0.0.1-dev-midipoller-2
+ springboard: 0.0.1-dev-midipoller-3
ws: ^8.18.0
'@tonejs/midi@2.0.28':
@@ -553,25 +553,25 @@ packages:
soundfont-player@0.12.0:
resolution: {integrity: sha512-8BJIsAt7h1PK3thSZDgF6zecgGhYkK74JnZO8WRZi3h34qG6H/DYlnv7cpRvL7Q9C8N6qld4Qwj7nJsX1gYjEA==}
- springboard-cli@0.0.1-dev-midipoller-2:
- resolution: {integrity: sha512-FDP4/RDbWoq3J0dZ2zlSq92Ler9w61nzSVQBaql3HptiHDt4XdV/T2rG4V3OuCI8DUcKpGFM04VQEujcgq/Kqg==}
+ springboard-cli@0.0.1-dev-midipoller-3:
+ resolution: {integrity: sha512-uJTcPNDkFy4/j1CHNPpGwnnWIovcxA6uv/wXnxgBIuJcz8CmaxhvZaA/2GDiRUeEJc19RnPpxsFmYC5Zm6OLxA==}
hasBin: true
peerDependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-2
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-2
- springboard: 0.0.1-dev-midipoller-2
- springboard-server: 0.0.1-dev-midipoller-2
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-3
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-3
+ springboard: 0.0.1-dev-midipoller-3
+ springboard-server: 0.0.1-dev-midipoller-3
- springboard-server@0.0.1-dev-midipoller-2:
- resolution: {integrity: sha512-7vs9dCpWswczNdSUlLoZPZe0pZI0uHkXay4OfBrBzPcFq422NCPXS+Gluvrl+hikG0k4IMsO72DdS7MVe+wRYg==}
+ springboard-server@0.0.1-dev-midipoller-3:
+ resolution: {integrity: sha512-pBIW5XNESJQVsqGgB2ibtnYeSjTI614+aw6Rmjj7ULZdsCXoa9zdxep+QzKnoRQ49uFvgcS6GKc8KutecZ0HXA==}
peerDependencies:
- '@springboardjs/data-storage': 0.0.1-dev-midipoller-2
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-2
+ '@springboardjs/data-storage': 0.0.1-dev-midipoller-3
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-3
hono: ^4.6.7
- springboard: 0.0.1-dev-midipoller-2
+ springboard: 0.0.1-dev-midipoller-3
- springboard@0.0.1-dev-midipoller-2:
- resolution: {integrity: sha512-7BZmoui1kNMmKql0Gejecnm7zS7X+DYieCylzTt/ihAgpVwDw6mqguNEca1SslkC8w9RRGKSS9cHqev9Bujx4w==}
+ springboard@0.0.1-dev-midipoller-3:
+ resolution: {integrity: sha512-+ayLHoLC1Rc8ZQOVn2PsprCEb32gnwqMmu2n+Kfhkp84xIlCK/j2YgWU4X/sEOHMo7RstITvnxC34up44Jm+hA==}
peerDependencies:
immer: ^10.1.1
json-rpc-2.0: ^1.7.0
@@ -765,15 +765,15 @@ snapshots:
- bufferutil
- utf-8-validate
- '@jamtools/core@0.0.1-dev-midipoller-2(@springboardjs/platforms-browser@0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
+ '@jamtools/core@0.0.1-dev-midipoller-3(@springboardjs/platforms-browser@0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
dependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@tonejs/midi': 2.0.28
easymidi: 3.1.0
immer: 10.1.1
midi-file: 1.2.4
soundfont-player: 0.12.0
- springboard: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
webmidi: 3.1.12
'@julusian/midi@3.6.1':
@@ -783,25 +783,25 @@ snapshots:
'@remix-run/router@1.23.0': {}
- '@springboardjs/data-storage@0.0.1-dev-midipoller-2(kysely@0.28.1)':
+ '@springboardjs/data-storage@0.0.1-dev-midipoller-3(kysely@0.28.1)':
dependencies:
better-sqlite3: 11.9.1
kysely: 0.28.1
zod: 3.24.3
- '@springboardjs/platforms-browser@0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
+ '@springboardjs/platforms-browser@0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
dependencies:
json-rpc-2.0: 1.7.0
react-router-dom: 6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
reconnecting-websocket: 4.4.0
- springboard: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
- '@springboardjs/platforms-node@0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)':
+ '@springboardjs/platforms-node@0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)':
dependencies:
isomorphic-ws: 4.0.1(ws@8.18.1)
json-rpc-2.0: 1.7.0
reconnecting-websocket: 4.4.0
- springboard: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
ws: 8.18.1
'@tonejs/midi@2.0.28':
@@ -1107,32 +1107,32 @@ snapshots:
note-parser: 2.0.1
sample-player: 0.5.5
- springboard-cli@0.0.1-dev-midipoller-2(eea953fa3fbba9b1873e34c60da1549e):
+ springboard-cli@0.0.1-dev-midipoller-3(64188156b58cb552eb5d4b56612341ae):
dependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-2(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
commander: 12.1.0
concurrently: 9.1.2
esbuild: 0.25.9
- springboard: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
- springboard-server: 0.0.1-dev-midipoller-2(@springboardjs/data-storage@0.0.1-dev-midipoller-2(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ springboard: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard-server: 0.0.1-dev-midipoller-3(@springboardjs/data-storage@0.0.1-dev-midipoller-3(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
tslib: 2.8.1
typescript: 5.8.3
- springboard-server@0.0.1-dev-midipoller-2(@springboardjs/data-storage@0.0.1-dev-midipoller-2(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
+ springboard-server@0.0.1-dev-midipoller-3(@springboardjs/data-storage@0.0.1-dev-midipoller-3(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
dependencies:
'@hono/node-server': 1.14.1(hono@4.7.6)
'@hono/node-ws': 1.1.1(@hono/node-server@1.14.1(hono@4.7.6))(hono@4.7.6)
- '@springboardjs/data-storage': 0.0.1-dev-midipoller-2(kysely@0.28.1)
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-2(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ '@springboardjs/data-storage': 0.0.1-dev-midipoller-3(kysely@0.28.1)
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
hono: 4.7.6
json-rpc-2.0: 1.7.0
- springboard: 0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- springboard@0.0.1-dev-midipoller-2(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2):
+ springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2):
dependencies:
dexie: 4.0.11
immer: 10.1.1
From 35a6d2f9342c9c90275c486cb83dcbb72ef5049f Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Mon, 22 Sep 2025 00:19:31 -0400
Subject: [PATCH 10/14] update jamtools
---
package.json | 14 +++---
pnpm-lock.yaml | 114 ++++++++++++++++++++++++-------------------------
2 files changed, 64 insertions(+), 64 deletions(-)
diff --git a/package.json b/package.json
index 3085dd4..65daf0a 100644
--- a/package.json
+++ b/package.json
@@ -12,16 +12,16 @@
"license": "ISC",
"description": "",
"dependencies": {
- "@jamtools/core": "0.0.1-dev-midipoller-3",
- "@springboardjs/data-storage": "0.0.1-dev-midipoller-3",
- "@springboardjs/platforms-browser": "0.0.1-dev-midipoller-3",
- "@springboardjs/platforms-node": "0.0.1-dev-midipoller-3",
+ "@jamtools/core": "0.0.1-dev-midipoller-4",
+ "@springboardjs/data-storage": "0.0.1-dev-midipoller-4",
+ "@springboardjs/platforms-browser": "0.0.1-dev-midipoller-4",
+ "@springboardjs/platforms-node": "0.0.1-dev-midipoller-4",
"hono": "4.7.6",
"mic": "^2.1.2",
"react": "^19.1.0",
- "springboard": "0.0.1-dev-midipoller-3",
- "springboard-cli": "0.0.1-dev-midipoller-3",
- "springboard-server": "0.0.1-dev-midipoller-3"
+ "springboard": "0.0.1-dev-midipoller-4",
+ "springboard-cli": "0.0.1-dev-midipoller-4",
+ "springboard-server": "0.0.1-dev-midipoller-4"
},
"devDependencies": {
"@types/node": "^24.0.14",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b13f2dd..9671e0b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,17 +9,17 @@ importers:
.:
dependencies:
'@jamtools/core':
- specifier: 0.0.1-dev-midipoller-3
- version: 0.0.1-dev-midipoller-3(@springboardjs/platforms-browser@0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-4
+ version: 0.0.1-dev-midipoller-4(@springboardjs/platforms-browser@0.0.1-dev-midipoller-4(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@springboardjs/data-storage':
- specifier: 0.0.1-dev-midipoller-3
- version: 0.0.1-dev-midipoller-3(kysely@0.28.1)
+ specifier: 0.0.1-dev-midipoller-4
+ version: 0.0.1-dev-midipoller-4(kysely@0.28.1)
'@springboardjs/platforms-browser':
- specifier: 0.0.1-dev-midipoller-3
- version: 0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-4
+ version: 0.0.1-dev-midipoller-4(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@springboardjs/platforms-node':
- specifier: 0.0.1-dev-midipoller-3
- version: 0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ specifier: 0.0.1-dev-midipoller-4
+ version: 0.0.1-dev-midipoller-4(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
hono:
specifier: 4.7.6
version: 4.7.6
@@ -30,14 +30,14 @@ importers:
specifier: ^19.1.0
version: 19.1.0
springboard:
- specifier: 0.0.1-dev-midipoller-3
- version: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ specifier: 0.0.1-dev-midipoller-4
+ version: 0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
springboard-cli:
- specifier: 0.0.1-dev-midipoller-3
- version: 0.0.1-dev-midipoller-3(64188156b58cb552eb5d4b56612341ae)
+ specifier: 0.0.1-dev-midipoller-4
+ version: 0.0.1-dev-midipoller-4(3421f7862c3e9569aa4fc8ac57db8387)
springboard-server:
- specifier: 0.0.1-dev-midipoller-3
- version: 0.0.1-dev-midipoller-3(@springboardjs/data-storage@0.0.1-dev-midipoller-3(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ specifier: 0.0.1-dev-midipoller-4
+ version: 0.0.1-dev-midipoller-4(@springboardjs/data-storage@0.0.1-dev-midipoller-4(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-4(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
devDependencies:
'@types/node':
specifier: ^24.0.14
@@ -221,12 +221,12 @@ packages:
'@hono/node-server': ^1.11.1
hono: ^4.6.0
- '@jamtools/core@0.0.1-dev-midipoller-3':
- resolution: {integrity: sha512-sLTBCd8ERBSpbxE6WbTaHtFTFVQfeo6cMxgF8yBhpDR8muiSMJOJLUR1ly0sfSrsTVXBVCzeAjtjTluas84hBQ==}
+ '@jamtools/core@0.0.1-dev-midipoller-4':
+ resolution: {integrity: sha512-nuf56NT+r9eroP2H8htxMaREVMEYFI4P3G1S1UN3+T7ftTp8M6a+bXVeM3UVGMovHEecALrq57SzD/DeJIDl3g==}
peerDependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-3
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-4
'@tonejs/midi': ^2.0.0
- springboard: 0.0.1-dev-midipoller-3
+ springboard: 0.0.1-dev-midipoller-4
svelte: '>= 5'
peerDependenciesMeta:
svelte:
@@ -240,22 +240,22 @@ packages:
resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
engines: {node: '>=14.0.0'}
- '@springboardjs/data-storage@0.0.1-dev-midipoller-3':
- resolution: {integrity: sha512-PHciZ8f/0UWflas2fLb3zACfwXSiQxnPFDx29495XlYgpXv4qHjeRjqjhIEN8K8qNfKvilwuu09y0DHrk/tH4g==}
+ '@springboardjs/data-storage@0.0.1-dev-midipoller-4':
+ resolution: {integrity: sha512-jTzEukK/e/3+5dtlOrYhJquOlFruzV3rTmeuMmJ7SvE853B3TG7NVBGAHxSonJ8Z6Ej9K5Rov9E/vhLEZyUoCw==}
peerDependencies:
kysely: '>= 0.24.0'
- '@springboardjs/platforms-browser@0.0.1-dev-midipoller-3':
- resolution: {integrity: sha512-mNNy0aNcVhrD3Z2SB/fXyRxYGqC0O9jy6NWRnJ2oITRythsSvNceegDsnq/9Vk4cCQcQFXXwN1bSVdkjR7f6eg==}
+ '@springboardjs/platforms-browser@0.0.1-dev-midipoller-4':
+ resolution: {integrity: sha512-NKiZwGVeslTEMc5k8v5MpDC4L4/2kDmI78uVv8AKwCv+J1Toc8Lfn0iW7EFwHq6xbdyuuV5HzOMbXVFlkO4gmg==}
peerDependencies:
react-router-dom: ^6
- springboard: 0.0.1-dev-midipoller-3
+ springboard: 0.0.1-dev-midipoller-4
- '@springboardjs/platforms-node@0.0.1-dev-midipoller-3':
- resolution: {integrity: sha512-XBGQFTy6M8yZqZSs2Mh7GdamU1D8RCfCckJW+gZaTbGfpgeH3jd6c/U7vuyQb4mXydeiPFC6fOHtvekepT7uYA==}
+ '@springboardjs/platforms-node@0.0.1-dev-midipoller-4':
+ resolution: {integrity: sha512-XxKfeisKoLwFLMkM8b4nUohvDKbyIMbq87MpQ2XXLxCuVWCDBOKRook+gWB5PI2DIYdkfAi0xrtN9a4acyvETA==}
peerDependencies:
isomorphic-ws: ^4.0.1
- springboard: 0.0.1-dev-midipoller-3
+ springboard: 0.0.1-dev-midipoller-4
ws: ^8.18.0
'@tonejs/midi@2.0.28':
@@ -553,25 +553,25 @@ packages:
soundfont-player@0.12.0:
resolution: {integrity: sha512-8BJIsAt7h1PK3thSZDgF6zecgGhYkK74JnZO8WRZi3h34qG6H/DYlnv7cpRvL7Q9C8N6qld4Qwj7nJsX1gYjEA==}
- springboard-cli@0.0.1-dev-midipoller-3:
- resolution: {integrity: sha512-uJTcPNDkFy4/j1CHNPpGwnnWIovcxA6uv/wXnxgBIuJcz8CmaxhvZaA/2GDiRUeEJc19RnPpxsFmYC5Zm6OLxA==}
+ springboard-cli@0.0.1-dev-midipoller-4:
+ resolution: {integrity: sha512-WW0WsYk1SJY8Sg3SHeHLuXH5AgLWUvmd3z7awZUQIAibEaNiBVDxvQxHQGPuAcbf77SOSYZSUldZO+lo4CoxhQ==}
hasBin: true
peerDependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-3
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-3
- springboard: 0.0.1-dev-midipoller-3
- springboard-server: 0.0.1-dev-midipoller-3
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-4
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-4
+ springboard: 0.0.1-dev-midipoller-4
+ springboard-server: 0.0.1-dev-midipoller-4
- springboard-server@0.0.1-dev-midipoller-3:
- resolution: {integrity: sha512-pBIW5XNESJQVsqGgB2ibtnYeSjTI614+aw6Rmjj7ULZdsCXoa9zdxep+QzKnoRQ49uFvgcS6GKc8KutecZ0HXA==}
+ springboard-server@0.0.1-dev-midipoller-4:
+ resolution: {integrity: sha512-o/NauJm9dKw1cTPBm7+4c4lttrNgAWUMohTxGaHFMgKHDAp3wBadAfoT88Y9k5U4lALw52UNXJORO9JiXu+FQA==}
peerDependencies:
- '@springboardjs/data-storage': 0.0.1-dev-midipoller-3
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-3
+ '@springboardjs/data-storage': 0.0.1-dev-midipoller-4
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-4
hono: ^4.6.7
- springboard: 0.0.1-dev-midipoller-3
+ springboard: 0.0.1-dev-midipoller-4
- springboard@0.0.1-dev-midipoller-3:
- resolution: {integrity: sha512-+ayLHoLC1Rc8ZQOVn2PsprCEb32gnwqMmu2n+Kfhkp84xIlCK/j2YgWU4X/sEOHMo7RstITvnxC34up44Jm+hA==}
+ springboard@0.0.1-dev-midipoller-4:
+ resolution: {integrity: sha512-Qqbzu1pBj/aPDo1R91h28fIpttl1xC99eZ7q9uOj1Pk4jqxzUhrc//CpcgQ+skvRplQdhz7d5F1PWxxWlsEYmw==}
peerDependencies:
immer: ^10.1.1
json-rpc-2.0: ^1.7.0
@@ -765,15 +765,15 @@ snapshots:
- bufferutil
- utf-8-validate
- '@jamtools/core@0.0.1-dev-midipoller-3(@springboardjs/platforms-browser@0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
+ '@jamtools/core@0.0.1-dev-midipoller-4(@springboardjs/platforms-browser@0.0.1-dev-midipoller-4(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)))(@tonejs/midi@2.0.28)(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
dependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-4(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
'@tonejs/midi': 2.0.28
easymidi: 3.1.0
immer: 10.1.1
midi-file: 1.2.4
soundfont-player: 0.12.0
- springboard: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
webmidi: 3.1.12
'@julusian/midi@3.6.1':
@@ -783,25 +783,25 @@ snapshots:
'@remix-run/router@1.23.0': {}
- '@springboardjs/data-storage@0.0.1-dev-midipoller-3(kysely@0.28.1)':
+ '@springboardjs/data-storage@0.0.1-dev-midipoller-4(kysely@0.28.1)':
dependencies:
better-sqlite3: 11.9.1
kysely: 0.28.1
zod: 3.24.3
- '@springboardjs/platforms-browser@0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
+ '@springboardjs/platforms-browser@0.0.1-dev-midipoller-4(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))':
dependencies:
json-rpc-2.0: 1.7.0
react-router-dom: 6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
reconnecting-websocket: 4.4.0
- springboard: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
- '@springboardjs/platforms-node@0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)':
+ '@springboardjs/platforms-node@0.0.1-dev-midipoller-4(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)':
dependencies:
isomorphic-ws: 4.0.1(ws@8.18.1)
json-rpc-2.0: 1.7.0
reconnecting-websocket: 4.4.0
- springboard: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
ws: 8.18.1
'@tonejs/midi@2.0.28':
@@ -1107,32 +1107,32 @@ snapshots:
note-parser: 2.0.1
sample-player: 0.5.5
- springboard-cli@0.0.1-dev-midipoller-3(64188156b58cb552eb5d4b56612341ae):
+ springboard-cli@0.0.1-dev-midipoller-4(3421f7862c3e9569aa4fc8ac57db8387):
dependencies:
- '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-3(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-4(react-router-dom@6.30.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-4(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
commander: 12.1.0
concurrently: 9.1.2
esbuild: 0.25.9
- springboard: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
- springboard-server: 0.0.1-dev-midipoller-3(@springboardjs/data-storage@0.0.1-dev-midipoller-3(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
+ springboard: 0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard-server: 0.0.1-dev-midipoller-4(@springboardjs/data-storage@0.0.1-dev-midipoller-4(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-4(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))
tslib: 2.8.1
typescript: 5.8.3
- springboard-server@0.0.1-dev-midipoller-3(@springboardjs/data-storage@0.0.1-dev-midipoller-3(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
+ springboard-server@0.0.1-dev-midipoller-4(@springboardjs/data-storage@0.0.1-dev-midipoller-4(kysely@0.28.1))(@springboardjs/platforms-node@0.0.1-dev-midipoller-4(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1))(hono@4.7.6)(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)):
dependencies:
'@hono/node-server': 1.14.1(hono@4.7.6)
'@hono/node-ws': 1.1.1(@hono/node-server@1.14.1(hono@4.7.6))(hono@4.7.6)
- '@springboardjs/data-storage': 0.0.1-dev-midipoller-3(kysely@0.28.1)
- '@springboardjs/platforms-node': 0.0.1-dev-midipoller-3(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
+ '@springboardjs/data-storage': 0.0.1-dev-midipoller-4(kysely@0.28.1)
+ '@springboardjs/platforms-node': 0.0.1-dev-midipoller-4(isomorphic-ws@4.0.1(ws@8.18.1))(springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2))(ws@8.18.1)
hono: 4.7.6
json-rpc-2.0: 1.7.0
- springboard: 0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
+ springboard: 0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- springboard@0.0.1-dev-midipoller-3(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2):
+ springboard@0.0.1-dev-midipoller-4(immer@10.1.1)(json-rpc-2.0@1.7.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2):
dependencies:
dexie: 4.0.11
immer: 10.1.1
From 6585edbd18ccfba7f51ce0e7d951d4a500513d4c Mon Sep 17 00:00:00 2001
From: Michael Kochell <6913320+mickmister@users.noreply.github.com>
Date: Tue, 28 Oct 2025 22:49:57 -0400
Subject: [PATCH 11/14] add uploader url feature
---
src/components/ConfigModal.tsx | 26 +++++-
src/jamscribe_module.tsx | 84 +++++++++++++------
src/services/recorder.ts | 1 +
src/services/upload_service.ts | 149 +++++++++++++++++++++++++++++++++
4 files changed, 235 insertions(+), 25 deletions(-)
create mode 100644 src/services/upload_service.ts
diff --git a/src/components/ConfigModal.tsx b/src/components/ConfigModal.tsx
index aa4a8e7..d0ac79d 100644
--- a/src/components/ConfigModal.tsx
+++ b/src/components/ConfigModal.tsx
@@ -8,6 +8,9 @@ type ConfigModalProps = {
draftInactivityTimeLimit: number;
onDraftInactivityTimeLimitChange: (newLimit: number) => void;
submitInactivityTimeLimitChange: () => void;
+ draftUploaderUrl: string;
+ onDraftUploaderUrlChange: (newUrl: string) => void;
+ submitUploaderUrlChange: () => void;
};
export function asModal void }>(
@@ -44,7 +47,10 @@ function ConfigModalBase({
recordingConfig,
draftInactivityTimeLimit,
onDraftInactivityTimeLimitChange,
- submitInactivityTimeLimitChange
+ submitInactivityTimeLimitChange,
+ draftUploaderUrl,
+ onDraftUploaderUrlChange,
+ submitUploaderUrlChange
}: ConfigModalProps) {
return (
@@ -69,6 +75,23 @@ function ConfigModalBase({
Recording will automatically stop after this many seconds of inactivity
+
+
+
+
onDraftUploaderUrlChange(e.target.value)}
+ placeholder="https://example.com/upload"
+ />
+
+ URL endpoint for uploading recorded files (leave empty to disable uploads)
+
+