From 1dc0ca78085905986ed988a8f3e0f3a267519f72 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Fri, 4 Nov 2022 07:37:08 -0700 Subject: [PATCH] feat: remove custom async data error handler --- playground/package.json | 2 +- pnpm-lock.yaml | 304 +--------------------------------------- src/client/index.ts | 24 +--- 3 files changed, 5 insertions(+), 325 deletions(-) diff --git a/playground/package.json b/playground/package.json index 2df1c2c..78c9958 100644 --- a/playground/package.json +++ b/playground/package.json @@ -16,6 +16,6 @@ "zod": "^3.19.1" }, "devDependencies": { - "nuxt": "3.0.0-rc.12" + "nuxt": "3.0.0-rc.13" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d0e67d..1220195 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,7 +51,7 @@ importers: specifiers: '@trpc/client': 10.0.0-rc.3 '@trpc/server': 10.0.0-rc.3 - nuxt: 3.0.0-rc.12 + nuxt: 3.0.0-rc.13 superjson: ^1.11.0 trpc-nuxt: workspace:* zod: ^3.19.1 @@ -62,7 +62,7 @@ importers: trpc-nuxt: link:.. zod: 3.19.1 devDependencies: - nuxt: 3.0.0-rc.12 + nuxt: 3.0.0-rc.13 packages: @@ -1025,32 +1025,6 @@ packages: resolution: {integrity: sha512-YBI/6o2EBz02tdEJRBK8xkt3zvOFOWlLBf7WKYGBsSYSRtjjgrqPe2skp6VLLmKx5WbHHDNcW+6oACaurxGzeA==} dev: true - /@nuxt/kit/3.0.0-rc.12: - resolution: {integrity: sha512-d/6SeNVL1OPdru5aKjjUIWIwqIjbYN/VYGCrZs5gddkzJ5202DsMxyn2rs/ZyT8+oBbbVTYcCK6M+G0945mQdA==} - engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0} - dependencies: - '@nuxt/schema': 3.0.0-rc.12 - c12: 0.2.13 - consola: 2.15.3 - defu: 6.1.0 - globby: 13.1.2 - hash-sum: 2.0.0 - ignore: 5.2.0 - jiti: 1.16.0 - knitwork: 0.1.2 - lodash.template: 4.5.0 - mlly: 0.5.16 - pathe: 0.3.9 - pkg-types: 0.3.6 - scule: 0.3.2 - semver: 7.3.8 - unctx: 2.0.2 - unimport: 0.6.8 - untyped: 0.5.0 - transitivePeerDependencies: - - supports-color - dev: true - /@nuxt/kit/3.0.0-rc.13: resolution: {integrity: sha512-FYEnMRm4LvIUxygmBX/p5kykzSeBleUqCOfxervQFONkz5PVVYXEp1DDBINGR3xk01yuPElENuf+l59iEQ4q7g==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} @@ -1120,26 +1094,6 @@ packages: - webpack dev: true - /@nuxt/schema/3.0.0-rc.12: - resolution: {integrity: sha512-LZFy8a+5tZKtqTHvUJrlCjZXmKPSmar4S/p3SpjzgIbc4jDuWzA5r4voUODozd2/bCnYxfYyNtOgtbJSJtDUrw==} - engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0} - dependencies: - c12: 0.2.13 - create-require: 1.1.1 - defu: 6.1.0 - jiti: 1.16.0 - pathe: 0.3.9 - pkg-types: 0.3.6 - postcss-import-resolver: 2.0.0 - scule: 0.3.2 - std-env: 3.3.0 - ufo: 0.8.6 - unimport: 0.6.8 - untyped: 0.5.0 - transitivePeerDependencies: - - supports-color - dev: true - /@nuxt/schema/3.0.0-rc.13: resolution: {integrity: sha512-yfNPvUkOQ1/8aKHX8OtU7stANAaZ3B8Rty7HPuo1KHv0R3wNqlRdoRXwFuf4D+jcsS+R5Kccr7i8YYD5IG56Iw==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} @@ -1215,59 +1169,6 @@ packages: resolution: {integrity: sha512-oFjUfn9r9U4vNljd5uU08+6M3mF6OSxZfCrfqJQaN5TtqVTcZmZFzOZ4H866Lq+Eaugv/Vte225kuaZCB3FR/g==} dev: true - /@nuxt/vite-builder/3.0.0-rc.12_vue@3.2.41: - resolution: {integrity: sha512-1jzEg2+Er9fzir8NvVnHAU8N4xda8IVzmqQQblKDWDE4v+zD5QLwk4Fp+l9Y74BZgH7pTogVSvEA01WdNQQUlw==} - engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0} - peerDependencies: - vue: ^3.2.41 - dependencies: - '@nuxt/kit': 3.0.0-rc.12 - '@rollup/plugin-replace': 5.0.1_rollup@2.79.1 - '@vitejs/plugin-vue': 3.2.0_vite@3.1.8+vue@3.2.41 - '@vitejs/plugin-vue-jsx': 2.1.0_vite@3.1.8+vue@3.2.41 - autoprefixer: 10.4.13_postcss@8.4.18 - chokidar: 3.5.3 - cssnano: 5.1.14_postcss@8.4.18 - defu: 6.1.0 - esbuild: 0.15.13 - escape-string-regexp: 5.0.0 - estree-walker: 3.0.1 - externality: 0.2.2 - fs-extra: 10.1.0 - get-port-please: 2.6.1 - h3: 0.8.6 - knitwork: 0.1.2 - magic-string: 0.26.7 - mlly: 0.5.16 - ohash: 0.1.5 - pathe: 0.3.9 - perfect-debounce: 0.1.3 - pkg-types: 0.3.6 - postcss: 8.4.18 - postcss-import: 15.0.0_postcss@8.4.18 - postcss-url: 10.1.3_postcss@8.4.18 - rollup: 2.79.1 - rollup-plugin-visualizer: 5.8.3_rollup@2.79.1 - ufo: 0.8.6 - unplugin: 0.10.2 - vite: 3.1.8 - vite-node: 0.24.5 - vite-plugin-checker: 0.5.1_vite@3.1.8 - vue: 3.2.41 - vue-bundle-renderer: 0.4.4 - transitivePeerDependencies: - - eslint - - less - - sass - - stylus - - sugarss - - supports-color - - terser - - typescript - - vls - - vti - dev: true - /@nuxt/vite-builder/3.0.0-rc.13_5phhjlepx6uce62n7km5sehevq: resolution: {integrity: sha512-Smd+3WtTkJxmOBP5E3D23oF1PHzDWz37uzKvBhRxUguHN83r2/mJJM2QU9ivmujMaotYU19Gn3UONBCWLvWimA==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} @@ -1842,14 +1743,6 @@ packages: rollup: 2.79.1 dev: true - /@rollup/pluginutils/4.2.1: - resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} - engines: {node: '>= 8.0.0'} - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.1 - dev: true - /@rollup/pluginutils/5.0.2: resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} @@ -2213,22 +2106,6 @@ packages: - supports-color dev: true - /@vitejs/plugin-vue-jsx/2.1.0_vite@3.1.8+vue@3.2.41: - resolution: {integrity: sha512-vvL8MHKN0hUf5LE+/rCk1rduwzW6NihD6xEfM4s1gGCSWQFYd5zLdxBs++z3S7AV/ynr7Yig5Xp1Bm0wlB4IAA==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^3.0.0 - vue: ^3.0.0 - dependencies: - '@babel/core': 7.19.6 - '@babel/plugin-transform-typescript': 7.20.0_@babel+core@7.19.6 - '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.19.6 - vite: 3.1.8 - vue: 3.2.41 - transitivePeerDependencies: - - supports-color - dev: true - /@vitejs/plugin-vue-jsx/2.1.0_vite@3.2.2+vue@3.2.41: resolution: {integrity: sha512-vvL8MHKN0hUf5LE+/rCk1rduwzW6NihD6xEfM4s1gGCSWQFYd5zLdxBs++z3S7AV/ynr7Yig5Xp1Bm0wlB4IAA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -2245,17 +2122,6 @@ packages: - supports-color dev: true - /@vitejs/plugin-vue/3.2.0_vite@3.1.8+vue@3.2.41: - resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^3.0.0 - vue: ^3.2.25 - dependencies: - vite: 3.1.8 - vue: 3.2.41 - dev: true - /@vitejs/plugin-vue/3.2.0_vite@3.2.2+vue@3.2.41: resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -7106,14 +6972,6 @@ packages: boolbase: 1.0.0 dev: true - /nuxi/3.0.0-rc.12: - resolution: {integrity: sha512-jOnWe/Gf2/5Zj4wCFDHpmBPDDHZFMGrhqK5C+8jhG2RHNJy+YOlZETwAgoXPjmH0Hhb441UDQhZHKg5+yyKhbw==} - engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - /nuxi/3.0.0-rc.13: resolution: {integrity: sha512-Uh+Vk6mj0Zm5QttwdNFGQG0tjCXNjpc4e9NLRWpCjCCfBk5owBo2axxoeqfqIZMs6vUuCQCa7sLXQuoumyVjcQ==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} @@ -7122,71 +6980,6 @@ packages: fsevents: 2.3.2 dev: true - /nuxt/3.0.0-rc.12: - resolution: {integrity: sha512-VhSod1u/w+C3VWsagTd5Prnsjk/VxPRt/bbADhUz3l0zxxajHRhHFX4xZSJWNgzsakducDqhn7N1pY6Ukko9kg==} - engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0} - hasBin: true - dependencies: - '@nuxt/devalue': 2.0.0 - '@nuxt/kit': 3.0.0-rc.12 - '@nuxt/schema': 3.0.0-rc.12 - '@nuxt/telemetry': 2.1.6 - '@nuxt/ui-templates': 0.4.0 - '@nuxt/vite-builder': 3.0.0-rc.12_vue@3.2.41 - '@vue/reactivity': 3.2.41 - '@vue/shared': 3.2.41 - '@vueuse/head': 1.0.0-rc.14_vue@3.2.41 - chokidar: 3.5.3 - cookie-es: 0.5.0 - defu: 6.1.0 - destr: 1.2.0 - escape-string-regexp: 5.0.0 - fs-extra: 10.1.0 - globby: 13.1.2 - h3: 0.8.6 - hash-sum: 2.0.0 - hookable: 5.4.1 - knitwork: 0.1.2 - magic-string: 0.26.7 - mlly: 0.5.16 - nitropack: 0.6.1 - nuxi: 3.0.0-rc.12 - ohash: 0.1.5 - ohmyfetch: 0.4.21 - pathe: 0.3.9 - perfect-debounce: 0.1.3 - scule: 0.3.2 - strip-literal: 0.4.2 - ufo: 0.8.6 - ultrahtml: 0.4.0 - unctx: 2.0.2 - unenv: 0.6.2 - unimport: 0.6.8 - unplugin: 0.10.2 - untyped: 0.5.0 - vue: 3.2.41 - vue-bundle-renderer: 0.4.4 - vue-devtools-stub: 0.1.0 - vue-router: 4.1.6_vue@3.2.41 - transitivePeerDependencies: - - '@vue/composition-api' - - bufferutil - - debug - - encoding - - eslint - - less - - rollup - - sass - - stylus - - sugarss - - supports-color - - terser - - typescript - - utf-8-validate - - vls - - vti - dev: true - /nuxt/3.0.0-rc.13: resolution: {integrity: sha512-iqAwrYzFuKK5HuJRa1XQ/K2WUYdOI7JjxYLWAJyAejzvUO/+Pj87fhqozzymlJxrdKM53UqBfur+KN+DE0nRzw==} engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0} @@ -8644,14 +8437,6 @@ packages: estree-walker: 0.6.1 dev: true - /rollup/2.78.1: - resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - /rollup/2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} @@ -9618,21 +9403,6 @@ packages: vfile: 5.3.5 dev: true - /unimport/0.6.8: - resolution: {integrity: sha512-MWkaPYvN0j+6jfEuiVFhfmy+aOtgAP11CozSbu/I3Cx+8ybjXIueB7GVlKofHabtjzSlPeAvWKJSFjHWsG2JaA==} - dependencies: - '@rollup/pluginutils': 4.2.1 - escape-string-regexp: 5.0.0 - fast-glob: 3.2.12 - local-pkg: 0.4.2 - magic-string: 0.26.7 - mlly: 0.5.16 - pathe: 0.3.9 - scule: 0.3.2 - strip-literal: 0.4.2 - unplugin: 0.9.6 - dev: true - /unimport/0.7.0: resolution: {integrity: sha512-Cr0whz4toYVid3JHlni/uThwavDVVCk6Zw0Gxnol1c7DprTA+Isr4T+asO6rDGkhkgV7r3vSdSs5Ym8F15JA+w==} dependencies: @@ -9918,43 +9688,6 @@ packages: vscode-uri: 3.0.6 dev: true - /vite-plugin-checker/0.5.1_vite@3.1.8: - resolution: {integrity: sha512-NFiO1PyK9yGuaeSnJ7Whw9fnxLc1AlELnZoyFURnauBYhbIkx9n+PmIXxSFUuC9iFyACtbJQUAEuQi6yHs2Adg==} - engines: {node: '>=14.16'} - peerDependencies: - eslint: '>=7' - typescript: '*' - vite: ^2.0.0 || ^3.0.0-0 - vls: '*' - vti: '*' - peerDependenciesMeta: - eslint: - optional: true - typescript: - optional: true - vls: - optional: true - vti: - optional: true - dependencies: - '@babel/code-frame': 7.18.6 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - chokidar: 3.5.3 - commander: 8.3.0 - fast-glob: 3.2.12 - lodash.debounce: 4.0.8 - lodash.pick: 4.4.0 - npm-run-path: 4.0.1 - strip-ansi: 6.0.1 - tiny-invariant: 1.3.1 - vite: 3.1.8 - vscode-languageclient: 7.0.0 - vscode-languageserver: 7.0.0 - vscode-languageserver-textdocument: 1.0.7 - vscode-uri: 3.0.6 - dev: true - /vite-plugin-checker/0.5.1_vite@3.2.2: resolution: {integrity: sha512-NFiO1PyK9yGuaeSnJ7Whw9fnxLc1AlELnZoyFURnauBYhbIkx9n+PmIXxSFUuC9iFyACtbJQUAEuQi6yHs2Adg==} engines: {node: '>=14.16'} @@ -9992,33 +9725,6 @@ packages: vscode-uri: 3.0.6 dev: true - /vite/3.1.8: - resolution: {integrity: sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - less: '*' - sass: '*' - stylus: '*' - terser: ^5.4.0 - peerDependenciesMeta: - less: - optional: true - sass: - optional: true - stylus: - optional: true - terser: - optional: true - dependencies: - esbuild: 0.15.13 - postcss: 8.4.18 - resolve: 1.22.1 - rollup: 2.78.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /vite/3.2.2: resolution: {integrity: sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -10089,12 +9795,6 @@ packages: resolution: {integrity: sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ==} dev: true - /vue-bundle-renderer/0.4.4: - resolution: {integrity: sha512-kjJWPayzup8QFynETVpoYD0gDM2nbwN//bpt86hAHpZ+FPdTJFDQqKpouSLQgb2XjkOYM1uB/yc6Zb3iCvS7Gw==} - dependencies: - ufo: 0.8.6 - dev: true - /vue-bundle-renderer/0.5.0: resolution: {integrity: sha512-EZBp4TZ5oamgg+JL7kih5xO/qLCPlC6Dz4BH9ymoNP6xM2urZazql3PCAdztgnzBkOgmoOegEw4kp7Hgp8qaaA==} dependencies: diff --git a/src/client/index.ts b/src/client/index.ts index 7f57507..c89da76 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -9,7 +9,7 @@ import { getCurrentInstance, onScopeDispose } from 'vue' import { nanoid } from 'nanoid' import type { DecoratedProcedureRecord } from './types' // @ts-expect-error: Nuxt auto-imports -import { useAsyncData, useState } from '#imports' +import { useAsyncData } from '#imports' /** * Calculates the key used for `useAsyncData` call @@ -49,33 +49,13 @@ function createNuxtProxyDecoration(name: string, clie controller = typeof AbortController !== 'undefined' ? new AbortController() : {} as AbortController } - return useAsyncDataWithError(queryKey, () => (client as any)[path][lastArg](input, { + return useAsyncData(queryKey, () => (client as any)[path][lastArg](input, { signal: controller?.signal, ...trpc, }), asyncDataOptions) }) } -/** - * Custom useAsyncData to add server error to client - */ -async function useAsyncDataWithError(queryKey: string, cb: any, asyncDataOptions: any) { - const serverError = useState(`error-${queryKey}`, () => null) - const { error, data, ...rest } = await useAsyncData(queryKey, cb, asyncDataOptions) - - if (error.value && !serverError.value) - serverError.value = error.value as any - - if (data.value) - serverError.value = null - - return { - ...rest, - data, - error: serverError, - } -} - export function createTRPCNuxtProxyClient(opts: CreateTRPCClientOptions) { const client = createTRPCProxyClient(opts)