UNPKG

parse-js

Version:

Utility library for object structure conversion.

58 lines (44 loc) 1.72 kB
'use strict'; var _get = require('lodash/get'); var _isNil = require('lodash/isNil'); var _isFunction = require('lodash/isFunction'); var nullSelector = { parse: function parse() {}, reverse: function reverse() {} }; function wrapPath(selector) { if (_isFunction(selector)) return selector; if (_isNil(selector)) return selector; return function (source) { return _get(source, selector); }; } function SwitchTransformer() { var cases = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var parseSelector = arguments.length > 1 ? arguments[1] : undefined; var reverseSelector = arguments.length > 2 ? arguments[2] : undefined; if (!(this instanceof SwitchTransformer)) { return this.transform(new SwitchTransformer(cases, parseSelector, reverseSelector)); } this._cases = cases; this._parseSelector = wrapPath(parseSelector); this._reverseSelector = wrapPath(reverseSelector); } SwitchTransformer.prototype._getParser = function (source, root, selector) { if (!selector) return nullSelector; var value = selector(source, root); var next = this._cases[value]; if (next) return next; return this._cases['_default_']; }; SwitchTransformer.prototype.parse = function (source, instance, root) { var next = this._getParser(source, root, this._parseSelector); if (!next || !_isFunction(next.parse)) return void 0; return next.parse(source, instance, root); }; SwitchTransformer.prototype.reverse = function (source, instance, root) { var next = this._getParser(source, root, this._reverseSelector); if (!next || !_isFunction(next.reverse)) return void 0; return next.reverse(source, instance, root); }; module.exports = SwitchTransformer;