├── .gitignore ├── README.md ├── client ├── index.html ├── package-lock.json ├── package.json ├── public │ └── favicon.svg ├── src │ ├── App.tsx │ ├── Buttons.tsx │ ├── index.css │ └── index.tsx ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts └── server ├── .eslintrc.json ├── .prettierrc ├── bun.lock ├── index.ts ├── package-lock.json ├── package.json ├── tsconfig.json └── wrangler.toml /.gitignore: -------------------------------------------------------------------------------- 1 | logs 2 | *.log 3 | npm-debug.log* 4 | yarn-debug.log* 5 | yarn-error.log* 6 | pnpm-debug.log* 7 | lerna-debug.log* 8 | 9 | node_modules 10 | dist 11 | dist-ssr 12 | *.local 13 | 14 | .vscode/* 15 | !.vscode/extensions.json 16 | .idea 17 | .DS_Store 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw? 23 | 24 | .wrangler 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vite-tinybase-ts-react-sync-durable-object 2 | 3 | This is a [Vite](https://vitejs.dev/) template for a simple 4 | [TinyBase](https://tinybase.org/) app, using TypeScript and React, demonstrating 5 | the TinyBase ui-react-dom module UI components, and also synchronizing between 6 | disparate browser windows using Cloudflare Durable Objects. 7 | 8 | The server can be configured to store TinyBase state, so even if all clients 9 | have been disconnected (and their browser storage cleared) synced data will still 10 | be available on the server for future connecting clients. 11 | 12 | image 13 | 14 | ## Instructions 15 | 16 | 1. Make a copy of this template into a new directory: 17 | 18 | ```sh 19 | npx tiged tinyplex/vite-tinybase-ts-react-sync-durable-object my-tinybase-app 20 | ``` 21 | 22 | 2. Go into the client directory: 23 | 24 | ```sh 25 | cd my-tinybase-app/client 26 | ``` 27 | 28 | 3. Install the dependencies: 29 | 30 | ```sh 31 | npm install 32 | ``` 33 | 34 | 4. Run the application: 35 | 36 | ```sh 37 | npm run dev 38 | ``` 39 | 40 | 5. Go the URL shown and enjoy! 41 | 42 | ## Run your own server 43 | 44 | This template uses a lightweight socket server on `vite.tinybase.cloud` to 45 | synchronize data between clients. This is fine for a demo but not intended as a 46 | production server for your apps! 47 | 48 | If you wish to run your own instance, see the `server` directory and start from 49 | there. 50 | 51 | The `vite.tinybase.cloud` server is hosted on Cloudflare (of course), so you 52 | should adapt the `wrangler.toml` configuration in the server directory. Update 53 | it to match your account, domains, and required configuration. In the `index.ts` 54 | file, you can configure whether data will be stored in the Durable Object or 55 | just synchronized between clients. 56 | 57 | You will also have to have your client communicate with your new server by 58 | configuring the `SERVER` constant at the top of the client's `App.tsx` file. 59 | 60 | ## Other templates 61 | 62 | There are eleven templates for TinyBase, of which this is one: 63 | 64 | | | Template | Language | React | Plus | 65 | | --- | -------------------------------------------------------------------------------------------------------------------- | ---------- | ----- | ---------------------- | 66 | | | [vite-tinybase](https://github.com/tinyplex/vite-tinybase) | JavaScript | No | | 67 | | | [vite-tinybase-ts](https://github.com/tinyplex/vite-tinybase-ts) | TypeScript | No | | 68 | | | [vite-tinybase-react](https://github.com/tinyplex/vite-tinybase-react) | JavaScript | Yes | | 69 | | | [vite-tinybase-ts-react](https://github.com/tinyplex/vite-tinybase-ts-react) | TypeScript | Yes | | 70 | | | [vite-tinybase-ts-react-sync](https://github.com/tinyplex/vite-tinybase-ts-react-sync) | TypeScript | Yes | Synchronization | 71 | | 👉 | [vite-tinybase-ts-react-sync-durable-object](https://github.com/tinyplex/vite-tinybase-ts-react-sync-durable-object) | TypeScript | Yes | Sync & Durable Objects | 72 | | | [vite-tinybase-ts-react-pglite](https://github.com/tinyplex/vite-tinybase-ts-react-pglite) | TypeScript | Yes | PGlite | 73 | | | [vite-tinybase-ts-react-crsqlite](https://github.com/tinyplex/vite-tinybase-ts-react-crsqlite) | TypeScript | Yes | CR-SQLite | 74 | | | [tinybase-ts-react-partykit](https://github.com/tinyplex/tinybase-ts-react-partykit) | TypeScript | Yes | PartyKit | 75 | | | [tinybase-ts-react-electricsql](https://github.com/tinyplex/tinybase-ts-react-electricsql) | TypeScript | Yes | ElectricSQL | 76 | | | [expo/examples/with-tinybase](https://github.com/expo/examples/tree/master/with-tinybase) | JavaScript | Yes | React Native & Expo | 77 | 78 | ## License 79 | 80 | This template has no license, and so you can use it however you want! 81 | [TinyBase](https://github.com/tinyplex/tinybase/blob/main/LICENSE) and 82 | [Vite](https://github.com/vitejs/vite/blob/main/LICENSE) themselves are both MIT 83 | licensed. 84 | -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | A TinyBase App 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /client/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-tinybase-ts-react-sync-client", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "vite-tinybase-ts-react-sync-client", 9 | "version": "1.0.0", 10 | "dependencies": { 11 | "react": "^19.1.0", 12 | "react-dom": "^19.1.0", 13 | "reconnecting-websocket": "^4.4.0", 14 | "tinybase": "^6.0.0" 15 | }, 16 | "devDependencies": { 17 | "@types/react-dom": "^19.0.4", 18 | "@vitejs/plugin-react": "^4.3.4", 19 | "typescript": "^5.8.2", 20 | "vite": "^6.2.3" 21 | } 22 | }, 23 | "node_modules/@ampproject/remapping": { 24 | "version": "2.3.0", 25 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 26 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 27 | "dev": true, 28 | "license": "Apache-2.0", 29 | "dependencies": { 30 | "@jridgewell/gen-mapping": "^0.3.5", 31 | "@jridgewell/trace-mapping": "^0.3.24" 32 | }, 33 | "engines": { 34 | "node": ">=6.0.0" 35 | } 36 | }, 37 | "node_modules/@babel/code-frame": { 38 | "version": "7.26.2", 39 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", 40 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", 41 | "dev": true, 42 | "license": "MIT", 43 | "dependencies": { 44 | "@babel/helper-validator-identifier": "^7.25.9", 45 | "js-tokens": "^4.0.0", 46 | "picocolors": "^1.0.0" 47 | }, 48 | "engines": { 49 | "node": ">=6.9.0" 50 | } 51 | }, 52 | "node_modules/@babel/compat-data": { 53 | "version": "7.26.8", 54 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", 55 | "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", 56 | "dev": true, 57 | "license": "MIT", 58 | "engines": { 59 | "node": ">=6.9.0" 60 | } 61 | }, 62 | "node_modules/@babel/core": { 63 | "version": "7.26.10", 64 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", 65 | "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", 66 | "dev": true, 67 | "license": "MIT", 68 | "dependencies": { 69 | "@ampproject/remapping": "^2.2.0", 70 | "@babel/code-frame": "^7.26.2", 71 | "@babel/generator": "^7.26.10", 72 | "@babel/helper-compilation-targets": "^7.26.5", 73 | "@babel/helper-module-transforms": "^7.26.0", 74 | "@babel/helpers": "^7.26.10", 75 | "@babel/parser": "^7.26.10", 76 | "@babel/template": "^7.26.9", 77 | "@babel/traverse": "^7.26.10", 78 | "@babel/types": "^7.26.10", 79 | "convert-source-map": "^2.0.0", 80 | "debug": "^4.1.0", 81 | "gensync": "^1.0.0-beta.2", 82 | "json5": "^2.2.3", 83 | "semver": "^6.3.1" 84 | }, 85 | "engines": { 86 | "node": ">=6.9.0" 87 | }, 88 | "funding": { 89 | "type": "opencollective", 90 | "url": "https://opencollective.com/babel" 91 | } 92 | }, 93 | "node_modules/@babel/generator": { 94 | "version": "7.27.0", 95 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", 96 | "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", 97 | "dev": true, 98 | "license": "MIT", 99 | "dependencies": { 100 | "@babel/parser": "^7.27.0", 101 | "@babel/types": "^7.27.0", 102 | "@jridgewell/gen-mapping": "^0.3.5", 103 | "@jridgewell/trace-mapping": "^0.3.25", 104 | "jsesc": "^3.0.2" 105 | }, 106 | "engines": { 107 | "node": ">=6.9.0" 108 | } 109 | }, 110 | "node_modules/@babel/helper-compilation-targets": { 111 | "version": "7.27.0", 112 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", 113 | "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", 114 | "dev": true, 115 | "license": "MIT", 116 | "dependencies": { 117 | "@babel/compat-data": "^7.26.8", 118 | "@babel/helper-validator-option": "^7.25.9", 119 | "browserslist": "^4.24.0", 120 | "lru-cache": "^5.1.1", 121 | "semver": "^6.3.1" 122 | }, 123 | "engines": { 124 | "node": ">=6.9.0" 125 | } 126 | }, 127 | "node_modules/@babel/helper-module-imports": { 128 | "version": "7.25.9", 129 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", 130 | "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", 131 | "dev": true, 132 | "license": "MIT", 133 | "dependencies": { 134 | "@babel/traverse": "^7.25.9", 135 | "@babel/types": "^7.25.9" 136 | }, 137 | "engines": { 138 | "node": ">=6.9.0" 139 | } 140 | }, 141 | "node_modules/@babel/helper-module-transforms": { 142 | "version": "7.26.0", 143 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", 144 | "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", 145 | "dev": true, 146 | "license": "MIT", 147 | "dependencies": { 148 | "@babel/helper-module-imports": "^7.25.9", 149 | "@babel/helper-validator-identifier": "^7.25.9", 150 | "@babel/traverse": "^7.25.9" 151 | }, 152 | "engines": { 153 | "node": ">=6.9.0" 154 | }, 155 | "peerDependencies": { 156 | "@babel/core": "^7.0.0" 157 | } 158 | }, 159 | "node_modules/@babel/helper-plugin-utils": { 160 | "version": "7.26.5", 161 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", 162 | "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", 163 | "dev": true, 164 | "license": "MIT", 165 | "engines": { 166 | "node": ">=6.9.0" 167 | } 168 | }, 169 | "node_modules/@babel/helper-string-parser": { 170 | "version": "7.25.9", 171 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", 172 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", 173 | "dev": true, 174 | "license": "MIT", 175 | "engines": { 176 | "node": ">=6.9.0" 177 | } 178 | }, 179 | "node_modules/@babel/helper-validator-identifier": { 180 | "version": "7.25.9", 181 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 182 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 183 | "dev": true, 184 | "license": "MIT", 185 | "engines": { 186 | "node": ">=6.9.0" 187 | } 188 | }, 189 | "node_modules/@babel/helper-validator-option": { 190 | "version": "7.25.9", 191 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", 192 | "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", 193 | "dev": true, 194 | "license": "MIT", 195 | "engines": { 196 | "node": ">=6.9.0" 197 | } 198 | }, 199 | "node_modules/@babel/helpers": { 200 | "version": "7.27.0", 201 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", 202 | "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", 203 | "dev": true, 204 | "license": "MIT", 205 | "dependencies": { 206 | "@babel/template": "^7.27.0", 207 | "@babel/types": "^7.27.0" 208 | }, 209 | "engines": { 210 | "node": ">=6.9.0" 211 | } 212 | }, 213 | "node_modules/@babel/parser": { 214 | "version": "7.27.0", 215 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", 216 | "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", 217 | "dev": true, 218 | "license": "MIT", 219 | "dependencies": { 220 | "@babel/types": "^7.27.0" 221 | }, 222 | "bin": { 223 | "parser": "bin/babel-parser.js" 224 | }, 225 | "engines": { 226 | "node": ">=6.0.0" 227 | } 228 | }, 229 | "node_modules/@babel/plugin-transform-react-jsx-self": { 230 | "version": "7.25.9", 231 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", 232 | "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", 233 | "dev": true, 234 | "license": "MIT", 235 | "dependencies": { 236 | "@babel/helper-plugin-utils": "^7.25.9" 237 | }, 238 | "engines": { 239 | "node": ">=6.9.0" 240 | }, 241 | "peerDependencies": { 242 | "@babel/core": "^7.0.0-0" 243 | } 244 | }, 245 | "node_modules/@babel/plugin-transform-react-jsx-source": { 246 | "version": "7.25.9", 247 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", 248 | "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", 249 | "dev": true, 250 | "license": "MIT", 251 | "dependencies": { 252 | "@babel/helper-plugin-utils": "^7.25.9" 253 | }, 254 | "engines": { 255 | "node": ">=6.9.0" 256 | }, 257 | "peerDependencies": { 258 | "@babel/core": "^7.0.0-0" 259 | } 260 | }, 261 | "node_modules/@babel/template": { 262 | "version": "7.27.0", 263 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", 264 | "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", 265 | "dev": true, 266 | "license": "MIT", 267 | "dependencies": { 268 | "@babel/code-frame": "^7.26.2", 269 | "@babel/parser": "^7.27.0", 270 | "@babel/types": "^7.27.0" 271 | }, 272 | "engines": { 273 | "node": ">=6.9.0" 274 | } 275 | }, 276 | "node_modules/@babel/traverse": { 277 | "version": "7.27.0", 278 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", 279 | "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", 280 | "dev": true, 281 | "license": "MIT", 282 | "dependencies": { 283 | "@babel/code-frame": "^7.26.2", 284 | "@babel/generator": "^7.27.0", 285 | "@babel/parser": "^7.27.0", 286 | "@babel/template": "^7.27.0", 287 | "@babel/types": "^7.27.0", 288 | "debug": "^4.3.1", 289 | "globals": "^11.1.0" 290 | }, 291 | "engines": { 292 | "node": ">=6.9.0" 293 | } 294 | }, 295 | "node_modules/@babel/types": { 296 | "version": "7.27.0", 297 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", 298 | "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", 299 | "dev": true, 300 | "license": "MIT", 301 | "dependencies": { 302 | "@babel/helper-string-parser": "^7.25.9", 303 | "@babel/helper-validator-identifier": "^7.25.9" 304 | }, 305 | "engines": { 306 | "node": ">=6.9.0" 307 | } 308 | }, 309 | "node_modules/@esbuild/aix-ppc64": { 310 | "version": "0.25.1", 311 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", 312 | "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", 313 | "cpu": [ 314 | "ppc64" 315 | ], 316 | "dev": true, 317 | "license": "MIT", 318 | "optional": true, 319 | "os": [ 320 | "aix" 321 | ], 322 | "engines": { 323 | "node": ">=18" 324 | } 325 | }, 326 | "node_modules/@esbuild/android-arm": { 327 | "version": "0.25.1", 328 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", 329 | "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", 330 | "cpu": [ 331 | "arm" 332 | ], 333 | "dev": true, 334 | "license": "MIT", 335 | "optional": true, 336 | "os": [ 337 | "android" 338 | ], 339 | "engines": { 340 | "node": ">=18" 341 | } 342 | }, 343 | "node_modules/@esbuild/android-arm64": { 344 | "version": "0.25.1", 345 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", 346 | "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", 347 | "cpu": [ 348 | "arm64" 349 | ], 350 | "dev": true, 351 | "license": "MIT", 352 | "optional": true, 353 | "os": [ 354 | "android" 355 | ], 356 | "engines": { 357 | "node": ">=18" 358 | } 359 | }, 360 | "node_modules/@esbuild/android-x64": { 361 | "version": "0.25.1", 362 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", 363 | "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", 364 | "cpu": [ 365 | "x64" 366 | ], 367 | "dev": true, 368 | "license": "MIT", 369 | "optional": true, 370 | "os": [ 371 | "android" 372 | ], 373 | "engines": { 374 | "node": ">=18" 375 | } 376 | }, 377 | "node_modules/@esbuild/darwin-arm64": { 378 | "version": "0.25.1", 379 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", 380 | "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", 381 | "cpu": [ 382 | "arm64" 383 | ], 384 | "dev": true, 385 | "license": "MIT", 386 | "optional": true, 387 | "os": [ 388 | "darwin" 389 | ], 390 | "engines": { 391 | "node": ">=18" 392 | } 393 | }, 394 | "node_modules/@esbuild/darwin-x64": { 395 | "version": "0.25.1", 396 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", 397 | "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", 398 | "cpu": [ 399 | "x64" 400 | ], 401 | "dev": true, 402 | "license": "MIT", 403 | "optional": true, 404 | "os": [ 405 | "darwin" 406 | ], 407 | "engines": { 408 | "node": ">=18" 409 | } 410 | }, 411 | "node_modules/@esbuild/freebsd-arm64": { 412 | "version": "0.25.1", 413 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", 414 | "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", 415 | "cpu": [ 416 | "arm64" 417 | ], 418 | "dev": true, 419 | "license": "MIT", 420 | "optional": true, 421 | "os": [ 422 | "freebsd" 423 | ], 424 | "engines": { 425 | "node": ">=18" 426 | } 427 | }, 428 | "node_modules/@esbuild/freebsd-x64": { 429 | "version": "0.25.1", 430 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", 431 | "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", 432 | "cpu": [ 433 | "x64" 434 | ], 435 | "dev": true, 436 | "license": "MIT", 437 | "optional": true, 438 | "os": [ 439 | "freebsd" 440 | ], 441 | "engines": { 442 | "node": ">=18" 443 | } 444 | }, 445 | "node_modules/@esbuild/linux-arm": { 446 | "version": "0.25.1", 447 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", 448 | "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", 449 | "cpu": [ 450 | "arm" 451 | ], 452 | "dev": true, 453 | "license": "MIT", 454 | "optional": true, 455 | "os": [ 456 | "linux" 457 | ], 458 | "engines": { 459 | "node": ">=18" 460 | } 461 | }, 462 | "node_modules/@esbuild/linux-arm64": { 463 | "version": "0.25.1", 464 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", 465 | "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", 466 | "cpu": [ 467 | "arm64" 468 | ], 469 | "dev": true, 470 | "license": "MIT", 471 | "optional": true, 472 | "os": [ 473 | "linux" 474 | ], 475 | "engines": { 476 | "node": ">=18" 477 | } 478 | }, 479 | "node_modules/@esbuild/linux-ia32": { 480 | "version": "0.25.1", 481 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", 482 | "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", 483 | "cpu": [ 484 | "ia32" 485 | ], 486 | "dev": true, 487 | "license": "MIT", 488 | "optional": true, 489 | "os": [ 490 | "linux" 491 | ], 492 | "engines": { 493 | "node": ">=18" 494 | } 495 | }, 496 | "node_modules/@esbuild/linux-loong64": { 497 | "version": "0.25.1", 498 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", 499 | "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", 500 | "cpu": [ 501 | "loong64" 502 | ], 503 | "dev": true, 504 | "license": "MIT", 505 | "optional": true, 506 | "os": [ 507 | "linux" 508 | ], 509 | "engines": { 510 | "node": ">=18" 511 | } 512 | }, 513 | "node_modules/@esbuild/linux-mips64el": { 514 | "version": "0.25.1", 515 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", 516 | "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", 517 | "cpu": [ 518 | "mips64el" 519 | ], 520 | "dev": true, 521 | "license": "MIT", 522 | "optional": true, 523 | "os": [ 524 | "linux" 525 | ], 526 | "engines": { 527 | "node": ">=18" 528 | } 529 | }, 530 | "node_modules/@esbuild/linux-ppc64": { 531 | "version": "0.25.1", 532 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", 533 | "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", 534 | "cpu": [ 535 | "ppc64" 536 | ], 537 | "dev": true, 538 | "license": "MIT", 539 | "optional": true, 540 | "os": [ 541 | "linux" 542 | ], 543 | "engines": { 544 | "node": ">=18" 545 | } 546 | }, 547 | "node_modules/@esbuild/linux-riscv64": { 548 | "version": "0.25.1", 549 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", 550 | "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", 551 | "cpu": [ 552 | "riscv64" 553 | ], 554 | "dev": true, 555 | "license": "MIT", 556 | "optional": true, 557 | "os": [ 558 | "linux" 559 | ], 560 | "engines": { 561 | "node": ">=18" 562 | } 563 | }, 564 | "node_modules/@esbuild/linux-s390x": { 565 | "version": "0.25.1", 566 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", 567 | "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", 568 | "cpu": [ 569 | "s390x" 570 | ], 571 | "dev": true, 572 | "license": "MIT", 573 | "optional": true, 574 | "os": [ 575 | "linux" 576 | ], 577 | "engines": { 578 | "node": ">=18" 579 | } 580 | }, 581 | "node_modules/@esbuild/linux-x64": { 582 | "version": "0.25.1", 583 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", 584 | "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", 585 | "cpu": [ 586 | "x64" 587 | ], 588 | "dev": true, 589 | "license": "MIT", 590 | "optional": true, 591 | "os": [ 592 | "linux" 593 | ], 594 | "engines": { 595 | "node": ">=18" 596 | } 597 | }, 598 | "node_modules/@esbuild/netbsd-arm64": { 599 | "version": "0.25.1", 600 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", 601 | "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", 602 | "cpu": [ 603 | "arm64" 604 | ], 605 | "dev": true, 606 | "license": "MIT", 607 | "optional": true, 608 | "os": [ 609 | "netbsd" 610 | ], 611 | "engines": { 612 | "node": ">=18" 613 | } 614 | }, 615 | "node_modules/@esbuild/netbsd-x64": { 616 | "version": "0.25.1", 617 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", 618 | "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", 619 | "cpu": [ 620 | "x64" 621 | ], 622 | "dev": true, 623 | "license": "MIT", 624 | "optional": true, 625 | "os": [ 626 | "netbsd" 627 | ], 628 | "engines": { 629 | "node": ">=18" 630 | } 631 | }, 632 | "node_modules/@esbuild/openbsd-arm64": { 633 | "version": "0.25.1", 634 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", 635 | "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", 636 | "cpu": [ 637 | "arm64" 638 | ], 639 | "dev": true, 640 | "license": "MIT", 641 | "optional": true, 642 | "os": [ 643 | "openbsd" 644 | ], 645 | "engines": { 646 | "node": ">=18" 647 | } 648 | }, 649 | "node_modules/@esbuild/openbsd-x64": { 650 | "version": "0.25.1", 651 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", 652 | "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", 653 | "cpu": [ 654 | "x64" 655 | ], 656 | "dev": true, 657 | "license": "MIT", 658 | "optional": true, 659 | "os": [ 660 | "openbsd" 661 | ], 662 | "engines": { 663 | "node": ">=18" 664 | } 665 | }, 666 | "node_modules/@esbuild/sunos-x64": { 667 | "version": "0.25.1", 668 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", 669 | "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", 670 | "cpu": [ 671 | "x64" 672 | ], 673 | "dev": true, 674 | "license": "MIT", 675 | "optional": true, 676 | "os": [ 677 | "sunos" 678 | ], 679 | "engines": { 680 | "node": ">=18" 681 | } 682 | }, 683 | "node_modules/@esbuild/win32-arm64": { 684 | "version": "0.25.1", 685 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", 686 | "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", 687 | "cpu": [ 688 | "arm64" 689 | ], 690 | "dev": true, 691 | "license": "MIT", 692 | "optional": true, 693 | "os": [ 694 | "win32" 695 | ], 696 | "engines": { 697 | "node": ">=18" 698 | } 699 | }, 700 | "node_modules/@esbuild/win32-ia32": { 701 | "version": "0.25.1", 702 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", 703 | "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", 704 | "cpu": [ 705 | "ia32" 706 | ], 707 | "dev": true, 708 | "license": "MIT", 709 | "optional": true, 710 | "os": [ 711 | "win32" 712 | ], 713 | "engines": { 714 | "node": ">=18" 715 | } 716 | }, 717 | "node_modules/@esbuild/win32-x64": { 718 | "version": "0.25.1", 719 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", 720 | "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", 721 | "cpu": [ 722 | "x64" 723 | ], 724 | "dev": true, 725 | "license": "MIT", 726 | "optional": true, 727 | "os": [ 728 | "win32" 729 | ], 730 | "engines": { 731 | "node": ">=18" 732 | } 733 | }, 734 | "node_modules/@jridgewell/gen-mapping": { 735 | "version": "0.3.8", 736 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 737 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 738 | "dev": true, 739 | "license": "MIT", 740 | "dependencies": { 741 | "@jridgewell/set-array": "^1.2.1", 742 | "@jridgewell/sourcemap-codec": "^1.4.10", 743 | "@jridgewell/trace-mapping": "^0.3.24" 744 | }, 745 | "engines": { 746 | "node": ">=6.0.0" 747 | } 748 | }, 749 | "node_modules/@jridgewell/resolve-uri": { 750 | "version": "3.1.2", 751 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 752 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 753 | "dev": true, 754 | "license": "MIT", 755 | "engines": { 756 | "node": ">=6.0.0" 757 | } 758 | }, 759 | "node_modules/@jridgewell/set-array": { 760 | "version": "1.2.1", 761 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 762 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 763 | "dev": true, 764 | "license": "MIT", 765 | "engines": { 766 | "node": ">=6.0.0" 767 | } 768 | }, 769 | "node_modules/@jridgewell/sourcemap-codec": { 770 | "version": "1.5.0", 771 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 772 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 773 | "dev": true, 774 | "license": "MIT" 775 | }, 776 | "node_modules/@jridgewell/trace-mapping": { 777 | "version": "0.3.25", 778 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 779 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 780 | "dev": true, 781 | "license": "MIT", 782 | "dependencies": { 783 | "@jridgewell/resolve-uri": "^3.1.0", 784 | "@jridgewell/sourcemap-codec": "^1.4.14" 785 | } 786 | }, 787 | "node_modules/@rollup/rollup-android-arm-eabi": { 788 | "version": "4.38.0", 789 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.38.0.tgz", 790 | "integrity": "sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg==", 791 | "cpu": [ 792 | "arm" 793 | ], 794 | "dev": true, 795 | "license": "MIT", 796 | "optional": true, 797 | "os": [ 798 | "android" 799 | ] 800 | }, 801 | "node_modules/@rollup/rollup-android-arm64": { 802 | "version": "4.38.0", 803 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.38.0.tgz", 804 | "integrity": "sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ==", 805 | "cpu": [ 806 | "arm64" 807 | ], 808 | "dev": true, 809 | "license": "MIT", 810 | "optional": true, 811 | "os": [ 812 | "android" 813 | ] 814 | }, 815 | "node_modules/@rollup/rollup-darwin-arm64": { 816 | "version": "4.38.0", 817 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.38.0.tgz", 818 | "integrity": "sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==", 819 | "cpu": [ 820 | "arm64" 821 | ], 822 | "dev": true, 823 | "license": "MIT", 824 | "optional": true, 825 | "os": [ 826 | "darwin" 827 | ] 828 | }, 829 | "node_modules/@rollup/rollup-darwin-x64": { 830 | "version": "4.38.0", 831 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.38.0.tgz", 832 | "integrity": "sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==", 833 | "cpu": [ 834 | "x64" 835 | ], 836 | "dev": true, 837 | "license": "MIT", 838 | "optional": true, 839 | "os": [ 840 | "darwin" 841 | ] 842 | }, 843 | "node_modules/@rollup/rollup-freebsd-arm64": { 844 | "version": "4.38.0", 845 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.38.0.tgz", 846 | "integrity": "sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA==", 847 | "cpu": [ 848 | "arm64" 849 | ], 850 | "dev": true, 851 | "license": "MIT", 852 | "optional": true, 853 | "os": [ 854 | "freebsd" 855 | ] 856 | }, 857 | "node_modules/@rollup/rollup-freebsd-x64": { 858 | "version": "4.38.0", 859 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.38.0.tgz", 860 | "integrity": "sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg==", 861 | "cpu": [ 862 | "x64" 863 | ], 864 | "dev": true, 865 | "license": "MIT", 866 | "optional": true, 867 | "os": [ 868 | "freebsd" 869 | ] 870 | }, 871 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 872 | "version": "4.38.0", 873 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.38.0.tgz", 874 | "integrity": "sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg==", 875 | "cpu": [ 876 | "arm" 877 | ], 878 | "dev": true, 879 | "license": "MIT", 880 | "optional": true, 881 | "os": [ 882 | "linux" 883 | ] 884 | }, 885 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 886 | "version": "4.38.0", 887 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.38.0.tgz", 888 | "integrity": "sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg==", 889 | "cpu": [ 890 | "arm" 891 | ], 892 | "dev": true, 893 | "license": "MIT", 894 | "optional": true, 895 | "os": [ 896 | "linux" 897 | ] 898 | }, 899 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 900 | "version": "4.38.0", 901 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.38.0.tgz", 902 | "integrity": "sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA==", 903 | "cpu": [ 904 | "arm64" 905 | ], 906 | "dev": true, 907 | "license": "MIT", 908 | "optional": true, 909 | "os": [ 910 | "linux" 911 | ] 912 | }, 913 | "node_modules/@rollup/rollup-linux-arm64-musl": { 914 | "version": "4.38.0", 915 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.38.0.tgz", 916 | "integrity": "sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ==", 917 | "cpu": [ 918 | "arm64" 919 | ], 920 | "dev": true, 921 | "license": "MIT", 922 | "optional": true, 923 | "os": [ 924 | "linux" 925 | ] 926 | }, 927 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 928 | "version": "4.38.0", 929 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.38.0.tgz", 930 | "integrity": "sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg==", 931 | "cpu": [ 932 | "loong64" 933 | ], 934 | "dev": true, 935 | "license": "MIT", 936 | "optional": true, 937 | "os": [ 938 | "linux" 939 | ] 940 | }, 941 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 942 | "version": "4.38.0", 943 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.38.0.tgz", 944 | "integrity": "sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw==", 945 | "cpu": [ 946 | "ppc64" 947 | ], 948 | "dev": true, 949 | "license": "MIT", 950 | "optional": true, 951 | "os": [ 952 | "linux" 953 | ] 954 | }, 955 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 956 | "version": "4.38.0", 957 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.38.0.tgz", 958 | "integrity": "sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg==", 959 | "cpu": [ 960 | "riscv64" 961 | ], 962 | "dev": true, 963 | "license": "MIT", 964 | "optional": true, 965 | "os": [ 966 | "linux" 967 | ] 968 | }, 969 | "node_modules/@rollup/rollup-linux-riscv64-musl": { 970 | "version": "4.38.0", 971 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.38.0.tgz", 972 | "integrity": "sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA==", 973 | "cpu": [ 974 | "riscv64" 975 | ], 976 | "dev": true, 977 | "license": "MIT", 978 | "optional": true, 979 | "os": [ 980 | "linux" 981 | ] 982 | }, 983 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 984 | "version": "4.38.0", 985 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.38.0.tgz", 986 | "integrity": "sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q==", 987 | "cpu": [ 988 | "s390x" 989 | ], 990 | "dev": true, 991 | "license": "MIT", 992 | "optional": true, 993 | "os": [ 994 | "linux" 995 | ] 996 | }, 997 | "node_modules/@rollup/rollup-linux-x64-gnu": { 998 | "version": "4.38.0", 999 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.38.0.tgz", 1000 | "integrity": "sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==", 1001 | "cpu": [ 1002 | "x64" 1003 | ], 1004 | "dev": true, 1005 | "license": "MIT", 1006 | "optional": true, 1007 | "os": [ 1008 | "linux" 1009 | ] 1010 | }, 1011 | "node_modules/@rollup/rollup-linux-x64-musl": { 1012 | "version": "4.38.0", 1013 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.38.0.tgz", 1014 | "integrity": "sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g==", 1015 | "cpu": [ 1016 | "x64" 1017 | ], 1018 | "dev": true, 1019 | "license": "MIT", 1020 | "optional": true, 1021 | "os": [ 1022 | "linux" 1023 | ] 1024 | }, 1025 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 1026 | "version": "4.38.0", 1027 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.38.0.tgz", 1028 | "integrity": "sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg==", 1029 | "cpu": [ 1030 | "arm64" 1031 | ], 1032 | "dev": true, 1033 | "license": "MIT", 1034 | "optional": true, 1035 | "os": [ 1036 | "win32" 1037 | ] 1038 | }, 1039 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 1040 | "version": "4.38.0", 1041 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.38.0.tgz", 1042 | "integrity": "sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA==", 1043 | "cpu": [ 1044 | "ia32" 1045 | ], 1046 | "dev": true, 1047 | "license": "MIT", 1048 | "optional": true, 1049 | "os": [ 1050 | "win32" 1051 | ] 1052 | }, 1053 | "node_modules/@rollup/rollup-win32-x64-msvc": { 1054 | "version": "4.38.0", 1055 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.38.0.tgz", 1056 | "integrity": "sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw==", 1057 | "cpu": [ 1058 | "x64" 1059 | ], 1060 | "dev": true, 1061 | "license": "MIT", 1062 | "optional": true, 1063 | "os": [ 1064 | "win32" 1065 | ] 1066 | }, 1067 | "node_modules/@types/babel__core": { 1068 | "version": "7.20.5", 1069 | "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", 1070 | "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 1071 | "dev": true, 1072 | "license": "MIT", 1073 | "dependencies": { 1074 | "@babel/parser": "^7.20.7", 1075 | "@babel/types": "^7.20.7", 1076 | "@types/babel__generator": "*", 1077 | "@types/babel__template": "*", 1078 | "@types/babel__traverse": "*" 1079 | } 1080 | }, 1081 | "node_modules/@types/babel__generator": { 1082 | "version": "7.6.8", 1083 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", 1084 | "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", 1085 | "dev": true, 1086 | "license": "MIT", 1087 | "dependencies": { 1088 | "@babel/types": "^7.0.0" 1089 | } 1090 | }, 1091 | "node_modules/@types/babel__template": { 1092 | "version": "7.4.4", 1093 | "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", 1094 | "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 1095 | "dev": true, 1096 | "license": "MIT", 1097 | "dependencies": { 1098 | "@babel/parser": "^7.1.0", 1099 | "@babel/types": "^7.0.0" 1100 | } 1101 | }, 1102 | "node_modules/@types/babel__traverse": { 1103 | "version": "7.20.6", 1104 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", 1105 | "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", 1106 | "dev": true, 1107 | "license": "MIT", 1108 | "dependencies": { 1109 | "@babel/types": "^7.20.7" 1110 | } 1111 | }, 1112 | "node_modules/@types/estree": { 1113 | "version": "1.0.7", 1114 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", 1115 | "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", 1116 | "dev": true, 1117 | "license": "MIT" 1118 | }, 1119 | "node_modules/@types/react": { 1120 | "version": "19.0.12", 1121 | "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz", 1122 | "integrity": "sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==", 1123 | "dev": true, 1124 | "license": "MIT", 1125 | "peer": true, 1126 | "dependencies": { 1127 | "csstype": "^3.0.2" 1128 | } 1129 | }, 1130 | "node_modules/@types/react-dom": { 1131 | "version": "19.0.4", 1132 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz", 1133 | "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==", 1134 | "dev": true, 1135 | "license": "MIT", 1136 | "peerDependencies": { 1137 | "@types/react": "^19.0.0" 1138 | } 1139 | }, 1140 | "node_modules/@vitejs/plugin-react": { 1141 | "version": "4.3.4", 1142 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", 1143 | "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", 1144 | "dev": true, 1145 | "license": "MIT", 1146 | "dependencies": { 1147 | "@babel/core": "^7.26.0", 1148 | "@babel/plugin-transform-react-jsx-self": "^7.25.9", 1149 | "@babel/plugin-transform-react-jsx-source": "^7.25.9", 1150 | "@types/babel__core": "^7.20.5", 1151 | "react-refresh": "^0.14.2" 1152 | }, 1153 | "engines": { 1154 | "node": "^14.18.0 || >=16.0.0" 1155 | }, 1156 | "peerDependencies": { 1157 | "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" 1158 | } 1159 | }, 1160 | "node_modules/browserslist": { 1161 | "version": "4.24.4", 1162 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", 1163 | "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", 1164 | "dev": true, 1165 | "funding": [ 1166 | { 1167 | "type": "opencollective", 1168 | "url": "https://opencollective.com/browserslist" 1169 | }, 1170 | { 1171 | "type": "tidelift", 1172 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1173 | }, 1174 | { 1175 | "type": "github", 1176 | "url": "https://github.com/sponsors/ai" 1177 | } 1178 | ], 1179 | "license": "MIT", 1180 | "dependencies": { 1181 | "caniuse-lite": "^1.0.30001688", 1182 | "electron-to-chromium": "^1.5.73", 1183 | "node-releases": "^2.0.19", 1184 | "update-browserslist-db": "^1.1.1" 1185 | }, 1186 | "bin": { 1187 | "browserslist": "cli.js" 1188 | }, 1189 | "engines": { 1190 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1191 | } 1192 | }, 1193 | "node_modules/caniuse-lite": { 1194 | "version": "1.0.30001707", 1195 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", 1196 | "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", 1197 | "dev": true, 1198 | "funding": [ 1199 | { 1200 | "type": "opencollective", 1201 | "url": "https://opencollective.com/browserslist" 1202 | }, 1203 | { 1204 | "type": "tidelift", 1205 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1206 | }, 1207 | { 1208 | "type": "github", 1209 | "url": "https://github.com/sponsors/ai" 1210 | } 1211 | ], 1212 | "license": "CC-BY-4.0" 1213 | }, 1214 | "node_modules/convert-source-map": { 1215 | "version": "2.0.0", 1216 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 1217 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 1218 | "dev": true, 1219 | "license": "MIT" 1220 | }, 1221 | "node_modules/csstype": { 1222 | "version": "3.1.3", 1223 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1224 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 1225 | "dev": true, 1226 | "license": "MIT", 1227 | "peer": true 1228 | }, 1229 | "node_modules/debug": { 1230 | "version": "4.4.0", 1231 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 1232 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 1233 | "dev": true, 1234 | "license": "MIT", 1235 | "dependencies": { 1236 | "ms": "^2.1.3" 1237 | }, 1238 | "engines": { 1239 | "node": ">=6.0" 1240 | }, 1241 | "peerDependenciesMeta": { 1242 | "supports-color": { 1243 | "optional": true 1244 | } 1245 | } 1246 | }, 1247 | "node_modules/electron-to-chromium": { 1248 | "version": "1.5.128", 1249 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.128.tgz", 1250 | "integrity": "sha512-bo1A4HH/NS522Ws0QNFIzyPcyUUNV/yyy70Ho1xqfGYzPUme2F/xr4tlEOuM6/A538U1vDA7a4XfCd1CKRegKQ==", 1251 | "dev": true, 1252 | "license": "ISC" 1253 | }, 1254 | "node_modules/esbuild": { 1255 | "version": "0.25.1", 1256 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", 1257 | "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", 1258 | "dev": true, 1259 | "hasInstallScript": true, 1260 | "license": "MIT", 1261 | "bin": { 1262 | "esbuild": "bin/esbuild" 1263 | }, 1264 | "engines": { 1265 | "node": ">=18" 1266 | }, 1267 | "optionalDependencies": { 1268 | "@esbuild/aix-ppc64": "0.25.1", 1269 | "@esbuild/android-arm": "0.25.1", 1270 | "@esbuild/android-arm64": "0.25.1", 1271 | "@esbuild/android-x64": "0.25.1", 1272 | "@esbuild/darwin-arm64": "0.25.1", 1273 | "@esbuild/darwin-x64": "0.25.1", 1274 | "@esbuild/freebsd-arm64": "0.25.1", 1275 | "@esbuild/freebsd-x64": "0.25.1", 1276 | "@esbuild/linux-arm": "0.25.1", 1277 | "@esbuild/linux-arm64": "0.25.1", 1278 | "@esbuild/linux-ia32": "0.25.1", 1279 | "@esbuild/linux-loong64": "0.25.1", 1280 | "@esbuild/linux-mips64el": "0.25.1", 1281 | "@esbuild/linux-ppc64": "0.25.1", 1282 | "@esbuild/linux-riscv64": "0.25.1", 1283 | "@esbuild/linux-s390x": "0.25.1", 1284 | "@esbuild/linux-x64": "0.25.1", 1285 | "@esbuild/netbsd-arm64": "0.25.1", 1286 | "@esbuild/netbsd-x64": "0.25.1", 1287 | "@esbuild/openbsd-arm64": "0.25.1", 1288 | "@esbuild/openbsd-x64": "0.25.1", 1289 | "@esbuild/sunos-x64": "0.25.1", 1290 | "@esbuild/win32-arm64": "0.25.1", 1291 | "@esbuild/win32-ia32": "0.25.1", 1292 | "@esbuild/win32-x64": "0.25.1" 1293 | } 1294 | }, 1295 | "node_modules/escalade": { 1296 | "version": "3.2.0", 1297 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1298 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1299 | "dev": true, 1300 | "license": "MIT", 1301 | "engines": { 1302 | "node": ">=6" 1303 | } 1304 | }, 1305 | "node_modules/fsevents": { 1306 | "version": "2.3.3", 1307 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1308 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1309 | "dev": true, 1310 | "hasInstallScript": true, 1311 | "license": "MIT", 1312 | "optional": true, 1313 | "os": [ 1314 | "darwin" 1315 | ], 1316 | "engines": { 1317 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1318 | } 1319 | }, 1320 | "node_modules/gensync": { 1321 | "version": "1.0.0-beta.2", 1322 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1323 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1324 | "dev": true, 1325 | "license": "MIT", 1326 | "engines": { 1327 | "node": ">=6.9.0" 1328 | } 1329 | }, 1330 | "node_modules/globals": { 1331 | "version": "11.12.0", 1332 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1333 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1334 | "dev": true, 1335 | "license": "MIT", 1336 | "engines": { 1337 | "node": ">=4" 1338 | } 1339 | }, 1340 | "node_modules/js-tokens": { 1341 | "version": "4.0.0", 1342 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1343 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1344 | "dev": true, 1345 | "license": "MIT" 1346 | }, 1347 | "node_modules/jsesc": { 1348 | "version": "3.1.0", 1349 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 1350 | "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 1351 | "dev": true, 1352 | "license": "MIT", 1353 | "bin": { 1354 | "jsesc": "bin/jsesc" 1355 | }, 1356 | "engines": { 1357 | "node": ">=6" 1358 | } 1359 | }, 1360 | "node_modules/json5": { 1361 | "version": "2.2.3", 1362 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 1363 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 1364 | "dev": true, 1365 | "license": "MIT", 1366 | "bin": { 1367 | "json5": "lib/cli.js" 1368 | }, 1369 | "engines": { 1370 | "node": ">=6" 1371 | } 1372 | }, 1373 | "node_modules/lru-cache": { 1374 | "version": "5.1.1", 1375 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1376 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1377 | "dev": true, 1378 | "license": "ISC", 1379 | "dependencies": { 1380 | "yallist": "^3.0.2" 1381 | } 1382 | }, 1383 | "node_modules/ms": { 1384 | "version": "2.1.3", 1385 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1386 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1387 | "dev": true, 1388 | "license": "MIT" 1389 | }, 1390 | "node_modules/nanoid": { 1391 | "version": "3.3.11", 1392 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 1393 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1394 | "dev": true, 1395 | "funding": [ 1396 | { 1397 | "type": "github", 1398 | "url": "https://github.com/sponsors/ai" 1399 | } 1400 | ], 1401 | "license": "MIT", 1402 | "bin": { 1403 | "nanoid": "bin/nanoid.cjs" 1404 | }, 1405 | "engines": { 1406 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1407 | } 1408 | }, 1409 | "node_modules/node-releases": { 1410 | "version": "2.0.19", 1411 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", 1412 | "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", 1413 | "dev": true, 1414 | "license": "MIT" 1415 | }, 1416 | "node_modules/picocolors": { 1417 | "version": "1.1.1", 1418 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1419 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1420 | "dev": true, 1421 | "license": "ISC" 1422 | }, 1423 | "node_modules/postcss": { 1424 | "version": "8.5.3", 1425 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 1426 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 1427 | "dev": true, 1428 | "funding": [ 1429 | { 1430 | "type": "opencollective", 1431 | "url": "https://opencollective.com/postcss/" 1432 | }, 1433 | { 1434 | "type": "tidelift", 1435 | "url": "https://tidelift.com/funding/github/npm/postcss" 1436 | }, 1437 | { 1438 | "type": "github", 1439 | "url": "https://github.com/sponsors/ai" 1440 | } 1441 | ], 1442 | "license": "MIT", 1443 | "dependencies": { 1444 | "nanoid": "^3.3.8", 1445 | "picocolors": "^1.1.1", 1446 | "source-map-js": "^1.2.1" 1447 | }, 1448 | "engines": { 1449 | "node": "^10 || ^12 || >=14" 1450 | } 1451 | }, 1452 | "node_modules/react": { 1453 | "version": "19.1.0", 1454 | "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", 1455 | "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", 1456 | "license": "MIT", 1457 | "engines": { 1458 | "node": ">=0.10.0" 1459 | } 1460 | }, 1461 | "node_modules/react-dom": { 1462 | "version": "19.1.0", 1463 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", 1464 | "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", 1465 | "license": "MIT", 1466 | "dependencies": { 1467 | "scheduler": "^0.26.0" 1468 | }, 1469 | "peerDependencies": { 1470 | "react": "^19.1.0" 1471 | } 1472 | }, 1473 | "node_modules/react-refresh": { 1474 | "version": "0.14.2", 1475 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", 1476 | "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", 1477 | "dev": true, 1478 | "license": "MIT", 1479 | "engines": { 1480 | "node": ">=0.10.0" 1481 | } 1482 | }, 1483 | "node_modules/reconnecting-websocket": { 1484 | "version": "4.4.0", 1485 | "resolved": "https://registry.npmjs.org/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz", 1486 | "integrity": "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==", 1487 | "license": "MIT" 1488 | }, 1489 | "node_modules/rollup": { 1490 | "version": "4.38.0", 1491 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.38.0.tgz", 1492 | "integrity": "sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==", 1493 | "dev": true, 1494 | "license": "MIT", 1495 | "dependencies": { 1496 | "@types/estree": "1.0.7" 1497 | }, 1498 | "bin": { 1499 | "rollup": "dist/bin/rollup" 1500 | }, 1501 | "engines": { 1502 | "node": ">=18.0.0", 1503 | "npm": ">=8.0.0" 1504 | }, 1505 | "optionalDependencies": { 1506 | "@rollup/rollup-android-arm-eabi": "4.38.0", 1507 | "@rollup/rollup-android-arm64": "4.38.0", 1508 | "@rollup/rollup-darwin-arm64": "4.38.0", 1509 | "@rollup/rollup-darwin-x64": "4.38.0", 1510 | "@rollup/rollup-freebsd-arm64": "4.38.0", 1511 | "@rollup/rollup-freebsd-x64": "4.38.0", 1512 | "@rollup/rollup-linux-arm-gnueabihf": "4.38.0", 1513 | "@rollup/rollup-linux-arm-musleabihf": "4.38.0", 1514 | "@rollup/rollup-linux-arm64-gnu": "4.38.0", 1515 | "@rollup/rollup-linux-arm64-musl": "4.38.0", 1516 | "@rollup/rollup-linux-loongarch64-gnu": "4.38.0", 1517 | "@rollup/rollup-linux-powerpc64le-gnu": "4.38.0", 1518 | "@rollup/rollup-linux-riscv64-gnu": "4.38.0", 1519 | "@rollup/rollup-linux-riscv64-musl": "4.38.0", 1520 | "@rollup/rollup-linux-s390x-gnu": "4.38.0", 1521 | "@rollup/rollup-linux-x64-gnu": "4.38.0", 1522 | "@rollup/rollup-linux-x64-musl": "4.38.0", 1523 | "@rollup/rollup-win32-arm64-msvc": "4.38.0", 1524 | "@rollup/rollup-win32-ia32-msvc": "4.38.0", 1525 | "@rollup/rollup-win32-x64-msvc": "4.38.0", 1526 | "fsevents": "~2.3.2" 1527 | } 1528 | }, 1529 | "node_modules/scheduler": { 1530 | "version": "0.26.0", 1531 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", 1532 | "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", 1533 | "license": "MIT" 1534 | }, 1535 | "node_modules/semver": { 1536 | "version": "6.3.1", 1537 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 1538 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 1539 | "dev": true, 1540 | "license": "ISC", 1541 | "bin": { 1542 | "semver": "bin/semver.js" 1543 | } 1544 | }, 1545 | "node_modules/source-map-js": { 1546 | "version": "1.2.1", 1547 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1548 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1549 | "dev": true, 1550 | "license": "BSD-3-Clause", 1551 | "engines": { 1552 | "node": ">=0.10.0" 1553 | } 1554 | }, 1555 | "node_modules/tinybase": { 1556 | "version": "6.0.0", 1557 | "resolved": "https://registry.npmjs.org/tinybase/-/tinybase-6.0.0.tgz", 1558 | "integrity": "sha512-wjIiS8iNPS/DNvFvlYEAOrZq7+tcAoFn5+xjW8ZUcCR11DafP1aJ3n1tDRTI9Nfq+Vz5Axj9kOmUTvuv2lyAVA==", 1559 | "license": "MIT", 1560 | "peerDependencies": { 1561 | "@automerge/automerge-repo": "^1.2.1", 1562 | "@cloudflare/workers-types": "^4.20250327.0", 1563 | "@electric-sql/pglite": "^0.2.17", 1564 | "@libsql/client": "^0.15.1", 1565 | "@powersync/common": "^1.26.0", 1566 | "@sqlite.org/sqlite-wasm": "^3.49.1-build2", 1567 | "@vlcn.io/crsqlite-wasm": "^0.16.0", 1568 | "electric-sql": "^0.12.1", 1569 | "expo": "^52.0.4", 1570 | "expo-sqlite": "^15.1.3", 1571 | "partykit": "^0.0.114", 1572 | "partysocket": "^1.1.3", 1573 | "postgres": "^3.4.5", 1574 | "react": "^19.0.0", 1575 | "react-dom": "^19.0.0", 1576 | "sqlite3": "^5.1.7", 1577 | "ws": "^8.18.1", 1578 | "yjs": "^13.6.24" 1579 | }, 1580 | "peerDependenciesMeta": { 1581 | "@automerge/automerge-repo": { 1582 | "optional": true 1583 | }, 1584 | "@cloudflare/workers-types": { 1585 | "optional": true 1586 | }, 1587 | "@electric-sql/pglite": { 1588 | "optional": true 1589 | }, 1590 | "@libsql/client": { 1591 | "optional": true 1592 | }, 1593 | "@powersync/common": { 1594 | "optional": true 1595 | }, 1596 | "@sqlite.org/sqlite-wasm": { 1597 | "optional": true 1598 | }, 1599 | "@vlcn.io/crsqlite-wasm": { 1600 | "optional": true 1601 | }, 1602 | "electric-sql": { 1603 | "optional": true 1604 | }, 1605 | "expo": { 1606 | "optional": true 1607 | }, 1608 | "expo-sqlite": { 1609 | "optional": true 1610 | }, 1611 | "partykit": { 1612 | "optional": true 1613 | }, 1614 | "partysocket": { 1615 | "optional": true 1616 | }, 1617 | "postgres": { 1618 | "optional": true 1619 | }, 1620 | "prettier": { 1621 | "optional": true 1622 | }, 1623 | "react": { 1624 | "optional": true 1625 | }, 1626 | "react-dom": { 1627 | "optional": true 1628 | }, 1629 | "sqlite3": { 1630 | "optional": true 1631 | }, 1632 | "ws": { 1633 | "optional": true 1634 | }, 1635 | "yjs": { 1636 | "optional": true 1637 | } 1638 | } 1639 | }, 1640 | "node_modules/typescript": { 1641 | "version": "5.8.2", 1642 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", 1643 | "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", 1644 | "dev": true, 1645 | "license": "Apache-2.0", 1646 | "bin": { 1647 | "tsc": "bin/tsc", 1648 | "tsserver": "bin/tsserver" 1649 | }, 1650 | "engines": { 1651 | "node": ">=14.17" 1652 | } 1653 | }, 1654 | "node_modules/update-browserslist-db": { 1655 | "version": "1.1.3", 1656 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", 1657 | "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", 1658 | "dev": true, 1659 | "funding": [ 1660 | { 1661 | "type": "opencollective", 1662 | "url": "https://opencollective.com/browserslist" 1663 | }, 1664 | { 1665 | "type": "tidelift", 1666 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1667 | }, 1668 | { 1669 | "type": "github", 1670 | "url": "https://github.com/sponsors/ai" 1671 | } 1672 | ], 1673 | "license": "MIT", 1674 | "dependencies": { 1675 | "escalade": "^3.2.0", 1676 | "picocolors": "^1.1.1" 1677 | }, 1678 | "bin": { 1679 | "update-browserslist-db": "cli.js" 1680 | }, 1681 | "peerDependencies": { 1682 | "browserslist": ">= 4.21.0" 1683 | } 1684 | }, 1685 | "node_modules/vite": { 1686 | "version": "6.2.3", 1687 | "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.3.tgz", 1688 | "integrity": "sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==", 1689 | "dev": true, 1690 | "license": "MIT", 1691 | "dependencies": { 1692 | "esbuild": "^0.25.0", 1693 | "postcss": "^8.5.3", 1694 | "rollup": "^4.30.1" 1695 | }, 1696 | "bin": { 1697 | "vite": "bin/vite.js" 1698 | }, 1699 | "engines": { 1700 | "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 1701 | }, 1702 | "funding": { 1703 | "url": "https://github.com/vitejs/vite?sponsor=1" 1704 | }, 1705 | "optionalDependencies": { 1706 | "fsevents": "~2.3.3" 1707 | }, 1708 | "peerDependencies": { 1709 | "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 1710 | "jiti": ">=1.21.0", 1711 | "less": "*", 1712 | "lightningcss": "^1.21.0", 1713 | "sass": "*", 1714 | "sass-embedded": "*", 1715 | "stylus": "*", 1716 | "sugarss": "*", 1717 | "terser": "^5.16.0", 1718 | "tsx": "^4.8.1", 1719 | "yaml": "^2.4.2" 1720 | }, 1721 | "peerDependenciesMeta": { 1722 | "@types/node": { 1723 | "optional": true 1724 | }, 1725 | "jiti": { 1726 | "optional": true 1727 | }, 1728 | "less": { 1729 | "optional": true 1730 | }, 1731 | "lightningcss": { 1732 | "optional": true 1733 | }, 1734 | "sass": { 1735 | "optional": true 1736 | }, 1737 | "sass-embedded": { 1738 | "optional": true 1739 | }, 1740 | "stylus": { 1741 | "optional": true 1742 | }, 1743 | "sugarss": { 1744 | "optional": true 1745 | }, 1746 | "terser": { 1747 | "optional": true 1748 | }, 1749 | "tsx": { 1750 | "optional": true 1751 | }, 1752 | "yaml": { 1753 | "optional": true 1754 | } 1755 | } 1756 | }, 1757 | "node_modules/yallist": { 1758 | "version": "3.1.1", 1759 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1760 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 1761 | "dev": true, 1762 | "license": "ISC" 1763 | } 1764 | } 1765 | } 1766 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-tinybase-ts-react-sync-client", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "dev": "vite --force", 6 | "build": "tsc && vite build", 7 | "preview": "vite preview" 8 | }, 9 | "devDependencies": { 10 | "@types/react-dom": "^19.0.4", 11 | "@vitejs/plugin-react": "^4.3.4", 12 | "typescript": "^5.8.2", 13 | "vite": "^6.2.3" 14 | }, 15 | "dependencies": { 16 | "react": "^19.1.0", 17 | "react-dom": "^19.1.0", 18 | "reconnecting-websocket": "^4.4.0", 19 | "tinybase": "^6.0.0" 20 | } 21 | } -------------------------------------------------------------------------------- /client/public/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | -------------------------------------------------------------------------------- /client/src/App.tsx: -------------------------------------------------------------------------------- 1 | import React, { StrictMode } from 'react'; 2 | import ReconnectingWebSocket from 'reconnecting-websocket'; 3 | import { createMergeableStore, MergeableStore } from 'tinybase'; 4 | import { createLocalPersister } from 'tinybase/persisters/persister-browser'; 5 | import { createWsSynchronizer } from 'tinybase/synchronizers/synchronizer-ws-client'; 6 | import { 7 | Provider, 8 | useCreateMergeableStore, 9 | useCreatePersister, 10 | useCreateSynchronizer, 11 | } from 'tinybase/ui-react'; 12 | import { 13 | SortedTableInHtmlTable, 14 | ValuesInHtmlTable, 15 | } from 'tinybase/ui-react-dom'; 16 | import { Inspector } from 'tinybase/ui-react-inspector'; 17 | import { Buttons } from './Buttons'; 18 | 19 | const SERVER_SCHEME = 'wss://'; 20 | const SERVER = 'vite.tinybase.cloud'; 21 | 22 | export const App = () => { 23 | const serverPathId = location.pathname; 24 | 25 | const store = useCreateMergeableStore(createMergeableStore); 26 | 27 | useCreatePersister( 28 | store, 29 | (store) => createLocalPersister(store, 'local://' + SERVER + serverPathId), 30 | [], 31 | async (persister) => { 32 | await persister.startAutoLoad([ 33 | { 34 | pets: { '0': { name: 'fido', species: 'dog' } }, 35 | species: { 36 | dog: { price: 5 }, 37 | cat: { price: 4 }, 38 | fish: { price: 2 }, 39 | worm: { price: 1 }, 40 | parrot: { price: 3 }, 41 | }, 42 | }, 43 | { counter: 0 }, 44 | ]); 45 | await persister.startAutoSave(); 46 | } 47 | ); 48 | 49 | useCreateSynchronizer(store, async (store: MergeableStore) => { 50 | const synchronizer = await createWsSynchronizer( 51 | store, 52 | new ReconnectingWebSocket(SERVER_SCHEME + SERVER + serverPathId), 53 | 1 54 | ); 55 | await synchronizer.startSync(); 56 | 57 | // If the websocket reconnects in the future, do another explicit sync. 58 | synchronizer.getWebSocket().addEventListener('open', () => { 59 | synchronizer.load().then(() => synchronizer.save()); 60 | }); 61 | 62 | return synchronizer; 63 | }); 64 | 65 | return ( 66 | 67 | 68 |
69 |

70 | 71 | TinyBase & Synchronization 72 |

73 | To demonstrate synchronization,{' '} 74 | open this exact URL in multiple incognito 75 | browser windows, or even other browsers altogether. 76 |
77 | 78 |
79 |

Values

80 | 81 |
82 |
83 |

Pets Table

84 | 92 |
93 | 94 |
95 |
96 | ); 97 | }; 98 | -------------------------------------------------------------------------------- /client/src/Buttons.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { ValueOrUndefined } from 'tinybase'; 3 | import { useAddRowCallback, useSetValueCallback } from 'tinybase/ui-react'; 4 | 5 | // Convenience function for generating a random integer 6 | const getRandom = (max = 100) => Math.floor(Math.random() * max); 7 | 8 | export const Buttons = () => { 9 | // Attach events to the buttons to mutate the data in the TinyBase Store 10 | const handleCount = useSetValueCallback( 11 | 'counter', 12 | () => (value: ValueOrUndefined) => ((value ?? 0) as number) + 1 13 | ); 14 | const handleRandom = useSetValueCallback('random', () => getRandom()); 15 | const handleAddPet = useAddRowCallback('pets', (_, store) => ({ 16 | name: ['fido', 'felix', 'bubbles', 'lowly', 'polly'][getRandom(5)], 17 | species: store.getRowIds('species')[getRandom(5)], 18 | })); 19 | 20 | return ( 21 |
22 | 23 | 24 | 25 |
26 | ); 27 | }; 28 | -------------------------------------------------------------------------------- /client/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | color: #bbb; 3 | background: #111; 4 | font-family: 'Inter', sans-serif; 5 | user-select: none; 6 | } 7 | 8 | #app { 9 | max-width: 40rem; 10 | margin: 2rem auto; 11 | display: grid; 12 | grid-template-columns: 1fr; 13 | column-gap: 2rem; 14 | align-items: start; 15 | row-gap: 1rem; 16 | } 17 | 18 | h1 { 19 | font-weight: 600; 20 | img { 21 | margin-right: 1rem; 22 | height: 2.5rem; 23 | vertical-align: text-bottom; 24 | } 25 | } 26 | 27 | h2 { 28 | text-align: center; 29 | font-weight: 800; 30 | font-size: 1.3rem; 31 | margin: 1rem 0 0; 32 | } 33 | 34 | a { 35 | color: unset; 36 | } 37 | 38 | #buttons { 39 | border: solid #666; 40 | border-width: 1px 0; 41 | text-align: center; 42 | } 43 | 44 | #buttons button { 45 | border: 1px solid #666; 46 | border-radius: 0.25rem; 47 | padding: 0.5rem 1rem; 48 | background: #222; 49 | color: #fff; 50 | font-family: inherit; 51 | font-weight: 800; 52 | font-size: 0.8rem; 53 | width: 10rem; 54 | margin: 1rem; 55 | } 56 | #buttons button:hover { 57 | border-color: #d81b60; 58 | } 59 | 60 | table { 61 | border-collapse: collapse; 62 | font-size: inherit; 63 | line-height: inherit; 64 | margin-top: 0.5rem; 65 | table-layout: fixed; 66 | width: 100%; 67 | margin-bottom: 2rem; 68 | caption-side: bottom; 69 | } 70 | table caption { 71 | text-align: left; 72 | button { 73 | border: 0; 74 | margin-right: 0.25rem; 75 | } 76 | } 77 | table caption button { 78 | line-height: 0.7rem; 79 | margin: 0 0.25rem 0 0; 80 | vertical-align: middle; 81 | } 82 | th, 83 | td { 84 | padding: 0.25rem 0.5rem 0.25rem 0; 85 | text-align: left; 86 | } 87 | thead th, 88 | thead td { 89 | border: solid #999; 90 | border-width: 1px 0; 91 | } 92 | tbody th, 93 | tbody td { 94 | border-bottom: 1px solid #333; 95 | } 96 | 97 | table.sortedTable thead th { 98 | cursor: pointer; 99 | } 100 | 101 | @media (min-width: 40rem) { 102 | #app { 103 | grid-template-columns: 1fr 1fr; 104 | } 105 | header, 106 | #buttons { 107 | grid-column: span 2; 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /client/src/index.tsx: -------------------------------------------------------------------------------- 1 | import './index.css'; 2 | import React from 'react'; 3 | import ReactDOM from 'react-dom/client'; 4 | import { getUniqueId } from 'tinybase'; 5 | import { App } from './App'; 6 | 7 | addEventListener('load', () => { 8 | const serverPathId = location.pathname; 9 | if (serverPathId == '/') { 10 | location.assign('/' + getUniqueId()); 11 | return; 12 | } 13 | 14 | ReactDOM.createRoot(document.getElementById('app')!).render(); 15 | }); 16 | -------------------------------------------------------------------------------- /client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noEmit": true, 15 | "jsx": "react-jsx", 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noFallthroughCasesInSwitch": true 22 | }, 23 | "include": ["client/src"], 24 | "references": [{ "path": "tsconfig.node.json" }] 25 | } 26 | -------------------------------------------------------------------------------- /client/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /client/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | export default defineConfig({ plugins: [react()] }); 5 | -------------------------------------------------------------------------------- /server/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "@typescript-eslint/parser", 3 | "plugins": ["@typescript-eslint"], 4 | "extends": [ 5 | "eslint:recommended", 6 | "plugin:@typescript-eslint/eslint-recommended", 7 | "plugin:@typescript-eslint/recommended", 8 | "prettier" 9 | ], 10 | "env": {"browser": true, "es6": true, "node": true}, 11 | "globals": {"page": true, "browser": true, "context": true}, 12 | "parserOptions": { 13 | "ecmaVersion": 7, 14 | "ecmaFeatures": { 15 | "experimentalObjectRestSpread": true, 16 | "globalReturn": true 17 | }, 18 | "sourceType": "module" 19 | }, 20 | "rules": { 21 | "@typescript-eslint/no-explicit-any": 0, 22 | "@typescript-eslint/no-var-requires": 0, 23 | "@typescript-eslint/no-unused-vars": [ 24 | 2, 25 | {"argsIgnorePattern": "^_.*", "varsIgnorePattern": "^_.*"} 26 | ], 27 | "max-len": [2, {"code": 80, "ignorePattern": "^(im|ex)ports?\\W.*"}], 28 | "no-var": 2, 29 | "no-console": 2, 30 | "object-curly-spacing": [2, "never"], 31 | "comma-dangle": [ 32 | 2, 33 | { 34 | "arrays": "always-multiline", 35 | "objects": "always-multiline", 36 | "imports": "always-multiline", 37 | "exports": "always-multiline", 38 | "functions": "always-multiline" 39 | } 40 | ], 41 | "indent": 0, 42 | "no-empty": [2, {"allowEmptyCatch": true}], 43 | "linebreak-style": [2, "unix"], 44 | "space-infix-ops": 2, 45 | "quotes": [2, "single", {"allowTemplateLiterals": true}], 46 | "semi": [2, "always"], 47 | "sort-keys": 0, 48 | "sort-imports": 2, 49 | "no-multiple-empty-lines": [2, {"max": 1}] 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /server/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": false, 3 | "singleQuote": true, 4 | "trailingComma": "all" 5 | } -------------------------------------------------------------------------------- /server/bun.lock: -------------------------------------------------------------------------------- 1 | { 2 | "lockfileVersion": 1, 3 | "workspaces": { 4 | "": { 5 | "name": "vite-tinybase-ts-react-sync-durable-object-server", 6 | "dependencies": { 7 | "tinybase": "^6.0.0", 8 | }, 9 | "devDependencies": { 10 | "@cloudflare/workers-types": "^4.20250327.0", 11 | "typescript": "^5.8.2", 12 | "wrangler": "^4.6.0", 13 | }, 14 | }, 15 | }, 16 | "packages": { 17 | "@cloudflare/kv-asset-handler": ["@cloudflare/kv-asset-handler@0.4.0", "", { "dependencies": { "mime": "^3.0.0" } }, "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA=="], 18 | 19 | "@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.3.1", "", { "peerDependencies": { "unenv": "2.0.0-rc.15", "workerd": "^1.20250320.0" }, "optionalPeers": ["workerd"] }, "sha512-Xq57Qd+ADpt6hibcVBO0uLG9zzRgyRhfCUgBT9s+g3+3Ivg5zDyVgLFy40ES1VdNcu8rPNSivm9A+kGP5IVaPg=="], 20 | 21 | "@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20250321.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-y273GfLaNCxkL8hTfo0c8FZKkOPdq+CPZAKJXPWB+YpS1JCOULu6lNTptpD7ZtF14dTYPkn5Weug31TTlviJmw=="], 22 | 23 | "@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20250321.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-qvf7/gkkQq7fAsoMlntJSimN/WfwQqxi2oL0aWZMGodTvs/yRHO2I4oE0eOihVdK1BXyBHJXNxEvNDBjF0+Yuw=="], 24 | 25 | "@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20250321.0", "", { "os": "linux", "cpu": "x64" }, "sha512-AEp3xjWFrNPO/h0StCOgOb0bWCcNThnkESpy91Wf4mfUF2p7tOCdp37Nk/1QIRqSxnfv4Hgxyi7gcWud9cJuMw=="], 26 | 27 | "@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20250321.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-wRWyMIoPIS1UBXCisW0FYTgGsfZD4AVS0hXA5nuLc0c21CvzZpmmTjqEWMcwPFenwy/MNL61NautVOC4qJqQ3Q=="], 28 | 29 | "@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20250321.0", "", { "os": "win32", "cpu": "x64" }, "sha512-8vYP3QYO0zo2faUDfWl88jjfUvz7Si9GS3mUYaTh/TR9LcAUtsO7muLxPamqEyoxNFtbQgy08R4rTid94KRi3w=="], 30 | 31 | "@cloudflare/workers-types": ["@cloudflare/workers-types@4.20250327.0", "", {}, "sha512-rkoGnSY/GgBLCuhjZMIC3mt0jjqqvL17uOK92OI4eivmE+pMFOAchowDxIWOzDyYe5vwNCakbCeIM/FrSmwGJA=="], 32 | 33 | "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], 34 | 35 | "@emnapi/runtime": ["@emnapi/runtime@1.4.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw=="], 36 | 37 | "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.24.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA=="], 38 | 39 | "@esbuild/android-arm": ["@esbuild/android-arm@0.24.2", "", { "os": "android", "cpu": "arm" }, "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q=="], 40 | 41 | "@esbuild/android-arm64": ["@esbuild/android-arm64@0.24.2", "", { "os": "android", "cpu": "arm64" }, "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg=="], 42 | 43 | "@esbuild/android-x64": ["@esbuild/android-x64@0.24.2", "", { "os": "android", "cpu": "x64" }, "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw=="], 44 | 45 | "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.24.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA=="], 46 | 47 | "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.24.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA=="], 48 | 49 | "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.24.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg=="], 50 | 51 | "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.24.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q=="], 52 | 53 | "@esbuild/linux-arm": ["@esbuild/linux-arm@0.24.2", "", { "os": "linux", "cpu": "arm" }, "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA=="], 54 | 55 | "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.24.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg=="], 56 | 57 | "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.24.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw=="], 58 | 59 | "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ=="], 60 | 61 | "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw=="], 62 | 63 | "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.24.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw=="], 64 | 65 | "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q=="], 66 | 67 | "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.24.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw=="], 68 | 69 | "@esbuild/linux-x64": ["@esbuild/linux-x64@0.24.2", "", { "os": "linux", "cpu": "x64" }, "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q=="], 70 | 71 | "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.24.2", "", { "os": "none", "cpu": "arm64" }, "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw=="], 72 | 73 | "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.24.2", "", { "os": "none", "cpu": "x64" }, "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw=="], 74 | 75 | "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.24.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A=="], 76 | 77 | "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.24.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA=="], 78 | 79 | "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.24.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig=="], 80 | 81 | "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.24.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ=="], 82 | 83 | "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.24.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA=="], 84 | 85 | "@esbuild/win32-x64": ["@esbuild/win32-x64@0.24.2", "", { "os": "win32", "cpu": "x64" }, "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg=="], 86 | 87 | "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], 88 | 89 | "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.0.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ=="], 90 | 91 | "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.0.4" }, "os": "darwin", "cpu": "x64" }, "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q=="], 92 | 93 | "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.0.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg=="], 94 | 95 | "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.0.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ=="], 96 | 97 | "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.0.5", "", { "os": "linux", "cpu": "arm" }, "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g=="], 98 | 99 | "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.0.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA=="], 100 | 101 | "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.0.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA=="], 102 | 103 | "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.0.4", "", { "os": "linux", "cpu": "x64" }, "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw=="], 104 | 105 | "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.0.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA=="], 106 | 107 | "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.0.4", "", { "os": "linux", "cpu": "x64" }, "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw=="], 108 | 109 | "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.0.5" }, "os": "linux", "cpu": "arm" }, "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ=="], 110 | 111 | "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.0.4" }, "os": "linux", "cpu": "arm64" }, "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA=="], 112 | 113 | "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.0.4" }, "os": "linux", "cpu": "s390x" }, "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q=="], 114 | 115 | "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.0.4" }, "os": "linux", "cpu": "x64" }, "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA=="], 116 | 117 | "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" }, "os": "linux", "cpu": "arm64" }, "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g=="], 118 | 119 | "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.0.4" }, "os": "linux", "cpu": "x64" }, "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw=="], 120 | 121 | "@img/sharp-wasm32": ["@img/sharp-wasm32@0.33.5", "", { "dependencies": { "@emnapi/runtime": "^1.2.0" }, "cpu": "none" }, "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg=="], 122 | 123 | "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.33.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ=="], 124 | 125 | "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.33.5", "", { "os": "win32", "cpu": "x64" }, "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg=="], 126 | 127 | "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], 128 | 129 | "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], 130 | 131 | "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], 132 | 133 | "acorn": ["acorn@8.14.0", "", { "bin": "bin/acorn" }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], 134 | 135 | "acorn-walk": ["acorn-walk@8.3.2", "", {}, "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A=="], 136 | 137 | "as-table": ["as-table@1.0.55", "", { "dependencies": { "printable-characters": "^1.0.42" } }, "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ=="], 138 | 139 | "blake3-wasm": ["blake3-wasm@2.1.5", "", {}, "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g=="], 140 | 141 | "color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], 142 | 143 | "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], 144 | 145 | "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], 146 | 147 | "color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], 148 | 149 | "cookie": ["cookie@0.5.0", "", {}, "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="], 150 | 151 | "data-uri-to-buffer": ["data-uri-to-buffer@2.0.2", "", {}, "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA=="], 152 | 153 | "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], 154 | 155 | "detect-libc": ["detect-libc@2.0.3", "", {}, "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw=="], 156 | 157 | "esbuild": ["esbuild@0.24.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.24.2", "@esbuild/android-arm": "0.24.2", "@esbuild/android-arm64": "0.24.2", "@esbuild/android-x64": "0.24.2", "@esbuild/darwin-arm64": "0.24.2", "@esbuild/darwin-x64": "0.24.2", "@esbuild/freebsd-arm64": "0.24.2", "@esbuild/freebsd-x64": "0.24.2", "@esbuild/linux-arm": "0.24.2", "@esbuild/linux-arm64": "0.24.2", "@esbuild/linux-ia32": "0.24.2", "@esbuild/linux-loong64": "0.24.2", "@esbuild/linux-mips64el": "0.24.2", "@esbuild/linux-ppc64": "0.24.2", "@esbuild/linux-riscv64": "0.24.2", "@esbuild/linux-s390x": "0.24.2", "@esbuild/linux-x64": "0.24.2", "@esbuild/netbsd-arm64": "0.24.2", "@esbuild/netbsd-x64": "0.24.2", "@esbuild/openbsd-arm64": "0.24.2", "@esbuild/openbsd-x64": "0.24.2", "@esbuild/sunos-x64": "0.24.2", "@esbuild/win32-arm64": "0.24.2", "@esbuild/win32-ia32": "0.24.2", "@esbuild/win32-x64": "0.24.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA=="], 158 | 159 | "exit-hook": ["exit-hook@2.2.1", "", {}, "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw=="], 160 | 161 | "exsolve": ["exsolve@1.0.4", "", {}, "sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw=="], 162 | 163 | "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 164 | 165 | "get-source": ["get-source@2.0.12", "", { "dependencies": { "data-uri-to-buffer": "^2.0.0", "source-map": "^0.6.1" } }, "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w=="], 166 | 167 | "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], 168 | 169 | "is-arrayish": ["is-arrayish@0.3.2", "", {}, "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="], 170 | 171 | "mime": ["mime@3.0.0", "", { "bin": "cli.js" }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="], 172 | 173 | "miniflare": ["miniflare@4.20250321.1", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "acorn": "8.14.0", "acorn-walk": "8.3.2", "exit-hook": "2.2.1", "glob-to-regexp": "0.4.1", "stoppable": "1.1.0", "undici": "^5.28.5", "workerd": "1.20250321.0", "ws": "8.18.0", "youch": "3.2.3", "zod": "3.22.3" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-pQuVtF6vQ1zMvPCo3Z19mzSFjgnlEnybzNzAJZipsqIk6kMXpYBZq+d8cWmeQFkBYlgeZKeKJ4EBKT6KapfTNg=="], 174 | 175 | "mustache": ["mustache@4.2.0", "", { "bin": "bin/mustache" }, "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="], 176 | 177 | "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], 178 | 179 | "path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="], 180 | 181 | "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], 182 | 183 | "printable-characters": ["printable-characters@1.0.42", "", {}, "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ=="], 184 | 185 | "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], 186 | 187 | "sharp": ["sharp@0.33.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.6.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.33.5", "@img/sharp-darwin-x64": "0.33.5", "@img/sharp-libvips-darwin-arm64": "1.0.4", "@img/sharp-libvips-darwin-x64": "1.0.4", "@img/sharp-libvips-linux-arm": "1.0.5", "@img/sharp-libvips-linux-arm64": "1.0.4", "@img/sharp-libvips-linux-s390x": "1.0.4", "@img/sharp-libvips-linux-x64": "1.0.4", "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", "@img/sharp-libvips-linuxmusl-x64": "1.0.4", "@img/sharp-linux-arm": "0.33.5", "@img/sharp-linux-arm64": "0.33.5", "@img/sharp-linux-s390x": "0.33.5", "@img/sharp-linux-x64": "0.33.5", "@img/sharp-linuxmusl-arm64": "0.33.5", "@img/sharp-linuxmusl-x64": "0.33.5", "@img/sharp-wasm32": "0.33.5", "@img/sharp-win32-ia32": "0.33.5", "@img/sharp-win32-x64": "0.33.5" } }, "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw=="], 188 | 189 | "simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="], 190 | 191 | "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], 192 | 193 | "stacktracey": ["stacktracey@2.1.8", "", { "dependencies": { "as-table": "^1.0.36", "get-source": "^2.0.12" } }, "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw=="], 194 | 195 | "stoppable": ["stoppable@1.1.0", "", {}, "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw=="], 196 | 197 | "tinybase": ["tinybase@6.0.0", "", { "peerDependencies": { "@automerge/automerge-repo": "^1.2.1", "@cloudflare/workers-types": "^4.20250327.0", "@electric-sql/pglite": "^0.2.17", "@libsql/client": "^0.15.1", "@powersync/common": "^1.26.0", "@sqlite.org/sqlite-wasm": "^3.49.1-build2", "@vlcn.io/crsqlite-wasm": "^0.16.0", "electric-sql": "^0.12.1", "expo": "^52.0.4", "expo-sqlite": "^15.1.3", "partykit": "^0.0.114", "partysocket": "^1.1.3", "postgres": "^3.4.5", "react": "^19.0.0", "react-dom": "^19.0.0", "sqlite3": "^5.1.7", "ws": "^8.18.1", "yjs": "^13.6.24" }, "optionalPeers": ["@automerge/automerge-repo", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@powersync/common", "@sqlite.org/sqlite-wasm", "@vlcn.io/crsqlite-wasm", "electric-sql", "expo", "expo-sqlite", "partykit", "partysocket", "postgres", "react", "react-dom", "sqlite3", "ws", "yjs"] }, "sha512-wjIiS8iNPS/DNvFvlYEAOrZq7+tcAoFn5+xjW8ZUcCR11DafP1aJ3n1tDRTI9Nfq+Vz5Axj9kOmUTvuv2lyAVA=="], 198 | 199 | "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 200 | 201 | "typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], 202 | 203 | "ufo": ["ufo@1.5.4", "", {}, "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ=="], 204 | 205 | "undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], 206 | 207 | "unenv": ["unenv@2.0.0-rc.15", "", { "dependencies": { "defu": "^6.1.4", "exsolve": "^1.0.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "ufo": "^1.5.4" } }, "sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA=="], 208 | 209 | "workerd": ["workerd@1.20250321.0", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20250321.0", "@cloudflare/workerd-darwin-arm64": "1.20250321.0", "@cloudflare/workerd-linux-64": "1.20250321.0", "@cloudflare/workerd-linux-arm64": "1.20250321.0", "@cloudflare/workerd-windows-64": "1.20250321.0" }, "bin": { "workerd": "bin/workerd" } }, "sha512-vyuz9pdJ+7o1lC79vQ2UVRLXPARa2Lq94PbTfqEcYQeSxeR9X+YqhNq2yysv8Zs5vpokmexLCtMniPp9u+2LVQ=="], 210 | 211 | "wrangler": ["wrangler@4.6.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", "@cloudflare/unenv-preset": "2.3.1", "blake3-wasm": "2.1.5", "esbuild": "0.24.2", "miniflare": "4.20250321.1", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.15", "workerd": "1.20250321.0" }, "optionalDependencies": { "fsevents": "~2.3.2", "sharp": "^0.33.5" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20250321.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-2a2ZD0adlvxQ1H+nRKkuuD0dkgaYTOPlC7gBolItk5TfqOSliEV4m6DtZtKtJp33ioM+Uy6TlEWPpA2TrDveEQ=="], 212 | 213 | "ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], 214 | 215 | "youch": ["youch@3.2.3", "", { "dependencies": { "cookie": "^0.5.0", "mustache": "^4.2.0", "stacktracey": "^2.1.8" } }, "sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw=="], 216 | 217 | "zod": ["zod@3.22.3", "", {}, "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug=="], 218 | } 219 | } 220 | -------------------------------------------------------------------------------- /server/index.ts: -------------------------------------------------------------------------------- 1 | import {createMergeableStore, Id, IdAddedOrRemoved} from 'tinybase'; 2 | import {createDurableObjectStoragePersister} from 'tinybase/persisters/persister-durable-object-storage'; 3 | import { 4 | getWsServerDurableObjectFetch, 5 | WsServerDurableObject, 6 | } from 'tinybase/synchronizers/synchronizer-ws-server-durable-object'; 7 | 8 | // Whether to persist data in the Durable Object between client sessions. 9 | // 10 | // If false, the Durable Object only provides synchronization between clients 11 | // (which are assumed to persist their own data). 12 | const PERSIST_TO_DURABLE_OBJECT = false; 13 | 14 | export class TinyBaseDurableObject extends WsServerDurableObject { 15 | onPathId(pathId: Id, addedOrRemoved: IdAddedOrRemoved) { 16 | console.info((addedOrRemoved ? 'Added' : 'Removed') + ` path ${pathId}`); 17 | } 18 | 19 | onClientId(pathId: Id, clientId: Id, addedOrRemoved: IdAddedOrRemoved) { 20 | console.info( 21 | (addedOrRemoved ? 'Added' : 'Removed') + 22 | ` client ${clientId} on path ${pathId}`, 23 | ); 24 | } 25 | 26 | createPersister() { 27 | if (PERSIST_TO_DURABLE_OBJECT) { 28 | return createDurableObjectStoragePersister( 29 | createMergeableStore(), 30 | this.ctx.storage, 31 | ); 32 | } 33 | } 34 | } 35 | 36 | export default { 37 | fetch: getWsServerDurableObjectFetch('TinyBaseDurableObjects'), 38 | }; 39 | -------------------------------------------------------------------------------- /server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-tinybase-ts-react-sync-durable-object-server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "vite-tinybase-ts-react-sync-durable-object-server", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "tinybase": "^5.4.0" 13 | }, 14 | "devDependencies": { 15 | "@cloudflare/workers-types": "^4.20241018.0", 16 | "typescript": "^5.5.2", 17 | "wrangler": "^3.60.3" 18 | } 19 | }, 20 | "node_modules/@cloudflare/kv-asset-handler": { 21 | "version": "0.3.4", 22 | "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz", 23 | "integrity": "sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==", 24 | "dev": true, 25 | "license": "MIT OR Apache-2.0", 26 | "dependencies": { 27 | "mime": "^3.0.0" 28 | }, 29 | "engines": { 30 | "node": ">=16.13" 31 | } 32 | }, 33 | "node_modules/@cloudflare/workerd-darwin-64": { 34 | "version": "1.20241022.0", 35 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20241022.0.tgz", 36 | "integrity": "sha512-1NNYun37myMTgCUiPQEJ0cMal4mKZVTpkD0b2tx9hV70xji+frVJcSK8YVLeUm1P+Rw1d/ct8DMgQuCpsz3Fsw==", 37 | "cpu": [ 38 | "x64" 39 | ], 40 | "dev": true, 41 | "license": "Apache-2.0", 42 | "optional": true, 43 | "os": [ 44 | "darwin" 45 | ], 46 | "engines": { 47 | "node": ">=16" 48 | } 49 | }, 50 | "node_modules/@cloudflare/workerd-darwin-arm64": { 51 | "version": "1.20241022.0", 52 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20241022.0.tgz", 53 | "integrity": "sha512-FOO/0P0U82EsTLTdweNVgw+4VOk5nghExLPLSppdOziq6IR5HVgP44Kmq5LdsUeHUhwUmfOh9hzaTpkNzUqKvw==", 54 | "cpu": [ 55 | "arm64" 56 | ], 57 | "dev": true, 58 | "license": "Apache-2.0", 59 | "optional": true, 60 | "os": [ 61 | "darwin" 62 | ], 63 | "engines": { 64 | "node": ">=16" 65 | } 66 | }, 67 | "node_modules/@cloudflare/workerd-linux-64": { 68 | "version": "1.20241022.0", 69 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20241022.0.tgz", 70 | "integrity": "sha512-RsNc19BQJG9yd+ngnjuDeG9ywZG+7t1L4JeglgceyY5ViMNMKVO7Zpbsu69kXslU9h6xyQG+lrmclg3cBpnhYA==", 71 | "cpu": [ 72 | "x64" 73 | ], 74 | "dev": true, 75 | "license": "Apache-2.0", 76 | "optional": true, 77 | "os": [ 78 | "linux" 79 | ], 80 | "engines": { 81 | "node": ">=16" 82 | } 83 | }, 84 | "node_modules/@cloudflare/workerd-linux-arm64": { 85 | "version": "1.20241022.0", 86 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20241022.0.tgz", 87 | "integrity": "sha512-x5mUXpKxfsosxcFmcq5DaqLs37PejHYVRsNz1cWI59ma7aC4y4Qn6Tf3i0r9MwQTF/MccP4SjVslMU6m4W7IaA==", 88 | "cpu": [ 89 | "arm64" 90 | ], 91 | "dev": true, 92 | "license": "Apache-2.0", 93 | "optional": true, 94 | "os": [ 95 | "linux" 96 | ], 97 | "engines": { 98 | "node": ">=16" 99 | } 100 | }, 101 | "node_modules/@cloudflare/workerd-windows-64": { 102 | "version": "1.20241022.0", 103 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20241022.0.tgz", 104 | "integrity": "sha512-eBCClx4szCOgKqOlxxbdNszMqQf3MRG1B9BRIqEM/diDfdR9IrZ8l3FaEm+l9gXgPmS6m1NBn40aWuGBl8UTSw==", 105 | "cpu": [ 106 | "x64" 107 | ], 108 | "dev": true, 109 | "license": "Apache-2.0", 110 | "optional": true, 111 | "os": [ 112 | "win32" 113 | ], 114 | "engines": { 115 | "node": ">=16" 116 | } 117 | }, 118 | "node_modules/@cloudflare/workers-shared": { 119 | "version": "0.7.0", 120 | "resolved": "https://registry.npmjs.org/@cloudflare/workers-shared/-/workers-shared-0.7.0.tgz", 121 | "integrity": "sha512-LLQRTqx7lKC7o2eCYMpyc5FXV8d0pUX6r3A+agzhqS9aoR5A6zCPefwQGcvbKx83ozX22ATZcemwxQXn12UofQ==", 122 | "dev": true, 123 | "license": "MIT OR Apache-2.0", 124 | "dependencies": { 125 | "mime": "^3.0.0", 126 | "zod": "^3.22.3" 127 | }, 128 | "engines": { 129 | "node": ">=16.7.0" 130 | } 131 | }, 132 | "node_modules/@cloudflare/workers-types": { 133 | "version": "4.20241022.0", 134 | "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20241022.0.tgz", 135 | "integrity": "sha512-1zOAw5QIDKItzGatzCrEpfLOB1AuMTwVqKmbw9B9eBfCUGRFNfJYMrJxIwcse9EmKahsQt2GruqU00pY/GyXgg==", 136 | "devOptional": true, 137 | "license": "MIT OR Apache-2.0" 138 | }, 139 | "node_modules/@cspotcode/source-map-support": { 140 | "version": "0.8.1", 141 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 142 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 143 | "dev": true, 144 | "license": "MIT", 145 | "dependencies": { 146 | "@jridgewell/trace-mapping": "0.3.9" 147 | }, 148 | "engines": { 149 | "node": ">=12" 150 | } 151 | }, 152 | "node_modules/@esbuild-plugins/node-globals-polyfill": { 153 | "version": "0.2.3", 154 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", 155 | "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", 156 | "dev": true, 157 | "license": "ISC", 158 | "peerDependencies": { 159 | "esbuild": "*" 160 | } 161 | }, 162 | "node_modules/@esbuild-plugins/node-modules-polyfill": { 163 | "version": "0.2.2", 164 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", 165 | "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", 166 | "dev": true, 167 | "license": "ISC", 168 | "dependencies": { 169 | "escape-string-regexp": "^4.0.0", 170 | "rollup-plugin-node-polyfills": "^0.2.1" 171 | }, 172 | "peerDependencies": { 173 | "esbuild": "*" 174 | } 175 | }, 176 | "node_modules/@esbuild/android-arm": { 177 | "version": "0.17.19", 178 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 179 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 180 | "cpu": [ 181 | "arm" 182 | ], 183 | "dev": true, 184 | "license": "MIT", 185 | "optional": true, 186 | "os": [ 187 | "android" 188 | ], 189 | "engines": { 190 | "node": ">=12" 191 | } 192 | }, 193 | "node_modules/@esbuild/android-arm64": { 194 | "version": "0.17.19", 195 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 196 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 197 | "cpu": [ 198 | "arm64" 199 | ], 200 | "dev": true, 201 | "license": "MIT", 202 | "optional": true, 203 | "os": [ 204 | "android" 205 | ], 206 | "engines": { 207 | "node": ">=12" 208 | } 209 | }, 210 | "node_modules/@esbuild/android-x64": { 211 | "version": "0.17.19", 212 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 213 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 214 | "cpu": [ 215 | "x64" 216 | ], 217 | "dev": true, 218 | "license": "MIT", 219 | "optional": true, 220 | "os": [ 221 | "android" 222 | ], 223 | "engines": { 224 | "node": ">=12" 225 | } 226 | }, 227 | "node_modules/@esbuild/darwin-arm64": { 228 | "version": "0.17.19", 229 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 230 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 231 | "cpu": [ 232 | "arm64" 233 | ], 234 | "dev": true, 235 | "license": "MIT", 236 | "optional": true, 237 | "os": [ 238 | "darwin" 239 | ], 240 | "engines": { 241 | "node": ">=12" 242 | } 243 | }, 244 | "node_modules/@esbuild/darwin-x64": { 245 | "version": "0.17.19", 246 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 247 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 248 | "cpu": [ 249 | "x64" 250 | ], 251 | "dev": true, 252 | "license": "MIT", 253 | "optional": true, 254 | "os": [ 255 | "darwin" 256 | ], 257 | "engines": { 258 | "node": ">=12" 259 | } 260 | }, 261 | "node_modules/@esbuild/freebsd-arm64": { 262 | "version": "0.17.19", 263 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 264 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 265 | "cpu": [ 266 | "arm64" 267 | ], 268 | "dev": true, 269 | "license": "MIT", 270 | "optional": true, 271 | "os": [ 272 | "freebsd" 273 | ], 274 | "engines": { 275 | "node": ">=12" 276 | } 277 | }, 278 | "node_modules/@esbuild/freebsd-x64": { 279 | "version": "0.17.19", 280 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 281 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 282 | "cpu": [ 283 | "x64" 284 | ], 285 | "dev": true, 286 | "license": "MIT", 287 | "optional": true, 288 | "os": [ 289 | "freebsd" 290 | ], 291 | "engines": { 292 | "node": ">=12" 293 | } 294 | }, 295 | "node_modules/@esbuild/linux-arm": { 296 | "version": "0.17.19", 297 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 298 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 299 | "cpu": [ 300 | "arm" 301 | ], 302 | "dev": true, 303 | "license": "MIT", 304 | "optional": true, 305 | "os": [ 306 | "linux" 307 | ], 308 | "engines": { 309 | "node": ">=12" 310 | } 311 | }, 312 | "node_modules/@esbuild/linux-arm64": { 313 | "version": "0.17.19", 314 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 315 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 316 | "cpu": [ 317 | "arm64" 318 | ], 319 | "dev": true, 320 | "license": "MIT", 321 | "optional": true, 322 | "os": [ 323 | "linux" 324 | ], 325 | "engines": { 326 | "node": ">=12" 327 | } 328 | }, 329 | "node_modules/@esbuild/linux-ia32": { 330 | "version": "0.17.19", 331 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 332 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 333 | "cpu": [ 334 | "ia32" 335 | ], 336 | "dev": true, 337 | "license": "MIT", 338 | "optional": true, 339 | "os": [ 340 | "linux" 341 | ], 342 | "engines": { 343 | "node": ">=12" 344 | } 345 | }, 346 | "node_modules/@esbuild/linux-loong64": { 347 | "version": "0.17.19", 348 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 349 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 350 | "cpu": [ 351 | "loong64" 352 | ], 353 | "dev": true, 354 | "license": "MIT", 355 | "optional": true, 356 | "os": [ 357 | "linux" 358 | ], 359 | "engines": { 360 | "node": ">=12" 361 | } 362 | }, 363 | "node_modules/@esbuild/linux-mips64el": { 364 | "version": "0.17.19", 365 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 366 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 367 | "cpu": [ 368 | "mips64el" 369 | ], 370 | "dev": true, 371 | "license": "MIT", 372 | "optional": true, 373 | "os": [ 374 | "linux" 375 | ], 376 | "engines": { 377 | "node": ">=12" 378 | } 379 | }, 380 | "node_modules/@esbuild/linux-ppc64": { 381 | "version": "0.17.19", 382 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 383 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 384 | "cpu": [ 385 | "ppc64" 386 | ], 387 | "dev": true, 388 | "license": "MIT", 389 | "optional": true, 390 | "os": [ 391 | "linux" 392 | ], 393 | "engines": { 394 | "node": ">=12" 395 | } 396 | }, 397 | "node_modules/@esbuild/linux-riscv64": { 398 | "version": "0.17.19", 399 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 400 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 401 | "cpu": [ 402 | "riscv64" 403 | ], 404 | "dev": true, 405 | "license": "MIT", 406 | "optional": true, 407 | "os": [ 408 | "linux" 409 | ], 410 | "engines": { 411 | "node": ">=12" 412 | } 413 | }, 414 | "node_modules/@esbuild/linux-s390x": { 415 | "version": "0.17.19", 416 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 417 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 418 | "cpu": [ 419 | "s390x" 420 | ], 421 | "dev": true, 422 | "license": "MIT", 423 | "optional": true, 424 | "os": [ 425 | "linux" 426 | ], 427 | "engines": { 428 | "node": ">=12" 429 | } 430 | }, 431 | "node_modules/@esbuild/linux-x64": { 432 | "version": "0.17.19", 433 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 434 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 435 | "cpu": [ 436 | "x64" 437 | ], 438 | "dev": true, 439 | "license": "MIT", 440 | "optional": true, 441 | "os": [ 442 | "linux" 443 | ], 444 | "engines": { 445 | "node": ">=12" 446 | } 447 | }, 448 | "node_modules/@esbuild/netbsd-x64": { 449 | "version": "0.17.19", 450 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 451 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 452 | "cpu": [ 453 | "x64" 454 | ], 455 | "dev": true, 456 | "license": "MIT", 457 | "optional": true, 458 | "os": [ 459 | "netbsd" 460 | ], 461 | "engines": { 462 | "node": ">=12" 463 | } 464 | }, 465 | "node_modules/@esbuild/openbsd-x64": { 466 | "version": "0.17.19", 467 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 468 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 469 | "cpu": [ 470 | "x64" 471 | ], 472 | "dev": true, 473 | "license": "MIT", 474 | "optional": true, 475 | "os": [ 476 | "openbsd" 477 | ], 478 | "engines": { 479 | "node": ">=12" 480 | } 481 | }, 482 | "node_modules/@esbuild/sunos-x64": { 483 | "version": "0.17.19", 484 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 485 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 486 | "cpu": [ 487 | "x64" 488 | ], 489 | "dev": true, 490 | "license": "MIT", 491 | "optional": true, 492 | "os": [ 493 | "sunos" 494 | ], 495 | "engines": { 496 | "node": ">=12" 497 | } 498 | }, 499 | "node_modules/@esbuild/win32-arm64": { 500 | "version": "0.17.19", 501 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 502 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 503 | "cpu": [ 504 | "arm64" 505 | ], 506 | "dev": true, 507 | "license": "MIT", 508 | "optional": true, 509 | "os": [ 510 | "win32" 511 | ], 512 | "engines": { 513 | "node": ">=12" 514 | } 515 | }, 516 | "node_modules/@esbuild/win32-ia32": { 517 | "version": "0.17.19", 518 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 519 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 520 | "cpu": [ 521 | "ia32" 522 | ], 523 | "dev": true, 524 | "license": "MIT", 525 | "optional": true, 526 | "os": [ 527 | "win32" 528 | ], 529 | "engines": { 530 | "node": ">=12" 531 | } 532 | }, 533 | "node_modules/@esbuild/win32-x64": { 534 | "version": "0.17.19", 535 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 536 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 537 | "cpu": [ 538 | "x64" 539 | ], 540 | "dev": true, 541 | "license": "MIT", 542 | "optional": true, 543 | "os": [ 544 | "win32" 545 | ], 546 | "engines": { 547 | "node": ">=12" 548 | } 549 | }, 550 | "node_modules/@fastify/busboy": { 551 | "version": "2.1.1", 552 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", 553 | "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", 554 | "dev": true, 555 | "license": "MIT", 556 | "engines": { 557 | "node": ">=14" 558 | } 559 | }, 560 | "node_modules/@jridgewell/resolve-uri": { 561 | "version": "3.1.2", 562 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 563 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 564 | "dev": true, 565 | "license": "MIT", 566 | "engines": { 567 | "node": ">=6.0.0" 568 | } 569 | }, 570 | "node_modules/@jridgewell/sourcemap-codec": { 571 | "version": "1.5.0", 572 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 573 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 574 | "dev": true, 575 | "license": "MIT" 576 | }, 577 | "node_modules/@jridgewell/trace-mapping": { 578 | "version": "0.3.9", 579 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 580 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 581 | "dev": true, 582 | "license": "MIT", 583 | "dependencies": { 584 | "@jridgewell/resolve-uri": "^3.0.3", 585 | "@jridgewell/sourcemap-codec": "^1.4.10" 586 | } 587 | }, 588 | "node_modules/@types/node": { 589 | "version": "22.5.4", 590 | "dev": true, 591 | "license": "MIT", 592 | "dependencies": { 593 | "undici-types": "~6.19.2" 594 | } 595 | }, 596 | "node_modules/@types/node-forge": { 597 | "version": "1.3.11", 598 | "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", 599 | "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", 600 | "dev": true, 601 | "license": "MIT", 602 | "dependencies": { 603 | "@types/node": "*" 604 | } 605 | }, 606 | "node_modules/acorn": { 607 | "version": "8.14.0", 608 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", 609 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 610 | "dev": true, 611 | "license": "MIT", 612 | "bin": { 613 | "acorn": "bin/acorn" 614 | }, 615 | "engines": { 616 | "node": ">=0.4.0" 617 | } 618 | }, 619 | "node_modules/acorn-walk": { 620 | "version": "8.3.4", 621 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", 622 | "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", 623 | "dev": true, 624 | "license": "MIT", 625 | "dependencies": { 626 | "acorn": "^8.11.0" 627 | }, 628 | "engines": { 629 | "node": ">=0.4.0" 630 | } 631 | }, 632 | "node_modules/anymatch": { 633 | "version": "3.1.3", 634 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 635 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 636 | "dev": true, 637 | "license": "ISC", 638 | "dependencies": { 639 | "normalize-path": "^3.0.0", 640 | "picomatch": "^2.0.4" 641 | }, 642 | "engines": { 643 | "node": ">= 8" 644 | } 645 | }, 646 | "node_modules/as-table": { 647 | "version": "1.0.55", 648 | "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", 649 | "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", 650 | "dev": true, 651 | "license": "MIT", 652 | "dependencies": { 653 | "printable-characters": "^1.0.42" 654 | } 655 | }, 656 | "node_modules/binary-extensions": { 657 | "version": "2.3.0", 658 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 659 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 660 | "dev": true, 661 | "license": "MIT", 662 | "engines": { 663 | "node": ">=8" 664 | }, 665 | "funding": { 666 | "url": "https://github.com/sponsors/sindresorhus" 667 | } 668 | }, 669 | "node_modules/blake3-wasm": { 670 | "version": "2.1.5", 671 | "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", 672 | "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", 673 | "dev": true, 674 | "license": "MIT" 675 | }, 676 | "node_modules/braces": { 677 | "version": "3.0.3", 678 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 679 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 680 | "dev": true, 681 | "license": "MIT", 682 | "dependencies": { 683 | "fill-range": "^7.1.1" 684 | }, 685 | "engines": { 686 | "node": ">=8" 687 | } 688 | }, 689 | "node_modules/capnp-ts": { 690 | "version": "0.7.0", 691 | "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", 692 | "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", 693 | "dev": true, 694 | "license": "MIT", 695 | "dependencies": { 696 | "debug": "^4.3.1", 697 | "tslib": "^2.2.0" 698 | } 699 | }, 700 | "node_modules/chokidar": { 701 | "version": "3.6.0", 702 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 703 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 704 | "dev": true, 705 | "license": "MIT", 706 | "dependencies": { 707 | "anymatch": "~3.1.2", 708 | "braces": "~3.0.2", 709 | "glob-parent": "~5.1.2", 710 | "is-binary-path": "~2.1.0", 711 | "is-glob": "~4.0.1", 712 | "normalize-path": "~3.0.0", 713 | "readdirp": "~3.6.0" 714 | }, 715 | "engines": { 716 | "node": ">= 8.10.0" 717 | }, 718 | "funding": { 719 | "url": "https://paulmillr.com/funding/" 720 | }, 721 | "optionalDependencies": { 722 | "fsevents": "~2.3.2" 723 | } 724 | }, 725 | "node_modules/cookie": { 726 | "version": "0.7.2", 727 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", 728 | "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", 729 | "dev": true, 730 | "license": "MIT", 731 | "engines": { 732 | "node": ">= 0.6" 733 | } 734 | }, 735 | "node_modules/data-uri-to-buffer": { 736 | "version": "2.0.2", 737 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", 738 | "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", 739 | "dev": true, 740 | "license": "MIT" 741 | }, 742 | "node_modules/date-fns": { 743 | "version": "4.1.0", 744 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", 745 | "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", 746 | "dev": true, 747 | "license": "MIT", 748 | "funding": { 749 | "type": "github", 750 | "url": "https://github.com/sponsors/kossnocorp" 751 | } 752 | }, 753 | "node_modules/debug": { 754 | "version": "4.3.7", 755 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 756 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 757 | "dev": true, 758 | "license": "MIT", 759 | "dependencies": { 760 | "ms": "^2.1.3" 761 | }, 762 | "engines": { 763 | "node": ">=6.0" 764 | }, 765 | "peerDependenciesMeta": { 766 | "supports-color": { 767 | "optional": true 768 | } 769 | } 770 | }, 771 | "node_modules/defu": { 772 | "version": "6.1.4", 773 | "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", 774 | "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", 775 | "dev": true, 776 | "license": "MIT" 777 | }, 778 | "node_modules/esbuild": { 779 | "version": "0.17.19", 780 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 781 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 782 | "dev": true, 783 | "hasInstallScript": true, 784 | "license": "MIT", 785 | "bin": { 786 | "esbuild": "bin/esbuild" 787 | }, 788 | "engines": { 789 | "node": ">=12" 790 | }, 791 | "optionalDependencies": { 792 | "@esbuild/android-arm": "0.17.19", 793 | "@esbuild/android-arm64": "0.17.19", 794 | "@esbuild/android-x64": "0.17.19", 795 | "@esbuild/darwin-arm64": "0.17.19", 796 | "@esbuild/darwin-x64": "0.17.19", 797 | "@esbuild/freebsd-arm64": "0.17.19", 798 | "@esbuild/freebsd-x64": "0.17.19", 799 | "@esbuild/linux-arm": "0.17.19", 800 | "@esbuild/linux-arm64": "0.17.19", 801 | "@esbuild/linux-ia32": "0.17.19", 802 | "@esbuild/linux-loong64": "0.17.19", 803 | "@esbuild/linux-mips64el": "0.17.19", 804 | "@esbuild/linux-ppc64": "0.17.19", 805 | "@esbuild/linux-riscv64": "0.17.19", 806 | "@esbuild/linux-s390x": "0.17.19", 807 | "@esbuild/linux-x64": "0.17.19", 808 | "@esbuild/netbsd-x64": "0.17.19", 809 | "@esbuild/openbsd-x64": "0.17.19", 810 | "@esbuild/sunos-x64": "0.17.19", 811 | "@esbuild/win32-arm64": "0.17.19", 812 | "@esbuild/win32-ia32": "0.17.19", 813 | "@esbuild/win32-x64": "0.17.19" 814 | } 815 | }, 816 | "node_modules/escape-string-regexp": { 817 | "version": "4.0.0", 818 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 819 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 820 | "dev": true, 821 | "license": "MIT", 822 | "engines": { 823 | "node": ">=10" 824 | }, 825 | "funding": { 826 | "url": "https://github.com/sponsors/sindresorhus" 827 | } 828 | }, 829 | "node_modules/estree-walker": { 830 | "version": "0.6.1", 831 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 832 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 833 | "dev": true, 834 | "license": "MIT" 835 | }, 836 | "node_modules/exit-hook": { 837 | "version": "2.2.1", 838 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", 839 | "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", 840 | "dev": true, 841 | "license": "MIT", 842 | "engines": { 843 | "node": ">=6" 844 | }, 845 | "funding": { 846 | "url": "https://github.com/sponsors/sindresorhus" 847 | } 848 | }, 849 | "node_modules/fill-range": { 850 | "version": "7.1.1", 851 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 852 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 853 | "dev": true, 854 | "license": "MIT", 855 | "dependencies": { 856 | "to-regex-range": "^5.0.1" 857 | }, 858 | "engines": { 859 | "node": ">=8" 860 | } 861 | }, 862 | "node_modules/fsevents": { 863 | "version": "2.3.3", 864 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 865 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 866 | "dev": true, 867 | "hasInstallScript": true, 868 | "license": "MIT", 869 | "optional": true, 870 | "os": [ 871 | "darwin" 872 | ], 873 | "engines": { 874 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 875 | } 876 | }, 877 | "node_modules/function-bind": { 878 | "version": "1.1.2", 879 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 880 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 881 | "dev": true, 882 | "license": "MIT", 883 | "funding": { 884 | "url": "https://github.com/sponsors/ljharb" 885 | } 886 | }, 887 | "node_modules/get-source": { 888 | "version": "2.0.12", 889 | "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", 890 | "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", 891 | "dev": true, 892 | "license": "Unlicense", 893 | "dependencies": { 894 | "data-uri-to-buffer": "^2.0.0", 895 | "source-map": "^0.6.1" 896 | } 897 | }, 898 | "node_modules/glob-parent": { 899 | "version": "5.1.2", 900 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 901 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 902 | "dev": true, 903 | "license": "ISC", 904 | "dependencies": { 905 | "is-glob": "^4.0.1" 906 | }, 907 | "engines": { 908 | "node": ">= 6" 909 | } 910 | }, 911 | "node_modules/glob-to-regexp": { 912 | "version": "0.4.1", 913 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 914 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 915 | "dev": true, 916 | "license": "BSD-2-Clause" 917 | }, 918 | "node_modules/hasown": { 919 | "version": "2.0.2", 920 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 921 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 922 | "dev": true, 923 | "license": "MIT", 924 | "dependencies": { 925 | "function-bind": "^1.1.2" 926 | }, 927 | "engines": { 928 | "node": ">= 0.4" 929 | } 930 | }, 931 | "node_modules/is-binary-path": { 932 | "version": "2.1.0", 933 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 934 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 935 | "dev": true, 936 | "license": "MIT", 937 | "dependencies": { 938 | "binary-extensions": "^2.0.0" 939 | }, 940 | "engines": { 941 | "node": ">=8" 942 | } 943 | }, 944 | "node_modules/is-core-module": { 945 | "version": "2.15.1", 946 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", 947 | "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", 948 | "dev": true, 949 | "license": "MIT", 950 | "dependencies": { 951 | "hasown": "^2.0.2" 952 | }, 953 | "engines": { 954 | "node": ">= 0.4" 955 | }, 956 | "funding": { 957 | "url": "https://github.com/sponsors/ljharb" 958 | } 959 | }, 960 | "node_modules/is-extglob": { 961 | "version": "2.1.1", 962 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 963 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 964 | "dev": true, 965 | "license": "MIT", 966 | "engines": { 967 | "node": ">=0.10.0" 968 | } 969 | }, 970 | "node_modules/is-glob": { 971 | "version": "4.0.3", 972 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 973 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 974 | "dev": true, 975 | "license": "MIT", 976 | "dependencies": { 977 | "is-extglob": "^2.1.1" 978 | }, 979 | "engines": { 980 | "node": ">=0.10.0" 981 | } 982 | }, 983 | "node_modules/is-number": { 984 | "version": "7.0.0", 985 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 986 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 987 | "dev": true, 988 | "license": "MIT", 989 | "engines": { 990 | "node": ">=0.12.0" 991 | } 992 | }, 993 | "node_modules/itty-time": { 994 | "version": "1.0.6", 995 | "resolved": "https://registry.npmjs.org/itty-time/-/itty-time-1.0.6.tgz", 996 | "integrity": "sha512-+P8IZaLLBtFv8hCkIjcymZOp4UJ+xW6bSlQsXGqrkmJh7vSiMFSlNne0mCYagEE0N7HDNR5jJBRxwN0oYv61Rw==", 997 | "dev": true, 998 | "license": "MIT" 999 | }, 1000 | "node_modules/magic-string": { 1001 | "version": "0.25.9", 1002 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 1003 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 1004 | "dev": true, 1005 | "license": "MIT", 1006 | "dependencies": { 1007 | "sourcemap-codec": "^1.4.8" 1008 | } 1009 | }, 1010 | "node_modules/mime": { 1011 | "version": "3.0.0", 1012 | "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", 1013 | "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", 1014 | "dev": true, 1015 | "license": "MIT", 1016 | "bin": { 1017 | "mime": "cli.js" 1018 | }, 1019 | "engines": { 1020 | "node": ">=10.0.0" 1021 | } 1022 | }, 1023 | "node_modules/miniflare": { 1024 | "version": "3.20241022.0", 1025 | "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20241022.0.tgz", 1026 | "integrity": "sha512-x9Fbq1Hmz1f0osIT9Qmj78iX4UpCP2EqlZnA/tzj/3+I49vc3Kq0fNqSSKplcdf6HlCHdL3fOBicmreQF4BUUQ==", 1027 | "dev": true, 1028 | "license": "MIT", 1029 | "dependencies": { 1030 | "@cspotcode/source-map-support": "0.8.1", 1031 | "acorn": "^8.8.0", 1032 | "acorn-walk": "^8.2.0", 1033 | "capnp-ts": "^0.7.0", 1034 | "exit-hook": "^2.2.1", 1035 | "glob-to-regexp": "^0.4.1", 1036 | "stoppable": "^1.1.0", 1037 | "undici": "^5.28.4", 1038 | "workerd": "1.20241022.0", 1039 | "ws": "^8.17.1", 1040 | "youch": "^3.2.2", 1041 | "zod": "^3.22.3" 1042 | }, 1043 | "bin": { 1044 | "miniflare": "bootstrap.js" 1045 | }, 1046 | "engines": { 1047 | "node": ">=16.13" 1048 | } 1049 | }, 1050 | "node_modules/ms": { 1051 | "version": "2.1.3", 1052 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1053 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1054 | "dev": true, 1055 | "license": "MIT" 1056 | }, 1057 | "node_modules/mustache": { 1058 | "version": "4.2.0", 1059 | "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", 1060 | "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", 1061 | "dev": true, 1062 | "license": "MIT", 1063 | "bin": { 1064 | "mustache": "bin/mustache" 1065 | } 1066 | }, 1067 | "node_modules/nanoid": { 1068 | "version": "3.3.7", 1069 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1070 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1071 | "dev": true, 1072 | "funding": [ 1073 | { 1074 | "type": "github", 1075 | "url": "https://github.com/sponsors/ai" 1076 | } 1077 | ], 1078 | "license": "MIT", 1079 | "bin": { 1080 | "nanoid": "bin/nanoid.cjs" 1081 | }, 1082 | "engines": { 1083 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1084 | } 1085 | }, 1086 | "node_modules/node-forge": { 1087 | "version": "1.3.1", 1088 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", 1089 | "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", 1090 | "dev": true, 1091 | "license": "(BSD-3-Clause OR GPL-2.0)", 1092 | "engines": { 1093 | "node": ">= 6.13.0" 1094 | } 1095 | }, 1096 | "node_modules/normalize-path": { 1097 | "version": "3.0.0", 1098 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1099 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1100 | "dev": true, 1101 | "license": "MIT", 1102 | "engines": { 1103 | "node": ">=0.10.0" 1104 | } 1105 | }, 1106 | "node_modules/ohash": { 1107 | "version": "1.1.4", 1108 | "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", 1109 | "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==", 1110 | "dev": true, 1111 | "license": "MIT" 1112 | }, 1113 | "node_modules/path-parse": { 1114 | "version": "1.0.7", 1115 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1116 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1117 | "dev": true, 1118 | "license": "MIT" 1119 | }, 1120 | "node_modules/path-to-regexp": { 1121 | "version": "6.3.0", 1122 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", 1123 | "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", 1124 | "dev": true, 1125 | "license": "MIT" 1126 | }, 1127 | "node_modules/pathe": { 1128 | "version": "1.1.2", 1129 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 1130 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 1131 | "dev": true, 1132 | "license": "MIT" 1133 | }, 1134 | "node_modules/picomatch": { 1135 | "version": "2.3.1", 1136 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1137 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1138 | "dev": true, 1139 | "license": "MIT", 1140 | "engines": { 1141 | "node": ">=8.6" 1142 | }, 1143 | "funding": { 1144 | "url": "https://github.com/sponsors/jonschlinkert" 1145 | } 1146 | }, 1147 | "node_modules/printable-characters": { 1148 | "version": "1.0.42", 1149 | "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", 1150 | "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", 1151 | "dev": true, 1152 | "license": "Unlicense" 1153 | }, 1154 | "node_modules/readdirp": { 1155 | "version": "3.6.0", 1156 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1157 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1158 | "dev": true, 1159 | "license": "MIT", 1160 | "dependencies": { 1161 | "picomatch": "^2.2.1" 1162 | }, 1163 | "engines": { 1164 | "node": ">=8.10.0" 1165 | } 1166 | }, 1167 | "node_modules/resolve": { 1168 | "version": "1.22.8", 1169 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 1170 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 1171 | "dev": true, 1172 | "license": "MIT", 1173 | "dependencies": { 1174 | "is-core-module": "^2.13.0", 1175 | "path-parse": "^1.0.7", 1176 | "supports-preserve-symlinks-flag": "^1.0.0" 1177 | }, 1178 | "bin": { 1179 | "resolve": "bin/resolve" 1180 | }, 1181 | "funding": { 1182 | "url": "https://github.com/sponsors/ljharb" 1183 | } 1184 | }, 1185 | "node_modules/resolve.exports": { 1186 | "version": "2.0.2", 1187 | "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", 1188 | "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", 1189 | "dev": true, 1190 | "license": "MIT", 1191 | "engines": { 1192 | "node": ">=10" 1193 | } 1194 | }, 1195 | "node_modules/rollup-plugin-inject": { 1196 | "version": "3.0.2", 1197 | "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", 1198 | "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", 1199 | "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", 1200 | "dev": true, 1201 | "license": "MIT", 1202 | "dependencies": { 1203 | "estree-walker": "^0.6.1", 1204 | "magic-string": "^0.25.3", 1205 | "rollup-pluginutils": "^2.8.1" 1206 | } 1207 | }, 1208 | "node_modules/rollup-plugin-node-polyfills": { 1209 | "version": "0.2.1", 1210 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", 1211 | "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", 1212 | "dev": true, 1213 | "license": "MIT", 1214 | "dependencies": { 1215 | "rollup-plugin-inject": "^3.0.0" 1216 | } 1217 | }, 1218 | "node_modules/rollup-pluginutils": { 1219 | "version": "2.8.2", 1220 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1221 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1222 | "dev": true, 1223 | "license": "MIT", 1224 | "dependencies": { 1225 | "estree-walker": "^0.6.1" 1226 | } 1227 | }, 1228 | "node_modules/selfsigned": { 1229 | "version": "2.4.1", 1230 | "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", 1231 | "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", 1232 | "dev": true, 1233 | "license": "MIT", 1234 | "dependencies": { 1235 | "@types/node-forge": "^1.3.0", 1236 | "node-forge": "^1" 1237 | }, 1238 | "engines": { 1239 | "node": ">=10" 1240 | } 1241 | }, 1242 | "node_modules/source-map": { 1243 | "version": "0.6.1", 1244 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1245 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1246 | "dev": true, 1247 | "license": "BSD-3-Clause", 1248 | "engines": { 1249 | "node": ">=0.10.0" 1250 | } 1251 | }, 1252 | "node_modules/sourcemap-codec": { 1253 | "version": "1.4.8", 1254 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1255 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1256 | "deprecated": "Please use @jridgewell/sourcemap-codec instead", 1257 | "dev": true, 1258 | "license": "MIT" 1259 | }, 1260 | "node_modules/stacktracey": { 1261 | "version": "2.1.8", 1262 | "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", 1263 | "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", 1264 | "dev": true, 1265 | "license": "Unlicense", 1266 | "dependencies": { 1267 | "as-table": "^1.0.36", 1268 | "get-source": "^2.0.12" 1269 | } 1270 | }, 1271 | "node_modules/stoppable": { 1272 | "version": "1.1.0", 1273 | "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", 1274 | "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", 1275 | "dev": true, 1276 | "license": "MIT", 1277 | "engines": { 1278 | "node": ">=4", 1279 | "npm": ">=6" 1280 | } 1281 | }, 1282 | "node_modules/supports-preserve-symlinks-flag": { 1283 | "version": "1.0.0", 1284 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1285 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1286 | "dev": true, 1287 | "license": "MIT", 1288 | "engines": { 1289 | "node": ">= 0.4" 1290 | }, 1291 | "funding": { 1292 | "url": "https://github.com/sponsors/ljharb" 1293 | } 1294 | }, 1295 | "node_modules/tinybase": { 1296 | "version": "5.4.0", 1297 | "resolved": "https://registry.npmjs.org/tinybase/-/tinybase-5.4.0.tgz", 1298 | "integrity": "sha512-TxvStIL6kOQypm467wDWNDMFkcq0akKkwt/mkDfJYIdC6qYE3PD9C9WretS1guqbNQdP9aCuYm6/LuPyF0PiPg==", 1299 | "license": "MIT", 1300 | "bin": { 1301 | "tinybase": "cli/index.js" 1302 | }, 1303 | "peerDependencies": { 1304 | "@automerge/automerge-repo": "^1.2.1", 1305 | "@cloudflare/workers-types": "^4.20241022.0", 1306 | "@electric-sql/pglite": "^0.2.13", 1307 | "@libsql/client": "^0.14.0", 1308 | "@powersync/common": "^1.21.0", 1309 | "@sqlite.org/sqlite-wasm": "^3.47.0-build1", 1310 | "@vlcn.io/crsqlite-wasm": "^0.16.0", 1311 | "electric-sql": "^0.12.1", 1312 | "expo": "^52.0.4", 1313 | "expo-sqlite": "^15.0.3", 1314 | "partykit": "^0.0.111", 1315 | "partysocket": "^1.0.2", 1316 | "postgres": "^3.4.5", 1317 | "prettier": "^3.3.3", 1318 | "react": "^18.2.0", 1319 | "react-dom": "^18.2.0", 1320 | "sqlite3": "^5.1.7", 1321 | "ws": "^8.18.0", 1322 | "yjs": "^13.6.20" 1323 | }, 1324 | "peerDependenciesMeta": { 1325 | "@automerge/automerge-repo": { 1326 | "optional": true 1327 | }, 1328 | "@cloudflare/workers-types": { 1329 | "optional": true 1330 | }, 1331 | "@electric-sql/pglite": { 1332 | "optional": true 1333 | }, 1334 | "@libsql/client": { 1335 | "optional": true 1336 | }, 1337 | "@powersync/common": { 1338 | "optional": true 1339 | }, 1340 | "@sqlite.org/sqlite-wasm": { 1341 | "optional": true 1342 | }, 1343 | "@vlcn.io/crsqlite-wasm": { 1344 | "optional": true 1345 | }, 1346 | "electric-sql": { 1347 | "optional": true 1348 | }, 1349 | "expo": { 1350 | "optional": true 1351 | }, 1352 | "expo-sqlite": { 1353 | "optional": true 1354 | }, 1355 | "partykit": { 1356 | "optional": true 1357 | }, 1358 | "partysocket": { 1359 | "optional": true 1360 | }, 1361 | "postgres": { 1362 | "optional": true 1363 | }, 1364 | "prettier": { 1365 | "optional": true 1366 | }, 1367 | "react": { 1368 | "optional": true 1369 | }, 1370 | "react-dom": { 1371 | "optional": true 1372 | }, 1373 | "sqlite3": { 1374 | "optional": true 1375 | }, 1376 | "ws": { 1377 | "optional": true 1378 | }, 1379 | "yjs": { 1380 | "optional": true 1381 | } 1382 | } 1383 | }, 1384 | "node_modules/to-regex-range": { 1385 | "version": "5.0.1", 1386 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1387 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1388 | "dev": true, 1389 | "license": "MIT", 1390 | "dependencies": { 1391 | "is-number": "^7.0.0" 1392 | }, 1393 | "engines": { 1394 | "node": ">=8.0" 1395 | } 1396 | }, 1397 | "node_modules/tslib": { 1398 | "version": "2.8.1", 1399 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 1400 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 1401 | "dev": true, 1402 | "license": "0BSD" 1403 | }, 1404 | "node_modules/typescript": { 1405 | "version": "5.6.3", 1406 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", 1407 | "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", 1408 | "dev": true, 1409 | "license": "Apache-2.0", 1410 | "bin": { 1411 | "tsc": "bin/tsc", 1412 | "tsserver": "bin/tsserver" 1413 | }, 1414 | "engines": { 1415 | "node": ">=14.17" 1416 | } 1417 | }, 1418 | "node_modules/ufo": { 1419 | "version": "1.5.4", 1420 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", 1421 | "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", 1422 | "dev": true, 1423 | "license": "MIT" 1424 | }, 1425 | "node_modules/undici": { 1426 | "version": "5.28.4", 1427 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", 1428 | "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", 1429 | "dev": true, 1430 | "license": "MIT", 1431 | "dependencies": { 1432 | "@fastify/busboy": "^2.0.0" 1433 | }, 1434 | "engines": { 1435 | "node": ">=14.0" 1436 | } 1437 | }, 1438 | "node_modules/undici-types": { 1439 | "version": "6.19.8", 1440 | "dev": true, 1441 | "license": "MIT" 1442 | }, 1443 | "node_modules/unenv": { 1444 | "name": "unenv-nightly", 1445 | "version": "2.0.0-20241024-111401-d4156ac", 1446 | "resolved": "https://registry.npmjs.org/unenv-nightly/-/unenv-nightly-2.0.0-20241024-111401-d4156ac.tgz", 1447 | "integrity": "sha512-xJO1hfY+Te+/XnfCYrCbFbRcgu6XEODND1s5wnVbaBCkuQX7JXF7fHEXPrukFE2j8EOH848P8QN19VO47XN8hw==", 1448 | "dev": true, 1449 | "license": "MIT", 1450 | "dependencies": { 1451 | "defu": "^6.1.4", 1452 | "ohash": "^1.1.4", 1453 | "pathe": "^1.1.2", 1454 | "ufo": "^1.5.4" 1455 | } 1456 | }, 1457 | "node_modules/workerd": { 1458 | "version": "1.20241022.0", 1459 | "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20241022.0.tgz", 1460 | "integrity": "sha512-jyGXsgO9DRcJyx6Ovv7gUyDPc3UYC2i/E0p9GFUg6GUzpldw4Y93y9kOmdfsOnKZ3+lY53veSiUniiBPE6Q2NQ==", 1461 | "dev": true, 1462 | "hasInstallScript": true, 1463 | "license": "Apache-2.0", 1464 | "bin": { 1465 | "workerd": "bin/workerd" 1466 | }, 1467 | "engines": { 1468 | "node": ">=16" 1469 | }, 1470 | "optionalDependencies": { 1471 | "@cloudflare/workerd-darwin-64": "1.20241022.0", 1472 | "@cloudflare/workerd-darwin-arm64": "1.20241022.0", 1473 | "@cloudflare/workerd-linux-64": "1.20241022.0", 1474 | "@cloudflare/workerd-linux-arm64": "1.20241022.0", 1475 | "@cloudflare/workerd-windows-64": "1.20241022.0" 1476 | } 1477 | }, 1478 | "node_modules/wrangler": { 1479 | "version": "3.84.1", 1480 | "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.84.1.tgz", 1481 | "integrity": "sha512-w27/QpIk2qz6aMIVi9T8cDcXMvh/RXjcL+vf4o5J2GpQAE4U7wTCNHyaY9H3oTJWRN97KqCAEbiHBNtTKoUJEw==", 1482 | "dev": true, 1483 | "license": "MIT OR Apache-2.0", 1484 | "dependencies": { 1485 | "@cloudflare/kv-asset-handler": "0.3.4", 1486 | "@cloudflare/workers-shared": "0.7.0", 1487 | "@esbuild-plugins/node-globals-polyfill": "^0.2.3", 1488 | "@esbuild-plugins/node-modules-polyfill": "^0.2.2", 1489 | "blake3-wasm": "^2.1.5", 1490 | "chokidar": "^3.5.3", 1491 | "date-fns": "^4.1.0", 1492 | "esbuild": "0.17.19", 1493 | "itty-time": "^1.0.6", 1494 | "miniflare": "3.20241022.0", 1495 | "nanoid": "^3.3.3", 1496 | "path-to-regexp": "^6.3.0", 1497 | "resolve": "^1.22.8", 1498 | "resolve.exports": "^2.0.2", 1499 | "selfsigned": "^2.0.1", 1500 | "source-map": "^0.6.1", 1501 | "unenv": "npm:unenv-nightly@2.0.0-20241024-111401-d4156ac", 1502 | "workerd": "1.20241022.0", 1503 | "xxhash-wasm": "^1.0.1" 1504 | }, 1505 | "bin": { 1506 | "wrangler": "bin/wrangler.js", 1507 | "wrangler2": "bin/wrangler.js" 1508 | }, 1509 | "engines": { 1510 | "node": ">=16.17.0" 1511 | }, 1512 | "optionalDependencies": { 1513 | "fsevents": "~2.3.2" 1514 | }, 1515 | "peerDependencies": { 1516 | "@cloudflare/workers-types": "^4.20241022.0" 1517 | }, 1518 | "peerDependenciesMeta": { 1519 | "@cloudflare/workers-types": { 1520 | "optional": true 1521 | } 1522 | } 1523 | }, 1524 | "node_modules/ws": { 1525 | "version": "8.18.0", 1526 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", 1527 | "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", 1528 | "devOptional": true, 1529 | "license": "MIT", 1530 | "engines": { 1531 | "node": ">=10.0.0" 1532 | }, 1533 | "peerDependencies": { 1534 | "bufferutil": "^4.0.1", 1535 | "utf-8-validate": ">=5.0.2" 1536 | }, 1537 | "peerDependenciesMeta": { 1538 | "bufferutil": { 1539 | "optional": true 1540 | }, 1541 | "utf-8-validate": { 1542 | "optional": true 1543 | } 1544 | } 1545 | }, 1546 | "node_modules/xxhash-wasm": { 1547 | "version": "1.0.2", 1548 | "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", 1549 | "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", 1550 | "dev": true, 1551 | "license": "MIT" 1552 | }, 1553 | "node_modules/youch": { 1554 | "version": "3.3.4", 1555 | "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.4.tgz", 1556 | "integrity": "sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==", 1557 | "dev": true, 1558 | "license": "MIT", 1559 | "dependencies": { 1560 | "cookie": "^0.7.1", 1561 | "mustache": "^4.2.0", 1562 | "stacktracey": "^2.1.8" 1563 | } 1564 | }, 1565 | "node_modules/zod": { 1566 | "version": "3.23.8", 1567 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", 1568 | "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", 1569 | "dev": true, 1570 | "license": "MIT", 1571 | "funding": { 1572 | "url": "https://github.com/sponsors/colinhacks" 1573 | } 1574 | } 1575 | } 1576 | } 1577 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-tinybase-ts-react-sync-durable-object-server", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.ts", 6 | "author": "jamesgpearce", 7 | "license": "MIT", 8 | "type": "module", 9 | "scripts": { 10 | "deploy": "wrangler deploy", 11 | "dev": "wrangler dev", 12 | "start": "wrangler dev" 13 | }, 14 | "devDependencies": { 15 | "@cloudflare/workers-types": "^4.20250327.0", 16 | "typescript": "^5.8.2", 17 | "wrangler": "^4.6.0" 18 | }, 19 | "dependencies": { 20 | "tinybase": "^6.0.0" 21 | } 22 | } -------------------------------------------------------------------------------- /server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2021", 4 | "lib": ["es2021"], 5 | "jsx": "react-jsx", 6 | "module": "es2022", 7 | "moduleResolution": "node", 8 | "types": ["@cloudflare/workers-types/2023-07-01"], 9 | "resolveJsonModule": true, 10 | "allowJs": true, 11 | "checkJs": false, 12 | "noEmit": true, 13 | "isolatedModules": true, 14 | "allowSyntheticDefaultImports": true, 15 | "forceConsistentCasingInFileNames": true, 16 | "strict": true, 17 | "skipLibCheck": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /server/wrangler.toml: -------------------------------------------------------------------------------- 1 | #:schema node_modules/wrangler/config-schema.json 2 | name = "vite-tinybase-ts-react-sync-durable-object-server" 3 | main = "index.ts" 4 | compatibility_date = "2024-10-11" 5 | route = { pattern = "vite.tinybase.cloud", custom_domain = true } 6 | 7 | [[durable_objects.bindings]] 8 | name = "TinyBaseDurableObjects" 9 | class_name = "TinyBaseDurableObject" 10 | 11 | [[migrations]] 12 | tag = "v1" 13 | new_classes = ["TinyBaseDurableObject"] 14 | --------------------------------------------------------------------------------