@webiny/api-headless-cms 5.27.0 → 5.28.0-beta.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.
- package/content/contextSetup.js.map +1 -1
- package/content/graphQLHandlerFactory.js.map +1 -1
- package/content/parameterPlugins.js.map +1 -1
- package/content/plugins/CmsGroupPlugin.js.map +1 -1
- package/content/plugins/CmsModelPlugin.js.map +1 -1
- package/content/plugins/CmsParametersPlugin.js.map +1 -1
- package/content/plugins/buildSchemaPlugins.js.map +1 -1
- package/content/plugins/crud/contentEntry/afterDelete.js.map +1 -1
- package/content/plugins/crud/contentEntry/beforeCreate.js.map +1 -1
- package/content/plugins/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/content/plugins/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/content/plugins/crud/contentEntry/markLockedFields.js.map +1 -1
- package/content/plugins/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/content/plugins/crud/contentEntry.crud.js.map +1 -1
- package/content/plugins/crud/contentModel/afterCreate.js.map +1 -1
- package/content/plugins/crud/contentModel/afterCreateFrom.js.map +1 -1
- package/content/plugins/crud/contentModel/afterDelete.js.map +1 -1
- package/content/plugins/crud/contentModel/afterUpdate.js.map +1 -1
- package/content/plugins/crud/contentModel/beforeCreate.js +26 -4
- package/content/plugins/crud/contentModel/beforeCreate.js.map +1 -1
- package/content/plugins/crud/contentModel/beforeDelete.js.map +1 -1
- package/content/plugins/crud/contentModel/beforeUpdate.js +5 -188
- package/content/plugins/crud/contentModel/beforeUpdate.js.map +1 -1
- package/content/plugins/crud/contentModel/contentModelManagerFactory.js.map +1 -1
- package/content/plugins/crud/contentModel/createFieldModels.d.ts +2 -2
- package/content/plugins/crud/contentModel/createFieldModels.js +6 -2
- package/content/plugins/crud/contentModel/createFieldModels.js.map +1 -1
- package/content/plugins/crud/contentModel/idValidation.js.map +1 -1
- package/content/plugins/crud/contentModel/models.d.ts +1 -1
- package/content/plugins/crud/contentModel/models.js +43 -33
- package/content/plugins/crud/contentModel/models.js.map +1 -1
- package/content/plugins/crud/contentModel/validateLayout.d.ts +1 -1
- package/content/plugins/crud/contentModel/validateLayout.js +2 -3
- package/content/plugins/crud/contentModel/validateLayout.js.map +1 -1
- package/content/plugins/crud/contentModel/validateModelFields.d.ts +8 -0
- package/content/plugins/crud/contentModel/validateModelFields.js +201 -0
- package/content/plugins/crud/contentModel/validateModelFields.js.map +1 -0
- package/content/plugins/crud/contentModel.crud.js +7 -5
- package/content/plugins/crud/contentModel.crud.js.map +1 -1
- package/content/plugins/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/content/plugins/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/content/plugins/crud/contentModelGroup/beforeUpdate.js.map +1 -1
- package/content/plugins/crud/contentModelGroup.crud.js.map +1 -1
- package/content/plugins/crud/index.js.map +1 -1
- package/content/plugins/graphqlFields/boolean.js.map +1 -1
- package/content/plugins/graphqlFields/datetime.js.map +1 -1
- package/content/plugins/graphqlFields/file.js.map +1 -1
- package/content/plugins/graphqlFields/helpers.js.map +1 -1
- package/content/plugins/graphqlFields/index.js.map +1 -1
- package/content/plugins/graphqlFields/longText.js.map +1 -1
- package/content/plugins/graphqlFields/number.js.map +1 -1
- package/content/plugins/graphqlFields/object.js.map +1 -1
- package/content/plugins/graphqlFields/ref.js.map +1 -1
- package/content/plugins/graphqlFields/richText.js.map +1 -1
- package/content/plugins/graphqlFields/text.js.map +1 -1
- package/content/plugins/internalSecurity/InternalAuthenticationPlugin.js.map +1 -1
- package/content/plugins/internalSecurity/InternalAuthorizationPlugin.js.map +1 -1
- package/content/plugins/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/content/plugins/modelManager/index.js.map +1 -1
- package/content/plugins/schema/baseSchema.js.map +1 -1
- package/content/plugins/schema/contentEntries.js.map +1 -1
- package/content/plugins/schema/contentModelGroups.js.map +1 -1
- package/content/plugins/schema/contentModels.js +3 -0
- package/content/plugins/schema/contentModels.js.map +1 -1
- package/content/plugins/schema/createFieldResolvers.js.map +1 -1
- package/content/plugins/schema/createManageResolvers.js.map +1 -1
- package/content/plugins/schema/createManageSDL.js.map +1 -1
- package/content/plugins/schema/createPreviewResolvers.js.map +1 -1
- package/content/plugins/schema/createReadResolvers.js.map +1 -1
- package/content/plugins/schema/createReadSDL.js.map +1 -1
- package/content/plugins/schema/resolvers/commonFieldResolvers.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveCreate.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveList.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveRepublish.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveRequestChanges.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveRequestReview.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
- package/content/plugins/schema/resolvers/manage/resolveUpdate.js.map +1 -1
- package/content/plugins/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/content/plugins/schema/resolvers/preview/resolveList.js.map +1 -1
- package/content/plugins/schema/resolvers/read/resolveGet.js.map +1 -1
- package/content/plugins/schema/resolvers/read/resolveList.js.map +1 -1
- package/content/plugins/schema/schemaPlugins.js.map +1 -1
- package/content/plugins/storage/StorageTransformPlugin.js.map +1 -1
- package/content/plugins/storage/default.js.map +1 -1
- package/content/plugins/storage/object.js.map +1 -1
- package/content/plugins/utils/createTypeName.js.map +1 -1
- package/content/plugins/utils/entryStorage.js.map +1 -1
- package/content/plugins/utils/getEntryTitle.js.map +1 -1
- package/content/plugins/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/content/plugins/utils/pluralizedTypeName.js.map +1 -1
- package/content/plugins/utils/renderFields.js.map +1 -1
- package/content/plugins/utils/renderGetFilterFields.js.map +1 -1
- package/content/plugins/utils/renderInputFields.js.map +1 -1
- package/content/plugins/utils/renderListFilterFields.js.map +1 -1
- package/content/plugins/utils/renderSortEnum.js.map +1 -1
- package/content/plugins/validators/dateGte.js.map +1 -1
- package/content/plugins/validators/dateLte.js.map +1 -1
- package/content/plugins/validators/gte.js.map +1 -1
- package/content/plugins/validators/in.js.map +1 -1
- package/content/plugins/validators/index.js.map +1 -1
- package/content/plugins/validators/lte.js.map +1 -1
- package/content/plugins/validators/maxLength.js.map +1 -1
- package/content/plugins/validators/minLength.js.map +1 -1
- package/content/plugins/validators/pattern.js.map +1 -1
- package/content/plugins/validators/patternPlugins/email.js.map +1 -1
- package/content/plugins/validators/patternPlugins/index.js.map +1 -1
- package/content/plugins/validators/patternPlugins/lowerCase.js.map +1 -1
- package/content/plugins/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
- package/content/plugins/validators/patternPlugins/upperCase.js.map +1 -1
- package/content/plugins/validators/patternPlugins/upperCaseSpace.js.map +1 -1
- package/content/plugins/validators/patternPlugins/url.js.map +1 -1
- package/content/plugins/validators/required.js.map +1 -1
- package/content/plugins/validators/timeGte.js.map +1 -1
- package/content/plugins/validators/timeLte.js.map +1 -1
- package/content/plugins/validators/unique.js.map +1 -1
- package/index.js.map +1 -1
- package/migrateCMSPermissions.js.map +1 -1
- package/package.json +25 -25
- package/plugins/context.js.map +1 -1
- package/plugins/crud/index.js.map +1 -1
- package/plugins/crud/settings.crud.js.map +1 -1
- package/plugins/crud/system.crud.js.map +1 -1
- package/plugins/graphql/system.js.map +1 -1
- package/plugins/graphql.js.map +1 -1
- package/plugins/upgrades/index.js.map +1 -1
- package/plugins/upgrades/v5.5.0/helpers.js.map +1 -1
- package/plugins/upgrades/v5.5.0/index.js.map +1 -1
- package/transformers.js.map +1 -1
- package/types.d.ts +20 -0
- package/types.js.map +1 -1
- package/utils.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["getParameters","context","plugins","byType","CmsParametersPlugin","type","plugin","result","WebinyError","ContextPlugin","http","request","method","locale","systemLocale","i18n","getLocale","cms","READ","PREVIEW","MANAGE"],"sources":["contextSetup.ts"],"sourcesContent":["import { CmsContext } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport { ContextPlugin } from \"@webiny/handler\";\nimport {\n CmsParametersPlugin,\n CmsParametersPluginResponse\n} from \"~/content/plugins/CmsParametersPlugin\";\n\nconst getParameters = async (context: CmsContext): Promise<CmsParametersPluginResponse> => {\n const plugins = context.plugins.byType<CmsParametersPlugin>(CmsParametersPlugin.type);\n\n for (const plugin of plugins) {\n const result = await plugin.getParameters(context);\n if (result !== null) {\n return result;\n }\n }\n throw new WebinyError(\n \"Could not determine locale and/or type of the CMS.\",\n \"CMS_LOCALE_AND_TYPE_ERROR\"\n );\n};\n\nexport default () => {\n return new ContextPlugin<CmsContext>(async context => {\n if (context.http?.request?.method === \"OPTIONS\") {\n return;\n }\n\n const { type, locale } = await getParameters(context);\n\n const systemLocale = context.i18n.getLocale(locale);\n if (!systemLocale) {\n throw new WebinyError(`There is no locale \"${locale}\" in the system.`);\n }\n\n context.cms = {\n ...((context.cms || {}) as any),\n type,\n locale,\n getLocale: () => systemLocale,\n READ: type === \"read\",\n PREVIEW: type === \"preview\",\n MANAGE: type === \"manage\"\n } as any;\n });\n};\n"],"mappings":";;;;;;;;;;;AACA;;AACA;;AACA;;;;;;AAKA,MAAMA,aAAa,GAAG,MAAOC,OAAP,IAAqE;EACvF,MAAMC,OAAO,GAAGD,OAAO,CAACC,OAAR,CAAgBC,MAAhB,CAA4CC,wCAAA,CAAoBC,IAAhE,CAAhB;;EAEA,KAAK,MAAMC,MAAX,IAAqBJ,OAArB,EAA8B;IAC1B,MAAMK,MAAM,GAAG,MAAMD,MAAM,CAACN,aAAP,CAAqBC,OAArB,CAArB;;IACA,IAAIM,MAAM,KAAK,IAAf,EAAqB;MACjB,OAAOA,MAAP;IACH;EACJ;;EACD,MAAM,IAAIC,cAAJ,CACF,oDADE,EAEF,2BAFE,CAAN;AAIH,CAbD;;eAee,MAAM;EACjB,OAAO,IAAIC,sBAAJ,CAA8B,MAAMR,OAAN,IAAiB;IAAA;;IAClD,IAAI,kBAAAA,OAAO,CAACS,IAAR,yFAAcC,OAAd,gFAAuBC,MAAvB,MAAkC,SAAtC,EAAiD;MAC7C;IACH;;IAED,MAAM;MAAEP,IAAF;MAAQQ;IAAR,IAAmB,MAAMb,aAAa,CAACC,OAAD,CAA5C;IAEA,MAAMa,YAAY,GAAGb,OAAO,CAACc,IAAR,CAAaC,SAAb,CAAuBH,MAAvB,CAArB;;IACA,IAAI,CAACC,YAAL,EAAmB;MACf,MAAM,IAAIN,cAAJ,CAAiB,uBAAsBK,MAAO,kBAA9C,CAAN;IACH;;IAEDZ,OAAO,CAACgB,GAAR,mCACShB,OAAO,CAACgB,GAAR,IAAe,EADxB;MAEIZ,IAFJ;MAGIQ,MAHJ;MAIIG,SAAS,EAAE,MAAMF,YAJrB;MAKII,IAAI,EAAEb,IAAI,KAAK,MALnB;MAMIc,OAAO,EAAEd,IAAI,KAAK,SANtB;MAOIe,MAAM,EAAEf,IAAI,KAAK;IAPrB;EASH,CArBM,CAAP;AAsBH,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["graphQLHandlerFactory.ts"],"names":["DEFAULT_HEADERS","DEFAULT_CACHE_MAX_AGE","OPTIONS_HEADERS","respond","http","result","response","body","JSON","stringify","statusCode","headers","schemaList","Map","generateCacheKey","args","context","locale","type","lastModelChange","cms","getModelLastChange","code","toISOString","join","generateSchema","plugins","register","typeDefs","resolvers","schemaPlugins","byType","GraphQLSchemaPlugin","pl","push","schema","getSchema","tenantId","tenancy","getCurrentTenant","id","cacheKey","has","set","key","cache","get","checkEndpointAccess","permission","security","getPermission","NotAuthorizedError","data","reason","graphQLHandlerFactory","options","debug","handler","name","handle","next","request","method","toLowerCase","ex","NotAuthorizedResponse","getLocale","parse"],"mappings":";;;;;;;;;;;AAAA;;AAEA;;AAGA;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;;;AAkBA,MAAMA,eAAuC;AACzC,iCAA+B,GADU;AAEzC,kCAAgC,GAFS;AAGzC,kCAAgC,cAHS;AAIzC,kBAAgB;AAJyB,GAKtC,qCALsC,CAA7C;;AAQA,MAAMC,qBAAqB,GAAG,QAA9B,C,CAAwC;;AAExC,MAAMC,eAAuC,GAAG;AAC5C,4BAA2B,GAAED,qBAAsB,EADP;AAE5C,mBAAkB,mBAAkBA,qBAAsB;AAFd,CAAhD;;AAKA,MAAME,OAAO,GAAG,CAACC,IAAD,EAAmBC,MAAnB,KAAuC;AACnD,SAAOD,IAAI,CAACE,QAAL,CAAc;AACjBC,IAAAA,IAAI,EAAEC,IAAI,CAACC,SAAL,CAAeJ,MAAf,CADW;AAEjBK,IAAAA,UAAU,EAAE,GAFK;AAGjBC,IAAAA,OAAO,EAAEX;AAHQ,GAAd,CAAP;AAKH,CAND;;AAOA,MAAMY,UAAU,GAAG,IAAIC,GAAJ,EAAnB;;AAEA,MAAMC,gBAAgB,GAAG,MAAOC,IAAP,IAAuC;AAC5D,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,MAAX;AAAmBC,IAAAA;AAAnB,MAA4BH,IAAlC;AACA,QAAMI,eAAe,GAAG,MAAMH,OAAO,CAACI,GAAR,CAAYC,kBAAZ,EAA9B;AACA,SAAO,CAACJ,MAAM,CAACK,IAAR,EAAcJ,IAAd,EAAoBC,eAAe,CAACI,WAAhB,EAApB,EAAmDC,IAAnD,CAAwD,GAAxD,CAAP;AACH,CAJD;;AAMA,MAAMC,cAAc,GAAG,MAAOV,IAAP,IAA8C;AACjE,QAAM;AAAEC,IAAAA;AAAF,MAAcD,IAApB;AAEAC,EAAAA,OAAO,CAACU,OAAR,CAAgBC,QAAhB,CAAyB,MAAM,iCAAmBX,OAAnB,CAA/B;AACA;AACJ;AACA;AACI;;AACA,QAAMY,QAAa,GAAG,EAAtB;AACA,QAAMC,SAAc,GAAG,EAAvB,CATiE,CAWjE;;AACA,QAAMC,aAAa,GAAGd,OAAO,CAACU,OAAR,CAAgBK,MAAhB,CAA4CC,6BAAoBd,IAAhE,CAAtB;;AACA,OAAK,MAAMe,EAAX,IAAiBH,aAAjB,EAAgC;AAC5BF,IAAAA,QAAQ,CAACM,IAAT,CAAcD,EAAE,CAACE,MAAH,CAAUP,QAAxB;AACAC,IAAAA,SAAS,CAACK,IAAV,CAAeD,EAAE,CAACE,MAAH,CAAUN,SAAzB;AACH;;AAED,SAAO,kCAAqB;AACxBD,IAAAA,QADwB;AAExBC,IAAAA;AAFwB,GAArB,CAAP;AAIH,CAtBD,C,CAwBA;AACA;;;AACA,MAAMO,SAAS,GAAG,MAAOrB,IAAP,IAA8C;AAC5D,QAAM;AAAEC,IAAAA,OAAF;AAAWE,IAAAA,IAAX;AAAiBD,IAAAA;AAAjB,MAA4BF,IAAlC;AACA,QAAMsB,QAAQ,GAAGrB,OAAO,CAACsB,OAAR,CAAgBC,gBAAhB,GAAmCC,EAApD;AACA,QAAMA,EAAE,GAAI,GAAEH,QAAS,IAAGnB,IAAK,IAAGD,MAAM,CAACK,IAAK,EAA9C;AAEA,QAAMmB,QAAQ,GAAG,MAAM3B,gBAAgB,CAACC,IAAD,CAAvC;;AACA,MAAI,CAACH,UAAU,CAAC8B,GAAX,CAAeF,EAAf,CAAL,EAAyB;AACrB,UAAML,MAAM,GAAG,MAAMV,cAAc,CAACV,IAAD,CAAnC;AAEAH,IAAAA,UAAU,CAAC+B,GAAX,CAAeH,EAAf,EAAmB;AACfI,MAAAA,GAAG,EAAEH,QADU;AAEfN,MAAAA;AAFe,KAAnB;AAIA,WAAOA,MAAP;AACH;AACD;AACJ;AACA;;;AACI,QAAMU,KAAK,GAAGjC,UAAU,CAACkC,GAAX,CAAeN,EAAf,CAAd;;AACA,MAAIK,KAAK,CAACD,GAAN,KAAcH,QAAlB,EAA4B;AACxB,WAAOI,KAAK,CAACV,MAAb;AACH;;AACD,QAAMA,MAAM,GAAG,MAAMV,cAAc,CAACV,IAAD,CAAnC;AACAH,EAAAA,UAAU,CAAC+B,GAAX,CAAeH,EAAf,EAAmB;AACfI,IAAAA,GAAG,EAAEH,QADU;AAEfN,IAAAA;AAFe,GAAnB;AAIA,SAAOA,MAAP;AACH,CA5BD;;AA8BA,MAAMY,mBAAmB,GAAG,MAAO/B,OAAP,IAA8C;AACtE,QAAMgC,UAAU,GAAG,MAAMhC,OAAO,CAACiC,QAAR,CAAiBC,aAAjB,CAAgC,gBAAelC,OAAO,CAACI,GAAR,CAAYF,IAAK,EAAhE,CAAzB;;AACA,MAAI,CAAC8B,UAAL,EAAiB;AACb,UAAM,IAAIG,+BAAJ,CAAuB;AACzBC,MAAAA,IAAI,EAAE;AACFC,QAAAA,MAAM,EAAG,0BAAyBrC,OAAO,CAACI,GAAR,CAAYF,IAAK;AADjD;AADmB,KAAvB,CAAN;AAKH;AACJ,CATD;;AAWO,MAAMoC,qBAAqB,GAAG,CACjCC,OAAoC,GAAG,EADN,KAEd;AACnB,QAAMC,KAAK,GAAG,sBAAQD,OAAO,CAACC,KAAhB,CAAd;AAEA,QAAMC,OAAsB,GAAG;AAC3BvC,IAAAA,IAAI,EAAE,SADqB;AAE3BwC,IAAAA,IAAI,EAAE,+BAFqB;;AAG3B,UAAMC,MAAN,CAAa3C,OAAb,EAAkC4C,IAAlC,EAAwC;AACpC,YAAM;AAAExD,QAAAA;AAAF,UAAWY,OAAjB;;AAEA,UAAI,CAACZ,IAAD,IAAS,CAACA,IAAI,CAACyD,OAAnB,EAA4B;AACxB,eAAOD,IAAI,EAAX;AACH;;AAED,YAAME,MAAM,GAAG,CAAC1D,IAAI,CAACyD,OAAL,CAAaC,MAAb,IAAuB,EAAxB,EAA4BC,WAA5B,EAAf;AACA;AACZ;AACA;;AACY,UAAID,MAAM,CAACC,WAAP,OAAyB,SAA7B,EAAwC;AACpC,eAAO3D,IAAI,CAACE,QAAL,CAAc;AACjBI,UAAAA,UAAU,EAAE,GADK;AAEjBC,UAAAA,OAAO,kCACAX,eADA,GAEAE,eAFA;AAFU,SAAd,CAAP;AAOH;AACD;AACZ;AACA;;;AACY,UAAI4D,MAAM,KAAK,MAAf,EAAuB;AACnB,eAAOF,IAAI,EAAX;AACH;;AAED,UAAI;AACA,cAAMb,mBAAmB,CAAC/B,OAAD,CAAzB;AACH,OAFD,CAEE,OAAOgD,EAAP,EAAW;AACT,eAAO7D,OAAO,CAACC,IAAD,EAAO,IAAI6D,kCAAJ,CAA0BD,EAA1B,CAAP,CAAd;AACH;;AAED,YAAM7B,MAAM,GAAG,MAAMC,SAAS,CAAC;AAC3BpB,QAAAA,OAD2B;AAE3BC,QAAAA,MAAM,EAAED,OAAO,CAACI,GAAR,CAAY8C,SAAZ,EAFmB;AAG3BhD,QAAAA,IAAI,EAAEF,OAAO,CAACI,GAAR,CAAYF;AAHS,OAAD,CAA9B;AAMA,YAAMX,IAA+C,GAAGC,IAAI,CAAC2D,KAAL,CAAW/D,IAAI,CAACyD,OAAL,CAAatD,IAAxB,CAAxD;AAEA,YAAMF,MAAM,GAAG,MAAM,iCAAmBE,IAAnB,EAAyB4B,MAAzB,EAAiCnB,OAAjC,CAArB;AACA,aAAOb,OAAO,CAACC,IAAD,EAAOC,MAAP,CAAd;AACH;;AA9C0B,GAA/B;AAiDA,SAAO,CAAC,IAAImD,KAAK,GAAG,4BAAH,GAAoB,EAA7B,CAAD,EAAmCC,OAAnC,EAA4C;AAAEvC,IAAAA,IAAI,EAAE;AAAR,GAA5C,CAAP;AACH,CAvDM","sourcesContent":["import { boolean } from \"boolean\";\nimport { GraphQLSchema } from \"graphql\";\nimport { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { CmsContext } from \"~/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { NotAuthorizedError, NotAuthorizedResponse } from \"@webiny/api-security\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport debugPlugins from \"@webiny/handler-graphql/debugPlugins\";\nimport processRequestBody from \"@webiny/handler-graphql/processRequestBody\";\nimport buildSchemaPlugins from \"./plugins/buildSchemaPlugins\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins\";\nimport { getWebinyVersionHeaders } from \"@webiny/utils\";\nimport { HttpObject } from \"@webiny/handler-http/types\";\nimport { HandlerPlugin } from \"@webiny/handler/types\";\nimport { GraphQLRequestBody } from \"@webiny/handler-graphql/types\";\n\nexport interface CreateGraphQLHandlerOptions {\n debug?: boolean;\n}\ninterface SchemaCache {\n key: string;\n schema: GraphQLSchema;\n}\ninterface Args {\n context: CmsContext;\n type: string;\n locale: I18NLocale;\n}\n\nconst DEFAULT_HEADERS: Record<string, string> = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Headers\": \"*\",\n \"Access-Control-Allow-Methods\": \"OPTIONS,POST\",\n \"Content-Type\": \"application/json\",\n ...getWebinyVersionHeaders()\n};\n\nconst DEFAULT_CACHE_MAX_AGE = 30758400; // 1 year\n\nconst OPTIONS_HEADERS: Record<string, string> = {\n \"Access-Control-Max-Age\": `${DEFAULT_CACHE_MAX_AGE}`,\n \"Cache-Control\": `public, max-age=${DEFAULT_CACHE_MAX_AGE}`\n};\n\nconst respond = (http: HttpObject, result: unknown) => {\n return http.response({\n body: JSON.stringify(result),\n statusCode: 200,\n headers: DEFAULT_HEADERS\n });\n};\nconst schemaList = new Map<string, SchemaCache>();\n\nconst generateCacheKey = async (args: Args): Promise<string> => {\n const { context, locale, type } = args;\n const lastModelChange = await context.cms.getModelLastChange();\n return [locale.code, type, lastModelChange.toISOString()].join(\"#\");\n};\n\nconst generateSchema = async (args: Args): Promise<GraphQLSchema> => {\n const { context } = args;\n\n context.plugins.register(await buildSchemaPlugins(context));\n /**\n * Really hard to type this to satisfy the makeExecutableSchema\n */\n // TODO @ts-refactor\n const typeDefs: any = [];\n const resolvers: any = [];\n\n // Get schema definitions from plugins\n const schemaPlugins = context.plugins.byType<GraphQLSchemaPlugin>(GraphQLSchemaPlugin.type);\n for (const pl of schemaPlugins) {\n typeDefs.push(pl.schema.typeDefs);\n resolvers.push(pl.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n\n// gets an existing schema or rewrites existing one or creates a completely new one\n// depending on the schemaId created from type and locale parameters\nconst getSchema = async (args: Args): Promise<GraphQLSchema> => {\n const { context, type, locale } = args;\n const tenantId = context.tenancy.getCurrentTenant().id;\n const id = `${tenantId}#${type}#${locale.code}`;\n\n const cacheKey = await generateCacheKey(args);\n if (!schemaList.has(id)) {\n const schema = await generateSchema(args);\n\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n }\n /**\n * Safe to cast because check was done few lines up.\n */\n const cache = schemaList.get(id) as SchemaCache;\n if (cache.key === cacheKey) {\n return cache.schema;\n }\n const schema = await generateSchema(args);\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n};\n\nconst checkEndpointAccess = async (context: CmsContext): Promise<void> => {\n const permission = await context.security.getPermission(`cms.endpoint.${context.cms.type}`);\n if (!permission) {\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access \"${context.cms.type}\" endpoint.`\n }\n });\n }\n};\n\nexport const graphQLHandlerFactory = (\n options: CreateGraphQLHandlerOptions = {}\n): PluginCollection => {\n const debug = boolean(options.debug);\n\n const handler: HandlerPlugin = {\n type: \"handler\",\n name: \"handler-graphql-content-model\",\n async handle(context: CmsContext, next) {\n const { http } = context;\n\n if (!http || !http.request) {\n return next();\n }\n\n const method = (http.request.method || \"\").toLowerCase();\n /**\n * In case of OPTIONS method we just return the headers since there is no need to go further.\n */\n if (method.toLowerCase() === \"options\") {\n return http.response({\n statusCode: 204,\n headers: {\n ...DEFAULT_HEADERS,\n ...OPTIONS_HEADERS\n }\n });\n }\n /**\n * We expect, and allow, only POST method to access our GraphQL\n */\n if (method !== \"post\") {\n return next();\n }\n\n try {\n await checkEndpointAccess(context);\n } catch (ex) {\n return respond(http, new NotAuthorizedResponse(ex));\n }\n\n const schema = await getSchema({\n context,\n locale: context.cms.getLocale(),\n type: context.cms.type\n });\n\n const body: GraphQLRequestBody | GraphQLRequestBody[] = JSON.parse(http.request.body);\n\n const result = await processRequestBody(body, schema, context);\n return respond(http, result);\n }\n };\n\n return [...(debug ? debugPlugins() : []), handler, { type: \"wcp-telemetry-tracker\" }];\n};\n"]}
|
|
1
|
+
{"version":3,"names":["DEFAULT_HEADERS","getWebinyVersionHeaders","DEFAULT_CACHE_MAX_AGE","OPTIONS_HEADERS","respond","http","result","response","body","JSON","stringify","statusCode","headers","schemaList","Map","generateCacheKey","args","context","locale","type","lastModelChange","cms","getModelLastChange","code","toISOString","join","generateSchema","plugins","register","buildSchemaPlugins","typeDefs","resolvers","schemaPlugins","byType","GraphQLSchemaPlugin","pl","push","schema","makeExecutableSchema","getSchema","tenantId","tenancy","getCurrentTenant","id","cacheKey","has","set","key","cache","get","checkEndpointAccess","permission","security","getPermission","NotAuthorizedError","data","reason","graphQLHandlerFactory","options","debug","boolean","handler","name","handle","next","request","method","toLowerCase","ex","NotAuthorizedResponse","getLocale","parse","processRequestBody","debugPlugins"],"sources":["graphQLHandlerFactory.ts"],"sourcesContent":["import { boolean } from \"boolean\";\nimport { GraphQLSchema } from \"graphql\";\nimport { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { CmsContext } from \"~/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { NotAuthorizedError, NotAuthorizedResponse } from \"@webiny/api-security\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport debugPlugins from \"@webiny/handler-graphql/debugPlugins\";\nimport processRequestBody from \"@webiny/handler-graphql/processRequestBody\";\nimport buildSchemaPlugins from \"./plugins/buildSchemaPlugins\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins\";\nimport { getWebinyVersionHeaders } from \"@webiny/utils\";\nimport { HttpObject } from \"@webiny/handler-http/types\";\nimport { HandlerPlugin } from \"@webiny/handler/types\";\nimport { GraphQLRequestBody } from \"@webiny/handler-graphql/types\";\n\nexport interface CreateGraphQLHandlerOptions {\n debug?: boolean;\n}\ninterface SchemaCache {\n key: string;\n schema: GraphQLSchema;\n}\ninterface Args {\n context: CmsContext;\n type: string;\n locale: I18NLocale;\n}\n\nconst DEFAULT_HEADERS: Record<string, string> = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Headers\": \"*\",\n \"Access-Control-Allow-Methods\": \"OPTIONS,POST\",\n \"Content-Type\": \"application/json\",\n ...getWebinyVersionHeaders()\n};\n\nconst DEFAULT_CACHE_MAX_AGE = 30758400; // 1 year\n\nconst OPTIONS_HEADERS: Record<string, string> = {\n \"Access-Control-Max-Age\": `${DEFAULT_CACHE_MAX_AGE}`,\n \"Cache-Control\": `public, max-age=${DEFAULT_CACHE_MAX_AGE}`\n};\n\nconst respond = (http: HttpObject, result: unknown) => {\n return http.response({\n body: JSON.stringify(result),\n statusCode: 200,\n headers: DEFAULT_HEADERS\n });\n};\nconst schemaList = new Map<string, SchemaCache>();\n\nconst generateCacheKey = async (args: Args): Promise<string> => {\n const { context, locale, type } = args;\n const lastModelChange = await context.cms.getModelLastChange();\n return [locale.code, type, lastModelChange.toISOString()].join(\"#\");\n};\n\nconst generateSchema = async (args: Args): Promise<GraphQLSchema> => {\n const { context } = args;\n\n context.plugins.register(await buildSchemaPlugins(context));\n /**\n * Really hard to type this to satisfy the makeExecutableSchema\n */\n // TODO @ts-refactor\n const typeDefs: any = [];\n const resolvers: any = [];\n\n // Get schema definitions from plugins\n const schemaPlugins = context.plugins.byType<GraphQLSchemaPlugin>(GraphQLSchemaPlugin.type);\n for (const pl of schemaPlugins) {\n typeDefs.push(pl.schema.typeDefs);\n resolvers.push(pl.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n\n// gets an existing schema or rewrites existing one or creates a completely new one\n// depending on the schemaId created from type and locale parameters\nconst getSchema = async (args: Args): Promise<GraphQLSchema> => {\n const { context, type, locale } = args;\n const tenantId = context.tenancy.getCurrentTenant().id;\n const id = `${tenantId}#${type}#${locale.code}`;\n\n const cacheKey = await generateCacheKey(args);\n if (!schemaList.has(id)) {\n const schema = await generateSchema(args);\n\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n }\n /**\n * Safe to cast because check was done few lines up.\n */\n const cache = schemaList.get(id) as SchemaCache;\n if (cache.key === cacheKey) {\n return cache.schema;\n }\n const schema = await generateSchema(args);\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n};\n\nconst checkEndpointAccess = async (context: CmsContext): Promise<void> => {\n const permission = await context.security.getPermission(`cms.endpoint.${context.cms.type}`);\n if (!permission) {\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access \"${context.cms.type}\" endpoint.`\n }\n });\n }\n};\n\nexport const graphQLHandlerFactory = (\n options: CreateGraphQLHandlerOptions = {}\n): PluginCollection => {\n const debug = boolean(options.debug);\n\n const handler: HandlerPlugin = {\n type: \"handler\",\n name: \"handler-graphql-content-model\",\n async handle(context: CmsContext, next) {\n const { http } = context;\n\n if (!http || !http.request) {\n return next();\n }\n\n const method = (http.request.method || \"\").toLowerCase();\n /**\n * In case of OPTIONS method we just return the headers since there is no need to go further.\n */\n if (method.toLowerCase() === \"options\") {\n return http.response({\n statusCode: 204,\n headers: {\n ...DEFAULT_HEADERS,\n ...OPTIONS_HEADERS\n }\n });\n }\n /**\n * We expect, and allow, only POST method to access our GraphQL\n */\n if (method !== \"post\") {\n return next();\n }\n\n try {\n await checkEndpointAccess(context);\n } catch (ex) {\n return respond(http, new NotAuthorizedResponse(ex));\n }\n\n const schema = await getSchema({\n context,\n locale: context.cms.getLocale(),\n type: context.cms.type\n });\n\n const body: GraphQLRequestBody | GraphQLRequestBody[] = JSON.parse(http.request.body);\n\n const result = await processRequestBody(body, schema, context);\n return respond(http, result);\n }\n };\n\n return [...(debug ? debugPlugins() : []), handler, { type: \"wcp-telemetry-tracker\" }];\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["createRequestPlugin","CmsParametersPlugin","context","http","request","path","parameters","key","WebinyError","type","locale","split","createManualPlugin","params","endpointType","createParametersPlugins"],"sources":["parameterPlugins.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n CmsParametersPlugin,\n CmsParametersPluginResponse\n} from \"~/content/plugins/CmsParametersPlugin\";\n\nexport interface CreateParametersPluginsParams {\n endpointType?: CmsParametersPluginResponse[\"type\"];\n locale?: CmsParametersPluginResponse[\"locale\"];\n}\n\nconst createRequestPlugin = () => {\n return new CmsParametersPlugin(async context => {\n /**\n * If any of the properties is not defined, just ignore this plugin\n */\n if (\n !context.http ||\n !context.http.request ||\n !context.http.request.path ||\n !context.http.request.path.parameters\n ) {\n return null;\n }\n\n const { key } = context.http.request.path.parameters;\n if (typeof key !== \"string\") {\n throw new WebinyError(\n \"The key property in context.http.request.path.parameters is not a string.\",\n \"MALFORMED_KEY\",\n {\n key\n }\n );\n }\n const [type, locale] = key.split(\"/\");\n if (!type) {\n throw new WebinyError(\n `Missing context.http.request.path.parameters.key parameter \"type\".`\n );\n } else if (!locale) {\n throw new WebinyError(`Missing context.http.request.path.parameters.key \"locale\".`);\n }\n\n return {\n type,\n locale\n };\n });\n};\n\nconst createManualPlugin = (params: CreateParametersPluginsParams): CmsParametersPlugin => {\n return new CmsParametersPlugin(async () => {\n /**\n * if both of parameters are not existing, just skip this plugin.\n */\n if (!params.endpointType && !params.locale) {\n return null;\n } else if (!params.endpointType) {\n throw new WebinyError(\n `There is defined locale CMS parameter but no endpointType.`,\n \"MALFORMED_ENDPOINT_TYPE\",\n {\n ...params\n }\n );\n } else if (!params.locale) {\n throw new WebinyError(\n `There is defined endpointType CMS parameter but no locale.`,\n \"MALFORMED_LOCALE_TYPE\",\n {\n ...params\n }\n );\n }\n\n return {\n type: params.endpointType,\n locale: params.locale\n };\n });\n};\nexport const createParametersPlugins = (\n params: CreateParametersPluginsParams\n): CmsParametersPlugin[] => {\n return [createManualPlugin(params), createRequestPlugin()];\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;;;;;AAUA,MAAMA,mBAAmB,GAAG,MAAM;EAC9B,OAAO,IAAIC,wCAAJ,CAAwB,MAAMC,OAAN,IAAiB;IAC5C;AACR;AACA;IACQ,IACI,CAACA,OAAO,CAACC,IAAT,IACA,CAACD,OAAO,CAACC,IAAR,CAAaC,OADd,IAEA,CAACF,OAAO,CAACC,IAAR,CAAaC,OAAb,CAAqBC,IAFtB,IAGA,CAACH,OAAO,CAACC,IAAR,CAAaC,OAAb,CAAqBC,IAArB,CAA0BC,UAJ/B,EAKE;MACE,OAAO,IAAP;IACH;;IAED,MAAM;MAAEC;IAAF,IAAUL,OAAO,CAACC,IAAR,CAAaC,OAAb,CAAqBC,IAArB,CAA0BC,UAA1C;;IACA,IAAI,OAAOC,GAAP,KAAe,QAAnB,EAA6B;MACzB,MAAM,IAAIC,cAAJ,CACF,2EADE,EAEF,eAFE,EAGF;QACID;MADJ,CAHE,CAAN;IAOH;;IACD,MAAM,CAACE,IAAD,EAAOC,MAAP,IAAiBH,GAAG,CAACI,KAAJ,CAAU,GAAV,CAAvB;;IACA,IAAI,CAACF,IAAL,EAAW;MACP,MAAM,IAAID,cAAJ,CACD,oEADC,CAAN;IAGH,CAJD,MAIO,IAAI,CAACE,MAAL,EAAa;MAChB,MAAM,IAAIF,cAAJ,CAAiB,4DAAjB,CAAN;IACH;;IAED,OAAO;MACHC,IADG;MAEHC;IAFG,CAAP;EAIH,CApCM,CAAP;AAqCH,CAtCD;;AAwCA,MAAME,kBAAkB,GAAIC,MAAD,IAAgE;EACvF,OAAO,IAAIZ,wCAAJ,CAAwB,YAAY;IACvC;AACR;AACA;IACQ,IAAI,CAACY,MAAM,CAACC,YAAR,IAAwB,CAACD,MAAM,CAACH,MAApC,EAA4C;MACxC,OAAO,IAAP;IACH,CAFD,MAEO,IAAI,CAACG,MAAM,CAACC,YAAZ,EAA0B;MAC7B,MAAM,IAAIN,cAAJ,CACD,4DADC,EAEF,yBAFE,oBAIKK,MAJL,EAAN;IAOH,CARM,MAQA,IAAI,CAACA,MAAM,CAACH,MAAZ,EAAoB;MACvB,MAAM,IAAIF,cAAJ,CACD,4DADC,EAEF,uBAFE,oBAIKK,MAJL,EAAN;IAOH;;IAED,OAAO;MACHJ,IAAI,EAAEI,MAAM,CAACC,YADV;MAEHJ,MAAM,EAAEG,MAAM,CAACH;IAFZ,CAAP;EAIH,CA5BM,CAAP;AA6BH,CA9BD;;AA+BO,MAAMK,uBAAuB,GAChCF,MADmC,IAEX;EACxB,OAAO,CAACD,kBAAkB,CAACC,MAAD,CAAnB,EAA6Bb,mBAAmB,EAAhD,CAAP;AACH,CAJM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["CmsGroupPlugin","Plugin","constructor","contentModelGroup"],"sources":["CmsGroupPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { CmsGroup as BaseCmsGroup } from \"~/types\";\n\nexport interface CmsGroup extends Omit<BaseCmsGroup, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n tenant?: string;\n locale?: string;\n}\nexport class CmsGroupPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model-group\";\n contentModelGroup: CmsGroup;\n\n constructor(contentModelGroup: CmsGroup) {\n super();\n this.contentModelGroup = contentModelGroup;\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AAOO,MAAMA,cAAN,SAA6BC,eAA7B,CAAoC;EAIvCC,WAAW,CAACC,iBAAD,EAA8B;IACrC;IADqC;IAErC,KAAKA,iBAAL,GAAyBA,iBAAzB;EACH;;AAPsC;;;8BAA9BH,c,UACsC,yB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["CmsModelPlugin","Plugin","constructor","contentModel"],"sources":["CmsModelPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { CmsModel as CmsModelBase } from \"~/types\";\n\nexport interface CmsModel extends Omit<CmsModelBase, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n locale?: string;\n tenant?: string;\n}\n\nexport class CmsModelPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model\";\n contentModel: CmsModel;\n\n constructor(contentModel: CmsModel) {\n super();\n this.contentModel = contentModel;\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AAQO,MAAMA,cAAN,SAA6BC,eAA7B,CAAoC;EAIvCC,WAAW,CAACC,YAAD,EAAyB;IAChC;IADgC;IAEhC,KAAKA,YAAL,GAAoBA,YAApB;EACH;;AAPsC;;;8BAA9BH,c,UACsC,mB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["CmsParametersPlugin","Plugin","constructor","callable","getParameters","context"],"sources":["CmsParametersPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { CmsContext } from \"~/types\";\n\nexport interface CmsParametersPluginResponse {\n type: \"read\" | \"manage\" | \"preview\" | string;\n locale: string;\n}\n\nexport interface CmsParametersPluginCallable {\n (context: CmsContext): Promise<CmsParametersPluginResponse | null>;\n}\n\nexport class CmsParametersPlugin extends Plugin {\n public static override readonly type: string = \"cms-parameters-plugin\";\n\n private readonly callable: CmsParametersPluginCallable;\n\n public constructor(callable: CmsParametersPluginCallable) {\n super();\n\n this.callable = callable;\n }\n\n public async getParameters(context: CmsContext): Promise<CmsParametersPluginResponse | null> {\n return this.callable(context);\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AAYO,MAAMA,mBAAN,SAAkCC,eAAlC,CAAyC;EAKrCC,WAAW,CAACC,QAAD,EAAwC;IACtD;IADsD;IAGtD,KAAKA,QAAL,GAAgBA,QAAhB;EACH;;EAEyB,MAAbC,aAAa,CAACC,OAAD,EAAmE;IACzF,OAAO,KAAKF,QAAL,CAAcE,OAAd,CAAP;EACH;;AAb2C;;;8BAAnCL,mB,UACsC,uB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["context","baseSchema","contentModels","contentEntries","contentModelGroups","generateSchemaPlugins","filter","Boolean"],"sources":["buildSchemaPlugins.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { CmsContext } from \"~/types\";\nimport contentModels from \"./schema/contentModels\";\nimport contentEntries from \"./schema/contentEntries\";\nimport contentModelGroups from \"./schema/contentModelGroups\";\nimport baseSchema from \"./schema/baseSchema\";\nimport { generateSchemaPlugins } from \"./schema/schemaPlugins\";\n\n/**\n * This factory is called whenever we need to generate graphql-schema plugins using the current context.\n */\nexport default async (context: CmsContext): Promise<GraphQLSchemaPlugin<CmsContext>[]> => {\n return [\n // Base GQL types and scalars\n baseSchema(context),\n contentModels(context),\n contentEntries(context),\n contentModelGroups(context),\n // Dynamic schema\n ...(await generateSchemaPlugins(context))\n ].filter(Boolean);\n};\n"],"mappings":";;;;;;;;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAEA;AACA;AACA;eACe,MAAOA,OAAP,IAA2E;EACtF,OAAO,CACH;EACA,IAAAC,mBAAA,EAAWD,OAAX,CAFG,EAGH,IAAAE,sBAAA,EAAcF,OAAd,CAHG,EAIH,IAAAG,uBAAA,EAAeH,OAAf,CAJG,EAKH,IAAAI,2BAAA,EAAmBJ,OAAnB,CALG,EAMH;EACA,IAAI,MAAM,IAAAK,oCAAA,EAAsBL,OAAtB,CAAV,CAPG,EAQLM,MARK,CAQEC,OARF,CAAP;AASH,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["assignAfterEntryDelete","params","context","onAfterEntryDelete","subscribe","entry","model","items","cms","storageOperations","entries","list","where","entryId_not","entryId","latest","limit","length","markUnlockedFields"],"sources":["afterDelete.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { AfterEntryDeleteTopicParams, CmsContext } from \"~/types\";\nimport { markUnlockedFields } from \"./markLockedFields\";\n\ninterface AssignAfterEntryDeleteParams {\n context: CmsContext;\n onAfterEntryDelete: Topic<AfterEntryDeleteTopicParams>;\n}\nexport const assignAfterEntryDelete = (params: AssignAfterEntryDeleteParams) => {\n const { context, onAfterEntryDelete } = params;\n\n onAfterEntryDelete.subscribe(async params => {\n const { entry, model } = params;\n\n const { items } = await context.cms.storageOperations.entries.list(model, {\n where: {\n entryId_not: entry.entryId,\n latest: true\n },\n limit: 1\n });\n if (items.length > 0) {\n return;\n }\n await markUnlockedFields({\n context,\n model\n });\n });\n};\n"],"mappings":";;;;;;;AAEA;;AAMO,MAAMA,sBAAsB,GAAIC,MAAD,IAA0C;EAC5E,MAAM;IAAEC,OAAF;IAAWC;EAAX,IAAkCF,MAAxC;EAEAE,kBAAkB,CAACC,SAAnB,CAA6B,MAAMH,MAAN,IAAgB;IACzC,MAAM;MAAEI,KAAF;MAASC;IAAT,IAAmBL,MAAzB;IAEA,MAAM;MAAEM;IAAF,IAAY,MAAML,OAAO,CAACM,GAAR,CAAYC,iBAAZ,CAA8BC,OAA9B,CAAsCC,IAAtC,CAA2CL,KAA3C,EAAkD;MACtEM,KAAK,EAAE;QACHC,WAAW,EAAER,KAAK,CAACS,OADhB;QAEHC,MAAM,EAAE;MAFL,CAD+D;MAKtEC,KAAK,EAAE;IAL+D,CAAlD,CAAxB;;IAOA,IAAIT,KAAK,CAACU,MAAN,GAAe,CAAnB,EAAsB;MAClB;IACH;;IACD,MAAM,IAAAC,oCAAA,EAAmB;MACrBhB,OADqB;MAErBI;IAFqB,CAAnB,CAAN;EAIH,CAjBD;AAkBH,CArBM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["assignBeforeEntryCreate","params","context","onBeforeEntryCreate","subscribe","entry","model","markLockedFields"],"sources":["beforeCreate.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeEntryCreateTopicParams, CmsContext } from \"~/types\";\nimport { markLockedFields } from \"./markLockedFields\";\n\ninterface AssignBeforeEntryCreateParams {\n context: CmsContext;\n onBeforeEntryCreate: Topic<BeforeEntryCreateTopicParams>;\n}\nexport const assignBeforeEntryCreate = (params: AssignBeforeEntryCreateParams) => {\n const { context, onBeforeEntryCreate } = params;\n\n onBeforeEntryCreate.subscribe(async params => {\n const { entry, model } = params;\n\n await markLockedFields({\n model,\n entry,\n context\n });\n });\n};\n"],"mappings":";;;;;;;AAEA;;AAMO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,OAAF;IAAWC;EAAX,IAAmCF,MAAzC;EAEAE,mBAAmB,CAACC,SAApB,CAA8B,MAAMH,MAAN,IAAgB;IAC1C,MAAM;MAAEI,KAAF;MAASC;IAAT,IAAmBL,MAAzB;IAEA,MAAM,IAAAM,kCAAA,EAAiB;MACnBD,KADmB;MAEnBD,KAFmB;MAGnBH;IAHmB,CAAjB,CAAN;EAKH,CARD;AASH,CAZM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["assignBeforeEntryUpdate","params","context","onBeforeEntryUpdate","subscribe","entry","model","markLockedFields"],"sources":["beforeUpdate.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeEntryUpdateTopicParams, CmsContext } from \"~/types\";\nimport { markLockedFields } from \"./markLockedFields\";\n\ninterface AssignBeforeEntryUpdateParams {\n context: CmsContext;\n onBeforeEntryUpdate: Topic<BeforeEntryUpdateTopicParams>;\n}\nexport const assignBeforeEntryUpdate = (params: AssignBeforeEntryUpdateParams) => {\n const { context, onBeforeEntryUpdate } = params;\n\n onBeforeEntryUpdate.subscribe(async params => {\n const { entry, model } = params;\n\n await markLockedFields({\n model,\n entry,\n context\n });\n });\n};\n"],"mappings":";;;;;;;AAEA;;AAMO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,OAAF;IAAWC;EAAX,IAAmCF,MAAzC;EAEAE,mBAAmB,CAACC,SAApB,CAA8B,MAAMH,MAAN,IAAgB;IAC1C,MAAM;MAAEI,KAAF;MAASC;IAAT,IAAmBL,MAAzB;IAEA,MAAM,IAAAM,kCAAA,EAAiB;MACnBD,KADmB;MAEnBD,KAFmB;MAGnBH;IAHmB,CAAjB,CAAN;EAKH,CARD;AASH,CAZM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["entryDataValidation.ts"],"names":["validateValue","args","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","length","validate","result","validator","message","ex","validatePredefinedValue","enabled","values","predefinedValues","Array","isArray","predefinedValue","runFieldMultipleValuesValidations","data","fieldId","valuesError","listValidation","valueError","validation","predefinedValueError","runFieldValueValidations","error","execValidation","multipleValues","validateModelEntryData","params","plugins","byType","reduce","acc","plugin","push","invalidFields","fields","WebinyError"],"mappings":"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","sourcesContent":["import {\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation,\n CmsContext,\n CmsModelFieldValidatorPlugin,\n CmsModelFieldValidatorValidateParams,\n CmsEntry\n} from \"~/types\";\nimport WebinyError from \"@webiny/error\";\n\ntype PluginValidationCallable = (params: CmsModelFieldValidatorValidateParams) => Promise<boolean>;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\ntype InputData = Record<string, any>;\n\ninterface ValidateArgs {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n data: InputData;\n context: CmsContext;\n entry?: CmsEntry;\n}\n\nconst validateValue = async (\n args: ValidateArgs,\n fieldValidators: CmsModelFieldValidation[],\n value: any\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n\n const { validatorList, context, field, model, entry } = args;\n try {\n for (const fieldValidator of fieldValidators) {\n const name = fieldValidator.name;\n const validations = validatorList[name];\n if (!validations || validations.length === 0) {\n return `There are no \"${name}\" validators defined.`;\n }\n for (const validate of validations) {\n const result = await validate({\n value,\n context,\n validator: fieldValidator,\n field,\n model,\n entry\n });\n if (!result) {\n return fieldValidator.message;\n }\n }\n }\n } catch (ex) {\n return ex.message;\n }\n\n return null;\n};\n\nconst validatePredefinedValue = (field: CmsModelField, value: any | any[]): string | null => {\n const { enabled = false, values: predefinedValues = [] } = field.predefinedValues || {};\n if (!enabled) {\n return null;\n } else if (Array.isArray(predefinedValues) === false || predefinedValues.length === 0) {\n return \"Missing predefined values to validate against.\";\n }\n for (const predefinedValue of predefinedValues) {\n if (predefinedValue.value == value) {\n return null;\n }\n }\n return \"Value sent does not match any of the available predefined values.\";\n};\n/**\n * When multiple values is selected we must run validations on the array containing the values\n * And then on each value in the array\n */\nconst runFieldMultipleValuesValidations = async (args: ValidateArgs): Promise<string | null> => {\n const { field, data } = args;\n const values = data[field.fieldId] || [];\n if (Array.isArray(values) === false) {\n return `Value of the field \"${field.fieldId}\" is not an array.`;\n }\n const valuesError = await validateValue(args, field.listValidation || [], values);\n if (valuesError) {\n return valuesError;\n }\n for (const value of values) {\n const valueError = await validateValue(args, field.validation || [], value);\n if (valueError) {\n return valueError;\n }\n const predefinedValueError = validatePredefinedValue(field, value);\n if (predefinedValueError) {\n return predefinedValueError;\n }\n }\n return null;\n};\n/**\n * Runs validation on given value.\n */\nconst runFieldValueValidations = async (args: ValidateArgs): Promise<string | null> => {\n const { data, field } = args;\n const value = data[field.fieldId];\n const error = await validateValue(args, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (args: ValidateArgs): Promise<string | null> => {\n if (args.field.multipleValues) {\n return await runFieldMultipleValuesValidations(args);\n }\n return await runFieldValueValidations(args);\n};\n\nexport interface ValidateModelEntryDataParams {\n context: CmsContext;\n model: CmsModel;\n data: InputData;\n entry?: CmsEntry;\n}\nexport const validateModelEntryData = async (params: ValidateModelEntryDataParams) => {\n const { context, model, entry, data } = params;\n /**\n * To later simplify searching for the validations we map them to a name.\n * @see CmsModelFieldValidatorPlugin.validator.validate\n */\n const validatorList: PluginValidationList = context.plugins\n .byType<CmsModelFieldValidatorPlugin>(\"cms-model-field-validator\")\n .reduce((acc, plugin) => {\n const name = plugin.validator.name;\n if (!acc[name]) {\n acc[name] = [];\n }\n acc[name].push(plugin.validator.validate);\n\n return acc;\n }, {} as PluginValidationList);\n\n /**\n * Loop through model fields and validate the corresponding data.\n * Run validation only if the field has validation configured.\n */\n const invalidFields = [];\n for (const field of model.fields) {\n const error = await execValidation({\n model,\n validatorList,\n field,\n data,\n context,\n entry\n });\n if (!error) {\n continue;\n }\n invalidFields.push({\n fieldId: field.fieldId,\n error\n });\n }\n\n if (invalidFields.length > 0) {\n throw new WebinyError(\"Validation failed.\", \"VALIDATION_FAILED\", invalidFields);\n }\n};\n"]}
|
|
1
|
+
{"version":3,"names":["validateValue","args","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","length","validate","result","validator","message","ex","validatePredefinedValue","enabled","values","predefinedValues","Array","isArray","predefinedValue","runFieldMultipleValuesValidations","data","fieldId","valuesError","listValidation","valueError","validation","predefinedValueError","runFieldValueValidations","error","execValidation","multipleValues","validateModelEntryData","params","plugins","byType","reduce","acc","plugin","push","invalidFields","fields","WebinyError"],"sources":["entryDataValidation.ts"],"sourcesContent":["import {\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation,\n CmsContext,\n CmsModelFieldValidatorPlugin,\n CmsModelFieldValidatorValidateParams,\n CmsEntry\n} from \"~/types\";\nimport WebinyError from \"@webiny/error\";\n\ntype PluginValidationCallable = (params: CmsModelFieldValidatorValidateParams) => Promise<boolean>;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\ntype InputData = Record<string, any>;\n\ninterface ValidateArgs {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n data: InputData;\n context: CmsContext;\n entry?: CmsEntry;\n}\n\nconst validateValue = async (\n args: ValidateArgs,\n fieldValidators: CmsModelFieldValidation[],\n value: any\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n\n const { validatorList, context, field, model, entry } = args;\n try {\n for (const fieldValidator of fieldValidators) {\n const name = fieldValidator.name;\n const validations = validatorList[name];\n if (!validations || validations.length === 0) {\n return `There are no \"${name}\" validators defined.`;\n }\n for (const validate of validations) {\n const result = await validate({\n value,\n context,\n validator: fieldValidator,\n field,\n model,\n entry\n });\n if (!result) {\n return fieldValidator.message;\n }\n }\n }\n } catch (ex) {\n return ex.message;\n }\n\n return null;\n};\n\nconst validatePredefinedValue = (field: CmsModelField, value: any | any[]): string | null => {\n const { enabled = false, values: predefinedValues = [] } = field.predefinedValues || {};\n if (!enabled) {\n return null;\n } else if (Array.isArray(predefinedValues) === false || predefinedValues.length === 0) {\n return \"Missing predefined values to validate against.\";\n }\n for (const predefinedValue of predefinedValues) {\n if (predefinedValue.value == value) {\n return null;\n }\n }\n return \"Value sent does not match any of the available predefined values.\";\n};\n/**\n * When multiple values is selected we must run validations on the array containing the values\n * And then on each value in the array\n */\nconst runFieldMultipleValuesValidations = async (args: ValidateArgs): Promise<string | null> => {\n const { field, data } = args;\n const values = data[field.fieldId] || [];\n if (Array.isArray(values) === false) {\n return `Value of the field \"${field.fieldId}\" is not an array.`;\n }\n const valuesError = await validateValue(args, field.listValidation || [], values);\n if (valuesError) {\n return valuesError;\n }\n for (const value of values) {\n const valueError = await validateValue(args, field.validation || [], value);\n if (valueError) {\n return valueError;\n }\n const predefinedValueError = validatePredefinedValue(field, value);\n if (predefinedValueError) {\n return predefinedValueError;\n }\n }\n return null;\n};\n/**\n * Runs validation on given value.\n */\nconst runFieldValueValidations = async (args: ValidateArgs): Promise<string | null> => {\n const { data, field } = args;\n const value = data[field.fieldId];\n const error = await validateValue(args, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (args: ValidateArgs): Promise<string | null> => {\n if (args.field.multipleValues) {\n return await runFieldMultipleValuesValidations(args);\n }\n return await runFieldValueValidations(args);\n};\n\nexport interface ValidateModelEntryDataParams {\n context: CmsContext;\n model: CmsModel;\n data: InputData;\n entry?: CmsEntry;\n}\nexport const validateModelEntryData = async (params: ValidateModelEntryDataParams) => {\n const { context, model, entry, data } = params;\n /**\n * To later simplify searching for the validations we map them to a name.\n * @see CmsModelFieldValidatorPlugin.validator.validate\n */\n const validatorList: PluginValidationList = context.plugins\n .byType<CmsModelFieldValidatorPlugin>(\"cms-model-field-validator\")\n .reduce((acc, plugin) => {\n const name = plugin.validator.name;\n if (!acc[name]) {\n acc[name] = [];\n }\n acc[name].push(plugin.validator.validate);\n\n return acc;\n }, {} as PluginValidationList);\n\n /**\n * Loop through model fields and validate the corresponding data.\n * Run validation only if the field has validation configured.\n */\n const invalidFields = [];\n for (const field of model.fields) {\n const error = await execValidation({\n model,\n validatorList,\n field,\n data,\n context,\n entry\n });\n if (!error) {\n continue;\n }\n invalidFields.push({\n fieldId: field.fieldId,\n error\n });\n }\n\n if (invalidFields.length > 0) {\n throw new WebinyError(\"Validation failed.\", \"VALIDATION_FAILED\", invalidFields);\n }\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["markLockedFields","params","model","context","plugins","byType","CmsModelPlugin","type","find","plugin","contentModel","modelId","cmsLockedFieldPlugins","existingLockedFields","lockedFields","field","fields","alreadyLocked","some","lockedField","fieldId","lockedFieldData","lockedFieldPlugins","filter","pl","fieldType","getLockedFieldData","data","push","multipleValues","length","newLockedFields","concat","cms","updateModelDirect","original","ex","WebinyError","markUnlockedFields"],"sources":["markLockedFields.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsModel, CmsContext, CmsModelLockedFieldPlugin, LockedField } from \"~/types\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\n\ninterface MarkLockedFieldsParams {\n model: CmsModel;\n entry: CmsEntry;\n context: CmsContext;\n}\nexport const markLockedFields = async (params: MarkLockedFieldsParams): Promise<void> => {\n const { model, context } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n const cmsLockedFieldPlugins =\n context.plugins.byType<CmsModelLockedFieldPlugin>(\"cms-model-locked-field\");\n\n const existingLockedFields = model.lockedFields || [];\n const lockedFields: LockedField[] = [];\n for (const field of model.fields) {\n const alreadyLocked = existingLockedFields.some(\n lockedField => lockedField.fieldId === field.fieldId\n );\n if (alreadyLocked) {\n continue;\n }\n\n let lockedFieldData = {};\n\n const lockedFieldPlugins = cmsLockedFieldPlugins.filter(pl => pl.fieldType === field.type);\n for (const plugin of lockedFieldPlugins) {\n if (typeof plugin.getLockedFieldData !== \"function\") {\n continue;\n }\n const data = plugin.getLockedFieldData({\n field\n });\n lockedFieldData = { ...lockedFieldData, ...data };\n }\n\n lockedFields.push({\n fieldId: field.fieldId,\n multipleValues: !!field.multipleValues,\n type: field.type,\n ...lockedFieldData\n });\n }\n // no need to update anything if no locked fields were added\n if (lockedFields.length === 0) {\n return;\n }\n\n const newLockedFields = existingLockedFields.concat(lockedFields);\n\n try {\n await context.cms.updateModelDirect({\n original: model,\n model: {\n ...model,\n lockedFields: newLockedFields\n }\n });\n model.lockedFields = newLockedFields;\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with new locked fields.`,\n \"MODEL_LOCKED_FIELDS_UPDATE_FAILED\",\n ex\n );\n }\n};\n\nexport interface MarkFieldsUnlockedParams {\n context: CmsContext;\n model: CmsModel;\n}\nexport const markUnlockedFields = async (params: MarkFieldsUnlockedParams) => {\n const { context, model } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n try {\n await context.cms.updateModelDirect({\n original: model,\n model: {\n ...model,\n lockedFields: []\n }\n });\n model.lockedFields = [];\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with unlocked fields.`,\n \"MODEL_UNLOCKED_FIELDS_UPDATE_FAILED\",\n ex\n );\n }\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["referenceFieldsMapping.ts"],"names":["buildReferenceFieldPaths","params","fields","parentPaths","initialParentPaths","input","isMultipleValues","Array","isArray","filter","field","includes","type","reduce","collection","parentPathsValue","length","join","multipleValues","inputValue","dotProp","get","fieldId","key","path","push","objFieldPath","objFieldInputValue","result","settings","concat","results","getReferenceFieldValue","ref","id","modelId","entryId","trim","referenceFieldsMapping","context","model","validateEntries","output","referenceFieldPaths","referencesByModel","pathsByReferenceId","Object","keys","models","cms","listModels","entries","promises","map","getEntriesByIds","Promise","all","records","entry","WebinyError","paths","set"],"mappings":"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","sourcesContent":["import { CmsContext, CmsModel, CmsModelField } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport dotProp from \"dot-prop\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\ninterface CmsRefEntry {\n id: string;\n entryId: string;\n modelId: string;\n}\n\ninterface ReferenceObject {\n id: string;\n modelId: string;\n}\n\ninterface Params {\n context: CmsContext;\n model: CmsModel;\n input: Record<string, ReferenceObject | ReferenceObject[]>;\n validateEntries?: boolean;\n}\n\ninterface BuildReferenceFieldPaths {\n fields: CmsModelField[];\n parentPaths: string[];\n input: Record<string, any>;\n}\n\nconst buildReferenceFieldPaths = (params: BuildReferenceFieldPaths): string[] => {\n const { fields, parentPaths: initialParentPaths, input } = params;\n\n const parentPaths = [...initialParentPaths];\n\n const isMultipleValues = Array.isArray(input);\n\n return fields\n .filter(field => [\"object\", \"ref\"].includes(field.type))\n .reduce((collection, field) => {\n /**\n * First we check the ref field\n */\n if (field.type === \"ref\") {\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n if (field.multipleValues) {\n const inputValue = dotProp.get(input, `${field.fieldId}`, []);\n if (Array.isArray(inputValue) === false) {\n return collection;\n }\n for (const key in inputValue) {\n const path = `${parentPathsValue}${field.fieldId}.${key}`;\n collection.push(path);\n }\n return collection;\n }\n\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n collection.push(`${parentPathsValue}${field.fieldId}`);\n\n return collection;\n }\n /**\n * Then we move onto the object field\n */\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n /**\n * This is if received input is array. We need to map key with fieldId at this point.\n */\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n const objFieldPath = `${field.fieldId}`;\n const objFieldInputValue = dotProp.get(input, objFieldPath, []);\n\n /**\n * If field is multiple values one, we need to go through the input and use the existing keys.\n */\n if (field.multipleValues) {\n if (Array.isArray(objFieldInputValue) === false) {\n return collection;\n }\n for (const key in objFieldInputValue) {\n const result = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue[key],\n parentPaths: parentPaths.concat([field.fieldId, key])\n });\n collection.push(...result);\n }\n\n return collection;\n }\n\n /**\n * Single value reference field.\n */\n const results = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue,\n parentPaths: parentPaths.concat([field.fieldId])\n });\n\n return collection.concat(results);\n }, [] as string[]);\n};\n\nconst getReferenceFieldValue = (ref: any): { id: string | null; modelId: string | null } => {\n if (!ref) {\n return {\n id: null,\n modelId: null\n };\n }\n return {\n id: (ref.id || ref.entryId || \"\").trim() || null,\n modelId: (ref.modelId || \"\").trim() || null\n };\n};\n\nexport const referenceFieldsMapping = async (params: Params): Promise<Record<string, any>> => {\n const { context, model, input, validateEntries = false } = params;\n\n let output: Record<string, any> = {\n ...input\n };\n\n const referenceFieldPaths = buildReferenceFieldPaths({\n fields: model.fields,\n input,\n parentPaths: []\n });\n if (referenceFieldPaths.length === 0) {\n return output;\n }\n\n const referencesByModel: Record<string, string[]> = {};\n const pathsByReferenceId: Record<string, string[]> = {};\n\n for (const path of referenceFieldPaths) {\n const ref = dotProp.get(output, path) as ReferenceObject | any;\n\n const { id, modelId } = getReferenceFieldValue(ref);\n\n if (!id || !modelId) {\n continue;\n }\n if (!referencesByModel[modelId]) {\n referencesByModel[modelId] = [];\n }\n referencesByModel[modelId].push(id);\n if (!pathsByReferenceId[id]) {\n pathsByReferenceId[id] = [];\n }\n pathsByReferenceId[id].push(path);\n }\n\n /**\n * Again, no point in going further.\n */\n if (Object.keys(referencesByModel).length === 0) {\n return output;\n }\n /**\n * Load all models and use only those that are used in reference.\n */\n const models = (await context.cms.listModels()).filter(model => {\n const entries = referencesByModel[model.modelId];\n if (Array.isArray(entries) === false || entries.length === 0) {\n return false;\n }\n return true;\n });\n /**\n * Check for any model existence, just in case.\n */\n if (models.length === 0) {\n return output;\n }\n\n /**\n * Load all the entries by their ID\n */\n const promises = models.map(model => {\n return context.cms.getEntriesByIds(model, referencesByModel[model.modelId]);\n });\n\n const results = await Promise.all(promises);\n\n const records: Record<string, CmsRefEntry> = results.reduce((collection, entries) => {\n for (const entry of entries) {\n collection[entry.id] = {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n };\n }\n return collection;\n }, {} as Record<string, CmsRefEntry>);\n /**\n * Verify that all referenced entries actually exist.\n */\n for (const modelId in referencesByModel) {\n const entries = referencesByModel[modelId];\n for (const id of entries) {\n if (records[id]) {\n continue;\n } else if (validateEntries === true) {\n throw new WebinyError(\n `Missing referenced entry with id \"${id}\" in model \"${modelId}\".`,\n \"ENTRY_NOT_FOUND\",\n {\n id,\n model: modelId\n }\n );\n }\n const { id: entryId } = parseIdentifier(id);\n records[id] = {\n id,\n entryId,\n modelId\n };\n }\n }\n\n /**\n * In the end, assign the entryId, id and model values to the output.\n */\n for (const id in pathsByReferenceId) {\n const entry = records[id];\n const paths = pathsByReferenceId[id];\n if (!entry) {\n if (validateEntries === true) {\n throw new WebinyError(\"Missing entry in records.\", \"ENTRY_ERROR\", {\n id,\n paths\n });\n }\n continue;\n }\n for (const path of paths) {\n output = dotProp.set(output, path, {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n });\n }\n }\n\n return output;\n};\n"]}
|
|
1
|
+
{"version":3,"names":["buildReferenceFieldPaths","params","fields","parentPaths","initialParentPaths","input","isMultipleValues","Array","isArray","filter","field","includes","type","reduce","collection","parentPathsValue","length","join","multipleValues","inputValue","dotProp","get","fieldId","key","path","push","objFieldPath","objFieldInputValue","result","settings","concat","results","getReferenceFieldValue","ref","id","modelId","entryId","trim","referenceFieldsMapping","context","model","validateEntries","output","referenceFieldPaths","referencesByModel","pathsByReferenceId","Object","keys","models","cms","listModels","entries","promises","map","getEntriesByIds","Promise","all","records","entry","WebinyError","parseIdentifier","paths","set"],"sources":["referenceFieldsMapping.ts"],"sourcesContent":["import { CmsContext, CmsModel, CmsModelField } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport dotProp from \"dot-prop\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\ninterface CmsRefEntry {\n id: string;\n entryId: string;\n modelId: string;\n}\n\ninterface ReferenceObject {\n id: string;\n modelId: string;\n}\n\ninterface Params {\n context: CmsContext;\n model: CmsModel;\n input: Record<string, ReferenceObject | ReferenceObject[]>;\n validateEntries?: boolean;\n}\n\ninterface BuildReferenceFieldPaths {\n fields: CmsModelField[];\n parentPaths: string[];\n input: Record<string, any>;\n}\n\nconst buildReferenceFieldPaths = (params: BuildReferenceFieldPaths): string[] => {\n const { fields, parentPaths: initialParentPaths, input } = params;\n\n const parentPaths = [...initialParentPaths];\n\n const isMultipleValues = Array.isArray(input);\n\n return fields\n .filter(field => [\"object\", \"ref\"].includes(field.type))\n .reduce((collection, field) => {\n /**\n * First we check the ref field\n */\n if (field.type === \"ref\") {\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n if (field.multipleValues) {\n const inputValue = dotProp.get(input, `${field.fieldId}`, []);\n if (Array.isArray(inputValue) === false) {\n return collection;\n }\n for (const key in inputValue) {\n const path = `${parentPathsValue}${field.fieldId}.${key}`;\n collection.push(path);\n }\n return collection;\n }\n\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n collection.push(`${parentPathsValue}${field.fieldId}`);\n\n return collection;\n }\n /**\n * Then we move onto the object field\n */\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n /**\n * This is if received input is array. We need to map key with fieldId at this point.\n */\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n const objFieldPath = `${field.fieldId}`;\n const objFieldInputValue = dotProp.get(input, objFieldPath, []);\n\n /**\n * If field is multiple values one, we need to go through the input and use the existing keys.\n */\n if (field.multipleValues) {\n if (Array.isArray(objFieldInputValue) === false) {\n return collection;\n }\n for (const key in objFieldInputValue) {\n const result = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue[key],\n parentPaths: parentPaths.concat([field.fieldId, key])\n });\n collection.push(...result);\n }\n\n return collection;\n }\n\n /**\n * Single value reference field.\n */\n const results = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue,\n parentPaths: parentPaths.concat([field.fieldId])\n });\n\n return collection.concat(results);\n }, [] as string[]);\n};\n\nconst getReferenceFieldValue = (ref: any): { id: string | null; modelId: string | null } => {\n if (!ref) {\n return {\n id: null,\n modelId: null\n };\n }\n return {\n id: (ref.id || ref.entryId || \"\").trim() || null,\n modelId: (ref.modelId || \"\").trim() || null\n };\n};\n\nexport const referenceFieldsMapping = async (params: Params): Promise<Record<string, any>> => {\n const { context, model, input, validateEntries = false } = params;\n\n let output: Record<string, any> = {\n ...input\n };\n\n const referenceFieldPaths = buildReferenceFieldPaths({\n fields: model.fields,\n input,\n parentPaths: []\n });\n if (referenceFieldPaths.length === 0) {\n return output;\n }\n\n const referencesByModel: Record<string, string[]> = {};\n const pathsByReferenceId: Record<string, string[]> = {};\n\n for (const path of referenceFieldPaths) {\n const ref = dotProp.get(output, path) as ReferenceObject | any;\n\n const { id, modelId } = getReferenceFieldValue(ref);\n\n if (!id || !modelId) {\n continue;\n }\n if (!referencesByModel[modelId]) {\n referencesByModel[modelId] = [];\n }\n referencesByModel[modelId].push(id);\n if (!pathsByReferenceId[id]) {\n pathsByReferenceId[id] = [];\n }\n pathsByReferenceId[id].push(path);\n }\n\n /**\n * Again, no point in going further.\n */\n if (Object.keys(referencesByModel).length === 0) {\n return output;\n }\n /**\n * Load all models and use only those that are used in reference.\n */\n const models = (await context.cms.listModels()).filter(model => {\n const entries = referencesByModel[model.modelId];\n if (Array.isArray(entries) === false || entries.length === 0) {\n return false;\n }\n return true;\n });\n /**\n * Check for any model existence, just in case.\n */\n if (models.length === 0) {\n return output;\n }\n\n /**\n * Load all the entries by their ID\n */\n const promises = models.map(model => {\n return context.cms.getEntriesByIds(model, referencesByModel[model.modelId]);\n });\n\n const results = await Promise.all(promises);\n\n const records: Record<string, CmsRefEntry> = results.reduce((collection, entries) => {\n for (const entry of entries) {\n collection[entry.id] = {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n };\n }\n return collection;\n }, {} as Record<string, CmsRefEntry>);\n /**\n * Verify that all referenced entries actually exist.\n */\n for (const modelId in referencesByModel) {\n const entries = referencesByModel[modelId];\n for (const id of entries) {\n if (records[id]) {\n continue;\n } else if (validateEntries === true) {\n throw new WebinyError(\n `Missing referenced entry with id \"${id}\" in model \"${modelId}\".`,\n \"ENTRY_NOT_FOUND\",\n {\n id,\n model: modelId\n }\n );\n }\n const { id: entryId } = parseIdentifier(id);\n records[id] = {\n id,\n entryId,\n modelId\n };\n }\n }\n\n /**\n * In the end, assign the entryId, id and model values to the output.\n */\n for (const id in pathsByReferenceId) {\n const entry = records[id];\n const paths = pathsByReferenceId[id];\n if (!entry) {\n if (validateEntries === true) {\n throw new WebinyError(\"Missing entry in records.\", \"ENTRY_ERROR\", {\n id,\n paths\n });\n }\n continue;\n }\n for (const path of paths) {\n output = dotProp.set(output, path, {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n });\n }\n }\n\n return output;\n};\n"],"mappings":"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"}
|