-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
90 lines (69 loc) · 2.71 KB
/
index.js
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
78
79
80
81
82
var events = require( 'events' );
var _ = require( 'underscore' );
var Reader = require( './lib/Reader' );
var Dictionary = require( './lib/Dictionary' );
var Validator = require( './lib/Validator' );
var MessageBuilder = require( './lib/MessageBuilderOLD' );
/**
* Read a fix message.
*
* The dictionary is a JSON object loaded be the require function
*
* @param readable {stream.Readable} readable stream
* @param dictionary {String|Object} path to the dictionary to load or the dictionary loaded.
* @param options {Object} options to read
* @param options.validate {Boolean} true to validate the message, false otherwise. Default value is true.
* @param options.listeners {Object} to tells what kind of event the invoker expect to receive
* @param options.listeners.fields {Array} array of field numbers or field names. The Emitter will emit an event named: field:NUMBER or field:NAME.
* It ignore the level of repeting group all fields are.
*/
exports.readFix = function ( readable, dictionary, options ) {
var emitter = new events.EventEmitter();
if ( typeof dictionary === 'string' ) {
// TODO check dictionary path
dictionary = require ( dictionary );
}
/*
* default
*/
options = options || {};
options.validate = options.validate || true;
options.dictionary = new Dictionary( dictionary );
var reader = new Reader( options );
/*
* validation
*/
if ( options.validate ) {
var validator = new Validator( options.dictionary );
validator.on( 'end', function ( errors ) {
emitter.emit( 'validation-end', errors === null || errors === undefined || errors.length === 0 , errors );
} );
reader.addListener( validator );
}
/*
* message builder
*/
var messageBuilder = new MessageBuilder( options.dictionary ) ;
messageBuilder.on( 'end', function ( msg ) {
emitter.emit( 'message', msg );
} );
reader.addListener( messageBuilder );
/*
* field listener
*/
var listeners = options.listeners;
if ( listeners && listeners.fields && _.isArray( listeners.fields ) && listeners.fields.length > 0 ) {
var FieldEmitter = require ( './lib/FieldEmitterOLD' );
var fieldEmitter = new FieldEmitter( listeners.fields );
fieldEmitter.on( 'field-found', function ( key, name, number, value ) {
emitter.emit( 'field:' + key, name, number, value );
} );
reader.addListener( fieldEmitter );
}
reader.read( readable, function ( err ) {
if ( err ) {
emitter.emit( 'error', err);
}
} );
return emitter;
};