@rubixstudios/payload-typesense 1.1.7 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/components/HeadlessSearchInput.d.ts +1 -2
  2. package/dist/components/HeadlessSearchInput.d.ts.map +1 -1
  3. package/dist/components/HeadlessSearchInput.js +33 -300
  4. package/dist/components/render/Header.d.ts +9 -0
  5. package/dist/components/render/Header.d.ts.map +1 -0
  6. package/dist/components/render/Header.js +39 -0
  7. package/dist/components/render/NoResults.d.ts +9 -0
  8. package/dist/components/render/NoResults.d.ts.map +1 -0
  9. package/dist/components/render/NoResults.js +45 -0
  10. package/dist/components/render/ResultError.d.ts +9 -0
  11. package/dist/components/render/ResultError.d.ts.map +1 -0
  12. package/dist/components/render/ResultError.js +38 -0
  13. package/dist/components/render/Results.d.ts +14 -0
  14. package/dist/components/render/Results.d.ts.map +1 -0
  15. package/dist/components/render/Results.js +143 -0
  16. package/dist/components/render/index.d.ts +5 -0
  17. package/dist/components/render/index.d.ts.map +1 -0
  18. package/dist/components/render/index.js +4 -0
  19. package/dist/components/themes/hooks.d.ts +1 -1
  20. package/dist/components/themes/hooks.d.ts.map +1 -1
  21. package/dist/components/themes/hooks.js +0 -1
  22. package/dist/components/themes/utils.d.ts +2 -10
  23. package/dist/components/themes/utils.d.ts.map +1 -1
  24. package/dist/components/themes/utils.js +13 -18
  25. package/dist/endpoints/handler/createAdvancedSearch.d.ts +1 -1
  26. package/dist/endpoints/handler/createCollections.d.ts +1 -1
  27. package/dist/endpoints/handler/createSearch.d.ts +1 -1
  28. package/dist/endpoints/handler/createSearch.d.ts.map +1 -1
  29. package/dist/endpoints/handler/createSuggest.d.ts +1 -1
  30. package/dist/endpoints/health.d.ts +1 -1
  31. package/dist/endpoints/health.d.ts.map +1 -1
  32. package/dist/endpoints/search.d.ts +1 -1
  33. package/dist/index.d.ts +3 -27
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +27 -29
  36. package/dist/lib/client.d.ts +1 -1
  37. package/dist/lib/headlessSearch.d.ts +1 -9
  38. package/dist/lib/headlessSearch.d.ts.map +1 -1
  39. package/dist/lib/hooks.d.ts +1 -1
  40. package/dist/lib/initialization.d.ts +2 -2
  41. package/dist/lib/initialization.d.ts.map +1 -1
  42. package/dist/lib/initialization.js +47 -35
  43. package/dist/lib/schema-mapper.d.ts +1 -2
  44. package/dist/lib/schema-mapper.d.ts.map +1 -1
  45. package/dist/types.d.ts +27 -0
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/types.js +0 -1
  48. package/dist/utils/getAllCollections.d.ts +1 -1
  49. package/dist/utils/getAllCollections.d.ts.map +1 -1
  50. package/package.json +2 -3
