twing
Version:
First-class Twig engine for Node.js
94 lines (93 loc) • 3.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.varDump = exports.isFloat = exports.isBoolean = void 0;
const is_traversable_1 = require("./is-traversable");
const iterator_to_hash_1 = require("./iterator-to-hash");
const count_1 = require("./count");
const isBoolean = (candidate) => {
return candidate === true || candidate === false;
};
exports.isBoolean = isBoolean;
const isFloat = (candidate) => {
return +candidate === candidate && (!isFinite(candidate) || !!(candidate % 1));
};
exports.isFloat = isFloat;
/**
* Adapted from https://github.com/kvz/locutus/blob/master/src/php/var/var_dump.js
*/
const varDump = (...args) => {
let padChar = ' ';
let padVal = 4;
let length = 0;
let getInnerVal = function _getInnerVal(val) {
let result = '';
if (val === null || typeof val === 'undefined') {
result = 'NULL';
}
else if (typeof val === 'boolean') {
result = 'bool(' + val + ')';
}
else if (typeof val === 'number') {
if (parseFloat('' + val) === parseInt('' + val, 10)) {
result = 'int(' + val + ')';
}
else {
result = 'float(' + val + ')';
}
}
else if (typeof val === 'function') {
result = 'object(Closure) (0) {}';
}
else {
result = 'string(' + val.length + ') "' + val + '"';
}
return result;
};
let formatArray = (obj, curDepth) => {
if ((0, is_traversable_1.isTraversable)(obj)) {
obj = (0, iterator_to_hash_1.iteratorToHash)(obj);
}
let baseCount = padVal * (curDepth);
let thickCount = padVal * (curDepth + 1);
let basePad = padChar.repeat(baseCount);
let thickPad = padChar.repeat(thickCount);
let str = '';
let val;
if (typeof obj === 'object' && obj !== null) {
length = (0, count_1.count)(obj);
str += 'array(' + length + ') {\n';
for (let key in obj) {
let objVal = obj[key];
if ((typeof objVal === 'object') && (objVal !== null) && !(objVal instanceof Date)) {
str += thickPad;
str += '[';
str += key;
str += '] =>\n';
str += thickPad;
str += formatArray(objVal, curDepth + 1);
}
else {
val = getInnerVal(objVal);
str += thickPad;
str += '[';
str += key;
str += '] =>\n';
str += thickPad;
str += val;
str += '\n';
}
}
str += basePad + '}\n';
}
else {
str = getInnerVal(obj) + '\n';
}
return str;
};
let output = [];
for (let arg of args) {
output.push(formatArray(arg, 0));
}
return output.join('');
};
exports.varDump = varDump;