diff --git a/CHANGELOG.fr.md b/CHANGELOG.fr.md index 241bf645e94eaeb87193624ceb54a063c77a76c9..959292c4f44e63f92ad0e28c3452f51d9eca1546 100644 --- a/CHANGELOG.fr.md +++ b/CHANGELOG.fr.md @@ -14,6 +14,10 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0 ## [Non-publié/Non-Stabilisé] (par [1000i100]) +## [Version 3.5.7] - 2023-01-01 (par [1000i100]) +### Corrections +- dictionary-tree ne supprime plus les alternatives vides ce qui permet d'avoir le comportement attendu avec des chaines comme "(|a)". + ## [Version 3.5.6] - 2023-01-01 (par [1000i100]) ### Corrections - dictionary-parser génère désormais correctement les variantes désaccentuées et majuscule/minuscule, sans couplage entre identifiant secret et mot de passe. @@ -152,8 +156,9 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0 - intégration des librairies de crypto nécessaires - calcul de la clef publique correspondant à chaque combinaison de secrets saisie, et comparaison à la clef publique de référence. -[Non-publié/Non-Stabilisé]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.6...main +[Non-publié/Non-Stabilisé]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.7...main +[Version 3.5.7]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.6...v3.5.7 [Version 3.5.6]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.5...v3.5.6 [Version 3.5.5]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.4...v3.5.5 [Version 3.5.4]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.3...v3.5.4 diff --git a/npm/package.json b/npm/package.json index d9c026445f9ca13be174472fa902820d189a7ee9..03044c7d9cc9434b67ebb134ccbc768e988a146e 100644 --- a/npm/package.json +++ b/npm/package.json @@ -1,6 +1,6 @@ { "name": "g1lib", - "version": "3.5.6", + "version": "3.5.7", "description": "An ubiquitous static javascript toolbox lib for Ǧ1 / Duniter ecosystem with reliability in mind.", "main": "nodejs/all.mjs", "browser": "browser/all.mjs", diff --git a/src/dictionary-parser.test.mjs b/src/dictionary-parser.test.mjs index 36f364ca441a293bc7757cd7a4ff4a1523cfbf05..11a4cae5aec9939ac8cb55f79b2cd1eb01b42641 100644 --- a/src/dictionary-parser.test.mjs +++ b/src/dictionary-parser.test.mjs @@ -86,7 +86,7 @@ e@@(f|g) (a|b) (c|d) h@@(i|j) -`), '((a|b|c|d)@@(a|b|c|d)|e@@(f|g)|h@@(i|j))'); +`), '((|a|b|c|d)@@(|a|b|c|d)|e@@(f|g)|h@@(i|j))'); }); test('add @@ on part without it', t => { t.is(app.parse(`(a@@b|c)`), '(a@@b|c@@c)'); diff --git a/src/dictionary-tree.mjs b/src/dictionary-tree.mjs index b820759242236593ac81b1f045294050ae7372ac..7d17541b77396afde7b0031f0b7a2a14685b4e69 100644 --- a/src/dictionary-tree.mjs +++ b/src/dictionary-tree.mjs @@ -134,7 +134,7 @@ export function splitAround(pattern,treeStruct){ const subPart = recSplitter(subTree); if(subPart.matching) { isMatch++; - if (subPart.notMatching) isAlt = true; + if (typeof subPart.notMatching !== 'undefined') isAlt = true; serialized+=subPart.matching; altSerialized+=subPart.notMatching; } else { @@ -152,8 +152,8 @@ export function splitAround(pattern,treeStruct){ const notMatching = []; treeStruct.alt.forEach(subTree=>{ const subPart = recSplitter(subTree); - if(subPart.matching) matching.push(subPart.matching); - if(subPart.notMatching) notMatching.push(subPart.notMatching); + if(typeof subPart.matching !== 'undefined') matching.push(subPart.matching); + if(typeof subPart.notMatching !== 'undefined') notMatching.push(subPart.notMatching); }) if(matching.length && notMatching.length) return {matching: `(${matching.join('|')})`,notMatching: `(${notMatching.join('|')})`} if(matching.length) return {matching: `(${matching.join('|')})`} @@ -162,8 +162,8 @@ export function splitAround(pattern,treeStruct){ throw new Error(`Error: how to splitAround ${pattern} with ${JSON.stringify(treeStruct)}`); } const res = recSplitter(treeStruct); - if(res.matching) res.matching = rawSerialize(buildTreeStruct(res.matching)); - if(res.notMatching) res.notMatching = rawSerialize(buildTreeStruct(res.notMatching)); + if(typeof res.matching !== 'undefined') res.matching = rawSerialize(buildTreeStruct(res.matching)); + if(typeof res.notMatching !== 'undefined') res.notMatching = rawSerialize(buildTreeStruct(res.notMatching)); return res; } export function serialize(treeStruct) { diff --git a/src/dictionary.test.mjs b/src/dictionary.test.mjs index 5be56784951adccd5f8486e10d919d70d3aa70e7..f59bff4b5d501c7ead7339536ef4fa2d7f7b74f4 100644 --- a/src/dictionary.test.mjs +++ b/src/dictionary.test.mjs @@ -201,3 +201,7 @@ test(`"aa" with default settings & a speed should generate alt including "Aa@@AA for(let i=0;i<dico.length;i++) dico.splitGet(i); t.is(dico.cache['Aa@@AA'][0], 2); }); +test(`"(|a)" with idSecPwd:true should have 4 cases`, t => { + const dico = new app.Dictionary('(|a)',{idSecPwd:true}); + t.is(dico.length, 4); +});