git-off

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

query_param_serializer.js (2314B)


      1 var util = require('../util');
      2 
      3 function QueryParamSerializer() {
      4 }
      5 
      6 QueryParamSerializer.prototype.serialize = function(params, shape, fn) {
      7   serializeStructure('', params, shape, fn);
      8 };
      9 
     10 function ucfirst(shape) {
     11   if (shape.isQueryName || shape.api.protocol !== 'ec2') {
     12     return shape.name;
     13   } else {
     14     return shape.name[0].toUpperCase() + shape.name.substr(1);
     15   }
     16 }
     17 
     18 function serializeStructure(prefix, struct, rules, fn) {
     19   util.each(rules.members, function(name, member) {
     20     var value = struct[name];
     21     if (value === null || value === undefined) return;
     22 
     23     var memberName = ucfirst(member);
     24     memberName = prefix ? prefix + '.' + memberName : memberName;
     25     serializeMember(memberName, value, member, fn);
     26   });
     27 }
     28 
     29 function serializeMap(name, map, rules, fn) {
     30   var i = 1;
     31   util.each(map, function (key, value) {
     32     var prefix = rules.flattened ? '.' : '.entry.';
     33     var position = prefix + (i++) + '.';
     34     var keyName = position + (rules.key.name || 'key');
     35     var valueName = position + (rules.value.name || 'value');
     36     serializeMember(name + keyName, key, rules.key, fn);
     37     serializeMember(name + valueName, value, rules.value, fn);
     38   });
     39 }
     40 
     41 function serializeList(name, list, rules, fn) {
     42   var memberRules = rules.member || {};
     43 
     44   if (list.length === 0) {
     45     fn.call(this, name, null);
     46     return;
     47   }
     48 
     49   util.arrayEach(list, function (v, n) {
     50     var suffix = '.' + (n + 1);
     51     if (rules.api.protocol === 'ec2') {
     52       // Do nothing for EC2
     53       suffix = suffix + ''; // make linter happy
     54     } else if (rules.flattened) {
     55       if (memberRules.name) {
     56         var parts = name.split('.');
     57         parts.pop();
     58         parts.push(ucfirst(memberRules));
     59         name = parts.join('.');
     60       }
     61     } else {
     62       suffix = '.member' + suffix;
     63     }
     64     serializeMember(name + suffix, v, memberRules, fn);
     65   });
     66 }
     67 
     68 function serializeMember(name, value, rules, fn) {
     69   if (value === null || value === undefined) return;
     70   if (rules.type === 'structure') {
     71     serializeStructure(name, value, rules, fn);
     72   } else if (rules.type === 'list') {
     73     serializeList(name, value, rules, fn);
     74   } else if (rules.type === 'map') {
     75     serializeMap(name, value, rules, fn);
     76   } else {
     77     fn(name, rules.toWireFormat(value).toString());
     78   }
     79 }
     80 
     81 module.exports = QueryParamSerializer;