You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

43 lines
1.3 KiB

const path = require('path');
const fs = require('fs-extra');
const builtinDependencies = {
eventemitter3: '^4.0.7',
};
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 (error) {
console.log('extract dependencies failed, the error is:', error.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];
});
Object.keys(builtinDependencies).forEach((key) => {
pkgJson.dependencies[key] = builtinDependencies[key];
});
}
await fs.writeFile(pkgPath, JSON.stringify(pkgJson, null, 2));
};
module.exports = setup;