@payloadcms/plugin-cloud-storage 1.0.18 → 1.1.0-beta.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/.editorconfig +10 -0
- package/.gitignore +248 -0
- package/.prettierignore +1 -0
- package/.prettierrc.js +8 -0
- package/.vscode/launch.json +40 -0
- package/.vscode/settings.json +9 -0
- package/dev/.env +21 -0
- package/dev/.env.example +21 -0
- package/dev/dist/dev/src/collections/Media.js +56 -0
- package/dev/dist/dev/src/collections/Media.js.map +1 -0
- package/dev/dist/dev/src/collections/Users.js +23 -0
- package/dev/dist/dev/src/collections/Users.js.map +1 -0
- package/dev/dist/dev/src/payload.config.js +153 -0
- package/dev/dist/dev/src/payload.config.js.map +1 -0
- package/dev/dist/dev/src/server.js +26 -0
- package/dev/dist/dev/src/server.js.map +1 -0
- package/dev/dist/src/adapters/azure/generateURL.js +16 -0
- package/dev/dist/src/adapters/azure/generateURL.js.map +1 -0
- package/dev/dist/src/adapters/azure/handleDelete.js +64 -0
- package/dev/dist/src/adapters/azure/handleDelete.js.map +1 -0
- package/dev/dist/src/adapters/azure/handleUpload.js +81 -0
- package/dev/dist/src/adapters/azure/handleUpload.js.map +1 -0
- package/dev/dist/src/adapters/azure/index.js +43 -0
- package/dev/dist/src/adapters/azure/index.js.map +1 -0
- package/dev/dist/src/adapters/azure/staticHandler.js +82 -0
- package/dev/dist/src/adapters/azure/staticHandler.js.map +1 -0
- package/dev/dist/src/adapters/azure/webpack.js +25 -0
- package/dev/dist/src/adapters/azure/webpack.js.map +1 -0
- package/dev/dist/src/adapters/gcs/generateURL.js +16 -0
- package/dev/dist/src/adapters/gcs/generateURL.js.map +1 -0
- package/dev/dist/src/adapters/gcs/handleDelete.js +63 -0
- package/dev/dist/src/adapters/gcs/handleDelete.js.map +1 -0
- package/dev/dist/src/adapters/gcs/handleUpload.js +73 -0
- package/dev/dist/src/adapters/gcs/handleUpload.js.map +1 -0
- package/dev/dist/src/adapters/gcs/index.js +36 -0
- package/dev/dist/src/adapters/gcs/index.js.map +1 -0
- package/dev/dist/src/adapters/gcs/staticHandler.js +77 -0
- package/dev/dist/src/adapters/gcs/staticHandler.js.map +1 -0
- package/dev/dist/src/adapters/gcs/webpack.js +25 -0
- package/dev/dist/src/adapters/gcs/webpack.js.map +1 -0
- package/dev/dist/src/adapters/s3/generateURL.js +16 -0
- package/dev/dist/src/adapters/s3/generateURL.js.map +1 -0
- package/dev/dist/src/adapters/s3/handleDelete.js +64 -0
- package/dev/dist/src/adapters/s3/handleDelete.js.map +1 -0
- package/dev/dist/src/adapters/s3/handleUpload.js +94 -0
- package/dev/dist/src/adapters/s3/handleUpload.js.map +1 -0
- package/dev/dist/src/adapters/s3/index.js +60 -0
- package/dev/dist/src/adapters/s3/index.js.map +1 -0
- package/dev/dist/src/adapters/s3/staticHandler.js +82 -0
- package/dev/dist/src/adapters/s3/staticHandler.js.map +1 -0
- package/dev/dist/src/adapters/s3/webpack.js +25 -0
- package/dev/dist/src/adapters/s3/webpack.js.map +1 -0
- package/dev/dist/src/fields/getFields.js +119 -0
- package/dev/dist/src/fields/getFields.js.map +1 -0
- package/dev/dist/src/hooks/afterDelete.js +92 -0
- package/dev/dist/src/hooks/afterDelete.js.map +1 -0
- package/dev/dist/src/hooks/afterRead.js +80 -0
- package/dev/dist/src/hooks/afterRead.js.map +1 -0
- package/dev/dist/src/hooks/beforeChange.js +106 -0
- package/dev/dist/src/hooks/beforeChange.js.map +1 -0
- package/dev/dist/src/index.js +6 -0
- package/dev/dist/src/index.js.map +1 -0
- package/dev/dist/src/plugin.js +131 -0
- package/dev/dist/src/plugin.js.map +1 -0
- package/{dist/adapters/s3/fileStub.js → dev/dist/src/types.js} +1 -2
- package/dev/dist/src/types.js.map +1 -0
- package/dev/dist/src/utilities/getFilePrefix.js +81 -0
- package/dev/dist/src/utilities/getFilePrefix.js.map +1 -0
- package/dev/dist/src/utilities/getIncomingFiles.js +38 -0
- package/dev/dist/src/utilities/getIncomingFiles.js.map +1 -0
- package/dev/dist/src/utilities/getRangeFromHeader.js +67 -0
- package/dev/dist/src/utilities/getRangeFromHeader.js.map +1 -0
- package/dev/dist/src/webpack.js +40 -0
- package/dev/dist/src/webpack.js.map +1 -0
- package/dev/nodemon.json +8 -0
- package/dev/package.json +34 -0
- package/dev/src/collections/Media.ts +56 -0
- package/dev/src/collections/Users.ts +23 -0
- package/dev/src/mocks/fsMock.js +1 -0
- package/dev/src/mocks/promisifyMock.js +1 -0
- package/dev/src/payload.config.ts +123 -0
- package/dev/src/server.ts +26 -0
- package/dev/tmp/tmp-1-1688568985997 +0 -0
- package/dev/tmp/tmp-2-1687546883112 +0 -0
- package/dev/tsconfig.json +20 -0
- package/dist/adapters/azure/handleUpload.js +3 -2
- package/dist/adapters/azure/handleUpload.js.map +1 -1
- package/dist/adapters/azure/mock.d.ts +1 -13
- package/dist/adapters/azure/mock.js +4 -11
- package/dist/adapters/azure/mock.js.map +1 -1
- package/dist/adapters/azure/webpack.js +1 -1
- package/dist/adapters/azure/webpack.js.map +1 -1
- package/dist/adapters/gcs/handleUpload.js +3 -2
- package/dist/adapters/gcs/handleUpload.js.map +1 -1
- package/dist/adapters/gcs/index.d.ts +1 -1
- package/dist/adapters/gcs/index.js +2 -1
- package/dist/adapters/gcs/index.js.map +1 -1
- package/dist/adapters/gcs/mock.d.ts +1 -1
- package/dist/adapters/gcs/mock.js +4 -3
- package/dist/adapters/gcs/mock.js.map +1 -1
- package/dist/adapters/s3/handleUpload.js +1 -1
- package/dist/adapters/s3/handleUpload.js.map +1 -1
- package/dist/adapters/s3/mock.d.ts +1 -8
- package/dist/adapters/s3/mock.js +4 -8
- package/dist/adapters/s3/mock.js.map +1 -1
- package/dist/adapters/s3/webpack.js +1 -1
- package/dist/adapters/s3/webpack.js.map +1 -1
- package/dist/admin/fields/getFields.d.ts +7 -0
- package/dist/admin/fields/getFields.js +102 -0
- package/dist/admin/fields/getFields.js.map +1 -0
- package/dist/admin/index.d.ts +3 -0
- package/dist/admin/index.js +40 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/fields/getFields.js +1 -1
- package/dist/fields/getFields.js.map +1 -1
- package/dist/webpack.js +5 -1
- package/dist/webpack.js.map +1 -1
- package/docs/local-dev.md +47 -0
- package/eslint-config/index.js +15 -0
- package/eslint-config/rules/import.js +38 -0
- package/eslint-config/rules/prettier.js +7 -0
- package/eslint-config/rules/style.js +21 -0
- package/eslint-config/rules/typescript.js +628 -0
- package/package.json +1 -1
- package/src/adapters/azure/emulator/docker-compose.yml +16 -0
- package/src/adapters/azure/generateURL.ts +13 -0
- package/src/adapters/azure/handleDelete.ts +16 -0
- package/src/adapters/azure/handleUpload.ts +43 -0
- package/src/adapters/azure/index.ts +48 -0
- package/src/adapters/azure/mock.js +1 -0
- package/src/adapters/azure/staticHandler.ts +38 -0
- package/src/adapters/azure/webpack.ts +21 -0
- package/src/adapters/gcs/emulator/docker-compose.yml +15 -0
- package/src/adapters/gcs/generateURL.ts +16 -0
- package/src/adapters/gcs/handleDelete.ts +16 -0
- package/src/adapters/gcs/handleUpload.ts +36 -0
- package/src/adapters/gcs/index.ts +40 -0
- package/src/adapters/gcs/mock.js +1 -0
- package/src/adapters/gcs/staticHandler.ts +34 -0
- package/src/adapters/gcs/webpack.ts +21 -0
- package/src/adapters/s3/emulator/.localstack/cache/machine.json +1 -0
- package/src/adapters/s3/emulator/.localstack/cache/server.test.pem +127 -0
- package/src/adapters/s3/emulator/.localstack/cache/server.test.pem.crt +99 -0
- package/src/adapters/s3/emulator/.localstack/cache/server.test.pem.key +28 -0
- package/src/adapters/s3/emulator/.localstack/cache/service-catalog-2_1_1_dev-1_29_149.pickle +0 -0
- package/src/adapters/s3/emulator/docker-compose.yml +15 -0
- package/src/adapters/s3/generateURL.ts +14 -0
- package/src/adapters/s3/handleDelete.ts +17 -0
- package/src/adapters/s3/handleUpload.ts +62 -0
- package/src/adapters/s3/index.ts +48 -0
- package/src/adapters/s3/mock.js +1 -0
- package/src/adapters/s3/staticHandler.ts +41 -0
- package/src/adapters/s3/webpack.ts +21 -0
- package/src/admin/fields/getFields.ts +126 -0
- package/src/admin/index.ts +39 -0
- package/src/fields/getFields.ts +155 -0
- package/src/hooks/afterDelete.ts +35 -0
- package/src/hooks/afterRead.ts +38 -0
- package/src/hooks/beforeChange.ts +59 -0
- package/src/index.ts +1 -0
- package/src/plugin.ts +101 -0
- package/src/types.ts +79 -0
- package/src/utilities/getFilePrefix.ts +26 -0
- package/src/utilities/getIncomingFiles.ts +44 -0
- package/src/utilities/getRangeFromHeader.ts +27 -0
- package/src/webpack.ts +48 -0
- package/tsconfig.json +23 -0
- package/yarn-error.log +8163 -0
- package/yarn.lock +8062 -0
- package/dist/adapters/azure/fileStub.d.ts +0 -2
- package/dist/adapters/azure/fileStub.js +0 -4
- package/dist/adapters/azure/fileStub.js.map +0 -1
- package/dist/adapters/s3/fileStub.d.ts +0 -2
- package/dist/adapters/s3/fileStub.js.map +0 -1
- package/dist/adapters/s3/fsMock.d.ts +0 -3
- package/dist/adapters/s3/fsMock.js +0 -3
- package/dist/adapters/s3/fsMock.js.map +0 -1
package/src/plugin.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { Config } from 'payload/config'
|
|
2
|
+
import { extendWebpackConfig } from './webpack'
|
|
3
|
+
import type { PluginOptions } from './types'
|
|
4
|
+
import { getBeforeChangeHook } from './hooks/beforeChange'
|
|
5
|
+
import { getAfterDeleteHook } from './hooks/afterDelete'
|
|
6
|
+
import { getFields } from './fields/getFields'
|
|
7
|
+
|
|
8
|
+
// This plugin extends all targeted collections by offloading uploaded files
|
|
9
|
+
// to cloud storage instead of solely storing files locally.
|
|
10
|
+
|
|
11
|
+
// It is based on an adapter approach, where adapters can be written for any cloud provider.
|
|
12
|
+
// Adapters are responsible for providing four actions that this plugin will use:
|
|
13
|
+
// 1. handleUpload, 2. handleDelete, 3. generateURL, 4. staticHandler
|
|
14
|
+
|
|
15
|
+
// Optionally, the adapter can specify any Webpack config overrides if they are necessary.
|
|
16
|
+
|
|
17
|
+
export const cloudStorage =
|
|
18
|
+
(pluginOptions: PluginOptions) =>
|
|
19
|
+
(incomingConfig: Config): Config => {
|
|
20
|
+
const { collections: allCollectionOptions, enabled } = pluginOptions
|
|
21
|
+
const config = { ...incomingConfig }
|
|
22
|
+
|
|
23
|
+
const webpack = extendWebpackConfig({ options: pluginOptions, config: incomingConfig })
|
|
24
|
+
|
|
25
|
+
config.admin = {
|
|
26
|
+
...(config.admin || {}),
|
|
27
|
+
webpack,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Return early if disabled. Only webpack config mods are applied.
|
|
31
|
+
if (enabled === false) {
|
|
32
|
+
return config
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const initFunctions: Array<() => void> = []
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
...config,
|
|
39
|
+
collections: (config.collections || []).map(existingCollection => {
|
|
40
|
+
const options = allCollectionOptions[existingCollection.slug]
|
|
41
|
+
|
|
42
|
+
if (options?.adapter) {
|
|
43
|
+
const adapter = options.adapter({
|
|
44
|
+
collection: existingCollection,
|
|
45
|
+
prefix: options.prefix,
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
if (adapter.onInit) initFunctions.push(adapter.onInit)
|
|
49
|
+
|
|
50
|
+
const fields = getFields({
|
|
51
|
+
collection: existingCollection,
|
|
52
|
+
disablePayloadAccessControl: options.disablePayloadAccessControl,
|
|
53
|
+
generateFileURL: options.generateFileURL,
|
|
54
|
+
prefix: options.prefix,
|
|
55
|
+
adapter,
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
const handlers = [
|
|
59
|
+
...(typeof existingCollection.upload === 'object' &&
|
|
60
|
+
Array.isArray(existingCollection.upload.handlers)
|
|
61
|
+
? existingCollection.upload.handlers
|
|
62
|
+
: []),
|
|
63
|
+
]
|
|
64
|
+
|
|
65
|
+
if (!options.disablePayloadAccessControl) {
|
|
66
|
+
handlers.push(adapter.staticHandler)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
...existingCollection,
|
|
71
|
+
upload: {
|
|
72
|
+
...(typeof existingCollection.upload === 'object' ? existingCollection.upload : {}),
|
|
73
|
+
handlers,
|
|
74
|
+
disableLocalStorage:
|
|
75
|
+
typeof options.disableLocalStorage === 'boolean'
|
|
76
|
+
? options.disableLocalStorage
|
|
77
|
+
: true,
|
|
78
|
+
},
|
|
79
|
+
hooks: {
|
|
80
|
+
...(existingCollection.hooks || {}),
|
|
81
|
+
beforeChange: [
|
|
82
|
+
...(existingCollection.hooks?.beforeChange || []),
|
|
83
|
+
getBeforeChangeHook({ adapter, collection: existingCollection }),
|
|
84
|
+
],
|
|
85
|
+
afterDelete: [
|
|
86
|
+
...(existingCollection.hooks?.afterDelete || []),
|
|
87
|
+
getAfterDeleteHook({ adapter, collection: existingCollection }),
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
fields,
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return existingCollection
|
|
95
|
+
}),
|
|
96
|
+
onInit: async payload => {
|
|
97
|
+
initFunctions.forEach(fn => fn())
|
|
98
|
+
if (config.onInit) await config.onInit(payload)
|
|
99
|
+
},
|
|
100
|
+
}
|
|
101
|
+
}
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { NextFunction, Response } from 'express'
|
|
2
|
+
import type { TypeWithID } from 'payload/dist/collections/config/types'
|
|
3
|
+
import type { FileData, ImageSize } from 'payload/dist/uploads/types'
|
|
4
|
+
import type { CollectionConfig, PayloadRequest } from 'payload/types'
|
|
5
|
+
import type { Configuration as WebpackConfig } from 'webpack'
|
|
6
|
+
|
|
7
|
+
export interface File {
|
|
8
|
+
buffer: Buffer
|
|
9
|
+
filename: string
|
|
10
|
+
filesize: number
|
|
11
|
+
mimeType: string
|
|
12
|
+
tempFilePath?: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type HandleUpload = (args: {
|
|
16
|
+
collection: CollectionConfig
|
|
17
|
+
req: PayloadRequest
|
|
18
|
+
data: any
|
|
19
|
+
file: File
|
|
20
|
+
}) => Promise<void> | void
|
|
21
|
+
|
|
22
|
+
export interface TypeWithPrefix {
|
|
23
|
+
prefix?: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type HandleDelete = (args: {
|
|
27
|
+
collection: CollectionConfig
|
|
28
|
+
req: PayloadRequest
|
|
29
|
+
doc: TypeWithID & FileData & TypeWithPrefix
|
|
30
|
+
filename: string
|
|
31
|
+
}) => Promise<void> | void
|
|
32
|
+
|
|
33
|
+
export type GenerateURL = (args: {
|
|
34
|
+
filename: string
|
|
35
|
+
collection: CollectionConfig
|
|
36
|
+
prefix?: string
|
|
37
|
+
}) => string | Promise<string>
|
|
38
|
+
|
|
39
|
+
export type StaticHandler = (
|
|
40
|
+
req: PayloadRequest,
|
|
41
|
+
res: Response,
|
|
42
|
+
next: NextFunction,
|
|
43
|
+
) => Promise<unknown> | unknown
|
|
44
|
+
|
|
45
|
+
export interface GeneratedAdapter {
|
|
46
|
+
handleUpload: HandleUpload
|
|
47
|
+
handleDelete: HandleDelete
|
|
48
|
+
generateURL: GenerateURL
|
|
49
|
+
staticHandler: StaticHandler
|
|
50
|
+
webpack?: (config: WebpackConfig) => WebpackConfig
|
|
51
|
+
onInit?: () => void
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type Adapter = (args: { collection: CollectionConfig; prefix?: string }) => GeneratedAdapter
|
|
55
|
+
|
|
56
|
+
export type GenerateFileURL = (args: {
|
|
57
|
+
collection: CollectionConfig
|
|
58
|
+
filename: string
|
|
59
|
+
prefix?: string
|
|
60
|
+
size?: ImageSize
|
|
61
|
+
}) => Promise<string> | string
|
|
62
|
+
|
|
63
|
+
export interface CollectionOptions {
|
|
64
|
+
disableLocalStorage?: boolean
|
|
65
|
+
disablePayloadAccessControl?: true
|
|
66
|
+
generateFileURL?: GenerateFileURL
|
|
67
|
+
prefix?: string
|
|
68
|
+
adapter: Adapter | null
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface PluginOptions {
|
|
72
|
+
/**
|
|
73
|
+
* Whether or not to enable the plugin
|
|
74
|
+
*
|
|
75
|
+
* Default: true
|
|
76
|
+
*/
|
|
77
|
+
enabled?: boolean
|
|
78
|
+
collections: Record<string, CollectionOptions>
|
|
79
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CollectionConfig, PayloadRequest } from 'payload/types'
|
|
2
|
+
import { IncomingUploadType } from 'payload/dist/uploads/types'
|
|
3
|
+
|
|
4
|
+
export async function getFilePrefix({
|
|
5
|
+
req,
|
|
6
|
+
collection,
|
|
7
|
+
}: {
|
|
8
|
+
req: PayloadRequest
|
|
9
|
+
collection: CollectionConfig
|
|
10
|
+
}): Promise<string> {
|
|
11
|
+
const imageSizes = (collection?.upload as IncomingUploadType)?.imageSizes || []
|
|
12
|
+
const files = await req.payload.find({
|
|
13
|
+
collection: collection.slug,
|
|
14
|
+
where: {
|
|
15
|
+
or: [
|
|
16
|
+
{
|
|
17
|
+
filename: { equals: req.params.filename },
|
|
18
|
+
},
|
|
19
|
+
...imageSizes.map(imageSize => ({
|
|
20
|
+
[`sizes.${imageSize.name}.filename`]: { equals: req.params.filename },
|
|
21
|
+
})),
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
})
|
|
25
|
+
return files?.docs?.[0]?.prefix || ''
|
|
26
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { FileData } from 'payload/dist/uploads/types'
|
|
2
|
+
import type { PayloadRequest } from 'payload/types'
|
|
3
|
+
import type { File } from '../types'
|
|
4
|
+
|
|
5
|
+
export function getIncomingFiles({
|
|
6
|
+
req,
|
|
7
|
+
data,
|
|
8
|
+
}: {
|
|
9
|
+
data: Partial<FileData>
|
|
10
|
+
req: PayloadRequest
|
|
11
|
+
}): File[] {
|
|
12
|
+
const file = req.files?.file
|
|
13
|
+
|
|
14
|
+
let files: File[] = []
|
|
15
|
+
|
|
16
|
+
if (file && data.filename && data.mimeType) {
|
|
17
|
+
const mainFile: File = {
|
|
18
|
+
filename: data.filename,
|
|
19
|
+
mimeType: data.mimeType,
|
|
20
|
+
buffer: file.data,
|
|
21
|
+
tempFilePath: file.tempFilePath,
|
|
22
|
+
filesize: file.size,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
files = [mainFile]
|
|
26
|
+
|
|
27
|
+
if (data?.sizes) {
|
|
28
|
+
Object.entries(data.sizes).forEach(([key, resizedFileData]) => {
|
|
29
|
+
if (req.payloadUploadSizes?.[key] && data.mimeType) {
|
|
30
|
+
files = files.concat([
|
|
31
|
+
{
|
|
32
|
+
filename: `${resizedFileData.filename}`,
|
|
33
|
+
mimeType: data.mimeType,
|
|
34
|
+
buffer: req.payloadUploadSizes[key],
|
|
35
|
+
filesize: req.payloadUploadSizes[key].length,
|
|
36
|
+
},
|
|
37
|
+
])
|
|
38
|
+
}
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return files
|
|
44
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { BlockBlobClient } from '@azure/storage-blob'
|
|
2
|
+
import parseRange from 'range-parser'
|
|
3
|
+
|
|
4
|
+
const getRangeFromHeader = async (
|
|
5
|
+
blockBlobClient: BlockBlobClient,
|
|
6
|
+
rangeHeader?: string,
|
|
7
|
+
): Promise<{ start: number; end: number | undefined }> => {
|
|
8
|
+
const fullRange = { start: 0, end: undefined }
|
|
9
|
+
|
|
10
|
+
if (!rangeHeader) {
|
|
11
|
+
return fullRange
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const size = await blockBlobClient.getProperties().then(props => props.contentLength)
|
|
15
|
+
if (size === undefined) {
|
|
16
|
+
return fullRange
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const range = parseRange(size, rangeHeader)
|
|
20
|
+
if (range === -1 || range === -2 || range.type !== 'bytes' || range.length !== 1) {
|
|
21
|
+
return fullRange
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return range[0]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default getRangeFromHeader
|
package/src/webpack.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import path from 'path'
|
|
2
|
+
import type { Config } from 'payload/config'
|
|
3
|
+
import type { Configuration as WebpackConfig } from 'webpack'
|
|
4
|
+
import type { GeneratedAdapter, PluginOptions } from './types'
|
|
5
|
+
|
|
6
|
+
interface Args {
|
|
7
|
+
config: Config
|
|
8
|
+
options: PluginOptions
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const extendWebpackConfig =
|
|
12
|
+
({ config, options }: Args): ((webpackConfig: WebpackConfig) => WebpackConfig) =>
|
|
13
|
+
webpackConfig => {
|
|
14
|
+
const existingWebpackConfig =
|
|
15
|
+
typeof config.admin?.webpack === 'function'
|
|
16
|
+
? config.admin.webpack(webpackConfig)
|
|
17
|
+
: webpackConfig
|
|
18
|
+
|
|
19
|
+
const newConfig: WebpackConfig = {
|
|
20
|
+
...existingWebpackConfig,
|
|
21
|
+
resolve: {
|
|
22
|
+
...(existingWebpackConfig.resolve || {}),
|
|
23
|
+
alias: {
|
|
24
|
+
...(existingWebpackConfig.resolve?.alias ? existingWebpackConfig.resolve.alias : {}),
|
|
25
|
+
'@payloadcms/plugin-cloud-storage': path.resolve(__dirname, './admin/index.js'),
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return Object.entries(options.collections).reduce(
|
|
31
|
+
(resultingWebpackConfig, [slug, collectionOptions]) => {
|
|
32
|
+
const matchedCollection = config.collections?.find(coll => coll.slug === slug)
|
|
33
|
+
|
|
34
|
+
if (matchedCollection && typeof collectionOptions.adapter === 'function') {
|
|
35
|
+
const adapter: GeneratedAdapter = collectionOptions.adapter({
|
|
36
|
+
collection: matchedCollection,
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
if (adapter.webpack) {
|
|
40
|
+
return adapter.webpack(resultingWebpackConfig)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return resultingWebpackConfig
|
|
45
|
+
},
|
|
46
|
+
newConfig,
|
|
47
|
+
)
|
|
48
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"lib": [
|
|
4
|
+
"dom",
|
|
5
|
+
"dom.iterable",
|
|
6
|
+
"esnext"
|
|
7
|
+
],
|
|
8
|
+
"target": "es5",
|
|
9
|
+
"outDir": "./dist",
|
|
10
|
+
"allowJs": true,
|
|
11
|
+
"module": "commonjs",
|
|
12
|
+
"sourceMap": true,
|
|
13
|
+
"jsx": "react",
|
|
14
|
+
"esModuleInterop": true,
|
|
15
|
+
"declaration": true,
|
|
16
|
+
"declarationDir": "./dist",
|
|
17
|
+
"skipLibCheck": true,
|
|
18
|
+
"strict": true,
|
|
19
|
+
},
|
|
20
|
+
"include": [
|
|
21
|
+
"src/**/*"
|
|
22
|
+
],
|
|
23
|
+
}
|