@strapi/content-type-builder 5.45.1 → 5.46.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/dist/server/controllers/content-types.js +21 -8
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +21 -8
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/src/controllers/content-types.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -5,6 +5,23 @@ var index = require('../utils/index.js');
|
|
|
5
5
|
var contentType = require('./validation/content-type.js');
|
|
6
6
|
var contentTypes$1 = require('../services/content-types.js');
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Telemetry uses a bounded HTTP timeout (~1s in the metrics sender); cap how long we defer
|
|
10
|
+
* dev reload so a stuck client cannot block restart indefinitely.
|
|
11
|
+
*/ const RELOAD_AFTER_TELEMETRY_MAX_MS = 2500;
|
|
12
|
+
const scheduleReloadAfterOutboundTelemetry = (sendPromise)=>{
|
|
13
|
+
setImmediate(()=>{
|
|
14
|
+
const settled = sendPromise.catch(()=>{});
|
|
15
|
+
Promise.race([
|
|
16
|
+
settled,
|
|
17
|
+
new Promise((resolve)=>{
|
|
18
|
+
setTimeout(resolve, RELOAD_AFTER_TELEMETRY_MAX_MS);
|
|
19
|
+
})
|
|
20
|
+
]).catch(()=>{}).finally(()=>{
|
|
21
|
+
strapi.reload();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
};
|
|
8
25
|
var contentTypes = {
|
|
9
26
|
async getContentTypes (ctx) {
|
|
10
27
|
const { kind } = ctx.query;
|
|
@@ -60,12 +77,8 @@ var contentTypes = {
|
|
|
60
77
|
kind: contentType.kind
|
|
61
78
|
}
|
|
62
79
|
};
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
} else {
|
|
66
|
-
await strapi.telemetry.send('didCreateContentType', metricsPayload);
|
|
67
|
-
}
|
|
68
|
-
setImmediate(()=>strapi.reload());
|
|
80
|
+
const telemetryPromise = _.isEmpty(strapi.apis) ? strapi.telemetry.send('didCreateFirstContentType', metricsPayload) : strapi.telemetry.send('didCreateContentType', metricsPayload);
|
|
81
|
+
scheduleReloadAfterOutboundTelemetry(telemetryPromise);
|
|
69
82
|
ctx.send({
|
|
70
83
|
data: {
|
|
71
84
|
uid: contentType.uid
|
|
@@ -73,11 +86,11 @@ var contentTypes = {
|
|
|
73
86
|
}, 201);
|
|
74
87
|
} catch (err) {
|
|
75
88
|
strapi.log.error(err);
|
|
76
|
-
|
|
89
|
+
strapi.telemetry.send('didNotCreateContentType', {
|
|
77
90
|
eventProperties: {
|
|
78
91
|
error: err.message || err
|
|
79
92
|
}
|
|
80
|
-
});
|
|
93
|
+
}).catch(()=>{});
|
|
81
94
|
ctx.send({
|
|
82
95
|
error: err.message || 'Unknown error'
|
|
83
96
|
}, 400);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.js","sources":["../../../server/src/controllers/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type {} from 'koa-body';\nimport type { Internal } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n validateContentTypeInput,\n validateUpdateContentTypeInput,\n validateKind,\n} from './validation/content-type';\nimport { isContentTypeVisible } from '../services/content-types';\n\nexport default {\n async getContentTypes(ctx: Context) {\n const { kind } = ctx.query;\n\n try {\n await validateKind(kind);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const contentTypeService = getService('content-types');\n\n const contentTypes = Object.keys(strapi.contentTypes)\n .filter(\n (uid) =>\n !kind ||\n _.get(strapi.contentTypes[uid as Internal.UID.ContentType], 'kind', 'collectionType') ===\n kind\n )\n .map((uid) =>\n contentTypeService.formatContentType(strapi.contentTypes[uid as Internal.UID.ContentType])\n );\n\n ctx.send({\n data: contentTypes,\n });\n },\n\n getContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n const contentType = strapi.contentTypes[uid];\n\n if (!contentType) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n if (!isContentTypeVisible(contentType)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n const contentTypeService = getService('content-types');\n\n ctx.send({ data: contentTypeService.formatContentType(contentType) });\n },\n\n async createContentType(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const contentType = await contentTypeService.createContentType({\n contentType: body.contentType,\n components: body.components,\n });\n\n const metricsPayload = {\n eventProperties: {\n kind: contentType.kind,\n },\n };\n\n if (_.isEmpty(strapi.apis)) {\n await strapi.telemetry.send('didCreateFirstContentType', metricsPayload);\n } else {\n await strapi.telemetry.send('didCreateContentType', metricsPayload);\n }\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: contentType.uid } }, 201);\n } catch (err) {\n strapi.log.error(err);\n await strapi.telemetry.send('didNotCreateContentType', {\n eventProperties: { error: (err as Error).message || err },\n });\n ctx.send({ error: (err as Error).message || 'Unknown error' }, 400);\n }\n },\n\n async updateContentType(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n await validateUpdateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.editContentType(uid, {\n contentType: body.contentType,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n\n async deleteContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.deleteContentType(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n};\n"],"names":["getContentTypes","ctx","kind","query","validateKind","error","send","contentTypeService","getService","contentTypes","Object","keys","strapi","filter","uid","_","get","map","formatContentType","data","getContentType","params","contentType","isContentTypeVisible","createContentType","body","request","validateContentTypeInput","reload","isWatching","components","metricsPayload","eventProperties","isEmpty","apis","telemetry","setImmediate","err","log","message","updateContentType","has","validateUpdateContentTypeInput","component","editContentType","deleteContentType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-types.js","sources":["../../../server/src/controllers/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type {} from 'koa-body';\nimport type { Internal } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n validateContentTypeInput,\n validateUpdateContentTypeInput,\n validateKind,\n} from './validation/content-type';\nimport { isContentTypeVisible } from '../services/content-types';\n\n/**\n * Telemetry uses a bounded HTTP timeout (~1s in the metrics sender); cap how long we defer\n * dev reload so a stuck client cannot block restart indefinitely.\n */\nconst RELOAD_AFTER_TELEMETRY_MAX_MS = 2500;\n\nconst scheduleReloadAfterOutboundTelemetry = (sendPromise: Promise<unknown>): void => {\n setImmediate(() => {\n const settled = sendPromise.catch(() => {});\n Promise.race([\n settled,\n new Promise<void>((resolve) => {\n setTimeout(resolve, RELOAD_AFTER_TELEMETRY_MAX_MS);\n }),\n ])\n .catch(() => {})\n .finally(() => {\n strapi.reload();\n });\n });\n};\n\nexport default {\n async getContentTypes(ctx: Context) {\n const { kind } = ctx.query;\n\n try {\n await validateKind(kind);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const contentTypeService = getService('content-types');\n\n const contentTypes = Object.keys(strapi.contentTypes)\n .filter(\n (uid) =>\n !kind ||\n _.get(strapi.contentTypes[uid as Internal.UID.ContentType], 'kind', 'collectionType') ===\n kind\n )\n .map((uid) =>\n contentTypeService.formatContentType(strapi.contentTypes[uid as Internal.UID.ContentType])\n );\n\n ctx.send({\n data: contentTypes,\n });\n },\n\n getContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n const contentType = strapi.contentTypes[uid];\n\n if (!contentType) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n if (!isContentTypeVisible(contentType)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n const contentTypeService = getService('content-types');\n\n ctx.send({ data: contentTypeService.formatContentType(contentType) });\n },\n\n async createContentType(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const contentType = await contentTypeService.createContentType({\n contentType: body.contentType,\n components: body.components,\n });\n\n const metricsPayload = {\n eventProperties: {\n kind: contentType.kind,\n },\n };\n\n const telemetryPromise = _.isEmpty(strapi.apis)\n ? strapi.telemetry.send('didCreateFirstContentType', metricsPayload)\n : strapi.telemetry.send('didCreateContentType', metricsPayload);\n\n scheduleReloadAfterOutboundTelemetry(telemetryPromise);\n\n ctx.send({ data: { uid: contentType.uid } }, 201);\n } catch (err) {\n strapi.log.error(err);\n strapi.telemetry\n .send('didNotCreateContentType', {\n eventProperties: { error: (err as Error).message || err },\n })\n .catch(() => {});\n ctx.send({ error: (err as Error).message || 'Unknown error' }, 400);\n }\n },\n\n async updateContentType(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n await validateUpdateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.editContentType(uid, {\n contentType: body.contentType,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n\n async deleteContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.deleteContentType(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n};\n"],"names":["RELOAD_AFTER_TELEMETRY_MAX_MS","scheduleReloadAfterOutboundTelemetry","sendPromise","setImmediate","settled","catch","Promise","race","resolve","setTimeout","finally","strapi","reload","getContentTypes","ctx","kind","query","validateKind","error","send","contentTypeService","getService","contentTypes","Object","keys","filter","uid","_","get","map","formatContentType","data","getContentType","params","contentType","isContentTypeVisible","createContentType","body","request","validateContentTypeInput","isWatching","components","metricsPayload","eventProperties","telemetryPromise","isEmpty","apis","telemetry","err","log","message","updateContentType","has","validateUpdateContentTypeInput","component","editContentType","deleteContentType"],"mappings":"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"}
|
|
@@ -3,6 +3,23 @@ import { getService } from '../utils/index.mjs';
|
|
|
3
3
|
import { validateUpdateContentTypeInput, validateContentTypeInput, validateKind } from './validation/content-type.mjs';
|
|
4
4
|
import { isContentTypeVisible } from '../services/content-types.mjs';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Telemetry uses a bounded HTTP timeout (~1s in the metrics sender); cap how long we defer
|
|
8
|
+
* dev reload so a stuck client cannot block restart indefinitely.
|
|
9
|
+
*/ const RELOAD_AFTER_TELEMETRY_MAX_MS = 2500;
|
|
10
|
+
const scheduleReloadAfterOutboundTelemetry = (sendPromise)=>{
|
|
11
|
+
setImmediate(()=>{
|
|
12
|
+
const settled = sendPromise.catch(()=>{});
|
|
13
|
+
Promise.race([
|
|
14
|
+
settled,
|
|
15
|
+
new Promise((resolve)=>{
|
|
16
|
+
setTimeout(resolve, RELOAD_AFTER_TELEMETRY_MAX_MS);
|
|
17
|
+
})
|
|
18
|
+
]).catch(()=>{}).finally(()=>{
|
|
19
|
+
strapi.reload();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
};
|
|
6
23
|
var contentTypes = {
|
|
7
24
|
async getContentTypes (ctx) {
|
|
8
25
|
const { kind } = ctx.query;
|
|
@@ -58,12 +75,8 @@ var contentTypes = {
|
|
|
58
75
|
kind: contentType.kind
|
|
59
76
|
}
|
|
60
77
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
} else {
|
|
64
|
-
await strapi.telemetry.send('didCreateContentType', metricsPayload);
|
|
65
|
-
}
|
|
66
|
-
setImmediate(()=>strapi.reload());
|
|
78
|
+
const telemetryPromise = _.isEmpty(strapi.apis) ? strapi.telemetry.send('didCreateFirstContentType', metricsPayload) : strapi.telemetry.send('didCreateContentType', metricsPayload);
|
|
79
|
+
scheduleReloadAfterOutboundTelemetry(telemetryPromise);
|
|
67
80
|
ctx.send({
|
|
68
81
|
data: {
|
|
69
82
|
uid: contentType.uid
|
|
@@ -71,11 +84,11 @@ var contentTypes = {
|
|
|
71
84
|
}, 201);
|
|
72
85
|
} catch (err) {
|
|
73
86
|
strapi.log.error(err);
|
|
74
|
-
|
|
87
|
+
strapi.telemetry.send('didNotCreateContentType', {
|
|
75
88
|
eventProperties: {
|
|
76
89
|
error: err.message || err
|
|
77
90
|
}
|
|
78
|
-
});
|
|
91
|
+
}).catch(()=>{});
|
|
79
92
|
ctx.send({
|
|
80
93
|
error: err.message || 'Unknown error'
|
|
81
94
|
}, 400);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.mjs","sources":["../../../server/src/controllers/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type {} from 'koa-body';\nimport type { Internal } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n validateContentTypeInput,\n validateUpdateContentTypeInput,\n validateKind,\n} from './validation/content-type';\nimport { isContentTypeVisible } from '../services/content-types';\n\nexport default {\n async getContentTypes(ctx: Context) {\n const { kind } = ctx.query;\n\n try {\n await validateKind(kind);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const contentTypeService = getService('content-types');\n\n const contentTypes = Object.keys(strapi.contentTypes)\n .filter(\n (uid) =>\n !kind ||\n _.get(strapi.contentTypes[uid as Internal.UID.ContentType], 'kind', 'collectionType') ===\n kind\n )\n .map((uid) =>\n contentTypeService.formatContentType(strapi.contentTypes[uid as Internal.UID.ContentType])\n );\n\n ctx.send({\n data: contentTypes,\n });\n },\n\n getContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n const contentType = strapi.contentTypes[uid];\n\n if (!contentType) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n if (!isContentTypeVisible(contentType)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n const contentTypeService = getService('content-types');\n\n ctx.send({ data: contentTypeService.formatContentType(contentType) });\n },\n\n async createContentType(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const contentType = await contentTypeService.createContentType({\n contentType: body.contentType,\n components: body.components,\n });\n\n const metricsPayload = {\n eventProperties: {\n kind: contentType.kind,\n },\n };\n\n if (_.isEmpty(strapi.apis)) {\n await strapi.telemetry.send('didCreateFirstContentType', metricsPayload);\n } else {\n await strapi.telemetry.send('didCreateContentType', metricsPayload);\n }\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: contentType.uid } }, 201);\n } catch (err) {\n strapi.log.error(err);\n await strapi.telemetry.send('didNotCreateContentType', {\n eventProperties: { error: (err as Error).message || err },\n });\n ctx.send({ error: (err as Error).message || 'Unknown error' }, 400);\n }\n },\n\n async updateContentType(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n await validateUpdateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.editContentType(uid, {\n contentType: body.contentType,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n\n async deleteContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.deleteContentType(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n};\n"],"names":["getContentTypes","ctx","kind","query","validateKind","error","send","contentTypeService","getService","contentTypes","Object","keys","strapi","filter","uid","_","get","map","formatContentType","data","getContentType","params","contentType","isContentTypeVisible","createContentType","body","request","validateContentTypeInput","reload","isWatching","components","metricsPayload","eventProperties","isEmpty","apis","telemetry","setImmediate","err","log","message","updateContentType","has","validateUpdateContentTypeInput","component","editContentType","deleteContentType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-types.mjs","sources":["../../../server/src/controllers/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type {} from 'koa-body';\nimport type { Internal } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n validateContentTypeInput,\n validateUpdateContentTypeInput,\n validateKind,\n} from './validation/content-type';\nimport { isContentTypeVisible } from '../services/content-types';\n\n/**\n * Telemetry uses a bounded HTTP timeout (~1s in the metrics sender); cap how long we defer\n * dev reload so a stuck client cannot block restart indefinitely.\n */\nconst RELOAD_AFTER_TELEMETRY_MAX_MS = 2500;\n\nconst scheduleReloadAfterOutboundTelemetry = (sendPromise: Promise<unknown>): void => {\n setImmediate(() => {\n const settled = sendPromise.catch(() => {});\n Promise.race([\n settled,\n new Promise<void>((resolve) => {\n setTimeout(resolve, RELOAD_AFTER_TELEMETRY_MAX_MS);\n }),\n ])\n .catch(() => {})\n .finally(() => {\n strapi.reload();\n });\n });\n};\n\nexport default {\n async getContentTypes(ctx: Context) {\n const { kind } = ctx.query;\n\n try {\n await validateKind(kind);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const contentTypeService = getService('content-types');\n\n const contentTypes = Object.keys(strapi.contentTypes)\n .filter(\n (uid) =>\n !kind ||\n _.get(strapi.contentTypes[uid as Internal.UID.ContentType], 'kind', 'collectionType') ===\n kind\n )\n .map((uid) =>\n contentTypeService.formatContentType(strapi.contentTypes[uid as Internal.UID.ContentType])\n );\n\n ctx.send({\n data: contentTypes,\n });\n },\n\n getContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n const contentType = strapi.contentTypes[uid];\n\n if (!contentType) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n if (!isContentTypeVisible(contentType)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n const contentTypeService = getService('content-types');\n\n ctx.send({ data: contentTypeService.formatContentType(contentType) });\n },\n\n async createContentType(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const contentType = await contentTypeService.createContentType({\n contentType: body.contentType,\n components: body.components,\n });\n\n const metricsPayload = {\n eventProperties: {\n kind: contentType.kind,\n },\n };\n\n const telemetryPromise = _.isEmpty(strapi.apis)\n ? strapi.telemetry.send('didCreateFirstContentType', metricsPayload)\n : strapi.telemetry.send('didCreateContentType', metricsPayload);\n\n scheduleReloadAfterOutboundTelemetry(telemetryPromise);\n\n ctx.send({ data: { uid: contentType.uid } }, 201);\n } catch (err) {\n strapi.log.error(err);\n strapi.telemetry\n .send('didNotCreateContentType', {\n eventProperties: { error: (err as Error).message || err },\n })\n .catch(() => {});\n ctx.send({ error: (err as Error).message || 'Unknown error' }, 400);\n }\n },\n\n async updateContentType(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n await validateUpdateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.editContentType(uid, {\n contentType: body.contentType,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n\n async deleteContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.deleteContentType(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n};\n"],"names":["RELOAD_AFTER_TELEMETRY_MAX_MS","scheduleReloadAfterOutboundTelemetry","sendPromise","setImmediate","settled","catch","Promise","race","resolve","setTimeout","finally","strapi","reload","getContentTypes","ctx","kind","query","validateKind","error","send","contentTypeService","getService","contentTypes","Object","keys","filter","uid","_","get","map","formatContentType","data","getContentType","params","contentType","isContentTypeVisible","createContentType","body","request","validateContentTypeInput","isWatching","components","metricsPayload","eventProperties","telemetryPromise","isEmpty","apis","telemetry","err","log","message","updateContentType","has","validateUpdateContentTypeInput","component","editContentType","deleteContentType"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/content-types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;
|
|
1
|
+
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/content-types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;yBAkCN,OAAO;wBA2Bd,OAAO;2BAkBE,OAAO;2BA2CP,OAAO;2BAiCP,OAAO;;AA1HtC,wBAgJE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/content-type-builder",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.46.0",
|
|
4
4
|
"description": "Create and manage content types",
|
|
5
5
|
"homepage": "https://strapi.io",
|
|
6
6
|
"bugs": {
|
|
@@ -73,9 +73,9 @@
|
|
|
73
73
|
"@reduxjs/toolkit": "1.9.7",
|
|
74
74
|
"@sindresorhus/slugify": "1.1.0",
|
|
75
75
|
"@strapi/design-system": "2.2.0",
|
|
76
|
-
"@strapi/generators": "5.
|
|
76
|
+
"@strapi/generators": "5.46.0",
|
|
77
77
|
"@strapi/icons": "2.2.0",
|
|
78
|
-
"@strapi/utils": "5.
|
|
78
|
+
"@strapi/utils": "5.46.0",
|
|
79
79
|
"ai": "5.0.52",
|
|
80
80
|
"date-fns": "2.30.0",
|
|
81
81
|
"fs-extra": "11.3.4",
|
|
@@ -93,8 +93,8 @@
|
|
|
93
93
|
"zod": "3.25.67"
|
|
94
94
|
},
|
|
95
95
|
"devDependencies": {
|
|
96
|
-
"@strapi/admin": "5.
|
|
97
|
-
"@strapi/types": "5.
|
|
96
|
+
"@strapi/admin": "5.46.0",
|
|
97
|
+
"@strapi/types": "5.46.0",
|
|
98
98
|
"@testing-library/dom": "10.4.1",
|
|
99
99
|
"@testing-library/react": "16.3.0",
|
|
100
100
|
"@testing-library/user-event": "14.6.1",
|