diff --git a/cli/node_modules/placeholder b/cli/node_modules/placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/examples/custom-get-set.js b/examples/custom-get-set.js index 17304184c..656aa4523 100644 --- a/examples/custom-get-set.js +++ b/examples/custom-get-set.js @@ -1,6 +1,7 @@ // this example demonstrates a way to keep field casing (as defined within .proto files) // while still having virtual getters and setters for the camel cased counterparts. +/*eslint-disable strict, no-console*/ var protobuf = require(".."); var proto = "syntax=\"proto3\";\ @@ -8,32 +9,33 @@ message MyMessage {\ string some_field = 1;\ }"; -var root = protobuf.parse(proto, { keepCase: true }).root; +var root = protobuf.parse(proto, { keepCase: true }).root; // or use Root#load -function camelCase(str) { +function toCamelCase(str) { return str.substring(0,1) + str.substring(1).replace(/_([a-z])(?=[a-z]|$)/g, function($0, $1) { return $1.toUpperCase(); }); } +function addAliasProperty(type, name, aliasName) { + if (aliasName !== name) + Object.defineProperty(type.ctor.prototype, aliasName, { + get: function() { return this[name]; }, + set: function(value) { this[name] = value; } + }); +} + // this function adds alternative getters and setters for the camel cased counterparts // to the runtime message's prototype (i.e. without having to register a custom class): function addVirtualCamelcaseFields(type) { type.fieldsArray.forEach(function(field) { - var altName = camelCase(field.name); - if (altName !== field.name) - Object.defineProperty(type.ctor.prototype, altName, { - get: function() { - return this[field.name]; - }, - set: function(value) { - this[field.name] = value; - } - }); + addAliasProperty(type, field.name, toCamelCase(field.name)); }); + type.oneofsArray.forEach(function(oneof) { + addAliasProperty(type, oneof.name, toCamelCase(oneof.name)); + }); + return type; } -var MyMessage = root.lookup("MyMessage"); - -addVirtualCamelcaseFields(MyMessage); +var MyMessage = addVirtualCamelcaseFields(root.lookup("MyMessage")); var myMessage = MyMessage.create({ some_field /* or someField */: "hello world"