react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / js-yaml / lib / js-yaml / type / int.js
81149 views'use strict';12var common = require('../common');3var Type = require('../type');45function isHexCode(c) {6return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||7((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||8((0x61/* a */ <= c) && (c <= 0x66/* f */));9}1011function isOctCode(c) {12return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));13}1415function isDecCode(c) {16return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));17}1819function resolveYamlInteger(data) {20if (null === data) {21return false;22}2324var max = data.length,25index = 0,26hasDigits = false,27ch;2829if (!max) { return false; }3031ch = data[index];3233// sign34if (ch === '-' || ch === '+') {35ch = data[++index];36}3738if (ch === '0') {39// 040if (index + 1 === max) { return true; }41ch = data[++index];4243// base 2, base 8, base 164445if (ch === 'b') {46// base 247index++;4849for (; index < max; index++) {50ch = data[index];51if (ch === '_') { continue; }52if (ch !== '0' && ch !== '1') {53return false;54}55hasDigits = true;56}57return hasDigits;58}596061if (ch === 'x') {62// base 1663index++;6465for (; index < max; index++) {66ch = data[index];67if (ch === '_') { continue; }68if (!isHexCode(data.charCodeAt(index))) {69return false;70}71hasDigits = true;72}73return hasDigits;74}7576// base 877for (; index < max; index++) {78ch = data[index];79if (ch === '_') { continue; }80if (!isOctCode(data.charCodeAt(index))) {81return false;82}83hasDigits = true;84}85return hasDigits;86}8788// base 10 (except 0) or base 608990for (; index < max; index++) {91ch = data[index];92if (ch === '_') { continue; }93if (ch === ':') { break; }94if (!isDecCode(data.charCodeAt(index))) {95return false;96}97hasDigits = true;98}99100if (!hasDigits) { return false; }101102// if !base60 - done;103if (ch !== ':') { return true; }104105// base60 almost not used, no needs to optimize106return /^(:[0-5]?[0-9])+$/.test(data.slice(index));107}108109function constructYamlInteger(data) {110var value = data, sign = 1, ch, base, digits = [];111112if (value.indexOf('_') !== -1) {113value = value.replace(/_/g, '');114}115116ch = value[0];117118if (ch === '-' || ch === '+') {119if (ch === '-') { sign = -1; }120value = value.slice(1);121ch = value[0];122}123124if ('0' === value) {125return 0;126}127128if (ch === '0') {129if (value[1] === 'b') {130return sign * parseInt(value.slice(2), 2);131}132if (value[1] === 'x') {133return sign * parseInt(value, 16);134}135return sign * parseInt(value, 8);136137}138139if (value.indexOf(':') !== -1) {140value.split(':').forEach(function (v) {141digits.unshift(parseInt(v, 10));142});143144value = 0;145base = 1;146147digits.forEach(function (d) {148value += (d * base);149base *= 60;150});151152return sign * value;153154}155156return sign * parseInt(value, 10);157}158159function isInteger(object) {160return ('[object Number]' === Object.prototype.toString.call(object)) &&161(0 === object % 1 && !common.isNegativeZero(object));162}163164module.exports = new Type('tag:yaml.org,2002:int', {165kind: 'scalar',166resolve: resolveYamlInteger,167construct: constructYamlInteger,168predicate: isInteger,169represent: {170binary: function (object) { return '0b' + object.toString(2); },171octal: function (object) { return '0' + object.toString(8); },172decimal: function (object) { return object.toString(10); },173hexadecimal: function (object) { return '0x' + object.toString(16).toUpperCase(); }174},175defaultStyle: 'decimal',176styleAliases: {177binary: [ 2, 'bin' ],178octal: [ 8, 'oct' ],179decimal: [ 10, 'dec' ],180hexadecimal: [ 16, 'hex' ]181}182});183184185