@prisma-next/extension-paradedb 0.5.0-dev.65 → 0.5.0-dev.67

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.
@@ -1 +1 @@
1
- {"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/descriptor-meta.ts"],"sourcesContent":[],"mappings":";cAEa;EAAA,SAAA,IAAA,EAAA,WAWH"}
1
+ {"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/descriptor-meta.ts"],"mappings":";cAEa,gBAAA;EAAA"}
package/dist/control.mjs CHANGED
@@ -1,3 +1,2 @@
1
- import { t as paradedbPackMeta } from "./descriptor-meta-BTFnIGJ6.mjs";
2
-
3
- export { paradedbPackMeta };
1
+ import { t as paradedbPackMeta } from "./descriptor-meta-B6-NIHhB.mjs";
2
+ export { paradedbPackMeta };
@@ -1,20 +1,14 @@
1
- //#region src/core/constants.ts
2
- /**
3
- * Extension ID for ParadeDB pg_search.
4
- */
5
- const PARADEDB_EXTENSION_ID = "paradedb";
6
-
7
1
  //#endregion
8
2
  //#region src/core/descriptor-meta.ts
9
3
  const paradedbPackMeta = {
10
4
  kind: "extension",
11
- id: PARADEDB_EXTENSION_ID,
5
+ id: "paradedb",
12
6
  familyId: "sql",
13
7
  targetId: "postgres",
14
8
  version: "0.0.1",
15
9
  capabilities: { postgres: { "paradedb/bm25": true } }
16
10
  };
17
-
18
11
  //#endregion
19
12
  export { paradedbPackMeta as t };
20
- //# sourceMappingURL=descriptor-meta-BTFnIGJ6.mjs.map
13
+
14
+ //# sourceMappingURL=descriptor-meta-B6-NIHhB.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor-meta-BTFnIGJ6.mjs","names":[],"sources":["../src/core/constants.ts","../src/core/descriptor-meta.ts"],"sourcesContent":["/**\n * Extension ID for ParadeDB pg_search.\n */\nexport const PARADEDB_EXTENSION_ID = 'paradedb' as const;\n\n/**\n * Built-in ParadeDB tokenizer IDs.\n * These correspond to the `pdb.*` casting syntax in `CREATE INDEX ... USING bm25`.\n */\nexport type TokenizerId =\n | 'unicode_words'\n | 'simple'\n | 'ngram'\n | 'icu'\n | 'regex_pattern'\n | 'source_code'\n | 'literal'\n | 'literal_normalized'\n | 'whitespace'\n | 'chinese_compatible'\n | 'jieba'\n | 'lindera';\n","import { PARADEDB_EXTENSION_ID } from './constants';\n\nexport const paradedbPackMeta = {\n kind: 'extension',\n id: PARADEDB_EXTENSION_ID,\n familyId: 'sql',\n targetId: 'postgres',\n version: '0.0.1',\n capabilities: {\n postgres: {\n 'paradedb/bm25': true,\n },\n },\n} as const;\n"],"mappings":";;;;AAGA,MAAa,wBAAwB;;;;ACDrC,MAAa,mBAAmB;CAC9B,MAAM;CACN,IAAI;CACJ,UAAU;CACV,UAAU;CACV,SAAS;CACT,cAAc,EACZ,UAAU,EACR,iBAAiB,MAClB,EACF;CACF"}
1
+ {"version":3,"file":"descriptor-meta-B6-NIHhB.mjs","names":[],"sources":["../src/core/constants.ts","../src/core/descriptor-meta.ts"],"sourcesContent":["/**\n * Extension ID for ParadeDB pg_search.\n */\nexport const PARADEDB_EXTENSION_ID = 'paradedb' as const;\n\n/**\n * Built-in ParadeDB tokenizer IDs.\n * These correspond to the `pdb.*` casting syntax in `CREATE INDEX ... USING bm25`.\n */\nexport type TokenizerId =\n | 'unicode_words'\n | 'simple'\n | 'ngram'\n | 'icu'\n | 'regex_pattern'\n | 'source_code'\n | 'literal'\n | 'literal_normalized'\n | 'whitespace'\n | 'chinese_compatible'\n | 'jieba'\n | 'lindera';\n","import { PARADEDB_EXTENSION_ID } from './constants';\n\nexport const paradedbPackMeta = {\n kind: 'extension',\n id: PARADEDB_EXTENSION_ID,\n familyId: 'sql',\n targetId: 'postgres',\n version: '0.0.1',\n capabilities: {\n postgres: {\n 'paradedb/bm25': true,\n },\n },\n} as const;\n"],"mappings":";;ACEA,MAAa,mBAAmB;CAC9B,MAAM;CACN,IAAI;CACJ,UAAU;CACV,UAAU;CACV,SAAS;CACT,cAAc,EACZ,UAAU,EACR,iBAAiB,MAClB,EACF;CACF"}
@@ -1,7 +1,6 @@
1
1
  import { IndexDef } from "@prisma-next/contract-authoring";
