@strapi/utils
Version:
Shared utilities for the Strapi packages
1 lines • 11.8 kB
Source Map (JSON)
{"version":3,"file":"query-sort.mjs","sources":["../../src/traverse/query-sort.ts"],"sourcesContent":["import {\n curry,\n isString,\n isObject,\n map,\n trim,\n split,\n isEmpty,\n flatten,\n pipe,\n isNil,\n first,\n cloneDeep,\n} from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\n\nconst ORDERS = { asc: 'asc', desc: 'desc' };\nconst ORDER_VALUES = Object.values(ORDERS);\n\nconst isSortOrder = (value: string) => ORDER_VALUES.includes(value.toLowerCase());\nconst isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every(isString);\nconst isObjectArray = (value: unknown): value is object[] =>\n Array.isArray(value) && value.every(isObject);\nconst isNestedSorts = (value: unknown): value is string =>\n isString(value) && value.split(',').length > 1;\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst sort = traverseFactory()\n .intercept(\n // String with chained sorts (foo,bar,foobar) => split, map(recurse), then recompose\n isNestedSorts,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(\n sort\n .split(',')\n .map(trim)\n .map((nestedSort) => recurse(visitor, options, nestedSort))\n ).then((res) => res.filter((part) => !isEmpty(part)).join(','));\n }\n )\n .intercept(\n // Array of strings ['foo', 'foo,bar'] => map(recurse), then filter out empty items\n isStringArray,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then(\n (res) => res.filter((nestedSort) => !isEmpty(nestedSort))\n );\n }\n )\n .intercept(\n // Array of objects [{ foo: 'asc' }, { bar: 'desc', baz: 'asc' }] => map(recurse), then filter out empty items\n isObjectArray,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then(\n (res) => res.filter((nestedSort) => !isEmpty(nestedSort))\n );\n }\n )\n // Parse string values\n .parse(isString, () => {\n const tokenize = pipe(split('.'), map(split(':')), flatten);\n const recompose = (parts: string[]) => {\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.reduce((acc, part) => {\n if (isEmpty(part)) {\n return acc;\n }\n\n if (acc === '') {\n return part;\n }\n\n return isSortOrder(part) ? `${acc}:${part}` : `${acc}.${part}`;\n }, '');\n };\n\n return {\n transform: trim,\n\n remove(key, data) {\n const [root] = tokenize(data);\n\n return root === key ? undefined : data;\n },\n\n set(key, value, data) {\n const [root] = tokenize(data);\n\n if (root !== key) {\n return data;\n }\n\n return isNil(value) ? root : `${root}.${value}`;\n },\n\n keys(data) {\n const v = first(tokenize(data));\n return v ? [v] : [];\n },\n\n get(key, data) {\n const [root, ...rest] = tokenize(data);\n\n return key === root ? recompose(rest) : undefined;\n },\n };\n })\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n // eslint-disable-next-line no-unused-vars\n const { [key]: ignored, ...rest } = data;\n\n return rest;\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n // Handle deep sort on relation\n .onRelation(\n async ({ key, value, attribute, visitor, path, getModel, schema }, { set, recurse }) => {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n if (isMorphRelation) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle deep sort on media\n .onMedia(async ({ key, path, schema, attribute, visitor, value, getModel }, { recurse, set }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n })\n // Handle deep sort on components\n .onComponent(\n async ({ key, value, visitor, path, schema, attribute, getModel }, { recurse, set }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n );\n\nexport default curry(sort.traverse);\n"],"names":["ORDERS","asc","desc","ORDER_VALUES","Object","values","isSortOrder","value","includes","toLowerCase","isStringArray","Array","isArray","every","isString","isObjectArray","isObject","isNestedSorts","split","length","isObj","sort","traverseFactory","intercept","visitor","options","recurse","Promise","all","map","trim","nestedSort","then","res","filter","part","isEmpty","join","parse","tokenize","pipe","flatten","recompose","parts","undefined","reduce","acc","transform","remove","key","data","root","set","isNil","keys","v","first","get","rest","cloneDeep","ignored","onRelation","attribute","path","getModel","schema","isMorphRelation","relation","startsWith","parent","targetSchemaUID","target","targetSchema","newValue","onMedia","onComponent","component","curry","traverse"],"mappings":"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"}