diff --git a/docs/guide/getting-started.md b/docs/guide/getting-started.md index 52f0e73b..59f5f6db 100644 --- a/docs/guide/getting-started.md +++ b/docs/guide/getting-started.md @@ -31,26 +31,13 @@ $ yarn add --dev vitepress vue ::: details Getting missing peer deps warnings? `@docsearch/js` has certain issues with its peer dependencies. If you see some commands failing due to them, you can try this workaround for now: -On Yarn v2/v3, add this inside your rc file (`.yarnrc.yml` by default): - -```yaml -packageExtensions: - '@docsearch/react@*': - peerDependenciesMeta: - '@types/react': - optional: true - 'react': - optional: true - 'react-dom': - optional: true -``` - -On PNPM, add this in your `package.json`: +If using PNPM, add this in your `package.json`: ```json "pnpm": { "peerDependencyRules": { "ignoreMissing": [ + "@algolia/client-search", "@types/react", "react", "react-dom" diff --git a/package.json b/package.json index 9bdc9273..d4dd1c3b 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "dev-watch": "node scripts/watchAndCopy", "build": "run-s build-prepare build-client build-node", "build-prepare": "rimraf dist && node scripts/copyShared", - "build-client": "tsc -p src/client && node scripts/copyClient", + "build-client": "vue-tsc --noEmit -p src/client && tsc -p src/client && node scripts/copyClient", "build-node": "rollup --config rollup.config.ts --configPlugin esbuild", "format": "prettier --check --write .", "format-fail": "prettier --check .", @@ -71,10 +71,10 @@ "ci-docs": "run-s docs-build" }, "dependencies": { - "@docsearch/css": "^3.1.0", - "@docsearch/js": "^3.1.0", + "@docsearch/css": "^3.1.1", + "@docsearch/js": "^3.1.1", "@vitejs/plugin-vue": "^3.0.0-beta.0", - "@vue/devtools-api": "^6.1.4", + "@vue/devtools-api": "^6.2.0", "@vueuse/core": "^8.7.5", "body-scroll-lock": "^4.0.0-beta.0", "shiki": "^0.10.1", @@ -138,11 +138,13 @@ "sirv": "^2.0.2", "supports-color": "^9.2.2", "typescript": "^4.7.4", - "vitest": "^0.16.0" + "vitest": "^0.16.0", + "vue-tsc": "^0.38.2" }, "pnpm": { "peerDependencyRules": { "ignoreMissing": [ + "@algolia/client-search", "@types/react", "react", "react-dom" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af4f1b05..69bf3d31 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,8 +4,8 @@ importers: .: specifiers: - '@docsearch/css': ^3.1.0 - '@docsearch/js': ^3.1.0 + '@docsearch/css': ^3.1.1 + '@docsearch/js': ^3.1.1 '@rollup/plugin-alias': ^3.1.9 '@rollup/plugin-commonjs': ^22.0.1 '@rollup/plugin-json': ^4.1.0 @@ -25,7 +25,7 @@ importers: '@types/polka': ^0.5.4 '@types/prompts': ^2.0.14 '@vitejs/plugin-vue': ^3.0.0-beta.0 - '@vue/devtools-api': ^6.1.4 + '@vue/devtools-api': ^6.2.0 '@vueuse/core': ^8.7.5 body-scroll-lock: ^4.0.0-beta.0 chokidar: ^3.5.3 @@ -70,11 +70,12 @@ importers: vite: ^3.0.0-beta.0 vitest: ^0.16.0 vue: ^3.2.37 + vue-tsc: ^0.38.2 dependencies: - '@docsearch/css': 3.1.0 - '@docsearch/js': 3.1.0 + '@docsearch/css': 3.1.1 + '@docsearch/js': 3.1.1 '@vitejs/plugin-vue': 3.0.0-beta.0_hrw2jqbpnmgiltw2su6c7ud5mq - '@vue/devtools-api': 6.1.4 + '@vue/devtools-api': 6.2.0 '@vueuse/core': 8.7.5_vue@3.2.37 body-scroll-lock: 4.0.0-beta.0 shiki: 0.10.1 @@ -138,6 +139,7 @@ importers: supports-color: 9.2.2 typescript: 4.7.4 vitest: 0.16.0_supports-color@9.2.2 + vue-tsc: 0.38.2_typescript@4.7.4 docs: specifiers: {} @@ -150,14 +152,27 @@ importers: packages: - /@algolia/autocomplete-core/1.6.3: - resolution: {integrity: sha512-dqQqRt01fX3YuVFrkceHsoCnzX0bLhrrg8itJI1NM68KjrPYQPYsE+kY8EZTCM4y8VDnhqJErR73xe/ZsV+qAA==} + /@algolia/autocomplete-core/1.7.1: + resolution: {integrity: sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg==} dependencies: - '@algolia/autocomplete-shared': 1.6.3 + '@algolia/autocomplete-shared': 1.7.1 dev: false - /@algolia/autocomplete-shared/1.6.3: - resolution: {integrity: sha512-UV46bnkTztyADFaETfzFC5ryIdGVb2zpAoYgu0tfcuYWjhg1KbLXveFffZIrGVoboqmAk1b+jMrl6iCja1i3lg==} + /@algolia/autocomplete-preset-algolia/1.7.1_algoliasearch@4.11.0: + resolution: {integrity: sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg==} + peerDependencies: + '@algolia/client-search': ^4.9.1 + algoliasearch: ^4.9.1 + peerDependenciesMeta: + '@algolia/client-search': + optional: true + dependencies: + '@algolia/autocomplete-shared': 1.7.1 + algoliasearch: 4.11.0 + dev: false + + /@algolia/autocomplete-shared/1.7.1: + resolution: {integrity: sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg==} dev: false /@algolia/cache-browser-local-storage/4.11.0: @@ -282,7 +297,6 @@ packages: hasBin: true dependencies: '@babel/types': 7.17.12 - dev: false /@babel/types/7.17.12: resolution: {integrity: sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==} @@ -290,25 +304,25 @@ packages: dependencies: '@babel/helper-validator-identifier': 7.16.7 to-fast-properties: 2.0.0 - dev: false - /@docsearch/css/3.1.0: - resolution: {integrity: sha512-bh5IskwkkodbvC0FzSg1AxMykfDl95hebEKwxNoq4e5QaGzOXSBgW8+jnMFZ7JU4sTBiB04vZWoUSzNrPboLZA==} + /@docsearch/css/3.1.1: + resolution: {integrity: sha512-utLgg7E1agqQeqCJn05DWC7XXMk4tMUUnL7MZupcknRu2OzGN13qwey2qA/0NAKkVBGugiWtON0+rlU0QIPojg==} dev: false - /@docsearch/js/3.1.0: - resolution: {integrity: sha512-5XSK+xbP0hcTIp54MECqxkWLs6kf7Ug4nWdxWNtx8cUpLiFNFnKXDxCb35wnyNpjukmrx7Q9DkO5tFFsmNVxng==} + /@docsearch/js/3.1.1: + resolution: {integrity: sha512-bt7l2aKRoSnLUuX+s4LVQ1a7AF2c9myiZNv5uvQCePG5tpvVGpwrnMwqVXOUJn9q6FwVVhOrQMO/t+QmnnAEUw==} dependencies: - '@docsearch/react': 3.1.0 + '@docsearch/react': 3.1.1 preact: 10.5.15 transitivePeerDependencies: + - '@algolia/client-search' - '@types/react' - react - react-dom dev: false - /@docsearch/react/3.1.0: - resolution: {integrity: sha512-bjB6ExnZzf++5B7Tfoi6UXgNwoUnNOfZ1NyvnvPhWgCMy5V/biAtLL4o7owmZSYdAKeFSvZ5Lxm0is4su/dBWg==} + /@docsearch/react/3.1.1: + resolution: {integrity: sha512-cfoql4qvtsVRqBMYxhlGNpvyy/KlCoPqjIsJSZYqYf9AplZncKjLBTcwBu6RXFMVCe30cIFljniI4OjqAU67pQ==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -321,9 +335,12 @@ packages: react-dom: optional: true dependencies: - '@algolia/autocomplete-core': 1.6.3 - '@docsearch/css': 3.1.0 + '@algolia/autocomplete-core': 1.7.1 + '@algolia/autocomplete-preset-algolia': 1.7.1_algoliasearch@4.11.0 + '@docsearch/css': 3.1.1 algoliasearch: 4.11.0 + transitivePeerDependencies: + - '@algolia/client-search' dev: false /@hutson/parse-repository-url/3.0.2: @@ -679,6 +696,36 @@ packages: vue: 3.2.37 dev: false + /@volar/code-gen/0.38.2: + resolution: {integrity: sha512-H81I6d7rZB7teqL+zhK/Xz1v0/kKkUwkB0Aq6b4+BTCqcJeiZkoWxd0gFhrhWTnUoqiM83lhoTGo2vkvx5YagQ==} + dependencies: + '@volar/source-map': 0.38.2 + dev: true + + /@volar/source-map/0.38.2: + resolution: {integrity: sha512-DWcYbYt9SPwk0r4VmXk1F0v4X5+hCqH1JRkAWSeJymQyXCQ2OQDEbY2PF12a7y2qn4FUBD2gOba2TynAqI8ZFQ==} + dev: true + + /@volar/vue-code-gen/0.38.2: + resolution: {integrity: sha512-whLunD6phSGWBUHZKdTxeglrpzQu26ii8CRVapFdjfyMaVhQ7ESNeIAhkTVyg2ovOPc0PiDYPQEPzfWAADIWog==} + dependencies: + '@volar/code-gen': 0.38.2 + '@volar/source-map': 0.38.2 + '@vue/compiler-core': 3.2.37 + '@vue/compiler-dom': 3.2.37 + '@vue/shared': 3.2.37 + dev: true + + /@volar/vue-typescript/0.38.2: + resolution: {integrity: sha512-5IKvSK2m5yUmH6iu/tNScVlvJGuiHawTfSmjxaMs+/tod25WeK37LEdf+pdKtlJ30bYTQmmkAuEfG01QvvBRGQ==} + dependencies: + '@volar/code-gen': 0.38.2 + '@volar/source-map': 0.38.2 + '@volar/vue-code-gen': 0.38.2 + '@vue/compiler-sfc': 3.2.37 + '@vue/reactivity': 3.2.37 + dev: true + /@vue/compiler-core/3.2.37: resolution: {integrity: sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==} dependencies: @@ -686,14 +733,12 @@ packages: '@vue/shared': 3.2.37 estree-walker: 2.0.2 source-map: 0.6.1 - dev: false /@vue/compiler-dom/3.2.37: resolution: {integrity: sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==} dependencies: '@vue/compiler-core': 3.2.37 '@vue/shared': 3.2.37 - dev: false /@vue/compiler-sfc/3.2.37: resolution: {integrity: sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==} @@ -708,17 +753,15 @@ packages: magic-string: 0.25.7 postcss: 8.4.14 source-map: 0.6.1 - dev: false /@vue/compiler-ssr/3.2.37: resolution: {integrity: sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==} dependencies: '@vue/compiler-dom': 3.2.37 '@vue/shared': 3.2.37 - dev: false - /@vue/devtools-api/6.1.4: - resolution: {integrity: sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==} + /@vue/devtools-api/6.2.0: + resolution: {integrity: sha512-pF1G4wky+hkifDiZSWn8xfuLOJI1ZXtuambpBEYaf7Xaf6zC/pM29rvAGpd3qaGXnr4BAXU1Pxz/VfvBGwexGA==} dev: false /@vue/reactivity-transform/3.2.37: @@ -729,13 +772,11 @@ packages: '@vue/shared': 3.2.37 estree-walker: 2.0.2 magic-string: 0.25.7 - dev: false /@vue/reactivity/3.2.37: resolution: {integrity: sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==} dependencies: '@vue/shared': 3.2.37 - dev: false /@vue/runtime-core/3.2.37: resolution: {integrity: sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==} @@ -764,7 +805,6 @@ packages: /@vue/shared/3.2.37: resolution: {integrity: sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==} - dev: false /@vueuse/core/8.7.5_vue@3.2.37: resolution: {integrity: sha512-tqgzeZGoZcXzoit4kOGLWJibDMLp0vdm6ZO41SSUQhkhtrPhAg6dbIEPiahhUu6sZAmSYvVrZgEr5aKD51nrLA==} @@ -3379,7 +3419,6 @@ packages: /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: false /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -3597,6 +3636,16 @@ packages: vue: 3.2.37 dev: false + /vue-tsc/0.38.2_typescript@4.7.4: + resolution: {integrity: sha512-+OMmpw9BZC9khul3I1HGtWchv7BCiaM7NvfdilVAiOFkjnivIoaW6jJm6YPQJaEPouePtpkDUWovyzgNxWdDsw==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@volar/vue-typescript': 0.38.2 + typescript: 4.7.4 + dev: true + /vue/3.2.37: resolution: {integrity: sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==} dependencies: diff --git a/src/client/shim.d.ts b/src/client/shim.d.ts index f627e102..2c394ffa 100644 --- a/src/client/shim.d.ts +++ b/src/client/shim.d.ts @@ -14,9 +14,3 @@ declare module '@siteData' { const data: SiteData export default data } - -// this module's typing is broken. -declare module '@docsearch/js' { - function docsearch(props: T): void - export default docsearch -} diff --git a/src/client/theme-default/components/VPAlgoliaSearchBox.vue b/src/client/theme-default/components/VPAlgoliaSearchBox.vue index 7e3ca208..712849fb 100644 --- a/src/client/theme-default/components/VPAlgoliaSearchBox.vue +++ b/src/client/theme-default/components/VPAlgoliaSearchBox.vue @@ -29,14 +29,20 @@ function poll() { }, 16) } +type DocSearchProps = Parameters[0] + function initialize(userOptions: DefaultTheme.AlgoliaSearchOptions) { // note: multi-lang search support is removed since the theme // doesn't support multiple locales as of now. - const options = Object.assign({}, userOptions, { + const options = Object.assign< + {}, + DefaultTheme.AlgoliaSearchOptions, + DocSearchProps + >({}, userOptions, { container: '#docsearch', navigator: { - navigate({ itemUrl }: { itemUrl: string }) { + navigate({ itemUrl }) { const { pathname: hitPathname } = new URL( window.location.origin + itemUrl ) @@ -51,7 +57,7 @@ function initialize(userOptions: DefaultTheme.AlgoliaSearchOptions) { } }, - transformItems(items: any[]) { + transformItems(items) { return items.map((item) => { return Object.assign({}, item, { url: getRelativePath(item.url) @@ -59,7 +65,8 @@ function initialize(userOptions: DefaultTheme.AlgoliaSearchOptions) { }) }, - hitComponent({ hit, children }: { hit: any; children: any }) { + // @ts-ignore + hitComponent({ hit, children }) { const relativeHit = hit.url.startsWith('http') ? getRelativePath(hit.url as string) : hit.url