parse-js
Version:
Utility library for object structure conversion.
45 lines (35 loc) • 1.44 kB
JavaScript
;
var isArray = require('lodash/isArray');
var parseJSON = require('../lib/json').parse;
var MODE_ANY = 'ANY';
var MODE_JSON = 'JSON';
var MODE_SEPARATOR = 'SEPARATOR';
function ArrayTransformer() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (!(this instanceof ArrayTransformer)) {
return this.transform(new ArrayTransformer(options));
}
this._mode = options.mode || MODE_ANY;
this._separator = options.separator || ',';
}
ArrayTransformer.ANY = MODE_ANY;
ArrayTransformer.JSON = MODE_JSON;
ArrayTransformer.SEPARATOR = MODE_SEPARATOR;
ArrayTransformer.prototype.parse = function (value) {
if (!value && typeof value !== 'number') return [];
if (isArray(value)) return value;
var result = value;
if (typeof value !== 'string') value = value + '';
if (this._mode === MODE_JSON || this._mode === MODE_ANY) result = parseJSON(value);
if (!isArray(result)) result = null;
if (this._mode === MODE_SEPARATOR || this._mode === MODE_ANY && !result) result = value.split(this._separator);
if (!isArray(result)) result = [];
return result;
};
ArrayTransformer.prototype.reverse = function (value) {
if (!isArray(value)) return value;
if (this._mode === MODE_JSON || this._mode === MODE_ANY) return JSON.stringify(value);
if (this._mode === MODE_SEPARATOR) return value.join(this._separator);
return value;
};
module.exports = ArrayTransformer;