fix(bom markers): now handles bom markers correctly
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -15,8 +15,6 @@ node_modules/ | |||||||
|  |  | ||||||
| # builds | # builds | ||||||
| dist/ | dist/ | ||||||
| dist_web/ | dist_*/ | ||||||
| dist_serve/ |  | ||||||
| dist_ts_web/ |  | ||||||
|  |  | ||||||
| # custom | # custom | ||||||
| @@ -12,6 +12,9 @@ stages: | |||||||
|   - release |   - release | ||||||
|   - metadata |   - metadata | ||||||
|  |  | ||||||
|  | before_script: | ||||||
|  |   - npm install -g @shipzone/npmci | ||||||
|  |  | ||||||
| # ==================== | # ==================== | ||||||
| # security stage | # security stage | ||||||
| # ==================== | # ==================== | ||||||
| @@ -19,22 +22,36 @@ mirror: | |||||||
|   stage: security |   stage: security | ||||||
|   script: |   script: | ||||||
|     - npmci git mirror |     - npmci git mirror | ||||||
|  |   only: | ||||||
|  |     - tags | ||||||
|   tags: |   tags: | ||||||
|     - lossless |     - lossless | ||||||
|     - docker |     - docker | ||||||
|     - notpriv |     - notpriv | ||||||
|  |  | ||||||
| snyk: | auditProductionDependencies: | ||||||
|   image: registry.gitlab.com/hosttoday/ht-docker-node:snyk |   image: registry.gitlab.com/hosttoday/ht-docker-node:npmci | ||||||
|  |   stage: security | ||||||
|  |   script: | ||||||
|  |     - npmci npm prepare | ||||||
|  |     - npmci command npm install --production --ignore-scripts | ||||||
|  |     - npmci command npm config set registry https://registry.npmjs.org | ||||||
|  |     - npmci command npm audit --audit-level=high --only=prod --production | ||||||
|  |   tags: | ||||||
|  |     - docker | ||||||
|  |   allow_failure: true | ||||||
|  |  | ||||||
|  | auditDevDependencies: | ||||||
|  |   image: registry.gitlab.com/hosttoday/ht-docker-node:npmci | ||||||
|   stage: security |   stage: security | ||||||
|   script: |   script: | ||||||
|     - npmci npm prepare |     - npmci npm prepare | ||||||
|     - npmci command npm install --ignore-scripts |     - npmci command npm install --ignore-scripts | ||||||
|     - npmci command snyk test |     - npmci command npm config set registry https://registry.npmjs.org | ||||||
|  |     - npmci command npm audit --audit-level=high --only=dev | ||||||
|   tags: |   tags: | ||||||
|     - lossless |  | ||||||
|     - docker |     - docker | ||||||
|     - notpriv |   allow_failure: true | ||||||
|  |  | ||||||
| # ==================== | # ==================== | ||||||
| # test stage | # test stage | ||||||
| @@ -49,9 +66,7 @@ testStable: | |||||||
|     - npmci npm test |     - npmci npm test | ||||||
|   coverage: /\d+.?\d+?\%\s*coverage/ |   coverage: /\d+.?\d+?\%\s*coverage/ | ||||||
|   tags: |   tags: | ||||||
|     - lossless |  | ||||||
|     - docker |     - docker | ||||||
|     - priv |  | ||||||
|  |  | ||||||
| testBuild: | testBuild: | ||||||
|   stage: test |   stage: test | ||||||
| @@ -62,9 +77,7 @@ testBuild: | |||||||
|     - npmci command npm run build |     - npmci command npm run build | ||||||
|   coverage: /\d+.?\d+?\%\s*coverage/ |   coverage: /\d+.?\d+?\%\s*coverage/ | ||||||
|   tags: |   tags: | ||||||
|     - lossless |  | ||||||
|     - docker |     - docker | ||||||
|     - notpriv |  | ||||||
|  |  | ||||||
| release: | release: | ||||||
|   stage: release |   stage: release | ||||||
| @@ -84,6 +97,8 @@ release: | |||||||
| codequality: | codequality: | ||||||
|   stage: metadata |   stage: metadata | ||||||
|   allow_failure: true |   allow_failure: true | ||||||
|  |   only: | ||||||
|  |     - tags | ||||||
|   script: |   script: | ||||||
|     - npmci command npm install -g tslint typescript |     - npmci command npm install -g tslint typescript | ||||||
|     - npmci npm prepare |     - npmci npm prepare | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.snyk
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								.snyk
									
									
									
									
									
								
							| @@ -1,4 +0,0 @@ | |||||||
| # Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. |  | ||||||
| version: v1.12.0 |  | ||||||
| ignore: {} |  | ||||||
| patch: {} |  | ||||||
							
								
								
									
										11
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | { | ||||||
|  |   "version": "0.2.0", | ||||||
|  |   "configurations": [ | ||||||
|  |     { | ||||||
|  |       "command": "npm test", | ||||||
|  |       "name": "Run npm test", | ||||||
|  |       "request": "launch", | ||||||
|  |       "type": "node-terminal" | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | { | ||||||
|  |   "json.schemas": [ | ||||||
|  |     { | ||||||
|  |       "fileMatch": ["/npmextra.json"], | ||||||
|  |       "schema": { | ||||||
|  |         "type": "object", | ||||||
|  |         "properties": { | ||||||
|  |           "npmci": { | ||||||
|  |             "type": "object", | ||||||
|  |             "description": "settings for npmci" | ||||||
|  |           }, | ||||||
|  |           "gitzone": { | ||||||
|  |             "type": "object", | ||||||
|  |             "description": "settings for gitzone", | ||||||
|  |             "properties": { | ||||||
|  |               "projectType": { | ||||||
|  |                 "type": "string", | ||||||
|  |                 "enum": ["website", "element", "service", "npm", "wcc"] | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
| @@ -4,6 +4,7 @@ | |||||||
|     "npmAccessLevel": "public" |     "npmAccessLevel": "public" | ||||||
|   }, |   }, | ||||||
|   "gitzone": { |   "gitzone": { | ||||||
|  |     "projectType": "npm", | ||||||
|     "module": { |     "module": { | ||||||
|       "githost": "gitlab.com", |       "githost": "gitlab.com", | ||||||
|       "gitscope": "pushrocks", |       "gitscope": "pushrocks", | ||||||
|   | |||||||
							
								
								
									
										27394
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										27394
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										33
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								package.json
									
									
									
									
									
								
							| @@ -3,38 +3,41 @@ | |||||||
|   "version": "1.0.22", |   "version": "1.0.22", | ||||||
|   "private": false, |   "private": false, | ||||||
|   "description": "handle csv data | gitzone standard compliant", |   "description": "handle csv data | gitzone standard compliant", | ||||||
|   "main": "dist/index.js", |   "main": "dist_ts/index.js", | ||||||
|   "typings": "dist/index.d.ts", |   "typings": "dist_ts/index.d.ts", | ||||||
|   "author": "Lossless GmbH", |   "author": "Lossless GmbH", | ||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "test": "(tstest test/)", |     "test": "(tstest test/)", | ||||||
|     "build": "(tsbuild)", |     "build": "(tsbuild)" | ||||||
|     "format": "(gitzone format)" |  | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@gitzone/tsbuild": "^2.1.17", |     "@gitzone/tsbuild": "^2.1.28", | ||||||
|     "@gitzone/tsrun": "^1.2.8", |     "@gitzone/tsrun": "^1.2.18", | ||||||
|     "@gitzone/tstest": "^1.0.28", |     "@gitzone/tstest": "^1.0.60", | ||||||
|     "@pushrocks/smartfile": "^7.0.6", |     "@pushrocks/smartfile": "^9.0.5", | ||||||
|     "@pushrocks/tapbundle": "^3.2.0", |     "@pushrocks/tapbundle": "^3.2.15", | ||||||
|     "@types/node": "^12.12.17", |     "@types/node": "^17.0.7", | ||||||
|     "tslint": "^6.0.0-beta0", |     "tslint": "^6.1.3", | ||||||
|     "tslint-config-prettier": "^1.18.0" |     "tslint-config-prettier": "^1.18.0" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@pushrocks/smartpromise": "^3.0.6", |     "@pushrocks/smartpromise": "^3.1.6", | ||||||
|     "@pushrocks/smartstring": "^3.0.17" |     "@pushrocks/smartstring": "^3.0.24" | ||||||
|   }, |   }, | ||||||
|   "files": [ |   "files": [ | ||||||
|     "ts/**/*", |     "ts/**/*", | ||||||
|     "ts_web/**/*", |     "ts_web/**/*", | ||||||
|     "dist/**/*", |     "dist/**/*", | ||||||
|     "dist_web/**/*", |     "dist_*/**/*", | ||||||
|  |     "dist_ts/**/*", | ||||||
|     "dist_ts_web/**/*", |     "dist_ts_web/**/*", | ||||||
|     "assets/**/*", |     "assets/**/*", | ||||||
|     "cli.js", |     "cli.js", | ||||||
|     "npmextra.json", |     "npmextra.json", | ||||||
|     "readme.md" |     "readme.md" | ||||||
|  |   ], | ||||||
|  |   "browserslist": [ | ||||||
|  |     "last 1 chrome versions" | ||||||
|   ] |   ] | ||||||
| } | } | ||||||
							
								
								
									
										25
									
								
								readme.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								readme.md
									
									
									
									
									
								
							| @@ -8,16 +8,27 @@ handle csv data | gitzone standard compliant | |||||||
| * [docs (typedoc)](https://pushrocks.gitlab.io/smartcsv/) | * [docs (typedoc)](https://pushrocks.gitlab.io/smartcsv/) | ||||||
|  |  | ||||||
| ## Status for master | ## Status for master | ||||||
| [](https://gitlab.com/pushrocks/smartcsv/commits/master) |  | ||||||
| [](https://gitlab.com/pushrocks/smartcsv/commits/master) | Status Category | Status Badge | ||||||
| [](https://www.npmjs.com/package/@pushrocks/smartcsv) | -- | -- | ||||||
| [](https://snyk.io/test/npm/@pushrocks/smartcsv) | GitLab Pipelines | [](https://lossless.cloud) | ||||||
| [](https://nodejs.org/dist/latest-v10.x/docs/api/) | GitLab Pipline Test Coverage | [](https://lossless.cloud) | ||||||
| [](https://nodejs.org/dist/latest-v10.x/docs/api/) | npm | [](https://lossless.cloud) | ||||||
| [](https://prettier.io/) | Snyk | [](https://lossless.cloud) | ||||||
|  | TypeScript Support | [](https://lossless.cloud) | ||||||
|  | node Support | [](https://nodejs.org/dist/latest-v10.x/docs/api/) | ||||||
|  | Code Style | [](https://lossless.cloud) | ||||||
|  | PackagePhobia (total standalone install weight) | [](https://lossless.cloud) | ||||||
|  | PackagePhobia (package size on registry) | [](https://lossless.cloud) | ||||||
|  | BundlePhobia (total size when bundled) | [](https://lossless.cloud) | ||||||
|  | Platform support | [](https://lossless.cloud) [](https://lossless.cloud) | ||||||
|  |  | ||||||
| ## Usage | ## Usage | ||||||
|  |  | ||||||
|  | ## Contribution | ||||||
|  |  | ||||||
|  | We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :) | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Contribution | ## Contribution | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,14 +1,12 @@ | |||||||
| // tslint:disable-next-line:no-implicit-dependencies |  | ||||||
| import { expect, tap } from '@pushrocks/tapbundle'; | import { expect, tap } from '@pushrocks/tapbundle'; | ||||||
| import * as smartcsv from '../ts/index'; | import * as smartcsv from '../ts/index'; | ||||||
|  |  | ||||||
| // tslint:disable-next-line:no-implicit-dependencies |  | ||||||
| import * as smartfile from '@pushrocks/smartfile'; | import * as smartfile from '@pushrocks/smartfile'; | ||||||
|  |  | ||||||
| let fileString: string; | let fileString: string; | ||||||
| let testCsv: smartcsv.Csv; | 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'); |   fileString = smartfile.fs.toStringSync('./test/sample.csv'); | ||||||
| }); | }); | ||||||
|  |  | ||||||
| @@ -21,7 +19,7 @@ tap.test('should create a valid csv', async () => { | |||||||
| tap.test('should create a valid csv string', async () => { | tap.test('should create a valid csv string', async () => { | ||||||
|   const createdCsvString = await smartcsv.Csv.createCsvStringFromArray([ |   const createdCsvString = await smartcsv.Csv.createCsvStringFromArray([ | ||||||
|     { wow: 'hi', wow2: 'there' }, |     { wow: 'hi', wow2: 'there' }, | ||||||
|     { wow: 'really', wow3: 'yes' } |     { wow: 'really', wow3: 'yes' }, | ||||||
|   ]); |   ]); | ||||||
|   console.log(createdCsvString); |   console.log(createdCsvString); | ||||||
| }); | }); | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ import * as plugins from './smartcsv.plugins'; | |||||||
| export interface ICsvConstructorOptions { | export interface ICsvConstructorOptions { | ||||||
|   headers: boolean; |   headers: boolean; | ||||||
|   unquote?: boolean; |   unquote?: boolean; | ||||||
|  |   removeBomMarkers?: boolean; | ||||||
| } | } | ||||||
|  |  | ||||||
| export class Csv { | export class Csv { | ||||||
| @@ -59,16 +60,20 @@ export class Csv { | |||||||
|  |  | ||||||
|   public options: ICsvConstructorOptions = { |   public options: ICsvConstructorOptions = { | ||||||
|     headers: true, |     headers: true, | ||||||
|     unquote: true |     unquote: true, | ||||||
|  |     removeBomMarkers: true, | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   constructor(csvStringArg: string, optionsArg: ICsvConstructorOptions) { |   constructor(csvStringArg: string, optionsArg: ICsvConstructorOptions) { | ||||||
|     this.options = { |     this.options = { | ||||||
|       ...this.options, |       ...this.options, | ||||||
|       ...optionsArg |       ...optionsArg, | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     let csvStringToParse = csvStringArg; |     let csvStringToParse = csvStringArg; | ||||||
|  |     if (this.options.removeBomMarkers) { | ||||||
|  |       csvStringToParse = csvStringToParse.replace(/^\uFEFF/, ''); | ||||||
|  |     } | ||||||
|     if (this.options.unquote) { |     if (this.options.unquote) { | ||||||
|       csvStringToParse = csvStringToParse.replace( |       csvStringToParse = csvStringToParse.replace( | ||||||
|         /"(.*?)"/gi, |         /"(.*?)"/gi, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user