@strapi/utils
Version:
Shared utilities for the Strapi packages
1 lines • 11.9 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":";;;AAiBA,MAAMA,MAAAA,GAAS;IAAEC,GAAAA,EAAK,KAAA;IAAOC,IAAAA,EAAM;AAAO,CAAA;AAC1C,MAAMC,YAAAA,GAAeC,MAAAA,CAAOC,MAAM,CAACL,MAAAA,CAAAA;AAEnC,MAAMM,cAAc,CAACC,KAAAA,GAAkBJ,aAAaK,QAAQ,CAACD,MAAME,WAAW,EAAA,CAAA;AAC9E,MAAMC,aAAAA,GAAgB,CAACH,KAAAA,GACrBI,KAAAA,CAAMC,OAAO,CAACL,KAAAA,CAAAA,IAAUA,KAAAA,CAAMM,KAAK,CAACC,QAAAA,CAAAA;AACtC,MAAMC,aAAAA,GAAgB,CAACR,KAAAA,GACrBI,KAAAA,CAAMC,OAAO,CAACL,KAAAA,CAAAA,IAAUA,KAAAA,CAAMM,KAAK,CAACG,QAAAA,CAAAA;AACtC,MAAMC,aAAAA,GAAgB,CAACV,KAAAA,GACrBO,QAAAA,CAASP,KAAAA,CAAAA,IAAUA,MAAMW,KAAK,CAAC,GAAA,CAAA,CAAKC,MAAM,GAAG,CAAA;AAE/C,MAAMC,KAAAA,GAAQ,CAACb,KAAAA,GAAqDS,QAAAA,CAAST,KAAAA,CAAAA;AAE7E,MAAMc,IAAAA,GAAOC,eAAAA,EAAAA,CACVC,SAAS;AAERN,aAAAA,EACA,OAAOO,OAAAA,EAASC,OAAAA,EAASJ,IAAAA,EAAM,EAAEK,OAAO,EAAE,GAAA;AACxC,IAAA,OAAOC,OAAAA,CAAQC,GAAG,CAChBP,IAAAA,CACGH,KAAK,CAAC,GAAA,CAAA,CACNW,GAAG,CAACC,IAAAA,CAAAA,CACJD,GAAG,CAAC,CAACE,UAAAA,GAAeL,OAAAA,CAAQF,OAAAA,EAASC,OAAAA,EAASM,UAAAA,CAAAA,CAAAA,CAAAA,CACjDC,IAAI,CAAC,CAACC,MAAQA,GAAAA,CAAIC,MAAM,CAAC,CAACC,IAAAA,GAAS,CAACC,OAAAA,CAAQD,IAAAA,CAAAA,CAAAA,CAAOE,IAAI,CAAC,GAAA,CAAA,CAAA;AAC5D,CAAA,CAAA,CAEDd,SAAS;AAERb,aAAAA,EACA,OAAOc,OAAAA,EAASC,OAAAA,EAASJ,IAAAA,EAAM,EAAEK,OAAO,EAAE,GAAA;IACxC,OAAOC,OAAAA,CAAQC,GAAG,CAACP,IAAAA,CAAKQ,GAAG,CAAC,CAACE,UAAAA,GAAeL,OAAAA,CAAQF,OAAAA,EAASC,OAAAA,EAASM,cAAcC,IAAI,CACtF,CAACC,GAAAA,GAAQA,GAAAA,CAAIC,MAAM,CAAC,CAACH,UAAAA,GAAe,CAACK,OAAAA,CAAQL,UAAAA,CAAAA,CAAAA,CAAAA;AAEjD,CAAA,CAAA,CAEDR,SAAS;AAERR,aAAAA,EACA,OAAOS,OAAAA,EAASC,OAAAA,EAASJ,IAAAA,EAAM,EAAEK,OAAO,EAAE,GAAA;IACxC,OAAOC,OAAAA,CAAQC,GAAG,CAACP,IAAAA,CAAKQ,GAAG,CAAC,CAACE,UAAAA,GAAeL,OAAAA,CAAQF,OAAAA,EAASC,OAAAA,EAASM,cAAcC,IAAI,CACtF,CAACC,GAAAA,GAAQA,GAAAA,CAAIC,MAAM,CAAC,CAACH,UAAAA,GAAe,CAACK,OAAAA,CAAQL,UAAAA,CAAAA,CAAAA,CAAAA;AAEjD,CAAA,CAEF;AACCO,CAAAA,KAAK,CAACxB,QAAAA,EAAU,IAAA;AACf,IAAA,MAAMyB,WAAWC,IAAAA,CAAKtB,KAAAA,CAAM,GAAA,CAAA,EAAMW,GAAAA,CAAIX,MAAM,GAAA,CAAA,CAAA,EAAOuB,OAAAA,CAAAA;AACnD,IAAA,MAAMC,YAAY,CAACC,KAAAA,GAAAA;QACjB,IAAIA,KAAAA,CAAMxB,MAAM,KAAK,CAAA,EAAG;YACtB,OAAOyB,SAAAA;AACT,QAAA;AAEA,QAAA,OAAOD,KAAAA,CAAME,MAAM,CAAC,CAACC,GAAAA,EAAKX,IAAAA,GAAAA;AACxB,YAAA,IAAIC,QAAQD,IAAAA,CAAAA,EAAO;gBACjB,OAAOW,GAAAA;AACT,YAAA;AAEA,YAAA,IAAIA,QAAQ,EAAA,EAAI;gBACd,OAAOX,IAAAA;AACT,YAAA;AAEA,YAAA,OAAO7B,WAAAA,CAAY6B,IAAAA,CAAAA,GAAQ,CAAA,EAAGW,GAAAA,CAAI,CAAC,EAAEX,IAAAA,CAAAA,CAAM,GAAG,CAAA,EAAGW,GAAAA,CAAI,CAAC,EAAEX,IAAAA,CAAAA,CAAM;QAChE,CAAA,EAAG,EAAA,CAAA;AACL,IAAA,CAAA;IAEA,OAAO;QACLY,SAAAA,EAAWjB,IAAAA;QAEXkB,MAAAA,CAAAA,CAAOC,GAAG,EAAEC,IAAI,EAAA;YACd,MAAM,CAACC,IAAAA,CAAK,GAAGZ,QAAAA,CAASW,IAAAA,CAAAA;YAExB,OAAOC,IAAAA,KAASF,MAAML,SAAAA,GAAYM,IAAAA;AACpC,QAAA,CAAA;AAEAE,QAAAA,GAAAA,CAAAA,CAAIH,GAAG,EAAE1C,KAAK,EAAE2C,IAAI,EAAA;YAClB,MAAM,CAACC,IAAAA,CAAK,GAAGZ,QAAAA,CAASW,IAAAA,CAAAA;AAExB,YAAA,IAAIC,SAASF,GAAAA,EAAK;gBAChB,OAAOC,IAAAA;AACT,YAAA;AAEA,YAAA,OAAOG,MAAM9C,KAAAA,CAAAA,GAAS4C,IAAAA,GAAO,GAAGA,IAAAA,CAAK,CAAC,EAAE5C,KAAAA,CAAAA,CAAO;AACjD,QAAA,CAAA;AAEA+C,QAAAA,IAAAA,CAAAA,CAAKJ,IAAI,EAAA;YACP,MAAMK,CAAAA,GAAIC,MAAMjB,QAAAA,CAASW,IAAAA,CAAAA,CAAAA;AACzB,YAAA,OAAOK,CAAAA,GAAI;AAACA,gBAAAA;AAAE,aAAA,GAAG,EAAE;AACrB,QAAA,CAAA;QAEAE,GAAAA,CAAAA,CAAIR,GAAG,EAAEC,IAAI,EAAA;AACX,YAAA,MAAM,CAACC,IAAAA,EAAM,GAAGO,IAAAA,CAAK,GAAGnB,QAAAA,CAASW,IAAAA,CAAAA;YAEjC,OAAOD,GAAAA,KAAQE,IAAAA,GAAOT,SAAAA,CAAUgB,IAAAA,CAAAA,GAAQd,SAAAA;AAC1C,QAAA;AACF,KAAA;AACF,CAAA,CACA;CACCN,KAAK,CAAClB,KAAAA,EAAO,KAAO;QACnB2B,SAAAA,EAAWY,SAAAA;QAEXX,MAAAA,CAAAA,CAAOC,GAAG,EAAEC,IAAI,EAAA;;YAEd,MAAM,EAAE,CAACD,GAAAA,GAAMW,OAAO,EAAE,GAAGF,MAAM,GAAGR,IAAAA;YAEpC,OAAOQ,IAAAA;AACT,QAAA,CAAA;AAEAN,QAAAA,GAAAA,CAAAA,CAAIH,GAAG,EAAE1C,KAAK,EAAE2C,IAAI,EAAA;YAClB,OAAO;AAAE,gBAAA,GAAGA,IAAI;AAAE,gBAAA,CAACD,MAAM1C;AAAM,aAAA;AACjC,QAAA,CAAA;AAEA+C,QAAAA,IAAAA,CAAAA,CAAKJ,IAAI,EAAA;YACP,OAAO9C,MAAAA,CAAOkD,IAAI,CAACJ,IAAAA,CAAAA;AACrB,QAAA,CAAA;QAEAO,GAAAA,CAAAA,CAAIR,GAAG,EAAEC,IAAI,EAAA;YACX,OAAOA,IAAI,CAACD,GAAAA,CAAI;AAClB,QAAA;AACF,KAAA,EACA;CACCY,UAAU,CACT,OAAO,EAAEZ,GAAG,EAAE1C,KAAK,EAAEuD,SAAS,EAAEtC,OAAO,EAAEuC,IAAI,EAAEC,QAAQ,EAAEC,MAAM,EAAE,EAAE,EAAEb,GAAG,EAAE1B,OAAO,EAAE,GAAA;AACjF,IAAA,MAAMwC,kBAAkBJ,SAAAA,CAAUK,QAAQ,CAAC1D,WAAW,EAAA,CAAG2D,UAAU,CAAC,OAAA,CAAA;AAEpE,IAAA,IAAIF,eAAAA,EAAiB;AACnB,QAAA;AACF,IAAA;AAEA,IAAA,MAAMG,MAAAA,GAAiB;AAAEpB,QAAAA,GAAAA;AAAKc,QAAAA,IAAAA;AAAME,QAAAA,MAAAA;AAAQH,QAAAA;AAAU,KAAA;IAEtD,MAAMQ,eAAAA,GAAkBR,UAAUS,MAAM;AACxC,IAAA,MAAMC,eAAeR,QAAAA,CAASM,eAAAA,CAAAA;IAE9B,MAAMG,QAAAA,GAAW,MAAM/C,OAAAA,CACrBF,OAAAA,EACA;QAAEyC,MAAAA,EAAQO,YAAAA;AAAcT,QAAAA,IAAAA;AAAMC,QAAAA,QAAAA;AAAUK,QAAAA;KAAO,EAC/C9D,KAAAA,CAAAA;AAGF6C,IAAAA,GAAAA,CAAIH,GAAAA,EAAKwB,QAAAA,CAAAA;AACX,CAAA,CAEF;CACCC,OAAO,CAAC,OAAO,EAAEzB,GAAG,EAAEc,IAAI,EAAEE,MAAM,EAAEH,SAAS,EAAEtC,OAAO,EAAEjB,KAAK,EAAEyD,QAAQ,EAAE,EAAE,EAAEtC,OAAO,EAAE0B,GAAG,EAAE,GAAA;AAC1F,IAAA,MAAMiB,MAAAA,GAAiB;AAAEpB,QAAAA,GAAAA;AAAKc,QAAAA,IAAAA;AAAME,QAAAA,MAAAA;AAAQH,QAAAA;AAAU,KAAA;AAEtD,IAAA,MAAMQ,eAAAA,GAAkB,qBAAA;AACxB,IAAA,MAAME,eAAeR,QAAAA,CAASM,eAAAA,CAAAA;IAE9B,MAAMG,QAAAA,GAAW,MAAM/C,OAAAA,CACrBF,OAAAA,EACA;QAAEyC,MAAAA,EAAQO,YAAAA;AAAcT,QAAAA,IAAAA;AAAMC,QAAAA,QAAAA;AAAUK,QAAAA;KAAO,EAC/C9D,KAAAA,CAAAA;AAGF6C,IAAAA,GAAAA,CAAIH,GAAAA,EAAKwB,QAAAA,CAAAA;AACX,CAAA,CACA;CACCE,WAAW,CACV,OAAO,EAAE1B,GAAG,EAAE1C,KAAK,EAAEiB,OAAO,EAAEuC,IAAI,EAAEE,MAAM,EAAEH,SAAS,EAAEE,QAAQ,EAAE,EAAE,EAAEtC,OAAO,EAAE0B,GAAG,EAAE,GAAA;AACjF,IAAA,MAAMiB,MAAAA,GAAiB;AAAEpB,QAAAA,GAAAA;AAAKc,QAAAA,IAAAA;AAAME,QAAAA,MAAAA;AAAQH,QAAAA;AAAU,KAAA;IAEtD,MAAMU,YAAAA,GAAeR,QAAAA,CAASF,SAAAA,CAAUc,SAAS,CAAA;IAEjD,MAAMH,QAAAA,GAAW,MAAM/C,OAAAA,CACrBF,OAAAA,EACA;QAAEyC,MAAAA,EAAQO,YAAAA;AAAcT,QAAAA,IAAAA;AAAMC,QAAAA,QAAAA;AAAUK,QAAAA;KAAO,EAC/C9D,KAAAA,CAAAA;AAGF6C,IAAAA,GAAAA,CAAIH,GAAAA,EAAKwB,QAAAA,CAAAA;AACX,CAAA,CAAA;AAGJ,wBAAeI,KAAAA,CAAMxD,IAAAA,CAAKyD,QAAQ,CAAA;;;;"}