git-off

git off handles large files in git repos
git clone https://noulin.net/git/git-off.git
Log | Files | Refs | README

converter.js (2571B)


      1 var util = require('../core').util;
      2 var typeOf = require('./types').typeOf;
      3 var DynamoDBSet = require('./set');
      4 
      5 function convertInput(data) {
      6   if (typeOf(data) === 'Object') {
      7     var map = {M: {}};
      8     for (var key in data) {
      9       map['M'][key] = convertInput(data[key]);
     10     }
     11     return map;
     12   } else if (typeOf(data) === 'Array') {
     13     var list = {L: []};
     14     for (var i = 0; i < data.length; i++) {
     15       list['L'].push(convertInput(data[i]));
     16     }
     17     return list;
     18   } else if (typeOf(data) === 'Set') {
     19     return formatSet(data);
     20   } else if (typeOf(data) === 'String') {
     21     return { 'S': data };
     22   } else if (typeOf(data) === 'Number') {
     23     return { 'N': data.toString() };
     24   } else if (typeOf(data) === 'Binary') {
     25     return { 'B': data };
     26   } else if (typeOf(data) === 'Boolean') {
     27     return {'BOOL': data};
     28   } else if (typeOf(data) === 'null') {
     29     return {'NULL': true};
     30   }
     31 }
     32 
     33 function formatSet(data) {
     34   var map = {};
     35   switch (data.type) {
     36     case 'String': map['SS'] = data.values; break;
     37     case 'Binary': map['BS'] = data.values; break;
     38     case 'Number': map['NS'] = data.values.map(function (value) {
     39       return value.toString();
     40     });
     41   }
     42   return map;
     43 }
     44 
     45 function convertOutput(data) {
     46   var list, map, i;
     47   for (var type in data) {
     48     var values = data[type];
     49     if (type === 'M') {
     50       map = {};
     51       for (var key in values) {
     52         map[key] = convertOutput(values[key]);
     53       }
     54       return map;
     55     } else if (type === 'L') {
     56       list = [];
     57       for (i = 0; i < values.length; i++) {
     58         list.push(convertOutput(values[i]));
     59       }
     60       return list;
     61     } else if (type === 'SS') {
     62       list = [];
     63       for (i = 0; i < values.length; i++) {
     64         list.push(values[i] + '');
     65       }
     66       return new DynamoDBSet(list);
     67     } else if (type === 'NS') {
     68       list = [];
     69       for (i = 0; i < values.length; i++) {
     70         list.push(Number(values[i]));
     71       }
     72       return new DynamoDBSet(list);
     73     } else if (type === 'BS') {
     74       list = [];
     75       for (i = 0; i < values.length; i++) {
     76         list.push(new util.Buffer(values[i]));
     77       }
     78       return new DynamoDBSet(list);
     79     } else if (type === 'S') {
     80       return values + '';
     81     } else if (type === 'N') {
     82       return Number(values);
     83     } else if (type === 'B') {
     84       return new util.Buffer(values);
     85     } else if (type === 'BOOL') {
     86       return (values === 'true' || values === 'TRUE' || values === true);
     87     } else if (type === 'NULL') {
     88       return null;
     89     }
     90   }
     91 }
     92 
     93 module.exports = {
     94   input: convertInput,
     95   output: convertOutput
     96 };