A music player that connects to your cloud/distributed storage.

feat: tracks lexicon + generate types

+325 -114
+1
.gitignore
··· 4 4 /_site 5 5 /_vendor 6 6 /dist 7 + /src/definitions/types/ 7 8 /vendor
+4
deno.jsonc
··· 4 4 "vendor": true, 5 5 "imports": { 6 6 "98.css": "npm:98.css@^0.1.21", 7 + "@atcute/lex-cli": "npm:@atcute/lex-cli@^2.3.1", 8 + "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.2", 7 9 "@bradenmacdonald/s3-lite-client": "jsr:@bradenmacdonald/s3-lite-client@^0.9.4", 8 10 "@fry69/deep-diff": "jsr:@fry69/deep-diff@^0.1.10", 9 11 "@mary/ds-queue": "jsr:@mary/ds-queue@^0.1.3", ··· 48 50 "tasks": { 49 51 "build": "deno task lume", 50 52 "deploy:netlify": "npx netlify deploy --prod", 53 + "gen:defs:types": "deno run -A npm:@atcute/lex-cli generate -c ./lexicon.config.js", 51 54 "lume": "echo \"import 'lume/cli.ts'\" | deno run --config=./deno.jsonc --allow-read --allow-write --allow-env --allow-net --allow-run --allow-sys -", 52 55 "serve": "deno task lume -s", 53 56 }, 54 57 "compilerOptions": { 55 58 "checkJs": true, 59 + "lib": ["deno", "dom", "esnext"], 56 60 "types": ["lume/types.ts"], 57 61 }, 58 62 "unstable": ["temporal", "fmt-component"],
+187 -13
deno.lock
··· 1 1 { 2 2 "version": "5", 3 3 "specifiers": { 4 + "jsr:@bradenmacdonald/s3-lite-client@~0.9.4": "0.9.4", 4 5 "jsr:@deno/loader@0.3.6": "0.3.6", 6 + "jsr:@fry69/deep-diff@~0.1.10": "0.1.10", 7 + "jsr:@mary/ds-queue@~0.1.3": "0.1.3", 8 + "jsr:@mys/m-rpc@~0.12.2": "0.12.2", 9 + "jsr:@mys/worker-fn@^3.2.1": "3.2.1", 10 + "jsr:@okikio/transferables@^1.0.2": "1.0.2", 11 + "jsr:@orama/orama@^2.0.6": "2.0.6", 5 12 "jsr:@std/cli@1.0.22": "1.0.22", 6 13 "jsr:@std/cli@^1.0.21": "1.0.22", 7 14 "jsr:@std/collections@^1.1.3": "1.1.3", ··· 29 36 "jsr:@std/toml@^1.0.3": "1.0.10", 30 37 "jsr:@std/yaml@1.0.9": "1.0.9", 31 38 "jsr:@std/yaml@^1.0.5": "1.0.9", 39 + "jsr:@vicary/debounce-microtask@~0.1.8": "0.1.8", 32 40 "npm:98.css@~0.1.21": "0.1.21", 41 + "npm:@atcute/lex-cli@*": "2.3.1", 42 + "npm:@atcute/lex-cli@^2.3.1": "2.3.1", 43 + "npm:@atcute/lexicons@^1.2.2": "1.2.2", 33 44 "npm:alien-signals@3": "3.0.3", 34 45 "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", 35 46 "npm:idb-keyval@^6.2.2": "6.2.2", ··· 50 61 "npm:xxh32@^2.0.5": "2.0.5" 51 62 }, 52 63 "jsr": { 64 + "@bradenmacdonald/s3-lite-client@0.9.4": { 65 + "integrity": "f52e31c7efdaeb1ccdf65a1db995b5920d635717c96d45dcf9450c3cc47ecaaf" 66 + }, 53 67 "@deno/loader@0.3.6": { 54 68 "integrity": "98f08d837c18ece5ba15122264fb29580967407c34e6552e152b8f453a60c2be" 55 69 }, 70 + "@fry69/deep-diff@0.1.10": { 71 + "integrity": "cdd88fefaef1ac896a038a5f3c0895038d8c725e61bac50489c455156e0275f5" 72 + }, 73 + "@mary/ds-queue@0.1.3": { 74 + "integrity": "a743caa397b924cb08b0bbdffc526eb1ea2d3fc9e675da6edc137c437fc93c76" 75 + }, 76 + "@mys/m-rpc@0.12.2": { 77 + "integrity": "36599d3d4708db9f5c0f7da35a17b7e7da1fafddb69de6cfcdc6afe94cd4f084", 78 + "dependencies": [ 79 + "jsr:@okikio/transferables" 80 + ] 81 + }, 82 + "@mys/worker-fn@3.2.1": { 83 + "integrity": "330960f21041edd20fa9c5f78b136f62e3781e35797ac635534f003545be76cd", 84 + "dependencies": [ 85 + "jsr:@mys/m-rpc" 86 + ] 87 + }, 88 + "@okikio/transferables@1.0.2": { 89 + "integrity": "46a80015a1c4672b0b246e38838b3ea1e2edc6c775a235184a2f8eb49a8314f7" 90 + }, 91 + "@orama/orama@2.0.6": { 92 + "integrity": "0221bbd9a638e42772fc6e082cf057755f83a8cea919c85fa0baa9bb027ab078" 93 + }, 56 94 "@std/cli@1.0.22": { 57 95 "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" 58 96 }, ··· 131 169 }, 132 170 "@std/yaml@1.0.9": { 133 171 "integrity": "6bad3dc766dd85b4b37eabcba81b6aa4eac7a392792ae29abcfb0f90602d55bb" 172 + }, 173 + "@vicary/debounce-microtask@0.1.8": { 174 + "integrity": "fe180e0c599903ccf7a93e719ea986c48affc1ff78951a1bc0ccb874aa30fd0e" 134 175 } 135 176 }, 136 177 "npm": { ··· 140 181 "@assemblyscript/loader@0.17.14": { 141 182 "integrity": "sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA==" 142 183 }, 184 + "@atcute/lex-cli@2.3.1": { 185 + "integrity": "sha512-HrHD91CFSFd/p0UFe3akFA1HXiboQwd5LbYiU0srKdLxGX+NLTX/EdCdhbLV6M7LsXdmxk7PB6BMcprsX4rbvg==", 186 + "dependencies": [ 187 + "@atcute/lexicon-doc", 188 + "@badrap/valita", 189 + "@optique/core", 190 + "@optique/run", 191 + "picocolors", 192 + "prettier" 193 + ], 194 + "bin": true 195 + }, 196 + "@atcute/lexicon-doc@1.1.4": { 197 + "integrity": "sha512-OL0fsXtbnN/KwCq/L3nWGvOCdSHV0NWTatgLUIPt+T9AhcziFNaXAbbjvVHdflr3ZaLh3ksleHK0J789UBhlWQ==", 198 + "dependencies": [ 199 + "@badrap/valita" 200 + ] 201 + }, 202 + "@atcute/lexicons@1.2.2": { 203 + "integrity": "sha512-bgEhJq5Z70/0TbK5sx+tAkrR8FsCODNiL2gUEvS5PuJfPxmFmRYNWaMGehxSPaXWpU2+Oa9ckceHiYbrItDTkA==", 204 + "dependencies": [ 205 + "@standard-schema/spec", 206 + "esm-env" 207 + ] 208 + }, 143 209 "@babel/runtime@7.28.4": { 144 210 "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==" 211 + }, 212 + "@badrap/valita@0.4.6": { 213 + "integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==" 145 214 }, 146 215 "@borewit/text-codec@0.1.1": { 147 216 "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==" ··· 149 218 "@borewit/text-codec@0.2.0": { 150 219 "integrity": "sha512-X999CKBxGwX8wW+4gFibsbiNdwqmdQEXmUejIWaIqdrHBgS5ARIOOeyiQbHjP9G58xVEPcuvP6VwwH3A0OFTOA==" 151 220 }, 221 + "@optique/core@0.6.2": { 222 + "integrity": "sha512-HTxIHJ8xLOSZotiU6Zc5BCJv+SJ8DMYmuiQM+7tjF7RolJn/pdZNe7M78G3+DgXL9lIf82l8aGcilmgVYRQnGQ==" 223 + }, 224 + "@optique/run@0.6.2": { 225 + "integrity": "sha512-ERksB5bHozwEUVlTPToIc8UjZZBOgLeBhFZYh2lgldUbNDt7LItzgcErsPq5au5i5IBmmyCti4+2A3x+MRI4Xw==", 226 + "dependencies": [ 227 + "@optique/core" 228 + ] 229 + }, 152 230 "@redux-devtools/extension@3.3.0_redux@5.0.1": { 153 231 "integrity": "sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==", 154 232 "dependencies": [ ··· 201 279 "@sentry/types", 202 280 "tslib" 203 281 ] 282 + }, 283 + "@standard-schema/spec@1.0.0": { 284 + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==" 204 285 }, 205 286 "@tokenizer/inflate@0.2.7": { 206 287 "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", ··· 275 356 "base64-js@1.5.1": { 276 357 "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 277 358 }, 278 - "baseline-browser-mapping@2.8.19": { 279 - "integrity": "sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==", 359 + "baseline-browser-mapping@2.8.25": { 360 + "integrity": "sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==", 280 361 "bin": true 281 362 }, 282 - "browserslist@4.26.3": { 283 - "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", 363 + "browserslist@4.27.0": { 364 + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", 284 365 "dependencies": [ 285 366 "baseline-browser-mapping", 286 367 "caniuse-lite", ··· 342 423 "get-intrinsic" 343 424 ] 344 425 }, 345 - "caniuse-lite@1.0.30001751": { 346 - "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==" 426 + "caniuse-lite@1.0.30001754": { 427 + "integrity": "sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==" 347 428 }, 348 429 "chainsaw@0.0.9": { 349 430 "integrity": "sha512-nG8PYH+/4xB+8zkV4G844EtfvZ5tTiLFoX3dZ4nhF4t3OCKIb9UvaFyNmeZO2zOSmRWzBoTD+napN6hiL+EgcA==", ··· 407 488 "eel-wasm@0.0.16": { 408 489 "integrity": "sha512-1tkId7I7E1Vs4fXTRsH83Sjn2S/AbzrVQKLBRGys6NLc3eVH4NBffJsdEeLHOWWUgQpVXBEP3CV/srUZNIuBnw==" 409 490 }, 410 - "electron-to-chromium@1.5.237": { 411 - "integrity": "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==" 491 + "electron-to-chromium@1.5.248": { 492 + "integrity": "sha512-zsur2yunphlyAO4gIubdJEXCK6KOVvtpiuDfCIqbM9FjcnMYiyn0ICa3hWfPr0nc41zcLWobgy1iL7VvoOyA2Q==" 412 493 }, 413 494 "endianness@8.0.2": { 414 495 "integrity": "sha512-IU+77+jJ7lpw2qZ3NUuqBZFy3GuioNgXUdsL1L9tooDNTaw0TgOnwNuc+8Ns+haDaTifK97QLzmOANJtI/rGvw==" ··· 430 511 }, 431 512 "escalade@3.2.0": { 432 513 "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" 514 + }, 515 + "esm-env@1.2.2": { 516 + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==" 433 517 }, 434 518 "fflate@0.8.2": { 435 519 "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" ··· 697 781 "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 698 782 "bin": true 699 783 }, 700 - "node-releases@2.0.26": { 701 - "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==" 784 + "node-releases@2.0.27": { 785 + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==" 702 786 }, 703 787 "normalize-range@0.1.2": { 704 788 "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" ··· 748 832 "picocolors", 749 833 "source-map-js" 750 834 ] 835 + }, 836 + "prettier@3.6.2": { 837 + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", 838 + "bin": true 751 839 }, 752 840 "process-nextick-args@2.0.1": { 753 841 "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" ··· 972 1060 "multiformats" 973 1061 ] 974 1062 }, 975 - "update-browserslist-db@1.1.3_browserslist@4.26.3": { 976 - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", 1063 + "update-browserslist-db@1.1.4_browserslist@4.27.0": { 1064 + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", 977 1065 "dependencies": [ 978 1066 "browserslist", 979 1067 "escalade", ··· 1040 1128 "integrity": "sha512-glQIaPvLHV4xG2Sn0E4mZWY25JT34+XcG4e2c8OMIH2SXxVrm6MmJ8miCsqGBLtf+rn2YcaeS11vq/66vkXGUQ==" 1041 1129 } 1042 1130 }, 1131 + "redirects": { 1132 + "https://esm.sh/@borewit/text-codec@^0.1.0?target=denonext": "https://esm.sh/@borewit/text-codec@0.1.1?target=denonext", 1133 + "https://esm.sh/@borewit/text-codec@^0.2.0?target=denonext": "https://esm.sh/@borewit/text-codec@0.2.0?target=denonext", 1134 + "https://esm.sh/@tokenizer/inflate@^0.2.7?target=denonext": "https://esm.sh/@tokenizer/inflate@0.2.7?target=denonext", 1135 + "https://esm.sh/@tokenizer/range@^0.12.0?target=denonext": "https://esm.sh/@tokenizer/range@0.12.0?target=denonext", 1136 + "https://esm.sh/content-type@^1.0.5?target=denonext": "https://esm.sh/content-type@1.0.5?target=denonext", 1137 + "https://esm.sh/debug@^4.3.7?target=denonext": "https://esm.sh/debug@4.4.3?target=denonext", 1138 + "https://esm.sh/debug@^4.4.0?target=denonext": "https://esm.sh/debug@4.4.3?target=denonext", 1139 + "https://esm.sh/debug@^4.4.3?target=denonext": "https://esm.sh/debug@4.4.3?target=denonext", 1140 + "https://esm.sh/fflate@^0.8.2?target=denonext": "https://esm.sh/fflate@0.8.2?target=denonext", 1141 + "https://esm.sh/file-type@^21.0.0?target=denonext": "https://esm.sh/file-type@21.0.0?target=denonext", 1142 + "https://esm.sh/ieee754@^1.2.1?target=denonext": "https://esm.sh/ieee754@1.2.1?target=denonext", 1143 + "https://esm.sh/media-typer@^1.1.0?target=denonext": "https://esm.sh/media-typer@1.1.0?target=denonext", 1144 + "https://esm.sh/ms@^2.1.3?target=denonext": "https://esm.sh/ms@2.1.3?target=denonext", 1145 + "https://esm.sh/peek-readable@^5.3.1?target=denonext": "https://esm.sh/peek-readable@5.4.2?target=denonext", 1146 + "https://esm.sh/strtok3@^10.2.0?target=denonext": "https://esm.sh/strtok3@10.3.4?target=denonext", 1147 + "https://esm.sh/strtok3@^10.2.2/core?target=denonext": "https://esm.sh/strtok3@10.3.4/core?target=denonext", 1148 + "https://esm.sh/strtok3@^10.3.4?target=denonext": "https://esm.sh/strtok3@10.3.4?target=denonext", 1149 + "https://esm.sh/strtok3@^9.1.1?target=denonext": "https://esm.sh/strtok3@9.1.1?target=denonext", 1150 + "https://esm.sh/supports-color?target=denonext": "https://esm.sh/supports-color@10.2.2?target=denonext", 1151 + "https://esm.sh/token-types@^6.0.0?target=denonext": "https://esm.sh/token-types@6.1.1?target=denonext", 1152 + "https://esm.sh/token-types@^6.1.1?target=denonext": "https://esm.sh/token-types@6.1.1?target=denonext", 1153 + "https://esm.sh/uint8array-extras@^1.4.0?target=denonext": "https://esm.sh/uint8array-extras@1.5.0?target=denonext", 1154 + "https://esm.sh/uint8array-extras@^1.5.0?target=denonext": "https://esm.sh/uint8array-extras@1.5.0?target=denonext" 1155 + }, 1043 1156 "remote": { 1044 1157 "https://deno.land/std@0.170.0/_util/asserts.ts": "d0844e9b62510f89ce1f9878b046f6a57bf88f208a10304aab50efcb48365272", 1045 1158 "https://deno.land/std@0.170.0/_util/os.ts": "8a33345f74990e627b9dfe2de9b040004b08ea5146c7c9e8fe9a29070d193934", ··· 1268 1381 "https://deno.land/x/lume@v3.0.11/plugins/url.ts": "15f2e80b6fcbf86f8795a3676b8d533bab003ac016ff127e58165a6ac3bffc1a", 1269 1382 "https://deno.land/x/lume@v3.0.11/plugins/vento.ts": "fd60ee80435994bcf88b2cda9c51eaed0ba49a2363f42920675f2d5a0a4a6ab2", 1270 1383 "https://deno.land/x/lume@v3.0.11/plugins/yaml.ts": "d0ebf37c38648172c6b95c502753a3edf60278ab4f6a063f3ca00f31e0dd90cc", 1384 + "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts": "a334a1ee3a25de7f3b84b7b8d842bcae40e9116f6edb6ec76cb265712c8a2ab8", 1271 1385 "https://deno.land/x/vento@v2.1.1/core/environment.ts": "36f3e145adfe1af3740cfcfc6ff237d6fe48225d3627123b17022251afbe3074", 1272 1386 "https://deno.land/x/vento@v2.1.1/core/errors.ts": "8606b682b465d598a394feea135dd2f84033b5ef2a61a23d116ccb782a0a547a", 1273 1387 "https://deno.land/x/vento@v2.1.1/core/js.ts": "83084240150d7e8b83e43ec8fcf78564a8ba8599c3d517976efbb11b208903b2", ··· 1289 1403 "https://deno.land/x/vento@v2.1.1/plugins/mod.ts": "017d5bb3e3c80b7f67271cdf8779686f55916070c5d168a143e6a37c35bcd731", 1290 1404 "https://deno.land/x/vento@v2.1.1/plugins/set.ts": "cf9dfbf68b52039781fd86ec0b9587a8bcd486fdef9f08989719cfdb7fa233d0", 1291 1405 "https://deno.land/x/vento@v2.1.1/plugins/trim.ts": "8d33271327b09ffd8f569ebde85125b1324fa9538a54d6072ac97a9fb5d24264", 1292 - "https://deno.land/x/vento@v2.1.1/plugins/unescape.ts": "1c56f0310c7757880df7684fc6b7bf9efd27fdb6b929b89626802f5a99cb93ee" 1406 + "https://deno.land/x/vento@v2.1.1/plugins/unescape.ts": "1c56f0310c7757880df7684fc6b7bf9efd27fdb6b929b89626802f5a99cb93ee", 1407 + "https://esm.sh/@borewit/text-codec@0.1.1/denonext/text-codec.mjs": "ea8f41f92f2798340cf2b568602fc1e6f9957e8192265d92d6d06725d0bbfcff", 1408 + "https://esm.sh/@borewit/text-codec@0.1.1?target=denonext": "a3d25ab29c470e2e6909ba99905ec372fa66bcc46dd22732dc80b6871603548c", 1409 + "https://esm.sh/@borewit/text-codec@0.2.0/denonext/text-codec.mjs": "1fa7af74bcd1b8c1a460836447074360915a752cffe0dbdb8ac472f422a7fbd9", 1410 + "https://esm.sh/@borewit/text-codec@0.2.0?target=denonext": "eeee292364426dcdf670db8c94fab465a2308318f20be285ad500336bbc83e5c", 1411 + "https://esm.sh/@tokenizer/http@0.9.2/denonext/lib/http-client.mjs": "38999713979a80886994c1ed9b0e20936d019aee9d239b736f7a8bd857b98e1c", 1412 + "https://esm.sh/@tokenizer/http@0.9.2/lib/http-client.js": "8b84ffc15c9fe43835c1083d10940ed4397f940c3c2d04d2c9193059aff60964", 1413 + "https://esm.sh/@tokenizer/inflate@0.2.7/denonext/inflate.mjs": "ba141d0e59f11c19e2012b5b1fdd3f23f2514495e700fa3013db051e20863f91", 1414 + "https://esm.sh/@tokenizer/inflate@0.2.7?target=denonext": "bbc80d9e77f0da6ce0d1adef82539261020623b044410c2a52570bf15b02afe2", 1415 + "https://esm.sh/@tokenizer/range@0.12.0/denonext/range.mjs": "7e1e470c638f4e654ce1244e6b256f14b108148273987cbfb8736faa89b30f1b", 1416 + "https://esm.sh/@tokenizer/range@0.12.0?target=denonext": "10d3d7b112467d490e1743263d5dba231c069eba0b66f7a2c683d4d64334e19b", 1417 + "https://esm.sh/@tokenizer/range@0.13.0/denonext/range.mjs": "da9decedb2697a2dadc4293c2d99fb7de8eb262599a124590f26e62e692008b9", 1418 + "https://esm.sh/@tokenizer/range@0.13.0/lib/index.js": "a2b7e610d108dd0dd02da635fc42a4c14cd7a71d52e3704b7fc8e99653cb6416", 1419 + "https://esm.sh/content-type@1.0.5/denonext/content-type.mjs": "6fd962b99a80821956a22379aded6b7ca37cfbf95be5639047437e03211e1b56", 1420 + "https://esm.sh/content-type@1.0.5?target=denonext": "9eb28c5db95297f2dc51214da829cd8d7b7f3d7bf17dcbf2f60f300173ca8343", 1421 + "https://esm.sh/debug@4.4.3/denonext/debug.mjs": "fc4bb8fd2502bf87537c57f5c7c3213eb0258040361828a03970ba7d0933c516", 1422 + "https://esm.sh/debug@4.4.3?target=denonext": "9df8b8806c13297f96185899110f8146b8b0c7944847c8392cbfb4e730a634dd", 1423 + "https://esm.sh/fflate@0.8.2/denonext/fflate.mjs": "51759ec52e8522bbcd6dce941956a878c733975dcc159618c683c659270a59d3", 1424 + "https://esm.sh/fflate@0.8.2?target=denonext": "e0cdd268850b4eac9ef9f188a3b4c5c9dd3ebd0f66c4006a13911b2a0c0512bb", 1425 + "https://esm.sh/file-type@21.0.0/denonext/file-type.mjs": "ef71de29ef71c13095f6ce3fd63288a201dbba91cd70d2342436956b9e07d6e9", 1426 + "https://esm.sh/file-type@21.0.0?target=denonext": "e797e823999c60b6447441f60631803faee3d9c48baf948dfff9d75b8aae2361", 1427 + "https://esm.sh/ieee754@1.2.1/denonext/ieee754.mjs": "6e87635f6124ae21ea355a521f021a04afc277248bd5097dc85edce4d7017f86", 1428 + "https://esm.sh/ieee754@1.2.1?target=denonext": "b8839b7562d93529fd58ec105fa4230b816e3dd0a2dd35e3d3b07cae2f16ae97", 1429 + "https://esm.sh/media-typer@1.1.0/denonext/media-typer.mjs": "3dc6174765452b8271cad4031a308c8015c67bee4de2b0aff5daec36cb1b766e", 1430 + "https://esm.sh/media-typer@1.1.0?target=denonext": "8d2581e00eea8816b1bd4a698ad68e928402b462e697077e9fffb1e960e25d50", 1431 + "https://esm.sh/ms@2.1.3/denonext/ms.mjs": "9039464da1f4ae1c2042742d335c82556c048bbe49449b5d0cd5198193afa147", 1432 + "https://esm.sh/ms@2.1.3?target=denonext": "36f5aa7503ff0ff44ce9e3155a60362d8d3ae5db8db048be5764a3a515b6a263", 1433 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/aiff/AiffParser.mjs": "9589f066b8770e6d8cc5ccd08199158a7c1a5ec8797c8af268071866604a1852", 1434 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/apev2/APEv2Parser.mjs": "3595d619cef291dd82f23dd8045b91e995b448fa6727c9f9a802be1f496584e4", 1435 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/asf/AsfParser.mjs": "c7a8e7490d82eb8578d0d4f91293761f67d4217125791d2ebc730ec1318bbf85", 1436 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/core.mjs": "f8300b19edc7159ae65bbb3b15af99a52dc1067eb022a0acd60ae08e39b88961", 1437 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/dsdiff/DsdiffParser.mjs": "1f4e33d399200dbef55286a357dc8ff8e57377f37cfc999c04a6dff646663896", 1438 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/dsf/DsfParser.mjs": "eae0eac54d0638200b3cda31612559f3dcbf4d399aee6040364dd559487fea09", 1439 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/flac/FlacParser.mjs": "422777d4646ce64e0112c14f649f466b5d6fe2e74e4c582e2652edd03eb48ce0", 1440 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/matroska/MatroskaParser.mjs": "b8714d5e77c13319673db0f34a80710de8fdb1fb4047d6405d301fa4bed52ddf", 1441 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/mp4/MP4Parser.mjs": "9ab9fcae397cac31d54018ef05e81d639160c80847ed15356b85ec7937c2978a", 1442 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/mpeg/MpegParser.mjs": "9cade9c40906843ec596396352af8cb19f466fc78c081b3ba9f7135372304230", 1443 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/musepack/MusepackParser.mjs": "e9672e8603a0cd6bcbb52978082fb1cc7533cdebacf5c382f0e398c2badb86e4", 1444 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/ogg/OggParser.mjs": "a1801b61660907dec429f162e63367e048fb357cb0c83b0aa3f0cec8a8786554", 1445 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/wav/WaveParser.mjs": "99450cb1f387ed495f0880db1352e8aeef60f9f754116abd168c9fdd88d2beca", 1446 + "https://esm.sh/music-metadata@11.9.0/denonext/lib/wavpack/WavPackParser.mjs": "1e22a6a0886d48ed4d965e5f2535639bb8acbb2a992c7660f1a73c20256fc64b", 1447 + "https://esm.sh/music-metadata@11.9.0/lib/core.js": "5c5c3ef0ef7624e374ffb3cb615bd16fa35d99b67a45b6e76bd2bac6183a999f", 1448 + "https://esm.sh/peek-readable@5.4.2/denonext/peek-readable.mjs": "7e784eacb3816872f18606f82cc3f30f2d11e674c5199f84e6cf7d820a3ced23", 1449 + "https://esm.sh/peek-readable@5.4.2?target=denonext": "6e1779af5114cfd4f28e9c2d7bbc51a57aef81a958981ed4140761e616e0b8a1", 1450 + "https://esm.sh/strtok3@10.3.4/core?target=denonext": "935bc31ec3d554a733ef4dbaec81137e00d3333c81deadf9de58de4c095746d1", 1451 + "https://esm.sh/strtok3@10.3.4/denonext/core.mjs": "3183a30c522666467d6d0b5234113fe216e1ec79f4bd135002545458323d62f4", 1452 + "https://esm.sh/strtok3@10.3.4/denonext/lib/stream/AbstractStreamReader.mjs": "675c8d26bd83e2e8907a988ba996e1ca45ae10397579d83ed027c14b13e78134", 1453 + "https://esm.sh/strtok3@10.3.4/denonext/lib/stream/Errors.mjs": "1459007f24621eb036ba3be2fa592ce39381874722aab8e0302f8d6345a620d6", 1454 + "https://esm.sh/strtok3@10.3.4/denonext/lib/stream/index.mjs": "7b6b3d37331712b157f2f6108081831b574d2b6493049aa8738834c4961ae633", 1455 + "https://esm.sh/strtok3@10.3.4/denonext/strtok3.mjs": "7228ab10418d0fcee23ac018de8c4843c796471c691c9e940540a23145d589e6", 1456 + "https://esm.sh/strtok3@10.3.4?target=denonext": "529358386976a93cbb5db101cda728e9cf25ac9d7d13663ee0d714bd92e54f83", 1457 + "https://esm.sh/strtok3@9.1.1/denonext/strtok3.mjs": "72f95ec1079a343006ffc12ca7f7c39fac9f46009265e0ca90a4ea8ee1bb21f7", 1458 + "https://esm.sh/strtok3@9.1.1?target=denonext": "d72e11d3fbf73c34c4cd8662a9386d8efa0ac8f8a66c93e3a6f7111ba2761370", 1459 + "https://esm.sh/supports-color@10.2.2/denonext/supports-color.mjs": "a263c0229c209e3fed166348cd02e96f08996902c9e8e7c6de4ac50c8ee2a748", 1460 + "https://esm.sh/supports-color@10.2.2?target=denonext": "f938c90ae6175cd0ec937dabb90259b115033d9dfde267b69566089f06f92d06", 1461 + "https://esm.sh/token-types@6.1.1/denonext/token-types.mjs": "84e80406d9aed2a04e049b9629d9769d66c5665dcf0f781605e0b9a8c6276265", 1462 + "https://esm.sh/token-types@6.1.1?target=denonext": "006570441bb0e41ec43ef18fbf171264c2058298ce6511f2ad4a5f488a21312a", 1463 + "https://esm.sh/uint8array-extras@1.5.0/denonext/uint8array-extras.mjs": "660b5b7967799e1ab7274f0062b66fc33a86c68df583429d8c52fa0b32332ae9", 1464 + "https://esm.sh/uint8array-extras@1.5.0?target=denonext": "04a46e303f8dc389be14886417be8ac772550255f6801a33411511711cdb3546" 1293 1465 }, 1294 1466 "workspace": { 1295 1467 "dependencies": [ ··· 1304 1476 "jsr:@std/path@^1.1.2", 1305 1477 "jsr:@vicary/debounce-microtask@~0.1.8", 1306 1478 "npm:98.css@~0.1.21", 1479 + "npm:@atcute/lex-cli@^2.3.1", 1480 + "npm:@atcute/lexicons@^1.2.2", 1307 1481 "npm:alien-signals@3", 1308 1482 "npm:idb-keyval@^6.2.2", 1309 1483 "npm:lit-html@^3.3.1",
+6
lexicon.config.js
··· 1 + import { defineLexiconConfig } from "@atcute/lex-cli"; 2 + 3 + export default defineLexiconConfig({ 4 + files: ["src/definitions/**/*.json"], 5 + outdir: "src/definitions/", 6 + });
+6 -96
src/common/types.d.ts
··· 1 + import type { mainSchema as Track } from "../definitions/types/sh/diffuse/output/tracks.ts"; 2 + 3 + // RE-EXPORT 4 + 5 + export type { mainSchema as Track } from "../definitions/types/sh/diffuse/output/tracks.ts"; 6 + 1 7 /* INPUT */ 2 8 3 9 /** ··· 31 37 /* TRACKS */ 32 38 33 39 export type ResolvedUri = undefined | { url: string; expiresAt: number }; // TODO: Streams? 34 - 35 - export interface Track<Stats = TrackStats, Tags = TrackTags> { 36 - id: string; 37 - 38 - kind?: "music" | "audiobook" | "podcast" | "placeholder" | "miscellaneous"; 39 - stats?: Stats; 40 - tags?: Tags; 41 - 42 - // NOTE: This is a "semi-permanent" URI. 43 - // 44 - // Tracks are cached so you can't, for example, 45 - // use an URL that expires in several hours. 46 - uri: string; 47 - } 48 - 49 - export interface TrackStats { 50 - /** Album gain in dB */ 51 - albumGain?: number; 52 - 53 - /** Bits per second */ 54 - bitrate?: number; 55 - 56 - /** Bit depth */ 57 - bitsPerSample?: number; 58 - 59 - /** Compression algorithm used */ 60 - codec?: string; 61 - 62 - /** Encoding format used */ 63 - container?: string; 64 - 65 - /** Duration in seconds */ 66 - duration?: number; 67 - 68 - /** Is track lossless? */ 69 - lossless?: boolean; 70 - 71 - /** Number of audio channels */ 72 - numberOfChannels?: number; 73 - 74 - /** Samples per second */ 75 - sampleRate?: number; 76 - 77 - /** Track gain in dB */ 78 - trackGain?: number; 79 - } 80 - 81 - export interface TrackTags { 82 - album?: string; 83 - albumartist?: string; 84 - albumartists?: string[]; 85 - albumartistsort?: string; 86 - albumsort?: string; 87 - arranger?: string[]; 88 - artist?: string; 89 - artists?: string[]; 90 - artistsort?: string; 91 - asin?: string; 92 - averageLevel?: number; 93 - barcode?: string; 94 - bpm?: number; 95 - catalognumbers?: string[]; 96 - compilation?: boolean; 97 - composers?: string[]; 98 - composersort?: string; 99 - conductors?: string[]; 100 - date?: string; 101 - disc: { no: number; of?: number }; 102 - djmixers?: string[]; 103 - engineers?: string[]; 104 - gapless?: boolean; 105 - genres?: string[]; 106 - isrc?: string[]; 107 - labels?: string[]; 108 - lyricists?: string[]; 109 - media?: string; 110 - mixers?: string[]; 111 - moods?: string[]; 112 - originaldate?: string; 113 - originalyear?: number; 114 - peakLevel?: number; 115 - producers?: string[]; 116 - publishers?: string[]; 117 - releasecountry?: string; 118 - releasedate?: string; 119 - releasestatus?: string; 120 - releasetypes?: string[]; 121 - remixers?: string[]; 122 - technicians?: string[]; 123 - title: string; 124 - titlesort?: string; 125 - track: { no: number; of?: number }; 126 - work?: string; 127 - writers?: string[]; 128 - year?: number; 129 - }
+1
src/definitions/index.ts
··· 1 + export * as ShDiffuseOutputTracks from "./types/sh/diffuse/output/tracks.js";
+115
src/definitions/output/tracks.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.diffuse.output.tracks", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "record": { 8 + "type": "object", 9 + "required": ["id", "uri"], 10 + "properties": { 11 + "id": { "type": "string" }, 12 + "createdAt": { "type": "string", "format": "datetime" }, 13 + "kind": { 14 + "type": "string", 15 + "enum": ["audiobook", "miscellaneous", "music", "placeholder", "podcast"] 16 + }, 17 + "stats": { 18 + "type": "ref", 19 + "ref": "#stats" 20 + }, 21 + "tags": { 22 + "type": "ref", 23 + "ref": "#tags" 24 + }, 25 + "updatedAt": { "type": "string", "format": "datetime" }, 26 + "uri": { 27 + "type": "string", 28 + "description": "This is a 'semi-permanent' URI. Tracks are typically cached so you can't, for example, use an URL that expires in several hours." 29 + } 30 + } 31 + } 32 + }, 33 + "count": { 34 + "type": "object", 35 + "required": ["no"], 36 + "properties": { 37 + "no": { "type": "integer" }, 38 + "of": { "type": "integer" } 39 + } 40 + }, 41 + "stats": { 42 + "type": "object", 43 + "properties": { 44 + "albumGain": { "type": "integer", "description": "Album gain in dB" }, 45 + "bitrate": { "type": "integer", "description": "Bits per second" }, 46 + "bitsPerSample": { "type": "integer", "description": "Bit depth" }, 47 + "codec": { "type": "string", "description": "Compression algorithm" }, 48 + "container": { "type": "string", "description": "Encoding format" }, 49 + "duration": { "type": "integer", "description": "Duration in seconds" }, 50 + "lossless": { "type": "boolean", "description": "Is track lossless" }, 51 + "numberOfChannels": { "type": "integer", "description": "Number of audio channels" }, 52 + "sampleRate": { "type": "integer", "description": "Samples per second" }, 53 + "trackGain": { "type": "integer", "description": "Track gain in dB" } 54 + } 55 + }, 56 + "tags": { 57 + "type": "object", 58 + "properties": { 59 + "album": { "type": "string" }, 60 + "albumartist": { "type": "string" }, 61 + "albumartists": { "type": "array", "items": { "type": "string" } }, 62 + "albumartistsort": { "type": "string" }, 63 + "albumsort": { "type": "string" }, 64 + "arranger": { "type": "array", "items": { "type": "string" } }, 65 + "artist": { "type": "string" }, 66 + "artists": { "type": "array", "items": { "type": "string" } }, 67 + "artistsort": { "type": "string" }, 68 + "asin": { "type": "string" }, 69 + "averageLevel": { "type": "integer" }, 70 + "barcode": { "type": "string" }, 71 + "bpm": { "type": "integer" }, 72 + "catalognumbers": { "type": "array", "items": { "type": "string" } }, 73 + "compilation": { "type": "boolean" }, 74 + "composers": { "type": "array", "items": { "type": "string" } }, 75 + "composersort": { "type": "string" }, 76 + "conductors": { "type": "array", "items": { "type": "string" } }, 77 + "date": { "type": "string" }, 78 + "disc": { 79 + "type": "ref", 80 + "ref": "#count" 81 + }, 82 + "djmixers": { "type": "array", "items": { "type": "string" } }, 83 + "engineers": { "type": "array", "items": { "type": "string" } }, 84 + "gapless": { "type": "boolean" }, 85 + "genres": { "type": "array", "items": { "type": "string" } }, 86 + "isrc": { "type": "array", "items": { "type": "string" } }, 87 + "labels": { "type": "array", "items": { "type": "string" } }, 88 + "lyricists": { "type": "array", "items": { "type": "string" } }, 89 + "media": { "type": "string" }, 90 + "mixers": { "type": "array", "items": { "type": "string" } }, 91 + "moods": { "type": "array", "items": { "type": "string" } }, 92 + "originaldate": { "type": "string" }, 93 + "originalyear": { "type": "integer" }, 94 + "peakLevel": { "type": "integer" }, 95 + "producers": { "type": "array", "items": { "type": "string" } }, 96 + "publishers": { "type": "array", "items": { "type": "string" } }, 97 + "releasecountry": { "type": "string" }, 98 + "releasedate": { "type": "string" }, 99 + "releasestatus": { "type": "string" }, 100 + "releasetypes": { "type": "array", "items": { "type": "string" } }, 101 + "remixers": { "type": "array", "items": { "type": "string" } }, 102 + "technicians": { "type": "array", "items": { "type": "string" } }, 103 + "title": { "type": "string" }, 104 + "titlesort": { "type": "string" }, 105 + "track": { 106 + "type": "ref", 107 + "ref": "#count" 108 + }, 109 + "work": { "type": "string" }, 110 + "writers": { "type": "array", "items": { "type": "string" } }, 111 + "year": { "type": "integer" } 112 + } 113 + } 114 + } 115 + }
+5 -5
src/index.vto
··· 91 91 desc: "Raw data schema output ⇄ JSON UTF8 string." 92 92 todo: true 93 93 94 - # SCHEMAS 94 + # DEFINITIONS 95 95 96 - schemas: 96 + definitions: 97 97 - title: "Output / Favourites" 98 98 desc: "Indicate a user's favourite audio. Not a property of a track because tracks are associated with a specific source. Favourites may match with multiple tracks. Specified using the audio's title and artist." 99 99 todo: true ··· 227 227 </div> 228 228 </section> 229 229 230 - <!-- SCHEMAS --> 230 + <!-- DEFINITIONS --> 231 231 <section> 232 - <h2 id="schemas">Schemas</h2> 232 + <h2 id="definitions">Definitions</h2> 233 233 234 - <p>All of the elements here are built with these data schemas in mind. That said, you can mix elements that use different schemas; you just have to put a transformer between them in order to translate between the schemas.</p> 234 + <p>All of the elements here are built with these data definitions in mind. That said, you can mix elements that use different definitions; you just have to put a transformer between them in order to translate between them.</p> 235 235 236 236 {{ await comp.list({ items: schemas }) }} 237 237 </section>