@strapi/data-transfer 5.37.1 → 5.38.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.
Files changed (102) hide show
  1. package/dist/engine/errors.js.map +1 -1
  2. package/dist/engine/errors.mjs.map +1 -1
  3. package/dist/engine/index.js.map +1 -1
  4. package/dist/engine/index.mjs.map +1 -1
  5. package/dist/engine/validation/provider.js.map +1 -1
  6. package/dist/engine/validation/provider.mjs.map +1 -1
  7. package/dist/engine/validation/schemas/index.js.map +1 -1
  8. package/dist/engine/validation/schemas/index.mjs.map +1 -1
  9. package/dist/errors/base.js.map +1 -1
  10. package/dist/errors/base.mjs.map +1 -1
  11. package/dist/errors/constants.js +0 -1
  12. package/dist/errors/constants.js.map +1 -1
  13. package/dist/errors/constants.mjs +0 -1
  14. package/dist/errors/constants.mjs.map +1 -1
  15. package/dist/errors/providers.js.map +1 -1
  16. package/dist/errors/providers.mjs.map +1 -1
  17. package/dist/file/providers/destination/index.js.map +1 -1
  18. package/dist/file/providers/destination/index.mjs.map +1 -1
  19. package/dist/file/providers/destination/utils.js.map +1 -1
  20. package/dist/file/providers/destination/utils.mjs.map +1 -1
  21. package/dist/file/providers/index.js +4 -4
  22. package/dist/file/providers/source/index.d.ts.map +1 -1
  23. package/dist/file/providers/source/index.js +6 -3
  24. package/dist/file/providers/source/index.js.map +1 -1
  25. package/dist/file/providers/source/index.mjs +7 -4
  26. package/dist/file/providers/source/index.mjs.map +1 -1
  27. package/dist/file/providers/source/utils.js.map +1 -1
  28. package/dist/file/providers/source/utils.mjs.map +1 -1
  29. package/dist/index.js +4 -4
  30. package/dist/index.mjs +4 -4
  31. package/dist/strapi/providers/local-destination/index.js.map +1 -1
  32. package/dist/strapi/providers/local-destination/index.mjs.map +1 -1
  33. package/dist/strapi/providers/local-destination/strategies/restore/configuration.js.map +1 -1
  34. package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs.map +1 -1
  35. package/dist/strapi/providers/local-destination/strategies/restore/entities.js.map +1 -1
  36. package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs.map +1 -1
  37. package/dist/strapi/providers/local-destination/strategies/restore/index.js.map +1 -1
  38. package/dist/strapi/providers/local-destination/strategies/restore/index.mjs.map +1 -1
  39. package/dist/strapi/providers/local-destination/strategies/restore/links.js.map +1 -1
  40. package/dist/strapi/providers/local-destination/strategies/restore/links.mjs.map +1 -1
  41. package/dist/strapi/providers/local-source/assets.js.map +1 -1
  42. package/dist/strapi/providers/local-source/assets.mjs +1 -1
  43. package/dist/strapi/providers/local-source/assets.mjs.map +1 -1
  44. package/dist/strapi/providers/local-source/configuration.js.map +1 -1
  45. package/dist/strapi/providers/local-source/configuration.mjs.map +1 -1
  46. package/dist/strapi/providers/local-source/entities.js.map +1 -1
  47. package/dist/strapi/providers/local-source/entities.mjs.map +1 -1
  48. package/dist/strapi/providers/local-source/index.js.map +1 -1
  49. package/dist/strapi/providers/local-source/index.mjs.map +1 -1
  50. package/dist/strapi/providers/local-source/links.js.map +1 -1
  51. package/dist/strapi/providers/local-source/links.mjs.map +1 -1
  52. package/dist/strapi/providers/remote-destination/index.js +1 -1
  53. package/dist/strapi/providers/remote-destination/index.js.map +1 -1
  54. package/dist/strapi/providers/remote-destination/index.mjs +1 -1
  55. package/dist/strapi/providers/remote-destination/index.mjs.map +1 -1
  56. package/dist/strapi/providers/remote-source/index.js.map +1 -1
  57. package/dist/strapi/providers/remote-source/index.mjs.map +1 -1
  58. package/dist/strapi/providers/utils.js.map +1 -1
  59. package/dist/strapi/providers/utils.mjs.map +1 -1
  60. package/dist/strapi/queries/entity.js.map +1 -1
  61. package/dist/strapi/queries/entity.mjs +2 -2
  62. package/dist/strapi/queries/entity.mjs.map +1 -1
  63. package/dist/strapi/queries/link.js.map +1 -1
  64. package/dist/strapi/queries/link.mjs.map +1 -1
  65. package/dist/strapi/remote/constants.js.map +1 -1
  66. package/dist/strapi/remote/constants.mjs.map +1 -1
  67. package/dist/strapi/remote/flows/default.js.map +1 -1
  68. package/dist/strapi/remote/flows/default.mjs.map +1 -1
  69. package/dist/strapi/remote/flows/index.js.map +1 -1
  70. package/dist/strapi/remote/flows/index.mjs.map +1 -1
  71. package/dist/strapi/remote/handlers/constants.js.map +1 -1
  72. package/dist/strapi/remote/handlers/constants.mjs.map +1 -1
  73. package/dist/strapi/remote/handlers/pull.js.map +1 -1
  74. package/dist/strapi/remote/handlers/pull.mjs.map +1 -1
  75. package/dist/strapi/remote/handlers/push.js.map +1 -1
  76. package/dist/strapi/remote/handlers/push.mjs +1 -1
  77. package/dist/strapi/remote/handlers/push.mjs.map +1 -1
  78. package/dist/strapi/remote/handlers/utils.js.map +1 -1
  79. package/dist/strapi/remote/handlers/utils.mjs +1 -1
  80. package/dist/strapi/remote/handlers/utils.mjs.map +1 -1
  81. package/dist/utils/components.js.map +1 -1
  82. package/dist/utils/components.mjs +1 -1
  83. package/dist/utils/components.mjs.map +1 -1
  84. package/dist/utils/diagnostic.js.map +1 -1
  85. package/dist/utils/diagnostic.mjs.map +1 -1
  86. package/dist/utils/encryption/decrypt.js.map +1 -1
  87. package/dist/utils/encryption/decrypt.mjs.map +1 -1
  88. package/dist/utils/encryption/encrypt.js.map +1 -1
  89. package/dist/utils/encryption/encrypt.mjs.map +1 -1
  90. package/dist/utils/json.js.map +1 -1
  91. package/dist/utils/json.mjs.map +1 -1
  92. package/dist/utils/middleware.js.map +1 -1
  93. package/dist/utils/middleware.mjs.map +1 -1
  94. package/dist/utils/providers.js.map +1 -1
  95. package/dist/utils/providers.mjs.map +1 -1
  96. package/dist/utils/schema.js.map +1 -1
  97. package/dist/utils/schema.mjs.map +1 -1
  98. package/dist/utils/stream.js.map +1 -1
  99. package/dist/utils/stream.mjs.map +1 -1
  100. package/dist/utils/transaction.js.map +1 -1
  101. package/dist/utils/transaction.mjs.map +1 -1
  102. package/package.json +16 -7
