UNPKG

avifors

Version:

A MDE tool that generates code from a YAML definition of your app domain model.

161 lines (141 loc) 4.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.filters = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _jsYaml = require('js-yaml'); var _jsYaml2 = _interopRequireDefault(_jsYaml); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; } // 'camelCase' => ['camel', 'case'] function splitVariableName(varName) { return ['-', '_'].map(function (i) { return varName.split(i); }).find(function (i) { return i.length > 1; }) // kebab-case / snake_case || varName.replace(/([a-z](?=[A-Z]))/g, '$1-').toLowerCase().split('-'); // PascalCase / camelCase } function scalableOrArrayFunction(fn) { return function () { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (Array.isArray(args[0])) { var head = args.shift(); return head.map(function (i) { return fn.apply(undefined, [i].concat(args)); }); } return fn.apply(undefined, args); }; } // code conventions var snakeCase = scalableOrArrayFunction(function (str) { return splitVariableName(str).join('_'); }); // snake_case var kebabCase = scalableOrArrayFunction(function (str) { return splitVariableName(str).join('-'); }); // kebab-case var camelCase = scalableOrArrayFunction(function (str) { return flower(pascalCase(str)); }); // camelCase var pascalCase = scalableOrArrayFunction(function (str) { return splitVariableName(str).map(function (i) { return fupper(i); }).join(''); }); // PascalCase var upperCamelCase = function upperCamelCase(str) { return pascalCase(str); }; var lowerCamelCase = function lowerCamelCase(str) { return camelCase(str); }; // string manipulation var flower = scalableOrArrayFunction(function (str) { return str.charAt(0).toLowerCase() + str.substr(1); }); // LOWER => lOWER var fupper = scalableOrArrayFunction(function (str) { return str.charAt(0).toUpperCase() + str.substr(1); }); // upper => Upper var prepend = scalableOrArrayFunction(function (str, toPrepend) { return toPrepend + str; }); // prepend('foo', '$') => $foo var append = scalableOrArrayFunction(function (str, toAppend) { return str + toAppend; }); // append('foo', '$') => foo$ var surround = scalableOrArrayFunction(function (str, toAdd) { return toAdd + str + toAdd; }); // surround('foo', '$') => $foo$ // collection manipulation var keys = function keys(dict) { return Object.keys(dict); }; // get object keys var values = function values(dict) { return Object.values(dict); }; // get object values var toArray = function toArray(dict, key) { // toArray({a: {b: 'c'}}, 'id') => [{id: 'a', b: 'c'}] var res = []; for (var i in dict) { res.push(_extends(_defineProperty({}, key, i), dict[i])); } return res; }; var findByColumn = function findByColumn(list, column, value) { return list.filter(function (i) { return i[column] === value; }); }; // filter a list of objects by the value of one of its columns var findOneByColumn = function findOneByColumn(list, column, value) { return findByColumn(list, column, value)[0]; }; var map = function map(collection, fn) { return collection.map(eval(fn)); }; // apply a map to the collection with a JS function var filter = function filter(collection, fn) { return collection.filter(eval(fn)); }; // apply a filter to the collection with a JS function // data format var jsonParse = function jsonParse(str) { return JSON.parse(str); }; var jsonDump = function jsonDump(dict) { return JSON.stringify(dict); }; var yamlParse = function yamlParse(str) { return _jsYaml2.default.safeLoad(str); }; var yamlDump = function yamlDump(dict) { return _jsYaml2.default.safeDump(dict, { indent: 4 }); }; // other var apply = function apply(val, fn) { return eval(fn)(val); }; // apply a JS function to the given value var filters = exports.filters = { snakecase: snakeCase, kebabcase: kebabCase, pascalcase: pascalCase, camelcase: camelCase, uppercamelcase: upperCamelCase, lowercamelcase: lowerCamelCase, flower: flower, fupper: fupper, prepend: prepend, append: append, surround: surround, keys: keys, values: values, toArray: toArray, findbycolumn: findByColumn, findonebycolumn: findOneByColumn, map: map, filter: filter, json: jsonDump, jsonparse: jsonParse, yaml: yamlDump, yamlparse: yamlParse, apply: apply };