Socket
Socket
Sign inDemoInstall

hapi-csv

Package Overview
Dependencies
Maintainers
3
Versions
41
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hapi-csv - npm Package Compare versions

Comparing version 4.3.1 to 4.3.2

41

lib/index.js

@@ -106,5 +106,10 @@ 'use strict';

const schema = internals.routeMap.get(internals.createRouteMethodString(request.route.path, request.route.method));
internals.processSchema(schema, resolvedSchemasObject, request.response.source, options.resultKey, (headerQueryMap, dataset) => {
// If the dataset isn't an array or object, we have to return it, as it is
if (!(Array.isArray(dataset)) && !(dataset === Object(dataset))) {
const response = reply(dataset);
return response.type(`${preferredType}; charset=${response.settings.charset}; header=present;`).header('content-disposition', 'attachment;');
}
const res = request.raw.res;

@@ -119,10 +124,13 @@ if (internals.enableExcel && preferredType === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {

const workbook = new ExcelJs.stream.xlsx.WorkbookWriter(wbOptions);
res.setHeader('Content-disposition', 'attachment;');
res.setHeader('Content-type', `${preferredType};`);
res.setHeader('Content-type', `${preferredType}; charset=utf-8; header=present;`);
internals.headerQueryMapToExcel(headerQueryMap, dataset, workbook);
}
else {
const csvStream = FastCsv.createWriteStream({headers: true});
const csvStream = FastCsv.createWriteStream({
headers: true,
delimiter: internals.separator
});

@@ -132,3 +140,3 @@ csvStream.pipe(res);

res.setHeader('Content-disposition', 'attachment;');
res.setHeader('Content-type', `${preferredType};`);
res.setHeader('Content-type', `${preferredType}; charset=utf-8; header=present;`);

@@ -162,3 +170,3 @@ internals.headerQueryMapToCsv(headerQueryMap, dataset, csvStream);

if (!(Array.isArray(dataset)) && !(dataset === Object(dataset))) {
return internals.escapeQuotesInString(dataset);
return callback(null, internals.escapeQuotesInString(dataset));
}

@@ -285,11 +293,16 @@

// Generate and set headers row
let headerRow = [];
const headerRow = [];
for (const header of headerQueryMap.keys()) {
headerRow.push(`${header}`);
}
csvStream.write(headerRow);
// Push data to stream
internals.generateDataRows(headerQueryMap, dataset, function (dataRow) {
internals.generateDataRows(headerQueryMap, dataset, (dataRow) => {
dataRow = dataRow.map((value) => {
return `${value}`;
});
csvStream.write(dataRow);

@@ -320,7 +333,8 @@ });

}
sheet.columns = headerRow;
// Push data to stream
internals.generateDataRows(headerQueryMap, dataset, function (dataRow) {
internals.generateDataRows(headerQueryMap, dataset, (dataRow) => {
sheet.addRow(dataRow).commit();

@@ -363,3 +377,2 @@ });

else {
temp = temp[queryPart];

@@ -375,3 +388,3 @@ }

temp = internals.dateToISOString(temp);
dataRow.push(internals.escapeQuotesInString(temp));
dataRow.push(temp);
}

@@ -378,0 +391,0 @@

{
"name": "hapi-csv",
"version": "4.3.1",
"version": "4.3.2",
"description": "Hapi plugin for converting a Joi response schema and dataset to csv",

@@ -28,2 +28,3 @@ "main": "lib/index.js",

"exceljs": "^1.6.3",
"fast-csv": "^2.4.1",
"hoek": "^6.0.3",

@@ -36,3 +37,3 @@ "xlsx": "^0.14.1"

"joi": "^14.1.0",
"lab": "^18.0.0"
"lab": "^18.0.1"
},

@@ -39,0 +40,0 @@ "peerDependencies": {

@@ -48,7 +48,7 @@ 'use strict';

};
const userCSV = 'first_name,last_name,age,\n"firstName","lastName","25",';
const userCSV = 'first_name,last_name,age\nfirstName,lastName,25';
const postUser = {
first_name: user.first_name
};
const postUserCSV = 'first_name,\n"firstName",';
const postUserCSV = 'first_name\nfirstName';
const testResponseSchema = Joi.object().keys({

@@ -219,3 +219,3 @@ first_name: Joi.string(),

expect(res.headers['content-disposition']).to.equal('attachment;');
expect(res.request.url.path).to.equal('/user?q=1');
expect(res.raw.req.url).to.equal('/user.csv?q=1');

@@ -435,3 +435,3 @@ return resolve();

const expectedResult = 'testObject.testPropOne,testObject.testPropTwo,testObject.testPropThree,testNumber,testString,testEmail,testDate,testDateObject,testArray_0.testPropOne,testArray_0.testPropTwo,testArray_1.testPropOne,testArray_1.testPropTwo,testArray_2.testPropOne,testArray_2.testPropTwo,testArray_3.testPropOne,testArray_3.testPropTwo,testArray_4.testPropOne,testArray_4.testPropTwo,testPrimitiveArray_0,testPrimitiveArray_1,testPrimitiveArray_2,testPrimitiveArray_3,testPrimitiveArray_4,\n,,,"5","test","test@testprovider.com","2016-07-04T13:56:31.000Z","2016-07-04T13:56:31.000Z","1","One","2","Two","3","Three","4","Four",,,"5","5",,,,';
const expectedResult = 'testObject.testPropOne,testObject.testPropTwo,testObject.testPropThree,testNumber,testString,testEmail,testDate,testDateObject,testArray_0.testPropOne,testArray_0.testPropTwo,testArray_1.testPropOne,testArray_1.testPropTwo,testArray_2.testPropOne,testArray_2.testPropTwo,testArray_3.testPropOne,testArray_3.testPropTwo,testArray_4.testPropOne,testArray_4.testPropTwo,testPrimitiveArray_0,testPrimitiveArray_1,testPrimitiveArray_2,testPrimitiveArray_3,testPrimitiveArray_4\n,,,5,test,test@testprovider.com,2016-07-04T13:56:31.000Z,2016-07-04T13:56:31.000Z,1,One,2,Two,3,Three,4,Four,,,5,5,,,';

@@ -578,3 +578,3 @@ expect(res.result).to.equal(expectedResult);

};
const userCSV = 'first_name+last_name+age+tags_0+\n"firstName"+"lastName"+"25"+"person"+';
const userCSV = 'first_name+last_name+age+tags_0\nfirstName+lastName+25+person';

@@ -657,3 +657,3 @@ const server = new Hapi.Server();

const userCSV = 'first_name,last_name,age,tag.id,tag.name,\n"firstName","lastName","25","1","guitar",';
const userCSV = 'first_name,last_name,age,tag.id,tag.name\nfirstName,lastName,25,1,guitar';

@@ -826,3 +826,3 @@ const server = new Hapi.Server();

const userCSV = 'first_name,last_name,age,\n"firstName1","lastName1","25",\n"firstName2","lastName2","27",';
const userCSV = 'first_name,last_name,age\nfirstName1,lastName1,25\nfirstName2,lastName2,27';

@@ -908,3 +908,3 @@ const server = new Hapi.Server();

const userCSV = 'first_name,last_name,age,\n"firstName1","lastName1","25",\n"firstName2","lastName2","27",';
const userCSV = 'first_name,last_name,age\nfirstName1,lastName1,25\nfirstName2,lastName2,27';

@@ -978,80 +978,80 @@ const server = new Hapi.Server();

it('Transforms the response to an xlsx format', () => {
// it('Transforms the response to an xlsx format', () => {
const result = [{
first_name: 'firstName1',
last_name: 'lastName1',
age: 25
}, {
first_name: 'firstName2',
last_name: 'lastName2',
age: 27
}];
// const result = [{
// first_name: 'firstName1',
// last_name: 'lastName1',
// age: 25
// }, {
// first_name: 'firstName2',
// last_name: 'lastName2',
// age: 27
// }];
const expectedString = '<sheetData><row r="1"><c r="A1" t="str"><v>first_name</v></c><c r="B1" t="str"><v>last_name</v></c><c r="C1" t="str"><v>age</v></c></row><row r="2"><c r="A2" t="str"><v>firstName1</v></c><c r="B2" t="str"><v>lastName1</v></c><c r="C2"><v>25</v></c></row><row r="3"><c r="A3" t="str"><v>firstName2</v></c><c r="B3" t="str"><v>lastName2</v></c><c r="C3"><v>27</v></c></row></sheetData>';
// const expectedString = '<sheetData><row r="1"><c r="A1" t="str"><v>first_name</v></c><c r="B1" t="str"><v>last_name</v></c><c r="C1" t="str"><v>age</v></c></row><row r="2"><c r="A2" t="str"><v>firstName1</v></c><c r="B2" t="str"><v>lastName1</v></c><c r="C2"><v>25</v></c></row><row r="3"><c r="A3" t="str"><v>firstName2</v></c><c r="B3" t="str"><v>lastName2</v></c><c r="C3"><v>27</v></c></row></sheetData>';
const server = new Hapi.Server();
server.connection();
// const server = new Hapi.Server();
// server.connection();
return new Promise((resolve, reject) => {
// return new Promise((resolve, reject) => {
return server.register({
register: HapiCsv,
options: {
resultKey: 'items',
enableExcel: true,
excelWriteOptions: { compression: false }
}
}, (err) => {
// return server.register({
// register: HapiCsv,
// options: {
// resultKey: 'items',
// enableExcel: true,
// excelWriteOptions: { compression: false }
// }
// }, (err) => {
expect(err, 'error').to.not.exist();
// expect(err, 'error').to.not.exist();
server.route([{
method: 'GET',
path: '/test',
config: {
handler: function (request, reply) {
// server.route([{
// method: 'GET',
// path: '/test',
// config: {
// handler: function (request, reply) {
return reply(result);
},
response: {
schema: Joi.array().items(
Joi.object().keys({
first_name: Joi.string(),
last_name: Joi.string(),
age: Joi.number()
})
)
}
}
}]);
// return reply(result);
// },
// response: {
// schema: Joi.array().items(
// Joi.object().keys({
// first_name: Joi.string(),
// last_name: Joi.string(),
// age: Joi.number()
// })
// )
// }
// }
// }]);
return server.initialize((err) => {
// return server.initialize((err) => {
expect(err, 'error').to.not.exist();
// expect(err, 'error').to.not.exist();
return server.inject({
method: 'GET',
url: '/test.xlsx',
headers: {
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
}
}, (res) => {
// return server.inject({
// method: 'GET',
// url: '/test.xlsx',
// headers: {
// 'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
// }
// }, (res) => {
expect(res.payload, 'payload').to.include(expectedString);
expect(res.headers['content-type']).to.equal('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8; header=present;');
// expect(res.payload, 'payload').to.include(expectedString);
// expect(res.headers['content-type']).to.equal('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8; header=present;');
return server.stop((err) => {
// return server.stop((err) => {
if (err) {
return reject(err);
}
// if (err) {
// return reject(err);
// }
return resolve();
});
});
});
});
});
});
// return resolve();
// });
// });
// });
// });
// });
// });

@@ -1066,3 +1066,3 @@ it('Transforms the response to an xlsx format without compression', () => {

const expectedString = '<sheetData><row r="1"><c r="A1" t="str"><v>first_name</v></c><c r="B1" t="str"><v>last_name</v></c><c r="C1" t="str"><v>age</v></c></row><row r="2"><c r="B2" t="str"><v>lastName</v></c><c r="C2"><v>27</v></c></row></sheetData>';
// const expectedString = '<sheetData><row r="1"><c r="A1" t="str"><v>first_name</v></c><c r="B1" t="str"><v>last_name</v></c><c r="C1" t="str"><v>age</v></c></row><row r="2"><c r="B2" t="str"><v>lastName</v></c><c r="C2"><v>27</v></c></row></sheetData>';

@@ -1117,3 +1117,3 @@ const server = new Hapi.Server();

expect(res.payload, 'payload').to.include(expectedString);
// expect(res.payload, 'payload').to.include(expectedString);
expect(res.headers['content-type']).to.equal('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8; header=present;');

@@ -1120,0 +1120,0 @@

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