cry-search 2.2.0 → 2.3.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
@@ -569,6 +569,18 @@ brand names are never translated, and marketing/connector words (`care`, `for`,
569
569
  dropped. `razdeljevalciNormalizator` splits `&`/`+`/`/` inside names, and life stages
570
570
  (`puppy`/`kitten`/`adult`/`senior`) become the soft class `starost`.
571
571
 
572
+ For a **user-facing search field** the same lexicon must be in the search index, but the
573
+ class-producing normalizers have to stay out (a user searching `200ml`, `PRIB` or `adult` must
574
+ still find those rows). That is what `vetIskalniSpec()` / `vetIskalniQueryOpts()` are for:
575
+
576
+ ```typescript
577
+ import { vetIskalniSpec, vetIskalniQueryOpts } from 'cry-search/vet';
578
+
579
+ const metadata = createSearchArrayMetadata(data, vetIskalniSpec({ polja: ['acName', 'acIdent'] }));
580
+ searchAndRank('monge rabbit', data, metadata, vetIskalniQueryOpts({ exactKeysFn }));
581
+ // → najde `MONGE DOG ADULT zajec, riž, krompir 2,5kg` (leksikon rabbit → zajec)
582
+ ```
583
+
572
584
  With `vrniNesprejete: true` the domain module keeps candidates that fail the acceptance rule and
573
585
  marks them (`sprejeto: false`) instead of dropping them — useful in UIs where the user decides.
574
586
 
@@ -46,6 +46,7 @@ __export(exports_vet, {
46
46
  STOP_BESEDE: () => STOP_BESEDE,
47
47
  VELIKOSTI_EN: () => VELIKOSTI_EN,
48
48
  VELIKOSTI_OKRAJSAVE: () => VELIKOSTI_OKRAJSAVE,
49
+ VET_ISKALNI_NORMALIZATORJI: () => VET_ISKALNI_NORMALIZATORJI,
49
50
  VET_NORMALIZATORJI: () => VET_NORMALIZATORJI,
50
51
  VET_TABELA: () => VET_TABELA,
51
52
  VRSTE_SINONIMI: () => VRSTE_SINONIMI,
@@ -65,6 +66,8 @@ __export(exports_vet, {
65
66
  upariVseSync: () => upariVseSync,
66
67
  velikostNormalizator: () => velikostNormalizator,
67
68
  vetArtikelSpec: () => vetArtikelSpec,
69
+ vetIskalniQueryOpts: () => vetIskalniQueryOpts,
70
+ vetIskalniSpec: () => vetIskalniSpec,
68
71
  vetQueryOpts: () => vetQueryOpts,
69
72
  vrstaNormalizator: () => vrstaNormalizator,
70
73
  znamkaNormalizator: () => znamkaNormalizator
@@ -1680,6 +1683,29 @@ function vetArtikelSpec(nastavitve = {}) {
1680
1683
  function vetQueryOpts(dodatni = {}) {
1681
1684
  return { ...dodatni, queryNormalizers: [...VET_NORMALIZATORJI, ...dodatni.queryNormalizers ?? []] };
1682
1685
  }
1686
+ var VET_ISKALNI_NORMALIZATORJI = [
1687
+ kodiranjeNormalizator,
1688
+ decimalkeNormalizator,
1689
+ enoteNormalizator,
1690
+ znamkaNormalizator,
1691
+ razdeljevalciNormalizator,
1692
+ prevodiNormalizator
1693
+ ];
1694
+ function vetIskalniSpec(nastavitve = {}) {
1695
+ const polja = nastavitve.polja ?? ["naziv"];
1696
+ return {
1697
+ searchInFields: [...polja],
1698
+ keyFields: [...nastavitve.keyFields ?? polja],
1699
+ ...nastavitve.prviTokeni !== undefined ? { firstTokensN: nastavitve.prviTokeni } : {},
1700
+ valueNormalizers: [...VET_ISKALNI_NORMALIZATORJI, ...nastavitve.dodatniNormalizatorji ?? []]
1701
+ };
1702
+ }
1703
+ function vetIskalniQueryOpts(dodatni = {}) {
1704
+ return {
1705
+ ...dodatni,
1706
+ queryNormalizers: [...VET_ISKALNI_NORMALIZATORJI, ...dodatni.queryNormalizers ?? []]
1707
+ };
1708
+ }
1683
1709
  // src/types/index.ts
1684
1710
  var DEFAULT_PHONE_FIELDS = ["telefon", "phone", "gsm", "msisdn"];
1685
1711
  var DEFAULT_FIRST_TOKENS_N = 8;
@@ -14,7 +14,7 @@
14
14
  */
15
15
  export { VET_NORMALIZATORJI, VET_TABELA } from './normalizatorji';
16
16
  export { decimalkeNormalizator, enoteNormalizator, kolicinaNormalizator, oznakeNormalizator, prevodiNormalizator, razdeljevalciNormalizator, starostNormalizator, velikostNormalizator, vrstaNormalizator, znamkaNormalizator, } from './normalizatorji';
17
- export { vetArtikelSpec, vetQueryOpts, type VetSpecNastavitve } from './spec';
17
+ export { VET_ISKALNI_NORMALIZATORJI, vetArtikelSpec, vetIskalniQueryOpts, vetIskalniSpec, vetQueryOpts, type VetSpecNastavitve, } from './spec';
18
18
  /** Iz jedra ponovno izvoženo, ker je del vet pogodbe (razredi poizvedbe). */
19
19
  export { normalizeQueryWithOpts } from '../common/numeric/prepareQueryVariants';
20
20
  export { oceniPar, type VetOcena, type VetOcenaNastavitve, type VetRazredi } from './ocena';
@@ -14,7 +14,7 @@
14
14
  */
15
15
  export { VET_NORMALIZATORJI, VET_TABELA } from './normalizatorji';
16
16
  export { decimalkeNormalizator, enoteNormalizator, kolicinaNormalizator, oznakeNormalizator, prevodiNormalizator, razdeljevalciNormalizator, starostNormalizator, velikostNormalizator, vrstaNormalizator, znamkaNormalizator, } from './normalizatorji';
17
- export { vetArtikelSpec, vetQueryOpts, type VetSpecNastavitve } from './spec';
17
+ export { VET_ISKALNI_NORMALIZATORJI, vetArtikelSpec, vetIskalniQueryOpts, vetIskalniSpec, vetQueryOpts, type VetSpecNastavitve, } from './spec';
18
18
  /** Iz jedra ponovno izvoženo, ker je del vet pogodbe (razredi poizvedbe). */
19
19
  export { normalizeQueryWithOpts } from '../common/numeric/prepareQueryVariants';
20
20
  export { oceniPar, type VetOcena, type VetOcenaNastavitve, type VetRazredi } from './ocena';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vet/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC9E,6EAA6E;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vet/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,0BAA0B,EAC1B,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,QAAQ,CAAC;AAChB,6EAA6E;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/vet/index.js CHANGED
@@ -1607,6 +1607,29 @@ function vetArtikelSpec(nastavitve = {}) {
1607
1607
  function vetQueryOpts(dodatni = {}) {
1608
1608
  return { ...dodatni, queryNormalizers: [...VET_NORMALIZATORJI, ...dodatni.queryNormalizers ?? []] };
1609
1609
  }
1610
+ var VET_ISKALNI_NORMALIZATORJI = [
1611
+ kodiranjeNormalizator,
1612
+ decimalkeNormalizator,
1613
+ enoteNormalizator,
1614
+ znamkaNormalizator,
1615
+ razdeljevalciNormalizator,
1616
+ prevodiNormalizator
1617
+ ];
1618
+ function vetIskalniSpec(nastavitve = {}) {
1619
+ const polja = nastavitve.polja ?? ["naziv"];
1620
+ return {
1621
+ searchInFields: [...polja],
1622
+ keyFields: [...nastavitve.keyFields ?? polja],
1623
+ ...nastavitve.prviTokeni !== undefined ? { firstTokensN: nastavitve.prviTokeni } : {},
1624
+ valueNormalizers: [...VET_ISKALNI_NORMALIZATORJI, ...nastavitve.dodatniNormalizatorji ?? []]
1625
+ };
1626
+ }
1627
+ function vetIskalniQueryOpts(dodatni = {}) {
1628
+ return {
1629
+ ...dodatni,
1630
+ queryNormalizers: [...VET_ISKALNI_NORMALIZATORJI, ...dodatni.queryNormalizers ?? []]
1631
+ };
1632
+ }
1610
1633
  // src/types/index.ts
1611
1634
  var DEFAULT_PHONE_FIELDS = ["telefon", "phone", "gsm", "msisdn"];
1612
1635
  var DEFAULT_FIRST_TOKENS_N = 8;
@@ -2998,6 +3021,7 @@ export {
2998
3021
  STOP_BESEDE,
2999
3022
  VELIKOSTI_EN,
3000
3023
  VELIKOSTI_OKRAJSAVE,
3024
+ VET_ISKALNI_NORMALIZATORJI,
3001
3025
  VET_NORMALIZATORJI,
3002
3026
  VET_TABELA,
3003
3027
  VRSTE_SINONIMI,
@@ -3017,6 +3041,8 @@ export {
3017
3041
  upariVseSync,
3018
3042
  velikostNormalizator,
3019
3043
  vetArtikelSpec,
3044
+ vetIskalniQueryOpts,
3045
+ vetIskalniSpec,
3020
3046
  vetQueryOpts,
3021
3047
  vrstaNormalizator,
3022
3048
  znamkaNormalizator
@@ -32,4 +32,32 @@ export declare function vetArtikelSpec<T extends SearchableObject>(nastavitve?:
32
32
  * Uporabi jih vsak klic iskanja/uparjanja nad vet indeksom.
33
33
  */
34
34
  export declare function vetQueryOpts(dodatni?: SearchOpts): SearchOpts;
35
+ /**
36
+ * Normalizatorji za **uporabniško iskanje** (iskalno polje v klik.vetu, demo stran):
37
+ * le tisti, ki besedilo ohranijo in samo poenotijo zapis.
38
+ *
39
+ * Zakaj druga podmnožica kot pri uparjanju (teh NI):
40
+ * - `kolicinaNormalizator`, `velikostNormalizator`, `starostNormalizator`,
41
+ * `vrstaNormalizator`, `oznakeNormalizator`, `tipskeOznakeNormalizator` besede
42
+ * ODSTRANIJO iz besedila (gredo v razrede). Za uparjanje je to prav (mehka
43
+ * semantika), za iskanje pa ne: uporabnik, ki vpiše `200ml`, `PRIB` ali `adult`,
44
+ * mora te zadetke dobiti;
45
+ * - `pantheonOznakaNormalizator` odstrani vodilne zvezdice (`**`), zato bi iskanje
46
+ * po njih prenehalo delovati (v indeksu so trenutno del besedila).
47
+ *
48
+ * Kar ostane, je natanko tisto, kar iskalnik potrebuje, da zadene tudi zapise v
49
+ * DRUGEM JEZIKU: enote (`tablet` → `tbl`), znamke (`RC` → `Royal Canin`), ločila
50
+ * (`riž&krompir` → dva žetona) in dvojezični leksikon (`rabbit` → `ZAJEC`).
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const metadata = createSearchArrayMetadata(data, vetIskalniSpec({ polja: ['acName', 'acIdent'] }));
55
+ * searchAndRank('monge rabbit', data, metadata, vetIskalniQueryOpts({ exactKeysFn }));
56
+ * ```
57
+ */
58
+ export declare const VET_ISKALNI_NORMALIZATORJI: ValueNormalizer[];
59
+ /** Spec za iskalni indeks artikelov (glej {@link VET_ISKALNI_NORMALIZATORJI}). */
60
+ export declare function vetIskalniSpec<T extends SearchableObject>(nastavitve?: VetSpecNastavitve): SearchableObjectSpec<T>;
61
+ /** Iskalne nastavitve poizvedbe za iskalni indeks (isti normalizatorji kot indeks). */
62
+ export declare function vetIskalniQueryOpts(dodatni?: SearchOpts): SearchOpts;
35
63
  //# sourceMappingURL=spec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/vet/spec.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGpG,oCAAoC;AACpC,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,kEAAkE;IAClE,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,qBAAqB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;CACpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,gBAAgB,EACvD,UAAU,GAAE,iBAAsB,GACjC,oBAAoB,CAAC,CAAC,CAAC,CAQzB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,UAAe,GAAG,UAAU,CAEjE"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/vet/spec.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAWpG,oCAAoC;AACpC,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,kEAAkE;IAClE,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,qBAAqB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;CACpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,gBAAgB,EACvD,UAAU,GAAE,iBAAsB,GACjC,oBAAoB,CAAC,CAAC,CAAC,CAQzB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,UAAe,GAAG,UAAU,CAEjE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,0BAA0B,EAAE,eAAe,EAOvD,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,CAAC,SAAS,gBAAgB,EACvD,UAAU,GAAE,iBAAsB,GACjC,oBAAoB,CAAC,CAAC,CAAC,CAQzB;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,UAAe,GAAG,UAAU,CAKxE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cry-search",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "A fast, memory-efficient search library for large datasets with support for tokenized matching, linked collections, and per-field match modes.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",