@webiny/api-headless-cms 5.25.0-beta.5 → 5.25.1-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/graphQLHandlerFactory.js +3 -1
- package/content/graphQLHandlerFactory.js.map +1 -1
- package/content/plugins/crud/contentEntry/afterDelete.js +1 -2
- package/content/plugins/crud/contentEntry/afterDelete.js.map +1 -1
- package/content/plugins/crud/contentEntry.crud.d.ts +2 -0
- package/content/plugins/crud/contentEntry.crud.js +71 -72
- package/content/plugins/crud/contentEntry.crud.js.map +1 -1
- package/content/plugins/crud/contentModel/beforeDelete.js +0 -2
- package/content/plugins/crud/contentModel/beforeDelete.js.map +1 -1
- package/content/plugins/crud/contentModel.crud.js +21 -12
- package/content/plugins/crud/contentModel.crud.js.map +1 -1
- package/content/plugins/crud/contentModelGroup.crud.js +38 -45
- package/content/plugins/crud/contentModelGroup.crud.js.map +1 -1
- package/content/plugins/crud/index.js +5 -3
- package/content/plugins/crud/index.js.map +1 -1
- package/content/plugins/graphqlFields/longText.js +1 -0
- package/content/plugins/graphqlFields/longText.js.map +1 -1
- package/content/plugins/graphqlFields/text.js +1 -0
- package/content/plugins/graphqlFields/text.js.map +1 -1
- package/content/plugins/schema/contentEntries.js +6 -9
- package/content/plugins/schema/contentEntries.js.map +1 -1
- package/content/plugins/validators/unique.js +0 -1
- package/content/plugins/validators/unique.js.map +1 -1
- package/package.json +24 -25
- package/plugins/context.js +9 -3
- package/plugins/context.js.map +1 -1
- package/plugins/crud/index.js +7 -4
- package/plugins/crud/index.js.map +1 -1
- package/plugins/crud/settings.crud.js +0 -1
- package/plugins/crud/settings.crud.js.map +1 -1
- package/plugins/crud/system.crud.d.ts +2 -0
- package/plugins/crud/system.crud.js +5 -4
- package/plugins/crud/system.crud.js.map +1 -1
- package/types.d.ts +51 -105
- package/types.js.map +1 -1
|
@@ -192,7 +192,9 @@ const graphQLHandlerFactory = (options = {}) => {
|
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
};
|
|
195
|
-
return [...(debug ? (0, _debugPlugins.default)() : []), handler
|
|
195
|
+
return [...(debug ? (0, _debugPlugins.default)() : []), handler, {
|
|
196
|
+
type: "wcp-telemetry-tracker"
|
|
197
|
+
}];
|
|
196
198
|
};
|
|
197
199
|
|
|
198
200
|
exports.graphQLHandlerFactory = graphQLHandlerFactory;
|
|
@@ -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":"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","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];\n};\n"]}
|
|
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":"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","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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["afterDelete.ts"],"names":["assignAfterEntryDelete","params","context","onAfterEntryDelete","subscribe","entry","model","items","cms","storageOperations","entries","list","where","entryId_not","entryId","latest","
|
|
1
|
+
{"version":3,"sources":["afterDelete.ts"],"names":["assignAfterEntryDelete","params","context","onAfterEntryDelete","subscribe","entry","model","items","cms","storageOperations","entries","list","where","entryId_not","entryId","latest","limit","length"],"mappings":";;;;;;;AAEA;;AAMO,MAAMA,sBAAsB,GAAIC,MAAD,IAA0C;AAC5E,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA;AAAX,MAAkCF,MAAxC;AAEAE,EAAAA,kBAAkB,CAACC,SAAnB,CAA6B,MAAMH,MAAN,IAAgB;AACzC,UAAM;AAAEI,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAAmBL,MAAzB;AAEA,UAAM;AAAEM,MAAAA;AAAF,QAAY,MAAML,OAAO,CAACM,GAAR,CAAYC,iBAAZ,CAA8BC,OAA9B,CAAsCC,IAAtC,CAA2CL,KAA3C,EAAkD;AACtEM,MAAAA,KAAK,EAAE;AACHC,QAAAA,WAAW,EAAER,KAAK,CAACS,OADhB;AAEHC,QAAAA,MAAM,EAAE;AAFL,OAD+D;AAKtEC,MAAAA,KAAK,EAAE;AAL+D,KAAlD,CAAxB;;AAOA,QAAIT,KAAK,CAACU,MAAN,GAAe,CAAnB,EAAsB;AAClB;AACH;;AACD,UAAM,0CAAmB;AACrBf,MAAAA,OADqB;AAErBI,MAAAA;AAFqB,KAAnB,CAAN;AAIH,GAjBD;AAkBH,CArBM","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"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CmsEntryContext, CmsContext, HeadlessCmsStorageOperations } from "../../../types";
|
|
2
2
|
import { SecurityIdentity } from "@webiny/api-security/types";
|
|
3
|
+
import { Tenant } from "@webiny/api-tenancy/types";
|
|
3
4
|
export declare const STATUS_DRAFT = "draft";
|
|
4
5
|
export declare const STATUS_PUBLISHED = "published";
|
|
5
6
|
export declare const STATUS_UNPUBLISHED = "unpublished";
|
|
@@ -9,5 +10,6 @@ export interface CreateContentEntryCrudParams {
|
|
|
9
10
|
storageOperations: HeadlessCmsStorageOperations;
|
|
10
11
|
context: CmsContext;
|
|
11
12
|
getIdentity: () => SecurityIdentity;
|
|
13
|
+
getTenant: () => Tenant;
|
|
12
14
|
}
|
|
13
15
|
export declare const createContentEntryCrud: (params: CreateContentEntryCrudParams) => CmsEntryContext;
|
|
@@ -176,11 +176,37 @@ const increaseEntryIdVersion = id => {
|
|
|
176
176
|
};
|
|
177
177
|
};
|
|
178
178
|
|
|
179
|
+
const getSearchableFields = params => {
|
|
180
|
+
const {
|
|
181
|
+
plugins,
|
|
182
|
+
model,
|
|
183
|
+
fields
|
|
184
|
+
} = params;
|
|
185
|
+
const fieldPluginMap = plugins.byType("cms-model-field-to-graphql").reduce((collection, field) => {
|
|
186
|
+
collection[field.fieldType] = field;
|
|
187
|
+
return collection;
|
|
188
|
+
}, {});
|
|
189
|
+
return model.fields.filter(field => {
|
|
190
|
+
const plugin = fieldPluginMap[field.type];
|
|
191
|
+
|
|
192
|
+
if (!plugin) {
|
|
193
|
+
return false;
|
|
194
|
+
} else if (!plugin.fullTextSearch) {
|
|
195
|
+
return false;
|
|
196
|
+
} else if (!fields || fields.length === 0) {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return fields.includes(field.fieldId);
|
|
201
|
+
}).map(field => field.fieldId);
|
|
202
|
+
};
|
|
203
|
+
|
|
179
204
|
const createContentEntryCrud = params => {
|
|
180
205
|
const {
|
|
181
206
|
storageOperations,
|
|
182
207
|
context,
|
|
183
|
-
getIdentity
|
|
208
|
+
getIdentity,
|
|
209
|
+
getTenant
|
|
184
210
|
} = params;
|
|
185
211
|
const onBeforeEntryCreate = (0, _pubsub.createTopic)();
|
|
186
212
|
const onAfterEntryCreate = (0, _pubsub.createTopic)();
|
|
@@ -230,8 +256,7 @@ const createContentEntryCrud = params => {
|
|
|
230
256
|
const deleteEntry = async params => {
|
|
231
257
|
const {
|
|
232
258
|
model,
|
|
233
|
-
entry
|
|
234
|
-
storageEntry
|
|
259
|
+
entry
|
|
235
260
|
} = params;
|
|
236
261
|
|
|
237
262
|
try {
|
|
@@ -240,8 +265,7 @@ const createContentEntryCrud = params => {
|
|
|
240
265
|
model
|
|
241
266
|
});
|
|
242
267
|
await storageOperations.entries.delete(model, {
|
|
243
|
-
entry
|
|
244
|
-
storageEntry
|
|
268
|
+
entry
|
|
245
269
|
});
|
|
246
270
|
await onAfterEntryDelete.publish({
|
|
247
271
|
entry,
|
|
@@ -301,14 +325,13 @@ const createContentEntryCrud = params => {
|
|
|
301
325
|
*/
|
|
302
326
|
getEntryById: async (model, id) => {
|
|
303
327
|
const where = {
|
|
304
|
-
id
|
|
305
|
-
tenant: model.tenant
|
|
328
|
+
id
|
|
306
329
|
};
|
|
307
330
|
await onBeforeEntryGet.publish({
|
|
308
331
|
where,
|
|
309
332
|
model
|
|
310
333
|
});
|
|
311
|
-
const [entry] = await getEntriesByIds(model, [
|
|
334
|
+
const [entry] = await getEntriesByIds(model, [id]);
|
|
312
335
|
|
|
313
336
|
if (!entry) {
|
|
314
337
|
throw new _handlerGraphql.NotFoundError(`Entry by ID "${id}" not found.`);
|
|
@@ -391,13 +414,30 @@ const createContentEntryCrud = params => {
|
|
|
391
414
|
});
|
|
392
415
|
await utils.checkModelAccess(context, model);
|
|
393
416
|
const {
|
|
394
|
-
where
|
|
417
|
+
where: initialWhere
|
|
395
418
|
} = params;
|
|
419
|
+
/**
|
|
420
|
+
* We always assign tenant and locale because we do not allow one model to have content through multiple tenants.
|
|
421
|
+
*/
|
|
422
|
+
|
|
423
|
+
const where = _objectSpread({}, initialWhere);
|
|
424
|
+
/**
|
|
425
|
+
* Possibly only get records which are owned by current user.
|
|
426
|
+
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
427
|
+
*/
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
const ownedBy = permission.own ? getIdentity().id : where.ownedBy;
|
|
431
|
+
|
|
432
|
+
if (ownedBy !== undefined) {
|
|
433
|
+
where.ownedBy = ownedBy;
|
|
434
|
+
}
|
|
396
435
|
/**
|
|
397
436
|
* Where must contain either latest or published keys.
|
|
398
437
|
* We cannot list entries without one of those
|
|
399
438
|
*/
|
|
400
439
|
|
|
440
|
+
|
|
401
441
|
if (where.latest && where.published) {
|
|
402
442
|
throw new _error.default("Cannot list entries that are both published and latest.", "LIST_ENTRIES_ERROR", {
|
|
403
443
|
where
|
|
@@ -407,34 +447,24 @@ const createContentEntryCrud = params => {
|
|
|
407
447
|
where
|
|
408
448
|
});
|
|
409
449
|
}
|
|
410
|
-
/**
|
|
411
|
-
* Possibly only get records which are owned by current user.
|
|
412
|
-
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
413
|
-
*/
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
const ownedBy = permission.own ? getIdentity().id : where.ownedBy;
|
|
417
|
-
|
|
418
|
-
const listWhere = _objectSpread(_objectSpread({}, where), {}, {
|
|
419
|
-
tenant: model.tenant,
|
|
420
|
-
locale: model.locale
|
|
421
|
-
});
|
|
422
|
-
|
|
423
|
-
if (ownedBy !== undefined) {
|
|
424
|
-
listWhere.ownedBy = ownedBy;
|
|
425
|
-
}
|
|
426
450
|
|
|
427
451
|
await onBeforeEntryList.publish({
|
|
428
|
-
where
|
|
452
|
+
where,
|
|
429
453
|
model
|
|
430
454
|
});
|
|
455
|
+
const fields = getSearchableFields({
|
|
456
|
+
model,
|
|
457
|
+
plugins: context.plugins,
|
|
458
|
+
fields: params.fields || []
|
|
459
|
+
});
|
|
431
460
|
const {
|
|
432
461
|
hasMoreItems,
|
|
433
462
|
totalCount,
|
|
434
463
|
cursor,
|
|
435
464
|
items
|
|
436
465
|
} = await storageOperations.entries.list(model, _objectSpread(_objectSpread({}, params), {}, {
|
|
437
|
-
where
|
|
466
|
+
where,
|
|
467
|
+
fields
|
|
438
468
|
}));
|
|
439
469
|
const meta = {
|
|
440
470
|
hasMoreItems,
|
|
@@ -450,11 +480,6 @@ const createContentEntryCrud = params => {
|
|
|
450
480
|
},
|
|
451
481
|
listLatestEntries: async function (model, params) {
|
|
452
482
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
453
|
-
|
|
454
|
-
if (!where.tenant) {
|
|
455
|
-
where.tenant = model.tenant;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
483
|
return context.cms.listEntries(model, _objectSpread(_objectSpread({
|
|
459
484
|
sort: ["createdOn_DESC"]
|
|
460
485
|
}, params || {}), {}, {
|
|
@@ -465,11 +490,6 @@ const createContentEntryCrud = params => {
|
|
|
465
490
|
},
|
|
466
491
|
listPublishedEntries: async function (model, params) {
|
|
467
492
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
468
|
-
|
|
469
|
-
if (!where.tenant) {
|
|
470
|
-
where.tenant = model.tenant;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
493
|
return context.cms.listEntries(model, _objectSpread(_objectSpread({
|
|
474
494
|
sort: ["createdOn_DESC"]
|
|
475
495
|
}, params || {}), {}, {
|
|
@@ -513,7 +533,7 @@ const createContentEntryCrud = params => {
|
|
|
513
533
|
} = createEntryId(1);
|
|
514
534
|
const entry = {
|
|
515
535
|
webinyVersion: context.WEBINY_VERSION,
|
|
516
|
-
tenant:
|
|
536
|
+
tenant: getTenant().id,
|
|
517
537
|
entryId,
|
|
518
538
|
id,
|
|
519
539
|
modelId: model.modelId,
|
|
@@ -537,7 +557,6 @@ const createContentEntryCrud = params => {
|
|
|
537
557
|
});
|
|
538
558
|
storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
539
559
|
const result = await storageOperations.entries.create(model, {
|
|
540
|
-
input,
|
|
541
560
|
entry,
|
|
542
561
|
storageEntry
|
|
543
562
|
});
|
|
@@ -643,8 +662,6 @@ const createContentEntryCrud = params => {
|
|
|
643
662
|
const result = await storageOperations.entries.createRevisionFrom(model, {
|
|
644
663
|
entry,
|
|
645
664
|
storageEntry,
|
|
646
|
-
originalEntry,
|
|
647
|
-
originalStorageEntry,
|
|
648
665
|
latestEntry,
|
|
649
666
|
latestStorageEntry
|
|
650
667
|
});
|
|
@@ -729,11 +746,8 @@ const createContentEntryCrud = params => {
|
|
|
729
746
|
});
|
|
730
747
|
storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
731
748
|
const result = await storageOperations.entries.update(model, {
|
|
732
|
-
originalEntry,
|
|
733
|
-
originalStorageEntry,
|
|
734
749
|
entry,
|
|
735
|
-
storageEntry
|
|
736
|
-
input
|
|
750
|
+
storageEntry
|
|
737
751
|
});
|
|
738
752
|
await onAfterEntryUpdate.publish({
|
|
739
753
|
entry,
|
|
@@ -802,11 +816,8 @@ const createContentEntryCrud = params => {
|
|
|
802
816
|
|
|
803
817
|
try {
|
|
804
818
|
await storageOperations.entries.update(model, {
|
|
805
|
-
originalEntry,
|
|
806
|
-
originalStorageEntry,
|
|
807
819
|
entry,
|
|
808
|
-
storageEntry
|
|
809
|
-
input: {}
|
|
820
|
+
storageEntry
|
|
810
821
|
});
|
|
811
822
|
} catch (ex) {
|
|
812
823
|
throw new _error.default("Could not update existing entry with new data while re-publishing.", "REPUBLISH_UPDATE_ERROR", {
|
|
@@ -820,8 +831,6 @@ const createContentEntryCrud = params => {
|
|
|
820
831
|
|
|
821
832
|
try {
|
|
822
833
|
return await storageOperations.entries.publish(model, {
|
|
823
|
-
originalEntry,
|
|
824
|
-
originalStorageEntry,
|
|
825
834
|
entry,
|
|
826
835
|
storageEntry
|
|
827
836
|
});
|
|
@@ -866,8 +875,7 @@ const createContentEntryCrud = params => {
|
|
|
866
875
|
if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {
|
|
867
876
|
return await deleteEntry({
|
|
868
877
|
model,
|
|
869
|
-
entry: entryToDelete
|
|
870
|
-
storageEntry: storageEntryToDelete
|
|
878
|
+
entry: entryToDelete
|
|
871
879
|
});
|
|
872
880
|
}
|
|
873
881
|
/**
|
|
@@ -889,10 +897,10 @@ const createContentEntryCrud = params => {
|
|
|
889
897
|
model
|
|
890
898
|
});
|
|
891
899
|
await storageOperations.entries.deleteRevision(model, {
|
|
892
|
-
entryToDelete,
|
|
893
|
-
storageEntryToDelete,
|
|
894
|
-
entryToSetAsLatest,
|
|
895
|
-
storageEntryToSetAsLatest
|
|
900
|
+
entry: entryToDelete,
|
|
901
|
+
storageEntry: storageEntryToDelete,
|
|
902
|
+
latestEntry: entryToSetAsLatest,
|
|
903
|
+
latestStorageEntry: storageEntryToSetAsLatest
|
|
896
904
|
});
|
|
897
905
|
await onAfterEntryDeleteRevision.publish({
|
|
898
906
|
entry: entryToDelete,
|
|
@@ -901,10 +909,10 @@ const createContentEntryCrud = params => {
|
|
|
901
909
|
} catch (ex) {
|
|
902
910
|
throw new _error.default(ex.message, ex.code || "DELETE_REVISION_ERROR", {
|
|
903
911
|
error: ex,
|
|
904
|
-
entryToDelete,
|
|
905
|
-
storageEntryToDelete,
|
|
906
|
-
entryToSetAsLatest,
|
|
907
|
-
storageEntryToSetAsLatest
|
|
912
|
+
entry: entryToDelete,
|
|
913
|
+
storageEntry: storageEntryToDelete,
|
|
914
|
+
latestEntry: entryToSetAsLatest,
|
|
915
|
+
latestStorageEntry: storageEntryToSetAsLatest
|
|
908
916
|
});
|
|
909
917
|
}
|
|
910
918
|
},
|
|
@@ -925,8 +933,7 @@ const createContentEntryCrud = params => {
|
|
|
925
933
|
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
|
|
926
934
|
return await deleteEntry({
|
|
927
935
|
model,
|
|
928
|
-
entry
|
|
929
|
-
storageEntry
|
|
936
|
+
entry
|
|
930
937
|
});
|
|
931
938
|
},
|
|
932
939
|
publishEntry: async (model, id) => {
|
|
@@ -963,9 +970,7 @@ const createContentEntryCrud = params => {
|
|
|
963
970
|
storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
964
971
|
const result = await storageOperations.entries.publish(model, {
|
|
965
972
|
entry,
|
|
966
|
-
storageEntry
|
|
967
|
-
originalEntry,
|
|
968
|
-
originalStorageEntry
|
|
973
|
+
storageEntry
|
|
969
974
|
});
|
|
970
975
|
await onAfterEntryPublish.publish({
|
|
971
976
|
entry,
|
|
@@ -1022,8 +1027,6 @@ const createContentEntryCrud = params => {
|
|
|
1022
1027
|
});
|
|
1023
1028
|
storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
1024
1029
|
const result = await storageOperations.entries.requestChanges(model, {
|
|
1025
|
-
originalEntry,
|
|
1026
|
-
originalStorageEntry,
|
|
1027
1030
|
entry,
|
|
1028
1031
|
storageEntry
|
|
1029
1032
|
});
|
|
@@ -1084,8 +1087,6 @@ const createContentEntryCrud = params => {
|
|
|
1084
1087
|
});
|
|
1085
1088
|
storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
1086
1089
|
const result = await storageOperations.entries.requestReview(model, {
|
|
1087
|
-
originalEntry,
|
|
1088
|
-
originalStorageEntry,
|
|
1089
1090
|
entry,
|
|
1090
1091
|
storageEntry
|
|
1091
1092
|
});
|
|
@@ -1139,8 +1140,6 @@ const createContentEntryCrud = params => {
|
|
|
1139
1140
|
});
|
|
1140
1141
|
storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
1141
1142
|
const result = await storageOperations.entries.unpublish(model, {
|
|
1142
|
-
originalEntry,
|
|
1143
|
-
originalStorageEntry,
|
|
1144
1143
|
entry,
|
|
1145
1144
|
storageEntry
|
|
1146
1145
|
});
|