@@ -1 +1 @@
1
- {"version":3,"file":"links.mjs","sources":["../../../../../../src/strapi/providers/local-destination/strategies/restore/links.ts"],"sourcesContent":["import { Writable } from 'stream';\nimport type { Core } from '@strapi/types';\nimport { ProviderTransferError } from '../../../../../errors/providers';\nimport { ILink, Transaction } from '../../../../../../types';\nimport { createLinkQuery } from '../../../../queries/link';\n\ninterface ErrorWithCode extends Error {\n code: string;\n}\n\nconst isErrorWithCode = (error: any): error is ErrorWithCode => {\n return error && typeof error.code === 'string';\n};\n\nconst isForeignKeyConstraintError = (e: Error) => {\n const MYSQL_FK_ERROR_CODES = ['1452', '1557', '1216', '1217', '1451'];\n const POSTGRES_FK_ERROR_CODE = '23503';\n const SQLITE_FK_ERROR_CODE = 'SQLITE_CONSTRAINT_FOREIGNKEY';\n\n if (isErrorWithCode(e) && e.code) {\n return [SQLITE_FK_ERROR_CODE, POSTGRES_FK_ERROR_CODE, ...MYSQL_FK_ERROR_CODES].includes(e.code);\n }\n\n return e.message.toLowerCase().includes('foreign key constraint');\n};\n\nexport const createLinksWriteStream = (\n mapID: (uid: string, id: number) => number | undefined,\n strapi: Core.Strapi,\n transaction?: Transaction,\n onWarning?: (message: string) => void\n) => {\n return new Writable({\n objectMode: true,\n async write(link: ILink, _encoding, callback) {\n await transaction?.attach(async (trx) => {\n const { left, right } = link;\n const query = createLinkQuery(strapi, trx);\n\n const originalLeftRef = left.ref;\n const originalRightRef = right.ref;\n\n // Map IDs if needed\n left.ref = mapID(left.type, originalLeftRef) ?? originalLeftRef;\n right.ref = mapID(right.type, originalRightRef) ?? originalRightRef;\n\n try {\n await query().insert(link);\n } catch (e) {\n if (e instanceof Error) {\n if (isForeignKeyConstraintError(e)) {\n onWarning?.(\n `Skipping link ${left.type}:${originalLeftRef} -> ${right.type}:${originalRightRef} due to a foreign key constraint.`\n );\n return callback(null);\n }\n return callback(e);\n }\n\n return callback(\n new ProviderTransferError(\n `An error happened while trying to import a ${left.type} link.`\n )\n );\n }\n\n callback(null);\n });\n },\n });\n};\n"],"names":["isErrorWithCode","error","code","isForeignKeyConstraintError","e","MYSQL_FK_ERROR_CODES","POSTGRES_FK_ERROR_CODE","SQLITE_FK_ERROR_CODE","includes","message","toLowerCase","createLinksWriteStream","mapID","strapi","transaction","onWarning","Writable","objectMode","write","link","_encoding","callback","attach","trx","left","right","query","createLinkQuery","originalLeftRef","ref","originalRightRef","type","insert","Error","ProviderTransferError"],"mappings":";;;;AAUA,MAAMA,kBAAkB,CAACC,KAAAA,GAAAA;AACvB,IAAA,OAAOA,KAAS,IAAA,OAAOA,KAAMC,CAAAA,IAAI,KAAK,QAAA;AACxC,CAAA;AAEA,MAAMC,8BAA8B,CAACC,CAAAA,GAAAA;AACnC,IAAA,MAAMC,oBAAuB,GAAA;AAAC,QAAA,MAAA;AAAQ,QAAA,MAAA;AAAQ,QAAA,MAAA;AAAQ,QAAA,MAAA;AAAQ,QAAA;AAAO,KAAA;AACrE,IAAA,MAAMC,sBAAyB,GAAA,OAAA;AAC/B,IAAA,MAAMC,oBAAuB,GAAA,8BAAA;AAE7B,IAAA,IAAIP,eAAgBI,CAAAA,CAAAA,CAAAA,IAAMA,CAAEF,CAAAA,IAAI,EAAE;QAChC,OAAO;AAACK,YAAAA,oBAAAA;AAAsBD,YAAAA,sBAAAA;AAA2BD,YAAAA,GAAAA;SAAqB,CAACG,QAAQ,CAACJ,CAAAA,CAAEF,IAAI,CAAA;AAChG;AAEA,IAAA,OAAOE,EAAEK,OAAO,CAACC,WAAW,EAAA,CAAGF,QAAQ,CAAC,wBAAA,CAAA;AAC1C,CAAA;AAEaG,MAAAA,sBAAAA,GAAyB,CACpCC,KAAAA,EACAC,QACAC,WACAC,EAAAA,SAAAA,GAAAA;AAEA,IAAA,OAAO,IAAIC,QAAS,CAAA;QAClBC,UAAY,EAAA,IAAA;AACZ,QAAA,MAAMC,KAAMC,CAAAA,CAAAA,IAAW,EAAEC,SAAS,EAAEC,QAAQ,EAAA;YAC1C,MAAMP,WAAAA,EAAaQ,OAAO,OAAOC,GAAAA,GAAAA;AAC/B,gBAAA,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGN,IAAAA;gBACxB,MAAMO,KAAAA,GAAQC,gBAAgBd,MAAQU,EAAAA,GAAAA,CAAAA;gBAEtC,MAAMK,eAAAA,GAAkBJ,KAAKK,GAAG;gBAChC,MAAMC,gBAAAA,GAAmBL,MAAMI,GAAG;;AAGlCL,gBAAAA,IAAAA,CAAKK,GAAG,GAAGjB,KAAAA,CAAMY,IAAKO,CAAAA,IAAI,EAAEH,eAAoBA,CAAAA,IAAAA,eAAAA;AAChDH,gBAAAA,KAAAA,CAAMI,GAAG,GAAGjB,KAAAA,CAAMa,KAAMM,CAAAA,IAAI,EAAED,gBAAqBA,CAAAA,IAAAA,gBAAAA;gBAEnD,IAAI;oBACF,MAAMJ,KAAAA,EAAAA,CAAQM,MAAM,CAACb,IAAAA,CAAAA;AACvB,iBAAA,CAAE,OAAOf,CAAG,EAAA;AACV,oBAAA,IAAIA,aAAa6B,KAAO,EAAA;AACtB,wBAAA,IAAI9B,4BAA4BC,CAAI,CAAA,EAAA;AAClCW,4BAAAA,SAAAA,GACE,CAAC,cAAc,EAAES,KAAKO,IAAI,CAAC,CAAC,EAAEH,eAAAA,CAAgB,IAAI,EAAEH,MAAMM,IAAI,CAAC,CAAC,EAAED,gBAAAA,CAAiB,iCAAiC,CAAC,CAAA;AAEvH,4BAAA,OAAOT,QAAS,CAAA,IAAA,CAAA;AAClB;AACA,wBAAA,OAAOA,QAASjB,CAAAA,CAAAA,CAAAA;AAClB;oBAEA,OAAOiB,QAAAA,CACL,IAAIa,qBAAAA,CACF,CAAC,2CAA2C,EAAEV,IAAKO,CAAAA,IAAI,CAAC,MAAM,CAAC,CAAA,CAAA;AAGrE;gBAEAV,QAAS,CAAA,IAAA,CAAA;AACX,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"links.mjs","sources":["../../../../../../src/strapi/providers/local-destination/strategies/restore/links.ts"],"sourcesContent":["import { Writable } from 'stream';\nimport type { Core } from '@strapi/types';\nimport { ProviderTransferError } from '../../../../../errors/providers';\nimport { ILink, Transaction } from '../../../../../../types';\nimport { createLinkQuery } from '../../../../queries/link';\n\ninterface ErrorWithCode extends Error {\n code: string;\n}\n\nconst isErrorWithCode = (error: any): error is ErrorWithCode => {\n return error && typeof error.code === 'string';\n};\n\nconst isForeignKeyConstraintError = (e: Error) => {\n const MYSQL_FK_ERROR_CODES = ['1452', '1557', '1216', '1217', '1451'];\n const POSTGRES_FK_ERROR_CODE = '23503';\n const SQLITE_FK_ERROR_CODE = 'SQLITE_CONSTRAINT_FOREIGNKEY';\n\n if (isErrorWithCode(e) && e.code) {\n return [SQLITE_FK_ERROR_CODE, POSTGRES_FK_ERROR_CODE, ...MYSQL_FK_ERROR_CODES].includes(e.code);\n }\n\n return e.message.toLowerCase().includes('foreign key constraint');\n};\n\nexport const createLinksWriteStream = (\n mapID: (uid: string, id: number) => number | undefined,\n strapi: Core.Strapi,\n transaction?: Transaction,\n onWarning?: (message: string) => void\n) => {\n return new Writable({\n objectMode: true,\n async write(link: ILink, _encoding, callback) {\n await transaction?.attach(async (trx) => {\n const { left, right } = link;\n const query = createLinkQuery(strapi, trx);\n\n const originalLeftRef = left.ref;\n const originalRightRef = right.ref;\n\n // Map IDs if needed\n left.ref = mapID(left.type, originalLeftRef) ?? originalLeftRef;\n right.ref = mapID(right.type, originalRightRef) ?? originalRightRef;\n\n try {\n await query().insert(link);\n } catch (e) {\n if (e instanceof Error) {\n if (isForeignKeyConstraintError(e)) {\n onWarning?.(\n `Skipping link ${left.type}:${originalLeftRef} -> ${right.type}:${originalRightRef} due to a foreign key constraint.`\n );\n return callback(null);\n }\n return callback(e);\n }\n\n return callback(\n new ProviderTransferError(\n `An error happened while trying to import a ${left.type} link.`\n )\n );\n }\n\n callback(null);\n });\n },\n });\n};\n"],"names":["isErrorWithCode","error","code","isForeignKeyConstraintError","e","MYSQL_FK_ERROR_CODES","POSTGRES_FK_ERROR_CODE","SQLITE_FK_ERROR_CODE","includes","message","toLowerCase","createLinksWriteStream","mapID","strapi","transaction","onWarning","Writable","objectMode","write","link","_encoding","callback","attach","trx","left","right","query","createLinkQuery","originalLeftRef","ref","originalRightRef","type","insert","Error","ProviderTransferError"],"mappings":";;;;AAUA,MAAMA,kBAAkB,CAACC,KAAAA,GAAAA;AACvB,IAAA,OAAOA,KAAAA,IAAS,OAAOA,KAAAA,CAAMC,IAAI,KAAK,QAAA;AACxC,CAAA;AAEA,MAAMC,8BAA8B,CAACC,CAAAA,GAAAA;AACnC,IAAA,MAAMC,oBAAAA,GAAuB;AAAC,QAAA,MAAA;AAAQ,QAAA,MAAA;AAAQ,QAAA,MAAA;AAAQ,QAAA,MAAA;AAAQ,QAAA;AAAO,KAAA;AACrE,IAAA,MAAMC,sBAAAA,GAAyB,OAAA;AAC/B,IAAA,MAAMC,oBAAAA,GAAuB,8BAAA;AAE7B,IAAA,IAAIP,eAAAA,CAAgBI,CAAAA,CAAAA,IAAMA,CAAAA,CAAEF,IAAI,EAAE;QAChC,OAAO;AAACK,YAAAA,oBAAAA;AAAsBD,YAAAA,sBAAAA;AAA2BD,YAAAA,GAAAA;SAAqB,CAACG,QAAQ,CAACJ,CAAAA,CAAEF,IAAI,CAAA;AAChG,IAAA;AAEA,IAAA,OAAOE,EAAEK,OAAO,CAACC,WAAW,EAAA,CAAGF,QAAQ,CAAC,wBAAA,CAAA;AAC1C,CAAA;AAEO,MAAMG,sBAAAA,GAAyB,CACpCC,KAAAA,EACAC,QACAC,WAAAA,EACAC,SAAAA,GAAAA;AAEA,IAAA,OAAO,IAAIC,QAAAA,CAAS;QAClBC,UAAAA,EAAY,IAAA;AACZ,QAAA,MAAMC,KAAAA,CAAAA,CAAMC,IAAW,EAAEC,SAAS,EAAEC,QAAQ,EAAA;YAC1C,MAAMP,WAAAA,EAAaQ,OAAO,OAAOC,GAAAA,GAAAA;AAC/B,gBAAA,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGN,IAAAA;gBACxB,MAAMO,KAAAA,GAAQC,gBAAgBd,MAAAA,EAAQU,GAAAA,CAAAA;gBAEtC,MAAMK,eAAAA,GAAkBJ,KAAKK,GAAG;gBAChC,MAAMC,gBAAAA,GAAmBL,MAAMI,GAAG;;AAGlCL,gBAAAA,IAAAA,CAAKK,GAAG,GAAGjB,KAAAA,CAAMY,IAAAA,CAAKO,IAAI,EAAEH,eAAAA,CAAAA,IAAoBA,eAAAA;AAChDH,gBAAAA,KAAAA,CAAMI,GAAG,GAAGjB,KAAAA,CAAMa,KAAAA,CAAMM,IAAI,EAAED,gBAAAA,CAAAA,IAAqBA,gBAAAA;gBAEnD,IAAI;oBACF,MAAMJ,KAAAA,EAAAA,CAAQM,MAAM,CAACb,IAAAA,CAAAA;AACvB,gBAAA,CAAA,CAAE,OAAOf,CAAAA,EAAG;AACV,oBAAA,IAAIA,aAAa6B,KAAAA,EAAO;AACtB,wBAAA,IAAI9B,4BAA4BC,CAAAA,CAAAA,EAAI;AAClCW,4BAAAA,SAAAA,GACE,CAAC,cAAc,EAAES,KAAKO,IAAI,CAAC,CAAC,EAAEH,eAAAA,CAAgB,IAAI,EAAEH,MAAMM,IAAI,CAAC,CAAC,EAAED,gBAAAA,CAAiB,iCAAiC,CAAC,CAAA;AAEvH,4BAAA,OAAOT,QAAAA,CAAS,IAAA,CAAA;AAClB,wBAAA;AACA,wBAAA,OAAOA,QAAAA,CAASjB,CAAAA,CAAAA;AAClB,oBAAA;oBAEA,OAAOiB,QAAAA,CACL,IAAIa,qBAAAA,CACF,CAAC,2CAA2C,EAAEV,IAAAA,CAAKO,IAAI,CAAC,MAAM,CAAC,CAAA,CAAA;AAGrE,gBAAA;gBAEAV,QAAAA,CAAS,IAAA,CAAA;AACX,YAAA,CAAA,CAAA;AACF,QAAA;AACF,KAAA,CAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","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\nfunction getFileStats(\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\nasync function signFile(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 (file: IFile) => {\n const signedUrl = await provider.getSignedUrl(file);\n file.url = signedUrl.url;\n };\n\n // Sign the original file\n await signUrl(file);\n // Sign each file format\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n await signUrl(file.formats[format]);\n }\n }\n }\n}\n\n/**\n * Generate and consume assets streams in order to stream each file individually\n */\nexport const createAssetsStream = (strapi: Core.Strapi): Duplex => {\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 signFile(file);\n }\n const filepath = isLocalProvider ? join(strapi.dirs.static.public, file.url) : file.url;\n const stats = await getFileStats(filepath, strapi, isLocalProvider);\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 const fileFormatStats = await getFileStats(fileFormatFilepath, strapi, isLocalProvider);\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","getFileStats","stat","Promise","resolve","reject","contentLength","headers","get","stats","size","parseInt","signFile","file","provider","plugins","upload","providerName","config","isPrivate","signUrl","signedUrl","getSignedUrl","url","formats","format","Object","keys","createAssetsStream","generator","stream","db","queryBuilder","select","isLocalProvider","join","dirs","static","public","metadata","filename","hash","ext","fileFormat","fileFormatFilepath","fileFormatStats","fileFormatStream","type","id","mainHash","Duplex","from"],"mappings":"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"}
1
+ {"version":3,"file":"assets.js","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\nfunction getFileStats(\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\nasync function signFile(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 (file: IFile) => {\n const signedUrl = await provider.getSignedUrl(file);\n file.url = signedUrl.url;\n };\n\n // Sign the original file\n await signUrl(file);\n // Sign each file format\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n await signUrl(file.formats[format]);\n }\n }\n }\n}\n\n/**\n * Generate and consume assets streams in order to stream each file individually\n */\nexport const createAssetsStream = (strapi: Core.Strapi): Duplex => {\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 signFile(file);\n }\n const filepath = isLocalProvider ? join(strapi.dirs.static.public, file.url) : file.url;\n const stats = await getFileStats(filepath, strapi, isLocalProvider);\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 const fileFormatStats = await getFileStats(fileFormatFilepath, strapi, isLocalProvider);\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","getFileStats","stat","Promise","resolve","reject","contentLength","headers","get","stats","size","parseInt","signFile","file","provider","plugins","upload","providerName","config","isPrivate","signUrl","signedUrl","getSignedUrl","url","formats","format","Object","keys","createAssetsStream","generator","stream","db","queryBuilder","select","isLocalProvider","join","dirs","static","public","metadata","filename","hash","ext","fileFormat","fileFormatFilepath","fileFormatStats","fileFormatStream","type","id","mainHash","Duplex","from"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { join } from 'path';
2
2
  import { Duplex, PassThrough, Readable } from 'stream';
3
- import { createReadStream, stat } from 'fs-extra';
3
+ import { stat, createReadStream } from 'fs-extra';
4
4
 
5
5
  function getFileStream(filepath, strapi1, isLocal = false) {
6
6
  if (isLocal) {
@@ -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\nfunction getFileStats(\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\nasync function signFile(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 (file: IFile) => {\n const signedUrl = await provider.getSignedUrl(file);\n file.url = signedUrl.url;\n };\n\n // Sign the original file\n await signUrl(file);\n // Sign each file format\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n await signUrl(file.formats[format]);\n }\n }\n }\n}\n\n/**\n * Generate and consume assets streams in order to stream each file individually\n */\nexport const createAssetsStream = (strapi: Core.Strapi): Duplex => {\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 signFile(file);\n }\n const filepath = isLocalProvider ? join(strapi.dirs.static.public, file.url) : file.url;\n const stats = await getFileStats(filepath, strapi, isLocalProvider);\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 const fileFormatStats = await getFileStats(fileFormatFilepath, strapi, isLocalProvider);\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","getFileStats","stat","Promise","resolve","reject","contentLength","headers","get","stats","size","parseInt","signFile","file","provider","plugins","upload","providerName","config","isPrivate","signUrl","signedUrl","getSignedUrl","url","formats","format","Object","keys","createAssetsStream","generator","stream","db","queryBuilder","select","isLocalProvider","join","dirs","static","public","metadata","filename","hash","ext","fileFormat","fileFormatFilepath","fileFormatStats","fileFormatStream","type","id","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\nfunction getFileStats(\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\nasync function signFile(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 (file: IFile) => {\n const signedUrl = await provider.getSignedUrl(file);\n file.url = signedUrl.url;\n };\n\n // Sign the original file\n await signUrl(file);\n // Sign each file format\n if (file.formats) {\n for (const format of Object.keys(file.formats)) {\n await signUrl(file.formats[format]);\n }\n }\n }\n}\n\n/**\n * Generate and consume assets streams in order to stream each file individually\n */\nexport const createAssetsStream = (strapi: Core.Strapi): Duplex => {\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 signFile(file);\n }\n const filepath = isLocalProvider ? join(strapi.dirs.static.public, file.url) : file.url;\n const stats = await getFileStats(filepath, strapi, isLocalProvider);\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 const fileFormatStats = await getFileStats(fileFormatFilepath, strapi, isLocalProvider);\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","getFileStats","stat","Promise","resolve","reject","contentLength","headers","get","stats","size","parseInt","signFile","file","provider","plugins","upload","providerName","config","isPrivate","signUrl","signedUrl","getSignedUrl","url","formats","format","Object","keys","createAssetsStream","generator","stream","db","queryBuilder","select","isLocalProvider","join","dirs","static","public","metadata","filename","hash","ext","fileFormat","fileFormatFilepath","fileFormatStats","fileFormatStream","type","id","mainHash","Duplex","from"],"mappings":"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"}
@@ -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 '../../../../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;;IAGaA,MAAAA,yBAAAA,GAA4B,CAACC,MAAAA,GAAAA;AACxC,IAAA,OAAOC,eAASC,CAAAA,IAAI,CACjB,gBAAgBC,sBAAAA,GAAAA;;AAEf,QAAA,MAAMC,kBAAkBC,iBAAM,CAAA;AAC5BL,YAAAA,MAAAA,CAAOM,EAAE,CAACC,YAAY,CAAC,sBAAsBC,MAAM,EAAA;YACnD,CAACC,IAAAA,GAASC,OAAI,OAASC,EAAAA,IAAAA,CAAKC,KAAK,CAACH,IAAAA,CAAKI,KAAK,CAAGJ,EAAAA,IAAAA,CAAAA;YAC/CK,qBAAsB,CAAA,YAAA;AACvB,SAAA,CAAA;;AAGD,QAAA,MAAMC,iBAAiBV,iBAAM,CAAA;AAC3BL,YAAAA,MAAAA,CAAOM,EAAE,CAACC,YAAY,CAAC,mBAAmBC,MAAM,EAAA;YAChDM,qBAAsB,CAAA,SAAA;AACvB,SAAA,CAAA;AAED,QAAA,MAAME,OAAU,GAAA;AAACZ,YAAAA,eAAAA;AAAiBW,YAAAA;AAAe,SAAA;QAEjD,KAAK,MAAMP,UAAUQ,OAAS,CAAA;YAC5B,WAAW,MAAMC,QAAQT,MAAQ,CAAA;gBAC/B,MAAMS,IAAAA;AACR;AACF;AACF,KAAA,EAAA,CAAA;AAEJ;AAEA,MAAMH,qBAAwB,GAAA,CAACI,IAAmC,GAAA,CAACL,SAAoB;AACrFK,YAAAA,IAAAA;AACAL,YAAAA;SACF,CAAA;;;;"}
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 '../../../../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;;IAGaA,MAAAA,yBAAAA,GAA4B,CAACC,MAAAA,GAAAA;AACxC,IAAA,OAAOC,QAASC,CAAAA,IAAI,CACjB,gBAAgBC,sBAAAA,GAAAA;;AAEf,QAAA,MAAMC,kBAAkBC,KAAM,CAAA;AAC5BL,YAAAA,MAAAA,CAAOM,EAAE,CAACC,YAAY,CAAC,sBAAsBC,MAAM,EAAA;YACnD,CAACC,IAAAA,GAASC,IAAI,OAASC,EAAAA,IAAAA,CAAKC,KAAK,CAACH,IAAAA,CAAKI,KAAK,CAAGJ,EAAAA,IAAAA,CAAAA;YAC/CK,qBAAsB,CAAA,YAAA;AACvB,SAAA,CAAA;;AAGD,QAAA,MAAMC,iBAAiBV,KAAM,CAAA;AAC3BL,YAAAA,MAAAA,CAAOM,EAAE,CAACC,YAAY,CAAC,mBAAmBC,MAAM,EAAA;YAChDM,qBAAsB,CAAA,SAAA;AACvB,SAAA,CAAA;AAED,QAAA,MAAME,OAAU,GAAA;AAACZ,YAAAA,eAAAA;AAAiBW,YAAAA;AAAe,SAAA;QAEjD,KAAK,MAAMP,UAAUQ,OAAS,CAAA;YAC5B,WAAW,MAAMC,QAAQT,MAAQ,CAAA;gBAC/B,MAAMS,IAAAA;AACR;AACF;AACF,KAAA,EAAA,CAAA;AAEJ;AAEA,MAAMH,qBAAwB,GAAA,CAACI,IAAmC,GAAA,CAACL,SAAoB;AACrFK,YAAAA,IAAAA;AACAL,YAAAA;SACF,CAAA;;;;"}
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;;;;"}
@@ -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 '../../../../types';\n\n/**\n * Generate and consume content-types streams in order to stream each entity individually\n */\nexport const createEntitiesStream = (strapi: Core.Strapi): 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 {\n // ignore\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","contentTypes","Object","values","contentTypeStreamGenerator","contentType","query","shared","call","uid","stream","db","queryBuilder","select","populate","deepPopulateComponentLikeQuery","Readable","from","entitiesGenerator","entity","destroy","createEntitiesTransformStream","Transform","objectMode","transform","data","_encoding","callback","id","attributes","type"],"mappings":";;;;;;AAMA;;IAGaA,MAAAA,oBAAAA,GAAuB,CAACC,MAAAA,GAAAA;AACnC,IAAA,MAAMC,YAA2CC,GAAAA,MAAAA,CAAOC,MAAM,CAACH,OAAOC,YAAY,CAAA;IAElF,gBAAgBG,0BAAAA,GAAAA;QACd,KAAK,MAAMC,eAAeJ,YAAc,CAAA;YACtC,MAAMK,KAAAA,GAAQC,wBAA+B,CAACP,MAAAA,CAAAA,CAAQQ,IAAI,CAAC,IAAMH,EAAAA,WAAAA,CAAYI,GAAG,CAAA;AAEhF,YAAA,MAAMC,MAAmBV,GAAAA,MAAAA,CAAOW,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;AACF;AAEA,IAAA,OAAOM,eAASC,CAAAA,IAAI,CACjB,gBAAgBC,iBAAAA,GAAAA;AAIf,QAAA,WAAW,MAAM,EAAER,MAAM,EAAEL,WAAW,EAAE,IAAID,0BAA8B,EAAA,CAAA;YACxE,IAAI;gBACF,WAAW,MAAMe,UAAUT,MAAQ,CAAA;oBACjC,MAAM;AAAES,wBAAAA,MAAAA;AAAQd,wBAAAA;AAAY,qBAAA;AAC9B;AACF,aAAA,CAAE,OAAM;;aAEE,QAAA;AACRK,gBAAAA,MAAAA,CAAOU,OAAO,EAAA;AAChB;AACF;AACF,KAAA,EAAA,CAAA;AAEJ;AAEA;;;UAIaC,6BAAgC,GAAA,IAAA;AAC3C,IAAA,OAAO,IAAIC,gBAAU,CAAA;QACnBC,UAAY,EAAA,IAAA;AACZC,QAAAA,SAAAA,CAAAA,CAAUC,IAAI,EAAEC,SAAS,EAAEC,QAAQ,EAAA;AACjC,YAAA,MAAM,EAAER,MAAM,EAAEd,WAAW,EAAE,GAAGoB,IAAAA;AAChC,YAAA,MAAM,EAAEG,EAAE,EAAE,GAAGC,YAAY,GAAGV,MAAAA;AAE9BQ,YAAAA,QAAAA,CAAS,IAAM,EAAA;AACbG,gBAAAA,IAAAA,EAAMzB,YAAYI,GAAG;AACrBmB,gBAAAA,EAAAA;gBACAH,IAAMI,EAAAA;AACR,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACF;;;;;"}
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 = (strapi: Core.Strapi): 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 {\n // ignore\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","contentTypes","Object","values","contentTypeStreamGenerator","contentType","query","shared","call","uid","stream","db","queryBuilder","select","populate","deepPopulateComponentLikeQuery","Readable","from","entitiesGenerator","entity","destroy","createEntitiesTransformStream","Transform","objectMode","transform","data","_encoding","callback","id","attributes","type"],"mappings":";;;;;;AAMA;;IAGO,MAAMA,oBAAAA,GAAuB,CAACC,MAAAA,GAAAA;AACnC,IAAA,MAAMC,YAAAA,GAA2CC,MAAAA,CAAOC,MAAM,CAACH,OAAOC,YAAY,CAAA;IAElF,gBAAgBG,0BAAAA,GAAAA;QACd,KAAK,MAAMC,eAAeJ,YAAAA,CAAc;YACtC,MAAMK,KAAAA,GAAQC,wBAA+B,CAACP,MAAAA,CAAAA,CAAQQ,IAAI,CAAC,IAAA,EAAMH,WAAAA,CAAYI,GAAG,CAAA;AAEhF,YAAA,MAAMC,MAAAA,GAAmBV,MAAAA,CAAOW,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,OAAM;;YAER,CAAA,QAAU;AACRK,gBAAAA,MAAAA,CAAOU,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,EAAER,MAAM,EAAEd,WAAW,EAAE,GAAGoB,IAAAA;AAChC,YAAA,MAAM,EAAEG,EAAE,EAAE,GAAGC,YAAY,GAAGV,MAAAA;AAE9BQ,YAAAA,QAAAA,CAAS,IAAA,EAAM;AACbG,gBAAAA,IAAAA,EAAMzB,YAAYI,GAAG;AACrBmB,gBAAAA,EAAAA;gBACAH,IAAAA,EAAMI;AACR,aAAA,CAAA;AACF,QAAA;AACF,KAAA,CAAA;AACF;;;;;"}
@@ -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 '../../../../types';\n\n/**\n * Generate and consume content-types streams in order to stream each entity individually\n */\nexport const createEntitiesStream = (strapi: Core.Strapi): 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 {\n // ignore\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","contentTypes","Object","values","contentTypeStreamGenerator","contentType","query","shared","call","uid","stream","db","queryBuilder","select","populate","deepPopulateComponentLikeQuery","Readable","from","entitiesGenerator","entity","destroy","createEntitiesTransformStream","Transform","objectMode","transform","data","_encoding","callback","id","attributes","type"],"mappings":";;;;AAMA;;IAGaA,MAAAA,oBAAAA,GAAuB,CAACC,MAAAA,GAAAA;AACnC,IAAA,MAAMC,YAA2CC,GAAAA,MAAAA,CAAOC,MAAM,CAACH,OAAOC,YAAY,CAAA;IAElF,gBAAgBG,0BAAAA,GAAAA;QACd,KAAK,MAAMC,eAAeJ,YAAc,CAAA;YACtC,MAAMK,KAAAA,GAAQC,iBAA+B,CAACP,MAAAA,CAAAA,CAAQQ,IAAI,CAAC,IAAMH,EAAAA,WAAAA,CAAYI,GAAG,CAAA;AAEhF,YAAA,MAAMC,MAAmBV,GAAAA,MAAAA,CAAOW,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;AACF;AAEA,IAAA,OAAOM,QAASC,CAAAA,IAAI,CACjB,gBAAgBC,iBAAAA,GAAAA;AAIf,QAAA,WAAW,MAAM,EAAER,MAAM,EAAEL,WAAW,EAAE,IAAID,0BAA8B,EAAA,CAAA;YACxE,IAAI;gBACF,WAAW,MAAMe,UAAUT,MAAQ,CAAA;oBACjC,MAAM;AAAES,wBAAAA,MAAAA;AAAQd,wBAAAA;AAAY,qBAAA;AAC9B;AACF,aAAA,CAAE,OAAM;;aAEE,QAAA;AACRK,gBAAAA,MAAAA,CAAOU,OAAO,EAAA;AAChB;AACF;AACF,KAAA,EAAA,CAAA;AAEJ;AAEA;;;UAIaC,6BAAgC,GAAA,IAAA;AAC3C,IAAA,OAAO,IAAIC,SAAU,CAAA;QACnBC,UAAY,EAAA,IAAA;AACZC,QAAAA,SAAAA,CAAAA,CAAUC,IAAI,EAAEC,SAAS,EAAEC,QAAQ,EAAA;AACjC,YAAA,MAAM,EAAER,MAAM,EAAEd,WAAW,EAAE,GAAGoB,IAAAA;AAChC,YAAA,MAAM,EAAEG,EAAE,EAAE,GAAGC,YAAY,GAAGV,MAAAA;AAE9BQ,YAAAA,QAAAA,CAAS,IAAM,EAAA;AACbG,gBAAAA,IAAAA,EAAMzB,YAAYI,GAAG;AACrBmB,gBAAAA,EAAAA;gBACAH,IAAMI,EAAAA;AACR,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACF;;;;"}
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 = (strapi: Core.Strapi): 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 {\n // ignore\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","contentTypes","Object","values","contentTypeStreamGenerator","contentType","query","shared","call","uid","stream","db","queryBuilder","select","populate","deepPopulateComponentLikeQuery","Readable","from","entitiesGenerator","entity","destroy","createEntitiesTransformStream","Transform","objectMode","transform","data","_encoding","callback","id","attributes","type"],"mappings":";;;;AAMA;;IAGO,MAAMA,oBAAAA,GAAuB,CAACC,MAAAA,GAAAA;AACnC,IAAA,MAAMC,YAAAA,GAA2CC,MAAAA,CAAOC,MAAM,CAACH,OAAOC,YAAY,CAAA;IAElF,gBAAgBG,0BAAAA,GAAAA;QACd,KAAK,MAAMC,eAAeJ,YAAAA,CAAc;YACtC,MAAMK,KAAAA,GAAQC,iBAA+B,CAACP,MAAAA,CAAAA,CAAQQ,IAAI,CAAC,IAAA,EAAMH,WAAAA,CAAYI,GAAG,CAAA;AAEhF,YAAA,MAAMC,MAAAA,GAAmBV,MAAAA,CAAOW,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,OAAM;;YAER,CAAA,QAAU;AACRK,gBAAAA,MAAAA,CAAOU,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,EAAER,MAAM,EAAEd,WAAW,EAAE,GAAGoB,IAAAA;AAChC,YAAA,MAAM,EAAEG,EAAE,EAAE,GAAGC,YAAY,GAAGV,MAAAA;AAE9BQ,YAAAA,QAAAA,CAAS,IAAA,EAAM;AACbG,gBAAAA,IAAAA,EAAMzB,YAAYI,GAAG;AACrBmB,gBAAAA,EAAAA;gBACAH,IAAAA,EAAMI;AACR,aAAA,CAAA;AACF,QAAA;AACF,KAAA,CAAA;AACF;;;;"}
@@ -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 } 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 * 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 /**\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 const strapiVersion = 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 stream.on('error', (err) => {\n this.#handleStreamError('assets', err);\n });\n\n return stream;\n }\n}\n\nexport type ILocalStrapiSourceProvider = InstanceType<typeof LocalStrapiSourceProvider>;\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","on","err","name","type","message","report","details","origin","kind","error","severity","streamType","stack","errorMessage","formattedError","timestamp","log"],"mappings":"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"}
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 } 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 * 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 /**\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 const strapiVersion = 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 stream.on('error', (err) => {\n this.#handleStreamError('assets', err);\n });\n\n return stream;\n }\n}\n\nexport type ILocalStrapiSourceProvider = InstanceType<typeof LocalStrapiSourceProvider>;\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","on","err","name","type","message","report","details","origin","kind","error","severity","streamType","stack","errorMessage","formattedError","timestamp","log"],"mappings":"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"}
@@ -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 } 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 * 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 /**\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 const strapiVersion = 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 stream.on('error', (err) => {\n this.#handleStreamError('assets', err);\n });\n\n return stream;\n }\n}\n\nexport type ILocalStrapiSourceProvider = InstanceType<typeof LocalStrapiSourceProvider>;\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","on","err","name","type","message","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 } 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 * 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 /**\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 const strapiVersion = 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 stream.on('error', (err) => {\n this.#handleStreamError('assets', err);\n });\n\n return stream;\n }\n}\n\nexport type ILocalStrapiSourceProvider = InstanceType<typeof LocalStrapiSourceProvider>;\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","on","err","name","type","message","report","details","origin","kind","error","severity","streamType","stack","errorMessage","formattedError","timestamp","log"],"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 '../../../../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;;IAGaA,MAAAA,iBAAAA,GAAoB,CAACC,MAAAA,GAAAA;AAChC,IAAA,MAAMC,IAAO,GAAA;WAAIC,MAAOC,CAAAA,IAAI,CAACH,MAAAA,CAAOI,YAAY,CAAA;WAAMF,MAAOC,CAAAA,IAAI,CAACH,MAAAA,CAAOK,UAAU;AAAE,KAAA;;AAGrF,IAAA,OAAOC,eAASC,CAAAA,IAAI,CACjB,gBAAgBC,aAAAA,GAAAA;AACf,QAAA,MAAMC,QAAQC,oBAAgBV,CAAAA,MAAAA,CAAAA;QAE9B,KAAK,MAAMW,OAAOV,IAAM,CAAA;YACtB,MAAMW,SAAAA,GAAYH,KAAQI,EAAAA,CAAAA,WAAW,CAACF,GAAAA,CAAAA;YAEtC,WAAW,MAAMG,QAAQF,SAAW,CAAA;gBAClC,MAAME,IAAAA;AACR;AACF;AACF,KAAA,EAAA,CAAA;AAEJ;;;;"}
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 '../../../../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;;IAGaA,MAAAA,iBAAAA,GAAoB,CAACC,MAAAA,GAAAA;AAChC,IAAA,MAAMC,IAAO,GAAA;WAAIC,MAAOC,CAAAA,IAAI,CAACH,MAAAA,CAAOI,YAAY,CAAA;WAAMF,MAAOC,CAAAA,IAAI,CAACH,MAAAA,CAAOK,UAAU;AAAE,KAAA;;AAGrF,IAAA,OAAOC,QAASC,CAAAA,IAAI,CACjB,gBAAgBC,aAAAA,GAAAA;AACf,QAAA,MAAMC,QAAQC,eAAgBV,CAAAA,MAAAA,CAAAA;QAE9B,KAAK,MAAMW,OAAOV,IAAM,CAAA;YACtB,MAAMW,SAAAA,GAAYH,KAAQI,EAAAA,CAAAA,WAAW,CAACF,GAAAA,CAAAA;YAEtC,WAAW,MAAMG,QAAQF,SAAW,CAAA;gBAClC,MAAME,IAAAA;AACR;AACF;AACF,KAAA,EAAA,CAAA;AAEJ;;;;"}
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;;;;"}
@@ -353,7 +353,7 @@ function writeStream(step) {
353
353
  const { error, stats } = await _class_private_field_loose_base(this, _endStep)[_endStep](step);
354
354
  const { count } = this.stats[step];
355
355
  if (stats && (stats.started !== count || stats.finished !== count)) {
356
- callback(new Error(`Data missing: sent ${this.stats[step].count} ${step}, recieved ${stats.started} and saved ${stats.finished} ${step}`));
356
+ callback(new Error(`Data missing: sent ${this.stats[step].count} ${step}, received ${stats.started} and saved ${stats.finished} ${step}`));
357
357
  }
358
358
  callback(error);
359
359
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/strapi/providers/remote-destination/index.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { Writable } from 'stream';\nimport { WebSocket } from 'ws';\nimport { once } from 'lodash/fp';\nimport type { Struct, Utils } from '@strapi/types';\n\nimport { createDispatcher, connectToWebsocket, trimTrailingSlash } from '../utils';\n\nimport type {\n IDestinationProvider,\n IMetadata,\n ProviderType,\n IAsset,\n TransferStage,\n Protocol,\n} from '../../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport type { Client, Server, Auth } from '../../../../types/remote/protocol';\nimport type { ILocalStrapiDestinationProviderOptions } from '../local-destination';\nimport { TRANSFER_PATH } from '../../remote/constants';\nimport { ProviderTransferError, ProviderValidationError } from '../../../errors/providers';\n\nexport interface IRemoteStrapiDestinationProviderOptions\n extends Pick<ILocalStrapiDestinationProviderOptions, 'restore' | 'strategy'> {\n url: URL; // the url of the remote Strapi admin\n auth?: Auth.ITransferTokenAuth;\n retryMessageOptions?: {\n retryMessageTimeout: number; // milliseconds to wait for a response from a message\n retryMessageMaxRetries: number; // max number of retries for a message before aborting transfer\n };\n}\n\nconst jsonLength = (obj: object) => Buffer.byteLength(JSON.stringify(obj));\n\nclass RemoteStrapiDestinationProvider implements IDestinationProvider {\n name = 'destination::remote-strapi';\n\n type: ProviderType = 'destination';\n\n options: IRemoteStrapiDestinationProviderOptions;\n\n ws: WebSocket | null;\n\n dispatcher: ReturnType<typeof createDispatcher> | null;\n\n transferID: string | null;\n\n stats!: { [TStage in Exclude<TransferStage, 'schemas'>]: { count: number } };\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: IRemoteStrapiDestinationProviderOptions) {\n this.options = options;\n this.ws = null;\n this.dispatcher = null;\n this.transferID = null;\n\n this.resetStats();\n }\n\n private resetStats() {\n this.stats = {\n assets: { count: 0 },\n entities: { count: 0 },\n links: { count: 0 },\n configuration: { count: 0 },\n };\n }\n\n async initTransfer(): Promise<string> {\n const { strategy, restore } = this.options;\n\n const query = this.dispatcher?.dispatchCommand({\n command: 'init',\n params: { options: { strategy, restore }, transfer: 'push' },\n });\n\n const res = (await query) as Server.Payload<Server.InitMessage>;\n if (!res?.transferID) {\n throw new ProviderTransferError('Init failed, invalid response from the server');\n }\n\n this.resetStats();\n\n return res.transferID;\n }\n\n #startStepOnce(stage: Client.TransferPushStep) {\n return once(() => this.#startStep(stage));\n }\n\n async #startStep<T extends Client.TransferPushStep>(step: T) {\n try {\n await this.dispatcher?.dispatchTransferStep({ action: 'start', step });\n } catch (e) {\n if (e instanceof Error) {\n return e;\n }\n\n if (typeof e === 'string') {\n return new ProviderTransferError(e);\n }\n\n return new ProviderTransferError('Unexpected error');\n }\n\n this.stats[step] = { count: 0 };\n\n return null;\n }\n\n async #endStep<T extends Client.TransferPushStep>(step: T) {\n try {\n const res = await this.dispatcher?.dispatchTransferStep<{\n ok: boolean;\n stats: Protocol.Client.Stats;\n }>({\n action: 'end',\n step,\n });\n\n return { stats: res?.stats ?? null, error: null };\n } catch (e) {\n if (e instanceof Error) {\n return { stats: null, error: e };\n }\n\n if (typeof e === 'string') {\n return { stats: null, error: new ProviderTransferError(e) };\n }\n\n return { stats: null, error: new ProviderTransferError('Unexpected error') };\n }\n }\n\n async #streamStep<T extends Client.TransferPushStep>(\n step: T,\n message: Client.GetTransferPushStreamData<T>\n ) {\n try {\n if (step === 'assets') {\n const assetMessage = message as Protocol.Client.TransferAssetFlow[];\n this.stats[step].count += assetMessage.filter((data) => data.action === 'start').length;\n } else {\n this.stats[step].count += message.length;\n }\n\n await this.dispatcher?.dispatchTransferStep({ action: 'stream', step, data: message });\n } catch (e) {\n if (e instanceof Error) {\n return e;\n }\n\n if (typeof e === 'string') {\n return new ProviderTransferError(e);\n }\n\n return new ProviderTransferError('Unexpected error');\n }\n\n return null;\n }\n\n #writeStream(step: Exclude<Client.TransferPushStep, 'assets'>): Writable {\n type Step = typeof step;\n\n const batchSize = 1024 * 1024; // 1MB;\n const startTransferOnce = this.#startStepOnce(step);\n\n let batch = [] as Client.GetTransferPushStreamData<Step>;\n\n const batchLength = () => jsonLength(batch);\n\n return new Writable({\n objectMode: true,\n\n final: async (callback) => {\n if (batch.length > 0) {\n const streamError = await this.#streamStep(step, batch);\n\n batch = [];\n\n if (streamError) {\n return callback(streamError);\n }\n }\n const { error, stats } = await this.#endStep(step);\n\n const { count } = this.stats[step];\n\n if (stats && (stats.started !== count || stats.finished !== count)) {\n callback(\n new Error(\n `Data missing: sent ${this.stats[step].count} ${step}, recieved ${stats.started} and saved ${stats.finished} ${step}`\n )\n );\n }\n\n callback(error);\n },\n\n write: async (chunk, _encoding, callback) => {\n const startError = await startTransferOnce();\n if (startError) {\n return callback(startError);\n }\n\n batch.push(chunk);\n\n if (batchLength() >= batchSize) {\n const streamError = await this.#streamStep(step, batch);\n\n batch = [];\n\n if (streamError) {\n return callback(streamError);\n }\n }\n\n callback();\n },\n });\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'remote-destination-provider',\n },\n kind: 'info',\n });\n }\n\n async bootstrap(diagnostics?: IDiagnosticReporter): Promise<void> {\n this.#diagnostics = diagnostics;\n const { url, auth } = this.options;\n const validProtocols = ['https:', 'http:'];\n\n let ws: WebSocket;\n\n if (!validProtocols.includes(url.protocol)) {\n throw new ProviderValidationError(`Invalid protocol \"${url.protocol}\"`, {\n check: 'url',\n details: {\n protocol: url.protocol,\n validProtocols,\n },\n });\n }\n const wsProtocol = url.protocol === 'https:' ? 'wss:' : 'ws:';\n const wsUrl = `${wsProtocol}//${url.host}${trimTrailingSlash(\n url.pathname\n )}${TRANSFER_PATH}/push`;\n\n this.#reportInfo('establishing websocket connection');\n // No auth defined, trying public access for transfer\n if (!auth) {\n ws = await connectToWebsocket(wsUrl, undefined, this.#diagnostics);\n }\n\n // Common token auth, this should be the main auth method\n else if (auth.type === 'token') {\n const headers = { Authorization: `Bearer ${auth.token}` };\n ws = await connectToWebsocket(wsUrl, { headers }, this.#diagnostics);\n }\n\n // Invalid auth method provided\n else {\n throw new ProviderValidationError('Auth method not available', {\n check: 'auth.type',\n details: {\n auth: auth.type,\n },\n });\n }\n\n this.#reportInfo('established websocket connection');\n\n this.ws = ws;\n const { retryMessageOptions } = this.options;\n\n this.#reportInfo('creating dispatcher');\n this.dispatcher = createDispatcher(this.ws, retryMessageOptions, (message: string) =>\n this.#reportInfo(message)\n );\n this.#reportInfo('created dispatcher');\n\n this.#reportInfo('initialize transfer');\n this.transferID = await this.initTransfer();\n this.#reportInfo(`initialized transfer ${this.transferID}`);\n\n this.dispatcher.setTransferProperties({ id: this.transferID, kind: 'push' });\n\n await this.dispatcher.dispatchTransferAction('bootstrap');\n }\n\n async close() {\n // Gracefully close the remote transfer process\n if (this.transferID && this.dispatcher) {\n await this.dispatcher.dispatchTransferAction('close');\n\n await this.dispatcher.dispatchCommand({\n command: 'end',\n params: { transferID: this.transferID },\n });\n }\n\n await new Promise<void>((resolve) => {\n const { ws } = this;\n\n if (!ws || ws.CLOSED) {\n resolve();\n return;\n }\n\n ws.on('close', () => resolve()).close();\n });\n }\n\n getMetadata() {\n return this.dispatcher?.dispatchTransferAction<IMetadata>('getMetadata') ?? null;\n }\n\n async beforeTransfer() {\n await this.dispatcher?.dispatchTransferAction('beforeTransfer');\n }\n\n async rollback() {\n await this.dispatcher?.dispatchTransferAction('rollback');\n }\n\n getSchemas() {\n if (!this.dispatcher) {\n return Promise.resolve(null);\n }\n\n return this.dispatcher.dispatchTransferAction<Utils.String.Dict<Struct.Schema>>('getSchemas');\n }\n\n createEntitiesWriteStream(): Writable {\n return this.#writeStream('entities');\n }\n\n createLinksWriteStream(): Writable {\n return this.#writeStream('links');\n }\n\n createConfigurationWriteStream(): Writable {\n return this.#writeStream('configuration');\n }\n\n createAssetsWriteStream(): Writable | Promise<Writable> {\n let batch: Client.TransferAssetFlow[] = [];\n let hasStarted = false;\n\n const batchSize = 1024 * 1024; // 1MB;\n const batchLength = () => {\n return batch.reduce(\n (acc, chunk) => (chunk.action === 'stream' ? acc + chunk.data.byteLength : acc),\n 0\n );\n };\n const startAssetsTransferOnce = this.#startStepOnce('assets');\n\n const flush = async () => {\n const streamError = await this.#streamStep('assets', batch);\n batch = [];\n return streamError;\n };\n\n const safePush = async (chunk: Client.TransferAssetFlow) => {\n batch.push(chunk);\n\n if (batchLength() >= batchSize) {\n const streamError = await flush();\n if (streamError) {\n throw streamError;\n }\n }\n };\n\n return new Writable({\n objectMode: true,\n final: async (callback) => {\n if (batch.length > 0) {\n await flush();\n }\n\n if (hasStarted) {\n const { error: endStepError } = await this.#endStep('assets');\n\n if (endStepError) {\n return callback(endStepError);\n }\n }\n\n return callback(null);\n },\n\n async write(asset: IAsset, _encoding, callback) {\n const startError = await startAssetsTransferOnce();\n if (startError) {\n return callback(startError);\n }\n\n hasStarted = true;\n\n const assetID = randomUUID();\n const { filename, filepath, stats, stream, metadata } = asset;\n\n try {\n await safePush({\n action: 'start',\n assetID,\n data: { filename, filepath, stats, metadata },\n });\n\n for await (const chunk of stream) {\n await safePush({ action: 'stream', assetID, data: chunk });\n }\n\n await safePush({ action: 'end', assetID });\n\n callback();\n } catch (error) {\n if (error instanceof Error) {\n callback(error);\n }\n }\n },\n });\n }\n}\n\nexport const createRemoteStrapiDestinationProvider = (\n options: IRemoteStrapiDestinationProviderOptions\n) => {\n return new RemoteStrapiDestinationProvider(options);\n};\n"],"names":["jsonLength","obj","Buffer","byteLength","JSON","stringify","RemoteStrapiDestinationProvider","resetStats","stats","assets","count","entities","links","configuration","initTransfer","strategy","restore","options","query","dispatcher","dispatchCommand","command","params","transfer","res","transferID","ProviderTransferError","bootstrap","diagnostics","url","auth","validProtocols","ws","includes","protocol","ProviderValidationError","check","details","wsProtocol","wsUrl","host","trimTrailingSlash","pathname","TRANSFER_PATH","connectToWebsocket","undefined","type","headers","Authorization","token","retryMessageOptions","createDispatcher","message","setTransferProperties","id","kind","dispatchTransferAction","close","Promise","resolve","CLOSED","on","getMetadata","beforeTransfer","rollback","getSchemas","createEntitiesWriteStream","createLinksWriteStream","createConfigurationWriteStream","createAssetsWriteStream","batch","hasStarted","batchSize","batchLength","reduce","acc","chunk","action","data","startAssetsTransferOnce","flush","streamError","safePush","push","Writable","objectMode","final","callback","length","error","endStepError","write","asset","_encoding","startError","assetID","randomUUID","filename","filepath","stream","metadata","Error","name","stage","once","step","dispatchTransferStep","e","assetMessage","filter","startTransferOnce","started","finished","report","createdAt","Date","origin","createRemoteStrapiDestinationProvider"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/strapi/providers/remote-destination/index.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { Writable } from 'stream';\nimport { WebSocket } from 'ws';\nimport { once } from 'lodash/fp';\nimport type { Struct, Utils } from '@strapi/types';\n\nimport { createDispatcher, connectToWebsocket, trimTrailingSlash } from '../utils';\n\nimport type {\n IDestinationProvider,\n IMetadata,\n ProviderType,\n IAsset,\n TransferStage,\n Protocol,\n} from '../../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport type { Client, Server, Auth } from '../../../../types/remote/protocol';\nimport type { ILocalStrapiDestinationProviderOptions } from '../local-destination';\nimport { TRANSFER_PATH } from '../../remote/constants';\nimport { ProviderTransferError, ProviderValidationError } from '../../../errors/providers';\n\nexport interface IRemoteStrapiDestinationProviderOptions\n extends Pick<ILocalStrapiDestinationProviderOptions, 'restore' | 'strategy'> {\n url: URL; // the url of the remote Strapi admin\n auth?: Auth.ITransferTokenAuth;\n retryMessageOptions?: {\n retryMessageTimeout: number; // milliseconds to wait for a response from a message\n retryMessageMaxRetries: number; // max number of retries for a message before aborting transfer\n };\n}\n\nconst jsonLength = (obj: object) => Buffer.byteLength(JSON.stringify(obj));\n\nclass RemoteStrapiDestinationProvider implements IDestinationProvider {\n name = 'destination::remote-strapi';\n\n type: ProviderType = 'destination';\n\n options: IRemoteStrapiDestinationProviderOptions;\n\n ws: WebSocket | null;\n\n dispatcher: ReturnType<typeof createDispatcher> | null;\n\n transferID: string | null;\n\n stats!: { [TStage in Exclude<TransferStage, 'schemas'>]: { count: number } };\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: IRemoteStrapiDestinationProviderOptions) {\n this.options = options;\n this.ws = null;\n this.dispatcher = null;\n this.transferID = null;\n\n this.resetStats();\n }\n\n private resetStats() {\n this.stats = {\n assets: { count: 0 },\n entities: { count: 0 },\n links: { count: 0 },\n configuration: { count: 0 },\n };\n }\n\n async initTransfer(): Promise<string> {\n const { strategy, restore } = this.options;\n\n const query = this.dispatcher?.dispatchCommand({\n command: 'init',\n params: { options: { strategy, restore }, transfer: 'push' },\n });\n\n const res = (await query) as Server.Payload<Server.InitMessage>;\n if (!res?.transferID) {\n throw new ProviderTransferError('Init failed, invalid response from the server');\n }\n\n this.resetStats();\n\n return res.transferID;\n }\n\n #startStepOnce(stage: Client.TransferPushStep) {\n return once(() => this.#startStep(stage));\n }\n\n async #startStep<T extends Client.TransferPushStep>(step: T) {\n try {\n await this.dispatcher?.dispatchTransferStep({ action: 'start', step });\n } catch (e) {\n if (e instanceof Error) {\n return e;\n }\n\n if (typeof e === 'string') {\n return new ProviderTransferError(e);\n }\n\n return new ProviderTransferError('Unexpected error');\n }\n\n this.stats[step] = { count: 0 };\n\n return null;\n }\n\n async #endStep<T extends Client.TransferPushStep>(step: T) {\n try {\n const res = await this.dispatcher?.dispatchTransferStep<{\n ok: boolean;\n stats: Protocol.Client.Stats;\n }>({\n action: 'end',\n step,\n });\n\n return { stats: res?.stats ?? null, error: null };\n } catch (e) {\n if (e instanceof Error) {\n return { stats: null, error: e };\n }\n\n if (typeof e === 'string') {\n return { stats: null, error: new ProviderTransferError(e) };\n }\n\n return { stats: null, error: new ProviderTransferError('Unexpected error') };\n }\n }\n\n async #streamStep<T extends Client.TransferPushStep>(\n step: T,\n message: Client.GetTransferPushStreamData<T>\n ) {\n try {\n if (step === 'assets') {\n const assetMessage = message as Protocol.Client.TransferAssetFlow[];\n this.stats[step].count += assetMessage.filter((data) => data.action === 'start').length;\n } else {\n this.stats[step].count += message.length;\n }\n\n await this.dispatcher?.dispatchTransferStep({ action: 'stream', step, data: message });\n } catch (e) {\n if (e instanceof Error) {\n return e;\n }\n\n if (typeof e === 'string') {\n return new ProviderTransferError(e);\n }\n\n return new ProviderTransferError('Unexpected error');\n }\n\n return null;\n }\n\n #writeStream(step: Exclude<Client.TransferPushStep, 'assets'>): Writable {\n type Step = typeof step;\n\n const batchSize = 1024 * 1024; // 1MB;\n const startTransferOnce = this.#startStepOnce(step);\n\n let batch = [] as Client.GetTransferPushStreamData<Step>;\n\n const batchLength = () => jsonLength(batch);\n\n return new Writable({\n objectMode: true,\n\n final: async (callback) => {\n if (batch.length > 0) {\n const streamError = await this.#streamStep(step, batch);\n\n batch = [];\n\n if (streamError) {\n return callback(streamError);\n }\n }\n const { error, stats } = await this.#endStep(step);\n\n const { count } = this.stats[step];\n\n if (stats && (stats.started !== count || stats.finished !== count)) {\n callback(\n new Error(\n `Data missing: sent ${this.stats[step].count} ${step}, received ${stats.started} and saved ${stats.finished} ${step}`\n )\n );\n }\n\n callback(error);\n },\n\n write: async (chunk, _encoding, callback) => {\n const startError = await startTransferOnce();\n if (startError) {\n return callback(startError);\n }\n\n batch.push(chunk);\n\n if (batchLength() >= batchSize) {\n const streamError = await this.#streamStep(step, batch);\n\n batch = [];\n\n if (streamError) {\n return callback(streamError);\n }\n }\n\n callback();\n },\n });\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'remote-destination-provider',\n },\n kind: 'info',\n });\n }\n\n async bootstrap(diagnostics?: IDiagnosticReporter): Promise<void> {\n this.#diagnostics = diagnostics;\n const { url, auth } = this.options;\n const validProtocols = ['https:', 'http:'];\n\n let ws: WebSocket;\n\n if (!validProtocols.includes(url.protocol)) {\n throw new ProviderValidationError(`Invalid protocol \"${url.protocol}\"`, {\n check: 'url',\n details: {\n protocol: url.protocol,\n validProtocols,\n },\n });\n }\n const wsProtocol = url.protocol === 'https:' ? 'wss:' : 'ws:';\n const wsUrl = `${wsProtocol}//${url.host}${trimTrailingSlash(\n url.pathname\n )}${TRANSFER_PATH}/push`;\n\n this.#reportInfo('establishing websocket connection');\n // No auth defined, trying public access for transfer\n if (!auth) {\n ws = await connectToWebsocket(wsUrl, undefined, this.#diagnostics);\n }\n\n // Common token auth, this should be the main auth method\n else if (auth.type === 'token') {\n const headers = { Authorization: `Bearer ${auth.token}` };\n ws = await connectToWebsocket(wsUrl, { headers }, this.#diagnostics);\n }\n\n // Invalid auth method provided\n else {\n throw new ProviderValidationError('Auth method not available', {\n check: 'auth.type',\n details: {\n auth: auth.type,\n },\n });\n }\n\n this.#reportInfo('established websocket connection');\n\n this.ws = ws;\n const { retryMessageOptions } = this.options;\n\n this.#reportInfo('creating dispatcher');\n this.dispatcher = createDispatcher(this.ws, retryMessageOptions, (message: string) =>\n this.#reportInfo(message)\n );\n this.#reportInfo('created dispatcher');\n\n this.#reportInfo('initialize transfer');\n this.transferID = await this.initTransfer();\n this.#reportInfo(`initialized transfer ${this.transferID}`);\n\n this.dispatcher.setTransferProperties({ id: this.transferID, kind: 'push' });\n\n await this.dispatcher.dispatchTransferAction('bootstrap');\n }\n\n async close() {\n // Gracefully close the remote transfer process\n if (this.transferID && this.dispatcher) {\n await this.dispatcher.dispatchTransferAction('close');\n\n await this.dispatcher.dispatchCommand({\n command: 'end',\n params: { transferID: this.transferID },\n });\n }\n\n await new Promise<void>((resolve) => {\n const { ws } = this;\n\n if (!ws || ws.CLOSED) {\n resolve();\n return;\n }\n\n ws.on('close', () => resolve()).close();\n });\n }\n\n getMetadata() {\n return this.dispatcher?.dispatchTransferAction<IMetadata>('getMetadata') ?? null;\n }\n\n async beforeTransfer() {\n await this.dispatcher?.dispatchTransferAction('beforeTransfer');\n }\n\n async rollback() {\n await this.dispatcher?.dispatchTransferAction('rollback');\n }\n\n getSchemas() {\n if (!this.dispatcher) {\n return Promise.resolve(null);\n }\n\n return this.dispatcher.dispatchTransferAction<Utils.String.Dict<Struct.Schema>>('getSchemas');\n }\n\n createEntitiesWriteStream(): Writable {\n return this.#writeStream('entities');\n }\n\n createLinksWriteStream(): Writable {\n return this.#writeStream('links');\n }\n\n createConfigurationWriteStream(): Writable {\n return this.#writeStream('configuration');\n }\n\n createAssetsWriteStream(): Writable | Promise<Writable> {\n let batch: Client.TransferAssetFlow[] = [];\n let hasStarted = false;\n\n const batchSize = 1024 * 1024; // 1MB;\n const batchLength = () => {\n return batch.reduce(\n (acc, chunk) => (chunk.action === 'stream' ? acc + chunk.data.byteLength : acc),\n 0\n );\n };\n const startAssetsTransferOnce = this.#startStepOnce('assets');\n\n const flush = async () => {\n const streamError = await this.#streamStep('assets', batch);\n batch = [];\n return streamError;\n };\n\n const safePush = async (chunk: Client.TransferAssetFlow) => {\n batch.push(chunk);\n\n if (batchLength() >= batchSize) {\n const streamError = await flush();\n if (streamError) {\n throw streamError;\n }\n }\n };\n\n return new Writable({\n objectMode: true,\n final: async (callback) => {\n if (batch.length > 0) {\n await flush();\n }\n\n if (hasStarted) {\n const { error: endStepError } = await this.#endStep('assets');\n\n if (endStepError) {\n return callback(endStepError);\n }\n }\n\n return callback(null);\n },\n\n async write(asset: IAsset, _encoding, callback) {\n const startError = await startAssetsTransferOnce();\n if (startError) {\n return callback(startError);\n }\n\n hasStarted = true;\n\n const assetID = randomUUID();\n const { filename, filepath, stats, stream, metadata } = asset;\n\n try {\n await safePush({\n action: 'start',\n assetID,\n data: { filename, filepath, stats, metadata },\n });\n\n for await (const chunk of stream) {\n await safePush({ action: 'stream', assetID, data: chunk });\n }\n\n await safePush({ action: 'end', assetID });\n\n callback();\n } catch (error) {\n if (error instanceof Error) {\n callback(error);\n }\n }\n },\n });\n }\n}\n\nexport const createRemoteStrapiDestinationProvider = (\n options: IRemoteStrapiDestinationProviderOptions\n) => {\n return new RemoteStrapiDestinationProvider(options);\n};\n"],"names":["jsonLength","obj","Buffer","byteLength","JSON","stringify","RemoteStrapiDestinationProvider","resetStats","stats","assets","count","entities","links","configuration","initTransfer","strategy","restore","options","query","dispatcher","dispatchCommand","command","params","transfer","res","transferID","ProviderTransferError","bootstrap","diagnostics","url","auth","validProtocols","ws","includes","protocol","ProviderValidationError","check","details","wsProtocol","wsUrl","host","trimTrailingSlash","pathname","TRANSFER_PATH","connectToWebsocket","undefined","type","headers","Authorization","token","retryMessageOptions","createDispatcher","message","setTransferProperties","id","kind","dispatchTransferAction","close","Promise","resolve","CLOSED","on","getMetadata","beforeTransfer","rollback","getSchemas","createEntitiesWriteStream","createLinksWriteStream","createConfigurationWriteStream","createAssetsWriteStream","batch","hasStarted","batchSize","batchLength","reduce","acc","chunk","action","data","startAssetsTransferOnce","flush","streamError","safePush","push","Writable","objectMode","final","callback","length","error","endStepError","write","asset","_encoding","startError","assetID","randomUUID","filename","filepath","stream","metadata","Error","name","stage","once","step","dispatchTransferStep","e","assetMessage","filter","startTransferOnce","started","finished","report","createdAt","Date","origin","createRemoteStrapiDestinationProvider"],"mappings":"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"}
@@ -351,7 +351,7 @@ function writeStream(step) {
351
351
  const { error, stats } = await _class_private_field_loose_base(this, _endStep)[_endStep](step);
352
352
  const { count } = this.stats[step];
353
353
  if (stats && (stats.started !== count || stats.finished !== count)) {
354
- callback(new Error(`Data missing: sent ${this.stats[step].count} ${step}, recieved ${stats.started} and saved ${stats.finished} ${step}`));
354
+ callback(new Error(`Data missing: sent ${this.stats[step].count} ${step}, received ${stats.started} and saved ${stats.finished} ${step}`));
355
355
  }
356
356
  callback(error);
357
357
  },