Socket
Socket
Sign inDemoInstall

forest-express

Package Overview
Dependencies
Maintainers
5
Versions
374
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

forest-express - npm Package Compare versions

Comparing version 10.2.18 to 10.2.19

49

dist/routes/associations.js

@@ -83,9 +83,22 @@ "use strict";

}
function exportCSV(request, response, next) {
var _getContext3 = getContext(request),
params = _getContext3.params,
associationModel = _getContext3.associationModel;
var recordsExporter = new Implementation.ResourcesExporter(model, opts, params, associationModel, request.user);
return new CSVExporter(params, response, Implementation.getModelName(associationModel), recordsExporter).perform()["catch"](next);
function exportCSV(_x, _x2, _x3) {
return _exportCSV.apply(this, arguments);
}
function _exportCSV() {
_exportCSV = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(request, response, next) {
var _getContext3, params, associationModel, recordsExporter;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_getContext3 = getContext(request), params = _getContext3.params, associationModel = _getContext3.associationModel;
recordsExporter = new Implementation.ResourcesExporter(model, opts, params, associationModel, request.user);
return _context.abrupt("return", new CSVExporter(params, response, Implementation.getModelName(associationModel), recordsExporter).perform()["catch"](next));
case 3:
case "end":
return _context.stop();
}
}, _callee);
}));
return _exportCSV.apply(this, arguments);
}
function add(request, response, next) {

@@ -103,10 +116,10 @@ var params = _.extend(request.params, getAssociation(request));

}
function remove(_x, _x2, _x3) {
function remove(_x4, _x5, _x6) {
return _remove.apply(this, arguments);
}
function _remove() {
_remove = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(request, response, next) {
_remove = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(request, response, next) {
var _getContext4, params, associationModel, body, hasBodyAttributes, isLegacyRequest, getter, ids;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:

@@ -124,18 +137,18 @@ _getContext4 = getContext(request), params = _getContext4.params, associationModel = _getContext4.associationModel;

if (!(!hasBodyAttributes && isLegacyRequest)) {
_context.next = 7;
_context2.next = 7;
break;
}
body = request.body;
_context.next = 13;
_context2.next = 13;
break;
case 7:
if (!hasBodyAttributes) {
_context.next = 13;
_context2.next = 13;
break;
}
getter = new RecordsGetter(associationModel, request.user, request.query);
_context.next = 11;
_context2.next = 11;
return getter.getIdsFromRequest(request);
case 11:
ids = _context.sent;
ids = _context2.sent;
body = {

@@ -149,3 +162,3 @@ data: ids.map(function (id) {

case 13:
return _context.abrupt("return", new Implementation.HasManyDissociator(model, associationModel, opts, params, body).perform().then(function () {
return _context2.abrupt("return", new Implementation.HasManyDissociator(model, associationModel, opts, params, body).perform().then(function () {
response.status(204).send();

@@ -155,5 +168,5 @@ })["catch"](next));

case "end":
return _context.stop();
return _context2.stop();
}
}, _callee);
}, _callee2);
}));

@@ -160,0 +173,0 @@ return _remove.apply(this, arguments);

@@ -5,4 +5,4 @@ "use strict";

var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }

@@ -47,7 +47,21 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }

};
this.exportCSV = function (request, response, next) {
var params = request.query;
var recordsExporter = new Implementation.ResourcesExporter(model, lianaOptions, params, null, request.user);
return new CSVExporter(params, response, modelName, recordsExporter).perform()["catch"](next);
};
this.exportCSV = /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(request, response, next) {
var params, recordsExporter;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
params = request.query;
recordsExporter = new Implementation.ResourcesExporter(model, lianaOptions, params, null, request.user);
return _context.abrupt("return", new CSVExporter(params, response, modelName, recordsExporter).perform()["catch"](next));
case 3:
case "end":
return _context.stop();
}
}, _callee);
}));
return function (_x, _x2, _x3) {
return _ref2.apply(this, arguments);
};
}();
this.get = function (request, response, next) {

@@ -87,6 +101,6 @@ return new Implementation.ResourceGetter(model, _objectSpread(_objectSpread({}, request.query), {}, {

this.remove = /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(request, response, next) {
var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(request, response, next) {
var remover;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:

@@ -96,53 +110,53 @@ remover = new Implementation.ResourceRemover(model, _objectSpread(_objectSpread({}, request.query), {}, {

}), request.user);
_context.prev = 1;
_context.next = 4;
_context2.prev = 1;
_context2.next = 4;
return remover.perform();
case 4:
response.status(204).send();
_context.next = 10;
_context2.next = 10;
break;
case 7:
_context.prev = 7;
_context.t0 = _context["catch"](1);
next(_context.t0);
_context2.prev = 7;
_context2.t0 = _context2["catch"](1);
next(_context2.t0);
case 10:
case "end":
return _context.stop();
return _context2.stop();
}
}, _callee, null, [[1, 7]]);
}, _callee2, null, [[1, 7]]);
}));
return function (_x, _x2, _x3) {
return _ref2.apply(this, arguments);
return function (_x4, _x5, _x6) {
return _ref3.apply(this, arguments);
};
}();
this.removeMany = /*#__PURE__*/function () {
var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(request, response, next) {
var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(request, response, next) {
var getter, ids;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
getter = new RecordsGetter(model, request.user, request.query);
_context2.next = 3;
_context3.next = 3;
return getter.getIdsFromRequest(request);
case 3:
ids = _context2.sent;
_context2.prev = 4;
_context2.next = 7;
ids = _context3.sent;
_context3.prev = 4;
_context3.next = 7;
return new Implementation.ResourcesRemover(model, request.query, ids, request.user).perform();
case 7:
response.status(204).send();
_context2.next = 13;
_context3.next = 13;
break;
case 10:
_context2.prev = 10;
_context2.t0 = _context2["catch"](4);
next(_context2.t0);
_context3.prev = 10;
_context3.t0 = _context3["catch"](4);
next(_context3.t0);
case 13:
case "end":
return _context2.stop();
return _context3.stop();
}
}, _callee2, null, [[4, 10]]);
}, _callee3, null, [[4, 10]]);
}));
return function (_x4, _x5, _x6) {
return _ref3.apply(this, arguments);
return function (_x7, _x8, _x9) {
return _ref4.apply(this, arguments);
};

@@ -149,0 +163,0 @@ }();

