@strapi/data-transfer 5.53.0 → 5.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/directory/providers/destination/index.d.ts.map +1 -1
  2. package/dist/directory/providers/destination/index.js +11 -1
  3. package/dist/directory/providers/destination/index.js.map +1 -1
  4. package/dist/directory/providers/destination/index.mjs +11 -1
  5. package/dist/directory/providers/destination/index.mjs.map +1 -1
  6. package/dist/directory/providers/source/index.d.ts +2 -1
  7. package/dist/directory/providers/source/index.d.ts.map +1 -1
  8. package/dist/directory/providers/source/index.js +45 -12
  9. package/dist/directory/providers/source/index.js.map +1 -1
  10. package/dist/directory/providers/source/index.mjs +47 -14
  11. package/dist/directory/providers/source/index.mjs.map +1 -1
  12. package/dist/engine/index.d.ts +1 -0
  13. package/dist/engine/index.d.ts.map +1 -1
  14. package/dist/engine/index.js +62 -5
  15. package/dist/engine/index.js.map +1 -1
  16. package/dist/engine/index.mjs +62 -5
  17. package/dist/engine/index.mjs.map +1 -1
  18. package/dist/file/providers/destination/index.d.ts.map +1 -1
  19. package/dist/file/providers/destination/index.js +11 -1
  20. package/dist/file/providers/destination/index.js.map +1 -1
  21. package/dist/file/providers/destination/index.mjs +11 -1
  22. package/dist/file/providers/destination/index.mjs.map +1 -1
  23. package/dist/file/providers/source/index.d.ts +2 -1
  24. package/dist/file/providers/source/index.d.ts.map +1 -1
  25. package/dist/file/providers/source/index.js +97 -8
  26. package/dist/file/providers/source/index.js.map +1 -1
  27. package/dist/file/providers/source/index.mjs +100 -11
  28. package/dist/file/providers/source/index.mjs.map +1 -1
  29. package/dist/file/providers/source/utils.d.ts +2 -0
  30. package/dist/file/providers/source/utils.d.ts.map +1 -1
  31. package/dist/file/providers/source/utils.js +43 -0
  32. package/dist/file/providers/source/utils.js.map +1 -1
  33. package/dist/file/providers/source/utils.mjs +43 -1
  34. package/dist/file/providers/source/utils.mjs.map +1 -1
  35. package/dist/strapi/providers/local-source/assets.js +2 -2
  36. package/dist/strapi/providers/local-source/assets.js.map +1 -1
  37. package/dist/strapi/providers/local-source/assets.mjs +2 -2
  38. package/dist/strapi/providers/local-source/assets.mjs.map +1 -1
  39. package/dist/types/providers.d.ts +10 -0
  40. package/dist/types/providers.d.ts.map +1 -1
  41. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/directory/providers/source/index.ts"],"sourcesContent":["import path from 'path';\nimport type { Readable } from 'stream';\nimport { PassThrough } from 'stream';\n\nimport fs from 'fs-extra';\nimport { isEmpty, keyBy } from 'lodash/fp';\nimport { chain } from 'stream-chain';\nimport { parser } from 'stream-json/jsonl/Parser';\nimport type { Struct } from '@strapi/types';\n\nimport type { IAsset, IMetadata, ISourceProvider, ProviderType } from '../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\n\nimport * as utils from '../../../utils';\nimport { write } from '../../../utils/writable-async-write';\nimport { ProviderInitializationError, ProviderTransferError } from '../../../errors/providers';\nimport { unknownPathToPosix } from '../../../file/providers/source/utils';\n\nconst METADATA_FILE_PATH = 'metadata.json';\n\nexport interface ILocalDirectorySourceProviderOptions {\n directory: {\n /** Absolute or relative path to the root of an unpacked Strapi data-transfer export */\n path: string;\n };\n}\n\nexport const createLocalDirectorySourceProvider = (\n options: ILocalDirectorySourceProviderOptions\n) => {\n return new LocalDirectorySourceProvider(options);\n};\n\nconst isPathInsideRoot = (root: string, candidate: string): boolean => {\n const relative = path.relative(root, candidate);\n return relative === '' || (!relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));\n};\n\nclass LocalDirectorySourceProvider implements ISourceProvider {\n type: ProviderType = 'source';\n\n name = 'source::local-directory';\n\n options: ILocalDirectorySourceProviderOptions;\n\n #rootResolved: string;\n\n #metadata?: IMetadata;\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalDirectorySourceProviderOptions) {\n this.options = options;\n this.#rootResolved = path.resolve(options.directory.path);\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'directory-source-provider',\n },\n kind: 'info',\n });\n }\n\n /** Resolve a posix-style relative path under the export root; rejects escapes. */\n #safePath(...posixSegments: string[]): string {\n const joined = path.posix.join(...posixSegments);\n const segments = joined.split(path.posix.sep).filter(Boolean);\n const resolved = path.resolve(this.#rootResolved, ...segments);\n if (!isPathInsideRoot(this.#rootResolved, resolved)) {\n throw new ProviderInitializationError(`Invalid path \"${joined}\" — escapes backup directory`);\n }\n return resolved;\n }\n\n async bootstrap(diagnostics: IDiagnosticReporter) {\n this.#diagnostics = diagnostics;\n const root = this.#rootResolved;\n\n try {\n const stat = await fs.stat(root);\n if (!stat.isDirectory()) {\n throw new ProviderInitializationError(`Path '${root}' is not a directory.`);\n }\n await this.#loadMetadata();\n } catch (e) {\n if (e instanceof ProviderInitializationError) {\n throw e;\n }\n throw new ProviderInitializationError(\n `Directory '${root}' is not a valid Strapi data export.`\n );\n }\n\n if (!this.#metadata) {\n throw new ProviderInitializationError('Could not load metadata from Strapi data export.');\n }\n }\n\n async #loadMetadata() {\n const metadataPath = this.#safePath(METADATA_FILE_PATH);\n if (!(await fs.pathExists(metadataPath))) {\n throw new ProviderInitializationError(\n `Missing ${METADATA_FILE_PATH} in export directory '${this.#rootResolved}'.`\n );\n }\n this.#metadata = await fs.readJson(metadataPath);\n }\n\n async getMetadata() {\n this.#reportInfo('getting metadata');\n if (!this.#metadata) {\n await this.#loadMetadata();\n }\n return this.#metadata ?? null;\n }\n\n async getSchemas() {\n this.#reportInfo('getting schemas');\n const schemaCollection = await utils.stream.collect<Struct.Schema>(\n this.createSchemasReadStream()\n );\n\n if (isEmpty(schemaCollection)) {\n throw new ProviderInitializationError('Could not load schemas from Strapi data export.');\n }\n\n const schemas = keyBy('uid', schemaCollection);\n return utils.schema.schemasToValidJSON(schemas);\n }\n\n createEntitiesReadStream(): Readable {\n this.#reportInfo('creating entities read stream');\n return this.#streamJsonlDirectory('entities');\n }\n\n createSchemasReadStream(): Readable {\n this.#reportInfo('creating schemas read stream');\n return this.#streamJsonlDirectory('schemas');\n }\n\n createLinksReadStream(): Readable {\n this.#reportInfo('creating links read stream');\n return this.#streamJsonlDirectory('links');\n }\n\n createConfigurationReadStream(): Readable {\n this.#reportInfo('creating configuration read stream');\n return this.#streamJsonlDirectory('configuration');\n }\n\n createAssetsReadStream(): Readable {\n const outStream = new PassThrough({ objectMode: true });\n const uploadsDir = this.#safePath('assets', 'uploads');\n this.#reportInfo('creating assets read stream');\n\n this.#pipeAssetsToStream(outStream, uploadsDir).catch((e: unknown) => {\n outStream.destroy(\n e instanceof Error ? e : new ProviderTransferError(String(e), { details: { error: e } })\n );\n });\n\n return outStream;\n }\n\n async #pipeAssetsToStream(outStream: PassThrough, uploadsDir: string): Promise<void> {\n if (!(await fs.pathExists(uploadsDir))) {\n outStream.end();\n return;\n }\n\n const names = (await fs.readdir(uploadsDir)).sort();\n for (const name of names) {\n const absUpload = path.join(uploadsDir, name);\n const stat = await fs.stat(absUpload);\n if (stat.isFile()) {\n let metadata: IAsset['metadata'];\n try {\n metadata = await this.#readAssetMetadata(name);\n } catch (error) {\n outStream.destroy(\n new ProviderTransferError(`Failed to read metadata for ${name}`, {\n details: { error },\n })\n );\n return;\n }\n\n const normalizedPath = unknownPathToPosix(path.posix.join('assets', 'uploads', name));\n const asset: IAsset = {\n metadata,\n filename: name,\n filepath: normalizedPath,\n stats: { size: stat.size },\n stream: fs.createReadStream(absUpload),\n };\n await write(outStream, asset);\n }\n }\n outStream.end();\n }\n\n async #readAssetMetadata(filename: string): Promise<IAsset['metadata']> {\n const metadataPath = this.#safePath('assets', 'metadata', `${filename}.json`);\n return fs.readJson(metadataPath);\n }\n\n async #listJsonlFiles(posixSubdir: string): Promise<string[]> {\n const dirAbs = this.#safePath(...posixSubdir.split('/').filter(Boolean));\n if (!(await fs.pathExists(dirAbs))) {\n return [];\n }\n const names = await fs.readdir(dirAbs);\n return names\n .filter((n) => n.endsWith('.jsonl'))\n .sort()\n .map((n) => path.join(dirAbs, n));\n }\n\n #streamJsonlDirectory(posixSubdir: string): Readable {\n const outStream = new PassThrough({ objectMode: true });\n this.#reportInfo(`streaming jsonl from ${posixSubdir}`);\n\n this.#pipeJsonlDirectoryToStream(outStream, posixSubdir).catch((e: unknown) => {\n outStream.destroy(\n e instanceof Error ? e : new ProviderTransferError(String(e), { details: { error: e } })\n );\n });\n\n return outStream;\n }\n\n async #pipeJsonlDirectoryToStream(outStream: PassThrough, posixSubdir: string): Promise<void> {\n const files = await this.#listJsonlFiles(posixSubdir);\n for (const absPath of files) {\n const transforms = [\n parser({\n checkErrors: true,\n }),\n (line: { key: string; value: object }) => line.value,\n ];\n\n const stream = fs.createReadStream(absPath).pipe(chain(transforms));\n\n try {\n for await (const chunk of stream) {\n await write(outStream, chunk);\n }\n } catch (e: unknown) {\n outStream.destroy(\n new ProviderTransferError(`Error parsing JSONL in ${absPath}: ${(e as Error).message}`, {\n details: {\n error: e,\n },\n })\n );\n return;\n }\n }\n outStream.end();\n }\n}\n"],"names":["METADATA_FILE_PATH","createLocalDirectorySourceProvider","options","LocalDirectorySourceProvider","isPathInsideRoot","root","candidate","relative","path","startsWith","sep","isAbsolute","bootstrap","diagnostics","stat","fs","isDirectory","ProviderInitializationError","e","getMetadata","getSchemas","schemaCollection","utils","createSchemasReadStream","isEmpty","schemas","keyBy","createEntitiesReadStream","createLinksReadStream","createConfigurationReadStream","createAssetsReadStream","outStream","PassThrough","objectMode","uploadsDir","catch","destroy","Error","ProviderTransferError","String","details","error","type","name","resolve","directory","message","report","createdAt","Date","origin","kind","posixSegments","joined","posix","join","segments","split","filter","Boolean","resolved","metadataPath","pathExists","readJson","end","names","readdir","sort","absUpload","isFile","metadata","normalizedPath","unknownPathToPosix","asset","filename","filepath","stats","size","stream","createReadStream","write","posixSubdir","dirAbs","n","endsWith","map","files","absPath","transforms","parser","checkErrors","line","value","pipe","chain","chunk"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAkBA,MAAMA,kBAAAA,GAAqB,eAAA;AASpB,MAAMC,qCAAqC,CAChDC,OAAAA,GAAAA;AAEA,IAAA,OAAO,IAAIC,4BAAAA,CAA6BD,OAAAA,CAAAA;AAC1C;AAEA,MAAME,gBAAAA,GAAmB,CAACC,IAAAA,EAAcC,SAAAA,GAAAA;AACtC,IAAA,MAAMC,QAAAA,GAAWC,IAAAA,CAAKD,QAAQ,CAACF,IAAAA,EAAMC,SAAAA,CAAAA;AACrC,IAAA,OAAOC,aAAa,EAAA,IAAO,CAACA,QAAAA,CAASE,UAAU,CAAC,CAAC,EAAE,EAAED,IAAAA,CAAKE,GAAG,CAAA,CAAE,CAAA,IAAK,CAACF,IAAAA,CAAKG,UAAU,CAACJ,QAAAA,CAAAA;AACvF,CAAA;IASE,aAAA,iBAAA,8BAAA,CAAA,eAAA,CAAA,EAEA,SAAA,iBAAA,8BAAA,CAAA,WAAA,CAAA,EAEA,YAAA,iBAAA,8BAAA,CAAA,cAAA,CAAA,EAOA,WAAA,iBAAA,8BAAA,CAAA,aAAA,CAAA,qFAYA,uEAkCM,aAAA,iBAAA,8BAAA,CAAA,eAAA,CAAA,EAkEA,mBAAA,iBAAA,8BAAA,CAAA,qBAAA,CAAA,EAqCA,kBAAA,iBAAA,8BAAA,CAAA,oBAAA,CAAA,EAKA,eAAA,iBAAA,8BAAA,CAAA,iBAAA,CAAA,EAYN,qBAAA,iBAAA,8BAAA,CAAA,uBAAA,CAAA,EAaM,2BAAA,iBAAA,8BAAA,CAAA,6BAAA,CAAA;AArMR,MAAMJ,4BAAAA,CAAAA;IAwCJ,MAAMS,SAAAA,CAAUC,WAAgC,EAAE;QAChD,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,GAAeA,WAAAA;AACpB,QAAA,MAAMR,IAAAA,GAAO,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,aAAA,CAAA;QAElB,IAAI;AACF,YAAA,MAAMS,IAAAA,GAAO,MAAMC,WAAAA,CAAGD,IAAI,CAACT,IAAAA,CAAAA;YAC3B,IAAI,CAACS,IAAAA,CAAKE,WAAW,EAAA,EAAI;AACvB,gBAAA,MAAM,IAAIC,2BAAAA,CAA4B,CAAC,MAAM,EAAEZ,IAAAA,CAAK,qBAAqB,CAAC,CAAA;AAC5E,YAAA;YACA,MAAM,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,aAAA,CAAA,EAAA;AACb,QAAA,CAAA,CAAE,OAAOa,CAAAA,EAAG;AACV,YAAA,IAAIA,aAAaD,2BAAAA,EAA6B;gBAC5C,MAAMC,CAAAA;AACR,YAAA;AACA,YAAA,MAAM,IAAID,2BAAAA,CACR,CAAC,WAAW,EAAEZ,IAAAA,CAAK,oCAAoC,CAAC,CAAA;AAE5D,QAAA;AAEA,QAAA,IAAI,CAAC,+BAAA,CAAA,IAAI,EAAC,WAAA,SAAA,CAAA,EAAW;AACnB,YAAA,MAAM,IAAIY,2BAAAA,CAA4B,kDAAA,CAAA;AACxC,QAAA;AACF,IAAA;AAYA,IAAA,MAAME,WAAAA,GAAc;QAClB,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,kBAAA,CAAA;AACjB,QAAA,IAAI,CAAC,+BAAA,CAAA,IAAI,EAAC,WAAA,SAAA,CAAA,EAAW;YACnB,MAAM,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,aAAA,CAAA,EAAA;AACb,QAAA;AACA,QAAA,OAAO,+BAAA,CAAA,IAAI,EAAC,SAAA,CAAA,CAAA,SAAA,CAAA,IAAa,IAAA;AAC3B,IAAA;AAEA,IAAA,MAAMC,UAAAA,GAAa;QACjB,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,iBAAA,CAAA;QACjB,MAAMC,gBAAAA,GAAmB,MAAMC,OAAoB,CACjD,IAAI,CAACC,uBAAuB,EAAA,CAAA;AAG9B,QAAA,IAAIC,QAAQH,gBAAAA,CAAAA,EAAmB;AAC7B,YAAA,MAAM,IAAIJ,2BAAAA,CAA4B,iDAAA,CAAA;AACxC,QAAA;QAEA,MAAMQ,OAAAA,GAAUC,MAAM,KAAA,EAAOL,gBAAAA,CAAAA;AAC7B,QAAA,OAAOC,kBAA+B,CAACG,OAAAA,CAAAA;AACzC,IAAA;IAEAE,wBAAAA,GAAqC;QACnC,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,+BAAA,CAAA;AACjB,QAAA,OAAO,+BAAA,CAAA,IAAI,EAAC,qBAAA,CAAA,CAAA,qBAAA,CAAA,CAAsB,UAAA,CAAA;AACpC,IAAA;IAEAJ,uBAAAA,GAAoC;QAClC,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,8BAAA,CAAA;AACjB,QAAA,OAAO,+BAAA,CAAA,IAAI,EAAC,qBAAA,CAAA,CAAA,qBAAA,CAAA,CAAsB,SAAA,CAAA;AACpC,IAAA;IAEAK,qBAAAA,GAAkC;QAChC,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,4BAAA,CAAA;AACjB,QAAA,OAAO,+BAAA,CAAA,IAAI,EAAC,qBAAA,CAAA,CAAA,qBAAA,CAAA,CAAsB,OAAA,CAAA;AACpC,IAAA;IAEAC,6BAAAA,GAA0C;QACxC,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,oCAAA,CAAA;AACjB,QAAA,OAAO,+BAAA,CAAA,IAAI,EAAC,qBAAA,CAAA,CAAA,qBAAA,CAAA,CAAsB,eAAA,CAAA;AACpC,IAAA;IAEAC,sBAAAA,GAAmC;QACjC,MAAMC,SAAAA,GAAY,IAAIC,WAAAA,CAAY;YAAEC,UAAAA,EAAY;AAAK,SAAA,CAAA;AACrD,QAAA,MAAMC,aAAa,+BAAA,CAAA,IAAI,EAAC,SAAA,CAAA,CAAA,WAAU,QAAA,EAAU,SAAA,CAAA;QAC5C,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,6BAAA,CAAA;QAEjB,+BAAA,CAAA,IAAI,EAAC,mBAAA,CAAA,CAAA,mBAAA,CAAA,CAAoBH,WAAWG,UAAAA,CAAAA,CAAYC,KAAK,CAAC,CAACjB,CAAAA,GAAAA;YACrDa,SAAAA,CAAUK,OAAO,CACflB,CAAAA,YAAamB,KAAAA,GAAQnB,IAAI,IAAIoB,qBAAAA,CAAsBC,OAAOrB,CAAAA,CAAAA,EAAI;gBAAEsB,OAAAA,EAAS;oBAAEC,KAAAA,EAAOvB;AAAE;AAAE,aAAA,CAAA,CAAA;AAE1F,QAAA,CAAA,CAAA;QAEA,OAAOa,SAAAA;AACT,IAAA;AAnHA,IAAA,WAAA,CAAY7B,OAA6C,CAAE;QAK3D,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,WAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAYA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,SAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAkCA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,aAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QAkEA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,mBAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QAqCA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,kBAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QAKA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,eAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QAYA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,qBAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAaA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,2BAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QA9LA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,aAAA,EAAA;;mBAAA;;QAEA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,SAAA,EAAA;;mBAAA;;QAEA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA;;mBAAA;;aAVAwC,IAAAA,GAAqB,QAAA;aAErBC,IAAAA,GAAO,yBAAA;QAWL,IAAI,CAACzC,OAAO,GAAGA,OAAAA;QACf,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,aAAA,CAAA,GAAgBM,IAAAA,CAAKoC,OAAO,CAAC1C,OAAAA,CAAQ2C,SAAS,CAACrC,IAAI,CAAA;AAC1D,IAAA;AAkNF;AAhNE,SAAA,WAAYsC,OAAe,EAAA;AACzB,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,EAAcC,MAAAA,CAAO;QACxBP,OAAAA,EAAS;AACPQ,YAAAA,SAAAA,EAAW,IAAIC,IAAAA,EAAAA;AACfH,YAAAA,OAAAA;YACAI,MAAAA,EAAQ;AACV,SAAA;QACAC,IAAAA,EAAM;AACR,KAAA,CAAA;AACF;AAGA,SAAA,QAAA,CAAU,GAAGC,aAAuB,EAAA;AAClC,IAAA,MAAMC,MAAAA,GAAS7C,IAAAA,CAAK8C,KAAK,CAACC,IAAI,CAAA,GAAIH,aAAAA,CAAAA;IAClC,MAAMI,QAAAA,GAAWH,MAAAA,CAAOI,KAAK,CAACjD,IAAAA,CAAK8C,KAAK,CAAC5C,GAAG,CAAA,CAAEgD,MAAM,CAACC,OAAAA,CAAAA;IACrD,MAAMC,QAAAA,GAAWpD,KAAKoC,OAAO,CAAC,gCAAA,IAAI,EAAC,eAAA,aAAA,CAAA,EAAA,GAAkBY,QAAAA,CAAAA;AACrD,IAAA,IAAI,CAACpD,gBAAAA,CAAiB,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,gBAAewD,QAAAA,CAAAA,EAAW;AACnD,QAAA,MAAM,IAAI3C,2BAAAA,CAA4B,CAAC,cAAc,EAAEoC,MAAAA,CAAO,4BAA4B,CAAC,CAAA;AAC7F,IAAA;IACA,OAAOO,QAAAA;AACT;AA0BA,eAAA,YAAA,GAAA;AACE,IAAA,MAAMC,YAAAA,GAAe,+BAAA,CAAA,IAAI,EAAC,WAAA,SAAA,CAAA,CAAU7D,kBAAAA,CAAAA;AACpC,IAAA,IAAI,CAAE,MAAMe,WAAAA,CAAG+C,UAAU,CAACD,YAAAA,CAAAA,EAAgB;AACxC,QAAA,MAAM,IAAI5C,2BAAAA,CACR,CAAC,QAAQ,EAAEjB,kBAAAA,CAAmB,sBAAsB,EAAE,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,aAAA,CAAA,CAAc,EAAE,CAAC,CAAA;AAEhF,IAAA;AACA,IAAA,+BAAA,CAAA,IAAI,EAAC,SAAA,CAAA,CAAA,aAAY,MAAMe,WAAAA,CAAGgD,QAAQ,CAACF,YAAAA,CAAAA;AACrC;AA0DA,eAAA,kBAAA,CAA0B9B,SAAsB,EAAEG,UAAkB,EAAA;AAClE,IAAA,IAAI,CAAE,MAAMnB,WAAAA,CAAG+C,UAAU,CAAC5B,UAAAA,CAAAA,EAAc;AACtCH,QAAAA,SAAAA,CAAUiC,GAAG,EAAA;AACb,QAAA;AACF,IAAA;IAEA,MAAMC,KAAAA,GAAQ,CAAC,MAAMlD,YAAGmD,OAAO,CAAChC,UAAAA,CAAU,EAAGiC,IAAI,EAAA;IACjD,KAAK,MAAMxB,QAAQsB,KAAAA,CAAO;AACxB,QAAA,MAAMG,SAAAA,GAAY5D,IAAAA,CAAK+C,IAAI,CAACrB,UAAAA,EAAYS,IAAAA,CAAAA;AACxC,QAAA,MAAM7B,IAAAA,GAAO,MAAMC,WAAAA,CAAGD,IAAI,CAACsD,SAAAA,CAAAA;QAC3B,IAAItD,IAAAA,CAAKuD,MAAM,EAAA,EAAI;YACjB,IAAIC,QAAAA;YACJ,IAAI;AACFA,gBAAAA,QAAAA,GAAW,MAAM,+BAAA,CAAA,IAAI,EAAC,oBAAA,kBAAA,CAAA,CAAmB3B,IAAAA,CAAAA;AAC3C,YAAA,CAAA,CAAE,OAAOF,KAAAA,EAAO;gBACdV,SAAAA,CAAUK,OAAO,CACf,IAAIE,qBAAAA,CAAsB,CAAC,4BAA4B,EAAEK,MAAM,EAAE;oBAC/DH,OAAAA,EAAS;AAAEC,wBAAAA;AAAM;AACnB,iBAAA,CAAA,CAAA;AAEF,gBAAA;AACF,YAAA;YAEA,MAAM8B,cAAAA,GAAiBC,mBAAmBhE,IAAAA,CAAK8C,KAAK,CAACC,IAAI,CAAC,UAAU,SAAA,EAAWZ,IAAAA,CAAAA,CAAAA;AAC/E,YAAA,MAAM8B,KAAAA,GAAgB;AACpBH,gBAAAA,QAAAA;gBACAI,QAAAA,EAAU/B,IAAAA;gBACVgC,QAAAA,EAAUJ,cAAAA;gBACVK,KAAAA,EAAO;AAAEC,oBAAAA,IAAAA,EAAM/D,KAAK+D;AAAK,iBAAA;gBACzBC,MAAAA,EAAQ/D,WAAAA,CAAGgE,gBAAgB,CAACX,SAAAA;AAC9B,aAAA;AACA,YAAA,MAAMY,MAAMjD,SAAAA,EAAW0C,KAAAA,CAAAA;AACzB,QAAA;AACF,IAAA;AACA1C,IAAAA,SAAAA,CAAUiC,GAAG,EAAA;AACf;AAEA,eAAA,kBAAyBU,QAAgB,EAAA;IACvC,MAAMb,YAAAA,GAAe,+BAAA,CAAA,IAAI,EAAC,SAAA,CAAA,CAAA,SAAA,CAAA,CAAU,QAAA,EAAU,UAAA,EAAY,CAAA,EAAGa,QAAAA,CAAS,KAAK,CAAC,CAAA;IAC5E,OAAO3D,WAAAA,CAAGgD,QAAQ,CAACF,YAAAA,CAAAA;AACrB;AAEA,eAAA,eAAsBoB,WAAmB,EAAA;IACvC,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,SAAA,CAAA,CAAA,SAAA,CAAA,CAAA,GAAaD,WAAAA,CAAYxB,KAAK,CAAC,GAAA,CAAA,CAAKC,MAAM,CAACC,OAAAA,CAAAA,CAAAA;AAC/D,IAAA,IAAI,CAAE,MAAM5C,WAAAA,CAAG+C,UAAU,CAACoB,MAAAA,CAAAA,EAAU;AAClC,QAAA,OAAO,EAAE;AACX,IAAA;AACA,IAAA,MAAMjB,KAAAA,GAAQ,MAAMlD,WAAAA,CAAGmD,OAAO,CAACgB,MAAAA,CAAAA;AAC/B,IAAA,OAAOjB,MACJP,MAAM,CAAC,CAACyB,CAAAA,GAAMA,CAAAA,CAAEC,QAAQ,CAAC,QAAA,CAAA,CAAA,CACzBjB,IAAI,EAAA,CACJkB,GAAG,CAAC,CAACF,IAAM3E,IAAAA,CAAK+C,IAAI,CAAC2B,MAAAA,EAAQC,CAAAA,CAAAA,CAAAA;AAClC;AAEA,SAAA,qBAAsBF,WAAmB,EAAA;IACvC,MAAMlD,SAAAA,GAAY,IAAIC,WAAAA,CAAY;QAAEC,UAAAA,EAAY;AAAK,KAAA,CAAA;AACrD,IAAA,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,aAAY,CAAC,qBAAqB,EAAEgD,WAAAA,CAAAA,CAAa,CAAA;IAEtD,+BAAA,CAAA,IAAI,EAAC,2BAAA,CAAA,CAAA,2BAAA,CAAA,CAA4BlD,WAAWkD,WAAAA,CAAAA,CAAa9C,KAAK,CAAC,CAACjB,CAAAA,GAAAA;QAC9Da,SAAAA,CAAUK,OAAO,CACflB,CAAAA,YAAamB,KAAAA,GAAQnB,IAAI,IAAIoB,qBAAAA,CAAsBC,OAAOrB,CAAAA,CAAAA,EAAI;YAAEsB,OAAAA,EAAS;gBAAEC,KAAAA,EAAOvB;AAAE;AAAE,SAAA,CAAA,CAAA;AAE1F,IAAA,CAAA,CAAA;IAEA,OAAOa,SAAAA;AACT;AAEA,eAAA,0BAAA,CAAkCA,SAAsB,EAAEkD,WAAmB,EAAA;AAC3E,IAAA,MAAMK,QAAQ,MAAM,+BAAA,CAAA,IAAI,EAAC,iBAAA,eAAA,CAAA,CAAgBL,WAAAA,CAAAA;IACzC,KAAK,MAAMM,WAAWD,KAAAA,CAAO;AAC3B,QAAA,MAAME,UAAAA,GAAa;YACjBC,MAAAA,CAAO;gBACLC,WAAAA,EAAa;AACf,aAAA,CAAA;YACA,CAACC,IAAAA,GAAyCA,KAAKC;AAChD,SAAA;AAED,QAAA,MAAMd,SAAS/D,WAAAA,CAAGgE,gBAAgB,CAACQ,OAAAA,CAAAA,CAASM,IAAI,CAACC,KAAAA,CAAMN,UAAAA,CAAAA,CAAAA;QAEvD,IAAI;YACF,WAAW,MAAMO,SAASjB,MAAAA,CAAQ;AAChC,gBAAA,MAAME,MAAMjD,SAAAA,EAAWgE,KAAAA,CAAAA;AACzB,YAAA;AACF,QAAA,CAAA,CAAE,OAAO7E,CAAAA,EAAY;AACnBa,YAAAA,SAAAA,CAAUK,OAAO,CACf,IAAIE,qBAAAA,CAAsB,CAAC,uBAAuB,EAAEiD,OAAAA,CAAQ,EAAE,EAAGrE,CAAAA,CAAY4B,OAAO,EAAE,EAAE;gBACtFN,OAAAA,EAAS;oBACPC,KAAAA,EAAOvB;AACT;AACF,aAAA,CAAA,CAAA;AAEF,YAAA;AACF,QAAA;AACF,IAAA;AACAa,IAAAA,SAAAA,CAAUiC,GAAG,EAAA;AACf;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/directory/providers/source/index.ts"],"sourcesContent":["import path from 'path';\nimport type { Readable } from 'stream';\nimport { PassThrough } from 'stream';\n\nimport fs from 'fs-extra';\nimport { isEmpty, keyBy } from 'lodash/fp';\nimport { chain } from 'stream-chain';\nimport { parser } from 'stream-json/jsonl/Parser';\nimport type { Struct } from '@strapi/types';\n\nimport type {\n IAsset,\n IMetadata,\n ISourceProvider,\n ProviderType,\n TransferStage,\n} from '../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\n\nimport * as utils from '../../../utils';\nimport { write } from '../../../utils/writable-async-write';\nimport {\n ProviderInitializationError,\n ProviderTransferError,\n ProviderValidationError,\n} from '../../../errors/providers';\nimport { unknownPathToPosix, validateAssetMetadata } from '../../../file/providers/source/utils';\n\nconst METADATA_FILE_PATH = 'metadata.json';\n\nexport interface ILocalDirectorySourceProviderOptions {\n directory: {\n /** Absolute or relative path to the root of an unpacked Strapi data-transfer export */\n path: string;\n };\n}\n\nexport const createLocalDirectorySourceProvider = (\n options: ILocalDirectorySourceProviderOptions\n) => {\n return new LocalDirectorySourceProvider(options);\n};\n\nconst isPathInsideRoot = (root: string, candidate: string): boolean => {\n const relative = path.relative(root, candidate);\n return relative === '' || (!relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));\n};\n\nclass LocalDirectorySourceProvider implements ISourceProvider {\n type: ProviderType = 'source';\n\n name = 'source::local-directory';\n\n options: ILocalDirectorySourceProviderOptions;\n\n #rootResolved: string;\n\n #metadata?: IMetadata;\n\n #assetMetadata?: Map<string, IAsset['metadata']>;\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalDirectorySourceProviderOptions) {\n this.options = options;\n this.#rootResolved = path.resolve(options.directory.path);\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'directory-source-provider',\n },\n kind: 'info',\n });\n }\n\n /** Resolve a posix-style relative path under the export root; rejects escapes. */\n #safePath(...posixSegments: string[]): string {\n const joined = path.posix.join(...posixSegments);\n const segments = joined.split(path.posix.sep).filter(Boolean);\n const resolved = path.resolve(this.#rootResolved, ...segments);\n if (!isPathInsideRoot(this.#rootResolved, resolved)) {\n throw new ProviderInitializationError(`Invalid path \"${joined}\" — escapes backup directory`);\n }\n return resolved;\n }\n\n async bootstrap(diagnostics: IDiagnosticReporter) {\n this.#diagnostics = diagnostics;\n const root = this.#rootResolved;\n\n try {\n const stat = await fs.stat(root);\n if (!stat.isDirectory()) {\n throw new ProviderInitializationError(`Path '${root}' is not a directory.`);\n }\n await this.#loadMetadata();\n } catch (e) {\n if (e instanceof ProviderInitializationError) {\n throw e;\n }\n throw new ProviderInitializationError(\n `Directory '${root}' is not a valid Strapi data export.`\n );\n }\n\n if (!this.#metadata) {\n throw new ProviderInitializationError('Could not load metadata from Strapi data export.');\n }\n }\n\n async #loadMetadata() {\n const metadataPath = this.#safePath(METADATA_FILE_PATH);\n if (!(await fs.pathExists(metadataPath))) {\n throw new ProviderInitializationError(\n `Missing ${METADATA_FILE_PATH} in export directory '${this.#rootResolved}'.`\n );\n }\n this.#metadata = await fs.readJson(metadataPath);\n }\n\n async getMetadata() {\n this.#reportInfo('getting metadata');\n if (!this.#metadata) {\n await this.#loadMetadata();\n }\n return this.#metadata ?? null;\n }\n\n async getSchemas() {\n this.#reportInfo('getting schemas');\n const schemaCollection = await utils.stream.collect<Struct.Schema>(\n this.createSchemasReadStream()\n );\n\n if (isEmpty(schemaCollection)) {\n throw new ProviderInitializationError('Could not load schemas from Strapi data export.');\n }\n\n const schemas = keyBy('uid', schemaCollection);\n return utils.schema.schemasToValidJSON(schemas);\n }\n\n async validateStage(stage: TransferStage) {\n if (stage !== 'assets') {\n return;\n }\n\n const uploadsDir = this.#safePath('assets', 'uploads');\n if (!(await fs.pathExists(uploadsDir))) {\n this.#assetMetadata = new Map();\n return;\n }\n\n const metadata = new Map<string, IAsset['metadata']>();\n const names = (await fs.readdir(uploadsDir)).sort();\n for (const name of names) {\n const uploadPath = path.join(uploadsDir, name);\n if (!(await fs.stat(uploadPath)).isFile()) {\n continue;\n }\n\n try {\n metadata.set(name, await this.#readAssetMetadata(name));\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new ProviderValidationError(\n `Asset metadata preflight failed for \"${name}\": ${reason}. The destination was not modified; re-export and try again.`,\n { error }\n );\n }\n }\n\n this.#assetMetadata = metadata;\n }\n\n createEntitiesReadStream(): Readable {\n this.#reportInfo('creating entities read stream');\n return this.#streamJsonlDirectory('entities');\n }\n\n createSchemasReadStream(): Readable {\n this.#reportInfo('creating schemas read stream');\n return this.#streamJsonlDirectory('schemas');\n }\n\n createLinksReadStream(): Readable {\n this.#reportInfo('creating links read stream');\n return this.#streamJsonlDirectory('links');\n }\n\n createConfigurationReadStream(): Readable {\n this.#reportInfo('creating configuration read stream');\n return this.#streamJsonlDirectory('configuration');\n }\n\n createAssetsReadStream(): Readable {\n const outStream = new PassThrough({ objectMode: true });\n const uploadsDir = this.#safePath('assets', 'uploads');\n this.#reportInfo('creating assets read stream');\n\n this.#pipeAssetsToStream(outStream, uploadsDir).catch((e: unknown) => {\n outStream.destroy(\n e instanceof Error ? e : new ProviderTransferError(String(e), { details: { error: e } })\n );\n });\n\n return outStream;\n }\n\n async #pipeAssetsToStream(outStream: PassThrough, uploadsDir: string): Promise<void> {\n if (!(await fs.pathExists(uploadsDir))) {\n outStream.end();\n return;\n }\n\n const names = (await fs.readdir(uploadsDir)).sort();\n for (const name of names) {\n const absUpload = path.join(uploadsDir, name);\n const stat = await fs.stat(absUpload);\n if (stat.isFile()) {\n let metadata = this.#assetMetadata?.get(name);\n if (!metadata) {\n try {\n metadata = await this.#readAssetMetadata(name);\n } catch (error) {\n outStream.destroy(\n new ProviderTransferError(`Failed to read metadata for ${name}`, {\n details: { error },\n })\n );\n return;\n }\n }\n\n const normalizedPath = unknownPathToPosix(path.posix.join('assets', 'uploads', name));\n const asset: IAsset = {\n metadata,\n filename: name,\n filepath: normalizedPath,\n stats: { size: stat.size },\n stream: fs.createReadStream(absUpload),\n };\n await write(outStream, asset);\n }\n }\n outStream.end();\n }\n\n async #readAssetMetadata(filename: string): Promise<IAsset['metadata']> {\n const metadataPath = this.#safePath('assets', 'metadata', `${filename}.json`);\n return validateAssetMetadata(await fs.readJson(metadataPath), filename);\n }\n\n async #listJsonlFiles(posixSubdir: string): Promise<string[]> {\n const dirAbs = this.#safePath(...posixSubdir.split('/').filter(Boolean));\n if (!(await fs.pathExists(dirAbs))) {\n return [];\n }\n const names = await fs.readdir(dirAbs);\n return names\n .filter((n) => n.endsWith('.jsonl'))\n .sort()\n .map((n) => path.join(dirAbs, n));\n }\n\n #streamJsonlDirectory(posixSubdir: string): Readable {\n const outStream = new PassThrough({ objectMode: true });\n this.#reportInfo(`streaming jsonl from ${posixSubdir}`);\n\n this.#pipeJsonlDirectoryToStream(outStream, posixSubdir).catch((e: unknown) => {\n outStream.destroy(\n e instanceof Error ? e : new ProviderTransferError(String(e), { details: { error: e } })\n );\n });\n\n return outStream;\n }\n\n async #pipeJsonlDirectoryToStream(outStream: PassThrough, posixSubdir: string): Promise<void> {\n const files = await this.#listJsonlFiles(posixSubdir);\n for (const absPath of files) {\n const transforms = [\n parser({\n checkErrors: true,\n }),\n (line: { key: string; value: object }) => line.value,\n ];\n\n const stream = fs.createReadStream(absPath).pipe(chain(transforms));\n\n try {\n for await (const chunk of stream) {\n await write(outStream, chunk);\n }\n } catch (e: unknown) {\n outStream.destroy(\n new ProviderTransferError(`Error parsing JSONL in ${absPath}: ${(e as Error).message}`, {\n details: {\n error: e,\n },\n })\n );\n return;\n }\n }\n outStream.end();\n }\n}\n"],"names":["METADATA_FILE_PATH","createLocalDirectorySourceProvider","options","LocalDirectorySourceProvider","isPathInsideRoot","root","candidate","relative","path","startsWith","sep","isAbsolute","bootstrap","diagnostics","stat","fs","isDirectory","ProviderInitializationError","e","getMetadata","getSchemas","schemaCollection","utils","createSchemasReadStream","isEmpty","schemas","keyBy","validateStage","stage","uploadsDir","pathExists","Map","metadata","names","readdir","sort","name","uploadPath","join","isFile","set","error","reason","Error","message","String","ProviderValidationError","createEntitiesReadStream","createLinksReadStream","createConfigurationReadStream","createAssetsReadStream","outStream","PassThrough","objectMode","catch","destroy","ProviderTransferError","details","type","resolve","directory","report","createdAt","Date","origin","kind","posixSegments","joined","posix","segments","split","filter","Boolean","resolved","metadataPath","readJson","end","absUpload","get","normalizedPath","unknownPathToPosix","asset","filename","filepath","stats","size","stream","createReadStream","write","validateAssetMetadata","posixSubdir","dirAbs","n","endsWith","map","files","absPath","transforms","parser","checkErrors","line","value","pipe","chain","chunk"],"mappings":"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"}
@@ -52,6 +52,7 @@ declare class TransferEngine<S extends ISourceProvider = ISourceProvider, D exte
52
52
  close(): Promise<void>;
53
53
  integrityCheck(): Promise<void>;
54
54
  transfer(): Promise<ITransferResults<S, D>>;
55
+ validateStages(): Promise<void>;
55
56
  beforeTransfer(): Promise<void>;
56
57
  transferSchemas(): Promise<void>;
57
58
  transferEntities(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
@@ -53,7 +53,7 @@ const TRANSFER_STAGES = Object.freeze([
53
53
  };
54
54
  const DEFAULT_VERSION_STRATEGY = 'ignore';
55
55
  const DEFAULT_SCHEMA_STRATEGY = 'strict';
56
- var _metadata = /*#__PURE__*/ _class_private_field_loose_key("_metadata"), _schema = /*#__PURE__*/ _class_private_field_loose_key("_schema"), _handlers = /*#__PURE__*/ _class_private_field_loose_key("_handlers"), _currentStreamController = /*#__PURE__*/ _class_private_field_loose_key("_currentStreamController"), _aborted = /*#__PURE__*/ _class_private_field_loose_key("_aborted"), /**
56
+ var _metadata = /*#__PURE__*/ _class_private_field_loose_key("_metadata"), _schema = /*#__PURE__*/ _class_private_field_loose_key("_schema"), _handlers = /*#__PURE__*/ _class_private_field_loose_key("_handlers"), _currentStreamController = /*#__PURE__*/ _class_private_field_loose_key("_currentStreamController"), _aborted = /*#__PURE__*/ _class_private_field_loose_key("_aborted"), _closed = /*#__PURE__*/ _class_private_field_loose_key("_closed"), /**
57
57
  * Create and return a transform stream based on the given stage and options.
58
58
  *
59
59
  * Allowed transformations includes 'filter' and 'map'.
@@ -82,7 +82,7 @@ var _metadata = /*#__PURE__*/ _class_private_field_loose_key("_metadata"), _sche
82
82
  * Run a check between two set of schemas (source and destination) using the strategy given to the engine during initialization.
83
83
  *
84
84
  * If there are differences and/or incompatibilities between source and destination schemas, then throw a validation error.
85
- */ _assertSchemasMatching = /*#__PURE__*/ _class_private_field_loose_key("_assertSchemasMatching"), _transferStage = /*#__PURE__*/ _class_private_field_loose_key("_transferStage"), _resolveProviderResource = /*#__PURE__*/ _class_private_field_loose_key("_resolveProviderResource"), _getSchemas = /*#__PURE__*/ _class_private_field_loose_key("_getSchemas"), _mergeSourceStageTotals = /*#__PURE__*/ _class_private_field_loose_key("_mergeSourceStageTotals");
85
+ */ _assertSchemasMatching = /*#__PURE__*/ _class_private_field_loose_key("_assertSchemasMatching"), _transferStage = /*#__PURE__*/ _class_private_field_loose_key("_transferStage"), _closeAfterError = /*#__PURE__*/ _class_private_field_loose_key("_closeAfterError"), _resolveProviderResource = /*#__PURE__*/ _class_private_field_loose_key("_resolveProviderResource"), _getSchemas = /*#__PURE__*/ _class_private_field_loose_key("_getSchemas"), _mergeSourceStageTotals = /*#__PURE__*/ _class_private_field_loose_key("_mergeSourceStageTotals");
86
86
  class TransferEngine {
87
87
  onSchemaDiff(handler) {
88
88
  _class_private_field_loose_base(this, _handlers)[_handlers]?.schemaDiff?.push(handler);
@@ -203,6 +203,7 @@ class TransferEngine {
203
203
  /**
204
204
  * Run the close method in both source and destination providers
205
205
  */ async close() {
206
+ _class_private_field_loose_base(this, _closed)[_closed] = true;
206
207
  const results = await Promise.allSettled([
207
208
  this.sourceProvider.close?.(),
208
209
  this.destinationProvider.close?.()
@@ -255,11 +256,13 @@ class TransferEngine {
255
256
  async transfer() {
256
257
  // reset data between transfers
257
258
  this.progress.data = {};
259
+ _class_private_field_loose_base(this, _closed)[_closed] = false;
258
260
  try {
259
261
  _class_private_field_loose_base(this, _emitTransferUpdate)[_emitTransferUpdate]('init');
260
262
  await this.bootstrap();
261
263
  await this.init();
262
264
  await this.integrityCheck();
265
+ await this.validateStages();
263
266
  _class_private_field_loose_base(this, _emitTransferUpdate)[_emitTransferUpdate]('start');
264
267
  await this.beforeTransfer();
265
268
  // Run the transfer stages
@@ -280,9 +283,23 @@ class TransferEngine {
280
283
  if (e instanceof Error && (!lastDiagnostic || lastDiagnostic.kind !== 'error' || lastDiagnostic.details.error !== e)) {
281
284
  this.reportError(e, e.severity || 'fatal');
282
285
  }
283
- // Rollback the destination provider if an exception is thrown during the transfer
284
- // Note: This will be configurable in the future
285
- await this.destinationProvider.rollback?.(e);
286
+ // Rollback the destination provider if an exception is thrown before providers are closed.
287
+ // Once close has started, a provider's transaction may already have ended and cannot be
288
+ // rolled back safely. Note: This will be configurable in the future.
289
+ if (!_class_private_field_loose_base(this, _closed)[_closed]) {
290
+ try {
291
+ await this.destinationProvider.rollback?.(e);
292
+ } catch (rollbackError) {
293
+ const { message } = rollbackError instanceof Error ? rollbackError : {
294
+ message: ''
295
+ };
296
+ this.reportWarning(`Failed to rollback the ${this.destinationProvider.name} provider${message ? `: ${message}` : ''}`, 'transfer(rollback)');
297
+ }
298
+ }
299
+ // Providers bootstrapped before the failure may still hold resources: the local providers
300
+ // disable database lifecycles on bootstrap and only re-enable them on close, so skipping this
301
+ // would leave a programmatic caller's Strapi instance with lifecycles permanently off.
302
+ await _class_private_field_loose_base(this, _closeAfterError)[_closeAfterError]();
286
303
  throw e;
287
304
  }
288
305
  return {
@@ -291,6 +308,16 @@ class TransferEngine {
291
308
  engine: this.progress.data
292
309
  };
293
310
  }
311
+ async validateStages() {
312
+ if (!this.sourceProvider.validateStage) {
313
+ return;
314
+ }
315
+ for (const stage of TRANSFER_STAGES){
316
+ if (!this.shouldSkipStage(stage)) {
317
+ await this.sourceProvider.validateStage(stage);
318
+ }
319
+ }
320
+ }
294
321
  async beforeTransfer() {
295
322
  const runWithDiagnostic = async (provider)=>{
296
323
  try {
@@ -470,6 +497,12 @@ class TransferEngine {
470
497
  Object.defineProperty(this, _transferStage, {
471
498
  value: transferStage
472
499
  });
500
+ /**
501
+ * Close both providers on a failure path, reporting rather than throwing cleanup errors so the
502
+ * error that caused the failure is the one the caller sees.
503
+ */ Object.defineProperty(this, _closeAfterError, {
504
+ value: closeAfterError
505
+ });
473
506
  Object.defineProperty(this, _resolveProviderResource, {
474
507
  value: resolveProviderResource
475
508
  });
@@ -501,6 +534,10 @@ class TransferEngine {
501
534
  writable: true,
502
535
  value: void 0
503
536
  });
537
+ Object.defineProperty(this, _closed, {
538
+ writable: true,
539
+ value: void 0
540
+ });
504
541
  Object.defineProperty(this, _updateAggregateBytes, {
505
542
  writable: true,
506
543
  value: void 0
@@ -516,6 +553,7 @@ class TransferEngine {
516
553
  errors: {}
517
554
  };
518
555
  _class_private_field_loose_base(this, _aborted)[_aborted] = false;
556
+ _class_private_field_loose_base(this, _closed)[_closed] = false;
519
557
  _class_private_field_loose_base(this, _updateAggregateBytes)[_updateAggregateBytes] = (stageProgress, key, bytes)=>{
520
558
  if (!stageProgress.aggregates) {
521
559
  stageProgress.aggregates = {};
@@ -860,6 +898,25 @@ async function transferStage(options) {
860
898
  updateEndTime();
861
899
  }
862
900
  }
901
+ async function closeAfterError() {
902
+ if (_class_private_field_loose_base(this, _closed)[_closed]) {
903
+ return;
904
+ }
905
+ _class_private_field_loose_base(this, _closed)[_closed] = true;
906
+ const providers = [
907
+ this.sourceProvider,
908
+ this.destinationProvider
909
+ ];
910
+ const results = await Promise.allSettled(providers.map((provider)=>provider.close?.()));
911
+ results.forEach((result, index)=>{
912
+ if (result.status === 'rejected') {
913
+ const { message } = result.reason instanceof Error ? result.reason : {
914
+ message: ''
915
+ };
916
+ this.reportWarning(`Failed to close the ${providers[index].name} provider${message ? `: ${message}` : ''}`, 'transfer(cleanup)');
917
+ }
918
+ });
919
+ }
863
920
  async function resolveProviderResource() {
864
921
  const sourceMetadata = await this.sourceProvider.getMetadata();
865
922
  const destinationMetadata = await this.destinationProvider.getMetadata();