diff --git a/cli/targets/static.js b/cli/targets/static.js index 81c9f7016..869979ba1 100644 --- a/cli/targets/static.js +++ b/cli/targets/static.js @@ -145,21 +145,21 @@ function buildNamespace(ref, ns) { function beautify(code) { return UglifyJS.minify(code - .replace(/\br\b/g, "reader") - .replace(/\bw\b/g, "writer") - .replace(/\bm\b/g, "message") - .replace(/\bt\b/g, "tag") - .replace(/\bl\b/g, "len") - .replace(/\bc\b/g, "end") - .replace(/\bc2\b/g, "end2") - .replace(/\bk\b/g, "key") - .replace(/\bks\b/g, "keys") - .replace(/\bks2\b/g, "keys2") - .replace(/\be\b/g, "err") - .replace(/\bf\b/g, "impl") - .replace(/\bo\b/g, "options") - .replace(/\bd\b/g, "object") - .replace(/\bn\b/g, "long"), + .replace(/\b(?!\\)r\b/g, "reader") + .replace(/\b(?!\\)w\b/g, "writer") + .replace(/\b(?!\\)m\b/g, "message") + .replace(/\b(?!\\)t\b/g, "tag") + .replace(/\b(?!\\)l\b/g, "len") + .replace(/\b(?!\\)c\b/g, "end") + .replace(/\b(?!\\)c2\b/g, "end2") + .replace(/\b(?!\\)k\b/g, "key") + .replace(/\b(?!\\)ks\b/g, "keys") + .replace(/\b(?!\\)ks2\b/g, "keys2") + .replace(/\b(?!\\)e\b/g, "err") + .replace(/\b(?!\\)f\b/g, "impl") + .replace(/\b(?!\\)o\b/g, "options") + .replace(/\b(?!\\)d\b/g, "object") + .replace(/\b(?!\\)n\b/g, "long"), { fromString: true, compress: false, diff --git a/index.d.ts b/index.d.ts index 5eb71a497..6a4ceb617 100644 --- a/index.d.ts +++ b/index.d.ts @@ -117,6 +117,27 @@ export class Class { */ export function common(name: string, json: { [k: string]: any }): void; +/** + * Runtime message from/to plain object converters. + * @namespace + */ +export namespace converter { + + /** + * Generates a plain object to runtime message converter specific to the specified message type. + * @param {Type} mtype Message type + * @returns {Codegen} Codegen instance + */ + function fromObject(mtype: Type): Codegen; + + /** + * Generates a runtime message to plain object converter specific to the specified message type. + * @param {Type} mtype Message type + * @returns {Codegen} Codegen instance + */ + function toObject(mtype: Type): Codegen; +} + /** * Generates a decoder specific to the specified message type. * @param {Type} mtype Message type diff --git a/src/common.js b/src/common.js index e08f21b5b..8d9e31b8b 100644 --- a/src/common.js +++ b/src/common.js @@ -1,5 +1,4 @@ "use strict"; - module.exports = common; /** diff --git a/src/converter.js b/src/converter.js index bc618425a..215218a28 100644 --- a/src/converter.js +++ b/src/converter.js @@ -1,4 +1,8 @@ "use strict"; +/** + * Runtime message from/to plain object converters. + * @namespace + */ var converter = exports; var Enum = require("./enum"), @@ -76,6 +80,11 @@ function genConvertValue_fromObject(gen, field, fieldIndex, prop) { /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */ } +/** + * Generates a plain object to runtime message converter specific to the specified message type. + * @param {Type} mtype Message type + * @returns {Codegen} Codegen instance + */ converter.fromObject = function fromObject(mtype) { /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */ var fields = mtype.fieldsArray; @@ -152,6 +161,11 @@ function genConvertValue_toObject(gen, field, fieldIndex, prop) { /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */ } +/** + * Generates a runtime message to plain object converter specific to the specified message type. + * @param {Type} mtype Message type + * @returns {Codegen} Codegen instance + */ converter.toObject = function toObject(mtype) { /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */ var fields = mtype.fieldsArray; diff --git a/tests/data/test.js b/tests/data/test.js index 98debadad..3d9ba12d5 100644 --- a/tests/data/test.js +++ b/tests/data/test.js @@ -6353,7 +6353,7 @@ $root.jspb = (function() { } var key = Object.keys(message.mapInt32String); for (var i = 0; i < key.length; ++i) { - if (!/^-?(?:0|[1-9]\object*)$/.test(key[i])) { + if (!/^-?(?:0|[1-9][0-9]*)$/.test(key[i])) { return "jspb.test.TestMapFieldsNoBinary.mapInt32String: integer key{key:int32} expected"; } if (!util.isString(message.mapInt32String[key[i]])) { @@ -6367,7 +6367,7 @@ $root.jspb = (function() { } var key = Object.keys(message.mapInt64String); for (var i = 0; i < key.length; ++i) { - if (!/^(?:[\x00-\xff]{8}|-?(?:0|[1-9]\object*))$/.test(key[i])) { + if (!/^(?:[\x00-\xff]{8}|-?(?:0|[1-9][0-9]*))$/.test(key[i])) { return "jspb.test.TestMapFieldsNoBinary.mapInt64String: integer|Long key{key:int64} expected"; } if (!util.isString(message.mapInt64String[key[i]])) {