Completed
Push — master ( 5e2b93...88fa0f )
by greg
01:45
created

assets.js ➔ getFolders   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
c 0
b 0
f 0
nc 1
dl 0
loc 22
rs 9.2
nop 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A assets.js ➔ ... ➔ ??? 0 11 3
1
import fse from 'fs-extra'
2
import dircompare from 'dir-compare'
3
import mkdirp from 'mkdirp'
4
import path from 'path'
5
6
import {
7
  coreUtils,
8
  cmsTemplates,
9
  config
10
} from '../../'
11
12
export function copy() {
13
  var publicFolders = cmsTemplates.assets.getFolders()
14
  let publish = config.publish.url
15
  var dest = path.join(config.root, publish)
16
  try {
17
    var directory = fse.lstatSync(dest)
18
    if (!directory.isDirectory()) {
19
      mkdirp.sync(dest)
20
    }
21
  } catch (e) {
22
    mkdirp.sync(dest)
23
  }
24
25
  Array.prototype.forEach.call(publicFolders, (publicFolder) => {
26
    var res = dircompare.compareSync(publicFolder, dest, {compareSize: true})
27
28
    res.diffSet.forEach(function (entry) {
29
      var state = {
30
        'equal' : '==',
31
        'left' : '->',
32
        'right' : '<-',
33
        'distinct' : '<>'
34
      }[entry.state]
35
36
      var name1 = entry.name1 ? entry.name1 : ''
37
      var name2 = entry.name2 ? entry.name2 : ''
38
39
      let exclude =  new RegExp(config.files.exclude)
40
      if(!exclude.test(name1) && !exclude.test(name2) && entry.type1 !== 'directory' && entry.type2 !== 'directory') {
41
42
        if(typeof entry.path1 !== 'undefined' && entry.path1 !== null) {
43
          var original = entry.path1
44
          var basePath = original.replace(publicFolder, '')
45
          var move = path.join(dest, basePath)
46
47
          if(entry.type2 === 'missing' || entry.state === 'distinct') {
48
            fse.removeSync(move)
49
            fse.copySync(original, move)
50
          }
51
        }
52
      }
53
    })
54
  })
55
56
  return publicFolders
57
}
58
59
export function getFolders() {
60
  const templateExtension = '.' + config.files.templates.extension
61
  const assetsExtension = config.files.templates.assets
62
  const pathAssets = path.join(config.root, config.templates.url)
63
  let assetsFolders = []
64
  let files = coreUtils.file.getFilesSync(pathAssets, false, templateExtension)
65
66
  // now check if corresponding assets folder exist
67
  Array.prototype.forEach.call(files, (file) => {
68
    var folderName = file.replace(path.extname(file), assetsExtension)
69
    try {
70
      var directory = fse.lstatSync(folderName)
71
      if (directory.isDirectory()) {
72
        assetsFolders.push(folderName)
73
      }
74
    } catch (e) {
75
      //No directory with this name
76
    }
77
  })
78
79
  return assetsFolders
80
}