UNPKG

@actonate/mirkwood

Version:

GraphQL based Rapid Server-side Development framework

160 lines (124 loc) 4.45 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); 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 _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _graphql = require('graphql'); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _mkdirp = require('mkdirp'); var _mkdirp2 = _interopRequireDefault(_mkdirp); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _fastCsv = require('fast-csv'); var _fastCsv2 = _interopRequireDefault(_fastCsv); var _lodash = require('lodash'); var _types = require('../../lib/types'); var _types2 = _interopRequireDefault(_types); var _resolver = require('../../lib/resolver'); var _resolver2 = _interopRequireDefault(_resolver); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var ExportUtility = function () { function ExportUtility() { _classCallCheck(this, ExportUtility); this.resolvers = { csv: this.csvResolver, pdf: this.pdfResolver }; } _createClass(ExportUtility, [{ key: 'csvResolver', value: function csvResolver(resolverName, type, model, inputSchema) { var args = inputSchema.args; args = _extends({ dir: { type: _types2.default.String, defaultValue: 'tmp' }, filename: { type: _types2.default.String, required: true }, data: { type: _types2.default.List(type), required: true }, headers: { type: _types2.default.Boolean, defaultValue: true } }, args); var argsObjects = _types2.default.generateArgs(args, inputSchema.name); return { type: type || _types2.default.Boolean, args: argsObjects, resolve: new _resolver2.default(resolverName, function (_, args, ctx) { var dir = args.dir; var filepath = _path2.default.resolve(args.dir, args.filename); var data = args.data; return new Promise(function (resolve, reject) { (0, _mkdirp2.default)(args.dir, { mode: '0750' }, function (err) { if (err) { reject(false); return; } var csvStream = _fastCsv2.default.createWriteStream({ headers: args.headers }); var ws = _fs2.default.createWriteStream(filepath); ws.on('error', function () { reject(false); }); ws.on('finish', function () { resolve(true); }); if (!data.length > 0) { csvStream.end(); } // write the csv csvStream.pipe(ws); csvStream.write((0, _lodash.keys)(data[0])); // iterate (0, _lodash.map)(data, function (iter) { csvStream.write((0, _lodash.values)(iter)); }); csvStream.end(); }); }); }) }; } }, { key: 'pdfResolver', value: function pdfResolver(resolverName, type, model, inputSchema) {} }, { key: 'mutations', value: function mutations(type, inputType, model) { var schema = model.schema; var modelName = schema.name; return new _graphql.GraphQLObjectType({ name: [modelName, 'Export_Mutation'].join(''), fields: { csv: this.csvResolver('export.csv', _types2.default.Boolean, model, { args: { data: { type: _types2.default.List(inputType), required: true } } }) // pdf: this.pdfResolver('export.pdf', Types.Boolean, model, { // args: {} // }) } }); } }, { key: 'queries', value: function queries(type, inputType, model) { return false; } }]); return ExportUtility; }(); exports.default = ExportUtility;