-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.js
More file actions
51 lines (44 loc) · 1.42 KB
/
index.js
File metadata and controls
51 lines (44 loc) · 1.42 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
const through2 = require('through2'),
validator = require('appuri-event-validator')
function asArray(data) {
if (Array.isArray(data)) {
return data
} else if (data) {
return [data]
}
return []
}
module.exports = function (loaderTransform, userTransform, validateLoaderEvents) {
var recordCount = 0, invalidEvents = 0
const transformFn = userTransform && new Function(
'exports', 'require', 'module',
'__filename', '__dirname',
`return ${userTransform}`
)(exports, require, module, __filename, __dirname)
return through2.obj(function (chunk, enc, cb) {
if (chunk == null) return
if ((++recordCount) % 10000 === 0) {
console.log('Processed %d records', recordCount)
}
var loaderEventValidator = (le) => validateLoaderEvents !== false ? validator.isValid(le) : true
asArray(loaderTransform(chunk)).forEach(le => {
if (transformFn) {
var transformed = asArray(transformFn(chunk, le))
var validEvents = transformed.filter(validator.isValid)
validEvents.forEach(e => this.push(e))
invalidEvents += (transformed.length - validEvents.length)
} else {
if(loaderEventValidator(le)) {
this.push(le)
} else {
invalidEvents++
}
}
})
cb()
},
function (cb) {
console.log('\nProcessed %d records, skipping %d invalid events', recordCount, invalidEvents)
cb()
})
}