@se-studio/search 1.0.41 → 1.0.43

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @se-studio/search
2
2
 
3
+ ## 1.0.43
4
+
5
+ ### Patch Changes
6
+
7
+ - Version bump: patch for changed packages
8
+ - Updated dependencies
9
+ - @se-studio/contentful-rest-api@1.0.138
10
+ - @se-studio/core-data-types@1.0.132
11
+ - @se-studio/markdown-renderer@1.0.96
12
+
13
+ ## 1.0.42
14
+
15
+ ### Patch Changes
16
+
17
+ - Version bump: patch for changed packages
18
+ - Updated dependencies
19
+ - @se-studio/contentful-rest-api@1.0.137
20
+ - @se-studio/core-data-types@1.0.131
21
+ - @se-studio/markdown-renderer@1.0.95
22
+
3
23
  ## 1.0.41
4
24
 
5
25
  ### Patch Changes
@@ -4,5 +4,4 @@ export { calculateMaxBodyLength, extractSearchableChunks, extractShallowText, }
4
4
  export { allChunkIds, baseEntryId, buildSearchDocuments, chunkDocumentId, shouldIndex, } from './document-builder';
5
5
  export { calculateReadingTime, DEFAULT_WORDS_PER_MINUTE, stripMarkdownToPlainText, } from './readability';
6
6
  export { rebuildSearchIndex } from './rebuild';
7
- export { rebuildSearchIndexWordPress } from './rebuild-wordpress';
8
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/indexing/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,mCAAmC,GACpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/indexing/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,mCAAmC,GACpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC"}
@@ -3,5 +3,4 @@ export { calculateMaxBodyLength, extractSearchableChunks, extractShallowText, }
3
3
  export { allChunkIds, baseEntryId, buildSearchDocuments, chunkDocumentId, shouldIndex, } from './document-builder';
4
4
  export { calculateReadingTime, DEFAULT_WORDS_PER_MINUTE, stripMarkdownToPlainText, } from './readability';
5
5
  export { rebuildSearchIndex } from './rebuild';
6
- export { rebuildSearchIndexWordPress } from './rebuild-wordpress';
7
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/indexing/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,6BAA6B,EAC7B,mCAAmC,GACpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/indexing/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,6BAA6B,EAC7B,mCAAmC,GACpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/search",
3
- "version": "1.0.41",
3
+ "version": "1.0.43",
4
4
  "description": "AI-powered site search with Upstash Search for Next.js marketing sites",
5
5
  "repository": {
6
6
  "type": "git",
@@ -43,10 +43,9 @@
43
43
  ],
44
44
  "dependencies": {
45
45
  "@upstash/search": "^0.1.7",
46
- "@se-studio/contentful-rest-api": "1.0.136",
47
- "@se-studio/core-data-types": "1.0.130",
48
- "@se-studio/markdown-renderer": "1.0.94",
49
- "@se-studio/wordpress-rest-api": "1.0.11"
46
+ "@se-studio/contentful-rest-api": "1.0.138",
47
+ "@se-studio/core-data-types": "1.0.132",
48
+ "@se-studio/markdown-renderer": "1.0.96"
50
49
  },
