@strapi/upload 5.19.0 → 5.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/FilterPopover/FilterPopover.js +3 -0
- package/dist/admin/components/FilterPopover/FilterPopover.js.map +1 -1
- package/dist/admin/components/FilterPopover/FilterPopover.mjs +3 -0
- package/dist/admin/components/FilterPopover/FilterPopover.mjs.map +1 -1
- package/dist/admin/package.json.js +7 -6
- package/dist/admin/package.json.js.map +1 -1
- package/dist/admin/package.json.mjs +7 -6
- package/dist/admin/package.json.mjs.map +1 -1
- package/dist/server/routes/content-api.js +84 -24
- package/dist/server/routes/content-api.js.map +1 -1
- package/dist/server/routes/content-api.mjs +65 -24
- package/dist/server/routes/content-api.mjs.map +1 -1
- package/dist/server/routes/validation/upload.js +99 -0
- package/dist/server/routes/validation/upload.js.map +1 -0
- package/dist/server/routes/validation/upload.mjs +78 -0
- package/dist/server/routes/validation/upload.mjs.map +1 -0
- package/dist/server/src/index.d.ts +1 -8
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/content-api.d.ts +2 -8
- package/dist/server/src/routes/content-api.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts +1 -8
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/routes/validation/index.d.ts +2 -0
- package/dist/server/src/routes/validation/index.d.ts.map +1 -0
- package/dist/server/src/routes/validation/upload.d.ts +94 -0
- package/dist/server/src/routes/validation/upload.d.ts.map +1 -0
- package/package.json +7 -6
|
@@ -194,6 +194,9 @@ const FilterPopover = ({ displayedFilters, filters, onSubmit, onToggle })=>{
|
|
|
194
194
|
const appliedFilter = displayedFilters.find((filter)=>filter.name === modifiedData.name);
|
|
195
195
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Content, {
|
|
196
196
|
sideOffset: 4,
|
|
197
|
+
style: {
|
|
198
|
+
zIndex: 499
|
|
199
|
+
},
|
|
197
200
|
children: /*#__PURE__*/ jsxRuntime.jsx("form", {
|
|
198
201
|
onSubmit: handleSubmit,
|
|
199
202
|
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPopover.js","sources":["../../../../admin/src/components/FilterPopover/FilterPopover.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterPopover\n *\n */\nimport * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { FilterValueInput } from './FilterValueInput';\nimport { getFilterList } from './utils/getFilterList';\n\ntype Filter = {\n [key in 'mime' | 'createdAt' | 'updatedAt']?:\n | {\n [key in '$contains' | '$notContains' | '$eq' | '$not']?:\n | string[]\n | string\n | { $contains: string[] };\n }\n | undefined;\n};\n\nexport interface FilterPopoverProps {\n displayedFilters: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema: {\n type: string;\n options?: {\n value: string;\n }[];\n mainField?: {\n schema: {\n type: string;\n };\n };\n };\n }[];\n filters: Filter[];\n onSubmit: (filters: Filter[]) => void;\n onToggle: () => void;\n}\n\nexport const FilterPopover = ({\n displayedFilters,\n filters,\n onSubmit,\n onToggle,\n}: FilterPopoverProps) => {\n const { formatMessage } = useIntl();\n\n const [modifiedData, setModifiedData] = React.useState({\n name: 'createdAt',\n filter: '$eq',\n value: '',\n });\n\n const handleChangeFilterField = (value: string | number) => {\n const nextField = displayedFilters.find((f) => f.name === value);\n if (!nextField) {\n return;\n }\n const {\n fieldSchema: { type, options },\n } = nextField;\n let filterValue = '';\n\n if (type === 'enumeration') {\n filterValue = options?.[0].value || '';\n }\n\n const filter = getFilterList(nextField)[0].value;\n\n setModifiedData({ name: value.toString(), filter, value: filterValue });\n };\n\n const handleChangeOperator = (operator: string | number) => {\n if (modifiedData.name === 'mime') {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: 'image' }));\n } else {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: '' }));\n }\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n const encodedValue = encodeURIComponent(modifiedData.value);\n\n if (encodedValue) {\n if (modifiedData.name === 'mime') {\n const alreadyAppliedFilters = filters.filter((filter) => {\n return Object.keys(filter)[0] === 'mime';\n });\n\n if (modifiedData.value === 'file') {\n const filtersWithoutMimeType = filters.filter((filter) => {\n return Object.keys(filter)[0] !== 'mime';\n });\n\n let hasCurrentFilter = false;\n\n let filterToAdd: Filter;\n\n if (modifiedData.filter === '$contains') {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n if (typeof filter.mime?.$not !== 'string' && !Array.isArray(filter.mime?.$not)) {\n return filter.mime?.$not?.$contains !== undefined;\n }\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $not: {\n $contains: ['image', 'video'],\n },\n },\n };\n } else {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n return Array.isArray(filter.mime?.$contains);\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $contains: ['image', 'video'],\n },\n };\n }\n\n if (hasCurrentFilter) {\n onToggle();\n\n return;\n }\n\n const nextFilters = [...filtersWithoutMimeType, filterToAdd];\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n const hasFilter =\n alreadyAppliedFilters.find((filter) => {\n const modifiedDataFilter = modifiedData.filter;\n return (\n filter.mime &&\n filter.mime[modifiedDataFilter as keyof typeof filter.mime] === modifiedData.value\n );\n }) !== undefined;\n\n // Don't apply the same filter twice\n if (hasFilter) {\n onToggle();\n\n return;\n }\n\n const filtersWithoutFile = filters.filter((filter) => {\n const filterType = Object.keys(filter)[0];\n\n if (filterType !== 'mime') {\n return true;\n }\n\n if (\n typeof filter.mime?.$not !== 'string' &&\n !Array.isArray(filter.mime?.$not) &&\n filter.mime?.$not?.$contains !== undefined\n ) {\n return false;\n }\n\n if (Array.isArray(filter?.mime?.$contains)) {\n return false;\n }\n\n return true;\n });\n\n const oppositeFilter = modifiedData.filter === '$contains' ? '$notContains' : '$contains';\n\n const oppositeFilterIndex = filtersWithoutFile.findIndex((filter) => {\n return filter.mime?.[oppositeFilter] === modifiedData.value;\n });\n const hasOppositeFilter = oppositeFilterIndex !== -1;\n\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: modifiedData.value } };\n\n if (!hasOppositeFilter) {\n const nextFilters = [...filtersWithoutFile, filterToAdd];\n\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n if (hasOppositeFilter) {\n const nextFilters = filtersWithoutFile.slice();\n nextFilters.splice(oppositeFilterIndex, 1, filterToAdd);\n onSubmit(nextFilters);\n\n onToggle();\n }\n\n return;\n }\n\n const hasFilter =\n filters.find((filter) => {\n const modifiedDataName = modifiedData.name as\n | 'mime'\n | 'createdAt'\n | 'updatedAt'\n | '$contains'\n | '$notContains'\n | '$eq'\n | '$not';\n return (\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt'] &&\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt']?.[\n modifiedDataName as '$contains' | '$notContains' | '$eq' | '$not'\n ] === encodedValue\n );\n }) !== undefined;\n\n if (!hasFilter) {\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: encodedValue } };\n\n const nextFilters = [...filters, filterToAdd];\n\n onSubmit(nextFilters);\n }\n }\n\n onToggle();\n };\n\n const appliedFilter = displayedFilters.find((filter) => filter.name === modifiedData.name);\n\n return (\n <Popover.Content sideOffset={4}>\n <form onSubmit={handleSubmit}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1} style={{ minWidth: 184 }}>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n })}\n name=\"name\"\n size=\"M\"\n onChange={handleChangeFilterField}\n value={modifiedData.name}\n >\n {displayedFilters.map((filter) => {\n return (\n <SingleSelectOption key={filter.name} value={filter.name}>\n {filter.metadatas?.label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n })}\n name=\"filter\"\n size=\"M\"\n value={modifiedData.filter}\n onChange={handleChangeOperator}\n >\n {getFilterList(appliedFilter!).map((option) => {\n return (\n <SingleSelectOption key={option.value} value={option.value}>\n {formatMessage(option.intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <FilterValueInput\n {...appliedFilter?.metadatas}\n {...appliedFilter?.fieldSchema}\n value={modifiedData.value}\n onChange={(value) => setModifiedData((prev) => ({ ...prev, value }))}\n />\n </Box>\n <Box>\n <Button size=\"L\" variant=\"secondary\" startIcon={<Plus />} type=\"submit\" fullWidth>\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Box>\n </Flex>\n </form>\n </Popover.Content>\n );\n};\n"],"names":["FilterPopover","displayedFilters","filters","onSubmit","onToggle","formatMessage","useIntl","modifiedData","setModifiedData","React","useState","name","filter","value","handleChangeFilterField","nextField","find","f","fieldSchema","type","options","filterValue","getFilterList","toString","handleChangeOperator","operator","prev","handleSubmit","e","preventDefault","stopPropagation","encodedValue","encodeURIComponent","alreadyAppliedFilters","Object","keys","filtersWithoutMimeType","hasCurrentFilter","filterToAdd","mime","$not","Array","isArray","$contains","undefined","nextFilters","hasFilter","modifiedDataFilter","filtersWithoutFile","filterType","oppositeFilter","oppositeFilterIndex","findIndex","hasOppositeFilter","slice","splice","modifiedDataName","appliedFilter","_jsx","Popover","Content","sideOffset","form","_jsxs","Flex","padding","direction","alignItems","gap","style","minWidth","Box","SingleSelect","aria-label","id","defaultMessage","size","onChange","map","SingleSelectOption","metadatas","label","option","intlLabel","FilterValueInput","Button","variant","startIcon","Plus","fullWidth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterPopover.js","sources":["../../../../admin/src/components/FilterPopover/FilterPopover.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterPopover\n *\n */\nimport * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { FilterValueInput } from './FilterValueInput';\nimport { getFilterList } from './utils/getFilterList';\n\ntype Filter = {\n [key in 'mime' | 'createdAt' | 'updatedAt']?:\n | {\n [key in '$contains' | '$notContains' | '$eq' | '$not']?:\n | string[]\n | string\n | { $contains: string[] };\n }\n | undefined;\n};\n\nexport interface FilterPopoverProps {\n displayedFilters: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema: {\n type: string;\n options?: {\n value: string;\n }[];\n mainField?: {\n schema: {\n type: string;\n };\n };\n };\n }[];\n filters: Filter[];\n onSubmit: (filters: Filter[]) => void;\n onToggle: () => void;\n}\n\nexport const FilterPopover = ({\n displayedFilters,\n filters,\n onSubmit,\n onToggle,\n}: FilterPopoverProps) => {\n const { formatMessage } = useIntl();\n\n const [modifiedData, setModifiedData] = React.useState({\n name: 'createdAt',\n filter: '$eq',\n value: '',\n });\n\n const handleChangeFilterField = (value: string | number) => {\n const nextField = displayedFilters.find((f) => f.name === value);\n if (!nextField) {\n return;\n }\n const {\n fieldSchema: { type, options },\n } = nextField;\n let filterValue = '';\n\n if (type === 'enumeration') {\n filterValue = options?.[0].value || '';\n }\n\n const filter = getFilterList(nextField)[0].value;\n\n setModifiedData({ name: value.toString(), filter, value: filterValue });\n };\n\n const handleChangeOperator = (operator: string | number) => {\n if (modifiedData.name === 'mime') {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: 'image' }));\n } else {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: '' }));\n }\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n const encodedValue = encodeURIComponent(modifiedData.value);\n\n if (encodedValue) {\n if (modifiedData.name === 'mime') {\n const alreadyAppliedFilters = filters.filter((filter) => {\n return Object.keys(filter)[0] === 'mime';\n });\n\n if (modifiedData.value === 'file') {\n const filtersWithoutMimeType = filters.filter((filter) => {\n return Object.keys(filter)[0] !== 'mime';\n });\n\n let hasCurrentFilter = false;\n\n let filterToAdd: Filter;\n\n if (modifiedData.filter === '$contains') {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n if (typeof filter.mime?.$not !== 'string' && !Array.isArray(filter.mime?.$not)) {\n return filter.mime?.$not?.$contains !== undefined;\n }\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $not: {\n $contains: ['image', 'video'],\n },\n },\n };\n } else {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n return Array.isArray(filter.mime?.$contains);\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $contains: ['image', 'video'],\n },\n };\n }\n\n if (hasCurrentFilter) {\n onToggle();\n\n return;\n }\n\n const nextFilters = [...filtersWithoutMimeType, filterToAdd];\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n const hasFilter =\n alreadyAppliedFilters.find((filter) => {\n const modifiedDataFilter = modifiedData.filter;\n return (\n filter.mime &&\n filter.mime[modifiedDataFilter as keyof typeof filter.mime] === modifiedData.value\n );\n }) !== undefined;\n\n // Don't apply the same filter twice\n if (hasFilter) {\n onToggle();\n\n return;\n }\n\n const filtersWithoutFile = filters.filter((filter) => {\n const filterType = Object.keys(filter)[0];\n\n if (filterType !== 'mime') {\n return true;\n }\n\n if (\n typeof filter.mime?.$not !== 'string' &&\n !Array.isArray(filter.mime?.$not) &&\n filter.mime?.$not?.$contains !== undefined\n ) {\n return false;\n }\n\n if (Array.isArray(filter?.mime?.$contains)) {\n return false;\n }\n\n return true;\n });\n\n const oppositeFilter = modifiedData.filter === '$contains' ? '$notContains' : '$contains';\n\n const oppositeFilterIndex = filtersWithoutFile.findIndex((filter) => {\n return filter.mime?.[oppositeFilter] === modifiedData.value;\n });\n const hasOppositeFilter = oppositeFilterIndex !== -1;\n\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: modifiedData.value } };\n\n if (!hasOppositeFilter) {\n const nextFilters = [...filtersWithoutFile, filterToAdd];\n\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n if (hasOppositeFilter) {\n const nextFilters = filtersWithoutFile.slice();\n nextFilters.splice(oppositeFilterIndex, 1, filterToAdd);\n onSubmit(nextFilters);\n\n onToggle();\n }\n\n return;\n }\n\n const hasFilter =\n filters.find((filter) => {\n const modifiedDataName = modifiedData.name as\n | 'mime'\n | 'createdAt'\n | 'updatedAt'\n | '$contains'\n | '$notContains'\n | '$eq'\n | '$not';\n return (\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt'] &&\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt']?.[\n modifiedDataName as '$contains' | '$notContains' | '$eq' | '$not'\n ] === encodedValue\n );\n }) !== undefined;\n\n if (!hasFilter) {\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: encodedValue } };\n\n const nextFilters = [...filters, filterToAdd];\n\n onSubmit(nextFilters);\n }\n }\n\n onToggle();\n };\n\n const appliedFilter = displayedFilters.find((filter) => filter.name === modifiedData.name);\n\n return (\n <Popover.Content sideOffset={4} style={{ zIndex: 499 }}>\n <form onSubmit={handleSubmit}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1} style={{ minWidth: 184 }}>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n })}\n name=\"name\"\n size=\"M\"\n onChange={handleChangeFilterField}\n value={modifiedData.name}\n >\n {displayedFilters.map((filter) => {\n return (\n <SingleSelectOption key={filter.name} value={filter.name}>\n {filter.metadatas?.label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n })}\n name=\"filter\"\n size=\"M\"\n value={modifiedData.filter}\n onChange={handleChangeOperator}\n >\n {getFilterList(appliedFilter!).map((option) => {\n return (\n <SingleSelectOption key={option.value} value={option.value}>\n {formatMessage(option.intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <FilterValueInput\n {...appliedFilter?.metadatas}\n {...appliedFilter?.fieldSchema}\n value={modifiedData.value}\n onChange={(value) => setModifiedData((prev) => ({ ...prev, value }))}\n />\n </Box>\n <Box>\n <Button size=\"L\" variant=\"secondary\" startIcon={<Plus />} type=\"submit\" fullWidth>\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Box>\n </Flex>\n </form>\n </Popover.Content>\n );\n};\n"],"names":["FilterPopover","displayedFilters","filters","onSubmit","onToggle","formatMessage","useIntl","modifiedData","setModifiedData","React","useState","name","filter","value","handleChangeFilterField","nextField","find","f","fieldSchema","type","options","filterValue","getFilterList","toString","handleChangeOperator","operator","prev","handleSubmit","e","preventDefault","stopPropagation","encodedValue","encodeURIComponent","alreadyAppliedFilters","Object","keys","filtersWithoutMimeType","hasCurrentFilter","filterToAdd","mime","$not","Array","isArray","$contains","undefined","nextFilters","hasFilter","modifiedDataFilter","filtersWithoutFile","filterType","oppositeFilter","oppositeFilterIndex","findIndex","hasOppositeFilter","slice","splice","modifiedDataName","appliedFilter","_jsx","Popover","Content","sideOffset","style","zIndex","form","_jsxs","Flex","padding","direction","alignItems","gap","minWidth","Box","SingleSelect","aria-label","id","defaultMessage","size","onChange","map","SingleSelectOption","metadatas","label","option","intlLabel","FilterValueInput","Button","variant","startIcon","Plus","fullWidth"],"mappings":"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"}
|
|
@@ -173,6 +173,9 @@ const FilterPopover = ({ displayedFilters, filters, onSubmit, onToggle })=>{
|
|
|
173
173
|
const appliedFilter = displayedFilters.find((filter)=>filter.name === modifiedData.name);
|
|
174
174
|
return /*#__PURE__*/ jsx(Popover.Content, {
|
|
175
175
|
sideOffset: 4,
|
|
176
|
+
style: {
|
|
177
|
+
zIndex: 499
|
|
178
|
+
},
|
|
176
179
|
children: /*#__PURE__*/ jsx("form", {
|
|
177
180
|
onSubmit: handleSubmit,
|
|
178
181
|
children: /*#__PURE__*/ jsxs(Flex, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPopover.mjs","sources":["../../../../admin/src/components/FilterPopover/FilterPopover.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterPopover\n *\n */\nimport * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { FilterValueInput } from './FilterValueInput';\nimport { getFilterList } from './utils/getFilterList';\n\ntype Filter = {\n [key in 'mime' | 'createdAt' | 'updatedAt']?:\n | {\n [key in '$contains' | '$notContains' | '$eq' | '$not']?:\n | string[]\n | string\n | { $contains: string[] };\n }\n | undefined;\n};\n\nexport interface FilterPopoverProps {\n displayedFilters: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema: {\n type: string;\n options?: {\n value: string;\n }[];\n mainField?: {\n schema: {\n type: string;\n };\n };\n };\n }[];\n filters: Filter[];\n onSubmit: (filters: Filter[]) => void;\n onToggle: () => void;\n}\n\nexport const FilterPopover = ({\n displayedFilters,\n filters,\n onSubmit,\n onToggle,\n}: FilterPopoverProps) => {\n const { formatMessage } = useIntl();\n\n const [modifiedData, setModifiedData] = React.useState({\n name: 'createdAt',\n filter: '$eq',\n value: '',\n });\n\n const handleChangeFilterField = (value: string | number) => {\n const nextField = displayedFilters.find((f) => f.name === value);\n if (!nextField) {\n return;\n }\n const {\n fieldSchema: { type, options },\n } = nextField;\n let filterValue = '';\n\n if (type === 'enumeration') {\n filterValue = options?.[0].value || '';\n }\n\n const filter = getFilterList(nextField)[0].value;\n\n setModifiedData({ name: value.toString(), filter, value: filterValue });\n };\n\n const handleChangeOperator = (operator: string | number) => {\n if (modifiedData.name === 'mime') {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: 'image' }));\n } else {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: '' }));\n }\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n const encodedValue = encodeURIComponent(modifiedData.value);\n\n if (encodedValue) {\n if (modifiedData.name === 'mime') {\n const alreadyAppliedFilters = filters.filter((filter) => {\n return Object.keys(filter)[0] === 'mime';\n });\n\n if (modifiedData.value === 'file') {\n const filtersWithoutMimeType = filters.filter((filter) => {\n return Object.keys(filter)[0] !== 'mime';\n });\n\n let hasCurrentFilter = false;\n\n let filterToAdd: Filter;\n\n if (modifiedData.filter === '$contains') {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n if (typeof filter.mime?.$not !== 'string' && !Array.isArray(filter.mime?.$not)) {\n return filter.mime?.$not?.$contains !== undefined;\n }\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $not: {\n $contains: ['image', 'video'],\n },\n },\n };\n } else {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n return Array.isArray(filter.mime?.$contains);\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $contains: ['image', 'video'],\n },\n };\n }\n\n if (hasCurrentFilter) {\n onToggle();\n\n return;\n }\n\n const nextFilters = [...filtersWithoutMimeType, filterToAdd];\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n const hasFilter =\n alreadyAppliedFilters.find((filter) => {\n const modifiedDataFilter = modifiedData.filter;\n return (\n filter.mime &&\n filter.mime[modifiedDataFilter as keyof typeof filter.mime] === modifiedData.value\n );\n }) !== undefined;\n\n // Don't apply the same filter twice\n if (hasFilter) {\n onToggle();\n\n return;\n }\n\n const filtersWithoutFile = filters.filter((filter) => {\n const filterType = Object.keys(filter)[0];\n\n if (filterType !== 'mime') {\n return true;\n }\n\n if (\n typeof filter.mime?.$not !== 'string' &&\n !Array.isArray(filter.mime?.$not) &&\n filter.mime?.$not?.$contains !== undefined\n ) {\n return false;\n }\n\n if (Array.isArray(filter?.mime?.$contains)) {\n return false;\n }\n\n return true;\n });\n\n const oppositeFilter = modifiedData.filter === '$contains' ? '$notContains' : '$contains';\n\n const oppositeFilterIndex = filtersWithoutFile.findIndex((filter) => {\n return filter.mime?.[oppositeFilter] === modifiedData.value;\n });\n const hasOppositeFilter = oppositeFilterIndex !== -1;\n\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: modifiedData.value } };\n\n if (!hasOppositeFilter) {\n const nextFilters = [...filtersWithoutFile, filterToAdd];\n\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n if (hasOppositeFilter) {\n const nextFilters = filtersWithoutFile.slice();\n nextFilters.splice(oppositeFilterIndex, 1, filterToAdd);\n onSubmit(nextFilters);\n\n onToggle();\n }\n\n return;\n }\n\n const hasFilter =\n filters.find((filter) => {\n const modifiedDataName = modifiedData.name as\n | 'mime'\n | 'createdAt'\n | 'updatedAt'\n | '$contains'\n | '$notContains'\n | '$eq'\n | '$not';\n return (\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt'] &&\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt']?.[\n modifiedDataName as '$contains' | '$notContains' | '$eq' | '$not'\n ] === encodedValue\n );\n }) !== undefined;\n\n if (!hasFilter) {\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: encodedValue } };\n\n const nextFilters = [...filters, filterToAdd];\n\n onSubmit(nextFilters);\n }\n }\n\n onToggle();\n };\n\n const appliedFilter = displayedFilters.find((filter) => filter.name === modifiedData.name);\n\n return (\n <Popover.Content sideOffset={4}>\n <form onSubmit={handleSubmit}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1} style={{ minWidth: 184 }}>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n })}\n name=\"name\"\n size=\"M\"\n onChange={handleChangeFilterField}\n value={modifiedData.name}\n >\n {displayedFilters.map((filter) => {\n return (\n <SingleSelectOption key={filter.name} value={filter.name}>\n {filter.metadatas?.label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n })}\n name=\"filter\"\n size=\"M\"\n value={modifiedData.filter}\n onChange={handleChangeOperator}\n >\n {getFilterList(appliedFilter!).map((option) => {\n return (\n <SingleSelectOption key={option.value} value={option.value}>\n {formatMessage(option.intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <FilterValueInput\n {...appliedFilter?.metadatas}\n {...appliedFilter?.fieldSchema}\n value={modifiedData.value}\n onChange={(value) => setModifiedData((prev) => ({ ...prev, value }))}\n />\n </Box>\n <Box>\n <Button size=\"L\" variant=\"secondary\" startIcon={<Plus />} type=\"submit\" fullWidth>\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Box>\n </Flex>\n </form>\n </Popover.Content>\n );\n};\n"],"names":["FilterPopover","displayedFilters","filters","onSubmit","onToggle","formatMessage","useIntl","modifiedData","setModifiedData","React","useState","name","filter","value","handleChangeFilterField","nextField","find","f","fieldSchema","type","options","filterValue","getFilterList","toString","handleChangeOperator","operator","prev","handleSubmit","e","preventDefault","stopPropagation","encodedValue","encodeURIComponent","alreadyAppliedFilters","Object","keys","filtersWithoutMimeType","hasCurrentFilter","filterToAdd","mime","$not","Array","isArray","$contains","undefined","nextFilters","hasFilter","modifiedDataFilter","filtersWithoutFile","filterType","oppositeFilter","oppositeFilterIndex","findIndex","hasOppositeFilter","slice","splice","modifiedDataName","appliedFilter","_jsx","Popover","Content","sideOffset","form","_jsxs","Flex","padding","direction","alignItems","gap","style","minWidth","Box","SingleSelect","aria-label","id","defaultMessage","size","onChange","map","SingleSelectOption","metadatas","label","option","intlLabel","FilterValueInput","Button","variant","startIcon","Plus","fullWidth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterPopover.mjs","sources":["../../../../admin/src/components/FilterPopover/FilterPopover.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterPopover\n *\n */\nimport * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { FilterValueInput } from './FilterValueInput';\nimport { getFilterList } from './utils/getFilterList';\n\ntype Filter = {\n [key in 'mime' | 'createdAt' | 'updatedAt']?:\n | {\n [key in '$contains' | '$notContains' | '$eq' | '$not']?:\n | string[]\n | string\n | { $contains: string[] };\n }\n | undefined;\n};\n\nexport interface FilterPopoverProps {\n displayedFilters: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema: {\n type: string;\n options?: {\n value: string;\n }[];\n mainField?: {\n schema: {\n type: string;\n };\n };\n };\n }[];\n filters: Filter[];\n onSubmit: (filters: Filter[]) => void;\n onToggle: () => void;\n}\n\nexport const FilterPopover = ({\n displayedFilters,\n filters,\n onSubmit,\n onToggle,\n}: FilterPopoverProps) => {\n const { formatMessage } = useIntl();\n\n const [modifiedData, setModifiedData] = React.useState({\n name: 'createdAt',\n filter: '$eq',\n value: '',\n });\n\n const handleChangeFilterField = (value: string | number) => {\n const nextField = displayedFilters.find((f) => f.name === value);\n if (!nextField) {\n return;\n }\n const {\n fieldSchema: { type, options },\n } = nextField;\n let filterValue = '';\n\n if (type === 'enumeration') {\n filterValue = options?.[0].value || '';\n }\n\n const filter = getFilterList(nextField)[0].value;\n\n setModifiedData({ name: value.toString(), filter, value: filterValue });\n };\n\n const handleChangeOperator = (operator: string | number) => {\n if (modifiedData.name === 'mime') {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: 'image' }));\n } else {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: '' }));\n }\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n const encodedValue = encodeURIComponent(modifiedData.value);\n\n if (encodedValue) {\n if (modifiedData.name === 'mime') {\n const alreadyAppliedFilters = filters.filter((filter) => {\n return Object.keys(filter)[0] === 'mime';\n });\n\n if (modifiedData.value === 'file') {\n const filtersWithoutMimeType = filters.filter((filter) => {\n return Object.keys(filter)[0] !== 'mime';\n });\n\n let hasCurrentFilter = false;\n\n let filterToAdd: Filter;\n\n if (modifiedData.filter === '$contains') {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n if (typeof filter.mime?.$not !== 'string' && !Array.isArray(filter.mime?.$not)) {\n return filter.mime?.$not?.$contains !== undefined;\n }\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $not: {\n $contains: ['image', 'video'],\n },\n },\n };\n } else {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n return Array.isArray(filter.mime?.$contains);\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $contains: ['image', 'video'],\n },\n };\n }\n\n if (hasCurrentFilter) {\n onToggle();\n\n return;\n }\n\n const nextFilters = [...filtersWithoutMimeType, filterToAdd];\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n const hasFilter =\n alreadyAppliedFilters.find((filter) => {\n const modifiedDataFilter = modifiedData.filter;\n return (\n filter.mime &&\n filter.mime[modifiedDataFilter as keyof typeof filter.mime] === modifiedData.value\n );\n }) !== undefined;\n\n // Don't apply the same filter twice\n if (hasFilter) {\n onToggle();\n\n return;\n }\n\n const filtersWithoutFile = filters.filter((filter) => {\n const filterType = Object.keys(filter)[0];\n\n if (filterType !== 'mime') {\n return true;\n }\n\n if (\n typeof filter.mime?.$not !== 'string' &&\n !Array.isArray(filter.mime?.$not) &&\n filter.mime?.$not?.$contains !== undefined\n ) {\n return false;\n }\n\n if (Array.isArray(filter?.mime?.$contains)) {\n return false;\n }\n\n return true;\n });\n\n const oppositeFilter = modifiedData.filter === '$contains' ? '$notContains' : '$contains';\n\n const oppositeFilterIndex = filtersWithoutFile.findIndex((filter) => {\n return filter.mime?.[oppositeFilter] === modifiedData.value;\n });\n const hasOppositeFilter = oppositeFilterIndex !== -1;\n\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: modifiedData.value } };\n\n if (!hasOppositeFilter) {\n const nextFilters = [...filtersWithoutFile, filterToAdd];\n\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n if (hasOppositeFilter) {\n const nextFilters = filtersWithoutFile.slice();\n nextFilters.splice(oppositeFilterIndex, 1, filterToAdd);\n onSubmit(nextFilters);\n\n onToggle();\n }\n\n return;\n }\n\n const hasFilter =\n filters.find((filter) => {\n const modifiedDataName = modifiedData.name as\n | 'mime'\n | 'createdAt'\n | 'updatedAt'\n | '$contains'\n | '$notContains'\n | '$eq'\n | '$not';\n return (\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt'] &&\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt']?.[\n modifiedDataName as '$contains' | '$notContains' | '$eq' | '$not'\n ] === encodedValue\n );\n }) !== undefined;\n\n if (!hasFilter) {\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: encodedValue } };\n\n const nextFilters = [...filters, filterToAdd];\n\n onSubmit(nextFilters);\n }\n }\n\n onToggle();\n };\n\n const appliedFilter = displayedFilters.find((filter) => filter.name === modifiedData.name);\n\n return (\n <Popover.Content sideOffset={4} style={{ zIndex: 499 }}>\n <form onSubmit={handleSubmit}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1} style={{ minWidth: 184 }}>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n })}\n name=\"name\"\n size=\"M\"\n onChange={handleChangeFilterField}\n value={modifiedData.name}\n >\n {displayedFilters.map((filter) => {\n return (\n <SingleSelectOption key={filter.name} value={filter.name}>\n {filter.metadatas?.label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n })}\n name=\"filter\"\n size=\"M\"\n value={modifiedData.filter}\n onChange={handleChangeOperator}\n >\n {getFilterList(appliedFilter!).map((option) => {\n return (\n <SingleSelectOption key={option.value} value={option.value}>\n {formatMessage(option.intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <FilterValueInput\n {...appliedFilter?.metadatas}\n {...appliedFilter?.fieldSchema}\n value={modifiedData.value}\n onChange={(value) => setModifiedData((prev) => ({ ...prev, value }))}\n />\n </Box>\n <Box>\n <Button size=\"L\" variant=\"secondary\" startIcon={<Plus />} type=\"submit\" fullWidth>\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Box>\n </Flex>\n </form>\n </Popover.Content>\n );\n};\n"],"names":["FilterPopover","displayedFilters","filters","onSubmit","onToggle","formatMessage","useIntl","modifiedData","setModifiedData","React","useState","name","filter","value","handleChangeFilterField","nextField","find","f","fieldSchema","type","options","filterValue","getFilterList","toString","handleChangeOperator","operator","prev","handleSubmit","e","preventDefault","stopPropagation","encodedValue","encodeURIComponent","alreadyAppliedFilters","Object","keys","filtersWithoutMimeType","hasCurrentFilter","filterToAdd","mime","$not","Array","isArray","$contains","undefined","nextFilters","hasFilter","modifiedDataFilter","filtersWithoutFile","filterType","oppositeFilter","oppositeFilterIndex","findIndex","hasOppositeFilter","slice","splice","modifiedDataName","appliedFilter","_jsx","Popover","Content","sideOffset","style","zIndex","form","_jsxs","Flex","padding","direction","alignItems","gap","minWidth","Box","SingleSelect","aria-label","id","defaultMessage","size","onChange","map","SingleSelectOption","metadatas","label","option","intlLabel","FilterValueInput","Button","variant","startIcon","Plus","fullWidth"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var name = "@strapi/upload";
|
|
6
|
-
var version = "5.
|
|
6
|
+
var version = "5.20.0";
|
|
7
7
|
var description = "Makes it easy to upload images and files to your Strapi Application.";
|
|
8
8
|
var license = "SEE LICENSE IN LICENSE";
|
|
9
9
|
var author = {
|
|
@@ -66,8 +66,8 @@ var dependencies = {
|
|
|
66
66
|
"@mux/mux-player-react": "3.1.0",
|
|
67
67
|
"@strapi/design-system": "2.0.0-rc.29",
|
|
68
68
|
"@strapi/icons": "2.0.0-rc.29",
|
|
69
|
-
"@strapi/provider-upload-local": "5.
|
|
70
|
-
"@strapi/utils": "5.
|
|
69
|
+
"@strapi/provider-upload-local": "5.20.0",
|
|
70
|
+
"@strapi/utils": "5.20.0",
|
|
71
71
|
"byte-size": "8.1.1",
|
|
72
72
|
cropperjs: "1.6.1",
|
|
73
73
|
"date-fns": "2.30.0",
|
|
@@ -86,11 +86,12 @@ var dependencies = {
|
|
|
86
86
|
"react-redux": "8.1.3",
|
|
87
87
|
"react-select": "5.8.0",
|
|
88
88
|
sharp: "0.33.5",
|
|
89
|
-
yup: "0.32.9"
|
|
89
|
+
yup: "0.32.9",
|
|
90
|
+
zod: "3.25.67"
|
|
90
91
|
};
|
|
91
92
|
var devDependencies = {
|
|
92
|
-
"@strapi/admin": "5.
|
|
93
|
-
"@strapi/types": "5.
|
|
93
|
+
"@strapi/admin": "5.20.0",
|
|
94
|
+
"@strapi/types": "5.20.0",
|
|
94
95
|
"@testing-library/dom": "10.1.0",
|
|
95
96
|
"@testing-library/react": "15.0.7",
|
|
96
97
|
"@testing-library/user-event": "14.5.2",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@strapi/upload";
|
|
2
|
-
var version = "5.
|
|
2
|
+
var version = "5.20.0";
|
|
3
3
|
var description = "Makes it easy to upload images and files to your Strapi Application.";
|
|
4
4
|
var license = "SEE LICENSE IN LICENSE";
|
|
5
5
|
var author = {
|
|
@@ -62,8 +62,8 @@ var dependencies = {
|
|
|
62
62
|
"@mux/mux-player-react": "3.1.0",
|
|
63
63
|
"@strapi/design-system": "2.0.0-rc.29",
|
|
64
64
|
"@strapi/icons": "2.0.0-rc.29",
|
|
65
|
-
"@strapi/provider-upload-local": "5.
|
|
66
|
-
"@strapi/utils": "5.
|
|
65
|
+
"@strapi/provider-upload-local": "5.20.0",
|
|
66
|
+
"@strapi/utils": "5.20.0",
|
|
67
67
|
"byte-size": "8.1.1",
|
|
68
68
|
cropperjs: "1.6.1",
|
|
69
69
|
"date-fns": "2.30.0",
|
|
@@ -82,11 +82,12 @@ var dependencies = {
|
|
|
82
82
|
"react-redux": "8.1.3",
|
|
83
83
|
"react-select": "5.8.0",
|
|
84
84
|
sharp: "0.33.5",
|
|
85
|
-
yup: "0.32.9"
|
|
85
|
+
yup: "0.32.9",
|
|
86
|
+
zod: "3.25.67"
|
|
86
87
|
};
|
|
87
88
|
var devDependencies = {
|
|
88
|
-
"@strapi/admin": "5.
|
|
89
|
-
"@strapi/types": "5.
|
|
89
|
+
"@strapi/admin": "5.20.0",
|
|
90
|
+
"@strapi/types": "5.20.0",
|
|
90
91
|
"@testing-library/dom": "10.1.0",
|
|
91
92
|
"@testing-library/react": "15.0.7",
|
|
92
93
|
"@testing-library/user-event": "14.5.2",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,29 +1,89 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
3
|
+
var z = require('zod/v4');
|
|
4
|
+
var upload = require('./validation/upload.js');
|
|
5
|
+
|
|
6
|
+
function _interopNamespaceDefault(e) {
|
|
7
|
+
var n = Object.create(null);
|
|
8
|
+
if (e) {
|
|
9
|
+
Object.keys(e).forEach(function (k) {
|
|
10
|
+
if (k !== 'default') {
|
|
11
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return e[k]; }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
n.default = e;
|
|
20
|
+
return Object.freeze(n);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
|
|
24
|
+
|
|
25
|
+
const routes = ()=>{
|
|
26
|
+
const validator = new upload.UploadRouteValidator(strapi);
|
|
27
|
+
return {
|
|
28
|
+
type: 'content-api',
|
|
29
|
+
routes: [
|
|
30
|
+
{
|
|
31
|
+
method: 'POST',
|
|
32
|
+
path: '/',
|
|
33
|
+
handler: 'content-api.upload',
|
|
34
|
+
request: {
|
|
35
|
+
query: {
|
|
36
|
+
id: validator.fileId.optional()
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
response: z__namespace.union([
|
|
40
|
+
validator.file,
|
|
41
|
+
validator.files
|
|
42
|
+
])
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
method: 'GET',
|
|
46
|
+
path: '/files',
|
|
47
|
+
handler: 'content-api.find',
|
|
48
|
+
request: {
|
|
49
|
+
query: {
|
|
50
|
+
fields: validator.queryFields.optional(),
|
|
51
|
+
populate: validator.queryPopulate.optional(),
|
|
52
|
+
sort: validator.querySort.optional(),
|
|
53
|
+
pagination: validator.pagination.optional(),
|
|
54
|
+
filters: validator.filters.optional()
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
response: validator.files
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
method: 'GET',
|
|
61
|
+
path: '/files/:id',
|
|
62
|
+
handler: 'content-api.findOne',
|
|
63
|
+
request: {
|
|
64
|
+
params: {
|
|
65
|
+
id: validator.fileId
|
|
66
|
+
},
|
|
67
|
+
query: {
|
|
68
|
+
fields: validator.queryFields.optional(),
|
|
69
|
+
populate: validator.queryPopulate.optional()
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
response: validator.file
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
method: 'DELETE',
|
|
76
|
+
path: '/files/:id',
|
|
77
|
+
handler: 'content-api.destroy',
|
|
78
|
+
request: {
|
|
79
|
+
params: {
|
|
80
|
+
id: validator.fileId
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
response: validator.file
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
};
|
|
27
87
|
};
|
|
28
88
|
|
|
29
89
|
exports.routes = routes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-api.js","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"content-api.js","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport * as z from 'zod/v4';\nimport { UploadRouteValidator } from './validation';\n\nexport const routes = (): Core.RouterInput => {\n const validator = new UploadRouteValidator(strapi);\n\n return {\n type: 'content-api',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'content-api.upload',\n request: {\n query: { id: validator.fileId.optional() },\n // Note: multipart/form-data is handled by Koa middleware, not Zod\n },\n response: z.union([validator.file, validator.files]),\n },\n {\n method: 'GET',\n path: '/files',\n handler: 'content-api.find',\n request: {\n query: {\n fields: validator.queryFields.optional(),\n populate: validator.queryPopulate.optional(),\n sort: validator.querySort.optional(),\n pagination: validator.pagination.optional(),\n filters: validator.filters.optional(),\n },\n },\n response: validator.files,\n },\n {\n method: 'GET',\n path: '/files/:id',\n handler: 'content-api.findOne',\n request: {\n params: { id: validator.fileId },\n query: {\n fields: validator.queryFields.optional(),\n populate: validator.queryPopulate.optional(),\n },\n },\n response: validator.file,\n },\n {\n method: 'DELETE',\n path: '/files/:id',\n handler: 'content-api.destroy',\n request: {\n params: { id: validator.fileId },\n },\n response: validator.file,\n },\n ],\n };\n};\n"],"names":["routes","validator","UploadRouteValidator","strapi","type","method","path","handler","request","query","id","fileId","optional","response","z","union","file","files","fields","queryFields","populate","queryPopulate","sort","querySort","pagination","filters","params"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;MAIaA,MAAS,GAAA,IAAA;IACpB,MAAMC,SAAAA,GAAY,IAAIC,2BAAqBC,CAAAA,MAAAA,CAAAA;IAE3C,OAAO;QACLC,IAAM,EAAA,aAAA;QACNJ,MAAQ,EAAA;AACN,YAAA;gBACEK,MAAQ,EAAA,MAAA;gBACRC,IAAM,EAAA,GAAA;gBACNC,OAAS,EAAA,oBAAA;gBACTC,OAAS,EAAA;oBACPC,KAAO,EAAA;wBAAEC,EAAIT,EAAAA,SAAAA,CAAUU,MAAM,CAACC,QAAQ;AAAG;AAE3C,iBAAA;gBACAC,QAAUC,EAAAA,YAAAA,CAAEC,KAAK,CAAC;AAACd,oBAAAA,SAAAA,CAAUe,IAAI;AAAEf,oBAAAA,SAAAA,CAAUgB;AAAM,iBAAA;AACrD,aAAA;AACA,YAAA;gBACEZ,MAAQ,EAAA,KAAA;gBACRC,IAAM,EAAA,QAAA;gBACNC,OAAS,EAAA,kBAAA;gBACTC,OAAS,EAAA;oBACPC,KAAO,EAAA;wBACLS,MAAQjB,EAAAA,SAAAA,CAAUkB,WAAW,CAACP,QAAQ,EAAA;wBACtCQ,QAAUnB,EAAAA,SAAAA,CAAUoB,aAAa,CAACT,QAAQ,EAAA;wBAC1CU,IAAMrB,EAAAA,SAAAA,CAAUsB,SAAS,CAACX,QAAQ,EAAA;wBAClCY,UAAYvB,EAAAA,SAAAA,CAAUuB,UAAU,CAACZ,QAAQ,EAAA;wBACzCa,OAASxB,EAAAA,SAAAA,CAAUwB,OAAO,CAACb,QAAQ;AACrC;AACF,iBAAA;AACAC,gBAAAA,QAAAA,EAAUZ,UAAUgB;AACtB,aAAA;AACA,YAAA;gBACEZ,MAAQ,EAAA,KAAA;gBACRC,IAAM,EAAA,YAAA;gBACNC,OAAS,EAAA,qBAAA;gBACTC,OAAS,EAAA;oBACPkB,MAAQ,EAAA;AAAEhB,wBAAAA,EAAAA,EAAIT,UAAUU;AAAO,qBAAA;oBAC/BF,KAAO,EAAA;wBACLS,MAAQjB,EAAAA,SAAAA,CAAUkB,WAAW,CAACP,QAAQ,EAAA;wBACtCQ,QAAUnB,EAAAA,SAAAA,CAAUoB,aAAa,CAACT,QAAQ;AAC5C;AACF,iBAAA;AACAC,gBAAAA,QAAAA,EAAUZ,UAAUe;AACtB,aAAA;AACA,YAAA;gBACEX,MAAQ,EAAA,QAAA;gBACRC,IAAM,EAAA,YAAA;gBACNC,OAAS,EAAA,qBAAA;gBACTC,OAAS,EAAA;oBACPkB,MAAQ,EAAA;AAAEhB,wBAAAA,EAAAA,EAAIT,UAAUU;AAAO;AACjC,iBAAA;AACAE,gBAAAA,QAAAA,EAAUZ,UAAUe;AACtB;AACD;AACH,KAAA;AACF;;;;"}
|
|
@@ -1,27 +1,68 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { UploadRouteValidator } from './validation/upload.mjs';
|
|
3
|
+
|
|
4
|
+
const routes = ()=>{
|
|
5
|
+
const validator = new UploadRouteValidator(strapi);
|
|
6
|
+
return {
|
|
7
|
+
type: 'content-api',
|
|
8
|
+
routes: [
|
|
9
|
+
{
|
|
10
|
+
method: 'POST',
|
|
11
|
+
path: '/',
|
|
12
|
+
handler: 'content-api.upload',
|
|
13
|
+
request: {
|
|
14
|
+
query: {
|
|
15
|
+
id: validator.fileId.optional()
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
response: z.union([
|
|
19
|
+
validator.file,
|
|
20
|
+
validator.files
|
|
21
|
+
])
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
method: 'GET',
|
|
25
|
+
path: '/files',
|
|
26
|
+
handler: 'content-api.find',
|
|
27
|
+
request: {
|
|
28
|
+
query: {
|
|
29
|
+
fields: validator.queryFields.optional(),
|
|
30
|
+
populate: validator.queryPopulate.optional(),
|
|
31
|
+
sort: validator.querySort.optional(),
|
|
32
|
+
pagination: validator.pagination.optional(),
|
|
33
|
+
filters: validator.filters.optional()
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
response: validator.files
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
method: 'GET',
|
|
40
|
+
path: '/files/:id',
|
|
41
|
+
handler: 'content-api.findOne',
|
|
42
|
+
request: {
|
|
43
|
+
params: {
|
|
44
|
+
id: validator.fileId
|
|
45
|
+
},
|
|
46
|
+
query: {
|
|
47
|
+
fields: validator.queryFields.optional(),
|
|
48
|
+
populate: validator.queryPopulate.optional()
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
response: validator.file
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
method: 'DELETE',
|
|
55
|
+
path: '/files/:id',
|
|
56
|
+
handler: 'content-api.destroy',
|
|
57
|
+
request: {
|
|
58
|
+
params: {
|
|
59
|
+
id: validator.fileId
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
response: validator.file
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
};
|
|
25
66
|
};
|
|
26
67
|
|
|
27
68
|
export { routes };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-api.mjs","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"content-api.mjs","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport * as z from 'zod/v4';\nimport { UploadRouteValidator } from './validation';\n\nexport const routes = (): Core.RouterInput => {\n const validator = new UploadRouteValidator(strapi);\n\n return {\n type: 'content-api',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'content-api.upload',\n request: {\n query: { id: validator.fileId.optional() },\n // Note: multipart/form-data is handled by Koa middleware, not Zod\n },\n response: z.union([validator.file, validator.files]),\n },\n {\n method: 'GET',\n path: '/files',\n handler: 'content-api.find',\n request: {\n query: {\n fields: validator.queryFields.optional(),\n populate: validator.queryPopulate.optional(),\n sort: validator.querySort.optional(),\n pagination: validator.pagination.optional(),\n filters: validator.filters.optional(),\n },\n },\n response: validator.files,\n },\n {\n method: 'GET',\n path: '/files/:id',\n handler: 'content-api.findOne',\n request: {\n params: { id: validator.fileId },\n query: {\n fields: validator.queryFields.optional(),\n populate: validator.queryPopulate.optional(),\n },\n },\n response: validator.file,\n },\n {\n method: 'DELETE',\n path: '/files/:id',\n handler: 'content-api.destroy',\n request: {\n params: { id: validator.fileId },\n },\n response: validator.file,\n },\n ],\n };\n};\n"],"names":["routes","validator","UploadRouteValidator","strapi","type","method","path","handler","request","query","id","fileId","optional","response","z","union","file","files","fields","queryFields","populate","queryPopulate","sort","querySort","pagination","filters","params"],"mappings":";;;MAIaA,MAAS,GAAA,IAAA;IACpB,MAAMC,SAAAA,GAAY,IAAIC,oBAAqBC,CAAAA,MAAAA,CAAAA;IAE3C,OAAO;QACLC,IAAM,EAAA,aAAA;QACNJ,MAAQ,EAAA;AACN,YAAA;gBACEK,MAAQ,EAAA,MAAA;gBACRC,IAAM,EAAA,GAAA;gBACNC,OAAS,EAAA,oBAAA;gBACTC,OAAS,EAAA;oBACPC,KAAO,EAAA;wBAAEC,EAAIT,EAAAA,SAAAA,CAAUU,MAAM,CAACC,QAAQ;AAAG;AAE3C,iBAAA;gBACAC,QAAUC,EAAAA,CAAAA,CAAEC,KAAK,CAAC;AAACd,oBAAAA,SAAAA,CAAUe,IAAI;AAAEf,oBAAAA,SAAAA,CAAUgB;AAAM,iBAAA;AACrD,aAAA;AACA,YAAA;gBACEZ,MAAQ,EAAA,KAAA;gBACRC,IAAM,EAAA,QAAA;gBACNC,OAAS,EAAA,kBAAA;gBACTC,OAAS,EAAA;oBACPC,KAAO,EAAA;wBACLS,MAAQjB,EAAAA,SAAAA,CAAUkB,WAAW,CAACP,QAAQ,EAAA;wBACtCQ,QAAUnB,EAAAA,SAAAA,CAAUoB,aAAa,CAACT,QAAQ,EAAA;wBAC1CU,IAAMrB,EAAAA,SAAAA,CAAUsB,SAAS,CAACX,QAAQ,EAAA;wBAClCY,UAAYvB,EAAAA,SAAAA,CAAUuB,UAAU,CAACZ,QAAQ,EAAA;wBACzCa,OAASxB,EAAAA,SAAAA,CAAUwB,OAAO,CAACb,QAAQ;AACrC;AACF,iBAAA;AACAC,gBAAAA,QAAAA,EAAUZ,UAAUgB;AACtB,aAAA;AACA,YAAA;gBACEZ,MAAQ,EAAA,KAAA;gBACRC,IAAM,EAAA,YAAA;gBACNC,OAAS,EAAA,qBAAA;gBACTC,OAAS,EAAA;oBACPkB,MAAQ,EAAA;AAAEhB,wBAAAA,EAAAA,EAAIT,UAAUU;AAAO,qBAAA;oBAC/BF,KAAO,EAAA;wBACLS,MAAQjB,EAAAA,SAAAA,CAAUkB,WAAW,CAACP,QAAQ,EAAA;wBACtCQ,QAAUnB,EAAAA,SAAAA,CAAUoB,aAAa,CAACT,QAAQ;AAC5C;AACF,iBAAA;AACAC,gBAAAA,QAAAA,EAAUZ,UAAUe;AACtB,aAAA;AACA,YAAA;gBACEX,MAAQ,EAAA,QAAA;gBACRC,IAAM,EAAA,YAAA;gBACNC,OAAS,EAAA,qBAAA;gBACTC,OAAS,EAAA;oBACPkB,MAAQ,EAAA;AAAEhB,wBAAAA,EAAAA,EAAIT,UAAUU;AAAO;AACjC,iBAAA;AACAE,gBAAAA,QAAAA,EAAUZ,UAAUe;AACtB;AACD;AACH,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@strapi/utils');
|
|
4
|
+
var z = require('zod/v4');
|
|
5
|
+
|
|
6
|
+
function _interopNamespaceDefault(e) {
|
|
7
|
+
var n = Object.create(null);
|
|
8
|
+
if (e) {
|
|
9
|
+
Object.keys(e).forEach(function (k) {
|
|
10
|
+
if (k !== 'default') {
|
|
11
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return e[k]; }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
n.default = e;
|
|
20
|
+
return Object.freeze(n);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* UploadRouteValidator provides validation for upload/file routes.
|
|
27
|
+
*
|
|
28
|
+
* Extends the AbstractRouteValidator to inherit common query parameter validation
|
|
29
|
+
* while adding file-specific validation schemas.
|
|
30
|
+
*/ class UploadRouteValidator extends utils.AbstractRouteValidator {
|
|
31
|
+
/**
|
|
32
|
+
* File schema for upload responses
|
|
33
|
+
* Defines the structure of a file object returned by the upload API
|
|
34
|
+
*/ get file() {
|
|
35
|
+
return z__namespace.object({
|
|
36
|
+
id: this.fileId,
|
|
37
|
+
documentId: z__namespace.uuid(),
|
|
38
|
+
name: z__namespace.string(),
|
|
39
|
+
alternativeText: z__namespace.string().nullable().optional(),
|
|
40
|
+
caption: z__namespace.string().nullable().optional(),
|
|
41
|
+
width: z__namespace.number().int().optional(),
|
|
42
|
+
height: z__namespace.number().int().optional(),
|
|
43
|
+
formats: z__namespace.record(z__namespace.string(), z__namespace.unknown()).optional(),
|
|
44
|
+
hash: z__namespace.string(),
|
|
45
|
+
ext: z__namespace.string().optional(),
|
|
46
|
+
mime: z__namespace.string(),
|
|
47
|
+
size: z__namespace.number(),
|
|
48
|
+
url: z__namespace.string(),
|
|
49
|
+
previewUrl: z__namespace.string().nullable().optional(),
|
|
50
|
+
folder: z__namespace.number().optional(),
|
|
51
|
+
folderPath: z__namespace.string(),
|
|
52
|
+
provider: z__namespace.string(),
|
|
53
|
+
provider_metadata: z__namespace.record(z__namespace.string(), z__namespace.unknown()).nullable().optional(),
|
|
54
|
+
createdAt: z__namespace.string(),
|
|
55
|
+
updatedAt: z__namespace.string(),
|
|
56
|
+
createdBy: z__namespace.number().optional(),
|
|
57
|
+
updatedBy: z__namespace.number().optional()
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Array of files schema
|
|
62
|
+
*/ get files() {
|
|
63
|
+
return z__namespace.array(this.file);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* File ID parameter validation
|
|
67
|
+
*/ get fileId() {
|
|
68
|
+
return z__namespace.number().int().positive();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Upload request body schema for single file uploads
|
|
72
|
+
*/ get uploadBody() {
|
|
73
|
+
return z__namespace.object({
|
|
74
|
+
fileInfo: z__namespace.object({
|
|
75
|
+
name: z__namespace.string().optional(),
|
|
76
|
+
alternativeText: z__namespace.string().optional(),
|
|
77
|
+
caption: z__namespace.string().optional()
|
|
78
|
+
}).optional()
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Upload request body schema for multiple file uploads
|
|
83
|
+
*/ get multiUploadBody() {
|
|
84
|
+
return z__namespace.object({
|
|
85
|
+
fileInfo: z__namespace.array(z__namespace.object({
|
|
86
|
+
name: z__namespace.string().optional(),
|
|
87
|
+
alternativeText: z__namespace.string().optional(),
|
|
88
|
+
caption: z__namespace.string().optional()
|
|
89
|
+
})).optional()
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
constructor(strapi){
|
|
93
|
+
super();
|
|
94
|
+
this._strapi = strapi;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
exports.UploadRouteValidator = UploadRouteValidator;
|
|
99
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sources":["../../../../server/src/routes/validation/upload.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { AbstractRouteValidator, type QueryParam } from '@strapi/utils';\nimport * as z from 'zod/v4';\n\nexport type FileQueryParam = QueryParam;\n\n/**\n * UploadRouteValidator provides validation for upload/file routes.\n *\n * Extends the AbstractRouteValidator to inherit common query parameter validation\n * while adding file-specific validation schemas.\n */\nexport class UploadRouteValidator extends AbstractRouteValidator {\n protected readonly _strapi: Core.Strapi;\n\n public constructor(strapi: Core.Strapi) {\n super();\n this._strapi = strapi;\n }\n\n /**\n * File schema for upload responses\n * Defines the structure of a file object returned by the upload API\n */\n get file() {\n return z.object({\n id: this.fileId,\n documentId: z.uuid(),\n name: z.string(),\n alternativeText: z.string().nullable().optional(),\n caption: z.string().nullable().optional(),\n width: z.number().int().optional(),\n height: z.number().int().optional(),\n formats: z.record(z.string(), z.unknown()).optional(),\n hash: z.string(),\n ext: z.string().optional(),\n mime: z.string(),\n size: z.number(),\n url: z.string(),\n previewUrl: z.string().nullable().optional(),\n folder: z.number().optional(),\n folderPath: z.string(),\n provider: z.string(),\n provider_metadata: z.record(z.string(), z.unknown()).nullable().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n createdBy: z.number().optional(),\n updatedBy: z.number().optional(),\n });\n }\n\n /**\n * Array of files schema\n */\n get files() {\n return z.array(this.file);\n }\n\n /**\n * File ID parameter validation\n */\n get fileId() {\n return z.number().int().positive();\n }\n\n /**\n * Upload request body schema for single file uploads\n */\n get uploadBody() {\n return z.object({\n fileInfo: z\n .object({\n name: z.string().optional(),\n alternativeText: z.string().optional(),\n caption: z.string().optional(),\n })\n .optional(),\n });\n }\n\n /**\n * Upload request body schema for multiple file uploads\n */\n get multiUploadBody() {\n return z.object({\n fileInfo: z\n .array(\n z.object({\n name: z.string().optional(),\n alternativeText: z.string().optional(),\n caption: z.string().optional(),\n })\n )\n .optional(),\n });\n }\n\n // Note: queryParams() method is inherited from AbstractRouteValidator\n // and provides validation for ['fields', 'populate', 'sort', 'pagination', 'filters']\n}\n"],"names":["UploadRouteValidator","AbstractRouteValidator","file","z","object","id","fileId","documentId","uuid","name","string","alternativeText","nullable","optional","caption","width","number","int","height","formats","record","unknown","hash","ext","mime","size","url","previewUrl","folder","folderPath","provider","provider_metadata","createdAt","updatedAt","createdBy","updatedBy","files","array","positive","uploadBody","fileInfo","multiUploadBody","strapi","_strapi"],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { AbstractRouteValidator } from '@strapi/utils';
|
|
2
|
+
import * as z from 'zod/v4';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* UploadRouteValidator provides validation for upload/file routes.
|
|
6
|
+
*
|
|
7
|
+
* Extends the AbstractRouteValidator to inherit common query parameter validation
|
|
8
|
+
* while adding file-specific validation schemas.
|
|
9
|
+
*/ class UploadRouteValidator extends AbstractRouteValidator {
|
|
10
|
+
/**
|
|
11
|
+
* File schema for upload responses
|
|
12
|
+
* Defines the structure of a file object returned by the upload API
|
|
13
|
+
*/ get file() {
|
|
14
|
+
return z.object({
|
|
15
|
+
id: this.fileId,
|
|
16
|
+
documentId: z.uuid(),
|
|
17
|
+
name: z.string(),
|
|
18
|
+
alternativeText: z.string().nullable().optional(),
|
|
19
|
+
caption: z.string().nullable().optional(),
|
|
20
|
+
width: z.number().int().optional(),
|
|
21
|
+
height: z.number().int().optional(),
|
|
22
|
+
formats: z.record(z.string(), z.unknown()).optional(),
|
|
23
|
+
hash: z.string(),
|
|
24
|
+
ext: z.string().optional(),
|
|
25
|
+
mime: z.string(),
|
|
26
|
+
size: z.number(),
|
|
27
|
+
url: z.string(),
|
|
28
|
+
previewUrl: z.string().nullable().optional(),
|
|
29
|
+
folder: z.number().optional(),
|
|
30
|
+
folderPath: z.string(),
|
|
31
|
+
provider: z.string(),
|
|
32
|
+
provider_metadata: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
33
|
+
createdAt: z.string(),
|
|
34
|
+
updatedAt: z.string(),
|
|
35
|
+
createdBy: z.number().optional(),
|
|
36
|
+
updatedBy: z.number().optional()
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Array of files schema
|
|
41
|
+
*/ get files() {
|
|
42
|
+
return z.array(this.file);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* File ID parameter validation
|
|
46
|
+
*/ get fileId() {
|
|
47
|
+
return z.number().int().positive();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Upload request body schema for single file uploads
|
|
51
|
+
*/ get uploadBody() {
|
|
52
|
+
return z.object({
|
|
53
|
+
fileInfo: z.object({
|
|
54
|
+
name: z.string().optional(),
|
|
55
|
+
alternativeText: z.string().optional(),
|
|
56
|
+
caption: z.string().optional()
|
|
57
|
+
}).optional()
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Upload request body schema for multiple file uploads
|
|
62
|
+
*/ get multiUploadBody() {
|
|
63
|
+
return z.object({
|
|
64
|
+
fileInfo: z.array(z.object({
|
|
65
|
+
name: z.string().optional(),
|
|
66
|
+
alternativeText: z.string().optional(),
|
|
67
|
+
caption: z.string().optional()
|
|
68
|
+
})).optional()
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
constructor(strapi){
|
|
72
|
+
super();
|
|
73
|
+
this._strapi = strapi;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { UploadRouteValidator };
|
|
78
|
+
//# sourceMappingURL=upload.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.mjs","sources":["../../../../server/src/routes/validation/upload.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { AbstractRouteValidator, type QueryParam } from '@strapi/utils';\nimport * as z from 'zod/v4';\n\nexport type FileQueryParam = QueryParam;\n\n/**\n * UploadRouteValidator provides validation for upload/file routes.\n *\n * Extends the AbstractRouteValidator to inherit common query parameter validation\n * while adding file-specific validation schemas.\n */\nexport class UploadRouteValidator extends AbstractRouteValidator {\n protected readonly _strapi: Core.Strapi;\n\n public constructor(strapi: Core.Strapi) {\n super();\n this._strapi = strapi;\n }\n\n /**\n * File schema for upload responses\n * Defines the structure of a file object returned by the upload API\n */\n get file() {\n return z.object({\n id: this.fileId,\n documentId: z.uuid(),\n name: z.string(),\n alternativeText: z.string().nullable().optional(),\n caption: z.string().nullable().optional(),\n width: z.number().int().optional(),\n height: z.number().int().optional(),\n formats: z.record(z.string(), z.unknown()).optional(),\n hash: z.string(),\n ext: z.string().optional(),\n mime: z.string(),\n size: z.number(),\n url: z.string(),\n previewUrl: z.string().nullable().optional(),\n folder: z.number().optional(),\n folderPath: z.string(),\n provider: z.string(),\n provider_metadata: z.record(z.string(), z.unknown()).nullable().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n createdBy: z.number().optional(),\n updatedBy: z.number().optional(),\n });\n }\n\n /**\n * Array of files schema\n */\n get files() {\n return z.array(this.file);\n }\n\n /**\n * File ID parameter validation\n */\n get fileId() {\n return z.number().int().positive();\n }\n\n /**\n * Upload request body schema for single file uploads\n */\n get uploadBody() {\n return z.object({\n fileInfo: z\n .object({\n name: z.string().optional(),\n alternativeText: z.string().optional(),\n caption: z.string().optional(),\n })\n .optional(),\n });\n }\n\n /**\n * Upload request body schema for multiple file uploads\n */\n get multiUploadBody() {\n return z.object({\n fileInfo: z\n .array(\n z.object({\n name: z.string().optional(),\n alternativeText: z.string().optional(),\n caption: z.string().optional(),\n })\n )\n .optional(),\n });\n }\n\n // Note: queryParams() method is inherited from AbstractRouteValidator\n // and provides validation for ['fields', 'populate', 'sort', 'pagination', 'filters']\n}\n"],"names":["UploadRouteValidator","AbstractRouteValidator","file","z","object","id","fileId","documentId","uuid","name","string","alternativeText","nullable","optional","caption","width","number","int","height","formats","record","unknown","hash","ext","mime","size","url","previewUrl","folder","folderPath","provider","provider_metadata","createdAt","updatedAt","createdBy","updatedBy","files","array","positive","uploadBody","fileInfo","multiUploadBody","strapi","_strapi"],"mappings":"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"}
|
|
@@ -30,14 +30,7 @@ declare const _default: () => {
|
|
|
30
30
|
};
|
|
31
31
|
}[];
|
|
32
32
|
};
|
|
33
|
-
'content-api':
|
|
34
|
-
type: string;
|
|
35
|
-
routes: {
|
|
36
|
-
method: string;
|
|
37
|
-
path: string;
|
|
38
|
-
handler: string;
|
|
39
|
-
}[];
|
|
40
|
-
};
|
|
33
|
+
'content-api': () => import("@strapi/types/dist/core").RouterInput;
|
|
41
34
|
viewConfiguration: {
|
|
42
35
|
type: string;
|
|
43
36
|
routes: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOxC,wBAQG"}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
routes: {
|
|
4
|
-
method: string;
|
|
5
|
-
path: string;
|
|
6
|
-
handler: string;
|
|
7
|
-
}[];
|
|
8
|
-
};
|
|
1
|
+
import type { Core } from '@strapi/types';
|
|
2
|
+
export declare const routes: () => Core.RouterInput;
|
|
9
3
|
//# sourceMappingURL=content-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-api.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/content-api.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"content-api.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/content-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,eAAO,MAAM,MAAM,QAAO,KAAK,WAuD9B,CAAC"}
|
|
@@ -15,14 +15,7 @@ export declare const routes: {
|
|
|
15
15
|
};
|
|
16
16
|
}[];
|
|
17
17
|
};
|
|
18
|
-
'content-api':
|
|
19
|
-
type: string;
|
|
20
|
-
routes: {
|
|
21
|
-
method: string;
|
|
22
|
-
path: string;
|
|
23
|
-
handler: string;
|
|
24
|
-
}[];
|
|
25
|
-
};
|
|
18
|
+
'content-api': () => import("@strapi/types/dist/core").RouterInput;
|
|
26
19
|
viewConfiguration: {
|
|
27
20
|
type: string;
|
|
28
21
|
routes: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIlB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../server/src/routes/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { Core } from '@strapi/types';
|
|
2
|
+
import { AbstractRouteValidator, type QueryParam } from '@strapi/utils';
|
|
3
|
+
import * as z from 'zod/v4';
|
|
4
|
+
export type FileQueryParam = QueryParam;
|
|
5
|
+
/**
|
|
6
|
+
* UploadRouteValidator provides validation for upload/file routes.
|
|
7
|
+
*
|
|
8
|
+
* Extends the AbstractRouteValidator to inherit common query parameter validation
|
|
9
|
+
* while adding file-specific validation schemas.
|
|
10
|
+
*/
|
|
11
|
+
export declare class UploadRouteValidator extends AbstractRouteValidator {
|
|
12
|
+
protected readonly _strapi: Core.Strapi;
|
|
13
|
+
constructor(strapi: Core.Strapi);
|
|
14
|
+
/**
|
|
15
|
+
* File schema for upload responses
|
|
16
|
+
* Defines the structure of a file object returned by the upload API
|
|
17
|
+
*/
|
|
18
|
+
get file(): z.ZodObject<{
|
|
19
|
+
id: z.ZodNumber;
|
|
20
|
+
documentId: z.ZodUUID;
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
alternativeText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
23
|
+
caption: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
24
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
25
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
26
|
+
formats: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
27
|
+
hash: z.ZodString;
|
|
28
|
+
ext: z.ZodOptional<z.ZodString>;
|
|
29
|
+
mime: z.ZodString;
|
|
30
|
+
size: z.ZodNumber;
|
|
31
|
+
url: z.ZodString;
|
|
32
|
+
previewUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
33
|
+
folder: z.ZodOptional<z.ZodNumber>;
|
|
34
|
+
folderPath: z.ZodString;
|
|
35
|
+
provider: z.ZodString;
|
|
36
|
+
provider_metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
37
|
+
createdAt: z.ZodString;
|
|
38
|
+
updatedAt: z.ZodString;
|
|
39
|
+
createdBy: z.ZodOptional<z.ZodNumber>;
|
|
40
|
+
updatedBy: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
/**
|
|
43
|
+
* Array of files schema
|
|
44
|
+
*/
|
|
45
|
+
get files(): z.ZodArray<z.ZodObject<{
|
|
46
|
+
id: z.ZodNumber;
|
|
47
|
+
documentId: z.ZodUUID;
|
|
48
|
+
name: z.ZodString;
|
|
49
|
+
alternativeText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
50
|
+
caption: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
51
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
52
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
53
|
+
formats: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
54
|
+
hash: z.ZodString;
|
|
55
|
+
ext: z.ZodOptional<z.ZodString>;
|
|
56
|
+
mime: z.ZodString;
|
|
57
|
+
size: z.ZodNumber;
|
|
58
|
+
url: z.ZodString;
|
|
59
|
+
previewUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
60
|
+
folder: z.ZodOptional<z.ZodNumber>;
|
|
61
|
+
folderPath: z.ZodString;
|
|
62
|
+
provider: z.ZodString;
|
|
63
|
+
provider_metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
64
|
+
createdAt: z.ZodString;
|
|
65
|
+
updatedAt: z.ZodString;
|
|
66
|
+
createdBy: z.ZodOptional<z.ZodNumber>;
|
|
67
|
+
updatedBy: z.ZodOptional<z.ZodNumber>;
|
|
68
|
+
}, z.core.$strip>>;
|
|
69
|
+
/**
|
|
70
|
+
* File ID parameter validation
|
|
71
|
+
*/
|
|
72
|
+
get fileId(): z.ZodNumber;
|
|
73
|
+
/**
|
|
74
|
+
* Upload request body schema for single file uploads
|
|
75
|
+
*/
|
|
76
|
+
get uploadBody(): z.ZodObject<{
|
|
77
|
+
fileInfo: z.ZodOptional<z.ZodObject<{
|
|
78
|
+
name: z.ZodOptional<z.ZodString>;
|
|
79
|
+
alternativeText: z.ZodOptional<z.ZodString>;
|
|
80
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
81
|
+
}, z.core.$strip>>;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
/**
|
|
84
|
+
* Upload request body schema for multiple file uploads
|
|
85
|
+
*/
|
|
86
|
+
get multiUploadBody(): z.ZodObject<{
|
|
87
|
+
fileInfo: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
88
|
+
name: z.ZodOptional<z.ZodString>;
|
|
89
|
+
alternativeText: z.ZodOptional<z.ZodString>;
|
|
90
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
91
|
+
}, z.core.$strip>>>;
|
|
92
|
+
}, z.core.$strip>;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../../server/src/routes/validation/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC;AAExC;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,sBAAsB;IAC9D,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;gBAErB,MAAM,EAAE,IAAI,CAAC,MAAM;IAKtC;;;OAGG;IACH,IAAI,IAAI;;;;;;;;;;;;;;;;;;;;;;;sBAyBP;IAED;;OAEG;IACH,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;uBAER;IAED;;OAEG;IACH,IAAI,MAAM,gBAET;IAED;;OAEG;IACH,IAAI,UAAU;;;;;;sBAUb;IAED;;OAEG;IACH,IAAI,eAAe;;;;;;sBAYlB;CAIF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/upload",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.20.0",
|
|
4
4
|
"description": "Makes it easy to upload images and files to your Strapi Application.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": {
|
|
@@ -63,8 +63,8 @@
|
|
|
63
63
|
"@mux/mux-player-react": "3.1.0",
|
|
64
64
|
"@strapi/design-system": "2.0.0-rc.29",
|
|
65
65
|
"@strapi/icons": "2.0.0-rc.29",
|
|
66
|
-
"@strapi/provider-upload-local": "5.
|
|
67
|
-
"@strapi/utils": "5.
|
|
66
|
+
"@strapi/provider-upload-local": "5.20.0",
|
|
67
|
+
"@strapi/utils": "5.20.0",
|
|
68
68
|
"byte-size": "8.1.1",
|
|
69
69
|
"cropperjs": "1.6.1",
|
|
70
70
|
"date-fns": "2.30.0",
|
|
@@ -83,11 +83,12 @@
|
|
|
83
83
|
"react-redux": "8.1.3",
|
|
84
84
|
"react-select": "5.8.0",
|
|
85
85
|
"sharp": "0.33.5",
|
|
86
|
-
"yup": "0.32.9"
|
|
86
|
+
"yup": "0.32.9",
|
|
87
|
+
"zod": "3.25.67"
|
|
87
88
|
},
|
|
88
89
|
"devDependencies": {
|
|
89
|
-
"@strapi/admin": "5.
|
|
90
|
-
"@strapi/types": "5.
|
|
90
|
+
"@strapi/admin": "5.20.0",
|
|
91
|
+
"@strapi/types": "5.20.0",
|
|
91
92
|
"@testing-library/dom": "10.1.0",
|
|
92
93
|
"@testing-library/react": "15.0.7",
|
|
93
94
|
"@testing-library/user-event": "14.5.2",
|