2
2
 
3
3
  //#region src/core/constants.d.ts
4
-
5
4
  /**
6
5
  * Built-in ParadeDB tokenizer IDs.
7
6
  * These correspond to the `pdb.*` casting syntax in `CREATE INDEX ... USING bm25`.
@@ -54,8 +53,7 @@ type Bm25TextFieldOptions = {
54
53
  */
55
54
  type Bm25JsonFieldOptions = {
56
55
  readonly tokenizer?: TokenizerId | (string & {});
57
- readonly alias?: string;
58
- /** Ngram-specific params when tokenizer is 'ngram'. */
56
+ readonly alias?: string; /** Ngram-specific params when tokenizer is 'ngram'. */
59
57
  readonly min?: number;
60
58
  readonly max?: number;
61
59
  };
@@ -83,19 +81,12 @@ type Bm25IndexOptions = {
83
81
  * These produce `Bm25FieldConfig` objects for use in `bm25Index()`.
84
82
  */
85
83
  declare const bm25: {
86
- /** Text field with optional tokenizer config. */
87
- readonly text: (column: string, opts?: Bm25TextFieldOptions) => Bm25FieldConfig;
88
- /** Numeric field (filterable, sortable in BM25). */
89
- readonly numeric: (column: string) => Bm25FieldConfig;
90
- /** Boolean field. */
91
- readonly boolean: (column: string) => Bm25FieldConfig;
92
- /** JSON/JSONB field with optional tokenizer config. */
93
- readonly json: (column: string, opts?: Bm25JsonFieldOptions) => Bm25FieldConfig;
94
- /** Datetime (timestamp/date) field. */
95
- readonly datetime: (column: string) => Bm25FieldConfig;
96
- /** Range field. */
97
- readonly range: (column: string) => Bm25FieldConfig;
98
- /** Raw SQL expression field. `alias` is required. */
84
+ /** Text field with optional tokenizer config. */readonly text: (column: string, opts?: Bm25TextFieldOptions) => Bm25FieldConfig; /** Numeric field (filterable, sortable in BM25). */
85
+ readonly numeric: (column: string) => Bm25FieldConfig; /** Boolean field. */
86
+ readonly boolean: (column: string) => Bm25FieldConfig; /** JSON/JSONB field with optional tokenizer config. */
87
+ readonly json: (column: string, opts?: Bm25JsonFieldOptions) => Bm25FieldConfig; /** Datetime (timestamp/date) field. */
88
+ readonly datetime: (column: string) => Bm25FieldConfig; /** Range field. */
89
+ readonly range: (column: string) => Bm25FieldConfig; /** Raw SQL expression field. `alias` is required. */
99
90
  readonly expression: (sql: string, opts: Bm25ExpressionFieldOptions) => Bm25FieldConfig;
100
91
  };
101
92
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index-types.d.mts","names":[],"sources":["../src/core/constants.ts","../src/types/index-types.ts"],"sourcesContent":[],"mappings":";;;;;;;ACMA;AAWY,KDRA,WAAA,GCQA,eAAyB,GAKR,QAAM,GAAA,OAAA,GAAA,KAAA,GAAA,eAAA,GAAA,aAAA,GAAA,SAAA,GAAA,oBAAA,GAAA,YAAA,GAAA,oBAAA,GAAA,OAAA,GAAA,SAAA;;;;ADbnC;;KCHY,qBAAA;;EAAA,SAAA,UAAA,CAAA,EAAA,KAAqB;EAWrB,SAAA,SAAA,CAAA,EAAA,MAAA;EAWA,SAAA,eAAe,CAAA,EAlBE,MAkBC,CAAA,MAAA,EAAA,OAAA,CAAA;EAKlB,SAAA,KAAA,CAAA,EAAA,MAAe;AAQ3B,CAAA;AAUA;AAWA;AAiBA;AAUa,KAxED,yBAAA,GA+HF;EArDoB,SAAA,UAAA,EAAA,MAAA;EAAuB,SAAA,MAAA,CAAA,EAAA,KAAA;EAY1B,SAAA,KAAA,EAAA,MAAA;EAKA,SAAA,SAAA,CAAA,EAAA,MAAA;EAKG,SAAA,eAAA,CAAA,EA3FD,MA2FC,CAAA,MAAA,EAAA,OAAA,CAAA;CAAuB;;;;AAmBQ,KAxGjD,eAAA,GAAkB,qBAwG+B,GAxGP,yBAwGO;;AAoB7D;;KAvHY,eAAA;;4BAEgB;;;;;KAMhB,oBAAA;uBACW;;;;;;;;KASX,oBAAA;uBACW;;;;;;;;;KAUX,0BAAA;;uBAEW;;;;;;;;;KAeX,gBAAA;;4BAEgB;;;;;;;cAQf;;yCAEiB,yBAAuB;;wCAY1B;;wCAKA;;yCAKG,yBAAuB;;yCASzB;;sCAKH;;2CAKO,+BAA6B;;;;;;;;iBAoB7C,SAAA,OAAgB,mBAAmB"}
1
+ {"version":3,"file":"index-types.d.mts","names":[],"sources":["../src/core/constants.ts","../src/types/index-types.ts"],"mappings":";;;;;;;KASY,WAAA;;;;AAAZ;;KCHY,qBAAA;EAAA,SACD,MAAA;EAAA,SACA,UAAA;EAAA,SACA,SAAA;EAAA,SACA,eAAA,GAAkB,MAAA;EAAA,SAClB,KAAA;AAAA;;;;KAMC,yBAAA;EAAA,SACD,UAAA;EAAA,SACA,MAAA;EAAA,SACA,KAAA;EAAA,SACA,SAAA;EAAA,SACA,eAAA,GAAkB,MAAA;AAAA;;AAL7B;;KAWY,eAAA,GAAkB,qBAAA,GAAwB,yBAAA;;;;KAK1C,eAAA;EAAA,SACD,QAAA;EAAA,SACA,MAAA,WAAiB,eAAA;AAAA;;;AAP5B;KAaY,oBAAA;EAAA,SACD,SAAA,GAAY,WAAA;EAAA,SACZ,OAAA;EAAA,SACA,KAAA;EAAA,SACA,aAAA;AAAA;;;;KAMC,oBAAA;EAAA,SACD,SAAA,GAAY,WAAA;EAAA,SACZ,KAAA,WAlBgC;EAAA,SAoBhC,GAAA;EAAA,SACA,GAAA;AAAA;;;;KAMC,0BAAA;EAAA,SACD,KAAA;EAAA,SACA,SAAA,GAAY,WAAA;EAAA,SACZ,GAAA;EAAA,SACA,GAAA;EAAA,SACA,OAAA;EAAA,SACA,OAAA;AAAA;;;;KAWC,gBAAA;EAAA,SACD,QAAA;EAAA,SACA,MAAA,WAAiB,eAAA;EAAA,SACjB,IAAA;AAAA;AApBX;;;;AAAA,cA2Ba,IAAA;EAzBF,iFA2BU,IAAA,GAAS,oBAAA,KAAuB,eAAA,EA1B1C;EAAA,sCAsCgB,eAAA,EApChB;EAAA,sCAyCgB,eAAA,EAxCT;EAAA,gCA6CG,IAAA,GAAS,oBAAA,KAAuB,eAAA,EAlCzC;EAAA,uCA2CgB,eAAA;sCAKH,eAAA,EA/Cd;EAAA,mCAoDa,IAAA,EAAQ,0BAAA,KAA6B,eAAA;AAAA;;;;AA3C7D;;;iBA+DgB,SAAA,CAAU,IAAA,EAAM,gBAAA,GAAmB,QAAA"}
@@ -4,6 +4,7 @@
4
4
  * These produce `Bm25FieldConfig` objects for use in `bm25Index()`.
5
5
  */
6
6
  const bm25 = {
7
+ /** Text field with optional tokenizer config. */
7
8
  text(column, opts) {
8
9
  return {
9
10
  column,
@@ -14,12 +15,15 @@ const bm25 = {
14
15
  ...opts?.alias !== void 0 && { alias: opts.alias }
15
16
  };
16
17
  },
18
+ /** Numeric field (filterable, sortable in BM25). */
17
19
  numeric(column) {
18
20
  return { column };
19
21
  },
22
+ /** Boolean field. */
20
23
  boolean(column) {
21
24
  return { column };
22
25
  },
26
+ /** JSON/JSONB field with optional tokenizer config. */
23
27
  json(column, opts) {
24
28
  return {
25
29
  column,
@@ -30,12 +34,15 @@ const bm25 = {
30
34
  ...opts?.alias !== void 0 && { alias: opts.alias }
31
35
  };
32
36
  },
37
+ /** Datetime (timestamp/date) field. */
33
38
  datetime(column) {
34
39
  return { column };
35
40
  },
41
+ /** Range field. */
36
42
  range(column) {
37
43
  return { column };
38
44
  },
45
+ /** Raw SQL expression field. `alias` is required. */
39
46
  expression(sql, opts) {
40
47
  return {
41
48
  expression: sql,
@@ -78,7 +85,7 @@ function buildTokenizerConfig(tokenizer, params) {
78
85
  ...Object.keys(filtered).length > 0 && { tokenizerParams: filtered }
79
86
  };
80
87
  }
81
-
82
88
  //#endregion
83
89
  export { bm25, bm25Index };
90
+
84
91
  //# sourceMappingURL=index-types.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-types.mjs","names":[],"sources":["../src/types/index-types.ts"],"sourcesContent":["import type { IndexDef } from '@prisma-next/contract-authoring';\nimport type { TokenizerId } from '../core/constants';\n\n/**\n * BM25 field config for a table column.\n */\nexport type Bm25ColumnFieldConfig = {\n readonly column: string;\n readonly expression?: never;\n readonly tokenizer?: string;\n readonly tokenizerParams?: Record<string, unknown>;\n readonly alias?: string;\n};\n\n/**\n * BM25 field config for a SQL expression.\n */\nexport type Bm25ExpressionFieldConfig = {\n readonly expression: string;\n readonly column?: never;\n readonly alias: string;\n readonly tokenizer?: string;\n readonly tokenizerParams?: Record<string, unknown>;\n};\n\n/**\n * BM25 field config union.\n */\nexport type Bm25FieldConfig = Bm25ColumnFieldConfig | Bm25ExpressionFieldConfig;\n\n/**\n * BM25 index configuration payload stored in `IndexDef.config`.\n */\nexport type Bm25IndexConfig = {\n readonly keyField: string;\n readonly fields: readonly Bm25FieldConfig[];\n};\n\n/**\n * Options for a BM25 text field (text, varchar columns).\n */\nexport type Bm25TextFieldOptions = {\n readonly tokenizer?: TokenizerId | (string & {});\n readonly stemmer?: string;\n readonly alias?: string;\n readonly remove_emojis?: boolean;\n};\n\n/**\n * Options for a BM25 JSON field (json, jsonb columns).\n */\nexport type Bm25JsonFieldOptions = {\n readonly tokenizer?: TokenizerId | (string & {});\n readonly alias?: string;\n /** Ngram-specific params when tokenizer is 'ngram'. */\n readonly min?: number;\n readonly max?: number;\n};\n\n/**\n * Options for a BM25 expression-based field.\n */\nexport type Bm25ExpressionFieldOptions = {\n readonly alias: string;\n readonly tokenizer?: TokenizerId | (string & {});\n readonly min?: number;\n readonly max?: number;\n readonly stemmer?: string;\n readonly pattern?: string;\n};\n\ntype TokenizerConfig = {\n readonly tokenizer?: string;\n readonly tokenizerParams?: Record<string, unknown>;\n};\n\n/**\n * Options for constructing a BM25 index definition.\n */\nexport type Bm25IndexOptions = {\n readonly keyField: string;\n readonly fields: readonly Bm25FieldConfig[];\n readonly name?: string;\n};\n\n/**\n * Typed BM25 field builders.\n * These produce `Bm25FieldConfig` objects for use in `bm25Index()`.\n */\nexport const bm25 = {\n /** Text field with optional tokenizer config. */\n text(column: string, opts?: Bm25TextFieldOptions): Bm25FieldConfig {\n return {\n column,\n ...buildTokenizerConfig(opts?.tokenizer, {\n stemmer: opts?.stemmer,\n remove_emojis: opts?.remove_emojis,\n }),\n ...(opts?.alias !== undefined && { alias: opts.alias }),\n };\n },\n\n /** Numeric field (filterable, sortable in BM25). */\n numeric(column: string): Bm25FieldConfig {\n return { column };\n },\n\n /** Boolean field. */\n boolean(column: string): Bm25FieldConfig {\n return { column };\n },\n\n /** JSON/JSONB field with optional tokenizer config. */\n json(column: string, opts?: Bm25JsonFieldOptions): Bm25FieldConfig {\n return {\n column,\n ...buildTokenizerConfig(opts?.tokenizer, { min: opts?.min, max: opts?.max }),\n ...(opts?.alias !== undefined && { alias: opts.alias }),\n };\n },\n\n /** Datetime (timestamp/date) field. */\n datetime(column: string): Bm25FieldConfig {\n return { column };\n },\n\n /** Range field. */\n range(column: string): Bm25FieldConfig {\n return { column };\n },\n\n /** Raw SQL expression field. `alias` is required. */\n expression(sql: string, opts: Bm25ExpressionFieldOptions): Bm25FieldConfig {\n return {\n expression: sql,\n alias: opts.alias,\n ...buildTokenizerConfig(opts.tokenizer, {\n min: opts.min,\n max: opts.max,\n stemmer: opts.stemmer,\n pattern: opts.pattern,\n }),\n };\n },\n} as const;\n\n/**\n * Creates a generic index definition with a ParadeDB BM25 payload.\n *\n * `columns` only includes real table columns so core index validation remains\n * target-agnostic. Expression fields stay in extension-owned `config.fields`.\n */\nexport function bm25Index(opts: Bm25IndexOptions): IndexDef {\n return {\n columns: opts.fields.flatMap((field) => ('column' in field ? [field.column] : [])),\n ...(opts.name !== undefined && { name: opts.name }),\n using: 'bm25',\n config: {\n keyField: opts.keyField,\n fields: opts.fields,\n } satisfies Bm25IndexConfig,\n };\n}\n\n/**\n * Builds `{ tokenizer, tokenizerParams? }` from a tokenizer ID and a bag of params.\n * Filters out undefined values and omits `tokenizerParams` when empty.\n */\nfunction buildTokenizerConfig(\n tokenizer: string | undefined,\n params: Record<string, unknown>,\n): TokenizerConfig {\n if (!tokenizer) return {};\n const filtered = Object.fromEntries(Object.entries(params).filter(([, v]) => v !== undefined));\n return {\n tokenizer,\n ...(Object.keys(filtered).length > 0 && { tokenizerParams: filtered }),\n };\n}\n"],"mappings":";;;;;AAyFA,MAAa,OAAO;CAElB,KAAK,QAAgB,MAA8C;AACjE,SAAO;GACL;GACA,GAAG,qBAAqB,MAAM,WAAW;IACvC,SAAS,MAAM;IACf,eAAe,MAAM;IACtB,CAAC;GACF,GAAI,MAAM,UAAU,UAAa,EAAE,OAAO,KAAK,OAAO;GACvD;;CAIH,QAAQ,QAAiC;AACvC,SAAO,EAAE,QAAQ;;CAInB,QAAQ,QAAiC;AACvC,SAAO,EAAE,QAAQ;;CAInB,KAAK,QAAgB,MAA8C;AACjE,SAAO;GACL;GACA,GAAG,qBAAqB,MAAM,WAAW;IAAE,KAAK,MAAM;IAAK,KAAK,MAAM;IAAK,CAAC;GAC5E,GAAI,MAAM,UAAU,UAAa,EAAE,OAAO,KAAK,OAAO;GACvD;;CAIH,SAAS,QAAiC;AACxC,SAAO,EAAE,QAAQ;;CAInB,MAAM,QAAiC;AACrC,SAAO,EAAE,QAAQ;;CAInB,WAAW,KAAa,MAAmD;AACzE,SAAO;GACL,YAAY;GACZ,OAAO,KAAK;GACZ,GAAG,qBAAqB,KAAK,WAAW;IACtC,KAAK,KAAK;IACV,KAAK,KAAK;IACV,SAAS,KAAK;IACd,SAAS,KAAK;IACf,CAAC;GACH;;CAEJ;;;;;;;AAQD,SAAgB,UAAU,MAAkC;AAC1D,QAAO;EACL,SAAS,KAAK,OAAO,SAAS,UAAW,YAAY,QAAQ,CAAC,MAAM,OAAO,GAAG,EAAE,CAAE;EAClF,GAAI,KAAK,SAAS,UAAa,EAAE,MAAM,KAAK,MAAM;EAClD,OAAO;EACP,QAAQ;GACN,UAAU,KAAK;GACf,QAAQ,KAAK;GACd;EACF;;;;;;AAOH,SAAS,qBACP,WACA,QACiB;AACjB,KAAI,CAAC,UAAW,QAAO,EAAE;CACzB,MAAM,WAAW,OAAO,YAAY,OAAO,QAAQ,OAAO,CAAC,QAAQ,GAAG,OAAO,MAAM,OAAU,CAAC;AAC9F,QAAO;EACL;EACA,GAAI,OAAO,KAAK,SAAS,CAAC,SAAS,KAAK,EAAE,iBAAiB,UAAU;EACtE"}
1
+ {"version":3,"file":"index-types.mjs","names":[],"sources":["../src/types/index-types.ts"],"sourcesContent":["import type { IndexDef } from '@prisma-next/contract-authoring';\nimport type { TokenizerId } from '../core/constants';\n\n/**\n * BM25 field config for a table column.\n */\nexport type Bm25ColumnFieldConfig = {\n readonly column: string;\n readonly expression?: never;\n readonly tokenizer?: string;\n readonly tokenizerParams?: Record<string, unknown>;\n readonly alias?: string;\n};\n\n/**\n * BM25 field config for a SQL expression.\n */\nexport type Bm25ExpressionFieldConfig = {\n readonly expression: string;\n readonly column?: never;\n readonly alias: string;\n readonly tokenizer?: string;\n readonly tokenizerParams?: Record<string, unknown>;\n};\n\n/**\n * BM25 field config union.\n */\nexport type Bm25FieldConfig = Bm25ColumnFieldConfig | Bm25ExpressionFieldConfig;\n\n/**\n * BM25 index configuration payload stored in `IndexDef.config`.\n */\nexport type Bm25IndexConfig = {\n readonly keyField: string;\n readonly fields: readonly Bm25FieldConfig[];\n};\n\n/**\n * Options for a BM25 text field (text, varchar columns).\n */\nexport type Bm25TextFieldOptions = {\n readonly tokenizer?: TokenizerId | (string & {});\n readonly stemmer?: string;\n readonly alias?: string;\n readonly remove_emojis?: boolean;\n};\n\n/**\n * Options for a BM25 JSON field (json, jsonb columns).\n */\nexport type Bm25JsonFieldOptions = {\n readonly tokenizer?: TokenizerId | (string & {});\n readonly alias?: string;\n /** Ngram-specific params when tokenizer is 'ngram'. */\n readonly min?: number;\n readonly max?: number;\n};\n\n/**\n * Options for a BM25 expression-based field.\n */\nexport type Bm25ExpressionFieldOptions = {\n readonly alias: string;\n readonly tokenizer?: TokenizerId | (string & {});\n readonly min?: number;\n readonly max?: number;\n readonly stemmer?: string;\n readonly pattern?: string;\n};\n\ntype TokenizerConfig = {\n readonly tokenizer?: string;\n readonly tokenizerParams?: Record<string, unknown>;\n};\n\n/**\n * Options for constructing a BM25 index definition.\n */\nexport type Bm25IndexOptions = {\n readonly keyField: string;\n readonly fields: readonly Bm25FieldConfig[];\n readonly name?: string;\n};\n\n/**\n * Typed BM25 field builders.\n * These produce `Bm25FieldConfig` objects for use in `bm25Index()`.\n */\nexport const bm25 = {\n /** Text field with optional tokenizer config. */\n text(column: string, opts?: Bm25TextFieldOptions): Bm25FieldConfig {\n return {\n column,\n ...buildTokenizerConfig(opts?.tokenizer, {\n stemmer: opts?.stemmer,\n remove_emojis: opts?.remove_emojis,\n }),\n ...(opts?.alias !== undefined && { alias: opts.alias }),\n };\n },\n\n /** Numeric field (filterable, sortable in BM25). */\n numeric(column: string): Bm25FieldConfig {\n return { column };\n },\n\n /** Boolean field. */\n boolean(column: string): Bm25FieldConfig {\n return { column };\n },\n\n /** JSON/JSONB field with optional tokenizer config. */\n json(column: string, opts?: Bm25JsonFieldOptions): Bm25FieldConfig {\n return {\n column,\n ...buildTokenizerConfig(opts?.tokenizer, { min: opts?.min, max: opts?.max }),\n ...(opts?.alias !== undefined && { alias: opts.alias }),\n };\n },\n\n /** Datetime (timestamp/date) field. */\n datetime(column: string): Bm25FieldConfig {\n return { column };\n },\n\n /** Range field. */\n range(column: string): Bm25FieldConfig {\n return { column };\n },\n\n /** Raw SQL expression field. `alias` is required. */\n expression(sql: string, opts: Bm25ExpressionFieldOptions): Bm25FieldConfig {\n return {\n expression: sql,\n alias: opts.alias,\n ...buildTokenizerConfig(opts.tokenizer, {\n min: opts.min,\n max: opts.max,\n stemmer: opts.stemmer,\n pattern: opts.pattern,\n }),\n };\n },\n} as const;\n\n/**\n * Creates a generic index definition with a ParadeDB BM25 payload.\n *\n * `columns` only includes real table columns so core index validation remains\n * target-agnostic. Expression fields stay in extension-owned `config.fields`.\n */\nexport function bm25Index(opts: Bm25IndexOptions): IndexDef {\n return {\n columns: opts.fields.flatMap((field) => ('column' in field ? [field.column] : [])),\n ...(opts.name !== undefined && { name: opts.name }),\n using: 'bm25',\n config: {\n keyField: opts.keyField,\n fields: opts.fields,\n } satisfies Bm25IndexConfig,\n };\n}\n\n/**\n * Builds `{ tokenizer, tokenizerParams? }` from a tokenizer ID and a bag of params.\n * Filters out undefined values and omits `tokenizerParams` when empty.\n */\nfunction buildTokenizerConfig(\n tokenizer: string | undefined,\n params: Record<string, unknown>,\n): TokenizerConfig {\n if (!tokenizer) return {};\n const filtered = Object.fromEntries(Object.entries(params).filter(([, v]) => v !== undefined));\n return {\n tokenizer,\n ...(Object.keys(filtered).length > 0 && { tokenizerParams: filtered }),\n };\n}\n"],"mappings":";;;;;AAyFA,MAAa,OAAO;;CAElB,KAAK,QAAgB,MAA8C;EACjE,OAAO;GACL;GACA,GAAG,qBAAqB,MAAM,WAAW;IACvC,SAAS,MAAM;IACf,eAAe,MAAM;IACtB,CAAC;GACF,GAAI,MAAM,UAAU,KAAA,KAAa,EAAE,OAAO,KAAK,OAAO;GACvD;;;CAIH,QAAQ,QAAiC;EACvC,OAAO,EAAE,QAAQ;;;CAInB,QAAQ,QAAiC;EACvC,OAAO,EAAE,QAAQ;;;CAInB,KAAK,QAAgB,MAA8C;EACjE,OAAO;GACL;GACA,GAAG,qBAAqB,MAAM,WAAW;IAAE,KAAK,MAAM;IAAK,KAAK,MAAM;IAAK,CAAC;GAC5E,GAAI,MAAM,UAAU,KAAA,KAAa,EAAE,OAAO,KAAK,OAAO;GACvD;;;CAIH,SAAS,QAAiC;EACxC,OAAO,EAAE,QAAQ;;;CAInB,MAAM,QAAiC;EACrC,OAAO,EAAE,QAAQ;;;CAInB,WAAW,KAAa,MAAmD;EACzE,OAAO;GACL,YAAY;GACZ,OAAO,KAAK;GACZ,GAAG,qBAAqB,KAAK,WAAW;IACtC,KAAK,KAAK;IACV,KAAK,KAAK;IACV,SAAS,KAAK;IACd,SAAS,KAAK;IACf,CAAC;GACH;;CAEJ;;;;;;;AAQD,SAAgB,UAAU,MAAkC;CAC1D,OAAO;EACL,SAAS,KAAK,OAAO,SAAS,UAAW,YAAY,QAAQ,CAAC,MAAM,OAAO,GAAG,EAAE,CAAE;EAClF,GAAI,KAAK,SAAS,KAAA,KAAa,EAAE,MAAM,KAAK,MAAM;EAClD,OAAO;EACP,QAAQ;GACN,UAAU,KAAK;GACf,QAAQ,KAAK;GACd;EACF;;;;;;AAOH,SAAS,qBACP,WACA,QACiB;CACjB,IAAI,CAAC,WAAW,OAAO,EAAE;CACzB,MAAM,WAAW,OAAO,YAAY,OAAO,QAAQ,OAAO,CAAC,QAAQ,GAAG,OAAO,MAAM,KAAA,EAAU,CAAC;CAC9F,OAAO;EACL;EACA,GAAI,OAAO,KAAK,SAAS,CAAC,SAAS,KAAK,EAAE,iBAAiB,UAAU;EACtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"pack.d.mts","names":[],"sources":["../src/exports/pack.ts"],"sourcesContent":[],"mappings":";cAEM;EAAA,SAAA,IAAA,EAA+B,WAAA"}
1
+ {"version":3,"file":"pack.d.mts","names":[],"sources":["../src/exports/pack.ts"],"mappings":";cAEM,YAAA;EAAA"}
package/dist/pack.mjs CHANGED
@@ -1,9 +1,7 @@
1
- import { t as paradedbPackMeta } from "./descriptor-meta-BTFnIGJ6.mjs";
2
-
1
+ import { t as paradedbPackMeta } from "./descriptor-meta-B6-NIHhB.mjs";
3
2
  //#region src/exports/pack.ts
4
3
  const paradedbPack = paradedbPackMeta;
5
- var pack_default = paradedbPack;
6
-
7
4
  //#endregion
8
- export { pack_default as default };
5
+ export { paradedbPack as default };
6
+
9
7
  //# sourceMappingURL=pack.mjs.map
package/dist/pack.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pack.mjs","names":[],"sources":["../src/exports/pack.ts"],"sourcesContent":["import { paradedbPackMeta } from '../core/descriptor-meta';\n\nconst paradedbPack = paradedbPackMeta;\n\nexport default paradedbPack;\n"],"mappings":";;;AAEA,MAAM,eAAe;AAErB,mBAAe"}
1
+ {"version":3,"file":"pack.mjs","names":[],"sources":["../src/exports/pack.ts"],"sourcesContent":["import { paradedbPackMeta } from '../core/descriptor-meta';\n\nconst paradedbPack = paradedbPackMeta;\n\nexport default paradedbPack;\n"],"mappings":";;AAEA,MAAM,eAAe"}
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@prisma-next/extension-paradedb",
3
- "version": "0.5.0-dev.65",
3
+ "version": "0.5.0-dev.67",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "dependencies": {
8
- "@prisma-next/contract": "0.5.0-dev.65",
9
- "@prisma-next/contract-authoring": "0.5.0-dev.65"
8
+ "@prisma-next/contract": "0.5.0-dev.67",
9
+ "@prisma-next/contract-authoring": "0.5.0-dev.67"
10
10
  },
11
11
  "devDependencies": {
12
- "tsdown": "0.18.4",
12
+ "tsdown": "0.22.0",
13
13
  "typescript": "5.9.3",
14
- "vitest": "4.0.17",
15
- "@prisma-next/tsconfig": "0.0.0",
16
- "@prisma-next/tsdown": "0.0.0"
14
+ "vitest": "4.1.5",
15
+ "@prisma-next/tsdown": "0.0.0",
16
+ "@prisma-next/tsconfig": "0.0.0"
17
17
  },
18
18
  "files": [
19
19
  "dist",