UNPKG

json-creator

Version:

Create json data from a template object with ES6 Template Literals.

241 lines (184 loc) 9.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = jsonCreator; exports.utilFunctions = void 0; var _evaluateSnippet5 = _interopRequireDefault(require("./evaluate-snippet")); var utilFunctions = _interopRequireWildcard(require("./util-functions")); exports.utilFunctions = utilFunctions; function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { keys.push.apply(keys, Object.getOwnPropertySymbols(object)); } if (enumerableOnly) keys = keys.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function getType(value) { // will return 'array', 'object', 'string' and 'other' switch (_typeof(value)) { case 'object': if (value === null) break; if (Array.isArray(value)) { return 'array'; } return 'object'; case 'string': return 'string'; } return 'other'; } function getContext(globalContext, namespace) { if (namespace === '') return globalContext; return globalContext[namespace]; } function setContext(globalContext, namespace, nexContext) { if (namespace === '') return _objectSpread({}, globalContext, {}, nexContext); return _objectSpread({}, globalContext, _defineProperty({}, namespace, _objectSpread({}, globalContext[namespace], {}, nexContext))); } function objectCreator(objTemp, globalContext, dataNamespace) { var parent = _objectSpread({}, getContext(globalContext, dataNamespace).self); var self = {}; var newContext = setContext(globalContext, dataNamespace, { parent: parent, self: self }); var errors = []; for (var key in objTemp) { var _evaluateSnippet = (0, _evaluateSnippet5["default"])(key, newContext), _evaluateSnippet2 = _slicedToArray(_evaluateSnippet, 2), evaluatedKey = _evaluateSnippet2[0], keyErrors = _evaluateSnippet2[1]; errors.push.apply(errors, _toConsumableArray(keyErrors)); var _recursiveHelper = recursiveHelper(objTemp[key], newContext, dataNamespace), _recursiveHelper2 = _slicedToArray(_recursiveHelper, 2), evaluatedValue = _recursiveHelper2[0], valueErrors = _recursiveHelper2[1]; errors.push.apply(errors, _toConsumableArray(valueErrors)); self[evaluatedKey] = evaluatedValue; } return [self, errors]; } function getRepeatRange(keyName) { if (typeof keyName !== 'string') return false; var found = keyName.match(/^(\d+)\.{2,3}(\d+)$/); if (found) { return [parseInt(found[1]), parseInt(found[2])]; } return false; } function getRepeatableValue(arrElement, context) { if (!arrElement || _typeof(arrElement) !== 'object' || Object.keys(arrElement).length !== 1) { return false; } for (var keyName in arrElement) { var _evaluateSnippet3 = (0, _evaluateSnippet5["default"])(keyName, context), _evaluateSnippet4 = _slicedToArray(_evaluateSnippet3, 2), evaluatedKeyName = _evaluateSnippet4[0], errs = _evaluateSnippet4[1]; if (errs.length > 0) { return false; } var repeateRange = getRepeatRange(evaluatedKeyName); if (!repeateRange) { return false; } var _repeateRange = _slicedToArray(repeateRange, 2), minValue = _repeateRange[0], maxValue = _repeateRange[1]; return [minValue, maxValue, arrElement[keyName]]; } } function arrayCreator(arrTemp, globalContext, dataNamespace) { var arrRes = []; var errors = []; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = arrTemp[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var arrElement = _step.value; var repeatableValue = getRepeatableValue(arrElement, globalContext); if (repeatableValue) { (function () { var _repeatableValue = _slicedToArray(repeatableValue, 3), minValue = _repeatableValue[0], maxValue = _repeatableValue[1], value = _repeatableValue[2]; var size = utilFunctions.RANDINT(minValue, maxValue); utilFunctions.RANGE(size).forEach(function (index) { var _recursiveHelper3 = recursiveHelper(value, setContext(globalContext, dataNamespace, { index: index, size: size }), dataNamespace), _recursiveHelper4 = _slicedToArray(_recursiveHelper3, 2), res = _recursiveHelper4[0], errs = _recursiveHelper4[1]; arrRes.push(res); errors.push.apply(errors, _toConsumableArray(errs)); }); })(); } else { var _recursiveHelper5 = recursiveHelper(arrElement, globalContext, dataNamespace), _recursiveHelper6 = _slicedToArray(_recursiveHelper5, 2), res = _recursiveHelper6[0], errs = _recursiveHelper6[1]; arrRes.push(res); errors.push.apply(errors, _toConsumableArray(errs)); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator["return"] != null) { _iterator["return"](); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return [arrRes, errors]; } function recursiveHelper(template, globalContext, dataNamespace) { switch (getType(template)) { case 'string': return (0, _evaluateSnippet5["default"])(template, _objectSpread({}, globalContext)); case 'object': return objectCreator(template, globalContext, dataNamespace); case 'array': return arrayCreator(template, globalContext, dataNamespace); default: // other return [template, []]; } } function jsonCreator() { var template = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var dataContext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var methodContext = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : utilFunctions; var dataNamespace = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '_'; var methodNamespace = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; var globalContext = {}; if (methodNamespace === '') { Object.assign(globalContext, methodContext); } else { globalContext[methodNamespace] = methodContext; } if (dataNamespace === '') { Object.assign(globalContext, dataContext); // global context may overwrite } else { globalContext[dataNamespace] = dataContext; } return recursiveHelper(template, globalContext, dataNamespace); }