@strapi/data-transfer 5.48.0 → 5.48.1
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/directory/providers/destination/index.d.ts +1 -1
- package/dist/directory/providers/destination/index.d.ts.map +1 -1
- package/dist/directory/providers/destination/index.js.map +1 -1
- package/dist/directory/providers/destination/index.mjs.map +1 -1
- package/dist/directory/providers/source/index.d.ts +1 -1
- package/dist/directory/providers/source/index.d.ts.map +1 -1
- package/dist/directory/providers/source/index.js.map +1 -1
- package/dist/directory/providers/source/index.mjs.map +1 -1
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/index.mjs.map +1 -1
- package/dist/engine/validation/provider.d.ts +1 -1
- package/dist/engine/validation/provider.d.ts.map +1 -1
- package/dist/engine/validation/provider.js.map +1 -1
- package/dist/engine/validation/provider.mjs.map +1 -1
- package/dist/errors/providers.d.ts +1 -1
- package/dist/errors/providers.d.ts.map +1 -1
- package/dist/errors/providers.js.map +1 -1
- package/dist/errors/providers.mjs.map +1 -1
- package/dist/file/providers/destination/index.d.ts +1 -1
- package/dist/file/providers/destination/index.d.ts.map +1 -1
- package/dist/file/providers/destination/index.js.map +1 -1
- package/dist/file/providers/destination/index.mjs.map +1 -1
- package/dist/file/providers/source/index.d.ts +1 -1
- package/dist/file/providers/source/index.d.ts.map +1 -1
- package/dist/file/providers/source/index.js.map +1 -1
- package/dist/file/providers/source/index.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/assets-destination-writable.d.ts +9 -4
- package/dist/strapi/providers/local-destination/assets-destination-writable.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/assets-destination-writable.js +67 -49
- package/dist/strapi/providers/local-destination/assets-destination-writable.js.map +1 -1
- package/dist/strapi/providers/local-destination/assets-destination-writable.mjs +67 -49
- package/dist/strapi/providers/local-destination/assets-destination-writable.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/index.d.ts +1 -1
- package/dist/strapi/providers/local-destination/index.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/index.js.map +1 -1
- package/dist/strapi/providers/local-destination/index.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.d.ts +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/entities.d.ts +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/entities.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/entities.js +13 -25
- package/dist/strapi/providers/local-destination/strategies/restore/entities.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs +14 -26
- package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/index.js +0 -4
- package/dist/strapi/providers/local-destination/strategies/restore/index.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/index.mjs +0 -4
- package/dist/strapi/providers/local-destination/strategies/restore/index.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/links.d.ts +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/links.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/links.js +22 -3
- package/dist/strapi/providers/local-destination/strategies/restore/links.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/links.mjs +22 -3
- package/dist/strapi/providers/local-destination/strategies/restore/links.mjs.map +1 -1
- package/dist/strapi/providers/local-source/assets.d.ts +1 -1
- package/dist/strapi/providers/local-source/assets.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/assets.js.map +1 -1
- package/dist/strapi/providers/local-source/assets.mjs.map +1 -1
- package/dist/strapi/providers/local-source/configuration.js.map +1 -1
- package/dist/strapi/providers/local-source/configuration.mjs.map +1 -1
- package/dist/strapi/providers/local-source/entities.d.ts +3 -1
- package/dist/strapi/providers/local-source/entities.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/entities.js +7 -3
- package/dist/strapi/providers/local-source/entities.js.map +1 -1
- package/dist/strapi/providers/local-source/entities.mjs +7 -3
- package/dist/strapi/providers/local-source/entities.mjs.map +1 -1
- package/dist/strapi/providers/local-source/estimate-asset-totals.d.ts +1 -1
- package/dist/strapi/providers/local-source/estimate-asset-totals.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/estimate-asset-totals.js.map +1 -1
- package/dist/strapi/providers/local-source/estimate-asset-totals.mjs.map +1 -1
- package/dist/strapi/providers/local-source/index.d.ts +2 -2
- package/dist/strapi/providers/local-source/index.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/index.js +6 -1
- package/dist/strapi/providers/local-source/index.js.map +1 -1
- package/dist/strapi/providers/local-source/index.mjs +6 -1
- package/dist/strapi/providers/local-source/index.mjs.map +1 -1
- package/dist/strapi/providers/local-source/links.js.map +1 -1
- package/dist/strapi/providers/local-source/links.mjs.map +1 -1
- package/dist/strapi/providers/remote-destination/index.d.ts +2 -2
- package/dist/strapi/providers/remote-destination/index.d.ts.map +1 -1
- package/dist/strapi/providers/remote-destination/index.js +24 -3
- package/dist/strapi/providers/remote-destination/index.js.map +1 -1
- package/dist/strapi/providers/remote-destination/index.mjs +25 -4
- package/dist/strapi/providers/remote-destination/index.mjs.map +1 -1
- package/dist/strapi/providers/remote-source/index.d.ts +2 -2
- package/dist/strapi/providers/remote-source/index.d.ts.map +1 -1
- package/dist/strapi/providers/remote-source/index.js.map +1 -1
- package/dist/strapi/providers/remote-source/index.mjs.map +1 -1
- package/dist/strapi/providers/utils.d.ts +2 -2
- package/dist/strapi/providers/utils.d.ts.map +1 -1
- package/dist/strapi/providers/utils.js.map +1 -1
- package/dist/strapi/providers/utils.mjs.map +1 -1
- package/dist/strapi/queries/link.d.ts +1 -1
- package/dist/strapi/queries/link.d.ts.map +1 -1
- package/dist/strapi/queries/link.js.map +1 -1
- package/dist/strapi/queries/link.mjs.map +1 -1
- package/dist/strapi/remote/flows/index.d.ts +1 -1
- package/dist/strapi/remote/flows/index.d.ts.map +1 -1
- package/dist/strapi/remote/flows/index.js.map +1 -1
- package/dist/strapi/remote/flows/index.mjs.map +1 -1
- package/dist/strapi/remote/handlers/pull.d.ts +1 -1
- package/dist/strapi/remote/handlers/pull.d.ts.map +1 -1
- package/dist/strapi/remote/handlers/pull.js +3 -3
- package/dist/strapi/remote/handlers/pull.js.map +1 -1
- package/dist/strapi/remote/handlers/pull.mjs +3 -3
- package/dist/strapi/remote/handlers/pull.mjs.map +1 -1
- package/dist/strapi/remote/handlers/push.d.ts +1 -1
- package/dist/strapi/remote/handlers/push.d.ts.map +1 -1
- package/dist/strapi/remote/handlers/push.js +7 -1
- package/dist/strapi/remote/handlers/push.js.map +1 -1
- package/dist/strapi/remote/handlers/push.mjs +7 -1
- package/dist/strapi/remote/handlers/push.mjs.map +1 -1
- package/dist/strapi/remote/handlers/utils.d.ts +1 -1
- package/dist/strapi/remote/handlers/utils.d.ts.map +1 -1
- package/dist/strapi/remote/handlers/utils.js.map +1 -1
- package/dist/strapi/remote/handlers/utils.mjs.map +1 -1
- package/dist/types/common-entities.d.ts +152 -0
- package/dist/types/common-entities.d.ts.map +1 -0
- package/dist/types/encryption.d.ts +11 -0
- package/dist/types/encryption.d.ts.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/providers.d.ts +50 -0
- package/dist/types/providers.d.ts.map +1 -0
- package/dist/types/remote/index.d.ts +2 -0
- package/dist/types/remote/index.d.ts.map +1 -0
- package/dist/types/remote/protocol/auth.d.ts +5 -0
- package/dist/types/remote/protocol/auth.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/commands.d.ts +37 -0
- package/dist/types/remote/protocol/client/commands.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/index.d.ts +9 -0
- package/dist/types/remote/protocol/client/index.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/transfer/action.d.ts +5 -0
- package/dist/types/remote/protocol/client/transfer/action.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/transfer/index.d.ts +12 -0
- package/dist/types/remote/protocol/client/transfer/index.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/transfer/pull.d.ts +25 -0
- package/dist/types/remote/protocol/client/transfer/pull.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/transfer/push.d.ts +29 -0
- package/dist/types/remote/protocol/client/transfer/push.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/transfer/utils.d.ts +49 -0
- package/dist/types/remote/protocol/client/transfer/utils.d.ts.map +1 -0
- package/dist/types/remote/protocol/index.d.ts +4 -0
- package/dist/types/remote/protocol/index.d.ts.map +1 -0
- package/dist/types/remote/protocol/server/error.d.ts +18 -0
- package/dist/types/remote/protocol/server/error.d.ts.map +1 -0
- package/dist/types/remote/protocol/server/index.d.ts +3 -0
- package/dist/types/remote/protocol/server/index.d.ts.map +1 -0
- package/dist/types/remote/protocol/server/messaging.d.ts +37 -0
- package/dist/types/remote/protocol/server/messaging.d.ts.map +1 -0
- package/dist/types/transfer-engine.d.ts +149 -0
- package/dist/types/transfer-engine.d.ts.map +1 -0
- package/dist/types/utils.d.ts +83 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/utils/components.d.ts +21 -1
- package/dist/utils/components.d.ts.map +1 -1
- package/dist/utils/components.js +69 -21
- package/dist/utils/components.js.map +1 -1
- package/dist/utils/components.mjs +70 -22
- package/dist/utils/components.mjs.map +1 -1
- package/dist/utils/encryption/decrypt.d.ts +1 -1
- package/dist/utils/encryption/decrypt.d.ts.map +1 -1
- package/dist/utils/encryption/decrypt.js.map +1 -1
- package/dist/utils/encryption/decrypt.mjs.map +1 -1
- package/dist/utils/encryption/encrypt.d.ts +1 -1
- package/dist/utils/encryption/encrypt.d.ts.map +1 -1
- package/dist/utils/encryption/encrypt.js.map +1 -1
- package/dist/utils/encryption/encrypt.mjs.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +1 -1
- package/dist/utils/middleware.d.ts +1 -1
- package/dist/utils/middleware.d.ts.map +1 -1
- package/dist/utils/middleware.js.map +1 -1
- package/dist/utils/middleware.mjs.map +1 -1
- package/dist/utils/transaction.d.ts +1 -1
- package/dist/utils/transaction.d.ts.map +1 -1
- package/dist/utils/transaction.js.map +1 -1
- package/dist/utils/transaction.mjs.map +1 -1
- package/dist/utils/transfer-asset-chunk.d.ts +22 -0
- package/dist/utils/transfer-asset-chunk.d.ts.map +1 -1
- package/dist/utils/transfer-asset-chunk.js +25 -0
- package/dist/utils/transfer-asset-chunk.js.map +1 -1
- package/dist/utils/transfer-asset-chunk.mjs +25 -1
- package/dist/utils/transfer-asset-chunk.mjs.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.mjs","sources":["../../../../src/strapi/providers/local-source/assets.ts"],"sourcesContent":["import { join } from 'path';\nimport { Duplex, PassThrough, Readable } from 'stream';\nimport { stat, createReadStream, ReadStream } from 'fs-extra';\nimport * as webStream from 'stream/web';\nimport type { Core } from '@strapi/types';\n\nimport type { IAsset, IFile } from '../../../../types';\n\nfunction getFileStream(\n filepath: string,\n strapi: Core.Strapi,\n isLocal = false\n): PassThrough | ReadStream {\n if (isLocal) {\n // Todo: handle errors\n return createReadStream(filepath);\n }\n\n const readableStream = new PassThrough();\n\n // fetch the image from remote url and stream it\n strapi\n .fetch(filepath)\n .then((res: Response) => {\n if (res.status !== 200) {\n readableStream.emit('error', new Error(`Request failed with status code ${res.status}`));\n return;\n }\n\n if (res.body) {\n // pipe the image data\n Readable.fromWeb(res.body as webStream.ReadableStream<Uint8Array>).pipe(readableStream);\n } else {\n readableStream.emit('error', new Error('Empty data found for file'));\n }\n })\n .catch((error: unknown) => {\n readableStream.emit('error', error);\n });\n\n return readableStream;\n}\n\nexport function getFileStatsForTransfer(\n filepath: string,\n strapi: Core.Strapi,\n isLocal = false\n): Promise<{ size: number }> {\n if (isLocal) {\n return stat(filepath);\n }\n return new Promise((resolve, reject) => {\n strapi\n .fetch(filepath)\n .then((res: Response) => {\n if (res.status !== 200) {\n reject(new Error(`Request failed with status code ${res.status}`));\n return;\n }\n\n const contentLength = res.headers.get('content-length');\n const stats = {\n size: contentLength ? parseInt(contentLength, 10) : 0,\n };\n\n resolve(stats);\n })\n .catch((error: unknown) => {\n reject(error);\n });\n });\n}\n\nexport async function signUploadFileForTransfer(strapi: Core.Strapi, file: IFile) {\n const { provider } = strapi.plugins.upload;\n const { provider: providerName } = strapi.config.get('plugin.upload') as { provider: string };\n const isPrivate = await provider.isPrivate();\n if (file?.provider === providerName && isPrivate) {\n const signUrl = async (f: IFile) => {\n const signedUrl = await provider.getSignedUrl(f);\n f.url = signedUrl.url;\n };\n\n await signUrl(file);\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n await signUrl(file.formats[format]);\n }\n }\n }\n}\n\nconst missingAssetWarningMessage = (file: IFile, filepath: string, format?: string): string => {\n const formatPart = format ? ` (format: ${format})` : '';\n return `[Data transfer] Media item ${file.id} (hash: ${file.hash}) exists in database but no corresponding file was found to transfer${formatPart}. Path: ${filepath}`;\n};\n\n/**\n * Generate and consume assets streams in order to stream each file individually\n */\nexport const createAssetsStream = (\n strapi: Core.Strapi,\n options: { onWarning?: (message: string) => void } = {}\n): Duplex => {\n const warnMissingAsset = (message: string) => {\n strapi.log.warn(message);\n options.onWarning?.(message);\n };\n\n const generator: () => AsyncGenerator<IAsset, void> = async function* () {\n const stream: Readable = strapi.db\n .queryBuilder('plugin::upload.file')\n // Create a query builder instance (default type is 'select')\n // Fetch all columns\n .select('*')\n // Get a readable stream\n .stream();\n\n for await (const file of stream) {\n const isLocalProvider = file.provider === 'local';\n if (!isLocalProvider) {\n await signUploadFileForTransfer(strapi, file);\n }\n const filepath = isLocalProvider ? join(strapi.dirs.static.public, file.url) : file.url;\n let stats: { size: number };\n try {\n stats = await getFileStatsForTransfer(filepath, strapi, isLocalProvider);\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n warnMissingAsset(missingAssetWarningMessage(file, filepath));\n continue;\n }\n throw err;\n }\n const stream = getFileStream(filepath, strapi, isLocalProvider);\n\n yield {\n metadata: file,\n filepath,\n filename: file.hash + file.ext,\n stream,\n stats: { size: stats.size },\n };\n\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n const fileFormat = file.formats[format];\n const fileFormatFilepath = isLocalProvider\n ? join(strapi.dirs.static.public, fileFormat.url)\n : fileFormat.url;\n let fileFormatStats: { size: number };\n try {\n fileFormatStats = await getFileStatsForTransfer(\n fileFormatFilepath,\n strapi,\n isLocalProvider\n );\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n warnMissingAsset(missingAssetWarningMessage(file, fileFormatFilepath, format));\n continue;\n }\n throw err;\n }\n const fileFormatStream = getFileStream(fileFormatFilepath, strapi, isLocalProvider);\n const metadata = { ...fileFormat, type: format, id: file.id, mainHash: file.hash };\n yield {\n metadata,\n filepath: fileFormatFilepath,\n filename: fileFormat.hash + fileFormat.ext,\n stream: fileFormatStream,\n stats: { size: fileFormatStats.size },\n };\n }\n }\n }\n };\n\n return Duplex.from(generator());\n};\n"],"names":["getFileStream","filepath","strapi","isLocal","createReadStream","readableStream","PassThrough","fetch","then","res","status","emit","Error","body","Readable","fromWeb","pipe","catch","error","getFileStatsForTransfer","stat","Promise","resolve","reject","contentLength","headers","get","stats","size","parseInt","signUploadFileForTransfer","file","provider","plugins","upload","providerName","config","isPrivate","signUrl","f","signedUrl","getSignedUrl","url","formats","format","Object","keys","missingAssetWarningMessage","formatPart","id","hash","createAssetsStream","options","warnMissingAsset","message","log","warn","onWarning","generator","stream","db","queryBuilder","select","isLocalProvider","join","dirs","static","public","err","code","undefined","metadata","filename","ext","fileFormat","fileFormatFilepath","fileFormatStats","fileFormatStream","type","mainHash","Duplex","from"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assets.mjs","sources":["../../../../src/strapi/providers/local-source/assets.ts"],"sourcesContent":["import { join } from 'path';\nimport { Duplex, PassThrough, Readable } from 'stream';\nimport { stat, createReadStream, ReadStream } from 'fs-extra';\nimport * as webStream from 'stream/web';\nimport type { Core } from '@strapi/types';\n\nimport type { IAsset, IFile } from '../../../types';\n\nfunction getFileStream(\n filepath: string,\n strapi: Core.Strapi,\n isLocal = false\n): PassThrough | ReadStream {\n if (isLocal) {\n // Todo: handle errors\n return createReadStream(filepath);\n }\n\n const readableStream = new PassThrough();\n\n // fetch the image from remote url and stream it\n strapi\n .fetch(filepath)\n .then((res: Response) => {\n if (res.status !== 200) {\n readableStream.emit('error', new Error(`Request failed with status code ${res.status}`));\n return;\n }\n\n if (res.body) {\n // pipe the image data\n Readable.fromWeb(res.body as webStream.ReadableStream<Uint8Array>).pipe(readableStream);\n } else {\n readableStream.emit('error', new Error('Empty data found for file'));\n }\n })\n .catch((error: unknown) => {\n readableStream.emit('error', error);\n });\n\n return readableStream;\n}\n\nexport function getFileStatsForTransfer(\n filepath: string,\n strapi: Core.Strapi,\n isLocal = false\n): Promise<{ size: number }> {\n if (isLocal) {\n return stat(filepath);\n }\n return new Promise((resolve, reject) => {\n strapi\n .fetch(filepath)\n .then((res: Response) => {\n if (res.status !== 200) {\n reject(new Error(`Request failed with status code ${res.status}`));\n return;\n }\n\n const contentLength = res.headers.get('content-length');\n const stats = {\n size: contentLength ? parseInt(contentLength, 10) : 0,\n };\n\n resolve(stats);\n })\n .catch((error: unknown) => {\n reject(error);\n });\n });\n}\n\nexport async function signUploadFileForTransfer(strapi: Core.Strapi, file: IFile) {\n const { provider } = strapi.plugins.upload;\n const { provider: providerName } = strapi.config.get('plugin.upload') as { provider: string };\n const isPrivate = await provider.isPrivate();\n if (file?.provider === providerName && isPrivate) {\n const signUrl = async (f: IFile) => {\n const signedUrl = await provider.getSignedUrl(f);\n f.url = signedUrl.url;\n };\n\n await signUrl(file);\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n await signUrl(file.formats[format]);\n }\n }\n }\n}\n\nconst missingAssetWarningMessage = (file: IFile, filepath: string, format?: string): string => {\n const formatPart = format ? ` (format: ${format})` : '';\n return `[Data transfer] Media item ${file.id} (hash: ${file.hash}) exists in database but no corresponding file was found to transfer${formatPart}. Path: ${filepath}`;\n};\n\n/**\n * Generate and consume assets streams in order to stream each file individually\n */\nexport const createAssetsStream = (\n strapi: Core.Strapi,\n options: { onWarning?: (message: string) => void } = {}\n): Duplex => {\n const warnMissingAsset = (message: string) => {\n strapi.log.warn(message);\n options.onWarning?.(message);\n };\n\n const generator: () => AsyncGenerator<IAsset, void> = async function* () {\n const stream: Readable = strapi.db\n .queryBuilder('plugin::upload.file')\n // Create a query builder instance (default type is 'select')\n // Fetch all columns\n .select('*')\n // Get a readable stream\n .stream();\n\n for await (const file of stream) {\n const isLocalProvider = file.provider === 'local';\n if (!isLocalProvider) {\n await signUploadFileForTransfer(strapi, file);\n }\n const filepath = isLocalProvider ? join(strapi.dirs.static.public, file.url) : file.url;\n let stats: { size: number };\n try {\n stats = await getFileStatsForTransfer(filepath, strapi, isLocalProvider);\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n warnMissingAsset(missingAssetWarningMessage(file, filepath));\n continue;\n }\n throw err;\n }\n const stream = getFileStream(filepath, strapi, isLocalProvider);\n\n yield {\n metadata: file,\n filepath,\n filename: file.hash + file.ext,\n stream,\n stats: { size: stats.size },\n };\n\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n const fileFormat = file.formats[format];\n const fileFormatFilepath = isLocalProvider\n ? join(strapi.dirs.static.public, fileFormat.url)\n : fileFormat.url;\n let fileFormatStats: { size: number };\n try {\n fileFormatStats = await getFileStatsForTransfer(\n fileFormatFilepath,\n strapi,\n isLocalProvider\n );\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n warnMissingAsset(missingAssetWarningMessage(file, fileFormatFilepath, format));\n continue;\n }\n throw err;\n }\n const fileFormatStream = getFileStream(fileFormatFilepath, strapi, isLocalProvider);\n const metadata = { ...fileFormat, type: format, id: file.id, mainHash: file.hash };\n yield {\n metadata,\n filepath: fileFormatFilepath,\n filename: fileFormat.hash + fileFormat.ext,\n stream: fileFormatStream,\n stats: { size: fileFormatStats.size },\n };\n }\n }\n }\n };\n\n return Duplex.from(generator());\n};\n"],"names":["getFileStream","filepath","strapi","isLocal","createReadStream","readableStream","PassThrough","fetch","then","res","status","emit","Error","body","Readable","fromWeb","pipe","catch","error","getFileStatsForTransfer","stat","Promise","resolve","reject","contentLength","headers","get","stats","size","parseInt","signUploadFileForTransfer","file","provider","plugins","upload","providerName","config","isPrivate","signUrl","f","signedUrl","getSignedUrl","url","formats","format","Object","keys","missingAssetWarningMessage","formatPart","id","hash","createAssetsStream","options","warnMissingAsset","message","log","warn","onWarning","generator","stream","db","queryBuilder","select","isLocalProvider","join","dirs","static","public","err","code","undefined","metadata","filename","ext","fileFormat","fileFormatFilepath","fileFormatStats","fileFormatStream","type","mainHash","Duplex","from"],"mappings":";;;;AAQA,SAASA,cACPC,QAAgB,EAChBC,MAAmB,EACnBC,UAAU,KAAK,EAAA;AAEf,IAAA,IAAIA,OAAAA,EAAS;;AAEX,QAAA,OAAOC,gBAAAA,CAAiBH,QAAAA,CAAAA;AAC1B,IAAA;AAEA,IAAA,MAAMI,iBAAiB,IAAIC,WAAAA,EAAAA;;AAG3BJ,IAAAA,MAAAA,CACGK,KAAK,CAACN,QAAAA,CAAAA,CACNO,IAAI,CAAC,CAACC,GAAAA,GAAAA;QACL,IAAIA,GAAAA,CAAIC,MAAM,KAAK,GAAA,EAAK;YACtBL,cAAAA,CAAeM,IAAI,CAAC,OAAA,EAAS,IAAIC,KAAAA,CAAM,CAAC,gCAAgC,EAAEH,GAAAA,CAAIC,MAAM,CAAA,CAAE,CAAA,CAAA;AACtF,YAAA;AACF,QAAA;QAEA,IAAID,GAAAA,CAAII,IAAI,EAAE;;AAEZC,YAAAA,QAAAA,CAASC,OAAO,CAACN,GAAAA,CAAII,IAAI,CAAA,CAA0CG,IAAI,CAACX,cAAAA,CAAAA;QAC1E,CAAA,MAAO;AACLA,YAAAA,cAAAA,CAAeM,IAAI,CAAC,OAAA,EAAS,IAAIC,KAAAA,CAAM,2BAAA,CAAA,CAAA;AACzC,QAAA;IACF,CAAA,CAAA,CACCK,KAAK,CAAC,CAACC,KAAAA,GAAAA;QACNb,cAAAA,CAAeM,IAAI,CAAC,OAAA,EAASO,KAAAA,CAAAA;AAC/B,IAAA,CAAA,CAAA;IAEF,OAAOb,cAAAA;AACT;AAEO,SAASc,uBAAAA,CACdlB,QAAgB,EAChBC,MAAmB,EACnBC,UAAU,KAAK,EAAA;AAEf,IAAA,IAAIA,OAAAA,EAAS;AACX,QAAA,OAAOiB,IAAAA,CAAKnB,QAAAA,CAAAA;AACd,IAAA;IACA,OAAO,IAAIoB,OAAAA,CAAQ,CAACC,OAAAA,EAASC,MAAAA,GAAAA;AAC3BrB,QAAAA,MAAAA,CACGK,KAAK,CAACN,QAAAA,CAAAA,CACNO,IAAI,CAAC,CAACC,GAAAA,GAAAA;YACL,IAAIA,GAAAA,CAAIC,MAAM,KAAK,GAAA,EAAK;AACtBa,gBAAAA,MAAAA,CAAO,IAAIX,KAAAA,CAAM,CAAC,gCAAgC,EAAEH,GAAAA,CAAIC,MAAM,CAAA,CAAE,CAAA,CAAA;AAChE,gBAAA;AACF,YAAA;AAEA,YAAA,MAAMc,aAAAA,GAAgBf,GAAAA,CAAIgB,OAAO,CAACC,GAAG,CAAC,gBAAA,CAAA;AACtC,YAAA,MAAMC,KAAAA,GAAQ;gBACZC,IAAAA,EAAMJ,aAAAA,GAAgBK,QAAAA,CAASL,aAAAA,EAAe,EAAA,CAAA,GAAM;AACtD,aAAA;YAEAF,OAAAA,CAAQK,KAAAA,CAAAA;QACV,CAAA,CAAA,CACCV,KAAK,CAAC,CAACC,KAAAA,GAAAA;YACNK,MAAAA,CAAOL,KAAAA,CAAAA;AACT,QAAA,CAAA,CAAA;AACJ,IAAA,CAAA,CAAA;AACF;AAEO,eAAeY,yBAAAA,CAA0B5B,MAAmB,EAAE6B,IAAW,EAAA;AAC9E,IAAA,MAAM,EAAEC,QAAQ,EAAE,GAAG9B,MAAAA,CAAO+B,OAAO,CAACC,MAAM;IAC1C,MAAM,EAAEF,UAAUG,YAAY,EAAE,GAAGjC,MAAAA,CAAOkC,MAAM,CAACV,GAAG,CAAC,eAAA,CAAA;IACrD,MAAMW,SAAAA,GAAY,MAAML,QAAAA,CAASK,SAAS,EAAA;IAC1C,IAAIN,IAAAA,EAAMC,QAAAA,KAAaG,YAAAA,IAAgBE,SAAAA,EAAW;AAChD,QAAA,MAAMC,UAAU,OAAOC,CAAAA,GAAAA;AACrB,YAAA,MAAMC,SAAAA,GAAY,MAAMR,QAAAA,CAASS,YAAY,CAACF,CAAAA,CAAAA;YAC9CA,CAAAA,CAAEG,GAAG,GAAGF,SAAAA,CAAUE,GAAG;AACvB,QAAA,CAAA;AAEA,QAAA,MAAMJ,OAAAA,CAAQP,IAAAA,CAAAA;QACd,IAAIA,IAAAA,CAAKY,OAAO,EAAE;AAChB,YAAA,KAAK,MAAMC,MAAAA,IAAUC,MAAAA,CAAOC,IAAI,CAACf,IAAAA,CAAKY,OAAO,CAAA,CAAG;AAC9C,gBAAA,MAAML,OAAAA,CAAQP,IAAAA,CAAKY,OAAO,CAACC,MAAAA,CAAO,CAAA;AACpC,YAAA;AACF,QAAA;AACF,IAAA;AACF;AAEA,MAAMG,0BAAAA,GAA6B,CAAChB,IAAAA,EAAa9B,QAAAA,EAAkB2C,MAAAA,GAAAA;IACjE,MAAMI,UAAAA,GAAaJ,SAAS,CAAC,UAAU,EAAEA,MAAAA,CAAO,CAAC,CAAC,GAAG,EAAA;AACrD,IAAA,OAAO,CAAC,2BAA2B,EAAEb,IAAAA,CAAKkB,EAAE,CAAC,QAAQ,EAAElB,IAAAA,CAAKmB,IAAI,CAAC,oEAAoE,EAAEF,UAAAA,CAAW,QAAQ,EAAE/C,QAAAA,CAAAA,CAAU;AACxK,CAAA;AAEA;;AAEC,IACM,MAAMkD,kBAAAA,GAAqB,CAChCjD,MAAAA,EACAkD,OAAAA,GAAqD,EAAE,GAAA;AAEvD,IAAA,MAAMC,mBAAmB,CAACC,OAAAA,GAAAA;QACxBpD,MAAAA,CAAOqD,GAAG,CAACC,IAAI,CAACF,OAAAA,CAAAA;AAChBF,QAAAA,OAAAA,CAAQK,SAAS,GAAGH,OAAAA,CAAAA;AACtB,IAAA,CAAA;AAEA,IAAA,MAAMI,SAAAA,GAAgD,kBAAA;AACpD,QAAA,MAAMC,SAAmBzD,MAAAA,CAAO0D,EAAE,CAC/BC,YAAY,CAAC,sBACd;;SAECC,MAAM,CAAC,IACR;SACCH,MAAM,EAAA;QAET,WAAW,MAAM5B,QAAQ4B,MAAAA,CAAQ;YAC/B,MAAMI,eAAAA,GAAkBhC,IAAAA,CAAKC,QAAQ,KAAK,OAAA;AAC1C,YAAA,IAAI,CAAC+B,eAAAA,EAAiB;AACpB,gBAAA,MAAMjC,0BAA0B5B,MAAAA,EAAQ6B,IAAAA,CAAAA;AAC1C,YAAA;AACA,YAAA,MAAM9B,QAAAA,GAAW8D,eAAAA,GAAkBC,IAAAA,CAAK9D,MAAAA,CAAO+D,IAAI,CAACC,MAAM,CAACC,MAAM,EAAEpC,IAAAA,CAAKW,GAAG,CAAA,GAAIX,KAAKW,GAAG;YACvF,IAAIf,KAAAA;YACJ,IAAI;gBACFA,KAAAA,GAAQ,MAAMR,uBAAAA,CAAwBlB,QAAAA,EAAUC,MAAAA,EAAQ6D,eAAAA,CAAAA;AAC1D,YAAA,CAAA,CAAE,OAAOK,GAAAA,EAAc;gBACrB,MAAMC,IAAAA,GACJD,GAAAA,IAAO,OAAOA,GAAAA,KAAQ,QAAA,IAAY,UAAUA,GAAAA,GACvCA,GAAAA,CAA8BC,IAAI,GACnCC,SAAAA;AACN,gBAAA,IAAID,SAAS,QAAA,EAAU;AACrBhB,oBAAAA,gBAAAA,CAAiBN,2BAA2BhB,IAAAA,EAAM9B,QAAAA,CAAAA,CAAAA;AAClD,oBAAA;AACF,gBAAA;gBACA,MAAMmE,GAAAA;AACR,YAAA;YACA,MAAMT,MAAAA,GAAS3D,aAAAA,CAAcC,QAAAA,EAAUC,MAAAA,EAAQ6D,eAAAA,CAAAA;YAE/C,MAAM;gBACJQ,QAAAA,EAAUxC,IAAAA;AACV9B,gBAAAA,QAAAA;AACAuE,gBAAAA,QAAAA,EAAUzC,IAAAA,CAAKmB,IAAI,GAAGnB,IAAAA,CAAK0C,GAAG;AAC9Bd,gBAAAA,MAAAA;gBACAhC,KAAAA,EAAO;AAAEC,oBAAAA,IAAAA,EAAMD,MAAMC;AAAK;AAC5B,aAAA;YAEA,IAAIG,IAAAA,CAAKY,OAAO,EAAE;AAChB,gBAAA,KAAK,MAAMC,MAAAA,IAAUC,MAAAA,CAAOC,IAAI,CAACf,IAAAA,CAAKY,OAAO,CAAA,CAAG;AAC9C,oBAAA,MAAM+B,UAAAA,GAAa3C,IAAAA,CAAKY,OAAO,CAACC,MAAAA,CAAO;AACvC,oBAAA,MAAM+B,kBAAAA,GAAqBZ,eAAAA,GACvBC,IAAAA,CAAK9D,MAAAA,CAAO+D,IAAI,CAACC,MAAM,CAACC,MAAM,EAAEO,UAAAA,CAAWhC,GAAG,CAAA,GAC9CgC,WAAWhC,GAAG;oBAClB,IAAIkC,eAAAA;oBACJ,IAAI;wBACFA,eAAAA,GAAkB,MAAMzD,uBAAAA,CACtBwD,kBAAAA,EACAzE,MAAAA,EACA6D,eAAAA,CAAAA;AAEJ,oBAAA,CAAA,CAAE,OAAOK,GAAAA,EAAc;wBACrB,MAAMC,IAAAA,GACJD,GAAAA,IAAO,OAAOA,GAAAA,KAAQ,QAAA,IAAY,UAAUA,GAAAA,GACvCA,GAAAA,CAA8BC,IAAI,GACnCC,SAAAA;AACN,wBAAA,IAAID,SAAS,QAAA,EAAU;4BACrBhB,gBAAAA,CAAiBN,0BAAAA,CAA2BhB,MAAM4C,kBAAAA,EAAoB/B,MAAAA,CAAAA,CAAAA;AACtE,4BAAA;AACF,wBAAA;wBACA,MAAMwB,GAAAA;AACR,oBAAA;oBACA,MAAMS,gBAAAA,GAAmB7E,aAAAA,CAAc2E,kBAAAA,EAAoBzE,MAAAA,EAAQ6D,eAAAA,CAAAA;AACnE,oBAAA,MAAMQ,QAAAA,GAAW;AAAE,wBAAA,GAAGG,UAAU;wBAAEI,IAAAA,EAAMlC,MAAAA;AAAQK,wBAAAA,EAAAA,EAAIlB,KAAKkB,EAAE;AAAE8B,wBAAAA,QAAAA,EAAUhD,KAAKmB;AAAK,qBAAA;oBACjF,MAAM;AACJqB,wBAAAA,QAAAA;wBACAtE,QAAAA,EAAU0E,kBAAAA;AACVH,wBAAAA,QAAAA,EAAUE,UAAAA,CAAWxB,IAAI,GAAGwB,UAAAA,CAAWD,GAAG;wBAC1Cd,MAAAA,EAAQkB,gBAAAA;wBACRlD,KAAAA,EAAO;AAAEC,4BAAAA,IAAAA,EAAMgD,gBAAgBhD;AAAK;AACtC,qBAAA;AACF,gBAAA;AACF,YAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,OAAOoD,MAAAA,CAAOC,IAAI,CAACvB,SAAAA,EAAAA,CAAAA;AACrB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.js","sources":["../../../../src/strapi/providers/local-source/configuration.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { chain } from 'stream-chain';\nimport { set } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nimport type { IConfiguration } from '
|
|
1
|
+
{"version":3,"file":"configuration.js","sources":["../../../../src/strapi/providers/local-source/configuration.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { chain } from 'stream-chain';\nimport { set } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nimport type { IConfiguration } from '../../../types';\n\n/**\n * Create a readable stream that export the Strapi app configuration\n */\nexport const createConfigurationStream = (strapi: Core.Strapi): Readable => {\n return Readable.from(\n (async function* configurationGenerator(): AsyncGenerator<IConfiguration> {\n // Core Store\n const coreStoreStream = chain([\n strapi.db.queryBuilder('strapi::core-store').stream(),\n (data) => set('value', JSON.parse(data.value), data),\n wrapConfigurationItem('core-store'),\n ]);\n\n // Webhook\n const webhooksStream = chain([\n strapi.db.queryBuilder('strapi::webhook').stream(),\n wrapConfigurationItem('webhook'),\n ]);\n\n const streams = [coreStoreStream, webhooksStream];\n\n for (const stream of streams) {\n for await (const item of stream) {\n yield item;\n }\n }\n })()\n );\n};\n\nconst wrapConfigurationItem = (type: 'core-store' | 'webhook') => (value: unknown) => ({\n type,\n value,\n});\n"],"names":["createConfigurationStream","strapi","Readable","from","configurationGenerator","coreStoreStream","chain","db","queryBuilder","stream","data","set","JSON","parse","value","wrapConfigurationItem","webhooksStream","streams","item","type"],"mappings":";;;;;;AAOA;;IAGO,MAAMA,yBAAAA,GAA4B,CAACC,MAAAA,GAAAA;AACxC,IAAA,OAAOC,eAAAA,CAASC,IAAI,CACjB,gBAAgBC,sBAAAA,GAAAA;;AAEf,QAAA,MAAMC,kBAAkBC,iBAAAA,CAAM;AAC5BL,YAAAA,MAAAA,CAAOM,EAAE,CAACC,YAAY,CAAC,sBAAsBC,MAAM,EAAA;YACnD,CAACC,IAAAA,GAASC,OAAI,OAAA,EAASC,IAAAA,CAAKC,KAAK,CAACH,IAAAA,CAAKI,KAAK,CAAA,EAAGJ,IAAAA,CAAAA;YAC/CK,qBAAAA,CAAsB,YAAA;AACvB,SAAA,CAAA;;AAGD,QAAA,MAAMC,iBAAiBV,iBAAAA,CAAM;AAC3BL,YAAAA,MAAAA,CAAOM,EAAE,CAACC,YAAY,CAAC,mBAAmBC,MAAM,EAAA;YAChDM,qBAAAA,CAAsB,SAAA;AACvB,SAAA,CAAA;AAED,QAAA,MAAME,OAAAA,GAAU;AAACZ,YAAAA,eAAAA;AAAiBW,YAAAA;AAAe,SAAA;QAEjD,KAAK,MAAMP,UAAUQ,OAAAA,CAAS;YAC5B,WAAW,MAAMC,QAAQT,MAAAA,CAAQ;gBAC/B,MAAMS,IAAAA;AACR,YAAA;AACF,QAAA;AACF,IAAA,CAAA,EAAA,CAAA;AAEJ;AAEA,MAAMH,qBAAAA,GAAwB,CAACI,IAAAA,GAAmC,CAACL,SAAoB;AACrFK,YAAAA,IAAAA;AACAL,YAAAA;SACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.mjs","sources":["../../../../src/strapi/providers/local-source/configuration.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { chain } from 'stream-chain';\nimport { set } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nimport type { IConfiguration } from '
|
|
1
|
+
{"version":3,"file":"configuration.mjs","sources":["../../../../src/strapi/providers/local-source/configuration.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { chain } from 'stream-chain';\nimport { set } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nimport type { IConfiguration } from '../../../types';\n\n/**\n * Create a readable stream that export the Strapi app configuration\n */\nexport const createConfigurationStream = (strapi: Core.Strapi): Readable => {\n return Readable.from(\n (async function* configurationGenerator(): AsyncGenerator<IConfiguration> {\n // Core Store\n const coreStoreStream = chain([\n strapi.db.queryBuilder('strapi::core-store').stream(),\n (data) => set('value', JSON.parse(data.value), data),\n wrapConfigurationItem('core-store'),\n ]);\n\n // Webhook\n const webhooksStream = chain([\n strapi.db.queryBuilder('strapi::webhook').stream(),\n wrapConfigurationItem('webhook'),\n ]);\n\n const streams = [coreStoreStream, webhooksStream];\n\n for (const stream of streams) {\n for await (const item of stream) {\n yield item;\n }\n }\n })()\n );\n};\n\nconst wrapConfigurationItem = (type: 'core-store' | 'webhook') => (value: unknown) => ({\n type,\n value,\n});\n"],"names":["createConfigurationStream","strapi","Readable","from","configurationGenerator","coreStoreStream","chain","db","queryBuilder","stream","data","set","JSON","parse","value","wrapConfigurationItem","webhooksStream","streams","item","type"],"mappings":";;;;AAOA;;IAGO,MAAMA,yBAAAA,GAA4B,CAACC,MAAAA,GAAAA;AACxC,IAAA,OAAOC,QAAAA,CAASC,IAAI,CACjB,gBAAgBC,sBAAAA,GAAAA;;AAEf,QAAA,MAAMC,kBAAkBC,KAAAA,CAAM;AAC5BL,YAAAA,MAAAA,CAAOM,EAAE,CAACC,YAAY,CAAC,sBAAsBC,MAAM,EAAA;YACnD,CAACC,IAAAA,GAASC,IAAI,OAAA,EAASC,IAAAA,CAAKC,KAAK,CAACH,IAAAA,CAAKI,KAAK,CAAA,EAAGJ,IAAAA,CAAAA;YAC/CK,qBAAAA,CAAsB,YAAA;AACvB,SAAA,CAAA;;AAGD,QAAA,MAAMC,iBAAiBV,KAAAA,CAAM;AAC3BL,YAAAA,MAAAA,CAAOM,EAAE,CAACC,YAAY,CAAC,mBAAmBC,MAAM,EAAA;YAChDM,qBAAAA,CAAsB,SAAA;AACvB,SAAA,CAAA;AAED,QAAA,MAAME,OAAAA,GAAU;AAACZ,YAAAA,eAAAA;AAAiBW,YAAAA;AAAe,SAAA;QAEjD,KAAK,MAAMP,UAAUQ,OAAAA,CAAS;YAC5B,WAAW,MAAMC,QAAQT,MAAAA,CAAQ;gBAC/B,MAAMS,IAAAA;AACR,YAAA;AACF,QAAA;AACF,IAAA,CAAA,EAAA,CAAA;AAEJ;AAEA,MAAMH,qBAAAA,GAAwB,CAACI,IAAAA,GAAmC,CAACL,SAAoB;AACrFK,YAAAA,IAAAA;AACAL,YAAAA;SACF,CAAA;;;;"}
|
|
@@ -4,7 +4,9 @@ import type { Core } from '@strapi/types';
|
|
|
4
4
|
/**
|
|
5
5
|
* Generate and consume content-types streams in order to stream each entity individually
|
|
6
6
|
*/
|
|
7
|
-
export declare const createEntitiesStream: (strapi: Core.Strapi
|
|
7
|
+
export declare const createEntitiesStream: (strapi: Core.Strapi, options?: {
|
|
8
|
+
onWarning?: (message: string) => void;
|
|
9
|
+
}) => Readable;
|
|
8
10
|
/**
|
|
9
11
|
* Create an entity transform stream which convert the output of
|
|
10
12
|
* the multi-content-types stream to the transfer entity format
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../../../src/strapi/providers/local-source/entities.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,eAAe,CAAC;AAKlD;;GAEG;AACH,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../../../src/strapi/providers/local-source/entities.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,eAAe,CAAC;AAKlD;;GAEG;AACH,eAAO,MAAM,oBAAoB,WACvB,KAAK,MAAM,YACV;IAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,KACjD,QA8CF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B,QAAO,SAchD,CAAC"}
|
|
@@ -6,7 +6,7 @@ require('lodash/fp');
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Generate and consume content-types streams in order to stream each entity individually
|
|
9
|
-
*/ const createEntitiesStream = (strapi)=>{
|
|
9
|
+
*/ const createEntitiesStream = (strapi, options = {})=>{
|
|
10
10
|
const contentTypes = Object.values(strapi.contentTypes);
|
|
11
11
|
async function* contentTypeStreamGenerator() {
|
|
12
12
|
for (const contentType of contentTypes){
|
|
@@ -31,8 +31,12 @@ require('lodash/fp');
|
|
|
31
31
|
contentType
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
|
-
} catch
|
|
35
|
-
|
|
34
|
+
} catch (error) {
|
|
35
|
+
// Surface the failure instead of silently dropping the remaining
|
|
36
|
+
// entities of this content type: every entity skipped here leaves
|
|
37
|
+
// dangling links pointing at rows that were never transferred
|
|
38
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
39
|
+
options.onWarning?.(`Failed to read all entities of type "${contentType.uid}" from the source, the remaining entities of this type were skipped: ${message}`);
|
|
36
40
|
} finally{
|
|
37
41
|
stream.destroy();
|
|
38
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.js","sources":["../../../../src/strapi/providers/local-source/entities.ts"],"sourcesContent":["import { Readable, Transform } from 'stream';\nimport type { Core, Struct } from '@strapi/types';\n\nimport * as shared from '../../queries';\nimport { IEntity } from '
|
|
1
|
+
{"version":3,"file":"entities.js","sources":["../../../../src/strapi/providers/local-source/entities.ts"],"sourcesContent":["import { Readable, Transform } from 'stream';\nimport type { Core, Struct } from '@strapi/types';\n\nimport * as shared from '../../queries';\nimport { IEntity } from '../../../types';\n\n/**\n * Generate and consume content-types streams in order to stream each entity individually\n */\nexport const createEntitiesStream = (\n strapi: Core.Strapi,\n options: { onWarning?: (message: string) => void } = {}\n): Readable => {\n const contentTypes: Struct.ContentTypeSchema[] = Object.values(strapi.contentTypes);\n\n async function* contentTypeStreamGenerator() {\n for (const contentType of contentTypes) {\n const query = shared.entity.createEntityQuery(strapi).call(null, contentType.uid);\n\n const stream: Readable = strapi.db\n // Create a query builder instance (default type is 'select')\n .queryBuilder(contentType.uid)\n // Fetch all columns\n .select('*')\n // Apply the populate\n .populate(query.deepPopulateComponentLikeQuery)\n // Get a readable stream\n .stream();\n\n yield { contentType, stream };\n }\n }\n\n return Readable.from(\n (async function* entitiesGenerator(): AsyncGenerator<{\n entity: IEntity;\n contentType: Struct.ContentTypeSchema;\n }> {\n for await (const { stream, contentType } of contentTypeStreamGenerator()) {\n try {\n for await (const entity of stream) {\n yield { entity, contentType };\n }\n } catch (error) {\n // Surface the failure instead of silently dropping the remaining\n // entities of this content type: every entity skipped here leaves\n // dangling links pointing at rows that were never transferred\n const message = error instanceof Error ? error.message : String(error);\n\n options.onWarning?.(\n `Failed to read all entities of type \"${contentType.uid}\" from the source, the remaining entities of this type were skipped: ${message}`\n );\n } finally {\n stream.destroy();\n }\n }\n })()\n );\n};\n\n/**\n * Create an entity transform stream which convert the output of\n * the multi-content-types stream to the transfer entity format\n */\nexport const createEntitiesTransformStream = (): Transform => {\n return new Transform({\n objectMode: true,\n transform(data, _encoding, callback) {\n const { entity, contentType } = data;\n const { id, ...attributes } = entity;\n\n callback(null, {\n type: contentType.uid,\n id,\n data: attributes,\n });\n },\n });\n};\n"],"names":["createEntitiesStream","strapi","options","contentTypes","Object","values","contentTypeStreamGenerator","contentType","query","shared","call","uid","stream","db","queryBuilder","select","populate","deepPopulateComponentLikeQuery","Readable","from","entitiesGenerator","entity","error","message","Error","String","onWarning","destroy","createEntitiesTransformStream","Transform","objectMode","transform","data","_encoding","callback","id","attributes","type"],"mappings":";;;;;;AAMA;;AAEC,IACM,MAAMA,oBAAAA,GAAuB,CAClCC,MAAAA,EACAC,OAAAA,GAAqD,EAAE,GAAA;AAEvD,IAAA,MAAMC,YAAAA,GAA2CC,MAAAA,CAAOC,MAAM,CAACJ,OAAOE,YAAY,CAAA;IAElF,gBAAgBG,0BAAAA,GAAAA;QACd,KAAK,MAAMC,eAAeJ,YAAAA,CAAc;YACtC,MAAMK,KAAAA,GAAQC,wBAA+B,CAACR,MAAAA,CAAAA,CAAQS,IAAI,CAAC,IAAA,EAAMH,WAAAA,CAAYI,GAAG,CAAA;AAEhF,YAAA,MAAMC,MAAAA,GAAmBX,MAAAA,CAAOY,EAC9B;AACCC,aAAAA,YAAY,CAACP,WAAAA,CAAYI,GAAG,CAC7B;aACCI,MAAM,CAAC,IACR;AACCC,aAAAA,QAAQ,CAACR,KAAAA,CAAMS,8BAA8B,CAC9C;aACCL,MAAM,EAAA;YAET,MAAM;AAAEL,gBAAAA,WAAAA;AAAaK,gBAAAA;AAAO,aAAA;AAC9B,QAAA;AACF,IAAA;AAEA,IAAA,OAAOM,eAAAA,CAASC,IAAI,CACjB,gBAAgBC,iBAAAA,GAAAA;AAIf,QAAA,WAAW,MAAM,EAAER,MAAM,EAAEL,WAAW,EAAE,IAAID,0BAAAA,EAAAA,CAA8B;YACxE,IAAI;gBACF,WAAW,MAAMe,UAAUT,MAAAA,CAAQ;oBACjC,MAAM;AAAES,wBAAAA,MAAAA;AAAQd,wBAAAA;AAAY,qBAAA;AAC9B,gBAAA;AACF,YAAA,CAAA,CAAE,OAAOe,KAAAA,EAAO;;;;AAId,gBAAA,MAAMC,UAAUD,KAAAA,YAAiBE,KAAAA,GAAQF,KAAAA,CAAMC,OAAO,GAAGE,MAAAA,CAAOH,KAAAA,CAAAA;gBAEhEpB,OAAAA,CAAQwB,SAAS,GACf,CAAC,qCAAqC,EAAEnB,YAAYI,GAAG,CAAC,qEAAqE,EAAEY,OAAAA,CAAAA,CAAS,CAAA;YAE5I,CAAA,QAAU;AACRX,gBAAAA,MAAAA,CAAOe,OAAO,EAAA;AAChB,YAAA;AACF,QAAA;AACF,IAAA,CAAA,EAAA,CAAA;AAEJ;AAEA;;;UAIaC,6BAAAA,GAAgC,IAAA;AAC3C,IAAA,OAAO,IAAIC,gBAAAA,CAAU;QACnBC,UAAAA,EAAY,IAAA;AACZC,QAAAA,SAAAA,CAAAA,CAAUC,IAAI,EAAEC,SAAS,EAAEC,QAAQ,EAAA;AACjC,YAAA,MAAM,EAAEb,MAAM,EAAEd,WAAW,EAAE,GAAGyB,IAAAA;AAChC,YAAA,MAAM,EAAEG,EAAE,EAAE,GAAGC,YAAY,GAAGf,MAAAA;AAE9Ba,YAAAA,QAAAA,CAAS,IAAA,EAAM;AACbG,gBAAAA,IAAAA,EAAM9B,YAAYI,GAAG;AACrBwB,gBAAAA,EAAAA;gBACAH,IAAAA,EAAMI;AACR,aAAA,CAAA;AACF,QAAA;AACF,KAAA,CAAA;AACF;;;;;"}
|
|
@@ -4,7 +4,7 @@ import 'lodash/fp';
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Generate and consume content-types streams in order to stream each entity individually
|
|
7
|
-
*/ const createEntitiesStream = (strapi)=>{
|
|
7
|
+
*/ const createEntitiesStream = (strapi, options = {})=>{
|
|
8
8
|
const contentTypes = Object.values(strapi.contentTypes);
|
|
9
9
|
async function* contentTypeStreamGenerator() {
|
|
10
10
|
for (const contentType of contentTypes){
|
|
@@ -29,8 +29,12 @@ import 'lodash/fp';
|
|
|
29
29
|
contentType
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
} catch
|
|
33
|
-
|
|
32
|
+
} catch (error) {
|
|
33
|
+
// Surface the failure instead of silently dropping the remaining
|
|
34
|
+
// entities of this content type: every entity skipped here leaves
|
|
35
|
+
// dangling links pointing at rows that were never transferred
|
|
36
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
37
|
+
options.onWarning?.(`Failed to read all entities of type "${contentType.uid}" from the source, the remaining entities of this type were skipped: ${message}`);
|
|
34
38
|
} finally{
|
|
35
39
|
stream.destroy();
|
|
36
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.mjs","sources":["../../../../src/strapi/providers/local-source/entities.ts"],"sourcesContent":["import { Readable, Transform } from 'stream';\nimport type { Core, Struct } from '@strapi/types';\n\nimport * as shared from '../../queries';\nimport { IEntity } from '
|
|
1
|
+
{"version":3,"file":"entities.mjs","sources":["../../../../src/strapi/providers/local-source/entities.ts"],"sourcesContent":["import { Readable, Transform } from 'stream';\nimport type { Core, Struct } from '@strapi/types';\n\nimport * as shared from '../../queries';\nimport { IEntity } from '../../../types';\n\n/**\n * Generate and consume content-types streams in order to stream each entity individually\n */\nexport const createEntitiesStream = (\n strapi: Core.Strapi,\n options: { onWarning?: (message: string) => void } = {}\n): Readable => {\n const contentTypes: Struct.ContentTypeSchema[] = Object.values(strapi.contentTypes);\n\n async function* contentTypeStreamGenerator() {\n for (const contentType of contentTypes) {\n const query = shared.entity.createEntityQuery(strapi).call(null, contentType.uid);\n\n const stream: Readable = strapi.db\n // Create a query builder instance (default type is 'select')\n .queryBuilder(contentType.uid)\n // Fetch all columns\n .select('*')\n // Apply the populate\n .populate(query.deepPopulateComponentLikeQuery)\n // Get a readable stream\n .stream();\n\n yield { contentType, stream };\n }\n }\n\n return Readable.from(\n (async function* entitiesGenerator(): AsyncGenerator<{\n entity: IEntity;\n contentType: Struct.ContentTypeSchema;\n }> {\n for await (const { stream, contentType } of contentTypeStreamGenerator()) {\n try {\n for await (const entity of stream) {\n yield { entity, contentType };\n }\n } catch (error) {\n // Surface the failure instead of silently dropping the remaining\n // entities of this content type: every entity skipped here leaves\n // dangling links pointing at rows that were never transferred\n const message = error instanceof Error ? error.message : String(error);\n\n options.onWarning?.(\n `Failed to read all entities of type \"${contentType.uid}\" from the source, the remaining entities of this type were skipped: ${message}`\n );\n } finally {\n stream.destroy();\n }\n }\n })()\n );\n};\n\n/**\n * Create an entity transform stream which convert the output of\n * the multi-content-types stream to the transfer entity format\n */\nexport const createEntitiesTransformStream = (): Transform => {\n return new Transform({\n objectMode: true,\n transform(data, _encoding, callback) {\n const { entity, contentType } = data;\n const { id, ...attributes } = entity;\n\n callback(null, {\n type: contentType.uid,\n id,\n data: attributes,\n });\n },\n });\n};\n"],"names":["createEntitiesStream","strapi","options","contentTypes","Object","values","contentTypeStreamGenerator","contentType","query","shared","call","uid","stream","db","queryBuilder","select","populate","deepPopulateComponentLikeQuery","Readable","from","entitiesGenerator","entity","error","message","Error","String","onWarning","destroy","createEntitiesTransformStream","Transform","objectMode","transform","data","_encoding","callback","id","attributes","type"],"mappings":";;;;AAMA;;AAEC,IACM,MAAMA,oBAAAA,GAAuB,CAClCC,MAAAA,EACAC,OAAAA,GAAqD,EAAE,GAAA;AAEvD,IAAA,MAAMC,YAAAA,GAA2CC,MAAAA,CAAOC,MAAM,CAACJ,OAAOE,YAAY,CAAA;IAElF,gBAAgBG,0BAAAA,GAAAA;QACd,KAAK,MAAMC,eAAeJ,YAAAA,CAAc;YACtC,MAAMK,KAAAA,GAAQC,iBAA+B,CAACR,MAAAA,CAAAA,CAAQS,IAAI,CAAC,IAAA,EAAMH,WAAAA,CAAYI,GAAG,CAAA;AAEhF,YAAA,MAAMC,MAAAA,GAAmBX,MAAAA,CAAOY,EAC9B;AACCC,aAAAA,YAAY,CAACP,WAAAA,CAAYI,GAAG,CAC7B;aACCI,MAAM,CAAC,IACR;AACCC,aAAAA,QAAQ,CAACR,KAAAA,CAAMS,8BAA8B,CAC9C;aACCL,MAAM,EAAA;YAET,MAAM;AAAEL,gBAAAA,WAAAA;AAAaK,gBAAAA;AAAO,aAAA;AAC9B,QAAA;AACF,IAAA;AAEA,IAAA,OAAOM,QAAAA,CAASC,IAAI,CACjB,gBAAgBC,iBAAAA,GAAAA;AAIf,QAAA,WAAW,MAAM,EAAER,MAAM,EAAEL,WAAW,EAAE,IAAID,0BAAAA,EAAAA,CAA8B;YACxE,IAAI;gBACF,WAAW,MAAMe,UAAUT,MAAAA,CAAQ;oBACjC,MAAM;AAAES,wBAAAA,MAAAA;AAAQd,wBAAAA;AAAY,qBAAA;AAC9B,gBAAA;AACF,YAAA,CAAA,CAAE,OAAOe,KAAAA,EAAO;;;;AAId,gBAAA,MAAMC,UAAUD,KAAAA,YAAiBE,KAAAA,GAAQF,KAAAA,CAAMC,OAAO,GAAGE,MAAAA,CAAOH,KAAAA,CAAAA;gBAEhEpB,OAAAA,CAAQwB,SAAS,GACf,CAAC,qCAAqC,EAAEnB,YAAYI,GAAG,CAAC,qEAAqE,EAAEY,OAAAA,CAAAA,CAAS,CAAA;YAE5I,CAAA,QAAU;AACRX,gBAAAA,MAAAA,CAAOe,OAAO,EAAA;AAChB,YAAA;AACF,QAAA;AACF,IAAA,CAAA,EAAA,CAAA;AAEJ;AAEA;;;UAIaC,6BAAAA,GAAgC,IAAA;AAC3C,IAAA,OAAO,IAAIC,SAAAA,CAAU;QACnBC,UAAAA,EAAY,IAAA;AACZC,QAAAA,SAAAA,CAAAA,CAAUC,IAAI,EAAEC,SAAS,EAAEC,QAAQ,EAAA;AACjC,YAAA,MAAM,EAAEb,MAAM,EAAEd,WAAW,EAAE,GAAGyB,IAAAA;AAChC,YAAA,MAAM,EAAEG,EAAE,EAAE,GAAGC,YAAY,GAAGf,MAAAA;AAE9Ba,YAAAA,QAAAA,CAAS,IAAA,EAAM;AACbG,gBAAAA,IAAAA,EAAM9B,YAAYI,GAAG;AACrBwB,gBAAAA,EAAAA;gBACAH,IAAAA,EAAMI;AACR,aAAA,CAAA;AACF,QAAA;AACF,KAAA,CAAA;AACF;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Core } from '@strapi/types';
|
|
2
|
-
import type { StageTotalsEstimate } from '
|
|
2
|
+
import type { StageTotalsEstimate } from '../../../types';
|
|
3
3
|
/**
|
|
4
4
|
* Sum sizes and counts for the same asset rows `createAssetsStream` would yield (main + formats),
|
|
5
5
|
* skipping missing files with ENOENT like the stream does. Used for transfer progress totals / ETA.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimate-asset-totals.d.ts","sourceRoot":"","sources":["../../../../src/strapi/providers/local-source/estimate-asset-totals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAU,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"estimate-asset-totals.d.ts","sourceRoot":"","sources":["../../../../src/strapi/providers/local-source/estimate-asset-totals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAU,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AA2BlE;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0H3F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimate-asset-totals.js","sources":["../../../../src/strapi/providers/local-source/estimate-asset-totals.ts"],"sourcesContent":["import { join } from 'path';\nimport type { Readable } from 'stream';\nimport type { Core } from '@strapi/types';\n\nimport type { IAsset, StageTotalsEstimate } from '../../../../types';\n\nimport { getFileStatsForTransfer, signUploadFileForTransfer } from './assets';\n\ntype UploadFileRecord = IAsset['metadata'];\n\n/** Strapi stores byte size on each file record; use for remote totals to avoid per-URL HTTP. */\nfunction hasReliableDbSize(size: unknown): size is number {\n return typeof size === 'number' && Number.isFinite(size) && size >= 0;\n}\n\n/** When every main + format has a DB size, remote rows need no signing or HTTP stat. */\nfunction remoteRowCanUseDbOnly(file: UploadFileRecord): boolean {\n if (!hasReliableDbSize(file.size)) {\n return false;\n }\n if (!file.formats) {\n return true;\n }\n for (const key of Object.keys(file.formats)) {\n if (!hasReliableDbSize(file.formats[key].size)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sum sizes and counts for the same asset rows `createAssetsStream` would yield (main + formats),\n * skipping missing files with ENOENT like the stream does. Used for transfer progress totals / ETA.\n *\n * - **Local (`provider === 'local'`):** `stat` on disk (source of truth; matches ENOENT skips).\n * - **Remote:** sum `size` from DB when present on main and every format; otherwise sign + `fetch` / `Content-Length` like before.\n */\nexport async function estimateAssetTotals(strapi: Core.Strapi): Promise<StageTotalsEstimate> {\n let totalBytes = 0;\n let totalCount = 0;\n\n const stream: Readable = strapi.db.queryBuilder('plugin::upload.file').select('*').stream();\n\n for await (const file of stream) {\n const isLocalProvider = file.provider === 'local';\n\n if (isLocalProvider) {\n const filepath = join(strapi.dirs.static.public, file.url);\n try {\n const stats = await getFileStatsForTransfer(filepath, strapi, true);\n totalBytes += stats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${filepath}`);\n continue;\n }\n throw err;\n }\n\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n const fileFormat = file.formats[format];\n const fileFormatFilepath = join(strapi.dirs.static.public, fileFormat.url);\n try {\n const fileFormatStats = await getFileStatsForTransfer(fileFormatFilepath, strapi, true);\n totalBytes += fileFormatStats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${fileFormatFilepath}`);\n continue;\n }\n throw err;\n }\n }\n }\n\n continue;\n }\n\n // Remote: prefer DB sizes (fast); fall back to signed URL + HTTP where `size` is missing.\n if (remoteRowCanUseDbOnly(file)) {\n totalBytes += file.size;\n totalCount += 1;\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n totalBytes += file.formats[format].size;\n totalCount += 1;\n }\n }\n continue;\n }\n\n await signUploadFileForTransfer(strapi, file);\n\n if (hasReliableDbSize(file.size)) {\n totalBytes += file.size;\n totalCount += 1;\n } else {\n try {\n const stats = await getFileStatsForTransfer(file.url, strapi, false);\n totalBytes += stats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${file.url}`);\n continue;\n }\n throw err;\n }\n }\n\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n const fileFormat = file.formats[format];\n const fileFormatFilepath = fileFormat.url;\n\n if (hasReliableDbSize(fileFormat.size)) {\n totalBytes += fileFormat.size;\n totalCount += 1;\n } else {\n try {\n const fileFormatStats = await getFileStatsForTransfer(\n fileFormatFilepath,\n strapi,\n false\n );\n totalBytes += fileFormatStats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${fileFormatFilepath}`);\n continue;\n }\n throw err;\n }\n }\n }\n }\n }\n\n return { totalBytes, totalCount };\n}\n"],"names":["hasReliableDbSize","size","Number","isFinite","remoteRowCanUseDbOnly","file","formats","key","Object","keys","estimateAssetTotals","strapi","totalBytes","totalCount","stream","db","queryBuilder","select","isLocalProvider","provider","filepath","join","dirs","static","public","url","stats","getFileStatsForTransfer","err","code","undefined","log","warn","format","fileFormat","fileFormatFilepath","fileFormatStats","signUploadFileForTransfer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"estimate-asset-totals.js","sources":["../../../../src/strapi/providers/local-source/estimate-asset-totals.ts"],"sourcesContent":["import { join } from 'path';\nimport type { Readable } from 'stream';\nimport type { Core } from '@strapi/types';\n\nimport type { IAsset, StageTotalsEstimate } from '../../../types';\n\nimport { getFileStatsForTransfer, signUploadFileForTransfer } from './assets';\n\ntype UploadFileRecord = IAsset['metadata'];\n\n/** Strapi stores byte size on each file record; use for remote totals to avoid per-URL HTTP. */\nfunction hasReliableDbSize(size: unknown): size is number {\n return typeof size === 'number' && Number.isFinite(size) && size >= 0;\n}\n\n/** When every main + format has a DB size, remote rows need no signing or HTTP stat. */\nfunction remoteRowCanUseDbOnly(file: UploadFileRecord): boolean {\n if (!hasReliableDbSize(file.size)) {\n return false;\n }\n if (!file.formats) {\n return true;\n }\n for (const key of Object.keys(file.formats)) {\n if (!hasReliableDbSize(file.formats[key].size)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sum sizes and counts for the same asset rows `createAssetsStream` would yield (main + formats),\n * skipping missing files with ENOENT like the stream does. Used for transfer progress totals / ETA.\n *\n * - **Local (`provider === 'local'`):** `stat` on disk (source of truth; matches ENOENT skips).\n * - **Remote:** sum `size` from DB when present on main and every format; otherwise sign + `fetch` / `Content-Length` like before.\n */\nexport async function estimateAssetTotals(strapi: Core.Strapi): Promise<StageTotalsEstimate> {\n let totalBytes = 0;\n let totalCount = 0;\n\n const stream: Readable = strapi.db.queryBuilder('plugin::upload.file').select('*').stream();\n\n for await (const file of stream) {\n const isLocalProvider = file.provider === 'local';\n\n if (isLocalProvider) {\n const filepath = join(strapi.dirs.static.public, file.url);\n try {\n const stats = await getFileStatsForTransfer(filepath, strapi, true);\n totalBytes += stats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${filepath}`);\n continue;\n }\n throw err;\n }\n\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n const fileFormat = file.formats[format];\n const fileFormatFilepath = join(strapi.dirs.static.public, fileFormat.url);\n try {\n const fileFormatStats = await getFileStatsForTransfer(fileFormatFilepath, strapi, true);\n totalBytes += fileFormatStats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${fileFormatFilepath}`);\n continue;\n }\n throw err;\n }\n }\n }\n\n continue;\n }\n\n // Remote: prefer DB sizes (fast); fall back to signed URL + HTTP where `size` is missing.\n if (remoteRowCanUseDbOnly(file)) {\n totalBytes += file.size;\n totalCount += 1;\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n totalBytes += file.formats[format].size;\n totalCount += 1;\n }\n }\n continue;\n }\n\n await signUploadFileForTransfer(strapi, file);\n\n if (hasReliableDbSize(file.size)) {\n totalBytes += file.size;\n totalCount += 1;\n } else {\n try {\n const stats = await getFileStatsForTransfer(file.url, strapi, false);\n totalBytes += stats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${file.url}`);\n continue;\n }\n throw err;\n }\n }\n\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n const fileFormat = file.formats[format];\n const fileFormatFilepath = fileFormat.url;\n\n if (hasReliableDbSize(fileFormat.size)) {\n totalBytes += fileFormat.size;\n totalCount += 1;\n } else {\n try {\n const fileFormatStats = await getFileStatsForTransfer(\n fileFormatFilepath,\n strapi,\n false\n );\n totalBytes += fileFormatStats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${fileFormatFilepath}`);\n continue;\n }\n throw err;\n }\n }\n }\n }\n }\n\n return { totalBytes, totalCount };\n}\n"],"names":["hasReliableDbSize","size","Number","isFinite","remoteRowCanUseDbOnly","file","formats","key","Object","keys","estimateAssetTotals","strapi","totalBytes","totalCount","stream","db","queryBuilder","select","isLocalProvider","provider","filepath","join","dirs","static","public","url","stats","getFileStatsForTransfer","err","code","undefined","log","warn","format","fileFormat","fileFormatFilepath","fileFormatStats","signUploadFileForTransfer"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimate-asset-totals.mjs","sources":["../../../../src/strapi/providers/local-source/estimate-asset-totals.ts"],"sourcesContent":["import { join } from 'path';\nimport type { Readable } from 'stream';\nimport type { Core } from '@strapi/types';\n\nimport type { IAsset, StageTotalsEstimate } from '../../../../types';\n\nimport { getFileStatsForTransfer, signUploadFileForTransfer } from './assets';\n\ntype UploadFileRecord = IAsset['metadata'];\n\n/** Strapi stores byte size on each file record; use for remote totals to avoid per-URL HTTP. */\nfunction hasReliableDbSize(size: unknown): size is number {\n return typeof size === 'number' && Number.isFinite(size) && size >= 0;\n}\n\n/** When every main + format has a DB size, remote rows need no signing or HTTP stat. */\nfunction remoteRowCanUseDbOnly(file: UploadFileRecord): boolean {\n if (!hasReliableDbSize(file.size)) {\n return false;\n }\n if (!file.formats) {\n return true;\n }\n for (const key of Object.keys(file.formats)) {\n if (!hasReliableDbSize(file.formats[key].size)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sum sizes and counts for the same asset rows `createAssetsStream` would yield (main + formats),\n * skipping missing files with ENOENT like the stream does. Used for transfer progress totals / ETA.\n *\n * - **Local (`provider === 'local'`):** `stat` on disk (source of truth; matches ENOENT skips).\n * - **Remote:** sum `size` from DB when present on main and every format; otherwise sign + `fetch` / `Content-Length` like before.\n */\nexport async function estimateAssetTotals(strapi: Core.Strapi): Promise<StageTotalsEstimate> {\n let totalBytes = 0;\n let totalCount = 0;\n\n const stream: Readable = strapi.db.queryBuilder('plugin::upload.file').select('*').stream();\n\n for await (const file of stream) {\n const isLocalProvider = file.provider === 'local';\n\n if (isLocalProvider) {\n const filepath = join(strapi.dirs.static.public, file.url);\n try {\n const stats = await getFileStatsForTransfer(filepath, strapi, true);\n totalBytes += stats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${filepath}`);\n continue;\n }\n throw err;\n }\n\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n const fileFormat = file.formats[format];\n const fileFormatFilepath = join(strapi.dirs.static.public, fileFormat.url);\n try {\n const fileFormatStats = await getFileStatsForTransfer(fileFormatFilepath, strapi, true);\n totalBytes += fileFormatStats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${fileFormatFilepath}`);\n continue;\n }\n throw err;\n }\n }\n }\n\n continue;\n }\n\n // Remote: prefer DB sizes (fast); fall back to signed URL + HTTP where `size` is missing.\n if (remoteRowCanUseDbOnly(file)) {\n totalBytes += file.size;\n totalCount += 1;\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n totalBytes += file.formats[format].size;\n totalCount += 1;\n }\n }\n continue;\n }\n\n await signUploadFileForTransfer(strapi, file);\n\n if (hasReliableDbSize(file.size)) {\n totalBytes += file.size;\n totalCount += 1;\n } else {\n try {\n const stats = await getFileStatsForTransfer(file.url, strapi, false);\n totalBytes += stats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${file.url}`);\n continue;\n }\n throw err;\n }\n }\n\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n const fileFormat = file.formats[format];\n const fileFormatFilepath = fileFormat.url;\n\n if (hasReliableDbSize(fileFormat.size)) {\n totalBytes += fileFormat.size;\n totalCount += 1;\n } else {\n try {\n const fileFormatStats = await getFileStatsForTransfer(\n fileFormatFilepath,\n strapi,\n false\n );\n totalBytes += fileFormatStats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${fileFormatFilepath}`);\n continue;\n }\n throw err;\n }\n }\n }\n }\n }\n\n return { totalBytes, totalCount };\n}\n"],"names":["hasReliableDbSize","size","Number","isFinite","remoteRowCanUseDbOnly","file","formats","key","Object","keys","estimateAssetTotals","strapi","totalBytes","totalCount","stream","db","queryBuilder","select","isLocalProvider","provider","filepath","join","dirs","static","public","url","stats","getFileStatsForTransfer","err","code","undefined","log","warn","format","fileFormat","fileFormatFilepath","fileFormatStats","signUploadFileForTransfer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"estimate-asset-totals.mjs","sources":["../../../../src/strapi/providers/local-source/estimate-asset-totals.ts"],"sourcesContent":["import { join } from 'path';\nimport type { Readable } from 'stream';\nimport type { Core } from '@strapi/types';\n\nimport type { IAsset, StageTotalsEstimate } from '../../../types';\n\nimport { getFileStatsForTransfer, signUploadFileForTransfer } from './assets';\n\ntype UploadFileRecord = IAsset['metadata'];\n\n/** Strapi stores byte size on each file record; use for remote totals to avoid per-URL HTTP. */\nfunction hasReliableDbSize(size: unknown): size is number {\n return typeof size === 'number' && Number.isFinite(size) && size >= 0;\n}\n\n/** When every main + format has a DB size, remote rows need no signing or HTTP stat. */\nfunction remoteRowCanUseDbOnly(file: UploadFileRecord): boolean {\n if (!hasReliableDbSize(file.size)) {\n return false;\n }\n if (!file.formats) {\n return true;\n }\n for (const key of Object.keys(file.formats)) {\n if (!hasReliableDbSize(file.formats[key].size)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sum sizes and counts for the same asset rows `createAssetsStream` would yield (main + formats),\n * skipping missing files with ENOENT like the stream does. Used for transfer progress totals / ETA.\n *\n * - **Local (`provider === 'local'`):** `stat` on disk (source of truth; matches ENOENT skips).\n * - **Remote:** sum `size` from DB when present on main and every format; otherwise sign + `fetch` / `Content-Length` like before.\n */\nexport async function estimateAssetTotals(strapi: Core.Strapi): Promise<StageTotalsEstimate> {\n let totalBytes = 0;\n let totalCount = 0;\n\n const stream: Readable = strapi.db.queryBuilder('plugin::upload.file').select('*').stream();\n\n for await (const file of stream) {\n const isLocalProvider = file.provider === 'local';\n\n if (isLocalProvider) {\n const filepath = join(strapi.dirs.static.public, file.url);\n try {\n const stats = await getFileStatsForTransfer(filepath, strapi, true);\n totalBytes += stats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${filepath}`);\n continue;\n }\n throw err;\n }\n\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n const fileFormat = file.formats[format];\n const fileFormatFilepath = join(strapi.dirs.static.public, fileFormat.url);\n try {\n const fileFormatStats = await getFileStatsForTransfer(fileFormatFilepath, strapi, true);\n totalBytes += fileFormatStats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${fileFormatFilepath}`);\n continue;\n }\n throw err;\n }\n }\n }\n\n continue;\n }\n\n // Remote: prefer DB sizes (fast); fall back to signed URL + HTTP where `size` is missing.\n if (remoteRowCanUseDbOnly(file)) {\n totalBytes += file.size;\n totalCount += 1;\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n totalBytes += file.formats[format].size;\n totalCount += 1;\n }\n }\n continue;\n }\n\n await signUploadFileForTransfer(strapi, file);\n\n if (hasReliableDbSize(file.size)) {\n totalBytes += file.size;\n totalCount += 1;\n } else {\n try {\n const stats = await getFileStatsForTransfer(file.url, strapi, false);\n totalBytes += stats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${file.url}`);\n continue;\n }\n throw err;\n }\n }\n\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n const fileFormat = file.formats[format];\n const fileFormatFilepath = fileFormat.url;\n\n if (hasReliableDbSize(fileFormat.size)) {\n totalBytes += fileFormat.size;\n totalCount += 1;\n } else {\n try {\n const fileFormatStats = await getFileStatsForTransfer(\n fileFormatFilepath,\n strapi,\n false\n );\n totalBytes += fileFormatStats.size;\n totalCount += 1;\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err\n ? (err as NodeJS.ErrnoException).code\n : undefined;\n if (code === 'ENOENT') {\n strapi.log.warn(`[Data transfer] Skipping missing asset file: ${fileFormatFilepath}`);\n continue;\n }\n throw err;\n }\n }\n }\n }\n }\n\n return { totalBytes, totalCount };\n}\n"],"names":["hasReliableDbSize","size","Number","isFinite","remoteRowCanUseDbOnly","file","formats","key","Object","keys","estimateAssetTotals","strapi","totalBytes","totalCount","stream","db","queryBuilder","select","isLocalProvider","provider","filepath","join","dirs","static","public","url","stats","getFileStatsForTransfer","err","code","undefined","log","warn","format","fileFormat","fileFormatFilepath","fileFormatStats","signUploadFileForTransfer"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Readable } from 'stream';
|
|
3
3
|
import type { Core, Struct } from '@strapi/types';
|
|
4
|
-
import type { IMetadata, ISourceProvider, ProviderType, TransferStage } from '
|
|
4
|
+
import type { IMetadata, ISourceProvider, ProviderType, TransferStage } from '../../../types';
|
|
5
5
|
import type { IDiagnosticReporter } from '../../../utils/diagnostic';
|
|
6
6
|
export interface ILocalStrapiSourceProviderOptions {
|
|
7
7
|
getStrapi(): Core.Strapi | Promise<Core.Strapi>;
|
|
@@ -24,7 +24,7 @@ declare class LocalStrapiSourceProvider implements ISourceProvider {
|
|
|
24
24
|
getSchemas(): Record<string, Struct.Schema>;
|
|
25
25
|
createSchemasReadStream(): Readable;
|
|
26
26
|
createAssetsReadStream(): Readable;
|
|
27
|
-
getStageTotals(stage: TransferStage): Promise<import("
|
|
27
|
+
getStageTotals(stage: TransferStage): Promise<import("../../../types").StageTotalsEstimate | null>;
|
|
28
28
|
}
|
|
29
29
|
export type ILocalStrapiSourceProvider = InstanceType<typeof LocalStrapiSourceProvider>;
|
|
30
30
|
export { estimateAssetTotals } from './estimate-asset-totals';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/strapi/providers/local-source/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/strapi/providers/local-source/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AASrE,MAAM,WAAW,iCAAiC;IAChD,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,+BAA+B,YAAa,iCAAiC,8BAEzF,CAAC;AAEF,cAAM,yBAA0B,YAAW,eAAe;;IACxD,IAAI,SAA0B;IAE9B,IAAI,EAAE,YAAY,CAAY;IAE9B,OAAO,EAAE,iCAAiC,CAAC;IAE3C,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;gBAIT,OAAO,EAAE,iCAAiC;IAIhD,SAAS,CAAC,WAAW,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4D3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,WAAW,IAAI,SAAS;IAclB,wBAAwB,IAAI,OAAO,CAAC,QAAQ,CAAC;IAiBnD,qBAAqB,IAAI,QAAQ;IAOjC,6BAA6B,IAAI,QAAQ;IAMzC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IAW3C,uBAAuB,IAAI,QAAQ;IAInC,sBAAsB,IAAI,QAAQ;IAc5B,cAAc,CAAC,KAAK,EAAE,aAAa;CAO1C;AAED,MAAM,MAAM,0BAA0B,GAAG,YAAY,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -65,7 +65,12 @@ class LocalStrapiSourceProvider {
|
|
|
65
65
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('creating entities read stream');
|
|
66
66
|
return streamChain.chain([
|
|
67
67
|
// Entities stream
|
|
68
|
-
entities.createEntitiesStream(this.strapi
|
|
68
|
+
entities.createEntitiesStream(this.strapi, {
|
|
69
|
+
onWarning: (message)=>{
|
|
70
|
+
this.strapi?.log.warn(message);
|
|
71
|
+
_class_private_field_loose_base(this, _reportWarning)[_reportWarning](message);
|
|
72
|
+
}
|
|
73
|
+
}),
|
|
69
74
|
// Transform stream
|
|
70
75
|
entities.createEntitiesTransformStream()
|
|
71
76
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/strapi/providers/local-source/index.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { chain } from 'stream-chain';\nimport type { Core, Struct } from '@strapi/types';\n\nimport type { IMetadata, ISourceProvider, ProviderType, TransferStage } from '../../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { createEntitiesStream, createEntitiesTransformStream } from './entities';\nimport { createLinksStream } from './links';\nimport { createConfigurationStream } from './configuration';\nimport { createAssetsStream } from './assets';\nimport { estimateAssetTotals } from './estimate-asset-totals';\nimport * as utils from '../../../utils';\nimport { assertValidStrapi } from '../../../utils/providers';\n\nexport interface ILocalStrapiSourceProviderOptions {\n getStrapi(): Core.Strapi | Promise<Core.Strapi>; // return an initialized instance of Strapi\n\n autoDestroy?: boolean; // shut down the instance returned by getStrapi() at the end of the transfer\n}\n\nexport const createLocalStrapiSourceProvider = (options: ILocalStrapiSourceProviderOptions) => {\n return new LocalStrapiSourceProvider(options);\n};\n\nclass LocalStrapiSourceProvider implements ISourceProvider {\n name = 'source::local-strapi';\n\n type: ProviderType = 'source';\n\n options: ILocalStrapiSourceProviderOptions;\n\n strapi?: Core.Strapi;\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalStrapiSourceProviderOptions) {\n this.options = options;\n }\n\n async bootstrap(diagnostics?: IDiagnosticReporter): Promise<void> {\n this.#diagnostics = diagnostics;\n this.strapi = await this.options.getStrapi();\n this.strapi.db.lifecycles.disable();\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'local-source-provider',\n },\n kind: 'info',\n });\n }\n\n #reportWarning(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'local-source-provider',\n },\n kind: 'warning',\n });\n }\n\n /**\n * Reports an error to the diagnostic reporter.\n */\n #reportError(message: string, error: Error) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n error,\n severity: 'fatal',\n name: error.name,\n },\n kind: 'error',\n });\n }\n\n /**\n * Handles errors that occur in read streams.\n */\n #handleStreamError(streamType: string, err: Error) {\n const { message, stack } = err;\n const errorMessage = `[Data transfer] Error in ${streamType} read stream: ${message}`;\n const formattedError = {\n message: errorMessage,\n stack,\n timestamp: new Date().toISOString(),\n };\n\n this.strapi?.log.error(formattedError);\n this.#reportError(formattedError.message, err);\n }\n\n async close(): Promise<void> {\n const { autoDestroy } = this.options;\n assertValidStrapi(this.strapi);\n this.strapi.db.lifecycles.enable();\n // Basically `!== false` but more deterministic\n if (autoDestroy === undefined || autoDestroy === true) {\n await this.strapi?.destroy();\n }\n }\n\n getMetadata(): IMetadata {\n this.#reportInfo('getting metadata');\n assertValidStrapi(this.strapi);\n const strapiVersion = this.strapi.config.get<string>('info.strapi');\n const createdAt = new Date().toISOString();\n\n return {\n createdAt,\n strapi: {\n version: strapiVersion,\n },\n };\n }\n\n async createEntitiesReadStream(): Promise<Readable> {\n assertValidStrapi(this.strapi, 'Not able to stream entities');\n this.#reportInfo('creating entities read stream');\n return chain([\n // Entities stream\n createEntitiesStream(this.strapi),\n\n // Transform stream\n createEntitiesTransformStream(),\n ]);\n }\n\n createLinksReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream links');\n this.#reportInfo('creating links read stream');\n\n return createLinksStream(this.strapi);\n }\n\n createConfigurationReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream configuration');\n this.#reportInfo('creating configuration read stream');\n return createConfigurationStream(this.strapi);\n }\n\n getSchemas(): Record<string, Struct.Schema> {\n assertValidStrapi(this.strapi, 'Not able to get Schemas');\n this.#reportInfo('getting schemas');\n const schemas = utils.schema.schemasToValidJSON({\n ...this.strapi.contentTypes,\n ...this.strapi.components,\n });\n\n return utils.schema.mapSchemasValues(schemas);\n }\n\n createSchemasReadStream(): Readable {\n return Readable.from(Object.values(this.getSchemas()));\n }\n\n createAssetsReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream assets');\n this.#reportInfo('creating assets read stream');\n\n const stream = createAssetsStream(this.strapi, {\n onWarning: (message) => this.#reportWarning(message),\n });\n stream.on('error', (err) => {\n this.#handleStreamError('assets', err);\n });\n\n return stream;\n }\n\n async getStageTotals(stage: TransferStage) {\n if (stage !== 'assets') {\n return null;\n }\n assertValidStrapi(this.strapi, 'Not able to estimate asset totals');\n return estimateAssetTotals(this.strapi);\n }\n}\n\nexport type ILocalStrapiSourceProvider = InstanceType<typeof LocalStrapiSourceProvider>;\n\nexport { estimateAssetTotals } from './estimate-asset-totals';\n"],"names":["createLocalStrapiSourceProvider","options","LocalStrapiSourceProvider","bootstrap","diagnostics","strapi","getStrapi","db","lifecycles","disable","close","autoDestroy","assertValidStrapi","enable","undefined","destroy","getMetadata","strapiVersion","config","get","createdAt","Date","toISOString","version","createEntitiesReadStream","chain","createEntitiesStream","createEntitiesTransformStream","createLinksReadStream","createLinksStream","createConfigurationReadStream","createConfigurationStream","getSchemas","schemas","utils","contentTypes","components","createSchemasReadStream","Readable","from","Object","values","createAssetsReadStream","stream","createAssetsStream","onWarning","message","on","err","getStageTotals","stage","estimateAssetTotals","name","type","report","details","origin","kind","error","severity","streamType","stack","errorMessage","formattedError","timestamp","log"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBO,MAAMA,kCAAkC,CAACC,OAAAA,GAAAA;AAC9C,IAAA,OAAO,IAAIC,yBAAAA,CAA0BD,OAAAA,CAAAA;AACvC;AAWE,IAAA,YAAA,iBAAA,8BAAA,CAAA,cAAA,CAAA,EAYA,2EAWA,cAAA,iBAAA,8BAAA,CAAA,gBAAA,CAAA;;AAaC,MACD,YAAA,iBAAA,8BAAA,CAAA,cAAA,CAAA;;MAgBA,kBAAA,iBAAA,8BAAA,CAAA,oBAAA,CAAA;AA9DF,MAAMC,yBAAAA,CAAAA;IAeJ,MAAMC,SAAAA,CAAUC,WAAiC,EAAiB;QAChE,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,GAAeA,WAAAA;QACpB,IAAI,CAACC,MAAM,GAAG,MAAM,IAAI,CAACJ,OAAO,CAACK,SAAS,EAAA;AAC1C,QAAA,IAAI,CAACD,MAAM,CAACE,EAAE,CAACC,UAAU,CAACC,OAAO,EAAA;AACnC,IAAA;AAwDA,IAAA,MAAMC,KAAAA,GAAuB;AAC3B,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAG,IAAI,CAACV,OAAO;QACpCW,2BAAAA,CAAkB,IAAI,CAACP,MAAM,CAAA;AAC7B,QAAA,IAAI,CAACA,MAAM,CAACE,EAAE,CAACC,UAAU,CAACK,MAAM,EAAA;;QAEhC,IAAIF,WAAAA,KAAgBG,SAAAA,IAAaH,WAAAA,KAAgB,IAAA,EAAM;YACrD,MAAM,IAAI,CAACN,MAAM,EAAEU,OAAAA,EAAAA;AACrB,QAAA;AACF,IAAA;IAEAC,WAAAA,GAAyB;QACvB,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,kBAAA,CAAA;QACjBJ,2BAAAA,CAAkB,IAAI,CAACP,MAAM,CAAA;QAC7B,MAAMY,aAAAA,GAAgB,IAAI,CAACZ,MAAM,CAACa,MAAM,CAACC,GAAG,CAAS,aAAA,CAAA;QACrD,MAAMC,SAAAA,GAAY,IAAIC,IAAAA,EAAAA,CAAOC,WAAW,EAAA;QAExC,OAAO;AACLF,YAAAA,SAAAA;YACAf,MAAAA,EAAQ;gBACNkB,OAAAA,EAASN;AACX;AACF,SAAA;AACF,IAAA;AAEA,IAAA,MAAMO,wBAAAA,GAA8C;QAClDZ,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,6BAAA,CAAA;QAC/B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,+BAAA,CAAA;AACjB,QAAA,OAAOoB,iBAAAA,CAAM;;YAEXC,6BAAAA,CAAqB,IAAI,CAACrB,MAAM,CAAA;;AAGhCsB,YAAAA,sCAAAA;AACD,SAAA,CAAA;AACH,IAAA;IAEAC,qBAAAA,GAAkC;QAChChB,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,0BAAA,CAAA;QAC/B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,4BAAA,CAAA;QAEjB,OAAOwB,uBAAAA,CAAkB,IAAI,CAACxB,MAAM,CAAA;AACtC,IAAA;IAEAyB,6BAAAA,GAA0C;QACxClB,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,kCAAA,CAAA;QAC/B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,oCAAA,CAAA;QACjB,OAAO0B,uCAAAA,CAA0B,IAAI,CAAC1B,MAAM,CAAA;AAC9C,IAAA;IAEA2B,UAAAA,GAA4C;QAC1CpB,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,yBAAA,CAAA;QAC/B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,iBAAA,CAAA;AACjB,QAAA,MAAM4B,OAAAA,GAAUC,yBAA+B,CAAC;AAC9C,YAAA,GAAG,IAAI,CAAC7B,MAAM,CAAC8B,YAAY;AAC3B,YAAA,GAAG,IAAI,CAAC9B,MAAM,CAAC+B;AACjB,SAAA,CAAA;AAEA,QAAA,OAAOF,uBAA6B,CAACD,OAAAA,CAAAA;AACvC,IAAA;IAEAI,uBAAAA,GAAoC;QAClC,OAAOC,eAAAA,CAASC,IAAI,CAACC,MAAAA,CAAOC,MAAM,CAAC,IAAI,CAACT,UAAU,EAAA,CAAA,CAAA;AACpD,IAAA;IAEAU,sBAAAA,GAAmC;QACjC9B,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,2BAAA,CAAA;QAC/B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,6BAAA,CAAA;AAEjB,QAAA,MAAMsC,MAAAA,GAASC,yBAAAA,CAAmB,IAAI,CAACvC,MAAM,EAAE;AAC7CwC,YAAAA,SAAAA,EAAW,CAACC,OAAAA,GAAY,+BAAA,CAAA,IAAI,EAAC,gBAAA,cAAA,CAAA,CAAeA,OAAAA;AAC9C,SAAA,CAAA;QACAH,MAAAA,CAAOI,EAAE,CAAC,OAAA,EAAS,CAACC,GAAAA,GAAAA;AAClB,YAAA,+BAAA,CAAA,IAAI,EAAC,kBAAA,CAAA,CAAA,kBAAA,CAAA,CAAmB,QAAA,EAAUA,GAAAA,CAAAA;AACpC,QAAA,CAAA,CAAA;QAEA,OAAOL,MAAAA;AACT,IAAA;IAEA,MAAMM,cAAAA,CAAeC,KAAoB,EAAE;AACzC,QAAA,IAAIA,UAAU,QAAA,EAAU;YACtB,OAAO,IAAA;AACT,QAAA;QACAtC,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,mCAAA,CAAA;QAC/B,OAAO8C,uCAAAA,CAAoB,IAAI,CAAC9C,MAAM,CAAA;AACxC,IAAA;AApJA,IAAA,WAAA,CAAYJ,OAA0C,CAAE;QAUxD,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,WAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAWA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,cAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAcA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAgBA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,kBAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QArDA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA;;mBAAA;;aARAmD,IAAAA,GAAO,sBAAA;aAEPC,IAAAA,GAAqB,QAAA;QASnB,IAAI,CAACpD,OAAO,GAAGA,OAAAA;AACjB,IAAA;AAmJF;AA3IE,SAAA,WAAY6C,OAAe,EAAA;AACzB,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,EAAcQ,MAAAA,CAAO;QACxBC,OAAAA,EAAS;AACPnC,YAAAA,SAAAA,EAAW,IAAIC,IAAAA,EAAAA;AACfyB,YAAAA,OAAAA;YACAU,MAAAA,EAAQ;AACV,SAAA;QACAC,IAAAA,EAAM;AACR,KAAA,CAAA;AACF;AAEA,SAAA,cAAeX,OAAe,EAAA;AAC5B,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,EAAcQ,MAAAA,CAAO;QACxBC,OAAAA,EAAS;AACPnC,YAAAA,SAAAA,EAAW,IAAIC,IAAAA,EAAAA;AACfyB,YAAAA,OAAAA;YACAU,MAAAA,EAAQ;AACV,SAAA;QACAC,IAAAA,EAAM;AACR,KAAA,CAAA;AACF;AAKA,SAAA,WAAA,CAAaX,OAAe,EAAEY,KAAY,EAAA;AACxC,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,EAAcJ,MAAAA,CAAO;QACxBC,OAAAA,EAAS;AACPnC,YAAAA,SAAAA,EAAW,IAAIC,IAAAA,EAAAA;AACfyB,YAAAA,OAAAA;AACAY,YAAAA,KAAAA;YACAC,QAAAA,EAAU,OAAA;AACVP,YAAAA,IAAAA,EAAMM,MAAMN;AACd,SAAA;QACAK,IAAAA,EAAM;AACR,KAAA,CAAA;AACF;AAKA,SAAA,iBAAA,CAAmBG,UAAkB,EAAEZ,GAAU,EAAA;AAC/C,IAAA,MAAM,EAAEF,OAAO,EAAEe,KAAK,EAAE,GAAGb,GAAAA;AAC3B,IAAA,MAAMc,eAAe,CAAC,yBAAyB,EAAEF,UAAAA,CAAW,cAAc,EAAEd,OAAAA,CAAAA,CAAS;AACrF,IAAA,MAAMiB,cAAAA,GAAiB;QACrBjB,OAAAA,EAASgB,YAAAA;AACTD,QAAAA,KAAAA;QACAG,SAAAA,EAAW,IAAI3C,OAAOC,WAAW;AACnC,KAAA;AAEA,IAAA,IAAI,CAACjB,MAAM,EAAE4D,GAAAA,CAAIP,KAAAA,CAAMK,cAAAA,CAAAA;AACvB,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,CAAaA,cAAAA,CAAejB,OAAO,EAAEE,GAAAA,CAAAA;AAC5C;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/strapi/providers/local-source/index.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { chain } from 'stream-chain';\nimport type { Core, Struct } from '@strapi/types';\n\nimport type { IMetadata, ISourceProvider, ProviderType, TransferStage } from '../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { createEntitiesStream, createEntitiesTransformStream } from './entities';\nimport { createLinksStream } from './links';\nimport { createConfigurationStream } from './configuration';\nimport { createAssetsStream } from './assets';\nimport { estimateAssetTotals } from './estimate-asset-totals';\nimport * as utils from '../../../utils';\nimport { assertValidStrapi } from '../../../utils/providers';\n\nexport interface ILocalStrapiSourceProviderOptions {\n getStrapi(): Core.Strapi | Promise<Core.Strapi>; // return an initialized instance of Strapi\n\n autoDestroy?: boolean; // shut down the instance returned by getStrapi() at the end of the transfer\n}\n\nexport const createLocalStrapiSourceProvider = (options: ILocalStrapiSourceProviderOptions) => {\n return new LocalStrapiSourceProvider(options);\n};\n\nclass LocalStrapiSourceProvider implements ISourceProvider {\n name = 'source::local-strapi';\n\n type: ProviderType = 'source';\n\n options: ILocalStrapiSourceProviderOptions;\n\n strapi?: Core.Strapi;\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalStrapiSourceProviderOptions) {\n this.options = options;\n }\n\n async bootstrap(diagnostics?: IDiagnosticReporter): Promise<void> {\n this.#diagnostics = diagnostics;\n this.strapi = await this.options.getStrapi();\n this.strapi.db.lifecycles.disable();\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'local-source-provider',\n },\n kind: 'info',\n });\n }\n\n #reportWarning(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'local-source-provider',\n },\n kind: 'warning',\n });\n }\n\n /**\n * Reports an error to the diagnostic reporter.\n */\n #reportError(message: string, error: Error) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n error,\n severity: 'fatal',\n name: error.name,\n },\n kind: 'error',\n });\n }\n\n /**\n * Handles errors that occur in read streams.\n */\n #handleStreamError(streamType: string, err: Error) {\n const { message, stack } = err;\n const errorMessage = `[Data transfer] Error in ${streamType} read stream: ${message}`;\n const formattedError = {\n message: errorMessage,\n stack,\n timestamp: new Date().toISOString(),\n };\n\n this.strapi?.log.error(formattedError);\n this.#reportError(formattedError.message, err);\n }\n\n async close(): Promise<void> {\n const { autoDestroy } = this.options;\n assertValidStrapi(this.strapi);\n this.strapi.db.lifecycles.enable();\n // Basically `!== false` but more deterministic\n if (autoDestroy === undefined || autoDestroy === true) {\n await this.strapi?.destroy();\n }\n }\n\n getMetadata(): IMetadata {\n this.#reportInfo('getting metadata');\n assertValidStrapi(this.strapi);\n const strapiVersion = this.strapi.config.get<string>('info.strapi');\n const createdAt = new Date().toISOString();\n\n return {\n createdAt,\n strapi: {\n version: strapiVersion,\n },\n };\n }\n\n async createEntitiesReadStream(): Promise<Readable> {\n assertValidStrapi(this.strapi, 'Not able to stream entities');\n this.#reportInfo('creating entities read stream');\n return chain([\n // Entities stream\n createEntitiesStream(this.strapi, {\n onWarning: (message) => {\n this.strapi?.log.warn(message);\n this.#reportWarning(message);\n },\n }),\n\n // Transform stream\n createEntitiesTransformStream(),\n ]);\n }\n\n createLinksReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream links');\n this.#reportInfo('creating links read stream');\n\n return createLinksStream(this.strapi);\n }\n\n createConfigurationReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream configuration');\n this.#reportInfo('creating configuration read stream');\n return createConfigurationStream(this.strapi);\n }\n\n getSchemas(): Record<string, Struct.Schema> {\n assertValidStrapi(this.strapi, 'Not able to get Schemas');\n this.#reportInfo('getting schemas');\n const schemas = utils.schema.schemasToValidJSON({\n ...this.strapi.contentTypes,\n ...this.strapi.components,\n });\n\n return utils.schema.mapSchemasValues(schemas);\n }\n\n createSchemasReadStream(): Readable {\n return Readable.from(Object.values(this.getSchemas()));\n }\n\n createAssetsReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream assets');\n this.#reportInfo('creating assets read stream');\n\n const stream = createAssetsStream(this.strapi, {\n onWarning: (message) => this.#reportWarning(message),\n });\n stream.on('error', (err) => {\n this.#handleStreamError('assets', err);\n });\n\n return stream;\n }\n\n async getStageTotals(stage: TransferStage) {\n if (stage !== 'assets') {\n return null;\n }\n assertValidStrapi(this.strapi, 'Not able to estimate asset totals');\n return estimateAssetTotals(this.strapi);\n }\n}\n\nexport type ILocalStrapiSourceProvider = InstanceType<typeof LocalStrapiSourceProvider>;\n\nexport { estimateAssetTotals } from './estimate-asset-totals';\n"],"names":["createLocalStrapiSourceProvider","options","LocalStrapiSourceProvider","bootstrap","diagnostics","strapi","getStrapi","db","lifecycles","disable","close","autoDestroy","assertValidStrapi","enable","undefined","destroy","getMetadata","strapiVersion","config","get","createdAt","Date","toISOString","version","createEntitiesReadStream","chain","createEntitiesStream","onWarning","message","log","warn","createEntitiesTransformStream","createLinksReadStream","createLinksStream","createConfigurationReadStream","createConfigurationStream","getSchemas","schemas","utils","contentTypes","components","createSchemasReadStream","Readable","from","Object","values","createAssetsReadStream","stream","createAssetsStream","on","err","getStageTotals","stage","estimateAssetTotals","name","type","report","details","origin","kind","error","severity","streamType","stack","errorMessage","formattedError","timestamp"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBO,MAAMA,kCAAkC,CAACC,OAAAA,GAAAA;AAC9C,IAAA,OAAO,IAAIC,yBAAAA,CAA0BD,OAAAA,CAAAA;AACvC;AAWE,IAAA,YAAA,iBAAA,8BAAA,CAAA,cAAA,CAAA,EAYA,2EAWA,cAAA,iBAAA,8BAAA,CAAA,gBAAA,CAAA;;AAaC,MACD,YAAA,iBAAA,8BAAA,CAAA,cAAA,CAAA;;MAgBA,kBAAA,iBAAA,8BAAA,CAAA,oBAAA,CAAA;AA9DF,MAAMC,yBAAAA,CAAAA;IAeJ,MAAMC,SAAAA,CAAUC,WAAiC,EAAiB;QAChE,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,GAAeA,WAAAA;QACpB,IAAI,CAACC,MAAM,GAAG,MAAM,IAAI,CAACJ,OAAO,CAACK,SAAS,EAAA;AAC1C,QAAA,IAAI,CAACD,MAAM,CAACE,EAAE,CAACC,UAAU,CAACC,OAAO,EAAA;AACnC,IAAA;AAwDA,IAAA,MAAMC,KAAAA,GAAuB;AAC3B,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAG,IAAI,CAACV,OAAO;QACpCW,2BAAAA,CAAkB,IAAI,CAACP,MAAM,CAAA;AAC7B,QAAA,IAAI,CAACA,MAAM,CAACE,EAAE,CAACC,UAAU,CAACK,MAAM,EAAA;;QAEhC,IAAIF,WAAAA,KAAgBG,SAAAA,IAAaH,WAAAA,KAAgB,IAAA,EAAM;YACrD,MAAM,IAAI,CAACN,MAAM,EAAEU,OAAAA,EAAAA;AACrB,QAAA;AACF,IAAA;IAEAC,WAAAA,GAAyB;QACvB,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,kBAAA,CAAA;QACjBJ,2BAAAA,CAAkB,IAAI,CAACP,MAAM,CAAA;QAC7B,MAAMY,aAAAA,GAAgB,IAAI,CAACZ,MAAM,CAACa,MAAM,CAACC,GAAG,CAAS,aAAA,CAAA;QACrD,MAAMC,SAAAA,GAAY,IAAIC,IAAAA,EAAAA,CAAOC,WAAW,EAAA;QAExC,OAAO;AACLF,YAAAA,SAAAA;YACAf,MAAAA,EAAQ;gBACNkB,OAAAA,EAASN;AACX;AACF,SAAA;AACF,IAAA;AAEA,IAAA,MAAMO,wBAAAA,GAA8C;QAClDZ,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,6BAAA,CAAA;QAC/B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,+BAAA,CAAA;AACjB,QAAA,OAAOoB,iBAAAA,CAAM;;YAEXC,6BAAAA,CAAqB,IAAI,CAACrB,MAAM,EAAE;AAChCsB,gBAAAA,SAAAA,EAAW,CAACC,OAAAA,GAAAA;AACV,oBAAA,IAAI,CAACvB,MAAM,EAAEwB,GAAAA,CAAIC,IAAAA,CAAKF,OAAAA,CAAAA;oBACtB,+BAAA,CAAA,IAAI,EAAC,cAAA,CAAA,CAAA,cAAA,CAAA,CAAeA,OAAAA,CAAAA;AACtB,gBAAA;AACF,aAAA,CAAA;;AAGAG,YAAAA,sCAAAA;AACD,SAAA,CAAA;AACH,IAAA;IAEAC,qBAAAA,GAAkC;QAChCpB,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,0BAAA,CAAA;QAC/B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,4BAAA,CAAA;QAEjB,OAAO4B,uBAAAA,CAAkB,IAAI,CAAC5B,MAAM,CAAA;AACtC,IAAA;IAEA6B,6BAAAA,GAA0C;QACxCtB,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,kCAAA,CAAA;QAC/B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,oCAAA,CAAA;QACjB,OAAO8B,uCAAAA,CAA0B,IAAI,CAAC9B,MAAM,CAAA;AAC9C,IAAA;IAEA+B,UAAAA,GAA4C;QAC1CxB,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,yBAAA,CAAA;QAC/B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,iBAAA,CAAA;AACjB,QAAA,MAAMgC,OAAAA,GAAUC,yBAA+B,CAAC;AAC9C,YAAA,GAAG,IAAI,CAACjC,MAAM,CAACkC,YAAY;AAC3B,YAAA,GAAG,IAAI,CAAClC,MAAM,CAACmC;AACjB,SAAA,CAAA;AAEA,QAAA,OAAOF,uBAA6B,CAACD,OAAAA,CAAAA;AACvC,IAAA;IAEAI,uBAAAA,GAAoC;QAClC,OAAOC,eAAAA,CAASC,IAAI,CAACC,MAAAA,CAAOC,MAAM,CAAC,IAAI,CAACT,UAAU,EAAA,CAAA,CAAA;AACpD,IAAA;IAEAU,sBAAAA,GAAmC;QACjClC,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,2BAAA,CAAA;QAC/B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,6BAAA,CAAA;AAEjB,QAAA,MAAM0C,MAAAA,GAASC,yBAAAA,CAAmB,IAAI,CAAC3C,MAAM,EAAE;AAC7CsB,YAAAA,SAAAA,EAAW,CAACC,OAAAA,GAAY,+BAAA,CAAA,IAAI,EAAC,gBAAA,cAAA,CAAA,CAAeA,OAAAA;AAC9C,SAAA,CAAA;QACAmB,MAAAA,CAAOE,EAAE,CAAC,OAAA,EAAS,CAACC,GAAAA,GAAAA;AAClB,YAAA,+BAAA,CAAA,IAAI,EAAC,kBAAA,CAAA,CAAA,kBAAA,CAAA,CAAmB,QAAA,EAAUA,GAAAA,CAAAA;AACpC,QAAA,CAAA,CAAA;QAEA,OAAOH,MAAAA;AACT,IAAA;IAEA,MAAMI,cAAAA,CAAeC,KAAoB,EAAE;AACzC,QAAA,IAAIA,UAAU,QAAA,EAAU;YACtB,OAAO,IAAA;AACT,QAAA;QACAxC,2BAAAA,CAAkB,IAAI,CAACP,MAAM,EAAE,mCAAA,CAAA;QAC/B,OAAOgD,uCAAAA,CAAoB,IAAI,CAAChD,MAAM,CAAA;AACxC,IAAA;AAzJA,IAAA,WAAA,CAAYJ,OAA0C,CAAE;QAUxD,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,WAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAWA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,cAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAcA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAgBA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,kBAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QArDA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA;;mBAAA;;aARAqD,IAAAA,GAAO,sBAAA;aAEPC,IAAAA,GAAqB,QAAA;QASnB,IAAI,CAACtD,OAAO,GAAGA,OAAAA;AACjB,IAAA;AAwJF;AAhJE,SAAA,WAAY2B,OAAe,EAAA;AACzB,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,EAAc4B,MAAAA,CAAO;QACxBC,OAAAA,EAAS;AACPrC,YAAAA,SAAAA,EAAW,IAAIC,IAAAA,EAAAA;AACfO,YAAAA,OAAAA;YACA8B,MAAAA,EAAQ;AACV,SAAA;QACAC,IAAAA,EAAM;AACR,KAAA,CAAA;AACF;AAEA,SAAA,cAAe/B,OAAe,EAAA;AAC5B,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,EAAc4B,MAAAA,CAAO;QACxBC,OAAAA,EAAS;AACPrC,YAAAA,SAAAA,EAAW,IAAIC,IAAAA,EAAAA;AACfO,YAAAA,OAAAA;YACA8B,MAAAA,EAAQ;AACV,SAAA;QACAC,IAAAA,EAAM;AACR,KAAA,CAAA;AACF;AAKA,SAAA,WAAA,CAAa/B,OAAe,EAAEgC,KAAY,EAAA;AACxC,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,EAAcJ,MAAAA,CAAO;QACxBC,OAAAA,EAAS;AACPrC,YAAAA,SAAAA,EAAW,IAAIC,IAAAA,EAAAA;AACfO,YAAAA,OAAAA;AACAgC,YAAAA,KAAAA;YACAC,QAAAA,EAAU,OAAA;AACVP,YAAAA,IAAAA,EAAMM,MAAMN;AACd,SAAA;QACAK,IAAAA,EAAM;AACR,KAAA,CAAA;AACF;AAKA,SAAA,iBAAA,CAAmBG,UAAkB,EAAEZ,GAAU,EAAA;AAC/C,IAAA,MAAM,EAAEtB,OAAO,EAAEmC,KAAK,EAAE,GAAGb,GAAAA;AAC3B,IAAA,MAAMc,eAAe,CAAC,yBAAyB,EAAEF,UAAAA,CAAW,cAAc,EAAElC,OAAAA,CAAAA,CAAS;AACrF,IAAA,MAAMqC,cAAAA,GAAiB;QACrBrC,OAAAA,EAASoC,YAAAA;AACTD,QAAAA,KAAAA;QACAG,SAAAA,EAAW,IAAI7C,OAAOC,WAAW;AACnC,KAAA;AAEA,IAAA,IAAI,CAACjB,MAAM,EAAEwB,GAAAA,CAAI+B,KAAAA,CAAMK,cAAAA,CAAAA;AACvB,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,CAAaA,cAAAA,CAAerC,OAAO,EAAEsB,GAAAA,CAAAA;AAC5C;;;;;"}
|
|
@@ -63,7 +63,12 @@ class LocalStrapiSourceProvider {
|
|
|
63
63
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('creating entities read stream');
|
|
64
64
|
return chain([
|
|
65
65
|
// Entities stream
|
|
66
|
-
createEntitiesStream(this.strapi
|
|
66
|
+
createEntitiesStream(this.strapi, {
|
|
67
|
+
onWarning: (message)=>{
|
|
68
|
+
this.strapi?.log.warn(message);
|
|
69
|
+
_class_private_field_loose_base(this, _reportWarning)[_reportWarning](message);
|
|
70
|
+
}
|
|
71
|
+
}),
|
|
67
72
|
// Transform stream
|
|
68
73
|
createEntitiesTransformStream()
|
|
69
74
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/strapi/providers/local-source/index.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { chain } from 'stream-chain';\nimport type { Core, Struct } from '@strapi/types';\n\nimport type { IMetadata, ISourceProvider, ProviderType, TransferStage } from '../../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { createEntitiesStream, createEntitiesTransformStream } from './entities';\nimport { createLinksStream } from './links';\nimport { createConfigurationStream } from './configuration';\nimport { createAssetsStream } from './assets';\nimport { estimateAssetTotals } from './estimate-asset-totals';\nimport * as utils from '../../../utils';\nimport { assertValidStrapi } from '../../../utils/providers';\n\nexport interface ILocalStrapiSourceProviderOptions {\n getStrapi(): Core.Strapi | Promise<Core.Strapi>; // return an initialized instance of Strapi\n\n autoDestroy?: boolean; // shut down the instance returned by getStrapi() at the end of the transfer\n}\n\nexport const createLocalStrapiSourceProvider = (options: ILocalStrapiSourceProviderOptions) => {\n return new LocalStrapiSourceProvider(options);\n};\n\nclass LocalStrapiSourceProvider implements ISourceProvider {\n name = 'source::local-strapi';\n\n type: ProviderType = 'source';\n\n options: ILocalStrapiSourceProviderOptions;\n\n strapi?: Core.Strapi;\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalStrapiSourceProviderOptions) {\n this.options = options;\n }\n\n async bootstrap(diagnostics?: IDiagnosticReporter): Promise<void> {\n this.#diagnostics = diagnostics;\n this.strapi = await this.options.getStrapi();\n this.strapi.db.lifecycles.disable();\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'local-source-provider',\n },\n kind: 'info',\n });\n }\n\n #reportWarning(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'local-source-provider',\n },\n kind: 'warning',\n });\n }\n\n /**\n * Reports an error to the diagnostic reporter.\n */\n #reportError(message: string, error: Error) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n error,\n severity: 'fatal',\n name: error.name,\n },\n kind: 'error',\n });\n }\n\n /**\n * Handles errors that occur in read streams.\n */\n #handleStreamError(streamType: string, err: Error) {\n const { message, stack } = err;\n const errorMessage = `[Data transfer] Error in ${streamType} read stream: ${message}`;\n const formattedError = {\n message: errorMessage,\n stack,\n timestamp: new Date().toISOString(),\n };\n\n this.strapi?.log.error(formattedError);\n this.#reportError(formattedError.message, err);\n }\n\n async close(): Promise<void> {\n const { autoDestroy } = this.options;\n assertValidStrapi(this.strapi);\n this.strapi.db.lifecycles.enable();\n // Basically `!== false` but more deterministic\n if (autoDestroy === undefined || autoDestroy === true) {\n await this.strapi?.destroy();\n }\n }\n\n getMetadata(): IMetadata {\n this.#reportInfo('getting metadata');\n assertValidStrapi(this.strapi);\n const strapiVersion = this.strapi.config.get<string>('info.strapi');\n const createdAt = new Date().toISOString();\n\n return {\n createdAt,\n strapi: {\n version: strapiVersion,\n },\n };\n }\n\n async createEntitiesReadStream(): Promise<Readable> {\n assertValidStrapi(this.strapi, 'Not able to stream entities');\n this.#reportInfo('creating entities read stream');\n return chain([\n // Entities stream\n createEntitiesStream(this.strapi),\n\n // Transform stream\n createEntitiesTransformStream(),\n ]);\n }\n\n createLinksReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream links');\n this.#reportInfo('creating links read stream');\n\n return createLinksStream(this.strapi);\n }\n\n createConfigurationReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream configuration');\n this.#reportInfo('creating configuration read stream');\n return createConfigurationStream(this.strapi);\n }\n\n getSchemas(): Record<string, Struct.Schema> {\n assertValidStrapi(this.strapi, 'Not able to get Schemas');\n this.#reportInfo('getting schemas');\n const schemas = utils.schema.schemasToValidJSON({\n ...this.strapi.contentTypes,\n ...this.strapi.components,\n });\n\n return utils.schema.mapSchemasValues(schemas);\n }\n\n createSchemasReadStream(): Readable {\n return Readable.from(Object.values(this.getSchemas()));\n }\n\n createAssetsReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream assets');\n this.#reportInfo('creating assets read stream');\n\n const stream = createAssetsStream(this.strapi, {\n onWarning: (message) => this.#reportWarning(message),\n });\n stream.on('error', (err) => {\n this.#handleStreamError('assets', err);\n });\n\n return stream;\n }\n\n async getStageTotals(stage: TransferStage) {\n if (stage !== 'assets') {\n return null;\n }\n assertValidStrapi(this.strapi, 'Not able to estimate asset totals');\n return estimateAssetTotals(this.strapi);\n }\n}\n\nexport type ILocalStrapiSourceProvider = InstanceType<typeof LocalStrapiSourceProvider>;\n\nexport { estimateAssetTotals } from './estimate-asset-totals';\n"],"names":["createLocalStrapiSourceProvider","options","LocalStrapiSourceProvider","bootstrap","diagnostics","strapi","getStrapi","db","lifecycles","disable","close","autoDestroy","assertValidStrapi","enable","undefined","destroy","getMetadata","strapiVersion","config","get","createdAt","Date","toISOString","version","createEntitiesReadStream","chain","createEntitiesStream","createEntitiesTransformStream","createLinksReadStream","createLinksStream","createConfigurationReadStream","createConfigurationStream","getSchemas","schemas","utils","contentTypes","components","createSchemasReadStream","Readable","from","Object","values","createAssetsReadStream","stream","createAssetsStream","onWarning","message","on","err","getStageTotals","stage","estimateAssetTotals","name","type","report","details","origin","kind","error","severity","streamType","stack","errorMessage","formattedError","timestamp","log"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/strapi/providers/local-source/index.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { chain } from 'stream-chain';\nimport type { Core, Struct } from '@strapi/types';\n\nimport type { IMetadata, ISourceProvider, ProviderType, TransferStage } from '../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { createEntitiesStream, createEntitiesTransformStream } from './entities';\nimport { createLinksStream } from './links';\nimport { createConfigurationStream } from './configuration';\nimport { createAssetsStream } from './assets';\nimport { estimateAssetTotals } from './estimate-asset-totals';\nimport * as utils from '../../../utils';\nimport { assertValidStrapi } from '../../../utils/providers';\n\nexport interface ILocalStrapiSourceProviderOptions {\n getStrapi(): Core.Strapi | Promise<Core.Strapi>; // return an initialized instance of Strapi\n\n autoDestroy?: boolean; // shut down the instance returned by getStrapi() at the end of the transfer\n}\n\nexport const createLocalStrapiSourceProvider = (options: ILocalStrapiSourceProviderOptions) => {\n return new LocalStrapiSourceProvider(options);\n};\n\nclass LocalStrapiSourceProvider implements ISourceProvider {\n name = 'source::local-strapi';\n\n type: ProviderType = 'source';\n\n options: ILocalStrapiSourceProviderOptions;\n\n strapi?: Core.Strapi;\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalStrapiSourceProviderOptions) {\n this.options = options;\n }\n\n async bootstrap(diagnostics?: IDiagnosticReporter): Promise<void> {\n this.#diagnostics = diagnostics;\n this.strapi = await this.options.getStrapi();\n this.strapi.db.lifecycles.disable();\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'local-source-provider',\n },\n kind: 'info',\n });\n }\n\n #reportWarning(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'local-source-provider',\n },\n kind: 'warning',\n });\n }\n\n /**\n * Reports an error to the diagnostic reporter.\n */\n #reportError(message: string, error: Error) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n error,\n severity: 'fatal',\n name: error.name,\n },\n kind: 'error',\n });\n }\n\n /**\n * Handles errors that occur in read streams.\n */\n #handleStreamError(streamType: string, err: Error) {\n const { message, stack } = err;\n const errorMessage = `[Data transfer] Error in ${streamType} read stream: ${message}`;\n const formattedError = {\n message: errorMessage,\n stack,\n timestamp: new Date().toISOString(),\n };\n\n this.strapi?.log.error(formattedError);\n this.#reportError(formattedError.message, err);\n }\n\n async close(): Promise<void> {\n const { autoDestroy } = this.options;\n assertValidStrapi(this.strapi);\n this.strapi.db.lifecycles.enable();\n // Basically `!== false` but more deterministic\n if (autoDestroy === undefined || autoDestroy === true) {\n await this.strapi?.destroy();\n }\n }\n\n getMetadata(): IMetadata {\n this.#reportInfo('getting metadata');\n assertValidStrapi(this.strapi);\n const strapiVersion = this.strapi.config.get<string>('info.strapi');\n const createdAt = new Date().toISOString();\n\n return {\n createdAt,\n strapi: {\n version: strapiVersion,\n },\n };\n }\n\n async createEntitiesReadStream(): Promise<Readable> {\n assertValidStrapi(this.strapi, 'Not able to stream entities');\n this.#reportInfo('creating entities read stream');\n return chain([\n // Entities stream\n createEntitiesStream(this.strapi, {\n onWarning: (message) => {\n this.strapi?.log.warn(message);\n this.#reportWarning(message);\n },\n }),\n\n // Transform stream\n createEntitiesTransformStream(),\n ]);\n }\n\n createLinksReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream links');\n this.#reportInfo('creating links read stream');\n\n return createLinksStream(this.strapi);\n }\n\n createConfigurationReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream configuration');\n this.#reportInfo('creating configuration read stream');\n return createConfigurationStream(this.strapi);\n }\n\n getSchemas(): Record<string, Struct.Schema> {\n assertValidStrapi(this.strapi, 'Not able to get Schemas');\n this.#reportInfo('getting schemas');\n const schemas = utils.schema.schemasToValidJSON({\n ...this.strapi.contentTypes,\n ...this.strapi.components,\n });\n\n return utils.schema.mapSchemasValues(schemas);\n }\n\n createSchemasReadStream(): Readable {\n return Readable.from(Object.values(this.getSchemas()));\n }\n\n createAssetsReadStream(): Readable {\n assertValidStrapi(this.strapi, 'Not able to stream assets');\n this.#reportInfo('creating assets read stream');\n\n const stream = createAssetsStream(this.strapi, {\n onWarning: (message) => this.#reportWarning(message),\n });\n stream.on('error', (err) => {\n this.#handleStreamError('assets', err);\n });\n\n return stream;\n }\n\n async getStageTotals(stage: TransferStage) {\n if (stage !== 'assets') {\n return null;\n }\n assertValidStrapi(this.strapi, 'Not able to estimate asset totals');\n return estimateAssetTotals(this.strapi);\n }\n}\n\nexport type ILocalStrapiSourceProvider = InstanceType<typeof LocalStrapiSourceProvider>;\n\nexport { estimateAssetTotals } from './estimate-asset-totals';\n"],"names":["createLocalStrapiSourceProvider","options","LocalStrapiSourceProvider","bootstrap","diagnostics","strapi","getStrapi","db","lifecycles","disable","close","autoDestroy","assertValidStrapi","enable","undefined","destroy","getMetadata","strapiVersion","config","get","createdAt","Date","toISOString","version","createEntitiesReadStream","chain","createEntitiesStream","onWarning","message","log","warn","createEntitiesTransformStream","createLinksReadStream","createLinksStream","createConfigurationReadStream","createConfigurationStream","getSchemas","schemas","utils","contentTypes","components","createSchemasReadStream","Readable","from","Object","values","createAssetsReadStream","stream","createAssetsStream","on","err","getStageTotals","stage","estimateAssetTotals","name","type","report","details","origin","kind","error","severity","streamType","stack","errorMessage","formattedError","timestamp"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"links.js","sources":["../../../../src/strapi/providers/local-source/links.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport type { Core } from '@strapi/types';\n\nimport type { ILink } from '
|
|
1
|
+
{"version":3,"file":"links.js","sources":["../../../../src/strapi/providers/local-source/links.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport type { Core } from '@strapi/types';\n\nimport type { ILink } from '../../../types';\nimport { createLinkQuery } from '../../queries/link';\n\n/**\n * Create a Readable which will stream all the links from a Strapi instance\n */\nexport const createLinksStream = (strapi: Core.Strapi): Readable => {\n const uids = [...Object.keys(strapi.contentTypes), ...Object.keys(strapi.components)] as string[];\n\n // Async generator stream that returns every link from a Strapi instance\n return Readable.from(\n (async function* linkGenerator(): AsyncGenerator<ILink> {\n const query = createLinkQuery(strapi);\n\n for (const uid of uids) {\n const generator = query().generateAll(uid);\n\n for await (const link of generator) {\n yield link;\n }\n }\n })()\n );\n};\n"],"names":["createLinksStream","strapi","uids","Object","keys","contentTypes","components","Readable","from","linkGenerator","query","createLinkQuery","uid","generator","generateAll","link"],"mappings":";;;;;AAMA;;IAGO,MAAMA,iBAAAA,GAAoB,CAACC,MAAAA,GAAAA;AAChC,IAAA,MAAMC,IAAAA,GAAO;WAAIC,MAAAA,CAAOC,IAAI,CAACH,MAAAA,CAAOI,YAAY,CAAA;WAAMF,MAAAA,CAAOC,IAAI,CAACH,MAAAA,CAAOK,UAAU;AAAE,KAAA;;AAGrF,IAAA,OAAOC,eAAAA,CAASC,IAAI,CACjB,gBAAgBC,aAAAA,GAAAA;AACf,QAAA,MAAMC,QAAQC,oBAAAA,CAAgBV,MAAAA,CAAAA;QAE9B,KAAK,MAAMW,OAAOV,IAAAA,CAAM;YACtB,MAAMW,SAAAA,GAAYH,KAAAA,EAAAA,CAAQI,WAAW,CAACF,GAAAA,CAAAA;YAEtC,WAAW,MAAMG,QAAQF,SAAAA,CAAW;gBAClC,MAAME,IAAAA;AACR,YAAA;AACF,QAAA;AACF,IAAA,CAAA,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"links.mjs","sources":["../../../../src/strapi/providers/local-source/links.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport type { Core } from '@strapi/types';\n\nimport type { ILink } from '
|
|
1
|
+
{"version":3,"file":"links.mjs","sources":["../../../../src/strapi/providers/local-source/links.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport type { Core } from '@strapi/types';\n\nimport type { ILink } from '../../../types';\nimport { createLinkQuery } from '../../queries/link';\n\n/**\n * Create a Readable which will stream all the links from a Strapi instance\n */\nexport const createLinksStream = (strapi: Core.Strapi): Readable => {\n const uids = [...Object.keys(strapi.contentTypes), ...Object.keys(strapi.components)] as string[];\n\n // Async generator stream that returns every link from a Strapi instance\n return Readable.from(\n (async function* linkGenerator(): AsyncGenerator<ILink> {\n const query = createLinkQuery(strapi);\n\n for (const uid of uids) {\n const generator = query().generateAll(uid);\n\n for await (const link of generator) {\n yield link;\n }\n }\n })()\n );\n};\n"],"names":["createLinksStream","strapi","uids","Object","keys","contentTypes","components","Readable","from","linkGenerator","query","createLinkQuery","uid","generator","generateAll","link"],"mappings":";;;AAMA;;IAGO,MAAMA,iBAAAA,GAAoB,CAACC,MAAAA,GAAAA;AAChC,IAAA,MAAMC,IAAAA,GAAO;WAAIC,MAAAA,CAAOC,IAAI,CAACH,MAAAA,CAAOI,YAAY,CAAA;WAAMF,MAAAA,CAAOC,IAAI,CAACH,MAAAA,CAAOK,UAAU;AAAE,KAAA;;AAGrF,IAAA,OAAOC,QAAAA,CAASC,IAAI,CACjB,gBAAgBC,aAAAA,GAAAA;AACf,QAAA,MAAMC,QAAQC,eAAAA,CAAgBV,MAAAA,CAAAA;QAE9B,KAAK,MAAMW,OAAOV,IAAAA,CAAM;YACtB,MAAMW,SAAAA,GAAYH,KAAAA,EAAAA,CAAQI,WAAW,CAACF,GAAAA,CAAAA;YAEtC,WAAW,MAAMG,QAAQF,SAAAA,CAAW;gBAClC,MAAME,IAAAA;AACR,YAAA;AACF,QAAA;AACF,IAAA,CAAA,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -3,9 +3,9 @@ import { Writable } from 'stream';
|
|
|
3
3
|
import { WebSocket } from 'ws';
|
|
4
4
|
import type { Struct, Utils } from '@strapi/types';
|
|
5
5
|
import { createDispatcher } from '../utils';
|
|
6
|
-
import type { IDestinationProvider, IMetadata, ProviderType, TransferStage } from '
|
|
6
|
+
import type { IDestinationProvider, IMetadata, ProviderType, TransferStage } from '../../../types';
|
|
7
7
|
import type { IDiagnosticReporter } from '../../../utils/diagnostic';
|
|
8
|
-
import type { Auth } from '
|
|
8
|
+
import type { Auth } from '../../../types/remote/protocol';
|
|
9
9
|
import type { ILocalStrapiDestinationProviderOptions } from '../local-destination';
|
|
10
10
|
export interface IRemoteStrapiDestinationProviderOptions extends Pick<ILocalStrapiDestinationProviderOptions, 'restore' | 'strategy' | 'onTransferPhase'> {
|
|
11
11
|
url: URL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/strapi/providers/remote-destination/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAyC,MAAM,UAAU,CAAC;AAEnF,OAAO,KAAK,EACV,oBAAoB,EACpB,SAAS,EACT,YAAY,EAEZ,aAAa,EAEd,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/strapi/providers/remote-destination/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAyC,MAAM,UAAU,CAAC;AAEnF,OAAO,KAAK,EACV,oBAAoB,EACpB,SAAS,EACT,YAAY,EAEZ,aAAa,EAEd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAkB,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,sBAAsB,CAAC;AASnF,MAAM,WAAW,uCACf,SAAQ,IAAI,CAAC,sCAAsC,EAAE,SAAS,GAAG,UAAU,GAAG,iBAAiB,CAAC;IAChG,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAC/B,mBAAmB,CAAC,EAAE;QACpB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,mFAAmF;IACnF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAwBD,cAAM,+BAAgC,YAAW,oBAAoB;;IACnE,IAAI,SAAgC;IAEpC,IAAI,EAAE,YAAY,CAAiB;IAEnC,OAAO,EAAE,uCAAuC,CAAC;IAEjD,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC;IAErB,UAAU,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAEvD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,KAAK,EAAG;SAAG,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE;KAAE,CAAC;gBAajE,OAAO,EAAE,uCAAuC;IAU5D,OAAO,CAAC,UAAU;IASZ,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IA4O/B,SAAS,CAAC,WAAW,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+D3D,KAAK;IAuBX,WAAW;IAIL,cAAc;IAOd,QAAQ;IAId,UAAU;IAQV,yBAAyB,IAAI,QAAQ;IAIrC,sBAAsB,IAAI,QAAQ;IAIlC,8BAA8B,IAAI,QAAQ;IAI1C,uBAAuB,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;CAyFxD;AAED,eAAO,MAAM,qCAAqC,YACvC,uCAAuC,oCAGjD,CAAC"}
|