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/.gitignore b/.gitignore index f06235c..f1df25c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules dist +midi_files diff --git a/package.json b/package.json index c290144..65daf0a 100644 --- a/package.json +++ b/package.json @@ -4,24 +4,27 @@ "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": "", "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.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.15.0-rc20", - "springboard-cli": "0.15.0-rc20", - "springboard-server": "0.15.0-rc20" + "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", "@types/react": "^19.1.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e4f4b53..9671e0b 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.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.15.0-rc20 - version: 0.15.0-rc20(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.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.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.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.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 + 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.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.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.0.1-dev-midipoller-4 + version: 0.0.1-dev-midipoller-4(3421f7862c3e9569aa4fc8ac57db8387) 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.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 + 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.0.1-dev-midipoller-4': + resolution: {integrity: sha512-nuf56NT+r9eroP2H8htxMaREVMEYFI4P3G1S1UN3+T7ftTp8M6a+bXVeM3UVGMovHEecALrq57SzD/DeJIDl3g==} peerDependencies: + '@springboardjs/platforms-browser': 0.0.1-dev-midipoller-4 '@tonejs/midi': ^2.0.0 - springboard: 0.15.0-rc20 + springboard: 0.0.1-dev-midipoller-4 + 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.0.1-dev-midipoller-4': + resolution: {integrity: sha512-jTzEukK/e/3+5dtlOrYhJquOlFruzV3rTmeuMmJ7SvE853B3TG7NVBGAHxSonJ8Z6Ej9K5Rov9E/vhLEZyUoCw==} peerDependencies: kysely: '>= 0.24.0' - '@springboardjs/platforms-browser@0.15.0-rc20': - resolution: {integrity: sha512-6EcpEeEcgTYCbvXmiUZTvm/gL7hq23js9bA1tlWi9RmHnH5kIQSUACSuJwF87Yu4o+amOSMrD4yXZBg73l2e9g==} + '@springboardjs/platforms-browser@0.0.1-dev-midipoller-4': + resolution: {integrity: sha512-NKiZwGVeslTEMc5k8v5MpDC4L4/2kDmI78uVv8AKwCv+J1Toc8Lfn0iW7EFwHq6xbdyuuV5HzOMbXVFlkO4gmg==} peerDependencies: react-router-dom: ^6 - springboard: 0.15.0-rc20 + springboard: 0.0.1-dev-midipoller-4 - '@springboardjs/platforms-node@0.15.0-rc20': - resolution: {integrity: sha512-gEeC8HIWHPTH48nMVXaLJDXi1cWPc9o5ZDEA+v3dsob2/5YPQ4+JLXoIDPWKO7hqKDlbeSiiUC3LwJjHdq514A==} + '@springboardjs/platforms-node@0.0.1-dev-midipoller-4': + resolution: {integrity: sha512-XxKfeisKoLwFLMkM8b4nUohvDKbyIMbq87MpQ2XXLxCuVWCDBOKRook+gWB5PI2DIYdkfAi0xrtN9a4acyvETA==} peerDependencies: isomorphic-ws: ^4.0.1 - springboard: 0.15.0-rc20 + springboard: 0.0.1-dev-midipoller-4 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.0.1-dev-midipoller-4: + resolution: {integrity: sha512-WW0WsYk1SJY8Sg3SHeHLuXH5AgLWUvmd3z7awZUQIAibEaNiBVDxvQxHQGPuAcbf77SOSYZSUldZO+lo4CoxhQ==} 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.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.15.0-rc20: - resolution: {integrity: sha512-sEbT8bXwY5fF9/DmWBU6l+zrbwOSNPa+Mr+cdjHfbkgc1Tij/Zxl7O9f6o00HIQNA+kBrQrAuxy5G/LzHv4rGg==} + springboard-server@0.0.1-dev-midipoller-4: + resolution: {integrity: sha512-o/NauJm9dKw1cTPBm7+4c4lttrNgAWUMohTxGaHFMgKHDAp3wBadAfoT88Y9k5U4lALw52UNXJORO9JiXu+FQA==} peerDependencies: - '@springboardjs/data-storage': 0.15.0-rc20 + '@springboardjs/data-storage': 0.0.1-dev-midipoller-4 + '@springboardjs/platforms-node': 0.0.1-dev-midipoller-4 hono: ^4.6.7 - springboard: 0.15.0-rc20 + springboard: 0.0.1-dev-midipoller-4 - springboard@0.15.0-rc20: - resolution: {integrity: sha512-Hy1wu2Mk8b+3hyRPppy/hiwRF9HHQ7qeOjW2l6MS7AKrD7Dt2HygkgaH5sXZySE8N9cJQodj1WkBPpvxMuI/Cw==} + springboard@0.0.1-dev-midipoller-4: + resolution: {integrity: sha512-Qqbzu1pBj/aPDo1R91h28fIpttl1xC99eZ7q9uOj1Pk4jqxzUhrc//CpcgQ+skvRplQdhz7d5F1PWxxWlsEYmw==} 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.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-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.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.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': @@ -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.0.1-dev-midipoller-4(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.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) - 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.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.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.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) - 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.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': @@ -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.0.1-dev-midipoller-4(3421f7862c3e9569aa4fc8ac57db8387): 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.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.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.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.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.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) - '@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.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.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.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: - - '@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.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: - '@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: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..4a3637a --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,6 @@ +onlyBuiltDependencies: + - '@julusian/midi' + - better-sqlite3 + - esbuild +packages: + - . \ No newline at end of file diff --git a/src/components/ConfigModal.tsx b/src/components/ConfigModal.tsx new file mode 100644 index 0000000..d0ac79d --- /dev/null +++ b/src/components/ConfigModal.tsx @@ -0,0 +1,120 @@ +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; + draftUploaderUrl: string; + onDraftUploaderUrlChange: (newUrl: string) => void; + submitUploaderUrlChange: () => void; +}; + +export function asModal
void }>( + Component: React.ComponentType
+) {
+ return (props: P) => {
+ const dialogRef = useRef
+ Recording will automatically stop after this many seconds of inactivity
+
+ URL endpoint for uploading recorded files (leave empty to disable uploads)
+ No MIDI input devices connected Connect a MIDI device to start recording No recordings yet. Start playing to record MIDI!⚙️ Recording Settings
+ 🎹 MIDI Input Devices
+
+ {midiDevices.map((device, index) => (
+
+ ) : (
+
- Config
-
-
- {JSON.stringify(recordingConfig, null, 2)}
-
- onDraftInactivityTimeLimitChange(parseInt(e.target.value))}
- />
+ 🎵 JamScribe
-
-
- {availableFiles.map(file => (
-
-
- {logs.map((msg, i) => (
-
+
+
+ 📁 Recorded Files
+ 📋 Activity Log
+
+ {logs.length > 0 ? (
+ [...logs].reverse().map((logEntry) => {
+ 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 (
+
+