UNPKG

@strapi/data-transfer

Version:

Data transfer capabilities for Strapi

153 lines (150 loc) 5.9 kB
import { Readable } from 'stream'; import { chain } from 'stream-chain'; import { createEntitiesStream, createEntitiesTransformStream } from './entities.mjs'; import { createLinksStream } from './links.mjs'; import { createConfigurationStream } from './configuration.mjs'; import { createAssetsStream } from './assets.mjs'; import 'crypto'; import 'lodash/fp'; import { schemasToValidJSON, mapSchemasValues } from '../../../utils/schema.mjs'; import 'events'; import { assertValidStrapi } from '../../../utils/providers.mjs'; function _class_private_field_loose_base(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; } var id = 0; function _class_private_field_loose_key(name) { return "__private_" + id++ + "_" + name; } const createLocalStrapiSourceProvider = (options)=>{ return new LocalStrapiSourceProvider(options); }; var _diagnostics = /*#__PURE__*/ _class_private_field_loose_key("_diagnostics"), _reportInfo = /*#__PURE__*/ _class_private_field_loose_key("_reportInfo"), /** * Reports an error to the diagnostic reporter. */ _reportError = /*#__PURE__*/ _class_private_field_loose_key("_reportError"), /** * Handles errors that occur in read streams. */ _handleStreamError = /*#__PURE__*/ _class_private_field_loose_key("_handleStreamError"); class LocalStrapiSourceProvider { async bootstrap(diagnostics) { _class_private_field_loose_base(this, _diagnostics)[_diagnostics] = diagnostics; this.strapi = await this.options.getStrapi(); this.strapi.db.lifecycles.disable(); } async close() { const { autoDestroy } = this.options; assertValidStrapi(this.strapi); this.strapi.db.lifecycles.enable(); // Basically `!== false` but more deterministic if (autoDestroy === undefined || autoDestroy === true) { await this.strapi?.destroy(); } } getMetadata() { _class_private_field_loose_base(this, _reportInfo)[_reportInfo]('getting metadata'); const strapiVersion = strapi.config.get('info.strapi'); const createdAt = new Date().toISOString(); return { createdAt, strapi: { version: strapiVersion } }; } async createEntitiesReadStream() { assertValidStrapi(this.strapi, 'Not able to stream entities'); _class_private_field_loose_base(this, _reportInfo)[_reportInfo]('creating entities read stream'); return chain([ // Entities stream createEntitiesStream(this.strapi), // Transform stream createEntitiesTransformStream() ]); } createLinksReadStream() { assertValidStrapi(this.strapi, 'Not able to stream links'); _class_private_field_loose_base(this, _reportInfo)[_reportInfo]('creating links read stream'); return createLinksStream(this.strapi); } createConfigurationReadStream() { assertValidStrapi(this.strapi, 'Not able to stream configuration'); _class_private_field_loose_base(this, _reportInfo)[_reportInfo]('creating configuration read stream'); return createConfigurationStream(this.strapi); } getSchemas() { assertValidStrapi(this.strapi, 'Not able to get Schemas'); _class_private_field_loose_base(this, _reportInfo)[_reportInfo]('getting schemas'); const schemas = schemasToValidJSON({ ...this.strapi.contentTypes, ...this.strapi.components }); return mapSchemasValues(schemas); } createSchemasReadStream() { return Readable.from(Object.values(this.getSchemas())); } createAssetsReadStream() { assertValidStrapi(this.strapi, 'Not able to stream assets'); _class_private_field_loose_base(this, _reportInfo)[_reportInfo]('creating assets read stream'); const stream = createAssetsStream(this.strapi); stream.on('error', (err)=>{ _class_private_field_loose_base(this, _handleStreamError)[_handleStreamError]('assets', err); }); return stream; } constructor(options){ Object.defineProperty(this, _reportInfo, { value: reportInfo }); Object.defineProperty(this, _reportError, { value: reportError }); Object.defineProperty(this, _handleStreamError, { value: handleStreamError }); Object.defineProperty(this, _diagnostics, { writable: true, value: void 0 }); this.name = 'source::local-strapi'; this.type = 'source'; this.options = options; } } function reportInfo(message) { _class_private_field_loose_base(this, _diagnostics)[_diagnostics]?.report({ details: { createdAt: new Date(), message, origin: 'local-source-provider' }, kind: 'info' }); } function reportError(message, error) { _class_private_field_loose_base(this, _diagnostics)[_diagnostics]?.report({ details: { createdAt: new Date(), message, error, severity: 'fatal', name: error.name }, kind: 'error' }); } function handleStreamError(streamType, err) { const { message, stack } = err; const errorMessage = `[Data transfer] Error in ${streamType} read stream: ${message}`; const formattedError = { message: errorMessage, stack, timestamp: new Date().toISOString() }; this.strapi?.log.error(formattedError); _class_private_field_loose_base(this, _reportError)[_reportError](formattedError.message, err); } export { createLocalStrapiSourceProvider }; //# sourceMappingURL=index.mjs.map