strapi/packages/core/strapi/lib/commands/configurationDump.js

64 lines
1.7 KiB
JavaScript
Raw Normal View History

'use strict';
const fs = require('fs');
2022-04-26 17:00:23 +03:00
const tsUtils = require('@strapi/typescript-utils');
const strapi = require('../index');
2022-04-26 17:00:23 +03:00
const CHUNK_SIZE = 100;
/**
* Will dump configurations to a file or stdout
* @param {string} file filepath to use as output
*/
2022-04-26 17:00:23 +03:00
module.exports = async function({ file: filePath, pretty }) {
const output = filePath ? fs.createWriteStream(filePath) : process.stdout;
const appDir = process.cwd();
2022-04-26 17:00:23 +03:00
const isTSProject = await tsUtils.isUsingTypeScript(appDir);
const outDir = await tsUtils.resolveOutDir(appDir);
2022-05-13 15:39:46 +03:00
if (isTSProject)
await tsUtils.compile(appDir, {
watch: false,
configOptions: { options: { incremental: true } },
});
const distDir = isTSProject ? outDir : appDir;
const app = await strapi({ appDir, distDir }).load();
2021-06-22 17:13:11 +02:00
const count = await app.query('strapi::core-store').count();
const exportData = [];
const pageCount = Math.ceil(count / CHUNK_SIZE);
for (let page = 0; page < pageCount; page++) {
const results = await app
2021-06-22 17:13:11 +02:00
.query('strapi::core-store')
.findMany({ limit: CHUNK_SIZE, offset: page * CHUNK_SIZE, orderBy: 'key' });
results
.filter(result => result.key.startsWith('plugin_'))
.forEach(result => {
exportData.push({
key: result.key,
value: result.value,
type: result.type,
environment: result.environment,
tag: result.tag,
});
});
}
output.write(JSON.stringify(exportData, null, pretty ? 2 : null));
output.write('\n');
output.end();
// log success only when writting to file
if (filePath) {
console.log(`Successfully exported ${exportData.length} configuration entries`);
}
process.exit(0);
};