@webiny/api-headless-cms-storage 0.0.0-unstable.5387e5f7c8 → 0.0.0-unstable.9609e4e0c9

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.
@@ -4,6 +4,8 @@ import type { FieldFilterPathRegistry } from "../../features/fieldFilterPath/abs
4
4
  import type { FieldFilterValueTransformRegistry } from "../../features/fieldFilterValueTransform/abstractions.js";
5
5
  interface Params {
6
6
  fields: CmsModelField[];
7
+ /** Fields registered as `CmsEntrySystemField`, filterable under `system`. */
8
+ systemFields?: CmsModelField[];
7
9
  pathRegistry: FieldFilterPathRegistry.Interface;
8
10
  transformRegistry: FieldFilterValueTransformRegistry.Interface;
9
11
  }
@@ -51,9 +51,9 @@ const createFieldCollection = (params)=>{
51
51
  }, {});
52
52
  };
53
53
  const createFields = (params)=>{
54
- const { fields, pathRegistry, transformRegistry } = params;
54
+ const { fields, systemFields, pathRegistry, transformRegistry } = params;
55
55
  const collection = createFieldCollection({
56
- fields: createSystemFields(),
56
+ fields: createSystemFields(systemFields),
57
57
  pathRegistry,
58
58
  transformRegistry,
59
59
  parents: [],
@@ -1 +1 @@
1
- {"version":3,"file":"filtering/fields/createFields.js","sources":["../../../src/filtering/fields/createFields.ts"],"sourcesContent":["import type { CmsModelField } from \"@webiny/api-headless-cms/types/index.js\";\nimport { createSystemFields } from \"./systemFields.js\";\nimport type { Field, FieldParent } from \"./types.js\";\nimport type { FieldFilterPathRegistry } from \"../../features/fieldFilterPath/abstractions.js\";\nimport type { FieldFilterValueTransformRegistry } from \"../../features/fieldFilterValueTransform/abstractions.js\";\nimport { getBaseFieldType } from \"@webiny/api-headless-cms/utils/getBaseFieldType.js\";\n\ninterface Params {\n fields: CmsModelField[];\n pathRegistry: FieldFilterPathRegistry.Interface;\n transformRegistry: FieldFilterValueTransformRegistry.Interface;\n}\n\ninterface FieldCollection {\n [key: string]: Field;\n}\n\ninterface AddFieldsToCollectionParams {\n fields: CmsModelField[];\n parents: FieldParent[];\n pathRegistry: FieldFilterPathRegistry.Interface;\n transformRegistry: FieldFilterValueTransformRegistry.Interface;\n system: boolean;\n}\n\nconst createFieldCollection = (params: AddFieldsToCollectionParams): FieldCollection => {\n const { fields, parents, pathRegistry, transformRegistry, system } = params;\n return fields.reduce<FieldCollection>((collection, field) => {\n const fieldType = getBaseFieldType(field);\n const transformHandler = transformRegistry.get(fieldType);\n const pathHandler = pathRegistry.get(fieldType);\n\n const fieldId = [\n ...parents,\n {\n fieldId: field.fieldId,\n list: field.list\n }\n ]\n .map(f => f.fieldId)\n .join(\".\");\n\n collection[fieldId] = {\n ...field,\n parents,\n system,\n createPath: pathParams => {\n if (\n pathHandler &&\n pathHandler.canUse(\n field,\n parents.map(p => p.fieldId)\n )\n ) {\n return pathHandler.createPath(pathParams);\n }\n\n return parents\n .map(parent => parent.fieldId)\n .concat([pathParams.field.fieldId])\n .join(\".\");\n },\n transform: value => {\n if (!transformHandler) {\n return value;\n }\n return transformHandler.transform({\n field,\n value\n });\n }\n };\n const childFields = field.settings?.fields;\n if (!childFields?.length) {\n return collection;\n }\n\n const result = createFieldCollection({\n fields: childFields,\n parents: [\n ...parents,\n {\n fieldId: field.fieldId,\n list: field.list\n }\n ],\n pathRegistry,\n transformRegistry,\n system\n });\n Object.assign(collection, result);\n return collection;\n }, {});\n};\n\nexport const createFields = (params: Params) => {\n const { fields, pathRegistry, transformRegistry } = params;\n\n const collection = createFieldCollection({\n fields: createSystemFields(),\n pathRegistry,\n transformRegistry,\n parents: [],\n system: true\n });\n\n const result = createFieldCollection({\n fields,\n pathRegistry,\n transformRegistry,\n parents: [\n {\n fieldId: \"values\",\n list: false\n }\n ],\n system: false\n });\n\n return {\n ...collection,\n ...result\n };\n};\n"],"names":["createFieldCollection","params","fields","parents","pathRegistry","transformRegistry","system","collection","field","fieldType","getBaseFieldType","transformHandler","pathHandler","fieldId","f","pathParams","p","parent","value","childFields","result","Object","createFields","createSystemFields"],"mappings":";;AAyBA,MAAMA,wBAAwB,CAACC;IAC3B,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAEC,YAAY,EAAEC,iBAAiB,EAAEC,MAAM,EAAE,GAAGL;IACrE,OAAOC,OAAO,MAAM,CAAkB,CAACK,YAAYC;QAC/C,MAAMC,YAAYC,iBAAiBF;QACnC,MAAMG,mBAAmBN,kBAAkB,GAAG,CAACI;QAC/C,MAAMG,cAAcR,aAAa,GAAG,CAACK;QAErC,MAAMI,UAAU;eACTV;YACH;gBACI,SAASK,MAAM,OAAO;gBACtB,MAAMA,MAAM,IAAI;YACpB;SACH,CACI,GAAG,CAACM,CAAAA,IAAKA,EAAE,OAAO,EAClB,IAAI,CAAC;QAEVP,UAAU,CAACM,QAAQ,GAAG;YAClB,GAAGL,KAAK;YACRL;YACAG;YACA,YAAYS,CAAAA;gBACR,IACIH,eACAA,YAAY,MAAM,CACdJ,OACAL,QAAQ,GAAG,CAACa,CAAAA,IAAKA,EAAE,OAAO,IAG9B,OAAOJ,YAAY,UAAU,CAACG;gBAGlC,OAAOZ,QACF,GAAG,CAACc,CAAAA,SAAUA,OAAO,OAAO,EAC5B,MAAM,CAAC;oBAACF,WAAW,KAAK,CAAC,OAAO;iBAAC,EACjC,IAAI,CAAC;YACd;YACA,WAAWG,CAAAA;gBACP,IAAI,CAACP,kBACD,OAAOO;gBAEX,OAAOP,iBAAiB,SAAS,CAAC;oBAC9BH;oBACAU;gBACJ;YACJ;QACJ;QACA,MAAMC,cAAcX,MAAM,QAAQ,EAAE;QACpC,IAAI,CAACW,aAAa,QACd,OAAOZ;QAGX,MAAMa,SAASpB,sBAAsB;YACjC,QAAQmB;YACR,SAAS;mBACFhB;gBACH;oBACI,SAASK,MAAM,OAAO;oBACtB,MAAMA,MAAM,IAAI;gBACpB;aACH;YACDJ;YACAC;YACAC;QACJ;QACAe,OAAO,MAAM,CAACd,YAAYa;QAC1B,OAAOb;IACX,GAAG,CAAC;AACR;AAEO,MAAMe,eAAe,CAACrB;IACzB,MAAM,EAAEC,MAAM,EAAEE,YAAY,EAAEC,iBAAiB,EAAE,GAAGJ;IAEpD,MAAMM,aAAaP,sBAAsB;QACrC,QAAQuB;QACRnB;QACAC;QACA,SAAS,EAAE;QACX,QAAQ;IACZ;IAEA,MAAMe,SAASpB,sBAAsB;QACjCE;QACAE;QACAC;QACA,SAAS;YACL;gBACI,SAAS;gBACT,MAAM;YACV;SACH;QACD,QAAQ;IACZ;IAEA,OAAO;QACH,GAAGE,UAAU;QACb,GAAGa,MAAM;IACb;AACJ"}
1
+ {"version":3,"file":"filtering/fields/createFields.js","sources":["../../../src/filtering/fields/createFields.ts"],"sourcesContent":["import type { CmsModelField } from \"@webiny/api-headless-cms/types/index.js\";\nimport { createSystemFields } from \"./systemFields.js\";\nimport type { Field, FieldParent } from \"./types.js\";\nimport type { FieldFilterPathRegistry } from \"../../features/fieldFilterPath/abstractions.js\";\nimport type { FieldFilterValueTransformRegistry } from \"../../features/fieldFilterValueTransform/abstractions.js\";\nimport { getBaseFieldType } from \"@webiny/api-headless-cms/utils/getBaseFieldType.js\";\n\ninterface Params {\n fields: CmsModelField[];\n /** Fields registered as `CmsEntrySystemField`, filterable under `system`. */\n systemFields?: CmsModelField[];\n pathRegistry: FieldFilterPathRegistry.Interface;\n transformRegistry: FieldFilterValueTransformRegistry.Interface;\n}\n\ninterface FieldCollection {\n [key: string]: Field;\n}\n\ninterface AddFieldsToCollectionParams {\n fields: CmsModelField[];\n parents: FieldParent[];\n pathRegistry: FieldFilterPathRegistry.Interface;\n transformRegistry: FieldFilterValueTransformRegistry.Interface;\n system: boolean;\n}\n\nconst createFieldCollection = (params: AddFieldsToCollectionParams): FieldCollection => {\n const { fields, parents, pathRegistry, transformRegistry, system } = params;\n return fields.reduce<FieldCollection>((collection, field) => {\n const fieldType = getBaseFieldType(field);\n const transformHandler = transformRegistry.get(fieldType);\n const pathHandler = pathRegistry.get(fieldType);\n\n const fieldId = [\n ...parents,\n {\n fieldId: field.fieldId,\n list: field.list\n }\n ]\n .map(f => f.fieldId)\n .join(\".\");\n\n collection[fieldId] = {\n ...field,\n parents,\n system,\n createPath: pathParams => {\n if (\n pathHandler &&\n pathHandler.canUse(\n field,\n parents.map(p => p.fieldId)\n )\n ) {\n return pathHandler.createPath(pathParams);\n }\n\n return parents\n .map(parent => parent.fieldId)\n .concat([pathParams.field.fieldId])\n .join(\".\");\n },\n transform: value => {\n if (!transformHandler) {\n return value;\n }\n return transformHandler.transform({\n field,\n value\n });\n }\n };\n const childFields = field.settings?.fields;\n if (!childFields?.length) {\n return collection;\n }\n\n const result = createFieldCollection({\n fields: childFields,\n parents: [\n ...parents,\n {\n fieldId: field.fieldId,\n list: field.list\n }\n ],\n pathRegistry,\n transformRegistry,\n system\n });\n Object.assign(collection, result);\n return collection;\n }, {});\n};\n\nexport const createFields = (params: Params) => {\n const { fields, systemFields, pathRegistry, transformRegistry } = params;\n\n const collection = createFieldCollection({\n fields: createSystemFields(systemFields),\n pathRegistry,\n transformRegistry,\n parents: [],\n system: true\n });\n\n const result = createFieldCollection({\n fields,\n pathRegistry,\n transformRegistry,\n parents: [\n {\n fieldId: \"values\",\n list: false\n }\n ],\n system: false\n });\n\n return {\n ...collection,\n ...result\n };\n};\n"],"names":["createFieldCollection","params","fields","parents","pathRegistry","transformRegistry","system","collection","field","fieldType","getBaseFieldType","transformHandler","pathHandler","fieldId","f","pathParams","p","parent","value","childFields","result","Object","createFields","systemFields","createSystemFields"],"mappings":";;AA2BA,MAAMA,wBAAwB,CAACC;IAC3B,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAEC,YAAY,EAAEC,iBAAiB,EAAEC,MAAM,EAAE,GAAGL;IACrE,OAAOC,OAAO,MAAM,CAAkB,CAACK,YAAYC;QAC/C,MAAMC,YAAYC,iBAAiBF;QACnC,MAAMG,mBAAmBN,kBAAkB,GAAG,CAACI;QAC/C,MAAMG,cAAcR,aAAa,GAAG,CAACK;QAErC,MAAMI,UAAU;eACTV;YACH;gBACI,SAASK,MAAM,OAAO;gBACtB,MAAMA,MAAM,IAAI;YACpB;SACH,CACI,GAAG,CAACM,CAAAA,IAAKA,EAAE,OAAO,EAClB,IAAI,CAAC;QAEVP,UAAU,CAACM,QAAQ,GAAG;YAClB,GAAGL,KAAK;YACRL;YACAG;YACA,YAAYS,CAAAA;gBACR,IACIH,eACAA,YAAY,MAAM,CACdJ,OACAL,QAAQ,GAAG,CAACa,CAAAA,IAAKA,EAAE,OAAO,IAG9B,OAAOJ,YAAY,UAAU,CAACG;gBAGlC,OAAOZ,QACF,GAAG,CAACc,CAAAA,SAAUA,OAAO,OAAO,EAC5B,MAAM,CAAC;oBAACF,WAAW,KAAK,CAAC,OAAO;iBAAC,EACjC,IAAI,CAAC;YACd;YACA,WAAWG,CAAAA;gBACP,IAAI,CAACP,kBACD,OAAOO;gBAEX,OAAOP,iBAAiB,SAAS,CAAC;oBAC9BH;oBACAU;gBACJ;YACJ;QACJ;QACA,MAAMC,cAAcX,MAAM,QAAQ,EAAE;QACpC,IAAI,CAACW,aAAa,QACd,OAAOZ;QAGX,MAAMa,SAASpB,sBAAsB;YACjC,QAAQmB;YACR,SAAS;mBACFhB;gBACH;oBACI,SAASK,MAAM,OAAO;oBACtB,MAAMA,MAAM,IAAI;gBACpB;aACH;YACDJ;YACAC;YACAC;QACJ;QACAe,OAAO,MAAM,CAACd,YAAYa;QAC1B,OAAOb;IACX,GAAG,CAAC;AACR;AAEO,MAAMe,eAAe,CAACrB;IACzB,MAAM,EAAEC,MAAM,EAAEqB,YAAY,EAAEnB,YAAY,EAAEC,iBAAiB,EAAE,GAAGJ;IAElE,MAAMM,aAAaP,sBAAsB;QACrC,QAAQwB,mBAAmBD;QAC3BnB;QACAC;QACA,SAAS,EAAE;QACX,QAAQ;IACZ;IAEA,MAAMe,SAASpB,sBAAsB;QACjCE;QACAE;QACAC;QACA,SAAS;YACL;gBACI,SAAS;gBACT,MAAM;YACV;SACH;QACD,QAAQ;IACZ;IAEA,OAAO;QACH,GAAGE,UAAU;QACb,GAAGa,MAAM;IACb;AACJ"}
@@ -40,7 +40,7 @@ const extractSort = (params)=>{
40
40
  field,
41
41
  fields
42
42
  });
43
- if (!field) throw new error("Sorting field does not exist in the content model.", "SORTING_FIELD_ERROR", {
43
+ else if (!field) throw new error("Sorting field does not exist in the content model.", "SORTING_FIELD_ERROR", {
44
44
  fieldId,
45
45
  fields
46
46
  });
@@ -1 +1 @@
1
- {"version":3,"file":"filtering/fields/extractSort.js","sources":["../../../src/filtering/fields/extractSort.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { Field } from \"./types.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { FieldSortingRegistry } from \"../../features/fieldSorting/abstractions.js\";\n\nconst extractSortInfo = (sortBy: string) => {\n const rootSorting = sortBy.match(/^([a-zA-Z]+)_(ASC|DESC)$/);\n if (rootSorting) {\n return {\n fieldId: rootSorting[1],\n isValues: false,\n order: rootSorting[2] as \"ASC\" | \"DESC\"\n };\n }\n const valuesSorting = sortBy.match(/^values_([a-zA-Z0-9]+)_(ASC|DESC)$/);\n if (valuesSorting) {\n return {\n fieldId: valuesSorting[1],\n isValues: true,\n order: valuesSorting[2] as \"ASC\" | \"DESC\"\n };\n }\n throw new WebinyError(\n \"Problem in determining the sorting for the entry items.\",\n \"SORT_EXTRACT_ERROR\",\n {\n sortBy\n }\n );\n};\n\ninterface IResponse {\n valuePath: string;\n reverse: boolean;\n fieldId: string;\n field: Field;\n}\n\ninterface IParams {\n model: CmsModel;\n sortBy: string;\n fields: Record<string, Field>;\n sortingRegistry: FieldSortingRegistry.Interface;\n}\n\nexport const extractSort = (params: IParams): IResponse => {\n const { model, sortBy, fields, sortingRegistry } = params;\n const { fieldId, isValues: isValuesSorting, order } = extractSortInfo(sortBy);\n\n const field = Object.values(fields).find(f => {\n const isValues = f.parents[0]?.fieldId === \"values\";\n if (isValues && isValuesSorting) {\n return f.fieldId === fieldId;\n }\n if (f.parents.length > 0) {\n return false;\n }\n return f.fieldId === fieldId;\n });\n\n const handler = sortingRegistry.find({\n model,\n field,\n fieldId,\n order,\n sortBy\n });\n\n if (handler) {\n return handler.createSort({\n model,\n fieldId,\n order,\n sortBy,\n field,\n fields\n });\n } else if (!field) {\n throw new WebinyError(\n \"Sorting field does not exist in the content model.\",\n \"SORTING_FIELD_ERROR\",\n {\n fieldId,\n fields\n }\n );\n }\n const valuePath = field.createPath({\n field\n });\n return {\n field,\n fieldId,\n valuePath,\n reverse: order === \"DESC\"\n };\n};\n"],"names":["extractSortInfo","sortBy","rootSorting","valuesSorting","WebinyError","extractSort","params","model","fields","sortingRegistry","fieldId","isValuesSorting","order","field","Object","f","isValues","handler","valuePath"],"mappings":";AAKA,MAAMA,kBAAkB,CAACC;IACrB,MAAMC,cAAcD,OAAO,KAAK,CAAC;IACjC,IAAIC,aACA,OAAO;QACH,SAASA,WAAW,CAAC,EAAE;QACvB,UAAU;QACV,OAAOA,WAAW,CAAC,EAAE;IACzB;IAEJ,MAAMC,gBAAgBF,OAAO,KAAK,CAAC;IACnC,IAAIE,eACA,OAAO;QACH,SAASA,aAAa,CAAC,EAAE;QACzB,UAAU;QACV,OAAOA,aAAa,CAAC,EAAE;IAC3B;IAEJ,MAAM,IAAIC,MACN,2DACA,sBACA;QACIH;IACJ;AAER;AAgBO,MAAMI,cAAc,CAACC;IACxB,MAAM,EAAEC,KAAK,EAAEN,MAAM,EAAEO,MAAM,EAAEC,eAAe,EAAE,GAAGH;IACnD,MAAM,EAAEI,OAAO,EAAE,UAAUC,eAAe,EAAEC,KAAK,EAAE,GAAGZ,gBAAgBC;IAEtE,MAAMY,QAAQC,OAAO,MAAM,CAACN,QAAQ,IAAI,CAACO,CAAAA;QACrC,MAAMC,WAAWD,EAAE,OAAO,CAAC,EAAE,EAAE,YAAY;QAC3C,IAAIC,YAAYL,iBACZ,OAAOI,EAAE,OAAO,KAAKL;QAEzB,IAAIK,EAAE,OAAO,CAAC,MAAM,GAAG,GACnB,OAAO;QAEX,OAAOA,EAAE,OAAO,KAAKL;IACzB;IAEA,MAAMO,UAAUR,gBAAgB,IAAI,CAAC;QACjCF;QACAM;QACAH;QACAE;QACAX;IACJ;IAEA,IAAIgB,SACA,OAAOA,QAAQ,UAAU,CAAC;QACtBV;QACAG;QACAE;QACAX;QACAY;QACAL;IACJ;IACG,IAAI,CAACK,OACR,MAAM,IAAIT,MACN,sDACA,uBACA;QACIM;QACAF;IACJ;IAGR,MAAMU,YAAYL,MAAM,UAAU,CAAC;QAC/BA;IACJ;IACA,OAAO;QACHA;QACAH;QACAQ;QACA,SAASN,AAAU,WAAVA;IACb;AACJ"}
1
+ {"version":3,"file":"filtering/fields/extractSort.js","sources":["../../../src/filtering/fields/extractSort.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { Field } from \"./types.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { FieldSortingRegistry } from \"../../features/fieldSorting/abstractions.js\";\n\nconst extractSortInfo = (sortBy: string) => {\n const rootSorting = sortBy.match(/^([a-zA-Z]+)_(ASC|DESC)$/);\n if (rootSorting) {\n return {\n fieldId: rootSorting[1],\n isValues: false,\n order: rootSorting[2] as \"ASC\" | \"DESC\"\n };\n }\n const valuesSorting = sortBy.match(/^values_([a-zA-Z0-9]+)_(ASC|DESC)$/);\n if (valuesSorting) {\n return {\n fieldId: valuesSorting[1],\n isValues: true,\n order: valuesSorting[2] as \"ASC\" | \"DESC\"\n };\n }\n throw new WebinyError(\n \"Problem in determining the sorting for the entry items.\",\n \"SORT_EXTRACT_ERROR\",\n {\n sortBy\n }\n );\n};\n\ninterface IResponse {\n valuePath: string;\n reverse: boolean;\n fieldId: string;\n field: Field;\n}\n\ninterface IParams {\n model: CmsModel;\n sortBy: string;\n fields: Record<string, Field>;\n sortingRegistry: FieldSortingRegistry.Interface;\n}\n\nexport const extractSort = (params: IParams): IResponse => {\n const { model, sortBy, fields, sortingRegistry } = params;\n const { fieldId, isValues: isValuesSorting, order } = extractSortInfo(sortBy);\n\n const field = Object.values(fields).find(f => {\n const isValues = f.parents[0]?.fieldId === \"values\";\n if (isValues && isValuesSorting) {\n return f.fieldId === fieldId;\n }\n if (f.parents.length > 0) {\n return false;\n }\n return f.fieldId === fieldId;\n });\n\n const handler = sortingRegistry.find({\n model,\n field,\n fieldId,\n order,\n sortBy\n });\n\n if (handler) {\n return handler.createSort({\n model,\n fieldId,\n order,\n sortBy,\n field,\n fields\n });\n } else if (!field) {\n throw new WebinyError(\n \"Sorting field does not exist in the content model.\",\n \"SORTING_FIELD_ERROR\",\n {\n fieldId,\n fields\n }\n );\n }\n const valuePath = field.createPath({\n field\n });\n return {\n field,\n fieldId,\n valuePath,\n reverse: order === \"DESC\"\n };\n};\n"],"names":["extractSortInfo","sortBy","rootSorting","valuesSorting","WebinyError","extractSort","params","model","fields","sortingRegistry","fieldId","isValuesSorting","order","field","Object","f","isValues","handler","valuePath"],"mappings":";AAKA,MAAMA,kBAAkB,CAACC;IACrB,MAAMC,cAAcD,OAAO,KAAK,CAAC;IACjC,IAAIC,aACA,OAAO;QACH,SAASA,WAAW,CAAC,EAAE;QACvB,UAAU;QACV,OAAOA,WAAW,CAAC,EAAE;IACzB;IAEJ,MAAMC,gBAAgBF,OAAO,KAAK,CAAC;IACnC,IAAIE,eACA,OAAO;QACH,SAASA,aAAa,CAAC,EAAE;QACzB,UAAU;QACV,OAAOA,aAAa,CAAC,EAAE;IAC3B;IAEJ,MAAM,IAAIC,MACN,2DACA,sBACA;QACIH;IACJ;AAER;AAgBO,MAAMI,cAAc,CAACC;IACxB,MAAM,EAAEC,KAAK,EAAEN,MAAM,EAAEO,MAAM,EAAEC,eAAe,EAAE,GAAGH;IACnD,MAAM,EAAEI,OAAO,EAAE,UAAUC,eAAe,EAAEC,KAAK,EAAE,GAAGZ,gBAAgBC;IAEtE,MAAMY,QAAQC,OAAO,MAAM,CAACN,QAAQ,IAAI,CAACO,CAAAA;QACrC,MAAMC,WAAWD,EAAE,OAAO,CAAC,EAAE,EAAE,YAAY;QAC3C,IAAIC,YAAYL,iBACZ,OAAOI,EAAE,OAAO,KAAKL;QAEzB,IAAIK,EAAE,OAAO,CAAC,MAAM,GAAG,GACnB,OAAO;QAEX,OAAOA,EAAE,OAAO,KAAKL;IACzB;IAEA,MAAMO,UAAUR,gBAAgB,IAAI,CAAC;QACjCF;QACAM;QACAH;QACAE;QACAX;IACJ;IAEA,IAAIgB,SACA,OAAOA,QAAQ,UAAU,CAAC;QACtBV;QACAG;QACAE;QACAX;QACAY;QACAL;IACJ;SACG,IAAI,CAACK,OACR,MAAM,IAAIT,MACN,sDACA,uBACA;QACIM;QACAF;IACJ;IAGR,MAAMU,YAAYL,MAAM,UAAU,CAAC;QAC/BA;IACJ;IACA,OAAO;QACHA;QACAH;QACAQ;QACA,SAASN,AAAU,WAAVA;IACb;AACJ"}
@@ -1,2 +1,5 @@
1
1
  import type { CmsModelField } from "@webiny/api-headless-cms/types/index.js";
2
- export declare const createSystemFields: () => CmsModelField[];
2
+ /**
3
+ * @param entrySystemFields Fields registered as `CmsEntrySystemField`, filterable under `system`.
4
+ */
5
+ export declare const createSystemFields: (entrySystemFields?: CmsModelField[]) => CmsModelField[];
@@ -1,7 +1,7 @@
1
1
  import { ENTRY_META_FIELDS, isDateTimeEntryMetaField, isIdentityEntryMetaField } from "@webiny/api-headless-cms/constants.js";
2
2
  import startCase from "lodash/startCase.js";
3
3
  import { createModelField } from "@webiny/api-headless-cms";
4
- const createSystemFields = ()=>{
4
+ const createSystemFields = (entrySystemFields = [])=>{
5
5
  const onMetaFields = ENTRY_META_FIELDS.filter(isDateTimeEntryMetaField).map((fieldName)=>createModelField({
6
6
  id: fieldName,
7
7
  type: "datetime",
@@ -141,6 +141,22 @@ const createSystemFields = ()=>{
141
141
  })
142
142
  ]
143
143
  }
144
+ }),
145
+ ...createEntrySystemField(entrySystemFields)
146
+ ];
147
+ };
148
+ const createEntrySystemField = (fields)=>{
149
+ if (0 === fields.length) return [];
150
+ return [
151
+ createModelField({
152
+ id: "system",
153
+ type: "object",
154
+ storageId: "system",
155
+ fieldId: "system",
156
+ label: "System",
157
+ settings: {
158
+ fields
159
+ }
144
160
  })
145
161
  ];
146
162
  };
@@ -1 +1 @@
1
- {"version":3,"file":"filtering/fields/systemFields.js","sources":["../../../src/filtering/fields/systemFields.ts"],"sourcesContent":["import type { CmsModelField } from \"@webiny/api-headless-cms/types/index.js\";\nimport {\n ENTRY_META_FIELDS,\n isDateTimeEntryMetaField,\n isIdentityEntryMetaField\n} from \"@webiny/api-headless-cms/constants.js\";\nimport lodashStartCase from \"lodash/startCase.js\";\nimport { createModelField } from \"@webiny/api-headless-cms\";\n\nexport const createSystemFields = (): CmsModelField[] => {\n const onMetaFields = ENTRY_META_FIELDS.filter(isDateTimeEntryMetaField).map<CmsModelField>(\n fieldName => {\n return createModelField({\n id: fieldName,\n type: \"datetime\",\n storageId: fieldName,\n fieldId: fieldName,\n label: lodashStartCase(fieldName)\n });\n }\n );\n\n const byMetaFields = ENTRY_META_FIELDS.filter(isIdentityEntryMetaField).map<CmsModelField>(\n fieldName => {\n return createModelField({\n id: fieldName,\n type: \"plainObject\",\n storageId: fieldName,\n fieldId: fieldName,\n label: lodashStartCase(fieldName),\n settings: {\n path: `${fieldName}.id`\n }\n });\n }\n );\n\n return [\n createModelField({\n id: \"id\",\n type: \"text\",\n storageId: \"id\",\n fieldId: \"id\",\n label: \"ID\"\n }),\n createModelField({\n id: \"entryId\",\n type: \"text\",\n storageId: \"entryId\",\n fieldId: \"entryId\",\n label: \"Entry ID\"\n }),\n\n ...onMetaFields,\n ...byMetaFields,\n\n createModelField({\n id: \"meta\",\n type: \"plainObject\",\n storageId: \"meta\",\n fieldId: \"meta\",\n label: \"Meta\"\n }),\n createModelField({\n id: \"wbyAco_location\",\n type: \"object\",\n storageId: \"location\",\n label: \"Location\",\n fieldId: \"wbyAco_location\",\n settings: {\n fields: [\n createModelField({\n id: \"folderId\",\n type: \"text\",\n fieldId: \"folderId\",\n label: \"Folder ID\",\n storageId: \"folderId\",\n settings: {\n path: \"location.folderId\"\n }\n })\n ]\n }\n }),\n\n createModelField({\n id: \"version\",\n type: \"number\",\n storageId: \"version\",\n fieldId: \"version\",\n label: \"Version\"\n }),\n createModelField({\n id: \"status\",\n type: \"text\",\n storageId: \"status\",\n fieldId: \"status\",\n label: \"Status\"\n }),\n createModelField({\n id: \"wbyDeleted\",\n type: \"boolean\",\n storageId: \"wbyDeleted\",\n fieldId: \"wbyDeleted\",\n label: \"Deleted\"\n }),\n createModelField({\n id: \"state\",\n type: \"object\",\n storageId: \"object@state\",\n fieldId: \"state\",\n label: \"State\",\n settings: {\n fields: [\n createModelField({\n id: \"stepId\",\n type: \"text\",\n fieldId: \"stepId\",\n label: \"Step ID\",\n storageId: \"stepId\"\n }),\n createModelField({\n id: \"stepName\",\n type: \"text\",\n fieldId: \"stepName\",\n label: \"Step Name\",\n storageId: \"stepName\"\n }),\n createModelField({\n id: \"state\",\n type: \"text\",\n fieldId: \"state\",\n label: \"State\",\n storageId: \"state\"\n })\n ]\n }\n }),\n createModelField({\n id: \"values\",\n type: \"object\",\n storageId: \"values\",\n fieldId: \"values\",\n label: \"Values\"\n }),\n createModelField({\n id: \"live\",\n type: \"object\",\n storageId: \"live\",\n fieldId: \"live\",\n label: \"Live\",\n settings: {\n fields: [\n createModelField({\n id: \"version\",\n type: \"number\",\n fieldId: \"version\",\n label: \"Version\",\n storageId: \"version\"\n })\n ]\n }\n })\n ];\n};\n"],"names":["createSystemFields","onMetaFields","ENTRY_META_FIELDS","isDateTimeEntryMetaField","fieldName","createModelField","lodashStartCase","byMetaFields","isIdentityEntryMetaField"],"mappings":";;;AASO,MAAMA,qBAAqB;IAC9B,MAAMC,eAAeC,kBAAkB,MAAM,CAACC,0BAA0B,GAAG,CACvEC,CAAAA,YACWC,iBAAiB;YACpB,IAAID;YACJ,MAAM;YACN,WAAWA;YACX,SAASA;YACT,OAAOE,UAAgBF;QAC3B;IAIR,MAAMG,eAAeL,kBAAkB,MAAM,CAACM,0BAA0B,GAAG,CACvEJ,CAAAA,YACWC,iBAAiB;YACpB,IAAID;YACJ,MAAM;YACN,WAAWA;YACX,SAASA;YACT,OAAOE,UAAgBF;YACvB,UAAU;gBACN,MAAM,GAAGA,UAAU,GAAG,CAAC;YAC3B;QACJ;IAIR,OAAO;QACHC,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;WAEGJ;WACAM;QAEHF,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,OAAO;YACP,SAAS;YACT,UAAU;gBACN,QAAQ;oBACJA,iBAAiB;wBACb,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,WAAW;wBACX,UAAU;4BACN,MAAM;wBACV;oBACJ;iBACH;YACL;QACJ;QAEAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;YACP,UAAU;gBACN,QAAQ;oBACJA,iBAAiB;wBACb,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,WAAW;oBACf;oBACAA,iBAAiB;wBACb,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,WAAW;oBACf;oBACAA,iBAAiB;wBACb,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,WAAW;oBACf;iBACH;YACL;QACJ;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;YACP,UAAU;gBACN,QAAQ;oBACJA,iBAAiB;wBACb,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,WAAW;oBACf;iBACH;YACL;QACJ;KACH;AACL"}
1
+ {"version":3,"file":"filtering/fields/systemFields.js","sources":["../../../src/filtering/fields/systemFields.ts"],"sourcesContent":["import type { CmsModelField } from \"@webiny/api-headless-cms/types/index.js\";\nimport {\n ENTRY_META_FIELDS,\n isDateTimeEntryMetaField,\n isIdentityEntryMetaField\n} from \"@webiny/api-headless-cms/constants.js\";\nimport lodashStartCase from \"lodash/startCase.js\";\nimport { createModelField } from \"@webiny/api-headless-cms\";\n\n/**\n * @param entrySystemFields Fields registered as `CmsEntrySystemField`, filterable under `system`.\n */\nexport const createSystemFields = (entrySystemFields: CmsModelField[] = []): CmsModelField[] => {\n const onMetaFields = ENTRY_META_FIELDS.filter(isDateTimeEntryMetaField).map<CmsModelField>(\n fieldName => {\n return createModelField({\n id: fieldName,\n type: \"datetime\",\n storageId: fieldName,\n fieldId: fieldName,\n label: lodashStartCase(fieldName)\n });\n }\n );\n\n const byMetaFields = ENTRY_META_FIELDS.filter(isIdentityEntryMetaField).map<CmsModelField>(\n fieldName => {\n return createModelField({\n id: fieldName,\n type: \"plainObject\",\n storageId: fieldName,\n fieldId: fieldName,\n label: lodashStartCase(fieldName),\n settings: {\n path: `${fieldName}.id`\n }\n });\n }\n );\n\n return [\n createModelField({\n id: \"id\",\n type: \"text\",\n storageId: \"id\",\n fieldId: \"id\",\n label: \"ID\"\n }),\n createModelField({\n id: \"entryId\",\n type: \"text\",\n storageId: \"entryId\",\n fieldId: \"entryId\",\n label: \"Entry ID\"\n }),\n\n ...onMetaFields,\n ...byMetaFields,\n\n createModelField({\n id: \"meta\",\n type: \"plainObject\",\n storageId: \"meta\",\n fieldId: \"meta\",\n label: \"Meta\"\n }),\n createModelField({\n id: \"wbyAco_location\",\n type: \"object\",\n storageId: \"location\",\n label: \"Location\",\n fieldId: \"wbyAco_location\",\n settings: {\n fields: [\n createModelField({\n id: \"folderId\",\n type: \"text\",\n fieldId: \"folderId\",\n label: \"Folder ID\",\n storageId: \"folderId\",\n settings: {\n path: \"location.folderId\"\n }\n })\n ]\n }\n }),\n\n createModelField({\n id: \"version\",\n type: \"number\",\n storageId: \"version\",\n fieldId: \"version\",\n label: \"Version\"\n }),\n createModelField({\n id: \"status\",\n type: \"text\",\n storageId: \"status\",\n fieldId: \"status\",\n label: \"Status\"\n }),\n createModelField({\n id: \"wbyDeleted\",\n type: \"boolean\",\n storageId: \"wbyDeleted\",\n fieldId: \"wbyDeleted\",\n label: \"Deleted\"\n }),\n createModelField({\n id: \"state\",\n type: \"object\",\n storageId: \"object@state\",\n fieldId: \"state\",\n label: \"State\",\n settings: {\n fields: [\n createModelField({\n id: \"stepId\",\n type: \"text\",\n fieldId: \"stepId\",\n label: \"Step ID\",\n storageId: \"stepId\"\n }),\n createModelField({\n id: \"stepName\",\n type: \"text\",\n fieldId: \"stepName\",\n label: \"Step Name\",\n storageId: \"stepName\"\n }),\n createModelField({\n id: \"state\",\n type: \"text\",\n fieldId: \"state\",\n label: \"State\",\n storageId: \"state\"\n })\n ]\n }\n }),\n createModelField({\n id: \"values\",\n type: \"object\",\n storageId: \"values\",\n fieldId: \"values\",\n label: \"Values\"\n }),\n createModelField({\n id: \"live\",\n type: \"object\",\n storageId: \"live\",\n fieldId: \"live\",\n label: \"Live\",\n settings: {\n fields: [\n createModelField({\n id: \"version\",\n type: \"number\",\n fieldId: \"version\",\n label: \"Version\",\n storageId: \"version\"\n })\n ]\n }\n }),\n ...createEntrySystemField(entrySystemFields)\n ];\n};\n\nconst createEntrySystemField = (fields: CmsModelField[]): CmsModelField[] => {\n if (fields.length === 0) {\n return [];\n }\n return [\n createModelField({\n id: \"system\",\n type: \"object\",\n storageId: \"system\",\n fieldId: \"system\",\n label: \"System\",\n settings: {\n fields\n }\n })\n ];\n};\n"],"names":["createSystemFields","entrySystemFields","onMetaFields","ENTRY_META_FIELDS","isDateTimeEntryMetaField","fieldName","createModelField","lodashStartCase","byMetaFields","isIdentityEntryMetaField","createEntrySystemField","fields"],"mappings":";;;AAYO,MAAMA,qBAAqB,CAACC,oBAAqC,EAAE;IACtE,MAAMC,eAAeC,kBAAkB,MAAM,CAACC,0BAA0B,GAAG,CACvEC,CAAAA,YACWC,iBAAiB;YACpB,IAAID;YACJ,MAAM;YACN,WAAWA;YACX,SAASA;YACT,OAAOE,UAAgBF;QAC3B;IAIR,MAAMG,eAAeL,kBAAkB,MAAM,CAACM,0BAA0B,GAAG,CACvEJ,CAAAA,YACWC,iBAAiB;YACpB,IAAID;YACJ,MAAM;YACN,WAAWA;YACX,SAASA;YACT,OAAOE,UAAgBF;YACvB,UAAU;gBACN,MAAM,GAAGA,UAAU,GAAG,CAAC;YAC3B;QACJ;IAIR,OAAO;QACHC,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;WAEGJ;WACAM;QAEHF,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,OAAO;YACP,SAAS;YACT,UAAU;gBACN,QAAQ;oBACJA,iBAAiB;wBACb,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,WAAW;wBACX,UAAU;4BACN,MAAM;wBACV;oBACJ;iBACH;YACL;QACJ;QAEAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;YACP,UAAU;gBACN,QAAQ;oBACJA,iBAAiB;wBACb,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,WAAW;oBACf;oBACAA,iBAAiB;wBACb,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,WAAW;oBACf;oBACAA,iBAAiB;wBACb,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,WAAW;oBACf;iBACH;YACL;QACJ;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;QACX;QACAA,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;YACP,UAAU;gBACN,QAAQ;oBACJA,iBAAiB;wBACb,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,OAAO;wBACP,WAAW;oBACf;iBACH;YACL;QACJ;WACGI,uBAAuBT;KAC7B;AACL;AAEA,MAAMS,yBAAyB,CAACC;IAC5B,IAAIA,AAAkB,MAAlBA,OAAO,MAAM,EACb,OAAO,EAAE;IAEb,OAAO;QACHL,iBAAiB;YACb,IAAI;YACJ,MAAM;YACN,WAAW;YACX,SAAS;YACT,OAAO;YACP,UAAU;gBACNK;YACJ;QACJ;KACH;AACL"}
@@ -34,7 +34,7 @@ const executeExpressions = (params)=>{
34
34
  getCachedValue
35
35
  });
36
36
  if (result && "OR" === condition) return true;
37
- if (!result && "AND" == condition) return false;
37
+ else if (!result && "AND" == condition) return false;
38
38
  }