@@ -0,0 +1,143 @@
1
+ export function RenderedResult({ index, onResultClick, renderDate = true, result, resultItemClassName = '', resultsContainerClassName = '', themeConfig }) {
2
+ return /*#__PURE__*/ React.createElement("div", {
3
+ className: resultsContainerClassName,
4
+ style: {
5
+ backgroundColor: themeConfig.theme.colors.resultBackground,
6
+ borderBottom: `1px solid ${themeConfig.theme.colors.resultBorder}`,
7
+ cursor: 'pointer',
8
+ padding: themeConfig.theme.spacing.itemPadding,
9
+ transition: themeConfig.config.enableAnimations !== false ? `all ${themeConfig.theme.animations.transitionFast} ${themeConfig.theme.animations.easeInOut}` : 'none'
10
+ }
11
+ }, /*#__PURE__*/ React.createElement("div", {
12
+ className: `${themeConfig.classes.resultItem} ${resultItemClassName}`,
13
+ "data-result-item": true,
14
+ key: result.document?.id || result.id || index,
15
+ onBlur: (e)=>{
16
+ e.currentTarget.style.backgroundColor = themeConfig.theme.colors.resultBackground;
17
+ },
18
+ onClick: ()=>onResultClick(result),
19
+ onFocus: (e)=>{
20
+ e.currentTarget.style.backgroundColor = themeConfig.theme.colors.resultBackgroundFocus;
21
+ },
22
+ onKeyDown: (e)=>{
23
+ if (e.key === 'Enter' || e.key === ' ') {
24
+ e.preventDefault();
25
+ onResultClick(result);
26
+ }
27
+ },
28
+ onMouseEnter: (e)=>{
29
+ e.currentTarget.style.backgroundColor = themeConfig.theme.colors.resultBackgroundHover;
30
+ },
31
+ onMouseLeave: (e)=>{
32
+ e.currentTarget.style.backgroundColor = themeConfig.theme.colors.resultBackground;
33
+ },
34
+ role: "button",
35
+ tabIndex: 0
36
+ }, /*#__PURE__*/ React.createElement("div", {
37
+ style: {
38
+ alignItems: 'flex-start',
39
+ display: 'flex',
40
+ gap: '12px',
41
+ padding: '6px'
42
+ }
43
+ }, /*#__PURE__*/ React.createElement("div", {
44
+ style: {
45
+ flexShrink: 0
46
+ }
47
+ }, /*#__PURE__*/ React.createElement("div", {
48
+ style: {
49
+ alignItems: 'center',
50
+ backgroundColor: themeConfig.theme.colors.collectionBadge,
51
+ borderRadius: themeConfig.theme.spacing.inputBorderRadius,
52
+ color: themeConfig.theme.colors.collectionBadgeText,
53
+ display: 'flex',
54
+ fontSize: '14px',
55
+ fontWeight: themeConfig.theme.typography.fontWeightMedium,
56
+ height: '32px',
57
+ justifyContent: 'center',
58
+ width: '32px'
59
+ }
60
+ }, result.collection?.charAt(0).toUpperCase() || '📄')), /*#__PURE__*/ React.createElement("div", {
61
+ style: {
62
+ flex: 1,
63
+ minWidth: 0
64
+ }
65
+ }, /*#__PURE__*/ React.createElement("div", {
66
+ style: {
67
+ alignItems: 'center',
68
+ display: 'flex',
69
+ justifyContent: 'space-between',
70
+ marginBottom: '8px'
71
+ }
72
+ }, /*#__PURE__*/ React.createElement("h3", {
73
+ style: {
74
+ color: themeConfig.theme.colors.titleText,
75
+ fontFamily: themeConfig.theme.typography.fontFamily,
76
+ fontSize: themeConfig.theme.typography.fontSizeBase,
77
+ fontWeight: themeConfig.theme.typography.fontWeightSemibold,
78
+ lineHeight: themeConfig.theme.typography.lineHeightTight,
79
+ margin: 0,
80
+ overflow: 'hidden',
81
+ textOverflow: 'ellipsis',
82
+ whiteSpace: 'nowrap'
83
+ }
84
+ }, result.document?.title || result.document?.name || result.title || 'Untitled')), (result.highlight?.title?.snippet || result.highlight?.content?.snippet) && /*#__PURE__*/ React.createElement("div", {
85
+ dangerouslySetInnerHTML: {
86
+ __html: result.highlight?.title?.snippet || result.highlight?.content?.snippet || ''
87
+ },
88
+ style: {
89
+ color: themeConfig.theme.colors.descriptionText,
90
+ display: '-webkit-box',
91
+ fontSize: themeConfig.theme.typography.fontSizeSm,
92
+ fontWeight: themeConfig.theme.typography.fontWeightNormal,
93
+ lineHeight: themeConfig.theme.typography.lineHeightNormal,
94
+ marginTop: '4px',
95
+ overflow: 'hidden',
96
+ WebkitBoxOrient: 'vertical',
97
+ WebkitLineClamp: 2
98
+ }
99
+ }), /*#__PURE__*/ React.createElement("div", {
100
+ style: {
101
+ alignItems: 'center',
102
+ color: themeConfig.theme.colors.metaText,
103
+ display: 'flex',
104
+ fontSize: themeConfig.theme.typography.fontSizeXs,
105
+ gap: '12px',
106
+ marginTop: '8px'
107
+ }
108
+ }, result.collection && /*#__PURE__*/ React.createElement("span", {
109
+ style: {
110
+ alignItems: 'center',
111
+ display: 'inline-flex'
112
+ }
113
+ }, /*#__PURE__*/ React.createElement("svg", {
114
+ fill: "currentColor",
115
+ style: {
116
+ height: '12px',
117
+ marginRight: '4px',
118
+ width: '12px'
119
+ },
120
+ viewBox: "0 0 20 20"
121
+ }, /*#__PURE__*/ React.createElement("path", {
122
+ clipRule: "evenodd",
123
+ d: "M3 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 4a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z",
124
+ fillRule: "evenodd"
125
+ })), result.collection), renderDate && (result.document?.updatedAt || result.updatedAt) && /*#__PURE__*/ React.createElement("span", {
126
+ style: {
127
+ alignItems: 'center',
128
+ display: 'inline-flex'
129
+ }
130
+ }, /*#__PURE__*/ React.createElement("svg", {
131
+ fill: "currentColor",
132
+ style: {
133
+ height: '12px',
134
+ marginRight: '4px',
135
+ width: '12px'
136
+ },
137
+ viewBox: "0 0 20 20"
138
+ }, /*#__PURE__*/ React.createElement("path", {
139
+ clipRule: "evenodd",
140
+ d: "M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z",
141
+ fillRule: "evenodd"
142
+ })), new Date(result.document?.updatedAt || result.updatedAt).toLocaleDateString()))))));
143
+ }
@@ -0,0 +1,5 @@
1
+ export { RenderedHeader } from './Header.js';
2
+ export { RenderedNoResults } from './NoResults.js';
3
+ export { RenderedResultError } from './ResultError.js';
4
+ export { RenderedResult } from './Results.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/render/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { RenderedHeader } from './Header.js';
2
+ export { RenderedNoResults } from './NoResults.js';
3
+ export { RenderedResultError } from './ResultError.js';
4
+ export { RenderedResult } from './Results.js';
@@ -1,4 +1,4 @@
1
- import type { Theme, ThemeConfig, ThemeContextValue } from './types.js';
1
+ import { type Theme, type ThemeConfig, type ThemeContextValue } from './types.js';
2
2
  declare const ThemeContext: import("react").Context<ThemeContextValue | null>;
