| 
									
										
										
										
											2024-01-08 16:05:42 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const { | 
					
						
							|  |  |  |   strapi: { | 
					
						
							|  |  |  |     providers: { createLocalStrapiSourceProvider }, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   file: { | 
					
						
							|  |  |  |     providers: { createLocalFileDestinationProvider }, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   engine: { createTransferEngine }, | 
					
						
							|  |  |  | } = require('@strapi/data-transfer'); | 
					
						
							| 
									
										
										
										
											2024-03-26 12:18:03 +01:00
										 |  |  | const { createStrapi, compileStrapi } = require('@strapi/strapi'); | 
					
						
							| 
									
										
										
										
											2024-01-08 16:05:42 +01:00
										 |  |  | const path = require('path'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Export the data from a strapi project. | 
					
						
							|  |  |  |  * This script should be run as `node <path-to>/dts-export.js [exportFilePath]` from the | 
					
						
							|  |  |  |  * root directory of a strapi project e.g. `/examples/kitchensink`. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const createDataset = async () => { | 
					
						
							|  |  |  |   let args = process.argv.slice(2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (args.length !== 1) { | 
					
						
							|  |  |  |     console.error('Please provide the dataset path name as a parameter.'); | 
					
						
							|  |  |  |     process.exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const datasetPath = path.resolve(args[0]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const strapi = await createStrapiInstance(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const source = createSourceProvider(strapi); | 
					
						
							|  |  |  |   const destination = createDestinationProvider(datasetPath); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const engine = createTransferEngine(source, destination, { | 
					
						
							|  |  |  |     versionStrategy: 'ignore', | 
					
						
							|  |  |  |     schemaStrategy: 'ignore', | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   engine.diagnostics.onDiagnostic(console.log); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     const results = await engine.transfer(); | 
					
						
							|  |  |  |     const { destination, engine: engineResults } = results; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const relativeArchivePath = path.relative(process.cwd(), destination.file.path); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     console.log(`Dataset exported to: ${relativeArchivePath}`); | 
					
						
							|  |  |  |     console.log('The export contains:'); | 
					
						
							|  |  |  |     console.log(`  - ${engineResults.schemas?.count ?? 0} schemas`); | 
					
						
							|  |  |  |     console.log(`  - ${engineResults.entities?.count ?? 0} entities`); | 
					
						
							|  |  |  |     console.log(`  - ${engineResults.links?.count ?? 0} links`); | 
					
						
							|  |  |  |     console.log(`  - ${engineResults.assets?.count ?? 0} assets`); | 
					
						
							|  |  |  |     console.log(`  - ${engineResults.configuration?.count ?? 0} configs`); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     process.exit(0); | 
					
						
							|  |  |  |   } catch (e) { | 
					
						
							|  |  |  |     console.error('Export process failed.'); | 
					
						
							|  |  |  |     console.error(e); | 
					
						
							|  |  |  |     process.exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const createSourceProvider = (strapi) => | 
					
						
							|  |  |  |   createLocalStrapiSourceProvider({ | 
					
						
							|  |  |  |     async getStrapi() { | 
					
						
							|  |  |  |       return strapi; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const createDestinationProvider = (datasetPath) => { | 
					
						
							|  |  |  |   return createLocalFileDestinationProvider({ | 
					
						
							|  |  |  |     file: { path: datasetPath }, | 
					
						
							|  |  |  |     encryption: { enabled: false }, | 
					
						
							| 
									
										
										
										
											2024-01-16 12:49:00 +01:00
										 |  |  |     compression: { enabled: true }, | 
					
						
							| 
									
										
										
										
											2024-01-08 16:05:42 +01:00
										 |  |  |   }); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const createStrapiInstance = async (logLevel = 'error') => { | 
					
						
							| 
									
										
										
										
											2024-03-26 12:18:03 +01:00
										 |  |  |   const appContext = await compileStrapi(); | 
					
						
							|  |  |  |   const app = createStrapi(appContext); | 
					
						
							| 
									
										
										
										
											2024-01-08 16:05:42 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   app.log.level = logLevel; | 
					
						
							|  |  |  |   return app.load(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | createDataset().finally(); |