@nebutra/search 0.1.2 → 3.0.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.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- > **Status: Foundation** — Type definitions, factory pattern, and provider stubs are complete. Provider implementations require external service credentials to activate. See inline TODOs for integration points.
1
+ > **Status: Foundation** — Type definitions, factory pattern, and the pgvector provider are complete. See inline TODOs for integration points.
2
2
 
3
3
  # @nebutra/search
4
4
 
5
- Provider-agnostic full-text search package for Nebutra-Sailor. Supports **Meilisearch**, **Typesense**, and **Algolia** backends with the same API.
5
+ Single-provider full-text + vector search package for Nebutra-Sailor: **pgvector** (Postgres + the `pgvector` extension) — BM25 keyword search and vector cosine search over your own Postgres, with no external search infra to operate.
6
6
 
7
7
  ## Quick Start
8
8
 
@@ -17,7 +17,7 @@ pnpm add @nebutra/search
17
17
  ```typescript
18
18
  import { getSearch } from "@nebutra/search";
19
19
 
20
- // Auto-detects provider from environment
20
+ // Auto-detects the pgvector provider from DATABASE_URL
21
21
  const search = await getSearch();
22
22
 
23
23
  // Index a document
@@ -41,65 +41,23 @@ const results = await search.search("products", {
41
41
  await search.deleteDocument("products", "prod_123", "org_456");
42
42
  ```
43
43
 
44
- ## Provider Auto-Detection
44
+ ## Provider Configuration
45
45
 
46
- The factory auto-detects the correct provider based on environment variables:
47
-
48
- | Priority | Env Variable | Provider |
49
- |----------|---|---|
50
- | 1 | `SEARCH_PROVIDER` | As specified |
51
- | 2 | `MEILISEARCH_URL` | meilisearch |
52
- | 3 | `TYPESENSE_URL` | typesense |
53
- | 4 | `ALGOLIA_APP_ID` | algolia |
54
- | 5 | — | meilisearch (default) |
55
-
56
- ### Meilisearch Setup
46
+ `pgvector` is the only supported provider. It reads `DATABASE_URL` by default, or accepts an explicit config:
57
47
 
58
48
  ```bash
59
49
  # .env
60
- MEILISEARCH_URL=http://localhost:7700
61
- MEILISEARCH_API_KEY=your-api-key
50
+ DATABASE_URL=postgres://localhost/nebutra
62
51
  ```
63
52
 
64
53
  ```typescript
65
- const search = await createSearch({
66
- provider: "meilisearch",
67
- url: "http://localhost:7700",
68
- apiKey: process.env.MEILISEARCH_API_KEY,
69
- });
70
- ```
71
-
72
- ### Typesense Setup
54
+ import { createSearch } from "@nebutra/search";
73
55
 
74
- ```bash
75
- # .env
76
- TYPESENSE_URL=http://localhost:8108
77
- TYPESENSE_API_KEY=your-api-key
78
- ```
79
-
80
- ```typescript
81
56
  const search = await createSearch({
82
- provider: "typesense",
83
- url: "http://localhost:8108",
84
- apiKey: process.env.TYPESENSE_API_KEY,
85
- });
86
- ```
87
-
88
- ### Algolia Setup
89
-
90
- ```bash
91
- # .env
92
- ALGOLIA_APP_ID=your-app-id
93
- ALGOLIA_SEARCH_KEY=your-search-key
94
- ALGOLIA_ADMIN_KEY=your-admin-key
95
- ```
96
-
97
- ```typescript
98
- const search = await createSearch({
99
- provider: "algolia",
100
- appId: process.env.ALGOLIA_APP_ID,
101
- searchKey: process.env.ALGOLIA_SEARCH_KEY,
102
- adminKey: process.env.ALGOLIA_ADMIN_KEY,
57
+ provider: "pgvector",
58
+ connectionString: process.env.DATABASE_URL,
59
+ embeddingDim: 1536, // defaults to 1536 (OpenAI text-embedding-3-small)
60
+ tablePrefix: "nebutra_search", // defaults to "nebutra_search"
103
61
  });
104
62
  ```
105
63
 
