payload 3.28.0-internal.c4e1bed → 3.28.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/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
- package/dist/auth/strategies/local/generatePasswordSaltHash.js +3 -0
- package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
- package/dist/bin/generateImportMap/generateImportMap.spec.js +175 -0
- package/dist/bin/generateImportMap/generateImportMap.spec.js.map +1 -0
- package/dist/bin/generateImportMap/index.d.ts +2 -10
- package/dist/bin/generateImportMap/index.d.ts.map +1 -1
- package/dist/bin/generateImportMap/index.js +20 -88
- package/dist/bin/generateImportMap/index.js.map +1 -1
- package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
- package/dist/bin/generateImportMap/utilities/addPayloadComponentToImportMap.d.ts +15 -0
- package/dist/bin/generateImportMap/utilities/addPayloadComponentToImportMap.d.ts.map +1 -0
- package/dist/bin/generateImportMap/utilities/addPayloadComponentToImportMap.js +56 -0
- package/dist/bin/generateImportMap/utilities/addPayloadComponentToImportMap.js.map +1 -0
- package/dist/bin/generateImportMap/{getFromImportMap.d.ts → utilities/getFromImportMap.d.ts} +2 -2
- package/dist/bin/generateImportMap/utilities/getFromImportMap.d.ts.map +1 -0
- package/dist/bin/generateImportMap/utilities/getFromImportMap.js.map +1 -0
- package/dist/bin/generateImportMap/utilities/getImportMapToBaseDirPath.d.ts +15 -0
- package/dist/bin/generateImportMap/utilities/getImportMapToBaseDirPath.d.ts.map +1 -0
- package/dist/bin/generateImportMap/utilities/getImportMapToBaseDirPath.js +22 -0
- package/dist/bin/generateImportMap/utilities/getImportMapToBaseDirPath.js.map +1 -0
- package/dist/bin/generateImportMap/{parsePayloadComponent.d.ts → utilities/parsePayloadComponent.d.ts} +1 -1
- package/dist/bin/generateImportMap/utilities/parsePayloadComponent.d.ts.map +1 -0
- package/dist/bin/generateImportMap/utilities/parsePayloadComponent.js.map +1 -0
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts +9 -0
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts.map +1 -0
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js +26 -0
- package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js.map +1 -0
- package/dist/collections/config/types.d.ts +4 -0
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +2 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/types.d.ts +14 -50
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/exports/shared.d.ts +2 -2
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +2 -2
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/config/client.js +1 -1
- package/dist/fields/config/client.js.map +1 -1
- package/dist/fields/config/types.d.ts +4 -0
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js +1 -0
- package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
- package/dist/locked-documents/config.d.ts.map +1 -1
- package/dist/locked-documents/config.js +7 -0
- package/dist/locked-documents/config.js.map +1 -1
- package/dist/uploads/generateFileData.js +1 -1
- package/dist/uploads/generateFileData.js.map +1 -1
- package/package.json +2 -2
- package/dist/bin/generateImportMap/getFromImportMap.d.ts.map +0 -1
- package/dist/bin/generateImportMap/getFromImportMap.js.map +0 -1
- package/dist/bin/generateImportMap/parsePayloadComponent.d.ts.map +0 -1
- package/dist/bin/generateImportMap/parsePayloadComponent.js.map +0 -1
- /package/dist/bin/generateImportMap/{getFromImportMap.js → utilities/getFromImportMap.js} +0 -0
- /package/dist/bin/generateImportMap/{parsePayloadComponent.js → utilities/parsePayloadComponent.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/fields/hooks/beforeChange/promise.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { RichTextAdapter } from '../../../admin/RichText.js'\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { ValidationFieldError } from '../../../errors/index.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, Operation, PayloadRequest } from '../../../types/index.js'\nimport type { Block, Field, TabAsField, Validate } from '../../config/types.js'\n\nimport { MissingEditorProp } from '../../../errors/index.js'\nimport { deepMergeWithSourceArrays } from '../../../utilities/deepMerge.js'\nimport { getTranslatedLabel } from '../../../utilities/getTranslatedLabel.js'\nimport { fieldAffectsData, fieldShouldBeLocalized, tabHasName } from '../../config/types.js'\nimport { getFieldPathsModified as getFieldPaths } from '../../getFieldPaths.js'\nimport { getExistingRowDoc } from './getExistingRowDoc.js'\nimport { traverseFields } from './traverseFields.js'\n\nfunction buildFieldLabel(parentLabel: string, label: string): string {\n const capitalizedLabel = label.charAt(0).toUpperCase() + label.slice(1)\n return parentLabel && capitalizedLabel\n ? `${parentLabel} > ${capitalizedLabel}`\n : capitalizedLabel || parentLabel\n}\n\ntype Args = {\n /**\n * Data of the nearest parent block. If no parent block exists, this will be the `undefined`\n */\n blockData?: JsonObject\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: JsonObject\n doc: JsonObject\n docWithLocales: JsonObject\n errors: ValidationFieldError[]\n field: Field | TabAsField\n fieldIndex: number\n /**\n * Built up labels of parent fields\n *\n * @example \"Group Field > Tab Field > Text Field\"\n */\n fieldLabelPath: string\n global: null | SanitizedGlobalConfig\n id?: number | string\n mergeLocaleActions: (() => Promise<void> | void)[]\n operation: Operation\n parentIndexPath: string\n parentIsLocalized: boolean\n parentPath: string\n parentSchemaPath: string\n req: PayloadRequest\n siblingData: JsonObject\n siblingDoc: JsonObject\n siblingDocWithLocales?: JsonObject\n siblingFields?: (Field | TabAsField)[]\n skipValidation: boolean\n}\n\n// This function is responsible for the following actions, in order:\n// - Run condition\n// - Execute field hooks\n// - Validate data\n// - Transform data for storage\n// - beforeDuplicate hooks (if duplicate)\n// - Unflatten locales\n\nexport const promise = async ({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n field,\n fieldIndex,\n fieldLabelPath,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n siblingFields,\n skipValidation,\n}: Args): Promise<void> => {\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: fieldIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n const { localization } = req.payload.config\n const defaultLocale = localization ? localization?.defaultLocale : 'en'\n const operationLocale = req.locale || defaultLocale\n\n const pathSegments = path ? path.split('.') : []\n const schemaPathSegments = schemaPath ? schemaPath.split('.') : []\n const indexPathSegments = indexPath ? indexPath.split('-').filter(Boolean)?.map(Number) : []\n\n const passesCondition = field.admin?.condition\n ? Boolean(\n field.admin.condition(data, siblingData, { blockData, path: pathSegments, user: req.user }),\n )\n : true\n let skipValidationFromHere = skipValidation || !passesCondition\n\n if (fieldAffectsData(field)) {\n // skip validation if the field is localized and the incoming data is null\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && operationLocale !== defaultLocale) {\n if (['array', 'blocks'].includes(field.type) && siblingData[field.name] === null) {\n skipValidationFromHere = true\n }\n }\n\n // Execute hooks\n if (field.hooks?.beforeChange) {\n for (const hook of field.hooks.beforeChange) {\n const hookedValue = await hook({\n blockData,\n collection,\n context,\n data,\n field,\n global,\n indexPath: indexPathSegments,\n operation,\n originalDoc: doc,\n path: pathSegments,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: schemaPathSegments,\n siblingData,\n siblingDocWithLocales,\n siblingFields,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }\n }\n\n // Validate\n if (!skipValidationFromHere && 'validate' in field && field.validate) {\n const valueToValidate = siblingData[field.name]\n let jsonError: object\n\n if (field.type === 'json' && typeof siblingData[field.name] === 'string') {\n try {\n JSON.parse(siblingData[field.name] as string)\n } catch (e) {\n jsonError = e\n }\n }\n\n const validateFn: Validate<object, object, object, object> = field.validate as Validate<\n object,\n object,\n object,\n object\n >\n const validationResult = await validateFn(valueToValidate as never, {\n ...field,\n id,\n blockData,\n collectionSlug: collection?.slug,\n data: deepMergeWithSourceArrays(doc, data),\n event: 'submit',\n // @ts-expect-error\n jsonError,\n operation,\n preferences: { fields: {} },\n previousValue: siblingDoc[field.name],\n req,\n siblingData: deepMergeWithSourceArrays(siblingDoc, siblingData),\n })\n\n if (typeof validationResult === 'string') {\n const fieldLabel = buildFieldLabel(\n fieldLabelPath,\n getTranslatedLabel(field?.label || field?.name, req.i18n),\n )\n\n errors.push({\n label: fieldLabel,\n message: validationResult,\n path,\n })\n }\n }\n\n // Push merge locale action if applicable\n if (localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n mergeLocaleActions.push(() => {\n const localeData = {}\n\n for (const locale of localization.localeCodes) {\n const fieldValue =\n locale === req.locale\n ? siblingData[field.name]\n : siblingDocWithLocales?.[field.name]?.[locale]\n\n // update locale value if it's not undefined\n if (typeof fieldValue !== 'undefined') {\n localeData[locale] = fieldValue\n }\n }\n\n // If there are locales with data, set the data\n if (Object.keys(localeData).length > 0) {\n siblingData[field.name] = localeData\n }\n })\n }\n }\n\n switch (field.type) {\n case 'array': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n\n rows.forEach((row, rowIndex) => {\n promises.push(\n traverseFields({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n `${getTranslatedLabel(field?.label || field?.name, req.i18n)} ${rowIndex + 1}`,\n ),\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath,\n req,\n siblingData: row as JsonObject,\n siblingDoc: getExistingRowDoc(row as JsonObject, siblingDoc[field.name]),\n siblingDocWithLocales: getExistingRowDoc(\n row as JsonObject,\n siblingDocWithLocales[field.name],\n ),\n skipValidation: skipValidationFromHere,\n }),\n )\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'blocks': {\n const rows = siblingData[field.name]\n if (Array.isArray(rows)) {\n const promises = []\n\n rows.forEach((row, rowIndex) => {\n const rowSiblingDoc = getExistingRowDoc(row as JsonObject, siblingDoc[field.name])\n\n const rowSiblingDocWithLocales = getExistingRowDoc(\n row as JsonObject,\n siblingDocWithLocales ? siblingDocWithLocales[field.name] : {},\n )\n\n const blockTypeToMatch = (row as JsonObject).blockType || rowSiblingDoc.blockType\n\n const block: Block | undefined =\n req.payload.blocks[blockTypeToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (curBlock) => typeof curBlock !== 'string' && curBlock.slug === blockTypeToMatch,\n ) as Block | undefined)\n\n if (block) {\n promises.push(\n traverseFields({\n id,\n blockData: row,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n `${getTranslatedLabel(field?.label || field?.name, req.i18n)} ${rowIndex + 1}`,\n ),\n fields: block.fields,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath + '.' + block.slug,\n req,\n siblingData: row as JsonObject,\n siblingDoc: rowSiblingDoc,\n siblingDocWithLocales: rowSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n }),\n )\n }\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'collapsible':\n case 'row': {\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field.type === 'row' || field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n getTranslatedLabel(field?.label || field?.type, req.i18n),\n ),\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath: schemaPath,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'group': {\n if (typeof siblingData[field.name] !== 'object') {\n siblingData[field.name] = {}\n }\n\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n\n if (typeof siblingDocWithLocales[field.name] !== 'object') {\n siblingDocWithLocales[field.name] = {}\n }\n\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n getTranslatedLabel(field?.label || field?.name, req.i18n),\n ),\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingData: siblingData[field.name] as JsonObject,\n siblingDoc: siblingDoc[field.name] as JsonObject,\n siblingDocWithLocales: siblingDocWithLocales[field.name] as JsonObject,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'point': {\n // Transform point data for storage\n if (\n Array.isArray(siblingData[field.name]) &&\n siblingData[field.name][0] !== null &&\n siblingData[field.name][1] !== null\n ) {\n siblingData[field.name] = {\n type: 'Point',\n coordinates: [\n parseFloat(siblingData[field.name][0]),\n parseFloat(siblingData[field.name][1]),\n ],\n }\n }\n\n break\n }\n\n case 'richText': {\n if (!field?.editor) {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof field?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = field?.editor\n\n if (editor?.hooks?.beforeChange?.length) {\n for (const hook of editor.hooks.beforeChange) {\n const hookedValue = await hook({\n collection,\n context,\n data,\n docWithLocales,\n errors,\n field,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n getTranslatedLabel(field?.label || field?.name, req.i18n),\n ),\n global,\n indexPath: indexPathSegments,\n mergeLocaleActions,\n operation,\n originalDoc: doc,\n parentIsLocalized,\n path: pathSegments,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: schemaPathSegments,\n siblingData,\n siblingDocWithLocales,\n skipValidation,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }\n }\n\n break\n }\n\n case 'tab': {\n let tabSiblingData = siblingData\n let tabSiblingDoc = siblingDoc\n let tabSiblingDocWithLocales = siblingDocWithLocales\n\n const isNamedTab = tabHasName(field)\n\n if (isNamedTab) {\n if (typeof siblingData[field.name] !== 'object') {\n siblingData[field.name] = {}\n }\n\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n\n if (typeof siblingDocWithLocales[field.name] !== 'object') {\n siblingDocWithLocales[field.name] = {}\n }\n\n tabSiblingData = siblingData[field.name] as JsonObject\n tabSiblingDoc = siblingDoc[field.name] as JsonObject\n tabSiblingDocWithLocales = siblingDocWithLocales[field.name] as JsonObject\n }\n\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n getTranslatedLabel(field?.label || field?.name, req.i18n),\n ),\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: isNamedTab ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: isNamedTab ? path : parentPath,\n parentSchemaPath: schemaPath,\n req,\n siblingData: tabSiblingData,\n siblingDoc: tabSiblingDoc,\n siblingDocWithLocales: tabSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(fieldLabelPath, getTranslatedLabel(field?.label || '', req.i18n)),\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["MissingEditorProp","deepMergeWithSourceArrays","getTranslatedLabel","fieldAffectsData","fieldShouldBeLocalized","tabHasName","getFieldPathsModified","getFieldPaths","getExistingRowDoc","traverseFields","buildFieldLabel","parentLabel","label","capitalizedLabel","charAt","toUpperCase","slice","promise","id","blockData","collection","context","data","doc","docWithLocales","errors","field","fieldIndex","fieldLabelPath","global","mergeLocaleActions","operation","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","req","siblingData","siblingDoc","siblingDocWithLocales","siblingFields","skipValidation","indexPath","path","schemaPath","index","localization","payload","config","defaultLocale","operationLocale","locale","pathSegments","split","schemaPathSegments","indexPathSegments","filter","Boolean","map","Number","passesCondition","admin","condition","user","skipValidationFromHere","includes","type","name","hooks","beforeChange","hook","hookedValue","originalDoc","previousSiblingDoc","previousValue","value","undefined","validate","valueToValidate","jsonError","JSON","parse","e","validateFn","validationResult","collectionSlug","slug","event","preferences","fields","fieldLabel","i18n","push","message","localeData","localeCodes","fieldValue","Object","keys","length","rows","Array","isArray","promises","forEach","row","rowIndex","localized","Promise","all","rowSiblingDoc","rowSiblingDocWithLocales","blockTypeToMatch","blockType","block","blocks","blockReferences","find","curBlock","coordinates","parseFloat","editor","Error","tabSiblingData","tabSiblingDoc","tabSiblingDocWithLocales","isNamedTab","tabs","tab"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/fields/hooks/beforeChange/promise.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { RichTextAdapter } from '../../../admin/RichText.js'\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { ValidationFieldError } from '../../../errors/index.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, Operation, PayloadRequest } from '../../../types/index.js'\nimport type { Block, Field, TabAsField, Validate } from '../../config/types.js'\n\nimport { MissingEditorProp } from '../../../errors/index.js'\nimport { deepMergeWithSourceArrays } from '../../../utilities/deepMerge.js'\nimport { getTranslatedLabel } from '../../../utilities/getTranslatedLabel.js'\nimport { fieldAffectsData, fieldShouldBeLocalized, tabHasName } from '../../config/types.js'\nimport { getFieldPathsModified as getFieldPaths } from '../../getFieldPaths.js'\nimport { getExistingRowDoc } from './getExistingRowDoc.js'\nimport { traverseFields } from './traverseFields.js'\n\nfunction buildFieldLabel(parentLabel: string, label: string): string {\n const capitalizedLabel = label.charAt(0).toUpperCase() + label.slice(1)\n return parentLabel && capitalizedLabel\n ? `${parentLabel} > ${capitalizedLabel}`\n : capitalizedLabel || parentLabel\n}\n\ntype Args = {\n /**\n * Data of the nearest parent block. If no parent block exists, this will be the `undefined`\n */\n blockData?: JsonObject\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: JsonObject\n doc: JsonObject\n docWithLocales: JsonObject\n errors: ValidationFieldError[]\n field: Field | TabAsField\n fieldIndex: number\n /**\n * Built up labels of parent fields\n *\n * @example \"Group Field > Tab Field > Text Field\"\n */\n fieldLabelPath: string\n global: null | SanitizedGlobalConfig\n id?: number | string\n mergeLocaleActions: (() => Promise<void> | void)[]\n operation: Operation\n parentIndexPath: string\n parentIsLocalized: boolean\n parentPath: string\n parentSchemaPath: string\n req: PayloadRequest\n siblingData: JsonObject\n siblingDoc: JsonObject\n siblingDocWithLocales?: JsonObject\n siblingFields?: (Field | TabAsField)[]\n skipValidation: boolean\n}\n\n// This function is responsible for the following actions, in order:\n// - Run condition\n// - Execute field hooks\n// - Validate data\n// - Transform data for storage\n// - beforeDuplicate hooks (if duplicate)\n// - Unflatten locales\n\nexport const promise = async ({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n field,\n fieldIndex,\n fieldLabelPath,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n siblingFields,\n skipValidation,\n}: Args): Promise<void> => {\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: fieldIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n const { localization } = req.payload.config\n const defaultLocale = localization ? localization?.defaultLocale : 'en'\n const operationLocale = req.locale || defaultLocale\n\n const pathSegments = path ? path.split('.') : []\n const schemaPathSegments = schemaPath ? schemaPath.split('.') : []\n const indexPathSegments = indexPath ? indexPath.split('-').filter(Boolean)?.map(Number) : []\n\n const passesCondition = field.admin?.condition\n ? Boolean(\n field.admin.condition(data, siblingData, { blockData, path: pathSegments, user: req.user }),\n )\n : true\n let skipValidationFromHere = skipValidation || !passesCondition\n\n if (fieldAffectsData(field)) {\n // skip validation if the field is localized and the incoming data is null\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && operationLocale !== defaultLocale) {\n if (['array', 'blocks'].includes(field.type) && siblingData[field.name] === null) {\n skipValidationFromHere = true\n }\n }\n\n // Execute hooks\n if (field.hooks?.beforeChange) {\n for (const hook of field.hooks.beforeChange) {\n const hookedValue = await hook({\n blockData,\n collection,\n context,\n data,\n field,\n global,\n indexPath: indexPathSegments,\n operation,\n originalDoc: doc,\n path: pathSegments,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: schemaPathSegments,\n siblingData,\n siblingDocWithLocales,\n siblingFields,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }\n }\n\n // Validate\n if (!skipValidationFromHere && 'validate' in field && field.validate) {\n const valueToValidate = siblingData[field.name]\n let jsonError: object\n\n if (field.type === 'json' && typeof siblingData[field.name] === 'string') {\n try {\n JSON.parse(siblingData[field.name] as string)\n } catch (e) {\n jsonError = e\n }\n }\n\n const validateFn: Validate<object, object, object, object> = field.validate as Validate<\n object,\n object,\n object,\n object\n >\n const validationResult = await validateFn(valueToValidate as never, {\n ...field,\n id,\n blockData,\n collectionSlug: collection?.slug,\n data: deepMergeWithSourceArrays(doc, data),\n event: 'submit',\n // @ts-expect-error\n jsonError,\n operation,\n path: pathSegments,\n preferences: { fields: {} },\n previousValue: siblingDoc[field.name],\n req,\n siblingData: deepMergeWithSourceArrays(siblingDoc, siblingData),\n })\n\n if (typeof validationResult === 'string') {\n const fieldLabel = buildFieldLabel(\n fieldLabelPath,\n getTranslatedLabel(field?.label || field?.name, req.i18n),\n )\n\n errors.push({\n label: fieldLabel,\n message: validationResult,\n path,\n })\n }\n }\n\n // Push merge locale action if applicable\n if (localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n mergeLocaleActions.push(() => {\n const localeData = {}\n\n for (const locale of localization.localeCodes) {\n const fieldValue =\n locale === req.locale\n ? siblingData[field.name]\n : siblingDocWithLocales?.[field.name]?.[locale]\n\n // update locale value if it's not undefined\n if (typeof fieldValue !== 'undefined') {\n localeData[locale] = fieldValue\n }\n }\n\n // If there are locales with data, set the data\n if (Object.keys(localeData).length > 0) {\n siblingData[field.name] = localeData\n }\n })\n }\n }\n\n switch (field.type) {\n case 'array': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n\n rows.forEach((row, rowIndex) => {\n promises.push(\n traverseFields({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n `${getTranslatedLabel(field?.label || field?.name, req.i18n)} ${rowIndex + 1}`,\n ),\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath,\n req,\n siblingData: row as JsonObject,\n siblingDoc: getExistingRowDoc(row as JsonObject, siblingDoc[field.name]),\n siblingDocWithLocales: getExistingRowDoc(\n row as JsonObject,\n siblingDocWithLocales[field.name],\n ),\n skipValidation: skipValidationFromHere,\n }),\n )\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'blocks': {\n const rows = siblingData[field.name]\n if (Array.isArray(rows)) {\n const promises = []\n\n rows.forEach((row, rowIndex) => {\n const rowSiblingDoc = getExistingRowDoc(row as JsonObject, siblingDoc[field.name])\n\n const rowSiblingDocWithLocales = getExistingRowDoc(\n row as JsonObject,\n siblingDocWithLocales ? siblingDocWithLocales[field.name] : {},\n )\n\n const blockTypeToMatch = (row as JsonObject).blockType || rowSiblingDoc.blockType\n\n const block: Block | undefined =\n req.payload.blocks[blockTypeToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (curBlock) => typeof curBlock !== 'string' && curBlock.slug === blockTypeToMatch,\n ) as Block | undefined)\n\n if (block) {\n promises.push(\n traverseFields({\n id,\n blockData: row,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n `${getTranslatedLabel(field?.label || field?.name, req.i18n)} ${rowIndex + 1}`,\n ),\n fields: block.fields,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath + '.' + block.slug,\n req,\n siblingData: row as JsonObject,\n siblingDoc: rowSiblingDoc,\n siblingDocWithLocales: rowSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n }),\n )\n }\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'collapsible':\n case 'row': {\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field.type === 'row' || field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n getTranslatedLabel(field?.label || field?.type, req.i18n),\n ),\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath: schemaPath,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'group': {\n if (typeof siblingData[field.name] !== 'object') {\n siblingData[field.name] = {}\n }\n\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n\n if (typeof siblingDocWithLocales[field.name] !== 'object') {\n siblingDocWithLocales[field.name] = {}\n }\n\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n getTranslatedLabel(field?.label || field?.name, req.i18n),\n ),\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingData: siblingData[field.name] as JsonObject,\n siblingDoc: siblingDoc[field.name] as JsonObject,\n siblingDocWithLocales: siblingDocWithLocales[field.name] as JsonObject,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'point': {\n // Transform point data for storage\n if (\n Array.isArray(siblingData[field.name]) &&\n siblingData[field.name][0] !== null &&\n siblingData[field.name][1] !== null\n ) {\n siblingData[field.name] = {\n type: 'Point',\n coordinates: [\n parseFloat(siblingData[field.name][0]),\n parseFloat(siblingData[field.name][1]),\n ],\n }\n }\n\n break\n }\n\n case 'richText': {\n if (!field?.editor) {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof field?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = field?.editor\n\n if (editor?.hooks?.beforeChange?.length) {\n for (const hook of editor.hooks.beforeChange) {\n const hookedValue = await hook({\n collection,\n context,\n data,\n docWithLocales,\n errors,\n field,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n getTranslatedLabel(field?.label || field?.name, req.i18n),\n ),\n global,\n indexPath: indexPathSegments,\n mergeLocaleActions,\n operation,\n originalDoc: doc,\n parentIsLocalized,\n path: pathSegments,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: schemaPathSegments,\n siblingData,\n siblingDocWithLocales,\n skipValidation,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }\n }\n\n break\n }\n\n case 'tab': {\n let tabSiblingData = siblingData\n let tabSiblingDoc = siblingDoc\n let tabSiblingDocWithLocales = siblingDocWithLocales\n\n const isNamedTab = tabHasName(field)\n\n if (isNamedTab) {\n if (typeof siblingData[field.name] !== 'object') {\n siblingData[field.name] = {}\n }\n\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n\n if (typeof siblingDocWithLocales[field.name] !== 'object') {\n siblingDocWithLocales[field.name] = {}\n }\n\n tabSiblingData = siblingData[field.name] as JsonObject\n tabSiblingDoc = siblingDoc[field.name] as JsonObject\n tabSiblingDocWithLocales = siblingDocWithLocales[field.name] as JsonObject\n }\n\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(\n fieldLabelPath,\n getTranslatedLabel(field?.label || field?.name, req.i18n),\n ),\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: isNamedTab ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: isNamedTab ? path : parentPath,\n parentSchemaPath: schemaPath,\n req,\n siblingData: tabSiblingData,\n siblingDoc: tabSiblingDoc,\n siblingDocWithLocales: tabSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath:\n field?.label === false\n ? fieldLabelPath\n : buildFieldLabel(fieldLabelPath, getTranslatedLabel(field?.label || '', req.i18n)),\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n global,\n mergeLocaleActions,\n operation,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["MissingEditorProp","deepMergeWithSourceArrays","getTranslatedLabel","fieldAffectsData","fieldShouldBeLocalized","tabHasName","getFieldPathsModified","getFieldPaths","getExistingRowDoc","traverseFields","buildFieldLabel","parentLabel","label","capitalizedLabel","charAt","toUpperCase","slice","promise","id","blockData","collection","context","data","doc","docWithLocales","errors","field","fieldIndex","fieldLabelPath","global","mergeLocaleActions","operation","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","req","siblingData","siblingDoc","siblingDocWithLocales","siblingFields","skipValidation","indexPath","path","schemaPath","index","localization","payload","config","defaultLocale","operationLocale","locale","pathSegments","split","schemaPathSegments","indexPathSegments","filter","Boolean","map","Number","passesCondition","admin","condition","user","skipValidationFromHere","includes","type","name","hooks","beforeChange","hook","hookedValue","originalDoc","previousSiblingDoc","previousValue","value","undefined","validate","valueToValidate","jsonError","JSON","parse","e","validateFn","validationResult","collectionSlug","slug","event","preferences","fields","fieldLabel","i18n","push","message","localeData","localeCodes","fieldValue","Object","keys","length","rows","Array","isArray","promises","forEach","row","rowIndex","localized","Promise","all","rowSiblingDoc","rowSiblingDocWithLocales","blockTypeToMatch","blockType","block","blocks","blockReferences","find","curBlock","coordinates","parseFloat","editor","Error","tabSiblingData","tabSiblingDoc","tabSiblingDocWithLocales","isNamedTab","tabs","tab"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/locked-documents/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/locked-documents/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAIhD,eAAO,MAAM,6BAA6B,6BAA6B,CAAA;AAEvE,eAAO,MAAM,4BAA4B,WAAY,MAAM,KAAG,gBAmC5D,CAAA"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
// @ts-strict-ignore
|
|
2
|
+
import defaultAccess from '../auth/defaultAccess.js';
|
|
2
3
|
export const lockedDocumentsCollectionSlug = 'payload-locked-documents';
|
|
3
4
|
export const getLockedDocumentsCollection = (config)=>({
|
|
4
5
|
slug: lockedDocumentsCollectionSlug,
|
|
6
|
+
access: {
|
|
7
|
+
create: defaultAccess,
|
|
8
|
+
delete: defaultAccess,
|
|
9
|
+
read: defaultAccess,
|
|
10
|
+
update: defaultAccess
|
|
11
|
+
},
|
|
5
12
|
admin: {
|
|
6
13
|
hidden: true
|
|
7
14
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/locked-documents/config.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\n\nexport const lockedDocumentsCollectionSlug = 'payload-locked-documents'\n\nexport const getLockedDocumentsCollection = (config: Config): CollectionConfig => ({\n slug: lockedDocumentsCollectionSlug,\n admin: {\n hidden: true,\n },\n fields: [\n {\n name: 'document',\n type: 'relationship',\n index: true,\n maxDepth: 0,\n relationTo: [...config.collections.map((collectionConfig) => collectionConfig.slug)],\n },\n {\n name: 'globalSlug',\n type: 'text',\n index: true,\n },\n {\n name: 'user',\n type: 'relationship',\n maxDepth: 1,\n relationTo: config.collections\n .filter((collectionConfig) => collectionConfig.auth)\n .map((collectionConfig) => collectionConfig.slug),\n required: true,\n },\n ],\n lockDocuments: false,\n})\n"],"names":["lockedDocumentsCollectionSlug","getLockedDocumentsCollection","config","slug","admin","hidden","fields","name","type","index","maxDepth","relationTo","collections","map","collectionConfig","filter","auth","required","lockDocuments"],"mappings":"AAAA,oBAAoB;AAIpB,OAAO,
|
|
1
|
+
{"version":3,"sources":["../../src/locked-documents/config.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\n\nimport defaultAccess from '../auth/defaultAccess.js'\n\nexport const lockedDocumentsCollectionSlug = 'payload-locked-documents'\n\nexport const getLockedDocumentsCollection = (config: Config): CollectionConfig => ({\n slug: lockedDocumentsCollectionSlug,\n access: {\n create: defaultAccess,\n delete: defaultAccess,\n read: defaultAccess,\n update: defaultAccess,\n },\n admin: {\n hidden: true,\n },\n fields: [\n {\n name: 'document',\n type: 'relationship',\n index: true,\n maxDepth: 0,\n relationTo: [...config.collections.map((collectionConfig) => collectionConfig.slug)],\n },\n {\n name: 'globalSlug',\n type: 'text',\n index: true,\n },\n {\n name: 'user',\n type: 'relationship',\n maxDepth: 1,\n relationTo: config.collections\n .filter((collectionConfig) => collectionConfig.auth)\n .map((collectionConfig) => collectionConfig.slug),\n required: true,\n },\n ],\n lockDocuments: false,\n})\n"],"names":["defaultAccess","lockedDocumentsCollectionSlug","getLockedDocumentsCollection","config","slug","access","create","delete","read","update","admin","hidden","fields","name","type","index","maxDepth","relationTo","collections","map","collectionConfig","filter","auth","required","lockDocuments"],"mappings":"AAAA,oBAAoB;AAIpB,OAAOA,mBAAmB,2BAA0B;AAEpD,OAAO,MAAMC,gCAAgC,2BAA0B;AAEvE,OAAO,MAAMC,+BAA+B,CAACC,SAAsC,CAAA;QACjFC,MAAMH;QACNI,QAAQ;YACNC,QAAQN;YACRO,QAAQP;YACRQ,MAAMR;YACNS,QAAQT;QACV;QACAU,OAAO;YACLC,QAAQ;QACV;QACAC,QAAQ;YACN;gBACEC,MAAM;gBACNC,MAAM;gBACNC,OAAO;gBACPC,UAAU;gBACVC,YAAY;uBAAId,OAAOe,WAAW,CAACC,GAAG,CAAC,CAACC,mBAAqBA,iBAAiBhB,IAAI;iBAAE;YACtF;YACA;gBACES,MAAM;gBACNC,MAAM;gBACNC,OAAO;YACT;YACA;gBACEF,MAAM;gBACNC,MAAM;gBACNE,UAAU;gBACVC,YAAYd,OAAOe,WAAW,CAC3BG,MAAM,CAAC,CAACD,mBAAqBA,iBAAiBE,IAAI,EAClDH,GAAG,CAAC,CAACC,mBAAqBA,iBAAiBhB,IAAI;gBAClDmB,UAAU;YACZ;SACD;QACDC,eAAe;IACjB,CAAA,EAAE"}
|
|
@@ -86,7 +86,7 @@ export const generateFileData = async ({ collection: { config: collectionConfig
|
|
|
86
86
|
let fileBuffer;
|
|
87
87
|
let ext;
|
|
88
88
|
let mime;
|
|
89
|
-
const fileHasAdjustments = fileSupportsResize && Boolean(resizeOptions || formatOptions ||
|
|
89
|
+
const fileHasAdjustments = fileSupportsResize && Boolean(resizeOptions || formatOptions || trimOptions || file.tempFilePath);
|
|
90
90
|
const sharpOptions = {};
|
|
91
91
|
if (fileIsAnimatedType) {
|
|
92
92
|
sharpOptions.animated = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/uploads/generateFileData.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { OutputInfo, Sharp, SharpOptions } from 'sharp'\n\nimport { fileTypeFromBuffer } from 'file-type'\nimport fs from 'fs'\nimport { mkdirSync } from 'node:fs'\nimport sanitize from 'sanitize-filename'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { FileData, FileToSave, ProbedImageSize, UploadEdits } from './types.js'\n\nimport { FileRetrievalError, FileUploadError, MissingFile } from '../errors/index.js'\nimport { canResizeImage } from './canResizeImage.js'\nimport { cropImage } from './cropImage.js'\nimport { getExternalFile } from './getExternalFile.js'\nimport { getFileByPath } from './getFileByPath.js'\nimport { getImageSize } from './getImageSize.js'\nimport { getSafeFileName } from './getSafeFilename.js'\nimport { resizeAndTransformImageSizes } from './imageResizer.js'\nimport { isImage } from './isImage.js'\nimport { optionallyAppendMetadata } from './optionallyAppendMetadata.js'\n\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n isDuplicating?: boolean\n operation: 'create' | 'update'\n originalDoc?: T\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n throwOnMissingFile?: boolean\n}\n\ntype Result<T> = Promise<{\n data: T\n files: FileToSave[]\n}>\n\nexport const generateFileData = async <T>({\n collection: { config: collectionConfig },\n data,\n isDuplicating,\n operation,\n originalDoc,\n overwriteExistingFiles,\n req,\n throwOnMissingFile,\n}: Args<T>): Result<T> => {\n if (!collectionConfig.upload) {\n return {\n data,\n files: [],\n }\n }\n\n const { sharp } = req.payload.config\n\n let file = req.file\n\n const uploadEdits = parseUploadEditsFromReqOrIncomingData({\n data,\n isDuplicating,\n operation,\n originalDoc,\n req,\n })\n\n const {\n disableLocalStorage,\n focalPoint: focalPointEnabled = true,\n formatOptions,\n imageSizes,\n resizeOptions,\n staticDir,\n trimOptions,\n withMetadata,\n } = collectionConfig.upload\n\n const staticPath = staticDir\n\n const incomingFileData = isDuplicating ? originalDoc : data\n\n if (!file && uploadEdits && incomingFileData) {\n const { filename, url } = incomingFileData as FileData\n\n try {\n if (url && url.startsWith('/') && !disableLocalStorage) {\n const filePath = `${staticPath}/${filename}`\n const response = await getFileByPath(filePath)\n file = response\n overwriteExistingFiles = true\n } else if (filename && url) {\n file = await getExternalFile({\n data: incomingFileData as FileData,\n req,\n uploadConfig: collectionConfig.upload,\n })\n overwriteExistingFiles = true\n }\n } catch (err: unknown) {\n throw new FileRetrievalError(req.t, err instanceof Error ? err.message : undefined)\n }\n }\n\n if (isDuplicating) {\n overwriteExistingFiles = false\n }\n\n if (!file) {\n if (throwOnMissingFile) {\n throw new MissingFile(req.t)\n }\n\n return {\n data,\n files: [],\n }\n }\n\n if (!disableLocalStorage) {\n mkdirSync(staticPath, { recursive: true })\n }\n\n let newData = data\n const filesToSave: FileToSave[] = []\n const fileData: Partial<FileData> = {}\n const fileIsAnimatedType = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)\n const cropData =\n typeof uploadEdits === 'object' && 'crop' in uploadEdits ? uploadEdits.crop : undefined\n\n try {\n const fileSupportsResize = canResizeImage(file.mimetype)\n let fsSafeName: string\n let sharpFile: Sharp | undefined\n let dimensions: ProbedImageSize | undefined\n let fileBuffer: { data: Buffer; info: OutputInfo }\n let ext\n let mime: string\n const fileHasAdjustments =\n fileSupportsResize &&\n Boolean(resizeOptions || formatOptions || imageSizes || trimOptions || file.tempFilePath)\n\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimatedType) {\n sharpOptions.animated = true\n }\n\n if (sharp && (fileIsAnimatedType || fileHasAdjustments)) {\n if (file.tempFilePath) {\n sharpFile = sharp(file.tempFilePath, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n } else {\n sharpFile = sharp(file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n }\n\n if (fileHasAdjustments) {\n if (resizeOptions) {\n sharpFile = sharpFile.resize(resizeOptions)\n }\n if (formatOptions) {\n sharpFile = sharpFile.toFormat(formatOptions.format, formatOptions.options)\n }\n if (trimOptions) {\n sharpFile = sharpFile.trim(trimOptions)\n }\n }\n }\n\n if (fileSupportsResize || isImage(file.mimetype)) {\n dimensions = await getImageSize(file)\n fileData.width = dimensions.width\n fileData.height = dimensions.height\n }\n\n if (sharpFile) {\n const metadata = await sharpFile.metadata()\n sharpFile = await optionallyAppendMetadata({\n req,\n sharpFile,\n withMetadata,\n })\n fileBuffer = await sharpFile.toBuffer({ resolveWithObject: true })\n ;({ ext, mime } = await fileTypeFromBuffer(fileBuffer.data)) // This is getting an incorrect gif height back.\n fileData.width = fileBuffer.info.width\n fileData.height = fileBuffer.info.height\n fileData.filesize = fileBuffer.info.size\n\n // Animated GIFs + WebP aggregate the height from every frame, so we need to use divide by number of pages\n if (metadata.pages) {\n fileData.height = fileBuffer.info.height / metadata.pages\n fileData.filesize = fileBuffer.data.length\n }\n } else {\n mime = file.mimetype\n fileData.filesize = file.size\n\n if (file.name.includes('.')) {\n ext = file.name.split('.').pop().split('?')[0]\n } else {\n ext = ''\n }\n }\n\n // Adjust SVG mime type. fromBuffer modifies it.\n if (mime === 'application/xml' && ext === 'svg') {\n mime = 'image/svg+xml'\n }\n fileData.mimeType = mime\n\n const baseFilename = sanitize(file.name.substring(0, file.name.lastIndexOf('.')) || file.name)\n fsSafeName = `${baseFilename}${ext ? `.${ext}` : ''}`\n\n if (!overwriteExistingFiles) {\n fsSafeName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: fsSafeName,\n req,\n staticPath,\n })\n }\n\n fileData.filename = fsSafeName\n let fileForResize = file\n\n if (cropData && sharp) {\n const { data: croppedImage, info } = await cropImage({\n cropData,\n dimensions,\n file,\n heightInPixels: uploadEdits.heightInPixels,\n req,\n sharp,\n widthInPixels: uploadEdits.widthInPixels,\n withMetadata,\n })\n\n // Apply resize after cropping to ensure it conforms to resizeOptions\n if (resizeOptions) {\n const resizedAfterCrop = await sharp(croppedImage)\n .resize({\n fit: resizeOptions?.fit || 'cover',\n height: resizeOptions?.height,\n position: resizeOptions?.position || 'center',\n width: resizeOptions?.width,\n })\n .toBuffer({ resolveWithObject: true })\n\n filesToSave.push({\n buffer: resizedAfterCrop.data,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n fileForResize = {\n ...fileForResize,\n data: resizedAfterCrop.data,\n size: resizedAfterCrop.info.size,\n }\n\n fileData.width = resizedAfterCrop.info.width\n fileData.height = resizedAfterCrop.info.height\n if (fileIsAnimatedType) {\n const metadata = await sharpFile.metadata()\n fileData.height = metadata.pages\n ? resizedAfterCrop.info.height / metadata.pages\n : resizedAfterCrop.info.height\n }\n fileData.filesize = resizedAfterCrop.info.size\n } else {\n // If resizeOptions is not present, just save the cropped image\n filesToSave.push({\n buffer: croppedImage,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n fileForResize = {\n ...file,\n data: croppedImage,\n size: info.size,\n }\n\n fileData.width = info.width\n fileData.height = info.height\n if (fileIsAnimatedType) {\n const metadata = await sharpFile.metadata()\n fileData.height = metadata.pages ? info.height / metadata.pages : info.height\n }\n fileData.filesize = info.size\n }\n\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, croppedImage) // write fileBuffer to the temp path\n } else {\n req.file = fileForResize\n }\n } else {\n filesToSave.push({\n buffer: fileBuffer?.data || file.data,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n // If using temp files and the image is being resized, write the file to the temp path\n if (fileBuffer?.data || file.data.length > 0) {\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, fileBuffer?.data || file.data) // write fileBuffer to the temp path\n } else {\n // Assign the _possibly modified_ file to the request object\n req.file = {\n ...file,\n data: fileBuffer?.data || file.data,\n size: fileBuffer?.info.size,\n }\n }\n }\n }\n\n if (fileSupportsResize && (Array.isArray(imageSizes) || focalPointEnabled !== false)) {\n req.payloadUploadSizes = {}\n const { focalPoint, sizeData, sizesToSave } = await resizeAndTransformImageSizes({\n config: collectionConfig,\n dimensions: !cropData\n ? dimensions\n : {\n ...dimensions,\n height: fileData.height,\n width: fileData.width,\n },\n file: fileForResize,\n mimeType: fileData.mimeType,\n req,\n savedFilename: fsSafeName || file.name,\n sharp,\n staticPath,\n uploadEdits,\n withMetadata,\n })\n\n fileData.sizes = sizeData\n fileData.focalX = focalPoint?.x\n fileData.focalY = focalPoint?.y\n filesToSave.push(...sizesToSave)\n }\n } catch (err) {\n req.payload.logger.error(err)\n throw new FileUploadError(req.t)\n }\n\n newData = {\n ...newData,\n ...fileData,\n }\n\n return {\n data: newData,\n files: filesToSave,\n }\n}\n\n/**\n * Parse upload edits from req or incoming data\n */\nfunction parseUploadEditsFromReqOrIncomingData(args: {\n data: unknown\n isDuplicating?: boolean\n operation: 'create' | 'update'\n originalDoc: unknown\n req: PayloadRequest\n}): UploadEdits {\n const { data, isDuplicating, operation, originalDoc, req } = args\n\n // Get intended focal point change from query string or incoming data\n const uploadEdits =\n req.query?.uploadEdits && typeof req.query.uploadEdits === 'object'\n ? (req.query.uploadEdits as UploadEdits)\n : {}\n\n if (uploadEdits.focalPoint) {\n return uploadEdits\n }\n\n const incomingData = data as FileData\n const origDoc = originalDoc as FileData\n\n if (origDoc && 'focalX' in origDoc && 'focalY' in origDoc) {\n // If no change in focal point, return undefined.\n // This prevents a refocal operation triggered from admin, because it always sends the focal point.\n if (incomingData.focalX === origDoc.focalX && incomingData.focalY === origDoc.focalY) {\n return undefined\n }\n\n if (isDuplicating) {\n uploadEdits.focalPoint = {\n x: incomingData?.focalX || origDoc.focalX,\n y: incomingData?.focalY || origDoc.focalX,\n }\n }\n }\n\n if (incomingData?.focalX && incomingData?.focalY) {\n uploadEdits.focalPoint = {\n x: incomingData.focalX,\n y: incomingData.focalY,\n }\n return uploadEdits\n }\n\n // If no focal point is set, default to center\n if (operation === 'create') {\n uploadEdits.focalPoint = {\n x: 50,\n y: 50,\n }\n }\n\n return uploadEdits\n}\n"],"names":["fileTypeFromBuffer","fs","mkdirSync","sanitize","FileRetrievalError","FileUploadError","MissingFile","canResizeImage","cropImage","getExternalFile","getFileByPath","getImageSize","getSafeFileName","resizeAndTransformImageSizes","isImage","optionallyAppendMetadata","generateFileData","collection","config","collectionConfig","data","isDuplicating","operation","originalDoc","overwriteExistingFiles","req","throwOnMissingFile","upload","files","sharp","payload","file","uploadEdits","parseUploadEditsFromReqOrIncomingData","disableLocalStorage","focalPoint","focalPointEnabled","formatOptions","imageSizes","resizeOptions","staticDir","trimOptions","withMetadata","staticPath","incomingFileData","filename","url","startsWith","filePath","response","uploadConfig","err","t","Error","message","undefined","recursive","newData","filesToSave","fileData","fileIsAnimatedType","includes","mimetype","cropData","crop","fileSupportsResize","fsSafeName","sharpFile","dimensions","fileBuffer","ext","mime","fileHasAdjustments","Boolean","tempFilePath","sharpOptions","animated","rotate","resize","toFormat","format","options","trim","width","height","metadata","toBuffer","resolveWithObject","info","filesize","size","pages","length","name","split","pop","mimeType","baseFilename","substring","lastIndexOf","collectionSlug","slug","desiredFilename","fileForResize","croppedImage","heightInPixels","widthInPixels","resizedAfterCrop","fit","position","push","buffer","path","promises","writeFile","Array","isArray","payloadUploadSizes","sizeData","sizesToSave","savedFilename","sizes","focalX","x","focalY","y","logger","error","args","query","incomingData","origDoc"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/uploads/generateFileData.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { OutputInfo, Sharp, SharpOptions } from 'sharp'\n\nimport { fileTypeFromBuffer } from 'file-type'\nimport fs from 'fs'\nimport { mkdirSync } from 'node:fs'\nimport sanitize from 'sanitize-filename'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { FileData, FileToSave, ProbedImageSize, UploadEdits } from './types.js'\n\nimport { FileRetrievalError, FileUploadError, MissingFile } from '../errors/index.js'\nimport { canResizeImage } from './canResizeImage.js'\nimport { cropImage } from './cropImage.js'\nimport { getExternalFile } from './getExternalFile.js'\nimport { getFileByPath } from './getFileByPath.js'\nimport { getImageSize } from './getImageSize.js'\nimport { getSafeFileName } from './getSafeFilename.js'\nimport { resizeAndTransformImageSizes } from './imageResizer.js'\nimport { isImage } from './isImage.js'\nimport { optionallyAppendMetadata } from './optionallyAppendMetadata.js'\n\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n isDuplicating?: boolean\n operation: 'create' | 'update'\n originalDoc?: T\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n throwOnMissingFile?: boolean\n}\n\ntype Result<T> = Promise<{\n data: T\n files: FileToSave[]\n}>\n\nexport const generateFileData = async <T>({\n collection: { config: collectionConfig },\n data,\n isDuplicating,\n operation,\n originalDoc,\n overwriteExistingFiles,\n req,\n throwOnMissingFile,\n}: Args<T>): Result<T> => {\n if (!collectionConfig.upload) {\n return {\n data,\n files: [],\n }\n }\n\n const { sharp } = req.payload.config\n\n let file = req.file\n\n const uploadEdits = parseUploadEditsFromReqOrIncomingData({\n data,\n isDuplicating,\n operation,\n originalDoc,\n req,\n })\n\n const {\n disableLocalStorage,\n focalPoint: focalPointEnabled = true,\n formatOptions,\n imageSizes,\n resizeOptions,\n staticDir,\n trimOptions,\n withMetadata,\n } = collectionConfig.upload\n\n const staticPath = staticDir\n\n const incomingFileData = isDuplicating ? originalDoc : data\n\n if (!file && uploadEdits && incomingFileData) {\n const { filename, url } = incomingFileData as FileData\n\n try {\n if (url && url.startsWith('/') && !disableLocalStorage) {\n const filePath = `${staticPath}/${filename}`\n const response = await getFileByPath(filePath)\n file = response\n overwriteExistingFiles = true\n } else if (filename && url) {\n file = await getExternalFile({\n data: incomingFileData as FileData,\n req,\n uploadConfig: collectionConfig.upload,\n })\n overwriteExistingFiles = true\n }\n } catch (err: unknown) {\n throw new FileRetrievalError(req.t, err instanceof Error ? err.message : undefined)\n }\n }\n\n if (isDuplicating) {\n overwriteExistingFiles = false\n }\n\n if (!file) {\n if (throwOnMissingFile) {\n throw new MissingFile(req.t)\n }\n\n return {\n data,\n files: [],\n }\n }\n\n if (!disableLocalStorage) {\n mkdirSync(staticPath, { recursive: true })\n }\n\n let newData = data\n const filesToSave: FileToSave[] = []\n const fileData: Partial<FileData> = {}\n const fileIsAnimatedType = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)\n const cropData =\n typeof uploadEdits === 'object' && 'crop' in uploadEdits ? uploadEdits.crop : undefined\n\n try {\n const fileSupportsResize = canResizeImage(file.mimetype)\n let fsSafeName: string\n let sharpFile: Sharp | undefined\n let dimensions: ProbedImageSize | undefined\n let fileBuffer: { data: Buffer; info: OutputInfo }\n let ext\n let mime: string\n const fileHasAdjustments =\n fileSupportsResize &&\n Boolean(resizeOptions || formatOptions || trimOptions || file.tempFilePath)\n\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimatedType) {\n sharpOptions.animated = true\n }\n\n if (sharp && (fileIsAnimatedType || fileHasAdjustments)) {\n if (file.tempFilePath) {\n sharpFile = sharp(file.tempFilePath, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n } else {\n sharpFile = sharp(file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n }\n\n if (fileHasAdjustments) {\n if (resizeOptions) {\n sharpFile = sharpFile.resize(resizeOptions)\n }\n if (formatOptions) {\n sharpFile = sharpFile.toFormat(formatOptions.format, formatOptions.options)\n }\n if (trimOptions) {\n sharpFile = sharpFile.trim(trimOptions)\n }\n }\n }\n\n if (fileSupportsResize || isImage(file.mimetype)) {\n dimensions = await getImageSize(file)\n fileData.width = dimensions.width\n fileData.height = dimensions.height\n }\n\n if (sharpFile) {\n const metadata = await sharpFile.metadata()\n sharpFile = await optionallyAppendMetadata({\n req,\n sharpFile,\n withMetadata,\n })\n fileBuffer = await sharpFile.toBuffer({ resolveWithObject: true })\n ;({ ext, mime } = await fileTypeFromBuffer(fileBuffer.data)) // This is getting an incorrect gif height back.\n fileData.width = fileBuffer.info.width\n fileData.height = fileBuffer.info.height\n fileData.filesize = fileBuffer.info.size\n\n // Animated GIFs + WebP aggregate the height from every frame, so we need to use divide by number of pages\n if (metadata.pages) {\n fileData.height = fileBuffer.info.height / metadata.pages\n fileData.filesize = fileBuffer.data.length\n }\n } else {\n mime = file.mimetype\n fileData.filesize = file.size\n\n if (file.name.includes('.')) {\n ext = file.name.split('.').pop().split('?')[0]\n } else {\n ext = ''\n }\n }\n\n // Adjust SVG mime type. fromBuffer modifies it.\n if (mime === 'application/xml' && ext === 'svg') {\n mime = 'image/svg+xml'\n }\n fileData.mimeType = mime\n\n const baseFilename = sanitize(file.name.substring(0, file.name.lastIndexOf('.')) || file.name)\n fsSafeName = `${baseFilename}${ext ? `.${ext}` : ''}`\n\n if (!overwriteExistingFiles) {\n fsSafeName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: fsSafeName,\n req,\n staticPath,\n })\n }\n\n fileData.filename = fsSafeName\n let fileForResize = file\n\n if (cropData && sharp) {\n const { data: croppedImage, info } = await cropImage({\n cropData,\n dimensions,\n file,\n heightInPixels: uploadEdits.heightInPixels,\n req,\n sharp,\n widthInPixels: uploadEdits.widthInPixels,\n withMetadata,\n })\n\n // Apply resize after cropping to ensure it conforms to resizeOptions\n if (resizeOptions) {\n const resizedAfterCrop = await sharp(croppedImage)\n .resize({\n fit: resizeOptions?.fit || 'cover',\n height: resizeOptions?.height,\n position: resizeOptions?.position || 'center',\n width: resizeOptions?.width,\n })\n .toBuffer({ resolveWithObject: true })\n\n filesToSave.push({\n buffer: resizedAfterCrop.data,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n fileForResize = {\n ...fileForResize,\n data: resizedAfterCrop.data,\n size: resizedAfterCrop.info.size,\n }\n\n fileData.width = resizedAfterCrop.info.width\n fileData.height = resizedAfterCrop.info.height\n if (fileIsAnimatedType) {\n const metadata = await sharpFile.metadata()\n fileData.height = metadata.pages\n ? resizedAfterCrop.info.height / metadata.pages\n : resizedAfterCrop.info.height\n }\n fileData.filesize = resizedAfterCrop.info.size\n } else {\n // If resizeOptions is not present, just save the cropped image\n filesToSave.push({\n buffer: croppedImage,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n fileForResize = {\n ...file,\n data: croppedImage,\n size: info.size,\n }\n\n fileData.width = info.width\n fileData.height = info.height\n if (fileIsAnimatedType) {\n const metadata = await sharpFile.metadata()\n fileData.height = metadata.pages ? info.height / metadata.pages : info.height\n }\n fileData.filesize = info.size\n }\n\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, croppedImage) // write fileBuffer to the temp path\n } else {\n req.file = fileForResize\n }\n } else {\n filesToSave.push({\n buffer: fileBuffer?.data || file.data,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n // If using temp files and the image is being resized, write the file to the temp path\n if (fileBuffer?.data || file.data.length > 0) {\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, fileBuffer?.data || file.data) // write fileBuffer to the temp path\n } else {\n // Assign the _possibly modified_ file to the request object\n req.file = {\n ...file,\n data: fileBuffer?.data || file.data,\n size: fileBuffer?.info.size,\n }\n }\n }\n }\n\n if (fileSupportsResize && (Array.isArray(imageSizes) || focalPointEnabled !== false)) {\n req.payloadUploadSizes = {}\n const { focalPoint, sizeData, sizesToSave } = await resizeAndTransformImageSizes({\n config: collectionConfig,\n dimensions: !cropData\n ? dimensions\n : {\n ...dimensions,\n height: fileData.height,\n width: fileData.width,\n },\n file: fileForResize,\n mimeType: fileData.mimeType,\n req,\n savedFilename: fsSafeName || file.name,\n sharp,\n staticPath,\n uploadEdits,\n withMetadata,\n })\n\n fileData.sizes = sizeData\n fileData.focalX = focalPoint?.x\n fileData.focalY = focalPoint?.y\n filesToSave.push(...sizesToSave)\n }\n } catch (err) {\n req.payload.logger.error(err)\n throw new FileUploadError(req.t)\n }\n\n newData = {\n ...newData,\n ...fileData,\n }\n\n return {\n data: newData,\n files: filesToSave,\n }\n}\n\n/**\n * Parse upload edits from req or incoming data\n */\nfunction parseUploadEditsFromReqOrIncomingData(args: {\n data: unknown\n isDuplicating?: boolean\n operation: 'create' | 'update'\n originalDoc: unknown\n req: PayloadRequest\n}): UploadEdits {\n const { data, isDuplicating, operation, originalDoc, req } = args\n\n // Get intended focal point change from query string or incoming data\n const uploadEdits =\n req.query?.uploadEdits && typeof req.query.uploadEdits === 'object'\n ? (req.query.uploadEdits as UploadEdits)\n : {}\n\n if (uploadEdits.focalPoint) {\n return uploadEdits\n }\n\n const incomingData = data as FileData\n const origDoc = originalDoc as FileData\n\n if (origDoc && 'focalX' in origDoc && 'focalY' in origDoc) {\n // If no change in focal point, return undefined.\n // This prevents a refocal operation triggered from admin, because it always sends the focal point.\n if (incomingData.focalX === origDoc.focalX && incomingData.focalY === origDoc.focalY) {\n return undefined\n }\n\n if (isDuplicating) {\n uploadEdits.focalPoint = {\n x: incomingData?.focalX || origDoc.focalX,\n y: incomingData?.focalY || origDoc.focalX,\n }\n }\n }\n\n if (incomingData?.focalX && incomingData?.focalY) {\n uploadEdits.focalPoint = {\n x: incomingData.focalX,\n y: incomingData.focalY,\n }\n return uploadEdits\n }\n\n // If no focal point is set, default to center\n if (operation === 'create') {\n uploadEdits.focalPoint = {\n x: 50,\n y: 50,\n }\n }\n\n return uploadEdits\n}\n"],"names":["fileTypeFromBuffer","fs","mkdirSync","sanitize","FileRetrievalError","FileUploadError","MissingFile","canResizeImage","cropImage","getExternalFile","getFileByPath","getImageSize","getSafeFileName","resizeAndTransformImageSizes","isImage","optionallyAppendMetadata","generateFileData","collection","config","collectionConfig","data","isDuplicating","operation","originalDoc","overwriteExistingFiles","req","throwOnMissingFile","upload","files","sharp","payload","file","uploadEdits","parseUploadEditsFromReqOrIncomingData","disableLocalStorage","focalPoint","focalPointEnabled","formatOptions","imageSizes","resizeOptions","staticDir","trimOptions","withMetadata","staticPath","incomingFileData","filename","url","startsWith","filePath","response","uploadConfig","err","t","Error","message","undefined","recursive","newData","filesToSave","fileData","fileIsAnimatedType","includes","mimetype","cropData","crop","fileSupportsResize","fsSafeName","sharpFile","dimensions","fileBuffer","ext","mime","fileHasAdjustments","Boolean","tempFilePath","sharpOptions","animated","rotate","resize","toFormat","format","options","trim","width","height","metadata","toBuffer","resolveWithObject","info","filesize","size","pages","length","name","split","pop","mimeType","baseFilename","substring","lastIndexOf","collectionSlug","slug","desiredFilename","fileForResize","croppedImage","heightInPixels","widthInPixels","resizedAfterCrop","fit","position","push","buffer","path","promises","writeFile","Array","isArray","payloadUploadSizes","sizeData","sizesToSave","savedFilename","sizes","focalX","x","focalY","y","logger","error","args","query","incomingData","origDoc"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "payload",
|
|
3
|
-
"version": "3.28.0
|
|
3
|
+
"version": "3.28.0",
|
|
4
4
|
"description": "Node, React, Headless CMS and Application Framework built on Next.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"admin panel",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"tsx": "4.19.2",
|
|
100
100
|
"uuid": "10.0.0",
|
|
101
101
|
"ws": "^8.16.0",
|
|
102
|
-
"@payloadcms/translations": "3.28.0
|
|
102
|
+
"@payloadcms/translations": "3.28.0"
|
|
103
103
|
},
|
|
104
104
|
"devDependencies": {
|
|
105
105
|
"@hyrious/esbuild-plugin-commonjs": "^0.2.4",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getFromImportMap.d.ts","sourceRoot":"","sources":["../../../src/bin/generateImportMap/getFromImportMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAI3C,eAAO,MAAM,gBAAgB,GAAI,OAAO,QAAQ;IAC9C,SAAS,EAAE,SAAS,CAAA;IACpB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,KAAG,OAuBH,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/bin/generateImportMap/getFromImportMap.ts"],"sourcesContent":["import type { PayloadComponent } from '../../config/types.js'\nimport type { ImportMap } from './index.js'\n\nimport { parsePayloadComponent } from './parsePayloadComponent.js'\n\nexport const getFromImportMap = <TOutput>(args: {\n importMap: ImportMap\n PayloadComponent: PayloadComponent\n schemaPath?: string\n silent?: boolean\n}): TOutput => {\n const { importMap, PayloadComponent, schemaPath, silent } = args\n\n const { exportName, path } = parsePayloadComponent(PayloadComponent)\n\n const key = path + '#' + exportName\n\n const importMapEntry = importMap[key]\n\n if (!importMapEntry && !silent) {\n // eslint-disable-next-line no-console\n console.error(\n `getFromImportMap: PayloadComponent not found in importMap`,\n {\n key,\n PayloadComponent,\n schemaPath,\n },\n 'You may need to run the `payload generate:importmap` command to generate the importMap ahead of runtime.',\n )\n }\n\n return importMapEntry\n}\n"],"names":["parsePayloadComponent","getFromImportMap","args","importMap","PayloadComponent","schemaPath","silent","exportName","path","key","importMapEntry","console","error"],"mappings":"AAGA,SAASA,qBAAqB,QAAQ,6BAA4B;AAElE,OAAO,MAAMC,mBAAmB,CAAUC;IAMxC,MAAM,EAAEC,SAAS,EAAEC,gBAAgB,EAAEC,UAAU,EAAEC,MAAM,EAAE,GAAGJ;IAE5D,MAAM,EAAEK,UAAU,EAAEC,IAAI,EAAE,GAAGR,sBAAsBI;IAEnD,MAAMK,MAAMD,OAAO,MAAMD;IAEzB,MAAMG,iBAAiBP,SAAS,CAACM,IAAI;IAErC,IAAI,CAACC,kBAAkB,CAACJ,QAAQ;QAC9B,sCAAsC;QACtCK,QAAQC,KAAK,CACX,CAAC,yDAAyD,CAAC,EAC3D;YACEH;YACAL;YACAC;QACF,GACA;IAEJ;IAEA,OAAOK;AACT,EAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parsePayloadComponent.d.ts","sourceRoot":"","sources":["../../../src/bin/generateImportMap/parsePayloadComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG;IACzE,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb,CAsBA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/bin/generateImportMap/parsePayloadComponent.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { PayloadComponent } from '../../config/types.js'\n\nexport function parsePayloadComponent(PayloadComponent: PayloadComponent): {\n exportName: string\n path: string\n} {\n if (!PayloadComponent) {\n return null\n }\n\n const pathAndMaybeExport =\n typeof PayloadComponent === 'string' ? PayloadComponent : PayloadComponent.path\n\n let path = ''\n let exportName = 'default'\n\n if (pathAndMaybeExport?.includes('#')) {\n ;[path, exportName] = pathAndMaybeExport.split('#')\n } else {\n path = pathAndMaybeExport\n }\n\n if (typeof PayloadComponent === 'object' && PayloadComponent.exportName) {\n exportName = PayloadComponent.exportName\n }\n\n return { exportName, path }\n}\n"],"names":["parsePayloadComponent","PayloadComponent","pathAndMaybeExport","path","exportName","includes","split"],"mappings":"AAAA,oBAAoB;AAGpB,OAAO,SAASA,sBAAsBC,gBAAkC;IAItE,IAAI,CAACA,kBAAkB;QACrB,OAAO;IACT;IAEA,MAAMC,qBACJ,OAAOD,qBAAqB,WAAWA,mBAAmBA,iBAAiBE,IAAI;IAEjF,IAAIA,OAAO;IACX,IAAIC,aAAa;IAEjB,IAAIF,oBAAoBG,SAAS,MAAM;;QACpC,CAACF,MAAMC,WAAW,GAAGF,mBAAmBI,KAAK,CAAC;IACjD,OAAO;QACLH,OAAOD;IACT;IAEA,IAAI,OAAOD,qBAAqB,YAAYA,iBAAiBG,UAAU,EAAE;QACvEA,aAAaH,iBAAiBG,UAAU;IAC1C;IAEA,OAAO;QAAEA;QAAYD;IAAK;AAC5B"}
|
|
File without changes
|
/package/dist/bin/generateImportMap/{parsePayloadComponent.js → utilities/parsePayloadComponent.js}
RENAMED
|
File without changes
|