1
0
Fork 0

chore(tsdown): Bump to latest tsdown version (#2918)

* chore(tsdown): Bump to latest tsdown version

* fix: bump nvmrc node version

* fix: cli tsconfig

* fix: website build

* fix: example build

* fix: circleci install bun

* fix: lint

* fix: circleci install bun

* fix: circleci install bun

* fix: circleci install bun
This commit is contained in:
Paul Jankowski 2026-07-15 09:25:43 -04:00 committed by GitHub
parent 218eac3062
commit 3a15d40b7d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
54 changed files with 1109 additions and 1108 deletions

View file

@ -4,7 +4,8 @@ aliases:
- &install_bun
name: Install Bun
command: |
npm install -g bun
npm install --global --prefix "$HOME/.local" bun@1.3.10
echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$BASH_ENV"
- &restore_bun_cache
name: Restore Bun cache
@ -49,7 +50,7 @@ aliases:
defaults: &defaults
working_directory: ~/docsearch
docker:
- image: cimg/node:22.15.0
- image: cimg/node:24.13.1
playwright: &playwright
working_directory: ~/docsearch

2
.nvmrc
View file

@ -1 +1 @@
22.15.0
24.13.1

View file

@ -249,7 +249,7 @@ packages/
## Cursor Cloud specific instructions
Toolchain is pinned in `.tool-versions`: Node `22.15.0` (managed via `fnm`) and Bun `1.3.10`. These are preinstalled in the Cloud VM and available on `PATH` in new shells; the startup update script only runs `bun install`.
Toolchain is pinned in `.tool-versions`: Node `24.13.1` (managed via `fnm`) and Bun `1.3.10`. These are preinstalled in the Cloud VM and available on `PATH` in new shells; the startup update script only runs `bun install`.
Non-obvious caveats:

View file

@ -37,10 +37,10 @@
"dependencies": {
"@algolia/autocomplete-core": "1.19.2",
"@docsearch/react": "4.6.0",
"@docusaurus/core": "^3.9.2",
"@docusaurus/plugin-content-docs": "^3.9.2",
"@docusaurus/theme-common": "^3.9.2",
"@docusaurus/theme-translations": "^3.9.2",
"@docusaurus/core": "^3.10.2",
"@docusaurus/plugin-content-docs": "^3.10.2",
"@docusaurus/theme-common": "^3.10.2",
"@docusaurus/theme-translations": "^3.10.2",
"algoliasearch": "^5.37.0",
"algoliasearch-helper": "^3.26.0",
"clsx": "^2.0.0",
@ -52,10 +52,10 @@
"utility-types": "^3.10.0"
},
"devDependencies": {
"@docusaurus/core": "^3.9.2",
"@docusaurus/module-type-aliases": "3.9.2",
"@docusaurus/theme-classic": "3.9.2",
"@docusaurus/types": "^3.9.2",
"@docusaurus/core": "^3.10.2",
"@docusaurus/module-type-aliases": "3.10.2",
"@docusaurus/theme-classic": "3.10.2",
"@docusaurus/types": "^3.10.2",
"@types/fs-extra": "^11.0.4",
"@types/lodash": "^4.17.10",
"glob": "^13.0.6",

View file

@ -5,12 +5,13 @@
* LICENSE file in the root directory of this source tree.
*/
import type { ThemeConfig, UserThemeConfig } from '@docsearch/docusaurus-adapter';
import type Joi from 'joi';
import { describe, expect, it, vi } from 'vitest';
import { DEFAULT_CONFIG, validateThemeConfig } from '../validateThemeConfig';
import type { ThemeConfig, UserThemeConfig } from '@docsearch/docusaurus-adapter';
// mock DocSearch to a v4.5 version to allow AskAI sidepanel tests to pass
vi.mock('@docsearch/react', () => ({ version: '4.5.3' }));

View file

@ -5,7 +5,6 @@
* LICENSE file in the root directory of this source tree.
*/
import type { AskAiConfig } from '@docsearch/docusaurus-adapter';
import type { DocSearchAskAiModalProps, DocSearchTranslations } from '@docsearch/react';
import translations from '@theme/SearchTranslations';
import type { FacetFilters } from 'algoliasearch/lite';
@ -14,6 +13,8 @@ import { useCallback, useMemo, useState } from 'react';
import { useAlgoliaContextualFacetFiltersIfEnabled } from './useAlgoliaContextualFacetFilters';
import { mergeFacetFilters } from './utils';
import type { AskAiConfig } from '@docsearch/docusaurus-adapter';
// The minimal props the hook needs from DocSearch
interface DocSearchPropsLite {
indexName: string;

View file

@ -5,9 +5,10 @@
* LICENSE file in the root directory of this source tree.
*/
import type { AskAiConfig } from '@docsearch/docusaurus-adapter';
import { useCallback, useMemo, useRef, useState } from 'react';
import type { AskAiConfig } from '@docsearch/docusaurus-adapter';
type AskAiTogglePayload = {
query: string;
messageId?: string;

View file

@ -4,11 +4,12 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import type { ThemeConfig, ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import { getDocSearchConfig } from '../getDocSearchConfig';
import type { ThemeConfig, ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter';
export function useAlgoliaThemeConfig(): ThemeConfigAlgolia {
const {
siteConfig: { themeConfig },

View file

@ -5,13 +5,14 @@
* LICENSE file in the root directory of this source tree.
*/
import type { ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter';
import { isRegexpStringMatch } from '@docusaurus/theme-common';
import { useBaseUrlUtils } from '@docusaurus/useBaseUrl';
import { useCallback } from 'react';
import { useAlgoliaThemeConfig } from './useAlgoliaThemeConfig';
import type { ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter';
function replacePathname(
pathname: string,
replaceSearchResultPathname: ThemeConfigAlgolia['replaceSearchResultPathname'],

View file

@ -5,7 +5,6 @@
* LICENSE file in the root directory of this source tree.
*/
import type { ThemeConfig } from '@docsearch/docusaurus-adapter';
import { readDefaultCodeTranslationMessages } from '@docusaurus/theme-translations';
import type { LoadContext, Plugin } from '@docusaurus/types';
@ -13,6 +12,8 @@ import { getDocSearchConfig, hasLegacyAlgoliaConfig } from './getDocSearchConfig
import { createOpenSearchFile, createOpenSearchHeadTags, shouldCreateOpenSearchFile } from './opensearch';
import { normalizeUrl } from './utils';
import type { ThemeConfig } from '@docsearch/docusaurus-adapter';
function hasClassicPreset(context: LoadContext): boolean {
return (context.siteConfig.presets ?? []).some((preset) => {
if (typeof preset === 'string') {

View file

@ -7,7 +7,6 @@
import path from 'path';
import type { ThemeConfig } from '@docsearch/docusaurus-adapter';
import type { HtmlTags, LoadContext } from '@docusaurus/types';
import { defaultConfig, compile } from 'eta';
import fs from 'fs-extra';
@ -17,6 +16,8 @@ import { getDocSearchConfig } from './getDocSearchConfig';
import openSearchTemplate from './templates/opensearch';
import { normalizeUrl } from './utils';
import type { ThemeConfig } from '@docsearch/docusaurus-adapter';
const getCompiledOpenSearchTemplate = _.memoize(() => compile(openSearchTemplate.trim()));
function renderOpenSearchTemplate(data: {

View file

@ -7,7 +7,6 @@
*/
import type { AutocompleteState } from '@algolia/autocomplete-core';
import type { ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter';
import type {
InternalDocSearchHit,
DocSearchAskAiModalProps,
@ -43,6 +42,8 @@ import {
mergeFacetFilters,
} from '../../client';
import type { ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter';
type DocSearchProps = Omit<DocSearchModalProps, 'initialScrollY' | 'onClose'> & {
contextualSearch?: string;
externalUrlRegex?: string;

View file

@ -5,7 +5,6 @@
* LICENSE file in the root directory of this source tree.
*/
import type { ThemeConfig, ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter';
import type { ThemeConfigValidationContext } from '@docusaurus/types';
import Joi from 'joi';
@ -13,6 +12,8 @@ import { docSearchVersionString } from './docSearchVersion';
import { getDocSearchConfig } from './getDocSearchConfig';
import { escapeRegexp } from './utils';
import type { ThemeConfig, ThemeConfigAlgolia } from '@docsearch/docusaurus-adapter';
export const DEFAULT_CONFIG = {
// Enabled by default, as it makes sense in most cases
// see also https://github.com/facebook/docusaurus/issues/5880

1695
bun.lock

File diff suppressed because it is too large Load diff

View file

@ -6,11 +6,11 @@
},
{
"path": "packages/docsearch-react/dist/umd/index.js",
"maxSize": "115 kB"
"maxSize": "160 kB"
},
{
"path": "packages/docsearch-js/dist/umd/index.js",
"maxSize": "128 kB"
"maxSize": "100 kB"
},
{
"path": "packages/docsearch-core/dist/umd/index.js",
@ -19,6 +19,14 @@
{
"path": "packages/docsearch-modal/dist/umd/index.js",
"maxSize": "113.5 kB"
},
{
"path": "packages/docsearch-sidepanel/dist/umd/index.js",
"maxSize": "2 kB"
},
{
"path": "packages/docsearch-sidepanel-js/dist/umd/index.js",
"maxSize": "140 kB"
}
]
}

View file

@ -35,6 +35,7 @@ export default [
version: 'detect',
},
'import/resolver': {
typescript: true,
node: {
extensions: ['.js', '.ts', '.tsx'],
},

View file

@ -11,6 +11,7 @@
"preview": "vite preview"
},
"dependencies": {
"@algolia/autocomplete-core": "1.19.2",
"@docsearch/core": "workspace:*",
"@docsearch/css": "workspace:*",
"@docsearch/modal": "workspace:*",

View file

@ -61,6 +61,7 @@
"devDependencies": {
"@changesets/cli": "^2.29.7",
"@eslint-community/eslint-plugin-eslint-comments": "4.4.1",
"@playwright/test": "1.49.1",
"@stylistic/eslint-plugin": "2.13.0",
"@testing-library/dom": "10.4.0",
"@types/react": "^19.0.0",
@ -68,10 +69,10 @@
"@typescript-eslint/eslint-plugin": "8.20.0",
"@typescript-eslint/parser": "8.20.0",
"bundlesize2": "0.0.32",
"@playwright/test": "1.49.1",
"eslint": "8.57.1",
"eslint-config-algolia": "23.2.1",
"eslint-config-prettier": "10.0.1",
"eslint-import-resolver-typescript": "^4.4.5",
"eslint-plugin-import": "2.31.0",
"eslint-plugin-jsdoc": "50.6.2",
"eslint-plugin-jsx-a11y": "6.10.2",
@ -83,7 +84,6 @@
"prettier": "3.4.2",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"rolldown": "1.0.0-beta.57",
"start-server-and-test": "2.0.10",
"stylelint": "16.13.2",
"stylelint-config-sass-guidelines": "12.1.0",

View file

@ -10,7 +10,8 @@
"moduleResolution": "NodeNext",
"outDir": "dist",
"rootDir": "src",
"target": "ES2022"
"target": "ES2022",
"allowImportingTsExtensions": false
},
"include": [
"src/**/*.ts"

View file

@ -1 +0,0 @@
export { DocSearch, useDocSearch } from './dist/esm/index.js';

View file

@ -16,22 +16,18 @@
},
"sideEffects": false,
"files": [
"dist/",
"index.js",
"useTheme.js",
"useDocSearchKeyboardEvents.js",
"useKeyboardShortcuts.js"
"dist/"
],
"exports": {
".": "./dist/esm/index.js",
"./useTheme": "./dist/esm/useTheme.js",
"./useDocSearchKeyboardEvents": "./dist/esm/useDocSearchKeyboardEvents.js",
"./useKeyboardShortcuts": "./dist/esm/useKeyboardShortcuts.js"
"./useKeyboardShortcuts": "./dist/esm/useKeyboardShortcuts.js",
"./useTheme": "./dist/esm/useTheme.js"
},
"source": "src/index.ts",
"types": "dist/esm/index.d.ts",
"module": "dist/esm/index.js",
"main": "dist/umd/index.js",
"types": "./dist/esm/index.d.ts",
"main": "./dist/esm/index.js",
"module": "./dist/esm/index.js",
"umd:main": "dist/umd/index.js",
"unpkg": "dist/umd/index.js",
"jsdelivr": "dist/umd/index.js",
@ -43,7 +39,7 @@
"@testing-library/jest-dom": "6.6.3",
"@testing-library/react": "16.2.0",
"preact": "11.0.0-beta.0",
"tsdown": "^0.18.3",
"tsdown": "0.22.7",
"typescript": "5.7.3",
"vitest": "3.0.2"
},

View file

@ -2,21 +2,21 @@ import type { UserConfig } from 'tsdown';
import { defineConfig } from 'tsdown';
import { getBundleBanner } from '../../scripts/getBundleBanner.ts';
import { rolldownPlugins } from '../../tsdown.base.ts';
import { defines, pkgExports } from '../../tsdown.base.ts';
import pkg from './package.json' with { type: 'json' };
const externals = ['react', 'react-dom'];
const externals = ['react', 'react-dom', /^react\//];
const sharedConfig: UserConfig = {
platform: 'neutral',
external: externals,
platform: 'browser',
deps: {
neverBundle: externals,
},
target: 'es2017',
minify: true,
plugins: rolldownPlugins,
define: defines,
sourcemap: true,
outExtensions: () => ({
dts: '.js',
js: '.js',
}),
};
@ -30,16 +30,22 @@ export default defineConfig([
useKeyboardShortcuts: 'src/useKeyboardShortcuts.ts',
},
...sharedConfig,
dts: true,
format: 'esm',
minify: false,
outDir: 'dist/esm',
exports: pkgExports,
},
{
entry: 'src/index.ts',
outDir: 'dist/umd',
...sharedConfig,
banner: getBundleBanner(pkg),
dts: false,
globalName: 'DocSearchCore',
minify: true,
outputOptions: {
entryFileNames: '[name].js',
name: 'DocSearchCore',
globals: {
react: 'React',
'react-dom': 'ReactDOM',

View file

@ -1 +0,0 @@
export * from './dist/esm/useDocSearchKeyboardEvents.js';

View file

@ -1 +0,0 @@
export * from './dist/esm/useKeyboardShortcuts.js';

View file

@ -1 +0,0 @@
export * from './dist/esm/useTheme.js';

View file

@ -28,11 +28,14 @@
"build": "tsdown",
"watch": "tsdown --watch"
},
"dependencies": {
"@docsearch/core": "4.6.0",
"@docsearch/react": "4.6.0"
},
"devDependencies": {
"@docsearch/react": "4.6.0",
"htm": "3.1.1",
"preact": "11.0.0-beta.0",
"tsdown": "^0.18.3",
"tsdown": "0.22.7",
"typescript": "5.7.3"
},
"nx": {

View file

@ -2,7 +2,7 @@ import type { UserConfig } from 'tsdown';
import { defineConfig } from 'tsdown';
import { getBundleBanner } from '../../scripts/getBundleBanner.ts';
import { rolldownPlugins } from '../../tsdown.base.ts';
import { defines } from '../../tsdown.base.ts';
import pkg from './package.json' with { type: 'json' };
@ -10,33 +10,42 @@ const sharedConfig: UserConfig = {
entry: 'src/index.ts',
platform: 'browser',
target: 'es2017',
minify: true,
plugins: rolldownPlugins,
define: defines,
banner: getBundleBanner(pkg),
alias: {
react: 'preact/compat',
'react-dom': 'preact/compat',
},
outExtensions: () => ({
dts: '.js',
js: '.js',
}),
sourcemap: true,
noExternal: ['@docsearch/react', '@docsearch/core'],
deps: {
alwaysBundle: [/^@docsearch\/(react|core)/],
dts: {
alwaysBundle: [],
},
onlyBundle: false,
},
};
export default defineConfig([
{
...sharedConfig,
dts: true,
format: 'esm',
outDir: 'dist/esm',
minify: false,
},
{
...sharedConfig,
dts: false,
globalName: 'docsearch',
outDir: 'dist/umd',
outputOptions: {
entryFileNames: '[name].js',
name: 'docsearch',
},
format: 'umd',
minify: true,
},
]);

View file

@ -1 +0,0 @@
export * from './dist/esm/DocSearchAskAiModal.js';

View file

@ -1 +0,0 @@
export * from './dist/esm/DocSearchButton.js';

View file

@ -1 +0,0 @@
export * from './dist/esm/index.js';

View file

@ -1 +0,0 @@
export * from './dist/esm/DocSearchModal.js';

View file

@ -15,22 +15,18 @@
},
"sideEffects": false,
"files": [
"dist/",
"button.js",
"index.js",
"modal.js",
"askai.js"
"dist/"
],
"exports": {
".": "./dist/esm/index.js",
"./button": "./dist/esm/DocSearchButton.js",
"./askai": "./dist/esm/DocSearchAskAiModal.js",
"./modal": "./dist/esm/DocSearchModal.js"
"./askai": "./dist/esm/askai.js",
"./button": "./dist/esm/button.js",
"./modal": "./dist/esm/modal.js"
},
"source": "src/index.ts",
"types": "dist/esm/index.d.ts",
"module": "dist/esm/index.js",
"main": "dist/umd/index.js",
"types": "./dist/esm/index.d.ts",
"main": "./dist/esm/index.js",
"module": "./dist/esm/index.js",
"umd:main": "dist/umd/index.js",
"unpkg": "dist/umd/index.js",
"jsdelivr": "dist/umd/index.js",
@ -45,7 +41,7 @@
"devDependencies": {
"@testing-library/jest-dom": "6.6.3",
"@testing-library/react": "16.2.0",
"tsdown": "^0.18.3",
"tsdown": "0.22.7",
"typescript": "5.7.3",
"vitest": "3.0.2"
},

View file

@ -2,21 +2,27 @@ import type { UserConfig } from 'tsdown';
import { defineConfig } from 'tsdown';
import { getBundleBanner } from '../../scripts/getBundleBanner.ts';
import { rolldownPlugins } from '../../tsdown.base.ts';
import { defines, pkgExports } from '../../tsdown.base.ts';
import pkg from './package.json' with { type: 'json' };
const externals = ['react', 'react-dom', '@docsearch/core', /^@docsearch\/react/];
const externals = [
'react',
'react-dom',
/^react\//,
'@docsearch/core',
/^@docsearch\/react/,
];
const sharedConfig: UserConfig = {
platform: 'neutral',
external: externals,
platform: 'browser',
deps: {
neverBundle: externals,
},
target: 'es2017',
minify: true,
plugins: rolldownPlugins,
define: defines,
sourcemap: true,
outExtensions: () => ({
dts: '.js',
js: '.js',
}),
};
@ -24,27 +30,36 @@ const sharedConfig: UserConfig = {
export default defineConfig([
{
...sharedConfig,
dts: true,
format: 'esm',
minify: false,
entry: {
index: 'src/index.ts',
DocSearchButton: 'src/DocSearchButton.tsx',
DocSearchAskAiModal: 'src/DocSearchAskAiModal.tsx',
DocSearchModal: 'src/DocSearchModal.tsx',
button: 'src/DocSearchButton.tsx',
askai: 'src/DocSearchAskAiModal.tsx',
modal: 'src/DocSearchModal.tsx',
},
outDir: 'dist/esm',
exports: pkgExports,
},
{
...sharedConfig,
entry: 'src/index.ts',
outDir: 'dist/umd',
banner: getBundleBanner(pkg),
dts: false,
globalName: 'DocSearchModal',
minify: true,
outputOptions: {
entryFileNames: '[name].js',
name: 'DocSearchModal',
globals: {
react: 'React',
'react-dom': 'ReactDOM',
'@docsearch/core': 'DocSearchCore',
'@docsearch/react': 'DocSearchReact',
'@docsearch/react/askaiModal': 'DocSearchReact',
'@docsearch/react/button': 'DocSearchReact',
'@docsearch/react/modal': 'DocSearchReact',
},
},
format: 'umd',

View file

@ -1 +0,0 @@
export { DocSearchAskAiModal } from './dist/esm/DocSearchAskAiModal.js';

View file

@ -1 +0,0 @@
export { DocSearchButton } from './dist/esm/DocSearchButton.js';

View file

@ -1 +0,0 @@
export { DocSearchAI } from './dist/esm/DocSearchAI.js';

View file

@ -1 +0,0 @@
export { DocSearchModal } from './dist/esm/DocSearchModal.js';

View file

@ -16,37 +16,29 @@
"sideEffects": false,
"files": [
"dist/",
"askaiModal.js",
"docsearchAi.js",
"button.js",
"modal.js",
"useTheme.js",
"useDocSearchKeyboardEvents.js",
"version.js",
"sidepanel.js",
"style/"
],
"exports": {
".": "./dist/esm/index.js",
"./askaiModal": "./dist/esm/DocSearchAskAiModal.js",
"./docsearchAi": "./dist/esm/DocSearchAI.js",
"./button": "./dist/esm/DocSearchButton.js",
"./modal": "./dist/esm/DocSearchModal.js",
"./askaiModal": "./dist/esm/askaiModal.js",
"./button": "./dist/esm/button.js",
"./docsearchAi": "./dist/esm/docsearchAi.js",
"./modal": "./dist/esm/modal.js",
"./sidepanel": "./dist/esm/sidepanel.js",
"./useDocSearchKeyboardEvents": "./dist/esm/useDocSearchKeyboardEvents.js",
"./useTheme": "./dist/esm/useTheme.js",
"./version": "./dist/esm/version.js",
"./style": "./style/index.js",
"./style/askai": "./style/askai.js",
"./style/button": "./style/button.js",
"./style/modal": "./style/modal.js",
"./useDocSearchKeyboardEvents": "./dist/esm/useDocSearchKeyboardEvents.js",
"./useTheme": "./dist/esm/useTheme.js",
"./version": "./dist/esm/version.js",
"./sidepanel": "./dist/esm/Sidepanel.js",
"./style/sidepanel": "./style/sidepanel.js",
"./style/variables": "./style/variables.js"
},
"source": "src/index.ts",
"types": "dist/esm/index.d.ts",
"module": "dist/esm/index.js",
"main": "dist/umd/index.js",
"types": "./dist/esm/index.d.ts",
"main": "./dist/esm/index.js",
"module": "./dist/esm/index.js",
"umd:main": "dist/umd/index.js",
"unpkg": "dist/umd/index.js",
"jsdelivr": "dist/umd/index.js",
@ -55,25 +47,25 @@
"watch": "tsdown --watch"
},
"dependencies": {
"@ai-sdk/react": "^2.0.30",
"@algolia/autocomplete-core": "1.19.2",
"@base-ui/react": "^1.5.0",
"@docsearch/core": "4.6.0",
"@docsearch/css": "4.6.0"
"@docsearch/css": "4.6.0",
"ai": "^5.0.30",
"algoliasearch": "^5.28.0",
"marked": "^16.3.0",
"zod": "^4.1.8"
},
"devDependencies": {
"@ai-sdk/react": "^2.0.30",
"@algolia/autocomplete-core": "1.19.2",
"@docsearch/core": "4.6.0",
"@testing-library/jest-dom": "6.6.3",
"@testing-library/react": "16.2.0",
"ai": "^5.0.30",
"algoliasearch": "^5.28.0",
"marked": "^16.3.0",
"preact": "11.0.0-beta.0",
"tsdown": "^0.18.3",
"tsdown": "0.22.7",
"typescript": "5.7.3",
"vitest": "3.0.2",
"zod": "^4.1.8"
"vitest": "3.0.2"
},
"peerDependencies": {
"@types/react": ">= 16.8.0 < 20.0.0",

View file

@ -1 +0,0 @@
export * from './dist/esm/Sidepanel.js';

View file

@ -337,7 +337,10 @@ describe('api', () => {
expect(document.querySelector('.DocSearch-AskAiScreen')).toBeInTheDocument();
// could be "Answering..." or "Ask another question..."
expect(screen.getByText('Answering...')).toBeInTheDocument();
// where "Ask another question..." is actually an input's placeholder text
expect(
screen.queryByText('Answering...') ?? screen.queryByPlaceholderText('Ask another question...'),
).toBeInTheDocument();
});
it('renders and selects prompt suggestions', async () => {

View file

@ -0,0 +1,87 @@
import type { UserConfig } from 'tsdown';
import { defineConfig } from 'tsdown';
import { getBundleBanner } from '../../scripts/getBundleBanner.ts';
import { defines, pkgExports } from '../../tsdown.base.ts';
import pkg from './package.json' with { type: 'json' };
const externals = ['react', 'react-dom', /^react\//, '@docsearch/core'];
const sharedConfig: UserConfig = {
platform: 'browser',
deps: {
neverBundle: externals,
},
target: 'es2017',
define: defines,
sourcemap: true,
outExtensions: () => ({
js: '.js',
}),
};
export default defineConfig([
{
entry: {
index: 'src/index.ts',
docsearchAi: 'src/DocSearchAI.tsx',
askaiModal: 'src/DocSearchAskAiModal.tsx',
button: 'src/DocSearchButton.tsx',
modal: 'src/DocSearchModal.tsx',
useDocSearchKeyboardEvents: 'src/useDocSearchKeyboardEvents.ts',
useTheme: 'src/useTheme.tsx',
version: 'src/version.ts',
sidepanel: 'src/Sidepanel.tsx',
},
...sharedConfig,
dts: true,
format: 'esm',
minify: false,
outDir: 'dist/esm',
exports: {
...pkgExports,
customExports: {
'./style': './style/index.js',
'./style/askai': './style/askai.js',
'./style/button': './style/button.js',
'./style/modal': './style/modal.js',
'./style/sidepanel': './style/sidepanel.js',
'./style/variables': './style/variables.js',
},
},
},
{
entry: 'src/index.ts',
outDir: 'dist/umd',
...sharedConfig,
banner: getBundleBanner(pkg),
deps: {
alwaysBundle: [
/^@ai-sdk\/react/,
/^@algolia\/autocomplete-core/,
/^@base-ui\/react/,
/^ai(?:\/|$)/,
/^algoliasearch/,
/^marked(?:\/|$)/,
/^zod(?:\/|$)/,
],
neverBundle: externals,
onlyBundle: false,
},
dts: false,
globalName: 'DocSearchReact',
minify: true,
outputOptions: {
entryFileNames: '[name].js',
globals: {
react: 'React',
'react/jsx-runtime': 'React',
'react-dom': 'ReactDOM',
'@docsearch/core': 'DocSearchCore',
'@docsearch/core/useTheme': 'DocSearchCore',
},
},
format: 'umd',
},
]);

View file

@ -1,56 +0,0 @@
import type { UserConfig } from 'tsdown';
import { defineConfig } from 'tsdown';
import { getBundleBanner } from '../../scripts/getBundleBanner.ts';
import { rolldownPlugins } from '../../tsdown.base.ts';
import pkg from './package.json' with { type: 'json' };
const externals = ['react', 'react-dom', '@docsearch/core'];
const sharedConfig: UserConfig = {
platform: 'neutral',
external: externals,
target: 'es2017',
minify: true,
plugins: rolldownPlugins,
sourcemap: true,
outExtensions: () => ({
dts: '.js',
js: '.js',
}),
};
export default defineConfig([
{
entry: {
index: 'src/index.ts',
DocSearchAI: 'src/DocSearchAI.tsx',
DocSearchAskAiModal: 'src/DocSearchAskAiModal.tsx',
DocSearchButton: 'src/DocSearchButton.tsx',
DocSearchModal: 'src/DocSearchModal.tsx',
useDocSearchKeyboardEvents: 'src/useDocSearchKeyboardEvents.ts',
useTheme: 'src/useTheme.tsx',
version: 'src/version.ts',
Sidepanel: 'src/Sidepanel.tsx',
},
...sharedConfig,
outDir: 'dist/esm',
},
{
entry: 'src/index.ts',
outDir: 'dist/umd',
...sharedConfig,
banner: getBundleBanner(pkg),
outputOptions: {
entryFileNames: '[name].js',
name: 'DocSearchReact',
globals: {
react: 'React',
'react-dom': 'ReactDOM',
'@docsearch/core': 'DocSearchCore',
},
},
format: 'umd',
},
]);

View file

@ -1 +0,0 @@
export { useDocSearchKeyboardEvents } from './dist/esm/useDocSearchKeyboardEvents.js';

View file

@ -1 +0,0 @@
export { useTheme } from './dist/esm/useTheme.js';

View file

@ -1 +0,0 @@
export { version } from './dist/esm/version.js';

View file

@ -31,10 +31,13 @@
"build": "tsdown",
"watch": "tsdown --watch"
},
"dependencies": {
"@docsearch/core": "4.6.0",
"@docsearch/react": "4.6.0"
},
"devDependencies": {
"@docsearch/react": "4.6.0",
"preact": "11.0.0-beta.0",
"tsdown": "^0.18.3",
"tsdown": "0.22.7",
"typescript": "5.7.3"
},
"nx": {

View file

@ -2,7 +2,7 @@ import type { UserConfig } from 'tsdown';
import { defineConfig } from 'tsdown';
import { getBundleBanner } from '../../scripts/getBundleBanner.ts';
import { rolldownPlugins } from '../../tsdown.base.ts';
import { defines } from '../../tsdown.base.ts';
import pkg from './package.json' with { type: 'json' };
@ -10,33 +10,42 @@ const sharedConfig: UserConfig = {
entry: 'src/index.ts',
platform: 'browser',
target: 'es2017',
minify: true,
plugins: rolldownPlugins,
define: defines,
banner: getBundleBanner(pkg),
alias: {
react: 'preact/compat',
'react-dom': 'preact/compat',
},
outExtensions: () => ({
dts: '.js',
js: '.js',
}),
sourcemap: true,
noExternal: ['@docsearch/react', '@docsearch/core'],
deps: {
alwaysBundle: [/^@docsearch\/(react|core)/],
dts: {
alwaysBundle: [],
},
onlyBundle: false,
},
};
export default defineConfig([
{
...sharedConfig,
dts: true,
format: 'esm',
outDir: 'dist/esm',
minify: false,
},
{
...sharedConfig,
dts: false,
globalName: 'docsearchSidepanel',
outDir: 'dist/umd',
outputOptions: {
entryFileNames: '[name].js',
name: 'docsearch-sidepanel',
},
format: 'umd',
minify: true,
},
]);

View file

@ -1 +0,0 @@
export * from './dist/esm/SidepanelButton.js';

View file

@ -1 +0,0 @@
export * from './dist/esm/index.js';

View file

@ -19,20 +19,17 @@
"sideEffects": false,
"files": [
"dist/",
"index.js",
"button.js",
"sidepanel.js",
"style/"
],
"exports": {
".": "./dist/esm/index.js",
"./sidepanel": "./dist/esm/Sidepanel.js",
"./button": "./dist/esm/SidepanelButton.js"
"./button": "./dist/esm/button.js",
"./sidepanel": "./dist/esm/sidepanel.js"
},
"source": "src/index.ts",
"types": "dist/esm/index.d.ts",
"module": "dist/esm/index.js",
"main": "dist/umd/index.js",
"types": "./dist/esm/index.d.ts",
"main": "./dist/esm/index.js",
"module": "./dist/esm/index.js",
"umd:main": "dist/umd/index.js",
"unpkg": "dist/umd/index.js",
"jsdelivr": "dist/umd/index.js",
@ -48,7 +45,7 @@
"devDependencies": {
"@testing-library/jest-dom": "6.6.3",
"@testing-library/react": "16.2.0",
"tsdown": "^0.18.3",
"tsdown": "0.22.7",
"typescript": "5.7.3",
"vitest": "3.0.2"
},

View file

@ -1 +0,0 @@
export * from './dist/esm/Sidepanel.js';

View file

@ -2,20 +2,26 @@ import type { UserConfig } from 'tsdown';
import { defineConfig } from 'tsdown';
import { getBundleBanner } from '../../scripts/getBundleBanner.ts';
import { rolldownPlugins } from '../../tsdown.base.ts';
import { defines, pkgExports } from '../../tsdown.base.ts';
import pkg from './package.json' with { type: 'json' };
const externals = ['react', 'react-dom', '@docsearch/core', /^@docsearch\/react/];
const externals = [
'react',
'react-dom',
/^react\//,
'@docsearch/core',
/^@docsearch\/react/,
];
const sharedConfig: UserConfig = {
platform: 'neutral',
external: externals,
platform: 'browser',
deps: {
neverBundle: externals,
},
target: 'es2017',
minify: true,
plugins: rolldownPlugins,
define: defines,
outExtensions: () => ({
dts: '.js',
js: '.js',
}),
sourcemap: true,
@ -24,25 +30,32 @@ const sharedConfig: UserConfig = {
export default defineConfig([
{
...sharedConfig,
dts: true,
format: 'esm',
minify: false,
entry: {
index: 'src/index.ts',
SidepanelButton: 'src/SidepanelButton.tsx',
Sidepanel: 'src/Sidepanel.tsx',
button: 'src/SidepanelButton.tsx',
sidepanel: 'src/Sidepanel.tsx',
},
outDir: 'dist/esm',
exports: pkgExports,
},
{
...sharedConfig,
entry: 'src/index.ts',
outDir: 'dist/umd',
banner: getBundleBanner(pkg),
dts: false,
globalName: 'DocSearchSidepanel',
minify: true,
outputOptions: {
entryFileNames: '[name].js',
name: 'DocSearchSidepanel',
globals: {
react: 'React',
'react-dom': 'ReactDOM',
'@docsearch/core': 'DocSearchCore',
'@docsearch/react/sidepanel': 'DocSearchReact',
},
},
format: 'umd',

View file

@ -22,9 +22,9 @@
"@docsearch/modal": "workspace:*",
"@docsearch/react": "workspace:*",
"@docsearch/sidepanel": "workspace:*",
"@docusaurus/core": "3.9.2",
"@docusaurus/preset-classic": "3.9.2",
"@docusaurus/theme-common": "3.9.2",
"@docusaurus/core": "3.10.2",
"@docusaurus/preset-classic": "3.10.2",
"@docusaurus/theme-common": "3.10.2",
"@mdx-js/react": "^3.1.0",
"@tabler/icons-react": "^3.34.0",
"class-variance-authority": "^0.7.1",
@ -46,9 +46,9 @@
"tw-animate-css": "^1.3.5"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.9.2",
"@docusaurus/tsconfig": "3.9.2",
"@docusaurus/types": "3.9.2",
"@docusaurus/module-type-aliases": "3.10.2",
"@docusaurus/tsconfig": "3.10.2",
"@docusaurus/types": "3.10.2",
"@tailwindcss/postcss": "4.1.11",
"image-webpack-loader": "^8.1.0",
"tailwindcss": "4.1.11",

View file

@ -1,14 +1,11 @@
// eslint-disable-next-line import/no-unresolved
import { replacePlugin } from 'rolldown/plugins';
export const defines = {
__DEV__: JSON.stringify(process.env.NODE_ENV === 'development'),
'process.env.NODE_ENV': JSON.stringify('production'),
};
export const rolldownPlugins = [
replacePlugin(
{
__DEV__: JSON.stringify(process.env.NODE_ENV === 'development'),
'process.env.NODE_ENV': JSON.stringify('production'),
},
{
preventAssignment: true,
},
),
];
export const pkgExports = {
enabled: true,
packageJson: false,
legacy: true,
inlinedDependencies: false,
};