3
3
  /**
4
4
  * Hook to access theme context
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/components/themes/hooks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAWvE,QAAA,MAAM,YAAY,mDAAgD,CAAA;AAElE;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAoBrE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,WAAW,CA8B1F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,OAAO,GACd,WAAW,CAIb;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc3E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,CAKnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAKrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,CAK3E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,OAAO,CAQjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAM1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,GAC9B,WAAW,CAOb;AAGD,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/components/themes/hooks.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAUjF,QAAA,MAAM,YAAY,mDAAgD,CAAA;AAElE;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAoBrE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,WAAW,CA8B1F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,OAAO,GACd,WAAW,CAIb;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc3E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,CAKnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAKrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,CAK3E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,OAAO,CAQjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAM1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,GAC9B,WAAW,CAOb;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -172,5 +172,4 @@ const ThemeContext = createContext(null);
172
172
  overrides
173
173
  ]);
174
174
  }
175
- // Export context for provider
176
175
  export { ThemeContext };
@@ -1,15 +1,7 @@
1
- import type { Theme, ThemeClasses, ThemeConfig } from './types.js';
2
- /**
3
- * Get a theme by name or return the default theme
4
- */
1
+ import { type Theme, type ThemeClasses, type ThemeConfig } from './types.js';
5
2
  export declare function getTheme(themeName: string): Theme;
6
- /**
7
- * Merge theme configurations with custom overrides
8
- */
9
3
  export declare function mergeThemeConfig(config: ThemeConfig): Theme;
10
- /**
11
- * Generate CSS classes from theme configuration
12
- */
4
+ export declare function css(styles: Record<string, number | Record<string, number | string> | string>): string;
13
5
  export declare function generateThemeClasses(theme: Theme, config?: Partial<ThemeConfig>): ThemeClasses;