"use strict";
var P = require('bluebird');
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var moment = require('moment');
var stringify = require('csv-stringify');
var _require = require('@forestadmin/context'),
inject = _require.inject;
// eslint-disable-next-line import/no-unresolved
var _require = require('csv-stringify/sync'),
stringify = _require.stringify;
var _require2 = require('@forestadmin/context'),
inject = _require2.inject;
var ParamsFieldsDeserializer = require('../deserializers/params-fields');

@@ -13,3 +17,3 @@ var SmartFieldsValuesInjector = require('./smart-fields-values-injector');

var CSV_OPTIONS = {
formatters: {
cast: {
date: function date(value) {

@@ -23,56 +27,79 @@ return moment(value).format();

configStore = _inject.configStore;
this.perform = function () {
var filename = "".concat(params.filename, ".csv");
response.setHeader('Content-Type', 'text/csv; charset=utf-8');
response.setHeader('Content-disposition', "attachment; filename=".concat(filename));
response.setHeader('Last-Modified', moment());
function getValueForAttribute(record, attribute) {
var value;
if (params.fields[attribute]) {
if (record[attribute]) {
if (params.fields[attribute] && record[attribute][params.fields[attribute]]) {
value = record[attribute][params.fields[attribute]];
} else {
// eslint-disable-next-line
value = record[attribute].id || record[attribute]._id;
}
}
} else {
value = record[attribute];
}
return value || '';
}
// NOTICE: From nginx doc: Setting this to "no" will allow unbuffered
// responses suitable for Comet and HTTP streaming applications.
response.setHeader('X-Accel-Buffering', 'no');
response.setHeader('Cache-Control', 'no-cache');
var CSVHeader = "".concat(params.header, "\n");
var CSVAttributes = params.fields[modelName].split(',');
response.write(CSVHeader);
var fieldsPerModel = new ParamsFieldsDeserializer(params.fields).perform();
return recordsExporter.perform(function (records) {
return P.map(records, function (record) {
return new SmartFieldsValuesInjector(record, modelName, fieldsPerModel).perform();
}).then(function (recordsWithSmartFieldsValues) {
return new P(function (resolve) {
if (configStore.Implementation.Flattener) {
recordsWithSmartFieldsValues = configStore.Implementation.Flattener.flattenRecordsForExport(modelName, recordsWithSmartFieldsValues);
}
var CSVLines = [];
recordsWithSmartFieldsValues.forEach(function (record) {
var CSVLine = [];
CSVAttributes.forEach(function (attribute) {
var value;
if (params.fields[attribute]) {
if (record[attribute]) {
if (params.fields[attribute] && record[attribute][params.fields[attribute]]) {
value = record[attribute][params.fields[attribute]];
} else {
// eslint-disable-next-line
value = record[attribute].id || record[attribute]._id;
}
// eslint-disable-next-line sonarjs/cognitive-complexity
this.perform = /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
var filename, CSVHeader, CSVAttributes, fieldsPerModel;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
filename = "".concat(params.filename, ".csv");
response.setHeader('Content-Type', 'text/csv; charset=utf-8');
response.setHeader('Content-disposition', "attachment; filename=".concat(filename));
response.setHeader('Last-Modified', moment());
// NOTICE: From nginx doc: Setting this to "no" will allow unbuffered
// responses suitable for Comet and HTTP streaming applications.
response.setHeader('X-Accel-Buffering', 'no');
response.setHeader('Cache-Control', 'no-cache');
CSVHeader = "".concat(params.header, "\n");
CSVAttributes = params.fields[modelName].split(',');
response.write(CSVHeader);
fieldsPerModel = new ParamsFieldsDeserializer(params.fields).perform();
_context2.next = 12;
return recordsExporter.perform( /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(records) {
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return Promise.all(
// eslint-disable-next-line max-len
records.map(function (record) {
return new SmartFieldsValuesInjector(record, modelName, fieldsPerModel).perform();
}));
case 2:
if (configStore.Implementation.Flattener) {
records = configStore.Implementation.Flattener.flattenRecordsForExport(modelName, records);
}
records.forEach(function (record) {
// eslint-disable-next-line max-len
response.write(stringify([CSVAttributes.map(function (attribute) {
return getValueForAttribute(record, attribute, params);
})], CSV_OPTIONS));
});
case 4:
case "end":
return _context.stop();
}
} else {
value = record[attribute];
}
CSVLine.push(value || '');
});
CSVLines.push(CSVLine);
});
stringify(CSVLines, CSV_OPTIONS, function (error, csv) {
response.write(csv);
resolve();
});
});
});
}).then(function () {
response.end();
});
};
}, _callee);
}));
return function (_x) {
return _ref2.apply(this, arguments);
};
}());
case 12:
response.end();
case 13:
case "end":
return _context2.stop();
}
}, _callee2);
}));
}
module.exports = CSVExporter;

