diff --git a/.gitignore b/.gitignore index 57de219..f1bad28 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,3 @@ logs # Vercel .vercel - -# VSCode -.vscode diff --git a/.vscode/settings.json b/.vscode/settings.json index d5cf6ae..6a6040a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { + // TailwindCSS "files.associations": { "*.css": "tailwindcss" }, @@ -13,5 +14,24 @@ "tailwindCSS.classAttributes": [ "class", "ui" + ], + + // Prettier & ESLint + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true, + "source.organizeImports": false + }, + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue", + "html", + "markdown", + "json", + "jsonc", + "yaml" ] } diff --git a/nuxt.config.ts b/nuxt.config.ts index 7223df6..277b17e 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,4 +1,9 @@ export default defineNuxtConfig({ + experimental: { + typedPages: true, + componentIslands: true, + }, + srcDir: 'src', build: { @@ -33,10 +38,6 @@ export default defineNuxtConfig({ 'components/resume', ], - tailwindcss: { - viewer: true, - }, - ui: { icons: 'all', }, diff --git a/package.json b/package.json index c729b9f..9a366c9 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "lint:fix": "eslint . --fix" }, "dependencies": { - "@nuxt/content": "2.8.1", + "@nuxt/content": "2.8.2", "@nuxt/image": "1.0.0-rc.1", "@pinia/nuxt": "0.4.11", "@prisma/client": "5.2.0", @@ -25,13 +25,13 @@ "superjson": "1.13.1", "tailwindcss": "3.3.3", "trpc-nuxt": "0.10.12", - "valibot": "0.13.1" + "zod": "^3.22.2" }, "devDependencies": { "@antfu/eslint-config": "0.41.0", - "@iconify/json": "2.2.108", + "@iconify/json": "2.2.109", "@nuxt/devtools": "0.8.2", - "@nuxthq/studio": "^0.13.4", + "@nuxthq/studio": "0.13.4", "@nuxthq/ui": "2.7.0", "@pinia-plugin-persistedstate/nuxt": "1.1.1", "@types/node": "20.5.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b7f271f..3992610 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,102 +4,101 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@nuxt/content': - specifier: 2.8.2 - version: 2.8.2(vue@3.3.4) - '@nuxt/image': - specifier: 1.0.0-rc.1 - version: 1.0.0-rc.1 - '@pinia/nuxt': - specifier: 0.4.11 - version: 0.4.11(typescript@5.2.2)(vue@3.3.4) - '@prisma/client': - specifier: 5.2.0 - version: 5.2.0(prisma@5.2.0) - '@trpc/client': - specifier: 10.38.1 - version: 10.38.1(@trpc/server@10.38.1) - '@trpc/server': - specifier: 10.38.1 - version: 10.38.1 - '@vercel/analytics': - specifier: 1.0.2 - version: 1.0.2 - '@vueuse/motion': - specifier: 2.0.0 - version: 2.0.0(vue@3.3.4) - pinia: - specifier: 2.1.6 - version: 2.1.6(typescript@5.2.2)(vue@3.3.4) - postcss-custom-properties: - specifier: 13.3.0 - version: 13.3.0(postcss@8.4.29) - sass: - specifier: 1.66.1 - version: 1.66.1 - superjson: - specifier: 1.13.1 - version: 1.13.1 - tailwindcss: - specifier: 3.3.3 - version: 3.3.3 - trpc-nuxt: - specifier: 0.10.12 - version: 0.10.12(@trpc/client@10.38.1)(@trpc/server@10.38.1) - zod: - specifier: ^3.22.2 - version: 3.22.2 +importers: -devDependencies: - '@antfu/eslint-config': - specifier: 0.41.0 - version: 0.41.0(eslint@8.48.0)(typescript@5.2.2) - '@iconify/json': - specifier: 2.2.109 - version: 2.2.109 - '@nuxt/devtools': - specifier: 0.8.2 - version: 0.8.2(nuxt@3.7.0)(vite@4.4.9) - '@nuxthq/studio': - specifier: 0.13.4 - version: 0.13.4 - '@nuxthq/ui': - specifier: 2.7.0 - version: 2.7.0(vue@3.3.4)(webpack@5.88.2) - '@pinia-plugin-persistedstate/nuxt': - specifier: 1.1.1 - version: 1.1.1(@pinia/nuxt@0.4.11)(pinia@2.1.6) - '@types/node': - specifier: 20.5.7 - version: 20.5.7 - '@vueuse/core': - specifier: 10.4.1 - version: 10.4.1(vue@3.3.4) - '@vueuse/nuxt': - specifier: 10.4.1 - version: 10.4.1(nuxt@3.7.0)(vue@3.3.4) - eslint: - specifier: 8.48.0 - version: 8.48.0 - lint-staged: - specifier: 14.0.1 - version: 14.0.1 - nuxt: - specifier: 3.7.0 - version: 3.7.0(@types/node@20.5.7)(eslint@8.48.0)(sass@1.66.1)(typescript@5.2.2) - nuxt-icon: - specifier: 0.5.0 - version: 0.5.0(vue@3.3.4) - prisma: - specifier: 5.2.0 - version: 5.2.0 - simple-git-hooks: - specifier: 2.9.0 - version: 2.9.0 - typescript: - specifier: 5.2.2 - version: 5.2.2 + .: + dependencies: + '@nuxt/content': + specifier: 2.8.2 + version: 2.8.2(vue@3.3.4) + '@nuxt/image': + specifier: 1.0.0-rc.1 + version: 1.0.0-rc.1 + '@pinia/nuxt': + specifier: 0.4.11 + version: 0.4.11(typescript@5.2.2)(vue@3.3.4) + '@prisma/client': + specifier: 5.2.0 + version: 5.2.0(prisma@5.2.0) + '@trpc/client': + specifier: 10.38.1 + version: 10.38.1(@trpc/server@10.38.1) + '@trpc/server': + specifier: 10.38.1 + version: 10.38.1 + '@vercel/analytics': + specifier: 1.0.2 + version: 1.0.2 + '@vueuse/motion': + specifier: 2.0.0 + version: 2.0.0(vue@3.3.4) + pinia: + specifier: 2.1.6 + version: 2.1.6(typescript@5.2.2)(vue@3.3.4) + postcss-custom-properties: + specifier: 13.3.0 + version: 13.3.0(postcss@8.4.29) + sass: + specifier: 1.66.1 + version: 1.66.1 + superjson: + specifier: 1.13.1 + version: 1.13.1 + tailwindcss: + specifier: 3.3.3 + version: 3.3.3 + trpc-nuxt: + specifier: 0.10.12 + version: 0.10.12(@trpc/client@10.38.1)(@trpc/server@10.38.1) + zod: + specifier: ^3.22.2 + version: 3.22.2 + devDependencies: + '@antfu/eslint-config': + specifier: 0.41.0 + version: 0.41.0(eslint@8.48.0)(typescript@5.2.2) + '@iconify/json': + specifier: 2.2.109 + version: 2.2.109 + '@nuxt/devtools': + specifier: 0.8.2 + version: 0.8.2(nuxt@3.7.0)(vite@4.4.9) + '@nuxthq/studio': + specifier: 0.13.4 + version: 0.13.4 + '@nuxthq/ui': + specifier: 2.7.0 + version: 2.7.0(vue@3.3.4)(webpack@5.88.2) + '@pinia-plugin-persistedstate/nuxt': + specifier: 1.1.1 + version: 1.1.1(@pinia/nuxt@0.4.11)(pinia@2.1.6) + '@types/node': + specifier: 20.5.7 + version: 20.5.7 + '@vueuse/core': + specifier: 10.4.1 + version: 10.4.1(vue@3.3.4) + '@vueuse/nuxt': + specifier: 10.4.1 + version: 10.4.1(nuxt@3.7.0)(vue@3.3.4) + eslint: + specifier: 8.48.0 + version: 8.48.0 + nuxt: + specifier: 3.7.0 + version: 3.7.0(@types/node@20.5.7)(eslint@8.48.0)(sass@1.66.1)(typescript@5.2.2) + nuxt-icon: + specifier: 0.5.0 + version: 0.5.0(vue@3.3.4) + prisma: + specifier: 5.2.0 + version: 5.2.0 + simple-git-hooks: + specifier: 2.9.0 + version: 2.9.0 + typescript: + specifier: 5.2.2 + version: 5.2.2 packages: @@ -3077,13 +3076,6 @@ packages: type-fest: 0.21.3 dev: true - /ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} - dependencies: - type-fest: 1.4.0 - dev: true - /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3679,21 +3671,6 @@ packages: engines: {node: '>=10'} dev: true - /cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - restore-cursor: 4.0.0 - dev: true - - /cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - slice-ansi: 5.0.0 - string-width: 5.1.2 - dev: true - /clipboardy@3.0.0: resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3779,11 +3756,6 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false - /commander@11.0.0: - resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} - engines: {node: '>=16'} - dev: true - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -4941,10 +4913,6 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true - /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -6010,11 +5978,6 @@ packages: engines: {node: '>=8'} dev: true - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true - /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -6387,26 +6350,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /lint-staged@14.0.1: - resolution: {integrity: sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==} - engines: {node: ^16.14.0 || >=18.0.0} - hasBin: true - dependencies: - chalk: 5.3.0 - commander: 11.0.0 - debug: 4.3.4 - execa: 7.2.0 - lilconfig: 2.1.0 - listr2: 6.6.1 - micromatch: 4.0.5 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.3.1 - transitivePeerDependencies: - - enquirer - - supports-color - dev: true - /listhen@1.4.4: resolution: {integrity: sha512-xoZWbfziou7xPWj9nlFXeroFTJZVIyJ6wKrLea2jxvWgMkcz/vLMoZACYHLRmcLGi5hZkcDF48tmkmv1Y6Y42Q==} hasBin: true @@ -6428,23 +6371,6 @@ packages: untun: 0.1.2 uqr: 0.1.2 - /listr2@6.6.1: - resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} - engines: {node: '>=16.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true - dependencies: - cli-truncate: 3.1.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 5.0.1 - rfdc: 1.3.0 - wrap-ansi: 8.1.0 - dev: true - /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -6548,17 +6474,6 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /log-update@5.0.1: - resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - ansi-escapes: 5.0.0 - cli-cursor: 4.0.0 - slice-ansi: 5.0.0 - strip-ansi: 7.1.0 - wrap-ansi: 8.1.0 - dev: true - /longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} dev: false @@ -8376,12 +8291,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - dev: true - /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -9328,14 +9237,6 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - dev: true - /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -9345,10 +9246,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: true - /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -9641,14 +9538,6 @@ packages: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - dev: true - /slugify@1.6.6: resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} engines: {node: '>=8.0.0'} @@ -9799,11 +9688,6 @@ packages: dev: false optional: true - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true - /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -10308,11 +10192,6 @@ packages: engines: {node: '>=8'} dev: true - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: true - /type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} @@ -11273,11 +11152,6 @@ packages: engines: {node: '>= 6'} dev: true - /yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} - engines: {node: '>= 14'} - dev: true - /yaml@2.3.2: resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} engines: {node: '>= 14'} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 7243037..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,3 +0,0 @@ -packages: - - 'src/**' - - '.nuxt/**' diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 67fcb2c..9460141 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,10 +1,11 @@ generator client { provider = "prisma-client-js" + previewFeatures = ["postgresqlExtensions"] } datasource db { - provider = "postgresql" - url = env("POSTGRES_PRISMA_URL") // uses connection pooling + provider = "postgresql" + url = env("POSTGRES_PRISMA_URL") // uses connection pooling directUrl = env("POSTGRES_URL_NON_POOLING") // uses a direct connection } @@ -57,7 +58,7 @@ model Post { slug String @unique createdAt DateTime @default(now()) views Int @default(0) - likes Int @default(0) + likes Int @default(0) } model Form { diff --git a/src/components/header/ColorPicker.vue b/src/components/header/ColorPicker.vue index ecc3ab1..15430cd 100644 --- a/src/components/header/ColorPicker.vue +++ b/src/components/header/ColorPicker.vue @@ -37,7 +37,9 @@ const { getColor, setColor } = useColorStore() :variant="color === getColor ? 'solid' : 'ghost'" @click.stop.prevent="setColor(color)" > - + + + diff --git a/src/error.vue b/src/error.vue index c9f54d1..18b050f 100644 --- a/src/error.vue +++ b/src/error.vue @@ -1,5 +1,9 @@ @@ -8,10 +12,10 @@ const getColor = computed(() => appConfig.ui.primary)

