cry-search 2.4.0 → 2.5.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.
@@ -11,7 +11,12 @@
11
11
  export declare const ENOTE_SINONIMI: Record<string, string>;
12
12
  /**
13
13
  * Enote, ki veljajo LE v sestavljenem zapisu (cifra + enota), ne kot samostojna
14
- * beseda: `250m` → `250 ml`, a `BALL M` ostane `M` (velikost, ne mililitri).
14
+ * beseda: `250gr` → `250 g`, a `BALL M` ostane `M` (velikost).
15
+ *
16
+ * `m` tu NI: v nazivih pomeni **meter** (`FLEXI VARIO S TRAK 5M`, `Vata v roli 4m`,
17
+ * `Omnipor 2,5cm x 9,2m`), prostornino pa katalogi pišejo z `ml` (`200ml`). Merilo:
18
+ * 696 nazivov v SI_TACKA s samostojnim `m` ob številu, med njimi skoraj izključno
19
+ * dolžine; pretvorbo zdaj dela `kolicinaNormalizator` (2 m → 200 CM, 5 m → 500 CM).
15
20
  */
16
21
  export declare const ENOTE_SESTAVLJENE: Record<string, string>;
17
22
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"enote.d.ts","sourceRoot":"","sources":["../../../src/vet/data/enote.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0EjD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAcpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoBrD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwBjD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC"}
1
+ {"version":3,"file":"enote.d.ts","sourceRoot":"","sources":["../../../src/vet/data/enote.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0EjD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAapD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoBrD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwBjD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC"}
@@ -144,7 +144,6 @@ var ENOTE_SINONIMI = {
144
144
  kapsula1: "kps"
145
145
  };
146
146
  var ENOTE_SESTAVLJENE = {
147
- m: "ml",
148
147
  gr: "g",
149
148
  grm: "g",
150
149
  ml: "ml",
@@ -1368,7 +1367,7 @@ var enoteNormalizator = {
1368
1367
  return `${stevilo} ${crke}`;
1369
1368
  });
1370
1369
  const izhod = razbito.replace(BESEDA, (ujemanje) => {
1371
- const kanonicna = ENOTE_SINONIMI[kljucBesede(ujemanje)] ?? ENOTE_SESTAVLJENE[kljucBesede(ujemanje)];
1370
+ const kanonicna = ENOTE_SINONIMI[kljucBesede(ujemanje)];
1372
1371
  if (!kanonicna)
1373
1372
  return ujemanje;
1374
1373
  spremenjeno = true;
@@ -1392,8 +1391,28 @@ var VELIKOSTNE_BESEDE = new Set([
1392
1391
  function kanonicaVelika(enota) {
1393
1392
  return enota.toUpperCase();
1394
1393
  }
1395
- var KOLICINA_Z_ENOTO = /(\d+(?:\.\d+)?)\s*(ml|dl|l|g|mg|mcg|kg|ie|tbl|kps|amp|inj|kos|kom|vrecka|vrecke|tuba|steklenicka|zlicka|plocevinka|konzerva|viala)\b/gi;
1396
- var RAZPON = /(\d+(?:\.\d+)?)\s*(kg)?\s*[-\u2013]\s*(\d+(?:\.\d+)?)\s*(kg)?/i;
1394
+ var KANONICNE_ENOTE = {
1395
+ mm: { dim: "cm", faktor: 0.1 },
1396
+ cm: { dim: "cm", faktor: 1 },
1397
+ m: { dim: "cm", faktor: 100 },
1398
+ km: { dim: "cm", faktor: 1e5 },
1399
+ mg: { dim: "g", faktor: 0.001 },
1400
+ g: { dim: "g", faktor: 1 },
1401
+ kg: { dim: "g", faktor: 1000 },
1402
+ ml: { dim: "ml", faktor: 1 },
1403
+ dl: { dim: "ml", faktor: 100 },
1404
+ l: { dim: "ml", faktor: 1000 }
1405
+ };
1406
+ var MERE = new Set(Object.keys(KANONICNE_ENOTE));
1407
+ function kanonicnaMera(stevilo, enota) {
1408
+ const mera = KANONICNE_ENOTE[enota.toLowerCase()];
1409
+ if (!mera)
1410
+ return { vrednost: `${stevilo} ${enota.toUpperCase()}`, enota: enota.toUpperCase() };
1411
+ const vrednost = Number((Number(stevilo) * mera.faktor).toFixed(4));
1412
+ return { vrednost: `${vrednost} ${mera.dim.toUpperCase()}`, enota: mera.dim.toUpperCase() };
1413
+ }
1414
+ var KOLICINA_Z_ENOTO = /(\d+(?:\.\d+)?)\s*(mm|cm|km|ml|dl|mg|kg|mcg|m|l|g|kg|ie|tbl|kps|amp|inj|kos|kom|vrecka|vrecke|tuba|steklenicka|zlicka|plocevinka|konzerva|viala)\b/gi;
1415
+ var RAZPON = /(\d+(?:\.\d+)?)\s*([a-z]{1,4})?\s*[-\u2013]\s*(\d+(?:\.\d+)?)\s*([a-z]{1,4})?\b/i;
1397
1416
  var PAKIRANJE = /(\d+)\s*(?:x\s*)?(tbl|kps|amp|kos|kom|vrecka|vrecke|konzerva)\b/gi;
1398
1417
  var RAZMERJE_PAKIRANJA = /(\d{1,3})\s*\/\s*(\d{1,3})\b/g;
1399
1418
  var kolicinaNormalizator = {
@@ -1402,13 +1421,19 @@ var kolicinaNormalizator = {
1402
1421
  let besedilo = v;
1403
1422
  const razpon = RAZPON.exec(besedilo);
1404
1423
  if (razpon && razpon[1] && razpon[3]) {
1405
- razredi["razpon"] = `${razpon[1]}-${razpon[3]}`;
1406
- const enotaRazpona = razpon[2] ?? razpon[4] ?? "";
1407
- besedilo = besedilo.replace(razpon[0], enotaRazpona ? ` ${enotaRazpona.toUpperCase()} ` : " ");
1424
+ const enotaRazpona = (razpon[2] ?? razpon[4] ?? "").toLowerCase();
1425
+ const spodnja = kanonicnaMera(razpon[1], enotaRazpona || "");
1426
+ const zgornja = kanonicnaMera(razpon[3], enotaRazpona || "");
1427
+ const [spodnjaVrednost] = spodnja.vrednost.split(" ");
1428
+ const [zgornjaVrednost] = zgornja.vrednost.split(" ");
1429
+ const enotaKanonicna = MERE.has(enotaRazpona) ? spodnja.enota : enotaRazpona.toUpperCase();
1430
+ razredi["razpon"] = `${spodnjaVrednost}-${zgornjaVrednost}`;
1431
+ besedilo = besedilo.replace(razpon[0], enotaKanonicna ? ` ${enotaKanonicna} ` : " ");
1408
1432
  }
1409
1433
  besedilo = besedilo.replace(KOLICINA_Z_ENOTO, (_ujemanje, stevilo, enota) => {
1410
1434
  const kljuc = razredi["kolicina"] === undefined ? "kolicina" : "pakiranje";
1411
- const vrednost = `${stevilo} ${enota.toUpperCase()}`;
1435
+ const kanonicna = kanonicnaMera(stevilo, enota);
1436
+ const vrednost = kanonicna.vrednost;
1412
1437
  const obstojece = razredi[kljuc];
1413
1438
  if (obstojece === undefined)
1414
1439
  razredi[kljuc] = vrednost;
@@ -1416,7 +1441,7 @@ var kolicinaNormalizator = {
1416
1441
  obstojece.push(vrednost);
1417
1442
  else
1418
1443
  razredi[kljuc] = [obstojece, vrednost];
1419
- return ` ${enota.toUpperCase()} `;
1444
+ return ` ${kanonicna.enota} `;
1420
1445
  });
1421
1446
  besedilo = besedilo.replace(RAZMERJE_PAKIRANJA, (_ujemanje, a, b) => {
1422
1447
  const vrednost = `${a}/${b}`;
package/dist/vet/index.js CHANGED
@@ -68,7 +68,6 @@ var ENOTE_SINONIMI = {
68
68
  kapsula1: "kps"
69
69
  };
70
70
  var ENOTE_SESTAVLJENE = {
71
- m: "ml",
72
71
  gr: "g",
73
72
  grm: "g",
74
73
  ml: "ml",
@@ -1292,7 +1291,7 @@ var enoteNormalizator = {
1292
1291
  return `${stevilo} ${crke}`;
1293
1292
  });
1294
1293
  const izhod = razbito.replace(BESEDA, (ujemanje) => {
1295
- const kanonicna = ENOTE_SINONIMI[kljucBesede(ujemanje)] ?? ENOTE_SESTAVLJENE[kljucBesede(ujemanje)];
1294
+ const kanonicna = ENOTE_SINONIMI[kljucBesede(ujemanje)];
1296
1295
  if (!kanonicna)
1297
1296
  return ujemanje;
1298
1297
  spremenjeno = true;
@@ -1316,8 +1315,28 @@ var VELIKOSTNE_BESEDE = new Set([
1316
1315
  function kanonicaVelika(enota) {
1317
1316
  return enota.toUpperCase();
1318
1317
  }
1319
- var KOLICINA_Z_ENOTO = /(\d+(?:\.\d+)?)\s*(ml|dl|l|g|mg|mcg|kg|ie|tbl|kps|amp|inj|kos|kom|vrecka|vrecke|tuba|steklenicka|zlicka|plocevinka|konzerva|viala)\b/gi;
1320
- var RAZPON = /(\d+(?:\.\d+)?)\s*(kg)?\s*[-\u2013]\s*(\d+(?:\.\d+)?)\s*(kg)?/i;
1318
+ var KANONICNE_ENOTE = {
1319
+ mm: { dim: "cm", faktor: 0.1 },
1320
+ cm: { dim: "cm", faktor: 1 },
1321
+ m: { dim: "cm", faktor: 100 },
1322
+ km: { dim: "cm", faktor: 1e5 },
1323
+ mg: { dim: "g", faktor: 0.001 },
1324
+ g: { dim: "g", faktor: 1 },
1325
+ kg: { dim: "g", faktor: 1000 },
1326
+ ml: { dim: "ml", faktor: 1 },
1327
+ dl: { dim: "ml", faktor: 100 },
1328
+ l: { dim: "ml", faktor: 1000 }
1329
+ };
1330
+ var MERE = new Set(Object.keys(KANONICNE_ENOTE));
1331
+ function kanonicnaMera(stevilo, enota) {
1332
+ const mera = KANONICNE_ENOTE[enota.toLowerCase()];
1333
+ if (!mera)
1334
+ return { vrednost: `${stevilo} ${enota.toUpperCase()}`, enota: enota.toUpperCase() };
1335
+ const vrednost = Number((Number(stevilo) * mera.faktor).toFixed(4));
1336
+ return { vrednost: `${vrednost} ${mera.dim.toUpperCase()}`, enota: mera.dim.toUpperCase() };
1337
+ }
1338
+ var KOLICINA_Z_ENOTO = /(\d+(?:\.\d+)?)\s*(mm|cm|km|ml|dl|mg|kg|mcg|m|l|g|kg|ie|tbl|kps|amp|inj|kos|kom|vrecka|vrecke|tuba|steklenicka|zlicka|plocevinka|konzerva|viala)\b/gi;
1339
+ var RAZPON = /(\d+(?:\.\d+)?)\s*([a-z]{1,4})?\s*[-\u2013]\s*(\d+(?:\.\d+)?)\s*([a-z]{1,4})?\b/i;
1321
1340
  var PAKIRANJE = /(\d+)\s*(?:x\s*)?(tbl|kps|amp|kos|kom|vrecka|vrecke|konzerva)\b/gi;
1322
1341
  var RAZMERJE_PAKIRANJA = /(\d{1,3})\s*\/\s*(\d{1,3})\b/g;
1323
1342
  var kolicinaNormalizator = {
@@ -1326,13 +1345,19 @@ var kolicinaNormalizator = {
1326
1345
  let besedilo = v;
1327
1346
  const razpon = RAZPON.exec(besedilo);
1328
1347
  if (razpon && razpon[1] && razpon[3]) {
1329
- razredi["razpon"] = `${razpon[1]}-${razpon[3]}`;
1330
- const enotaRazpona = razpon[2] ?? razpon[4] ?? "";
1331
- besedilo = besedilo.replace(razpon[0], enotaRazpona ? ` ${enotaRazpona.toUpperCase()} ` : " ");
1348
+ const enotaRazpona = (razpon[2] ?? razpon[4] ?? "").toLowerCase();
1349
+ const spodnja = kanonicnaMera(razpon[1], enotaRazpona || "");
1350
+ const zgornja = kanonicnaMera(razpon[3], enotaRazpona || "");
1351
+ const [spodnjaVrednost] = spodnja.vrednost.split(" ");
1352
+ const [zgornjaVrednost] = zgornja.vrednost.split(" ");
1353
+ const enotaKanonicna = MERE.has(enotaRazpona) ? spodnja.enota : enotaRazpona.toUpperCase();
1354
+ razredi["razpon"] = `${spodnjaVrednost}-${zgornjaVrednost}`;
1355
+ besedilo = besedilo.replace(razpon[0], enotaKanonicna ? ` ${enotaKanonicna} ` : " ");
1332
1356
  }
1333
1357
  besedilo = besedilo.replace(KOLICINA_Z_ENOTO, (_ujemanje, stevilo, enota) => {
1334
1358
  const kljuc = razredi["kolicina"] === undefined ? "kolicina" : "pakiranje";
1335
- const vrednost = `${stevilo} ${enota.toUpperCase()}`;
1359
+ const kanonicna = kanonicnaMera(stevilo, enota);
1360
+ const vrednost = kanonicna.vrednost;
1336
1361
  const obstojece = razredi[kljuc];
1337
1362
  if (obstojece === undefined)
1338
1363
  razredi[kljuc] = vrednost;
@@ -1340,7 +1365,7 @@ var kolicinaNormalizator = {
1340
1365
  obstojece.push(vrednost);
1341
1366
  else
1342
1367
  razredi[kljuc] = [obstojece, vrednost];
1343
- return ` ${enota.toUpperCase()} `;
1368
+ return ` ${kanonicna.enota} `;
1344
1369
  });
1345
1370
  besedilo = besedilo.replace(RAZMERJE_PAKIRANJA, (_ujemanje, a, b) => {
1346
1371
  const vrednost = `${a}/${b}`;
@@ -1 +1 @@
1
- {"version":3,"file":"normalizatorji.d.ts","sourceRoot":"","sources":["../../src/vet/normalizatorji.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAKhD;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,eAKnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,eAmB/B,CAAC;AAkDF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAmDlC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,eA0B/B,CAAC;AAGF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,EAAE,eAuBvC,CAAC;AAMF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAgBjC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAYjC,CAAC;AAoFF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,eA0BhC,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAkBhC,CAAC;AAGF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAkBlC,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,0BAA0B,EAAE,eAUxC,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,eAKnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAYtC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAc/C,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,UAAU;;;;;;;;;;;CAWtB,CAAC"}
1
+ {"version":3,"file":"normalizatorji.d.ts","sourceRoot":"","sources":["../../src/vet/normalizatorji.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAKhD;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,eAKnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,eAsB/B,CAAC;AAuFF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,eA6DlC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,eA0B/B,CAAC;AAGF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,EAAE,eAuBvC,CAAC;AAMF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAgBjC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAYjC,CAAC;AAoFF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,eA0BhC,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAkBhC,CAAC;AAGF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAkBlC,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,0BAA0B,EAAE,eAUxC,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,eAKnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAYtC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAc/C,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,UAAU;;;;;;;;;;;CAWtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cry-search",
3
- "version": "2.4.0",
3
+ "version": "2.5.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",