@@ -198,7 +156,7 @@ await search.createIndex("products", {
198
156
 
199
157
  ### `updateSettings(index, settings)`
200
158
 
201
- Update index settings (not supported by all providers after creation).
159
+ Update index settings.
202
160
 
203
161
  ```typescript
204
162
  await search.updateSettings("products", {
@@ -216,7 +174,7 @@ await search.close();
216
174
 
217
175
  ## Multi-Tenancy
218
176
 
219
- All providers support tenant isolation via `tenantId`:
177
+ The pgvector provider supports tenant isolation via `tenantId`:
220
178
 
221
179
  ```typescript
222
180
  // Index with tenant
@@ -238,21 +196,17 @@ await search.deleteByFilter("products", {
238
196
  });
239
197
  ```
240
198
 
241
- **Under the hood:**
242
- - **Meilisearch** / **Typesense**: Separate indices per tenant (e.g., `products__org_456`)
243
- - **Algolia**: Facet-based filtering within shared indices
199
+ **Under the hood:** `pgvector` filters by a `tenant_id` column on the shared table for each index (table named `<prefix>_<index>`).
244
200
 
245
- ## Direct Provider Imports
201
+ ## Direct Provider Import
246
202
 
247
203
  For advanced use or testing:
248
204
 
249
205
  ```typescript
250
- import { MeilisearchProvider } from "@nebutra/search/meilisearch";
251
- import { TypesenseProvider } from "@nebutra/search/typesense";
252
- import { AlgoliaProvider } from "@nebutra/search/algolia";
206
+ import { PgvectorProvider } from "@nebutra/search/pgvector";
253
207
 
254
208
  // Use directly
255
- const search = new MeilisearchProvider();
209
+ const search = new PgvectorProvider({ provider: "pgvector" });
256
210
  ```
257
211
 
258
212
  ## Type Safety
@@ -275,21 +229,11 @@ Uses `@nebutra/logger` for structured logging. All operations log at debug level
275
229
  ## Environment Variables
276
230
 
277
231
  ```bash
278
- # Provider selection (optional)
279
- SEARCH_PROVIDER=meilisearch
280
-
281
- # Meilisearch
282
- MEILISEARCH_URL=http://localhost:7700
283
- MEILISEARCH_API_KEY=xyz
284
-
285
- # Typesense
286
- TYPESENSE_URL=http://localhost:8108
287
- TYPESENSE_API_KEY=xyz
232
+ # Provider selection (optional — pgvector is the only supported provider)
233
+ SEARCH_PROVIDER=pgvector
288
234
 
289
- # Algolia
290
- ALGOLIA_APP_ID=xyz
291
- ALGOLIA_SEARCH_KEY=xyz
292
- ALGOLIA_ADMIN_KEY=xyz
235
+ # pgvector
236
+ DATABASE_URL=postgres://localhost/nebutra
293
237
  ```
294
238
 
295
239
  ## Testing
package/dist/factory.d.ts CHANGED
@@ -7,18 +7,10 @@ import type { SearchConfig, SearchProvider } from "./types";
7
7
  * // Auto-detect from environment
8
8
  * const search = await createSearch();
9
9
  *
10
- * // Explicit Meilisearch
10
+ * // Explicit pgvector
11
11
  * const search = await createSearch({
12
- * provider: "meilisearch",
13
- * url: "http://localhost:7700",
14
- * });
15
- *
16
- * // Explicit Algolia
17
- * const search = await createSearch({
18
- * provider: "algolia",
19
- * appId: "YOUR_APP_ID",
20
- * searchKey: "YOUR_SEARCH_KEY",
21
- * adminKey: "YOUR_ADMIN_KEY",
12
+ * provider: "pgvector",
13
+ * connectionString: "postgres://localhost/nebutra",
22
14
  * });
23
15
  * ```
24
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAsB,MAAM,SAAS,CAAC;AA4BhF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAmEjF;AAED;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,CAKzD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAKjD"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAsB,MAAM,SAAS,CAAC;AAsBhF;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CA6BjF;AAED;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,CAKzD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAKjD"}
package/dist/factory.js CHANGED
@@ -14,17 +14,7 @@ let defaultProvider = null;
14
14
  * Detect which provider to use based on available environment variables.
15
15
  */
16
16
  function detectProvider() {
17
- if (process.env.MEILISEARCH_URL)
18
- return "meilisearch";
19
- if (process.env.TYPESENSE_URL)
20
- return "typesense";
21
- if (process.env.ALGOLIA_APP_ID)
22
- return "algolia";
23
- // Only fall back to pgvector when DATABASE_URL is set — otherwise default to
24
- // meilisearch (developer-friendly local default).
25
- if (process.env.SEARCH_PROVIDER === "pgvector" && process.env.DATABASE_URL)
26
- return "pgvector";
27
- return "meilisearch";
17
+ return "pgvector";
28
18
  }
29
19
  /**
30
20
  * Create a search provider instance.
@@ -34,18 +24,10 @@ function detectProvider() {
34
24
  * // Auto-detect from environment
35
25
  * const search = await createSearch();
36
26
  *
37
- * // Explicit Meilisearch
27
+ * // Explicit pgvector
38
28
  * const search = await createSearch({
39
- * provider: "meilisearch",
40
- * url: "http://localhost:7700",
41
- * });
42
- *
43
- * // Explicit Algolia
44
- * const search = await createSearch({
45
- * provider: "algolia",
46
- * appId: "YOUR_APP_ID",
47
- * searchKey: "YOUR_SEARCH_KEY",
48
- * adminKey: "YOUR_ADMIN_KEY",
29
+ * provider: "pgvector",
30
+ * connectionString: "postgres://localhost/nebutra",
49
31
  * });
50
32
  * ```
51
33
  */
@@ -55,42 +37,6 @@ export async function createSearch(config) {
55
37
  detectProvider();
56
38
  logger.info("[search] Creating provider", { provider: providerType });
57
39
  switch (providerType) {
58
- case "meilisearch": {
59
- const { MeilisearchProvider } = await import("./providers/meilisearch");
60
- const meilisearchConfig = config;
61
- const configObj = { provider: "meilisearch" };
62
- if (meilisearchConfig?.url !== undefined)
63
- configObj.url = meilisearchConfig.url;
64
- if (meilisearchConfig?.apiKey !== undefined)
65
- configObj.apiKey = meilisearchConfig.apiKey;
66
- if (meilisearchConfig?.timeout !== undefined)
67
- configObj.timeout = meilisearchConfig.timeout;
68
- return new MeilisearchProvider(configObj);
69
- }
70
- case "typesense": {
71
- const { TypesenseProvider } = await import("./providers/typesense");
72
- const typesenseConfig = config;
73
- const configObj = { provider: "typesense" };
74
- if (typesenseConfig?.url !== undefined)
75
- configObj.url = typesenseConfig.url;
76
- if (typesenseConfig?.apiKey !== undefined)
77
- configObj.apiKey = typesenseConfig.apiKey;
78
- if (typesenseConfig?.timeout !== undefined)
79
- configObj.timeout = typesenseConfig.timeout;
80
- return new TypesenseProvider(configObj);
81
- }
82
- case "algolia": {
83
- const { AlgoliaProvider } = await import("./providers/algolia");
84
- const algoliaConfig = config;
85
- const configObj = { provider: "algolia" };
86
- if (algoliaConfig?.appId !== undefined)
87
- configObj.appId = algoliaConfig.appId;
88
- if (algoliaConfig?.searchKey !== undefined)
89
- configObj.searchKey = algoliaConfig.searchKey;
90
- if (algoliaConfig?.adminKey !== undefined)
91
- configObj.adminKey = algoliaConfig.adminKey;
92
- return new AlgoliaProvider(configObj);
93
- }
94
40
  case "pgvector": {
95
41
  const { PgvectorProvider } = await import("./providers/pgvector");
96
42
  const pgvectorConfig = config;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  export { closeSearch, createSearch, getSearch, setSearch } from "./factory";
2
- export { AlgoliaProvider } from "./providers/algolia";
3
- export { MeilisearchProvider } from "./providers/meilisearch";
4
- export { TypesenseProvider } from "./providers/typesense";
5
- export type { AlgoliaConfig, IndexSettings, MeilisearchConfig, SearchConfig, SearchDocument, SearchHit, SearchProvider, SearchProviderType, SearchQuery, SearchResult, TypesenseConfig, } from "./types";
2
+ export { PgvectorProvider } from "./providers/pgvector";
3
+ export type { IndexSettings, PgvectorConfig, SearchConfig, SearchDocument, SearchHit, SearchProvider, SearchProviderType, SearchQuery, SearchResult, } from "./types";
6
4
  export { SearchDocumentSchema, SearchQuerySchema } from "./types";
7
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG5E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,YAAY,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,YAAY,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,cAAc,EACd,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -2,9 +2,7 @@
2
2
  // @nebutra/search — Provider-agnostic full-text search
3
3
  // =============================================================================
4
4
  // Supports:
5
- // - Meilisearch (self-hosted, developer-friendly)
6
- // - Typesense (self-hosted, geo + instant faceting)
7
- // - Algolia (managed SaaS, zero-ops)
5
+ // - pgvector (Postgres + pgvector extension; BM25 + vector search)
8
6
  //
9
7
  // Usage:
10
8
  // import { getSearch } from "@nebutra/search";
@@ -16,7 +14,5 @@
16
14
  // ── Factory ─────────────────────────────────────────────────────────────────
17
15
  export { closeSearch, createSearch, getSearch, setSearch } from "./factory";
18
16
  // ── Providers (tree-shakable direct imports) ────────────────────────────────
19
- export { AlgoliaProvider } from "./providers/algolia";
20
- export { MeilisearchProvider } from "./providers/meilisearch";
21
- export { TypesenseProvider } from "./providers/typesense";
17
+ export { PgvectorProvider } from "./providers/pgvector";
22
18
  export { SearchDocumentSchema, SearchQuerySchema } from "./types";
package/dist/types.d.ts CHANGED
@@ -2,15 +2,11 @@ import { z } from "zod";
2
2
  /**
3
3
  * Supported search backend providers.
4
4
  *
5
- * - `meilisearch` — Self-hosted, developer-friendly, typo-tolerant
6
- * - `typesense` — Self-hosted, optimised for geo search and faceting
7
- * - `algolia` — Managed SaaS, zero-ops, global CDN
8
5
  * - `pgvector` — Postgres + pgvector extension; BM25 keyword + vector
9
- * cosine search. Choose this when AI/RAG over your own
10
- * Postgres is the primary use case (no external search
11
- * infra to operate).
6
+ * cosine search. AI/RAG over your own Postgres, no
7
+ * external search infra to operate.
12
8
  */
13
- export type SearchProviderType = "meilisearch" | "typesense" | "algolia" | "pgvector";
9
+ export type SearchProviderType = "pgvector";
14
10
  /**
15
11
  * A document that can be indexed by the search provider.
16
12
  * All documents must have an id; tenantId is optional for multi-tenancy.
@@ -117,33 +113,6 @@ export interface IndexSettings {
117
113
  /** Synonyms for the index (e.g., { "dashboard": ["overview", "analytics"] }) */
118
114
  synonyms?: Record<string, string[]>;
119
115
  }
120
- export interface MeilisearchConfig {
121
- provider: "meilisearch";
122
- /** Meilisearch server URL (defaults to `process.env.MEILISEARCH_URL`) */
123
- url?: string;
124
- /** API key with at least search + indexing permissions (defaults to `process.env.MEILISEARCH_API_KEY`) */
125
- apiKey?: string;
126
- /** Default timeout for requests (in milliseconds, default: 30000) */
127
- timeout?: number;
128
- }
129
- export interface TypesenseConfig {
130
- provider: "typesense";
131
- /** Typesense server URL (defaults to `process.env.TYPESENSE_URL`) */
132
- url?: string;
133
- /** API key for authentication (defaults to `process.env.TYPESENSE_API_KEY`) */
134
- apiKey?: string;
135
- /** Default timeout for requests (in milliseconds, default: 30000) */
136
- timeout?: number;
137
- }
138
- export interface AlgoliaConfig {
139
- provider: "algolia";
140
- /** Algolia app ID (defaults to `process.env.ALGOLIA_APP_ID`) */
141
- appId?: string;
142
- /** Algolia search API key (defaults to `process.env.ALGOLIA_SEARCH_KEY`) */
143
- searchKey?: string;
144
- /** Algolia admin API key for indexing (defaults to `process.env.ALGOLIA_ADMIN_KEY`) */
145
- adminKey?: string;
146
- }
147
116
  export interface PgvectorConfig {
148
117
  provider: "pgvector";
149
118
  /** Postgres connection string (defaults to `process.env.DATABASE_URL`) */
@@ -159,5 +128,5 @@ export interface PgvectorConfig {
159
128
  */
160
129
  tablePrefix?: string;
161
130
  }
162
- export type SearchConfig = MeilisearchConfig | TypesenseConfig | AlgoliaConfig | PgvectorConfig;
131
+ export type SearchConfig = PgvectorConfig;
163
132
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;AAItF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;iBAUjB,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBA8B5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAI5D,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IAClE,2BAA2B;IAC3B,GAAG,EAAE,CAAC,CAAC;IAEP,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IAEd,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IACrE,+CAA+C;IAC/C,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAErB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAElB,mDAAmD;IACnD,gBAAgB,EAAE,MAAM,CAAC;IAEzB,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3D,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IAEb,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IAEpB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;CACpB;AAID;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAElC;;;OAGG;IACH,aAAa,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;OAGG;IACH,cAAc,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElF;;OAEG;IACH,MAAM,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC9C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5B;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/E;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjG;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC,oCAAoC;IACpC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACrC;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,CAAC;IAExB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,CAAC;IAEtB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,CAAC;IAEpB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,UAAU,CAAC;IAErB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG,eAAe,GAAG,aAAa,GAAG,cAAc,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,15 @@
1
1
  {
2
2
  "name": "@nebutra/search",
3
- "version": "0.1.2",
3
+ "version": "3.0.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "nebutra": {
8
+ "graph": "core",
8
9
  "status": "foundation",
9
10
  "productionReady": false,
10
11
  "requires": [
11
- "MEILISEARCH_URL + MEILISEARCH_MASTER_KEY",
12
- "or TYPESENSE_HOST + TYPESENSE_API_KEY",
13
- "or ALGOLIA_APP_ID + ALGOLIA_ADMIN_API_KEY",
14
- "or DATABASE_URL (Postgres + pgvector extension)"
12
+ "DATABASE_URL (Postgres + pgvector extension)"
15
13
  ],
16
14
  "gaps": [
17
15
  "Provider adapters are stubs — need bulk index + faceted search",
@@ -25,18 +23,6 @@
25
23
  "types": "./dist/index.d.ts",
26
24
  "import": "./dist/index.js"
27
25
  },
28
- "./meilisearch": {
29
- "types": "./dist/providers/meilisearch.d.ts",
30
- "import": "./dist/providers/meilisearch.js"
31
- },
32
- "./typesense": {
33
- "types": "./dist/providers/typesense.d.ts",
34
- "import": "./dist/providers/typesense.js"
35
- },
36
- "./algolia": {
37
- "types": "./dist/providers/algolia.d.ts",
38
- "import": "./dist/providers/algolia.js"
39
- },
40
26
  "./pgvector": {
41
27
  "types": "./dist/providers/pgvector.d.ts",
42
28
  "import": "./dist/providers/pgvector.js"
@@ -47,12 +33,9 @@
47
33
  "README.md"
48
34
  ],
49
35
  "dependencies": {
50
- "meilisearch": "^0.44.1",
51
- "typesense": "^2.0.0",
52
- "algoliasearch": "^5.20.0",
53
36
  "pg": "^8.13.1",
54
37
  "zod": "^4.3.6",
55
- "@nebutra/logger": "0.1.2"
38
+ "@nebutra/logger": "3.0.0"
56
39
  },
57
40
  "devDependencies": {
58
41
  "@types/pg": "^8.11.10",
@@ -1,20 +0,0 @@
1
- import type { AlgoliaConfig, IndexSettings, SearchDocument, SearchProvider, SearchQuery, SearchResult } from "../types";
2
- export declare class AlgoliaProvider implements SearchProvider {
3
- readonly name = "algolia";
4
- private searchClient;
5
- private adminClient;
6
- constructor(config?: AlgoliaConfig);
7
- indexDocument<T extends SearchDocument>(index: string, doc: T): Promise<void>;
8
- indexDocuments<T extends SearchDocument>(index: string, docs: T[]): Promise<void>;
9
- search<T extends SearchDocument = SearchDocument>(index: string, query: SearchQuery): Promise<SearchResult<T>>;
10
- deleteDocument(index: string, docId: string, tenantId?: string): Promise<void>;
11
- deleteByFilter(index: string, filters: Record<string, string | number | boolean>): Promise<void>;
12
- createIndex(index: string, settings: IndexSettings): Promise<void>;
13
- updateSettings(index: string, settings: IndexSettings): Promise<void>;
14
- close(): Promise<void>;
15
- private _getIndexName;
16
- private _prepareRecord;
17
- private _unprepareRecord;
18
- private _applySettings;
19
- }
20
- //# sourceMappingURL=algolia.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"algolia.d.ts","sourceRoot":"","sources":["../../src/providers/algolia.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACb,MAAM,UAAU,CAAC;AAMlB,qBAAa,eAAgB,YAAW,cAAc;IACpD,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,WAAW,CAAM;gBAEb,MAAM,CAAC,EAAE,aAAa;IAuB5B,aAAa,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7E,cAAc,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCjF,MAAM,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EACpD,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAyFrB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9E,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACjD,OAAO,CAAC,IAAI,CAAC;IA0CV,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBlE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAerE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,gBAAgB;YAQV,cAAc;CA2B7B"}