build_scripts/generate_upgrade_functions.js   A
last analyzed

Complexity

Total Complexity 8
Complexity/F 8

Size

Lines of Code 76
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
wmc 8
nc 8
mnd 3
bc 8
fnc 1
dl 0
loc 76
rs 10
bpm 8
cpm 8
noi 0
c 0
b 0
f 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A generate_upgrade_functions.js ➔ generateFunctions 0 17 4
1
/* eslint-env node */
2
/*jslint node: true */
3
'use strict';
4
5
const jsonfile = require('jsonfile');
6
const template = require('lodash.template');
7
const crypto = require('crypto');
8
const fs = require('fs');
9
10
let upgrades = jsonfile.readFileSync('build/data/upgrades.json');
11
let exoticUpgrades = jsonfile.readFileSync('build/data/exotic_upgrades.json');
12
let darkUpgrades = jsonfile.readFileSync('build/data/dark_upgrades.json');
13
let generators = jsonfile.readFileSync('build/data/generators.json');
14
let upgradeService = fs.readFileSync('build/scripts/services/upgrade.js').toString();
15
16
const FUNCTION_TEMPLATE = `this.<%= name %> = function (args){
17
  return <%= func %>;
18
};`;
19
20
let functionTemplate = template(FUNCTION_TEMPLATE);
21
22
23
// add upgrades to generators
24
for(let key in upgrades){
25
  let upgrade = upgrades[key];
26
  for(let generator of upgrade.tiers){
27
    if(!generators[generator].upgrades){
28
      generators[generator].upgrades = [];
29
    }
30
    generators[generator].upgrades.push(key);
31
  }
32
}
33
34
function generateFunctions(upgradesData, functionType, result, upgradeTemplate) {
35
  for(let i in upgradesData){
36
    let upgrade = upgradesData[i];
37
38
    if(!upgrade[functionType]){
39
      continue;
40
    }
41
    if(upgrade[functionType].constructor === Array){
42
      upgrade[functionType] = upgrade[functionType].join('\n');
43
    }
44
45
    let name = '_'+crypto.createHash('md5').update(upgrade[functionType]).digest('hex');
46
    result[name] = upgradeTemplate({ 'name': name, 'func': upgrade[functionType] });
47
    // we overwrite progress with the name
48
    upgrade[functionType] = name;
49
  }
50
}
51
52
let functions = {};
53
54
generateFunctions(upgrades, 'function', functions, functionTemplate);
55
generateFunctions(exoticUpgrades, 'function', functions, functionTemplate);
56
generateFunctions(darkUpgrades, 'function', functions, functionTemplate);
57
58
let concatFunctions = '';
59
for(let i in functions){
60
  concatFunctions += functions[i]+'\n';
61
}
62
63
let sourceTemplate = template(upgradeService);
64
65
fs.writeFileSync('build/scripts/services/upgrade.js', sourceTemplate({'upgradeFunctions': concatFunctions}));
66
67
jsonfile.writeFileSync('build/data/upgrades.json', upgrades, {
68
  spaces: 2
69
});
70
jsonfile.writeFileSync('build/data/exotic_upgrades.json', exoticUpgrades, {
71
  spaces: 2
72
});
73
jsonfile.writeFileSync('build/data/dark_upgrades.json', darkUpgrades, {
74
  spaces: 2
75
});
76
jsonfile.writeFileSync('build/data/generators.json', generators, {
77
  spaces: 2
78
});
79