Mirror: The highly customizable and versatile GraphQL client with which you add on features like normalized caching as you grow.
1
fork

Configure Feed

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

fix(vue): Allow a client provided in the same component to be used there (#3018)

authored by

Phil Pluckthun and committed by
GitHub
9720482c e578fac3

+120 -20
+5
.changeset/clean-tables-exercise.md
··· 1 + --- 2 + '@urql/vue': patch 3 + --- 4 + 5 + Allow a `Client` provided using `provideClient` to be used in the same component it's been provided in.
+1
packages/vue-urql/package.json
··· 49 49 }, 50 50 "devDependencies": { 51 51 "@urql/core": "workspace:*", 52 + "@vue/test-utils": "^2.3.0", 52 53 "graphql": "^16.0.0", 53 54 "vue": "^3.2.47" 54 55 },
+25
packages/vue-urql/src/useClient.test.ts
··· 1 + import { expect, it, describe } from 'vitest'; 2 + import { defineComponent } from 'vue'; 3 + import { mount } from '@vue/test-utils'; 4 + import { Client } from '@urql/core'; 5 + import { useClient, provideClient } from './useClient'; 6 + 7 + describe('provideClient', () => { 8 + it('provides client to current component instance', async () => { 9 + const TestComponent = defineComponent({ 10 + setup() { 11 + provideClient( 12 + new Client({ 13 + url: 'test', 14 + }) 15 + ); 16 + 17 + const client = useClient(); 18 + expect(client).toBeDefined(); 19 + return null; 20 + }, 21 + }); 22 + 23 + mount(TestComponent); 24 + }); 25 + });
+15 -3
packages/vue-urql/src/useClient.ts
··· 1 1 import { App, getCurrentInstance, inject, provide, Ref, isRef, ref } from 'vue'; 2 2 import { Client, ClientOptions } from '@urql/core'; 3 3 4 + const clientsPerInstance = new WeakMap<{}, Ref<Client>>(); 5 + 4 6 export function provideClient(opts: ClientOptions | Client | Ref<Client>) { 5 7 let client: Ref<Client>; 6 8 if (!isRef(opts)) { 7 9 client = ref(opts instanceof Client ? opts : new Client(opts)); 8 10 } else { 9 11 client = opts; 12 + } 13 + 14 + const instance = getCurrentInstance(); 15 + if (instance) { 16 + clientsPerInstance.set(instance, client); 10 17 } 11 18 12 19 provide('$urql', client); ··· 24 31 } 25 32 26 33 export function useClient(): Ref<Client> { 27 - if (process.env.NODE_ENV !== 'production' && !getCurrentInstance()) { 34 + const instance = getCurrentInstance(); 35 + if (process.env.NODE_ENV !== 'production' && !instance) { 28 36 throw new Error( 29 37 'use* functions may only be called during the `setup()` or other lifecycle hooks.' 30 38 ); 31 39 } 32 40 33 - const client = inject('$urql') as Ref<Client>; 41 + let client = inject('$urql') as Ref<Client> | undefined; 42 + if (!client && instance) { 43 + client = clientsPerInstance.get(instance); 44 + } 45 + 34 46 if (process.env.NODE_ENV !== 'production' && !client) { 35 47 throw new Error( 36 48 'No urql Client was provided. Did you forget to install the plugin or call `provideClient` in a parent?' 37 49 ); 38 50 } 39 51 40 - return client; 52 + return client!; 41 53 }
+74 -17
pnpm-lock.yaml
··· 487 487 packages/vue-urql: 488 488 specifiers: 489 489 '@urql/core': ^3.1.1 490 + '@vue/test-utils': ^2.3.0 490 491 graphql: ^16.0.0 491 492 vue: ^3.2.47 492 493 wonka: ^6.2.3 ··· 494 495 '@urql/core': link:../core 495 496 wonka: 6.2.3 496 497 devDependencies: 498 + '@vue/test-utils': 2.3.0_vue@3.2.47 497 499 graphql: 16.0.1 498 500 vue: 3.2.47 499 501 ··· 4004 4006 resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==} 4005 4007 dev: true 4006 4008 4009 + /@vue/test-utils/2.3.0_vue@3.2.47: 4010 + resolution: {integrity: sha512-S8/9Z+B4VSsTUNtZtzS7J1TfxJbf10n+gcH9X8cASbG0Tp7qD6vqs/sUNlmpzk6i7+pP00ptauJp9rygyW89Ww==} 4011 + peerDependencies: 4012 + vue: ^3.0.1 4013 + dependencies: 4014 + js-beautify: 1.14.6 4015 + vue: 3.2.47 4016 + optionalDependencies: 4017 + '@vue/compiler-dom': 3.2.47 4018 + '@vue/server-renderer': 3.2.47_vue@3.2.47 4019 + dev: true 4020 + 4007 4021 /@webassemblyjs/ast/1.9.0: 4008 4022 resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} 4009 4023 dependencies: ··· 4124 4138 4125 4139 /abab/2.0.6: 4126 4140 resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} 4141 + dev: true 4142 + 4143 + /abbrev/1.1.1: 4144 + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} 4127 4145 dev: true 4128 4146 4129 4147 /accepts/1.3.7: ··· 5283 5301 chownr: 1.1.4 5284 5302 figgy-pudding: 3.5.2 5285 5303 glob: 7.1.6 5286 - graceful-fs: 4.2.6 5304 + graceful-fs: 4.2.10 5287 5305 infer-owner: 1.0.4 5288 5306 lru-cache: 5.1.1 5289 5307 mississippi: 3.0.0 ··· 5987 6005 ini: 1.3.8 5988 6006 proto-list: 1.2.4 5989 6007 6008 + /config-chain/1.1.13: 6009 + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} 6010 + dependencies: 6011 + ini: 1.3.8 6012 + proto-list: 1.2.4 6013 + dev: true 6014 + 5990 6015 /connect-history-api-fallback/1.6.0: 5991 6016 resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} 5992 6017 engines: {node: '>=0.8'} ··· 6117 6142 resolution: {integrity: sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==} 6118 6143 engines: {node: '>=8'} 6119 6144 dependencies: 6120 - graceful-fs: 4.2.6 6145 + graceful-fs: 4.2.10 6121 6146 make-dir: 3.1.0 6122 6147 nested-error-stacks: 2.1.0 6123 6148 p-event: 4.2.0 ··· 6744 6769 decompress-tarbz2: 4.1.1 6745 6770 decompress-targz: 4.1.1 6746 6771 decompress-unzip: 4.0.1 6747 - graceful-fs: 4.2.6 6772 + graceful-fs: 4.2.10 6748 6773 make-dir: 1.3.0 6749 6774 pify: 2.3.0 6750 6775 strip-dirs: 2.1.0 ··· 7162 7187 dependencies: 7163 7188 jsbn: 0.1.1 7164 7189 safer-buffer: 2.1.2 7190 + dev: true 7191 + 7192 + /editorconfig/0.15.3: 7193 + resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==} 7194 + hasBin: true 7195 + dependencies: 7196 + commander: 2.20.3 7197 + lru-cache: 4.1.5 7198 + semver: 5.7.1 7199 + sigmund: 1.0.1 7165 7200 dev: true 7166 7201 7167 7202 /ee-first/1.1.1: ··· 8776 8811 /fs-extra/0.30.0: 8777 8812 resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} 8778 8813 dependencies: 8779 - graceful-fs: 4.2.6 8814 + graceful-fs: 4.2.10 8780 8815 jsonfile: 2.4.0 8781 8816 klaw: 1.3.1 8782 8817 path-is-absolute: 1.0.1 ··· 8827 8862 /fs-write-stream-atomic/1.0.10: 8828 8863 resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==} 8829 8864 dependencies: 8830 - graceful-fs: 4.2.6 8865 + graceful-fs: 4.2.10 8831 8866 iferr: 0.1.5 8832 8867 imurmurhash: 0.1.4 8833 8868 readable-stream: 2.3.7 ··· 8857 8892 resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==} 8858 8893 engines: {node: '>=0.6'} 8859 8894 dependencies: 8860 - graceful-fs: 4.2.6 8895 + graceful-fs: 4.2.10 8861 8896 inherits: 2.0.4 8862 8897 mkdirp: 0.5.5 8863 8898 rimraf: 2.7.1 ··· 9233 9268 9234 9269 /graceful-fs/4.2.10: 9235 9270 resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 9236 - dev: true 9237 9271 9238 9272 /graceful-fs/4.2.6: 9239 9273 resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} ··· 10501 10535 supports-color: 8.1.1 10502 10536 dev: true 10503 10537 10538 + /js-beautify/1.14.6: 10539 + resolution: {integrity: sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==} 10540 + engines: {node: '>=10'} 10541 + hasBin: true 10542 + dependencies: 10543 + config-chain: 1.1.13 10544 + editorconfig: 0.15.3 10545 + glob: 8.0.3 10546 + nopt: 6.0.0 10547 + dev: true 10548 + 10504 10549 /js-sdsl/4.2.0: 10505 10550 resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} 10506 10551 dev: true ··· 10629 10674 /jsonfile/2.4.0: 10630 10675 resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} 10631 10676 optionalDependencies: 10632 - graceful-fs: 4.2.6 10677 + graceful-fs: 4.2.10 10633 10678 dev: true 10634 10679 10635 10680 /jsonfile/4.0.0: 10636 10681 resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 10637 10682 optionalDependencies: 10638 - graceful-fs: 4.2.6 10683 + graceful-fs: 4.2.10 10639 10684 10640 10685 /jsonfile/6.1.0: 10641 10686 resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 10642 10687 dependencies: 10643 10688 universalify: 2.0.0 10644 10689 optionalDependencies: 10645 - graceful-fs: 4.2.6 10690 + graceful-fs: 4.2.10 10646 10691 dev: true 10647 10692 10648 10693 /jsprim/1.4.1: ··· 10709 10754 /klaw/1.3.1: 10710 10755 resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} 10711 10756 optionalDependencies: 10712 - graceful-fs: 4.2.6 10757 + graceful-fs: 4.2.10 10713 10758 dev: true 10714 10759 10715 10760 /kleur/3.0.3: ··· 10815 10860 resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} 10816 10861 engines: {node: '>=4'} 10817 10862 dependencies: 10818 - graceful-fs: 4.2.6 10863 + graceful-fs: 4.2.10 10819 10864 parse-json: 4.0.0 10820 10865 pify: 3.0.0 10821 10866 strip-bom: 3.0.0 ··· 10825 10870 resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} 10826 10871 engines: {node: '>=6'} 10827 10872 dependencies: 10828 - graceful-fs: 4.2.6 10873 + graceful-fs: 4.2.10 10829 10874 js-yaml: 3.14.1 10830 10875 pify: 4.0.1 10831 10876 strip-bom: 3.0.0 ··· 11823 11868 11824 11869 /node-releases/2.0.6: 11825 11870 resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} 11871 + 11872 + /nopt/6.0.0: 11873 + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} 11874 + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 11875 + hasBin: true 11876 + dependencies: 11877 + abbrev: 1.1.1 11878 + dev: true 11826 11879 11827 11880 /normalize-package-data/2.5.0: 11828 11881 resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} ··· 14053 14106 resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} 14054 14107 engines: {node: '>=0.10'} 14055 14108 dependencies: 14056 - graceful-fs: 4.2.6 14109 + graceful-fs: 4.2.10 14057 14110 micromatch: 3.1.10 14058 14111 readable-stream: 2.3.7 14059 14112 transitivePeerDependencies: ··· 14064 14117 resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} 14065 14118 engines: {node: '>=0.10'} 14066 14119 dependencies: 14067 - graceful-fs: 4.2.6 14120 + graceful-fs: 4.2.10 14068 14121 micromatch: 3.1.10_supports-color@6.1.0 14069 14122 readable-stream: 2.3.7 14070 14123 transitivePeerDependencies: ··· 14882 14935 14883 14936 /siginfo/2.0.0: 14884 14937 resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 14938 + dev: true 14939 + 14940 + /sigmund/1.0.1: 14941 + resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==} 14885 14942 dev: true 14886 14943 14887 14944 /signal-exit/3.0.3: ··· 17359 17416 /write-file-atomic/2.4.3: 17360 17417 resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} 17361 17418 dependencies: 17362 - graceful-fs: 4.2.6 17419 + graceful-fs: 4.2.10 17363 17420 imurmurhash: 0.1.4 17364 17421 signal-exit: 3.0.3 17365 17422 dev: true ··· 17369 17426 engines: {node: '>=6'} 17370 17427 dependencies: 17371 17428 detect-indent: 5.0.0 17372 - graceful-fs: 4.2.6 17429 + graceful-fs: 4.2.10 17373 17430 make-dir: 2.1.0 17374 17431 pify: 4.0.1 17375 17432 sort-keys: 2.0.0