UNPKG

9.33 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","sources":["../src/lib/util.js","../src/lib/normalize.js","../src/koa/index.js","../src/lib/denormalize.js","../src/index.js","../src/lib/to-json-server.js"],"sourcesContent":["export function isNumeric(num) {\n return !isNaN(num);\n}\n\nexport function safeToNumber(num) {\n if (isNumeric(num)) {\n return Number(num);\n }\n\n return num;\n}\n\nexport function safeToArray(arrOrStr) {\n if (Array.isArray(arrOrStr)) {\n return arrOrStr;\n }\n\n return [arrOrStr];\n}\n","import pickBy from \"lodash/pickBy\";\nimport startsWith from \"lodash/startsWith\";\nimport isNil from \"lodash/isNil\";\nimport isEmpty from \"lodash/isEmpty\";\nimport { camelizeKeys } from \"humps\";\nimport { safeToNumber } from \"./util\";\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 = safeToNumber(_limit);\n if (!isNil(_offset)) ret.offset = safeToNumber(_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 // `_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\n // `_like`\n match = /(.+)_like/.exec(key);\n if (match) {\n const path = match[1];\n\n // _like support array\n if (Array.isArray(val)) {\n acc[path] = { $regex: val.map(v => new RegExp(v, \"i\")) };\n } else {\n acc[path] = { $regex: new RegExp(val, \"i\") };\n }\n\n return acc;\n } else if (val === \"true\") acc[key] = true;\n else if (val === \"false\") acc[key] = false;\n else if (typeof val === \"string\") {\n acc[key] = val.trim();\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.normalizedQuery = normalize(ctx.query);\n }\n\n return next();\n };\n}\n","import isNil from \"lodash/isNil\";\nimport { safeToNumber } from \"./util\";\n\n/**\n * 根据key 和 operator 生成 key\n * @param {string} key\n * @param {string} operator\n */\nfunction keyWithOperator(key, operator) {\n return `${key}_${operator.replace(\"$\", \"\")}`;\n}\n\nexport default function denormalize(queryObj = {}) {\n const {\n limit,\n offset,\n sort,\n populate,\n select,\n group,\n filter = {},\n ...custom\n } = queryObj;\n\n const ret = {};\n\n if (!isNil(limit)) ret._limit = safeToNumber(limit);\n if (!isNil(offset)) ret._offset = safeToNumber(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 for (const key in filter) {\n const val = filter[key];\n\n if (typeof val !== \"object\" || Array.isArray(val)) {\n ret[key] = val;\n } else {\n // handle operator\n for (const operator in val) {\n switch (operator) {\n case \"$lt\":\n case \"$gt\":\n case \"$lte\":\n case \"$gte\":\n case \"$ne\":\n ret[keyWithOperator(key, operator)] = val[operator];\n break;\n case \"$regex\":\n // _like support array\n ret[keyWithOperator(key, \"$like\")] = Array.isArray(val[operator])\n ? val[operator].map(v => v.source)\n : val[operator].source;\n break;\n default:\n break;\n }\n }\n }\n }\n\n return {\n ...ret,\n ...custom,\n };\n}\n","import queryNormalizr from \"./koa\";\n\nexport { queryNormalizr };\nexport { default as normalize } from \"./lib/normalize\";\nexport { default as denormalize } from \"./lib/denormalize\";\nexport { default as toJsonServer } from \"./lib/to-json-server\";\n\n// deprecated\nexport const QueryNormalizr = (...args) => {\n console.log(\"QueryNormalizr is deprecated, plz use queryNormalizr instead.\");\n return queryNormalizr(...args);\n};\n","import { safeToNumber, safeToArray } from \"./util\";\nimport pickBy from \"lodash/pickBy\";\nimport startsWith from \"lodash/startsWith\";\nimport isNil from \"lodash/isNil\";\nimport trimStart from \"lodash/trimStart\";\n\n/**\n * 将url中的query 转换为 json server 的query 格式\n * @param {string} fromUrl query object from url\n */\nexport default function toJsonServer(fromUrl) {\n const filters = pickBy(fromUrl, (_, key) => !startsWith(key, \"_\"));\n const others = pickBy(fromUrl, (_, key) => startsWith(key, \"_\"));\n\n const ret = {};\n\n const { _limit, _offset = 0, _sort, _populate } = others;\n\n // _limit, _offset 转换为 _start 和 _limit\n if (!isNil(_limit)) {\n ret._limit = safeToNumber(_limit);\n ret._start = safeToNumber(_offset);\n }\n\n // _sort 转换为 _order, _sort\n if (!isNil(_sort)) {\n const sort = safeToArray(_sort);\n const order = sort.map(s => (startsWith(s, \"-\") ? \"desc\" : \"asc\"));\n\n ret._sort = sort.map(s => trimStart(s, \"-\")).join(\",\");\n ret._order = order.join(\",\");\n }\n\n // 将 populate 转换为为 _embed\n if (!isNil(_populate)) {\n const embed = safeToArray(_populate);\n ret._embed = embed.join(\",\");\n }\n\n return {\n ...ret,\n ...filters,\n };\n}\n"],"names":["safeToNumber","num","isNaN","isNumeric","Number","safeToArray","arrOrStr","Array","isArray","normalize","fromUrl","filters","pickBy","_","key","startsWith","others","ret","isNil","_limit","limit","_offset","offset","_sort","sort","_populate","populate","_select","select","_group","group","filter","Object","keys","reduce","acc","val","match","exec","path","op","$regex","map","v","RegExp","trim","isEmpty","camelizeKeys","convert","normalizor","opts","ctx","next","querystring","normalizedQuery","query","keyWithOperator","operator","replace","console","log","queryNormalizr","args","queryObj","const","source","_start","order","s","trimStart","join","_order","embed","_embed"],"mappings":"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"}
\No newline at end of file