{"version":3,"file":"plugin.mjs","names":["muxClient: Mux | null","s3Store: S3Store | null","tusServer: Server | null","mergedConfig: Config"],"sources":["../src/plugin.ts"],"sourcesContent":["import Mux from '@mux/mux-node'\nimport { createDefu } from 'defu'\nimport { cloudStoragePlugin } from '@payloadcms/plugin-cloud-storage'\nimport { initClientUploads } from '@payloadcms/plugin-cloud-storage/utilities'\n\nimport { MediaCloudErrors } from './types/errors'\nimport { getStorageAdapter } from './adapter/storageAdapter'\nimport { getMediaCollection } from './collections/mediaCollection'\nimport { folderAfterChangeHook } from './collectionHooks/folderAfterChange'\nimport { useErrorHandler } from './hooks/useErrorHandler'\nimport { createS3Store } from './tus/stores/s3'\nimport { createMuxClient, createMuxEndpoints } from './utils/mux'\nimport { createTusEndpoints, createTusServer } from './utils/tus'\nimport { createFileEndpoints } from './utils/file'\nimport { defaultOptions } from './utils/defaultOptions'\n\nimport type { Config } from 'payload'\nimport type { Server } from '@tus/server'\nimport type { MediaCloudPluginOptions } from './types'\nimport type { S3Store } from './tus/stores/s3/s3Store'\n\nconst { logError } = useErrorHandler()\n\n// Prevent arrays from being merged\nconst defu = createDefu((obj, key, value) => {\n  if (Array.isArray(value)) {\n    obj[key] = value\n    return true\n  }\n})\n\nlet muxClient: Mux | null = null\nlet s3Store: S3Store | null = null\nlet tusServer: Server | null = null\n\n/**\n * Media Cloud Plugin for Payload CMS\n * @param options Configuration options\n * @returns Payload config function\n */\nexport function mediaCloudPlugin(options: MediaCloudPluginOptions) {\n  return function (config: Config): Config {\n    // Check if config is invalid or disabled\n    if (!options) {\n      logError(MediaCloudErrors.PLUGIN_NOT_CONFIGURED.message)\n      return config\n    }\n\n    // Merge user options with default options\n    const pluginOptions = defu(options, defaultOptions)\n\n    // Check if the plugin is disabled\n    if (pluginOptions.enabled === false) {\n      return config\n    }\n\n    /**\n     * Helper function to get or create Mux client instance\n     * @returns Mux client instance\n     */\n    function getMuxClient(): Mux {\n      return muxClient ?? createMuxClient(pluginOptions.mux)\n    }\n\n    /**\n     * Helper function to get or create S3 store instance\n     * @returns S3 store instance\n     */\n    function getS3Store(): S3Store {\n      return s3Store ?? createS3Store(pluginOptions.s3)\n    }\n\n    /**\n     * Helper function to get or create tus server instance\n     * @returns TUS server instance\n     */\n    function getTusServer(): Server {\n      return tusServer ?? createTusServer({ getS3Store, pluginOptions })\n    }\n\n    // Initialize Mux client if configuration is provided\n    if (pluginOptions.mux) {\n      muxClient = getMuxClient()\n    }\n\n    // Initialize S3 store and TUS server if configuration is provided\n    if (pluginOptions.s3) {\n      s3Store = getS3Store()\n      tusServer = getTusServer()\n    }\n\n    // Check if base media collection exists\n    const baseCollection = config.collections?.find(\n      ({ slug }) => slug === pluginOptions.collection\n    )\n\n    const { view } = pluginOptions\n    const mediaCollection = getMediaCollection({\n      baseCollection: baseCollection,\n      view,\n    })\n\n    // Remove base media collection\n    // It’ll be replaced with the merged media collection\n    if (baseCollection) {\n      config = {\n        ...config,\n        collections:\n          config.collections?.filter(\n            ({ slug }) => slug !== baseCollection?.slug\n          ) ?? [],\n      }\n    }\n\n    initClientUploads({\n      config,\n      enabled: true,\n      clientHandler:\n        '@maas/payload-plugin-media-cloud/components#UploadHandler',\n      collections: {\n        [mediaCollection.slug]: {\n          clientUploads: true,\n          disableLocalStorage: true,\n          prefix: pluginOptions.s3?.prefix ?? '',\n        },\n      },\n      extraClientHandlerProps: () => ({\n        pluginOptions,\n      }),\n      serverHandler: () => {\n        return Response.json(\n          { message: 'Server handler is not implemented' },\n          { status: 501 }\n        )\n      },\n      serverHandlerPath: '/media-cloud/upload',\n    })\n\n    const cloudStorageConfig = {\n      collections: {\n        [mediaCollection.slug]: {\n          adapter: getStorageAdapter({\n            getMuxClient,\n            pluginOptions,\n            getS3Store,\n          }),\n          clientUploads: true,\n          disableLocalStorage: true,\n        },\n      },\n    }\n\n    // Inject folderAfterChangeHook into folder collection\n    if (pluginOptions.folders) {\n      const existingFoldersConfig =\n        typeof config.folders === 'object' && config.folders !== null\n          ? config.folders\n          : {}\n\n      config = {\n        ...config,\n        folders: {\n          ...existingFoldersConfig,\n          collectionOverrides: [\n            ...(existingFoldersConfig.collectionOverrides ?? []),\n            ({ collection }) => ({\n              ...collection,\n              hooks: {\n                ...collection.hooks,\n                afterChange: [\n                  ...(collection.hooks?.afterChange ?? []),\n                  folderAfterChangeHook,\n                ],\n              },\n            }),\n          ],\n        },\n      }\n    }\n\n    const mergedConfig: Config = {\n      ...config,\n      admin: {\n        ...config.admin,\n        components: {\n          ...config.admin?.components,\n          providers: [\n            ...(config.admin?.components?.providers ?? []),\n            '@maas/payload-plugin-media-cloud/components#UploadManagerProvider',\n          ],\n        },\n      },\n      collections: [...(config.collections ?? []), mediaCollection],\n      endpoints: [\n        ...(config.endpoints ?? []),\n        ...createTusEndpoints({ getTusServer, getS3Store, pluginOptions }),\n        ...createMuxEndpoints({ getMuxClient, pluginOptions }),\n        ...createFileEndpoints({ getS3Store, pluginOptions }),\n      ],\n      custom: {\n        ...config.custom,\n        mediaCloud: {\n          options: {\n            enabled: pluginOptions.enabled,\n            collection: pluginOptions.collection,\n            view: pluginOptions.view,\n            storage: pluginOptions.storage,\n            folders: pluginOptions.folders,\n            limits: pluginOptions.limits,\n          },\n        },\n      },\n    }\n\n    return cloudStoragePlugin(cloudStorageConfig)(mergedConfig)\n  }\n}\n\nexport { s3Store }\n"],"mappings":"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"}