@inseefr/lunatic 3.7.5 → 3.7.6-rc.alphanumeric-sorting
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/esm/type.source.d.ts +1 -0
- package/esm/type.source.js +1 -0
- package/esm/type.source.js.map +1 -1
- package/esm/utils/search/melauto.d.ts +5 -0
- package/esm/utils/search/melauto.js +18 -3
- package/esm/utils/search/melauto.js.map +1 -1
- package/esm/utils/search/melauto.spec.js +16 -10
- package/esm/utils/search/melauto.spec.js.map +1 -1
- package/package.json +1 -1
- package/src/type.source.ts +2 -0
- package/src/utils/search/melauto.spec.ts +17 -11
- package/src/utils/search/melauto.ts +18 -6
- package/tsconfig.build.tsbuildinfo +1 -1
- package/type.source.d.ts +1 -0
- package/type.source.js +1 -0
- package/type.source.js.map +1 -1
- package/utils/search/melauto.d.ts +5 -0
- package/utils/search/melauto.js +19 -2
- package/utils/search/melauto.js.map +1 -1
- package/utils/search/melauto.spec.js +16 -10
- package/utils/search/melauto.spec.js.map +1 -1
package/type.source.d.ts
CHANGED
package/type.source.js
CHANGED
package/type.source.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.source.js","sourceRoot":"","sources":["src/type.source.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
|
1
|
+
{"version":3,"file":"type.source.js","sourceRoot":"","sources":["src/type.source.ts"],"names":[],"mappings":";AAAA,oBAAoB;AACpB;;;;GAIG"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Apply Melauto sorting algorithm on the data
|
|
3
|
+
*
|
|
4
|
+
* 1. Sort by melauto score
|
|
5
|
+
* 2. When scores are equal, sort alphabetically with numeric awareness
|
|
6
|
+
* This ensures consistent ordering for numeric queries
|
|
7
|
+
* (e.g., "0111Z" will appear before "0115Z" when both match "011")
|
|
3
8
|
*/
|
|
4
9
|
export declare function applyMelauto<T extends {
|
|
5
10
|
id: string;
|
package/utils/search/melauto.js
CHANGED
|
@@ -4,10 +4,27 @@ exports.applyMelauto = applyMelauto;
|
|
|
4
4
|
exports.melautoScore = melautoScore;
|
|
5
5
|
/**
|
|
6
6
|
* Apply Melauto sorting algorithm on the data
|
|
7
|
+
*
|
|
8
|
+
* 1. Sort by melauto score
|
|
9
|
+
* 2. When scores are equal, sort alphabetically with numeric awareness
|
|
10
|
+
* This ensures consistent ordering for numeric queries
|
|
11
|
+
* (e.g., "0111Z" will appear before "0115Z" when both match "011")
|
|
7
12
|
*/
|
|
8
13
|
function applyMelauto(query, data) {
|
|
9
|
-
return data.sort((a, b) =>
|
|
10
|
-
melautoScore(a.label ?? a.id, query)
|
|
14
|
+
return data.sort((a, b) => {
|
|
15
|
+
const sa = melautoScore(a.label ?? a.id, query);
|
|
16
|
+
const sb = melautoScore(b.label ?? b.id, query);
|
|
17
|
+
const diff = sb - sa;
|
|
18
|
+
if (diff !== 0)
|
|
19
|
+
return diff;
|
|
20
|
+
// This ensures stable sorting when multiple items have the same score
|
|
21
|
+
const ta = (a.label ?? a.id).toString();
|
|
22
|
+
const tb = (b.label ?? b.id).toString();
|
|
23
|
+
return ta.localeCompare(tb, undefined, {
|
|
24
|
+
numeric: true,
|
|
25
|
+
sensitivity: 'base',
|
|
26
|
+
});
|
|
27
|
+
});
|
|
11
28
|
}
|
|
12
29
|
/**
|
|
13
30
|
* Normalize a string to remove accent and other unicode character
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"melauto.js","sourceRoot":"","sources":["../../src/utils/search/melauto.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"melauto.js","sourceRoot":"","sources":["../../src/utils/search/melauto.ts"],"names":[],"mappings":";;AAQA,oCAiBC;AAsBD,oCAYC;AA3DD;;;;;;;GAOG;AACH,SAAgB,YAAY,CAC3B,KAAa,EACb,IAAS;IAET,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QACrB,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5B,sEAAsE;QACtE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE;YACtC,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,MAAM;SACnB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AACD;;;GAGG;AACH,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE;IACzC,OAAO,GAAG;SACR,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,WAAW,EAAE;SACb,KAAK,CAAC,YAAY,CAAC;SACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,GAAW,EAAE,KAAa;IACtD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE,KAAK,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QAC5D,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QAC3D,OAAO,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC;IAC7B,CAAC,EAAE,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -10,16 +10,6 @@ const data = [
|
|
|
10
10
|
{ id: '4', label: 'Greetings planet' },
|
|
11
11
|
];
|
|
12
12
|
(0, vitest_1.describe)('applyMelauto', () => {
|
|
13
|
-
(0, vitest_1.it)('should sort data by relevance to the query', () => {
|
|
14
|
-
const sortedData = (0, melauto_1.applyMelauto)('hello', data);
|
|
15
|
-
const expectedSortedData = [
|
|
16
|
-
{ id: '1', label: 'Hello world' },
|
|
17
|
-
{ id: '3', label: 'Hello everyone' },
|
|
18
|
-
{ id: '2', label: 'Bonjour le monde' },
|
|
19
|
-
{ id: '4', label: 'Greetings planet' },
|
|
20
|
-
];
|
|
21
|
-
(0, vitest_1.expect)(sortedData).toStrictEqual(expectedSortedData);
|
|
22
|
-
});
|
|
23
13
|
(0, vitest_1.it)('should return data in original order if query is empty', () => {
|
|
24
14
|
const sortedData = (0, melauto_1.applyMelauto)('', data);
|
|
25
15
|
(0, vitest_1.expect)(sortedData).toEqual(data);
|
|
@@ -65,5 +55,21 @@ const data = [
|
|
|
65
55
|
const score2 = (0, melauto_1.melautoScore)('Hello world', 'héllo-wOrld');
|
|
66
56
|
(0, vitest_1.expect)(score1).toBeCloseTo(score2, 2);
|
|
67
57
|
});
|
|
58
|
+
(0, vitest_1.it)('should sort alphabetically with numeric awareness when scores are equal', () => {
|
|
59
|
+
const numericData = [
|
|
60
|
+
{ id: '0115Z', label: '0115Z' },
|
|
61
|
+
{ id: '0111Z', label: '0111Z' },
|
|
62
|
+
{ id: '0120A', label: '0120A' },
|
|
63
|
+
{ id: '0112B', label: '0112B' },
|
|
64
|
+
];
|
|
65
|
+
const sortedData = (0, melauto_1.applyMelauto)('011', numericData);
|
|
66
|
+
const expectedSortedData = [
|
|
67
|
+
{ id: '0111Z', label: '0111Z' },
|
|
68
|
+
{ id: '0112B', label: '0112B' },
|
|
69
|
+
{ id: '0115Z', label: '0115Z' },
|
|
70
|
+
{ id: '0120A', label: '0120A' },
|
|
71
|
+
];
|
|
72
|
+
(0, vitest_1.expect)(sortedData).toStrictEqual(expectedSortedData);
|
|
73
|
+
});
|
|
68
74
|
});
|
|
69
75
|
//# sourceMappingURL=melauto.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"melauto.spec.js","sourceRoot":"","sources":["../../src/utils/search/melauto.spec.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,uCAAuD;AAEvD,4CAA4C;AAC5C,MAAM,IAAI,GAAG;IACZ,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE;IACjC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE;IACtC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,gBAAgB,EAAE;IACpC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE;CACtC,CAAC;AAEF,IAAA,iBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;IAC7B,IAAA,WAAE,EAAC,
|
|
1
|
+
{"version":3,"file":"melauto.spec.js","sourceRoot":"","sources":["../../src/utils/search/melauto.spec.ts"],"names":[],"mappings":"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"}
|