- {{ error.statusCode }} + {{ error?.statusCode }}

- Sorry, {{ error.statusCode === 404 + Sorry, {{ error?.statusCode === 404 ? "the page you are looking for doesn't exist or as been moved." : "you have encountered a problem." }} diff --git a/src/layouts/default.vue b/src/layouts/default.vue index 02f9210..2060d94 100644 --- a/src/layouts/default.vue +++ b/src/layouts/default.vue @@ -4,17 +4,19 @@ const getColor = computed(() => appConfig.ui.primary) diff --git a/src/plugins/trpc.ts b/src/plugins/trpc.ts index b88bde5..6ace02f 100644 --- a/src/plugins/trpc.ts +++ b/src/plugins/trpc.ts @@ -1,3 +1,4 @@ +import process from 'node:process' import { loggerLink } from '@trpc/client' import SuperJSON from 'superjson' import { createTRPCNuxtClient, httpBatchLink } from 'trpc-nuxt/client' diff --git a/src/server/prisma.ts b/src/server/prisma.ts index 442cb44..a83500b 100644 --- a/src/server/prisma.ts +++ b/src/server/prisma.ts @@ -1,3 +1,4 @@ +import process from 'node:process' import { PrismaClient } from '@prisma/client/edge' const globalForPrisma = globalThis as unknown as { prisma: PrismaClient } diff --git a/src/server/trpc/context.ts b/src/server/trpc/context.ts index 2c2e125..c0d29ec 100644 --- a/src/server/trpc/context.ts +++ b/src/server/trpc/context.ts @@ -1,6 +1,6 @@ import type { inferAsyncReturnType } from '@trpc/server' import type { H3Event } from 'h3' -import { prisma } from '~/server/prisma' +import { prisma } from '../prisma' export function createContext(_event: H3Event) { return { diff --git a/src/server/trpc/routers/announcement.ts b/src/server/trpc/routers/announcement.ts index 038270d..473ace0 100644 --- a/src/server/trpc/routers/announcement.ts +++ b/src/server/trpc/routers/announcement.ts @@ -1,4 +1,4 @@ -import { publicProcedure, router } from '~/server/trpc/trpc' +import { publicProcedure, router } from '../trpc' export default router({ get: publicProcedure diff --git a/src/server/trpc/routers/index.ts b/src/server/trpc/routers/index.ts index aaf8a24..db340e9 100644 --- a/src/server/trpc/routers/index.ts +++ b/src/server/trpc/routers/index.ts @@ -1,8 +1,8 @@ -import announcement from '~/server/trpc/routers/announcement' -import maintenance from '~/server/trpc/routers/maintenance' -import talents from '~/server/trpc/routers/talents' -import post from '~/server/trpc/routers/post' -import { router } from '~/server/trpc/trpc' +import { router } from '../trpc' +import announcement from './announcement' +import maintenance from './maintenance' +import post from './post' +import talents from './talents' export const appRouter = router({ announcement, diff --git a/src/server/trpc/routers/maintenance.ts b/src/server/trpc/routers/maintenance.ts index 92538ea..c23eb45 100644 --- a/src/server/trpc/routers/maintenance.ts +++ b/src/server/trpc/routers/maintenance.ts @@ -1,4 +1,4 @@ -import { publicProcedure, router } from '~/server/trpc/trpc' +import { publicProcedure, router } from '../trpc' export default router({ get: publicProcedure diff --git a/src/server/trpc/routers/post.ts b/src/server/trpc/routers/post.ts index 7df79ef..e2a11c4 100644 --- a/src/server/trpc/routers/post.ts +++ b/src/server/trpc/routers/post.ts @@ -1,8 +1,8 @@ -import { object, string } from 'valibot' -import { publicProcedure, router } from '~/server/trpc/trpc' +import { z } from 'zod' +import { publicProcedure, router } from '../trpc' -const PostSchema = object({ - slug: string(), +const PostSchema = z.object({ + slug: z.string(), }) export default router({ diff --git a/src/server/trpc/routers/talents.ts b/src/server/trpc/routers/talents.ts index 1003267..1711f8e 100644 --- a/src/server/trpc/routers/talents.ts +++ b/src/server/trpc/routers/talents.ts @@ -1,11 +1,11 @@ -import { boolean, literal, object, string, union } from 'valibot' -import { publicProcedure, router } from '~/server/trpc/trpc' +import { z } from 'zod' +import { publicProcedure, router } from '../trpc' export default router({ getTalents: publicProcedure - .input(object({ - favorite: boolean(), - category: union([string(), literal('all')]), + .input(z.object({ + favorite: z.boolean(), + category: z.union([z.string(), z.literal('all')]), })) .query(async ({ ctx, input }) => { if (input.favorite) { diff --git a/src/server/trpc/trpc.ts b/src/server/trpc/trpc.ts index 4e820f4..dc4cdd9 100644 --- a/src/server/trpc/trpc.ts +++ b/src/server/trpc/trpc.ts @@ -1,6 +1,6 @@ import { initTRPC } from '@trpc/server' import SuperJSON from 'superjson' -import type { Context } from '~/server/trpc/context' +import type { Context } from './context' const trpc = initTRPC.context().create({ transformer: SuperJSON, diff --git a/tailwind.config.ts b/tailwind.config.ts index fb753c4..ddd0e35 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,7 +1,7 @@ import type { Config } from 'tailwindcss' import { ColorsTheme } from './types' -export default >{ +export default { safelist: [ // Theme text colors ...Object.values(ColorsTheme).map(color => `text-${color}-500`), @@ -12,6 +12,11 @@ export default >{ ...Object.values(ColorsTheme).map(color => `bg-${color}-500`), ...Object.values(ColorsTheme).map(color => `hover:bg-${color}-500`), ...'text-black dark:text-white'.split(' '), + + // Theme border colors + ...Object.values(ColorsTheme).map(color => `border-${color}-500`), + ...Object.values(ColorsTheme).map(color => `hover:border-${color}-500`), + ...'border-black dark:border-white'.split(' '), ], theme: { extend: { @@ -20,4 +25,4 @@ export default >{ }, }, }, -} +} satisfies Partial