PHP 7.4.33
Preview: json2yaml Size: 4.95 KB
/var/www/receipt-app-backend-bitkit.dk/httpdocs/node_modules/.bin/json2yaml
#!/usr/bin/env node

/**
 * yaml2json cli program
 */
 
var YAML = require('../lib/Yaml.js');

var ArgumentParser = require('argparse').ArgumentParser;
var cli = new ArgumentParser({
    prog:           "json2yaml", 
    version:        require('../package.json').version,
    addHelp:        true
});

cli.addArgument(
    ['-d', '--depth'],
    {
        action: 'store',
        type:   'int', 
        help:   'Set minimum level of depth before generating inline YAML (default: 2).'
    }
);

cli.addArgument(
    ['-i', '--indentation'],
    {
        action: 'store',
        type:   'int', 
        help:   'Number of space characters used to indent code (default: 2).',
    }
);

cli.addArgument(
    ['-s', '--save'],
    {
        help:   'Save output inside YML file(s) with the same name.',
        action: 'storeTrue'
    }
);

cli.addArgument(
    ['-r', '--recursive'],
    {
        help:   'If the input is a directory, also find JSON files in sub-directories recursively.',
        action: 'storeTrue'
    }
);

cli.addArgument(
    ['-w', '--watch'],
    {
        help:   'Watch for changes.',
        action: 'storeTrue'
    }
);

cli.addArgument(['input'], {
    help:   'JSON file or directory containing JSON files or - to read JSON from stdin.'
});

try {
    var options = cli.parseArgs();
    var path = require('path');
    var fs   = require('fs');
    var glob = require('glob');
    
    var rootPath = process.cwd();
    var parsePath = function(input) {
        if (input == '-') return '-';
        var output;
        if (!(input != null)) {
            return rootPath;
        }
        output = path.normalize(input);
        if (output.length === 0) {
            return rootPath;
        }
        if (output.charAt(0) !== '/') {
            output = path.normalize(rootPath + '/./' + output);
        }
        if (output.length > 1 && output.charAt(output.length - 1) === '/') {
            return output.substr(0, output.length - 1);
        }
        return output;
    };

    // Find files
    var findFiles = function(input) {
        if (input != '-' && input != null) {
            var isDirectory = fs.statSync(input).isDirectory();
            var files = [];

            if (!isDirectory) {
                files.push(input);
            }
            else {
                if (options.recursive) {
                    files = files.concat(glob.sync(input+'/**/*.json'));
                }
                else {
                    files = files.concat(glob.sync(input+'/*.json'));
                }
            }
        
            return files;
        }
        return null;
    };

    // Convert to JSON
    var convertToYAML = function(input, inline, save, spaces, str) {
        var yaml;
        if (inline == null) inline = 2;
        if (spaces == null) spaces = 2;
        
        if (str == null) {
            str = ''+fs.readFileSync(input);
        }
        yaml = YAML.dump(JSON.parse(str), inline, spaces);
    
        if (!save || input == null) {
            // Ouput result
            process.stdout.write(yaml);
        }
        else {
            var output;
            if (input.substring(input.length-5) == '.json') {
                output = input.substr(0, input.length-5) + '.yaml';
            }
            else {
                output = input + '.yaml';
            }
        
            // Write file
            var file = fs.openSync(output, 'w+');
            fs.writeSync(file, yaml);
            fs.closeSync(file);
            process.stdout.write("saved "+output+"\n");
        }
    };

    var input = parsePath(options.input);
    var mtimes = [];

    var runCommand = function() {
        try {
            var files = findFiles(input);
            if (files != null) {
                var len = files.length;
                for (var i = 0; i < len; i++) {
                    var file = files[i];
                    var stat = fs.statSync(file);
                    var time = stat.mtime.getTime();
                    if (!stat.isDirectory()) {
                        if (!mtimes[file] || mtimes[file] < time) {
                            mtimes[file] = time;
                            convertToYAML(file, options.depth, options.save, options.indentation);
                        }
                    }
                }
            } else {
                // Read from STDIN
                var stdin = process.openStdin();
                var data = "";
                stdin.on('data', function(chunk) {
                    data += chunk;
                });
                stdin.on('end', function() {
                    convertToYAML(null, options.depth, options.save, options.indentation, data);
                });
            }
        } catch (e) {
            process.stderr.write((e.message ? e.message : e)+"\n");
        }
    };

    if (!options.watch) {
        runCommand();
    } else {
        runCommand();
        setInterval(runCommand, 1000);
    } 
} catch (e) {
    process.stderr.write((e.message ? e.message : e)+"\n");
}

Directory Contents

Dirs: 0 × Files: 48
Name Size Perms Modified Actions
60 B lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
2.82 KB lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
528 B lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
4.25 KB lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
72 B lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
131 B lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
4.83 KB lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
7.56 KB lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
2.63 KB lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
12.35 KB lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
4.14 KB lrwxr-xr-x 2026-05-06 08:23:44
Edit Download
72 B lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
126 B lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
324 B lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
70 B lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
2.66 KB lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
3.74 KB lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
4.95 KB lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
3.51 KB lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
1.17 KB lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
985 B lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
985 B lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
436 B lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
2.55 KB lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
644 B lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
793 B lrwxr-xr-x 2026-05-06 08:23:44
Edit Download
363 B lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
38.15 KB lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
1.50 KB lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
1.83 KB lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
4.61 KB lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
2.84 KB lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
2.84 KB lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
2.00 KB lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
57 B lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
25.88 KB lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
215 B lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
211 B lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
221 B lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
227 B lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
363 B lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
45 B lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
50 B lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
23.89 KB lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
912 B lrwxr-xr-x 2026-05-06 08:23:46
Edit Download
45 B lrwxr-xr-x 2026-05-06 08:23:45
Edit Download
5.47 KB lrwxr-xr-x 2026-05-06 08:23:47
Edit Download
6.12 KB lrwxr-xr-x 2026-05-06 08:23:44
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).