Repository navigation
Expand file tree
/
Copy pathindex.js
More file actions
77 lines (73 loc) · 1.92 KB
/
Copy pathindex.js
File metadata and controls
77 lines (73 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const path = require('path')
const DNA = require('organic').DNA
const loadDir = require('organic-dna-fsloader').loadDir
const resolveFn = require('organic-dna-resolve')
const selectModes = require('organic-dna-cellmodes')
const async = require('async')
module.exports = function loadDna (src, next) {
let dnaSourcePaths = src
let dnaMode = process.env.CELL_MODE
let beforeResolve = null
let afterResolve = null
let skipResolve = false
if (!Array.isArray(src)) {
dnaSourcePaths = [src]
}
if (typeof src === 'function') {
next = src
dnaSourcePaths = [path.join(process.cwd(), 'dna')]
}
if (typeof src === 'object' && !Array.isArray(src)) {
if (src.dnaSourcePath) {
dnaSourcePaths = [src.dnaSourcePath]
}
if (src.dnaSourcePaths) {
dnaSourcePaths = src.dnaSourcePaths
}
if (src.dnaMode) {
dnaMode = src.dnaMode
}
if (src.beforeResolve) {
beforeResolve = src.beforeResolve
}
if (src.afterResolve) {
afterResolve = src.afterResolve
}
if (src.skipResolve) {
skipResolve = src.skipResolve
}
}
const dna = new DNA()
return new Promise(function (resolve, reject) {
async.eachSeries(dnaSourcePaths, function (dnaPath, nextDna) {
loadDir(dna, dnaPath, function (err) {
if (err) return nextDna(err)
// fold dna based on cell mode
if (dnaMode) {
selectModes(dna, dnaMode)
}
nextDna()
})
}, async function (err) {
if (err && next) return next(err)
if (err) return reject(err)
try {
// resolve any referrences
if (beforeResolve) {
await beforeResolve(dna)
}
if (!skipResolve) {
resolveFn(dna)
}
if (afterResolve) {
await afterResolve(dna)
}
} catch (e) {
if (next) return next(e)
reject(e)
}
if (next) next(null, dna)
resolve(dna)
})
})
}