From 297b321bc876839cfc65fffd1b04cf613bf9e309 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Fri, 21 Jun 2024 16:15:56 +0200 Subject: [PATCH] convert dbmodel to json --- package.json | 1 + packages/api/src/shell/dbModelToJson.js | 16 ++++++++++++++ packages/api/src/shell/index.js | 4 ++++ packages/api/src/shell/jsonToDbModel.js | 9 ++++++++ packages/dbmodel/bin/dbmodel.js | 29 ++++++++++++++++++++++++- 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 packages/api/src/shell/dbModelToJson.js create mode 100644 packages/api/src/shell/jsonToDbModel.js diff --git a/package.json b/package.json index de6bf204..9c14b04e 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "build:web:docker": "yarn workspace dbgate-web build", "build:plugins:frontend": "workspaces-run --only=\"dbgate-plugin-*\" -- yarn build:frontend", "build:plugins:frontend:watch": "workspaces-run --parallel --only=\"dbgate-plugin-*\" -- yarn build:frontend:watch", + "storage-json": "dbmodel model-to-json storage-db packages/api/src/storageModel.json", "plugins:copydist": "workspaces-run --only=\"dbgate-plugin-*\" -- yarn copydist", "build:app:local": "yarn plugins:copydist && cd app && yarn build:local", "start:app:local": "cd app && yarn start:local", diff --git a/packages/api/src/shell/dbModelToJson.js b/packages/api/src/shell/dbModelToJson.js new file mode 100644 index 00000000..4b24d637 --- /dev/null +++ b/packages/api/src/shell/dbModelToJson.js @@ -0,0 +1,16 @@ +const importDbModel = require('../utility/importDbModel'); +const fs = require('fs'); + +async function dbModelToJson({ modelFolder, outputFile, commonjs }) { + const dbInfo = await importDbModel(modelFolder); + + const json = JSON.stringify(dbInfo, null, 2); + if (commonjs) { + fs.writeFileSync(outputFile, `module.exports = ${json};`); + return; + } else { + fs.writeFileSync(outputFile, json); + } +} + +module.exports = dbModelToJson; diff --git a/packages/api/src/shell/index.js b/packages/api/src/shell/index.js index 2293a26e..253bb053 100644 --- a/packages/api/src/shell/index.js +++ b/packages/api/src/shell/index.js @@ -27,6 +27,8 @@ const loadDatabase = require('./loadDatabase'); const generateModelSql = require('./generateModelSql'); const modifyJsonLinesReader = require('./modifyJsonLinesReader'); const dataDuplicator = require('./dataDuplicator'); +const dbModelToJson = require('./dbModelToJson'); +const jsonToDbModel = require('./jsonToDbModel'); const dbgateApi = { queryReader, @@ -57,6 +59,8 @@ const dbgateApi = { generateModelSql, modifyJsonLinesReader, dataDuplicator, + dbModelToJson, + jsonToDbModel, }; requirePlugin.initializeDbgateApi(dbgateApi); diff --git a/packages/api/src/shell/jsonToDbModel.js b/packages/api/src/shell/jsonToDbModel.js new file mode 100644 index 00000000..dfa4bdc4 --- /dev/null +++ b/packages/api/src/shell/jsonToDbModel.js @@ -0,0 +1,9 @@ +const exportDbModel = require('../utility/exportDbModel'); +const fs = require('fs'); + +async function jsonToDbModel({ modelFile, outputDir }) { + const dbInfo = JSON.parse(fs.readFileSync(modelFile, 'utf-8')); + await exportDbModel(dbInfo, outputDir); +} + +module.exports = jsonToDbModel; diff --git a/packages/dbmodel/bin/dbmodel.js b/packages/dbmodel/bin/dbmodel.js index b04acbc1..34855902 100755 --- a/packages/dbmodel/bin/dbmodel.js +++ b/packages/dbmodel/bin/dbmodel.js @@ -38,7 +38,8 @@ program '--load-data-condition ', 'regex, which table data will be loaded and stored in model (in load command)' ) - .requiredOption('-e, --engine ', 'engine name, eg. mysql@dbgate-plugin-mysql'); + .option('-e, --engine ', 'engine name, eg. mysql@dbgate-plugin-mysql') + .option('--commonjs', 'Creates CommonJS module'); program .command('deploy ') @@ -117,4 +118,30 @@ program ); }); +program + .command('json-to-model ') + .description('Converts JSON file to model') + .action((jsonFile, modelFolder) => { + runAndExit( + dbgateApi.jsonToDbModel({ + modelFile: jsonFile, + outputDir: modelFolder, + }) + ); + }); + +program + .command('model-to-json ') + .description('Converts model to JSON file') + .action((modelFolder, jsonFile) => { + const { commonjs } = program.opts(); + runAndExit( + dbgateApi.dbModelToJson({ + modelFolder, + outputFile: jsonFile, + commonjs, + }) + ); + }); + program.parse(process.argv);