6 Commits

Author SHA1 Message Date
ddb8c5c77d 1.0.6 2018-05-11 01:01:59 +02:00
bfa20f38bd fix(repo structure): update to latest standards 2018-05-11 01:01:58 +02:00
3f52942987 1.0.5 2018-05-11 00:54:37 +02:00
788572370a fix(ci): add npmAccessLevel 2018-05-11 00:54:37 +02:00
c683df3c35 1.0.4 2018-05-11 00:53:27 +02:00
0de7b75dca feat(parser): now handles comma and semicolon seperated csv strings 2018-05-11 00:53:27 +02:00
10 changed files with 48 additions and 61 deletions

View File

@@ -12,6 +12,9 @@ stages:
- release
- metadata
# ====================
# security stage
# ====================
mirror:
stage: security
script:
@@ -30,6 +33,9 @@ snyk:
- docker
- notpriv
# ====================
# test stage
# ====================
testLEGACY:
stage: test
script:
@@ -68,7 +74,6 @@ release:
stage: release
script:
- npmci node install stable
- npmci npm prepare
- npmci npm publish
only:
- tags

6
dist/index.d.ts vendored
View File

@@ -1,6 +0,0 @@
export declare class Csv {
static createCsvFromString(csvStringArg: string): Promise<Csv>;
csvString: string;
getHeaders(): void;
exportAsJson(): void;
}

28
dist/index.js vendored
View File

@@ -1,28 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
class Csv {
static createCsvFromString(csvStringArg) {
return __awaiter(this, void 0, void 0, function* () {
const csvInstance = new Csv();
csvInstance.csvString = csvStringArg;
return csvInstance;
});
}
getHeaders() {
}
exportAsJson() {
let json = {
[`key`]: 'hi'
};
}
}
exports.Csv = Csv;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRUE7SUFDUyxNQUFNLENBQU8sbUJBQW1CLENBQUUsWUFBb0I7O1lBQzNELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFDOUIsV0FBVyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7WUFDckMsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztLQUFBO0lBR00sVUFBVTtJQUVqQixDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLElBQUksR0FBRztZQUNULENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSTtTQUNkLENBQUM7SUFDSixDQUFDO0NBRUY7QUFsQkQsa0JBa0JDIn0=

View File

@@ -1,2 +0,0 @@
import * as csv from 'csv';
export { csv };

View File

@@ -1,5 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const csv = require("csv");
exports.csv = csv;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRjc3YucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0Y3N2LnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBMkI7QUFHekIsa0JBQUcifQ==

View File

@@ -3,6 +3,7 @@
"npmGlobalTools": [
"@gitzone/npmts",
"ts-node"
]
],
"npmAccessLevel": "public"
}
}

View File

@@ -1,13 +1,14 @@
{
"name": "@pushrocks/smartcsv",
"version": "1.0.3",
"description": "handle csv data",
"version": "1.0.6",
"description": "handle csv data | gitzone standard compliant",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"author": "Lossless GmbH",
"license": "MIT",
"scripts": {
"test": "(ts-node -O '{\"lib\": [ \"es2015\" ]}' test/test.ts)",
"build": "(npmts)",
"format": "(gitzone format)"
},
"devDependencies": {

View File

@@ -8,12 +8,12 @@ import * as smartfile from 'smartfile';
let fileString: string;
let testCsv: smartcsv.Csv;
tap.test('should read a file', async (tools) => {
tap.test('should read a file', async tools => {
fileString = smartfile.fs.toStringSync('./test/sample.csv');
});
tap.test('should create a valid csv', async () => {
testCsv = await smartcsv.Csv.createCsvFromString(fileString, {headers: true});
testCsv = await smartcsv.Csv.createCsvFromString(fileString, { headers: true });
const result = await testCsv.exportAsObject();
console.log(result);
});

View File

@@ -5,19 +5,43 @@ export interface ICsvConstructorOptions {
}
export class Csv {
public static async createCsvFromString (csvStringArg: string, options: ICsvConstructorOptions): Promise<Csv> {
public static async createCsvFromString(
csvStringArg: string,
options: ICsvConstructorOptions
): Promise<Csv> {
const csvInstance = new Csv();
csvInstance.csvString = csvStringArg;
csvInstance.determineKeyframe();
return csvInstance;
}
public csvString: string;
public headers: string[];
public keyFrame: string = null;
public options: ICsvConstructorOptions = {
headers: true
};
public serializeCsvString () {
public determineKeyframe() {
let commaLength = 0;
let semicolonLength = 0;
const commaRegexResult = this.csvString.match(/,/g);
const semicolonRegexResult = this.csvString.match(/;/g);
if (commaRegexResult) {
commaLength = commaRegexResult.length;
}
if (semicolonRegexResult) {
semicolonLength = semicolonRegexResult.length;
}
// tslint:disable-next-line:prefer-conditional-expression
if (commaLength < semicolonLength) {
this.keyFrame = ';';
} else {
this.keyFrame = ',';
}
}
public serializeCsvString() {
const rowArray = this.getRows();
const resultArray = [];
if (this.options.headers) {
@@ -25,34 +49,34 @@ export class Csv {
rowArray.shift();
}
for (const row of rowArray) {
resultArray.push(row.split(';'));
resultArray.push(row.split(this.keyFrame));
}
return resultArray;
}
public getRows () {
public getRows() {
return this.csvString.split('\n');
}
public getHeaders () {
public getHeaders() {
const rowArray = this.getRows();
if (this.options.headers) {
let headerRow = rowArray[ 0 ];
this.headers = headerRow.split(';');
let headerRow = rowArray[0];
this.headers = headerRow.split(this.keyFrame);
}
return this.headers;
}
public createDataObject (dataArray: string[]) {
public createDataObject(dataArray: string[]) {
const neededIterations = dataArray.length;
let resultJson: any = {};
for(let i = 0; i < neededIterations; i++) {
for (let i = 0; i < neededIterations; i++) {
resultJson[this.headers[i]] = dataArray[i];
}
return resultJson;
}
public async exportAsObject (): Promise<any> {
public async exportAsObject(): Promise<any> {
const serializedData = this.serializeCsvString();
const dataObjects = [];
for (const dataArray of serializedData) {
@@ -60,5 +84,4 @@ export class Csv {
}
return dataObjects;
}
}

View File

@@ -1,5 +1,3 @@
import * as smartq from 'smartq';
export {
smartq
};
export { smartq };