A discord bot for teal.fm
discord tealfm music

more prog

besaid.zone c48555d1 d9c42588

verified
+1
constants.ts
··· 6 6 export const DISCORD_APPLICATION_ID = process.env.DISCORD_APPLICATION_ID as string; 7 7 export const DISCORD_GUILD_ID = process.env.DISCORD_GUILD_ID as string; 8 8 export const TAP_ADMIN_PASSWORD = process.env.TAP_ADMIN_PASSWORD as string; 9 + export const DATABASE_URL = process.env.DATABASE_URL as string;
+46
db/migrator.ts
··· 1 + import path from "node:path" 2 + import { Pool } from "pg" 3 + import fs from "node:fs/promises" 4 + import type { DB } from "kysely-codegen" 5 + import { Kysely, Migrator, PostgresDialect, FileMigrationProvider } from "kysely" 6 + import { DATABASE_URL } from "../constants.ts" 7 + 8 + async function migrateToLatest() { 9 + const db = new Kysely<DB>({ 10 + dialect: new PostgresDialect({ 11 + pool: new Pool({ 12 + connectionString: DATABASE_URL 13 + }) 14 + }) 15 + }) 16 + 17 + const migrator = new Migrator({ 18 + db, 19 + provider: new FileMigrationProvider({ 20 + fs, 21 + path, 22 + migrationFolder: path.join(import.meta.dirname, "../migrations") 23 + }) 24 + }) 25 + 26 + 27 + const { error, results } = await migrator.migrateToLatest() 28 + 29 + results?.forEach(result => { 30 + if (result.status === "Success") { 31 + console.log(`migration ${result.migrationName} was executed successfully`) 32 + } else if (result.status === "Error") { 33 + console.error(`failed to execute migration: "${result.migrationName}" `) 34 + } 35 + }) 36 + 37 + if (error) { 38 + console.error("failed to migrate") 39 + console.error(error) 40 + process.exit(1) 41 + } 42 + 43 + await db.destroy() 44 + } 45 + 46 + migrateToLatest().catch(err => console.error(err))
+8
docker-compose.yml
··· 1 + services: 2 + db: 3 + image: postgres:18.1 4 + restart: always 5 + shm_size: 128mb 6 + env_file: .env 7 + ports: 8 + - 5432:5432
+34
migrations/schema.ts
··· 1 + import { Kysely, sql } from "kysely" 2 + 3 + export async function up(db: Kysely<any>): Promise<void> { 4 + await db.schema 5 + .createTable("users").ifNotExists() 6 + .addColumn("id", "serial", (col) => col.primaryKey()) 7 + .addColumn("did", "varchar", (col) => col.notNull()) 8 + .addColumn('created_at', 'timestamp', (col) => 9 + col.defaultTo(sql`now()`).notNull(), 10 + ) 11 + .execute() 12 + 13 + await db.schema 14 + .createTable("plays").ifNotExists() 15 + .addColumn("id", "serial", (col) => col.primaryKey()) 16 + .addColumn("played_time", "timestamptz", (col) => col.notNull()) 17 + .addColumn("release_name", "varchar", (col) => col.notNull()) 18 + .addColumn("track_name", 'varchar', (col) => col.notNull()) 19 + .addColumn("indexed_at", "timestamp", (col) => col.defaultTo(sql`now()`).notNull()) 20 + .addColumn("user_id", "integer", (col) => col.references("users.id").onDelete("cascade").notNull()) 21 + .execute() 22 + 23 + await db.schema 24 + .createTable("artists").ifNotExists() 25 + .addColumn("artist_name", "varchar", (col) => col.notNull()) 26 + .addColumn("play_id", "integer", (col) => col.references("plays.id").onDelete("cascade").notNull()) 27 + .execute() 28 + } 29 + 30 + export async function down(db: Kysely<any>): Promise<void> { 31 + await db.schema.dropTable("users").execute() 32 + await db.schema.dropTable("plays").execute() 33 + await db.schema.dropTable("artists").execute() 34 + }
+8 -2
package.json
··· 9 9 "deploy-commands": "tsx deploy-commands.ts", 10 10 "tapper:dev": "NODE_ENV=development tsx tapper.ts", 11 11 "tapper:prod": "NODE_ENV=production tsx tapper.ts", 12 + "migrate": "tsx db/migrator.ts", 13 + "codegen": "kysely-codegen --dialect postgres", 12 14 "typecheck": "tsc --noEmit" 13 15 }, 14 16 "keywords": [ 15 17 "teal.fm", 16 - "atprotocol" 18 + "atprotocol", 19 + "music" 17 20 ], 18 21 "author": "Dane Miller <me@dane.computer>", 19 22 "license": "MIT", ··· 21 24 "dependencies": { 22 25 "@atproto/tap": "^0.0.2", 23 26 "discord.js": "^14.25.1", 24 - "kysely": "^0.28.9" 27 + "kysely": "^0.28.9", 28 + "pg": "^8.16.3" 25 29 }, 26 30 "devDependencies": { 27 31 "@types/node": "^25.0.3", 32 + "@types/pg": "^8.16.0", 33 + "kysely-codegen": "^0.19.0", 28 34 "tsx": "^4.21.0", 29 35 "typescript": "^5.9.3" 30 36 }
+644
pnpm-lock.yaml
··· 17 17 kysely: 18 18 specifier: ^0.28.9 19 19 version: 0.28.9 20 + pg: 21 + specifier: ^8.16.3 22 + version: 8.16.3 20 23 devDependencies: 21 24 '@types/node': 22 25 specifier: ^25.0.3 23 26 version: 25.0.3 27 + '@types/pg': 28 + specifier: ^8.16.0 29 + version: 8.16.0 30 + kysely-codegen: 31 + specifier: ^0.19.0 32 + version: 0.19.0(kysely@0.28.9)(pg@8.16.3)(typescript@5.9.3) 24 33 tsx: 25 34 specifier: ^4.21.0 26 35 version: 4.21.0 ··· 56 65 '@atproto/ws-client@0.0.4': 57 66 resolution: {integrity: sha512-dox1XIymuC7/ZRhUqKezIGgooZS45C6vHCfu0PnWjfvsLCK2kAlnvX4IBkA/WpcoijDhQ9ejChnFbo/sLmgvAg==} 58 67 engines: {node: '>=18.7.0'} 68 + 69 + '@babel/code-frame@7.27.1': 70 + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 71 + engines: {node: '>=6.9.0'} 72 + 73 + '@babel/helper-validator-identifier@7.28.5': 74 + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 75 + engines: {node: '>=6.9.0'} 59 76 60 77 '@discordjs/builders@1.13.1': 61 78 resolution: {integrity: sha512-cOU0UDHc3lp/5nKByDxkmRiNZBpdp0kx55aarbiAfakfKJHlxv/yFW1zmIqCAmwH5CRlrH9iMFKJMpvW4DPB+w==} ··· 256 273 '@types/node@25.0.3': 257 274 resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} 258 275 276 + '@types/pg@8.16.0': 277 + resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==} 278 + 259 279 '@types/ws@8.18.1': 260 280 resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} 261 281 ··· 267 287 resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 268 288 engines: {node: '>=6.5'} 269 289 290 + ansi-styles@3.2.1: 291 + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 292 + engines: {node: '>=4'} 293 + 294 + ansi-styles@4.3.0: 295 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 296 + engines: {node: '>=8'} 297 + 298 + argparse@2.0.1: 299 + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 300 + 270 301 atomic-sleep@1.0.0: 271 302 resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 272 303 engines: {node: '>=8.0.0'} 273 304 305 + balanced-match@1.0.2: 306 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 307 + 274 308 base64-js@1.5.1: 275 309 resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 310 + 311 + brace-expansion@1.1.12: 312 + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 313 + 314 + braces@3.0.3: 315 + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 316 + engines: {node: '>=8'} 276 317 277 318 buffer@6.0.3: 278 319 resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 279 320 321 + callsites@3.1.0: 322 + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 323 + engines: {node: '>=6'} 324 + 325 + chalk@2.4.2: 326 + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 327 + engines: {node: '>=4'} 328 + 329 + chalk@4.1.2: 330 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 331 + engines: {node: '>=10'} 332 + 333 + color-convert@1.9.3: 334 + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 335 + 336 + color-convert@2.0.1: 337 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 338 + engines: {node: '>=7.0.0'} 339 + 340 + color-name@1.1.3: 341 + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 342 + 343 + color-name@1.1.4: 344 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 345 + 346 + concat-map@0.0.1: 347 + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 348 + 349 + cosmiconfig@9.0.0: 350 + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} 351 + engines: {node: '>=14'} 352 + peerDependencies: 353 + typescript: '>=4.9.5' 354 + peerDependenciesMeta: 355 + typescript: 356 + optional: true 357 + 358 + diff@3.5.0: 359 + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} 360 + engines: {node: '>=0.3.1'} 361 + 280 362 discord-api-types@0.38.37: 281 363 resolution: {integrity: sha512-Cv47jzY1jkGkh5sv0bfHYqGgKOWO1peOrGMkDFM4UmaGMOTgOW8QSexhvixa9sVOiz8MnVOBryWYyw/CEVhj7w==} 282 364 283 365 discord.js@14.25.1: 284 366 resolution: {integrity: sha512-2l0gsPOLPs5t6GFZfQZKnL1OJNYFcuC/ETWsW4VtKVD/tg4ICa9x+jb9bkPffkMdRpRpuUaO/fKkHCBeiCKh8g==} 285 367 engines: {node: '>=18'} 368 + 369 + dotenv-expand@12.0.3: 370 + resolution: {integrity: sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==} 371 + engines: {node: '>=12'} 372 + 373 + dotenv@16.6.1: 374 + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} 375 + engines: {node: '>=12'} 376 + 377 + dotenv@17.2.3: 378 + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} 379 + engines: {node: '>=12'} 380 + 381 + env-paths@2.2.1: 382 + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} 383 + engines: {node: '>=6'} 384 + 385 + error-ex@1.3.4: 386 + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} 286 387 287 388 esbuild@0.27.2: 288 389 resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} 289 390 engines: {node: '>=18'} 290 391 hasBin: true 291 392 393 + escape-string-regexp@1.0.5: 394 + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 395 + engines: {node: '>=0.8.0'} 396 + 292 397 event-target-shim@5.0.1: 293 398 resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 294 399 engines: {node: '>=6'} ··· 304 409 resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} 305 410 engines: {node: '>=6'} 306 411 412 + fill-range@7.1.1: 413 + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 414 + engines: {node: '>=8'} 415 + 416 + fs.realpath@1.0.0: 417 + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 418 + 307 419 fsevents@2.3.3: 308 420 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 309 421 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 310 422 os: [darwin] 311 423 424 + function-bind@1.1.2: 425 + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 426 + 312 427 get-tsconfig@4.13.0: 313 428 resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} 314 429 430 + git-diff@2.0.6: 431 + resolution: {integrity: sha512-/Iu4prUrydE3Pb3lCBMbcSNIf81tgGt0W1ZwknnyF62t3tHmtiJTRj0f+1ZIhp3+Rh0ktz1pJVoa7ZXUCskivA==} 432 + engines: {node: '>= 4.8.0'} 433 + 434 + glob@7.2.3: 435 + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 436 + deprecated: Glob versions prior to v9 are no longer supported 437 + 438 + has-flag@3.0.0: 439 + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 440 + engines: {node: '>=4'} 441 + 442 + has-flag@4.0.0: 443 + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 444 + engines: {node: '>=8'} 445 + 446 + hasown@2.0.2: 447 + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 448 + engines: {node: '>= 0.4'} 449 + 315 450 ieee754@1.2.1: 316 451 resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 452 + 453 + import-fresh@3.3.1: 454 + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 455 + engines: {node: '>=6'} 456 + 457 + inflight@1.0.6: 458 + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 459 + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 460 + 461 + inherits@2.0.4: 462 + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 463 + 464 + interpret@1.4.0: 465 + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} 466 + engines: {node: '>= 0.10'} 467 + 468 + is-arrayish@0.2.1: 469 + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 470 + 471 + is-core-module@2.16.1: 472 + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 473 + engines: {node: '>= 0.4'} 474 + 475 + is-number@7.0.0: 476 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 477 + engines: {node: '>=0.12.0'} 317 478 318 479 iso-datestring-validator@2.2.2: 319 480 resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} 320 481 482 + js-tokens@4.0.0: 483 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 484 + 485 + js-yaml@4.1.1: 486 + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} 487 + hasBin: true 488 + 489 + json-parse-even-better-errors@2.3.1: 490 + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 491 + 492 + kysely-codegen@0.19.0: 493 + resolution: {integrity: sha512-ZpdQQnpfY0kh45CA6yPA9vdFsBE+b06Fx7QVcbL5rX//yjbA0yYGZGhnH7GTd4P4BY/HIv5uAfuOD83JVZf95w==} 494 + engines: {node: '>=20.0.0'} 495 + hasBin: true 496 + peerDependencies: 497 + '@libsql/kysely-libsql': '>=0.3.0 <0.5.0' 498 + '@tediousjs/connection-string': '>=0.5.0 <0.6.0' 499 + better-sqlite3: '>=7.6.2 <13.0.0' 500 + kysely: '>=0.27.0 <1.0.0' 501 + kysely-bun-sqlite: '>=0.3.2 <1.0.0' 502 + kysely-bun-worker: '>=1.2.0 <2.0.0' 503 + mysql2: '>=2.3.3 <4.0.0' 504 + pg: '>=8.8.0 <9.0.0' 505 + tarn: '>=3.0.0 <4.0.0' 506 + tedious: '>=18.0.0 <20.0.0' 507 + peerDependenciesMeta: 508 + '@libsql/kysely-libsql': 509 + optional: true 510 + '@tediousjs/connection-string': 511 + optional: true 512 + better-sqlite3: 513 + optional: true 514 + kysely-bun-sqlite: 515 + optional: true 516 + kysely-bun-worker: 517 + optional: true 518 + mysql2: 519 + optional: true 520 + pg: 521 + optional: true 522 + tarn: 523 + optional: true 524 + tedious: 525 + optional: true 526 + 321 527 kysely@0.28.9: 322 528 resolution: {integrity: sha512-3BeXMoiOhpOwu62CiVpO6lxfq4eS6KMYfQdMsN/2kUCRNuF2YiEr7u0HLHaQU+O4Xu8YXE3bHVkwaQ85i72EuA==} 323 529 engines: {node: '>=20.0.0'} 324 530 531 + lines-and-columns@1.2.4: 532 + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 533 + 325 534 lodash.snakecase@4.1.1: 326 535 resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} 327 536 328 537 lodash@4.17.21: 329 538 resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 330 539 540 + loglevel@1.9.2: 541 + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} 542 + engines: {node: '>= 0.6.0'} 543 + 331 544 magic-bytes.js@1.12.1: 332 545 resolution: {integrity: sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==} 333 546 547 + micromatch@4.0.8: 548 + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 549 + engines: {node: '>=8.6'} 550 + 551 + minimatch@3.1.2: 552 + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 553 + 554 + minimist@1.2.8: 555 + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 556 + 334 557 multiformats@9.9.0: 335 558 resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 336 559 ··· 338 561 resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} 339 562 engines: {node: '>=14.0.0'} 340 563 564 + once@1.4.0: 565 + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 566 + 567 + parent-module@1.0.1: 568 + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 569 + engines: {node: '>=6'} 570 + 571 + parse-json@5.2.0: 572 + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 573 + engines: {node: '>=8'} 574 + 575 + path-is-absolute@1.0.1: 576 + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 577 + engines: {node: '>=0.10.0'} 578 + 579 + path-parse@1.0.7: 580 + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 581 + 582 + pg-cloudflare@1.2.7: 583 + resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==} 584 + 585 + pg-connection-string@2.9.1: 586 + resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==} 587 + 588 + pg-int8@1.0.1: 589 + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} 590 + engines: {node: '>=4.0.0'} 591 + 592 + pg-pool@3.10.1: 593 + resolution: {integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==} 594 + peerDependencies: 595 + pg: '>=8.0' 596 + 597 + pg-protocol@1.10.3: 598 + resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==} 599 + 600 + pg-types@2.2.0: 601 + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} 602 + engines: {node: '>=4'} 603 + 604 + pg@8.16.3: 605 + resolution: {integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==} 606 + engines: {node: '>= 16.0.0'} 607 + peerDependencies: 608 + pg-native: '>=3.0.1' 609 + peerDependenciesMeta: 610 + pg-native: 611 + optional: true 612 + 613 + pgpass@1.0.5: 614 + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} 615 + 616 + picocolors@1.1.1: 617 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 618 + 619 + picomatch@2.3.1: 620 + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 621 + engines: {node: '>=8.6'} 622 + 341 623 pino-abstract-transport@1.2.0: 342 624 resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} 343 625 ··· 348 630 resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} 349 631 hasBin: true 350 632 633 + pluralize@8.0.0: 634 + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 635 + engines: {node: '>=4'} 636 + 637 + postgres-array@2.0.0: 638 + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} 639 + engines: {node: '>=4'} 640 + 641 + postgres-bytea@1.0.1: 642 + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} 643 + engines: {node: '>=0.10.0'} 644 + 645 + postgres-date@1.0.7: 646 + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} 647 + engines: {node: '>=0.10.0'} 648 + 649 + postgres-interval@1.2.0: 650 + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} 651 + engines: {node: '>=0.10.0'} 652 + 351 653 process-warning@3.0.0: 352 654 resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} 353 655 ··· 366 668 resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 367 669 engines: {node: '>= 12.13.0'} 368 670 671 + rechoir@0.6.2: 672 + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} 673 + engines: {node: '>= 0.10'} 674 + 675 + resolve-from@4.0.0: 676 + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 677 + engines: {node: '>=4'} 678 + 369 679 resolve-pkg-maps@1.0.0: 370 680 resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 371 681 682 + resolve@1.22.11: 683 + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} 684 + engines: {node: '>= 0.4'} 685 + hasBin: true 686 + 372 687 safe-buffer@5.2.1: 373 688 resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 374 689 ··· 376 691 resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} 377 692 engines: {node: '>=10'} 378 693 694 + shelljs.exec@1.1.8: 695 + resolution: {integrity: sha512-vFILCw+lzUtiwBAHV8/Ex8JsFjelFMdhONIsgKNLgTzeRckp2AOYRQtHJE/9LhNvdMmE27AGtzWx0+DHpwIwSw==} 696 + engines: {node: '>= 4.0.0'} 697 + 698 + shelljs@0.8.5: 699 + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} 700 + engines: {node: '>=4'} 701 + hasBin: true 702 + 379 703 sonic-boom@3.8.1: 380 704 resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} 381 705 ··· 386 710 string_decoder@1.3.0: 387 711 resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 388 712 713 + supports-color@5.5.0: 714 + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 715 + engines: {node: '>=4'} 716 + 717 + supports-color@7.2.0: 718 + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 719 + engines: {node: '>=8'} 720 + 721 + supports-preserve-symlinks-flag@1.0.0: 722 + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 723 + engines: {node: '>= 0.4'} 724 + 389 725 thread-stream@2.7.0: 390 726 resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} 727 + 728 + to-regex-range@5.0.1: 729 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 730 + engines: {node: '>=8.0'} 391 731 392 732 ts-mixer@6.0.4: 393 733 resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} ··· 417 757 418 758 unicode-segmenter@0.14.4: 419 759 resolution: {integrity: sha512-pR5VCiCrLrKOL6FRW61jnk9+wyMtKKowq+jyFY9oc6uHbWKhDL4yVRiI4YZPksGMK72Pahh8m0cn/0JvbDDyJg==} 760 + 761 + wrappy@1.0.2: 762 + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 420 763 421 764 ws@8.18.3: 422 765 resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} ··· 430 773 utf-8-validate: 431 774 optional: true 432 775 776 + xtend@4.0.2: 777 + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 778 + engines: {node: '>=0.4'} 779 + 433 780 zod@3.25.76: 434 781 resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} 782 + 783 + zod@4.2.1: 784 + resolution: {integrity: sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==} 435 785 436 786 snapshots: 437 787 ··· 489 839 transitivePeerDependencies: 490 840 - bufferutil 491 841 - utf-8-validate 842 + 843 + '@babel/code-frame@7.27.1': 844 + dependencies: 845 + '@babel/helper-validator-identifier': 7.28.5 846 + js-tokens: 4.0.0 847 + picocolors: 1.1.1 848 + 849 + '@babel/helper-validator-identifier@7.28.5': {} 492 850 493 851 '@discordjs/builders@1.13.1': 494 852 dependencies: ··· 630 988 dependencies: 631 989 undici-types: 7.16.0 632 990 991 + '@types/pg@8.16.0': 992 + dependencies: 993 + '@types/node': 25.0.3 994 + pg-protocol: 1.10.3 995 + pg-types: 2.2.0 996 + 633 997 '@types/ws@8.18.1': 634 998 dependencies: 635 999 '@types/node': 25.0.3 ··· 640 1004 dependencies: 641 1005 event-target-shim: 5.0.1 642 1006 1007 + ansi-styles@3.2.1: 1008 + dependencies: 1009 + color-convert: 1.9.3 1010 + 1011 + ansi-styles@4.3.0: 1012 + dependencies: 1013 + color-convert: 2.0.1 1014 + 1015 + argparse@2.0.1: {} 1016 + 643 1017 atomic-sleep@1.0.0: {} 1018 + 1019 + balanced-match@1.0.2: {} 644 1020 645 1021 base64-js@1.5.1: {} 646 1022 1023 + brace-expansion@1.1.12: 1024 + dependencies: 1025 + balanced-match: 1.0.2 1026 + concat-map: 0.0.1 1027 + 1028 + braces@3.0.3: 1029 + dependencies: 1030 + fill-range: 7.1.1 1031 + 647 1032 buffer@6.0.3: 648 1033 dependencies: 649 1034 base64-js: 1.5.1 650 1035 ieee754: 1.2.1 651 1036 1037 + callsites@3.1.0: {} 1038 + 1039 + chalk@2.4.2: 1040 + dependencies: 1041 + ansi-styles: 3.2.1 1042 + escape-string-regexp: 1.0.5 1043 + supports-color: 5.5.0 1044 + 1045 + chalk@4.1.2: 1046 + dependencies: 1047 + ansi-styles: 4.3.0 1048 + supports-color: 7.2.0 1049 + 1050 + color-convert@1.9.3: 1051 + dependencies: 1052 + color-name: 1.1.3 1053 + 1054 + color-convert@2.0.1: 1055 + dependencies: 1056 + color-name: 1.1.4 1057 + 1058 + color-name@1.1.3: {} 1059 + 1060 + color-name@1.1.4: {} 1061 + 1062 + concat-map@0.0.1: {} 1063 + 1064 + cosmiconfig@9.0.0(typescript@5.9.3): 1065 + dependencies: 1066 + env-paths: 2.2.1 1067 + import-fresh: 3.3.1 1068 + js-yaml: 4.1.1 1069 + parse-json: 5.2.0 1070 + optionalDependencies: 1071 + typescript: 5.9.3 1072 + 1073 + diff@3.5.0: {} 1074 + 652 1075 discord-api-types@0.38.37: {} 653 1076 654 1077 discord.js@14.25.1: ··· 670 1093 - bufferutil 671 1094 - utf-8-validate 672 1095 1096 + dotenv-expand@12.0.3: 1097 + dependencies: 1098 + dotenv: 16.6.1 1099 + 1100 + dotenv@16.6.1: {} 1101 + 1102 + dotenv@17.2.3: {} 1103 + 1104 + env-paths@2.2.1: {} 1105 + 1106 + error-ex@1.3.4: 1107 + dependencies: 1108 + is-arrayish: 0.2.1 1109 + 673 1110 esbuild@0.27.2: 674 1111 optionalDependencies: 675 1112 '@esbuild/aix-ppc64': 0.27.2 ··· 699 1136 '@esbuild/win32-ia32': 0.27.2 700 1137 '@esbuild/win32-x64': 0.27.2 701 1138 1139 + escape-string-regexp@1.0.5: {} 1140 + 702 1141 event-target-shim@5.0.1: {} 703 1142 704 1143 events@3.3.0: {} ··· 707 1146 708 1147 fast-redact@3.5.0: {} 709 1148 1149 + fill-range@7.1.1: 1150 + dependencies: 1151 + to-regex-range: 5.0.1 1152 + 1153 + fs.realpath@1.0.0: {} 1154 + 710 1155 fsevents@2.3.3: 711 1156 optional: true 712 1157 1158 + function-bind@1.1.2: {} 1159 + 713 1160 get-tsconfig@4.13.0: 714 1161 dependencies: 715 1162 resolve-pkg-maps: 1.0.0 716 1163 1164 + git-diff@2.0.6: 1165 + dependencies: 1166 + chalk: 2.4.2 1167 + diff: 3.5.0 1168 + loglevel: 1.9.2 1169 + shelljs: 0.8.5 1170 + shelljs.exec: 1.1.8 1171 + 1172 + glob@7.2.3: 1173 + dependencies: 1174 + fs.realpath: 1.0.0 1175 + inflight: 1.0.6 1176 + inherits: 2.0.4 1177 + minimatch: 3.1.2 1178 + once: 1.4.0 1179 + path-is-absolute: 1.0.1 1180 + 1181 + has-flag@3.0.0: {} 1182 + 1183 + has-flag@4.0.0: {} 1184 + 1185 + hasown@2.0.2: 1186 + dependencies: 1187 + function-bind: 1.1.2 1188 + 717 1189 ieee754@1.2.1: {} 718 1190 1191 + import-fresh@3.3.1: 1192 + dependencies: 1193 + parent-module: 1.0.1 1194 + resolve-from: 4.0.0 1195 + 1196 + inflight@1.0.6: 1197 + dependencies: 1198 + once: 1.4.0 1199 + wrappy: 1.0.2 1200 + 1201 + inherits@2.0.4: {} 1202 + 1203 + interpret@1.4.0: {} 1204 + 1205 + is-arrayish@0.2.1: {} 1206 + 1207 + is-core-module@2.16.1: 1208 + dependencies: 1209 + hasown: 2.0.2 1210 + 1211 + is-number@7.0.0: {} 1212 + 719 1213 iso-datestring-validator@2.2.2: {} 720 1214 1215 + js-tokens@4.0.0: {} 1216 + 1217 + js-yaml@4.1.1: 1218 + dependencies: 1219 + argparse: 2.0.1 1220 + 1221 + json-parse-even-better-errors@2.3.1: {} 1222 + 1223 + kysely-codegen@0.19.0(kysely@0.28.9)(pg@8.16.3)(typescript@5.9.3): 1224 + dependencies: 1225 + chalk: 4.1.2 1226 + cosmiconfig: 9.0.0(typescript@5.9.3) 1227 + dotenv: 17.2.3 1228 + dotenv-expand: 12.0.3 1229 + git-diff: 2.0.6 1230 + kysely: 0.28.9 1231 + micromatch: 4.0.8 1232 + minimist: 1.2.8 1233 + pluralize: 8.0.0 1234 + zod: 4.2.1 1235 + optionalDependencies: 1236 + pg: 8.16.3 1237 + transitivePeerDependencies: 1238 + - typescript 1239 + 721 1240 kysely@0.28.9: {} 722 1241 1242 + lines-and-columns@1.2.4: {} 1243 + 723 1244 lodash.snakecase@4.1.1: {} 724 1245 725 1246 lodash@4.17.21: {} 726 1247 1248 + loglevel@1.9.2: {} 1249 + 727 1250 magic-bytes.js@1.12.1: {} 728 1251 1252 + micromatch@4.0.8: 1253 + dependencies: 1254 + braces: 3.0.3 1255 + picomatch: 2.3.1 1256 + 1257 + minimatch@3.1.2: 1258 + dependencies: 1259 + brace-expansion: 1.1.12 1260 + 1261 + minimist@1.2.8: {} 1262 + 729 1263 multiformats@9.9.0: {} 730 1264 731 1265 on-exit-leak-free@2.1.2: {} 732 1266 1267 + once@1.4.0: 1268 + dependencies: 1269 + wrappy: 1.0.2 1270 + 1271 + parent-module@1.0.1: 1272 + dependencies: 1273 + callsites: 3.1.0 1274 + 1275 + parse-json@5.2.0: 1276 + dependencies: 1277 + '@babel/code-frame': 7.27.1 1278 + error-ex: 1.3.4 1279 + json-parse-even-better-errors: 2.3.1 1280 + lines-and-columns: 1.2.4 1281 + 1282 + path-is-absolute@1.0.1: {} 1283 + 1284 + path-parse@1.0.7: {} 1285 + 1286 + pg-cloudflare@1.2.7: 1287 + optional: true 1288 + 1289 + pg-connection-string@2.9.1: {} 1290 + 1291 + pg-int8@1.0.1: {} 1292 + 1293 + pg-pool@3.10.1(pg@8.16.3): 1294 + dependencies: 1295 + pg: 8.16.3 1296 + 1297 + pg-protocol@1.10.3: {} 1298 + 1299 + pg-types@2.2.0: 1300 + dependencies: 1301 + pg-int8: 1.0.1 1302 + postgres-array: 2.0.0 1303 + postgres-bytea: 1.0.1 1304 + postgres-date: 1.0.7 1305 + postgres-interval: 1.2.0 1306 + 1307 + pg@8.16.3: 1308 + dependencies: 1309 + pg-connection-string: 2.9.1 1310 + pg-pool: 3.10.1(pg@8.16.3) 1311 + pg-protocol: 1.10.3 1312 + pg-types: 2.2.0 1313 + pgpass: 1.0.5 1314 + optionalDependencies: 1315 + pg-cloudflare: 1.2.7 1316 + 1317 + pgpass@1.0.5: 1318 + dependencies: 1319 + split2: 4.2.0 1320 + 1321 + picocolors@1.1.1: {} 1322 + 1323 + picomatch@2.3.1: {} 1324 + 733 1325 pino-abstract-transport@1.2.0: 734 1326 dependencies: 735 1327 readable-stream: 4.7.0 ··· 750 1342 safe-stable-stringify: 2.5.0 751 1343 sonic-boom: 3.8.1 752 1344 thread-stream: 2.7.0 1345 + 1346 + pluralize@8.0.0: {} 1347 + 1348 + postgres-array@2.0.0: {} 1349 + 1350 + postgres-bytea@1.0.1: {} 1351 + 1352 + postgres-date@1.0.7: {} 1353 + 1354 + postgres-interval@1.2.0: 1355 + dependencies: 1356 + xtend: 4.0.2 753 1357 754 1358 process-warning@3.0.0: {} 755 1359 ··· 767 1371 768 1372 real-require@0.2.0: {} 769 1373 1374 + rechoir@0.6.2: 1375 + dependencies: 1376 + resolve: 1.22.11 1377 + 1378 + resolve-from@4.0.0: {} 1379 + 770 1380 resolve-pkg-maps@1.0.0: {} 771 1381 1382 + resolve@1.22.11: 1383 + dependencies: 1384 + is-core-module: 2.16.1 1385 + path-parse: 1.0.7 1386 + supports-preserve-symlinks-flag: 1.0.0 1387 + 772 1388 safe-buffer@5.2.1: {} 773 1389 774 1390 safe-stable-stringify@2.5.0: {} 1391 + 1392 + shelljs.exec@1.1.8: {} 1393 + 1394 + shelljs@0.8.5: 1395 + dependencies: 1396 + glob: 7.2.3 1397 + interpret: 1.4.0 1398 + rechoir: 0.6.2 775 1399 776 1400 sonic-boom@3.8.1: 777 1401 dependencies: ··· 783 1407 dependencies: 784 1408 safe-buffer: 5.2.1 785 1409 1410 + supports-color@5.5.0: 1411 + dependencies: 1412 + has-flag: 3.0.0 1413 + 1414 + supports-color@7.2.0: 1415 + dependencies: 1416 + has-flag: 4.0.0 1417 + 1418 + supports-preserve-symlinks-flag@1.0.0: {} 1419 + 786 1420 thread-stream@2.7.0: 787 1421 dependencies: 788 1422 real-require: 0.2.0 789 1423 1424 + to-regex-range@5.0.1: 1425 + dependencies: 1426 + is-number: 7.0.0 1427 + 790 1428 ts-mixer@6.0.4: {} 791 1429 792 1430 tslib@2.8.1: {} ··· 810 1448 811 1449 unicode-segmenter@0.14.4: {} 812 1450 1451 + wrappy@1.0.2: {} 1452 + 813 1453 ws@8.18.3: {} 814 1454 1455 + xtend@4.0.2: {} 1456 + 815 1457 zod@3.25.76: {} 1458 + 1459 + zod@4.2.1: {}
+5
types.ts
··· 1 + import type { Artists, Plays } from "kysely-codegen"; 2 + 3 + export interface TealFMPlay extends Plays { 4 + artists: Artists 5 + }