Compare commits

..

No commits in common. "be09bf9dd31672c22ddc263668d07a6e1f5f72b5" and "aecfdcec99eea24d62b2a551b09d6fbaa361f8e1" have entirely different histories.

4 changed files with 76 additions and 90 deletions

View File

@ -1,8 +1,3 @@
Unmaintained Mirror
===============
Please go to the real repo at <https://git.coolaj86.com/coolaj86/json2yaml.js>
json2yaml json2yaml
=== ===

0
cli.js Executable file → Normal file
View File

156
index.js
View File

@ -1,107 +1,99 @@
(function () { (function () {
"use strict"; "use strict";
var typeOf = require('remedial').typeOf, var typeOf = require('remedial').typeOf
maxText = 60, ;
wrap = require('wordwrap')(maxText);
function stringify(data) { function stringify(data) {
var handlers, indentLevel = ''; var handlers
, indentLevel = ''
;
handlers = { handlers = {
"undefined": function () { "undefined": function () {
// objects will not have `undefined` converted to `null` // objects will not have `undefined` converted to `null`
// as this may have unintended consequences // as this may have unintended consequences
// For arrays, however, this behavior seems appropriate // For arrays, however, this behavior seems appropriate
return 'null'; return 'null';
}, }
"null": function () { , "null": function () {
return 'null'; return 'null';
}, }
"number": function (x) { , "number": function (x) {
return x; return x;
}, }
"boolean": function (x) { , "boolean": function (x) {
return x ? 'true' : 'false'; return x ? 'true' : 'false';
}, }
"string": function (x) { , "string": function (x) {
var output = '|'; // to avoid the string "true" being confused with the
if (x.length <= maxText && x.indexOf('\n') === -1) { // the literal `true`, we always wrap strings in quotes
return JSON.stringify(x); return JSON.stringify(x);
} }
var text = wrap(x).split(/\\n|\n/); , "array": function (x) {
indentLevel = indentLevel.replace(/$/, ' '); var output = ''
text.forEach(function (y) { ;
output += '\n' + indentLevel + y;
}); if (0 === x.length) {
indentLevel = indentLevel.replace(/ /, ''); output += '[]';
return output;
}
return output; indentLevel = indentLevel.replace(/$/, ' ');
}, x.forEach(function (y) {
"date": function (x) { // TODO how should `undefined` be handled?
return x.toJSON(); var handler = handlers[typeOf(y)]
}, ;
"array": function (x) {
var output = '';
if (0 === x.length) { if (!handler) {
output += '[]'; throw new Error('what the crap: ' + typeOf(y));
}
output += '\n' + indentLevel + '- ' + handler(y);
});
indentLevel = indentLevel.replace(/ /, '');
return output; return output;
} }
, "object": function (x) {
var output = ''
;
indentLevel = indentLevel.replace(/$/, ' '); if (0 === Object.keys(x).length) {
x.forEach(function (y) { output += '{}';
// TODO how should `undefined` be handled? return output;
var handler = handlers[typeOf(y)];
if (!handler) {
throw new Error('what the crap: ' + typeOf(y));
} }
output += '\n' + indentLevel + '- ' + handler(y); indentLevel = indentLevel.replace(/$/, ' ');
Object.keys(x).forEach(function (k) {
var val = x[k]
, handler = handlers[typeOf(val)]
;
}); if ('undefined' === typeof val) {
indentLevel = indentLevel.replace(/ /, ''); // the user should do
// delete obj.key
// and not
// obj.key = undefined
// but we'll error on the side of caution
return;
}
return output; if (!handler) {
}, throw new Error('what the crap: ' + typeOf(val));
"object": function (x) { }
var output = '';
output += '\n' + indentLevel + k + ': ' + handler(val);
});
indentLevel = indentLevel.replace(/ /, '');
if (0 === Object.keys(x).length) {
output += '{}';
return output; return output;
} }
, "function": function () {
indentLevel = indentLevel.replace(/$/, ' '); // TODO this should throw or otherwise be ignored
Object.keys(x).forEach(function (k) { return '[object Function]';
var val = x[k], }
handler = handlers[typeOf(val)];
if ('undefined' === typeof val) {
// the user should do
// delete obj.key
// and not
// obj.key = undefined
// but we'll error on the side of caution
return;
}
if (!handler) {
throw new Error('what the crap: ' + typeOf(val));
}
output += '\n' + indentLevel + k + ': ' + handler(val);
});
indentLevel = indentLevel.replace(/ /, '');
return output;
},
"function": function () {
// TODO this should throw or otherwise be ignored
return '[object Function]';
}
}; };
return '---' + handlers[typeOf(data)](data) + '\n'; return '---' + handlers[typeOf(data)](data) + '\n';

View File

@ -9,7 +9,7 @@
"cli", "cli",
"util" "util"
], ],
"version": "1.2.0", "version": "1.1.0",
"license": "Apache-2.0", "license": "Apache-2.0",
"main": "index.js", "main": "index.js",
"repository": { "repository": {
@ -27,8 +27,7 @@
}, },
"test": "echo 'error no test'; exit 1", "test": "echo 'error no test'; exit 1",
"dependencies": { "dependencies": {
"remedial": "1.x", "remedial": "1.x"
"wordwrap": "^1.0.0"
}, },
"devDependencies": {}, "devDependencies": {},
"preferGlobal": true "preferGlobal": true