14
6
  /**
15
7
  * Apply theme to a CSS class with optional variant
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/themes/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAIlE;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAEjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CA0B3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,EACZ,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAChC,YAAY,CAwVd;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAWlF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAMjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgCtE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/themes/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAE5E,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAEjD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CA0B3D;AAED,wBAAgB,GAAG,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GACxE,MAAM,CAgBR;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,EACZ,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAChC,YAAY,CAuUd;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAWlF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAMjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgCtE"}
@@ -1,12 +1,8 @@
1
1
  import { defaultTheme, themes } from './themes.js';
2
- /**
3
- * Get a theme by name or return the default theme
4
- */ export function getTheme(themeName) {
2
+ export function getTheme(themeName) {
5
3
  return themes[themeName] || defaultTheme;
6
4
  }
7
- /**
8
- * Merge theme configurations with custom overrides
9
- */ export function mergeThemeConfig(config) {
5
+ export function mergeThemeConfig(config) {
10
6
  const baseTheme = typeof config.theme === 'string' ? getTheme(config.theme) : config.theme;
11
7
  return {
12
8
  ...baseTheme,
@@ -32,21 +28,20 @@ import { defaultTheme, themes } from './themes.js';
32
28
  }
33
29
  };
34
30
  }
35
- /**
36
- * Generate CSS classes from theme configuration
37
- */ export function generateThemeClasses(theme, config = {}) {
31
+ export function css(styles) {
32
+ const toKebab = (key)=>key.replace(/([A-Z])/g, '-$1').toLowerCase();
33
+ const serialize = (obj)=>Object.entries(obj).map(([prop, val])=>`${toKebab(prop)}: ${val}`).join('; ');
34
+ return Object.entries(styles).map(([key, value])=>{
35
+ if (typeof value === 'object' && value !== null) {
36
+ return `${toKebab(key)} { ${serialize(value)} }`;
37
+ }
38
+ return `${toKebab(key)}: ${value}`;
39
+ }).join('; ');
40
+ }
41
+ export function generateThemeClasses(theme, config = {}) {
38
42
  const enableAnimations = config.enableAnimations !== false;
39
43
  const enableShadows = config.enableShadows !== false;
40
44
  const enableRoundedCorners = config.enableRoundedCorners !== false;
41
- const css = (styles)=>{
42
- return Object.entries(styles).map(([key, value])=>{
43
- if (typeof value === 'object' && value !== null) {
44
- const nested = Object.entries(value).map(([nestedKey, nestedValue])=>`${nestedKey.replace(/([A-Z])/g, '-$1').toLowerCase()}: ${nestedValue}`).join('; ');
45
- return `${key.replace(/([A-Z])/g, '-$1').toLowerCase()}: { ${nested} }`;
46
- }
47
- return `${key.replace(/([A-Z])/g, '-$1').toLowerCase()}: ${value}`;
48
- }).join('; ');
49
- };
50
45
  const containerStyles = css({
51
46
  margin: '0 auto',
52
47
  maxWidth: '600px',
@@ -1,5 +1,5 @@
1
1
  import type Typesense from 'typesense';
2
2
  import { type PayloadHandler } from 'payload';
3
- import { type TypesenseConfig } from '../../index.js';
3
+ import { type TypesenseConfig } from '../../types.js';
4
4
  export declare const createAdvancedSearch: (typesenseClient: Typesense.Client, pluginOptions: TypesenseConfig) => PayloadHandler;
5
5
  //# sourceMappingURL=createAdvancedSearch.d.ts.map
@@ -1,4 +1,4 @@
1
1
  import { type PayloadHandler } from 'payload';
2
- import { type TypesenseConfig } from '../../index.js';
2
+ import { type TypesenseConfig } from '../../types.js';
3
3
  export declare const createCollections: (pluginOptions: TypesenseConfig) => PayloadHandler;
4
4
  //# sourceMappingURL=createCollections.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type Typesense from 'typesense';
2
2
  import { type PayloadHandler } from 'payload';
3
- import { type TypesenseConfig } from '../../index.js';
3
+ import { type TypesenseConfig } from '../../types.js';
4
4
  export declare const createSearch: (typesenseClient: Typesense.Client, pluginOptions: TypesenseConfig) => PayloadHandler;
5
5
  //# sourceMappingURL=createSearch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createSearch.d.ts","sourceRoot":"","sources":["../../../src/endpoints/handler/createSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAEtC,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,SAAS,CAAA;AAElE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAKrD,eAAO,MAAM,YAAY,GACvB,iBAAiB,SAAS,CAAC,MAAM,EACjC,eAAe,eAAe,KAC7B,cAoGF,CAAA"}
1
+ {"version":3,"file":"createSearch.d.ts","sourceRoot":"","sources":["../../../src/endpoints/handler/createSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAEtC,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,SAAS,CAAA;AAIlE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrD,eAAO,MAAM,YAAY,GACvB,iBAAiB,SAAS,CAAC,MAAM,EACjC,eAAe,eAAe,KAC7B,cAoGF,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type Typesense from 'typesense';
2
2
  import { type PayloadHandler } from 'payload';
3
- import { type TypesenseConfig } from '../../index.js';
3
+ import { type TypesenseConfig } from '../../types.js';
4
4
  export declare const createSuggest: (typesenseClient: Typesense.Client, pluginOptions: TypesenseConfig) => PayloadHandler;
5
5
  //# sourceMappingURL=createSuggest.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import type Typesense from 'typesense';
2
2
  import { type PayloadHandler } from 'payload';
3
- import { type TypesenseConfig } from '../index.js';
3
+ import { type TypesenseConfig } from '../types.js';
4
4
  export declare const createHealthCheck: (typesenseClient: Typesense.Client, _pluginOptions: TypesenseConfig, lastSyncTime?: number) => PayloadHandler;
5
5
  export declare const createDetailedHealthCheck: (typesenseClient: Typesense.Client, pluginOptions: TypesenseConfig, lastSyncTime?: number) => PayloadHandler;
6
6
  //# sourceMappingURL=health.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/endpoints/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAEtC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAG7C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAOlD,eAAO,MAAM,iBAAiB,GAC5B,iBAAiB,SAAS,CAAC,MAAM,EACjC,gBAAgB,eAAe,EAC/B,eAAe,MAAM,KACpB,cAsCF,CAAA;AAED,eAAO,MAAM,yBAAyB,GACpC,iBAAiB,SAAS,CAAC,MAAM,EACjC,eAAe,eAAe,EAC9B,eAAe,MAAM,KACpB,cAsFF,CAAA"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/endpoints/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAEtC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAG7C,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAM5E,eAAO,MAAM,iBAAiB,GAC5B,iBAAiB,SAAS,CAAC,MAAM,EACjC,gBAAgB,eAAe,EAC/B,eAAe,MAAM,KACpB,cAsCF,CAAA;AAED,eAAO,MAAM,yBAAyB,GACpC,iBAAiB,SAAS,CAAC,MAAM,EACjC,eAAe,eAAe,EAC9B,eAAe,MAAM,KACpB,cAsFF,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type Typesense from 'typesense';
2
- import { type TypesenseConfig } from '../index.js';
2
+ import { type TypesenseConfig } from '../types.js';
3
3
  export declare const createSearchEndpoints: (typesenseClient: Typesense.Client, pluginOptions: TypesenseConfig, lastSyncTime?: number) => ({
4
4
  handler: import("payload").PayloadHandler;
5
5
  method: "get";
package/dist/index.d.ts CHANGED
@@ -1,30 +1,6 @@
1
- import type { Config } from 'payload';
1
+ import { type Config } from 'payload';
2
+ import { type TypesenseConfig } from './types.js';
2
3
  export * from './components/index.js';
3
- export type TypesenseConfig = {
4
- collections?: Partial<Record<string, {
5
- displayName?: string;
6
- enabled: boolean;
7
- facetFields?: string[];
8
- icon?: string;
9
- searchFields?: string[];
10
- sortFields?: string[];
11
- }>>;
12
- disabled?: boolean;
13
- settings?: {
14
- autoSync?: boolean;
15
- batchSize?: number;
16
- categorized?: boolean;
17
- searchEndpoint?: string;
18
- };
19
- typesense: {
20
- apiKey: string;
21
- connectionTimeoutSeconds?: number;
22
- nodes: Array<{
23
- host: string;
24
- port: number | string;
25
- protocol: 'http' | 'https';
26
- }>;
27
- };
28
- };
4
+ export type { TypesenseConfig } from './types.js';
29
5
  export declare const typesenseSearch: (pluginOptions: TypesenseConfig) => (config: Config) => Config;
30
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAOrC,cAAc,uBAAuB,CAAA;AAErC,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,OAAO,CACnB,MAAM,CACJ,MAAM,EACN;QACE,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,EAAE,OAAO,CAAA;QAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;QACtB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;QACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KACtB,CACF,CACF,CAAA;IAED,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,cAAc,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;IAED,SAAS,EAAE;QACT,MAAM,EAAE,MAAM,CAAA;QACd,wBAAwB,CAAC,EAAE,MAAM,CAAA;QACjC,KAAK,EAAE,KAAK,CAAC;YACX,IAAI,EAAE,MAAM,CAAA;YACZ,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;YACrB,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;SAC3B,CAAC,CAAA;KACH,CAAA;CACF,CAAA;AAED,eAAO,MAAM,eAAe,GACzB,eAAe,eAAe,MAC9B,QAAQ,MAAM,KAAG,MAyDjB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAA;AAMrC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,cAAc,uBAAuB,CAAA;AACrC,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,eAAO,MAAM,eAAe,GACzB,eAAe,eAAe,MAC9B,QAAQ,MAAM,KAAG,MAiDjB,CAAA"}
package/dist/index.js CHANGED
@@ -1,49 +1,47 @@
1
1
  import { createSearchEndpoints } from './endpoints/search.js';
2
2
  import { createClient } from './lib/client.js';
3
3
  import { deleteDocumentFromTypesense, syncDocumentToTypesense } from './lib/hooks.js';
4
- import { initializeTypesenseCollections } from './lib/initialization.js';
4
+ import { initializeTypesense } from './lib/initialization.js';
5
5
  export * from './components/index.js';
6
6
  export const typesenseSearch = (pluginOptions)=>(config)=>{
7
7
  if (pluginOptions.disabled) {
8
8
  return config;
9
9
  }
10
- const typesenseClient = createClient(pluginOptions.typesense);
10
+ const client = createClient(pluginOptions.typesense);
11
11
  config.endpoints = [
12
12
  ...config.endpoints || [],
13
- ...createSearchEndpoints(typesenseClient, pluginOptions, Date.now())
13
+ ...createSearchEndpoints(client, pluginOptions, Date.now())
14
14
  ];
15
- if (pluginOptions.settings?.autoSync !== false && pluginOptions.collections) {
15
+ const shouldAutoSync = pluginOptions.settings?.autoSync !== false;
16
+ const hasCollections = !!pluginOptions.collections;
17
+ if (shouldAutoSync && hasCollections) {
16
18
  config.collections = (config.collections || []).map((collection)=>{
17
- const collectionConfig = pluginOptions.collections?.[collection.slug];
18
- if (collectionConfig?.enabled) {
19
- return {
20
- ...collection,
21
- hooks: {
22
- ...collection.hooks,
23
- afterChange: [
24
- ...collection.hooks?.afterChange || [],
25
- async ({ doc, operation, req: _req })=>{
26
- await syncDocumentToTypesense(typesenseClient, collection.slug, doc, operation, collectionConfig);
27
- }
28
- ],
29
- afterDelete: [
30
- ...collection.hooks?.afterDelete || [],
31
- async ({ doc, req: _req })=>{
32
- await deleteDocumentFromTypesense(typesenseClient, collection.slug, doc.id);
33
- }
34
- ]
35
- }
36
- };
19
+ const colConfig = pluginOptions.collections?.[collection.slug];
20
+ if (!colConfig?.enabled) {
21
+ return collection;
37
22
  }
38
- return collection;
23
+ return {
24
+ ...collection,
25
+ hooks: {
26
+ ...collection.hooks,
27
+ afterChange: [
28
+ ...collection.hooks?.afterChange || [],
29
+ async ({ doc, operation })=>syncDocumentToTypesense(client, collection.slug, doc, operation, colConfig)
30
+ ],
31
+ afterDelete: [
32
+ ...collection.hooks?.afterDelete || [],
33
+ async ({ doc })=>deleteDocumentFromTypesense(client, collection.slug, doc.id)
34
+ ]
35
+ }
36
+ };
39
37
  });
40
38
  }
41
- const incomingOnInit = config.onInit;
39
+ const existingOnInit = config.onInit;
42
40
  config.onInit = async (payload)=>{
43
- if (incomingOnInit) {
44
- await incomingOnInit(payload);
41
+ if (existingOnInit) {
42
+ await existingOnInit(payload);
45
43
  }
46
- await initializeTypesenseCollections(payload, typesenseClient, pluginOptions);
44
+ await initializeTypesense(payload, client, pluginOptions);
47
45
  };
48
46
  return config;
49
47
  };
@@ -1,4 +1,4 @@
1
1
  import Typesense from 'typesense';
2
- import { type TypesenseConfig } from '../index.js';
2
+ import { type TypesenseConfig } from '../types.js';
3
3
  export declare const createClient: (typesenseConfig: TypesenseConfig["typesense"]) => Typesense.Client;
4
4
  //# sourceMappingURL=client.d.ts.map
@@ -39,10 +39,6 @@ export interface HeadlessSearchInputProps<T = Record<string, unknown>> extends B
39
39
  * Custom render function for loading state
40
40
  */
41
41
  renderLoading?: () => React.ReactNode;
42
- /**
43
- * Show match percentage in search results
44
- */
45
- renderMatchPercentage?: boolean;
46
42
  /**
47
43
  * Custom render function for no results
48
44
  */
@@ -56,7 +52,7 @@ export interface HeadlessSearchInputProps<T = Record<string, unknown>> extends B
56
52
  /**
57
53
  * Custom render function for results header
58
54
  */
59
- renderResultsHeader?: (found: number, searchTime: number) => React.ReactNode;
55
+ renderResultsHeader?: (found: number) => React.ReactNode;
60
56
  /**
61
57
  * Custom CSS class for individual result items
62
58
  */
@@ -77,10 +73,6 @@ export interface HeadlessSearchInputProps<T = Record<string, unknown>> extends B
77
73
  * Show result count
78
74
  */
79
75
  showResultCount?: boolean;
80
- /**
81
- * Show search time
82
- */
83
- showSearchTime?: boolean;
84
76
  /**
85
77
  * Theme configuration
86
78
  */
@@ -1 +1 @@
1
- {"version":3,"file":"headlessSearch.d.ts","sourceRoot":"","sources":["../../src/lib/headlessSearch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1E,MAAM,WAAW,wBAAwB,CACvC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC3B,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC/B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IAChD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QACpB,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;QACrC,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;QAC1D,OAAO,EAAE,MAAM,IAAI,CAAA;QACnB,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAA;QAC3C,WAAW,EAAE,MAAM,CAAA;QACnB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;QAC7C,KAAK,EAAE,MAAM,CAAA;KACd,KAAK,KAAK,CAAC,SAAS,CAAA;IACrB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAA;IACrC;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IACpD;;OAEG;IACH,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE;QAAE,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;KAAE,KACrD,KAAK,CAAC,SAAS,CAAA;IACpB;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IAC5E;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;CAC7B"}
1
+ {"version":3,"file":"headlessSearch.d.ts","sourceRoot":"","sources":["../../src/lib/headlessSearch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1E,MAAM,WAAW,wBAAwB,CACvC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC3B,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC/B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IAChD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QACpB,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;QACrC,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;QAC1D,OAAO,EAAE,MAAM,IAAI,CAAA;QACnB,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAA;QAC3C,WAAW,EAAE,MAAM,CAAA;QACnB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;QAC7C,KAAK,EAAE,MAAM,CAAA;KACd,KAAK,KAAK,CAAC,SAAS,CAAA;IACrB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAA;IACrC;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IACpD;;OAEG;IACH,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE;QAAE,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;KAAE,KACrD,KAAK,CAAC,SAAS,CAAA;IACpB;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IACxD;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;CAC7B"}
@@ -1,6 +1,6 @@
1
1
  import type Typesense from 'typesense';
2
2
  import { type CollectionAfterChangeHook, type CollectionAfterDeleteHook } from 'payload';
3
- import { type TypesenseConfig } from '../index.js';
3
+ import { type TypesenseConfig } from '../types.js';
4
4
  export declare const setupHooks: (typesenseClient: Typesense.Client, pluginOptions: TypesenseConfig, existingHooks?: {
5
5
  afterChange?: Record<string, CollectionAfterChangeHook[]>;
6
6
  afterDelete?: Record<string, CollectionAfterDeleteHook[]>;
@@ -1,5 +1,5 @@
1
1
  import type Typesense from 'typesense';
2
2
  import { type Payload } from 'payload';
3
- import { type TypesenseConfig } from '../index.js';
4
- export declare const initializeTypesenseCollections: (payload: Payload, typesenseClient: Typesense.Client, pluginOptions: TypesenseConfig) => Promise<void>;
3
+ import { type TypesenseConfig } from '../types.js';
4
+ export declare const initializeTypesense: (payload: Payload, typesenseClient: Typesense.Client, pluginOptions: TypesenseConfig) => Promise<void>;
5
5
  //# sourceMappingURL=initialization.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initialization.d.ts","sourceRoot":"","sources":["../../src/lib/initialization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAEtC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAOlD,eAAO,MAAM,8BAA8B,GACzC,SAAS,OAAO,EAChB,iBAAiB,SAAS,CAAC,MAAM,EACjC,eAAe,eAAe,kBAkB/B,CAAA"}
1
+ {"version":3,"file":"initialization.d.ts","sourceRoot":"","sources":["../../src/lib/initialization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAEtC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAuC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAMvF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,OAAO,EAChB,iBAAiB,SAAS,CAAC,MAAM,EACjC,eAAe,eAAe,kBAkB/B,CAAA"}
@@ -2,7 +2,7 @@ import { ensureCollection } from '../utils/ensureCollection.js';
2
2
  import { testConnection } from '../utils/testConnection.js';
3
3
  import { mapCollectionToTypesense, mapToTypesense } from './schema-mapper.js';
4
4
  import { validateConfig } from './validation.js';
5
- export const initializeTypesenseCollections = async (payload, typesenseClient, pluginOptions)=>{
5
+ export const initializeTypesense = async (payload, typesenseClient, pluginOptions)=>{
6
6
  const validation = validateConfig(pluginOptions);
7
7
  if (!validation.success) {
8
8
  throw new Error('Invalid plugin configuration');
@@ -32,45 +32,57 @@ const initializeCollection = async (payload, typesenseClient, collectionSlug, co
32
32
  };
33
33
  const syncExistingDocuments = async (payload, typesenseClient, collectionSlug, config)=>{
34
34
  try {
35
- const { docs } = await payload.find({
36
- collection: collectionSlug,
37
- depth: 0,
38
- limit: 1000
39
- });
40
- if (!docs.length) {
41
- return;
42
- }
43
- const batchSize = 100;
44
- for(let i = 0; i < docs.length; i += batchSize){
45
- const batch = docs.slice(i, i + batchSize);
46
- const mapped = batch.filter((doc)=>{
47
- if (typeof doc !== 'object' || doc === null) {
48
- return false;
49
- }
50
- if (!('id' in doc)) {
51
- return false;
52
- }
53
- const id = doc.id;
54
- return typeof id === 'string';
55
- }).map((doc)=>mapToTypesense(doc, collectionSlug, config));
56
- try {
57
- await typesenseClient.collections(collectionSlug).documents().import(mapped, {
58
- action: 'upsert'
59
- });
60
- } catch (error) {
61
- const err = error;
62
- if (err?.importResults) {
63
- for (const doc of mapped){
64
- try {
65
- await typesenseClient.collections(collectionSlug).documents().upsert(doc);
66
- } catch {
67
- // ignore individual errors
35
+ const limit = config?.syncLimit ?? 1000;
36
+ let page = 1;
37
+ let hasMore = true;
38
+ let totalPages;
39
+ while(hasMore){
40
+ const { docs, hasNextPage, totalPages: pages } = await payload.find({
41
+ collection: collectionSlug,
42
+ depth: 0,
43
+ limit,
44
+ page
45
+ });
46
+ if (pages) {
47
+ totalPages = pages;
48
+ }
49
+ if (!docs.length) {
50
+ break;
51
+ }
52
+ const batchSize = 100;
53
+ for(let i = 0; i < docs.length; i += batchSize){
54
+ const batch = docs.slice(i, i + batchSize);
55
+ const mapped = batch.filter((doc)=>{
56
+ if (typeof doc !== 'object' || doc === null) {
57
+ return false;
58
+ }
59
+ if (!('id' in doc)) {
60
+ return false;
61
+ }
62
+ const id = doc.id;
63
+ return typeof id === 'string';
64
+ }).map((doc)=>mapToTypesense(doc, collectionSlug, config));
65
+ try {
66
+ await typesenseClient.collections(collectionSlug).documents().import(mapped, {
67
+ action: 'upsert'
68
+ });
69
+ } catch (error) {
70
+ const err = error;
71
+ if (err?.importResults) {
72
+ for (const doc of mapped){
73
+ try {
74
+ await typesenseClient.collections(collectionSlug).documents().upsert(doc);
75
+ } catch {
76
+ // ignore individual item errors
77
+ }
68
78
  }
69
79
  }
70
80
  }
71
81
  }
82
+ hasMore = hasNextPage ?? (totalPages ? page < totalPages : false);
83
+ page++;
72
84
  }
73
85
  } catch {
74
- // ignore main sync errors
86
+ // ignore top-level sync errors
75
87
  }
76
88
  };
@@ -1,5 +1,4 @@
1
- import { type TypesenseConfig } from '../index.js';
2
- import { type BaseDocument } from '../types.js';
1
+ import { type BaseDocument, type TypesenseConfig } from '../types.js';
3
2
  export declare const mapCollectionToTypesense: (collectionSlug: string, config: NonNullable<TypesenseConfig["collections"]>[string] | undefined) => {
4
3
  name: string;
5
4
  fields: ({
@@ -1 +1 @@
1
- {"version":3,"file":"schema-mapper.d.ts","sourceRoot":"","sources":["../../src/lib/schema-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/C,eAAO,MAAM,wBAAwB,GACnC,gBAAgB,MAAM,EACtB,QAAQ,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS;;;;;;;;;;;;;;;;;;;CAgCxE,CAAA;AAED,eAAO,MAAM,cAAc,GACzB,KAAK,YAAY,EACjB,iBAAiB,MAAM,EACvB,QAAQ,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,oCA2ExE,CAAA"}
1
+ {"version":3,"file":"schema-mapper.d.ts","sourceRoot":"","sources":["../../src/lib/schema-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAGrE,eAAO,MAAM,wBAAwB,GACnC,gBAAgB,MAAM,EACtB,QAAQ,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS;;;;;;;;;;;;;;;;;;;CAgCxE,CAAA;AAED,eAAO,MAAM,cAAc,GACzB,KAAK,YAAY,EACjB,iBAAiB,MAAM,EACvB,QAAQ,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,oCA2ExE,CAAA"}