this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

layout: add codemirror editor

Clément ba1225a4 fa3e0db7

+172 -19
+2
app/package.json
··· 24 24 "@atcute/oauth-browser-client": "^3.0.0", 25 25 "@atproto/jwk": "^0.6.0", 26 26 "@cloudflare/vite-plugin": "^1.28.0", 27 + "@codemirror/lang-javascript": "^6.2.5", 27 28 "@prisma/adapter-d1": "7.2.0", 28 29 "@prisma/client": "7.2.0", 29 30 "@tailwindcss/vite": "^4.2.1", ··· 41 42 "@tanstack/store": "^0.9.2", 42 43 "@trivago/prettier-plugin-sort-imports": "^6.0.2", 43 44 "@types/node": "^24.10.12", 45 + "codemirror": "^6.0.2", 44 46 "eslint": "^10.0.3", 45 47 "lucide-solid": "^0.577.0", 46 48 "prettier": "^3.8.1",
+15 -19
app/src/routes/index.tsx
··· 1 + import { javascript } from '@codemirror/lang-javascript'; 1 2 import { createFileRoute } from '@tanstack/solid-router'; 2 - import { createServerFn } from '@tanstack/solid-start'; 3 - import { For } from 'solid-js'; 4 - 5 - import { prisma } from '~/server/db.server'; 6 - 7 - const getUsers = createServerFn().handler(async () => { 8 - const users = await prisma.user.findMany(); 9 - return users; 10 - }); 3 + import { EditorView, basicSetup } from 'codemirror'; 4 + import { onCleanup, onMount } from 'solid-js'; 11 5 12 6 export const Route = createFileRoute('/')({ 13 7 component: RouteComponent, 14 - loader: () => getUsers(), 15 8 }); 16 9 17 10 function RouteComponent() { 18 - const data = Route.useLoaderData(); 19 - const users = data(); 11 + let ref: HTMLDivElement; 12 + let view: EditorView; 20 13 21 - return ( 22 - <div> 23 - <ul> 24 - <For each={users}>{(user) => <li>{user.did}</li>}</For> 25 - </ul> 26 - </div> 27 - ); 14 + onMount(() => { 15 + view = new EditorView({ 16 + extensions: [basicSetup, javascript()], 17 + parent: ref!, 18 + }); 19 + }); 20 + 21 + onCleanup(() => view?.destroy()); 22 + 23 + return <div ref={ref!} />; 28 24 }
+8
app/vite.config.ts
··· 34 34 ), 35 35 'import.meta.env.VITE_OAUTH_SCOPE': JSON.stringify(metadata.scope), 36 36 }, 37 + optimizeDeps: { 38 + exclude: ['@codemirror/lang-javascript', 'codemirror'], 39 + }, 40 + ssr: { 41 + optimizeDeps: { 42 + exclude: ['@codemirror/lang-javascript', 'codemirror'], 43 + }, 44 + }, 37 45 });
+147
pnpm-lock.yaml
··· 34 34 '@cloudflare/vite-plugin': 35 35 specifier: ^1.28.0 36 36 version: 1.28.0(vite@8.0.0(@types/node@24.10.12)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))(workerd@1.20260312.1)(wrangler@4.73.0) 37 + '@codemirror/lang-javascript': 38 + specifier: ^6.2.5 39 + version: 6.2.5 37 40 '@prisma/adapter-d1': 38 41 specifier: 7.2.0 39 42 version: 7.2.0 ··· 85 88 '@types/node': 86 89 specifier: ^24.10.12 87 90 version: 24.10.12 91 + codemirror: 92 + specifier: ^6.0.2 93 + version: 6.0.2 88 94 eslint: 89 95 specifier: ^10.0.3 90 96 version: 10.0.3(jiti@2.6.1) ··· 337 343 338 344 '@cloudflare/workers-types@4.20260207.0': 339 345 resolution: {integrity: sha512-PSxgnAOK0EtTytlY7/+gJcsQJYg0Qo7KlOMSC/wiBE+pBqKjuKdd1ZgM+NvpPNqZAjWV5jqAMTTNYEmgk27gYw==} 346 + 347 + '@codemirror/autocomplete@6.20.1': 348 + resolution: {integrity: sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A==} 349 + 350 + '@codemirror/commands@6.10.3': 351 + resolution: {integrity: sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==} 352 + 353 + '@codemirror/lang-javascript@6.2.5': 354 + resolution: {integrity: sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==} 355 + 356 + '@codemirror/language@6.12.2': 357 + resolution: {integrity: sha512-jEPmz2nGGDxhRTg3lTpzmIyGKxz3Gp3SJES4b0nAuE5SWQoKdT5GoQ69cwMmFd+wvFUhYirtDTr0/DRHpQAyWg==} 358 + 359 + '@codemirror/lint@6.9.5': 360 + resolution: {integrity: sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA==} 361 + 362 + '@codemirror/search@6.6.0': 363 + resolution: {integrity: sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==} 364 + 365 + '@codemirror/state@6.6.0': 366 + resolution: {integrity: sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==} 367 + 368 + '@codemirror/view@6.40.0': 369 + resolution: {integrity: sha512-WA0zdU7xfF10+5I3HhUUq3kqOx3KjqmtQ9lqZjfK7jtYk4G72YW9rezcSywpaUMCWOMlq+6E0pO1IWg1TNIhtg==} 340 370 341 371 '@cspotcode/source-map-support@0.8.1': 342 372 resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} ··· 925 955 '@jridgewell/trace-mapping@0.3.9': 926 956 resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 927 957 958 + '@lezer/common@1.5.1': 959 + resolution: {integrity: sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==} 960 + 961 + '@lezer/highlight@1.2.3': 962 + resolution: {integrity: sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==} 963 + 964 + '@lezer/javascript@1.5.4': 965 + resolution: {integrity: sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==} 966 + 967 + '@lezer/lr@1.4.8': 968 + resolution: {integrity: sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==} 969 + 970 + '@marijn/find-cluster-break@1.0.2': 971 + resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} 972 + 928 973 '@mrleebo/prisma-ast@0.12.1': 929 974 resolution: {integrity: sha512-JwqeCQ1U3fvccttHZq7Tk0m/TMC6WcFAQZdukypW3AzlJYKYTGNVd1ANU2GuhKnv4UQuOFj3oAl0LLG/gxFN1w==} 930 975 engines: {node: '>=16'} ··· 2238 2283 resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 2239 2284 engines: {node: '>=6'} 2240 2285 2286 + codemirror@6.0.2: 2287 + resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==} 2288 + 2241 2289 comment-parser@1.4.5: 2242 2290 resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==} 2243 2291 engines: {node: '>= 12.0.0'} ··· 2258 2306 cookie@1.1.1: 2259 2307 resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} 2260 2308 engines: {node: '>=18'} 2309 + 2310 + crelt@1.0.6: 2311 + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} 2261 2312 2262 2313 cross-spawn@7.0.6: 2263 2314 resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} ··· 3351 3402 resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 3352 3403 engines: {node: '>=0.10.0'} 3353 3404 3405 + style-mod@4.1.3: 3406 + resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} 3407 + 3354 3408 supports-color@10.2.2: 3355 3409 resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} 3356 3410 engines: {node: '>=18'} ··· 3561 3615 peerDependencies: 3562 3616 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 3563 3617 3618 + w3c-keyname@2.2.8: 3619 + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} 3620 + 3564 3621 webpack-virtual-modules@0.6.2: 3565 3622 resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} 3566 3623 ··· 3977 4034 3978 4035 '@cloudflare/workers-types@4.20260207.0': {} 3979 4036 4037 + '@codemirror/autocomplete@6.20.1': 4038 + dependencies: 4039 + '@codemirror/language': 6.12.2 4040 + '@codemirror/state': 6.6.0 4041 + '@codemirror/view': 6.40.0 4042 + '@lezer/common': 1.5.1 4043 + 4044 + '@codemirror/commands@6.10.3': 4045 + dependencies: 4046 + '@codemirror/language': 6.12.2 4047 + '@codemirror/state': 6.6.0 4048 + '@codemirror/view': 6.40.0 4049 + '@lezer/common': 1.5.1 4050 + 4051 + '@codemirror/lang-javascript@6.2.5': 4052 + dependencies: 4053 + '@codemirror/autocomplete': 6.20.1 4054 + '@codemirror/language': 6.12.2 4055 + '@codemirror/lint': 6.9.5 4056 + '@codemirror/state': 6.6.0 4057 + '@codemirror/view': 6.40.0 4058 + '@lezer/common': 1.5.1 4059 + '@lezer/javascript': 1.5.4 4060 + 4061 + '@codemirror/language@6.12.2': 4062 + dependencies: 4063 + '@codemirror/state': 6.6.0 4064 + '@codemirror/view': 6.40.0 4065 + '@lezer/common': 1.5.1 4066 + '@lezer/highlight': 1.2.3 4067 + '@lezer/lr': 1.4.8 4068 + style-mod: 4.1.3 4069 + 4070 + '@codemirror/lint@6.9.5': 4071 + dependencies: 4072 + '@codemirror/state': 6.6.0 4073 + '@codemirror/view': 6.40.0 4074 + crelt: 1.0.6 4075 + 4076 + '@codemirror/search@6.6.0': 4077 + dependencies: 4078 + '@codemirror/state': 6.6.0 4079 + '@codemirror/view': 6.40.0 4080 + crelt: 1.0.6 4081 + 4082 + '@codemirror/state@6.6.0': 4083 + dependencies: 4084 + '@marijn/find-cluster-break': 1.0.2 4085 + 4086 + '@codemirror/view@6.40.0': 4087 + dependencies: 4088 + '@codemirror/state': 6.6.0 4089 + crelt: 1.0.6 4090 + style-mod: 4.1.3 4091 + w3c-keyname: 2.2.8 4092 + 3980 4093 '@cspotcode/source-map-support@0.8.1': 3981 4094 dependencies: 3982 4095 '@jridgewell/trace-mapping': 0.3.9 ··· 4350 4463 dependencies: 4351 4464 '@jridgewell/resolve-uri': 3.1.2 4352 4465 '@jridgewell/sourcemap-codec': 1.5.5 4466 + 4467 + '@lezer/common@1.5.1': {} 4468 + 4469 + '@lezer/highlight@1.2.3': 4470 + dependencies: 4471 + '@lezer/common': 1.5.1 4472 + 4473 + '@lezer/javascript@1.5.4': 4474 + dependencies: 4475 + '@lezer/common': 1.5.1 4476 + '@lezer/highlight': 1.2.3 4477 + '@lezer/lr': 1.4.8 4478 + 4479 + '@lezer/lr@1.4.8': 4480 + dependencies: 4481 + '@lezer/common': 1.5.1 4482 + 4483 + '@marijn/find-cluster-break@1.0.2': {} 4353 4484 4354 4485 '@mrleebo/prisma-ast@0.12.1': 4355 4486 dependencies: ··· 6054 6185 6055 6186 clsx@2.1.1: {} 6056 6187 6188 + codemirror@6.0.2: 6189 + dependencies: 6190 + '@codemirror/autocomplete': 6.20.1 6191 + '@codemirror/commands': 6.10.3 6192 + '@codemirror/language': 6.12.2 6193 + '@codemirror/lint': 6.9.5 6194 + '@codemirror/search': 6.6.0 6195 + '@codemirror/state': 6.6.0 6196 + '@codemirror/view': 6.40.0 6197 + 6057 6198 comment-parser@1.4.5: {} 6058 6199 6059 6200 confbox@0.2.4: {} ··· 6065 6206 cookie-es@2.0.0: {} 6066 6207 6067 6208 cookie@1.1.1: {} 6209 + 6210 + crelt@1.0.6: {} 6068 6211 6069 6212 cross-spawn@7.0.6: 6070 6213 dependencies: ··· 7129 7272 strip-json-comments@2.0.1: 7130 7273 optional: true 7131 7274 7275 + style-mod@4.1.3: {} 7276 + 7132 7277 supports-color@10.2.2: {} 7133 7278 7134 7279 tailwindcss@4.2.1: {} ··· 7325 7470 semver: 7.7.4 7326 7471 transitivePeerDependencies: 7327 7472 - supports-color 7473 + 7474 + w3c-keyname@2.2.8: {} 7328 7475 7329 7476 webpack-virtual-modules@0.6.2: {} 7330 7477