├── .gitignore ├── README.md ├── index.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | test 2 | node_modules 3 | npm-debug.log 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Webpack dsv loader 2 | 3 | A Webpack plugin for loading dsv files (for example .csv). 4 | 5 | ## Installation 6 | 7 | Install via npm: 8 | 9 | ``` 10 | npm install --save-dev dsv-loader 11 | ``` 12 | 13 | ## Usage 14 | 15 | You can require dsv data like this: 16 | 17 | ``` javascript 18 | const data = require('dsv-loader!./data.csv'); 19 | ``` 20 | 21 | The loader will translate the ```data.csv``` file into a JSON Object. 22 | 23 | #### Usage with webpack.config 24 | 25 | To require dsv files like this: ```require('data.csv')``` , you can add the dsv-loader to your webpack config: 26 | 27 | ```javascript 28 | module: { 29 | rules: [{ 30 | test: /\.(c|d|t)sv$/, // load all .csv, .dsv, .tsv files with dsv-loader 31 | use: ['dsv-loader'] // or dsv-loader?delimiter=, 32 | }] 33 | } 34 | ``` 35 | 36 | 37 | ## Example 38 | data.csv 39 | 40 | | Hello | World | 41 | | ----- | ----- | 42 | | 42 | "fish"| 43 | | foo | bar | 44 | 45 | 46 | ``` javascript 47 | const data = require(data.csv) //[{"Hello": "42", "World": "fish"}, {"Hello": "foo", "World": "bar"}, columns: ["Hello", "World"]] 48 | ``` 49 | 50 | 51 | #### Options 52 | 53 | **delimiter** 54 | 55 | Tells the loader which delimiter is used to seperate the data. *Default: ','* 56 | 57 | Examples: 58 | 59 | ``` javascript 60 | const data = require('dsv-loader?delimiter=;!./data.csv'); //load data seperated by semicolon 61 | 62 | const data = require('dsv-loader?delimiter=x!./data.csv'); //load data seperated by an 'x' 63 | ``` 64 | 65 | **rows** 66 | 67 | Tells the loader if it should use the first row as columns row. *Default: Yes* 68 | 69 | Examples: 70 | 71 | ``` javascript 72 | const data = require('dsv-loader!./data.csv'); //[{"Hello": "42", "World": "fish"}, {"Hello": "foo", "World": "bar"}, columns: ["Hello", "World"]] 73 | 74 | const data = require('dsv-loader?rows!./data.csv'); //[{"Hello": "World"}, { "42": "fish"},{ "foo": "bar"} 75 | ``` 76 | 77 | 78 | ## Credits 79 | 80 | * Inspired by webpack's [json-loader](https://github.com/webpack/json-loader) 81 | * DSV parsing done with [dsv](https://github.com/mbostock/dsv) by Mike Bostock 82 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* 2 | dsv-loader: a dsv loader for webpack 3 | built using dsv by Mike Bostock 4 | */ 5 | 6 | const { getOptions } = require('loader-utils'); 7 | const { dsvFormat } = require('d3-dsv'); 8 | 9 | module.exports = function(text) { 10 | this.cacheable(); 11 | 12 | const options = getOptions(this) || {}, 13 | delimiter = options.delimiter || ',', 14 | dsv = dsvFormat(delimiter), 15 | rows = options.rows, 16 | res = rows ? dsv.parseRows(text) : dsv.parse(text); 17 | 18 | return `const res = ${JSON.stringify(res)}; 19 | res.columns = ${JSON.stringify(res.columns)}; 20 | module.exports = res;`; 21 | } 22 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dsv-loader", 3 | "version": "2.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "big.js": { 8 | "version": "3.2.0", 9 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", 10 | "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" 11 | }, 12 | "commander": { 13 | "version": "2.13.0", 14 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", 15 | "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" 16 | }, 17 | "d3-dsv": { 18 | "version": "1.0.10", 19 | "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.10.tgz", 20 | "integrity": "sha512-vqklfpxmtO2ZER3fq/B33R/BIz3A1PV0FaZRuFM8w6jLo7sUX1BZDh73fPlr0s327rzq4H6EN1q9U+eCBCSN8g==", 21 | "requires": { 22 | "commander": "2", 23 | "iconv-lite": "0.4", 24 | "rw": "1" 25 | } 26 | }, 27 | "emojis-list": { 28 | "version": "2.1.0", 29 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", 30 | "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" 31 | }, 32 | "iconv-lite": { 33 | "version": "0.4.24", 34 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 35 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 36 | "requires": { 37 | "safer-buffer": ">= 2.1.2 < 3" 38 | } 39 | }, 40 | "json5": { 41 | "version": "0.5.1", 42 | "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 43 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" 44 | }, 45 | "loader-utils": { 46 | "version": "1.1.0", 47 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 48 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", 49 | "requires": { 50 | "big.js": "^3.1.3", 51 | "emojis-list": "^2.0.0", 52 | "json5": "^0.5.0" 53 | } 54 | }, 55 | "rw": { 56 | "version": "1.3.3", 57 | "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", 58 | "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" 59 | }, 60 | "safer-buffer": { 61 | "version": "2.1.2", 62 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 63 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dsv-loader", 3 | "version": "2.0.0", 4 | "description": "A webpack module to load dsv (e.g. .csv or .tsv) files.", 5 | "keywords": [ 6 | "webpack", 7 | "loader", 8 | "dsv", 9 | "csv", 10 | "tsv" 11 | ], 12 | "author": { 13 | "name": "webkid.io", 14 | "email": "hi@webkid.io", 15 | "web": "http://twitter.com/webk1d" 16 | }, 17 | "bugs": { 18 | "url": "https://github.com/wbkd/dsv-loader/issues" 19 | }, 20 | "dependencies": { 21 | "d3-dsv": "^1.0.0", 22 | "loader-utils": "^1.1.0" 23 | }, 24 | "repository": { 25 | "type": "git", 26 | "url": "https://github.com/wbkd/dsv-loader.git" 27 | }, 28 | "contributors": [ 29 | { 30 | "name": "Moritz Klack", 31 | "web": "http://twitter.com/moklick" 32 | }, 33 | { 34 | "name": "Christopher Möller", 35 | "web": "http://twitter.com/chrtze" 36 | } 37 | ], 38 | "licenses": [ 39 | { 40 | "type": "MIT", 41 | "url": "http://opensource.org/licenses/mit-license.html" 42 | } 43 | ] 44 | } 45 | --------------------------------------------------------------------------------