diff --git a/packages/cli/src/cmd/dev/index.js b/packages/cli/src/cmd/dev/index.js index c12cfe5..2cab560 100644 --- a/packages/cli/src/cmd/dev/index.js +++ b/packages/cli/src/cmd/dev/index.js @@ -1,9 +1,11 @@ const path = require('path'); const fs = require('fs-extra'); +const mergePkg = require('./mergePkg'); const simplifyDSL = require('./simplifyDSL'); const extractCodes = require('./extractCodes'); const {createServer} = require('../../utils/server'); +const PROJECT_ROOT_PATH = process.cwd(); const TPL_PATH = path.join(__dirname, './template'); const LOGIC_BASE_PATH = path.join(process.cwd(), './src/logic'); @@ -20,6 +22,7 @@ const setup = () => { // compile try { const {dsl} = req.body; + await mergePkg(dsl, PROJECT_ROOT_PATH); await simplifyDSL(dsl, LOGIC_BASE_PATH); await extractCodes(dsl, LOGIC_BASE_PATH); await fs.copy(TPL_PATH, LOGIC_BASE_PATH); diff --git a/packages/cli/src/cmd/dev/mergePkg.js b/packages/cli/src/cmd/dev/mergePkg.js new file mode 100644 index 0000000..dbb6c95 --- /dev/null +++ b/packages/cli/src/cmd/dev/mergePkg.js @@ -0,0 +1,34 @@ +const path = require('path'); +const fs = require('fs-extra'); + +const extractDep = (dsl) => { + const mergedDependencies = {}; + const {cells = []} = dsl; + cells.filter(cell => cell.shape !== 'edge').forEach(cell => { + const {dependencies} = cell.data || {}; + try { + const json = JSON.parse(dependencies); + Object.keys(json).forEach(key => mergedDependencies[key] = json[key]); + } catch(err) { + console.log('extract dependencies failed, the error is:', err.message); + } + }); + return mergedDependencies; +} + +const setup = async (dsl, projectRootPath) => { + const pkgPath = path.join(projectRootPath, './package.json'); + const pkgFile = await fs.readFile(pkgPath); + const pkgJson = JSON.parse(pkgFile); + const dslDependencies = extractDep(dsl); + if(!pkgJson.dependencies) { + pkgJson.dependencies = dslDependencies; + } else { + Object.keys(dslDependencies).forEach(key => { + pkgJson.dependencies[key] = dslDependencies[key]; + }); + } + await fs.writeFile(pkgPath, JSON.stringify(pkgJson, null, 2)); +}; + +module.exports = setup;