{"version":3,"file":"index.mjs","sources":["../../../../src/strapi/providers/local-source/index.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { chain } from 'stream-chain';\nimport type { Core, Struct } from '@strapi/types';\n\nimport type { IMetadata, ISourceProvider, ProviderType, TransferStage } from '../../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { createEntitiesStream, createEntitiesTransformStream } from './entities';\nimport { createLinksStream } from './links';\nimport { createConfigurationStream } from './configuration';\nimport { createAssetsStream } from './assets';\nimport { estimateAssetTotals } from './estimate-asset-totals';\nimport * as utils from '../../../utils';\nimport { assertValidStrapi } from '../../../utils/providers';\n\nexport interface ILocalStrapiSourceProviderOptions {\n  getStrapi(): Core.Strapi | Promise<Core.Strapi>; // return an initialized instance of Strapi\n\n  autoDestroy?: boolean; // shut down the instance returned by getStrapi() at the end of the transfer\n}\n\nexport const createLocalStrapiSourceProvider = (options: ILocalStrapiSourceProviderOptions) => {\n  return new LocalStrapiSourceProvider(options);\n};\n\nclass LocalStrapiSourceProvider implements ISourceProvider {\n  name = 'source::local-strapi';\n\n  type: ProviderType = 'source';\n\n  options: ILocalStrapiSourceProviderOptions;\n\n  strapi?: Core.Strapi;\n\n  #diagnostics?: IDiagnosticReporter;\n\n  constructor(options: ILocalStrapiSourceProviderOptions) {\n    this.options = options;\n  }\n\n  async bootstrap(diagnostics?: IDiagnosticReporter): Promise<void> {\n    this.#diagnostics = diagnostics;\n    this.strapi = await this.options.getStrapi();\n    this.strapi.db.lifecycles.disable();\n  }\n\n  #reportInfo(message: string) {\n    this.#diagnostics?.report({\n      details: {\n        createdAt: new Date(),\n        message,\n        origin: 'local-source-provider',\n      },\n      kind: 'info',\n    });\n  }\n\n  #reportWarning(message: string) {\n    this.#diagnostics?.report({\n      details: {\n        createdAt: new Date(),\n        message,\n        origin: 'local-source-provider',\n      },\n      kind: 'warning',\n    });\n  }\n\n  /**\n   * Reports an error to the diagnostic reporter.\n   */\n  #reportError(message: string, error: Error) {\n    this.#diagnostics?.report({\n      details: {\n        createdAt: new Date(),\n        message,\n        error,\n        severity: 'fatal',\n        name: error.name,\n      },\n      kind: 'error',\n    });\n  }\n\n  /**\n   * Handles errors that occur in read streams.\n   */\n  #handleStreamError(streamType: string, err: Error) {\n    const { message, stack } = err;\n    const errorMessage = `[Data transfer] Error in ${streamType} read stream: ${message}`;\n    const formattedError = {\n      message: errorMessage,\n      stack,\n      timestamp: new Date().toISOString(),\n    };\n\n    this.strapi?.log.error(formattedError);\n    this.#reportError(formattedError.message, err);\n  }\n\n  async close(): Promise<void> {\n    const { autoDestroy } = this.options;\n    assertValidStrapi(this.strapi);\n    this.strapi.db.lifecycles.enable();\n    // Basically `!== false` but more deterministic\n    if (autoDestroy === undefined || autoDestroy === true) {\n      await this.strapi?.destroy();\n    }\n  }\n\n  getMetadata(): IMetadata {\n    this.#reportInfo('getting metadata');\n    assertValidStrapi(this.strapi);\n    const strapiVersion = this.strapi.config.get<string>('info.strapi');\n    const createdAt = new Date().toISOString();\n\n    return {\n      createdAt,\n      strapi: {\n        version: strapiVersion,\n      },\n    };\n  }\n\n  async createEntitiesReadStream(): Promise<Readable> {\n    assertValidStrapi(this.strapi, 'Not able to stream entities');\n    this.#reportInfo('creating entities read stream');\n    return chain([\n      // Entities stream\n      createEntitiesStream(this.strapi),\n\n      // Transform stream\n      createEntitiesTransformStream(),\n    ]);\n  }\n\n  createLinksReadStream(): Readable {\n    assertValidStrapi(this.strapi, 'Not able to stream links');\n    this.#reportInfo('creating links read stream');\n\n    return createLinksStream(this.strapi);\n  }\n\n  createConfigurationReadStream(): Readable {\n    assertValidStrapi(this.strapi, 'Not able to stream configuration');\n    this.#reportInfo('creating configuration read stream');\n    return createConfigurationStream(this.strapi);\n  }\n\n  getSchemas(): Record<string, Struct.Schema> {\n    assertValidStrapi(this.strapi, 'Not able to get Schemas');\n    this.#reportInfo('getting schemas');\n    const schemas = utils.schema.schemasToValidJSON({\n      ...this.strapi.contentTypes,\n      ...this.strapi.components,\n    });\n\n    return utils.schema.mapSchemasValues(schemas);\n  }\n\n  createSchemasReadStream(): Readable {\n    return Readable.from(Object.values(this.getSchemas()));\n  }\n\n  createAssetsReadStream(): Readable {\n    assertValidStrapi(this.strapi, 'Not able to stream assets');\n    this.#reportInfo('creating assets read stream');\n\n    const stream = createAssetsStream(this.strapi, {\n      onWarning: (message) => this.#reportWarning(message),\n    });\n    stream.on('error', (err) => {\n      this.#handleStreamError('assets', err);\n    });\n\n    return stream;\n  }\n\n  async getStageTotals(stage: TransferStage) {\n    if (stage !== 'assets') {\n      return null;\n    }\n    assertValidStrapi(this.strapi, 'Not able to estimate asset totals');\n    return estimateAssetTotals(this.strapi);\n  }\n}\n\nexport type ILocalStrapiSourceProvider = InstanceType<typeof LocalStrapiSourceProvider>;\n\nexport { estimateAssetTotals } from './estimate-asset-totals';\n"],"names":["createLocalStrapiSourceProvider","options","LocalStrapiSourceProvider","bootstrap","diagnostics","strapi","getStrapi","db","lifecycles","disable","close","autoDestroy","assertValidStrapi","enable","undefined","destroy","getMetadata","strapiVersion","config","get","createdAt","Date","toISOString","version","createEntitiesReadStream","chain","createEntitiesStream","createEntitiesTransformStream","createLinksReadStream","createLinksStream","createConfigurationReadStream","createConfigurationStream","getSchemas","schemas","utils","contentTypes","components","createSchemasReadStream","Readable","from","Object","values","createAssetsReadStream","stream","createAssetsStream","onWarning","message","on","err","getStageTotals","stage","estimateAssetTotals","name","type","report","details","origin","kind","error","severity","streamType","stack","errorMessage","formattedError","timestamp","log"],"mappings":"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"}