UNPKG

4.29 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","sources":["../src/lib/normalize.js","../src/koa/index.js"],"sourcesContent":["import { pickBy, startsWith, isNil, isEmpty } from \"lodash\";\nimport { camelizeKeys } from \"humps\";\n\n/**\n * 将标准url中的query 格式转换成 标准 query object\n * @param {object} fromUrl query object from url\n */\nexport default function normalize(fromUrl) {\n const filters = pickBy(fromUrl, (_, key) => !startsWith(key, \"_\"));\n const others = pickBy(fromUrl, (_, key) => startsWith(key, \"_\"));\n\n const ret = {};\n const {\n _limit,\n _offset,\n _sort,\n _populate,\n _select,\n _group,\n ...custom\n } = others;\n\n if (!isNil(_limit)) ret.limit = Number(_limit);\n if (!isNil(_offset)) ret.offset = Number(_offset);\n if (!isNil(_sort)) ret.sort = _sort;\n if (!isNil(_populate)) ret.populate = _populate;\n if (!isNil(_select)) ret.select = _select;\n if (!isNil(_group)) ret.group = _group;\n\n // handle filters\n const filter = Object.keys(filters).reduce((acc, key) => {\n let val = filters[key];\n\n if (!val) return acc;\n\n if (Array.isArray(val)) {\n acc[key] = { $in: val };\n return acc;\n }\n\n // `_gt`, `_lt`, `_gte` `_lte` or `_ne`\n let match = /(.+)_(gt|lt|gte|lte|ne)$/.exec(key);\n if (match) {\n const path = match[1];\n const op = match[2];\n acc[path] = acc[path] || {};\n acc[path][`$${op}`] = val;\n return acc;\n }\n // other not string\n if (typeof val !== \"string\") {\n acc[key] = val;\n return acc;\n }\n // remove end space\n val = val.trim();\n\n // `_like`\n match = /(.+)_like/.exec(key);\n if (match) {\n const path = match[1];\n acc[path] = { $regex: new RegExp(val, \"i\") };\n return acc;\n }\n\n if (key === \"q\") acc[\"$text\"] = { $search: val };\n else if (val === \"true\") acc[key] = true;\n else if (val === \"false\") acc[key] = false;\n else if (val === \"*\") acc[key] = { $ne: [] };\n else if (val === \"none\") acc[key] = { $eq: [] };\n else acc[key] = val;\n\n return acc;\n }, {});\n\n if (!isEmpty(filter)) {\n ret.filter = camelizeKeys(filter, (key, convert) =>\n key === \"id\" ? \"_id\" : convert(key)\n );\n }\n\n return {\n ...ret,\n ...custom,\n };\n}\n","// use query-string\nimport normalize from \"../lib/normalize\";\n\nexport default function normalizor(opts = {}) {\n return function(ctx, next) {\n const queryStr = ctx.querystring;\n\n if (queryStr) {\n ctx.rawQuery = ctx.query;\n ctx.query = normalize(ctx.rawQuery);\n }\n\n return next();\n };\n}\n"],"names":["normalize","fromUrl","const","filters","pickBy","_","key","startsWith","others","ret","isNil","_limit","limit","Number","_offset","offset","_sort","sort","_populate","populate","_select","select","_group","group","filter","Object","keys","reduce","acc","let","val","Array","isArray","$in","match","exec","path","op","trim","$regex","RegExp","$search","$ne","$eq","isEmpty","camelizeKeys","convert","custom","opts","ctx","next","querystring","rawQuery","query"],"mappings":"2CAOe,SAASA,EAAUC,GAChCC,IAAMC,EAAUC,SAAOH,WAAUI,EAAGC,UAASC,aAAWD,EAAK,OACvDE,EAASJ,SAAOH,WAAUI,EAAGC,UAAQC,aAAWD,EAAK,OAErDG,sQAWDC,QAAMC,KAASF,EAAIG,MAAQC,OAAOF,IAClCD,QAAMI,KAAUL,EAAIM,OAASF,OAAOC,IACpCJ,QAAMM,KAAQP,EAAIQ,KAAOD,GACzBN,QAAMQ,KAAYT,EAAIU,SAAWD,GACjCR,QAAMU,KAAUX,EAAIY,OAASD,GAC7BV,QAAMY,KAASb,EAAIc,MAAQD,GAGhCpB,IAAMsB,EAASC,OAAOC,KAAKvB,GAASwB,gBAAQC,EAAKtB,GAC/CuB,IAAIC,EAAM3B,EAAQG,GAElB,IAAKwB,EAAK,OAAOF,EAEjB,GAAIG,MAAMC,QAAQF,GAEhB,OADAF,EAAItB,IAAS2B,IAAKH,GACXF,EAITC,IAAIK,EAAQ,2BAA2BC,KAAK7B,GAC5C,GAAI4B,EAAO,CACThC,IAAMkC,EAAOF,EAAM,GACbG,EAAKH,EAAM,GAGjB,OAFAN,EAAIQ,GAAQR,EAAIQ,OAChBR,EAAIQ,OAAUC,GAAQP,EACfF,EAGT,MAAmB,iBAARE,GACTF,EAAItB,GAAOwB,EACJF,IAGTE,EAAMA,EAAIQ,QAGVJ,EAAQ,YAAYC,KAAK7B,KAGvBsB,EADaM,EAAM,KACLK,OAAQ,IAAIC,OAAOV,EAAK,MAC/BF,IAGG,MAARtB,EAAasB,SAAiBa,QAASX,GAClBF,EAAItB,GAAZ,SAARwB,GACQ,UAARA,IACQ,MAARA,GAA0BY,QAClB,SAARZ,GAA6Ba,QACtBb,GAETF,SAST,OANKgB,UAAQpB,KACXf,EAAIe,OAASqB,eAAarB,WAASlB,EAAKwC,SAC9B,OAARxC,EAAe,MAAQwC,EAAQxC,MAI5BmB,iBACFhB,EACHsC,kBChFW,SAAoBC,GACjC,0BAAO,SAASC,EAAKC,GAQnB,OAPiBD,EAAIE,cAGnBF,EAAIG,SAAWH,EAAII,MACnBJ,EAAII,MAAQrD,EAAUiD,EAAIG,WAGrBF"}
\No newline at end of file