payload 3.70.0-canary.8 → 3.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"iterateGlobals.d.ts","sourceRoot":"","sources":["../../../src/bin/generateImportMap/iterateGlobals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAI5E,wBAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,OAAO,EACP,MAAM,EACN,OAAO,EACP,SAAS,EACT,OAAO,GACR,EAAE;IACD,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,EAAE,qBAAqB,EAAE,CAAA;IAChC,SAAS,EAAE,iBAAiB,CAAA;IAC5B,OAAO,EAAE,OAAO,CAAA;CACjB,QAkCA"}
1
+ {"version":3,"file":"iterateGlobals.d.ts","sourceRoot":"","sources":["../../../src/bin/generateImportMap/iterateGlobals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAI5E,wBAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,OAAO,EACP,MAAM,EACN,OAAO,EACP,SAAS,EACT,OAAO,GACR,EAAE;IACD,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,EAAE,qBAAqB,EAAE,CAAA;IAChC,SAAS,EAAE,iBAAiB,CAAA;IAC5B,OAAO,EAAE,OAAO,CAAA;CACjB,QAmCA"}
@@ -9,6 +9,7 @@ export function iterateGlobals({ addToImportMap, baseDir, config, globals, impor
9
9
  importMap,
10
10
  imports
11
11
  });
12
+ addToImportMap(global.admin?.components?.elements?.beforeDocumentControls);
12
13
  addToImportMap(global.admin?.components?.elements?.Description);
13
14
  addToImportMap(global.admin?.components?.elements?.PreviewButton);
14
15
  addToImportMap(global.admin?.components?.elements?.PublishButton);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/bin/generateImportMap/iterateGlobals.ts"],"sourcesContent":["import type { SanitizedConfig } from '../../config/types.js'\nimport type { SanitizedGlobalConfig } from '../../globals/config/types.js'\nimport type { AddToImportMap, Imports, InternalImportMap } from './index.js'\n\nimport { genImportMapIterateFields } from './iterateFields.js'\n\nexport function iterateGlobals({\n addToImportMap,\n baseDir,\n config,\n globals,\n importMap,\n imports,\n}: {\n addToImportMap: AddToImportMap\n baseDir: string\n config: SanitizedConfig\n globals: SanitizedGlobalConfig[]\n importMap: InternalImportMap\n imports: Imports\n}) {\n for (const global of globals) {\n genImportMapIterateFields({\n addToImportMap,\n baseDir,\n config,\n fields: global.fields,\n importMap,\n imports,\n })\n\n addToImportMap(global.admin?.components?.elements?.Description)\n addToImportMap(global.admin?.components?.elements?.PreviewButton)\n addToImportMap(global.admin?.components?.elements?.PublishButton)\n addToImportMap(global.admin?.components?.elements?.SaveButton)\n addToImportMap(global.admin?.components?.elements?.SaveDraftButton)\n\n if (global.admin?.components?.views?.edit) {\n for (const editViewConfig of Object.values(global.admin?.components?.views?.edit)) {\n if ('Component' in editViewConfig) {\n addToImportMap(editViewConfig?.Component)\n }\n\n if ('actions' in editViewConfig) {\n addToImportMap(editViewConfig?.actions)\n }\n\n if ('tab' in editViewConfig) {\n addToImportMap(editViewConfig?.tab?.Component)\n addToImportMap(editViewConfig?.tab?.Pill)\n }\n }\n }\n }\n}\n"],"names":["genImportMapIterateFields","iterateGlobals","addToImportMap","baseDir","config","globals","importMap","imports","global","fields","admin","components","elements","Description","PreviewButton","PublishButton","SaveButton","SaveDraftButton","views","edit","editViewConfig","Object","values","Component","actions","tab","Pill"],"mappings":"AAIA,SAASA,yBAAyB,QAAQ,qBAAoB;AAE9D,OAAO,SAASC,eAAe,EAC7BC,cAAc,EACdC,OAAO,EACPC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,OAAO,EAQR;IACC,KAAK,MAAMC,UAAUH,QAAS;QAC5BL,0BAA0B;YACxBE;YACAC;YACAC;YACAK,QAAQD,OAAOC,MAAM;YACrBH;YACAC;QACF;QAEAL,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUC;QACnDX,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUE;QACnDZ,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUG;QACnDb,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUI;QACnDd,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUK;QAEnD,IAAIT,OAAOE,KAAK,EAAEC,YAAYO,OAAOC,MAAM;YACzC,KAAK,MAAMC,kBAAkBC,OAAOC,MAAM,CAACd,OAAOE,KAAK,EAAEC,YAAYO,OAAOC,MAAO;gBACjF,IAAI,eAAeC,gBAAgB;oBACjClB,eAAekB,gBAAgBG;gBACjC;gBAEA,IAAI,aAAaH,gBAAgB;oBAC/BlB,eAAekB,gBAAgBI;gBACjC;gBAEA,IAAI,SAASJ,gBAAgB;oBAC3BlB,eAAekB,gBAAgBK,KAAKF;oBACpCrB,eAAekB,gBAAgBK,KAAKC;gBACtC;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/bin/generateImportMap/iterateGlobals.ts"],"sourcesContent":["import type { SanitizedConfig } from '../../config/types.js'\nimport type { SanitizedGlobalConfig } from '../../globals/config/types.js'\nimport type { AddToImportMap, Imports, InternalImportMap } from './index.js'\n\nimport { genImportMapIterateFields } from './iterateFields.js'\n\nexport function iterateGlobals({\n addToImportMap,\n baseDir,\n config,\n globals,\n importMap,\n imports,\n}: {\n addToImportMap: AddToImportMap\n baseDir: string\n config: SanitizedConfig\n globals: SanitizedGlobalConfig[]\n importMap: InternalImportMap\n imports: Imports\n}) {\n for (const global of globals) {\n genImportMapIterateFields({\n addToImportMap,\n baseDir,\n config,\n fields: global.fields,\n importMap,\n imports,\n })\n\n addToImportMap(global.admin?.components?.elements?.beforeDocumentControls)\n addToImportMap(global.admin?.components?.elements?.Description)\n addToImportMap(global.admin?.components?.elements?.PreviewButton)\n addToImportMap(global.admin?.components?.elements?.PublishButton)\n addToImportMap(global.admin?.components?.elements?.SaveButton)\n addToImportMap(global.admin?.components?.elements?.SaveDraftButton)\n\n if (global.admin?.components?.views?.edit) {\n for (const editViewConfig of Object.values(global.admin?.components?.views?.edit)) {\n if ('Component' in editViewConfig) {\n addToImportMap(editViewConfig?.Component)\n }\n\n if ('actions' in editViewConfig) {\n addToImportMap(editViewConfig?.actions)\n }\n\n if ('tab' in editViewConfig) {\n addToImportMap(editViewConfig?.tab?.Component)\n addToImportMap(editViewConfig?.tab?.Pill)\n }\n }\n }\n }\n}\n"],"names":["genImportMapIterateFields","iterateGlobals","addToImportMap","baseDir","config","globals","importMap","imports","global","fields","admin","components","elements","beforeDocumentControls","Description","PreviewButton","PublishButton","SaveButton","SaveDraftButton","views","edit","editViewConfig","Object","values","Component","actions","tab","Pill"],"mappings":"AAIA,SAASA,yBAAyB,QAAQ,qBAAoB;AAE9D,OAAO,SAASC,eAAe,EAC7BC,cAAc,EACdC,OAAO,EACPC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,OAAO,EAQR;IACC,KAAK,MAAMC,UAAUH,QAAS;QAC5BL,0BAA0B;YACxBE;YACAC;YACAC;YACAK,QAAQD,OAAOC,MAAM;YACrBH;YACAC;QACF;QAEAL,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUC;QACnDX,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUE;QACnDZ,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUG;QACnDb,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUI;QACnDd,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUK;QACnDf,eAAeM,OAAOE,KAAK,EAAEC,YAAYC,UAAUM;QAEnD,IAAIV,OAAOE,KAAK,EAAEC,YAAYQ,OAAOC,MAAM;YACzC,KAAK,MAAMC,kBAAkBC,OAAOC,MAAM,CAACf,OAAOE,KAAK,EAAEC,YAAYQ,OAAOC,MAAO;gBACjF,IAAI,eAAeC,gBAAgB;oBACjCnB,eAAemB,gBAAgBG;gBACjC;gBAEA,IAAI,aAAaH,gBAAgB;oBAC/BnB,eAAemB,gBAAgBI;gBACjC;gBAEA,IAAI,SAASJ,gBAAgB;oBAC3BnB,eAAemB,gBAAgBK,KAAKF;oBACpCtB,eAAemB,gBAAgBK,KAAKC;gBACtC;YACF;QACF;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"findVersions.d.ts","sourceRoot":"","sources":["../../../src/globals/endpoints/findVersions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAU3D,eAAO,MAAM,mBAAmB,EAAE,cAiCjC,CAAA"}
1
+ {"version":3,"file":"findVersions.d.ts","sourceRoot":"","sources":["../../../src/globals/endpoints/findVersions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAW3D,eAAO,MAAM,mBAAmB,EAAE,cAiCjC,CAAA"}
@@ -4,6 +4,7 @@ import { headersWithCors } from '../../utilities/headersWithCors.js';
4
4
  import { isNumber } from '../../utilities/isNumber.js';
5
5
  import { sanitizePopulateParam } from '../../utilities/sanitizePopulateParam.js';
6
6
  import { sanitizeSelectParam } from '../../utilities/sanitizeSelectParam.js';
7
+ import { sanitizeSortParams } from '../../utilities/sanitizeSortParams.js';
7
8
  import { findVersionsOperation } from '../operations/findVersions.js';
8
9
  export const findVersionsHandler = async (req)=>{
9
10
  const globalConfig = getRequestGlobal(req);
@@ -17,7 +18,7 @@ export const findVersionsHandler = async (req)=>{
17
18
  populate: sanitizePopulateParam(populate),
18
19
  req,
19
20
  select: sanitizeSelectParam(select),
20
- sort: typeof sort === 'string' ? sort.split(',') : undefined,
21
+ sort: sanitizeSortParams(sort),
21
22
  where
22
23
  });
23
24
  return Response.json(result, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/globals/endpoints/findVersions.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { PayloadHandler } from '../../config/types.js'\nimport type { Where } from '../../types/index.js'\n\nimport { getRequestGlobal } from '../../utilities/getRequestEntity.js'\nimport { headersWithCors } from '../../utilities/headersWithCors.js'\nimport { isNumber } from '../../utilities/isNumber.js'\nimport { sanitizePopulateParam } from '../../utilities/sanitizePopulateParam.js'\nimport { sanitizeSelectParam } from '../../utilities/sanitizeSelectParam.js'\nimport { findVersionsOperation } from '../operations/findVersions.js'\n\nexport const findVersionsHandler: PayloadHandler = async (req) => {\n const globalConfig = getRequestGlobal(req)\n const { depth, limit, page, pagination, populate, select, sort, where } = req.query as {\n depth?: string\n limit?: string\n page?: string\n pagination?: string\n populate?: Record<string, unknown>\n select?: Record<string, unknown>\n sort?: string\n where?: Where\n }\n\n const result = await findVersionsOperation({\n depth: isNumber(depth) ? Number(depth) : undefined,\n globalConfig,\n limit: isNumber(limit) ? Number(limit) : undefined,\n page: isNumber(page) ? Number(page) : undefined,\n pagination: pagination === 'false' ? false : undefined,\n populate: sanitizePopulateParam(populate),\n req,\n select: sanitizeSelectParam(select),\n sort: typeof sort === 'string' ? sort.split(',') : undefined,\n where,\n })\n\n return Response.json(result, {\n headers: headersWithCors({\n headers: new Headers(),\n req,\n }),\n status: httpStatus.OK,\n })\n}\n"],"names":["status","httpStatus","getRequestGlobal","headersWithCors","isNumber","sanitizePopulateParam","sanitizeSelectParam","findVersionsOperation","findVersionsHandler","req","globalConfig","depth","limit","page","pagination","populate","select","sort","where","query","result","Number","undefined","split","Response","json","headers","Headers","OK"],"mappings":"AAAA,SAASA,UAAUC,UAAU,QAAQ,cAAa;AAKlD,SAASC,gBAAgB,QAAQ,sCAAqC;AACtE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,QAAQ,QAAQ,8BAA6B;AACtD,SAASC,qBAAqB,QAAQ,2CAA0C;AAChF,SAASC,mBAAmB,QAAQ,yCAAwC;AAC5E,SAASC,qBAAqB,QAAQ,gCAA+B;AAErE,OAAO,MAAMC,sBAAsC,OAAOC;IACxD,MAAMC,eAAeR,iBAAiBO;IACtC,MAAM,EAAEE,KAAK,EAAEC,KAAK,EAAEC,IAAI,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGT,IAAIU,KAAK;IAWnF,MAAMC,SAAS,MAAMb,sBAAsB;QACzCI,OAAOP,SAASO,SAASU,OAAOV,SAASW;QACzCZ;QACAE,OAAOR,SAASQ,SAASS,OAAOT,SAASU;QACzCT,MAAMT,SAASS,QAAQQ,OAAOR,QAAQS;QACtCR,YAAYA,eAAe,UAAU,QAAQQ;QAC7CP,UAAUV,sBAAsBU;QAChCN;QACAO,QAAQV,oBAAoBU;QAC5BC,MAAM,OAAOA,SAAS,WAAWA,KAAKM,KAAK,CAAC,OAAOD;QACnDJ;IACF;IAEA,OAAOM,SAASC,IAAI,CAACL,QAAQ;QAC3BM,SAASvB,gBAAgB;YACvBuB,SAAS,IAAIC;YACblB;QACF;QACAT,QAAQC,WAAW2B,EAAE;IACvB;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/globals/endpoints/findVersions.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { PayloadHandler } from '../../config/types.js'\nimport type { Where } from '../../types/index.js'\n\nimport { getRequestGlobal } from '../../utilities/getRequestEntity.js'\nimport { headersWithCors } from '../../utilities/headersWithCors.js'\nimport { isNumber } from '../../utilities/isNumber.js'\nimport { sanitizePopulateParam } from '../../utilities/sanitizePopulateParam.js'\nimport { sanitizeSelectParam } from '../../utilities/sanitizeSelectParam.js'\nimport { sanitizeSortParams } from '../../utilities/sanitizeSortParams.js'\nimport { findVersionsOperation } from '../operations/findVersions.js'\n\nexport const findVersionsHandler: PayloadHandler = async (req) => {\n const globalConfig = getRequestGlobal(req)\n const { depth, limit, page, pagination, populate, select, sort, where } = req.query as {\n depth?: string\n limit?: string\n page?: string\n pagination?: string\n populate?: Record<string, unknown>\n select?: Record<string, unknown>\n sort?: string | string[]\n where?: Where\n }\n\n const result = await findVersionsOperation({\n depth: isNumber(depth) ? Number(depth) : undefined,\n globalConfig,\n limit: isNumber(limit) ? Number(limit) : undefined,\n page: isNumber(page) ? Number(page) : undefined,\n pagination: pagination === 'false' ? false : undefined,\n populate: sanitizePopulateParam(populate),\n req,\n select: sanitizeSelectParam(select),\n sort: sanitizeSortParams(sort),\n where,\n })\n\n return Response.json(result, {\n headers: headersWithCors({\n headers: new Headers(),\n req,\n }),\n status: httpStatus.OK,\n })\n}\n"],"names":["status","httpStatus","getRequestGlobal","headersWithCors","isNumber","sanitizePopulateParam","sanitizeSelectParam","sanitizeSortParams","findVersionsOperation","findVersionsHandler","req","globalConfig","depth","limit","page","pagination","populate","select","sort","where","query","result","Number","undefined","Response","json","headers","Headers","OK"],"mappings":"AAAA,SAASA,UAAUC,UAAU,QAAQ,cAAa;AAKlD,SAASC,gBAAgB,QAAQ,sCAAqC;AACtE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,QAAQ,QAAQ,8BAA6B;AACtD,SAASC,qBAAqB,QAAQ,2CAA0C;AAChF,SAASC,mBAAmB,QAAQ,yCAAwC;AAC5E,SAASC,kBAAkB,QAAQ,wCAAuC;AAC1E,SAASC,qBAAqB,QAAQ,gCAA+B;AAErE,OAAO,MAAMC,sBAAsC,OAAOC;IACxD,MAAMC,eAAeT,iBAAiBQ;IACtC,MAAM,EAAEE,KAAK,EAAEC,KAAK,EAAEC,IAAI,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGT,IAAIU,KAAK;IAWnF,MAAMC,SAAS,MAAMb,sBAAsB;QACzCI,OAAOR,SAASQ,SAASU,OAAOV,SAASW;QACzCZ;QACAE,OAAOT,SAASS,SAASS,OAAOT,SAASU;QACzCT,MAAMV,SAASU,QAAQQ,OAAOR,QAAQS;QACtCR,YAAYA,eAAe,UAAU,QAAQQ;QAC7CP,UAAUX,sBAAsBW;QAChCN;QACAO,QAAQX,oBAAoBW;QAC5BC,MAAMX,mBAAmBW;QACzBC;IACF;IAEA,OAAOK,SAASC,IAAI,CAACJ,QAAQ;QAC3BK,SAASvB,gBAAgB;YACvBuB,SAAS,IAAIC;YACbjB;QACF;QACAV,QAAQC,WAAW2B,EAAE;IACvB;AACF,EAAC"}
@@ -37,7 +37,7 @@ type RawParams = {
37
37
  publishSpecificLocale?: string;
38
38
  select?: unknown;
39
39
  selectedLocales?: string;
40
- sort?: string;
40
+ sort?: string | string[];
41
41
  trash?: string;
42
42
  where?: Where;
43
43
  };
@@ -48,7 +48,7 @@ export declare const numberParams: string[];
48
48
  * Examples:
49
49
  * a. `draft` provided as a string of "true" is converted to a boolean
50
50
  * b. `depth` provided as a string of "0" is converted to a number
51
- * c. `sort` provided as a comma-separated string is converted to an array of strings
51
+ * c. `sort` provided as a comma-separated string or array is converted to an array of strings
52
52
  */
53
53
  export declare const parseParams: (params: RawParams) => ParsedParams;
54
54
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utilities/parseParams/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAQ1D,KAAK,YAAY,GAAG;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE3B,KAAK,SAAS,GAAG;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,eAAO,MAAM,aAAa,UAOzB,CAAA;AAED,eAAO,MAAM,YAAY,UAA6B,CAAA;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,WAAY,SAAS,KAAG,YAuC/C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utilities/parseParams/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAS1D,KAAK,YAAY,GAAG;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE3B,KAAK,SAAS,GAAG;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,eAAO,MAAM,aAAa,UAOzB,CAAA;AAED,eAAO,MAAM,YAAY,UAA6B,CAAA;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,WAAY,SAAS,KAAG,YAuC/C,CAAA"}
@@ -3,6 +3,7 @@ import { parseBooleanString } from '../parseBooleanString.js';
3
3
  import { sanitizeJoinParams } from '../sanitizeJoinParams.js';
4
4
  import { sanitizePopulateParam } from '../sanitizePopulateParam.js';
5
5
  import { sanitizeSelectParam } from '../sanitizeSelectParam.js';
6
+ import { sanitizeSortParams } from '../sanitizeSortParams.js';
6
7
  export const booleanParams = [
7
8
  'autosave',
8
9
  'draft',
@@ -21,7 +22,7 @@ export const numberParams = [
21
22
  * Examples:
22
23
  * a. `draft` provided as a string of "true" is converted to a boolean
23
24
  * b. `depth` provided as a string of "0" is converted to a number
24
- * c. `sort` provided as a comma-separated string is converted to an array of strings
25
+ * c. `sort` provided as a comma-separated string or array is converted to an array of strings
25
26
  */ export const parseParams = (params)=>{
26
27
  const parsedParams = params || {};
27
28
  // iterate through known params to make this very fast
@@ -47,7 +48,7 @@ export const numberParams = [
47
48
  parsedParams.joins = sanitizeJoinParams(params.joins);
48
49
  }
49
50
  if ('sort' in params) {
50
- parsedParams.sort = typeof params.sort === 'string' ? params.sort.split(',') : undefined;
51
+ parsedParams.sort = sanitizeSortParams(params.sort);
51
52
  }
52
53
  if ('data' in params && typeof params.data === 'string' && params.data.length > 0) {
53
54
  parsedParams.data = JSON.parse(params.data);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utilities/parseParams/index.ts"],"sourcesContent":["import type { JoinQuery, PopulateType, SelectType, Where } from '../../types/index.js'\nimport type { JoinParams } from '../sanitizeJoinParams.js'\n\nimport { isNumber } from '../isNumber.js'\nimport { parseBooleanString } from '../parseBooleanString.js'\nimport { sanitizeJoinParams } from '../sanitizeJoinParams.js'\nimport { sanitizePopulateParam } from '../sanitizePopulateParam.js'\nimport { sanitizeSelectParam } from '../sanitizeSelectParam.js'\n\ntype ParsedParams = {\n autosave?: boolean\n data?: Record<string, unknown>\n depth?: number\n draft?: boolean\n field?: string\n flattenLocales?: boolean\n joins?: JoinQuery\n limit?: number\n overrideLock?: boolean\n page?: number\n pagination?: boolean\n populate?: PopulateType\n publishSpecificLocale?: string\n select?: SelectType\n selectedLocales?: string[]\n sort?: string[]\n trash?: boolean\n where?: Where\n} & Record<string, unknown>\n\ntype RawParams = {\n [key: string]: unknown\n autosave?: string\n data?: string\n depth?: string\n draft?: string\n field?: string\n flattenLocales?: string\n joins?: JoinParams\n limit?: string\n overrideLock?: string\n page?: string\n pagination?: string\n populate?: unknown\n publishSpecificLocale?: string\n select?: unknown\n selectedLocales?: string\n sort?: string\n trash?: string\n where?: Where\n}\n\nexport const booleanParams = [\n 'autosave',\n 'draft',\n 'trash',\n 'overrideLock',\n 'pagination',\n 'flattenLocales',\n]\n\nexport const numberParams = ['depth', 'limit', 'page']\n\n/**\n * Takes raw query parameters and parses them into the correct types that Payload expects.\n * Examples:\n * a. `draft` provided as a string of \"true\" is converted to a boolean\n * b. `depth` provided as a string of \"0\" is converted to a number\n * c. `sort` provided as a comma-separated string is converted to an array of strings\n */\nexport const parseParams = (params: RawParams): ParsedParams => {\n const parsedParams = (params || {}) as ParsedParams\n\n // iterate through known params to make this very fast\n for (const key of booleanParams) {\n if (key in params) {\n parsedParams[key] = parseBooleanString(params[key] as boolean | string)\n }\n }\n\n for (const key of numberParams) {\n if (key in params) {\n if (isNumber(params[key])) {\n parsedParams[key] = Number(params[key])\n }\n }\n }\n\n if ('populate' in params) {\n parsedParams.populate = sanitizePopulateParam(params.populate)\n }\n\n if ('select' in params) {\n parsedParams.select = sanitizeSelectParam(params.select)\n }\n\n if ('joins' in params) {\n parsedParams.joins = sanitizeJoinParams(params.joins as JoinParams)\n }\n\n if ('sort' in params) {\n parsedParams.sort = typeof params.sort === 'string' ? params.sort.split(',') : undefined\n }\n\n if ('data' in params && typeof params.data === 'string' && params.data.length > 0) {\n parsedParams.data = JSON.parse(params.data)\n }\n\n return parsedParams\n}\n"],"names":["isNumber","parseBooleanString","sanitizeJoinParams","sanitizePopulateParam","sanitizeSelectParam","booleanParams","numberParams","parseParams","params","parsedParams","key","Number","populate","select","joins","sort","split","undefined","data","length","JSON","parse"],"mappings":"AAGA,SAASA,QAAQ,QAAQ,iBAAgB;AACzC,SAASC,kBAAkB,QAAQ,2BAA0B;AAC7D,SAASC,kBAAkB,QAAQ,2BAA0B;AAC7D,SAASC,qBAAqB,QAAQ,8BAA6B;AACnE,SAASC,mBAAmB,QAAQ,4BAA2B;AA6C/D,OAAO,MAAMC,gBAAgB;IAC3B;IACA;IACA;IACA;IACA;IACA;CACD,CAAA;AAED,OAAO,MAAMC,eAAe;IAAC;IAAS;IAAS;CAAO,CAAA;AAEtD;;;;;;CAMC,GACD,OAAO,MAAMC,cAAc,CAACC;IAC1B,MAAMC,eAAgBD,UAAU,CAAC;IAEjC,sDAAsD;IACtD,KAAK,MAAME,OAAOL,cAAe;QAC/B,IAAIK,OAAOF,QAAQ;YACjBC,YAAY,CAACC,IAAI,GAAGT,mBAAmBO,MAAM,CAACE,IAAI;QACpD;IACF;IAEA,KAAK,MAAMA,OAAOJ,aAAc;QAC9B,IAAII,OAAOF,QAAQ;YACjB,IAAIR,SAASQ,MAAM,CAACE,IAAI,GAAG;gBACzBD,YAAY,CAACC,IAAI,GAAGC,OAAOH,MAAM,CAACE,IAAI;YACxC;QACF;IACF;IAEA,IAAI,cAAcF,QAAQ;QACxBC,aAAaG,QAAQ,GAAGT,sBAAsBK,OAAOI,QAAQ;IAC/D;IAEA,IAAI,YAAYJ,QAAQ;QACtBC,aAAaI,MAAM,GAAGT,oBAAoBI,OAAOK,MAAM;IACzD;IAEA,IAAI,WAAWL,QAAQ;QACrBC,aAAaK,KAAK,GAAGZ,mBAAmBM,OAAOM,KAAK;IACtD;IAEA,IAAI,UAAUN,QAAQ;QACpBC,aAAaM,IAAI,GAAG,OAAOP,OAAOO,IAAI,KAAK,WAAWP,OAAOO,IAAI,CAACC,KAAK,CAAC,OAAOC;IACjF;IAEA,IAAI,UAAUT,UAAU,OAAOA,OAAOU,IAAI,KAAK,YAAYV,OAAOU,IAAI,CAACC,MAAM,GAAG,GAAG;QACjFV,aAAaS,IAAI,GAAGE,KAAKC,KAAK,CAACb,OAAOU,IAAI;IAC5C;IAEA,OAAOT;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/utilities/parseParams/index.ts"],"sourcesContent":["import type { JoinQuery, PopulateType, SelectType, Where } from '../../types/index.js'\nimport type { JoinParams } from '../sanitizeJoinParams.js'\n\nimport { isNumber } from '../isNumber.js'\nimport { parseBooleanString } from '../parseBooleanString.js'\nimport { sanitizeJoinParams } from '../sanitizeJoinParams.js'\nimport { sanitizePopulateParam } from '../sanitizePopulateParam.js'\nimport { sanitizeSelectParam } from '../sanitizeSelectParam.js'\nimport { sanitizeSortParams } from '../sanitizeSortParams.js'\n\ntype ParsedParams = {\n autosave?: boolean\n data?: Record<string, unknown>\n depth?: number\n draft?: boolean\n field?: string\n flattenLocales?: boolean\n joins?: JoinQuery\n limit?: number\n overrideLock?: boolean\n page?: number\n pagination?: boolean\n populate?: PopulateType\n publishSpecificLocale?: string\n select?: SelectType\n selectedLocales?: string[]\n sort?: string[]\n trash?: boolean\n where?: Where\n} & Record<string, unknown>\n\ntype RawParams = {\n [key: string]: unknown\n autosave?: string\n data?: string\n depth?: string\n draft?: string\n field?: string\n flattenLocales?: string\n joins?: JoinParams\n limit?: string\n overrideLock?: string\n page?: string\n pagination?: string\n populate?: unknown\n publishSpecificLocale?: string\n select?: unknown\n selectedLocales?: string\n sort?: string | string[]\n trash?: string\n where?: Where\n}\n\nexport const booleanParams = [\n 'autosave',\n 'draft',\n 'trash',\n 'overrideLock',\n 'pagination',\n 'flattenLocales',\n]\n\nexport const numberParams = ['depth', 'limit', 'page']\n\n/**\n * Takes raw query parameters and parses them into the correct types that Payload expects.\n * Examples:\n * a. `draft` provided as a string of \"true\" is converted to a boolean\n * b. `depth` provided as a string of \"0\" is converted to a number\n * c. `sort` provided as a comma-separated string or array is converted to an array of strings\n */\nexport const parseParams = (params: RawParams): ParsedParams => {\n const parsedParams = (params || {}) as ParsedParams\n\n // iterate through known params to make this very fast\n for (const key of booleanParams) {\n if (key in params) {\n parsedParams[key] = parseBooleanString(params[key] as boolean | string)\n }\n }\n\n for (const key of numberParams) {\n if (key in params) {\n if (isNumber(params[key])) {\n parsedParams[key] = Number(params[key])\n }\n }\n }\n\n if ('populate' in params) {\n parsedParams.populate = sanitizePopulateParam(params.populate)\n }\n\n if ('select' in params) {\n parsedParams.select = sanitizeSelectParam(params.select)\n }\n\n if ('joins' in params) {\n parsedParams.joins = sanitizeJoinParams(params.joins as JoinParams)\n }\n\n if ('sort' in params) {\n parsedParams.sort = sanitizeSortParams(params.sort)\n }\n\n if ('data' in params && typeof params.data === 'string' && params.data.length > 0) {\n parsedParams.data = JSON.parse(params.data)\n }\n\n return parsedParams\n}\n"],"names":["isNumber","parseBooleanString","sanitizeJoinParams","sanitizePopulateParam","sanitizeSelectParam","sanitizeSortParams","booleanParams","numberParams","parseParams","params","parsedParams","key","Number","populate","select","joins","sort","data","length","JSON","parse"],"mappings":"AAGA,SAASA,QAAQ,QAAQ,iBAAgB;AACzC,SAASC,kBAAkB,QAAQ,2BAA0B;AAC7D,SAASC,kBAAkB,QAAQ,2BAA0B;AAC7D,SAASC,qBAAqB,QAAQ,8BAA6B;AACnE,SAASC,mBAAmB,QAAQ,4BAA2B;AAC/D,SAASC,kBAAkB,QAAQ,2BAA0B;AA6C7D,OAAO,MAAMC,gBAAgB;IAC3B;IACA;IACA;IACA;IACA;IACA;CACD,CAAA;AAED,OAAO,MAAMC,eAAe;IAAC;IAAS;IAAS;CAAO,CAAA;AAEtD;;;;;;CAMC,GACD,OAAO,MAAMC,cAAc,CAACC;IAC1B,MAAMC,eAAgBD,UAAU,CAAC;IAEjC,sDAAsD;IACtD,KAAK,MAAME,OAAOL,cAAe;QAC/B,IAAIK,OAAOF,QAAQ;YACjBC,YAAY,CAACC,IAAI,GAAGV,mBAAmBQ,MAAM,CAACE,IAAI;QACpD;IACF;IAEA,KAAK,MAAMA,OAAOJ,aAAc;QAC9B,IAAII,OAAOF,QAAQ;YACjB,IAAIT,SAASS,MAAM,CAACE,IAAI,GAAG;gBACzBD,YAAY,CAACC,IAAI,GAAGC,OAAOH,MAAM,CAACE,IAAI;YACxC;QACF;IACF;IAEA,IAAI,cAAcF,QAAQ;QACxBC,aAAaG,QAAQ,GAAGV,sBAAsBM,OAAOI,QAAQ;IAC/D;IAEA,IAAI,YAAYJ,QAAQ;QACtBC,aAAaI,MAAM,GAAGV,oBAAoBK,OAAOK,MAAM;IACzD;IAEA,IAAI,WAAWL,QAAQ;QACrBC,aAAaK,KAAK,GAAGb,mBAAmBO,OAAOM,KAAK;IACtD;IAEA,IAAI,UAAUN,QAAQ;QACpBC,aAAaM,IAAI,GAAGX,mBAAmBI,OAAOO,IAAI;IACpD;IAEA,IAAI,UAAUP,UAAU,OAAOA,OAAOQ,IAAI,KAAK,YAAYR,OAAOQ,IAAI,CAACC,MAAM,GAAG,GAAG;QACjFR,aAAaO,IAAI,GAAGE,KAAKC,KAAK,CAACX,OAAOQ,IAAI;IAC5C;IAEA,OAAOP;AACT,EAAC"}
@@ -1,3 +1,4 @@
1
+ import * as qs from 'qs-esm';
1
2
  import { describe, it, expect } from 'vitest';
2
3
  import { parseParams, booleanParams, numberParams } from './index.js';
3
4
  describe('parseParams', ()=>{
@@ -134,12 +135,47 @@ describe('parseParams', ()=>{
134
135
  ' -updatedAt'
135
136
  ]);
136
137
  });
138
+ it('should parse array of strings', ()=>{
139
+ const result = parseParams({
140
+ sort: [
141
+ 'name',
142
+ '-createdAt'
143
+ ]
144
+ });
145
+ expect(result.sort).toEqual([
146
+ 'name',
147
+ '-createdAt'
148
+ ]);
149
+ });
137
150
  it('should return undefined for non-string sort values', ()=>{
138
151
  const result = parseParams({
139
152
  sort: 123
140
153
  });
141
154
  expect(result.sort).toBeUndefined();
142
155
  });
156
+ it('should return undefined for array with non-string sort values', ()=>{
157
+ const result = parseParams({
158
+ sort: [
159
+ 'name',
160
+ 123
161
+ ]
162
+ });
163
+ expect(result.sort).toBeUndefined();
164
+ });
165
+ it('should handle qs-esm array sort parsing', ()=>{
166
+ const query = qs.stringify({
167
+ sort: [
168
+ 'title',
169
+ '-createdAt'
170
+ ]
171
+ });
172
+ const parsed = qs.parse(query);
173
+ const result = parseParams(parsed);
174
+ expect(result.sort).toEqual([
175
+ 'title',
176
+ '-createdAt'
177
+ ]);
178
+ });
143
179
  it('should return undefined for null sort values', ()=>{
144
180
  const result = parseParams({
145
181
  sort: null
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utilities/parseParams/index.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { parseParams, booleanParams, numberParams } from './index.js'\n\ndescribe('parseParams', () => {\n describe('boolean parameters', () => {\n booleanParams.forEach((param) => {\n describe(param, () => {\n it('should parse string \"true\" to boolean true', () => {\n const result = parseParams({ [param]: 'true' })\n expect(result[param]).toBe(true)\n })\n\n it('should parse string \"false\" to boolean false', () => {\n const result = parseParams({ [param]: 'false' })\n expect(result[param]).toBe(false)\n })\n\n it('should parse boolean true to boolean true', () => {\n const result = parseParams({ [param]: true })\n expect(result[param]).toBe(true)\n })\n\n it('should parse boolean false to boolean false', () => {\n const result = parseParams({ [param]: false })\n expect(result[param]).toBe(false)\n })\n\n it('should return undefined for truthy strings (not exact \"true\")', () => {\n const result = parseParams({ [param]: '1' })\n expect(result[param]).toBeUndefined()\n })\n\n it('should return undefined for falsy strings (not exact \"false\")', () => {\n const result = parseParams({ [param]: '0' })\n expect(result[param]).toBeUndefined()\n })\n\n it('should return undefined for empty string', () => {\n const result = parseParams({ [param]: '' })\n expect(result[param]).toBeUndefined()\n })\n })\n })\n })\n\n describe('number parameters', () => {\n numberParams.forEach((param) => {\n describe(param, () => {\n it('should parse valid number string to number', () => {\n const result = parseParams({ [param]: '42' })\n expect(result[param]).toBe(42)\n })\n\n it('should parse zero string to zero', () => {\n const result = parseParams({ [param]: '0' })\n expect(result[param]).toBe(0)\n })\n\n it('should parse negative number string to negative number', () => {\n const result = parseParams({ [param]: '-5' })\n expect(result[param]).toBe(-5)\n })\n\n it('should parse decimal number string to decimal number', () => {\n const result = parseParams({ [param]: '3.14' })\n expect(result[param]).toBe(3.14)\n })\n\n it('should not parse invalid number strings', () => {\n const result = parseParams({ [param]: 'not-a-number' })\n expect(result[param]).toBe('not-a-number') // remains as string\n })\n\n it('should not parse empty string', () => {\n const result = parseParams({ [param]: '' })\n expect(result[param]).toBe('') // remains as string\n })\n\n it('should handle already numeric values', () => {\n const result = parseParams({ [param]: 123 })\n expect(result[param]).toBe(123)\n })\n })\n })\n })\n\n describe('sort parameter', () => {\n it('should parse comma-separated string to array', () => {\n const result = parseParams({ sort: 'name,createdAt,-updatedAt' })\n expect(result.sort).toEqual(['name', 'createdAt', '-updatedAt'])\n })\n\n it('should parse single value string to array with one element', () => {\n const result = parseParams({ sort: 'name' })\n expect(result.sort).toEqual(['name'])\n })\n\n it('should handle empty string', () => {\n const result = parseParams({ sort: '' })\n expect(result.sort).toEqual([''])\n })\n\n it('should handle comma-separated string with spaces', () => {\n const result = parseParams({ sort: 'name, createdAt , -updatedAt' })\n expect(result.sort).toEqual(['name', ' createdAt ', ' -updatedAt'])\n })\n\n it('should return undefined for non-string sort values', () => {\n const result = parseParams({ sort: 123 as any })\n expect(result.sort).toBeUndefined()\n })\n\n it('should return undefined for null sort values', () => {\n const result = parseParams({ sort: null as any })\n expect(result.sort).toBeUndefined()\n })\n })\n\n describe('data parameter', () => {\n it('should parse valid JSON string', () => {\n const data = { name: 'test', value: 42 }\n const result = parseParams({ data: JSON.stringify(data) })\n expect(result.data).toEqual(data)\n })\n\n it('should parse empty object JSON string', () => {\n const result = parseParams({ data: '{}' })\n expect(result.data).toEqual({})\n })\n\n it('should parse array JSON string', () => {\n const data = [1, 2, 3]\n const result = parseParams({ data: JSON.stringify(data) })\n expect(result.data).toEqual(data)\n })\n\n it('should not process empty string', () => {\n const result = parseParams({ data: '' })\n expect(result.data).toBe('') // empty string is not processed, remains as string\n })\n\n it('should throw error for invalid JSON', () => {\n expect(() => {\n parseParams({ data: 'invalid-json' })\n }).toThrow()\n })\n\n it('should not process non-string data values', () => {\n const result = parseParams({ data: { already: 'parsed' } as any })\n expect(result.data).toEqual({ already: 'parsed' })\n })\n })\n\n describe('special parameters', () => {\n it('should handle populate parameter', () => {\n const result = parseParams({ populate: 'field1,field2' })\n expect(result).toHaveProperty('populate')\n // Note: actual sanitization logic is tested in sanitizePopulateParam tests\n })\n\n it('should handle select parameter', () => {\n const result = parseParams({ select: 'field1,field2' })\n expect(result).toHaveProperty('select')\n // Note: actual sanitization logic is tested in sanitizeSelectParam tests\n })\n\n it('should handle joins parameter', () => {\n const joins = { collection: 'posts' }\n const result = parseParams({ joins })\n expect(result).toHaveProperty('joins')\n // Note: actual sanitization logic is tested in sanitizeJoinParams tests\n })\n })\n\n describe('selectedLocales parameter', () => {\n it('should pass through selectedLocales as-is', () => {\n const selectedLocales = 'en,es,fr'\n const result = parseParams({ selectedLocales })\n expect(result.selectedLocales).toBe(selectedLocales)\n })\n })\n\n describe('publishSpecificLocale parameter', () => {\n it('should pass through publishSpecificLocale as-is', () => {\n const publishSpecificLocale = 'en'\n const result = parseParams({ publishSpecificLocale })\n expect(result.publishSpecificLocale).toBe(publishSpecificLocale)\n })\n })\n\n describe('field parameter', () => {\n it('should pass through field as-is', () => {\n const field = 'myField'\n const result = parseParams({ field })\n expect(result.field).toBe(field)\n })\n })\n\n describe('where parameter', () => {\n it('should pass through where as-is', () => {\n const where = { name: { equals: 'test' } }\n const result = parseParams({ where })\n expect(result.where).toBe(where)\n })\n })\n\n describe('edge cases', () => {\n it('should handle empty params object', () => {\n const result = parseParams({})\n expect(result).toEqual({})\n })\n\n it('should throw error for null params (current implementation bug)', () => {\n expect(() => {\n parseParams(null as any)\n }).toThrow(TypeError)\n })\n\n it('should throw error for undefined params (current implementation bug)', () => {\n expect(() => {\n parseParams(undefined as any)\n }).toThrow(TypeError)\n })\n\n it('should preserve unknown parameters', () => {\n const result = parseParams({ customParam: 'customValue' })\n expect(result.customParam).toBe('customValue')\n })\n\n it('should handle mixed parameter types', () => {\n const result = parseParams({\n draft: 'true',\n depth: '5',\n sort: 'name,createdAt',\n data: '{\"test\": true}',\n customParam: 'custom',\n })\n\n expect(result.draft).toBe(true)\n expect(result.depth).toBe(5)\n expect(result.sort).toEqual(['name', 'createdAt'])\n expect(result.data).toEqual({ test: true })\n expect(result.customParam).toBe('custom')\n })\n })\n\n describe('parameter preservation', () => {\n it('should not modify parameters that are not in known lists', () => {\n const params = {\n unknownBoolean: 'true',\n unknownNumber: '42',\n unknownString: 'test',\n }\n const result = parseParams(params)\n\n expect(result.unknownBoolean).toBe('true') // should remain string\n expect(result.unknownNumber).toBe('42') // should remain string\n expect(result.unknownString).toBe('test')\n })\n\n it('should only process parameters that exist in the input', () => {\n const result = parseParams({ draft: 'true' })\n\n expect(result.draft).toBe(true)\n expect(result).not.toHaveProperty('autosave')\n expect(result).not.toHaveProperty('depth')\n expect(result).not.toHaveProperty('sort')\n })\n })\n})\n"],"names":["describe","it","expect","parseParams","booleanParams","numberParams","forEach","param","result","toBe","toBeUndefined","sort","toEqual","data","name","value","JSON","stringify","toThrow","already","populate","toHaveProperty","select","joins","collection","selectedLocales","publishSpecificLocale","field","where","equals","TypeError","undefined","customParam","draft","depth","test","params","unknownBoolean","unknownNumber","unknownString","not"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utilities/parseParams/index.spec.ts"],"sourcesContent":["import * as qs from 'qs-esm'\nimport { describe, it, expect } from 'vitest'\nimport { parseParams, booleanParams, numberParams } from './index.js'\n\ndescribe('parseParams', () => {\n describe('boolean parameters', () => {\n booleanParams.forEach((param) => {\n describe(param, () => {\n it('should parse string \"true\" to boolean true', () => {\n const result = parseParams({ [param]: 'true' })\n expect(result[param]).toBe(true)\n })\n\n it('should parse string \"false\" to boolean false', () => {\n const result = parseParams({ [param]: 'false' })\n expect(result[param]).toBe(false)\n })\n\n it('should parse boolean true to boolean true', () => {\n const result = parseParams({ [param]: true })\n expect(result[param]).toBe(true)\n })\n\n it('should parse boolean false to boolean false', () => {\n const result = parseParams({ [param]: false })\n expect(result[param]).toBe(false)\n })\n\n it('should return undefined for truthy strings (not exact \"true\")', () => {\n const result = parseParams({ [param]: '1' })\n expect(result[param]).toBeUndefined()\n })\n\n it('should return undefined for falsy strings (not exact \"false\")', () => {\n const result = parseParams({ [param]: '0' })\n expect(result[param]).toBeUndefined()\n })\n\n it('should return undefined for empty string', () => {\n const result = parseParams({ [param]: '' })\n expect(result[param]).toBeUndefined()\n })\n })\n })\n })\n\n describe('number parameters', () => {\n numberParams.forEach((param) => {\n describe(param, () => {\n it('should parse valid number string to number', () => {\n const result = parseParams({ [param]: '42' })\n expect(result[param]).toBe(42)\n })\n\n it('should parse zero string to zero', () => {\n const result = parseParams({ [param]: '0' })\n expect(result[param]).toBe(0)\n })\n\n it('should parse negative number string to negative number', () => {\n const result = parseParams({ [param]: '-5' })\n expect(result[param]).toBe(-5)\n })\n\n it('should parse decimal number string to decimal number', () => {\n const result = parseParams({ [param]: '3.14' })\n expect(result[param]).toBe(3.14)\n })\n\n it('should not parse invalid number strings', () => {\n const result = parseParams({ [param]: 'not-a-number' })\n expect(result[param]).toBe('not-a-number') // remains as string\n })\n\n it('should not parse empty string', () => {\n const result = parseParams({ [param]: '' })\n expect(result[param]).toBe('') // remains as string\n })\n\n it('should handle already numeric values', () => {\n const result = parseParams({ [param]: 123 })\n expect(result[param]).toBe(123)\n })\n })\n })\n })\n\n describe('sort parameter', () => {\n it('should parse comma-separated string to array', () => {\n const result = parseParams({ sort: 'name,createdAt,-updatedAt' })\n expect(result.sort).toEqual(['name', 'createdAt', '-updatedAt'])\n })\n\n it('should parse single value string to array with one element', () => {\n const result = parseParams({ sort: 'name' })\n expect(result.sort).toEqual(['name'])\n })\n\n it('should handle empty string', () => {\n const result = parseParams({ sort: '' })\n expect(result.sort).toEqual([''])\n })\n\n it('should handle comma-separated string with spaces', () => {\n const result = parseParams({ sort: 'name, createdAt , -updatedAt' })\n expect(result.sort).toEqual(['name', ' createdAt ', ' -updatedAt'])\n })\n\n it('should parse array of strings', () => {\n const result = parseParams({ sort: ['name', '-createdAt'] })\n expect(result.sort).toEqual(['name', '-createdAt'])\n })\n\n it('should return undefined for non-string sort values', () => {\n const result = parseParams({ sort: 123 as any })\n expect(result.sort).toBeUndefined()\n })\n\n it('should return undefined for array with non-string sort values', () => {\n const result = parseParams({ sort: ['name', 123] as any })\n expect(result.sort).toBeUndefined()\n })\n\n it('should handle qs-esm array sort parsing', () => {\n const query = qs.stringify({ sort: ['title', '-createdAt'] })\n const parsed = qs.parse(query)\n const result = parseParams(parsed)\n expect(result.sort).toEqual(['title', '-createdAt'])\n })\n\n it('should return undefined for null sort values', () => {\n const result = parseParams({ sort: null as any })\n expect(result.sort).toBeUndefined()\n })\n })\n\n describe('data parameter', () => {\n it('should parse valid JSON string', () => {\n const data = { name: 'test', value: 42 }\n const result = parseParams({ data: JSON.stringify(data) })\n expect(result.data).toEqual(data)\n })\n\n it('should parse empty object JSON string', () => {\n const result = parseParams({ data: '{}' })\n expect(result.data).toEqual({})\n })\n\n it('should parse array JSON string', () => {\n const data = [1, 2, 3]\n const result = parseParams({ data: JSON.stringify(data) })\n expect(result.data).toEqual(data)\n })\n\n it('should not process empty string', () => {\n const result = parseParams({ data: '' })\n expect(result.data).toBe('') // empty string is not processed, remains as string\n })\n\n it('should throw error for invalid JSON', () => {\n expect(() => {\n parseParams({ data: 'invalid-json' })\n }).toThrow()\n })\n\n it('should not process non-string data values', () => {\n const result = parseParams({ data: { already: 'parsed' } as any })\n expect(result.data).toEqual({ already: 'parsed' })\n })\n })\n\n describe('special parameters', () => {\n it('should handle populate parameter', () => {\n const result = parseParams({ populate: 'field1,field2' })\n expect(result).toHaveProperty('populate')\n // Note: actual sanitization logic is tested in sanitizePopulateParam tests\n })\n\n it('should handle select parameter', () => {\n const result = parseParams({ select: 'field1,field2' })\n expect(result).toHaveProperty('select')\n // Note: actual sanitization logic is tested in sanitizeSelectParam tests\n })\n\n it('should handle joins parameter', () => {\n const joins = { collection: 'posts' }\n const result = parseParams({ joins })\n expect(result).toHaveProperty('joins')\n // Note: actual sanitization logic is tested in sanitizeJoinParams tests\n })\n })\n\n describe('selectedLocales parameter', () => {\n it('should pass through selectedLocales as-is', () => {\n const selectedLocales = 'en,es,fr'\n const result = parseParams({ selectedLocales })\n expect(result.selectedLocales).toBe(selectedLocales)\n })\n })\n\n describe('publishSpecificLocale parameter', () => {\n it('should pass through publishSpecificLocale as-is', () => {\n const publishSpecificLocale = 'en'\n const result = parseParams({ publishSpecificLocale })\n expect(result.publishSpecificLocale).toBe(publishSpecificLocale)\n })\n })\n\n describe('field parameter', () => {\n it('should pass through field as-is', () => {\n const field = 'myField'\n const result = parseParams({ field })\n expect(result.field).toBe(field)\n })\n })\n\n describe('where parameter', () => {\n it('should pass through where as-is', () => {\n const where = { name: { equals: 'test' } }\n const result = parseParams({ where })\n expect(result.where).toBe(where)\n })\n })\n\n describe('edge cases', () => {\n it('should handle empty params object', () => {\n const result = parseParams({})\n expect(result).toEqual({})\n })\n\n it('should throw error for null params (current implementation bug)', () => {\n expect(() => {\n parseParams(null as any)\n }).toThrow(TypeError)\n })\n\n it('should throw error for undefined params (current implementation bug)', () => {\n expect(() => {\n parseParams(undefined as any)\n }).toThrow(TypeError)\n })\n\n it('should preserve unknown parameters', () => {\n const result = parseParams({ customParam: 'customValue' })\n expect(result.customParam).toBe('customValue')\n })\n\n it('should handle mixed parameter types', () => {\n const result = parseParams({\n draft: 'true',\n depth: '5',\n sort: 'name,createdAt',\n data: '{\"test\": true}',\n customParam: 'custom',\n })\n\n expect(result.draft).toBe(true)\n expect(result.depth).toBe(5)\n expect(result.sort).toEqual(['name', 'createdAt'])\n expect(result.data).toEqual({ test: true })\n expect(result.customParam).toBe('custom')\n })\n })\n\n describe('parameter preservation', () => {\n it('should not modify parameters that are not in known lists', () => {\n const params = {\n unknownBoolean: 'true',\n unknownNumber: '42',\n unknownString: 'test',\n }\n const result = parseParams(params)\n\n expect(result.unknownBoolean).toBe('true') // should remain string\n expect(result.unknownNumber).toBe('42') // should remain string\n expect(result.unknownString).toBe('test')\n })\n\n it('should only process parameters that exist in the input', () => {\n const result = parseParams({ draft: 'true' })\n\n expect(result.draft).toBe(true)\n expect(result).not.toHaveProperty('autosave')\n expect(result).not.toHaveProperty('depth')\n expect(result).not.toHaveProperty('sort')\n })\n })\n})\n"],"names":["qs","describe","it","expect","parseParams","booleanParams","numberParams","forEach","param","result","toBe","toBeUndefined","sort","toEqual","query","stringify","parsed","parse","data","name","value","JSON","toThrow","already","populate","toHaveProperty","select","joins","collection","selectedLocales","publishSpecificLocale","field","where","equals","TypeError","undefined","customParam","draft","depth","test","params","unknownBoolean","unknownNumber","unknownString","not"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const sanitizeSortParams: (sort: unknown) => string[] | undefined;
2
+ //# sourceMappingURL=sanitizeSortParams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizeSortParams.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizeSortParams.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,SAAU,OAAO,KAAG,MAAM,EAAE,GAAG,SAU7D,CAAA"}
@@ -0,0 +1,11 @@
1
+ export const sanitizeSortParams = (sort)=>{
2
+ if (typeof sort === 'string') {
3
+ return sort.split(',');
4
+ }
5
+ if (Array.isArray(sort) && sort.every((value)=>typeof value === 'string')) {
6
+ return sort;
7
+ }
8
+ return undefined;
9
+ };
10
+
11
+ //# sourceMappingURL=sanitizeSortParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/sanitizeSortParams.ts"],"sourcesContent":["export const sanitizeSortParams = (sort: unknown): string[] | undefined => {\n if (typeof sort === 'string') {\n return sort.split(',')\n }\n\n if (Array.isArray(sort) && sort.every((value) => typeof value === 'string')) {\n return sort\n }\n\n return undefined\n}\n"],"names":["sanitizeSortParams","sort","split","Array","isArray","every","value","undefined"],"mappings":"AAAA,OAAO,MAAMA,qBAAqB,CAACC;IACjC,IAAI,OAAOA,SAAS,UAAU;QAC5B,OAAOA,KAAKC,KAAK,CAAC;IACpB;IAEA,IAAIC,MAAMC,OAAO,CAACH,SAASA,KAAKI,KAAK,CAAC,CAACC,QAAU,OAAOA,UAAU,WAAW;QAC3E,OAAOL;IACT;IAEA,OAAOM;AACT,EAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.70.0-canary.8",
3
+ "version": "3.70.0",
4
4
  "description": "Node, React, Headless CMS and Application Framework built on Next.js",
5
5
  "keywords": [
6
6
  "admin panel",
@@ -111,7 +111,7 @@
111
111
  "undici": "7.10.0",
112
112
  "uuid": "10.0.0",
113
113
  "ws": "^8.16.0",
114
- "@payloadcms/translations": "3.70.0-canary.8"
114
+ "@payloadcms/translations": "3.70.0"
115
115
  },
116
116
  "devDependencies": {
117
117
  "@hyrious/esbuild-plugin-commonjs": "0.2.6",