From dc0269810b8f6e32b2362b8b53b4d6b35125d0cb Mon Sep 17 00:00:00 2001 From: Dominik Sigmund Date: Thu, 5 Nov 2020 08:57:12 +0100 Subject: [PATCH 1/4] Added PrettyPrint-Option for json --- README.md | 3 ++- bin/datamaker.bin.js | 11 +++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index de3b6b6..f8f1d71 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,9 @@ $ npm install --save datamaker - `--template`/`-t` - the path of the template file e.g `--template /path/to/template.txt` - `--format`/`-f` - the target file format (`none`, `csv`, `json` or `xml`). Default `none` e.g. `--format json` +- `--pretty`/`-p` - Pretty Print the output. only avaible for `json`. Default: `false` - `--iterations`/`-i` - the number of records to create. Default `1` e.g. `--iterations 5000` -- `--list`/`-l` - list the available tags +- `--list`/`-l` - list the available tags ## Generating CSV files diff --git a/bin/datamaker.bin.js b/bin/datamaker.bin.js index e9d898b..d174296 100755 --- a/bin/datamaker.bin.js +++ b/bin/datamaker.bin.js @@ -9,7 +9,8 @@ let rs = null // get command-line arguements var argv = require('yargs') .option('format', { alias: ['f', 'type'], describe: 'Format of output data: json,csv,none', demandOption: false, default: 'none' }) - .option('iterations', { alias: 'i', describe: 'Number of records to generater', demandOption: false, default: 1 }) + .option('pretty', { alias: 'p', boolean: true, describe: 'Pretty-Print JSON-Files', demandOption: false, default: false }) + .option('iterations', { alias: 'i', describe: 'Number of records to generate', demandOption: false, default: 1 }) .option('template', { alias: 't', describe: 'The path of the template file', demandOption: false }) .option('list', { alias: 'l', boolean: true, describe: 'List available tags', demandOption: false, default: false }) .help('help') @@ -51,7 +52,13 @@ rs.on('readable', () => { }).on('end', () => { // when the template has loaded, generate the data datagen.generate(template, argv.format, argv.iterations) - .on('data', (d) => { console.log(d) }) + .on('data', (d) => { + if (argv.format === 'json' && argv.pretty) { + console.log(JSON.stringify(JSON.parse(d), null, 2)) + } else { + console.log(d) + } + }) .on('end', (d) => { }) }).on('error', (e) => { die(e, 2) From d9e3e232af26d4af1d26420a05d1bcae654d29e1 Mon Sep 17 00:00:00 2001 From: Dominik Sigmund Date: Thu, 5 Nov 2020 08:57:21 +0100 Subject: [PATCH 2/4] 0.7.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed0d677..1f9baf5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "datamaker", - "version": "0.6.0", + "version": "0.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2d6c6af..e286842 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "datamaker", - "version": "0.6.0", + "version": "0.7.0", "description": "Sample data generator - command-line utility and library", "main": "index.js", "scripts": { From 98da6a64ccd3f512234f22342c064e6d70f0bf46 Mon Sep 17 00:00:00 2001 From: Dominik Sigmund Date: Thu, 5 Nov 2020 08:57:26 +0100 Subject: [PATCH 3/4] 0.8.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1f9baf5..0b2e4f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "datamaker", - "version": "0.7.0", + "version": "0.8.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index e286842..9d399bd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "datamaker", - "version": "0.7.0", + "version": "0.8.0", "description": "Sample data generator - command-line utility and library", "main": "index.js", "scripts": { From cfb0ed56a6ca06ebf4394c83f2aa912a6710a363 Mon Sep 17 00:00:00 2001 From: Dominik Sigmund Date: Thu, 5 Nov 2020 10:57:18 +0100 Subject: [PATCH 4/4] Added Save Code --- README.md | 4 ++++ bin/datamaker.bin.js | 23 +++++++++++++++++++++++ index.js | 1 - 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f8f1d71..155436f 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,10 @@ $ npm install --save datamaker - `--pretty`/`-p` - Pretty Print the output. only avaible for `json`. Default: `false` - `--iterations`/`-i` - the number of records to create. Default `1` e.g. `--iterations 5000` - `--list`/`-l` - list the available tags +- `--save`/`-s` - Save the Files to disk (JSON and XML only). Default: `false`` +- `--directory`/`-d` - Folder to write the files to. Defaults to '' +- `--name`/`-n` - Filename Template to save. `{i}` is a counter, with format `json` you may use `{json:PROPERTY}` to use a property as filename. Defaults to `output-{i}` + ## Generating CSV files diff --git a/bin/datamaker.bin.js b/bin/datamaker.bin.js index d174296..b7ad31c 100755 --- a/bin/datamaker.bin.js +++ b/bin/datamaker.bin.js @@ -1,6 +1,7 @@ #!/usr/bin/env node const fs = require('fs') +const path = require('path') const datagen = require('../index.js') let template = '' const piped = (!process.stdin.isTTY) @@ -13,6 +14,9 @@ var argv = require('yargs') .option('iterations', { alias: 'i', describe: 'Number of records to generate', demandOption: false, default: 1 }) .option('template', { alias: 't', describe: 'The path of the template file', demandOption: false }) .option('list', { alias: 'l', boolean: true, describe: 'List available tags', demandOption: false, default: false }) + .option('save', { alias: 's', boolean: true, describe: 'Save Files to Disk', demandOption: false, default: false }) + .option('directory', { alias: 'd', describe: 'Directory to Save Files to', demandOption: false, default: '' }) + .option('name', { alias: 'n', describe: 'Name of Files to Save', demandOption: false, default: 'output-{i}' }) .help('help') .argv @@ -51,6 +55,7 @@ rs.on('readable', () => { template = template.trim() }).on('end', () => { // when the template has loaded, generate the data + let i = 0 datagen.generate(template, argv.format, argv.iterations) .on('data', (d) => { if (argv.format === 'json' && argv.pretty) { @@ -58,6 +63,24 @@ rs.on('readable', () => { } else { console.log(d) } + if (argv.save && (argv.format === 'json' || argv.format === 'xml')) { + let filename = '' + filename = argv.name.replace(/{i}/g, i) + if (argv.format === 'json' && argv.name.includes('{json:')) { + const field = argv.name.split('{json:')[1].split('}')[0].trim() + const value = JSON.parse(d)[field] + filename = filename.replace(/{json:.*}/g, value) + } + filename += '.' + argv.format + filename = path.join(argv.directory, filename) + let data = d + if (argv.format === 'json') { + data = JSON.stringify(JSON.parse(d), null, 2) + } + fs.writeFileSync(filename, data) + console.log(filename + ' written') + } + i++ }) .on('end', (d) => { }) }).on('error', (e) => { diff --git a/index.js b/index.js index 91bde48..0052706 100644 --- a/index.js +++ b/index.js @@ -139,7 +139,6 @@ const generate = (str, format, iterations) => { const newStr = swap(str, tags, formatter) // emit the data to the caller ee.emit('data', newStr) - // TODO: here will be the saving to a file i++ } while (i < iterations) cache.clear()