flexbiz-server
Version:
Flexible Server
5 lines (4 loc) • 1.54 kB
JavaScript
const VI_COLLATION={locale:"vi",strength:1},VietnameseCollationPlugin=$schema$$=>{const $isTextIndex$$=$fields$$=>Object.values($fields$$).some($val$$=>$val$$==="text"),$originalIndex$$=$schema$$.index.bind($schema$$);$schema$$.index=function($fields$$,$options$$){$options$$||={};$isTextIndex$$($fields$$)?(Logger.warn("\u26a0\ufe0f [Skip Collation] Index n\u00e0y l\u00e0 'text', kh\u00f4ng h\u1ed7 tr\u1ee3 collation:",JSON.stringify($fields$$)),delete $options$$.collation):($options$$.collation||
($options$$.collation=VI_COLLATION),Logger.info("\ud83d\udee0\ufe0f [Schema Index] \u0110\u00e3 ch\u00e8n collation cho:",JSON.stringify($fields$$)));return $originalIndex$$($fields$$,$options$$)};$schema$$.eachPath(($pathname$$,$schemaType$$)=>{if($pathname$$!=="_id"&&($schemaType$$.options.index||$schemaType$$.options.unique)){let $indexOpts$$=$schemaType$$.options.index;if(typeof $indexOpts$$==="boolean"||$indexOpts$$===void 0)$indexOpts$$={};$indexOpts$$==="text"||$schemaType$$.options.text||
($schemaType$$.options.unique&&($indexOpts$$.unique=!0),$indexOpts$$.collation||($indexOpts$$.collation=VI_COLLATION,$schemaType$$.options.index=$indexOpts$$,Logger.info(`\ud83d\udd0d [Field Index] \u0110\u00e3 ch\u00e8n collation cho field: '${$pathname$$}'`)))}});"find findOne findOneAndUpdate update updateOne updateMany count countDocuments distinct".split(" ").forEach($method$$=>{$schema$$.pre($method$$,function($next$$){this.options.collation||this.collation(VI_COLLATION);$next$$()})})};
module.exports=VietnameseCollationPlugin;