Completed
Push — master ( 430c18...52d1c6 )
by
unknown
54s
created

src/cli/cms/operations/save.js   A

Complexity

Total Complexity 10
Complexity/F 3.33

Size

Lines of Code 41
Function Count 3

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 0
wmc 10
c 1
b 0
f 0
nc 1
mnd 3
bc 7
fnc 3
dl 0
loc 41
rs 10
bpm 2.3333
cpm 3.3333
noi 1

2 Functions

Rating   Name   Duplication   Size   Complexity  
A save.js ➔ saveHtml 0 6 1
B save.js ➔ saveJson 0 25 3
1
import fse from 'fs-extra'
2
import mkdirp from 'mkdirp'
3
import xss from 'xss'
4
import path from 'path'
5
6
import {
7
  config
8
} from '../../'
9
10
export function saveJson(url, json) {
11
  mkdirp.sync(path.dirname(url))
12
13
  if(typeof json.abe_source !== 'undefined' && json.abe_source !== null) {
14
    delete json.abe_source
15
  }
16
17
  var eachRecursive = function (obj) {
18
    for (var k in obj) {
0 ignored issues
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
19
      if (typeof obj[k] === 'object' && obj[k] !== null){
20
        eachRecursive(obj[k])
21
      } else if (typeof obj[k] !== 'undefined' && obj[k] !== null){
22
        obj[k] = xss(obj[k].toString().replace(/"/g, '"'), { 'whiteList': config.htmlWhiteList })
23
      }
24
    }
25
  }
26
27
  eachRecursive(json)
28
29
  fse.writeJsonSync(url, json, {
30
    space: 2,
31
    encoding: 'utf-8'
32
  })
33
  return true
34
}
35
36
export function saveHtml(url, html) {
37
  mkdirp.sync(path.dirname(url))
38
  fse.writeFileSync(url, html)
39
40
  return true
41
}