@@ -7,3 +7,2 @@ "use strict";

var _ = require('lodash');
var P = require('bluebird');
var logger = require('./logger');

@@ -80,40 +79,53 @@ var Schemas = require('../generators/schemas');

}
this.perform = function () {
return P.each(schema.fields, function (field) {
var fieldWasRequested = isRequestedField(requestedField || modelName, field.field);
if (record && field.isVirtual && (field.get || field.value)) {
if (fieldsPerModel && !fieldWasRequested) {
return null;
}
return setSmartFieldValue(record, field, modelName);
// eslint-disable-next-line sonarjs/cognitive-complexity
function injectSmartFieldValue(field) {
var fieldWasRequested = isRequestedField(requestedField || modelName, field.field);
if (record && field.isVirtual && (field.get || field.value)) {
if (fieldsPerModel && !fieldWasRequested) {
return null;
}
if (!record[field.field] && _.isArray(field.type) && (field.relationship || field.isVirtual)) {
// Add empty arrays on relation fields so that JsonApiSerializer add the relevant
// `data.x.relationships` section in the response.
//
// The field must match the following condition
// - field is a real or a smart HasMany / BelongsToMany relation
// - field is NOT an 'embedded' relationship (@see mongoose)
return setSmartFieldValue(record, field, modelName);
}
if (!record[field.field] && _.isArray(field.type) && (field.relationship || field.isVirtual)) {
// Add empty arrays on relation fields so that JsonApiSerializer add the relevant
// `data.x.relationships` section in the response.
//
// The field must match the following condition
// - field is a real or a smart HasMany / BelongsToMany relation
// - field is NOT an 'embedded' relationship (@see mongoose)
record[field.field] = [];
} else if (field.reference && !_.isArray(field.type)) {
// NOTICE: Set Smart Fields values to "belongsTo" associated records.
var modelNameAssociation = getReferencedModelName(field);
var schemaAssociation = Schemas.schemas[modelNameAssociation];
if (schemaAssociation && !_.isArray(field.type)) {
return P.each(schemaAssociation.fields, function (fieldAssociation) {
if (record && record[field.field] && fieldAssociation.isVirtual && (fieldAssociation.get || fieldAssociation.value)) {
if (fieldsPerModel && !isRequestedField(field.field, fieldAssociation.field)) {
return null;
}
return setSmartFieldValue(record[field.field], fieldAssociation, modelNameAssociation);
record[field.field] = [];
} else if (field.reference && !_.isArray(field.type)) {
// NOTICE: Set Smart Fields values to "belongsTo" associated records.
var modelNameAssociation = getReferencedModelName(field);
var schemaAssociation = Schemas.schemas[modelNameAssociation];
if (schemaAssociation && !_.isArray(field.type)) {
return Promise.all(schemaAssociation.fields.map(function (fieldAssociation) {
if (record && record[field.field] && fieldAssociation.isVirtual && (fieldAssociation.get || fieldAssociation.value)) {
if (fieldsPerModel && !isRequestedField(field.field, fieldAssociation.field)) {
return null;
}
return null;
});
}
return setSmartFieldValue(record[field.field], fieldAssociation, modelNameAssociation);
}
return null;
}));
}
return null;
}).thenReturn(record);
};
}
return null;
}
this.perform = /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
return _context2.abrupt("return", Promise.all(schema.fields.map(function (field) {
return injectSmartFieldValue(field);
})));
case 1:
case "end":
return _context2.stop();
}
}, _callee2);
}));
}
module.exports = SmartFieldsValuesInjector;
{
"name": "forest-express",
"description": "Official package for all Forest Express Lianas",
"version": "10.2.18",
"version": "10.2.19",
"author": "Sandro Munda <sandro@munda.me>",

@@ -38,3 +38,3 @@ "contributors": [

"cors": "2.8.5",
"csv-stringify": "1.0.4",
"csv-stringify": "6.5.0",
"express": "^4.18.2",

@@ -41,0 +41,0 @@ "express-jwt": "8.4.1",

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with āš”ļø by Socket Inc