UNPKG

@strapi/utils

Version:

Shared utilities for the Strapi packages

1 lines • 20.6 kB
{"version":3,"file":"publication-filter.mjs","sources":["../src/publication-filter.ts"],"sourcesContent":["import type { Model } from './types';\nimport { ApplicationError, ValidationError } from './errors';\nimport { hasDraftAndPublish } from './content-types';\n\nexport type PublicationFilterMode =\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\nconst ALLOWED: PublicationFilterMode[] = [\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\nexport const parsePublicationFilter = (value: unknown): PublicationFilterMode | undefined => {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n if (typeof value === 'string' && (ALLOWED as string[]).includes(value)) {\n return value as PublicationFilterMode;\n }\n\n throw new ValidationError(\n `Invalid value for 'publicationFilter'. Expected one of: ${ALLOWED.join(', ')}.`\n );\n};\n\ntype QueryParamDetails = { source?: string; param?: string; [key: string]: unknown };\n\n/**\n * Validates a `publicationFilter` query value for Content API `validate.query` / `sanitize.query`.\n * Attaches `details.source` and `details.param` so HTTP layer maps to 400 with correct field context.\n */\nexport const validatePublicationFilterQueryParam = (value: unknown): void => {\n if (value === undefined || value === null) {\n return;\n }\n\n try {\n parsePublicationFilter(value);\n } catch (e) {\n if (e instanceof ValidationError) {\n const prev = e.details as QueryParamDetails | undefined;\n e.details = {\n ...(prev && typeof prev === 'object' ? prev : {}),\n source: 'query',\n param: 'publicationFilter',\n };\n }\n throw e;\n }\n};\n\nconst columnName = (meta: any, attr: string): string => {\n const a = meta?.attributes?.[attr];\n if (!a) {\n throw new ApplicationError(\n `Cannot build publicationFilter SQL: attribute '${attr}' is missing from metadata for table '${meta?.tableName ?? '<unknown>'}'.`\n );\n }\n if (!('columnName' in a) || !a.columnName) {\n throw new ApplicationError(\n `Cannot build publicationFilter SQL: attribute '${attr}' on table '${meta?.tableName ?? '<unknown>'}' has no resolved columnName.`\n );\n }\n return a.columnName as string;\n};\n\nconst emptyIdSelection = (knex: any, table: string, idCol: string) =>\n knex(table).select(`${table}.${idCol}`).whereRaw('0 = 1');\n\n/**\n * Extra `id IN (subquery)` filter for publicationFilter, scoped to (documentId, locale) when i18n is enabled.\n * Document-scoped modes use `documentId` only. Returns null when the model does not use draft & publish.\n */\nexport const buildPublicationFilterWhere = (\n knex: any,\n meta: any,\n model: Model | undefined,\n mode: PublicationFilterMode,\n status: 'draft' | 'published'\n): Record<string, unknown> | null => {\n if (!model || !hasDraftAndPublish(model)) {\n return null;\n }\n\n const table = meta.tableName;\n const idCol = columnName(meta, 'id');\n const docCol = columnName(meta, 'documentId');\n const pubCol = columnName(meta, 'publishedAt');\n const updatedCol = columnName(meta, 'updatedAt');\n const hasLocale = Boolean(meta.attributes.locale);\n const localeCol = hasLocale ? columnName(meta, 'locale') : null;\n\n const pairOn = (aliasA: string, aliasB: string) => {\n const parts = [`${aliasA}.${docCol} = ${aliasB}.${docCol}`];\n if (localeCol) {\n parts.push(\n `(${aliasA}.${localeCol} = ${aliasB}.${localeCol} OR (${aliasA}.${localeCol} IS NULL AND ${aliasB}.${localeCol} IS NULL))`\n );\n }\n return parts.join(' AND ');\n };\n\n const documentOn = (aliasA: string, aliasB: string) =>\n `${aliasA}.${docCol} = ${aliasB}.${docCol}`;\n\n const idIn = (sub: any) => ({ id: { $in: sub } });\n\n switch (mode) {\n case 'never-published': {\n if (status === 'published') {\n return idIn(emptyIdSelection(knex, table, idCol));\n }\n\n const sub = knex(`${table} as d`)\n .select(`d.${idCol}`)\n .whereNull(`d.${pubCol}`)\n .whereNotExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as p`)\n .whereRaw(pairOn('p', 'd'))\n .whereNotNull(`p.${pubCol}`);\n });\n\n return idIn(sub);\n }\n\n case 'has-published-version': {\n if (status === 'draft') {\n const sub = knex(`${table} as d`)\n .select(`d.${idCol}`)\n .whereNull(`d.${pubCol}`)\n .whereExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as p`)\n .whereRaw(pairOn('p', 'd'))\n .whereNotNull(`p.${pubCol}`);\n });\n\n return idIn(sub);\n }\n\n const sub = knex(`${table} as p`)\n .select(`p.${idCol}`)\n .whereNotNull(`p.${pubCol}`)\n .whereExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as d`)\n .whereRaw(pairOn('d', 'p'))\n .whereNull(`d.${pubCol}`);\n });\n\n return idIn(sub);\n }\n\n case 'modified': {\n if (status === 'draft') {\n const sub = knex(`${table} as d`)\n .select(`d.${idCol}`)\n .whereNull(`d.${pubCol}`)\n .whereExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as p`)\n .whereRaw(pairOn('p', 'd'))\n .whereNotNull(`p.${pubCol}`)\n .whereRaw(`d.${updatedCol} > p.${updatedCol}`);\n });\n\n return idIn(sub);\n }\n\n const sub = knex(`${table} as p`)\n .select(`p.${idCol}`)\n .whereNotNull(`p.${pubCol}`)\n .whereExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as d`)\n .whereRaw(pairOn('d', 'p'))\n .whereNull(`d.${pubCol}`)\n .whereRaw(`d.${updatedCol} > p.${updatedCol}`);\n });\n\n return idIn(sub);\n }\n\n case 'unmodified': {\n if (status === 'draft') {\n const sub = knex(`${table} as d`)\n .select(`d.${idCol}`)\n .whereNull(`d.${pubCol}`)\n .whereExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as p`)\n .whereRaw(pairOn('p', 'd'))\n .whereNotNull(`p.${pubCol}`)\n .whereRaw(`d.${updatedCol} <= p.${updatedCol}`);\n });\n\n return idIn(sub);\n }\n\n const sub = knex(`${table} as p`)\n .select(`p.${idCol}`)\n .whereNotNull(`p.${pubCol}`)\n .whereExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as d`)\n .whereRaw(pairOn('d', 'p'))\n .whereNull(`d.${pubCol}`)\n .whereRaw(`d.${updatedCol} <= p.${updatedCol}`);\n });\n\n return idIn(sub);\n }\n\n case 'never-published-document': {\n if (status === 'published') {\n return idIn(emptyIdSelection(knex, table, idCol));\n }\n\n const sub = knex(`${table} as d`)\n .select(`d.${idCol}`)\n .whereNull(`d.${pubCol}`)\n .whereNotExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as p`)\n .whereRaw(documentOn('p', 'd'))\n .whereNotNull(`p.${pubCol}`);\n });\n\n return idIn(sub);\n }\n\n case 'has-published-version-document': {\n if (status === 'draft') {\n const sub = knex(`${table} as d`)\n .select(`d.${idCol}`)\n .whereNull(`d.${pubCol}`)\n .whereExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as p`)\n .whereRaw(documentOn('p', 'd'))\n .whereNotNull(`p.${pubCol}`);\n });\n\n return idIn(sub);\n }\n\n const sub = knex(`${table} as p`)\n .select(`p.${idCol}`)\n .whereNotNull(`p.${pubCol}`)\n .whereExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as d`)\n .whereRaw(documentOn('d', 'p'))\n .whereNull(`d.${pubCol}`);\n });\n\n return idIn(sub);\n }\n\n case 'published-without-draft': {\n if (status === 'draft') {\n return idIn(emptyIdSelection(knex, table, idCol));\n }\n\n const sub = knex(`${table} as p`)\n .select(`p.${idCol}`)\n .whereNotNull(`p.${pubCol}`)\n .whereNotExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as d`)\n .whereRaw(pairOn('d', 'p'))\n .whereNull(`d.${pubCol}`);\n });\n\n return idIn(sub);\n }\n\n case 'published-with-draft': {\n if (status === 'draft') {\n return idIn(emptyIdSelection(knex, table, idCol));\n }\n\n const sub = knex(`${table} as p`)\n .select(`p.${idCol}`)\n .whereNotNull(`p.${pubCol}`)\n .whereExists(function (this: any) {\n this.select(knex.raw('1'))\n .from(`${table} as d`)\n .whereRaw(pairOn('d', 'p'))\n .whereNull(`d.${pubCol}`);\n });\n\n return idIn(sub);\n }\n\n default: {\n return null;\n }\n }\n};\n"],"names":["ALLOWED","parsePublicationFilter","value","undefined","includes","ValidationError","join","validatePublicationFilterQueryParam","e","prev","details","source","param","columnName","meta","attr","a","attributes","ApplicationError","tableName","emptyIdSelection","knex","table","idCol","select","whereRaw","buildPublicationFilterWhere","model","mode","status","hasDraftAndPublish","docCol","pubCol","updatedCol","hasLocale","Boolean","locale","localeCol","pairOn","aliasA","aliasB","parts","push","documentOn","idIn","sub","id","$in","whereNull","whereNotExists","raw","from","whereNotNull","whereExists"],"mappings":"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"}