@strapi/core 5.46.1 → 5.47.1
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/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +12 -3
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +12 -3
- package/dist/Strapi.mjs.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +12 -5
- package/dist/compile.js.map +1 -1
- package/dist/compile.mjs +12 -5
- package/dist/compile.mjs.map +1 -1
- package/dist/core-api/routes/index.js +2 -0
- package/dist/core-api/routes/index.js.map +1 -1
- package/dist/core-api/routes/index.mjs +2 -0
- package/dist/core-api/routes/index.mjs.map +1 -1
- package/dist/core-api/routes/validation/content-type.d.ts +13 -1
- package/dist/core-api/routes/validation/content-type.d.ts.map +1 -1
- package/dist/core-api/routes/validation/content-type.js +15 -2
- package/dist/core-api/routes/validation/content-type.js.map +1 -1
- package/dist/core-api/routes/validation/content-type.mjs +15 -2
- package/dist/core-api/routes/validation/content-type.mjs.map +1 -1
- package/dist/middlewares/session.d.ts +2 -2
- package/dist/middlewares/session.d.ts.map +1 -1
- package/dist/middlewares/session.js +1 -1
- package/dist/middlewares/session.js.map +1 -1
- package/dist/middlewares/session.mjs +2 -2
- package/dist/middlewares/session.mjs.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.d.ts +2 -1
- package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.js +41 -30
- package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.mjs +41 -30
- package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
- package/dist/package.json.js +16 -15
- package/dist/package.json.js.map +1 -1
- package/dist/package.json.mjs +16 -15
- package/dist/package.json.mjs.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/index.mjs +3 -1
- package/dist/providers/index.mjs.map +1 -1
- package/dist/providers/mcp.d.ts +3 -0
- package/dist/providers/mcp.d.ts.map +1 -0
- package/dist/providers/mcp.js +39 -0
- package/dist/providers/mcp.js.map +1 -0
- package/dist/providers/mcp.mjs +37 -0
- package/dist/providers/mcp.mjs.map +1 -0
- package/dist/providers/session-manager.d.ts.map +1 -1
- package/dist/providers/session-manager.js +3 -0
- package/dist/providers/session-manager.js.map +1 -1
- package/dist/providers/session-manager.mjs +3 -0
- package/dist/providers/session-manager.mjs.map +1 -1
- package/dist/services/ai.d.ts.map +1 -1
- package/dist/services/ai.js +3 -0
- package/dist/services/ai.js.map +1 -1
- package/dist/services/ai.mjs +3 -0
- package/dist/services/ai.mjs.map +1 -1
- package/dist/services/cron.d.ts +1 -1
- package/dist/services/cron.d.ts.map +1 -1
- package/dist/services/cron.js +10 -2
- package/dist/services/cron.js.map +1 -1
- package/dist/services/cron.mjs +10 -2
- package/dist/services/cron.mjs.map +1 -1
- package/dist/services/document-service/draft-and-publish.d.ts +2 -16
- package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
- package/dist/services/document-service/draft-and-publish.js +0 -53
- package/dist/services/document-service/draft-and-publish.js.map +1 -1
- package/dist/services/document-service/draft-and-publish.mjs +2 -53
- package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
- package/dist/services/document-service/params.d.ts +2 -2
- package/dist/services/document-service/params.d.ts.map +1 -1
- package/dist/services/document-service/publication-filter.d.ts +6 -0
- package/dist/services/document-service/publication-filter.d.ts.map +1 -0
- package/dist/services/document-service/publication-filter.js +20 -0
- package/dist/services/document-service/publication-filter.js.map +1 -0
- package/dist/services/document-service/publication-filter.mjs +15 -0
- package/dist/services/document-service/publication-filter.mjs.map +1 -0
- package/dist/services/document-service/transform/query.d.ts +1 -1
- package/dist/services/document-service/transform/query.d.ts.map +1 -1
- package/dist/services/document-service/transform/query.js +32 -19
- package/dist/services/document-service/transform/query.js.map +1 -1
- package/dist/services/document-service/transform/query.mjs +33 -20
- package/dist/services/document-service/transform/query.mjs.map +1 -1
- package/dist/services/entity-validator/blocks-validator.js +1 -1
- package/dist/services/entity-validator/blocks-validator.js.map +1 -1
- package/dist/services/entity-validator/blocks-validator.mjs +1 -1
- package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
- package/dist/services/mcp/authentication.d.ts +23 -0
- package/dist/services/mcp/authentication.d.ts.map +1 -0
- package/dist/services/mcp/authentication.js +45 -0
- package/dist/services/mcp/authentication.js.map +1 -0
- package/dist/services/mcp/authentication.mjs +43 -0
- package/dist/services/mcp/authentication.mjs.map +1 -0
- package/dist/services/mcp/handlers/handlePost.d.ts +4 -0
- package/dist/services/mcp/handlers/handlePost.d.ts.map +1 -0
- package/dist/services/mcp/handlers/handlePost.js +59 -0
- package/dist/services/mcp/handlers/handlePost.js.map +1 -0
- package/dist/services/mcp/handlers/handlePost.mjs +57 -0
- package/dist/services/mcp/handlers/handlePost.mjs.map +1 -0
- package/dist/services/mcp/handlers/types.d.ts +12 -0
- package/dist/services/mcp/handlers/types.d.ts.map +1 -0
- package/dist/services/mcp/index.d.ts +6 -0
- package/dist/services/mcp/index.d.ts.map +1 -0
- package/dist/services/mcp/index.js +101 -0
- package/dist/services/mcp/index.js.map +1 -0
- package/dist/services/mcp/index.mjs +99 -0
- package/dist/services/mcp/index.mjs.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.d.ts +13 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.d.ts.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.js +53 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.js.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.mjs +51 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.mjs.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.d.ts +43 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.d.ts.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.js +108 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.js.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.mjs +106 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.mjs.map +1 -0
- package/dist/services/mcp/internal/McpConfiguration.d.ts +11 -0
- package/dist/services/mcp/internal/McpConfiguration.d.ts.map +1 -0
- package/dist/services/mcp/internal/McpConfiguration.js +34 -0
- package/dist/services/mcp/internal/McpConfiguration.js.map +1 -0
- package/dist/services/mcp/internal/McpConfiguration.mjs +32 -0
- package/dist/services/mcp/internal/McpConfiguration.mjs.map +1 -0
- package/dist/services/mcp/internal/McpServerFactory.d.ts +37 -0
- package/dist/services/mcp/internal/McpServerFactory.d.ts.map +1 -0
- package/dist/services/mcp/internal/McpServerFactory.js +71 -0
- package/dist/services/mcp/internal/McpServerFactory.js.map +1 -0
- package/dist/services/mcp/internal/McpServerFactory.mjs +69 -0
- package/dist/services/mcp/internal/McpServerFactory.mjs.map +1 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.d.ts +21 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.d.ts.map +1 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.js +76 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.js.map +1 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.mjs +73 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.mjs.map +1 -0
- package/dist/services/mcp/metrics/metrics.d.ts +29 -0
- package/dist/services/mcp/metrics/metrics.d.ts.map +1 -0
- package/dist/services/mcp/metrics/metrics.js +97 -0
- package/dist/services/mcp/metrics/metrics.js.map +1 -0
- package/dist/services/mcp/metrics/metrics.mjs +88 -0
- package/dist/services/mcp/metrics/metrics.mjs.map +1 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.d.ts +11 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.d.ts.map +1 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.js +10 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.js.map +1 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.mjs +8 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.mjs.map +1 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.d.ts +4 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.d.ts.map +1 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.js +27 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.js.map +1 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.mjs +25 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.mjs.map +1 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.d.ts +3 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.d.ts.map +1 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.js +47 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.js.map +1 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.mjs +45 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.mjs.map +1 -0
- package/dist/services/mcp/prompt-registry.d.ts +16 -0
- package/dist/services/mcp/prompt-registry.d.ts.map +1 -0
- package/dist/services/mcp/prompt-registry.js +77 -0
- package/dist/services/mcp/prompt-registry.js.map +1 -0
- package/dist/services/mcp/prompt-registry.mjs +75 -0
- package/dist/services/mcp/prompt-registry.mjs.map +1 -0
- package/dist/services/mcp/resource-registry.d.ts +14 -0
- package/dist/services/mcp/resource-registry.d.ts.map +1 -0
- package/dist/services/mcp/resource-registry.js +67 -0
- package/dist/services/mcp/resource-registry.js.map +1 -0
- package/dist/services/mcp/resource-registry.mjs +65 -0
- package/dist/services/mcp/resource-registry.mjs.map +1 -0
- package/dist/services/mcp/routes.d.ts +11 -0
- package/dist/services/mcp/routes.d.ts.map +1 -0
- package/dist/services/mcp/routes.js +58 -0
- package/dist/services/mcp/routes.js.map +1 -0
- package/dist/services/mcp/routes.mjs +56 -0
- package/dist/services/mcp/routes.mjs.map +1 -0
- package/dist/services/mcp/tool-registry.d.ts +25 -0
- package/dist/services/mcp/tool-registry.d.ts.map +1 -0
- package/dist/services/mcp/tool-registry.js +102 -0
- package/dist/services/mcp/tool-registry.js.map +1 -0
- package/dist/services/mcp/tool-registry.mjs +99 -0
- package/dist/services/mcp/tool-registry.mjs.map +1 -0
- package/dist/services/mcp/tools/log.d.ts +87 -0
- package/dist/services/mcp/tools/log.d.ts.map +1 -0
- package/dist/services/mcp/tools/log.js +88 -0
- package/dist/services/mcp/tools/log.js.map +1 -0
- package/dist/services/mcp/tools/log.mjs +86 -0
- package/dist/services/mcp/tools/log.mjs.map +1 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.d.ts +36 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.d.ts.map +1 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.js +59 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.js.map +1 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.mjs +56 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.mjs.map +1 -0
- package/dist/services/mcp/utils/jsonRpcErrors.d.ts +22 -0
- package/dist/services/mcp/utils/jsonRpcErrors.d.ts.map +1 -0
- package/dist/services/mcp/utils/jsonRpcErrors.js +25 -0
- package/dist/services/mcp/utils/jsonRpcErrors.js.map +1 -0
- package/dist/services/mcp/utils/jsonRpcErrors.mjs +23 -0
- package/dist/services/mcp/utils/jsonRpcErrors.mjs.map +1 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.d.ts +18 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.d.ts.map +1 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.js +29 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.js.map +1 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.mjs +27 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.mjs.map +1 -0
- package/dist/services/mcp/utils/sendJsonRpcError.d.ts +5 -0
- package/dist/services/mcp/utils/sendJsonRpcError.d.ts.map +1 -0
- package/dist/services/mcp/utils/sendJsonRpcError.js +23 -0
- package/dist/services/mcp/utils/sendJsonRpcError.js.map +1 -0
- package/dist/services/mcp/utils/sendJsonRpcError.mjs +21 -0
- package/dist/services/mcp/utils/sendJsonRpcError.mjs.map +1 -0
- package/dist/services/mcp/utils/withTimeout.d.ts +7 -0
- package/dist/services/mcp/utils/withTimeout.d.ts.map +1 -0
- package/dist/services/mcp/utils/withTimeout.js +23 -0
- package/dist/services/mcp/utils/withTimeout.js.map +1 -0
- package/dist/services/mcp/utils/withTimeout.mjs +21 -0
- package/dist/services/mcp/utils/withTimeout.mjs.map +1 -0
- package/dist/services/metrics/index.d.ts.map +1 -1
- package/dist/services/metrics/index.js +9 -6
- package/dist/services/metrics/index.js.map +1 -1
- package/dist/services/metrics/index.mjs +9 -6
- package/dist/services/metrics/index.mjs.map +1 -1
- package/dist/services/metrics/sender.d.ts.map +1 -1
- package/dist/services/metrics/sender.js +11 -3
- package/dist/services/metrics/sender.js.map +1 -1
- package/dist/services/metrics/sender.mjs +11 -3
- package/dist/services/metrics/sender.mjs.map +1 -1
- package/package.json +16 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import type { Core, Schema } from '@strapi/types';\n\nimport { contentTypes, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport * as z from 'zod/v4';\nimport type { QueryParam } from './validation/content-type';\n\nimport { CoreContentTypeRouteValidator } from './validation';\n\nexport const createRoutes = ({\n strapi,\n contentType,\n}: {\n strapi: Core.Strapi;\n contentType: Schema.ContentType;\n}) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType, strapi);\n }\n\n return getCollectionTypeRoutes(contentType, strapi);\n};\n\nconst getSingleTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams([\n 'fields',\n 'filters',\n '_q',\n 'pagination',\n 'sort',\n 'populate',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.documents }),\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n request: {\n params: { id: validator.documentID },\n query: validator.queryParams([\n 'fields',\n 'populate',\n 'filters',\n 'sort',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.document }),\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.body },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n },\n response: z.object({ data: validator.document }),\n },\n };\n};\n\n/**\n * Query params that are conditionally part of this route's contract (and OpenAPI spec)\n * based on the content type: e.g. locale only for localized types, status only for draft & publish.\n *\n * This is separate from the runtime allowlist used when api.rest.strictParams is on\n * (ALLOWED_QUERY_PARAM_KEYS + registerQueryParam in @strapi/utils). That allowlist is global\n * (locale and status are always allowed); validate/sanitize then pass them through and the\n * document service or i18n layer ignores them when not applicable.\n *\n * So the two can differ: a non-localized route will not declare \"locale\" here (OpenAPI says\n * no locale param), but the runtime allowlist still allows the key and downstream ignores it.\n * That is intentional: this drives the route contract/docs; the allowlist drives enforcement.\n */\nconst getConditionalQueryParams = (schema: Schema.ContentType) => {\n const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);\n\n return [\n ...(isLocalized ? ['locale'] : []),\n ...(hasDraftAndPublish ? ['status', 'hasPublishedVersion'] : []),\n ] as QueryParam[];\n};\n"],"names":["createRoutes","strapi","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","schema","uid","info","validator","CoreContentTypeRouteValidator","conditionalQueryParams","getConditionalQueryParams","find","method","path","singularName","handler","request","query","queryParams","response","z","object","data","document","config","update","body","partialBody","delete","pluralName","documents","findOne","params","id","documentID","create","isLocalized","plugin","service","isLocalizedContentType","hasDraftAndPublish","contentTypes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import type { Core, Schema } from '@strapi/types';\n\nimport { contentTypes, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport * as z from 'zod/v4';\nimport type { QueryParam } from './validation/content-type';\n\nimport { CoreContentTypeRouteValidator } from './validation';\n\nexport const createRoutes = ({\n strapi,\n contentType,\n}: {\n strapi: Core.Strapi;\n contentType: Schema.ContentType;\n}) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType, strapi);\n }\n\n return getCollectionTypeRoutes(contentType, strapi);\n};\n\nconst getSingleTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams([\n 'fields',\n 'filters',\n '_q',\n 'pagination',\n 'sort',\n 'populate',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.documents }),\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n request: {\n params: { id: validator.documentID },\n query: validator.queryParams([\n 'fields',\n 'populate',\n 'filters',\n 'sort',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.document }),\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.body },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n },\n response: z.object({ data: validator.document }),\n },\n };\n};\n\n/**\n * Query params that are conditionally part of this route's contract (and OpenAPI spec)\n * based on the content type: e.g. locale only for localized types, status only for draft & publish.\n *\n * This is separate from the runtime allowlist used when api.rest.strictParams is on\n * (ALLOWED_QUERY_PARAM_KEYS + registerQueryParam in @strapi/utils). That allowlist is global\n * (locale and status are always allowed); validate/sanitize then pass them through and the\n * document service or i18n layer ignores them when not applicable.\n *\n * So the two can differ: a non-localized route will not declare \"locale\" here (OpenAPI says\n * no locale param), but the runtime allowlist still allows the key and downstream ignores it.\n * That is intentional: this drives the route contract/docs; the allowlist drives enforcement.\n */\nconst getConditionalQueryParams = (schema: Schema.ContentType) => {\n const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);\n\n return [\n ...(isLocalized ? ['locale'] : []),\n ...(hasDraftAndPublish\n ? [\n 'status',\n 'publicationFilter',\n // Deprecated: replaced by `publicationFilter`; kept for OpenAPI/clients still using the boolean.\n 'hasPublishedVersion',\n ]\n : []),\n ] as QueryParam[];\n};\n"],"names":["createRoutes","strapi","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","schema","uid","info","validator","CoreContentTypeRouteValidator","conditionalQueryParams","getConditionalQueryParams","find","method","path","singularName","handler","request","query","queryParams","response","z","object","data","document","config","update","body","partialBody","delete","pluralName","documents","findOne","params","id","documentID","create","isLocalized","plugin","service","isLocalizedContentType","hasDraftAndPublish","contentTypes"],"mappings":"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"}
|
|
@@ -194,6 +194,8 @@ const getCollectionTypeRoutes = (schema, strapi1)=>{
|
|
|
194
194
|
] : [],
|
|
195
195
|
...hasDraftAndPublish ? [
|
|
196
196
|
'status',
|
|
197
|
+
'publicationFilter',
|
|
198
|
+
// Deprecated: replaced by `publicationFilter`; kept for OpenAPI/clients still using the boolean.
|
|
197
199
|
'hasPublishedVersion'
|
|
198
200
|
] : []
|
|
199
201
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import type { Core, Schema } from '@strapi/types';\n\nimport { contentTypes, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport * as z from 'zod/v4';\nimport type { QueryParam } from './validation/content-type';\n\nimport { CoreContentTypeRouteValidator } from './validation';\n\nexport const createRoutes = ({\n strapi,\n contentType,\n}: {\n strapi: Core.Strapi;\n contentType: Schema.ContentType;\n}) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType, strapi);\n }\n\n return getCollectionTypeRoutes(contentType, strapi);\n};\n\nconst getSingleTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams([\n 'fields',\n 'filters',\n '_q',\n 'pagination',\n 'sort',\n 'populate',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.documents }),\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n request: {\n params: { id: validator.documentID },\n query: validator.queryParams([\n 'fields',\n 'populate',\n 'filters',\n 'sort',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.document }),\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.body },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n },\n response: z.object({ data: validator.document }),\n },\n };\n};\n\n/**\n * Query params that are conditionally part of this route's contract (and OpenAPI spec)\n * based on the content type: e.g. locale only for localized types, status only for draft & publish.\n *\n * This is separate from the runtime allowlist used when api.rest.strictParams is on\n * (ALLOWED_QUERY_PARAM_KEYS + registerQueryParam in @strapi/utils). That allowlist is global\n * (locale and status are always allowed); validate/sanitize then pass them through and the\n * document service or i18n layer ignores them when not applicable.\n *\n * So the two can differ: a non-localized route will not declare \"locale\" here (OpenAPI says\n * no locale param), but the runtime allowlist still allows the key and downstream ignores it.\n * That is intentional: this drives the route contract/docs; the allowlist drives enforcement.\n */\nconst getConditionalQueryParams = (schema: Schema.ContentType) => {\n const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);\n\n return [\n ...(isLocalized ? ['locale'] : []),\n ...(hasDraftAndPublish ? ['status', 'hasPublishedVersion'] : []),\n ] as QueryParam[];\n};\n"],"names":["createRoutes","strapi","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","schema","uid","info","validator","CoreContentTypeRouteValidator","conditionalQueryParams","getConditionalQueryParams","find","method","path","singularName","handler","request","query","queryParams","response","z","object","data","document","config","update","body","partialBody","delete","pluralName","documents","findOne","params","id","documentID","create","isLocalized","plugin","service","isLocalizedContentType","hasDraftAndPublish","contentTypes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import type { Core, Schema } from '@strapi/types';\n\nimport { contentTypes, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport * as z from 'zod/v4';\nimport type { QueryParam } from './validation/content-type';\n\nimport { CoreContentTypeRouteValidator } from './validation';\n\nexport const createRoutes = ({\n strapi,\n contentType,\n}: {\n strapi: Core.Strapi;\n contentType: Schema.ContentType;\n}) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType, strapi);\n }\n\n return getCollectionTypeRoutes(contentType, strapi);\n};\n\nconst getSingleTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams([\n 'fields',\n 'filters',\n '_q',\n 'pagination',\n 'sort',\n 'populate',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.documents }),\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n request: {\n params: { id: validator.documentID },\n query: validator.queryParams([\n 'fields',\n 'populate',\n 'filters',\n 'sort',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.document }),\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.body },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n },\n response: z.object({ data: validator.document }),\n },\n };\n};\n\n/**\n * Query params that are conditionally part of this route's contract (and OpenAPI spec)\n * based on the content type: e.g. locale only for localized types, status only for draft & publish.\n *\n * This is separate from the runtime allowlist used when api.rest.strictParams is on\n * (ALLOWED_QUERY_PARAM_KEYS + registerQueryParam in @strapi/utils). That allowlist is global\n * (locale and status are always allowed); validate/sanitize then pass them through and the\n * document service or i18n layer ignores them when not applicable.\n *\n * So the two can differ: a non-localized route will not declare \"locale\" here (OpenAPI says\n * no locale param), but the runtime allowlist still allows the key and downstream ignores it.\n * That is intentional: this drives the route contract/docs; the allowlist drives enforcement.\n */\nconst getConditionalQueryParams = (schema: Schema.ContentType) => {\n const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);\n\n return [\n ...(isLocalized ? ['locale'] : []),\n ...(hasDraftAndPublish\n ? [\n 'status',\n 'publicationFilter',\n // Deprecated: replaced by `publicationFilter`; kept for OpenAPI/clients still using the boolean.\n 'hasPublishedVersion',\n ]\n : []),\n ] as QueryParam[];\n};\n"],"names":["createRoutes","strapi","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","schema","uid","info","validator","CoreContentTypeRouteValidator","conditionalQueryParams","getConditionalQueryParams","find","method","path","singularName","handler","request","query","queryParams","response","z","object","data","document","config","update","body","partialBody","delete","pluralName","documents","findOne","params","id","documentID","create","isLocalized","plugin","service","isLocalizedContentType","hasDraftAndPublish","contentTypes"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { UID } from '@strapi/types';
|
|
2
2
|
import * as z from 'zod/v4';
|
|
3
3
|
import { AbstractCoreRouteValidator } from './common';
|
|
4
|
-
|
|
4
|
+
/** REST query param names. `hasPublishedVersion` is deprecated in favor of `publicationFilter`. */
|
|
5
|
+
export type QueryParam = 'fields' | 'populate' | 'sort' | 'status' | 'publicationFilter' | 'hasPublishedVersion' | 'locale' | 'pagination' | 'filters' | '_q';
|
|
5
6
|
/**
|
|
6
7
|
* A validator for core content-type routes.
|
|
7
8
|
*
|
|
@@ -103,6 +104,17 @@ export declare class CoreContentTypeRouteValidator extends AbstractCoreRouteVali
|
|
|
103
104
|
draft: "draft";
|
|
104
105
|
published: "published";
|
|
105
106
|
}>;
|
|
107
|
+
get publicationFilter(): z.ZodEnum<{
|
|
108
|
+
"never-published": "never-published";
|
|
109
|
+
"has-published-version": "has-published-version";
|
|
110
|
+
modified: "modified";
|
|
111
|
+
unmodified: "unmodified";
|
|
112
|
+
"never-published-document": "never-published-document";
|
|
113
|
+
"has-published-version-document": "has-published-version-document";
|
|
114
|
+
"published-without-draft": "published-without-draft";
|
|
115
|
+
"published-with-draft": "published-with-draft";
|
|
116
|
+
}>;
|
|
117
|
+
/** @deprecated Use `publicationFilter` instead (`never-published`, `has-published-version`, …). */
|
|
106
118
|
get hasPublishedVersion(): z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
|
|
107
119
|
true: "true";
|
|
108
120
|
false: "false";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-type.d.ts","sourceRoot":"","sources":["../../../../src/core-api/routes/validation/content-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,GAAG,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,UAAU,GACV,MAAM,GACN,QAAQ,GACR,qBAAqB,GACrB,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,IAAI,CAAC;AAET;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,6BAA8B,SAAQ,0BAA0B,CAAC,GAAG,CAAC,WAAW,CAAC;IAC5F;;;;;;;;;;OAUG;IACH,IAAI,UAAU,cAEb;IAED;;;;;;;;;;;;OAYG;IACH,IAAI,QAAQ;;;sBAgBX;IAED;;;;;;;;;;OAUG;IACH,IAAI,SAAS;;;uBAEZ;IAED;;OAEG;IACH,SAAS,KAAK,sBAAsB;;SAMnC;IAED;;OAEG;IACH,SAAS,KAAK,wBAAwB;;;;UAiBrC;IAED;;OAEG;IACH,SAAS,KAAK,oBAAoB;;;;;;;;oFAYjC;IAED;;OAEG;IACH,SAAS,KAAK,kBAAkB;;kBAE/B;IAED,IAAI,MAAM,gBAET;IAED,IAAI,MAAM;;;OAIT;IAED,IAAI,mBAAmB;;;SAMtB;IAED,IAAI,IAAI,mCAYP;IAED,IAAI,KAAK,gBAER;IAED,IAAI,IAAI;;sBAEP;IAED,IAAI,WAAW;;sBAEd;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"content-type.d.ts","sourceRoot":"","sources":["../../../../src/core-api/routes/validation/content-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,GAAG,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAEtD,mGAAmG;AACnG,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,UAAU,GACV,MAAM,GACN,QAAQ,GACR,mBAAmB,GACnB,qBAAqB,GACrB,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,IAAI,CAAC;AAET;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,6BAA8B,SAAQ,0BAA0B,CAAC,GAAG,CAAC,WAAW,CAAC;IAC5F;;;;;;;;;;OAUG;IACH,IAAI,UAAU,cAEb;IAED;;;;;;;;;;;;OAYG;IACH,IAAI,QAAQ;;;sBAgBX;IAED;;;;;;;;;;OAUG;IACH,IAAI,SAAS;;;uBAEZ;IAED;;OAEG;IACH,SAAS,KAAK,sBAAsB;;SAMnC;IAED;;OAEG;IACH,SAAS,KAAK,wBAAwB;;;;UAiBrC;IAED;;OAEG;IACH,SAAS,KAAK,oBAAoB;;;;;;;;oFAYjC;IAED;;OAEG;IACH,SAAS,KAAK,kBAAkB;;kBAE/B;IAED,IAAI,MAAM,gBAET;IAED,IAAI,MAAM;;;OAIT;IAED,IAAI,iBAAiB;;;;;;;;;OAepB;IAED,mGAAmG;IACnG,IAAI,mBAAmB;;;SAMtB;IAED,IAAI,IAAI,mCAYP;IAED,IAAI,KAAK,gBAER;IAED,IAAI,IAAI;;sBAEP;IAED,IAAI,WAAW;;sBAEd;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;CAmBzE"}
|
|
@@ -146,14 +146,26 @@ var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
|
|
|
146
146
|
'published'
|
|
147
147
|
]).describe('Fetch documents based on their status. Default to "published" if not specified.');
|
|
148
148
|
}
|
|
149
|
-
get
|
|
149
|
+
get publicationFilter() {
|
|
150
|
+
return z__namespace.enum([
|
|
151
|
+
'never-published',
|
|
152
|
+
'has-published-version',
|
|
153
|
+
'modified',
|
|
154
|
+
'unmodified',
|
|
155
|
+
'never-published-document',
|
|
156
|
+
'has-published-version-document',
|
|
157
|
+
'published-without-draft',
|
|
158
|
+
'published-with-draft'
|
|
159
|
+
]).describe('Derived publication cohort: pair-scoped (per documentId+locale), document-scoped variants (-document), or published-slice diagnostics (published-without-draft / published-with-draft)');
|
|
160
|
+
}
|
|
161
|
+
/** @deprecated Use `publicationFilter` instead (`never-published`, `has-published-version`, …). */ get hasPublishedVersion() {
|
|
150
162
|
return z__namespace.union([
|
|
151
163
|
z__namespace.boolean(),
|
|
152
164
|
z__namespace.enum([
|
|
153
165
|
'true',
|
|
154
166
|
'false'
|
|
155
167
|
])
|
|
156
|
-
]).describe('Filter documents by whether they have a published version. Use with status=draft to find documents that have never been published');
|
|
168
|
+
]).describe('[Deprecated: prefer publicationFilter] Filter documents by whether they have a published version. Use with status=draft to find documents that have never been published');
|
|
157
169
|
}
|
|
158
170
|
get data() {
|
|
159
171
|
const isWritableAttribute = ([attributeName])=>{
|
|
@@ -200,6 +212,7 @@ var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
|
|
|
200
212
|
locale: ()=>this.locale.optional(),
|
|
201
213
|
pagination: ()=>this.pagination.optional(),
|
|
202
214
|
status: ()=>this.status.optional(),
|
|
215
|
+
publicationFilter: ()=>this.publicationFilter.optional(),
|
|
203
216
|
hasPublishedVersion: ()=>this.hasPublishedVersion.optional(),
|
|
204
217
|
_q: ()=>this.query.optional()
|
|
205
218
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-type.js","sources":["../../../../src/core-api/routes/validation/content-type.ts"],"sourcesContent":["import type { Schema, UID } from '@strapi/types';\n\nimport { contentTypes } from '@strapi/utils';\nimport * as z from 'zod/v4';\n\n// eslint-disable-next-line import/no-cycle\nimport { createAttributesInputSchema, createAttributesSchema } from './mappers';\nimport { AbstractCoreRouteValidator } from './common';\n\nexport type QueryParam =\n | 'fields'\n | 'populate'\n | 'sort'\n | 'status'\n | 'hasPublishedVersion'\n | 'locale'\n | 'pagination'\n | 'filters'\n | '_q';\n\n/**\n * A validator for core content-type routes.\n *\n * Provides validation schemas and utilities for handling content-type-specific route validation.\n * Extends the base AbstractRouteValidator with schema-aware validation for Strapi content types.\n *\n * @example\n * ```ts\n * const strapi = // ... strapi instance\n * const uid = 'api::article.article'\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n *\n * // Get validation schema for document\n * const documentSchema = validator.document;\n *\n * // Validate query parameters with schema awareness\n * const querySchema = validator.queryParams(['fields', 'populate', 'sort']);\n * ```\n */\nexport class CoreContentTypeRouteValidator extends AbstractCoreRouteValidator<UID.ContentType> {\n /**\n * Generates a validation schema for document IDs\n *\n * @returns A schema that validates UUIDs\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const idSchema = validator.documentID;\n * ```\n */\n get documentID() {\n return z.uuid().describe('The document ID, represented by a UUID');\n }\n\n /**\n * Generates a comprehensive validation schema for a single document.\n *\n * Combines scalar fields and populatable fields into a single schema.\n *\n * @returns A schema for validating complete documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docSchema = validator.document;\n * ```\n */\n get document() {\n const entries = Object.entries({ ...this._scalarFields, ...this._populatableFields });\n\n const sanitizedAttributes = entries\n // Remove passwords from the attribute list\n .filter(([, attribute]) => !['password'].includes(attribute.type));\n\n // Merge all attributes into a single schema\n const attributesSchema = createAttributesSchema(this._strapi, sanitizedAttributes);\n\n return z\n .object({\n documentId: this.documentID,\n id: z.union([z.string(), z.number()]),\n })\n .extend(attributesSchema.shape);\n }\n\n /**\n * Generates a validation schema for an array of documents\n *\n * @returns A schema for validating arrays of documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docsSchema = validator.documents;\n * ```\n */\n get documents() {\n return z.array(this.document);\n }\n\n /**\n * Schema-aware fields validation that restricts to actual model fields\n */\n protected get schemaAwareQueryFields() {\n return this.scalarFieldsArray\n .readonly()\n .describe(\n `The fields to return, this doesn't include populatable fields like relations, components, files, or dynamic zones`\n );\n }\n\n /**\n * Schema-aware populate validation that restricts to actual populatable fields\n */\n protected get schemaAwareQueryPopulate() {\n const wildcardPopulate = z\n .literal('*')\n .readonly()\n .describe(\n 'Populate all the first level relations, components, files, and dynamic zones for the entry'\n );\n\n const singleFieldPopulate = this.populatableFieldsEnum\n .readonly()\n .describe('Populate a single relation, component, file, or dynamic zone');\n\n const multiPopulate = this.populatableFieldsArray.describe(\n 'Populate a selection of multiple relations, components, files, or dynamic zones'\n );\n\n return z.union([wildcardPopulate, singleFieldPopulate, multiPopulate]);\n }\n\n /**\n * Schema-aware sort validation that restricts to actual model fields\n */\n protected get schemaAwareQuerySort() {\n const orderDirection = z.enum(['asc', 'desc']);\n\n // TODO: Handle nested sorts but very low priority, very little usage\n return z\n .union([\n this.scalarFieldsEnum, // 'name' | 'title'\n this.scalarFieldsArray, // ['name', 'title']\n this.fieldRecord(orderDirection), // { name: 'desc' } | { title: 'asc' }\n z.array(this.fieldRecord(orderDirection)), // [{ name: 'desc'}, { title: 'asc' }]\n ])\n .describe('Sort the result');\n }\n\n /**\n * Schema-aware filters validation that restricts to actual model fields\n */\n protected get schemaAwareFilters() {\n return z.record(this.scalarFieldsEnum, z.any()).describe('Filters to apply to the query');\n }\n\n get locale() {\n return z.string().describe('Select a locale');\n }\n\n get status() {\n return z\n .enum(['draft', 'published'])\n .describe('Fetch documents based on their status. Default to \"published\" if not specified.');\n }\n\n get hasPublishedVersion() {\n return z\n .union([z.boolean(), z.enum(['true', 'false'])])\n .describe(\n 'Filter documents by whether they have a published version. Use with status=draft to find documents that have never been published'\n );\n }\n\n get data() {\n const isWritableAttribute = ([attributeName]: [string, Schema.Attribute.AnyAttribute]) => {\n return contentTypes.isWritableAttribute(this._schema, attributeName);\n };\n\n const entries = Object.entries({ ...this._scalarFields, ...this._populatableFields });\n\n const sanitizedAttributes = entries\n // Remove non-writable attributes\n .filter(isWritableAttribute);\n\n return createAttributesInputSchema(this._strapi, sanitizedAttributes);\n }\n\n get query() {\n return z.string();\n }\n\n get body() {\n return z.object({ data: this.data });\n }\n\n get partialBody() {\n return z.object({ data: this.data.partial() });\n }\n\n /**\n * Creates validation schemas for query parameters\n *\n * @param params - Array of query parameters to validate ('fields', 'populate', 'sort', ...)\n * @returns Object containing validation schemas for requested parameters\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const querySchemas = validator.queryParams(['fields', 'populate']);\n * ```\n */\n queryParams(params: QueryParam[]): Partial<Record<QueryParam, z.Schema>> {\n const map: Record<QueryParam, () => z.Schema> = {\n fields: () => this.schemaAwareQueryFields.optional(),\n populate: () => this.schemaAwareQueryPopulate.optional(),\n sort: () => this.schemaAwareQuerySort.optional(),\n filters: () => this.schemaAwareFilters.optional(),\n locale: () => this.locale.optional(),\n pagination: () => this.pagination.optional(),\n status: () => this.status.optional(),\n hasPublishedVersion: () => this.hasPublishedVersion.optional(),\n _q: () => this.query.optional(),\n } as const;\n\n return params.reduce(\n (acc, param) => ({ ...acc, [param]: map[param]() }),\n {} as Partial<Record<QueryParam, z.Schema>>\n );\n }\n}\n"],"names":["CoreContentTypeRouteValidator","AbstractCoreRouteValidator","documentID","z","uuid","describe","document","entries","Object","_scalarFields","_populatableFields","sanitizedAttributes","filter","attribute","includes","type","attributesSchema","createAttributesSchema","_strapi","object","documentId","id","union","string","number","extend","shape","documents","array","schemaAwareQueryFields","scalarFieldsArray","readonly","schemaAwareQueryPopulate","wildcardPopulate","literal","singleFieldPopulate","populatableFieldsEnum","multiPopulate","populatableFieldsArray","schemaAwareQuerySort","orderDirection","enum","scalarFieldsEnum","fieldRecord","schemaAwareFilters","record","any","locale","status","hasPublishedVersion","boolean","data","isWritableAttribute","attributeName","contentTypes","_schema","createAttributesInputSchema","query","body","partialBody","partial","queryParams","params","map","fields","optional","populate","sort","filters","pagination","_q","reduce","acc","param"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-type.js","sources":["../../../../src/core-api/routes/validation/content-type.ts"],"sourcesContent":["import type { Schema, UID } from '@strapi/types';\n\nimport { contentTypes } from '@strapi/utils';\nimport * as z from 'zod/v4';\n\n// eslint-disable-next-line import/no-cycle\nimport { createAttributesInputSchema, createAttributesSchema } from './mappers';\nimport { AbstractCoreRouteValidator } from './common';\n\n/** REST query param names. `hasPublishedVersion` is deprecated in favor of `publicationFilter`. */\nexport type QueryParam =\n | 'fields'\n | 'populate'\n | 'sort'\n | 'status'\n | 'publicationFilter'\n | 'hasPublishedVersion'\n | 'locale'\n | 'pagination'\n | 'filters'\n | '_q';\n\n/**\n * A validator for core content-type routes.\n *\n * Provides validation schemas and utilities for handling content-type-specific route validation.\n * Extends the base AbstractRouteValidator with schema-aware validation for Strapi content types.\n *\n * @example\n * ```ts\n * const strapi = // ... strapi instance\n * const uid = 'api::article.article'\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n *\n * // Get validation schema for document\n * const documentSchema = validator.document;\n *\n * // Validate query parameters with schema awareness\n * const querySchema = validator.queryParams(['fields', 'populate', 'sort']);\n * ```\n */\nexport class CoreContentTypeRouteValidator extends AbstractCoreRouteValidator<UID.ContentType> {\n /**\n * Generates a validation schema for document IDs\n *\n * @returns A schema that validates UUIDs\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const idSchema = validator.documentID;\n * ```\n */\n get documentID() {\n return z.uuid().describe('The document ID, represented by a UUID');\n }\n\n /**\n * Generates a comprehensive validation schema for a single document.\n *\n * Combines scalar fields and populatable fields into a single schema.\n *\n * @returns A schema for validating complete documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docSchema = validator.document;\n * ```\n */\n get document() {\n const entries = Object.entries({ ...this._scalarFields, ...this._populatableFields });\n\n const sanitizedAttributes = entries\n // Remove passwords from the attribute list\n .filter(([, attribute]) => !['password'].includes(attribute.type));\n\n // Merge all attributes into a single schema\n const attributesSchema = createAttributesSchema(this._strapi, sanitizedAttributes);\n\n return z\n .object({\n documentId: this.documentID,\n id: z.union([z.string(), z.number()]),\n })\n .extend(attributesSchema.shape);\n }\n\n /**\n * Generates a validation schema for an array of documents\n *\n * @returns A schema for validating arrays of documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docsSchema = validator.documents;\n * ```\n */\n get documents() {\n return z.array(this.document);\n }\n\n /**\n * Schema-aware fields validation that restricts to actual model fields\n */\n protected get schemaAwareQueryFields() {\n return this.scalarFieldsArray\n .readonly()\n .describe(\n `The fields to return, this doesn't include populatable fields like relations, components, files, or dynamic zones`\n );\n }\n\n /**\n * Schema-aware populate validation that restricts to actual populatable fields\n */\n protected get schemaAwareQueryPopulate() {\n const wildcardPopulate = z\n .literal('*')\n .readonly()\n .describe(\n 'Populate all the first level relations, components, files, and dynamic zones for the entry'\n );\n\n const singleFieldPopulate = this.populatableFieldsEnum\n .readonly()\n .describe('Populate a single relation, component, file, or dynamic zone');\n\n const multiPopulate = this.populatableFieldsArray.describe(\n 'Populate a selection of multiple relations, components, files, or dynamic zones'\n );\n\n return z.union([wildcardPopulate, singleFieldPopulate, multiPopulate]);\n }\n\n /**\n * Schema-aware sort validation that restricts to actual model fields\n */\n protected get schemaAwareQuerySort() {\n const orderDirection = z.enum(['asc', 'desc']);\n\n // TODO: Handle nested sorts but very low priority, very little usage\n return z\n .union([\n this.scalarFieldsEnum, // 'name' | 'title'\n this.scalarFieldsArray, // ['name', 'title']\n this.fieldRecord(orderDirection), // { name: 'desc' } | { title: 'asc' }\n z.array(this.fieldRecord(orderDirection)), // [{ name: 'desc'}, { title: 'asc' }]\n ])\n .describe('Sort the result');\n }\n\n /**\n * Schema-aware filters validation that restricts to actual model fields\n */\n protected get schemaAwareFilters() {\n return z.record(this.scalarFieldsEnum, z.any()).describe('Filters to apply to the query');\n }\n\n get locale() {\n return z.string().describe('Select a locale');\n }\n\n get status() {\n return z\n .enum(['draft', 'published'])\n .describe('Fetch documents based on their status. Default to \"published\" if not specified.');\n }\n\n get publicationFilter() {\n return z\n .enum([\n 'never-published',\n 'has-published-version',\n 'modified',\n 'unmodified',\n 'never-published-document',\n 'has-published-version-document',\n 'published-without-draft',\n 'published-with-draft',\n ])\n .describe(\n 'Derived publication cohort: pair-scoped (per documentId+locale), document-scoped variants (-document), or published-slice diagnostics (published-without-draft / published-with-draft)'\n );\n }\n\n /** @deprecated Use `publicationFilter` instead (`never-published`, `has-published-version`, …). */\n get hasPublishedVersion() {\n return z\n .union([z.boolean(), z.enum(['true', 'false'])])\n .describe(\n '[Deprecated: prefer publicationFilter] Filter documents by whether they have a published version. Use with status=draft to find documents that have never been published'\n );\n }\n\n get data() {\n const isWritableAttribute = ([attributeName]: [string, Schema.Attribute.AnyAttribute]) => {\n return contentTypes.isWritableAttribute(this._schema, attributeName);\n };\n\n const entries = Object.entries({ ...this._scalarFields, ...this._populatableFields });\n\n const sanitizedAttributes = entries\n // Remove non-writable attributes\n .filter(isWritableAttribute);\n\n return createAttributesInputSchema(this._strapi, sanitizedAttributes);\n }\n\n get query() {\n return z.string();\n }\n\n get body() {\n return z.object({ data: this.data });\n }\n\n get partialBody() {\n return z.object({ data: this.data.partial() });\n }\n\n /**\n * Creates validation schemas for query parameters\n *\n * @param params - Array of query parameters to validate ('fields', 'populate', 'sort', ...)\n * @returns Object containing validation schemas for requested parameters\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const querySchemas = validator.queryParams(['fields', 'populate']);\n * ```\n */\n queryParams(params: QueryParam[]): Partial<Record<QueryParam, z.Schema>> {\n const map: Record<QueryParam, () => z.Schema> = {\n fields: () => this.schemaAwareQueryFields.optional(),\n populate: () => this.schemaAwareQueryPopulate.optional(),\n sort: () => this.schemaAwareQuerySort.optional(),\n filters: () => this.schemaAwareFilters.optional(),\n locale: () => this.locale.optional(),\n pagination: () => this.pagination.optional(),\n status: () => this.status.optional(),\n publicationFilter: () => this.publicationFilter.optional(),\n hasPublishedVersion: () => this.hasPublishedVersion.optional(),\n _q: () => this.query.optional(),\n } as const;\n\n return params.reduce(\n (acc, param) => ({ ...acc, [param]: map[param]() }),\n {} as Partial<Record<QueryParam, z.Schema>>\n );\n }\n}\n"],"names":["CoreContentTypeRouteValidator","AbstractCoreRouteValidator","documentID","z","uuid","describe","document","entries","Object","_scalarFields","_populatableFields","sanitizedAttributes","filter","attribute","includes","type","attributesSchema","createAttributesSchema","_strapi","object","documentId","id","union","string","number","extend","shape","documents","array","schemaAwareQueryFields","scalarFieldsArray","readonly","schemaAwareQueryPopulate","wildcardPopulate","literal","singleFieldPopulate","populatableFieldsEnum","multiPopulate","populatableFieldsArray","schemaAwareQuerySort","orderDirection","enum","scalarFieldsEnum","fieldRecord","schemaAwareFilters","record","any","locale","status","publicationFilter","hasPublishedVersion","boolean","data","isWritableAttribute","attributeName","contentTypes","_schema","createAttributesInputSchema","query","body","partialBody","partial","queryParams","params","map","fields","optional","populate","sort","filters","pagination","_q","reduce","acc","param"],"mappings":"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"}
|
|
@@ -125,14 +125,26 @@ import { AbstractCoreRouteValidator } from './common.mjs';
|
|
|
125
125
|
'published'
|
|
126
126
|
]).describe('Fetch documents based on their status. Default to "published" if not specified.');
|
|
127
127
|
}
|
|
128
|
-
get
|
|
128
|
+
get publicationFilter() {
|
|
129
|
+
return z.enum([
|
|
130
|
+
'never-published',
|
|
131
|
+
'has-published-version',
|
|
132
|
+
'modified',
|
|
133
|
+
'unmodified',
|
|
134
|
+
'never-published-document',
|
|
135
|
+
'has-published-version-document',
|
|
136
|
+
'published-without-draft',
|
|
137
|
+
'published-with-draft'
|
|
138
|
+
]).describe('Derived publication cohort: pair-scoped (per documentId+locale), document-scoped variants (-document), or published-slice diagnostics (published-without-draft / published-with-draft)');
|
|
139
|
+
}
|
|
140
|
+
/** @deprecated Use `publicationFilter` instead (`never-published`, `has-published-version`, …). */ get hasPublishedVersion() {
|
|
129
141
|
return z.union([
|
|
130
142
|
z.boolean(),
|
|
131
143
|
z.enum([
|
|
132
144
|
'true',
|
|
133
145
|
'false'
|
|
134
146
|
])
|
|
135
|
-
]).describe('Filter documents by whether they have a published version. Use with status=draft to find documents that have never been published');
|
|
147
|
+
]).describe('[Deprecated: prefer publicationFilter] Filter documents by whether they have a published version. Use with status=draft to find documents that have never been published');
|
|
136
148
|
}
|
|
137
149
|
get data() {
|
|
138
150
|
const isWritableAttribute = ([attributeName])=>{
|
|
@@ -179,6 +191,7 @@ import { AbstractCoreRouteValidator } from './common.mjs';
|
|
|
179
191
|
locale: ()=>this.locale.optional(),
|
|
180
192
|
pagination: ()=>this.pagination.optional(),
|
|
181
193
|
status: ()=>this.status.optional(),
|
|
194
|
+
publicationFilter: ()=>this.publicationFilter.optional(),
|
|
182
195
|
hasPublishedVersion: ()=>this.hasPublishedVersion.optional(),
|
|
183
196
|
_q: ()=>this.query.optional()
|
|
184
197
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-type.mjs","sources":["../../../../src/core-api/routes/validation/content-type.ts"],"sourcesContent":["import type { Schema, UID } from '@strapi/types';\n\nimport { contentTypes } from '@strapi/utils';\nimport * as z from 'zod/v4';\n\n// eslint-disable-next-line import/no-cycle\nimport { createAttributesInputSchema, createAttributesSchema } from './mappers';\nimport { AbstractCoreRouteValidator } from './common';\n\nexport type QueryParam =\n | 'fields'\n | 'populate'\n | 'sort'\n | 'status'\n | 'hasPublishedVersion'\n | 'locale'\n | 'pagination'\n | 'filters'\n | '_q';\n\n/**\n * A validator for core content-type routes.\n *\n * Provides validation schemas and utilities for handling content-type-specific route validation.\n * Extends the base AbstractRouteValidator with schema-aware validation for Strapi content types.\n *\n * @example\n * ```ts\n * const strapi = // ... strapi instance\n * const uid = 'api::article.article'\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n *\n * // Get validation schema for document\n * const documentSchema = validator.document;\n *\n * // Validate query parameters with schema awareness\n * const querySchema = validator.queryParams(['fields', 'populate', 'sort']);\n * ```\n */\nexport class CoreContentTypeRouteValidator extends AbstractCoreRouteValidator<UID.ContentType> {\n /**\n * Generates a validation schema for document IDs\n *\n * @returns A schema that validates UUIDs\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const idSchema = validator.documentID;\n * ```\n */\n get documentID() {\n return z.uuid().describe('The document ID, represented by a UUID');\n }\n\n /**\n * Generates a comprehensive validation schema for a single document.\n *\n * Combines scalar fields and populatable fields into a single schema.\n *\n * @returns A schema for validating complete documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docSchema = validator.document;\n * ```\n */\n get document() {\n const entries = Object.entries({ ...this._scalarFields, ...this._populatableFields });\n\n const sanitizedAttributes = entries\n // Remove passwords from the attribute list\n .filter(([, attribute]) => !['password'].includes(attribute.type));\n\n // Merge all attributes into a single schema\n const attributesSchema = createAttributesSchema(this._strapi, sanitizedAttributes);\n\n return z\n .object({\n documentId: this.documentID,\n id: z.union([z.string(), z.number()]),\n })\n .extend(attributesSchema.shape);\n }\n\n /**\n * Generates a validation schema for an array of documents\n *\n * @returns A schema for validating arrays of documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docsSchema = validator.documents;\n * ```\n */\n get documents() {\n return z.array(this.document);\n }\n\n /**\n * Schema-aware fields validation that restricts to actual model fields\n */\n protected get schemaAwareQueryFields() {\n return this.scalarFieldsArray\n .readonly()\n .describe(\n `The fields to return, this doesn't include populatable fields like relations, components, files, or dynamic zones`\n );\n }\n\n /**\n * Schema-aware populate validation that restricts to actual populatable fields\n */\n protected get schemaAwareQueryPopulate() {\n const wildcardPopulate = z\n .literal('*')\n .readonly()\n .describe(\n 'Populate all the first level relations, components, files, and dynamic zones for the entry'\n );\n\n const singleFieldPopulate = this.populatableFieldsEnum\n .readonly()\n .describe('Populate a single relation, component, file, or dynamic zone');\n\n const multiPopulate = this.populatableFieldsArray.describe(\n 'Populate a selection of multiple relations, components, files, or dynamic zones'\n );\n\n return z.union([wildcardPopulate, singleFieldPopulate, multiPopulate]);\n }\n\n /**\n * Schema-aware sort validation that restricts to actual model fields\n */\n protected get schemaAwareQuerySort() {\n const orderDirection = z.enum(['asc', 'desc']);\n\n // TODO: Handle nested sorts but very low priority, very little usage\n return z\n .union([\n this.scalarFieldsEnum, // 'name' | 'title'\n this.scalarFieldsArray, // ['name', 'title']\n this.fieldRecord(orderDirection), // { name: 'desc' } | { title: 'asc' }\n z.array(this.fieldRecord(orderDirection)), // [{ name: 'desc'}, { title: 'asc' }]\n ])\n .describe('Sort the result');\n }\n\n /**\n * Schema-aware filters validation that restricts to actual model fields\n */\n protected get schemaAwareFilters() {\n return z.record(this.scalarFieldsEnum, z.any()).describe('Filters to apply to the query');\n }\n\n get locale() {\n return z.string().describe('Select a locale');\n }\n\n get status() {\n return z\n .enum(['draft', 'published'])\n .describe('Fetch documents based on their status. Default to \"published\" if not specified.');\n }\n\n get hasPublishedVersion() {\n return z\n .union([z.boolean(), z.enum(['true', 'false'])])\n .describe(\n 'Filter documents by whether they have a published version. Use with status=draft to find documents that have never been published'\n );\n }\n\n get data() {\n const isWritableAttribute = ([attributeName]: [string, Schema.Attribute.AnyAttribute]) => {\n return contentTypes.isWritableAttribute(this._schema, attributeName);\n };\n\n const entries = Object.entries({ ...this._scalarFields, ...this._populatableFields });\n\n const sanitizedAttributes = entries\n // Remove non-writable attributes\n .filter(isWritableAttribute);\n\n return createAttributesInputSchema(this._strapi, sanitizedAttributes);\n }\n\n get query() {\n return z.string();\n }\n\n get body() {\n return z.object({ data: this.data });\n }\n\n get partialBody() {\n return z.object({ data: this.data.partial() });\n }\n\n /**\n * Creates validation schemas for query parameters\n *\n * @param params - Array of query parameters to validate ('fields', 'populate', 'sort', ...)\n * @returns Object containing validation schemas for requested parameters\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const querySchemas = validator.queryParams(['fields', 'populate']);\n * ```\n */\n queryParams(params: QueryParam[]): Partial<Record<QueryParam, z.Schema>> {\n const map: Record<QueryParam, () => z.Schema> = {\n fields: () => this.schemaAwareQueryFields.optional(),\n populate: () => this.schemaAwareQueryPopulate.optional(),\n sort: () => this.schemaAwareQuerySort.optional(),\n filters: () => this.schemaAwareFilters.optional(),\n locale: () => this.locale.optional(),\n pagination: () => this.pagination.optional(),\n status: () => this.status.optional(),\n hasPublishedVersion: () => this.hasPublishedVersion.optional(),\n _q: () => this.query.optional(),\n } as const;\n\n return params.reduce(\n (acc, param) => ({ ...acc, [param]: map[param]() }),\n {} as Partial<Record<QueryParam, z.Schema>>\n );\n }\n}\n"],"names":["CoreContentTypeRouteValidator","AbstractCoreRouteValidator","documentID","z","uuid","describe","document","entries","Object","_scalarFields","_populatableFields","sanitizedAttributes","filter","attribute","includes","type","attributesSchema","createAttributesSchema","_strapi","object","documentId","id","union","string","number","extend","shape","documents","array","schemaAwareQueryFields","scalarFieldsArray","readonly","schemaAwareQueryPopulate","wildcardPopulate","literal","singleFieldPopulate","populatableFieldsEnum","multiPopulate","populatableFieldsArray","schemaAwareQuerySort","orderDirection","enum","scalarFieldsEnum","fieldRecord","schemaAwareFilters","record","any","locale","status","hasPublishedVersion","boolean","data","isWritableAttribute","attributeName","contentTypes","_schema","createAttributesInputSchema","query","body","partialBody","partial","queryParams","params","map","fields","optional","populate","sort","filters","pagination","_q","reduce","acc","param"],"mappings":";;;;;AAoBA;;;;;;;;;;;;;;;;;;IAmBO,MAAMA,6BAAAA,SAAsCC,0BAAAA,CAAAA;AACjD;;;;;;;;;;AAUC,MACD,IAAIC,UAAAA,GAAa;AACf,QAAA,OAAOC,CAAAA,CAAEC,IAAI,EAAA,CAAGC,QAAQ,CAAC,wCAAA,CAAA;AAC3B,IAAA;AAEA;;;;;;;;;;;;AAYC,MACD,IAAIC,QAAAA,GAAW;QACb,MAAMC,OAAAA,GAAUC,MAAAA,CAAOD,OAAO,CAAC;YAAE,GAAG,IAAI,CAACE,aAAa;YAAE,GAAG,IAAI,CAACC;AAAmB,SAAA,CAAA;QAEnF,MAAMC,mBAAAA,GAAsBJ,OAC1B;AACCK,SAAAA,MAAM,CAAC,CAAC,GAAGC,SAAAA,CAAU,GAAK,CAAC;AAAC,gBAAA;aAAW,CAACC,QAAQ,CAACD,SAAAA,CAAUE,IAAI,CAAA,CAAA;;AAGlE,QAAA,MAAMC,gBAAAA,GAAmBC,sBAAAA,CAAuB,IAAI,CAACC,OAAO,EAAEP,mBAAAA,CAAAA;QAE9D,OAAOR,CAAAA,CACJgB,MAAM,CAAC;YACNC,UAAAA,EAAY,IAAI,CAAClB,UAAU;YAC3BmB,EAAAA,EAAIlB,CAAAA,CAAEmB,KAAK,CAAC;AAACnB,gBAAAA,CAAAA,CAAEoB,MAAM,EAAA;AAAIpB,gBAAAA,CAAAA,CAAEqB,MAAM;AAAG,aAAA;SACtC,CAAA,CACCC,MAAM,CAACT,gBAAAA,CAAiBU,KAAK,CAAA;AAClC,IAAA;AAEA;;;;;;;;;;AAUC,MACD,IAAIC,SAAAA,GAAY;AACd,QAAA,OAAOxB,CAAAA,CAAEyB,KAAK,CAAC,IAAI,CAACtB,QAAQ,CAAA;AAC9B,IAAA;AAEA;;AAEC,MACD,IAAcuB,sBAAAA,GAAyB;QACrC,OAAO,IAAI,CAACC,iBAAiB,CAC1BC,QAAQ,GACR1B,QAAQ,CACP,CAAC,iHAAiH,CAAC,CAAA;AAEzH,IAAA;AAEA;;AAEC,MACD,IAAc2B,wBAAAA,GAA2B;QACvC,MAAMC,gBAAAA,GAAmB9B,EACtB+B,OAAO,CAAC,KACRH,QAAQ,EAAA,CACR1B,QAAQ,CACP,4FAAA,CAAA;QAGJ,MAAM8B,mBAAAA,GAAsB,IAAI,CAACC,qBAAqB,CACnDL,QAAQ,EAAA,CACR1B,QAAQ,CAAC,8DAAA,CAAA;AAEZ,QAAA,MAAMgC,gBAAgB,IAAI,CAACC,sBAAsB,CAACjC,QAAQ,CACxD,iFAAA,CAAA;QAGF,OAAOF,CAAAA,CAAEmB,KAAK,CAAC;AAACW,YAAAA,gBAAAA;AAAkBE,YAAAA,mBAAAA;AAAqBE,YAAAA;AAAc,SAAA,CAAA;AACvE,IAAA;AAEA;;AAEC,MACD,IAAcE,oBAAAA,GAAuB;QACnC,MAAMC,cAAAA,GAAiBrC,CAAAA,CAAEsC,IAAI,CAAC;AAAC,YAAA,KAAA;AAAO,YAAA;AAAO,SAAA,CAAA;;QAG7C,OAAOtC,CAAAA,CACJmB,KAAK,CAAC;AACL,YAAA,IAAI,CAACoB,gBAAgB;AACrB,YAAA,IAAI,CAACZ,iBAAiB;YACtB,IAAI,CAACa,WAAW,CAACH,cAAAA,CAAAA;AACjBrC,YAAAA,CAAAA,CAAEyB,KAAK,CAAC,IAAI,CAACe,WAAW,CAACH,cAAAA,CAAAA;AAC1B,SAAA,CAAA,CACAnC,QAAQ,CAAC,iBAAA,CAAA;AACd,IAAA;AAEA;;AAEC,MACD,IAAcuC,kBAAAA,GAAqB;QACjC,OAAOzC,CAAAA,CAAE0C,MAAM,CAAC,IAAI,CAACH,gBAAgB,EAAEvC,CAAAA,CAAE2C,GAAG,EAAA,CAAA,CAAIzC,QAAQ,CAAC,+BAAA,CAAA;AAC3D,IAAA;AAEA,IAAA,IAAI0C,MAAAA,GAAS;AACX,QAAA,OAAO5C,CAAAA,CAAEoB,MAAM,EAAA,CAAGlB,QAAQ,CAAC,iBAAA,CAAA;AAC7B,IAAA;AAEA,IAAA,IAAI2C,MAAAA,GAAS;QACX,OAAO7C,CAAAA,CACJsC,IAAI,CAAC;AAAC,YAAA,OAAA;AAAS,YAAA;AAAY,SAAA,CAAA,CAC3BpC,QAAQ,CAAC,iFAAA,CAAA;AACd,IAAA;AAEA,IAAA,IAAI4C,mBAAAA,GAAsB;QACxB,OAAO9C,CAAAA,CACJmB,KAAK,CAAC;AAACnB,YAAAA,CAAAA,CAAE+C,OAAO,EAAA;AAAI/C,YAAAA,CAAAA,CAAEsC,IAAI,CAAC;AAAC,gBAAA,MAAA;AAAQ,gBAAA;AAAQ,aAAA;AAAE,SAAA,CAAA,CAC9CpC,QAAQ,CACP,mIAAA,CAAA;AAEN,IAAA;AAEA,IAAA,IAAI8C,IAAAA,GAAO;QACT,MAAMC,mBAAAA,GAAsB,CAAC,CAACC,aAAAA,CAAuD,GAAA;AACnF,YAAA,OAAOC,aAAaF,mBAAmB,CAAC,IAAI,CAACG,OAAO,EAAEF,aAAAA,CAAAA;AACxD,QAAA,CAAA;QAEA,MAAM9C,OAAAA,GAAUC,MAAAA,CAAOD,OAAO,CAAC;YAAE,GAAG,IAAI,CAACE,aAAa;YAAE,GAAG,IAAI,CAACC;AAAmB,SAAA,CAAA;QAEnF,MAAMC,mBAAAA,GAAsBJ,OAC1B;AACCK,SAAAA,MAAM,CAACwC,mBAAAA,CAAAA;AAEV,QAAA,OAAOI,2BAAAA,CAA4B,IAAI,CAACtC,OAAO,EAAEP,mBAAAA,CAAAA;AACnD,IAAA;AAEA,IAAA,IAAI8C,KAAAA,GAAQ;AACV,QAAA,OAAOtD,EAAEoB,MAAM,EAAA;AACjB,IAAA;AAEA,IAAA,IAAImC,IAAAA,GAAO;QACT,OAAOvD,CAAAA,CAAEgB,MAAM,CAAC;YAAEgC,IAAAA,EAAM,IAAI,CAACA;AAAK,SAAA,CAAA;AACpC,IAAA;AAEA,IAAA,IAAIQ,WAAAA,GAAc;QAChB,OAAOxD,CAAAA,CAAEgB,MAAM,CAAC;AAAEgC,YAAAA,IAAAA,EAAM,IAAI,CAACA,IAAI,CAACS,OAAO;AAAG,SAAA,CAAA;AAC9C,IAAA;AAEA;;;;;;;;;;;MAYAC,WAAAA,CAAYC,MAAoB,EAAyC;AACvE,QAAA,MAAMC,GAAAA,GAA0C;AAC9CC,YAAAA,MAAAA,EAAQ,IAAM,IAAI,CAACnC,sBAAsB,CAACoC,QAAQ,EAAA;AAClDC,YAAAA,QAAAA,EAAU,IAAM,IAAI,CAAClC,wBAAwB,CAACiC,QAAQ,EAAA;AACtDE,YAAAA,IAAAA,EAAM,IAAM,IAAI,CAAC5B,oBAAoB,CAAC0B,QAAQ,EAAA;AAC9CG,YAAAA,OAAAA,EAAS,IAAM,IAAI,CAACxB,kBAAkB,CAACqB,QAAQ,EAAA;AAC/ClB,YAAAA,MAAAA,EAAQ,IAAM,IAAI,CAACA,MAAM,CAACkB,QAAQ,EAAA;AAClCI,YAAAA,UAAAA,EAAY,IAAM,IAAI,CAACA,UAAU,CAACJ,QAAQ,EAAA;AAC1CjB,YAAAA,MAAAA,EAAQ,IAAM,IAAI,CAACA,MAAM,CAACiB,QAAQ,EAAA;AAClChB,YAAAA,mBAAAA,EAAqB,IAAM,IAAI,CAACA,mBAAmB,CAACgB,QAAQ,EAAA;AAC5DK,YAAAA,EAAAA,EAAI,IAAM,IAAI,CAACb,KAAK,CAACQ,QAAQ;AAC/B,SAAA;AAEA,QAAA,OAAOH,OAAOS,MAAM,CAClB,CAACC,GAAAA,EAAKC,SAAW;AAAE,gBAAA,GAAGD,GAAG;AAAE,gBAAA,CAACC,KAAAA,GAAQV,GAAG,CAACU,KAAAA,CAAM;AAAG,aAAA,GACjD,EAAC,CAAA;AAEL,IAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"content-type.mjs","sources":["../../../../src/core-api/routes/validation/content-type.ts"],"sourcesContent":["import type { Schema, UID } from '@strapi/types';\n\nimport { contentTypes } from '@strapi/utils';\nimport * as z from 'zod/v4';\n\n// eslint-disable-next-line import/no-cycle\nimport { createAttributesInputSchema, createAttributesSchema } from './mappers';\nimport { AbstractCoreRouteValidator } from './common';\n\n/** REST query param names. `hasPublishedVersion` is deprecated in favor of `publicationFilter`. */\nexport type QueryParam =\n | 'fields'\n | 'populate'\n | 'sort'\n | 'status'\n | 'publicationFilter'\n | 'hasPublishedVersion'\n | 'locale'\n | 'pagination'\n | 'filters'\n | '_q';\n\n/**\n * A validator for core content-type routes.\n *\n * Provides validation schemas and utilities for handling content-type-specific route validation.\n * Extends the base AbstractRouteValidator with schema-aware validation for Strapi content types.\n *\n * @example\n * ```ts\n * const strapi = // ... strapi instance\n * const uid = 'api::article.article'\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n *\n * // Get validation schema for document\n * const documentSchema = validator.document;\n *\n * // Validate query parameters with schema awareness\n * const querySchema = validator.queryParams(['fields', 'populate', 'sort']);\n * ```\n */\nexport class CoreContentTypeRouteValidator extends AbstractCoreRouteValidator<UID.ContentType> {\n /**\n * Generates a validation schema for document IDs\n *\n * @returns A schema that validates UUIDs\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const idSchema = validator.documentID;\n * ```\n */\n get documentID() {\n return z.uuid().describe('The document ID, represented by a UUID');\n }\n\n /**\n * Generates a comprehensive validation schema for a single document.\n *\n * Combines scalar fields and populatable fields into a single schema.\n *\n * @returns A schema for validating complete documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docSchema = validator.document;\n * ```\n */\n get document() {\n const entries = Object.entries({ ...this._scalarFields, ...this._populatableFields });\n\n const sanitizedAttributes = entries\n // Remove passwords from the attribute list\n .filter(([, attribute]) => !['password'].includes(attribute.type));\n\n // Merge all attributes into a single schema\n const attributesSchema = createAttributesSchema(this._strapi, sanitizedAttributes);\n\n return z\n .object({\n documentId: this.documentID,\n id: z.union([z.string(), z.number()]),\n })\n .extend(attributesSchema.shape);\n }\n\n /**\n * Generates a validation schema for an array of documents\n *\n * @returns A schema for validating arrays of documents\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const docsSchema = validator.documents;\n * ```\n */\n get documents() {\n return z.array(this.document);\n }\n\n /**\n * Schema-aware fields validation that restricts to actual model fields\n */\n protected get schemaAwareQueryFields() {\n return this.scalarFieldsArray\n .readonly()\n .describe(\n `The fields to return, this doesn't include populatable fields like relations, components, files, or dynamic zones`\n );\n }\n\n /**\n * Schema-aware populate validation that restricts to actual populatable fields\n */\n protected get schemaAwareQueryPopulate() {\n const wildcardPopulate = z\n .literal('*')\n .readonly()\n .describe(\n 'Populate all the first level relations, components, files, and dynamic zones for the entry'\n );\n\n const singleFieldPopulate = this.populatableFieldsEnum\n .readonly()\n .describe('Populate a single relation, component, file, or dynamic zone');\n\n const multiPopulate = this.populatableFieldsArray.describe(\n 'Populate a selection of multiple relations, components, files, or dynamic zones'\n );\n\n return z.union([wildcardPopulate, singleFieldPopulate, multiPopulate]);\n }\n\n /**\n * Schema-aware sort validation that restricts to actual model fields\n */\n protected get schemaAwareQuerySort() {\n const orderDirection = z.enum(['asc', 'desc']);\n\n // TODO: Handle nested sorts but very low priority, very little usage\n return z\n .union([\n this.scalarFieldsEnum, // 'name' | 'title'\n this.scalarFieldsArray, // ['name', 'title']\n this.fieldRecord(orderDirection), // { name: 'desc' } | { title: 'asc' }\n z.array(this.fieldRecord(orderDirection)), // [{ name: 'desc'}, { title: 'asc' }]\n ])\n .describe('Sort the result');\n }\n\n /**\n * Schema-aware filters validation that restricts to actual model fields\n */\n protected get schemaAwareFilters() {\n return z.record(this.scalarFieldsEnum, z.any()).describe('Filters to apply to the query');\n }\n\n get locale() {\n return z.string().describe('Select a locale');\n }\n\n get status() {\n return z\n .enum(['draft', 'published'])\n .describe('Fetch documents based on their status. Default to \"published\" if not specified.');\n }\n\n get publicationFilter() {\n return z\n .enum([\n 'never-published',\n 'has-published-version',\n 'modified',\n 'unmodified',\n 'never-published-document',\n 'has-published-version-document',\n 'published-without-draft',\n 'published-with-draft',\n ])\n .describe(\n 'Derived publication cohort: pair-scoped (per documentId+locale), document-scoped variants (-document), or published-slice diagnostics (published-without-draft / published-with-draft)'\n );\n }\n\n /** @deprecated Use `publicationFilter` instead (`never-published`, `has-published-version`, …). */\n get hasPublishedVersion() {\n return z\n .union([z.boolean(), z.enum(['true', 'false'])])\n .describe(\n '[Deprecated: prefer publicationFilter] Filter documents by whether they have a published version. Use with status=draft to find documents that have never been published'\n );\n }\n\n get data() {\n const isWritableAttribute = ([attributeName]: [string, Schema.Attribute.AnyAttribute]) => {\n return contentTypes.isWritableAttribute(this._schema, attributeName);\n };\n\n const entries = Object.entries({ ...this._scalarFields, ...this._populatableFields });\n\n const sanitizedAttributes = entries\n // Remove non-writable attributes\n .filter(isWritableAttribute);\n\n return createAttributesInputSchema(this._strapi, sanitizedAttributes);\n }\n\n get query() {\n return z.string();\n }\n\n get body() {\n return z.object({ data: this.data });\n }\n\n get partialBody() {\n return z.object({ data: this.data.partial() });\n }\n\n /**\n * Creates validation schemas for query parameters\n *\n * @param params - Array of query parameters to validate ('fields', 'populate', 'sort', ...)\n * @returns Object containing validation schemas for requested parameters\n *\n * @example\n * ```ts\n * const validator = new CoreContentTypeRouteValidator(strapi, uid);\n * const querySchemas = validator.queryParams(['fields', 'populate']);\n * ```\n */\n queryParams(params: QueryParam[]): Partial<Record<QueryParam, z.Schema>> {\n const map: Record<QueryParam, () => z.Schema> = {\n fields: () => this.schemaAwareQueryFields.optional(),\n populate: () => this.schemaAwareQueryPopulate.optional(),\n sort: () => this.schemaAwareQuerySort.optional(),\n filters: () => this.schemaAwareFilters.optional(),\n locale: () => this.locale.optional(),\n pagination: () => this.pagination.optional(),\n status: () => this.status.optional(),\n publicationFilter: () => this.publicationFilter.optional(),\n hasPublishedVersion: () => this.hasPublishedVersion.optional(),\n _q: () => this.query.optional(),\n } as const;\n\n return params.reduce(\n (acc, param) => ({ ...acc, [param]: map[param]() }),\n {} as Partial<Record<QueryParam, z.Schema>>\n );\n }\n}\n"],"names":["CoreContentTypeRouteValidator","AbstractCoreRouteValidator","documentID","z","uuid","describe","document","entries","Object","_scalarFields","_populatableFields","sanitizedAttributes","filter","attribute","includes","type","attributesSchema","createAttributesSchema","_strapi","object","documentId","id","union","string","number","extend","shape","documents","array","schemaAwareQueryFields","scalarFieldsArray","readonly","schemaAwareQueryPopulate","wildcardPopulate","literal","singleFieldPopulate","populatableFieldsEnum","multiPopulate","populatableFieldsArray","schemaAwareQuerySort","orderDirection","enum","scalarFieldsEnum","fieldRecord","schemaAwareFilters","record","any","locale","status","publicationFilter","hasPublishedVersion","boolean","data","isWritableAttribute","attributeName","contentTypes","_schema","createAttributesInputSchema","query","body","partialBody","partial","queryParams","params","map","fields","optional","populate","sort","filters","pagination","_q","reduce","acc","param"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type SessionOptions } from 'koa-session';
|
|
2
2
|
import type { Core } from '@strapi/types';
|
|
3
|
-
export declare const session: Core.MiddlewareFactory<Partial<
|
|
3
|
+
export declare const session: Core.MiddlewareFactory<Partial<SessionOptions>>;
|
|
4
4
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/middlewares/session.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/middlewares/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAe1C,eAAO,MAAM,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,CAcnE,CAAC"}
|
|
@@ -24,7 +24,7 @@ const session = (userConfig, { strapi })=>{
|
|
|
24
24
|
...defaultConfig,
|
|
25
25
|
...userConfig
|
|
26
26
|
};
|
|
27
|
-
strapi.server.use(koaSession(config, strapi.server.app));
|
|
27
|
+
strapi.server.use(koaSession.createSession(config, strapi.server.app));
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
exports.session = session;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sources":["../../src/middlewares/session.ts"],"sourcesContent":["import { isEmpty, isArray } from 'lodash/fp';\nimport
|
|
1
|
+
{"version":3,"file":"session.js","sources":["../../src/middlewares/session.ts"],"sourcesContent":["import { isEmpty, isArray } from 'lodash/fp';\nimport { type SessionOptions, createSession } from 'koa-session';\nimport type { Core } from '@strapi/types';\n\nconst defaultConfig = {\n key: 'koa.sess',\n maxAge: 86400000,\n autoCommit: true,\n overwrite: true,\n httpOnly: true,\n signed: true,\n rolling: false,\n renew: false,\n secure: process.env.NODE_ENV === 'production',\n sameSite: undefined,\n};\n\nexport const session: Core.MiddlewareFactory<Partial<SessionOptions>> = (\n userConfig,\n { strapi }\n) => {\n const { keys } = strapi.server.app;\n if (!isArray(keys) || isEmpty(keys) || keys.some(isEmpty)) {\n throw new Error(\n `App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])`\n );\n }\n\n const config: Partial<SessionOptions> = { ...defaultConfig, ...userConfig };\n\n strapi.server.use(createSession(config, strapi.server.app));\n};\n"],"names":["defaultConfig","key","maxAge","autoCommit","overwrite","httpOnly","signed","rolling","renew","secure","process","env","NODE_ENV","sameSite","undefined","session","userConfig","strapi","keys","server","app","isArray","isEmpty","some","Error","config","use","createSession"],"mappings":";;;;;AAIA,MAAMA,aAAAA,GAAgB;IACpBC,GAAAA,EAAK,UAAA;IACLC,MAAAA,EAAQ,QAAA;IACRC,UAAAA,EAAY,IAAA;IACZC,SAAAA,EAAW,IAAA;IACXC,QAAAA,EAAU,IAAA;IACVC,MAAAA,EAAQ,IAAA;IACRC,OAAAA,EAAS,KAAA;IACTC,KAAAA,EAAO,KAAA;AACPC,IAAAA,MAAAA,EAAQC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;IACjCC,QAAAA,EAAUC;AACZ,CAAA;MAEaC,OAAAA,GAA2D,CACtEC,UAAAA,EACA,EAAEC,MAAM,EAAE,GAAA;AAEV,IAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAAA,CAAOE,MAAM,CAACC,GAAG;IAClC,IAAI,CAACC,WAAQH,IAAAA,CAAAA,IAASI,UAAAA,CAAQJ,SAASA,IAAAA,CAAKK,IAAI,CAACD,UAAAA,CAAAA,EAAU;AACzD,QAAA,MAAM,IAAIE,KAAAA,CACR,CAAC,+FAA+F,CAAC,CAAA;AAErG,IAAA;AAEA,IAAA,MAAMC,MAAAA,GAAkC;AAAE,QAAA,GAAGzB,aAAa;AAAE,QAAA,GAAGgB;AAAW,KAAA;IAE1EC,MAAAA,CAAOE,MAAM,CAACO,GAAG,CAACC,yBAAcF,MAAAA,EAAQR,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAA,CAAA;AAC3D;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isArray, isEmpty } from 'lodash/fp';
|
|
2
|
-
import
|
|
2
|
+
import { createSession } from 'koa-session';
|
|
3
3
|
|
|
4
4
|
const defaultConfig = {
|
|
5
5
|
key: 'koa.sess',
|
|
@@ -22,7 +22,7 @@ const session = (userConfig, { strapi })=>{
|
|
|
22
22
|
...defaultConfig,
|
|
23
23
|
...userConfig
|
|
24
24
|
};
|
|
25
|
-
strapi.server.use(
|
|
25
|
+
strapi.server.use(createSession(config, strapi.server.app));
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
export { session };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.mjs","sources":["../../src/middlewares/session.ts"],"sourcesContent":["import { isEmpty, isArray } from 'lodash/fp';\nimport
|
|
1
|
+
{"version":3,"file":"session.mjs","sources":["../../src/middlewares/session.ts"],"sourcesContent":["import { isEmpty, isArray } from 'lodash/fp';\nimport { type SessionOptions, createSession } from 'koa-session';\nimport type { Core } from '@strapi/types';\n\nconst defaultConfig = {\n key: 'koa.sess',\n maxAge: 86400000,\n autoCommit: true,\n overwrite: true,\n httpOnly: true,\n signed: true,\n rolling: false,\n renew: false,\n secure: process.env.NODE_ENV === 'production',\n sameSite: undefined,\n};\n\nexport const session: Core.MiddlewareFactory<Partial<SessionOptions>> = (\n userConfig,\n { strapi }\n) => {\n const { keys } = strapi.server.app;\n if (!isArray(keys) || isEmpty(keys) || keys.some(isEmpty)) {\n throw new Error(\n `App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])`\n );\n }\n\n const config: Partial<SessionOptions> = { ...defaultConfig, ...userConfig };\n\n strapi.server.use(createSession(config, strapi.server.app));\n};\n"],"names":["defaultConfig","key","maxAge","autoCommit","overwrite","httpOnly","signed","rolling","renew","secure","process","env","NODE_ENV","sameSite","undefined","session","userConfig","strapi","keys","server","app","isArray","isEmpty","some","Error","config","use","createSession"],"mappings":";;;AAIA,MAAMA,aAAAA,GAAgB;IACpBC,GAAAA,EAAK,UAAA;IACLC,MAAAA,EAAQ,QAAA;IACRC,UAAAA,EAAY,IAAA;IACZC,SAAAA,EAAW,IAAA;IACXC,QAAAA,EAAU,IAAA;IACVC,MAAAA,EAAQ,IAAA;IACRC,OAAAA,EAAS,KAAA;IACTC,KAAAA,EAAO,KAAA;AACPC,IAAAA,MAAAA,EAAQC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;IACjCC,QAAAA,EAAUC;AACZ,CAAA;MAEaC,OAAAA,GAA2D,CACtEC,UAAAA,EACA,EAAEC,MAAM,EAAE,GAAA;AAEV,IAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAAA,CAAOE,MAAM,CAACC,GAAG;IAClC,IAAI,CAACC,QAAQH,IAAAA,CAAAA,IAASI,OAAAA,CAAQJ,SAASA,IAAAA,CAAKK,IAAI,CAACD,OAAAA,CAAAA,EAAU;AACzD,QAAA,MAAM,IAAIE,KAAAA,CACR,CAAC,+FAA+F,CAAC,CAAA;AAErG,IAAA;AAEA,IAAA,MAAMC,MAAAA,GAAkC;AAAE,QAAA,GAAGzB,aAAa;AAAE,QAAA,GAAGgB;AAAW,KAAA;IAE1EC,MAAAA,CAAOE,MAAM,CAACO,GAAG,CAACC,cAAcF,MAAAA,EAAQR,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAA,CAAA;AAC3D;;;;"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Migration overview
|
|
3
3
|
* ===================
|
|
4
|
-
* 1. Create bare draft rows for every published entry, cloning
|
|
4
|
+
* 1. Create bare draft rows for every published entry, cloning scalar fields and join-column
|
|
5
|
+
* foreign keys (no components, dynamic zones, or join-table relations yet).
|
|
5
6
|
* We do this with a single INSERT … SELECT per content type to avoid touching the document service for every single v4 entry.
|
|
6
7
|
*
|
|
7
8
|
* 2. Rewire all relations so the newly created drafts behave exactly like calling `documentService.discardDraft()`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"5.0.0-discard-drafts.d.ts","sourceRoot":"","sources":["../../../src/migrations/database/5.0.0-discard-drafts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"5.0.0-discard-drafts.d.ts","sourceRoot":"","sources":["../../../src/migrations/database/5.0.0-discard-drafts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAY5D,KAAK,eAAe,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC9D,KAAK,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AA24G3C;;;;;GAKG;AACH,wBAAuB,iBAAiB,CAAC,EACvC,EAAE,EACF,GAAG,EACH,GAAG,EACH,gBAAuB,GACxB,EAAE;IACD,EAAE,EAAE,QAAQ,CAAC;IACb,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,oDAwBA;AAED,eAAO,MAAM,qBAAqB,EAAE,SAQnC,CAAC"}
|