39
39
  return "OR" !== condition;
40
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"filtering/filter.js","sources":["../../src/filtering/filter.ts"],"sourcesContent":["import type {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryValues\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport WebinyError from \"@webiny/error\";\nimport type { Field } from \"./fields/types.js\";\nimport { createFullTextSearch } from \"./fullTextSearch.js\";\nimport type { Expression, ExpressionCondition, Filter } from \"./expressions/createExpressions.js\";\nimport { createExpressions } from \"./expressions/createExpressions.js\";\nimport { transformValue } from \"./transform.js\";\nimport { getValue } from \"./getValue.js\";\nimport { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport type { FieldFilterCreateRegistry } from \"../features/fieldFilterCreate/abstractions.js\";\nimport type { FieldFilterValueTransformRegistry } from \"../features/fieldFilterValueTransform/abstractions.js\";\n\ninterface ExecuteFilterParams {\n value: any;\n filter: Filter;\n}\n\nconst executeFilter = (params: ExecuteFilterParams) => {\n const { value, filter } = params;\n\n const canUse = filter.filter.canUse({\n value,\n compareValue: filter.compareValue\n });\n if (!canUse) {\n return true;\n }\n\n const matched = filter.filter.matches({\n value,\n compareValue: filter.compareValue\n });\n if (filter.negate) {\n return matched === false;\n }\n return matched;\n};\n\ninterface ExecuteExpressionsParams {\n getCachedValue: (filter: Filter) => Promise<any>;\n expressions: Expression[];\n filters: Filter[];\n condition: ExpressionCondition;\n}\n\nconst executeExpressions = (params: ExecuteExpressionsParams): boolean => {\n const { expressions, getCachedValue, filters, condition } = params;\n if (expressions.length === 0 && filters.length === 0) {\n return true;\n }\n for (const filter of filters) {\n const value = getCachedValue(filter);\n\n const result = executeFilter({\n value,\n filter\n });\n if (!result) {\n return false;\n }\n }\n for (const expression of expressions) {\n const result = executeExpressions({\n ...expression,\n getCachedValue\n });\n if (result && condition === \"OR\") {\n return true;\n } else if (!result && condition == \"AND\") {\n return false;\n }\n }\n return condition === \"OR\" ? false : true;\n};\n\ninterface IFilterParams<T extends CmsEntryValues = CmsEntryValues> {\n filterCreateRegistry: FieldFilterCreateRegistry.Interface;\n transformRegistry: FieldFilterValueTransformRegistry.Interface;\n valueFilterRegistry: ValueFilterRegistry.Interface;\n items: CmsEntry<T>[];\n where: Partial<CmsEntryListWhere>;\n fields: Record<string, Field>;\n fullTextSearch?: {\n term?: string;\n fields?: string[];\n };\n}\n\nexport const filter = <T extends CmsEntryValues = CmsEntryValues>(\n params: IFilterParams<T>\n): CmsEntry<T>[] => {\n const {\n items: records,\n where,\n filterCreateRegistry,\n transformRegistry,\n fields,\n fullTextSearch,\n valueFilterRegistry\n } = params;\n\n const keys = Object.keys(where);\n if (keys.length === 0 && !fullTextSearch) {\n return records;\n }\n const expression = createExpressions({\n filterCreateRegistry,\n transformRegistry,\n where,\n fields,\n valueFilterRegistry\n });\n\n if (\n expression.filters.length === 0 &&\n expression.expressions.length === 0 &&\n !fullTextSearch?.term\n ) {\n return records;\n }\n const fullTextSearchFilter = valueFilterRegistry.get(\"contains\");\n if (!fullTextSearchFilter) {\n throw new WebinyError(\n `Missing \"contains\" plugin to run the full-text search.`,\n \"MISSING_PLUGIN\"\n );\n }\n\n const search = createFullTextSearch({\n term: fullTextSearch?.term,\n targetFields: fullTextSearch?.fields,\n fields,\n filter: fullTextSearchFilter\n });\n\n return records.filter(record => {\n const cachedValues: Record<string, any> = {};\n\n const getCachedValue = (filter: Filter) => {\n const { path } = filter;\n if (cachedValues[path] !== undefined) {\n return cachedValues[path];\n }\n const plainValue = getValue(record, path);\n\n const rawValue = transformValue({\n value: plainValue,\n transform: filter.transformValue\n });\n\n cachedValues[path] = rawValue;\n return rawValue;\n };\n\n const exprResult = executeExpressions({ ...expression, getCachedValue });\n if (!exprResult || !search) {\n return exprResult;\n }\n\n return search(record);\n });\n};\n"],"names":["executeFilter","params","value","filter","canUse","matched","executeExpressions","expressions","getCachedValue","filters","condition","result","expression","records","where","filterCreateRegistry","transformRegistry","fields","fullTextSearch","valueFilterRegistry","keys","Object","createExpressions","fullTextSearchFilter","WebinyError","search","createFullTextSearch","record","cachedValues","path","undefined","plainValue","getValue","rawValue","transformValue","exprResult"],"mappings":";;;;;AAqBA,MAAMA,gBAAgB,CAACC;IACnB,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAE,GAAGF;IAE1B,MAAMG,SAASD,OAAO,MAAM,CAAC,MAAM,CAAC;QAChCD;QACA,cAAcC,OAAO,YAAY;IACrC;IACA,IAAI,CAACC,QACD,OAAO;IAGX,MAAMC,UAAUF,OAAO,MAAM,CAAC,OAAO,CAAC;QAClCD;QACA,cAAcC,OAAO,YAAY;IACrC;IACA,IAAIA,OAAO,MAAM,EACb,OAAOE,AAAY,UAAZA;IAEX,OAAOA;AACX;AASA,MAAMC,qBAAqB,CAACL;IACxB,MAAM,EAAEM,WAAW,EAAEC,cAAc,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGT;IAC5D,IAAIM,AAAuB,MAAvBA,YAAY,MAAM,IAAUE,AAAmB,MAAnBA,QAAQ,MAAM,EAC1C,OAAO;IAEX,KAAK,MAAMN,UAAUM,QAAS;QAC1B,MAAMP,QAAQM,eAAeL;QAE7B,MAAMQ,SAASX,cAAc;YACzBE;YACAC;QACJ;QACA,IAAI,CAACQ,QACD,OAAO;IAEf;IACA,KAAK,MAAMC,cAAcL,YAAa;QAClC,MAAMI,SAASL,mBAAmB;YAC9B,GAAGM,UAAU;YACbJ;QACJ;QACA,IAAIG,UAAUD,AAAc,SAAdA,WACV,OAAO;QACJ,IAAI,CAACC,UAAUD,AAAa,SAAbA,WAClB,OAAO;IAEf;IACA,OAAOA,AAAc,SAAdA;AACX;AAeO,MAAMP,gBAAS,CAClBF;IAEA,MAAM,EACF,OAAOY,OAAO,EACdC,KAAK,EACLC,oBAAoB,EACpBC,iBAAiB,EACjBC,MAAM,EACNC,cAAc,EACdC,mBAAmB,EACtB,GAAGlB;IAEJ,MAAMmB,OAAOC,OAAO,IAAI,CAACP;IACzB,IAAIM,AAAgB,MAAhBA,KAAK,MAAM,IAAU,CAACF,gBACtB,OAAOL;IAEX,MAAMD,aAAaU,kBAAkB;QACjCP;QACAC;QACAF;QACAG;QACAE;IACJ;IAEA,IACIP,AAA8B,MAA9BA,WAAW,OAAO,CAAC,MAAM,IACzBA,AAAkC,MAAlCA,WAAW,WAAW,CAAC,MAAM,IAC7B,CAACM,gBAAgB,MAEjB,OAAOL;IAEX,MAAMU,uBAAuBJ,oBAAoB,GAAG,CAAC;IACrD,IAAI,CAACI,sBACD,MAAM,IAAIC,MACN,0DACA;IAIR,MAAMC,SAASC,qBAAqB;QAChC,MAAMR,gBAAgB;QACtB,cAAcA,gBAAgB;QAC9BD;QACA,QAAQM;IACZ;IAEA,OAAOV,QAAQ,MAAM,CAACc,CAAAA;QAClB,MAAMC,eAAoC,CAAC;QAE3C,MAAMpB,iBAAiB,CAACL;YACpB,MAAM,EAAE0B,IAAI,EAAE,GAAG1B;YACjB,IAAIyB,AAAuBE,WAAvBF,YAAY,CAACC,KAAK,EAClB,OAAOD,YAAY,CAACC,KAAK;YAE7B,MAAME,aAAaC,SAASL,QAAQE;YAEpC,MAAMI,WAAWC,eAAe;gBAC5B,OAAOH;gBACP,WAAW5B,OAAO,cAAc;YACpC;YAEAyB,YAAY,CAACC,KAAK,GAAGI;YACrB,OAAOA;QACX;QAEA,MAAME,aAAa7B,mBAAmB;YAAE,GAAGM,UAAU;YAAEJ;QAAe;QACtE,IAAI,CAAC2B,cAAc,CAACV,QAChB,OAAOU;QAGX,OAAOV,OAAOE;IAClB;AACJ"}
1
+ {"version":3,"file":"filtering/filter.js","sources":["../../src/filtering/filter.ts"],"sourcesContent":["import type {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryValues\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport WebinyError from \"@webiny/error\";\nimport type { Field } from \"./fields/types.js\";\nimport { createFullTextSearch } from \"./fullTextSearch.js\";\nimport type { Expression, ExpressionCondition, Filter } from \"./expressions/createExpressions.js\";\nimport { createExpressions } from \"./expressions/createExpressions.js\";\nimport { transformValue } from \"./transform.js\";\nimport { getValue } from \"./getValue.js\";\nimport { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport type { FieldFilterCreateRegistry } from \"../features/fieldFilterCreate/abstractions.js\";\nimport type { FieldFilterValueTransformRegistry } from \"../features/fieldFilterValueTransform/abstractions.js\";\n\ninterface ExecuteFilterParams {\n value: any;\n filter: Filter;\n}\n\nconst executeFilter = (params: ExecuteFilterParams) => {\n const { value, filter } = params;\n\n const canUse = filter.filter.canUse({\n value,\n compareValue: filter.compareValue\n });\n if (!canUse) {\n return true;\n }\n\n const matched = filter.filter.matches({\n value,\n compareValue: filter.compareValue\n });\n if (filter.negate) {\n return matched === false;\n }\n return matched;\n};\n\ninterface ExecuteExpressionsParams {\n getCachedValue: (filter: Filter) => Promise<any>;\n expressions: Expression[];\n filters: Filter[];\n condition: ExpressionCondition;\n}\n\nconst executeExpressions = (params: ExecuteExpressionsParams): boolean => {\n const { expressions, getCachedValue, filters, condition } = params;\n if (expressions.length === 0 && filters.length === 0) {\n return true;\n }\n for (const filter of filters) {\n const value = getCachedValue(filter);\n\n const result = executeFilter({\n value,\n filter\n });\n if (!result) {\n return false;\n }\n }\n for (const expression of expressions) {\n const result = executeExpressions({\n ...expression,\n getCachedValue\n });\n if (result && condition === \"OR\") {\n return true;\n } else if (!result && condition == \"AND\") {\n return false;\n }\n }\n return condition === \"OR\" ? false : true;\n};\n\ninterface IFilterParams<T extends CmsEntryValues = CmsEntryValues> {\n filterCreateRegistry: FieldFilterCreateRegistry.Interface;\n transformRegistry: FieldFilterValueTransformRegistry.Interface;\n valueFilterRegistry: ValueFilterRegistry.Interface;\n items: CmsEntry<T>[];\n where: Partial<CmsEntryListWhere>;\n fields: Record<string, Field>;\n fullTextSearch?: {\n term?: string;\n fields?: string[];\n };\n}\n\nexport const filter = <T extends CmsEntryValues = CmsEntryValues>(\n params: IFilterParams<T>\n): CmsEntry<T>[] => {\n const {\n items: records,\n where,\n filterCreateRegistry,\n transformRegistry,\n fields,\n fullTextSearch,\n valueFilterRegistry\n } = params;\n\n const keys = Object.keys(where);\n if (keys.length === 0 && !fullTextSearch) {\n return records;\n }\n const expression = createExpressions({\n filterCreateRegistry,\n transformRegistry,\n where,\n fields,\n valueFilterRegistry\n });\n\n if (\n expression.filters.length === 0 &&\n expression.expressions.length === 0 &&\n !fullTextSearch?.term\n ) {\n return records;\n }\n const fullTextSearchFilter = valueFilterRegistry.get(\"contains\");\n if (!fullTextSearchFilter) {\n throw new WebinyError(\n `Missing \"contains\" plugin to run the full-text search.`,\n \"MISSING_PLUGIN\"\n );\n }\n\n const search = createFullTextSearch({\n term: fullTextSearch?.term,\n targetFields: fullTextSearch?.fields,\n fields,\n filter: fullTextSearchFilter\n });\n\n return records.filter(record => {\n const cachedValues: Record<string, any> = {};\n\n const getCachedValue = (filter: Filter) => {\n const { path } = filter;\n if (cachedValues[path] !== undefined) {\n return cachedValues[path];\n }\n const plainValue = getValue(record, path);\n\n const rawValue = transformValue({\n value: plainValue,\n transform: filter.transformValue\n });\n\n cachedValues[path] = rawValue;\n return rawValue;\n };\n\n const exprResult = executeExpressions({ ...expression, getCachedValue });\n if (!exprResult || !search) {\n return exprResult;\n }\n\n return search(record);\n });\n};\n"],"names":["executeFilter","params","value","filter","canUse","matched","executeExpressions","expressions","getCachedValue","filters","condition","result","expression","records","where","filterCreateRegistry","transformRegistry","fields","fullTextSearch","valueFilterRegistry","keys","Object","createExpressions","fullTextSearchFilter","WebinyError","search","createFullTextSearch","record","cachedValues","path","undefined","plainValue","getValue","rawValue","transformValue","exprResult"],"mappings":";;;;;AAqBA,MAAMA,gBAAgB,CAACC;IACnB,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAE,GAAGF;IAE1B,MAAMG,SAASD,OAAO,MAAM,CAAC,MAAM,CAAC;QAChCD;QACA,cAAcC,OAAO,YAAY;IACrC;IACA,IAAI,CAACC,QACD,OAAO;IAGX,MAAMC,UAAUF,OAAO,MAAM,CAAC,OAAO,CAAC;QAClCD;QACA,cAAcC,OAAO,YAAY;IACrC;IACA,IAAIA,OAAO,MAAM,EACb,OAAOE,AAAY,UAAZA;IAEX,OAAOA;AACX;AASA,MAAMC,qBAAqB,CAACL;IACxB,MAAM,EAAEM,WAAW,EAAEC,cAAc,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGT;IAC5D,IAAIM,AAAuB,MAAvBA,YAAY,MAAM,IAAUE,AAAmB,MAAnBA,QAAQ,MAAM,EAC1C,OAAO;IAEX,KAAK,MAAMN,UAAUM,QAAS;QAC1B,MAAMP,QAAQM,eAAeL;QAE7B,MAAMQ,SAASX,cAAc;YACzBE;YACAC;QACJ;QACA,IAAI,CAACQ,QACD,OAAO;IAEf;IACA,KAAK,MAAMC,cAAcL,YAAa;QAClC,MAAMI,SAASL,mBAAmB;YAC9B,GAAGM,UAAU;YACbJ;QACJ;QACA,IAAIG,UAAUD,AAAc,SAAdA,WACV,OAAO;aACJ,IAAI,CAACC,UAAUD,AAAa,SAAbA,WAClB,OAAO;IAEf;IACA,OAAOA,AAAc,SAAdA;AACX;AAeO,MAAMP,gBAAS,CAClBF;IAEA,MAAM,EACF,OAAOY,OAAO,EACdC,KAAK,EACLC,oBAAoB,EACpBC,iBAAiB,EACjBC,MAAM,EACNC,cAAc,EACdC,mBAAmB,EACtB,GAAGlB;IAEJ,MAAMmB,OAAOC,OAAO,IAAI,CAACP;IACzB,IAAIM,AAAgB,MAAhBA,KAAK,MAAM,IAAU,CAACF,gBACtB,OAAOL;IAEX,MAAMD,aAAaU,kBAAkB;QACjCP;QACAC;QACAF;QACAG;QACAE;IACJ;IAEA,IACIP,AAA8B,MAA9BA,WAAW,OAAO,CAAC,MAAM,IACzBA,AAAkC,MAAlCA,WAAW,WAAW,CAAC,MAAM,IAC7B,CAACM,gBAAgB,MAEjB,OAAOL;IAEX,MAAMU,uBAAuBJ,oBAAoB,GAAG,CAAC;IACrD,IAAI,CAACI,sBACD,MAAM,IAAIC,MACN,0DACA;IAIR,MAAMC,SAASC,qBAAqB;QAChC,MAAMR,gBAAgB;QACtB,cAAcA,gBAAgB;QAC9BD;QACA,QAAQM;IACZ;IAEA,OAAOV,QAAQ,MAAM,CAACc,CAAAA;QAClB,MAAMC,eAAoC,CAAC;QAE3C,MAAMpB,iBAAiB,CAACL;YACpB,MAAM,EAAE0B,IAAI,EAAE,GAAG1B;YACjB,IAAIyB,AAAuBE,WAAvBF,YAAY,CAACC,KAAK,EAClB,OAAOD,YAAY,CAACC,KAAK;YAE7B,MAAME,aAAaC,SAASL,QAAQE;YAEpC,MAAMI,WAAWC,eAAe;gBAC5B,OAAOH;gBACP,WAAW5B,OAAO,cAAc;YACpC;YAEAyB,YAAY,CAACC,KAAK,GAAGI;YACrB,OAAOA;QACX;QAEA,MAAME,aAAa7B,mBAAmB;YAAE,GAAGM,UAAU;YAAEJ;QAAe;QACtE,IAAI,CAAC2B,cAAc,CAACV,QAChB,OAAOU;QAGX,OAAOV,OAAOE;IAClB;AACJ"}
@@ -10,12 +10,12 @@ const find = (target, input)=>{
10
10
  const value = target?.[path];
11
11
  if (void 0 === value) return;
12
12
  if (0 === paths.length) return value;
13
- if (Array.isArray(value)) {
13
+ else if (Array.isArray(value)) {
14
14
  if (0 === value.length) return;
15
15
  return value.reduce((collection, v)=>{
16
16
  const result = find(v, paths);
17
17
  if (void 0 === result) return collection;
18
- if (Array.isArray(result)) {
18
+ else if (Array.isArray(result)) {
19
19
  addArrayResult(collection, result);
20
20
  return collection;
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filtering/getValue.js","sources":["../../src/filtering/getValue.ts"],"sourcesContent":["const addArrayResult = (target: any[], result: any[]): void => {\n for (const r of result) {\n if (target.some(t => r === t)) {\n continue;\n }\n target.push(r);\n }\n};\n/*\n * A recursive function which goes through given input paths and returns the value in it.\n * In case a path is an array, it goes through the array of those values to get values further down the path line.\n */\nconst find = (target: Record<string, any> | undefined, input: string[]): any[] | undefined => {\n const paths = [...input];\n const path = paths.shift();\n\n if (!path) {\n return undefined;\n }\n\n const value = target?.[path];\n if (value === undefined) {\n return undefined;\n }\n if (paths.length === 0) {\n return value;\n } else if (Array.isArray(value)) {\n if (value.length === 0) {\n return undefined;\n }\n return value.reduce<any[]>((collection, v) => {\n const result = find(v, paths);\n if (result === undefined) {\n return collection;\n } else if (Array.isArray(result)) {\n addArrayResult(collection, result);\n return collection;\n }\n collection.push(result);\n return collection;\n }, []);\n }\n return find(value, paths);\n};\n/*\n * A wrapper function for the find function.\n * Basically it transforms input paths to an array (and runs various checks).\n */\nexport const getValue = (target: Record<string, any>, input: string | string[]): any => {\n const paths = Array.isArray(input) ? input : input.split(\".\");\n if (paths.length === 0) {\n throw new Error(`Path is empty!`);\n }\n const filtered = paths.filter(Boolean);\n if (paths.length !== filtered.length) {\n throw new Error(\n `Input path is different than the filtered empty path string. (${paths.join(\n \".\"\n )} to ${filtered.join(\".\")})`\n );\n }\n\n return find(target, paths);\n};\n"],"names":["addArrayResult","target","result","r","t","find","input","paths","path","value","undefined","Array","collection","v","getValue","Error","filtered","Boolean"],"mappings":"AAAA,MAAMA,iBAAiB,CAACC,QAAeC;IACnC,KAAK,MAAMC,KAAKD,OACZ,KAAID,OAAO,IAAI,CAACG,CAAAA,IAAKD,MAAMC,IAG3BH,OAAO,IAAI,CAACE;AAEpB;AAKA,MAAME,OAAO,CAACJ,QAAyCK;IACnD,MAAMC,QAAQ;WAAID;KAAM;IACxB,MAAME,OAAOD,MAAM,KAAK;IAExB,IAAI,CAACC,MACD;IAGJ,MAAMC,QAAQR,QAAQ,CAACO,KAAK;IAC5B,IAAIC,AAAUC,WAAVD,OACA;IAEJ,IAAIF,AAAiB,MAAjBA,MAAM,MAAM,EACZ,OAAOE;IACJ,IAAIE,MAAM,OAAO,CAACF,QAAQ;QAC7B,IAAIA,AAAiB,MAAjBA,MAAM,MAAM,EACZ;QAEJ,OAAOA,MAAM,MAAM,CAAQ,CAACG,YAAYC;YACpC,MAAMX,SAASG,KAAKQ,GAAGN;YACvB,IAAIL,AAAWQ,WAAXR,QACA,OAAOU;YACJ,IAAID,MAAM,OAAO,CAACT,SAAS;gBAC9BF,eAAeY,YAAYV;gBAC3B,OAAOU;YACX;YACAA,WAAW,IAAI,CAACV;YAChB,OAAOU;QACX,GAAG,EAAE;IACT;IACA,OAAOP,KAAKI,OAAOF;AACvB;AAKO,MAAMO,WAAW,CAACb,QAA6BK;IAClD,MAAMC,QAAQI,MAAM,OAAO,CAACL,SAASA,QAAQA,MAAM,KAAK,CAAC;IACzD,IAAIC,AAAiB,MAAjBA,MAAM,MAAM,EACZ,MAAM,IAAIQ,MAAM;IAEpB,MAAMC,WAAWT,MAAM,MAAM,CAACU;IAC9B,IAAIV,MAAM,MAAM,KAAKS,SAAS,MAAM,EAChC,MAAM,IAAID,MACN,CAAC,8DAA8D,EAAER,MAAM,IAAI,CACvE,KACF,IAAI,EAAES,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC;IAIrC,OAAOX,KAAKJ,QAAQM;AACxB"}
1
+ {"version":3,"file":"filtering/getValue.js","sources":["../../src/filtering/getValue.ts"],"sourcesContent":["const addArrayResult = (target: any[], result: any[]): void => {\n for (const r of result) {\n if (target.some(t => r === t)) {\n continue;\n }\n target.push(r);\n }\n};\n/*\n * A recursive function which goes through given input paths and returns the value in it.\n * In case a path is an array, it goes through the array of those values to get values further down the path line.\n */\nconst find = (target: Record<string, any> | undefined, input: string[]): any[] | undefined => {\n const paths = [...input];\n const path = paths.shift();\n\n if (!path) {\n return undefined;\n }\n\n const value = target?.[path];\n if (value === undefined) {\n return undefined;\n }\n if (paths.length === 0) {\n return value;\n } else if (Array.isArray(value)) {\n if (value.length === 0) {\n return undefined;\n }\n return value.reduce<any[]>((collection, v) => {\n const result = find(v, paths);\n if (result === undefined) {\n return collection;\n } else if (Array.isArray(result)) {\n addArrayResult(collection, result);\n return collection;\n }\n collection.push(result);\n return collection;\n }, []);\n }\n return find(value, paths);\n};\n/*\n * A wrapper function for the find function.\n * Basically it transforms input paths to an array (and runs various checks).\n */\nexport const getValue = (target: Record<string, any>, input: string | string[]): any => {\n const paths = Array.isArray(input) ? input : input.split(\".\");\n if (paths.length === 0) {\n throw new Error(`Path is empty!`);\n }\n const filtered = paths.filter(Boolean);\n if (paths.length !== filtered.length) {\n throw new Error(\n `Input path is different than the filtered empty path string. (${paths.join(\n \".\"\n )} to ${filtered.join(\".\")})`\n );\n }\n\n return find(target, paths);\n};\n"],"names":["addArrayResult","target","result","r","t","find","input","paths","path","value","undefined","Array","collection","v","getValue","Error","filtered","Boolean"],"mappings":"AAAA,MAAMA,iBAAiB,CAACC,QAAeC;IACnC,KAAK,MAAMC,KAAKD,OACZ,KAAID,OAAO,IAAI,CAACG,CAAAA,IAAKD,MAAMC,IAG3BH,OAAO,IAAI,CAACE;AAEpB;AAKA,MAAME,OAAO,CAACJ,QAAyCK;IACnD,MAAMC,QAAQ;WAAID;KAAM;IACxB,MAAME,OAAOD,MAAM,KAAK;IAExB,IAAI,CAACC,MACD;IAGJ,MAAMC,QAAQR,QAAQ,CAACO,KAAK;IAC5B,IAAIC,AAAUC,WAAVD,OACA;IAEJ,IAAIF,AAAiB,MAAjBA,MAAM,MAAM,EACZ,OAAOE;SACJ,IAAIE,MAAM,OAAO,CAACF,QAAQ;QAC7B,IAAIA,AAAiB,MAAjBA,MAAM,MAAM,EACZ;QAEJ,OAAOA,MAAM,MAAM,CAAQ,CAACG,YAAYC;YACpC,MAAMX,SAASG,KAAKQ,GAAGN;YACvB,IAAIL,AAAWQ,WAAXR,QACA,OAAOU;iBACJ,IAAID,MAAM,OAAO,CAACT,SAAS;gBAC9BF,eAAeY,YAAYV;gBAC3B,OAAOU;YACX;YACAA,WAAW,IAAI,CAACV;YAChB,OAAOU;QACX,GAAG,EAAE;IACT;IACA,OAAOP,KAAKI,OAAOF;AACvB;AAKO,MAAMO,WAAW,CAACb,QAA6BK;IAClD,MAAMC,QAAQI,MAAM,OAAO,CAACL,SAASA,QAAQA,MAAM,KAAK,CAAC;IACzD,IAAIC,AAAiB,MAAjBA,MAAM,MAAM,EACZ,MAAM,IAAIQ,MAAM;IAEpB,MAAMC,WAAWT,MAAM,MAAM,CAACU;IAC9B,IAAIV,MAAM,MAAM,KAAKS,SAAS,MAAM,EAChC,MAAM,IAAID,MACN,CAAC,8DAA8D,EAAER,MAAM,IAAI,CACvE,KACF,IAAI,EAAES,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC;IAIrC,OAAOX,KAAKJ,QAAQM;AACxB"}
package/filtering/sort.js CHANGED
@@ -5,7 +5,7 @@ import * as __rspack_external_dot_prop_0ebbd169 from "dot-prop";
5
5
  const sort_sort = (params)=>{
6
6
  const { model, items, sort = [], fields, sortingRegistry } = params;
7
7
  if (items.length <= 1) return items;
8
- if (0 === sort.length) sort.push("savedOn_DESC");
8
+ else if (0 === sort.length) sort.push("savedOn_DESC");
9
9
  else if (sort.length > 1) throw new error("Sorting is limited to a single field.", "SORT_MULTIPLE_FIELDS_ERROR", {
10
10
  sort
11
11
  });
@@ -1 +1 @@
1
- {"version":3,"file":"filtering/sort.js","sources":["../../src/filtering/sort.ts"],"sourcesContent":["import type { CmsEntry, CmsEntryValues, CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport WebinyError from \"@webiny/error\";\nimport * as dotProp from \"dot-prop\";\nimport lodashSortBy from \"lodash/sortBy.js\";\nimport { extractSort } from \"./fields/extractSort.js\";\nimport type { Field } from \"./fields/types.js\";\nimport type { FieldSortingRegistry } from \"../features/fieldSorting/abstractions.js\";\n\ninterface Params<T extends CmsEntryValues = CmsEntryValues> {\n model: CmsModel;\n items: CmsEntry<T>[];\n sort?: string[];\n fields: Record<string, Field>;\n sortingRegistry: FieldSortingRegistry.Interface;\n}\n\ninterface SortedItem {\n id: string;\n value: any;\n}\n\nexport const sort = <T extends CmsEntryValues = CmsEntryValues>(\n params: Params<T>\n): CmsEntry<T>[] => {\n const { model, items, sort = [], fields, sortingRegistry } = params;\n if (items.length <= 1) {\n return items;\n } else if (sort.length === 0) {\n sort.push(\"savedOn_DESC\");\n } else if (sort.length > 1) {\n throw new WebinyError(\n \"Sorting is limited to a single field.\",\n \"SORT_MULTIPLE_FIELDS_ERROR\",\n {\n sort\n }\n );\n }\n const [firstSort] = sort;\n if (!firstSort) {\n throw new WebinyError(\"Empty sort array item.\", \"SORT_EMPTY_ERROR\", {\n sort\n });\n }\n\n const { fieldId, field, valuePath, reverse } = extractSort({\n model,\n sortBy: firstSort,\n fields,\n sortingRegistry\n });\n\n const itemsToSort = items.map(item => {\n return {\n id: item.id,\n value: field.transform(dotProp.getProperty(item, valuePath))\n };\n });\n const sortedItems: SortedItem[] = lodashSortBy(itemsToSort, \"value\");\n const newItems = sortedItems.map(s => {\n const item = items.find(i => i.id === s.id);\n if (item) {\n return item;\n }\n throw new WebinyError(\n \"Could not find item by given id after the sorting.\",\n \"SORTING_ITEMS_ERROR\",\n {\n id: s.id,\n sortingBy: fieldId,\n reverse\n }\n );\n });\n if (!reverse) {\n return newItems;\n }\n return newItems.reverse();\n};\n"],"names":["sort","params","model","items","fields","sortingRegistry","WebinyError","firstSort","fieldId","field","valuePath","reverse","extractSort","itemsToSort","item","dotProp","sortedItems","lodashSortBy","newItems","s","i"],"mappings":";;;;AAqBO,MAAMA,YAAO,CAChBC;IAEA,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEH,OAAO,EAAE,EAAEI,MAAM,EAAEC,eAAe,EAAE,GAAGJ;IAC7D,IAAIE,MAAM,MAAM,IAAI,GAChB,OAAOA;IACJ,IAAIH,AAAgB,MAAhBA,KAAK,MAAM,EAClBA,KAAK,IAAI,CAAC;SACP,IAAIA,KAAK,MAAM,GAAG,GACrB,MAAM,IAAIM,MACN,yCACA,8BACA;QACIN;IACJ;IAGR,MAAM,CAACO,UAAU,GAAGP;IACpB,IAAI,CAACO,WACD,MAAM,IAAID,MAAY,0BAA0B,oBAAoB;QAChEN;IACJ;IAGJ,MAAM,EAAEQ,OAAO,EAAEC,KAAK,EAAEC,SAAS,EAAEC,OAAO,EAAE,GAAGC,YAAY;QACvDV;QACA,QAAQK;QACRH;QACAC;IACJ;IAEA,MAAMQ,cAAcV,MAAM,GAAG,CAACW,CAAAA,OACnB;YACH,IAAIA,KAAK,EAAE;YACX,OAAOL,MAAM,SAAS,CAACM,oCAAAA,WAAmB,CAACD,MAAMJ;QACrD;IAEJ,MAAMM,cAA4BC,OAAaJ,aAAa;IAC5D,MAAMK,WAAWF,YAAY,GAAG,CAACG,CAAAA;QAC7B,MAAML,OAAOX,MAAM,IAAI,CAACiB,CAAAA,IAAKA,EAAE,EAAE,KAAKD,EAAE,EAAE;QAC1C,IAAIL,MACA,OAAOA;QAEX,MAAM,IAAIR,MACN,sDACA,uBACA;YACI,IAAIa,EAAE,EAAE;YACR,WAAWX;YACXG;QACJ;IAER;IACA,IAAI,CAACA,SACD,OAAOO;IAEX,OAAOA,SAAS,OAAO;AAC3B"}
1
+ {"version":3,"file":"filtering/sort.js","sources":["../../src/filtering/sort.ts"],"sourcesContent":["import type { CmsEntry, CmsEntryValues, CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport WebinyError from \"@webiny/error\";\nimport * as dotProp from \"dot-prop\";\nimport lodashSortBy from \"lodash/sortBy.js\";\nimport { extractSort } from \"./fields/extractSort.js\";\nimport type { Field } from \"./fields/types.js\";\nimport type { FieldSortingRegistry } from \"../features/fieldSorting/abstractions.js\";\n\ninterface Params<T extends CmsEntryValues = CmsEntryValues> {\n model: CmsModel;\n items: CmsEntry<T>[];\n sort?: string[];\n fields: Record<string, Field>;\n sortingRegistry: FieldSortingRegistry.Interface;\n}\n\ninterface SortedItem {\n id: string;\n value: any;\n}\n\nexport const sort = <T extends CmsEntryValues = CmsEntryValues>(\n params: Params<T>\n): CmsEntry<T>[] => {\n const { model, items, sort = [], fields, sortingRegistry } = params;\n if (items.length <= 1) {\n return items;\n } else if (sort.length === 0) {\n sort.push(\"savedOn_DESC\");\n } else if (sort.length > 1) {\n throw new WebinyError(\n \"Sorting is limited to a single field.\",\n \"SORT_MULTIPLE_FIELDS_ERROR\",\n {\n sort\n }\n );\n }\n const [firstSort] = sort;\n if (!firstSort) {\n throw new WebinyError(\"Empty sort array item.\", \"SORT_EMPTY_ERROR\", {\n sort\n });\n }\n\n const { fieldId, field, valuePath, reverse } = extractSort({\n model,\n sortBy: firstSort,\n fields,\n sortingRegistry\n });\n\n const itemsToSort = items.map(item => {\n return {\n id: item.id,\n value: field.transform(dotProp.getProperty(item, valuePath))\n };\n });\n const sortedItems: SortedItem[] = lodashSortBy(itemsToSort, \"value\");\n const newItems = sortedItems.map(s => {\n const item = items.find(i => i.id === s.id);\n if (item) {\n return item;\n }\n throw new WebinyError(\n \"Could not find item by given id after the sorting.\",\n \"SORTING_ITEMS_ERROR\",\n {\n id: s.id,\n sortingBy: fieldId,\n reverse\n }\n );\n });\n if (!reverse) {\n return newItems;\n }\n return newItems.reverse();\n};\n"],"names":["sort","params","model","items","fields","sortingRegistry","WebinyError","firstSort","fieldId","field","valuePath","reverse","extractSort","itemsToSort","item","dotProp","sortedItems","lodashSortBy","newItems","s","i"],"mappings":";;;;AAqBO,MAAMA,YAAO,CAChBC;IAEA,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEH,OAAO,EAAE,EAAEI,MAAM,EAAEC,eAAe,EAAE,GAAGJ;IAC7D,IAAIE,MAAM,MAAM,IAAI,GAChB,OAAOA;SACJ,IAAIH,AAAgB,MAAhBA,KAAK,MAAM,EAClBA,KAAK,IAAI,CAAC;SACP,IAAIA,KAAK,MAAM,GAAG,GACrB,MAAM,IAAIM,MACN,yCACA,8BACA;QACIN;IACJ;IAGR,MAAM,CAACO,UAAU,GAAGP;IACpB,IAAI,CAACO,WACD,MAAM,IAAID,MAAY,0BAA0B,oBAAoB;QAChEN;IACJ;IAGJ,MAAM,EAAEQ,OAAO,EAAEC,KAAK,EAAEC,SAAS,EAAEC,OAAO,EAAE,GAAGC,YAAY;QACvDV;QACA,QAAQK;QACRH;QACAC;IACJ;IAEA,MAAMQ,cAAcV,MAAM,GAAG,CAACW,CAAAA,OACnB;YACH,IAAIA,KAAK,EAAE;YACX,OAAOL,MAAM,SAAS,CAACM,oCAAAA,WAAmB,CAACD,MAAMJ;QACrD;IAEJ,MAAMM,cAA4BC,OAAaJ,aAAa;IAC5D,MAAMK,WAAWF,YAAY,GAAG,CAACG,CAAAA;QAC7B,MAAML,OAAOX,MAAM,IAAI,CAACiB,CAAAA,IAAKA,EAAE,EAAE,KAAKD,EAAE,EAAE;QAC1C,IAAIL,MACA,OAAOA;QAEX,MAAM,IAAIR,MACN,sDACA,uBACA;YACI,IAAIa,EAAE,EAAE;YACR,WAAWX;YACXG;QACJ;IAER;IACA,IAAI,CAACA,SACD,OAAOO;IAEX,OAAOA,SAAS,OAAO;AAC3B"}
@@ -1,10 +1,10 @@
1
1
  import { parseISO } from "date-fns";
2
2
  const transformTime = (value)=>{
3
3
  if (null == value) throw new Error("Time value is null or undefined.");
4
- if ("boolean" == typeof value || "" === value || Array.isArray(value)) throw new Error("Field value must be a string because field is defined as time.");
4
+ else if ("boolean" == typeof value || "" === value || Array.isArray(value)) throw new Error("Field value must be a string because field is defined as time.");
5
5
  const converted = Number(`${value}`);
6
6
  if ("number" == typeof value || false === isNaN(converted)) return Number(value);
7
- if ("string" != typeof value) throw new Error("Field value must be a string because field is defined as time.");
7
+ else if ("string" != typeof value) throw new Error("Field value must be a string because field is defined as time.");
8
8
  const [time, milliseconds = 0] = value.split(".");
9
9
  const values = time.split(":").map(Number);
10
10
  if (values.length < 2) throw new Error("Time must contain at least hours and minutes.");
@@ -13,7 +13,7 @@ const transformTime = (value)=>{
13
13
  };
14
14
  const transformDateTime = (value)=>{
15
15
  if (null == value) return null;
16
- if ("string" == typeof value) {
16
+ else if ("string" == typeof value) {
17
17
  const parsedDateTime = parseISO(value).getTime();
18
18
  if (false === isNaN(parsedDateTime)) return parsedDateTime;
19
19
  } else if (value instanceof Date || "function" == typeof value?.getTime) return value.getTime();
@@ -1 +1 @@
1
- {"version":3,"file":"handlers/datetimeTransformHandler.js","sources":["../../src/handlers/datetimeTransformHandler.ts"],"sourcesContent":["import { parseISO } from \"date-fns\";\nimport type { FieldFilterValueTransformRegistry } from \"../features/fieldFilterValueTransform/abstractions.js\";\n\nconst transformTime = (value: any): number => {\n if (value === undefined || value === null) {\n throw new Error(`Time value is null or undefined.`);\n } else if (typeof value === \"boolean\" || value === \"\" || Array.isArray(value)) {\n throw new Error(\"Field value must be a string because field is defined as time.\");\n }\n const converted = Number(`${value}`);\n if (typeof value === \"number\" || isNaN(converted) === false) {\n return Number(value);\n } else if (typeof value !== \"string\") {\n throw new Error(\"Field value must be a string because field is defined as time.\");\n }\n const [time, milliseconds = 0] = value.split(\".\");\n const values = time.split(\":\").map(Number);\n if (values.length < 2) {\n throw new Error(\"Time must contain at least hours and minutes.\");\n }\n const [hours, minutes, seconds = 0] = values;\n return (hours * 60 * 60 + minutes * 60 + seconds) * 1000 + Number(milliseconds);\n};\n\nconst transformDateTime = (value: any): number | null => {\n if (value === null || value === undefined) {\n return null;\n } else if (typeof value === \"string\") {\n const parsedDateTime = parseISO(value).getTime();\n if (isNaN(parsedDateTime) === false) {\n return parsedDateTime;\n }\n } else if (value instanceof Date || typeof (value as unknown as Date)?.getTime === \"function\") {\n return value.getTime();\n }\n console.warn(\"Could not parse given dateTime value.\", \"PARSE_DATE_ERROR\", {\n value\n });\n return null;\n};\n\nexport const createDatetimeTransformHandler = (): FieldFilterValueTransformRegistry.Handler => {\n return {\n transform: ({ field, value }) => {\n const { type } = field.settings || {};\n if (type === \"time\") {\n return transformTime(value);\n }\n return transformDateTime(value);\n }\n };\n};\n"],"names":["transformTime","value","Error","Array","converted","Number","isNaN","time","milliseconds","values","hours","minutes","seconds","transformDateTime","parsedDateTime","parseISO","Date","console","createDatetimeTransformHandler","field","type"],"mappings":";AAGA,MAAMA,gBAAgB,CAACC;IACnB,IAAIA,QAAAA,OACA,MAAM,IAAIC,MAAM;IACb,IAAI,AAAiB,aAAjB,OAAOD,SAAuBA,AAAU,OAAVA,SAAgBE,MAAM,OAAO,CAACF,QACnE,MAAM,IAAIC,MAAM;IAEpB,MAAME,YAAYC,OAAO,GAAGJ,OAAO;IACnC,IAAI,AAAiB,YAAjB,OAAOA,SAAsBK,AAAqB,UAArBA,MAAMF,YACnC,OAAOC,OAAOJ;IACX,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,MAAM;IAEpB,MAAM,CAACK,MAAMC,eAAe,CAAC,CAAC,GAAGP,MAAM,KAAK,CAAC;IAC7C,MAAMQ,SAASF,KAAK,KAAK,CAAC,KAAK,GAAG,CAACF;IACnC,IAAII,OAAO,MAAM,GAAG,GAChB,MAAM,IAAIP,MAAM;IAEpB,MAAM,CAACQ,OAAOC,SAASC,UAAU,CAAC,CAAC,GAAGH;IACtC,OAAQC,AAAAA,CAAAA,AAAQ,KAARA,QAAa,KAAKC,AAAU,KAAVA,UAAeC,OAAM,IAAK,OAAOP,OAAOG;AACtE;AAEA,MAAMK,oBAAoB,CAACZ;IACvB,IAAIA,QAAAA,OACA,OAAO;IACJ,IAAI,AAAiB,YAAjB,OAAOA,OAAoB;QAClC,MAAMa,iBAAiBC,SAASd,OAAO,OAAO;QAC9C,IAAIK,AAA0B,UAA1BA,MAAMQ,iBACN,OAAOA;IAEf,OAAO,IAAIb,iBAAiBe,QAAQ,AAA+C,cAA/C,OAAQf,OAA2B,SACnE,OAAOA,MAAM,OAAO;IAExBgB,QAAQ,IAAI,CAAC,yCAAyC,oBAAoB;QACtEhB;IACJ;IACA,OAAO;AACX;AAEO,MAAMiB,iCAAiC,IACnC;QACH,WAAW,CAAC,EAAEC,KAAK,EAAElB,KAAK,EAAE;YACxB,MAAM,EAAEmB,IAAI,EAAE,GAAGD,MAAM,QAAQ,IAAI,CAAC;YACpC,IAAIC,AAAS,WAATA,MACA,OAAOpB,cAAcC;YAEzB,OAAOY,kBAAkBZ;QAC7B;IACJ"}
1
+ {"version":3,"file":"handlers/datetimeTransformHandler.js","sources":["../../src/handlers/datetimeTransformHandler.ts"],"sourcesContent":["import { parseISO } from \"date-fns\";\nimport type { FieldFilterValueTransformRegistry } from \"../features/fieldFilterValueTransform/abstractions.js\";\n\nconst transformTime = (value: any): number => {\n if (value === undefined || value === null) {\n throw new Error(`Time value is null or undefined.`);\n } else if (typeof value === \"boolean\" || value === \"\" || Array.isArray(value)) {\n throw new Error(\"Field value must be a string because field is defined as time.\");\n }\n const converted = Number(`${value}`);\n if (typeof value === \"number\" || isNaN(converted) === false) {\n return Number(value);\n } else if (typeof value !== \"string\") {\n throw new Error(\"Field value must be a string because field is defined as time.\");\n }\n const [time, milliseconds = 0] = value.split(\".\");\n const values = time.split(\":\").map(Number);\n if (values.length < 2) {\n throw new Error(\"Time must contain at least hours and minutes.\");\n }\n const [hours, minutes, seconds = 0] = values;\n return (hours * 60 * 60 + minutes * 60 + seconds) * 1000 + Number(milliseconds);\n};\n\nconst transformDateTime = (value: any): number | null => {\n if (value === null || value === undefined) {\n return null;\n } else if (typeof value === \"string\") {\n const parsedDateTime = parseISO(value).getTime();\n if (isNaN(parsedDateTime) === false) {\n return parsedDateTime;\n }\n } else if (value instanceof Date || typeof (value as unknown as Date)?.getTime === \"function\") {\n return value.getTime();\n }\n console.warn(\"Could not parse given dateTime value.\", \"PARSE_DATE_ERROR\", {\n value\n });\n return null;\n};\n\nexport const createDatetimeTransformHandler = (): FieldFilterValueTransformRegistry.Handler => {\n return {\n transform: ({ field, value }) => {\n const { type } = field.settings || {};\n if (type === \"time\") {\n return transformTime(value);\n }\n return transformDateTime(value);\n }\n };\n};\n"],"names":["transformTime","value","Error","Array","converted","Number","isNaN","time","milliseconds","values","hours","minutes","seconds","transformDateTime","parsedDateTime","parseISO","Date","console","createDatetimeTransformHandler","field","type"],"mappings":";AAGA,MAAMA,gBAAgB,CAACC;IACnB,IAAIA,QAAAA,OACA,MAAM,IAAIC,MAAM;SACb,IAAI,AAAiB,aAAjB,OAAOD,SAAuBA,AAAU,OAAVA,SAAgBE,MAAM,OAAO,CAACF,QACnE,MAAM,IAAIC,MAAM;IAEpB,MAAME,YAAYC,OAAO,GAAGJ,OAAO;IACnC,IAAI,AAAiB,YAAjB,OAAOA,SAAsBK,AAAqB,UAArBA,MAAMF,YACnC,OAAOC,OAAOJ;SACX,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,MAAM;IAEpB,MAAM,CAACK,MAAMC,eAAe,CAAC,CAAC,GAAGP,MAAM,KAAK,CAAC;IAC7C,MAAMQ,SAASF,KAAK,KAAK,CAAC,KAAK,GAAG,CAACF;IACnC,IAAII,OAAO,MAAM,GAAG,GAChB,MAAM,IAAIP,MAAM;IAEpB,MAAM,CAACQ,OAAOC,SAASC,UAAU,CAAC,CAAC,GAAGH;IACtC,OAAQC,AAAAA,CAAAA,AAAQ,KAARA,QAAa,KAAKC,AAAU,KAAVA,UAAeC,OAAM,IAAK,OAAOP,OAAOG;AACtE;AAEA,MAAMK,oBAAoB,CAACZ;IACvB,IAAIA,QAAAA,OACA,OAAO;SACJ,IAAI,AAAiB,YAAjB,OAAOA,OAAoB;QAClC,MAAMa,iBAAiBC,SAASd,OAAO,OAAO;QAC9C,IAAIK,AAA0B,UAA1BA,MAAMQ,iBACN,OAAOA;IAEf,OAAO,IAAIb,iBAAiBe,QAAQ,AAA+C,cAA/C,OAAQf,OAA2B,SACnE,OAAOA,MAAM,OAAO;IAExBgB,QAAQ,IAAI,CAAC,yCAAyC,oBAAoB;QACtEhB;IACJ;IACA,OAAO;AACX;AAEO,MAAMiB,iCAAiC,IACnC;QACH,WAAW,CAAC,EAAEC,KAAK,EAAElB,KAAK,EAAE;YACxB,MAAM,EAAEmB,IAAI,EAAE,GAAGD,MAAM,QAAQ,IAAI,CAAC;YACpC,IAAIC,AAAS,WAATA,MACA,OAAOpB,cAAcC;YAEzB,OAAOY,kBAAkBZ;QAC7B;IACJ"}
@@ -2,7 +2,7 @@ import error from "@webiny/error";
2
2
  const createLocationFolderIdPathHandler = ()=>({
3
3
  canUse: (field, parents)=>{
4
4
  if ("folderId" !== field.fieldId) return false;
5
- if (!parents?.length) return false;
5
+ else if (!parents?.length) return false;
6
6
  return "wbyAco_location" === parents[0];
7
7
  },
8
8
  createPath: ({ field })=>{
@@ -1 +1 @@
1
- {"version":3,"file":"handlers/locationFolderIdPathHandler.js","sources":["../../src/handlers/locationFolderIdPathHandler.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { FieldFilterPathRegistry } from \"../features/fieldFilterPath/abstractions.js\";\n\nexport const createLocationFolderIdPathHandler = (): FieldFilterPathRegistry.Handler => {\n return {\n canUse: (field, parents) => {\n if (field.fieldId !== \"folderId\") {\n return false;\n } else if (!parents?.length) {\n return false;\n }\n return parents[0] === \"wbyAco_location\";\n },\n createPath: ({ field }) => {\n const { path } = field.settings || {};\n if (!path) {\n throw new WebinyError(\"Missing path settings value.\", \"FIELD_SETTINGS_ERROR\", {\n field\n });\n }\n return path;\n }\n };\n};\n"],"names":["createLocationFolderIdPathHandler","field","parents","path","WebinyError"],"mappings":";AAGO,MAAMA,oCAAoC,IACtC;QACH,QAAQ,CAACC,OAAOC;YACZ,IAAID,AAAkB,eAAlBA,MAAM,OAAO,EACb,OAAO;YACJ,IAAI,CAACC,SAAS,QACjB,OAAO;YAEX,OAAOA,AAAe,sBAAfA,OAAO,CAAC,EAAE;QACrB;QACA,YAAY,CAAC,EAAED,KAAK,EAAE;YAClB,MAAM,EAAEE,IAAI,EAAE,GAAGF,MAAM,QAAQ,IAAI,CAAC;YACpC,IAAI,CAACE,MACD,MAAM,IAAIC,MAAY,gCAAgC,wBAAwB;gBAC1EH;YACJ;YAEJ,OAAOE;QACX;IACJ"}
1
+ {"version":3,"file":"handlers/locationFolderIdPathHandler.js","sources":["../../src/handlers/locationFolderIdPathHandler.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { FieldFilterPathRegistry } from \"../features/fieldFilterPath/abstractions.js\";\n\nexport const createLocationFolderIdPathHandler = (): FieldFilterPathRegistry.Handler => {\n return {\n canUse: (field, parents) => {\n if (field.fieldId !== \"folderId\") {\n return false;\n } else if (!parents?.length) {\n return false;\n }\n return parents[0] === \"wbyAco_location\";\n },\n createPath: ({ field }) => {\n const { path } = field.settings || {};\n if (!path) {\n throw new WebinyError(\"Missing path settings value.\", \"FIELD_SETTINGS_ERROR\", {\n field\n });\n }\n return path;\n }\n };\n};\n"],"names":["createLocationFolderIdPathHandler","field","parents","path","WebinyError"],"mappings":";AAGO,MAAMA,oCAAoC,IACtC;QACH,QAAQ,CAACC,OAAOC;YACZ,IAAID,AAAkB,eAAlBA,MAAM,OAAO,EACb,OAAO;iBACJ,IAAI,CAACC,SAAS,QACjB,OAAO;YAEX,OAAOA,AAAe,sBAAfA,OAAO,CAAC,EAAE;QACrB;QACA,YAAY,CAAC,EAAED,KAAK,EAAE;YAClB,MAAM,EAAEE,IAAI,EAAE,GAAGF,MAAM,QAAQ,IAAI,CAAC;YACpC,IAAI,CAACE,MACD,MAAM,IAAIC,MAAY,gCAAgC,wBAAwB;gBAC1EH;YACJ;YAEJ,OAAOE;QACX;IACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-storage",
3
- "version": "0.0.0-unstable.5387e5f7c8",
3
+ "version": "0.0.0-unstable.9609e4e0c9",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -10,21 +10,21 @@
10
10
  "directory": "packages/api-headless-cms-storage"
11
11
  },
12
12
  "dependencies": {
13
- "@webiny/api": "0.0.0-unstable.5387e5f7c8",
14
- "@webiny/api-headless-cms": "0.0.0-unstable.5387e5f7c8",
15
- "@webiny/db-utils": "0.0.0-unstable.5387e5f7c8",
13
+ "@webiny/api": "0.0.0-unstable.9609e4e0c9",
14
+ "@webiny/api-headless-cms": "0.0.0-unstable.9609e4e0c9",
15
+ "@webiny/db-utils": "0.0.0-unstable.9609e4e0c9",
16
16
  "@webiny/di": "2.0.0",
17
- "@webiny/error": "0.0.0-unstable.5387e5f7c8",
18
- "@webiny/feature": "0.0.0-unstable.5387e5f7c8",
19
- "@webiny/plugins": "0.0.0-unstable.5387e5f7c8",
17
+ "@webiny/error": "0.0.0-unstable.9609e4e0c9",
18
+ "@webiny/feature": "0.0.0-unstable.9609e4e0c9",
19
+ "@webiny/plugins": "0.0.0-unstable.9609e4e0c9",
20
20
  "date-fns": "4.4.0",
21
21
  "dot-prop": "10.2.0",
22
22
  "lodash": "4.18.1"
23
23
  },
24
24
  "devDependencies": {
25
- "@webiny/build-tools": "0.0.0-unstable.5387e5f7c8",
25
+ "@webiny/build-tools": "0.0.0-unstable.9609e4e0c9",
26
26
  "typescript": "7.0.2",
27
- "vitest": "4.1.11"
27
+ "vitest": "5.0.5"
28
28
  },
29
29
  "webiny": {
30
30
  "publishFrom": "dist"
@@ -12,7 +12,7 @@ const createLocationFolderIdPathPlugin = ()=>new CmsEntryFieldFilterPathPlugin({
12
12
  path: createPath,
13
13
  canUse: (field, parents)=>{
14
14
  if ("folderId" !== field.fieldId) return false;
15
- if (!parents?.length) return false;
15
+ else if (!parents?.length) return false;
16
16
  return "wbyAco_location" === parents[0];
17
17
  }
18
18
  });
@@ -1 +1 @@
1
- {"version":3,"file":"path/locationFolderId.js","sources":["../../src/path/locationFolderId.ts"],"sourcesContent":["/* File is @internal. */\nimport WebinyError from \"@webiny/error\";\nimport type { CreatePathCallable } from \"../plugins/CmsEntryFieldFilterPathPlugin.js\";\nimport { CmsEntryFieldFilterPathPlugin } from \"../plugins/CmsEntryFieldFilterPathPlugin.js\";\n\nconst createPath: CreatePathCallable = ({ field }) => {\n const { path } = field.settings || {};\n if (!path) {\n throw new WebinyError(\"Missing path settings value.\", \"FIELD_SETTINGS_ERROR\", {\n field\n });\n }\n return path;\n};\n\nexport const createLocationFolderIdPathPlugin = (): CmsEntryFieldFilterPathPlugin => {\n return new CmsEntryFieldFilterPathPlugin({\n fieldType: \"text\",\n path: createPath,\n canUse: (field, parents) => {\n if (field.fieldId !== \"folderId\") {\n return false;\n } else if (!parents?.length) {\n return false;\n }\n return parents[0] === \"wbyAco_location\";\n }\n });\n};\n"],"names":["createPath","field","path","WebinyError","createLocationFolderIdPathPlugin","CmsEntryFieldFilterPathPlugin","parents"],"mappings":";;AAKA,MAAMA,aAAiC,CAAC,EAAEC,KAAK,EAAE;IAC7C,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAM,QAAQ,IAAI,CAAC;IACpC,IAAI,CAACC,MACD,MAAM,IAAIC,MAAY,gCAAgC,wBAAwB;QAC1EF;IACJ;IAEJ,OAAOC;AACX;AAEO,MAAME,mCAAmC,IACrC,IAAIC,8BAA8B;QACrC,WAAW;QACX,MAAML;QACN,QAAQ,CAACC,OAAOK;YACZ,IAAIL,AAAkB,eAAlBA,MAAM,OAAO,EACb,OAAO;YACJ,IAAI,CAACK,SAAS,QACjB,OAAO;YAEX,OAAOA,AAAe,sBAAfA,OAAO,CAAC,EAAE;QACrB;IACJ"}
1
+ {"version":3,"file":"path/locationFolderId.js","sources":["../../src/path/locationFolderId.ts"],"sourcesContent":["/* File is @internal. */\nimport WebinyError from \"@webiny/error\";\nimport type { CreatePathCallable } from \"../plugins/CmsEntryFieldFilterPathPlugin.js\";\nimport { CmsEntryFieldFilterPathPlugin } from \"../plugins/CmsEntryFieldFilterPathPlugin.js\";\n\nconst createPath: CreatePathCallable = ({ field }) => {\n const { path } = field.settings || {};\n if (!path) {\n throw new WebinyError(\"Missing path settings value.\", \"FIELD_SETTINGS_ERROR\", {\n field\n });\n }\n return path;\n};\n\nexport const createLocationFolderIdPathPlugin = (): CmsEntryFieldFilterPathPlugin => {\n return new CmsEntryFieldFilterPathPlugin({\n fieldType: \"text\",\n path: createPath,\n canUse: (field, parents) => {\n if (field.fieldId !== \"folderId\") {\n return false;\n } else if (!parents?.length) {\n return false;\n }\n return parents[0] === \"wbyAco_location\";\n }\n });\n};\n"],"names":["createPath","field","path","WebinyError","createLocationFolderIdPathPlugin","CmsEntryFieldFilterPathPlugin","parents"],"mappings":";;AAKA,MAAMA,aAAiC,CAAC,EAAEC,KAAK,EAAE;IAC7C,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAM,QAAQ,IAAI,CAAC;IACpC,IAAI,CAACC,MACD,MAAM,IAAIC,MAAY,gCAAgC,wBAAwB;QAC1EF;IACJ;IAEJ,OAAOC;AACX;AAEO,MAAME,mCAAmC,IACrC,IAAIC,8BAA8B;QACrC,WAAW;QACX,MAAML;QACN,QAAQ,CAACC,OAAOK;YACZ,IAAIL,AAAkB,eAAlBA,MAAM,OAAO,EACb,OAAO;iBACJ,IAAI,CAACK,SAAS,QACjB,OAAO;YAEX,OAAOA,AAAe,sBAAfA,OAAO,CAAC,EAAE;QACrB;IACJ"}
@@ -14,14 +14,14 @@ class CmsEntryFieldFilterPathPlugin extends Plugin {
14
14
  }
15
15
  canUse(field, parents) {
16
16
  if (field.type !== this.config.fieldType) return false;
17
- if (this.config.canUse) return this.config.canUse(field, parents);
17
+ else if (this.config.canUse) return this.config.canUse(field, parents);
18
18
  const fieldId = this.config.fieldId;
19
19
  if (!fieldId || false === Array.isArray(fieldId) || 0 === fieldId.length) return true;
20
20
  return fieldId.includes(field.fieldId);
21
21
  }
22
22
  createPath(params) {
23
23
  if ("function" == typeof this.config.path) return this.config.path(params);
24
- if ("string" == typeof this.config.path) return this.config.path;
24
+ else if ("string" == typeof this.config.path) return this.config.path;
25
25
  throw new error(`Missing path in "${this.name}" plugin.`);
26
26
  }
27
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/CmsEntryFieldFilterPathPlugin.js","sources":["../../src/plugins/CmsEntryFieldFilterPathPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { Plugin } from \"@webiny/plugins/Plugin.js\";\nimport type { CmsModelField } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface CreatePathCallableParams {\n field: Partial<CmsModelField> & Pick<CmsModelField, \"fieldId\" | \"storageId\" | \"id\">;\n index?: number;\n}\nexport interface CreatePathCallable {\n (params: CreatePathCallableParams): string;\n}\nexport interface CmsEntryFieldFilterPathPluginParams {\n fieldType: string;\n fieldId?: string[];\n path: string | CreatePathCallable;\n canUse?: (field: Pick<CmsModelField, \"fieldId\" | \"type\">, parents?: string[]) => boolean;\n}\nexport class CmsEntryFieldFilterPathPlugin extends Plugin {\n public static override readonly type: string = \"cms-field-filter-path\";\n\n private readonly config: CmsEntryFieldFilterPathPluginParams;\n\n public get fieldType(): string {\n return this.config.fieldType;\n }\n\n public constructor(config: CmsEntryFieldFilterPathPluginParams) {\n super();\n\n this.config = config;\n\n /* We expect error here because we know that `this.constructor.type` is defined, but TS does not. */\n // @ts-expect-error\n this.name = `${this.constructor.type}-${this.config.fieldType}`;\n }\n\n public canUse(field: Pick<CmsModelField, \"fieldId\" | \"type\">, parents: string[]): boolean {\n if (field.type !== this.config.fieldType) {\n return false;\n } else if (this.config.canUse) {\n return this.config.canUse(field, parents);\n }\n const fieldId = this.config.fieldId;\n if (!fieldId || Array.isArray(fieldId) === false || fieldId.length === 0) {\n return true;\n }\n return fieldId.includes(field.fieldId);\n }\n\n public createPath(params: CreatePathCallableParams): string {\n if (typeof this.config.path === \"function\") {\n return this.config.path(params);\n } else if (typeof this.config.path === \"string\") {\n return this.config.path;\n }\n throw new WebinyError(`Missing path in \"${this.name}\" plugin.`);\n }\n}\n"],"names":["CmsEntryFieldFilterPathPlugin","Plugin","config","field","parents","fieldId","Array","params","WebinyError"],"mappings":";;AAiBO,MAAMA,sCAAsCC;;aACf,IAAI,GAAW;;IAI/C,IAAW,YAAoB;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS;IAChC;IAEA,YAAmBC,MAA2C,CAAE;QAC5D,KAAK;QAEL,IAAI,CAAC,MAAM,GAAGA;QAId,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;IACnE;IAEO,OAAOC,KAA8C,EAAEC,OAAiB,EAAW;QACtF,IAAID,MAAM,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,EACpC,OAAO;QACJ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EACzB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAACA,OAAOC;QAErC,MAAMC,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO;QACnC,IAAI,CAACA,WAAWC,AAA2B,UAA3BA,MAAM,OAAO,CAACD,YAAsBA,AAAmB,MAAnBA,QAAQ,MAAM,EAC9D,OAAO;QAEX,OAAOA,QAAQ,QAAQ,CAACF,MAAM,OAAO;IACzC;IAEO,WAAWI,MAAgC,EAAU;QACxD,IAAI,AAA4B,cAA5B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EACvB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAACA;QACrB,IAAI,AAA4B,YAA5B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;QAE3B,MAAM,IAAIC,MAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAClE;AACJ"}
1
+ {"version":3,"file":"plugins/CmsEntryFieldFilterPathPlugin.js","sources":["../../src/plugins/CmsEntryFieldFilterPathPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { Plugin } from \"@webiny/plugins/Plugin.js\";\nimport type { CmsModelField } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface CreatePathCallableParams {\n field: Partial<CmsModelField> & Pick<CmsModelField, \"fieldId\" | \"storageId\" | \"id\">;\n index?: number;\n}\nexport interface CreatePathCallable {\n (params: CreatePathCallableParams): string;\n}\nexport interface CmsEntryFieldFilterPathPluginParams {\n fieldType: string;\n fieldId?: string[];\n path: string | CreatePathCallable;\n canUse?: (field: Pick<CmsModelField, \"fieldId\" | \"type\">, parents?: string[]) => boolean;\n}\nexport class CmsEntryFieldFilterPathPlugin extends Plugin {\n public static override readonly type: string = \"cms-field-filter-path\";\n\n private readonly config: CmsEntryFieldFilterPathPluginParams;\n\n public get fieldType(): string {\n return this.config.fieldType;\n }\n\n public constructor(config: CmsEntryFieldFilterPathPluginParams) {\n super();\n\n this.config = config;\n\n /* We expect error here because we know that `this.constructor.type` is defined, but TS does not. */\n // @ts-expect-error\n this.name = `${this.constructor.type}-${this.config.fieldType}`;\n }\n\n public canUse(field: Pick<CmsModelField, \"fieldId\" | \"type\">, parents: string[]): boolean {\n if (field.type !== this.config.fieldType) {\n return false;\n } else if (this.config.canUse) {\n return this.config.canUse(field, parents);\n }\n const fieldId = this.config.fieldId;\n if (!fieldId || Array.isArray(fieldId) === false || fieldId.length === 0) {\n return true;\n }\n return fieldId.includes(field.fieldId);\n }\n\n public createPath(params: CreatePathCallableParams): string {\n if (typeof this.config.path === \"function\") {\n return this.config.path(params);\n } else if (typeof this.config.path === \"string\") {\n return this.config.path;\n }\n throw new WebinyError(`Missing path in \"${this.name}\" plugin.`);\n }\n}\n"],"names":["CmsEntryFieldFilterPathPlugin","Plugin","config","field","parents","fieldId","Array","params","WebinyError"],"mappings":";;AAiBO,MAAMA,sCAAsCC;;aACf,IAAI,GAAW;;IAI/C,IAAW,YAAoB;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS;IAChC;IAEA,YAAmBC,MAA2C,CAAE;QAC5D,KAAK;QAEL,IAAI,CAAC,MAAM,GAAGA;QAId,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;IACnE;IAEO,OAAOC,KAA8C,EAAEC,OAAiB,EAAW;QACtF,IAAID,MAAM,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,EACpC,OAAO;aACJ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EACzB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAACA,OAAOC;QAErC,MAAMC,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO;QACnC,IAAI,CAACA,WAAWC,AAA2B,UAA3BA,MAAM,OAAO,CAACD,YAAsBA,AAAmB,MAAnBA,QAAQ,MAAM,EAC9D,OAAO;QAEX,OAAOA,QAAQ,QAAQ,CAACF,MAAM,OAAO;IACzC;IAEO,WAAWI,MAAgC,EAAU;QACxD,IAAI,AAA4B,cAA5B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EACvB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAACA;aACrB,IAAI,AAA4B,YAA5B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;QAE3B,MAAM,IAAIC,MAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAClE;AACJ"}
@@ -2,10 +2,10 @@ import { parseISO } from "date-fns";
2
2
  import { CmsFieldFilterValueTransformPlugin } from "../plugins/CmsFieldFilterValueTransformPlugin.js";
3
3
  const transformTime = (value)=>{
4
4
  if (null == value) throw new Error("Time value is null or undefined.");
5
- if ("boolean" == typeof value || "" === value || Array.isArray(value)) throw new Error("Field value must be a string because field is defined as time.");
5
+ else if ("boolean" == typeof value || "" === value || Array.isArray(value)) throw new Error("Field value must be a string because field is defined as time.");
6
6
  const converted = Number(`${value}`);
7
7
  if ("number" == typeof value || false === isNaN(converted)) return Number(value);
8
- if ("string" != typeof value) throw new Error("Field value must be a string because field is defined as time.");
8
+ else if ("string" != typeof value) throw new Error("Field value must be a string because field is defined as time.");
9
9
  const [time, milliseconds = 0] = value.split(".");
10
10
  const values = time.split(":").map(Number);
11
11
  if (values.length < 2) throw new Error("Time must contain at least hours and minutes.");
@@ -14,7 +14,7 @@ const transformTime = (value)=>{
14
14
  };
15
15
  const transformDateTime = (value)=>{
16
16
  if (null == value) return null;
17
- if ("string" == typeof value) {
17
+ else if ("string" == typeof value) {
18
18
  const parsedDateTime = parseISO(value).getTime();
19
19
  if (false === isNaN(parsedDateTime)) return parsedDateTime;
20
20
  } else if (value instanceof Date || "function" == typeof value?.getTime) return value.getTime();
@@ -1 +1 @@
1
- {"version":3,"file":"transforms/datetime.js","sources":["../../src/transforms/datetime.ts"],"sourcesContent":["/* File is @internal. */\nimport { parseISO } from \"date-fns\";\nimport {\n CmsFieldFilterValueTransformPlugin,\n CmsFieldFilterValueTransformParams\n} from \"../plugins/CmsFieldFilterValueTransformPlugin.js\";\n\nconst transformTime = (value: any): number => {\n if (value === undefined || value === null) {\n throw new Error(`Time value is null or undefined.`);\n } else if (typeof value === \"boolean\" || value === \"\" || Array.isArray(value)) {\n throw new Error(\"Field value must be a string because field is defined as time.\");\n }\n const converted = Number(`${value}`);\n if (typeof value === \"number\" || isNaN(converted) === false) {\n return Number(value);\n } else if (typeof value !== \"string\") {\n throw new Error(\"Field value must be a string because field is defined as time.\");\n }\n /* This is for the time format, eg. 12:36:25 or 12:36:25.881. */\n const [time, milliseconds = 0] = value.split(\".\");\n const values = time.split(\":\").map(Number);\n if (values.length < 2) {\n throw new Error(\"Time must contain at least hours and minutes.\");\n }\n const [hours, minutes, seconds = 0] = values;\n return (hours * 60 * 60 + minutes * 60 + seconds) * 1000 + Number(milliseconds);\n};\n\nconst transformDateTime = (value: any): number | null => {\n if (value === null || value === undefined) {\n return null;\n } else if (typeof value === \"string\") {\n const parsedDateTime = parseISO(value).getTime();\n if (isNaN(parsedDateTime) === false) {\n return parsedDateTime;\n }\n } else if (value instanceof Date || typeof (value as unknown as Date)?.getTime === \"function\") {\n /* In this case we assume this is a date object, and we just get the time. */\n return value.getTime();\n }\n /* No point in throwing an error here, as this would cause the entire transformation to fail. Instead, we just log a warning and return null. */\n console.warn(\"Could not parse given dateTime value.\", \"PARSE_DATE_ERROR\", {\n value\n });\n return null;\n};\n\nexport const createDatetimeTransformValuePlugin = (): CmsFieldFilterValueTransformPlugin => {\n return new CmsFieldFilterValueTransformPlugin({\n name: \"cms-field-value-filter-transform-datetime\",\n fieldType: \"datetime\",\n /* Always transform into the milliseconds. */\n transform: ({ field, value }: CmsFieldFilterValueTransformParams) => {\n const { type } = field.settings || {};\n if (type === \"time\") {\n return transformTime(value);\n }\n return transformDateTime(value);\n }\n });\n};\n"],"names":["transformTime","value","Error","Array","converted","Number","isNaN","time","milliseconds","values","hours","minutes","seconds","transformDateTime","parsedDateTime","parseISO","Date","console","createDatetimeTransformValuePlugin","CmsFieldFilterValueTransformPlugin","field","type"],"mappings":";;AAOA,MAAMA,gBAAgB,CAACC;IACnB,IAAIA,QAAAA,OACA,MAAM,IAAIC,MAAM;IACb,IAAI,AAAiB,aAAjB,OAAOD,SAAuBA,AAAU,OAAVA,SAAgBE,MAAM,OAAO,CAACF,QACnE,MAAM,IAAIC,MAAM;IAEpB,MAAME,YAAYC,OAAO,GAAGJ,OAAO;IACnC,IAAI,AAAiB,YAAjB,OAAOA,SAAsBK,AAAqB,UAArBA,MAAMF,YACnC,OAAOC,OAAOJ;IACX,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,MAAM;IAGpB,MAAM,CAACK,MAAMC,eAAe,CAAC,CAAC,GAAGP,MAAM,KAAK,CAAC;IAC7C,MAAMQ,SAASF,KAAK,KAAK,CAAC,KAAK,GAAG,CAACF;IACnC,IAAII,OAAO,MAAM,GAAG,GAChB,MAAM,IAAIP,MAAM;IAEpB,MAAM,CAACQ,OAAOC,SAASC,UAAU,CAAC,CAAC,GAAGH;IACtC,OAAQC,AAAAA,CAAAA,AAAQ,KAARA,QAAa,KAAKC,AAAU,KAAVA,UAAeC,OAAM,IAAK,OAAOP,OAAOG;AACtE;AAEA,MAAMK,oBAAoB,CAACZ;IACvB,IAAIA,QAAAA,OACA,OAAO;IACJ,IAAI,AAAiB,YAAjB,OAAOA,OAAoB;QAClC,MAAMa,iBAAiBC,SAASd,OAAO,OAAO;QAC9C,IAAIK,AAA0B,UAA1BA,MAAMQ,iBACN,OAAOA;IAEf,OAAO,IAAIb,iBAAiBe,QAAQ,AAA+C,cAA/C,OAAQf,OAA2B,SAEnE,OAAOA,MAAM,OAAO;IAGxBgB,QAAQ,IAAI,CAAC,yCAAyC,oBAAoB;QACtEhB;IACJ;IACA,OAAO;AACX;AAEO,MAAMiB,qCAAqC,IACvC,IAAIC,mCAAmC;QAC1C,MAAM;QACN,WAAW;QAEX,WAAW,CAAC,EAAEC,KAAK,EAAEnB,KAAK,EAAsC;YAC5D,MAAM,EAAEoB,IAAI,EAAE,GAAGD,MAAM,QAAQ,IAAI,CAAC;YACpC,IAAIC,AAAS,WAATA,MACA,OAAOrB,cAAcC;YAEzB,OAAOY,kBAAkBZ;QAC7B;IACJ"}
1
+ {"version":3,"file":"transforms/datetime.js","sources":["../../src/transforms/datetime.ts"],"sourcesContent":["/* File is @internal. */\nimport { parseISO } from \"date-fns\";\nimport {\n CmsFieldFilterValueTransformPlugin,\n CmsFieldFilterValueTransformParams\n} from \"../plugins/CmsFieldFilterValueTransformPlugin.js\";\n\nconst transformTime = (value: any): number => {\n if (value === undefined || value === null) {\n throw new Error(`Time value is null or undefined.`);\n } else if (typeof value === \"boolean\" || value === \"\" || Array.isArray(value)) {\n throw new Error(\"Field value must be a string because field is defined as time.\");\n }\n const converted = Number(`${value}`);\n if (typeof value === \"number\" || isNaN(converted) === false) {\n return Number(value);\n } else if (typeof value !== \"string\") {\n throw new Error(\"Field value must be a string because field is defined as time.\");\n }\n /* This is for the time format, eg. 12:36:25 or 12:36:25.881. */\n const [time, milliseconds = 0] = value.split(\".\");\n const values = time.split(\":\").map(Number);\n if (values.length < 2) {\n throw new Error(\"Time must contain at least hours and minutes.\");\n }\n const [hours, minutes, seconds = 0] = values;\n return (hours * 60 * 60 + minutes * 60 + seconds) * 1000 + Number(milliseconds);\n};\n\nconst transformDateTime = (value: any): number | null => {\n if (value === null || value === undefined) {\n return null;\n } else if (typeof value === \"string\") {\n const parsedDateTime = parseISO(value).getTime();\n if (isNaN(parsedDateTime) === false) {\n return parsedDateTime;\n }\n } else if (value instanceof Date || typeof (value as unknown as Date)?.getTime === \"function\") {\n /* In this case we assume this is a date object, and we just get the time. */\n return value.getTime();\n }\n /* No point in throwing an error here, as this would cause the entire transformation to fail. Instead, we just log a warning and return null. */\n console.warn(\"Could not parse given dateTime value.\", \"PARSE_DATE_ERROR\", {\n value\n });\n return null;\n};\n\nexport const createDatetimeTransformValuePlugin = (): CmsFieldFilterValueTransformPlugin => {\n return new CmsFieldFilterValueTransformPlugin({\n name: \"cms-field-value-filter-transform-datetime\",\n fieldType: \"datetime\",\n /* Always transform into the milliseconds. */\n transform: ({ field, value }: CmsFieldFilterValueTransformParams) => {\n const { type } = field.settings || {};\n if (type === \"time\") {\n return transformTime(value);\n }\n return transformDateTime(value);\n }\n });\n};\n"],"names":["transformTime","value","Error","Array","converted","Number","isNaN","time","milliseconds","values","hours","minutes","seconds","transformDateTime","parsedDateTime","parseISO","Date","console","createDatetimeTransformValuePlugin","CmsFieldFilterValueTransformPlugin","field","type"],"mappings":";;AAOA,MAAMA,gBAAgB,CAACC;IACnB,IAAIA,QAAAA,OACA,MAAM,IAAIC,MAAM;SACb,IAAI,AAAiB,aAAjB,OAAOD,SAAuBA,AAAU,OAAVA,SAAgBE,MAAM,OAAO,CAACF,QACnE,MAAM,IAAIC,MAAM;IAEpB,MAAME,YAAYC,OAAO,GAAGJ,OAAO;IACnC,IAAI,AAAiB,YAAjB,OAAOA,SAAsBK,AAAqB,UAArBA,MAAMF,YACnC,OAAOC,OAAOJ;SACX,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,MAAM;IAGpB,MAAM,CAACK,MAAMC,eAAe,CAAC,CAAC,GAAGP,MAAM,KAAK,CAAC;IAC7C,MAAMQ,SAASF,KAAK,KAAK,CAAC,KAAK,GAAG,CAACF;IACnC,IAAII,OAAO,MAAM,GAAG,GAChB,MAAM,IAAIP,MAAM;IAEpB,MAAM,CAACQ,OAAOC,SAASC,UAAU,CAAC,CAAC,GAAGH;IACtC,OAAQC,AAAAA,CAAAA,AAAQ,KAARA,QAAa,KAAKC,AAAU,KAAVA,UAAeC,OAAM,IAAK,OAAOP,OAAOG;AACtE;AAEA,MAAMK,oBAAoB,CAACZ;IACvB,IAAIA,QAAAA,OACA,OAAO;SACJ,IAAI,AAAiB,YAAjB,OAAOA,OAAoB;QAClC,MAAMa,iBAAiBC,SAASd,OAAO,OAAO;QAC9C,IAAIK,AAA0B,UAA1BA,MAAMQ,iBACN,OAAOA;IAEf,OAAO,IAAIb,iBAAiBe,QAAQ,AAA+C,cAA/C,OAAQf,OAA2B,SAEnE,OAAOA,MAAM,OAAO;IAGxBgB,QAAQ,IAAI,CAAC,yCAAyC,oBAAoB;QACtEhB;IACJ;IACA,OAAO;AACX;AAEO,MAAMiB,qCAAqC,IACvC,IAAIC,mCAAmC;QAC1C,MAAM;QACN,WAAW;QAEX,WAAW,CAAC,EAAEC,KAAK,EAAEnB,KAAK,EAAsC;YAC5D,MAAM,EAAEoB,IAAI,EAAE,GAAGD,MAAM,QAAQ,IAAI,CAAC;YACpC,IAAIC,AAAS,WAATA,MACA,OAAOrB,cAAcC;YAEzB,OAAOY,kBAAkBZ;QAC7B;IACJ"}