51
50
  "peerDependencies": {
52
51
  "next": ">=15.5.0",
@@ -1,19 +0,0 @@
1
- import type { MarkdownConverterContext } from '@se-studio/markdown-renderer/converter';
2
- import type { CmsFetchOptionsLike, WordPressConfig, WordPressConverterContext } from '@se-studio/wordpress-rest-api';
3
- import type { SearchClient } from '../client/search-client';
4
- import type { RebuildResult, SearchIndexingConfig } from '../types';
5
- /**
6
- * Full search index rebuild using WordPress REST APIs and {@link WordPressMarkdownExporter}.
7
- * Apps must supply a {@link MarkdownConverterContext} whose `config` can be a placeholder
8
- * when conversion only touches WordPress-shaped models (HTML components).
9
- */
10
- export declare function rebuildSearchIndexWordPress(config: {
11
- client: SearchClient;
12
- indexName: string;
13
- indexingConfig: SearchIndexingConfig;
14
- converterContext: WordPressConverterContext;
15
- wordpressConfig: WordPressConfig;
16
- fetchOptions: CmsFetchOptionsLike;
17
- markdownConverterContext: MarkdownConverterContext;
18
- }): Promise<RebuildResult>;
19
- //# sourceMappingURL=rebuild-wordpress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rebuild-wordpress.d.ts","sourceRoot":"","sources":["../../src/indexing/rebuild-wordpress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AAQvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAEV,aAAa,EAEb,oBAAoB,EACrB,MAAM,UAAU,CAAC;AAmJlB;;;;GAIG;AACH,wBAAsB,2BAA2B,CAAC,MAAM,EAAE;IACxD,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,oBAAoB,CAAC;IACrC,gBAAgB,EAAE,yBAAyB,CAAC;IAC5C,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE,mBAAmB,CAAC;IAClC,wBAAwB,EAAE,wBAAwB,CAAC;CACpD,GAAG,OAAO,CAAC,aAAa,CAAC,CAoDzB"}
@@ -1,134 +0,0 @@
1
- import { WordPressMarkdownExporter } from '@se-studio/markdown-renderer';
2
- import { wordpressAllCategoryLinks, wordpressAllPageLinks, wordpressAllPersonLinks, wordpressAllPostLinks, } from '@se-studio/wordpress-rest-api';
3
- import { debugLog } from '../debug';
4
- import { buildSearchDocuments, shouldIndex } from './document-builder';
5
- function getEnabledConfig(indexingConfig, type) {
6
- return indexingConfig.contentTypes.find((ct) => ct.type === type && ct.enabled);
7
- }
8
- function resolveIncludeComponents(ctConfig, indexingConfig) {
9
- return ctConfig.includeComponents ?? indexingConfig.indexComponents ?? true;
10
- }
11
- async function fetchLinks(type, ctx) {
12
- const { converterContext, fetchOptions } = ctx;
13
- switch (type) {
14
- case 'page': {
15
- const res = await wordpressAllPageLinks(converterContext.config, converterContext, fetchOptions);
16
- return res.data;
17
- }
18
- case 'article': {
19
- const res = await wordpressAllPostLinks(converterContext.config, converterContext, fetchOptions);
20
- return res.data;
21
- }
22
- case 'articleType': {
23
- const res = await wordpressAllCategoryLinks(converterContext.config, converterContext, fetchOptions);
24
- return res.data;
25
- }
26
- case 'person': {
27
- const res = await wordpressAllPersonLinks(converterContext.config, converterContext, fetchOptions);
28
- return res.data;
29
- }
30
- default:
31
- return [];
32
- }
33
- }
34
- async function indexContentType(type, ctx, result) {
35
- const ctConfig = getEnabledConfig(ctx.indexingConfig, type);
36
- if (!ctConfig)
37
- return [];
38
- const respectIndexed = ctx.indexingConfig.respectIndexedFlag ?? true;
39
- const respectHidden = ctx.indexingConfig.respectHiddenFlag ?? true;
40
- const includeComponents = resolveIncludeComponents(ctConfig, ctx.indexingConfig);
41
- const links = await fetchLinks(type, ctx);
42
- debugLog('rebuild', `wordpress ${type}: fetched ${links.length} links`);
43
- const exporter = new WordPressMarkdownExporter(ctx.wordpressConfig, ctx.converterContext, ctx.fetchOptions);
44
- const documents = [];
45
- for (const link of links) {
46
- if (!shouldIndex(link, respectIndexed, respectHidden)) {
47
- debugLog('rebuild', `${type}/${link.slug}: skipped (indexed/hidden)`);
48
- result.skipped++;
49
- continue;
50
- }
51
- try {
52
- const articleType = type === 'article' && 'articleType' in link
53
- ? (link.articleType?.slug ?? 'blog')
54
- : undefined;
55
- debugLog('rebuild', `${type}/${link.slug}: fetching content...`);
56
- const contentData = await exporter.fetchContent(type, link.slug, {
57
- articleType,
58
- });
59
- if (!contentData) {
60
- debugLog('rebuild', `${type}/${link.slug}: no content data returned, skipping`);
61
- result.skipped++;
62
- continue;
63
- }
64
- const docs = buildSearchDocuments(contentData, ctConfig.type, ctx.converterCtx, includeComponents);
65
- const { documentTransformer } = ctx.indexingConfig;
66
- const transformedDocs = documentTransformer
67
- ? docs
68
- .map((doc) => documentTransformer(doc, contentData))
69
- .filter((doc) => doc !== null)
70
- : docs;
71
- debugLog('rebuild', `${type}/${link.slug}: built ${transformedDocs.length} chunk(s)`);
72
- documents.push(...transformedDocs);
73
- }
74
- catch (err) {
75
- const message = err instanceof Error ? err.message : String(err);
76
- debugLog('rebuild', `${type}/${link.slug}: ERROR - ${message}`);
77
- result.errors.push(`${type}/${link.slug}: ${message}`);
78
- }
79
- }
80
- debugLog('rebuild', `${type}: ${documents.length} documents built`);
81
- return documents;
82
- }
83
- /**
84
- * Full search index rebuild using WordPress REST APIs and {@link WordPressMarkdownExporter}.
85
- * Apps must supply a {@link MarkdownConverterContext} whose `config` can be a placeholder
86
- * when conversion only touches WordPress-shaped models (HTML components).
87
- */
88
- export async function rebuildSearchIndexWordPress(config) {
89
- debugLog('rebuild', 'Starting WordPress full rebuild', {
90
- indexName: config.indexName,
91
- enabledTypes: config.indexingConfig.contentTypes
92
- .filter((ct) => ct.enabled)
93
- .map((ct) => ct.type),
94
- });
95
- const result = { indexed: 0, skipped: 0, errors: [] };
96
- const indexingContentContext = {
97
- pageContext: {},
98
- current: { type: 'Component', id: '' },
99
- };
100
- const converterCtx = {
101
- ...config.markdownConverterContext,
102
- contentContext: indexingContentContext,
103
- };
104
- const ctx = {
105
- client: config.client,
106
- indexName: config.indexName,
107
- converterContext: config.converterContext,
108
- wordpressConfig: config.wordpressConfig,
109
- fetchOptions: config.fetchOptions,
110
- converterCtx,
111
- indexingConfig: config.indexingConfig,
112
- };
113
- const contentTypes = ['page', 'article', 'articleType', 'person'];
114
- const allDocuments = [];
115
- for (const type of contentTypes) {
116
- debugLog('rebuild', `Processing WordPress content type: ${type}`);
117
- const docs = await indexContentType(type, ctx, result);
118
- allDocuments.push(...docs);
119
- }
120
- debugLog('rebuild', `Total WordPress documents to upsert: ${allDocuments.length}`);
121
- try {
122
- await config.client.upsert(config.indexName, allDocuments);
123
- result.indexed = allDocuments.length;
124
- debugLog('rebuild', `Upserted ${allDocuments.length} docs to "${config.indexName}"`);
125
- }
126
- catch (err) {
127
- const message = err instanceof Error ? err.message : String(err);
128
- debugLog('rebuild', `Upsert FAILED: ${message}`);
129
- result.errors.push(`Upsert: ${message}`);
130
- }
131
- debugLog('rebuild', 'WordPress rebuild complete', result);
132
- return result;
133
- }
134
- //# sourceMappingURL=rebuild-wordpress.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rebuild-wordpress.js","sourceRoot":"","sources":["../../src/indexing/rebuild-wordpress.ts"],"names":[],"mappings":"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"}