Files
payload/packages/plugin-cloud-storage/src/webpack.ts

53 lines
1.5 KiB
TypeScript

import type { Config } from 'payload/config'
import type { Configuration as WebpackConfig } from 'webpack'
import path from 'path'
import type { GeneratedAdapter, PluginOptions } from './types'
interface Args {
config: Config
options: PluginOptions
}
export const extendWebpackConfig =
({ config, options }: Args): ((webpackConfig: WebpackConfig) => WebpackConfig) =>
(webpackConfig) => {
const existingWebpackConfig =
typeof config.admin?.webpack === 'function'
? config.admin.webpack(webpackConfig)
: webpackConfig
const newConfig: WebpackConfig = {
...existingWebpackConfig,
resolve: {
...(existingWebpackConfig.resolve || {}),
alias: {
...(existingWebpackConfig.resolve?.alias ? existingWebpackConfig.resolve.alias : {}),
'@payloadcms/plugin-cloud-storage$': path.resolve(__dirname, './admin/index.js'),
},
},
}
const modifiedConfig = Object.entries(options.collections).reduce(
(resultingWebpackConfig, [slug, collectionOptions]) => {
const matchedCollection = config.collections?.find((coll) => coll.slug === slug)
if (matchedCollection && typeof collectionOptions.adapter === 'function') {
const adapter: GeneratedAdapter = collectionOptions.adapter({
collection: matchedCollection,
})
if (adapter.webpack) {
return adapter.webpack(resultingWebpackConfig)
}
}
return resultingWebpackConfig
},
newConfig,
)
return modifiedConfig
}