{"version":3,"sources":["jsdelivr-header.js","/npm/dbf-parser@0.0.1/index.js"],"names":[],"mappings":"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","file":"/npm/dbf-parser@0.0.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/dbf-parser@0.0.1/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var fs = require('fs');\r\nvar util = require('util');\r\nvar EventEmitter = require('events').EventEmitter;\r\n\r\n\r\nfunction Header(filename) {\r\n    this.filename = filename;\r\n    this.parseFieldSubRecord = this.parseFieldSubRecord.bind(this);\r\n    this.parseDate = this.parseDate.bind(this);\r\n\r\n    return this;\r\n}\r\n\r\nHeader.prototype.parse = function(callback) {\r\n    var self = this;\r\n    return fs.readFile(this.filename, function(err, buffer) {\r\n        var i;\r\n        if (err) {\r\n            throw err;\r\n        }\r\n        self.type = (buffer.slice(0, 1)).toString('utf-8');\r\n        self.dateUpdated = self.parseDate(buffer.slice(1, 4));\r\n        self.numberOfRecords = self.convertBinaryToInteger(buffer.slice(4, 8));\r\n        self.start = self.convertBinaryToInteger(buffer.slice(8, 10));\r\n        self.recordLength = self.convertBinaryToInteger(buffer.slice(10, 12));\r\n        self.fields = ((function() {\r\n            var _i, _ref, _results;\r\n            _results = [];\r\n            for (i = _i = 32, _ref = this.start - 32; _i <= _ref; i = _i += 32) {\r\n                _results.push(buffer.slice(i, i + 32));\r\n            }\r\n            return _results;\r\n        }).call(self)).map(self.parseFieldSubRecord);\r\n        return callback(self);\r\n    });\r\n};\r\n\r\nHeader.prototype.parseDate = function(buffer) {\r\n    var day, month, year;\r\n    console.log(this.convertBinaryToInteger(buffer.slice(0, 1)));\r\n    year = 1900 + this.convertBinaryToInteger(buffer.slice(0, 1));\r\n    month = (this.convertBinaryToInteger(buffer.slice(1, 2))) - 1;\r\n    day = this.convertBinaryToInteger(buffer.slice(2, 3));\r\n    return new Date(year, month, day);\r\n};\r\n\r\nHeader.prototype.parseFieldSubRecord = function(buffer) {\r\n    var header = {\r\n        name: ((buffer.slice(0, 11)).toString('utf-8')).replace(/[\\u0000]+$/, ''),\r\n        type: (buffer.slice(11, 12)).toString('utf-8'),\r\n        displacement: this.convertBinaryToInteger(buffer.slice(12, 16)),\r\n        length: this.convertBinaryToInteger(buffer.slice(16, 17)),\r\n        decimalPlaces: this.convertBinaryToInteger(buffer.slice(17, 18))\r\n    };\r\n\r\n    return header\r\n};\r\n\r\nHeader.prototype.convertBinaryToInteger = function(buffer) {\r\n    return buffer.readInt32LE(0, true);\r\n};\r\n\r\n\r\n\r\n\r\nfunction Parser(filename) {\r\n    this.filename = filename;\r\n    this.parseField = this.parseField.bind(this);\r\n    this.parseRecord = this.parseRecord.bind(this);\r\n    this.parse = this.parse.bind(this);\r\n}\r\n\r\nutil.inherits(Parser, EventEmitter);\r\n\r\nParser.prototype.parse = function() {\r\n    var self = this;\r\n    this.emit('start', this);\r\n    this.header = new Header(this.filename);\r\n    this.header.parse(function(err) {\r\n        var sequenceNumber;\r\n        self.emit('header', self.header);\r\n        sequenceNumber = 0;\r\n        return fs.readFile(self.filename, function(err, buffer) {\r\n            var loc;\r\n            if (err) {\r\n                throw err;\r\n            }\r\n            loc = self.header.start;\r\n            while (loc < (self.header.start + self.header.numberOfRecords * self.header.recordLength) && loc < buffer.length) {\r\n                self.emit('record', self.parseRecord(++sequenceNumber, buffer.slice(loc, loc += self.header.recordLength)));\r\n            }\r\n            return self.emit('end', self);\r\n        });\r\n    });\r\n    return this;\r\n};\r\n\r\nParser.prototype.parseRecord = function(sequenceNumber, buffer) {\r\n    var field, loc, record, _fn, _i, _len, _ref,\r\n        self = this;\r\n    record = {\r\n        '@sequenceNumber': sequenceNumber,\r\n        '@deleted': (buffer.slice(0, 1))[0] !== 32\r\n    };\r\n    loc = 1;\r\n    _ref = this.header.fields;\r\n    _fn = function(field) {\r\n        var value = record[field.name] = self.parseField(field, buffer.slice(loc, loc += field.length));\r\n\r\n        return value;\r\n    };\r\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n        field = _ref[_i];\r\n        _fn(field);\r\n    }\r\n    return record;\r\n};\r\n\r\nParser.prototype.parseField = function(field, buffer) {\r\n    var value = buffer.toString('utf-8').replace(/^\\x20+|\\x20+$/g, '');\r\n\r\n    if (field.type === 'N') {\r\n        value = Number(value);\r\n    }\r\n    return value;\r\n};\r\n\r\nmodule.exports = Parser;"]}