From 0636568859f04d3c4fbfced4a40c7d4e096de477 Mon Sep 17 00:00:00 2001 From: zhl Date: Thu, 22 Oct 2020 15:52:53 +0800 Subject: [PATCH] project firt import --- .gitignore | 3 + app/main.js | 52 + app/package.json | 5 + client/PBMessageUtils.ts | 379 ++ copy.bat | 5 + package.json | 15 + proto/as3options.proto | 12 + proto/external-common.proto | 19 + proto/external.proto | 62 + proto/google/protobuf/descriptor.proto | 779 +++ proto/java/com/test/lalala/Msg.java | 571 ++ proto/msg.proto | 8 + proto/protoc.exe | Bin 0 -> 1766414 bytes server/PBMessageUtils.ts | 387 ++ src/CookieForPath.ts | 45 + src/Extend.ts | 204 + src/FsExtra.ts | 53 + src/PBMsgDictTemplate.ts | 63 + src/ServiceNameTemplate.ts | 55 + src/app2.ts | 856 +++ src/protobuf.js | 5361 +++++++++++++++++ test/client/src/PBMsgDict.ts | 16 + test/client/src/ServiceName.ts | 3 + .../src/chuanqi/login/LoginCreate_C2S_Msg.ts | 36 + .../src/chuanqi/login/LoginCreate_S2C_Msg.ts | 20 + .../src/chuanqi/login/LoginGetList_C2S_Msg.ts | 28 + .../src/chuanqi/login/LoginGetList_S2C_Msg.ts | 24 + .../chuanqi/login/LoginRoleKicked_S2C_Msg.ts | 16 + .../src/chuanqi/login/LoginRole_C2S_Msg.ts | 16 + .../src/chuanqi/login/LoginRole_S2C_Msg.ts | 16 + test/client/src/chuanqi/login/LoginService.ts | 87 + .../chuanqi/map/msgs/ChangeStage_C2S_Msg.ts | 16 + .../chuanqi/map/msgs/ChangeStage_S2C_Msg.ts | 36 + .../client/src/chuanqi/map/msgs/MapService.ts | 73 + test/client/src/chuanqi/map/msgs/Move_Msg.ts | 36 + .../src/chuanqi/map/msgs/Teleport_Msg.ts | 24 + test/client/src/code/service/LoginService.ts | 81 + .../src/code/service/RoleCreate_C2S_Msg.ts | 32 + .../src/code/service/RoleCreate_S2C_Msg.ts | 20 + .../src/code/service/RoleGetList_C2S_Msg.ts | 20 + .../src/code/service/RoleGetList_S2C_Msg.ts | 20 + .../src/code/service/RoleLogin_S2C_Msg.ts | 0 tsconfig.json | 17 + typings/browser.d.ts | 43 + typings/browser/ambient/node/index.d.ts | 2346 ++++++++ typings/browser/ambient/protobufjs/index.d.ts | 390 ++ web.js | 64 + 调试用.bat | 2 + 48 files changed, 12416 insertions(+) create mode 100644 .gitignore create mode 100644 app/main.js create mode 100644 app/package.json create mode 100644 client/PBMessageUtils.ts create mode 100644 copy.bat create mode 100644 package.json create mode 100644 proto/as3options.proto create mode 100644 proto/external-common.proto create mode 100644 proto/external.proto create mode 100644 proto/google/protobuf/descriptor.proto create mode 100644 proto/java/com/test/lalala/Msg.java create mode 100644 proto/msg.proto create mode 100644 proto/protoc.exe create mode 100644 server/PBMessageUtils.ts create mode 100644 src/CookieForPath.ts create mode 100644 src/Extend.ts create mode 100644 src/FsExtra.ts create mode 100644 src/PBMsgDictTemplate.ts create mode 100644 src/ServiceNameTemplate.ts create mode 100644 src/app2.ts create mode 100644 src/protobuf.js create mode 100644 test/client/src/PBMsgDict.ts create mode 100644 test/client/src/ServiceName.ts create mode 100644 test/client/src/chuanqi/login/LoginCreate_C2S_Msg.ts create mode 100644 test/client/src/chuanqi/login/LoginCreate_S2C_Msg.ts create mode 100644 test/client/src/chuanqi/login/LoginGetList_C2S_Msg.ts create mode 100644 test/client/src/chuanqi/login/LoginGetList_S2C_Msg.ts create mode 100644 test/client/src/chuanqi/login/LoginRoleKicked_S2C_Msg.ts create mode 100644 test/client/src/chuanqi/login/LoginRole_C2S_Msg.ts create mode 100644 test/client/src/chuanqi/login/LoginRole_S2C_Msg.ts create mode 100644 test/client/src/chuanqi/login/LoginService.ts create mode 100644 test/client/src/chuanqi/map/msgs/ChangeStage_C2S_Msg.ts create mode 100644 test/client/src/chuanqi/map/msgs/ChangeStage_S2C_Msg.ts create mode 100644 test/client/src/chuanqi/map/msgs/MapService.ts create mode 100644 test/client/src/chuanqi/map/msgs/Move_Msg.ts create mode 100644 test/client/src/chuanqi/map/msgs/Teleport_Msg.ts create mode 100644 test/client/src/code/service/LoginService.ts create mode 100644 test/client/src/code/service/RoleCreate_C2S_Msg.ts create mode 100644 test/client/src/code/service/RoleCreate_S2C_Msg.ts create mode 100644 test/client/src/code/service/RoleGetList_C2S_Msg.ts create mode 100644 test/client/src/code/service/RoleGetList_S2C_Msg.ts create mode 100644 test/client/src/code/service/RoleLogin_S2C_Msg.ts create mode 100644 tsconfig.json create mode 100644 typings/browser.d.ts create mode 100644 typings/browser/ambient/node/index.d.ts create mode 100644 typings/browser/ambient/protobufjs/index.d.ts create mode 100644 web.js create mode 100644 调试用.bat diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..38df444 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.vs +.vscode +dist diff --git a/app/main.js b/app/main.js new file mode 100644 index 0000000..db5c29f --- /dev/null +++ b/app/main.js @@ -0,0 +1,52 @@ +const electron = require('electron'); +// Module to control application life. +const {app} = electron; +// Module to create native browser window. +const {BrowserWindow} = electron; + +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the JavaScript object is garbage collected. +let win; + +function createWindow() { + // Create the browser window. + win = new BrowserWindow({width: 1200, height: 800,webPreferences: { + nodeIntegration: true + }}); + + // and load the index.html of the app. + win.loadURL("http://127.0.0.1:12345/index.html"); + + // Open the DevTools. + win.webContents.openDevTools(); + + // Emitted when the window is closed. + win.on('closed', () => { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + win = null; + }); +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.on('ready', createWindow); + +// Quit when all windows are closed. +app.on('window-all-closed', () => { + // On OS X it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +app.on('activate', () => { + // On OS X it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (win === null) { + createWindow(); + } +}); diff --git a/app/package.json b/app/package.json new file mode 100644 index 0000000..09b4a9a --- /dev/null +++ b/app/package.json @@ -0,0 +1,5 @@ +{ + "name" : "H5工具", + "version" : "0.1.0", + "main" : "main.js" +} \ No newline at end of file diff --git a/client/PBMessageUtils.ts b/client/PBMessageUtils.ts new file mode 100644 index 0000000..1c874e5 --- /dev/null +++ b/client/PBMessageUtils.ts @@ -0,0 +1,379 @@ +module junyou { + + const LITTLE_ENDIAN = egret.Endian.LITTLE_ENDIAN; + const TYPE_DOUBLE: number = 1; + const TYPE_FLOAT: number = 2; + const TYPE_INT64: number = 3; + const TYPE_UINT64: number = 4; + const TYPE_INT32: number = 5; + const TYPE_FIXED64: number = 6; + const TYPE_FIXED32: number = 7; + const TYPE_BOOL: number = 8; + const TYPE_STRING: number = 9; + const TYPE_GROUP: number = 10; + const TYPE_MESSAGE: number = 11; + const TYPE_BYTES: number = 12; + const TYPE_UINT32: number = 13; + const TYPE_ENUM: number = 14; + const TYPE_SFIXED32: number = 15; + const TYPE_SFIXED64: number = 16; + const TYPE_SINT32: number = 17; + const TYPE_SINT64: number = 18; + /** + 0 必有 属性名字 + 1 必有 required optional repeated + 2 必有 数据类型 + 3 可选 消息类型名称 + 4 可选 默认值 + */ + declare type MessageStruct = + [/**0 */string, /**1 */number,/**2 */number] | + [/**属性名字 */string, /**选项 */number,/**数据类型 */number,/**如果是子消息,消息名称 */string] | + [/**属性名字 */string, /**选项 */number,/**数据类型 */number,/**如果是子消息,消息名称 */string, /**默认值 */any] + /** + * + * @author 3tion + * javascript 只会使用到 varint32->number string boolean + * + */ + export class PBMessageUtils { + + /** + * + * 根据message名字得到的结构数据 + * @static + * @type + */ + public static structByName: { /**消息名称*/[index: string]: + { + /**索引 */ + [index: number]: + + MessageStruct + } + } = {}; + + /** + * + * 根据message名字绑定的类名,用于读取消息时创建的对象 + * 如果没有注册,则直接使用{}创建对象 + * @static + * @type {{ [index: string]: { new () } }} + */ + public static ctorByName: { [index: string]: { new () } } = {}; + + public static readFrom(msgType: string, bytes: ByteArray, len?: number): Object { + let ctor = PBMessageUtils.ctorByName[msgType]; + let msg = ctor ? new ctor : {}; + if (len === undefined) len = -1; + let afterLen = 0; + if (len > -1) { + afterLen = bytes.bytesAvailable - len; + } + let encode = PBMessageUtils.structByName[msgType]; + if (!encode) { + ThrowError(`非法的通信类型[${msgType}],堆栈信息:${new Error()}`); + return; + } + //检查处理默认值 + for (let idx in encode) { + let body = encode[idx]; + //0 key + //1 required optional repeated + //2 数据类型 + //3 Message + //4 默认值 + if (4 in body) {//有默认值 + let key = body[0]; + //消息中没有对应key的数据,先赋值成默认值,等待后续处理 + if (!(key in msg)) { + msg[key] = body[4]; + } + } + } + while (bytes.bytesAvailable > afterLen) { + let tag = bytes.readVarint(); + if (tag == 0) + continue; + let idx = tag >>> 3; + let body = encode[idx]; + if (!body) { + ThrowError(`读取消息类型为:${msgType},索引${idx}时数据出现错误,找不到对应的数据结构配置`); + return; + } + let name = body[0]; + let label = body[1]; + let type = body[2]; + let subMsgType = body[3]; + let value: Object; + if (label != 3 || (tag & 0b111) != 7) {//自定义 tag & 0b111 == 7 为 数组中 undefined的情况 + switch (type) { + case TYPE_DOUBLE: + value = bytes.readDouble(); + break; + case TYPE_FLOAT: + value = bytes.readFloat(); + break; + case TYPE_INT64: + case TYPE_UINT64: + case TYPE_SINT64: + value = bytes.readVarint64();//理论上项目不使用 + break; + case TYPE_INT32: + case TYPE_SINT32: + value = PBMessageUtils.decodeZigzag32(bytes.readVarint()); + break; + case TYPE_UINT32: + case TYPE_ENUM: + value = bytes.readVarint(); + break; + case TYPE_FIXED64: + case TYPE_SFIXED64: + value = PBMessageUtils.readFix64(bytes);//理论上项目不使用 + break; + case TYPE_FIXED32: + value = bytes.readUnsignedInt(); + break; + case TYPE_BOOL: + value = PBMessageUtils.readBoolean(bytes); + break; + case TYPE_STRING: + value = PBMessageUtils.readString(bytes); + break; + case TYPE_GROUP://(protobuf 已弃用) + value = undefined; + ThrowError(`读取消息类型为:${msgType},索引${idx}时数据出现已弃用的GROUP分组类型(${TYPE_GROUP})`); + break; + case TYPE_MESSAGE://消息 + value = PBMessageUtils.readMessage(bytes, subMsgType); + break; + case TYPE_BYTES: + value = PBMessageUtils.readBytes(bytes); + break; + case TYPE_SFIXED32: + value = bytes.readInt(); + break; + default: + value = PBMessageUtils.readValue(tag, bytes); + } + } + if (label == 3) {//repeated + let arr = msg[name]; + if (!arr) msg[name] = arr = []; + arr.push(value); + } + else { + msg[name] = value; + } + } + return msg; + } + + private static readValue(tag: number, bytes: ByteArray): any { + let wireType: number = tag & 7; + let value: any; + switch (wireType) { + case 0: //Varint int32, int64, uint32, uint64, sint32, sint64, bool, enum + value = bytes.readVarint(); + break; + case 2: //Length-delimi string, bytes, embedded messages, packed repeated fields + value = PBMessageUtils.readString(bytes); + break; + case 5: //32-bit fixed32, sfixed32, float + value = bytes.readInt(); + break; + case 1: //64-bit fixed64, sfixed64, double + value = bytes.readDouble(); + break; + //case 3://Start group Groups (deprecated) + //break; + //case 4://End group Groups (deprecated) + //break; + default: + ThrowError("protobuf的wireType未知"); + } + return value; + } + + + private static readFix64(bytes: ByteArray): Object { + let v: Int64 = new Int64; + v.low = bytes.readUnsignedInt(); + v.high = bytes.readUnsignedInt(); + return v; + } + + + private static readBoolean(bytes: ByteArray): Object { + return bytes.readVarint() > 0; + } + + private static readString(bytes: ByteArray): Object { + let blen: number = bytes.readVarint(); + if (blen > 0) { + return bytes.readUTFBytes(blen); + } + return ""; + } + + + /** + * + * 读取消息 + * @private + * @static + * @param {number} tag 标签 + * @param {ByteArray} bytes 被处理的字节数组 + * @param {string} subMsgType 类型标识 + * @returns {Object} + */ + private static readMessage(bytes: ByteArray, msgType: string): Object { + let blen: number = bytes.readVarint(); + return PBMessageUtils.readFrom(msgType, bytes, blen); + } + + private static readBytes(bytes: ByteArray): Object { + let blen: number = bytes.readVarint(); + return bytes.readByteArray(blen); + } + + public static writeTo(msg: Object, msgType: string, bytes?: ByteArray): ByteArray { + if (msg == undefined) { + return; + } + let messageEncode = PBMessageUtils.structByName[msgType];// msg.mMessageEncode; + if (!messageEncode) { + ThrowError(`非法的通信类型[${msgType}],堆栈信息:${new Error()}`); + return; + } + if (!bytes) { + bytes = new ByteArray; + } + // bytes.endian = LITTLE_ENDIAN; + for (let numberStr in messageEncode) { + let num = +numberStr; + let body = messageEncode[num]; + let label = body[1]; + let name = body[0]; + if (label == 1 && !(name in msg)) { + continue; + } + let value: Object = msg[name]; + if (value == undefined || value === body[4]/* 默认值 */) { + continue; + } + let type = body[2]; + let subMsgType = body[3]; + let wireType = PBMessageUtils.type2WireType(type); + let tag = (num << 3) | wireType; + if (label == 3) { + for (let key in value) { + let element = value[key]; + // 针对repeated中无法处理空的占位数组做处理,Protobuf 2 中不支持undefined进行占位 由于 wireType 只使用 0 1 2 3 4 5 + // 现在使用 7 作为 undefined 占位使用 + PBMessageUtils.writeElementTo(element, type, element == undefined ? ((num << 3) | 7) : tag, bytes, subMsgType); + } + } + else { + PBMessageUtils.writeElementTo(value, type, tag, bytes, subMsgType); + } + } + return bytes; + } + + public static writeElementTo(value: any, type: number, tag: number, bytes: ByteArray, subMsgType?: string): void { + bytes.writeVarint(tag); + switch (type) { + case TYPE_FIXED32: + bytes.writeUnsignedInt(value as number); + break; + case TYPE_SFIXED32: + bytes.writeInt(value as number); + break; + case TYPE_FLOAT: + bytes.writeFloat(value as number); + break; + case TYPE_DOUBLE: + case TYPE_FIXED64: + case TYPE_SFIXED64: + bytes.writeDouble(value as number); + break; + case TYPE_INT32://int32处理负数,没有按规定的 10字节数据进行处理,直接使用SINT32处理 + // Signed Integers + // As you saw in the previous section, all the protocol buffer types associated with wire type 0 are encoded as varints. However, there is an important difference between the signed int types (sint32 and sint64) and the "standard" int types (int32 and int64) when it comes to encoding negative numbers. If you use int32 or int64 as the type for a negative number, the resulting varint is always ten bytes long – it is, effectively, treated like a very large unsigned integer. If you use one of the signed types, the resulting varint uses ZigZag encoding, which is much more efficient. + case TYPE_SINT32: + bytes.writeVarint(PBMessageUtils.zigzag32(value as number)); + break; + case TYPE_ENUM: + case TYPE_UINT32: + bytes.writeVarint(value as number); + break; + case TYPE_INT64: + case TYPE_SINT64: + case TYPE_UINT64: + bytes.writeVarint64(value as Int64); + break; + case TYPE_BOOL: + bytes.writeVarint(value ? 1 : 0); + break; + case TYPE_STRING: + case TYPE_BYTES: + case TYPE_MESSAGE: + if (type == TYPE_MESSAGE) { + var temp: ByteArray = PBMessageUtils.writeTo(value, subMsgType); + } + else if (type == TYPE_BYTES) { + temp = value as ByteArray; + } + else { + temp = new ByteArray; + temp.writeUTFBytes(value as string); + } + length = temp ? temp.length : 0; + bytes.writeVarint(length); + if (length > 0) { + bytes.writeBytes(temp, 0, length); + } + break; + } + } + + + public static type2WireType(type: number): number { + switch (type) { + case TYPE_FIXED32: + case TYPE_SFIXED32: + case TYPE_FLOAT: + return 5; + case TYPE_DOUBLE: + case TYPE_FIXED64: + case TYPE_SFIXED64: + return 1; + case TYPE_INT32: + case TYPE_SINT32: + case TYPE_ENUM: + case TYPE_UINT32: + case TYPE_INT64: + case TYPE_SINT64: + case TYPE_UINT64: + case TYPE_BOOL: + return 0; + case TYPE_STRING: + case TYPE_MESSAGE: + case TYPE_BYTES: + return 2; + } + return -1; + } + + + public static zigzag32(n: number) { + return (n << 1) ^ (n >> 31); + } + + public static decodeZigzag32(n: number) { + return n >> 1 ^ (((n & 1) << 31) >> 31); + } + + } +} \ No newline at end of file diff --git a/copy.bat b/copy.bat new file mode 100644 index 0000000..f4d469c --- /dev/null +++ b/copy.bat @@ -0,0 +1,5 @@ +echo 开始copy + +robocopy .\dist ..\..\release\protocal /MIR + +pause \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..7abf156 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "prototools", + "version": "0.0.1", + "description": "wiki上定义的前后端通信指令,自动生成前端代码", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "electron ." + }, + "author": "null", + "license": "ISC", + "directories": { + "test": "test" + } +} diff --git a/proto/as3options.proto b/proto/as3options.proto new file mode 100644 index 0000000..4e13ed6 --- /dev/null +++ b/proto/as3options.proto @@ -0,0 +1,12 @@ +package as3; +import "google/protobuf/descriptor.proto"; +extend google.protobuf.FileOptions{ + optional string f_package = 50000; +} +extend google.protobuf.MessageOptions{ + optional string m_package = 50000; + repeated int32 m_cmd = 50001; +} +extend google.protobuf.EnumOptions{ + optional string e_package = 50000; +} \ No newline at end of file diff --git a/proto/external-common.proto b/proto/external-common.proto new file mode 100644 index 0000000..160a495 --- /dev/null +++ b/proto/external-common.proto @@ -0,0 +1,19 @@ +package com.junyou.common.protocol; +import "as3options.proto"; +option (as3.f_package) = "huaqiangu.login"; +message ServerInfoVO{ + option (as3.m_package) = "huaqiangu.login"; + required int64 serverOpenTime=1;//服务器开服时间 + optional int64 serverTime=2;//服务器当前时间 + optional string serverVersion=3;//服务器版本 + repeated int64 serverMergeTime=4;//服务器合服时间 + repeated int32 serverOffsetTime=5;//服务器时区偏移量(单位:分钟) +} +message ChooseRoleVO{ + option (as3.m_package) = "huaqiangu.login"; + required int32 configId=1;//配置id + required int64 guid=2;//唯一标识 + required string name=3;//名字 + required int32 level=4;//等级 + required int32 roleType=5;//角色类型,0普通用户,1是GM,2新手指导员,3是VIP专员 +} diff --git a/proto/external.proto b/proto/external.proto new file mode 100644 index 0000000..185b786 --- /dev/null +++ b/proto/external.proto @@ -0,0 +1,62 @@ +package com.junyou.common.protocol; +import "as3options.proto"; +import "external-common.proto"; + +//登录 +message Login_C2S{ + option (as3.m_package) = "huaqiangu.login"; + option (as3.m_cmd) = 2000; + option (as3.m_cmd) = 2001; + required string platformAccount=1;//平台用户账号 + required string roleCreateGlobalServerId=2;//玩家角色创建的全局服务器id + required bool chenmi=3;//该用户是否需要开启防沉迷 + required string sign=4;//验证字符串 md5 以及时间戳,拼在一起 + required bool weiduan=5;//是否使用登录器登录true为用登录器登录,false为没有用登录器登录的 + optional string parameter=6;//服务器需要的其他参数 +} +//登录成功 +message LoginSuccess_S2C{ + option (as3.m_package) = "huaqiangu.login"; + required int32 retStatus=1; + optional ServerInfoVO serverInfo=2; + optional ChooseRoleVO roleVO=3;//数据为空 标示没有角色,客户端发送创建角色指令 + optional int64 chenmiTime=4;//防沉迷时间 + optional string clientIp=5;//客户端IP +} +//登录失败 +message LoginFail_S2C{ + option (as3.m_package) = "huaqiangu.login"; + required int32 retStatus=1; + required int32 msgCode=2; + repeated string parameter=3;//code相关参数 +} +//创建角色并进入游戏 +message CreateRole_C2S{ + option (as3.m_package) = "huaqiangu.login"; + required string name=1;//角色名字 + required int32 configId=2;//角色配置ID + required bool autoCreate=3;//true:自动创号玩家,false:正常玩家,默认是false:正常玩家 +} +//创建角色并进入游戏成功 +message CreateRoleSuccess_S2C{ + option (as3.m_package) = "huaqiangu.login"; + required int32 retStatus=1; + optional ChooseRoleVO roleVO=2; +} +//创建角色并进入游戏失败 +message CreateRoleFail_S2C{ + option (as3.m_package) = "huaqiangu.login"; + required int32 retStatus=1; + optional int32 msgCode=2;//错误码 +} +//服务端主动断开(需要状态) +message KickRole_S2C{ + option (as3.m_package) = "huaqiangu.server"; + required int32 retStatus=1; + optional string parameter=2;//参数 +} +//服务器端通知指定时间开始停机 +message ServerStopNotice_S2C{ + option (as3.m_package) = "huaqiangu.server"; + required int64 stopTime=1;//开始停机时间戳,给的时间戳会小于真实开始的时间 +} \ No newline at end of file diff --git a/proto/google/protobuf/descriptor.proto b/proto/google/protobuf/descriptor.proto new file mode 100644 index 0000000..c59a602 --- /dev/null +++ b/proto/google/protobuf/descriptor.proto @@ -0,0 +1,779 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// The messages in this file describe the definitions found in .proto files. +// A valid .proto file can be translated directly to a FileDescriptorProto +// without any other information (e.g. without reading its imports). + + +syntax = "proto2"; + +package google.protobuf; +option go_package = "descriptor"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DescriptorProtos"; +option csharp_namespace = "Google.Protobuf.Reflection"; +option objc_class_prefix = "GPB"; + +// descriptor.proto must be optimized for speed because reflection-based +// algorithms don't work during bootstrapping. +option optimize_for = SPEED; + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +message FileDescriptorSet { + repeated FileDescriptorProto file = 1; +} + +// Describes a complete .proto file. +message FileDescriptorProto { + optional string name = 1; // file name, relative to root of source tree + optional string package = 2; // e.g. "foo", "foo.bar", etc. + + // Names of files imported by this file. + repeated string dependency = 3; + // Indexes of the public imported files in the dependency list above. + repeated int32 public_dependency = 10; + // Indexes of the weak imported files in the dependency list. + // For Google-internal migration only. Do not use. + repeated int32 weak_dependency = 11; + + // All top-level definitions in this file. + repeated DescriptorProto message_type = 4; + repeated EnumDescriptorProto enum_type = 5; + repeated ServiceDescriptorProto service = 6; + repeated FieldDescriptorProto extension = 7; + + optional FileOptions options = 8; + + // This field contains optional information about the original source code. + // You may safely remove this entire field without harming runtime + // functionality of the descriptors -- the information is needed only by + // development tools. + optional SourceCodeInfo source_code_info = 9; + + // The syntax of the proto file. + // The supported values are "proto2" and "proto3". + optional string syntax = 12; +} + +// Describes a message type. +message DescriptorProto { + optional string name = 1; + + repeated FieldDescriptorProto field = 2; + repeated FieldDescriptorProto extension = 6; + + repeated DescriptorProto nested_type = 3; + repeated EnumDescriptorProto enum_type = 4; + + message ExtensionRange { + optional int32 start = 1; + optional int32 end = 2; + } + repeated ExtensionRange extension_range = 5; + + repeated OneofDescriptorProto oneof_decl = 8; + + optional MessageOptions options = 7; + + // Range of reserved tag numbers. Reserved tag numbers may not be used by + // fields or extension ranges in the same message. Reserved ranges may + // not overlap. + message ReservedRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Exclusive. + } + repeated ReservedRange reserved_range = 9; + // Reserved field names, which may not be used by fields in the same message. + // A given name may only be reserved once. + repeated string reserved_name = 10; +} + +// Describes a field within a message. +message FieldDescriptorProto { + enum Type { + // 0 is reserved for errors. + // Order is weird for historical reasons. + TYPE_DOUBLE = 1; + TYPE_FLOAT = 2; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + // negative values are likely. + TYPE_INT64 = 3; + TYPE_UINT64 = 4; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + // negative values are likely. + TYPE_INT32 = 5; + TYPE_FIXED64 = 6; + TYPE_FIXED32 = 7; + TYPE_BOOL = 8; + TYPE_STRING = 9; + TYPE_GROUP = 10; // Tag-delimited aggregate. + TYPE_MESSAGE = 11; // Length-delimited aggregate. + + // New in version 2. + TYPE_BYTES = 12; + TYPE_UINT32 = 13; + TYPE_ENUM = 14; + TYPE_SFIXED32 = 15; + TYPE_SFIXED64 = 16; + TYPE_SINT32 = 17; // Uses ZigZag encoding. + TYPE_SINT64 = 18; // Uses ZigZag encoding. + }; + + enum Label { + // 0 is reserved for errors + LABEL_OPTIONAL = 1; + LABEL_REQUIRED = 2; + LABEL_REPEATED = 3; + // TODO(sanjay): Should we add LABEL_MAP? + }; + + optional string name = 1; + optional int32 number = 3; + optional Label label = 4; + + // If type_name is set, this need not be set. If both this and type_name + // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + optional Type type = 5; + + // For message and enum types, this is the name of the type. If the name + // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + // rules are used to find the type (i.e. first the nested types within this + // message are searched, then within the parent, on up to the root + // namespace). + optional string type_name = 6; + + // For extensions, this is the name of the type being extended. It is + // resolved in the same manner as type_name. + optional string extendee = 2; + + // For numeric types, contains the original text representation of the value. + // For booleans, "true" or "false". + // For strings, contains the default text contents (not escaped in any way). + // For bytes, contains the C escaped value. All bytes >= 128 are escaped. + // TODO(kenton): Base-64 encode? + optional string default_value = 7; + + // If set, gives the index of a oneof in the containing type's oneof_decl + // list. This field is a member of that oneof. + optional int32 oneof_index = 9; + + // JSON name of this field. The value is set by protocol compiler. If the + // user has set a "json_name" option on this field, that option's value + // will be used. Otherwise, it's deduced from the field's name by converting + // it to camelCase. + optional string json_name = 10; + + optional FieldOptions options = 8; +} + +// Describes a oneof. +message OneofDescriptorProto { + optional string name = 1; +} + +// Describes an enum type. +message EnumDescriptorProto { + optional string name = 1; + + repeated EnumValueDescriptorProto value = 2; + + optional EnumOptions options = 3; +} + +// Describes a value within an enum. +message EnumValueDescriptorProto { + optional string name = 1; + optional int32 number = 2; + + optional EnumValueOptions options = 3; +} + +// Describes a service. +message ServiceDescriptorProto { + optional string name = 1; + repeated MethodDescriptorProto method = 2; + + optional ServiceOptions options = 3; +} + +// Describes a method of a service. +message MethodDescriptorProto { + optional string name = 1; + + // Input and output type names. These are resolved in the same way as + // FieldDescriptorProto.type_name, but must refer to a message type. + optional string input_type = 2; + optional string output_type = 3; + + optional MethodOptions options = 4; + + // Identifies if client streams multiple client messages + optional bool client_streaming = 5 [default=false]; + // Identifies if server streams multiple server messages + optional bool server_streaming = 6 [default=false]; +} + + +// =================================================================== +// Options + +// Each of the definitions above may have "options" attached. These are +// just annotations which may cause code to be generated slightly differently +// or may contain hints for code that manipulates protocol messages. +// +// Clients may define custom options as extensions of the *Options messages. +// These extensions may not yet be known at parsing time, so the parser cannot +// store the values in them. Instead it stores them in a field in the *Options +// message called uninterpreted_option. This field must have the same name +// across all *Options messages. We then use this field to populate the +// extensions when we build a descriptor, at which point all protos have been +// parsed and so all extensions are known. +// +// Extension numbers for custom options may be chosen as follows: +// * For options which will only be used within a single application or +// organization, or for experimental options, use field numbers 50000 +// through 99999. It is up to you to ensure that you do not use the +// same number for multiple options. +// * For options which will be published and used publicly by multiple +// independent entities, e-mail protobuf-global-extension-registry@google.com +// to reserve extension numbers. Simply provide your project name (e.g. +// Objective-C plugin) and your project website (if available) -- there's no +// need to explain how you intend to use them. Usually you only need one +// extension number. You can declare multiple options with only one extension +// number by putting them in a sub-message. See the Custom Options section of +// the docs for examples: +// https://developers.google.com/protocol-buffers/docs/proto#options +// If this turns out to be popular, a web service will be set up +// to automatically assign option numbers. + + +message FileOptions { + + // Sets the Java package where classes generated from this .proto will be + // placed. By default, the proto package is used, but this is often + // inappropriate because proto packages do not normally start with backwards + // domain names. + optional string java_package = 1; + + + // If set, all the classes from the .proto file are wrapped in a single + // outer class with the given name. This applies to both Proto1 + // (equivalent to the old "--one_java_file" option) and Proto2 (where + // a .proto always translates to a single class, but you may want to + // explicitly choose the class name). + optional string java_outer_classname = 8; + + // If set true, then the Java code generator will generate a separate .java + // file for each top-level message, enum, and service defined in the .proto + // file. Thus, these types will *not* be nested inside the outer class + // named by java_outer_classname. However, the outer class will still be + // generated to contain the file's getDescriptor() method as well as any + // top-level extensions defined in the file. + optional bool java_multiple_files = 10 [default=false]; + + // If set true, then the Java code generator will generate equals() and + // hashCode() methods for all messages defined in the .proto file. + // This increases generated code size, potentially substantially for large + // protos, which may harm a memory-constrained application. + // - In the full runtime this is a speed optimization, as the + // AbstractMessage base class includes reflection-based implementations of + // these methods. + // - In the lite runtime, setting this option changes the semantics of + // equals() and hashCode() to more closely match those of the full runtime; + // the generated methods compute their results based on field values rather + // than object identity. (Implementations should not assume that hashcodes + // will be consistent across runtimes or versions of the protocol compiler.) + optional bool java_generate_equals_and_hash = 20 [default=false]; + + // If set true, then the Java2 code generator will generate code that + // throws an exception whenever an attempt is made to assign a non-UTF-8 + // byte sequence to a string field. + // Message reflection will do the same. + // However, an extension field still accepts non-UTF-8 byte sequences. + // This option has no effect on when used with the lite runtime. + optional bool java_string_check_utf8 = 27 [default=false]; + + + // Generated classes can be optimized for speed or code size. + enum OptimizeMode { + SPEED = 1; // Generate complete code for parsing, serialization, + // etc. + CODE_SIZE = 2; // Use ReflectionOps to implement these methods. + LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. + } + optional OptimizeMode optimize_for = 9 [default=SPEED]; + + // Sets the Go package where structs generated from this .proto will be + // placed. If omitted, the Go package will be derived from the following: + // - The basename of the package import path, if provided. + // - Otherwise, the package statement in the .proto file, if present. + // - Otherwise, the basename of the .proto file, without extension. + optional string go_package = 11; + + + + // Should generic services be generated in each language? "Generic" services + // are not specific to any particular RPC system. They are generated by the + // main code generators in each language (without additional plugins). + // Generic services were the only kind of service generation supported by + // early versions of google.protobuf. + // + // Generic services are now considered deprecated in favor of using plugins + // that generate code specific to your particular RPC system. Therefore, + // these default to false. Old code which depends on generic services should + // explicitly set them to true. + optional bool cc_generic_services = 16 [default=false]; + optional bool java_generic_services = 17 [default=false]; + optional bool py_generic_services = 18 [default=false]; + + // Is this file deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for everything in the file, or it will be completely ignored; in the very + // least, this is a formalization for deprecating files. + optional bool deprecated = 23 [default=false]; + + // Enables the use of arenas for the proto messages in this file. This applies + // only to generated classes for C++. + optional bool cc_enable_arenas = 31 [default=false]; + + + // Sets the objective c class prefix which is prepended to all objective c + // generated classes from this .proto. There is no default. + optional string objc_class_prefix = 36; + + // Namespace for generated classes; defaults to the package. + optional string csharp_namespace = 37; + + // Whether the nano proto compiler should generate in the deprecated non-nano + // suffixed package. + optional bool javanano_use_deprecated_package = 38; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message MessageOptions { + // Set true to use the old proto1 MessageSet wire format for extensions. + // This is provided for backwards-compatibility with the MessageSet wire + // format. You should not use this for any other reason: It's less + // efficient, has fewer features, and is more complicated. + // + // The message must be defined exactly as follows: + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // Note that the message cannot have any defined fields; MessageSets only + // have extensions. + // + // All extensions of your type must be singular messages; e.g. they cannot + // be int32s, enums, or repeated messages. + // + // Because this is an option, the above two restrictions are not enforced by + // the protocol compiler. + optional bool message_set_wire_format = 1 [default=false]; + + // Disables the generation of the standard "descriptor()" accessor, which can + // conflict with a field of the same name. This is meant to make migration + // from proto1 easier; new code should avoid fields named "descriptor". + optional bool no_standard_descriptor_accessor = 2 [default=false]; + + // Is this message deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the message, or it will be completely ignored; in the very least, + // this is a formalization for deprecating messages. + optional bool deprecated = 3 [default=false]; + + // Whether the message is an automatically generated map entry type for the + // maps field. + // + // For maps fields: + // map map_field = 1; + // The parsed descriptor looks like: + // message MapFieldEntry { + // option map_entry = true; + // optional KeyType key = 1; + // optional ValueType value = 2; + // } + // repeated MapFieldEntry map_field = 1; + // + // Implementations may choose not to generate the map_entry=true message, but + // use a native map in the target language to hold the keys and values. + // The reflection APIs in such implementions still need to work as + // if the field is a repeated message field. + // + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. + optional bool map_entry = 7; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message FieldOptions { + // The ctype option instructs the C++ code generator to use a different + // representation of the field than it normally would. See the specific + // options below. This option is not yet implemented in the open source + // release -- sorry, we'll try to include it in a future version! + optional CType ctype = 1 [default = STRING]; + enum CType { + // Default mode. + STRING = 0; + + CORD = 1; + + STRING_PIECE = 2; + } + // The packed option can be enabled for repeated primitive fields to enable + // a more efficient representation on the wire. Rather than repeatedly + // writing the tag and type for each element, the entire array is encoded as + // a single length-delimited blob. In proto3, only explicit setting it to + // false will avoid using packed encoding. + optional bool packed = 2; + + + // The jstype option determines the JavaScript type used for values of the + // field. The option is permitted only for 64 bit integral and fixed types + // (int64, uint64, sint64, fixed64, sfixed64). By default these types are + // represented as JavaScript strings. This avoids loss of precision that can + // happen when a large value is converted to a floating point JavaScript + // numbers. Specifying JS_NUMBER for the jstype causes the generated + // JavaScript code to use the JavaScript "number" type instead of strings. + // This option is an enum to permit additional types to be added, + // e.g. goog.math.Integer. + optional JSType jstype = 6 [default = JS_NORMAL]; + enum JSType { + // Use the default type. + JS_NORMAL = 0; + + // Use JavaScript strings. + JS_STRING = 1; + + // Use JavaScript numbers. + JS_NUMBER = 2; + } + + // Should this field be parsed lazily? Lazy applies only to message-type + // fields. It means that when the outer message is initially parsed, the + // inner message's contents will not be parsed but instead stored in encoded + // form. The inner message will actually be parsed when it is first accessed. + // + // This is only a hint. Implementations are free to choose whether to use + // eager or lazy parsing regardless of the value of this option. However, + // setting this option true suggests that the protocol author believes that + // using lazy parsing on this field is worth the additional bookkeeping + // overhead typically needed to implement it. + // + // This option does not affect the public interface of any generated code; + // all method signatures remain the same. Furthermore, thread-safety of the + // interface is not affected by this option; const methods remain safe to + // call from multiple threads concurrently, while non-const methods continue + // to require exclusive access. + // + // + // Note that implementations may choose not to check required fields within + // a lazy sub-message. That is, calling IsInitialized() on the outher message + // may return true even if the inner message has missing required fields. + // This is necessary because otherwise the inner message would have to be + // parsed in order to perform the check, defeating the purpose of lazy + // parsing. An implementation which chooses not to check required fields + // must be consistent about it. That is, for any particular sub-message, the + // implementation must either *always* check its required fields, or *never* + // check its required fields, regardless of whether or not the message has + // been parsed. + optional bool lazy = 5 [default=false]; + + // Is this field deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for accessors, or it will be completely ignored; in the very least, this + // is a formalization for deprecating fields. + optional bool deprecated = 3 [default=false]; + + // For Google-internal migration only. Do not use. + optional bool weak = 10 [default=false]; + + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumOptions { + + // Set this option to true to allow mapping different tag names to the same + // value. + optional bool allow_alias = 2; + + // Is this enum deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum, or it will be completely ignored; in the very least, this + // is a formalization for deprecating enums. + optional bool deprecated = 3 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumValueOptions { + // Is this enum value deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum value, or it will be completely ignored; in the very least, + // this is a formalization for deprecating enum values. + optional bool deprecated = 1 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message ServiceOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this service deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the service, or it will be completely ignored; in the very least, + // this is a formalization for deprecating services. + optional bool deprecated = 33 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message MethodOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this method deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the method, or it will be completely ignored; in the very least, + // this is a formalization for deprecating methods. + optional bool deprecated = 33 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +message UninterpretedOption { + // The name of the uninterpreted option. Each string represents a segment in + // a dot-separated name. is_extension is true iff a segment represents an + // extension (denoted with parentheses in options specs in .proto files). + // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents + // "foo.(bar.baz).qux". + message NamePart { + required string name_part = 1; + required bool is_extension = 2; + } + repeated NamePart name = 2; + + // The value of the uninterpreted option, in whatever type the tokenizer + // identified it as during parsing. Exactly one of these should be set. + optional string identifier_value = 3; + optional uint64 positive_int_value = 4; + optional int64 negative_int_value = 5; + optional double double_value = 6; + optional bytes string_value = 7; + optional string aggregate_value = 8; +} + +// =================================================================== +// Optional source code info + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +message SourceCodeInfo { + // A Location identifies a piece of source code in a .proto file which + // corresponds to a particular definition. This information is intended + // to be useful to IDEs, code indexers, documentation generators, and similar + // tools. + // + // For example, say we have a file like: + // message Foo { + // optional string foo = 1; + // } + // Let's look at just the field definition: + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // We have the following locations: + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // Notes: + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendent. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. + repeated Location location = 1; + message Location { + // Identifies which part of the FileDescriptorProto was defined at this + // location. + // + // Each element is a field number or an index. They form a path from + // the root FileDescriptorProto to the place where the definition. For + // example, this path: + // [ 4, 3, 2, 7, 1 ] + // refers to: + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // This is because FileDescriptorProto.message_type has field number 4: + // repeated DescriptorProto message_type = 4; + // and DescriptorProto.field has field number 2: + // repeated FieldDescriptorProto field = 2; + // and FieldDescriptorProto.name has field number 1: + // optional string name = 1; + // + // Thus, the above path gives the location of a field name. If we removed + // the last element: + // [ 4, 3, 2, 7 ] + // this path refers to the whole field declaration (from the beginning + // of the label to the terminating semicolon). + repeated int32 path = 1 [packed=true]; + + // Always has exactly three or four elements: start line, start column, + // end line (optional, otherwise assumed same as start line), end column. + // These are packed into a single field for efficiency. Note that line + // and column numbers are zero-based -- typically you will want to add + // 1 to each before displaying to a user. + repeated int32 span = 2 [packed=true]; + + // If this SourceCodeInfo represents a complete declaration, these are any + // comments appearing before and after the declaration which appear to be + // attached to the declaration. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // leading_detached_comments will keep paragraphs of comments that appear + // before (but not connected to) the current element. Each paragraph, + // separated by empty lines, will be one comment element in the repeated + // field. + // + // Only the comment content is provided; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk + // will be stripped from the beginning of each line other than the first. + // Newlines are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to qux. + // // + // // Another line attached to qux. + // optional double qux = 4; + // + // // Detached comment for corge. This is not leading or trailing comments + // // to qux or corge because there are blank lines separating it from + // // both. + // + // // Detached comment for corge paragraph 2. + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + // + // // ignored detached comments. + optional string leading_comments = 3; + optional string trailing_comments = 4; + repeated string leading_detached_comments = 6; + } +} diff --git a/proto/java/com/test/lalala/Msg.java b/proto/java/com/test/lalala/Msg.java new file mode 100644 index 0000000..6855efa --- /dev/null +++ b/proto/java/com/test/lalala/Msg.java @@ -0,0 +1,571 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: msg.proto + +package com.test.lalala; + +public final class Msg { + private Msg() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface SearchRequestOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // required string query = 1; + boolean hasQuery(); + String getQuery(); + + // required int32 page_number = 2; + boolean hasPageNumber(); + int getPageNumber(); + + // required int32 result_per_page = 3; + boolean hasResultPerPage(); + int getResultPerPage(); + } + public static final class SearchRequest extends + com.google.protobuf.GeneratedMessage + implements SearchRequestOrBuilder { + // Use SearchRequest.newBuilder() to construct. + private SearchRequest(Builder builder) { + super(builder); + } + private SearchRequest(boolean noInit) {} + + private static final SearchRequest defaultInstance; + public static SearchRequest getDefaultInstance() { + return defaultInstance; + } + + public SearchRequest getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.test.lalala.Msg.internal_static_com_test_lalala_SearchRequest_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.test.lalala.Msg.internal_static_com_test_lalala_SearchRequest_fieldAccessorTable; + } + + private int bitField0_; + // required string query = 1; + public static final int QUERY_FIELD_NUMBER = 1; + private java.lang.Object query_; + public boolean hasQuery() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getQuery() { + java.lang.Object ref = query_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + query_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getQueryBytes() { + java.lang.Object ref = query_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + query_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required int32 page_number = 2; + public static final int PAGE_NUMBER_FIELD_NUMBER = 2; + private int pageNumber_; + public boolean hasPageNumber() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public int getPageNumber() { + return pageNumber_; + } + + // required int32 result_per_page = 3; + public static final int RESULT_PER_PAGE_FIELD_NUMBER = 3; + private int resultPerPage_; + public boolean hasResultPerPage() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public int getResultPerPage() { + return resultPerPage_; + } + + private void initFields() { + query_ = ""; + pageNumber_ = 0; + resultPerPage_ = 0; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasQuery()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasPageNumber()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasResultPerPage()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getQueryBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeInt32(2, pageNumber_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeInt32(3, resultPerPage_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getQueryBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, pageNumber_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, resultPerPage_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static com.test.lalala.Msg.SearchRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.test.lalala.Msg.SearchRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.test.lalala.Msg.SearchRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.test.lalala.Msg.SearchRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.test.lalala.Msg.SearchRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.test.lalala.Msg.SearchRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static com.test.lalala.Msg.SearchRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.test.lalala.Msg.SearchRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.test.lalala.Msg.SearchRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.test.lalala.Msg.SearchRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(com.test.lalala.Msg.SearchRequest prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements com.test.lalala.Msg.SearchRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.test.lalala.Msg.internal_static_com_test_lalala_SearchRequest_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.test.lalala.Msg.internal_static_com_test_lalala_SearchRequest_fieldAccessorTable; + } + + // Construct using com.test.lalala.Msg.SearchRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + query_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + pageNumber_ = 0; + bitField0_ = (bitField0_ & ~0x00000002); + resultPerPage_ = 0; + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.test.lalala.Msg.SearchRequest.getDescriptor(); + } + + public com.test.lalala.Msg.SearchRequest getDefaultInstanceForType() { + return com.test.lalala.Msg.SearchRequest.getDefaultInstance(); + } + + public com.test.lalala.Msg.SearchRequest build() { + com.test.lalala.Msg.SearchRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private com.test.lalala.Msg.SearchRequest buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + com.test.lalala.Msg.SearchRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public com.test.lalala.Msg.SearchRequest buildPartial() { + com.test.lalala.Msg.SearchRequest result = new com.test.lalala.Msg.SearchRequest(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.query_ = query_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.pageNumber_ = pageNumber_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.resultPerPage_ = resultPerPage_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.test.lalala.Msg.SearchRequest) { + return mergeFrom((com.test.lalala.Msg.SearchRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.test.lalala.Msg.SearchRequest other) { + if (other == com.test.lalala.Msg.SearchRequest.getDefaultInstance()) return this; + if (other.hasQuery()) { + setQuery(other.getQuery()); + } + if (other.hasPageNumber()) { + setPageNumber(other.getPageNumber()); + } + if (other.hasResultPerPage()) { + setResultPerPage(other.getResultPerPage()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasQuery()) { + + return false; + } + if (!hasPageNumber()) { + + return false; + } + if (!hasResultPerPage()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + query_ = input.readBytes(); + break; + } + case 16: { + bitField0_ |= 0x00000002; + pageNumber_ = input.readInt32(); + break; + } + case 24: { + bitField0_ |= 0x00000004; + resultPerPage_ = input.readInt32(); + break; + } + } + } + } + + private int bitField0_; + + // required string query = 1; + private java.lang.Object query_ = ""; + public boolean hasQuery() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getQuery() { + java.lang.Object ref = query_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + query_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setQuery(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + query_ = value; + onChanged(); + return this; + } + public Builder clearQuery() { + bitField0_ = (bitField0_ & ~0x00000001); + query_ = getDefaultInstance().getQuery(); + onChanged(); + return this; + } + void setQuery(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + query_ = value; + onChanged(); + } + + // required int32 page_number = 2; + private int pageNumber_ ; + public boolean hasPageNumber() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public int getPageNumber() { + return pageNumber_; + } + public Builder setPageNumber(int value) { + bitField0_ |= 0x00000002; + pageNumber_ = value; + onChanged(); + return this; + } + public Builder clearPageNumber() { + bitField0_ = (bitField0_ & ~0x00000002); + pageNumber_ = 0; + onChanged(); + return this; + } + + // required int32 result_per_page = 3; + private int resultPerPage_ ; + public boolean hasResultPerPage() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public int getResultPerPage() { + return resultPerPage_; + } + public Builder setResultPerPage(int value) { + bitField0_ |= 0x00000004; + resultPerPage_ = value; + onChanged(); + return this; + } + public Builder clearResultPerPage() { + bitField0_ = (bitField0_ & ~0x00000004); + resultPerPage_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:com.test.lalala.SearchRequest) + } + + static { + defaultInstance = new SearchRequest(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:com.test.lalala.SearchRequest) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_com_test_lalala_SearchRequest_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_com_test_lalala_SearchRequest_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\tmsg.proto\022\017com.test.lalala\032\020as3options" + + ".proto\"L\n\rSearchRequest\022\r\n\005query\030\001 \002(\t\022\023" + + "\n\013page_number\030\002 \002(\005\022\027\n\017result_per_page\030\003" + + " \002(\005B\034\202\265\030\030com.netease.protocGenAs3" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_com_test_lalala_SearchRequest_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_com_test_lalala_SearchRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_com_test_lalala_SearchRequest_descriptor, + new java.lang.String[] { "Query", "PageNumber", "ResultPerPage", }, + com.test.lalala.Msg.SearchRequest.class, + com.test.lalala.Msg.SearchRequest.Builder.class); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registerAllExtensions(registry); + as3.As3Options.registerAllExtensions(registry); + return registry; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + as3.As3Options.getDescriptor(), + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/proto/msg.proto b/proto/msg.proto new file mode 100644 index 0000000..49231d9 --- /dev/null +++ b/proto/msg.proto @@ -0,0 +1,8 @@ +package com.test.lalala; +import "as3options.proto"; +option (as3.f_package) = "com.netease.protocGenAs3"; +message SearchRequest { + required string query = 1; + required int32 page_number = 2; + required int32 result_per_page = 3; +} \ No newline at end of file diff --git a/proto/protoc.exe b/proto/protoc.exe new file mode 100644 index 0000000000000000000000000000000000000000..2d8d4a5d75d8526003bdc5188887d4462462517e GIT binary patch literal 1766414 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 n!T?v$YP-%*+``=5`O@iV9@1g*FI zvVt$wV2_WtwyZ}Y&XVmmz~ou}L|W3g3a+ejDFY&Va-qOh>I}h>{lLne%^B7f7Cb9d zrDm992tE!FWknR8a582V+GnPLd+K<5lEnkS5z4be_`(2i#_<^Pt4jUKZyQ&h1L4Vh z<(B1`pH?5MLwmA2Vwc|ojZZcJwjg>3B!u{{0x6HpLEb%xk{Be;pqYlAvs)jf^L|}> zO^vIL7kH}vNUCw9;cw4F)vpOcJ9AaZ5RhU`>_xD~ZQFY4RcveX^ltA}N8gslI-=r4 z;-s+!%8;7R{fTpXv=4gbLwga?eyq`YPY_W`vNG3-VFiN3g+$u|FkRYvg6PNnEWJ*b zK8&TS0rOS3qy!cE^^REtI`XRb{Mci}t8RazjP%bAz2IKeGWUckVoP*KysAgGuu`1> z1H-nS3%r-r9wM&+Z#1hmd?M@nK%@5dWtYs*ExIozQEvuJ^`+ki-Iv~IXY}dXxX*L- zr-d4qDw)c*MzmzyageH}NW%cD)1erJj_L&+xal{Q22%N+b*C8eQ zFueRrc@J*I2k9aq#y3fCu79F5?OgwX{KG_sWd8T~h8q|k!-|KPiglkw^vL0KZWCs@K z#&LjPJM`p&AWi8@d}XYXNv6A{jgLii^yGs0N<|*INZMbv_r{bLBRR)=tS;0o{hDS}9mvam5QKs}L z*9OGMFB$NM$}e&vT?8F9o)h0^ASm^H2H;nPXFSI>0e|j?1pM;keF#k!y}U2^HB0eJ z@;=-Sh~gJ(rt+Y)GIo9EXvHt)eQ>11BSc{IAWvRVW`MPDo<7d6t({0mkJj)H z`L5i}uPZSRu{fs`f&uE79l2y{2agVFwC*pb>mowxJ)w8EpYoyid7CA7egIS)~2 z)yeRS;?r6Dv74$Pa&=06xF|J8l@4Je9%GBJ`(V1SWSIkSg~+e+udo*#h%MCnm{;an zLz&A-i4a-T2AyT(l`id-x#mh~odzLN%+hbv7DcjNNFW(>C(w}$yx9jv2wo*nq66KC z_g27+MbRTcOP?ID`*~n;QapIA;MWKy$L6{7OkiS~S6I|}SE3Ko3=gJskKkM((uyNE zzd=l;fJFz_#&aw2#Pb+jeGSTXL@}~WG>}UG0ozor*7NWK=_-UfXYd75tZI7q@U&r) zj3LK%dOF*XPZ)Co<{FwemfBhl|TlvFFph4j{{7X z_A)5_x{UC_1!ojT2FBbM9uny*bCWO|h2_oHz_XEJd{LgBWdfy~qa+vQm zc)uo?9O-%Y>A>_fVDbLAgUwhVue*w6d z&cUsD{W;E@#V0ztcJY^prZ)yvJXhH^bjXscom{5Nu>dAnB8C{@)+nzGmP%Q5nJty< zxs(R2!89=GoK^Y9APh_rZ%Hs5&#cojWLRDCm$E1SRrX7rr_6N#n%`&>W@kL7Tl`yx z>{(1y>O7Zev8l9TmNWEAnS4}LE-NOJSslcR8OCc%>EXp^0bN`KRWW_GE%W8Gwa}vl z(VGrumwEG_KC0OuM~;}Tk==y2xCz_4Nk*o!l-zM4EhX}jJHE1%w8Tqm?qGZo=ZT0o ziY*i&9t&$j zZ}}b~9quL^^OZS;h`Y!+lAOUXT_Sc;WNdCe3)Vuw#%3)sbuXg>9IVsX5!L(;ucCBN zft^^%D!&E7HzClJd)vef+{e2}<3ls>UCJDO7Zw7<<%<*g0fVwWrZU=pD&$aBvX_PJ z7{DtP0Z9@qSBe~&IfueXt4cZl?I-~vMbTpU%laandPT$^}7^ zEjSv%XR=0c!k`VD;V!XX`9ma6Mh*OBadtgVQ4V+XCS+F{LFcX z9}azOA-{0THM}GL2EV2&e$7_=nm~R%0AHzPALxg506e)7kh=I4doa$gLN|FcMfhbz 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%0D0-}DuHtO9s05y&GzA85Yt~I4k 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⁡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

^M-dX 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

?KEmciCU4A_lmjtt(|1ww8r4ZHVH{LAUbkVx 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�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 a6XyAw;Qvkwybx+%)Yjg#x3dLPjQ<1lbTo+o literal 0 HcmV?d00001 diff --git a/server/PBMessageUtils.ts b/server/PBMessageUtils.ts new file mode 100644 index 0000000..c3875d6 --- /dev/null +++ b/server/PBMessageUtils.ts @@ -0,0 +1,387 @@ +///ts:import=ByteArray +import ByteArray = require('../../structure/ByteArray'); ///ts:import:generated +///ts:import=Endian +import Endian = require('../../structure/Endian'); ///ts:import:generated +// ///ts:import=PBMessage +///ts:import=Int64 +import Int64 = require('../../structure/Int64'); ///ts:import:generated + + +const LITTLE_ENDIAN = Endian.LITTLE_ENDIAN; +const TYPE_DOUBLE: number = 1; +const TYPE_FLOAT: number = 2; +const TYPE_INT64: number = 3; +const TYPE_UINT64: number = 4; +const TYPE_INT32: number = 5; +const TYPE_FIXED64: number = 6; +const TYPE_FIXED32: number = 7; +const TYPE_BOOL: number = 8; +const TYPE_STRING: number = 9; +const TYPE_GROUP: number = 10; +const TYPE_MESSAGE: number = 11; +const TYPE_BYTES: number = 12; +const TYPE_UINT32: number = 13; +const TYPE_ENUM: number = 14; +const TYPE_SFIXED32: number = 15; +const TYPE_SFIXED64: number = 16; +const TYPE_SINT32: number = 17; +const TYPE_SINT64: number = 18; +/** + 0 必有 属性名字 + 1 必有 required optional repeated + 2 必有 数据类型 + 3 可选 消息类型名称 + 4 可选 默认值 + */ +declare type MessageStruct = + [/**0 */string, /**1 */number,/**2 */number] | + [/**属性名字 */string, /**选项 */number,/**数据类型 */number,/**如果是子消息,消息名称 */string] | + [/**属性名字 */string, /**选项 */number,/**数据类型 */number,/**如果是子消息,消息名称 */string, /**默认值 */any] + +/** + * + * @author 3tion + * javascript 只会使用到 varint32->number string boolean + * + */ +class PBMessageUtils { + + /** + * + * 根据message名字得到的结构数据 + * @static + * @type + */ + public static structByName: { /**消息名称*/[index: string]: + { + /**索引 */ + [index: number]: + + MessageStruct + } + } = {}; + + /** + * + * 根据message名字绑定的类名,用于读取消息时创建的对象 + * 如果没有注册,则直接使用{}创建对象 + * @static + * @type {{ [index: string]: { new () } }} + */ + public static ctorByName: { [index: string]: { new () } } = {}; + + public static readFrom(msgType: string, bytes: ByteArray, len = -1): Object { + let ctor = PBMessageUtils.ctorByName[msgType]; + let msg = ctor ? new ctor : {}; + let afterLen = 0; + if (len > -1) { + afterLen = bytes.bytesAvailable - len; + } + let encode = PBMessageUtils.structByName[msgType]; + if (!encode) { + Logger.error(ErrorType.Program, `非法的通信类型[${msgType}],堆栈信息:${new Error().stack}`); + return; + } + //检查处理默认值 + for (let idx in encode) { + let body = encode[idx]; + //0 key + //1 required optional repeated + //2 数据类型 + //3 Message + //4 默认值 + if (4 in body) {//有默认值 + let key = body[0]; + //消息中没有对应key的数据,先赋值成默认值,等待后续处理 + if (!(key in msg)) { + msg[key] = body[4]; + } + } + } + while (bytes.bytesAvailable > afterLen) { + let tag = bytes.readVarint(); + if (tag == 0) + continue; + let idx = tag >>> 3; + let body = encode[idx]; + if (!body) { + Logger.error(ErrorType.Program, `读取消息类型为:${msgType},索引${idx}时数据出现错误,找不到对应的数据结构配置`); + return; + } + let name = body[0]; + let label = body[1]; + let type = body[2]; + let subMsgType = body[3]; + let value: Object; + if (label != 3 || (tag & 0b111) != 7) {//自定义 tag & 0b111 == 7 为 数组中 undefined的情况 + switch (type) { + case TYPE_DOUBLE: + value = bytes.readDouble(); + break; + case TYPE_FLOAT: + value = bytes.readFloat(); + break; + case TYPE_INT64: + case TYPE_UINT64: + case TYPE_SINT64: + value = bytes.readVarint64(); + break; + case TYPE_INT32: + case TYPE_SINT32: + value = PBMessageUtils.decodeZigzag32(bytes.readVarint()); + break; + case TYPE_UINT32: + case TYPE_ENUM: + value = bytes.readVarint(); + break; + case TYPE_FIXED64: + case TYPE_SFIXED64: + value = PBMessageUtils.readFix64(bytes);//理论上项目不使用 + break; + case TYPE_FIXED32: + value = bytes.readUnsignedInt(); + break; + case TYPE_BOOL: + value = PBMessageUtils.readBoolean(bytes); + break; + case TYPE_STRING: + value = PBMessageUtils.readString(bytes); + break; + case TYPE_GROUP://(protobuf 已弃用) + value = undefined; + Logger.error(ErrorType.Program, `读取消息类型为:${msgType},索引${idx}时数据出现已弃用的GROUP分组类型(${TYPE_GROUP})`); + break; + case TYPE_MESSAGE://消息 + value = PBMessageUtils.readMessage(bytes, subMsgType); + break; + case TYPE_BYTES: + value = PBMessageUtils.readBytes(bytes); + break; + case TYPE_SFIXED32: + value = bytes.readInt(); + break; + default: + value = PBMessageUtils.readValue(tag, bytes); + } + } + if (label == 3) {//repeated + let arr = msg[name]; + if (!arr) msg[name] = arr = []; + arr.push(value); + } + else { + msg[name] = value; + } + } + return msg; + } + + private static readValue(tag: number, bytes: ByteArray): any { + let wireType: number = tag & 7; + let value: any; + switch (wireType) { + case 0: //Varint int32, int64, uint32, uint64, sint32, sint64, bool, enum + value = bytes.readVarint(); + break; + case 2: //Length-delimi string, bytes, embedded messages, packed repeated fields + value = PBMessageUtils.readString(bytes); + break; + case 5: //32-bit fixed32, sfixed32, float + value = bytes.readInt(); + break; + case 1: //64-bit fixed64, sfixed64, double + value = bytes.readDouble(); + break; + //case 3://Start group Groups (deprecated) + //break; + //case 4://End group Groups (deprecated) + //break; + default: + Logger.error(ErrorType.Program, "protobuf的wireType未知"); + } + return value; + } + + + private static readFix64(bytes: ByteArray): Object { + let v: Int64 = new Int64; + v.low = bytes.readUnsignedInt(); + v.high = bytes.readUnsignedInt(); + return v; + } + + + private static readBoolean(bytes: ByteArray): Object { + return bytes.readVarint() > 0; + } + + private static readString(bytes: ByteArray): Object { + let blen: number = bytes.readVarint(); + if (blen > 0) { + return bytes.readUTFBytes(blen); + } + return ""; + } + + + /** + * + * 读取消息 + * @private + * @static + * @param {number} tag 标签 + * @param {ByteArray} bytes 被处理的字节数组 + * @param {string} subMsgType 类型标识 + * @returns {Object} + */ + private static readMessage(bytes: ByteArray, msgType: string): Object { + let blen: number = bytes.readVarint(); + return PBMessageUtils.readFrom(msgType, bytes, blen); + } + + private static readBytes(bytes: ByteArray): Object { + let blen: number = bytes.readVarint(); + return bytes.readByteArray(blen); + } + + public static writeTo(msg: Object, msgType: string, bytes?: ByteArray): ByteArray { + if (msg == undefined) { + return; + } + let messageEncode = PBMessageUtils.structByName[msgType];// msg.mMessageEncode; + if (!messageEncode) { + Logger.error(ErrorType.Program, `非法的通信类型[${msgType}],堆栈信息:${new Error().stack}`); + return; + } + if (!bytes) { + bytes = new ByteArray; + } + for (let numberStr in messageEncode) { + let num = +numberStr; + let body = messageEncode[num]; + let label = body[1]; + let name = body[0]; + if (label == 1 && !(name in msg)) { + continue; + } + let value = msg[name]; + if (value == undefined || value === body[4]/* 默认值 */) { + continue; + } + let type = body[2]; + let subMsgType = body[3]; + let wireType = PBMessageUtils.type2WireType(type); + let tag = (num << 3) | wireType; + if (label == 3) { + for (let key in value) { + let element = value[key]; + // 针对repeated中无法处理空的占位数组做处理,Protobuf 2 中不支持undefined进行占位 由于 wireType 只使用 0 1 2 3 4 5 + // 现在使用 7 作为 undefined 占位使用 + PBMessageUtils.writeElementTo(element, type, element == undefined ? ((num << 3) | 7) : tag, bytes, subMsgType); + } + } + else { + PBMessageUtils.writeElementTo(value, type, tag, bytes, subMsgType); + } + } + return bytes; + } + + public static writeElementTo(value: any, type: number, tag: number, bytes: ByteArray, subMsgType?: string): void { + bytes.writeVarint(tag); + switch (type) { + case TYPE_FIXED32: + bytes.writeUnsignedInt(value as number); + break; + case TYPE_SFIXED32: + bytes.writeInt(value as number); + break; + case TYPE_FLOAT: + bytes.writeFloat(value as number); + break; + case TYPE_DOUBLE: + case TYPE_FIXED64: + case TYPE_SFIXED64: + bytes.writeDouble(value as number); + break; + case TYPE_INT32: + case TYPE_SINT32: + bytes.writeVarint(PBMessageUtils.zigzag32(value as number)); + break; + case TYPE_ENUM: + case TYPE_UINT32: + bytes.writeVarint(value as number); + break; + case TYPE_INT64: + case TYPE_SINT64: + case TYPE_UINT64: + bytes.writeVarint64(value as Int64); + break; + case TYPE_BOOL: + bytes.writeVarint(value ? 1 : 0); + break; + case TYPE_STRING: + let length: number = Buffer.byteLength(value); + bytes.writeVarint(length); + bytes.writeUTFBytes(value); + break; + case TYPE_BYTES: + { + let temp: ByteArray = value as ByteArray; + let length = temp ? temp.length : 0; + bytes.writeVarint(length); + if (length > 0) { + bytes.writeBytes(temp, 0, length); + } + break; + } + case TYPE_MESSAGE: + { + let temp = PBMessageUtils.writeTo(value, subMsgType); + let length = temp ? temp.length : 0; + bytes.writeVarint(length); + if (length > 0) { + bytes.writeBytes(temp, 0, length); + } + break; + } + } + } + + + public static type2WireType(type: number): number { + switch (type) { + case TYPE_FIXED32: + case TYPE_SFIXED32: + case TYPE_FLOAT: + return 5; + case TYPE_DOUBLE: + case TYPE_FIXED64: + case TYPE_SFIXED64: + return 1; + case TYPE_INT32: + case TYPE_SINT32: + case TYPE_ENUM: + case TYPE_UINT32: + case TYPE_INT64: + case TYPE_SINT64: + case TYPE_UINT64: + case TYPE_BOOL: + return 0; + case TYPE_STRING: + case TYPE_MESSAGE: + case TYPE_BYTES: + return 2; + } + return -1; + } + public static zigzag32(n: number) { + return (n << 1) ^ (n >> 31); + } + + public static decodeZigzag32(n: number) { + return n >> 1 ^ (((n & 1) << 31) >> 31); + } +} + +export = PBMessageUtils; \ No newline at end of file diff --git a/src/CookieForPath.ts b/src/CookieForPath.ts new file mode 100644 index 0000000..9a44ada --- /dev/null +++ b/src/CookieForPath.ts @@ -0,0 +1,45 @@ + +const $g = (id) => { return document.getElementById(id) }; +const fs = nodeRequire("fs"); + +export default class CookieForPath { + private _key: string; + constructor(key: string) { + this._key = key; + } + public getPathCookie(id: string) { + let sPath = cookie.getCookie(this._key + id); + if (sPath) { + $g(id).value = sPath; + } + } + + public setPathCookie(id: string, checkExists = true, checkDirectory = true): string { + let v: string = $g(id).value; + v = v.trim(); + $g(id).value = v; + let flag = false; + if (v) { + if (checkExists) { + if (fs.existsSync(v)) { + let re = fs.statSync(v); + if (checkDirectory) { + if (re.isDirectory()) { + flag = true; + } + } + else { + flag = true; + } + } + } else { + flag = true; + } + if (flag) { + cookie.setCookie(this._key + id, v); + return v; + } + } + return undefined; + } +} \ No newline at end of file diff --git a/src/Extend.ts b/src/Extend.ts new file mode 100644 index 0000000..3370571 --- /dev/null +++ b/src/Extend.ts @@ -0,0 +1,204 @@ + +/** + * 文档是否加载好 + * + * @param {{ (e?: UIEvent): void }} fn (description) + */ +function ready(fn: { (e?: UIEvent): void }) { + if (document.readyState != 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } +} +/** + * 对数字进行补0操作 + * @param value 要补0的数值 + * @param length 要补的总长度 + * @return 补0之后的字符串 + */ +function zeroize(value: number | string, length: number = 2): string { + let str = "" + value; + let zeros = ""; + for (let i = 0, len = length - str.length; i < len; i++) { + zeros += "0"; + } + return zeros + str; +} +/****************************************扩展Object****************************************/ +interface Object { + /** + * 将数据拷贝到 to + * @param to 目标 + */ + copyto(to: Object); + /** + * 获取指定属性的描述,会查找当前数据和原型数据 + * @param property 指定的属性名字 + */ + getPropertyDescriptor(property: string): PropertyDescriptor; +} + +Object.defineProperties(Object.prototype, { + "getPropertyDescriptor": { + value: function (property: string): any { + var data = Object.getOwnPropertyDescriptor(this, property); + if (data) { + return data; + } + var prototype = Object.getPrototypeOf(this); + if (prototype) { + return prototype.getPropertyDescriptor(property); + } + return null; + }, + enumerable: false + }, + "copyto": { + value: function (to: Object) { + for (let p in this) { + var data: PropertyDescriptor = to.getPropertyDescriptor(p); + if (data && data.set) { + to[p] = this[p]; + } + } + }, + enumerable: false + } +}); + +/****************************************扩展Math****************************************/ +interface Math { + /** + * 让数值处于指定的最大值和最小值之间,低于最小值取最小值,高于最大值取最大值 + * @param value 要处理的数值 + * @param min 最小值 + * @param max 最大值 + */ + clamp: (value: number, min: number, max: number) => number; + +} + +Math.clamp = (value, min, max) => { + if (value < min) { + value = min; + } + if (value > max) { + value = max; + } + return value; +} + +/****************************************扩展Number********************************************/ +interface Number { + /** + * 对数字进行补0操作 + * @param length 要补的总长度 + * @return 补0之后的字符串 + */ + zeroize(length: number): string; +} + +Object.defineProperties(Number.prototype, { + "zeroize": { + value: function (length) { return zeroize(this, length) }, + enumerable: false + } +}); + +/****************************************扩展String****************************************/ +interface String { + /** + * 替换字符串中{0}{1}{2}{a} {b}这样的数据,用obj对应key替换,或者是数组中对应key的数据替换 + */ + substitute(...args): string; + /** + * 对数字进行补0操作 + * @param length 要补的总长度 + * @return 补0之后的字符串 + */ + zeroize(length: number): string; +} + + +Object.defineProperties(String.prototype, { + "zeroize": { + value: function (length) { return zeroize(this, length) }, + enumerable: false + }, + "substitute": { + value: function () { + var len = arguments.length; + if (len > 0) { + var obj; + if (len == 1) { + obj = arguments[0]; + if (typeof obj !== "object") { + obj = arguments; + } + } else { + obj = arguments; + } + + if ((obj instanceof Object) && !(obj instanceof RegExp)) { + return this.replace(/\{([^{}]+)\}/g, function (match, key) { + var value = obj[key]; + return (value !== undefined) ? '' + value : ''; + }); + } + } + return this; + }, + enumerable: false + } +}); +interface StringConstructor { + /** + * 对数字进行补0操作 + * @param value 要补0的数值 + * @param length 要补的总长度 + * @return 补0之后的字符串 + */ + zeroize: (value: number, length: number) => string; + +} + +String["zeroize"] = zeroize; + +/****************************************扩展Date****************************************/ + + +interface Date { + /** + * 格式化日期 + */ + format(mask: string): string; +} + +Object.defineProperties(Date.prototype, { + "format": { + value: function (mask) { + let d = this; + return mask.replace(/"[^"]*"|'[^']*'|(?:d{1,2}|m{1,2}|yy(?:yy)?|([hHMs])\1?)/g, function ($0) { + switch ($0) { + case "d": return d.getDate(); + case "dd": return zeroize(d.getDate()); + case "M": return d.getMonth() + 1; + case "MM": return zeroize(d.getMonth() + 1); + case "yy": return String(d.getFullYear()).substr(2); + case "yyyy": return d.getFullYear(); + case "h": return d.getHours() % 12 || 12; + case "hh": return zeroize(d.getHours() % 12 || 12); + case "H": return d.getHours(); + case "HH": return zeroize(d.getHours()); + case "m": return d.getMinutes(); + case "mm": return zeroize(d.getMinutes()); + case "s": return d.getSeconds(); + case "ss": return zeroize(d.getSeconds()); + default: return $0.substr(1, $0.length - 2); + } + }); + }, + enumerable: false + } +}); \ No newline at end of file diff --git a/src/FsExtra.ts b/src/FsExtra.ts new file mode 100644 index 0000000..05fba92 --- /dev/null +++ b/src/FsExtra.ts @@ -0,0 +1,53 @@ + +var nodeRequire = nodeRequire || require; +var FsExtra = (function () { + const fs = nodeRequire("fs"); + const path = nodeRequire("path"); + function mkdirs(paths: string[]) { + var len = paths.length; + if (len == 0) { + throw Error("路径无效" + paths); + } + var p = paths[0]; + if (!p) { + p = '/'; + } + + for (var i = 1, len = paths.length; i < len; i++) { + p = path.join(p, paths[i]); + if (fs.existsSync(p)) { + var ret = fs.statSync(p); + if (!ret.isDirectory()) { + throw Error("无法创建文件夹" + p); + } + } else { + fs.mkdirSync(p); + } + } + } + var xfs = { + /** + * 将文件夹拆分 + */ + split: function (filePath: string): string[] { + return path.normalize(filePath).split(path.sep); + }, + /** + * 同步创建文件夹 + */ + mkdirs: function (filePath: string) { + mkdirs(xfs.split(filePath)); + }, + /** + * 写文件 + */ + writeFileSync: function (filePath: string, data: string | Buffer, isCorver: boolean = true, options?: Object | string) { + var re = path.parse(filePath); + mkdirs(xfs.split(re.dir)); + if(isCorver || !fs.existsSync(filePath)){ + fs.writeFileSync(filePath, data, options); + } + } + } + return xfs; +} ()); diff --git a/src/PBMsgDictTemplate.ts b/src/PBMsgDictTemplate.ts new file mode 100644 index 0000000..64b6ba4 --- /dev/null +++ b/src/PBMsgDictTemplate.ts @@ -0,0 +1,63 @@ +import _fs = require("fs"); +const fs: typeof _fs = nodeRequire("fs"); +const regValue = /(([a-zA-Z_0-9]+)\s*:\s*{.*?}),?/g; +/** + * 服务端前缀 + */ +const serverPrefix = "export = {\n"; +/** + * 客户端前缀 + */ +const clientPrefix = "const PBMsgDict = {\n"; +/** + * + * 用于创建服务端用的消息字典的常量文件 + * @export + * @class PBMsgDictTemplate + */ +export default class PBMsgDictTemplate { + + public getKeys(file: string) + { + let valueDic: Map = new Map(); + if (!fs.existsSync(file) || !fs.statSync(file).isFile()) { + return valueDic; + } + let content = fs.readFileSync(file, "utf8"); + regValue.lastIndex = 0; + while (true) { + let res = regValue.exec(content); + if (res) { + valueDic.set(res[2], res[1]); + } else { + break; + } + } + return valueDic; + } + + public addToFile(file: string, dict: { [index: string]: string }, isServer: boolean) { + let valueDic: Map = this.getKeys(file); + return this.addContent(dict, valueDic, isServer); + } + + private addContent(dict: { [index: string]: string }, valueDic: Map, isServer: boolean) { + let added = false; + let code = isServer ? serverPrefix : clientPrefix; + let arr = []; + for (let k of valueDic.keys()) { + if (!(k in dict)) { + arr.push([k, "\t" + valueDic.get(k)]); + } + } + //附加字典中的内容 + for (let k in dict) { + arr.push([k, `\t${k}: ${dict[k]}`]); + } + arr.sort((a, b) => a > b ? 1 : -1); + arr.map((item, idx) => arr[idx] = item[1]); + code += arr.join(",\n"); + code += "\n}"; + return code; + } +} diff --git a/src/ServiceNameTemplate.ts b/src/ServiceNameTemplate.ts new file mode 100644 index 0000000..cbd5839 --- /dev/null +++ b/src/ServiceNameTemplate.ts @@ -0,0 +1,55 @@ +import _fs = require("fs"); +const fs: typeof _fs = nodeRequire("fs"); +/** + * 客户端前缀 + */ +const clientPrefix = "const enum ServiceName {\n\t"; + +/** + * 用于创建服务名字的常量文件 + */ +export default class ServiceNameTemplate +{ + public addToFile(file: string, serviceName: string) + { + let valueDic: string[] = []; + if (!fs.existsSync(file) || !fs.statSync(file).isFile()) { + valueDic = ["$ = 0",serviceName]; + return this.addContent(serviceName, valueDic); + } + let temp = fs.readFileSync(file, "utf8"); + let content = temp; + content = content.substring(clientPrefix.length, content.lastIndexOf("}")); + content = content.replace(/\r\t/g, "").replace(/\n/g, "").replace(/\t/g, "").replace(/\r/g, ""); + valueDic = content.split(","); + console.log("valueDic", valueDic); + if (valueDic.indexOf(serviceName) == -1){ + valueDic.push(serviceName); + return this.addContent(serviceName, valueDic); + } + return temp; + } + + private addContent(serviceName: string, valueDic: string[]) { + let added = false; + let code = clientPrefix; + //附加字典中的内容 + valueDic.sort((a: string, b: string)=>{ + let l = a.length > b.length ? b.length: a.length; + if (a.charAt(0) == "$") return -1; + if (b.charAt(0) == "$") return 1; + for (let i = 0; i < l; i++) + { + let ai = a.charAt(i).toLocaleLowerCase().charCodeAt(0); + let bi = b.charAt(i).toLocaleLowerCase().charCodeAt(0); + if (ai > bi) return 1; + else if (ai < bi) return -1; + } + return l == a.length ? -1 : 1; + }); + code += valueDic.join(",\r\t"); + code += "\n}"; + console.log("code=====", code); + return code; + } +} \ No newline at end of file diff --git a/src/app2.ts b/src/app2.ts new file mode 100644 index 0000000..c7e727c --- /dev/null +++ b/src/app2.ts @@ -0,0 +1,856 @@ +"use strict"; +import * as pbjs from "protobuf"; +import ServiceNameTemplate from "ServiceNameTemplate"; +import PBMsgDictTemplate from "PBMsgDictTemplate"; +import CookieForPath from "CookieForPath"; + +const fs = nodeRequire("fs"); +const path = nodeRequire("path"); +const http = nodeRequire("http"); +const process = nodeRequire('child_process'); +const clipboard = nodeRequire('electron').clipboard; + +const $g = (id) => { return document.getElementById(id) }; +/** + * 输出日志 + */ +function log(msg: string) { + let txtLog = $g("txtLog"); + if (txtLog) { + txtLog.innerHTML += `[${new Date().format("HH:mm:ss")}] ${msg}
`; + } +} + +/** + * 输出错误 + */ +function error(msg: string) { + log(`${msg}`); +} + +const Options = { + /** + * 服务名称 + */ + ServiceName: "(service)", + /** + * 客户端模块 + */ + ClientModule: "(cmodule)", + /** + * 客户端路径,和前缀路径拼接得到文件生成路径地址 + */ + ClientPath: "(cpath)", + /** + * 统一协议号请求间隔时间 + */ + Limit: "(limit)", +} + +interface GlobalCfg +{ + /** + * 客户端项目路径 + */ + cprefix: string; + /** + * 生成时,使用的wiki地址 + */ + url?: string; + /** + * ServiceName常量文件的文件相对路径 + */ + serviceName?: string; + /** + * PB消息字典的文件相对路径 + */ + pBMsgDictName?: string; +} + +const TYPE_DOUBLE: number = 1; +const TYPE_FLOAT: number = 2; +const TYPE_INT64: number = 3; +const TYPE_UINT64: number = 4; +const TYPE_INT32: number = 5; +const TYPE_FIXED64: number = 6; +const TYPE_FIXED32: number = 7; +const TYPE_BOOL: number = 8; +const TYPE_STRING: number = 9; +const TYPE_GROUP: number = 10; +const TYPE_MESSAGE: number = 11; +const TYPE_BYTES: number = 12; +const TYPE_UINT32: number = 13; +const TYPE_ENUM: number = 14; +const TYPE_SFIXED32: number = 15; +const TYPE_SFIXED64: number = 16; +const TYPE_SINT32: number = 17; +const TYPE_SINT64: number = 18; + +const type2number = (function () +{ + let t = {}; + t["double"] = TYPE_DOUBLE; + t["float"] = TYPE_FLOAT; + t["int64"] = TYPE_INT64; + t["uint64"] = TYPE_UINT64; + t["int32"] = TYPE_INT32; + t["fixed64"] = TYPE_FIXED64; + t["fixed32"] = TYPE_FIXED32; + t["bool"] = TYPE_BOOL; + t["string"] = TYPE_STRING; + t["group"] = TYPE_GROUP; + t["message"] = TYPE_MESSAGE; + t["bytes"] = TYPE_BYTES; + t["uint32"] = TYPE_UINT32; + t["enum"] = TYPE_ENUM; + t["sfixed32"] = TYPE_SFIXED32; + t["sfixed64"] = TYPE_SFIXED64; + t["sint32"] = TYPE_SINT32; + t["sint64"] = TYPE_SINT64; + return t; +})(); + +const rule2number = +{ + "optional": 1, + "required": 2, + "repeated": 3 +}; + +const Type_Null = 0; +const Type_Boolean = 1; +const Type_String = 2; +const Type_Bytes = 4; +const Type_Double = 5; +const Type_Int32 = 6; +const Type_Uint32 = 7; + +function field2type(field: pbjs.ProtoField): [string, boolean, string | number, boolean] +{ + let type = field.type; + let isMsg = false; + let ttype: string | number; + switch (type) { + case "int32": + case "sint32": + case "sfixed32": + type = "number"; + ttype = Type_Int32; + break; + case "enum": + case "fixed32": + case "uint32": + type = "number"; + ttype = Type_Uint32; + case "int64": + case "uint64": + case "sint64": + case "double": + case "float": + type = "number"; + ttype = Type_Double; + break; + case "bool": + type = "boolean"; + ttype = Type_Boolean; + break; + case "bytes": + type = "Byte"; + ttype = Type_Bytes; + break; + case "fixed64": + case "sfixed64": + // 项目理论上不使用 + type = "Int64"; + break; + case "message": + type = field.type; + isMsg = true; + ttype = `"${type}"`; + break; + case "string": + type = "string"; + ttype = Type_String; + break; + default: + type = field.type; + ttype = `"${type}"`; + break; + } + if (field.rule == "repeated") { // 数组赋值 + return [type + "[]", isMsg, ttype, true]; + } + return [type, isMsg, ttype, false]; +} + + +function getVariable(field: pbjs.ProtoField, variables: string[]): FieldData +{ + let comment = field.comment;// 调整protobuf.js代码 让其记录注释 + let fname = field.name; + let def = "";//改成不赋值默认值,这样typescript->js能减少字符串输出,将默认值记入mMessageEncode,也方便传输时做判断 + let [fieldType, isMsg, tType, repeated] = field2type(field); + if (field.rule == "required") { // 必选参数 + variables.push(`/**`); + variables.push(` * ${comment}`); + variables.push(` */`); + variables.push(`${fname}: ${fieldType};`); + } else { + variables.push(`/**`); + variables.push(` * 可选参数 ${comment}`); + variables.push(` */`); + variables.push(`${fname}?: ${fieldType};`); + } + return { fieldName: fname, fieldType: fieldType, isMsg: isMsg, tType: tType, repeated: repeated }; +} + +declare type FieldData = +{ + /** + * 字段名称 + */ + fieldName: string; + /** + * 字段类型 + */ + fieldType: string; + /** + * 是否为消息类型 + */ + isMsg: boolean; + /** + * 用于注册typeScript的类型 + */ + tType: number | string; + /** + * 是否为repeated + */ + repeated: boolean; +} + +function parseProto(proto: string, gcfg?: GlobalCfg) +{ + let url: string = gcfg ? gcfg.url : ""; + url = url || "[文本框中,复制粘贴]"; + let cprefix = gcfg ? gcfg.cprefix || "" : ""; + let serviceName = gcfg ? gcfg.serviceName : null; + let PBMsgDictName = gcfg ? gcfg.pBMsgDictName : null; + let p = pbjs.DotProto.Parser.parse(proto); + let options = p.options; + let fcpath: string = options[Options.ClientPath]; + let fcmodule: string = options[Options.ClientModule]; + let service: string = options[Options.ServiceName]; + let now = new Date().format("yyyy-MM-dd HH:mm:ss"); + let idx = 0; + let hasService = false; + let msgEncDict: { [index: string]: string } = {}; + var msgTypeNameMap = {}; + // 客户端和服务端的Service收发数组 + let cSends: string[] = [], cRecvs: string[] = [], cRegs: string[] = [], sSends: string[] = [], sRecvs: string[] = [], sRegs: string[] = []; + + let pbMsgDictTemplate = new PBMsgDictTemplate(); + let pbMsgFilePath: string; + let pbKeysDict: Map = new Map(); + if (PBMsgDictName) { + pbMsgFilePath = path.join(cprefix, PBMsgDictName); + pbKeysDict = pbMsgDictTemplate.getKeys(pbMsgFilePath); + } + + for (let msg of p.messages) { + if (msg.name.indexOf('S2C') > 0 || msg.name.indexOf('C2S') > 0) { + var key = msg.name.substring(0, msg.name.length - 8); + if (msgTypeNameMap[key]) { + msgTypeNameMap[key] = msgTypeNameMap[key] + 1; + } + else { + msgTypeNameMap[key] = 1; + } + } + } + for (let msg of p.messages) { + // 所有的变量 + // 一行一个 + let variables: string[] = []; + let messageEncodes: string[] = []; + // 如果有消息体的同名 Option,覆盖 + let options = msg.options; + let cpath: string = options[Options.ClientPath] || fcpath; + let cmodule: string = options[Options.ClientModule] || fcmodule; + let limit: any = options[Options.Limit]; + var comment = msg.comment; + let cmds: number[] = []; + let requireds: FieldData[] = []; + let repeateds: FieldData[] = []; + let optionals: FieldData[] = []; + + if (comment.indexOf('=') > 0) { + if (comment.indexOf('|') > 0) { + cmds = [comment.split('|')[0].split('=')[1]]; + } + else { + cmds = [comment.split('=')[1]]; + } + } + + let fieldids = [0]; + let paramCount = 0; + for (let field of msg.fields) + { + let rule: string = field.rule; + let fnumber = type2number[field.type]; + let MType = ""; + let def = field.options.default; + if (def !== undefined) { + let t = typeof def; + if (t === "string") { + def = `"${def}"`; + } else if (t === "object") {//不支持对象类型默认值 + def = undefined; + } + } + if (fnumber == undefined) {// message类型不支持默认值 + fnumber = 11;// message + MType = `, "${field.type}"`; + } else if (def !== undefined) { + MType = `, , ${def}`; + } + fieldids.push(~~field.id); + messageEncodes.push(`${field.id}: ["${field.name}", ${rule2number[rule]}, ${fnumber}${MType}]`); + let data = getVariable(field, variables); + if (rule == "required") { + requireds.push(data); + } else if (rule == "repeated") { + repeateds.push(data); + } else { + optionals.push(data); + } + } + + fieldids.sort((a,b)=>{return a - b}); + for (let i=0, l=fieldids.length-1; i < l; i++){ + let a = fieldids[i]; + let b = fieldids[i+1]; + if (b - a != 1){ + alert(`${msg.name} 中 value 可能定义有错误。顺序为从1开始,或未连续。此错误可能导致前后端协议值解析不正确`); + break; + } + } + + // 根据CMD 生成通信代码 + // 生成代码 + let className: string = msg.name; + let classNameFileName = path.join(cprefix, cpath, className + ".ts"); + let isExistsSync = fs.existsSync(classNameFileName); + if ((!isExistsSync && pbKeysDict.has(className))){ + alert(`少年,${className} 已经在其他功能模块中存在了,请更换一个名字吧,当前文件未保存`); + continue; + } + if (msgEncDict[className]){ + alert(`少年,好粗心啊,当前wiki地址中 ${className} 重名了,当前文件未保存`); + continue; + } + + msgEncDict[className] = `{ ${messageEncodes.join(", ")} }`; + var typeVar = ''; + if (className.indexOf('S2C') > 0 || className.indexOf('C2S') > 0) { + typeVar = className.substr(-7, 3); + } + let type = typeVar; + let handlerName = className[0].toLowerCase() + className.substring(1, className.length - 4); + let p = requireds.concat(repeateds, optionals); + hasService = true; + if (type == "C2S") { // client to server + makeCSendFunction(p, className, handlerName, cSends, cmds[0], limit); + // makeReciveFunc(className, handlerName + s2c, sRegs, sRecvs, cmds, p, true); + } else if (type == "S2C") { // server to client + makeReciveFunc(className, handlerName, cRegs, cRecvs, cmds, p, false); + // if (messageEncodes.length == 1){ + // if (messageEncodes[0].indexOf("Code") == -1){ + // alert(`警告:${className} 协议接受服务器一个参数,可能导致前端解析不正确,随便增加一个参数吧`); + // } + // } + } else { + makeCSendFunction(p, className, handlerName + "_C2S", cSends, cmds[0], limit); + makeReciveFunc(className, handlerName + "_S2C", cRegs, cRecvs, cmds, p, false); + } + let fleng = msg.fields.length; + let clientCode = getClientCode(now, url, className, cmodule, variables); + if (cprefix) {let outpath = path.join(cprefix, cpath, className + ".ts"); + let cdir = path.join(cprefix, cpath); + let out = writeFile(className + ".ts", cdir, clientCode); + if (out) { + log(`成功生成代码,${out}`); + } + } + } + + //处理PBMsgDict文件 + if (pbMsgFilePath) { + let crout = pbMsgDictTemplate.addToFile(pbMsgFilePath, msgEncDict, false); + let out = writeFile(PBMsgDictName, cprefix, crout); + if (out) { + log(`生成PBMsgDict代码成功,${out}`); + } + } + + if (service && hasService) { + //预处理Service + //检查是否有客户端Service文件 + let cdir = path.join(cprefix, fcpath); + let sfileName = service + ".ts"; + let cpath = path.join(cdir, sfileName); + let ccode = getCServiceCode(now, url, service, fcmodule, cSends, cRecvs, cRegs, getManualCodeInfo(cpath)); + //检查是否有服务端Service文件 + // 创建客户端Service + if (cprefix) { + let out = writeFile(sfileName, cdir, ccode); + if (out) { + log(`${service}代码成功生成,${out}`); + } + } + // 创建ServiceName常量文件 + if (serviceName) { + let ctemp = new ServiceNameTemplate(); + let cnPath = path.join(cprefix, serviceName); + let code = ctemp.addToFile(cnPath, service); + let out = writeFile(serviceName, cprefix, code); + if (out) { + log(`ServiceName代码成功生成,${out}`); + } + } + } +} + +function makeCSendFunction(fnames: FieldData[], className: string, handlerName: string, sends: string[], cmd: number, limit?: number) { + let len = fnames.length; + let time = limit ? ", "+ limit : ""; + if (len == 0) { //没有参数 + sends.push(`public ${handlerName}() {`); + sends.push(`\tthis.send(${cmd}, null, ""${time})`); + } else { + sends.push(`public ${handlerName}(_${className}: ${className}) {`); + sends.push(`\tthis.send(${cmd}, _${className}, "${className}"${time});`); + } + sends.push(`}`) +} + +function makeReciveFunc(className: string, handlerName: string, regs: string[], recvs: string[], cmds: number[], fnames: FieldData[], isServer: boolean) { + let len = fnames.length; + let strCMD = cmds.join(","); + var p: FieldData; + if (len == 0) {//为null + regs.push(`self.regMsg(${Type_Null}, ${strCMD});`); + }else { + regs.push(`self.regMsg("${className}", ${strCMD});`); + } + regs.push(`self.regHandler(self.${handlerName}, ${strCMD});`); + let pp = isServer ? "async " : ""; + recvs.push(`protected ${handlerName} = ${pp}(data:NetData) => {`); + recvs.push(`\tlet msg:${className} = <${className}>data.data;`); + recvs.push(`/*|$${handlerName}|*/`); + recvs.push(`}`); +} + +function writeFile(fname: string, directory: string, data: string, corver = true): string { + let outpath = path.join(directory, fname); + try { + FsExtra.writeFileSync(outpath, data, corver); + } catch (e) { + error(`写入文件时失败,路径:"${directory}",文件名:"${fname}",错误信息:${e.message}\n${e.stack}`); + return null; + } + return outpath; +} + +function getClientCode(createTime: string, url: string, className: string, module: string, variables: string[]) +{ + // let clientTemplatePath = "template/msg.template"//path.join("D:/workspace/bitbucket/miniprojects/h5workspace/ProtoTools/dist/", "template", "msg.template"); + // if (fs.existsSync(clientTemplatePath)) { + //读取文件内容 + let content = clientMsgTemplate;//fs.readFileSync(clientTemplatePath, "utf8"); + + content = content.replace(/\{path\}/g, url); + content = content.replace(/\{createTime\}/g, createTime); + content = content.replace(/\{className\}/g, className); + content = content.replace(/\{vars\}/g, variables.join(`\n `)); + + return content; + // } + // return ""; +} + +function getCServiceCode(createTime: string, url: string, className: string, module: string, sends: string[], recvs: string[], regs: string[], cinfo: { [index: string]: string }) +{ + // let clientTemplatePath = "template/client.template"; + // if (fs.existsSync(clientTemplatePath)) { + //读取文件内容 + let content = clientServiceTemplate;//fs.readFileSync(clientTemplatePath, "utf8"); + + let area1 = genManualAreaCode("$area1", cinfo); + let area2 = genManualAreaCode("$area2", cinfo); + let area3 = genManualAreaCode("$area3", cinfo); + let onRegister = genManualAreaCode("$onRegister", cinfo); + + content = content.replace(/\{path\}/g, url); + content = content.replace(/\{createTime\}/g, createTime); + content = content.replace(/\{className\}/g, className); + content = content.replace(/\{c2sfunctions\}/g, sends.join(`\n\t\t`)); + content = content.replace(/\{s2cfunctions\}/g, parseRecvs(recvs, cinfo)); + content = content.replace(/\{onRegister\}/g, onRegister); + content = content.replace(/\{regMsg\}/g, regs.join(`\n\t\t\t`)); + content = content.replace(/\{area1\}/g, area1); + content = content.replace(/\{area2\}/g, area2); + content = content.replace(/\{area3\}/g, area3); + + return content; + // } + // return "the template file load failed"; +} + +function parseRecvs(recvs: string[], cinfo) +{ + return recvs.map(recv => { + return recv.replace(/[/][*][|]([$_a-zA-Z0-9]+)[|][*][/]/, (rep, hander) => { + console.log(rep, hander); + return genManualAreaCode(hander, cinfo); + }) + }).join(`\n\t\t`); +} + +/** + * 获取http数据 + */ +function getHttpData(url: string, gcfg?: GlobalCfg) +{ + let promise = new Promise((resolve, reject) => { + let req = http.get(url, res => { + let size = 0; + let chunks: Buffer[] = []; + res.on("data", (chunk: Buffer) => { + size += chunk.length; + chunks.push(chunk); + }); + res.on("end", () => { + let data = Buffer.concat(chunks, size); + resolve({ content: data.toString("utf8"), gcfg: gcfg, url: url }); + }); + }); + req.on("error", (err) => { + reject(err.message); + }); + }); + return promise; +} + +/** + * 提取Proto数据 + */ +function getProtoData(data: { content: string, gcfg?: GlobalCfg, url: string }) +{ + let content = escapeHTML(data.content); + // 从HTML流中截取 message {} 或者 option (xxxx) = "xxxx" 这样的数据 + let reg: RegExp = /

([^>]*?message[ ]+[A-Z][a-zA-Z0-9_$]*[ ]*[{][^]*?[}][^]*?|[^>]*?option[ ]+[(]\w+[)][ ]*=[ ]*".*?";[^]*?)<\/pre>/mg;
+	let proto = "";
+	while (true) {
+		let result = reg.exec(content);
+		if (result) {
+			proto += result[1] + "\n";
+		} else {
+			break;
+		}
+	}
+	proto =proto.substring(proto.indexOf("option "));
+	$g("txtProto").value = proto;
+	parseProto(proto, data.gcfg);
+}
+
+const escChars = { "<": "<", ">": ">", """: "\"", "'": "\'", "&": "&", " ": " ", "
": "\n", "'": "\'", "\\n": "\n"};
+function escapeHTML(content: string) {
+	return content.replace(/<|>|"|'|&| |
/g, substring => {
+		return escChars[substring];
+	});
+}
+
+function escapeString(content: string) {
+	return content.replace(/<|>|"|'|&| |
|'|\\n/g, substring => {
+		return escChars[substring];
+	});
+}
+
+function getProtoFromHttp(url: string, gcfg?: GlobalCfg) 
+{
+	let promise = getHttpData(url, gcfg);
+	promise.then(getProtoData, error).catch(error);
+}
+
+function getUrlErrorCode(data) {
+	let clientConst = [];
+	//先尝试读取客户端的常量文件
+	const FileName = "MsgConst.ts";
+	let gcfg = data.gcfg;
+	let tsDict:{[title:string]: {code: string, desc: string}[]} = {};
+	let url;
+	let titles = [];
+	let content = escapeHTML(data.content);
+	let reg = /(.*?)[|](.*?)<\/h\d+>\s+\s+([\s\S]*?)<\/pre>/mg;
+	let titleComments = {};
+	let retdata: {[code: string]: string} = {};
+	const tempChars = { "\\n": "\n"};
+
+	while (true) {
+		let result = reg.exec(content);
+		if (result) {
+			let [,titleComment, title, code] = result;
+			if (code) {
+				if (!~titles.indexOf(title)) {
+					titles.push(title);
+					titleComments[title] = titleComment;
+					let codes:{code: string, desc: string}[] = [];
+					tsDict[title] = codes;
+					let data = code.replace(/\r/g, "").split(/\n/g);
+					data.forEach(str=>{
+						let temp = str.split(/\s+/);
+						let c = temp[0];
+						let d = escapeString(str.substring(c.length + 1));
+						if (c){
+							if (isNaN(Number(c))){
+								error(`【定义错误】${title}中Code码key[${c}]必须是数字`)
+							}
+							else if (retdata[c]) {
+								error(`【定义重复】${title}中Code码key[${c}]已经定义`)
+							}else{
+								retdata[c] = d;
+								codes.push({code: c, desc: d});
+							}
+						}
+					})
+				}
+			}
+		}
+		else {
+			break;
+		}
+	}
+	titles.forEach(title => {
+		let map = tsDict[title];
+		if (map.length > 0) {
+			clientConst.push(`/** ${titleComments[title]} */`);
+			clientConst.push(`const enum $${title} {`);
+			map.forEach(item => {
+				clientConst.push(`\t/** ${item.desc} */`);
+				clientConst.push(`\t$${item.code} = ${item.code},`);
+			});
+			clientConst.push(`}`);
+		}
+	});
+	let clientCode = clientConst.join("\n");
+	if (gcfg.cprefix) {
+		url = path.join(gcfg.cprefix, FileName);
+		fs.writeFileSync(url, clientCode);
+	} else {
+		error(`没有【客户端项目根目录(src)】地址,保存客户端代码失败`);
+	}
+	console.log(clientCode);
+	log(`开始生成errorcode`);
+	let txtLocalCodePath = cookieForPath.setPathCookie("txtLocalCodePath", false, false);
+	if (txtLocalCodePath){
+		let codedata = JSON.stringify(retdata);
+		url = path.join(txtLocalCodePath, "code.json");
+		fs.writeFileSync(url, codedata);
+		// url = path.join(txtLocalCodePath, "code.js");
+		// fs.writeFileSync(url, "var $errorcode =" + codedata);
+	}
+	else {
+		error("保存code.js数据文件失败,没有填写存储地址");
+	}
+	log(`生成errorcode结束`);
+}
+
+const cookieForPath = new CookieForPath("protocal_history_");
+
+ready(() => 
+{
+	cookieForPath.getPathCookie("txtClientPath");
+	cookieForPath.getPathCookie("txtServerServiceNamePath");
+	cookieForPath.getPathCookie("txtPBMsgDictName");
+	cookieForPath.getPathCookie("txtUrl");
+	cookieForPath.getPathCookie("txtWikiCodePath");
+	cookieForPath.getPathCookie("txtLocalCodePath");
+	$g("btnGen").addEventListener("click", (ev) => {
+		let cPath = cookieForPath.setPathCookie("txtClientPath");
+		let serviceName = cookieForPath.setPathCookie("txtServerServiceNamePath", false, false) || "ServiceName.ts";
+		let pBMsgDictName = cookieForPath.setPathCookie("txtPBMsgDictName", false, false) || "PBMsgDict.ts";
+		let url: string = cookieForPath.setPathCookie("txtUrl", false, false);
+		url = url ? url.trim() : "";
+		if (!url){
+			error("请输入wiki protocol地址");
+			return;
+		}
+		// 检查url路径
+		let gcfg: GlobalCfg = { cprefix: cPath, url: url, serviceName: serviceName, pBMsgDictName: pBMsgDictName };
+		getProtoFromHttp(url, gcfg);
+	});
+	$g("btnCode").addEventListener("click", (ev) => {
+		let cPath = cookieForPath.setPathCookie("txtClientPath");
+		let txtWikiCodePath = cookieForPath.setPathCookie("txtWikiCodePath", false, false);
+		let txtLocalCodePath = cookieForPath.setPathCookie("txtLocalCodePath", false, false);
+		if (!txtWikiCodePath) {
+			error(`code wiki url 不能为空`);
+			return;
+		}
+		if (!txtLocalCodePath) {
+			error(`code 存储 url 不能为空`);
+			return ;
+		}
+		// if (!cPath) {
+		// 	error(`code 存储 url 为空, 没有保存客户端代码文件`);
+		// }
+		// 检查url路径
+		let gcfg: GlobalCfg = { cprefix: cPath };
+		let urlErrorPromise = getHttpData(txtWikiCodePath, gcfg);
+		urlErrorPromise.then(getUrlErrorCode, error).catch(error);
+	})
+});
+
+/**
+ * 创建一个代码区
+ */
+// function createContent(parent: HTMLElement, filename: string, idx: number, ccode: string) {
+// 	let pane = document.createElement("div");
+// 	pane.style.border = "#000 solid 1px";
+// 	let idCopyClient = "btnCopyClient" + idx;
+// 	let template = `
${filename}
+//
+// 客户端代码: +// +//
` +// pane.innerHTML = template; +// parent.appendChild(pane); +// $g(idCopyClient).addEventListener("click", e => { +// clipboard.writeText(ccode); +// }); +// } + +/** 手写代码的默认提示 */ +const ManualCodeDefaultComment = +{ + /** 这里手写类上方的内容 */ + $area1: "@这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@", + /** 这里手写类里面的内容 */ + $area2: "@这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@", + /** 这里手写类下的内容 */ + $area3: "@这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@", + /** 这里手写onRegister中内容 */ + $onRegister: "@这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@", + /** 这里手写方法中的内容 */ + $handler: "@这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@", +} + +/** + * 生成手动代码区域的文本 + */ +function genManualAreaCode(key: string, cinfo: { [index: string]: string }) +{ + let manual = cinfo[key]; + let tab = "\t"; + let btab = ""; + let desc = ManualCodeDefaultComment[key] || ManualCodeDefaultComment.$handler; + if (key in ManualCodeDefaultComment) { + if (key == "$onRegister") tab = "\t\t\t"; + else if (key == "$area2") tab = "\t\t"; + } else { + tab = "\t\t\t"; + btab = "\t"; + } + return `${btab}/*-*begin ${key} ${desc}*-*/ +${tab}${manual ? manual : ""} +${tab}/*-*end ${key}*-*/` +} + +/** + * 获取手动写的代码信息 + */ +function getManualCodeInfo(file: string) { + let dict: { [index: string]: string } = {}; + if (file && fs.existsSync(file)) { + //读取文件内容 + let content = fs.readFileSync(file, "utf8"); + //找到手写内容 + let reg = /[/][*]-[*]begin[ ]([$_a-zA-Z0-9]+)[ ](.*?)[*]-[*][/]([^]*?)[/][*]-[*]end[ ]([$_a-zA-Z0-9]+)[*]-[*][/]/g + console.log("*****************************start"); + while (true) { + let result = reg.exec(content); + if (result) { + let key = result[1]; + let manual = result[3].trim(); + console.log(key, manual); + if (!manual) {//没有注释 + continue; + } + dict[key] = manual; + } else { + break; + } + } + } + console.log("================================="); + console.log(dict); + console.log("================================="); + return dict; +} + +////////////////////////template/////////////////// + +var clientServiceTemplate = ` +/** + * 来源: {path} + */ +module giant.chuanqi +{ + {area1} + + export class {className} extends Service + { + constructor() + { + super(ServiceName.{className}); + } + + onRegister() + { + super.onRegister(); + + let self = this; + + {regMsg} + + {onRegister} + } + + {c2sfunctions} + + {s2cfunctions} + + {area2} + + } + + {area3} + +} +`; + +var clientMsgTemplate = ` +/** + * 源地址: {path} + */ +module giant.chuanqi +{ + export interface {className} + { + + {vars} + + } +} +`; \ No newline at end of file diff --git a/src/protobuf.js b/src/protobuf.js new file mode 100644 index 0000000..6e42bbc --- /dev/null +++ b/src/protobuf.js @@ -0,0 +1,5361 @@ +/* + Copyright 2013 Daniel Wirtz + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +/** + * @license protobuf.js (c) 2013 Daniel Wirtz + * Released under the Apache License, Version 2.0 + * see: https://github.com/dcodeIO/protobuf.js for details + */ +(function(global, factory) { + + /* AMD */ + if (typeof define === 'function' && define["amd"]) + define(["bytebuffer"], factory); + /* CommonJS */ + else if (typeof require === "function" && typeof module === "object" && module && module["exports"]) + module["exports"] = factory(require("bytebuffer"), true); + /* Global */ + else + (global["dcodeIO"] = global["dcodeIO"] || {})["ProtoBuf"] = factory(global["dcodeIO"]["ByteBuffer"]); + +})(this, function(ByteBuffer, isCommonJS) { + "use strict"; + + /** + * The ProtoBuf namespace. + * @exports ProtoBuf + * @namespace + * @expose + */ + var ProtoBuf = {}; + + /** + * @type {!function(new: ByteBuffer, ...[*])} + * @expose + */ + ProtoBuf.ByteBuffer = ByteBuffer; + + /** + * @type {?function(new: Long, ...[*])} + * @expose + */ + ProtoBuf.Long = ByteBuffer.Long || null; + + /** + * ProtoBuf.js version. + * @type {string} + * @const + * @expose + */ + ProtoBuf.VERSION = "5.0.1"; + + /** + * Wire types. + * @type {Object.} + * @const + * @expose + */ + ProtoBuf.WIRE_TYPES = {}; + + /** + * Varint wire type. + * @type {number} + * @expose + */ + ProtoBuf.WIRE_TYPES.VARINT = 0; + + /** + * Fixed 64 bits wire type. + * @type {number} + * @const + * @expose + */ + ProtoBuf.WIRE_TYPES.BITS64 = 1; + + /** + * Length delimited wire type. + * @type {number} + * @const + * @expose + */ + ProtoBuf.WIRE_TYPES.LDELIM = 2; + + /** + * Start group wire type. + * @type {number} + * @const + * @expose + */ + ProtoBuf.WIRE_TYPES.STARTGROUP = 3; + + /** + * End group wire type. + * @type {number} + * @const + * @expose + */ + ProtoBuf.WIRE_TYPES.ENDGROUP = 4; + + /** + * Fixed 32 bits wire type. + * @type {number} + * @const + * @expose + */ + ProtoBuf.WIRE_TYPES.BITS32 = 5; + + /** + * Packable wire types. + * @type {!Array.} + * @const + * @expose + */ + ProtoBuf.PACKABLE_WIRE_TYPES = [ + ProtoBuf.WIRE_TYPES.VARINT, + ProtoBuf.WIRE_TYPES.BITS64, + ProtoBuf.WIRE_TYPES.BITS32 + ]; + + /** + * Types. + * @dict + * @type {!Object.} + * @const + * @expose + */ + ProtoBuf.TYPES = { + // According to the protobuf spec. + "int32": { + name: "int32", + wireType: ProtoBuf.WIRE_TYPES.VARINT, + defaultValue: 0 + }, + "uint32": { + name: "uint32", + wireType: ProtoBuf.WIRE_TYPES.VARINT, + defaultValue: 0 + }, + "sint32": { + name: "sint32", + wireType: ProtoBuf.WIRE_TYPES.VARINT, + defaultValue: 0 + }, + "int64": { + name: "int64", + wireType: ProtoBuf.WIRE_TYPES.VARINT, + defaultValue: ProtoBuf.Long ? ProtoBuf.Long.ZERO : undefined + }, + "uint64": { + name: "uint64", + wireType: ProtoBuf.WIRE_TYPES.VARINT, + defaultValue: ProtoBuf.Long ? ProtoBuf.Long.UZERO : undefined + }, + "sint64": { + name: "sint64", + wireType: ProtoBuf.WIRE_TYPES.VARINT, + defaultValue: ProtoBuf.Long ? ProtoBuf.Long.ZERO : undefined + }, + "bool": { + name: "bool", + wireType: ProtoBuf.WIRE_TYPES.VARINT, + defaultValue: false + }, + "double": { + name: "double", + wireType: ProtoBuf.WIRE_TYPES.BITS64, + defaultValue: 0 + }, + "string": { + name: "string", + wireType: ProtoBuf.WIRE_TYPES.LDELIM, + defaultValue: "" + }, + "bytes": { + name: "bytes", + wireType: ProtoBuf.WIRE_TYPES.LDELIM, + defaultValue: null // overridden in the code, must be a unique instance + }, + "fixed32": { + name: "fixed32", + wireType: ProtoBuf.WIRE_TYPES.BITS32, + defaultValue: 0 + }, + "sfixed32": { + name: "sfixed32", + wireType: ProtoBuf.WIRE_TYPES.BITS32, + defaultValue: 0 + }, + "fixed64": { + name: "fixed64", + wireType: ProtoBuf.WIRE_TYPES.BITS64, + defaultValue: ProtoBuf.Long ? ProtoBuf.Long.UZERO : undefined + }, + "sfixed64": { + name: "sfixed64", + wireType: ProtoBuf.WIRE_TYPES.BITS64, + defaultValue: ProtoBuf.Long ? ProtoBuf.Long.ZERO : undefined + }, + "float": { + name: "float", + wireType: ProtoBuf.WIRE_TYPES.BITS32, + defaultValue: 0 + }, + "enum": { + name: "enum", + wireType: ProtoBuf.WIRE_TYPES.VARINT, + defaultValue: 0 + }, + "message": { + name: "message", + wireType: ProtoBuf.WIRE_TYPES.LDELIM, + defaultValue: null + }, + "group": { + name: "group", + wireType: ProtoBuf.WIRE_TYPES.STARTGROUP, + defaultValue: null + } + }; + + /** + * Valid map key types. + * @type {!Array.>} + * @const + * @expose + */ + ProtoBuf.MAP_KEY_TYPES = [ + ProtoBuf.TYPES["int32"], + ProtoBuf.TYPES["sint32"], + ProtoBuf.TYPES["sfixed32"], + ProtoBuf.TYPES["uint32"], + ProtoBuf.TYPES["fixed32"], + ProtoBuf.TYPES["int64"], + ProtoBuf.TYPES["sint64"], + ProtoBuf.TYPES["sfixed64"], + ProtoBuf.TYPES["uint64"], + ProtoBuf.TYPES["fixed64"], + ProtoBuf.TYPES["bool"], + ProtoBuf.TYPES["string"], + ProtoBuf.TYPES["bytes"] + ]; + + /** + * Minimum field id. + * @type {number} + * @const + * @expose + */ + ProtoBuf.ID_MIN = 1; + + /** + * Maximum field id. + * @type {number} + * @const + * @expose + */ + ProtoBuf.ID_MAX = 0x1FFFFFFF; + + /** + * If set to `true`, field names will be converted from underscore notation to camel case. Defaults to `false`. + * Must be set prior to parsing. + * @type {boolean} + * @expose + */ + ProtoBuf.convertFieldsToCamelCase = false; + + /** + * By default, messages are populated with (setX, set_x) accessors for each field. This can be disabled by + * setting this to `false` prior to building messages. + * @type {boolean} + * @expose + */ + ProtoBuf.populateAccessors = true; + + /** + * By default, messages are populated with default values if a field is not present on the wire. To disable + * this behavior, set this setting to `false`. + * @type {boolean} + * @expose + */ + ProtoBuf.populateDefaults = true; + + /** + * @alias ProtoBuf.Util + * @expose + */ + ProtoBuf.Util = (function() { + "use strict"; + + /** + * ProtoBuf utilities. + * @exports ProtoBuf.Util + * @namespace + */ + var Util = {}; + + /** + * Flag if running in node or not. + * @type {boolean} + * @const + * @expose + */ + Util.IS_NODE = !!( + typeof process === 'object' && process + '' === '[object process]' && !process['browser'] + ); + + /** + * Constructs a XMLHttpRequest object. + * @return {XMLHttpRequest} + * @throws {Error} If XMLHttpRequest is not supported + * @expose + */ + Util.XHR = function() { + // No dependencies please, ref: http://www.quirksmode.org/js/xmlhttp.html + var XMLHttpFactories = [ + function() { + return new XMLHttpRequest() + }, + function() { + return new ActiveXObject("Msxml2.XMLHTTP") + }, + function() { + return new ActiveXObject("Msxml3.XMLHTTP") + }, + function() { + return new ActiveXObject("Microsoft.XMLHTTP") + } + ]; + /** @type {?XMLHttpRequest} */ + var xhr = null; + for (var i = 0; i < XMLHttpFactories.length; i++) { + try { + xhr = XMLHttpFactories[i](); + } catch (e) { + continue; + } + break; + } + if (!xhr) + throw Error("XMLHttpRequest is not supported"); + return xhr; + }; + + /** + * Fetches a resource. + * @param {string} path Resource path + * @param {function(?string)=} callback Callback receiving the resource's contents. If omitted the resource will + * be fetched synchronously. If the request failed, contents will be null. + * @return {?string|undefined} Resource contents if callback is omitted (null if the request failed), else undefined. + * @expose + */ + Util.fetch = function(path, callback) { + if (callback && typeof callback != 'function') + callback = null; + if (Util.IS_NODE) { + var fs = require("fs"); + if (callback) { + fs.readFile(path, function(err, data) { + if (err) + callback(null); + else + callback("" + data); + }); + } else + try { + return fs.readFileSync(path); + } catch (e) { + return null; + } + } else { + var xhr = Util.XHR(); + xhr.open('GET', path, callback ? true : false); + // xhr.setRequestHeader('User-Agent', 'XMLHTTP/1.0'); + xhr.setRequestHeader('Accept', 'text/plain'); + if (typeof xhr.overrideMimeType === 'function') xhr.overrideMimeType('text/plain'); + if (callback) { + xhr.onreadystatechange = function() { + if (xhr.readyState != 4) return; + if ( /* remote */ xhr.status == 200 || /* local */ (xhr.status == 0 && typeof xhr.responseText === 'string')) + callback(xhr.responseText); + else + callback(null); + }; + if (xhr.readyState == 4) + return; + xhr.send(null); + } else { + xhr.send(null); + if ( /* remote */ xhr.status == 200 || /* local */ (xhr.status == 0 && typeof xhr.responseText === 'string')) + return xhr.responseText; + return null; + } + } + }; + + /** + * Converts a string to camel case. + * @param {string} str + * @returns {string} + * @expose + */ + Util.toCamelCase = function(str) { + return str.replace(/_([a-zA-Z])/g, function($0, $1) { + return $1.toUpperCase(); + }); + }; + + return Util; + })(); + + /** + * Language expressions. + * @type {!Object.} + * @expose + */ + ProtoBuf.Lang = { + + // Characters always ending a statement + DELIM: /[\s\{\}=;:\[\],'"\(\)<>]/g, + + // Field rules + RULE: /^(?:required|optional|repeated|map)$/, + + // Field types + TYPE: /^(?:double|float|int32|uint32|sint32|int64|uint64|sint64|fixed32|sfixed32|fixed64|sfixed64|bool|string|bytes)$/, + + // Names + NAME: /^[a-zA-Z_][a-zA-Z_0-9]*$/, + + // Type definitions + TYPEDEF: /^[a-zA-Z][a-zA-Z_0-9]*$/, + + // Type references + TYPEREF: /^(?:\.?[a-zA-Z_][a-zA-Z_0-9]*)+$/, + + // Fully qualified type references + FQTYPEREF: /^(?:\.[a-zA-Z][a-zA-Z_0-9]*)+$/, + + // All numbers + NUMBER: /^-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+|([0-9]*(\.[0-9]*)?([Ee][+-]?[0-9]+)?)|inf|nan)$/, + + // Decimal numbers + NUMBER_DEC: /^(?:[1-9][0-9]*|0)$/, + + // Hexadecimal numbers + NUMBER_HEX: /^0[xX][0-9a-fA-F]+$/, + + // Octal numbers + NUMBER_OCT: /^0[0-7]+$/, + + // Floating point numbers + NUMBER_FLT: /^([0-9]*(\.[0-9]*)?([Ee][+-]?[0-9]+)?|inf|nan)$/, + + // Booleans + BOOL: /^(?:true|false)$/i, + + // Id numbers + ID: /^(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/, + + // Negative id numbers (enum values) + NEGID: /^\-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/, + + // Whitespaces + WHITESPACE: /\s/, + + // All strings + STRING: /(?:"([^"\\]*(?:\\.[^"\\]*)*)")|(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g, + + // Double quoted strings + STRING_DQ: /(?:"([^"\\]*(?:\\.[^"\\]*)*)")/g, + + // Single quoted strings + STRING_SQ: /(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g + }; + + /** + * @alias ProtoBuf.DotProto + * @expose + */ + ProtoBuf.DotProto = (function(ProtoBuf, Lang) { + "use strict"; + + /** + * Utilities to parse .proto files. + * @exports ProtoBuf.DotProto + * @namespace + */ + var DotProto = {}; + + /** + * Constructs a new Tokenizer. + * @exports ProtoBuf.DotProto.Tokenizer + * @class prototype tokenizer + * @param {string} proto Proto to tokenize + * @constructor + */ + var Tokenizer = function(proto) { + + /** + * Source to parse. + * @type {string} + * @expose + */ + this.source = proto + ""; + + /** + * Current index. + * @type {number} + * @expose + */ + this.index = 0; + + /** + * Current line. + * @type {number} + * @expose + */ + this.line = 1; + + /** + * Token stack. + * @type {!Array.} + * @expose + */ + this.stack = []; + + /** + * Opening character of the current string read, if any. + * @type {?string} + * @private + */ + this._stringOpen = null; + }; + + /** + * @alias ProtoBuf.DotProto.Tokenizer.prototype + * @inner + */ + var TokenizerPrototype = Tokenizer.prototype; + + /** + * Reads a string beginning at the current index. + * @return {string} + * @private + */ + TokenizerPrototype._readString = function() { + var re = this._stringOpen === '"' ? Lang.STRING_DQ : Lang.STRING_SQ; + re.lastIndex = this.index - 1; // Include the open quote + var match = re.exec(this.source); + if (!match) + throw Error("unterminated string"); + this.index = re.lastIndex; + this.stack.push(this._stringOpen); + this._stringOpen = null; + return match[1]; + }; + + /** + * Gets the next token and advances by one. + * @return {?string} Token or `null` on EOF + * @expose + */ + TokenizerPrototype.next = function() { + if (this.stack.length > 0) + return this.stack.shift(); + if (this.index >= this.source.length) + return null; + if (this._stringOpen !== null) + return this._readString(); + + var repeat, + prev, + next; + let comments = []; + do { + repeat = false; + let hasNewLine = false; + // Strip white spaces + while (Lang.WHITESPACE.test(next = this.source.charAt(this.index))) { + if (next === '\n') { + ++this.line; + hasNewLine = true; + } + if (++this.index === this.source.length) + return null; + } + // 清空前后注释 + this.frontComment = ""; + this.backComment = ""; + // 注释 + var comment, commentStart; + // Strip comments + if (this.source.charAt(this.index) === '/') { + ++this.index; + if (this.source.charAt(this.index) === '/') { // Line + // 获取comment + commentStart = this.index + 1; + while (this.source.charAt(++this.index) !== '\n') + if (this.index == this.source.length) + return null; + // 得到 //后的注释 + comment = this.source.substring(commentStart, this.index); + comment = comment.trim(); + if (comment) { + if (hasNewLine) { // 检查注释前面是否有\n + //之前有换行 作为消息前面的注释处理 + comments.push(comment); + } + } + + ++this.index; + ++this.line; + repeat = true; + } else if ((next = this.source.charAt(this.index)) === '*') { /* Block */ + commentStart = this.index + 1; + do { + if (next === '\n') + ++this.line; + if (++this.index === this.source.length) + return null; + prev = next; + next = this.source.charAt(this.index); + } while (prev !== '*' || next !== '/'); + comment = this.source.substring(commentStart, this.index); + // 去掉注释里面,多余的 * + comment = comment.replace(/^\s+[*](.*)$/g, "$1"); + comment = comment.trim(); + // 这种注释一律作为前注释处理 + if (comment) { + comments.push(comment); + } + ++this.index; + repeat = true; + } else + return '/'; + } + } while (repeat); + + this.frontComment = comments.join("
"); + if (this.index === this.source.length) + return null; + // Read the next token + var end = this.index; + Lang.DELIM.lastIndex = 0; + var delim = Lang.DELIM.test(this.source.charAt(end++)); + if (!delim) + while (end < this.source.length && !Lang.DELIM.test(this.source.charAt(end))) + ++end; + var token = this.source.substring(this.index, this.index = end); + + if (token === '"' || token === "'") + this._stringOpen = token; + return token; + }; + + /** + * Peeks for the next token. + * @return {?string} Token or `null` on EOF + * @expose + */ + TokenizerPrototype.peek = function() { + if (this.stack.length === 0) { + var token = this.next(); + if (token === null) + return null; + this.stack.push(token); + } + return this.stack[0]; + }; + + /** + * Skips a specific token and throws if it differs. + * @param {string} expected Expected token + * @throws {Error} If the actual token differs + */ + TokenizerPrototype.skip = function(expected) { + var actual = this.next(); + if (actual !== expected) + throw Error("illegal '" + actual + "', '" + expected + "' expected"); + }; + + /** + * Omits an optional token. + * @param {string} expected Expected optional token + * @returns {boolean} `true` if the token exists + */ + TokenizerPrototype.omit = function(expected) { + if (this.peek() === expected) { + this.next(); + return true; + } + return false; + }; + + /** + * Returns a string representation of this object. + * @return {string} String representation as of "Tokenizer(index/length)" + * @expose + */ + TokenizerPrototype.toString = function() { + return "Tokenizer (" + this.index + "/" + this.source.length + " at line " + this.line + ")"; + }; + + /** + * @alias ProtoBuf.DotProto.Tokenizer + * @expose + */ + DotProto.Tokenizer = Tokenizer; + + /** + * Constructs a new Parser. + * @exports ProtoBuf.DotProto.Parser + * @class prototype parser + * @param {string} source Source + * @constructor + */ + var Parser = function(source) { + + /** + * Tokenizer. + * @type {!ProtoBuf.DotProto.Tokenizer} + * @expose + */ + this.tn = new Tokenizer(source); + + /** + * Whether parsing proto3 or not. + * @type {boolean} + */ + this.proto3 = false; + }; + + /** + * @alias ProtoBuf.DotProto.Parser.prototype + * @inner + */ + var ParserPrototype = Parser.prototype; + + /** + * Parses the source. + * @returns {!Object} + * @throws {Error} If the source cannot be parsed + * @expose + */ + ParserPrototype.parse = function() { + var topLevel = { + "name": "[ROOT]", // temporary + "package": null, + "messages": [], + "enums": [], + "imports": [], + "options": {}, + "services": [] + // "syntax": undefined + }; + var token, + head = true, + weak, + comment; + try { + while (token = this.tn.next()) { + switch (token) { + case 'package': + if (!head || topLevel["package"] !== null) + throw Error("unexpected 'package'"); + token = this.tn.next(); + if (!Lang.TYPEREF.test(token)) + throw Error("illegal package name: " + token); + this.tn.skip(";"); + topLevel["package"] = token; + break; + case 'import': + if (!head) + throw Error("unexpected 'import'"); + token = this.tn.peek(); + if (token === "public" || (weak = token === "weak")) // token ignored + this.tn.next(); + token = this._readString(); + this.tn.skip(";"); + if (!weak) // import ignored + topLevel["imports"].push(token); + break; + case 'syntax': + if (!head) + throw Error("unexpected 'syntax'"); + this.tn.skip("="); + if ((topLevel["syntax"] = this._readString()) === "proto3") + this.proto3 = true; + this.tn.skip(";"); + break; + case 'message': + this._parseMessage(topLevel, null); + head = false; + break; + case 'enum': + this._parseEnum(topLevel); + head = false; + break; + case 'option': + this._parseOption(topLevel); + break; + case 'service': + this._parseService(topLevel); + break; + case 'extend': + this._parseExtend(topLevel); + break; + default: + throw Error("unexpected '" + token + "'"); + } + } + } catch (e) { + e.message = "Parse error at line " + this.tn.line + ": " + e.message; + throw e; + } + delete topLevel["name"]; + return topLevel; + }; + + /** + * Parses the specified source. + * @returns {!Object} + * @throws {Error} If the source cannot be parsed + * @expose + */ + Parser.parse = function(source) { + return new Parser(source).parse(); + }; + + // ----- Conversion ------ + + /** + * Converts a numerical string to an id. + * @param {string} value + * @param {boolean=} mayBeNegative + * @returns {number} + * @inner + */ + function mkId(value, mayBeNegative) { + var id = -1, + sign = 1; + if (value.charAt(0) == '-') { + sign = -1; + value = value.substring(1); + } + if (Lang.NUMBER_DEC.test(value)) + id = parseInt(value); + else if (Lang.NUMBER_HEX.test(value)) + id = parseInt(value.substring(2), 16); + else if (Lang.NUMBER_OCT.test(value)) + id = parseInt(value.substring(1), 8); + else + throw Error("illegal id value: " + (sign < 0 ? '-' : '') + value); + id = (sign * id) | 0; // Force to 32bit + if (!mayBeNegative && id < 0) + throw Error("illegal id value: " + (sign < 0 ? '-' : '') + value); + return id; + } + + /** + * Converts a numerical string to a number. + * @param {string} val + * @returns {number} + * @inner + */ + function mkNumber(val) { + var sign = 1; + if (val.charAt(0) == '-') { + sign = -1; + val = val.substring(1); + } + if (Lang.NUMBER_DEC.test(val)) + return sign * parseInt(val, 10); + else if (Lang.NUMBER_HEX.test(val)) + return sign * parseInt(val.substring(2), 16); + else if (Lang.NUMBER_OCT.test(val)) + return sign * parseInt(val.substring(1), 8); + else if (val === 'inf') + return sign * Infinity; + else if (val === 'nan') + return NaN; + else if (Lang.NUMBER_FLT.test(val)) + return sign * parseFloat(val); + throw Error("illegal number value: " + (sign < 0 ? '-' : '') + val); + } + + // ----- Reading ------ + + /** + * Reads a string. + * @returns {string} + * @private + */ + ParserPrototype._readString = function() { + var value = "", + token, + delim; + do { + delim = this.tn.next(); + if (delim !== "'" && delim !== '"') + throw Error("illegal string delimiter: " + delim); + value += this.tn.next(); + this.tn.skip(delim); + token = this.tn.peek(); + } while (token === '"' || token === '"'); // multi line? + return value; + }; + + /** + * Reads a value. + * @param {boolean=} mayBeTypeRef + * @returns {number|boolean|string} + * @private + */ + ParserPrototype._readValue = function(mayBeTypeRef) { + var token = this.tn.peek(), + value; + if (token === '"' || token === "'") + return this._readString(); + this.tn.next(); + if (Lang.NUMBER.test(token)) + return mkNumber(token); + if (Lang.BOOL.test(token)) + return (token.toLowerCase() === 'true'); + if (mayBeTypeRef && Lang.TYPEREF.test(token)) + return token; + throw Error("illegal value: " + token); + + }; + + // ----- Parsing constructs ----- + + /** + * Parses a namespace option. + * @param {!Object} parent Parent definition + * @param {boolean=} isList + * @private + */ + ParserPrototype._parseOption = function(parent, isList) { + var token = this.tn.next(), + custom = false; + if (token === '(') { + custom = true; + token = this.tn.next(); + } + if (!Lang.TYPEREF.test(token)) + // we can allow options of the form google.protobuf.* since they will just get ignored anyways + // if (!/google\.protobuf\./.test(token)) // FIXME: Why should that not be a valid typeref? + throw Error("illegal option name: " + token); + var name = token; + if (custom) { // (my_method_option).foo, (my_method_option), some_method_option, (foo.my_option).bar + this.tn.skip(')'); + name = '(' + name + ')'; + token = this.tn.peek(); + if (Lang.FQTYPEREF.test(token)) { + name += token; + this.tn.next(); + } + } + this.tn.skip('='); + this._parseOptionValue(parent, name); + if (!isList) + this.tn.skip(";"); + }; + + /** + * Sets an option on the specified options object. + * @param {!Object.} options + * @param {string} name + * @param {string|number|boolean} value + * @inner + */ + function setOption(options, name, value) { + if (typeof options[name] === 'undefined') + options[name] = value; + else { + if (!Array.isArray(options[name])) + options[name] = [options[name]]; + options[name].push(value); + } + } + + /** + * Parses an option value. + * @param {!Object} parent + * @param {string} name + * @private + */ + ParserPrototype._parseOptionValue = function(parent, name) { + var token = this.tn.peek(); + if (token !== '{') { // Plain value + setOption(parent["options"], name, this._readValue(true)); + } else { // Aggregate options + this.tn.skip("{"); + while ((token = this.tn.next()) !== '}') { + if (!Lang.NAME.test(token)) + throw Error("illegal option name: " + name + "." + token); + if (this.tn.omit(":")) + setOption(parent["options"], name + "." + token, this._readValue(true)); + else + this._parseOptionValue(parent, name + "." + token); + } + } + }; + + /** + * Parses a service definition. + * @param {!Object} parent Parent definition + * @private + */ + ParserPrototype._parseService = function(parent) { + var token = this.tn.next(); + if (!Lang.NAME.test(token)) + throw Error("illegal service name at line " + this.tn.line + ": " + token); + var name = token; + var svc = { + "name": name, + "rpc": {}, + "options": {} + }; + this.tn.skip("{"); + while ((token = this.tn.next()) !== '}') { + if (token === "option") + this._parseOption(svc); + else if (token === 'rpc') + this._parseServiceRPC(svc); + else + throw Error("illegal service token: " + token); + } + this.tn.omit(";"); + parent["services"].push(svc); + }; + + /** + * Parses a RPC service definition of the form ['rpc', name, (request), 'returns', (response)]. + * @param {!Object} svc Service definition + * @private + */ + ParserPrototype._parseServiceRPC = function(svc) { + var type = "rpc", + token = this.tn.next(); + if (!Lang.NAME.test(token)) + throw Error("illegal rpc service method name: " + token); + var name = token; + var method = { + "request": null, + "response": null, + "request_stream": false, + "response_stream": false, + "options": {} + }; + this.tn.skip("("); + token = this.tn.next(); + if (token.toLowerCase() === "stream") { + method["request_stream"] = true; + token = this.tn.next(); + } + if (!Lang.TYPEREF.test(token)) + throw Error("illegal rpc service request type: " + token); + method["request"] = token; + this.tn.skip(")"); + token = this.tn.next(); + if (token.toLowerCase() !== "returns") + throw Error("illegal rpc service request type delimiter: " + token); + this.tn.skip("("); + token = this.tn.next(); + if (token.toLowerCase() === "stream") { + method["response_stream"] = true; + token = this.tn.next(); + } + method["response"] = token; + this.tn.skip(")"); + token = this.tn.peek(); + if (token === '{') { + this.tn.next(); + while ((token = this.tn.next()) !== '}') { + if (token === 'option') + this._parseOption(method); + else + throw Error("illegal rpc service token: " + token); + } + this.tn.omit(";"); + } else + this.tn.skip(";"); + if (typeof svc[type] === 'undefined') + svc[type] = {}; + svc[type][name] = method; + }; + + /** + * Parses a message definition. + * @param {!Object} parent Parent definition + * @param {!Object=} fld Field definition if this is a group + * @returns {!Object} + * @private + */ + ParserPrototype._parseMessage = function(parent, fld) { + var commentVal = this.tn.frontComment; + var isGroup = !!fld, + token = this.tn.next(); + + var msg = { + "name": "", + "fields": [], + "enums": [], + "messages": [], + "options": {}, + "services": [], + "oneofs": {}, + "comment":commentVal || "" // 消息前面写的注释 + // "extensions": undefined + }; + if (!Lang.NAME.test(token)) + throw Error("illegal " + (isGroup ? "group" : "message") + " name: " + token); + msg["name"] = token; + if (isGroup) { + this.tn.skip("="); + fld["id"] = mkId(this.tn.next()); + msg["isGroup"] = true; + } + token = this.tn.peek(); + if (token === '[' && fld) + this._parseFieldOptions(fld); + this.tn.skip("{"); + + while ((token = this.tn.next()) !== '}') { + if (Lang.RULE.test(token)) + this._parseMessageField(msg, token); + else if (token === "oneof") + this._parseMessageOneOf(msg); + else if (token === "enum") + this._parseEnum(msg); + else if (token === "message") + this._parseMessage(msg); + else if (token === "option") + this._parseOption(msg); + else if (token === "service") + this._parseService(msg); + else if (token === "extensions") + msg["extensions"] = this._parseExtensionRanges(); + else if (token === "reserved") + this._parseIgnored(); // TODO + else if (token === "extend") + this._parseExtend(msg); + else if (Lang.TYPEREF.test(token)) { + if (!this.proto3) + throw Error("illegal field rule: " + token); + this._parseMessageField(msg, "optional", token); + } else + throw Error("illegal message token: " + token); + } + this.tn.omit(";"); + parent["messages"].push(msg); + return msg; + }; + + /** + * Parses an ignored statement. + * @private + */ + ParserPrototype._parseIgnored = function() { + while (this.tn.peek() !== ';') + this.tn.next(); + this.tn.skip(";"); + }; + + /** + * Parses a message field. + * @param {!Object} msg Message definition + * @param {string} rule Field rule + * @param {string=} type Field type if already known (never known for maps) + * @returns {!Object} Field descriptor + * @private + */ + ParserPrototype._parseMessageField = function(msg, rule, type) { + if (!Lang.RULE.test(rule)) + throw Error("illegal message field rule: " + rule); + var fld = { + "rule": rule, + "type": "", + "name": "", + "options": {}, + "comment": this.frontComment || "", + "id": 0 + }; + var token; + if (rule === "map") { + + if (type) + throw Error("illegal type: " + type); + this.tn.skip('<'); + token = this.tn.next(); + if (!Lang.TYPE.test(token) && !Lang.TYPEREF.test(token)) + throw Error("illegal message field type: " + token); + fld["keytype"] = token; + this.tn.skip(','); + token = this.tn.next(); + if (!Lang.TYPE.test(token) && !Lang.TYPEREF.test(token)) + throw Error("illegal message field: " + token); + fld["type"] = token; + this.tn.skip('>'); + token = this.tn.next(); + if (!Lang.NAME.test(token)) + throw Error("illegal message field name: " + token); + fld["name"] = token; + this.tn.skip("="); + fld["id"] = mkId(this.tn.next()); + token = this.tn.peek(); + if (token === '[') + this._parseFieldOptions(fld); + this.tn.skip(";"); + + } else { + + type = typeof type !== 'undefined' ? type : this.tn.next(); + + if (type === "group") { + + // "A [legacy] group simply combines a nested message type and a field into a single declaration. In your + // code, you can treat this message just as if it had a Result type field called result (the latter name is + // converted to lower-case so that it does not conflict with the former)." + var grp = this._parseMessage(msg, fld); + if (!/^[A-Z]/.test(grp["name"])) + throw Error('illegal group name: ' + grp["name"]); + fld["type"] = grp["name"]; + fld["name"] = grp["name"].toLowerCase(); + this.tn.omit(";"); + + } else { + + if (!Lang.TYPE.test(type) && !Lang.TYPEREF.test(type)) + throw Error("illegal message field type: " + type); + fld["type"] = type; + token = this.tn.next(); + if (!Lang.NAME.test(token)) + throw Error("illegal message field name: " + token); + fld["name"] = token; + this.tn.skip("="); + fld["id"] = mkId(this.tn.next()); + token = this.tn.peek(); + if (token === "[") + this._parseFieldOptions(fld); + this.tn.skip(";"); + + } + } + + msg["fields"].push(fld); + + // 检查后注释 + var tn = this.tn; + var idx = tn.index; + var next, commentStart, comment; + while (Lang.WHITESPACE.test(next = tn.source.charAt(idx))) { + if (next === '\n') { + ++tn.line; + break; + } + if (++idx === tn.source.length) + break; + } + + if (tn.source.charAt(idx) === '/') { + ++idx; + if (tn.source.charAt(idx) === '/') { // Line + // 获取comment + commentStart = idx + 1; + while (tn.source.charAt(++idx) !== '\n') + if (idx == tn.source.length) + break; + // 得到 //后的注释 + comment = tn.source.substring(commentStart, idx); + comment = comment.trim(); + if (comment) { + if (fld.comment) { + fld.comment += "
" + comment; + } else { + fld.comment = comment; + } + } + } + } + + return fld; + }; + + /** + * Parses a message oneof. + * @param {!Object} msg Message definition + * @private + */ + ParserPrototype._parseMessageOneOf = function(msg) { + var token = this.tn.next(); + if (!Lang.NAME.test(token)) + throw Error("illegal oneof name: " + token); + var name = token, + fld; + var fields = []; + this.tn.skip("{"); + while ((token = this.tn.next()) !== "}") { + fld = this._parseMessageField(msg, "optional", token); + fld["oneof"] = name; + fields.push(fld["id"]); + } + this.tn.omit(";"); + msg["oneofs"][name] = fields; + }; + + /** + * Parses a set of field option definitions. + * @param {!Object} fld Field definition + * @private + */ + ParserPrototype._parseFieldOptions = function(fld) { + this.tn.skip("["); + var token, + first = true; + while ((token = this.tn.peek()) !== ']') { + if (!first) + this.tn.skip(","); + this._parseOption(fld, true); + first = false; + } + this.tn.next(); + }; + + /** + * Parses an enum. + * @param {!Object} msg Message definition + * @private + */ + ParserPrototype._parseEnum = function(msg) { + var enm = { + "name": "", + "values": [], + "options": {} + }; + var token = this.tn.next(); + if (!Lang.NAME.test(token)) + throw Error("illegal name: " + token); + enm["name"] = token; + this.tn.skip("{"); + while ((token = this.tn.next()) !== '}') { + if (token === "option") + this._parseOption(enm); + else { + if (!Lang.NAME.test(token)) + throw Error("illegal name: " + token); + this.tn.skip("="); + var val = { + "name": token, + "id": mkId(this.tn.next(), true) + }; + token = this.tn.peek(); + if (token === "[") + this._parseFieldOptions({ + "options": {} + }); + this.tn.skip(";"); + enm["values"].push(val); + } + } + this.tn.omit(";"); + msg["enums"].push(enm); + }; + + /** + * Parses extension / reserved ranges. + * @returns {!Array.>} + * @private + */ + ParserPrototype._parseExtensionRanges = function() { + var ranges = []; + var token, + range, + value; + do { + range = []; + while (true) { + token = this.tn.next(); + switch (token) { + case "min": + value = ProtoBuf.ID_MIN; + break; + case "max": + value = ProtoBuf.ID_MAX; + break; + default: + value = mkNumber(token); + break; + } + range.push(value); + if (range.length === 2) + break; + if (this.tn.peek() !== "to") { + range.push(value); + break; + } + this.tn.next(); + } + ranges.push(range); + } while (this.tn.omit(",")); + this.tn.skip(";"); + return ranges; + }; + + /** + * Parses an extend block. + * @param {!Object} parent Parent object + * @private + */ + ParserPrototype._parseExtend = function(parent) { + var token = this.tn.next(); + if (!Lang.TYPEREF.test(token)) + throw Error("illegal extend reference: " + token); + var ext = { + "ref": token, + "fields": [] + }; + this.tn.skip("{"); + while ((token = this.tn.next()) !== '}') { + if (Lang.RULE.test(token)) + this._parseMessageField(ext, token); + else if (Lang.TYPEREF.test(token)) { + if (!this.proto3) + throw Error("illegal field rule: " + token); + this._parseMessageField(ext, "optional", token); + } else + throw Error("illegal extend token: " + token); + } + this.tn.omit(";"); + parent["messages"].push(ext); + return ext; + }; + + // ----- General ----- + + /** + * Returns a string representation of this parser. + * @returns {string} + */ + ParserPrototype.toString = function() { + return "Parser at line " + this.tn.line; + }; + + /** + * @alias ProtoBuf.DotProto.Parser + * @expose + */ + DotProto.Parser = Parser; + + return DotProto; + + })(ProtoBuf, ProtoBuf.Lang); + + /** + * @alias ProtoBuf.Reflect + * @expose + */ + ProtoBuf.Reflect = (function(ProtoBuf) { + "use strict"; + + /** + * Reflection types. + * @exports ProtoBuf.Reflect + * @namespace + */ + var Reflect = {}; + + /** + * Constructs a Reflect base class. + * @exports ProtoBuf.Reflect.T + * @constructor + * @abstract + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {?ProtoBuf.Reflect.T} parent Parent object + * @param {string} name Object name + */ + var T = function(builder, parent, name) { + + /** + * Builder reference. + * @type {!ProtoBuf.Builder} + * @expose + */ + this.builder = builder; + + /** + * Parent object. + * @type {?ProtoBuf.Reflect.T} + * @expose + */ + this.parent = parent; + + /** + * Object name in namespace. + * @type {string} + * @expose + */ + this.name = name; + + /** + * Fully qualified class name + * @type {string} + * @expose + */ + this.className; + }; + + /** + * @alias ProtoBuf.Reflect.T.prototype + * @inner + */ + var TPrototype = T.prototype; + + /** + * Returns the fully qualified name of this object. + * @returns {string} Fully qualified name as of ".PATH.TO.THIS" + * @expose + */ + TPrototype.fqn = function() { + var name = this.name, + ptr = this; + do { + ptr = ptr.parent; + if (ptr == null) + break; + name = ptr.name + "." + name; + } while (true); + return name; + }; + + /** + * Returns a string representation of this Reflect object (its fully qualified name). + * @param {boolean=} includeClass Set to true to include the class name. Defaults to false. + * @return String representation + * @expose + */ + TPrototype.toString = function(includeClass) { + return (includeClass ? this.className + " " : "") + this.fqn(); + }; + + /** + * Builds this type. + * @throws {Error} If this type cannot be built directly + * @expose + */ + TPrototype.build = function() { + throw Error(this.toString(true) + " cannot be built directly"); + }; + + /** + * @alias ProtoBuf.Reflect.T + * @expose + */ + Reflect.T = T; + + /** + * Constructs a new Namespace. + * @exports ProtoBuf.Reflect.Namespace + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {?ProtoBuf.Reflect.Namespace} parent Namespace parent + * @param {string} name Namespace name + * @param {Object.=} options Namespace options + * @param {string?} syntax The syntax level of this definition (e.g., proto3) + * @constructor + * @extends ProtoBuf.Reflect.T + */ + var Namespace = function(builder, parent, name, options, syntax) { + T.call(this, builder, parent, name); + + /** + * @override + */ + this.className = "Namespace"; + + /** + * Children inside the namespace. + * @type {!Array.} + */ + this.children = []; + + /** + * Options. + * @type {!Object.} + */ + this.options = options || {}; + + /** + * Syntax level (e.g., proto2 or proto3). + * @type {!string} + */ + this.syntax = syntax || "proto2"; + }; + + /** + * @alias ProtoBuf.Reflect.Namespace.prototype + * @inner + */ + var NamespacePrototype = Namespace.prototype = Object.create(T.prototype); + + /** + * Returns an array of the namespace's children. + * @param {ProtoBuf.Reflect.T=} type Filter type (returns instances of this type only). Defaults to null (all children). + * @return {Array.} + * @expose + */ + NamespacePrototype.getChildren = function(type) { + type = type || null; + if (type == null) + return this.children.slice(); + var children = []; + for (var i = 0, k = this.children.length; i < k; ++i) + if (this.children[i] instanceof type) + children.push(this.children[i]); + return children; + }; + + /** + * Adds a child to the namespace. + * @param {ProtoBuf.Reflect.T} child Child + * @throws {Error} If the child cannot be added (duplicate) + * @expose + */ + NamespacePrototype.addChild = function(child) { + var other; + if (other = this.getChild(child.name)) { + // Try to revert camelcase transformation on collision + if (other instanceof Message.Field && other.name !== other.originalName && this.getChild(other.originalName) === null) + other.name = other.originalName; // Revert previous first (effectively keeps both originals) + else if (child instanceof Message.Field && child.name !== child.originalName && this.getChild(child.originalName) === null) + child.name = child.originalName; + else + throw Error("Duplicate name in namespace " + this.toString(true) + ": " + child.name); + } + this.children.push(child); + }; + + /** + * Gets a child by its name or id. + * @param {string|number} nameOrId Child name or id + * @return {?ProtoBuf.Reflect.T} The child or null if not found + * @expose + */ + NamespacePrototype.getChild = function(nameOrId) { + var key = typeof nameOrId === 'number' ? 'id' : 'name'; + for (var i = 0, k = this.children.length; i < k; ++i) + if (this.children[i][key] === nameOrId) + return this.children[i]; + return null; + }; + + /** + * Resolves a reflect object inside of this namespace. + * @param {string|!Array.} qn Qualified name to resolve + * @param {boolean=} excludeNonNamespace Excludes non-namespace types, defaults to `false` + * @return {?ProtoBuf.Reflect.Namespace} The resolved type or null if not found + * @expose + */ + NamespacePrototype.resolve = function(qn, excludeNonNamespace) { + var part = typeof qn === 'string' ? qn.split(".") : qn, + ptr = this, + i = 0; + if (part[i] === "") { // Fully qualified name, e.g. ".My.Message' + while (ptr.parent !== null) + ptr = ptr.parent; + i++; + } + var child; + do { + do { + if (!(ptr instanceof Reflect.Namespace)) { + ptr = null; + break; + } + child = ptr.getChild(part[i]); + if (!child || !(child instanceof Reflect.T) || (excludeNonNamespace && !(child instanceof Reflect.Namespace))) { + ptr = null; + break; + } + ptr = child; + i++; + } while (i < part.length); + if (ptr != null) + break; // Found + // Else search the parent + if (this.parent !== null) + return this.parent.resolve(qn, excludeNonNamespace); + } while (ptr != null); + return ptr; + }; + + /** + * Determines the shortest qualified name of the specified type, if any, relative to this namespace. + * @param {!ProtoBuf.Reflect.T} t Reflection type + * @returns {string} The shortest qualified name or, if there is none, the fqn + * @expose + */ + NamespacePrototype.qn = function(t) { + var part = [], + ptr = t; + do { + part.unshift(ptr.name); + ptr = ptr.parent; + } while (ptr !== null); + for (var len = 1; len <= part.length; len++) { + var qn = part.slice(part.length - len); + if (t === this.resolve(qn, t instanceof Reflect.Namespace)) + return qn.join("."); + } + return t.fqn(); + }; + + /** + * Builds the namespace and returns the runtime counterpart. + * @return {Object.} Runtime namespace + * @expose + */ + NamespacePrototype.build = function() { + /** @dict */ + var ns = {}; + var children = this.children; + for (var i = 0, k = children.length, child; i < k; ++i) { + child = children[i]; + if (child instanceof Namespace) + ns[child.name] = child.build(); + } + if (Object.defineProperty) + Object.defineProperty(ns, "$options", { + "value": this.buildOpt() + }); + return ns; + }; + + /** + * Builds the namespace's '$options' property. + * @return {Object.} + */ + NamespacePrototype.buildOpt = function() { + var opt = {}, + keys = Object.keys(this.options); + for (var i = 0, k = keys.length; i < k; ++i) { + var key = keys[i], + val = this.options[keys[i]]; + // TODO: Options are not resolved, yet. + // if (val instanceof Namespace) { + // opt[key] = val.build(); + // } else { + opt[key] = val; + // } + } + return opt; + }; + + /** + * Gets the value assigned to the option with the specified name. + * @param {string=} name Returns the option value if specified, otherwise all options are returned. + * @return {*|Object.}null} Option value or NULL if there is no such option + */ + NamespacePrototype.getOption = function(name) { + if (typeof name === 'undefined') + return this.options; + return typeof this.options[name] !== 'undefined' ? this.options[name] : null; + }; + + /** + * @alias ProtoBuf.Reflect.Namespace + * @expose + */ + Reflect.Namespace = Namespace; + + /** + * Constructs a new Element implementation that checks and converts values for a + * particular field type, as appropriate. + * + * An Element represents a single value: either the value of a singular field, + * or a value contained in one entry of a repeated field or map field. This + * class does not implement these higher-level concepts; it only encapsulates + * the low-level typechecking and conversion. + * + * @exports ProtoBuf.Reflect.Element + * @param {{name: string, wireType: number}} type Resolved data type + * @param {ProtoBuf.Reflect.T|null} resolvedType Resolved type, if relevant + * (e.g. submessage field). + * @param {boolean} isMapKey Is this element a Map key? The value will be + * converted to string form if so. + * @param {string} syntax Syntax level of defining message type, e.g., + * proto2 or proto3. + * @constructor + */ + var Element = function(type, resolvedType, isMapKey, syntax) { + + /** + * Element type, as a string (e.g., int32). + * @type {{name: string, wireType: number}} + */ + this.type = type; + + /** + * Element type reference to submessage or enum definition, if needed. + * @type {ProtoBuf.Reflect.T|null} + */ + this.resolvedType = resolvedType; + + /** + * Element is a map key. + * @type {boolean} + */ + this.isMapKey = isMapKey; + + /** + * Syntax level of defining message type, e.g., proto2 or proto3. + * @type {string} + */ + this.syntax = syntax; + + if (isMapKey && ProtoBuf.MAP_KEY_TYPES.indexOf(type) < 0) + throw Error("Invalid map key type: " + type.name); + }; + + var ElementPrototype = Element.prototype; + + /** + * Obtains a (new) default value for the specified type. + * @param type {string|{name: string, wireType: number}} Field type + * @returns {*} Default value + * @inner + */ + function mkDefault(type) { + if (typeof type === 'string') + type = ProtoBuf.TYPES[type]; + if (typeof type.defaultValue === 'undefined') + throw Error("default value for type " + type.name + " is not supported"); + if (type == ProtoBuf.TYPES["bytes"]) + return new ByteBuffer(0); + return type.defaultValue; + } + + /** + * Returns the default value for this field in proto3. + * @function + * @param type {string|{name: string, wireType: number}} the field type + * @returns {*} Default value + */ + Element.defaultFieldValue = mkDefault; + + /** + * Makes a Long from a value. + * @param {{low: number, high: number, unsigned: boolean}|string|number} value Value + * @param {boolean=} unsigned Whether unsigned or not, defaults to reuse it from Long-like objects or to signed for + * strings and numbers + * @returns {!Long} + * @throws {Error} If the value cannot be converted to a Long + * @inner + */ + function mkLong(value, unsigned) { + if (value && typeof value.low === 'number' && typeof value.high === 'number' && typeof value.unsigned === 'boolean' && value.low === value.low && value.high === value.high) + return new ProtoBuf.Long(value.low, value.high, typeof unsigned === 'undefined' ? value.unsigned : unsigned); + if (typeof value === 'string') + return ProtoBuf.Long.fromString(value, unsigned || false, 10); + if (typeof value === 'number') + return ProtoBuf.Long.fromNumber(value, unsigned || false); + throw Error("not convertible to Long"); + } + + /** + * Checks if the given value can be set for an element of this type (singular + * field or one element of a repeated field or map). + * @param {*} value Value to check + * @return {*} Verified, maybe adjusted, value + * @throws {Error} If the value cannot be verified for this element slot + * @expose + */ + ElementPrototype.verifyValue = function(value) { + var self = this; + + function fail(val, msg) { + throw Error("Illegal value for " + self.toString(true) + " of type " + self.type.name + ": " + val + " (" + msg + ")"); + } + switch (this.type) { + // Signed 32bit + case ProtoBuf.TYPES["int32"]: + case ProtoBuf.TYPES["sint32"]: + case ProtoBuf.TYPES["sfixed32"]: + // Account for !NaN: value === value + if (typeof value !== 'number' || (value === value && value % 1 !== 0)) + fail(typeof value, "not an integer"); + return value > 4294967295 ? value | 0 : value; + + // Unsigned 32bit + case ProtoBuf.TYPES["uint32"]: + case ProtoBuf.TYPES["fixed32"]: + if (typeof value !== 'number' || (value === value && value % 1 !== 0)) + fail(typeof value, "not an integer"); + return value < 0 ? value >>> 0 : value; + + // Signed 64bit + case ProtoBuf.TYPES["int64"]: + case ProtoBuf.TYPES["sint64"]: + case ProtoBuf.TYPES["sfixed64"]: + { + if (ProtoBuf.Long) + try { + return mkLong(value, false); + } catch (e) { + fail(typeof value, e.message); + } + else + fail(typeof value, "requires Long.js"); + } + + // Unsigned 64bit + case ProtoBuf.TYPES["uint64"]: + case ProtoBuf.TYPES["fixed64"]: + { + if (ProtoBuf.Long) + try { + return mkLong(value, true); + } catch (e) { + fail(typeof value, e.message); + } + else + fail(typeof value, "requires Long.js"); + } + + // Bool + case ProtoBuf.TYPES["bool"]: + if (typeof value !== 'boolean') + fail(typeof value, "not a boolean"); + return value; + + // Float + case ProtoBuf.TYPES["float"]: + case ProtoBuf.TYPES["double"]: + if (typeof value !== 'number') + fail(typeof value, "not a number"); + return value; + + // Length-delimited string + case ProtoBuf.TYPES["string"]: + if (typeof value !== 'string' && !(value && value instanceof String)) + fail(typeof value, "not a string"); + return "" + value; // Convert String object to string + + // Length-delimited bytes + case ProtoBuf.TYPES["bytes"]: + if (ByteBuffer.isByteBuffer(value)) + return value; + return ByteBuffer.wrap(value, "base64"); + + // Constant enum value + case ProtoBuf.TYPES["enum"]: + { + var values = this.resolvedType.getChildren(ProtoBuf.Reflect.Enum.Value); + for (i = 0; i < values.length; i++) + if (values[i].name == value) + return values[i].id; + else if (values[i].id == value) + return values[i].id; + + if (this.syntax === 'proto3') { + // proto3: just make sure it's an integer. + if (typeof value !== 'number' || (value === value && value % 1 !== 0)) + fail(typeof value, "not an integer"); + if (value > 4294967295 || value < 0) + fail(typeof value, "not in range for uint32") + return value; + } else { + // proto2 requires enum values to be valid. + fail(value, "not a valid enum value"); + } + } + // Embedded message + case ProtoBuf.TYPES["group"]: + case ProtoBuf.TYPES["message"]: + { + if (!value || typeof value !== 'object') + fail(typeof value, "object expected"); + if (value instanceof this.resolvedType.clazz) + return value; + if (value instanceof ProtoBuf.Builder.Message) { + // Mismatched type: Convert to object (see: https://github.com/dcodeIO/ProtoBuf.js/issues/180) + var obj = {}; + for (var i in value) + if (value.hasOwnProperty(i)) + obj[i] = value[i]; + value = obj; + } + // Else let's try to construct one from a key-value object + return new(this.resolvedType.clazz)(value); // May throw for a hundred of reasons + } + } + + // We should never end here + throw Error("[INTERNAL] Illegal value for " + this.toString(true) + ": " + value + " (undefined type " + this.type + ")"); + }; + + /** + * Calculates the byte length of an element on the wire. + * @param {number} id Field number + * @param {*} value Field value + * @returns {number} Byte length + * @throws {Error} If the value cannot be calculated + * @expose + */ + ElementPrototype.calculateLength = function(id, value) { + if (value === null) return 0; // Nothing to encode + // Tag has already been written + var n; + switch (this.type) { + case ProtoBuf.TYPES["int32"]: + return value < 0 ? ByteBuffer.calculateVarint64(value) : ByteBuffer.calculateVarint32(value); + case ProtoBuf.TYPES["uint32"]: + return ByteBuffer.calculateVarint32(value); + case ProtoBuf.TYPES["sint32"]: + return ByteBuffer.calculateVarint32(ByteBuffer.zigZagEncode32(value)); + case ProtoBuf.TYPES["fixed32"]: + case ProtoBuf.TYPES["sfixed32"]: + case ProtoBuf.TYPES["float"]: + return 4; + case ProtoBuf.TYPES["int64"]: + case ProtoBuf.TYPES["uint64"]: + return ByteBuffer.calculateVarint64(value); + case ProtoBuf.TYPES["sint64"]: + return ByteBuffer.calculateVarint64(ByteBuffer.zigZagEncode64(value)); + case ProtoBuf.TYPES["fixed64"]: + case ProtoBuf.TYPES["sfixed64"]: + return 8; + case ProtoBuf.TYPES["bool"]: + return 1; + case ProtoBuf.TYPES["enum"]: + return ByteBuffer.calculateVarint32(value); + case ProtoBuf.TYPES["double"]: + return 8; + case ProtoBuf.TYPES["string"]: + n = ByteBuffer.calculateUTF8Bytes(value); + return ByteBuffer.calculateVarint32(n) + n; + case ProtoBuf.TYPES["bytes"]: + if (value.remaining() < 0) + throw Error("Illegal value for " + this.toString(true) + ": " + value.remaining() + " bytes remaining"); + return ByteBuffer.calculateVarint32(value.remaining()) + value.remaining(); + case ProtoBuf.TYPES["message"]: + n = this.resolvedType.calculate(value); + return ByteBuffer.calculateVarint32(n) + n; + case ProtoBuf.TYPES["group"]: + n = this.resolvedType.calculate(value); + return n + ByteBuffer.calculateVarint32((id << 3) | ProtoBuf.WIRE_TYPES.ENDGROUP); + } + // We should never end here + throw Error("[INTERNAL] Illegal value to encode in " + this.toString(true) + ": " + value + " (unknown type)"); + }; + + /** + * Encodes a value to the specified buffer. Does not encode the key. + * @param {number} id Field number + * @param {*} value Field value + * @param {ByteBuffer} buffer ByteBuffer to encode to + * @return {ByteBuffer} The ByteBuffer for chaining + * @throws {Error} If the value cannot be encoded + * @expose + */ + ElementPrototype.encodeValue = function(id, value, buffer) { + if (value === null) return buffer; // Nothing to encode + // Tag has already been written + + switch (this.type) { + // 32bit signed varint + case ProtoBuf.TYPES["int32"]: + // "If you use int32 or int64 as the type for a negative number, the resulting varint is always ten bytes + // long – it is, effectively, treated like a very large unsigned integer." (see #122) + if (value < 0) + buffer.writeVarint64(value); + else + buffer.writeVarint32(value); + break; + + // 32bit unsigned varint + case ProtoBuf.TYPES["uint32"]: + buffer.writeVarint32(value); + break; + + // 32bit varint zig-zag + case ProtoBuf.TYPES["sint32"]: + buffer.writeVarint32ZigZag(value); + break; + + // Fixed unsigned 32bit + case ProtoBuf.TYPES["fixed32"]: + buffer.writeUint32(value); + break; + + // Fixed signed 32bit + case ProtoBuf.TYPES["sfixed32"]: + buffer.writeInt32(value); + break; + + // 64bit varint as-is + case ProtoBuf.TYPES["int64"]: + case ProtoBuf.TYPES["uint64"]: + buffer.writeVarint64(value); // throws + break; + + // 64bit varint zig-zag + case ProtoBuf.TYPES["sint64"]: + buffer.writeVarint64ZigZag(value); // throws + break; + + // Fixed unsigned 64bit + case ProtoBuf.TYPES["fixed64"]: + buffer.writeUint64(value); // throws + break; + + // Fixed signed 64bit + case ProtoBuf.TYPES["sfixed64"]: + buffer.writeInt64(value); // throws + break; + + // Bool + case ProtoBuf.TYPES["bool"]: + if (typeof value === 'string') + buffer.writeVarint32(value.toLowerCase() === 'false' ? 0 : !!value); + else + buffer.writeVarint32(value ? 1 : 0); + break; + + // Constant enum value + case ProtoBuf.TYPES["enum"]: + buffer.writeVarint32(value); + break; + + // 32bit float + case ProtoBuf.TYPES["float"]: + buffer.writeFloat32(value); + break; + + // 64bit float + case ProtoBuf.TYPES["double"]: + buffer.writeFloat64(value); + break; + + // Length-delimited string + case ProtoBuf.TYPES["string"]: + buffer.writeVString(value); + break; + + // Length-delimited bytes + case ProtoBuf.TYPES["bytes"]: + if (value.remaining() < 0) + throw Error("Illegal value for " + this.toString(true) + ": " + value.remaining() + " bytes remaining"); + var prevOffset = value.offset; + buffer.writeVarint32(value.remaining()); + buffer.append(value); + value.offset = prevOffset; + break; + + // Embedded message + case ProtoBuf.TYPES["message"]: + var bb = new ByteBuffer().LE(); + this.resolvedType.encode(value, bb); + buffer.writeVarint32(bb.offset); + buffer.append(bb.flip()); + break; + + // Legacy group + case ProtoBuf.TYPES["group"]: + this.resolvedType.encode(value, buffer); + buffer.writeVarint32((id << 3) | ProtoBuf.WIRE_TYPES.ENDGROUP); + break; + + default: + // We should never end here + throw Error("[INTERNAL] Illegal value to encode in " + this.toString(true) + ": " + value + " (unknown type)"); + } + return buffer; + }; + + /** + * Decode one element value from the specified buffer. + * @param {ByteBuffer} buffer ByteBuffer to decode from + * @param {number} wireType The field wire type + * @param {number} id The field number + * @return {*} Decoded value + * @throws {Error} If the field cannot be decoded + * @expose + */ + ElementPrototype.decode = function(buffer, wireType, id) { + if (wireType != this.type.wireType) + throw Error("Unexpected wire type for element"); + + var value, nBytes; + switch (this.type) { + // 32bit signed varint + case ProtoBuf.TYPES["int32"]: + return buffer.readVarint32() | 0; + + // 32bit unsigned varint + case ProtoBuf.TYPES["uint32"]: + return buffer.readVarint32() >>> 0; + + // 32bit signed varint zig-zag + case ProtoBuf.TYPES["sint32"]: + return buffer.readVarint32ZigZag() | 0; + + // Fixed 32bit unsigned + case ProtoBuf.TYPES["fixed32"]: + return buffer.readUint32() >>> 0; + + case ProtoBuf.TYPES["sfixed32"]: + return buffer.readInt32() | 0; + + // 64bit signed varint + case ProtoBuf.TYPES["int64"]: + return buffer.readVarint64(); + + // 64bit unsigned varint + case ProtoBuf.TYPES["uint64"]: + return buffer.readVarint64().toUnsigned(); + + // 64bit signed varint zig-zag + case ProtoBuf.TYPES["sint64"]: + return buffer.readVarint64ZigZag(); + + // Fixed 64bit unsigned + case ProtoBuf.TYPES["fixed64"]: + return buffer.readUint64(); + + // Fixed 64bit signed + case ProtoBuf.TYPES["sfixed64"]: + return buffer.readInt64(); + + // Bool varint + case ProtoBuf.TYPES["bool"]: + return !!buffer.readVarint32(); + + // Constant enum value (varint) + case ProtoBuf.TYPES["enum"]: + // The following Builder.Message#set will already throw + return buffer.readVarint32(); + + // 32bit float + case ProtoBuf.TYPES["float"]: + return buffer.readFloat(); + + // 64bit float + case ProtoBuf.TYPES["double"]: + return buffer.readDouble(); + + // Length-delimited string + case ProtoBuf.TYPES["string"]: + return buffer.readVString(); + + // Length-delimited bytes + case ProtoBuf.TYPES["bytes"]: + { + nBytes = buffer.readVarint32(); + if (buffer.remaining() < nBytes) + throw Error("Illegal number of bytes for " + this.toString(true) + ": " + nBytes + " required but got only " + buffer.remaining()); + value = buffer.clone(); // Offset already set + value.limit = value.offset + nBytes; + buffer.offset += nBytes; + return value; + } + + // Length-delimited embedded message + case ProtoBuf.TYPES["message"]: + { + nBytes = buffer.readVarint32(); + return this.resolvedType.decode(buffer, nBytes); + } + + // Legacy group + case ProtoBuf.TYPES["group"]: + return this.resolvedType.decode(buffer, -1, id); + } + + // We should never end here + throw Error("[INTERNAL] Illegal decode type"); + }; + + /** + * Converts a value from a string to the canonical element type. + * + * Legal only when isMapKey is true. + * + * @param {string} str The string value + * @returns {*} The value + */ + ElementPrototype.valueFromString = function(str) { + if (!this.isMapKey) { + throw Error("valueFromString() called on non-map-key element"); + } + + switch (this.type) { + case ProtoBuf.TYPES["int32"]: + case ProtoBuf.TYPES["sint32"]: + case ProtoBuf.TYPES["sfixed32"]: + case ProtoBuf.TYPES["uint32"]: + case ProtoBuf.TYPES["fixed32"]: + return this.verifyValue(parseInt(str)); + + case ProtoBuf.TYPES["int64"]: + case ProtoBuf.TYPES["sint64"]: + case ProtoBuf.TYPES["sfixed64"]: + case ProtoBuf.TYPES["uint64"]: + case ProtoBuf.TYPES["fixed64"]: + // Long-based fields support conversions from string already. + return this.verifyValue(str); + + case ProtoBuf.TYPES["bool"]: + return str === "true"; + + case ProtoBuf.TYPES["string"]: + return this.verifyValue(str); + + case ProtoBuf.TYPES["bytes"]: + return ByteBuffer.fromBinary(str); + } + }; + + /** + * Converts a value from the canonical element type to a string. + * + * It should be the case that `valueFromString(valueToString(val))` returns + * a value equivalent to `verifyValue(val)` for every legal value of `val` + * according to this element type. + * + * This may be used when the element must be stored or used as a string, + * e.g., as a map key on an Object. + * + * Legal only when isMapKey is true. + * + * @param {*} val The value + * @returns {string} The string form of the value. + */ + ElementPrototype.valueToString = function(value) { + if (!this.isMapKey) { + throw Error("valueToString() called on non-map-key element"); + } + + if (this.type === ProtoBuf.TYPES["bytes"]) { + return value.toString("binary"); + } else { + return value.toString(); + } + }; + + /** + * @alias ProtoBuf.Reflect.Element + * @expose + */ + Reflect.Element = Element; + + /** + * Constructs a new Message. + * @exports ProtoBuf.Reflect.Message + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {!ProtoBuf.Reflect.Namespace} parent Parent message or namespace + * @param {string} name Message name + * @param {Object.=} options Message options + * @param {boolean=} isGroup `true` if this is a legacy group + * @param {string?} syntax The syntax level of this definition (e.g., proto3) + * @constructor + * @extends ProtoBuf.Reflect.Namespace + */ + var Message = function(builder, parent, name, options, isGroup, syntax) { + Namespace.call(this, builder, parent, name, options, syntax); + + /** + * @override + */ + this.className = "Message"; + + /** + * Extensions range. + * @type {!Array.|undefined} + * @expose + */ + this.extensions = undefined; + + /** + * Runtime message class. + * @type {?function(new:ProtoBuf.Builder.Message)} + * @expose + */ + this.clazz = null; + + /** + * Whether this is a legacy group or not. + * @type {boolean} + * @expose + */ + this.isGroup = !!isGroup; + + // The following cached collections are used to efficiently iterate over or look up fields when decoding. + + /** + * Cached fields. + * @type {?Array.} + * @private + */ + this._fields = null; + + /** + * Cached fields by id. + * @type {?Object.} + * @private + */ + this._fieldsById = null; + + /** + * Cached fields by name. + * @type {?Object.} + * @private + */ + this._fieldsByName = null; + }; + + /** + * @alias ProtoBuf.Reflect.Message.prototype + * @inner + */ + var MessagePrototype = Message.prototype = Object.create(Namespace.prototype); + + /** + * Builds the message and returns the runtime counterpart, which is a fully functional class. + * @see ProtoBuf.Builder.Message + * @param {boolean=} rebuild Whether to rebuild or not, defaults to false + * @return {ProtoBuf.Reflect.Message} Message class + * @throws {Error} If the message cannot be built + * @expose + */ + MessagePrototype.build = function(rebuild) { + if (this.clazz && !rebuild) + return this.clazz; + + // Create the runtime Message class in its own scope + var clazz = (function(ProtoBuf, T) { + + var fields = T.getChildren(ProtoBuf.Reflect.Message.Field), + oneofs = T.getChildren(ProtoBuf.Reflect.Message.OneOf); + + /** + * Constructs a new runtime Message. + * @name ProtoBuf.Builder.Message + * @class Barebone of all runtime messages. + * @param {!Object.|string} values Preset values + * @param {...string} var_args + * @constructor + * @throws {Error} If the message cannot be created + */ + var Message = function(values, var_args) { + ProtoBuf.Builder.Message.call(this); + + // Create virtual oneof properties + for (var i = 0, k = oneofs.length; i < k; ++i) + this[oneofs[i].name] = null; + // Create fields and set default values + for (i = 0, k = fields.length; i < k; ++i) { + var field = fields[i]; + this[field.name] = + field.repeated ? [] : + (field.map ? new ProtoBuf.Map(field) : null); + if ((field.required || T.syntax === 'proto3') && + field.defaultValue !== null) + this[field.name] = field.defaultValue; + } + + if (arguments.length > 0) { + var value; + // Set field values from a values object + if (arguments.length === 1 && values !== null && typeof values === 'object' && + /* not _another_ Message */ + (typeof values.encode !== 'function' || values instanceof Message) && + /* not a repeated field */ + !Array.isArray(values) && + /* not a Map */ + !(values instanceof ProtoBuf.Map) && + /* not a ByteBuffer */ + !ByteBuffer.isByteBuffer(values) && + /* not an ArrayBuffer */ + !(values instanceof ArrayBuffer) && + /* not a Long */ + !(ProtoBuf.Long && values instanceof ProtoBuf.Long)) { + this.$set(values); + } else // Set field values from arguments, in declaration order + for (i = 0, k = arguments.length; i < k; ++i) + if (typeof(value = arguments[i]) !== 'undefined') + this.$set(fields[i].name, value); // May throw + } + }; + + /** + * @alias ProtoBuf.Builder.Message.prototype + * @inner + */ + var MessagePrototype = Message.prototype = Object.create(ProtoBuf.Builder.Message.prototype); + + /** + * Adds a value to a repeated field. + * @name ProtoBuf.Builder.Message#add + * @function + * @param {string} key Field name + * @param {*} value Value to add + * @param {boolean=} noAssert Whether to assert the value or not (asserts by default) + * @returns {!ProtoBuf.Builder.Message} this + * @throws {Error} If the value cannot be added + * @expose + */ + MessagePrototype.add = function(key, value, noAssert) { + var field = T._fieldsByName[key]; + if (!noAssert) { + if (!field) + throw Error(this + "#" + key + " is undefined"); + if (!(field instanceof ProtoBuf.Reflect.Message.Field)) + throw Error(this + "#" + key + " is not a field: " + field.toString(true)); // May throw if it's an enum or embedded message + if (!field.repeated) + throw Error(this + "#" + key + " is not a repeated field"); + value = field.verifyValue(value, true); + } + if (this[key] === null) + this[key] = []; + this[key].push(value); + return this; + }; + + /** + * Adds a value to a repeated field. This is an alias for {@link ProtoBuf.Builder.Message#add}. + * @name ProtoBuf.Builder.Message#$add + * @function + * @param {string} key Field name + * @param {*} value Value to add + * @param {boolean=} noAssert Whether to assert the value or not (asserts by default) + * @returns {!ProtoBuf.Builder.Message} this + * @throws {Error} If the value cannot be added + * @expose + */ + MessagePrototype.$add = MessagePrototype.add; + + /** + * Sets a field's value. + * @name ProtoBuf.Builder.Message#set + * @function + * @param {string|!Object.} keyOrObj String key or plain object holding multiple values + * @param {(*|boolean)=} value Value to set if key is a string, otherwise omitted + * @param {boolean=} noAssert Whether to not assert for an actual field / proper value type, defaults to `false` + * @returns {!ProtoBuf.Builder.Message} this + * @throws {Error} If the value cannot be set + * @expose + */ + MessagePrototype.set = function(keyOrObj, value, noAssert) { + if (keyOrObj && typeof keyOrObj === 'object') { + noAssert = value; + for (var ikey in keyOrObj) + if (keyOrObj.hasOwnProperty(ikey) && typeof(value = keyOrObj[ikey]) !== 'undefined') + this.$set(ikey, value, noAssert); + return this; + } + var field = T._fieldsByName[keyOrObj]; + if (!noAssert) { + if (!field) + throw Error(this + "#" + keyOrObj + " is not a field: undefined"); + if (!(field instanceof ProtoBuf.Reflect.Message.Field)) + throw Error(this + "#" + keyOrObj + " is not a field: " + field.toString(true)); + this[field.name] = (value = field.verifyValue(value)); // May throw + } else + this[keyOrObj] = value; + if (field && field.oneof) { // Field is part of an OneOf (not a virtual OneOf field) + var currentField = this[field.oneof.name]; // Virtual field references currently set field + if (value !== null) { + if (currentField !== null && currentField !== field.name) + this[currentField] = null; // Clear currently set field + this[field.oneof.name] = field.name; // Point virtual field at this field + } else if ( /* value === null && */ currentField === keyOrObj) + this[field.oneof.name] = null; // Clear virtual field (current field explicitly cleared) + } + return this; + }; + + /** + * Sets a field's value. This is an alias for [@link ProtoBuf.Builder.Message#set}. + * @name ProtoBuf.Builder.Message#$set + * @function + * @param {string|!Object.} keyOrObj String key or plain object holding multiple values + * @param {(*|boolean)=} value Value to set if key is a string, otherwise omitted + * @param {boolean=} noAssert Whether to not assert the value, defaults to `false` + * @throws {Error} If the value cannot be set + * @expose + */ + MessagePrototype.$set = MessagePrototype.set; + + /** + * Gets a field's value. + * @name ProtoBuf.Builder.Message#get + * @function + * @param {string} key Key + * @param {boolean=} noAssert Whether to not assert for an actual field, defaults to `false` + * @return {*} Value + * @throws {Error} If there is no such field + * @expose + */ + MessagePrototype.get = function(key, noAssert) { + if (noAssert) + return this[key]; + var field = T._fieldsByName[key]; + if (!field || !(field instanceof ProtoBuf.Reflect.Message.Field)) + throw Error(this + "#" + key + " is not a field: undefined"); + if (!(field instanceof ProtoBuf.Reflect.Message.Field)) + throw Error(this + "#" + key + " is not a field: " + field.toString(true)); + return this[field.name]; + }; + + /** + * Gets a field's value. This is an alias for {@link ProtoBuf.Builder.Message#$get}. + * @name ProtoBuf.Builder.Message#$get + * @function + * @param {string} key Key + * @return {*} Value + * @throws {Error} If there is no such field + * @expose + */ + MessagePrototype.$get = MessagePrototype.get; + + // Getters and setters + + for (var i = 0; i < fields.length; i++) { + var field = fields[i]; + // no setters for extension fields as these are named by their fqn + if (field instanceof ProtoBuf.Reflect.Message.ExtensionField) + continue; + + if (T.builder.options['populateAccessors']) + (function(field) { + // set/get[SomeValue] + var Name = field.originalName.replace(/(_[a-zA-Z])/g, function(match) { + return match.toUpperCase().replace('_', ''); + }); + Name = Name.substring(0, 1).toUpperCase() + Name.substring(1); + + // set/get_[some_value] FIXME: Do we really need these? + var name = field.originalName.replace(/([A-Z])/g, function(match) { + return "_" + match; + }); + + /** + * The current field's unbound setter function. + * @function + * @param {*} value + * @param {boolean=} noAssert + * @returns {!ProtoBuf.Builder.Message} + * @inner + */ + var setter = function(value, noAssert) { + this[field.name] = noAssert ? value : field.verifyValue(value); + return this; + }; + + /** + * The current field's unbound getter function. + * @function + * @returns {*} + * @inner + */ + var getter = function() { + return this[field.name]; + }; + + if (T.getChild("set" + Name) === null) + /** + * Sets a value. This method is present for each field, but only if there is no name conflict with + * another field. + * @name ProtoBuf.Builder.Message#set[SomeField] + * @function + * @param {*} value Value to set + * @param {boolean=} noAssert Whether to not assert the value, defaults to `false` + * @returns {!ProtoBuf.Builder.Message} this + * @abstract + * @throws {Error} If the value cannot be set + */ + MessagePrototype["set" + Name] = setter; + + if (T.getChild("set_" + name) === null) + /** + * Sets a value. This method is present for each field, but only if there is no name conflict with + * another field. + * @name ProtoBuf.Builder.Message#set_[some_field] + * @function + * @param {*} value Value to set + * @param {boolean=} noAssert Whether to not assert the value, defaults to `false` + * @returns {!ProtoBuf.Builder.Message} this + * @abstract + * @throws {Error} If the value cannot be set + */ + MessagePrototype["set_" + name] = setter; + + if (T.getChild("get" + Name) === null) + /** + * Gets a value. This method is present for each field, but only if there is no name conflict with + * another field. + * @name ProtoBuf.Builder.Message#get[SomeField] + * @function + * @abstract + * @return {*} The value + */ + MessagePrototype["get" + Name] = getter; + + if (T.getChild("get_" + name) === null) + /** + * Gets a value. This method is present for each field, but only if there is no name conflict with + * another field. + * @name ProtoBuf.Builder.Message#get_[some_field] + * @function + * @return {*} The value + * @abstract + */ + MessagePrototype["get_" + name] = getter; + + })(field); + } + + // En-/decoding + + /** + * Encodes the message. + * @name ProtoBuf.Builder.Message#$encode + * @function + * @param {(!ByteBuffer|boolean)=} buffer ByteBuffer to encode to. Will create a new one and flip it if omitted. + * @param {boolean=} noVerify Whether to not verify field values, defaults to `false` + * @return {!ByteBuffer} Encoded message as a ByteBuffer + * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still + * returns the encoded ByteBuffer in the `encoded` property on the error. + * @expose + * @see ProtoBuf.Builder.Message#encode64 + * @see ProtoBuf.Builder.Message#encodeHex + * @see ProtoBuf.Builder.Message#encodeAB + */ + MessagePrototype.encode = function(buffer, noVerify) { + if (typeof buffer === 'boolean') + noVerify = buffer, + buffer = undefined; + var isNew = false; + if (!buffer) + buffer = new ByteBuffer(), + isNew = true; + var le = buffer.littleEndian; + try { + T.encode(this, buffer.LE(), noVerify); + return (isNew ? buffer.flip() : buffer).LE(le); + } catch (e) { + buffer.LE(le); + throw (e); + } + }; + + /** + * Encodes a message using the specified data payload. + * @param {!Object.} data Data payload + * @param {(!ByteBuffer|boolean)=} buffer ByteBuffer to encode to. Will create a new one and flip it if omitted. + * @param {boolean=} noVerify Whether to not verify field values, defaults to `false` + * @return {!ByteBuffer} Encoded message as a ByteBuffer + * @expose + */ + Message.encode = function(data, buffer, noVerify) { + return new Message(data).encode(buffer, noVerify); + }; + + /** + * Calculates the byte length of the message. + * @name ProtoBuf.Builder.Message#calculate + * @function + * @returns {number} Byte length + * @throws {Error} If the message cannot be calculated or if required fields are missing. + * @expose + */ + MessagePrototype.calculate = function() { + return T.calculate(this); + }; + + /** + * Encodes the varint32 length-delimited message. + * @name ProtoBuf.Builder.Message#encodeDelimited + * @function + * @param {(!ByteBuffer|boolean)=} buffer ByteBuffer to encode to. Will create a new one and flip it if omitted. + * @param {boolean=} noVerify Whether to not verify field values, defaults to `false` + * @return {!ByteBuffer} Encoded message as a ByteBuffer + * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still + * returns the encoded ByteBuffer in the `encoded` property on the error. + * @expose + */ + MessagePrototype.encodeDelimited = function(buffer, noVerify) { + var isNew = false; + if (!buffer) + buffer = new ByteBuffer(), + isNew = true; + var enc = new ByteBuffer().LE(); + T.encode(this, enc, noVerify).flip(); + buffer.writeVarint32(enc.remaining()); + buffer.append(enc); + return isNew ? buffer.flip() : buffer; + }; + + /** + * Directly encodes the message to an ArrayBuffer. + * @name ProtoBuf.Builder.Message#encodeAB + * @function + * @return {ArrayBuffer} Encoded message as ArrayBuffer + * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still + * returns the encoded ArrayBuffer in the `encoded` property on the error. + * @expose + */ + MessagePrototype.encodeAB = function() { + try { + return this.encode().toArrayBuffer(); + } catch (e) { + if (e["encoded"]) e["encoded"] = e["encoded"].toArrayBuffer(); + throw (e); + } + }; + + /** + * Returns the message as an ArrayBuffer. This is an alias for {@link ProtoBuf.Builder.Message#encodeAB}. + * @name ProtoBuf.Builder.Message#toArrayBuffer + * @function + * @return {ArrayBuffer} Encoded message as ArrayBuffer + * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still + * returns the encoded ArrayBuffer in the `encoded` property on the error. + * @expose + */ + MessagePrototype.toArrayBuffer = MessagePrototype.encodeAB; + + /** + * Directly encodes the message to a node Buffer. + * @name ProtoBuf.Builder.Message#encodeNB + * @function + * @return {!Buffer} + * @throws {Error} If the message cannot be encoded, not running under node.js or if required fields are + * missing. The later still returns the encoded node Buffer in the `encoded` property on the error. + * @expose + */ + MessagePrototype.encodeNB = function() { + try { + return this.encode().toBuffer(); + } catch (e) { + if (e["encoded"]) e["encoded"] = e["encoded"].toBuffer(); + throw (e); + } + }; + + /** + * Returns the message as a node Buffer. This is an alias for {@link ProtoBuf.Builder.Message#encodeNB}. + * @name ProtoBuf.Builder.Message#toBuffer + * @function + * @return {!Buffer} + * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still + * returns the encoded node Buffer in the `encoded` property on the error. + * @expose + */ + MessagePrototype.toBuffer = MessagePrototype.encodeNB; + + /** + * Directly encodes the message to a base64 encoded string. + * @name ProtoBuf.Builder.Message#encode64 + * @function + * @return {string} Base64 encoded string + * @throws {Error} If the underlying buffer cannot be encoded or if required fields are missing. The later + * still returns the encoded base64 string in the `encoded` property on the error. + * @expose + */ + MessagePrototype.encode64 = function() { + try { + return this.encode().toBase64(); + } catch (e) { + if (e["encoded"]) e["encoded"] = e["encoded"].toBase64(); + throw (e); + } + }; + + /** + * Returns the message as a base64 encoded string. This is an alias for {@link ProtoBuf.Builder.Message#encode64}. + * @name ProtoBuf.Builder.Message#toBase64 + * @function + * @return {string} Base64 encoded string + * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still + * returns the encoded base64 string in the `encoded` property on the error. + * @expose + */ + MessagePrototype.toBase64 = MessagePrototype.encode64; + + /** + * Directly encodes the message to a hex encoded string. + * @name ProtoBuf.Builder.Message#encodeHex + * @function + * @return {string} Hex encoded string + * @throws {Error} If the underlying buffer cannot be encoded or if required fields are missing. The later + * still returns the encoded hex string in the `encoded` property on the error. + * @expose + */ + MessagePrototype.encodeHex = function() { + try { + return this.encode().toHex(); + } catch (e) { + if (e["encoded"]) e["encoded"] = e["encoded"].toHex(); + throw (e); + } + }; + + /** + * Returns the message as a hex encoded string. This is an alias for {@link ProtoBuf.Builder.Message#encodeHex}. + * @name ProtoBuf.Builder.Message#toHex + * @function + * @return {string} Hex encoded string + * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still + * returns the encoded hex string in the `encoded` property on the error. + * @expose + */ + MessagePrototype.toHex = MessagePrototype.encodeHex; + + /** + * Clones a message object or field value to a raw object. + * @param {*} obj Object to clone + * @param {boolean} binaryAsBase64 Whether to include binary data as base64 strings or as a buffer otherwise + * @param {boolean} longsAsStrings Whether to encode longs as strings + * @param {!ProtoBuf.Reflect.T=} resolvedType The resolved field type if a field + * @returns {*} Cloned object + * @inner + */ + function cloneRaw(obj, binaryAsBase64, longsAsStrings, resolvedType) { + if (obj === null || typeof obj !== 'object') { + // Convert enum values to their respective names + if (resolvedType && resolvedType instanceof ProtoBuf.Reflect.Enum) { + var name = ProtoBuf.Reflect.Enum.getName(resolvedType.object, obj); + if (name !== null) + return name; + } + // Pass-through string, number, boolean, null... + return obj; + } + // Convert ByteBuffers to raw buffer or strings + if (ByteBuffer.isByteBuffer(obj)) + return binaryAsBase64 ? obj.toBase64() : obj.toBuffer(); + // Convert Longs to proper objects or strings + if (ProtoBuf.Long.isLong(obj)) + return longsAsStrings ? obj.toString() : ProtoBuf.Long.fromValue(obj); + var clone; + // Clone arrays + if (Array.isArray(obj)) { + clone = []; + obj.forEach(function(v, k) { + clone[k] = cloneRaw(v, binaryAsBase64, longsAsStrings, resolvedType); + }); + return clone; + } + clone = {}; + // Convert maps to objects + if (obj instanceof ProtoBuf.Map) { + var it = obj.entries(); + for (var e = it.next(); !e.done; e = it.next()) + clone[obj.keyElem.valueToString(e.value[0])] = cloneRaw(e.value[1], binaryAsBase64, longsAsStrings, obj.valueElem.resolvedType); + return clone; + } + // Everything else is a non-null object + var type = obj.$type, + field = undefined; + for (var i in obj) + if (obj.hasOwnProperty(i)) { + if (type && (field = type.getChild(i))) + clone[i] = cloneRaw(obj[i], binaryAsBase64, longsAsStrings, field.resolvedType); + else + clone[i] = cloneRaw(obj[i], binaryAsBase64, longsAsStrings); + } + return clone; + } + + /** + * Returns the message's raw payload. + * @param {boolean=} binaryAsBase64 Whether to include binary data as base64 strings instead of Buffers, defaults to `false` + * @param {boolean} longsAsStrings Whether to encode longs as strings + * @returns {Object.} Raw payload + * @expose + */ + MessagePrototype.toRaw = function(binaryAsBase64, longsAsStrings) { + return cloneRaw(this, !!binaryAsBase64, !!longsAsStrings, this.$type); + }; + + /** + * Encodes a message to JSON. + * @returns {string} JSON string + * @expose + */ + MessagePrototype.encodeJSON = function() { + return JSON.stringify( + cloneRaw(this, + /* binary-as-base64 */ + true, + /* longs-as-strings */ + true, + this.$type + ) + ); + }; + + /** + * Decodes a message from the specified buffer or string. + * @name ProtoBuf.Builder.Message.decode + * @function + * @param {!ByteBuffer|!ArrayBuffer|!Buffer|string} buffer Buffer to decode from + * @param {(number|string)=} length Message length. Defaults to decode all the remainig data. + * @param {string=} enc Encoding if buffer is a string: hex, utf8 (not recommended), defaults to base64 + * @return {!ProtoBuf.Builder.Message} Decoded message + * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still + * returns the decoded message with missing fields in the `decoded` property on the error. + * @expose + * @see ProtoBuf.Builder.Message.decode64 + * @see ProtoBuf.Builder.Message.decodeHex + */ + Message.decode = function(buffer, length, enc) { + if (typeof length === 'string') + enc = length, + length = -1; + if (typeof buffer === 'string') + buffer = ByteBuffer.wrap(buffer, enc ? enc : "base64"); + buffer = ByteBuffer.isByteBuffer(buffer) ? buffer : ByteBuffer.wrap(buffer); // May throw + var le = buffer.littleEndian; + try { + var msg = T.decode(buffer.LE()); + buffer.LE(le); + return msg; + } catch (e) { + buffer.LE(le); + throw (e); + } + }; + + /** + * Decodes a varint32 length-delimited message from the specified buffer or string. + * @name ProtoBuf.Builder.Message.decodeDelimited + * @function + * @param {!ByteBuffer|!ArrayBuffer|!Buffer|string} buffer Buffer to decode from + * @param {string=} enc Encoding if buffer is a string: hex, utf8 (not recommended), defaults to base64 + * @return {ProtoBuf.Builder.Message} Decoded message or `null` if not enough bytes are available yet + * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still + * returns the decoded message with missing fields in the `decoded` property on the error. + * @expose + */ + Message.decodeDelimited = function(buffer, enc) { + if (typeof buffer === 'string') + buffer = ByteBuffer.wrap(buffer, enc ? enc : "base64"); + buffer = ByteBuffer.isByteBuffer(buffer) ? buffer : ByteBuffer.wrap(buffer); // May throw + if (buffer.remaining() < 1) + return null; + var off = buffer.offset, + len = buffer.readVarint32(); + if (buffer.remaining() < len) { + buffer.offset = off; + return null; + } + try { + var msg = T.decode(buffer.slice(buffer.offset, buffer.offset + len).LE()); + buffer.offset += len; + return msg; + } catch (err) { + buffer.offset += len; + throw err; + } + }; + + /** + * Decodes the message from the specified base64 encoded string. + * @name ProtoBuf.Builder.Message.decode64 + * @function + * @param {string} str String to decode from + * @return {!ProtoBuf.Builder.Message} Decoded message + * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still + * returns the decoded message with missing fields in the `decoded` property on the error. + * @expose + */ + Message.decode64 = function(str) { + return Message.decode(str, "base64"); + }; + + /** + * Decodes the message from the specified hex encoded string. + * @name ProtoBuf.Builder.Message.decodeHex + * @function + * @param {string} str String to decode from + * @return {!ProtoBuf.Builder.Message} Decoded message + * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still + * returns the decoded message with missing fields in the `decoded` property on the error. + * @expose + */ + Message.decodeHex = function(str) { + return Message.decode(str, "hex"); + }; + + /** + * Decodes the message from a JSON string. + * @name ProtoBuf.Builder.Message.decodeJSON + * @function + * @param {string} str String to decode from + * @return {!ProtoBuf.Builder.Message} Decoded message + * @throws {Error} If the message cannot be decoded or if required fields are + * missing. + * @expose + */ + Message.decodeJSON = function(str) { + return new Message(JSON.parse(str)); + }; + + // Utility + + /** + * Returns a string representation of this Message. + * @name ProtoBuf.Builder.Message#toString + * @function + * @return {string} String representation as of ".Fully.Qualified.MessageName" + * @expose + */ + MessagePrototype.toString = function() { + return T.toString(); + }; + + // Properties + + /** + * Message options. + * @name ProtoBuf.Builder.Message.$options + * @type {Object.} + * @expose + */ + var $optionsS; // cc needs this + + /** + * Message options. + * @name ProtoBuf.Builder.Message#$options + * @type {Object.} + * @expose + */ + var $options; + + /** + * Reflection type. + * @name ProtoBuf.Builder.Message.$type + * @type {!ProtoBuf.Reflect.Message} + * @expose + */ + var $typeS; + + /** + * Reflection type. + * @name ProtoBuf.Builder.Message#$type + * @type {!ProtoBuf.Reflect.Message} + * @expose + */ + var $type; + + if (Object.defineProperty) + Object.defineProperty(Message, '$options', { + "value": T.buildOpt() + }), + Object.defineProperty(MessagePrototype, "$options", { + "value": Message["$options"] + }), + Object.defineProperty(Message, "$type", { + "value": T + }), + Object.defineProperty(MessagePrototype, "$type", { + "value": T + }); + + return Message; + + })(ProtoBuf, this); + + // Static enums and prototyped sub-messages / cached collections + this._fields = []; + this._fieldsById = {}; + this._fieldsByName = {}; + for (var i = 0, k = this.children.length, child; i < k; i++) { + child = this.children[i]; + if (child instanceof Enum || child instanceof Message || child instanceof Service) { + if (clazz.hasOwnProperty(child.name)) + throw Error("Illegal reflect child of " + this.toString(true) + ": " + child.toString(true) + " cannot override static property '" + child.name + "'"); + clazz[child.name] = child.build(); + } else if (child instanceof Message.Field) + child.build(), + this._fields.push(child), + this._fieldsById[child.id] = child, + this._fieldsByName[child.name] = child; + else if (!(child instanceof Message.OneOf) && !(child instanceof Extension)) // Not built + throw Error("Illegal reflect child of " + this.toString(true) + ": " + this.children[i].toString(true)); + } + + return this.clazz = clazz; + }; + + /** + * Encodes a runtime message's contents to the specified buffer. + * @param {!ProtoBuf.Builder.Message} message Runtime message to encode + * @param {ByteBuffer} buffer ByteBuffer to write to + * @param {boolean=} noVerify Whether to not verify field values, defaults to `false` + * @return {ByteBuffer} The ByteBuffer for chaining + * @throws {Error} If required fields are missing or the message cannot be encoded for another reason + * @expose + */ + MessagePrototype.encode = function(message, buffer, noVerify) { + var fieldMissing = null, + field; + for (var i = 0, k = this._fields.length, val; i < k; ++i) { + field = this._fields[i]; + val = message[field.name]; + if (field.required && val === null) { + if (fieldMissing === null) + fieldMissing = field; + } else + field.encode(noVerify ? val : field.verifyValue(val), buffer, message); + } + if (fieldMissing !== null) { + var err = Error("Missing at least one required field for " + this.toString(true) + ": " + fieldMissing); + err["encoded"] = buffer; // Still expose what we got + throw (err); + } + return buffer; + }; + + /** + * Calculates a runtime message's byte length. + * @param {!ProtoBuf.Builder.Message} message Runtime message to encode + * @returns {number} Byte length + * @throws {Error} If required fields are missing or the message cannot be calculated for another reason + * @expose + */ + MessagePrototype.calculate = function(message) { + for (var n = 0, i = 0, k = this._fields.length, field, val; i < k; ++i) { + field = this._fields[i]; + val = message[field.name]; + if (field.required && val === null) + throw Error("Missing at least one required field for " + this.toString(true) + ": " + field); + else + n += field.calculate(val, message); + } + return n; + }; + + /** + * Skips all data until the end of the specified group has been reached. + * @param {number} expectedId Expected GROUPEND id + * @param {!ByteBuffer} buf ByteBuffer + * @returns {boolean} `true` if a value as been skipped, `false` if the end has been reached + * @throws {Error} If it wasn't possible to find the end of the group (buffer overrun or end tag mismatch) + * @inner + */ + function skipTillGroupEnd(expectedId, buf) { + var tag = buf.readVarint32(), // Throws on OOB + wireType = tag & 0x07, + id = tag >>> 3; + switch (wireType) { + case ProtoBuf.WIRE_TYPES.VARINT: + do tag = buf.readUint8(); + while ((tag & 0x80) === 0x80); + break; + case ProtoBuf.WIRE_TYPES.BITS64: + buf.offset += 8; + break; + case ProtoBuf.WIRE_TYPES.LDELIM: + tag = buf.readVarint32(); // reads the varint + buf.offset += tag; // skips n bytes + break; + case ProtoBuf.WIRE_TYPES.STARTGROUP: + skipTillGroupEnd(id, buf); + break; + case ProtoBuf.WIRE_TYPES.ENDGROUP: + if (id === expectedId) + return false; + else + throw Error("Illegal GROUPEND after unknown group: " + id + " (" + expectedId + " expected)"); + case ProtoBuf.WIRE_TYPES.BITS32: + buf.offset += 4; + break; + default: + throw Error("Illegal wire type in unknown group " + expectedId + ": " + wireType); + } + return true; + } + + /** + * Decodes an encoded message and returns the decoded message. + * @param {ByteBuffer} buffer ByteBuffer to decode from + * @param {number=} length Message length. Defaults to decode all remaining data. + * @param {number=} expectedGroupEndId Expected GROUPEND id if this is a legacy group + * @return {ProtoBuf.Builder.Message} Decoded message + * @throws {Error} If the message cannot be decoded + * @expose + */ + MessagePrototype.decode = function(buffer, length, expectedGroupEndId) { + length = typeof length === 'number' ? length : -1; + var start = buffer.offset, + msg = new(this.clazz)(), + tag, wireType, id, field; + while (buffer.offset < start + length || (length === -1 && buffer.remaining() > 0)) { + tag = buffer.readVarint32(); + wireType = tag & 0x07; + id = tag >>> 3; + if (wireType === ProtoBuf.WIRE_TYPES.ENDGROUP) { + if (id !== expectedGroupEndId) + throw Error("Illegal group end indicator for " + this.toString(true) + ": " + id + " (" + (expectedGroupEndId ? expectedGroupEndId + " expected" : "not a group") + ")"); + break; + } + if (!(field = this._fieldsById[id])) { + // "messages created by your new code can be parsed by your old code: old binaries simply ignore the new field when parsing." + switch (wireType) { + case ProtoBuf.WIRE_TYPES.VARINT: + buffer.readVarint32(); + break; + case ProtoBuf.WIRE_TYPES.BITS32: + buffer.offset += 4; + break; + case ProtoBuf.WIRE_TYPES.BITS64: + buffer.offset += 8; + break; + case ProtoBuf.WIRE_TYPES.LDELIM: + var len = buffer.readVarint32(); + buffer.offset += len; + break; + case ProtoBuf.WIRE_TYPES.STARTGROUP: + while (skipTillGroupEnd(id, buffer)) {} + break; + default: + throw Error("Illegal wire type for unknown field " + id + " in " + this.toString(true) + "#decode: " + wireType); + } + continue; + } + if (field.repeated && !field.options["packed"]) { + msg[field.name].push(field.decode(wireType, buffer)); + } else if (field.map) { + var keyval = field.decode(wireType, buffer); + msg[field.name].set(keyval[0], keyval[1]); + } else { + msg[field.name] = field.decode(wireType, buffer); + if (field.oneof) { // Field is part of an OneOf (not a virtual OneOf field) + var currentField = msg[field.oneof.name]; // Virtual field references currently set field + if (currentField !== null && currentField !== field.name) + msg[currentField] = null; // Clear currently set field + msg[field.oneof.name] = field.name; // Point virtual field at this field + } + } + } + + // Check if all required fields are present and set default values for optional fields that are not + for (var i = 0, k = this._fields.length; i < k; ++i) { + field = this._fields[i]; + if (msg[field.name] === null) { + if (this.syntax === "proto3") { // Proto3 sets default values by specification + msg[field.name] = field.defaultValue; + } else if (field.required) { + var err = Error("Missing at least one required field for " + this.toString(true) + ": " + field.name); + err["decoded"] = msg; // Still expose what we got + throw (err); + } else if (ProtoBuf.populateDefaults && field.defaultValue !== null) + msg[field.name] = field.defaultValue; + } + } + return msg; + }; + + /** + * @alias ProtoBuf.Reflect.Message + * @expose + */ + Reflect.Message = Message; + + /** + * Constructs a new Message Field. + * @exports ProtoBuf.Reflect.Message.Field + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {!ProtoBuf.Reflect.Message} message Message reference + * @param {string} rule Rule, one of requried, optional, repeated + * @param {string?} keytype Key data type, if any. + * @param {string} type Data type, e.g. int32 + * @param {string} name Field name + * @param {number} id Unique field id + * @param {Object.=} options Options + * @param {!ProtoBuf.Reflect.Message.OneOf=} oneof Enclosing OneOf + * @param {string?} syntax The syntax level of this definition (e.g., proto3) + * @constructor + * @extends ProtoBuf.Reflect.T + */ + var Field = function(builder, message, rule, keytype, type, name, id, options, oneof, syntax) { + T.call(this, builder, message, name); + + /** + * @override + */ + this.className = "Message.Field"; + + /** + * Message field required flag. + * @type {boolean} + * @expose + */ + this.required = rule === "required"; + + /** + * Message field repeated flag. + * @type {boolean} + * @expose + */ + this.repeated = rule === "repeated"; + + /** + * Message field map flag. + * @type {boolean} + * @expose + */ + this.map = rule === "map"; + + /** + * Message field key type. Type reference string if unresolved, protobuf + * type if resolved. Valid only if this.map === true, null otherwise. + * @type {string|{name: string, wireType: number}|null} + * @expose + */ + this.keyType = keytype || null; + + /** + * Message field type. Type reference string if unresolved, protobuf type if + * resolved. In a map field, this is the value type. + * @type {string|{name: string, wireType: number}} + * @expose + */ + this.type = type; + + /** + * Resolved type reference inside the global namespace. + * @type {ProtoBuf.Reflect.T|null} + * @expose + */ + this.resolvedType = null; + + /** + * Unique message field id. + * @type {number} + * @expose + */ + this.id = id; + + /** + * Message field options. + * @type {!Object.} + * @dict + * @expose + */ + this.options = options || {}; + + /** + * Default value. + * @type {*} + * @expose + */ + this.defaultValue = null; + + /** + * Enclosing OneOf. + * @type {?ProtoBuf.Reflect.Message.OneOf} + * @expose + */ + this.oneof = oneof || null; + + /** + * Syntax level of this definition (e.g., proto3). + * @type {string} + * @expose + */ + this.syntax = syntax || 'proto2'; + + /** + * Original field name. + * @type {string} + * @expose + */ + this.originalName = this.name; // Used to revert camelcase transformation on naming collisions + + /** + * Element implementation. Created in build() after types are resolved. + * @type {ProtoBuf.Element} + * @expose + */ + this.element = null; + + /** + * Key element implementation, for map fields. Created in build() after + * types are resolved. + * @type {ProtoBuf.Element} + * @expose + */ + this.keyElement = null; + + // Convert field names to camel case notation if the override is set + if (this.builder.options['convertFieldsToCamelCase'] && !(this instanceof Message.ExtensionField)) + this.name = ProtoBuf.Util.toCamelCase(this.name); + }; + + /** + * @alias ProtoBuf.Reflect.Message.Field.prototype + * @inner + */ + var FieldPrototype = Field.prototype = Object.create(T.prototype); + + /** + * Builds the field. + * @override + * @expose + */ + FieldPrototype.build = function() { + this.element = new Element(this.type, this.resolvedType, false, this.syntax); + if (this.map) + this.keyElement = new Element(this.keyType, undefined, true, this.syntax); + + // In proto3, fields do not have field presence, and every field is set to + // its type's default value ("", 0, 0.0, or false). + if (this.syntax === 'proto3' && !this.repeated && !this.map) + this.defaultValue = Element.defaultFieldValue(this.type); + + // Otherwise, default values are present when explicitly specified + else if (typeof this.options['default'] !== 'undefined') + this.defaultValue = this.verifyValue(this.options['default']); + }; + + /** + * Checks if the given value can be set for this field. + * @param {*} value Value to check + * @param {boolean=} skipRepeated Whether to skip the repeated value check or not. Defaults to false. + * @return {*} Verified, maybe adjusted, value + * @throws {Error} If the value cannot be set for this field + * @expose + */ + FieldPrototype.verifyValue = function(value, skipRepeated) { + skipRepeated = skipRepeated || false; + var self = this; + + function fail(val, msg) { + throw Error("Illegal value for " + self.toString(true) + " of type " + self.type.name + ": " + val + " (" + msg + ")"); + } + if (value === null) { // NULL values for optional fields + if (this.required) + fail(typeof value, "required"); + if (this.syntax === 'proto3' && this.type !== ProtoBuf.TYPES["message"]) + fail(typeof value, "proto3 field without field presence cannot be null"); + return null; + } + var i; + if (this.repeated && !skipRepeated) { // Repeated values as arrays + if (!Array.isArray(value)) + value = [value]; + var res = []; + for (i = 0; i < value.length; i++) + res.push(this.element.verifyValue(value[i])); + return res; + } + if (this.map && !skipRepeated) { // Map values as objects + if (!(value instanceof ProtoBuf.Map)) { + // If not already a Map, attempt to convert. + if (!(value instanceof Object)) { + fail(typeof value, + "expected ProtoBuf.Map or raw object for map field"); + } + return new ProtoBuf.Map(this, value); + } else { + return value; + } + } + // All non-repeated fields expect no array + if (!this.repeated && Array.isArray(value)) + fail(typeof value, "no array expected"); + + return this.element.verifyValue(value); + }; + + /** + * Determines whether the field will have a presence on the wire given its + * value. + * @param {*} value Verified field value + * @param {!ProtoBuf.Builder.Message} message Runtime message + * @return {boolean} Whether the field will be present on the wire + */ + FieldPrototype.hasWirePresence = function(value, message) { + if (this.syntax !== 'proto3') + return (value !== null); + if (this.oneof && message[this.oneof.name] === this.name) + return true; + switch (this.type) { + case ProtoBuf.TYPES["int32"]: + case ProtoBuf.TYPES["sint32"]: + case ProtoBuf.TYPES["sfixed32"]: + case ProtoBuf.TYPES["uint32"]: + case ProtoBuf.TYPES["fixed32"]: + return value !== 0; + + case ProtoBuf.TYPES["int64"]: + case ProtoBuf.TYPES["sint64"]: + case ProtoBuf.TYPES["sfixed64"]: + case ProtoBuf.TYPES["uint64"]: + case ProtoBuf.TYPES["fixed64"]: + return value.low !== 0 || value.high !== 0; + + case ProtoBuf.TYPES["bool"]: + return value; + + case ProtoBuf.TYPES["float"]: + case ProtoBuf.TYPES["double"]: + return value !== 0.0; + + case ProtoBuf.TYPES["string"]: + return value.length > 0; + + case ProtoBuf.TYPES["bytes"]: + return value.remaining() > 0; + + case ProtoBuf.TYPES["enum"]: + return value !== 0; + + case ProtoBuf.TYPES["message"]: + return value !== null; + default: + return true; + } + }; + + /** + * Encodes the specified field value to the specified buffer. + * @param {*} value Verified field value + * @param {ByteBuffer} buffer ByteBuffer to encode to + * @param {!ProtoBuf.Builder.Message} message Runtime message + * @return {ByteBuffer} The ByteBuffer for chaining + * @throws {Error} If the field cannot be encoded + * @expose + */ + FieldPrototype.encode = function(value, buffer, message) { + if (this.type === null || typeof this.type !== 'object') + throw Error("[INTERNAL] Unresolved type in " + this.toString(true) + ": " + this.type); + if (value === null || (this.repeated && value.length == 0)) + return buffer; // Optional omitted + try { + if (this.repeated) { + var i; + // "Only repeated fields of primitive numeric types (types which use the varint, 32-bit, or 64-bit wire + // types) can be declared 'packed'." + if (this.options["packed"] && ProtoBuf.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType) >= 0) { + // "All of the elements of the field are packed into a single key-value pair with wire type 2 + // (length-delimited). Each element is encoded the same way it would be normally, except without a + // tag preceding it." + buffer.writeVarint32((this.id << 3) | ProtoBuf.WIRE_TYPES.LDELIM); + buffer.ensureCapacity(buffer.offset += 1); // We do not know the length yet, so let's assume a varint of length 1 + var start = buffer.offset; // Remember where the contents begin + for (i = 0; i < value.length; i++) + this.element.encodeValue(this.id, value[i], buffer); + var len = buffer.offset - start, + varintLen = ByteBuffer.calculateVarint32(len); + if (varintLen > 1) { // We need to move the contents + var contents = buffer.slice(start, buffer.offset); + start += varintLen - 1; + buffer.offset = start; + buffer.append(contents); + } + buffer.writeVarint32(len, start - varintLen); + } else { + // "If your message definition has repeated elements (without the [packed=true] option), the encoded + // message has zero or more key-value pairs with the same tag number" + for (i = 0; i < value.length; i++) + buffer.writeVarint32((this.id << 3) | this.type.wireType), + this.element.encodeValue(this.id, value[i], buffer); + } + } else if (this.map) { + // Write out each map entry as a submessage. + value.forEach(function(val, key, m) { + // Compute the length of the submessage (key, val) pair. + var length = + ByteBuffer.calculateVarint32((1 << 3) | this.keyType.wireType) + + this.keyElement.calculateLength(1, key) + + ByteBuffer.calculateVarint32((2 << 3) | this.type.wireType) + + this.element.calculateLength(2, val); + + // Submessage with wire type of length-delimited. + buffer.writeVarint32((this.id << 3) | ProtoBuf.WIRE_TYPES.LDELIM); + buffer.writeVarint32(length); + + // Write out the key and val. + buffer.writeVarint32((1 << 3) | this.keyType.wireType); + this.keyElement.encodeValue(1, key, buffer); + buffer.writeVarint32((2 << 3) | this.type.wireType); + this.element.encodeValue(2, val, buffer); + }, this); + } else { + if (this.hasWirePresence(value, message)) { + buffer.writeVarint32((this.id << 3) | this.type.wireType); + this.element.encodeValue(this.id, value, buffer); + } + } + } catch (e) { + throw Error("Illegal value for " + this.toString(true) + ": " + value + " (" + e + ")"); + } + return buffer; + }; + + /** + * Calculates the length of this field's value on the network level. + * @param {*} value Field value + * @param {!ProtoBuf.Builder.Message} message Runtime message + * @returns {number} Byte length + * @expose + */ + FieldPrototype.calculate = function(value, message) { + value = this.verifyValue(value); // May throw + if (this.type === null || typeof this.type !== 'object') + throw Error("[INTERNAL] Unresolved type in " + this.toString(true) + ": " + this.type); + if (value === null || (this.repeated && value.length == 0)) + return 0; // Optional omitted + var n = 0; + try { + if (this.repeated) { + var i, ni; + if (this.options["packed"] && ProtoBuf.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType) >= 0) { + n += ByteBuffer.calculateVarint32((this.id << 3) | ProtoBuf.WIRE_TYPES.LDELIM); + ni = 0; + for (i = 0; i < value.length; i++) + ni += this.element.calculateLength(this.id, value[i]); + n += ByteBuffer.calculateVarint32(ni); + n += ni; + } else { + for (i = 0; i < value.length; i++) + n += ByteBuffer.calculateVarint32((this.id << 3) | this.type.wireType), + n += this.element.calculateLength(this.id, value[i]); + } + } else if (this.map) { + // Each map entry becomes a submessage. + value.forEach(function(val, key, m) { + // Compute the length of the submessage (key, val) pair. + var length = + ByteBuffer.calculateVarint32((1 << 3) | this.keyType.wireType) + + this.keyElement.calculateLength(1, key) + + ByteBuffer.calculateVarint32((2 << 3) | this.type.wireType) + + this.element.calculateLength(2, val); + + n += ByteBuffer.calculateVarint32((this.id << 3) | ProtoBuf.WIRE_TYPES.LDELIM); + n += ByteBuffer.calculateVarint32(length); + n += length; + }, this); + } else { + if (this.hasWirePresence(value, message)) { + n += ByteBuffer.calculateVarint32((this.id << 3) | this.type.wireType); + n += this.element.calculateLength(this.id, value); + } + } + } catch (e) { + throw Error("Illegal value for " + this.toString(true) + ": " + value + " (" + e + ")"); + } + return n; + }; + + /** + * Decode the field value from the specified buffer. + * @param {number} wireType Leading wire type + * @param {ByteBuffer} buffer ByteBuffer to decode from + * @param {boolean=} skipRepeated Whether to skip the repeated check or not. Defaults to false. + * @return {*} Decoded value: array for packed repeated fields, [key, value] for + * map fields, or an individual value otherwise. + * @throws {Error} If the field cannot be decoded + * @expose + */ + FieldPrototype.decode = function(wireType, buffer, skipRepeated) { + var value, nBytes; + + // We expect wireType to match the underlying type's wireType unless we see + // a packed repeated field, or unless this is a map field. + var wireTypeOK = + (!this.map && wireType == this.type.wireType) || + (!skipRepeated && this.repeated && this.options["packed"] && + wireType == ProtoBuf.WIRE_TYPES.LDELIM) || + (this.map && wireType == ProtoBuf.WIRE_TYPES.LDELIM); + if (!wireTypeOK) + throw Error("Illegal wire type for field " + this.toString(true) + ": " + wireType + " (" + this.type.wireType + " expected)"); + + // Handle packed repeated fields. + if (wireType == ProtoBuf.WIRE_TYPES.LDELIM && this.repeated && this.options["packed"] && ProtoBuf.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType) >= 0) { + if (!skipRepeated) { + nBytes = buffer.readVarint32(); + nBytes = buffer.offset + nBytes; // Limit + var values = []; + while (buffer.offset < nBytes) + values.push(this.decode(this.type.wireType, buffer, true)); + return values; + } + // Read the next value otherwise... + } + + // Handle maps. + if (this.map) { + // Read one (key, value) submessage, and return [key, value] + var key = Element.defaultFieldValue(this.keyType); + value = Element.defaultFieldValue(this.type); + + // Read the length + nBytes = buffer.readVarint32(); + if (buffer.remaining() < nBytes) + throw Error("Illegal number of bytes for " + this.toString(true) + ": " + nBytes + " required but got only " + buffer.remaining()); + + // Get a sub-buffer of this key/value submessage + var msgbuf = buffer.clone(); + msgbuf.limit = msgbuf.offset + nBytes; + buffer.offset += nBytes; + + while (msgbuf.remaining() > 0) { + var tag = msgbuf.readVarint32(); + wireType = tag & 0x07; + var id = tag >>> 3; + if (id === 1) { + key = this.keyElement.decode(msgbuf, wireType, id); + } else if (id === 2) { + value = this.element.decode(msgbuf, wireType, id); + } else { + throw Error("Unexpected tag in map field key/value submessage"); + } + } + + return [key, value]; + } + + // Handle singular and non-packed repeated field values. + return this.element.decode(buffer, wireType, this.id); + }; + + /** + * @alias ProtoBuf.Reflect.Message.Field + * @expose + */ + Reflect.Message.Field = Field; + + /** + * Constructs a new Message ExtensionField. + * @exports ProtoBuf.Reflect.Message.ExtensionField + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {!ProtoBuf.Reflect.Message} message Message reference + * @param {string} rule Rule, one of requried, optional, repeated + * @param {string} type Data type, e.g. int32 + * @param {string} name Field name + * @param {number} id Unique field id + * @param {!Object.=} options Options + * @constructor + * @extends ProtoBuf.Reflect.Message.Field + */ + var ExtensionField = function(builder, message, rule, type, name, id, options) { + Field.call(this, builder, message, rule, /* keytype = */ null, type, name, id, options); + + /** + * Extension reference. + * @type {!ProtoBuf.Reflect.Extension} + * @expose + */ + this.extension; + }; + + // Extends Field + ExtensionField.prototype = Object.create(Field.prototype); + + /** + * @alias ProtoBuf.Reflect.Message.ExtensionField + * @expose + */ + Reflect.Message.ExtensionField = ExtensionField; + + /** + * Constructs a new Message OneOf. + * @exports ProtoBuf.Reflect.Message.OneOf + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {!ProtoBuf.Reflect.Message} message Message reference + * @param {string} name OneOf name + * @constructor + * @extends ProtoBuf.Reflect.T + */ + var OneOf = function(builder, message, name) { + T.call(this, builder, message, name); + + /** + * Enclosed fields. + * @type {!Array.} + * @expose + */ + this.fields = []; + }; + + /** + * @alias ProtoBuf.Reflect.Message.OneOf + * @expose + */ + Reflect.Message.OneOf = OneOf; + + /** + * Constructs a new Enum. + * @exports ProtoBuf.Reflect.Enum + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {!ProtoBuf.Reflect.T} parent Parent Reflect object + * @param {string} name Enum name + * @param {Object.=} options Enum options + * @param {string?} syntax The syntax level (e.g., proto3) + * @constructor + * @extends ProtoBuf.Reflect.Namespace + */ + var Enum = function(builder, parent, name, options, syntax) { + Namespace.call(this, builder, parent, name, options, syntax); + + /** + * @override + */ + this.className = "Enum"; + + /** + * Runtime enum object. + * @type {Object.|null} + * @expose + */ + this.object = null; + }; + + /** + * Gets the string name of an enum value. + * @param {!ProtoBuf.Builder.Enum} enm Runtime enum + * @param {number} value Enum value + * @returns {?string} Name or `null` if not present + * @expose + */ + Enum.getName = function(enm, value) { + var keys = Object.keys(enm); + for (var i = 0, key; i < keys.length; ++i) + if (enm[key = keys[i]] === value) + return key; + return null; + }; + + /** + * @alias ProtoBuf.Reflect.Enum.prototype + * @inner + */ + var EnumPrototype = Enum.prototype = Object.create(Namespace.prototype); + + /** + * Builds this enum and returns the runtime counterpart. + * @param {boolean} rebuild Whether to rebuild or not, defaults to false + * @returns {!Object.} + * @expose + */ + EnumPrototype.build = function(rebuild) { + if (this.object && !rebuild) + return this.object; + var enm = new ProtoBuf.Builder.Enum(), + values = this.getChildren(Enum.Value); + for (var i = 0, k = values.length; i < k; ++i) + enm[values[i]['name']] = values[i]['id']; + if (Object.defineProperty) + Object.defineProperty(enm, '$options', { + "value": this.buildOpt(), + "enumerable": false + }); + return this.object = enm; + }; + + /** + * @alias ProtoBuf.Reflect.Enum + * @expose + */ + Reflect.Enum = Enum; + + /** + * Constructs a new Enum Value. + * @exports ProtoBuf.Reflect.Enum.Value + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {!ProtoBuf.Reflect.Enum} enm Enum reference + * @param {string} name Field name + * @param {number} id Unique field id + * @constructor + * @extends ProtoBuf.Reflect.T + */ + var Value = function(builder, enm, name, id) { + T.call(this, builder, enm, name); + + /** + * @override + */ + this.className = "Enum.Value"; + + /** + * Unique enum value id. + * @type {number} + * @expose + */ + this.id = id; + }; + + // Extends T + Value.prototype = Object.create(T.prototype); + + /** + * @alias ProtoBuf.Reflect.Enum.Value + * @expose + */ + Reflect.Enum.Value = Value; + + /** + * An extension (field). + * @exports ProtoBuf.Reflect.Extension + * @constructor + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {!ProtoBuf.Reflect.T} parent Parent object + * @param {string} name Object name + * @param {!ProtoBuf.Reflect.Message.Field} field Extension field + */ + var Extension = function(builder, parent, name, field) { + T.call(this, builder, parent, name); + + /** + * Extended message field. + * @type {!ProtoBuf.Reflect.Message.Field} + * @expose + */ + this.field = field; + }; + + // Extends T + Extension.prototype = Object.create(T.prototype); + + /** + * @alias ProtoBuf.Reflect.Extension + * @expose + */ + Reflect.Extension = Extension; + + /** + * Constructs a new Service. + * @exports ProtoBuf.Reflect.Service + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {!ProtoBuf.Reflect.Namespace} root Root + * @param {string} name Service name + * @param {Object.=} options Options + * @constructor + * @extends ProtoBuf.Reflect.Namespace + */ + var Service = function(builder, root, name, options) { + Namespace.call(this, builder, root, name, options); + + /** + * @override + */ + this.className = "Service"; + + /** + * Built runtime service class. + * @type {?function(new:ProtoBuf.Builder.Service)} + */ + this.clazz = null; + }; + + /** + * @alias ProtoBuf.Reflect.Service.prototype + * @inner + */ + var ServicePrototype = Service.prototype = Object.create(Namespace.prototype); + + /** + * Builds the service and returns the runtime counterpart, which is a fully functional class. + * @see ProtoBuf.Builder.Service + * @param {boolean=} rebuild Whether to rebuild or not + * @return {Function} Service class + * @throws {Error} If the message cannot be built + * @expose + */ + ServicePrototype.build = function(rebuild) { + if (this.clazz && !rebuild) + return this.clazz; + + // Create the runtime Service class in its own scope + return this.clazz = (function(ProtoBuf, T) { + + /** + * Constructs a new runtime Service. + * @name ProtoBuf.Builder.Service + * @param {function(string, ProtoBuf.Builder.Message, function(Error, ProtoBuf.Builder.Message=))=} rpcImpl RPC implementation receiving the method name and the message + * @class Barebone of all runtime services. + * @constructor + * @throws {Error} If the service cannot be created + */ + var Service = function(rpcImpl) { + ProtoBuf.Builder.Service.call(this); + + /** + * Service implementation. + * @name ProtoBuf.Builder.Service#rpcImpl + * @type {!function(string, ProtoBuf.Builder.Message, function(Error, ProtoBuf.Builder.Message=))} + * @expose + */ + this.rpcImpl = rpcImpl || function(name, msg, callback) { + // This is what a user has to implement: A function receiving the method name, the actual message to + // send (type checked) and the callback that's either provided with the error as its first + // argument or null and the actual response message. + setTimeout(callback.bind(this, Error("Not implemented, see: https://github.com/dcodeIO/ProtoBuf.js/wiki/Services")), 0); // Must be async! + }; + }; + + /** + * @alias ProtoBuf.Builder.Service.prototype + * @inner + */ + var ServicePrototype = Service.prototype = Object.create(ProtoBuf.Builder.Service.prototype); + + /** + * Asynchronously performs an RPC call using the given RPC implementation. + * @name ProtoBuf.Builder.Service.[Method] + * @function + * @param {!function(string, ProtoBuf.Builder.Message, function(Error, ProtoBuf.Builder.Message=))} rpcImpl RPC implementation + * @param {ProtoBuf.Builder.Message} req Request + * @param {function(Error, (ProtoBuf.Builder.Message|ByteBuffer|Buffer|string)=)} callback Callback receiving + * the error if any and the response either as a pre-parsed message or as its raw bytes + * @abstract + */ + + /** + * Asynchronously performs an RPC call using the instance's RPC implementation. + * @name ProtoBuf.Builder.Service#[Method] + * @function + * @param {ProtoBuf.Builder.Message} req Request + * @param {function(Error, (ProtoBuf.Builder.Message|ByteBuffer|Buffer|string)=)} callback Callback receiving + * the error if any and the response either as a pre-parsed message or as its raw bytes + * @abstract + */ + + var rpc = T.getChildren(ProtoBuf.Reflect.Service.RPCMethod); + for (var i = 0; i < rpc.length; i++) { + (function(method) { + + // service#Method(message, callback) + ServicePrototype[method.name] = function(req, callback) { + try { + try { + // If given as a buffer, decode the request. Will throw a TypeError if not a valid buffer. + req = method.resolvedRequestType.clazz.decode(ByteBuffer.wrap(req)); + } catch (err) { + if (!(err instanceof TypeError)) + throw err; + } + if (req === null || typeof req !== 'object') + throw Error("Illegal arguments"); + if (!(req instanceof method.resolvedRequestType.clazz)) + req = new method.resolvedRequestType.clazz(req); + this.rpcImpl(method.fqn(), req, function(err, res) { // Assumes that this is properly async + if (err) { + callback(err); + return; + } + // Coalesce to empty string when service response has empty content + if (res === null) + res = '' + try { + res = method.resolvedResponseType.clazz.decode(res); + } catch (notABuffer) {} + if (!res || !(res instanceof method.resolvedResponseType.clazz)) { + callback(Error("Illegal response type received in service method " + T.name + "#" + method.name)); + return; + } + callback(null, res); + }); + } catch (err) { + setTimeout(callback.bind(this, err), 0); + } + }; + + // Service.Method(rpcImpl, message, callback) + Service[method.name] = function(rpcImpl, req, callback) { + new Service(rpcImpl)[method.name](req, callback); + }; + + if (Object.defineProperty) + Object.defineProperty(Service[method.name], "$options", { + "value": method.buildOpt() + }), + Object.defineProperty(ServicePrototype[method.name], "$options", { + "value": Service[method.name]["$options"] + }); + })(rpc[i]); + } + + // Properties + + /** + * Service options. + * @name ProtoBuf.Builder.Service.$options + * @type {Object.} + * @expose + */ + var $optionsS; // cc needs this + + /** + * Service options. + * @name ProtoBuf.Builder.Service#$options + * @type {Object.} + * @expose + */ + var $options; + + /** + * Reflection type. + * @name ProtoBuf.Builder.Service.$type + * @type {!ProtoBuf.Reflect.Service} + * @expose + */ + var $typeS; + + /** + * Reflection type. + * @name ProtoBuf.Builder.Service#$type + * @type {!ProtoBuf.Reflect.Service} + * @expose + */ + var $type; + + if (Object.defineProperty) + Object.defineProperty(Service, "$options", { + "value": T.buildOpt() + }), + Object.defineProperty(ServicePrototype, "$options", { + "value": Service["$options"] + }), + Object.defineProperty(Service, "$type", { + "value": T + }), + Object.defineProperty(ServicePrototype, "$type", { + "value": T + }); + + return Service; + + })(ProtoBuf, this); + }; + + /** + * @alias ProtoBuf.Reflect.Service + * @expose + */ + Reflect.Service = Service; + + /** + * Abstract service method. + * @exports ProtoBuf.Reflect.Service.Method + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {!ProtoBuf.Reflect.Service} svc Service + * @param {string} name Method name + * @param {Object.=} options Options + * @constructor + * @extends ProtoBuf.Reflect.T + */ + var Method = function(builder, svc, name, options) { + T.call(this, builder, svc, name); + + /** + * @override + */ + this.className = "Service.Method"; + + /** + * Options. + * @type {Object.} + * @expose + */ + this.options = options || {}; + }; + + /** + * @alias ProtoBuf.Reflect.Service.Method.prototype + * @inner + */ + var MethodPrototype = Method.prototype = Object.create(T.prototype); + + /** + * Builds the method's '$options' property. + * @name ProtoBuf.Reflect.Service.Method#buildOpt + * @function + * @return {Object.} + */ + MethodPrototype.buildOpt = NamespacePrototype.buildOpt; + + /** + * @alias ProtoBuf.Reflect.Service.Method + * @expose + */ + Reflect.Service.Method = Method; + + /** + * RPC service method. + * @exports ProtoBuf.Reflect.Service.RPCMethod + * @param {!ProtoBuf.Builder} builder Builder reference + * @param {!ProtoBuf.Reflect.Service} svc Service + * @param {string} name Method name + * @param {string} request Request message name + * @param {string} response Response message name + * @param {boolean} request_stream Whether requests are streamed + * @param {boolean} response_stream Whether responses are streamed + * @param {Object.=} options Options + * @constructor + * @extends ProtoBuf.Reflect.Service.Method + */ + var RPCMethod = function(builder, svc, name, request, response, request_stream, response_stream, options) { + Method.call(this, builder, svc, name, options); + + /** + * @override + */ + this.className = "Service.RPCMethod"; + + /** + * Request message name. + * @type {string} + * @expose + */ + this.requestName = request; + + /** + * Response message name. + * @type {string} + * @expose + */ + this.responseName = response; + + /** + * Whether requests are streamed + * @type {bool} + * @expose + */ + this.requestStream = request_stream; + + /** + * Whether responses are streamed + * @type {bool} + * @expose + */ + this.responseStream = response_stream; + + /** + * Resolved request message type. + * @type {ProtoBuf.Reflect.Message} + * @expose + */ + this.resolvedRequestType = null; + + /** + * Resolved response message type. + * @type {ProtoBuf.Reflect.Message} + * @expose + */ + this.resolvedResponseType = null; + }; + + // Extends Method + RPCMethod.prototype = Object.create(Method.prototype); + + /** + * @alias ProtoBuf.Reflect.Service.RPCMethod + * @expose + */ + Reflect.Service.RPCMethod = RPCMethod; + + return Reflect; + + })(ProtoBuf); + + /** + * @alias ProtoBuf.Builder + * @expose + */ + ProtoBuf.Builder = (function(ProtoBuf, Lang, Reflect) { + "use strict"; + + /** + * Constructs a new Builder. + * @exports ProtoBuf.Builder + * @class Provides the functionality to build protocol messages. + * @param {Object.=} options Options + * @constructor + */ + var Builder = function(options) { + + /** + * Namespace. + * @type {ProtoBuf.Reflect.Namespace} + * @expose + */ + this.ns = new Reflect.Namespace(this, null, ""); // Global namespace + + /** + * Namespace pointer. + * @type {ProtoBuf.Reflect.T} + * @expose + */ + this.ptr = this.ns; + + /** + * Resolved flag. + * @type {boolean} + * @expose + */ + this.resolved = false; + + /** + * The current building result. + * @type {Object.|null} + * @expose + */ + this.result = null; + + /** + * Imported files. + * @type {Array.} + * @expose + */ + this.files = {}; + + /** + * Import root override. + * @type {?string} + * @expose + */ + this.importRoot = null; + + /** + * Options. + * @type {!Object.} + * @expose + */ + this.options = options || {}; + }; + + /** + * @alias ProtoBuf.Builder.prototype + * @inner + */ + var BuilderPrototype = Builder.prototype; + + // ----- Definition tests ----- + + /** + * Tests if a definition most likely describes a message. + * @param {!Object} def + * @returns {boolean} + * @expose + */ + Builder.isMessage = function(def) { + // Messages require a string name + if (typeof def["name"] !== 'string') + return false; + // Messages do not contain values (enum) or rpc methods (service) + if (typeof def["values"] !== 'undefined' || typeof def["rpc"] !== 'undefined') + return false; + return true; + }; + + /** + * Tests if a definition most likely describes a message field. + * @param {!Object} def + * @returns {boolean} + * @expose + */ + Builder.isMessageField = function(def) { + // Message fields require a string rule, name and type and an id + if (typeof def["rule"] !== 'string' || typeof def["name"] !== 'string' || typeof def["type"] !== 'string' || typeof def["id"] === 'undefined') + return false; + return true; + }; + + /** + * Tests if a definition most likely describes an enum. + * @param {!Object} def + * @returns {boolean} + * @expose + */ + Builder.isEnum = function(def) { + // Enums require a string name + if (typeof def["name"] !== 'string') + return false; + // Enums require at least one value + if (typeof def["values"] === 'undefined' || !Array.isArray(def["values"]) || def["values"].length === 0) + return false; + return true; + }; + + /** + * Tests if a definition most likely describes a service. + * @param {!Object} def + * @returns {boolean} + * @expose + */ + Builder.isService = function(def) { + // Services require a string name and an rpc object + if (typeof def["name"] !== 'string' || typeof def["rpc"] !== 'object' || !def["rpc"]) + return false; + return true; + }; + + /** + * Tests if a definition most likely describes an extended message + * @param {!Object} def + * @returns {boolean} + * @expose + */ + Builder.isExtend = function(def) { + // Extends rquire a string ref + if (typeof def["ref"] !== 'string') + return false; + return true; + }; + + // ----- Building ----- + + /** + * Resets the pointer to the root namespace. + * @returns {!ProtoBuf.Builder} this + * @expose + */ + BuilderPrototype.reset = function() { + this.ptr = this.ns; + return this; + }; + + /** + * Defines a namespace on top of the current pointer position and places the pointer on it. + * @param {string} namespace + * @return {!ProtoBuf.Builder} this + * @expose + */ + BuilderPrototype.define = function(namespace) { + if (typeof namespace !== 'string' || !Lang.TYPEREF.test(namespace)) + throw Error("illegal namespace: " + namespace); + namespace.split(".").forEach(function(part) { + var ns = this.ptr.getChild(part); + if (ns === null) // Keep existing + this.ptr.addChild(ns = new Reflect.Namespace(this, this.ptr, part)); + this.ptr = ns; + }, this); + return this; + }; + + /** + * Creates the specified definitions at the current pointer position. + * @param {!Array.} defs Messages, enums or services to create + * @returns {!ProtoBuf.Builder} this + * @throws {Error} If a message definition is invalid + * @expose + */ + BuilderPrototype.create = function(defs) { + if (!defs) + return this; // Nothing to create + if (!Array.isArray(defs)) + defs = [defs]; + else { + if (defs.length === 0) + return this; + defs = defs.slice(); + } + + // It's quite hard to keep track of scopes and memory here, so let's do this iteratively. + var stack = [defs]; + while (stack.length > 0) { + defs = stack.pop(); + + if (!Array.isArray(defs)) // Stack always contains entire namespaces + throw Error("not a valid namespace: " + JSON.stringify(defs)); + + while (defs.length > 0) { + var def = defs.shift(); // Namespaces always contain an array of messages, enums and services + + if (Builder.isMessage(def)) { + var obj = new Reflect.Message(this, this.ptr, def["name"], def["options"], def["isGroup"], def["syntax"]); + + // Create OneOfs + var oneofs = {}; + if (def["oneofs"]) + Object.keys(def["oneofs"]).forEach(function(name) { + obj.addChild(oneofs[name] = new Reflect.Message.OneOf(this, obj, name)); + }, this); + + // Create fields + if (def["fields"]) + def["fields"].forEach(function(fld) { + if (obj.getChild(fld["id"] | 0) !== null) + throw Error("duplicate or invalid field id in " + obj.name + ": " + fld['id']); + if (fld["options"] && typeof fld["options"] !== 'object') + throw Error("illegal field options in " + obj.name + "#" + fld["name"]); + var oneof = null; + if (typeof fld["oneof"] === 'string' && !(oneof = oneofs[fld["oneof"]])) + throw Error("illegal oneof in " + obj.name + "#" + fld["name"] + ": " + fld["oneof"]); + fld = new Reflect.Message.Field(this, obj, fld["rule"], fld["keytype"], fld["type"], fld["name"], fld["id"], fld["options"], oneof, def["syntax"]); + if (oneof) + oneof.fields.push(fld); + obj.addChild(fld); + }, this); + + // Push children to stack + var subObj = []; + if (def["enums"]) + def["enums"].forEach(function(enm) { + subObj.push(enm); + }); + if (def["messages"]) + def["messages"].forEach(function(msg) { + subObj.push(msg); + }); + if (def["services"]) + def["services"].forEach(function(svc) { + subObj.push(svc); + }); + + // Set extension ranges + if (def["extensions"]) { + if (typeof def["extensions"][0] === 'number') // pre 5.0.1 + obj.extensions = [def["extensions"]]; + else + obj.extensions = def["extensions"]; + } + + // Create on top of current namespace + this.ptr.addChild(obj); + if (subObj.length > 0) { + stack.push(defs); // Push the current level back + defs = subObj; // Continue processing sub level + subObj = null; + this.ptr = obj; // And move the pointer to this namespace + obj = null; + continue; + } + subObj = null; + + } else if (Builder.isEnum(def)) { + + obj = new Reflect.Enum(this, this.ptr, def["name"], def["options"], def["syntax"]); + def["values"].forEach(function(val) { + obj.addChild(new Reflect.Enum.Value(this, obj, val["name"], val["id"])); + }, this); + this.ptr.addChild(obj); + + } else if (Builder.isService(def)) { + + obj = new Reflect.Service(this, this.ptr, def["name"], def["options"]); + Object.keys(def["rpc"]).forEach(function(name) { + var mtd = def["rpc"][name]; + obj.addChild(new Reflect.Service.RPCMethod(this, obj, name, mtd["request"], mtd["response"], !!mtd["request_stream"], !!mtd["response_stream"], mtd["options"])); + }, this); + this.ptr.addChild(obj); + + } else if (Builder.isExtend(def)) { + + obj = this.ptr.resolve(def["ref"], true); + if (obj) { + def["fields"].forEach(function(fld) { + if (obj.getChild(fld['id'] | 0) !== null) + throw Error("duplicate extended field id in " + obj.name + ": " + fld['id']); + // Check if field id is allowed to be extended + if (obj.extensions) { + var valid = false; + obj.extensions.forEach(function(range) { + if (fld["id"] >= range[0] && fld["id"] <= range[1]) + valid = true; + }); + if (!valid) + throw Error("illegal extended field id in " + obj.name + ": " + fld['id'] + " (not within valid ranges)"); + } + // Convert extension field names to camel case notation if the override is set + var name = fld["name"]; + if (this.options['convertFieldsToCamelCase']) + name = ProtoBuf.Util.toCamelCase(name); + // see #161: Extensions use their fully qualified name as their runtime key and... + var field = new Reflect.Message.ExtensionField(this, obj, fld["rule"], fld["type"], this.ptr.fqn() + '.' + name, fld["id"], fld["options"]); + // ...are added on top of the current namespace as an extension which is used for + // resolving their type later on (the extension always keeps the original name to + // prevent naming collisions) + var ext = new Reflect.Extension(this, this.ptr, fld["name"], field); + field.extension = ext; + this.ptr.addChild(ext); + obj.addChild(field); + }, this); + + } else if (!/\.?google\.protobuf\./.test(def["ref"])) // Silently skip internal extensions + throw Error("extended message " + def["ref"] + " is not defined"); + + } else + throw Error("not a valid definition: " + JSON.stringify(def)); + + def = null; + obj = null; + } + // Break goes here + defs = null; + this.ptr = this.ptr.parent; // Namespace done, continue at parent + } + this.resolved = false; // Require re-resolve + this.result = null; // Require re-build + return this; + }; + + /** + * Propagates syntax to all children. + * @param {!Object} parent + * @inner + */ + function propagateSyntax(parent) { + if (parent['messages']) { + parent['messages'].forEach(function(child) { + child["syntax"] = parent["syntax"]; + propagateSyntax(child); + }); + } + if (parent['enums']) { + parent['enums'].forEach(function(child) { + child["syntax"] = parent["syntax"]; + }); + } + } + + /** + * Imports another definition into this builder. + * @param {Object.} json Parsed import + * @param {(string|{root: string, file: string})=} filename Imported file name + * @returns {!ProtoBuf.Builder} this + * @throws {Error} If the definition or file cannot be imported + * @expose + */ + BuilderPrototype["import"] = function(json, filename) { + var delim = '/'; + + // Make sure to skip duplicate imports + + if (typeof filename === 'string') { + + if (ProtoBuf.Util.IS_NODE) + filename = require("path")['resolve'](filename); + if (this.files[filename] === true) + return this.reset(); + this.files[filename] = true; + + } else if (typeof filename === 'object') { // Object with root, file. + + var root = filename.root; + if (ProtoBuf.Util.IS_NODE) + root = require("path")['resolve'](root); + if (root.indexOf("\\") >= 0 || filename.file.indexOf("\\") >= 0) + delim = '\\'; + var fname = root + delim + filename.file; + if (this.files[fname] === true) + return this.reset(); + this.files[fname] = true; + } + + // Import imports + + if (json['imports'] && json['imports'].length > 0) { + var importRoot, + resetRoot = false; + + if (typeof filename === 'object') { // If an import root is specified, override + + this.importRoot = filename["root"]; + resetRoot = true; // ... and reset afterwards + importRoot = this.importRoot; + filename = filename["file"]; + if (importRoot.indexOf("\\") >= 0 || filename.indexOf("\\") >= 0) + delim = '\\'; + + } else if (typeof filename === 'string') { + + if (this.importRoot) // If import root is overridden, use it + importRoot = this.importRoot; + else { // Otherwise compute from filename + if (filename.indexOf("/") >= 0) { // Unix + importRoot = filename.replace(/\/[^\/]*$/, ""); + if ( /* /file.proto */ importRoot === "") + importRoot = "/"; + } else if (filename.indexOf("\\") >= 0) { // Windows + importRoot = filename.replace(/\\[^\\]*$/, ""); + delim = '\\'; + } else + importRoot = "."; + } + + } else + importRoot = null; + + for (var i = 0; i < json['imports'].length; i++) { + if (typeof json['imports'][i] === 'string') { // Import file + if (!importRoot) + throw Error("cannot determine import root"); + var importFilename = json['imports'][i]; + if (importFilename === "google/protobuf/descriptor.proto") + continue; // Not needed and therefore not used + importFilename = importRoot + delim + importFilename; + if (this.files[importFilename] === true) + continue; // Already imported + if (/\.proto$/i.test(importFilename) && !ProtoBuf.DotProto) // If this is a light build + importFilename = importFilename.replace(/\.proto$/, ".json"); // always load the JSON file + var contents = ProtoBuf.Util.fetch(importFilename); + if (contents === null) + throw Error("failed to import '" + importFilename + "' in '" + filename + "': file not found"); + if (/\.json$/i.test(importFilename)) // Always possible + this["import"](JSON.parse(contents + ""), importFilename); // May throw + else + this["import"](ProtoBuf.DotProto.Parser.parse(contents), importFilename); // May throw + } else // Import structure + if (!filename) + this["import"](json['imports'][i]); + else if (/\.(\w+)$/.test(filename)) // With extension: Append _importN to the name portion to make it unique + this["import"](json['imports'][i], filename.replace(/^(.+)\.(\w+)$/, function($0, $1, $2) { + return $1 + "_import" + i + "." + $2; + })); + else // Without extension: Append _importN to make it unique + this["import"](json['imports'][i], filename + "_import" + i); + } + if (resetRoot) // Reset import root override when all imports are done + this.importRoot = null; + } + + // Import structures + + if (json['package']) + this.define(json['package']); + if (json['syntax']) + propagateSyntax(json); + var base = this.ptr; + if (json['options']) + Object.keys(json['options']).forEach(function(key) { + base.options[key] = json['options'][key]; + }); + if (json['messages']) + this.create(json['messages']), + this.ptr = base; + if (json['enums']) + this.create(json['enums']), + this.ptr = base; + if (json['services']) + this.create(json['services']), + this.ptr = base; + if (json['extends']) + this.create(json['extends']); + + return this.reset(); + }; + + /** + * Resolves all namespace objects. + * @throws {Error} If a type cannot be resolved + * @returns {!ProtoBuf.Builder} this + * @expose + */ + BuilderPrototype.resolveAll = function() { + // Resolve all reflected objects + var res; + if (this.ptr == null || typeof this.ptr.type === 'object') + return this; // Done (already resolved) + + if (this.ptr instanceof Reflect.Namespace) { // Resolve children + + this.ptr.children.forEach(function(child) { + this.ptr = child; + this.resolveAll(); + }, this); + + } else if (this.ptr instanceof Reflect.Message.Field) { // Resolve type + + if (!Lang.TYPE.test(this.ptr.type)) { + if (!Lang.TYPEREF.test(this.ptr.type)) + throw Error("illegal type reference in " + this.ptr.toString(true) + ": " + this.ptr.type); + res = (this.ptr instanceof Reflect.Message.ExtensionField ? this.ptr.extension.parent : this.ptr.parent).resolve(this.ptr.type, true); + if (!res) + throw Error("unresolvable type reference in " + this.ptr.toString(true) + ": " + this.ptr.type); + this.ptr.resolvedType = res; + if (res instanceof Reflect.Enum) { + this.ptr.type = ProtoBuf.TYPES["enum"]; + if (this.ptr.syntax === 'proto3' && res.syntax !== 'proto3') + throw Error("proto3 message cannot reference proto2 enum"); + } else if (res instanceof Reflect.Message) + this.ptr.type = res.isGroup ? ProtoBuf.TYPES["group"] : ProtoBuf.TYPES["message"]; + else + throw Error("illegal type reference in " + this.ptr.toString(true) + ": " + this.ptr.type); + } else + this.ptr.type = ProtoBuf.TYPES[this.ptr.type]; + + // If it's a map field, also resolve the key type. The key type can be only a numeric, string, or bool type + // (i.e., no enums or messages), so we don't need to resolve against the current namespace. + if (this.ptr.map) { + if (!Lang.TYPE.test(this.ptr.keyType)) + throw Error("illegal key type for map field in " + this.ptr.toString(true) + ": " + this.ptr.keyType); + this.ptr.keyType = ProtoBuf.TYPES[this.ptr.keyType]; + } + + } else if (this.ptr instanceof ProtoBuf.Reflect.Service.Method) { + + if (this.ptr instanceof ProtoBuf.Reflect.Service.RPCMethod) { + res = this.ptr.parent.resolve(this.ptr.requestName, true); + if (!res || !(res instanceof ProtoBuf.Reflect.Message)) + throw Error("Illegal type reference in " + this.ptr.toString(true) + ": " + this.ptr.requestName); + this.ptr.resolvedRequestType = res; + res = this.ptr.parent.resolve(this.ptr.responseName, true); + if (!res || !(res instanceof ProtoBuf.Reflect.Message)) + throw Error("Illegal type reference in " + this.ptr.toString(true) + ": " + this.ptr.responseName); + this.ptr.resolvedResponseType = res; + } else // Should not happen as nothing else is implemented + throw Error("illegal service type in " + this.ptr.toString(true)); + + } else if (!(this.ptr instanceof ProtoBuf.Reflect.Message.OneOf) && // Not built + !(this.ptr instanceof ProtoBuf.Reflect.Extension) && // Not built + !(this.ptr instanceof ProtoBuf.Reflect.Enum.Value) // Built in enum + ) + throw Error("illegal object in namespace: " + typeof(this.ptr) + ": " + this.ptr); + + return this.reset(); + }; + + /** + * Builds the protocol. This will first try to resolve all definitions and, if this has been successful, + * return the built package. + * @param {(string|Array.)=} path Specifies what to return. If omitted, the entire namespace will be returned. + * @returns {!ProtoBuf.Builder.Message|!Object.} + * @throws {Error} If a type could not be resolved + * @expose + */ + BuilderPrototype.build = function(path) { + this.reset(); + if (!this.resolved) + this.resolveAll(), + this.resolved = true, + this.result = null; // Require re-build + if (this.result === null) // (Re-)Build + this.result = this.ns.build(); + if (!path) + return this.result; + var part = typeof path === 'string' ? path.split(".") : path, + ptr = this.result; // Build namespace pointer (no hasChild etc.) + for (var i = 0; i < part.length; i++) + if (ptr[part[i]]) + ptr = ptr[part[i]]; + else { + ptr = null; + break; + } + return ptr; + }; + + /** + * Similar to {@link ProtoBuf.Builder#build}, but looks up the internal reflection descriptor. + * @param {string=} path Specifies what to return. If omitted, the entire namespace wiil be returned. + * @param {boolean=} excludeNonNamespace Excludes non-namespace types like fields, defaults to `false` + * @returns {?ProtoBuf.Reflect.T} Reflection descriptor or `null` if not found + */ + BuilderPrototype.lookup = function(path, excludeNonNamespace) { + return path ? this.ns.resolve(path, excludeNonNamespace) : this.ns; + }; + + /** + * Returns a string representation of this object. + * @return {string} String representation as of "Builder" + * @expose + */ + BuilderPrototype.toString = function() { + return "Builder"; + }; + + // ----- Base classes ----- + // Exist for the sole purpose of being able to "... instanceof ProtoBuf.Builder.Message" etc. + + /** + * @alias ProtoBuf.Builder.Message + */ + Builder.Message = function() {}; + + /** + * @alias ProtoBuf.Builder.Enum + */ + Builder.Enum = function() {}; + + /** + * @alias ProtoBuf.Builder.Message + */ + Builder.Service = function() {}; + + return Builder; + + })(ProtoBuf, ProtoBuf.Lang, ProtoBuf.Reflect); + + /** + * @alias ProtoBuf.Map + * @expose + */ + ProtoBuf.Map = (function(ProtoBuf, Reflect) { + "use strict"; + + /** + * Constructs a new Map. A Map is a container that is used to implement map + * fields on message objects. It closely follows the ES6 Map API; however, + * it is distinct because we do not want to depend on external polyfills or + * on ES6 itself. + * + * @exports ProtoBuf.Map + * @param {!ProtoBuf.Reflect.Field} field Map field + * @param {Object.=} contents Initial contents + * @constructor + */ + var Map = function(field, contents) { + if (!field.map) + throw Error("field is not a map"); + + /** + * The field corresponding to this map. + * @type {!ProtoBuf.Reflect.Field} + */ + this.field = field; + + /** + * Element instance corresponding to key type. + * @type {!ProtoBuf.Reflect.Element} + */ + this.keyElem = new Reflect.Element(field.keyType, null, true, field.syntax); + + /** + * Element instance corresponding to value type. + * @type {!ProtoBuf.Reflect.Element} + */ + this.valueElem = new Reflect.Element(field.type, field.resolvedType, false, field.syntax); + + /** + * Internal map: stores mapping of (string form of key) -> (key, value) + * pair. + * + * We provide map semantics for arbitrary key types, but we build on top + * of an Object, which has only string keys. In order to avoid the need + * to convert a string key back to its native type in many situations, + * we store the native key value alongside the value. Thus, we only need + * a one-way mapping from a key type to its string form that guarantees + * uniqueness and equality (i.e., str(K1) === str(K2) if and only if K1 + * === K2). + * + * @type {!Object} + */ + this.map = {}; + + /** + * Returns the number of elements in the map. + */ + Object.defineProperty(this, "size", { + get: function() { + return Object.keys(this.map).length; + } + }); + + // Fill initial contents from a raw object. + if (contents) { + var keys = Object.keys(contents); + for (var i = 0; i < keys.length; i++) { + var key = this.keyElem.valueFromString(keys[i]); + var val = this.valueElem.verifyValue(contents[keys[i]]); + this.map[this.keyElem.valueToString(key)] = { + key: key, + value: val + }; + } + } + }; + + var MapPrototype = Map.prototype; + + /** + * Helper: return an iterator over an array. + * @param {!Array<*>} arr the array + * @returns {!Object} an iterator + * @inner + */ + function arrayIterator(arr) { + var idx = 0; + return { + next: function() { + if (idx < arr.length) + return { + done: false, + value: arr[idx++] + }; + return { + done: true + }; + } + } + } + + /** + * Clears the map. + */ + MapPrototype.clear = function() { + this.map = {}; + }; + + /** + * Deletes a particular key from the map. + * @returns {boolean} Whether any entry with this key was deleted. + */ + MapPrototype["delete"] = function(key) { + var keyValue = this.keyElem.valueToString(this.keyElem.verifyValue(key)); + var hadKey = keyValue in this.map; + delete this.map[keyValue]; + return hadKey; + }; + + /** + * Returns an iterator over [key, value] pairs in the map. + * @returns {Object} The iterator + */ + MapPrototype.entries = function() { + var entries = []; + var strKeys = Object.keys(this.map); + for (var i = 0, entry; i < strKeys.length; i++) + entries.push([(entry = this.map[strKeys[i]]).key, entry.value]); + return arrayIterator(entries); + }; + + /** + * Returns an iterator over keys in the map. + * @returns {Object} The iterator + */ + MapPrototype.keys = function() { + var keys = []; + var strKeys = Object.keys(this.map); + for (var i = 0; i < strKeys.length; i++) + keys.push(this.map[strKeys[i]].key); + return arrayIterator(keys); + }; + + /** + * Returns an iterator over values in the map. + * @returns {!Object} The iterator + */ + MapPrototype.values = function() { + var values = []; + var strKeys = Object.keys(this.map); + for (var i = 0; i < strKeys.length; i++) + values.push(this.map[strKeys[i]].value); + return arrayIterator(values); + }; + + /** + * Iterates over entries in the map, calling a function on each. + * @param {function(this:*, *, *, *)} cb The callback to invoke with value, key, and map arguments. + * @param {Object=} thisArg The `this` value for the callback + */ + MapPrototype.forEach = function(cb, thisArg) { + var strKeys = Object.keys(this.map); + for (var i = 0, entry; i < strKeys.length; i++) + cb.call(thisArg, (entry = this.map[strKeys[i]]).value, entry.key, this); + }; + + /** + * Sets a key in the map to the given value. + * @param {*} key The key + * @param {*} value The value + * @returns {!ProtoBuf.Map} The map instance + */ + MapPrototype.set = function(key, value) { + var keyValue = this.keyElem.verifyValue(key); + var valValue = this.valueElem.verifyValue(value); + this.map[this.keyElem.valueToString(keyValue)] = { + key: keyValue, + value: valValue + }; + return this; + }; + + /** + * Gets the value corresponding to a key in the map. + * @param {*} key The key + * @returns {*|undefined} The value, or `undefined` if key not present + */ + MapPrototype.get = function(key) { + var keyValue = this.keyElem.valueToString(this.keyElem.verifyValue(key)); + if (!(keyValue in this.map)) + return undefined; + return this.map[keyValue].value; + }; + + /** + * Determines whether the given key is present in the map. + * @param {*} key The key + * @returns {boolean} `true` if the key is present + */ + MapPrototype.has = function(key) { + var keyValue = this.keyElem.valueToString(this.keyElem.verifyValue(key)); + return (keyValue in this.map); + }; + + return Map; + })(ProtoBuf, ProtoBuf.Reflect); + + + /** + * Loads a .proto string and returns the Builder. + * @param {string} proto .proto file contents + * @param {(ProtoBuf.Builder|string|{root: string, file: string})=} builder Builder to append to. Will create a new one if omitted. + * @param {(string|{root: string, file: string})=} filename The corresponding file name if known. Must be specified for imports. + * @return {ProtoBuf.Builder} Builder to create new messages + * @throws {Error} If the definition cannot be parsed or built + * @expose + */ + ProtoBuf.loadProto = function(proto, builder, filename) { + if (typeof builder === 'string' || (builder && typeof builder["file"] === 'string' && typeof builder["root"] === 'string')) + filename = builder, + builder = undefined; + return ProtoBuf.loadJson(ProtoBuf.DotProto.Parser.parse(proto), builder, filename); + }; + + /** + * Loads a .proto string and returns the Builder. This is an alias of {@link ProtoBuf.loadProto}. + * @function + * @param {string} proto .proto file contents + * @param {(ProtoBuf.Builder|string)=} builder Builder to append to. Will create a new one if omitted. + * @param {(string|{root: string, file: string})=} filename The corresponding file name if known. Must be specified for imports. + * @return {ProtoBuf.Builder} Builder to create new messages + * @throws {Error} If the definition cannot be parsed or built + * @expose + */ + ProtoBuf.protoFromString = ProtoBuf.loadProto; // Legacy + + /** + * Loads a .proto file and returns the Builder. + * @param {string|{root: string, file: string}} filename Path to proto file or an object specifying 'file' with + * an overridden 'root' path for all imported files. + * @param {function(?Error, !ProtoBuf.Builder=)=} callback Callback that will receive `null` as the first and + * the Builder as its second argument on success, otherwise the error as its first argument. If omitted, the + * file will be read synchronously and this function will return the Builder. + * @param {ProtoBuf.Builder=} builder Builder to append to. Will create a new one if omitted. + * @return {?ProtoBuf.Builder|undefined} The Builder if synchronous (no callback specified, will be NULL if the + * request has failed), else undefined + * @expose + */ + ProtoBuf.loadProtoFile = function(filename, callback, builder) { + if (callback && typeof callback === 'object') + builder = callback, + callback = null; + else if (!callback || typeof callback !== 'function') + callback = null; + if (callback) + return ProtoBuf.Util.fetch(typeof filename === 'string' ? filename : filename["root"] + "/" + filename["file"], function(contents) { + if (contents === null) { + callback(Error("Failed to fetch file")); + return; + } + try { + callback(null, ProtoBuf.loadProto(contents, builder, filename)); + } catch (e) { + callback(e); + } + }); + var contents = ProtoBuf.Util.fetch(typeof filename === 'object' ? filename["root"] + "/" + filename["file"] : filename); + return contents === null ? null : ProtoBuf.loadProto(contents, builder, filename); + }; + + /** + * Loads a .proto file and returns the Builder. This is an alias of {@link ProtoBuf.loadProtoFile}. + * @function + * @param {string|{root: string, file: string}} filename Path to proto file or an object specifying 'file' with + * an overridden 'root' path for all imported files. + * @param {function(?Error, !ProtoBuf.Builder=)=} callback Callback that will receive `null` as the first and + * the Builder as its second argument on success, otherwise the error as its first argument. If omitted, the + * file will be read synchronously and this function will return the Builder. + * @param {ProtoBuf.Builder=} builder Builder to append to. Will create a new one if omitted. + * @return {!ProtoBuf.Builder|undefined} The Builder if synchronous (no callback specified, will be NULL if the + * request has failed), else undefined + * @expose + */ + ProtoBuf.protoFromFile = ProtoBuf.loadProtoFile; // Legacy + + + /** + * Constructs a new empty Builder. + * @param {Object.=} options Builder options, defaults to global options set on ProtoBuf + * @return {!ProtoBuf.Builder} Builder + * @expose + */ + ProtoBuf.newBuilder = function(options) { + options = options || {}; + if (typeof options['convertFieldsToCamelCase'] === 'undefined') + options['convertFieldsToCamelCase'] = ProtoBuf.convertFieldsToCamelCase; + if (typeof options['populateAccessors'] === 'undefined') + options['populateAccessors'] = ProtoBuf.populateAccessors; + return new ProtoBuf.Builder(options); + }; + + /** + * Loads a .json definition and returns the Builder. + * @param {!*|string} json JSON definition + * @param {(ProtoBuf.Builder|string|{root: string, file: string})=} builder Builder to append to. Will create a new one if omitted. + * @param {(string|{root: string, file: string})=} filename The corresponding file name if known. Must be specified for imports. + * @return {ProtoBuf.Builder} Builder to create new messages + * @throws {Error} If the definition cannot be parsed or built + * @expose + */ + ProtoBuf.loadJson = function(json, builder, filename) { + if (typeof builder === 'string' || (builder && typeof builder["file"] === 'string' && typeof builder["root"] === 'string')) + filename = builder, + builder = null; + if (!builder || typeof builder !== 'object') + builder = ProtoBuf.newBuilder(); + if (typeof json === 'string') + json = JSON.parse(json); + builder["import"](json, filename); + builder.resolveAll(); + return builder; + }; + + /** + * Loads a .json file and returns the Builder. + * @param {string|!{root: string, file: string}} filename Path to json file or an object specifying 'file' with + * an overridden 'root' path for all imported files. + * @param {function(?Error, !ProtoBuf.Builder=)=} callback Callback that will receive `null` as the first and + * the Builder as its second argument on success, otherwise the error as its first argument. If omitted, the + * file will be read synchronously and this function will return the Builder. + * @param {ProtoBuf.Builder=} builder Builder to append to. Will create a new one if omitted. + * @return {?ProtoBuf.Builder|undefined} The Builder if synchronous (no callback specified, will be NULL if the + * request has failed), else undefined + * @expose + */ + ProtoBuf.loadJsonFile = function(filename, callback, builder) { + if (callback && typeof callback === 'object') + builder = callback, + callback = null; + else if (!callback || typeof callback !== 'function') + callback = null; + if (callback) + return ProtoBuf.Util.fetch(typeof filename === 'string' ? filename : filename["root"] + "/" + filename["file"], function(contents) { + if (contents === null) { + callback(Error("Failed to fetch file")); + return; + } + try { + callback(null, ProtoBuf.loadJson(JSON.parse(contents), builder, filename)); + } catch (e) { + callback(e); + } + }); + var contents = ProtoBuf.Util.fetch(typeof filename === 'object' ? filename["root"] + "/" + filename["file"] : filename); + return contents === null ? null : ProtoBuf.loadJson(JSON.parse(contents), builder, filename); + }; + + return ProtoBuf; +}); \ No newline at end of file diff --git a/test/client/src/PBMsgDict.ts b/test/client/src/PBMsgDict.ts new file mode 100644 index 0000000..b73e2e2 --- /dev/null +++ b/test/client/src/PBMsgDict.ts @@ -0,0 +1,16 @@ +const PBMsgDict = { + LoginCreate_C2S_Msg: { 1: ["userId", 2, 9], 2: ["name", 2, 9], 3: ["job", 2, 9], 4: ["pid", 2, 9], 5: ["serverId", 2, 5], 6: ["gender", 2, 5] }, + LoginCreate_S2C_Msg: { 1: ["code", 2, 11, "Code"], 2: ["roleDTO", 1, 11, "RoleDTO"] }, + LoginGetList_C2S_Msg: { 1: ["userId", 2, 9], 2: ["serverId", 2, 5], 3: ["pid", 2, 9], 4: ["loginType", 2, 5] }, + LoginGetList_S2C_Msg: { 1: ["code", 2, 11, "Code"], 2: ["roleDTO", 1, 11, "RoleDTO"], 3: ["serverInfoDTO", 1, 11, "ServerInfoDTO"] }, + LoginRoleKicked_S2C_Msg: { 1: ["code", 2, 11, "Code"] }, + LoginRole_C2S_Msg: { 1: ["roleId", 2, 3] }, + LoginRole_S2C_Msg: { 1: ["code", 2, 11, "Code"] }, + RoleCreate_C2S_Msg: { 1: ["userId", 2, 9], 2: ["name", 2, 9], 3: ["job", 2, 9], 4: ["pid", 2, 9], 5: ["serverId", 2, 5] }, + RoleCreate_S2C_Msg: { 1: ["code", 2, 11, "Code"], 2: ["roleDTO", 1, 11, "RoleDTO"] }, + RoleGetList_C2S_Msg: { 1: ["userId", 2, 9], 2: ["serverId", 2, 5] }, + RoleGetList_S2C_Msg: { 1: ["code", 2, 11, "Code"], 2: ["roleDTO", 1, 11, "RoleDTO"] }, + RoleKicked_S2C_Msg: { 1: ["code", 2, 11, "Code"] }, + RoleLogin_C2S_Msg: { 1: ["roleId", 2, 3] }, + RoleLogin_S2C_Msg: { 1: ["code", 2, 11, "Code"] } +} \ No newline at end of file diff --git a/test/client/src/ServiceName.ts b/test/client/src/ServiceName.ts new file mode 100644 index 0000000..c3bf810 --- /dev/null +++ b/test/client/src/ServiceName.ts @@ -0,0 +1,3 @@ +const enum ServiceName { + $ = 0, abLoginService, bLoginService, dfLoginService, dLoginService, LoginService +} \ No newline at end of file diff --git a/test/client/src/chuanqi/login/LoginCreate_C2S_Msg.ts b/test/client/src/chuanqi/login/LoginCreate_C2S_Msg.ts new file mode 100644 index 0000000..7fa8605 --- /dev/null +++ b/test/client/src/chuanqi/login/LoginCreate_C2S_Msg.ts @@ -0,0 +1,36 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface LoginCreate_C2S_Msg + { + + /** + * 用户id + */ + userId: string; + /** + * 角色名 + */ + name: string; + /** + * 职业 + */ + job: string; + /** + * 平台id + */ + pid: string; + /** + * 服务器id + */ + serverId: number; + /** + * 性别 + */ + gender: number; + + } +} diff --git a/test/client/src/chuanqi/login/LoginCreate_S2C_Msg.ts b/test/client/src/chuanqi/login/LoginCreate_S2C_Msg.ts new file mode 100644 index 0000000..3865243 --- /dev/null +++ b/test/client/src/chuanqi/login/LoginCreate_S2C_Msg.ts @@ -0,0 +1,20 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface LoginCreate_S2C_Msg + { + + /** + * + */ + code: Code; + /** + * 可选参数 + */ + roleDTO?: RoleDTO; + + } +} diff --git a/test/client/src/chuanqi/login/LoginGetList_C2S_Msg.ts b/test/client/src/chuanqi/login/LoginGetList_C2S_Msg.ts new file mode 100644 index 0000000..9766683 --- /dev/null +++ b/test/client/src/chuanqi/login/LoginGetList_C2S_Msg.ts @@ -0,0 +1,28 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface LoginGetList_C2S_Msg + { + + /** + * 用户id + */ + userId: string; + /** + * 服务器id + */ + serverId: number; + /** + * 平台id + */ + pid: string; + /** + * 登录类型 + */ + loginType: number; + + } +} diff --git a/test/client/src/chuanqi/login/LoginGetList_S2C_Msg.ts b/test/client/src/chuanqi/login/LoginGetList_S2C_Msg.ts new file mode 100644 index 0000000..2a50baa --- /dev/null +++ b/test/client/src/chuanqi/login/LoginGetList_S2C_Msg.ts @@ -0,0 +1,24 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface LoginGetList_S2C_Msg + { + + /** + * + */ + code: Code; + /** + * 可选参数 + */ + roleDTO?: RoleDTO; + /** + * 可选参数 + */ + serverInfoDTO?: ServerInfoDTO; + + } +} diff --git a/test/client/src/chuanqi/login/LoginRoleKicked_S2C_Msg.ts b/test/client/src/chuanqi/login/LoginRoleKicked_S2C_Msg.ts new file mode 100644 index 0000000..55c8409 --- /dev/null +++ b/test/client/src/chuanqi/login/LoginRoleKicked_S2C_Msg.ts @@ -0,0 +1,16 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface LoginRoleKicked_S2C_Msg + { + + /** + * + */ + code: Code; + + } +} diff --git a/test/client/src/chuanqi/login/LoginRole_C2S_Msg.ts b/test/client/src/chuanqi/login/LoginRole_C2S_Msg.ts new file mode 100644 index 0000000..de97e02 --- /dev/null +++ b/test/client/src/chuanqi/login/LoginRole_C2S_Msg.ts @@ -0,0 +1,16 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface LoginRole_C2S_Msg + { + + /** + * 角色id + */ + roleId: number; + + } +} diff --git a/test/client/src/chuanqi/login/LoginRole_S2C_Msg.ts b/test/client/src/chuanqi/login/LoginRole_S2C_Msg.ts new file mode 100644 index 0000000..84db761 --- /dev/null +++ b/test/client/src/chuanqi/login/LoginRole_S2C_Msg.ts @@ -0,0 +1,16 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface LoginRole_S2C_Msg + { + + /** + * + */ + code: Code; + + } +} diff --git a/test/client/src/chuanqi/login/LoginService.ts b/test/client/src/chuanqi/login/LoginService.ts new file mode 100644 index 0000000..b060148 --- /dev/null +++ b/test/client/src/chuanqi/login/LoginService.ts @@ -0,0 +1,87 @@ + +/** + * 来源: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + /*-*begin $area1 @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + //area1 + /*-*end $area1*-*/ + + export class LoginService extends Service + { + constructor() + { + super(ServiceName.LoginService); + } + + onRegister() + { + super.onRegister(); + + this.regMsg("LoginGetList_S2C_Msg", 1001); + this.regHandler(this.loginGetList_S2C, 1001); + this.regMsg("LoginCreate_S2C_Msg", 1002); + this.regHandler(this.loginCreate_S2C, 1002); + this.regMsg("LoginRole_S2C_Msg", 1003); + this.regHandler(this.loginRole_S2C, 1003); + this.regMsg("LoginRoleKicked_S2C_Msg", 1004); + this.regHandler(this.loginRoleKicked_S2C, 1004); + + /*-*begin $onRegister @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + this.regMsg("LoginRoleKickesd_S2C_Msg", 1006); + this.regHandler(this.loginRoleKickesd_S2C, 1006); + /*-*end $onRegister*-*/ + } + + public loginGetList_C2S(_LoginGetList_C2S_Msg: LoginGetList_C2S_Msg) { + this.send(1001, _LoginGetList_C2S_Msg, "LoginGetList_C2S_Msg"); + } + public loginCreate_C2S(_LoginCreate_C2S_Msg: LoginCreate_C2S_Msg) { + this.send(1002, _LoginCreate_C2S_Msg, "LoginCreate_C2S_Msg"); + } + public loginRole_C2S(_LoginRole_C2S_Msg: LoginRole_C2S_Msg) { + this.send(1003, _LoginRole_C2S_Msg, "LoginRole_C2S_Msg"); + } + + protected loginGetList_S2C = (data:NetData) => { + let msg:LoginGetList_S2C_Msg = data.data; + /*-*begin $loginGetList_S2C @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + //loginGetList_S2C + if (!checkSuccess(msg)) return ; + /*-*end $loginGetList_S2C*-*/ + } + protected loginCreate_S2C = (data:NetData) => { + let msg:LoginCreate_S2C_Msg = data.data; + /*-*begin $loginCreate_S2C @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + //loginCreate_S2C + if (!checkSuccess(msg)) return ; + /*-*end $loginCreate_S2C*-*/ + } + protected loginRole_S2C = (data:NetData) => { + let msg:LoginRole_S2C_Msg = data.data; + /*-*begin $loginRole_S2C @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + //loginRole_S2C + if (!checkSuccess(msg)) return ; + /*-*end $loginRole_S2C*-*/ + } + protected loginRoleKicked_S2C = (data:NetData) => { + let msg:LoginRoleKicked_S2C_Msg = data.data; + /*-*begin $loginRoleKicked_S2C @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + //loginRoleKicked_S2C + if (!checkSuccess(msg)) return ; + /*-*end $loginRoleKicked_S2C*-*/ + } + + /*-*begin $area2 @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + //area2 + private testVar = 10; + /*-*end $area2*-*/ + + } + + /*-*begin $area3 @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + //area3 + /*-*end $area3*-*/ + +} diff --git a/test/client/src/chuanqi/map/msgs/ChangeStage_C2S_Msg.ts b/test/client/src/chuanqi/map/msgs/ChangeStage_C2S_Msg.ts new file mode 100644 index 0000000..82d5b62 --- /dev/null +++ b/test/client/src/chuanqi/map/msgs/ChangeStage_C2S_Msg.ts @@ -0,0 +1,16 @@ + +/** + * 源地址: http://legend.uclub.xyz/dokuwiki/doku.php?id=%E7%8E%A9%E5%AE%B6%E5%9C%BA%E6%99%AF%E6%8C%87%E4%BB%A4_1201-1250 + */ +module giant.chuanqi +{ + export interface ChangeStage_C2S_Msg + { + + /** + * + */ + mapId: number; + + } +} diff --git a/test/client/src/chuanqi/map/msgs/ChangeStage_S2C_Msg.ts b/test/client/src/chuanqi/map/msgs/ChangeStage_S2C_Msg.ts new file mode 100644 index 0000000..37c2f9f --- /dev/null +++ b/test/client/src/chuanqi/map/msgs/ChangeStage_S2C_Msg.ts @@ -0,0 +1,36 @@ + +/** + * 源地址: http://legend.uclub.xyz/dokuwiki/doku.php?id=%E7%8E%A9%E5%AE%B6%E5%9C%BA%E6%99%AF%E6%8C%87%E4%BB%A4_1201-1250 + */ +module giant.chuanqi +{ + export interface ChangeStage_S2C_Msg + { + + /** + * + */ + code: Code; + /** + * + */ + mapId: number; + /** + * + */ + line: number; + /** + * + */ + x: number; + /** + * + */ + y: number; + /** + * + */ + mapType: number; + + } +} diff --git a/test/client/src/chuanqi/map/msgs/MapService.ts b/test/client/src/chuanqi/map/msgs/MapService.ts new file mode 100644 index 0000000..3d535c7 --- /dev/null +++ b/test/client/src/chuanqi/map/msgs/MapService.ts @@ -0,0 +1,73 @@ + +/** + * 来源: http://legend.uclub.xyz/dokuwiki/doku.php?id=%E7%8E%A9%E5%AE%B6%E5%9C%BA%E6%99%AF%E6%8C%87%E4%BB%A4_1201-1250 + */ +module giant.chuanqi +{ + /*-*begin $area1 @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $area1*-*/ + + export class MapService extends Service + { + constructor() + { + super(ServiceName.MapService); + } + + onRegister() + { + super.onRegister(); + + this.regMsg("ChangeStage_S2C_Msg", 1201); + this.regHandler(this.changeStage_S2C, 1201); + this.regMsg("Move_Msg", 1202); + this.regHandler(this.move_S2C, 1202); + this.regMsg("Teleport_Msg", 1203); + this.regHandler(this.teleport_S2C, 1203); + + /*-*begin $onRegister @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $onRegister*-*/ + } + + public changeStage_C2S(_ChangeStage_C2S_Msg: ChangeStage_C2S_Msg) { + this.send(1201, _ChangeStage_C2S_Msg, "ChangeStage_C2S_Msg"); + } + public move_C2S(_Move_Msg: Move_Msg) { + this.send(1202, _Move_Msg, "Move_Msg"); + } + public teleport_C2S(_Teleport_Msg: Teleport_Msg) { + this.send(1203, _Teleport_Msg, "Teleport_Msg"); + } + + protected changeStage_S2C = (data:NetData) => { + let msg:ChangeStage_S2C_Msg = data.data; + /*-*begin $changeStage_S2C @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $changeStage_S2C*-*/ + } + protected move_S2C = (data:NetData) => { + let msg:Move_Msg = data.data; + /*-*begin $move_S2C @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $move_S2C*-*/ + } + protected teleport_S2C = (data:NetData) => { + let msg:Teleport_Msg = data.data; + /*-*begin $teleport_S2C @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $teleport_S2C*-*/ + } + + /*-*begin $area2 @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $area2*-*/ + + } + + /*-*begin $area3 @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $area3*-*/ + +} diff --git a/test/client/src/chuanqi/map/msgs/Move_Msg.ts b/test/client/src/chuanqi/map/msgs/Move_Msg.ts new file mode 100644 index 0000000..d5c70d6 --- /dev/null +++ b/test/client/src/chuanqi/map/msgs/Move_Msg.ts @@ -0,0 +1,36 @@ + +/** + * 源地址: http://legend.uclub.xyz/dokuwiki/doku.php?id=%E7%8E%A9%E5%AE%B6%E5%9C%BA%E6%99%AF%E6%8C%87%E4%BB%A4_1201-1250 + */ +module giant.chuanqi +{ + export interface Move_Msg + { + + /** + * + */ + id: number; + /** + * + */ + fromX: number; + /** + * + */ + fromY: number; + /** + * + */ + toX: number; + /** + * + */ + toY: number; + /** + * + */ + faceTo: number; + + } +} diff --git a/test/client/src/chuanqi/map/msgs/Teleport_Msg.ts b/test/client/src/chuanqi/map/msgs/Teleport_Msg.ts new file mode 100644 index 0000000..a6da23a --- /dev/null +++ b/test/client/src/chuanqi/map/msgs/Teleport_Msg.ts @@ -0,0 +1,24 @@ + +/** + * 源地址: http://legend.uclub.xyz/dokuwiki/doku.php?id=%E7%8E%A9%E5%AE%B6%E5%9C%BA%E6%99%AF%E6%8C%87%E4%BB%A4_1201-1250 + */ +module giant.chuanqi +{ + export interface Teleport_Msg + { + + /** + * + */ + id: number; + /** + * + */ + x: number; + /** + * + */ + y: number; + + } +} diff --git a/test/client/src/code/service/LoginService.ts b/test/client/src/code/service/LoginService.ts new file mode 100644 index 0000000..3c9c211 --- /dev/null +++ b/test/client/src/code/service/LoginService.ts @@ -0,0 +1,81 @@ + +/** + * 来源: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + /*-*begin $area1 @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $area1*-*/ + + export class LoginService extends Service + { + constructor() + { + super(ServiceName.LoginService); + } + + onRegister() + { + super.onRegister(); + + this.regMsg("RoleGetList_S2C_Msg", ); + this.regHandler(this.roleGetList_S2C, ); + this.regMsg("RoleCreate_S2C_Msg", ); + this.regHandler(this.roleCreate_S2C, ); + this.regMsg("Code", ); + this.regHandler(this.roleLogin_S2C, ); + this.regMsg("Code", 1004); + this.regHandler(this.roleKicked_S2C, 1004); + + /*-*begin $onRegister @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $onRegister*-*/ + } + + public roleGetList_C2S(_RoleGetList_C2S_Msg: RoleGetList_C2S_Msg) { + this.send(1001, _RoleGetList_C2S_Msg, "RoleGetList_C2S_Msg"); + } + public roleCreate_C2S(_RoleCreate_C2S_Msg: RoleCreate_C2S_Msg) { + this.send(1002, _RoleCreate_C2S_Msg, "RoleCreate_C2S_Msg"); + } + public roleLogin_C2S(_roleId: number) { + this.send(1003, _roleId, 5); + } + + protected roleGetList_S2C = (data:NetData) => { + let msg:RoleGetList_S2C_Msg = data.data; + /*-*begin roleGetList_S2C undefined*-*/ + + /*-*end roleGetList_S2C*-*/ + } + protected roleCreate_S2C = (data:NetData) => { + let msg:RoleCreate_S2C_Msg = data.data; + /*-*begin roleCreate_S2C undefined*-*/ + + /*-*end roleCreate_S2C*-*/ + } + protected roleLogin_S2C = (data:NetData) => { + let _code: Code = data.data; + /*-*begin roleLogin_S2C undefined*-*/ + + /*-*end roleLogin_S2C*-*/ + } + protected roleKicked_S2C = (data:NetData) => { + let _code: Code = data.data; + /*-*begin roleKicked_S2C undefined*-*/ + + /*-*end roleKicked_S2C*-*/ + } + + /*-*begin $area2 @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $area2*-*/ + + } + + /*-*begin $area3 @这里手写的内容,请在注释begin 和 end 之间编写自己的代码,不可更改此注释@*-*/ + + /*-*end $area3*-*/ + +} diff --git a/test/client/src/code/service/RoleCreate_C2S_Msg.ts b/test/client/src/code/service/RoleCreate_C2S_Msg.ts new file mode 100644 index 0000000..76f1182 --- /dev/null +++ b/test/client/src/code/service/RoleCreate_C2S_Msg.ts @@ -0,0 +1,32 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface RoleCreate_C2S_Msg + { + + /** + * 用户id + */ + userId: string; + /** + * 角色名 + */ + name: string; + /** + * 职业 + */ + job: string; + /** + * 平台id + */ + pid: string; + /** + * 服务器id + */ + serverId: number; + + } +} diff --git a/test/client/src/code/service/RoleCreate_S2C_Msg.ts b/test/client/src/code/service/RoleCreate_S2C_Msg.ts new file mode 100644 index 0000000..5303240 --- /dev/null +++ b/test/client/src/code/service/RoleCreate_S2C_Msg.ts @@ -0,0 +1,20 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface RoleCreate_S2C_Msg + { + + /** + * + */ + code: Code; + /** + * 可选参数 + */ + roleDTO?: RoleDTO; + + } +} diff --git a/test/client/src/code/service/RoleGetList_C2S_Msg.ts b/test/client/src/code/service/RoleGetList_C2S_Msg.ts new file mode 100644 index 0000000..6a726cb --- /dev/null +++ b/test/client/src/code/service/RoleGetList_C2S_Msg.ts @@ -0,0 +1,20 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface RoleGetList_C2S_Msg + { + + /** + * 用户id + */ + userId: string; + /** + * 服务器id + */ + serverId: number; + + } +} diff --git a/test/client/src/code/service/RoleGetList_S2C_Msg.ts b/test/client/src/code/service/RoleGetList_S2C_Msg.ts new file mode 100644 index 0000000..d9be073 --- /dev/null +++ b/test/client/src/code/service/RoleGetList_S2C_Msg.ts @@ -0,0 +1,20 @@ + +/** + * 源地址: http://192.168.116.77/dokuwiki/doku.php?id=%E7%99%BB%E5%BD%95_1001-1100 + */ +module giant.chuanqi +{ + export interface RoleGetList_S2C_Msg + { + + /** + * + */ + code: Code; + /** + * 可选参数 + */ + roleDTO?: RoleDTO; + + } +} diff --git a/test/client/src/code/service/RoleLogin_S2C_Msg.ts b/test/client/src/code/service/RoleLogin_S2C_Msg.ts new file mode 100644 index 0000000..e69de29 diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..005bde5 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "module": "amd", + "target": "es2015", + "noImplicitAny": false, + "sourceMap": false, + "sourceRoot": "src", + "outDir": "dist" + }, + "exclude": [ + "node_modules", + "server", + "ProtoTools", + "client", + "test" + ] +} \ No newline at end of file diff --git a/typings/browser.d.ts b/typings/browser.d.ts new file mode 100644 index 0000000..003aeae --- /dev/null +++ b/typings/browser.d.ts @@ -0,0 +1,43 @@ +/// +/// +interface String { + /** + * 替换字符串中{0}{1}{2}{a} {b}这样的数据,用obj对应key替换,或者是数组中对应key的数据替换 + */ + substitute(...args): string; +} +interface Date { + /** + * 格式化日期 + */ + format(mask: string): string; +} + +// declare function ready(hander: () => void): void; +declare var nodeRequire: any; + + +interface cookiesUtils { + /** + * 设置cookie + * + * @param name + * @param value + */ + setCookie(name: string, value: string); + /** + * 获取cookie + * + * @param name + * @returns + */ + getCookie(name: string); + /** + * 删除cookie + * + * @param name + */ + delCookie(name: string); +} + +declare var cookie: cookiesUtils; \ No newline at end of file diff --git a/typings/browser/ambient/node/index.d.ts b/typings/browser/ambient/node/index.d.ts new file mode 100644 index 0000000..a3791a4 --- /dev/null +++ b/typings/browser/ambient/node/index.d.ts @@ -0,0 +1,2346 @@ +// Generated by typings +// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/1fa3e10e0175d352b149ccbca794c9438d702b4e/node/node.d.ts +// Type definitions for Node.js v4.x +// Project: http://nodejs.org/ +// Definitions by: Microsoft TypeScript , DefinitelyTyped +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/************************************************ +* * +* Node.js v4.x API * +* * +************************************************/ + +interface Error { + stack?: string; +} + + +// compat for TypeScript 1.8 +// if you use with --target es3 or --target es5 and use below definitions, +// use the lib.es6.d.ts that is bundled with TypeScript 1.8. +interface MapConstructor {} +interface WeakMapConstructor {} +interface SetConstructor {} +interface WeakSetConstructor {} + +/************************************************ +* * +* GLOBAL * +* * +************************************************/ +declare var process: NodeJS.Process; +declare var global: NodeJS.Global; + +declare var __filename: string; +declare var __dirname: string; + +declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; +declare function clearTimeout(timeoutId: NodeJS.Timer): void; +declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; +declare function clearInterval(intervalId: NodeJS.Timer): void; +declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any; +declare function clearImmediate(immediateId: any): void; + +interface NodeRequireFunction { + (id: string): any; +} + +interface NodeRequire extends NodeRequireFunction { + resolve(id:string): string; + cache: any; + extensions: any; + main: any; +} + +declare var require: NodeRequire; + +interface NodeModule { + exports: any; + require: NodeRequireFunction; + id: string; + filename: string; + loaded: boolean; + parent: any; + children: any[]; +} + +declare var module: NodeModule; + +// Same as module.exports +declare var exports: any; +declare var SlowBuffer: { + new (str: string, encoding?: string): Buffer; + new (size: number): Buffer; + new (size: Uint8Array): Buffer; + new (array: any[]): Buffer; + prototype: Buffer; + isBuffer(obj: any): boolean; + byteLength(string: string, encoding?: string): number; + concat(list: Buffer[], totalLength?: number): Buffer; +}; + + +// Buffer class +type BufferEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "binary" | "hex"; +interface Buffer extends NodeBuffer {} + +/** + * Raw data is stored in instances of the Buffer class. + * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. + * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + */ +declare var Buffer: { + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + new (str: string, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + new (size: number): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + new (array: Uint8Array): Buffer; + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + new (arrayBuffer: ArrayBuffer): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + new (array: any[]): Buffer; + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + new (buffer: Buffer): Buffer; + prototype: Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + concat(list: Buffer[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + compare(buf1: Buffer, buf2: Buffer): number; +}; + +/************************************************ +* * +* GLOBAL INTERFACES * +* * +************************************************/ +declare namespace NodeJS { + export interface ErrnoException extends Error { + errno?: number; + code?: string; + path?: string; + syscall?: string; + stack?: string; + } + + export interface EventEmitter { + addListener(event: string, listener: Function): this; + on(event: string, listener: Function): this; + once(event: string, listener: Function): this; + removeListener(event: string, listener: Function): this; + removeAllListeners(event?: string): this; + setMaxListeners(n: number): this; + getMaxListeners(): number; + listeners(event: string): Function[]; + emit(event: string, ...args: any[]): boolean; + listenerCount(type: string): number; + } + + export interface ReadableStream extends EventEmitter { + readable: boolean; + read(size?: number): string|Buffer; + setEncoding(encoding: string): void; + pause(): void; + resume(): void; + pipe(destination: T, options?: { end?: boolean; }): T; + unpipe(destination?: T): void; + unshift(chunk: string): void; + unshift(chunk: Buffer): void; + wrap(oldStream: ReadableStream): ReadableStream; + } + + export interface WritableStream extends EventEmitter { + writable: boolean; + write(buffer: Buffer|string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + } + + export interface ReadWriteStream extends ReadableStream, WritableStream {} + + export interface Events extends EventEmitter { } + + export interface Domain extends Events { + run(fn: Function): void; + add(emitter: Events): void; + remove(emitter: Events): void; + bind(cb: (err: Error, data: any) => any): any; + intercept(cb: (data: any) => any): any; + dispose(): void; + + addListener(event: string, listener: Function): this; + on(event: string, listener: Function): this; + once(event: string, listener: Function): this; + removeListener(event: string, listener: Function): this; + removeAllListeners(event?: string): this; + } + + export interface MemoryUsage { + rss: number; + heapTotal: number; + heapUsed: number; + } + + export interface Process extends EventEmitter { + stdout: WritableStream; + stderr: WritableStream; + stdin: ReadableStream; + argv: string[]; + execArgv: string[]; + execPath: string; + abort(): void; + chdir(directory: string): void; + cwd(): string; + env: any; + exit(code?: number): void; + getgid(): number; + setgid(id: number): void; + setgid(id: string): void; + getuid(): number; + setuid(id: number): void; + setuid(id: string): void; + version: string; + versions: { + http_parser: string; + node: string; + v8: string; + ares: string; + uv: string; + zlib: string; + openssl: string; + }; + config: { + target_defaults: { + cflags: any[]; + default_configuration: string; + defines: string[]; + include_dirs: string[]; + libraries: string[]; + }; + variables: { + clang: number; + host_arch: string; + node_install_npm: boolean; + node_install_waf: boolean; + node_prefix: string; + node_shared_openssl: boolean; + node_shared_v8: boolean; + node_shared_zlib: boolean; + node_use_dtrace: boolean; + node_use_etw: boolean; + node_use_openssl: boolean; + target_arch: string; + v8_no_strict_aliasing: number; + v8_use_snapshot: boolean; + visibility: string; + }; + }; + kill(pid:number, signal?: string|number): void; + pid: number; + title: string; + arch: string; + platform: string; + memoryUsage(): MemoryUsage; + nextTick(callback: Function): void; + umask(mask?: number): number; + uptime(): number; + hrtime(time?:number[]): number[]; + domain: Domain; + + // Worker + send?(message: any, sendHandle?: any): void; + disconnect(): void; + connected: boolean; + } + + export interface Global { + Array: typeof Array; + ArrayBuffer: typeof ArrayBuffer; + Boolean: typeof Boolean; + Buffer: typeof Buffer; + DataView: typeof DataView; + Date: typeof Date; + Error: typeof Error; + EvalError: typeof EvalError; + Float32Array: typeof Float32Array; + Float64Array: typeof Float64Array; + Function: typeof Function; + GLOBAL: Global; + Infinity: typeof Infinity; + Int16Array: typeof Int16Array; + Int32Array: typeof Int32Array; + Int8Array: typeof Int8Array; + Intl: typeof Intl; + JSON: typeof JSON; + Map: MapConstructor; + Math: typeof Math; + NaN: typeof NaN; + Number: typeof Number; + Object: typeof Object; + Promise: Function; + RangeError: typeof RangeError; + ReferenceError: typeof ReferenceError; + RegExp: typeof RegExp; + Set: SetConstructor; + String: typeof String; + Symbol: Function; + SyntaxError: typeof SyntaxError; + TypeError: typeof TypeError; + URIError: typeof URIError; + Uint16Array: typeof Uint16Array; + Uint32Array: typeof Uint32Array; + Uint8Array: typeof Uint8Array; + Uint8ClampedArray: Function; + WeakMap: WeakMapConstructor; + WeakSet: WeakSetConstructor; + clearImmediate: (immediateId: any) => void; + clearInterval: (intervalId: NodeJS.Timer) => void; + clearTimeout: (timeoutId: NodeJS.Timer) => void; + console: typeof console; + decodeURI: typeof decodeURI; + decodeURIComponent: typeof decodeURIComponent; + encodeURI: typeof encodeURI; + encodeURIComponent: typeof encodeURIComponent; + escape: (str: string) => string; + eval: typeof eval; + global: Global; + isFinite: typeof isFinite; + isNaN: typeof isNaN; + parseFloat: typeof parseFloat; + parseInt: typeof parseInt; + process: Process; + root: Global; + setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => any; + setInterval: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer; + setTimeout: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer; + undefined: typeof undefined; + unescape: (str: string) => string; + gc: () => void; + v8debug?: any; + } + + export interface Timer { + ref() : void; + unref() : void; + } +} + +/** + * @deprecated + */ +interface NodeBuffer extends Uint8Array { + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): any; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Buffer): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number); + // TODO: encoding param + indexOf(value: string | number | Buffer, byteOffset?: number): number; + // TODO: entries + // TODO: includes + // TODO: keys + // TODO: values +} + +/************************************************ +* * +* MODULES * +* * +************************************************/ +declare module "buffer" { + export var INSPECT_MAX_BYTES: number; + var BuffType: typeof Buffer; + var SlowBuffType: typeof SlowBuffer; + export { BuffType as Buffer, SlowBuffType as SlowBuffer }; +} + +declare module "querystring" { + export interface StringifyOptions { + encodeURIComponent?: Function; + } + + export interface ParseOptions { + maxKeys?: number; + decodeURIComponent?: Function; + } + + export function stringify(obj: T, sep?: string, eq?: string, options?: StringifyOptions): string; + export function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): any; + export function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): T; + export function escape(str: string): string; + export function unescape(str: string): string; +} + +declare module "events" { + export class EventEmitter implements NodeJS.EventEmitter { + static EventEmitter: EventEmitter; + static listenerCount(emitter: EventEmitter, event: string): number; // deprecated + static defaultMaxListeners: number; + + addListener(event: string, listener: Function): this; + on(event: string, listener: Function): this; + once(event: string, listener: Function): this; + removeListener(event: string, listener: Function): this; + removeAllListeners(event?: string): this; + setMaxListeners(n: number): this; + getMaxListeners(): number; + listeners(event: string): Function[]; + emit(event: string, ...args: any[]): boolean; + listenerCount(type: string): number; + } +} + +declare module "http" { + import * as events from "events"; + import * as net from "net"; + import * as stream from "stream"; + + export interface RequestOptions { + protocol?: string; + host?: string; + hostname?: string; + family?: number; + port?: number; + localAddress?: string; + socketPath?: string; + method?: string; + path?: string; + headers?: { [key: string]: any }; + auth?: string; + agent?: Agent|boolean; + } + + export interface Server extends events.EventEmitter, net.Server { + setTimeout(msecs: number, callback: Function): void; + maxHeadersCount: number; + timeout: number; + } + /** + * @deprecated Use IncomingMessage + */ + export interface ServerRequest extends IncomingMessage { + connection: net.Socket; + } + export interface ServerResponse extends events.EventEmitter, stream.Writable { + // Extended base methods + write(buffer: Buffer): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + write(str: string, encoding?: string, fd?: string): boolean; + + writeContinue(): void; + writeHead(statusCode: number, reasonPhrase?: string, headers?: any): void; + writeHead(statusCode: number, headers?: any): void; + statusCode: number; + statusMessage: string; + headersSent: boolean; + setHeader(name: string, value: string | string[]): void; + sendDate: boolean; + getHeader(name: string): string; + removeHeader(name: string): void; + write(chunk: any, encoding?: string): any; + addTrailers(headers: any): void; + + // Extended base methods + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + end(data?: any, encoding?: string): void; + } + export interface ClientRequest extends events.EventEmitter, stream.Writable { + // Extended base methods + write(buffer: Buffer): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + write(str: string, encoding?: string, fd?: string): boolean; + + write(chunk: any, encoding?: string): void; + abort(): void; + setTimeout(timeout: number, callback?: Function): void; + setNoDelay(noDelay?: boolean): void; + setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; + + setHeader(name: string, value: string | string[]): void; + getHeader(name: string): string; + removeHeader(name: string): void; + addTrailers(headers: any): void; + + // Extended base methods + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + end(data?: any, encoding?: string): void; + } + export interface IncomingMessage extends events.EventEmitter, stream.Readable { + httpVersion: string; + headers: any; + rawHeaders: string[]; + trailers: any; + rawTrailers: any; + setTimeout(msecs: number, callback: Function): NodeJS.Timer; + /** + * Only valid for request obtained from http.Server. + */ + method?: string; + /** + * Only valid for request obtained from http.Server. + */ + url?: string; + /** + * Only valid for response obtained from http.ClientRequest. + */ + statusCode?: number; + /** + * Only valid for response obtained from http.ClientRequest. + */ + statusMessage?: string; + socket: net.Socket; + } + /** + * @deprecated Use IncomingMessage + */ + export interface ClientResponse extends IncomingMessage { } + + export interface AgentOptions { + /** + * Keep sockets around in a pool to be used by other requests in the future. Default = false + */ + keepAlive?: boolean; + /** + * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. + * Only relevant if keepAlive is set to true. + */ + keepAliveMsecs?: number; + /** + * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity + */ + maxSockets?: number; + /** + * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. + */ + maxFreeSockets?: number; + } + + export class Agent { + maxSockets: number; + sockets: any; + requests: any; + + constructor(opts?: AgentOptions); + + /** + * Destroy any sockets that are currently in use by the agent. + * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled, + * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise, + * sockets may hang open for quite a long time before the server terminates them. + */ + destroy(): void; + } + + export var METHODS: string[]; + + export var STATUS_CODES: { + [errorCode: number]: string; + [errorCode: string]: string; + }; + export function createServer(requestListener?: (request: IncomingMessage, response: ServerResponse) =>void ): Server; + export function createClient(port?: number, host?: string): any; + export function request(options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; + export function get(options: any, callback?: (res: IncomingMessage) => void): ClientRequest; + export var globalAgent: Agent; +} + +declare module "cluster" { + import * as child from "child_process"; + import * as events from "events"; + + export interface ClusterSettings { + exec?: string; + args?: string[]; + silent?: boolean; + } + + export interface Address { + address: string; + port: number; + addressType: string; + } + + export class Worker extends events.EventEmitter { + id: string; + process: child.ChildProcess; + suicide: boolean; + send(message: any, sendHandle?: any): void; + kill(signal?: string): void; + destroy(signal?: string): void; + disconnect(): void; + isConnected(): boolean; + isDead(): boolean; + } + + export var settings: ClusterSettings; + export var isMaster: boolean; + export var isWorker: boolean; + export function setupMaster(settings?: ClusterSettings): void; + export function fork(env?: any): Worker; + export function disconnect(callback?: Function): void; + export var worker: Worker; + export var workers: { + [index: string]: Worker + }; + + // Event emitter + export function addListener(event: string, listener: Function): void; + export function on(event: "disconnect", listener: (worker: Worker) => void): void; + export function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): void; + export function on(event: "fork", listener: (worker: Worker) => void): void; + export function on(event: "listening", listener: (worker: Worker, address: any) => void): void; + export function on(event: "message", listener: (worker: Worker, message: any) => void): void; + export function on(event: "online", listener: (worker: Worker) => void): void; + export function on(event: "setup", listener: (settings: any) => void): void; + export function on(event: string, listener: Function): any; + export function once(event: string, listener: Function): void; + export function removeListener(event: string, listener: Function): void; + export function removeAllListeners(event?: string): void; + export function setMaxListeners(n: number): void; + export function listeners(event: string): Function[]; + export function emit(event: string, ...args: any[]): boolean; +} + +declare module "zlib" { + import * as stream from "stream"; + export interface ZlibOptions { chunkSize?: number; windowBits?: number; level?: number; memLevel?: number; strategy?: number; dictionary?: any; } + + export interface Gzip extends stream.Transform { } + export interface Gunzip extends stream.Transform { } + export interface Deflate extends stream.Transform { } + export interface Inflate extends stream.Transform { } + export interface DeflateRaw extends stream.Transform { } + export interface InflateRaw extends stream.Transform { } + export interface Unzip extends stream.Transform { } + + export function createGzip(options?: ZlibOptions): Gzip; + export function createGunzip(options?: ZlibOptions): Gunzip; + export function createDeflate(options?: ZlibOptions): Deflate; + export function createInflate(options?: ZlibOptions): Inflate; + export function createDeflateRaw(options?: ZlibOptions): DeflateRaw; + export function createInflateRaw(options?: ZlibOptions): InflateRaw; + export function createUnzip(options?: ZlibOptions): Unzip; + + export function deflate(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function deflateSync(buf: Buffer, options?: ZlibOptions): any; + export function deflateRaw(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function deflateRawSync(buf: Buffer, options?: ZlibOptions): any; + export function gzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function gzipSync(buf: Buffer, options?: ZlibOptions): any; + export function gunzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function gunzipSync(buf: Buffer, options?: ZlibOptions): any; + export function inflate(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function inflateSync(buf: Buffer, options?: ZlibOptions): any; + export function inflateRaw(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function inflateRawSync(buf: Buffer, options?: ZlibOptions): any; + export function unzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; + export function unzipSync(buf: Buffer, options?: ZlibOptions): any; + + // Constants + export var Z_NO_FLUSH: number; + export var Z_PARTIAL_FLUSH: number; + export var Z_SYNC_FLUSH: number; + export var Z_FULL_FLUSH: number; + export var Z_FINISH: number; + export var Z_BLOCK: number; + export var Z_TREES: number; + export var Z_OK: number; + export var Z_STREAM_END: number; + export var Z_NEED_DICT: number; + export var Z_ERRNO: number; + export var Z_STREAM_ERROR: number; + export var Z_DATA_ERROR: number; + export var Z_MEM_ERROR: number; + export var Z_BUF_ERROR: number; + export var Z_VERSION_ERROR: number; + export var Z_NO_COMPRESSION: number; + export var Z_BEST_SPEED: number; + export var Z_BEST_COMPRESSION: number; + export var Z_DEFAULT_COMPRESSION: number; + export var Z_FILTERED: number; + export var Z_HUFFMAN_ONLY: number; + export var Z_RLE: number; + export var Z_FIXED: number; + export var Z_DEFAULT_STRATEGY: number; + export var Z_BINARY: number; + export var Z_TEXT: number; + export var Z_ASCII: number; + export var Z_UNKNOWN: number; + export var Z_DEFLATED: number; + export var Z_NULL: number; +} + +declare module "os" { + export interface CpuInfo { + model: string; + speed: number; + times: { + user: number; + nice: number; + sys: number; + idle: number; + irq: number; + }; + } + + export interface NetworkInterfaceInfo { + address: string; + netmask: string; + family: string; + mac: string; + internal: boolean; + } + + export function tmpdir(): string; + export function homedir(): string; + export function endianness(): string; + export function hostname(): string; + export function type(): string; + export function platform(): string; + export function arch(): string; + export function release(): string; + export function uptime(): number; + export function loadavg(): number[]; + export function totalmem(): number; + export function freemem(): number; + export function cpus(): CpuInfo[]; + export function networkInterfaces(): {[index: string]: NetworkInterfaceInfo[]}; + export var EOL: string; +} + +declare module "https" { + import * as tls from "tls"; + import * as events from "events"; + import * as http from "http"; + + export interface ServerOptions { + pfx?: any; + key?: any; + passphrase?: string; + cert?: any; + ca?: any; + crl?: any; + ciphers?: string; + honorCipherOrder?: boolean; + requestCert?: boolean; + rejectUnauthorized?: boolean; + NPNProtocols?: any; + SNICallback?: (servername: string) => any; + } + + export interface RequestOptions extends http.RequestOptions{ + pfx?: any; + key?: any; + passphrase?: string; + cert?: any; + ca?: any; + ciphers?: string; + rejectUnauthorized?: boolean; + secureProtocol?: string; + } + + export interface Agent { + maxSockets: number; + sockets: any; + requests: any; + } + export var Agent: { + new (options?: RequestOptions): Agent; + }; + export interface Server extends tls.Server { } + export function createServer(options: ServerOptions, requestListener?: Function): Server; + export function request(options: RequestOptions, callback?: (res: http.IncomingMessage) =>void ): http.ClientRequest; + export function get(options: RequestOptions, callback?: (res: http.IncomingMessage) =>void ): http.ClientRequest; + export var globalAgent: Agent; +} + +declare module "punycode" { + export function decode(string: string): string; + export function encode(string: string): string; + export function toUnicode(domain: string): string; + export function toASCII(domain: string): string; + export var ucs2: ucs2; + interface ucs2 { + decode(string: string): number[]; + encode(codePoints: number[]): string; + } + export var version: any; +} + +declare module "repl" { + import * as stream from "stream"; + import * as events from "events"; + + export interface ReplOptions { + prompt?: string; + input?: NodeJS.ReadableStream; + output?: NodeJS.WritableStream; + terminal?: boolean; + eval?: Function; + useColors?: boolean; + useGlobal?: boolean; + ignoreUndefined?: boolean; + writer?: Function; + } + export function start(options: ReplOptions): events.EventEmitter; +} + +declare module "readline" { + import * as events from "events"; + import * as stream from "stream"; + + export interface Key { + sequence?: string; + name?: string; + ctrl?: boolean; + meta?: boolean; + shift?: boolean; + } + + export interface ReadLine extends events.EventEmitter { + setPrompt(prompt: string): void; + prompt(preserveCursor?: boolean): void; + question(query: string, callback: (answer: string) => void): void; + pause(): ReadLine; + resume(): ReadLine; + close(): void; + write(data: string|Buffer, key?: Key): void; + } + + export interface Completer { + (line: string): CompleterResult; + (line: string, callback: (err: any, result: CompleterResult) => void): any; + } + + export interface CompleterResult { + completions: string[]; + line: string; + } + + export interface ReadLineOptions { + input: NodeJS.ReadableStream; + output?: NodeJS.WritableStream; + completer?: Completer; + terminal?: boolean; + historySize?: number; + } + + export function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer, terminal?: boolean): ReadLine; + export function createInterface(options: ReadLineOptions): ReadLine; + + export function cursorTo(stream: NodeJS.WritableStream, x: number, y: number): void; + export function moveCursor(stream: NodeJS.WritableStream, dx: number|string, dy: number|string): void; + export function clearLine(stream: NodeJS.WritableStream, dir: number): void; + export function clearScreenDown(stream: NodeJS.WritableStream): void; +} + +declare module "vm" { + export interface Context { } + export interface ScriptOptions { + filename?: string; + lineOffset?: number; + columnOffset?: number; + displayErrors?: boolean; + timeout?: number; + cachedData?: Buffer; + produceCachedData?: boolean; + } + export interface RunningScriptOptions { + filename?: string; + lineOffset?: number; + columnOffset?: number; + displayErrors?: boolean; + timeout?: number; + } + export class Script { + constructor(code: string, options?: ScriptOptions); + runInContext(contextifiedSandbox: Context, options?: RunningScriptOptions): any; + runInNewContext(sandbox?: Context, options?: RunningScriptOptions): any; + runInThisContext(options?: RunningScriptOptions): any; + } + export function createContext(sandbox?: Context): Context; + export function isContext(sandbox: Context): boolean; + export function runInContext(code: string, contextifiedSandbox: Context, options?: RunningScriptOptions): any; + export function runInDebugContext(code: string): any; + export function runInNewContext(code: string, sandbox?: Context, options?: RunningScriptOptions): any; + export function runInThisContext(code: string, options?: RunningScriptOptions): any; +} + +declare module "child_process" { + import * as events from "events"; + import * as stream from "stream"; + + export interface ChildProcess extends events.EventEmitter { + stdin: stream.Writable; + stdout: stream.Readable; + stderr: stream.Readable; + stdio: [stream.Writable, stream.Readable, stream.Readable]; + pid: number; + kill(signal?: string): void; + send(message: any, sendHandle?: any): void; + disconnect(): void; + unref(): void; + } + + export interface SpawnOptions { + cwd?: string; + env?: any; + stdio?: any; + detached?: boolean; + uid?: number; + gid?: number; + shell?: boolean | string; + } + export function spawn(command: string, args?: string[], options?: SpawnOptions): ChildProcess; + + export interface ExecOptions { + cwd?: string; + env?: any; + shell?: string; + timeout?: number; + maxBuffer?: number; + killSignal?: string; + uid?: number; + gid?: number; + } + export interface ExecOptionsWithStringEncoding extends ExecOptions { + encoding: BufferEncoding; + } + export interface ExecOptionsWithBufferEncoding extends ExecOptions { + encoding: string; // specify `null`. + } + export function exec(command: string, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + export function exec(command: string, options: ExecOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + // usage. child_process.exec("tsc", {encoding: null as string}, (err, stdout, stderr) => {}); + export function exec(command: string, options: ExecOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function exec(command: string, options: ExecOptions, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + + export interface ExecFileOptions { + cwd?: string; + env?: any; + timeout?: number; + maxBuffer?: number; + killSignal?: string; + uid?: number; + gid?: number; + } + export interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + export interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { + encoding: string; // specify `null`. + } + export function execFile(file: string, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + export function execFile(file: string, options?: ExecFileOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + // usage. child_process.execFile("file.sh", {encoding: null as string}, (err, stdout, stderr) => {}); + export function execFile(file: string, options?: ExecFileOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function execFile(file: string, options?: ExecFileOptions, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + export function execFile(file: string, args?: string[], callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + export function execFile(file: string, args?: string[], options?: ExecFileOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + // usage. child_process.execFile("file.sh", ["foo"], {encoding: null as string}, (err, stdout, stderr) => {}); + export function execFile(file: string, args?: string[], options?: ExecFileOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; + export function execFile(file: string, args?: string[], options?: ExecFileOptions, callback?: (error: Error, stdout: string, stderr: string) =>void ): ChildProcess; + + export interface ForkOptions { + cwd?: string; + env?: any; + execPath?: string; + execArgv?: string[]; + silent?: boolean; + uid?: number; + gid?: number; + } + export function fork(modulePath: string, args?: string[], options?: ForkOptions): ChildProcess; + + export interface SpawnSyncOptions { + cwd?: string; + input?: string | Buffer; + stdio?: any; + env?: any; + uid?: number; + gid?: number; + timeout?: number; + killSignal?: string; + maxBuffer?: number; + encoding?: string; + shell?: boolean | string; + } + export interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { + encoding: BufferEncoding; + } + export interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { + encoding: string; // specify `null`. + } + export interface SpawnSyncReturns { + pid: number; + output: string[]; + stdout: T; + stderr: T; + status: number; + signal: string; + error: Error; + } + export function spawnSync(command: string): SpawnSyncReturns; + export function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + export function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + export function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; + export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptions): SpawnSyncReturns; + + export interface ExecSyncOptions { + cwd?: string; + input?: string | Buffer; + stdio?: any; + env?: any; + shell?: string; + uid?: number; + gid?: number; + timeout?: number; + killSignal?: string; + maxBuffer?: number; + encoding?: string; + } + export interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { + encoding: BufferEncoding; + } + export interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { + encoding: string; // specify `null`. + } + export function execSync(command: string): Buffer; + export function execSync(command: string, options?: ExecSyncOptionsWithStringEncoding): string; + export function execSync(command: string, options?: ExecSyncOptionsWithBufferEncoding): Buffer; + export function execSync(command: string, options?: ExecSyncOptions): Buffer; + + export interface ExecFileSyncOptions { + cwd?: string; + input?: string | Buffer; + stdio?: any; + env?: any; + uid?: number; + gid?: number; + timeout?: number; + killSignal?: string; + maxBuffer?: number; + encoding?: string; + } + export interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { + encoding: BufferEncoding; + } + export interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { + encoding: string; // specify `null`. + } + export function execFileSync(command: string): Buffer; + export function execFileSync(command: string, options?: ExecFileSyncOptionsWithStringEncoding): string; + export function execFileSync(command: string, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer; + export function execFileSync(command: string, options?: ExecFileSyncOptions): Buffer; + export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptionsWithStringEncoding): string; + export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptionsWithBufferEncoding): Buffer; + export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptions): Buffer; +} + +declare module "url" { + export interface Url { + href?: string; + protocol?: string; + auth?: string; + hostname?: string; + port?: string; + host?: string; + pathname?: string; + search?: string; + query?: any; // string | Object + slashes?: boolean; + hash?: string; + path?: string; + } + + export function parse(urlStr: string, parseQueryString?: boolean , slashesDenoteHost?: boolean ): Url; + export function format(url: Url): string; + export function resolve(from: string, to: string): string; +} + +declare module "dns" { + export function lookup(domain: string, family: number, callback: (err: Error, address: string, family: number) =>void ): string; + export function lookup(domain: string, callback: (err: Error, address: string, family: number) =>void ): string; + export function resolve(domain: string, rrtype: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolve(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolve4(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolve6(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveMx(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveTxt(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveSrv(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveNs(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function resolveCname(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; + export function reverse(ip: string, callback: (err: Error, domains: string[]) =>void ): string[]; +} + +declare module "net" { + import * as stream from "stream"; + + export interface Socket extends stream.Duplex { + // Extended base methods + write(buffer: Buffer): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + write(str: string, encoding?: string, fd?: string): boolean; + + connect(port: number, host?: string, connectionListener?: Function): void; + connect(path: string, connectionListener?: Function): void; + bufferSize: number; + setEncoding(encoding?: string): void; + write(data: any, encoding?: string, callback?: Function): void; + destroy(): void; + pause(): void; + resume(): void; + setTimeout(timeout: number, callback?: Function): void; + setNoDelay(noDelay?: boolean): void; + setKeepAlive(enable?: boolean, initialDelay?: number): void; + address(): { port: number; family: string; address: string; }; + unref(): void; + ref(): void; + + remoteAddress: string; + remoteFamily: string; + remotePort: number; + localAddress: string; + localPort: number; + bytesRead: number; + bytesWritten: number; + + // Extended base methods + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + end(data?: any, encoding?: string): void; + } + + export var Socket: { + new (options?: { fd?: string; type?: string; allowHalfOpen?: boolean; }): Socket; + }; + + export interface ListenOptions { + port?: number; + host?: string; + backlog?: number; + path?: string; + exclusive?: boolean; + } + + export interface Server extends Socket { + listen(port: number, hostname?: string, backlog?: number, listeningListener?: Function): Server; + listen(port: number, hostname?: string, listeningListener?: Function): Server; + listen(port: number, backlog?: number, listeningListener?: Function): Server; + listen(port: number, listeningListener?: Function): Server; + listen(path: string, backlog?: number, listeningListener?: Function): Server; + listen(path: string, listeningListener?: Function): Server; + listen(handle: any, backlog?: number, listeningListener?: Function): Server; + listen(handle: any, listeningListener?: Function): Server; + listen(options: ListenOptions, listeningListener?: Function): Server; + close(callback?: Function): Server; + address(): { port: number; family: string; address: string; }; + getConnections(cb: (error: Error, count: number) => void): void; + ref(): Server; + unref(): Server; + maxConnections: number; + connections: number; + } + export function createServer(connectionListener?: (socket: Socket) =>void ): Server; + export function createServer(options?: { allowHalfOpen?: boolean; }, connectionListener?: (socket: Socket) =>void ): Server; + export function connect(options: { port: number, host?: string, localAddress? : string, localPort? : string, family? : number, allowHalfOpen?: boolean; }, connectionListener?: Function): Socket; + export function connect(port: number, host?: string, connectionListener?: Function): Socket; + export function connect(path: string, connectionListener?: Function): Socket; + export function createConnection(options: { port: number, host?: string, localAddress? : string, localPort? : string, family? : number, allowHalfOpen?: boolean; }, connectionListener?: Function): Socket; + export function createConnection(port: number, host?: string, connectionListener?: Function): Socket; + export function createConnection(path: string, connectionListener?: Function): Socket; + export function isIP(input: string): number; + export function isIPv4(input: string): boolean; + export function isIPv6(input: string): boolean; +} + +declare module "dgram" { + import * as events from "events"; + + interface RemoteInfo { + address: string; + port: number; + size: number; + } + + interface AddressInfo { + address: string; + family: string; + port: number; + } + + export function createSocket(type: string, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + + interface Socket extends events.EventEmitter { + send(buf: Buffer, offset: number, length: number, port: number, address: string, callback?: (error: Error, bytes: number) => void): void; + bind(port: number, address?: string, callback?: () => void): void; + close(): void; + address(): AddressInfo; + setBroadcast(flag: boolean): void; + setMulticastTTL(ttl: number): void; + setMulticastLoopback(flag: boolean): void; + addMembership(multicastAddress: string, multicastInterface?: string): void; + dropMembership(multicastAddress: string, multicastInterface?: string): void; + } +} + +declare module "fs" { + import * as stream from "stream"; + import * as events from "events"; + + interface Stats { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + dev: number; + ino: number; + mode: number; + nlink: number; + uid: number; + gid: number; + rdev: number; + size: number; + blksize: number; + blocks: number; + atime: Date; + mtime: Date; + ctime: Date; + birthtime: Date; + } + + interface FSWatcher extends events.EventEmitter { + close(): void; + } + + export interface ReadStream extends stream.Readable { + close(): void; + } + export interface WriteStream extends stream.Writable { + close(): void; + bytesWritten: number; + } + + /** + * Asynchronous rename. + * @param oldPath + * @param newPath + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function rename(oldPath: string, newPath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + /** + * Synchronous rename + * @param oldPath + * @param newPath + */ + export function renameSync(oldPath: string, newPath: string): void; + export function truncate(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function truncate(path: string, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function truncateSync(path: string, len?: number): void; + export function ftruncate(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function ftruncate(fd: number, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function ftruncateSync(fd: number, len?: number): void; + export function chown(path: string, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function chownSync(path: string, uid: number, gid: number): void; + export function fchown(fd: number, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fchownSync(fd: number, uid: number, gid: number): void; + export function lchown(path: string, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function lchownSync(path: string, uid: number, gid: number): void; + export function chmod(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function chmod(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function chmodSync(path: string, mode: number): void; + export function chmodSync(path: string, mode: string): void; + export function fchmod(fd: number, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fchmod(fd: number, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fchmodSync(fd: number, mode: number): void; + export function fchmodSync(fd: number, mode: string): void; + export function lchmod(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function lchmod(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function lchmodSync(path: string, mode: number): void; + export function lchmodSync(path: string, mode: string): void; + export function stat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; + export function lstat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; + export function fstat(fd: number, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; + export function statSync(path: string): Stats; + export function lstatSync(path: string): Stats; + export function fstatSync(fd: number): Stats; + export function link(srcpath: string, dstpath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function linkSync(srcpath: string, dstpath: string): void; + export function symlink(srcpath: string, dstpath: string, type?: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function symlinkSync(srcpath: string, dstpath: string, type?: string): void; + export function readlink(path: string, callback?: (err: NodeJS.ErrnoException, linkString: string) => any): void; + export function readlinkSync(path: string): string; + export function realpath(path: string, callback?: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void; + export function realpath(path: string, cache: {[path: string]: string}, callback: (err: NodeJS.ErrnoException, resolvedPath: string) =>any): void; + export function realpathSync(path: string, cache?: { [path: string]: string }): string; + /* + * Asynchronous unlink - deletes the file specified in {path} + * + * @param path + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function unlink(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + /* + * Synchronous unlink - deletes the file specified in {path} + * + * @param path + */ + export function unlinkSync(path: string): void; + /* + * Asynchronous rmdir - removes the directory specified in {path} + * + * @param path + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function rmdir(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + /* + * Synchronous rmdir - removes the directory specified in {path} + * + * @param path + */ + export function rmdirSync(path: string): void; + /* + * Asynchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. + * + * @param path + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function mkdir(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + /* + * Asynchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. + * + * @param path + * @param mode + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function mkdir(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + /* + * Asynchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. + * + * @param path + * @param mode + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function mkdir(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; + /* + * Synchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. + * + * @param path + * @param mode + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function mkdirSync(path: string, mode?: number): void; + /* + * Synchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. + * + * @param path + * @param mode + * @param callback No arguments other than a possible exception are given to the completion callback. + */ + export function mkdirSync(path: string, mode?: string): void; + export function readdir(path: string, callback?: (err: NodeJS.ErrnoException, files: string[]) => void): void; + export function readdirSync(path: string): string[]; + export function close(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function closeSync(fd: number): void; + export function open(path: string, flags: string, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; + export function open(path: string, flags: string, mode: number, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; + export function open(path: string, flags: string, mode: string, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; + export function openSync(path: string, flags: string, mode?: number): number; + export function openSync(path: string, flags: string, mode?: string): number; + export function utimes(path: string, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function utimes(path: string, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function utimesSync(path: string, atime: number, mtime: number): void; + export function utimesSync(path: string, atime: Date, mtime: Date): void; + export function futimes(fd: number, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function futimes(fd: number, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function futimesSync(fd: number, atime: number, mtime: number): void; + export function futimesSync(fd: number, atime: Date, mtime: Date): void; + export function fsync(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; + export function fsyncSync(fd: number): void; + export function write(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void; + export function write(fd: number, buffer: Buffer, offset: number, length: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void; + export function write(fd: number, data: any, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; + export function write(fd: number, data: any, offset: number, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; + export function write(fd: number, data: any, offset: number, encoding: string, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; + export function writeSync(fd: number, buffer: Buffer, offset: number, length: number, position?: number): number; + export function writeSync(fd: number, data: any, position?: number, enconding?: string): number; + export function read(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, bytesRead: number, buffer: Buffer) => void): void; + export function readSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number; + /* + * Asynchronous readFile - Asynchronously reads the entire contents of a file. + * + * @param fileName + * @param encoding + * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. + */ + export function readFile(filename: string, encoding: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void; + /* + * Asynchronous readFile - Asynchronously reads the entire contents of a file. + * + * @param fileName + * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFile returns a string; otherwise it returns a Buffer. + * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. + */ + export function readFile(filename: string, options: { encoding: string; flag?: string; }, callback: (err: NodeJS.ErrnoException, data: string) => void): void; + /* + * Asynchronous readFile - Asynchronously reads the entire contents of a file. + * + * @param fileName + * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFile returns a string; otherwise it returns a Buffer. + * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. + */ + export function readFile(filename: string, options: { flag?: string; }, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; + /* + * Asynchronous readFile - Asynchronously reads the entire contents of a file. + * + * @param fileName + * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. + */ + export function readFile(filename: string, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; + /* + * Synchronous readFile - Synchronously reads the entire contents of a file. + * + * @param fileName + * @param encoding + */ + export function readFileSync(filename: string, encoding: string): string; + /* + * Synchronous readFile - Synchronously reads the entire contents of a file. + * + * @param fileName + * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFileSync returns a string; otherwise it returns a Buffer. + */ + export function readFileSync(filename: string, options: { encoding: string; flag?: string; }): string; + /* + * Synchronous readFile - Synchronously reads the entire contents of a file. + * + * @param fileName + * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFileSync returns a string; otherwise it returns a Buffer. + */ + export function readFileSync(filename: string, options?: { flag?: string; }): Buffer; + export function writeFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; + export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; + export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; + export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; + export function appendFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; + export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; + export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; + export function watchFile(filename: string, listener: (curr: Stats, prev: Stats) => void): void; + export function watchFile(filename: string, options: { persistent?: boolean; interval?: number; }, listener: (curr: Stats, prev: Stats) => void): void; + export function unwatchFile(filename: string, listener?: (curr: Stats, prev: Stats) => void): void; + export function watch(filename: string, listener?: (event: string, filename: string) => any): FSWatcher; + export function watch(filename: string, options: { persistent?: boolean; }, listener?: (event: string, filename: string) => any): FSWatcher; + export function exists(path: string, callback?: (exists: boolean) => void): void; + export function existsSync(path: string): boolean; + /** Constant for fs.access(). File is visible to the calling process. */ + export var F_OK: number; + /** Constant for fs.access(). File can be read by the calling process. */ + export var R_OK: number; + /** Constant for fs.access(). File can be written by the calling process. */ + export var W_OK: number; + /** Constant for fs.access(). File can be executed by the calling process. */ + export var X_OK: number; + /** Tests a user's permissions for the file specified by path. */ + export function access(path: string, callback: (err: NodeJS.ErrnoException) => void): void; + export function access(path: string, mode: number, callback: (err: NodeJS.ErrnoException) => void): void; + /** Synchronous version of fs.access. This throws if any accessibility checks fail, and does nothing otherwise. */ + export function accessSync(path: string, mode ?: number): void; + export function createReadStream(path: string, options?: { + flags?: string; + encoding?: string; + fd?: number; + mode?: number; + autoClose?: boolean; + }): ReadStream; + export function createWriteStream(path: string, options?: { + flags?: string; + encoding?: string; + fd?: number; + mode?: number; + }): WriteStream; +} + +declare module "path" { + + /** + * A parsed path object generated by path.parse() or consumed by path.format(). + */ + export interface ParsedPath { + /** + * The root of the path such as '/' or 'c:\' + */ + root: string; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir: string; + /** + * The file name including extension (if any) such as 'index.html' + */ + base: string; + /** + * The file extension (if any) such as '.html' + */ + ext: string; + /** + * The file name without extension (if any) such as 'index' + */ + name: string; + } + + /** + * Normalize a string path, reducing '..' and '.' parts. + * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. + * + * @param p string path to normalize. + */ + export function normalize(p: string): string; + /** + * Join all arguments together and normalize the resulting path. + * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown. + * + * @param paths string paths to join. + */ + export function join(...paths: any[]): string; + /** + * Join all arguments together and normalize the resulting path. + * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown. + * + * @param paths string paths to join. + */ + export function join(...paths: string[]): string; + /** + * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. + * + * Starting from leftmost {from} paramter, resolves {to} to an absolute path. + * + * If {to} isn't already absolute, {from} arguments are prepended in right to left order, until an absolute path is found. If after using all {from} paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory. + * + * @param pathSegments string paths to join. Non-string arguments are ignored. + */ + export function resolve(...pathSegments: any[]): string; + /** + * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. + * + * @param path path to test. + */ + export function isAbsolute(path: string): boolean; + /** + * Solve the relative path from {from} to {to}. + * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. + * + * @param from + * @param to + */ + export function relative(from: string, to: string): string; + /** + * Return the directory name of a path. Similar to the Unix dirname command. + * + * @param p the path to evaluate. + */ + export function dirname(p: string): string; + /** + * Return the last portion of a path. Similar to the Unix basename command. + * Often used to extract the file name from a fully qualified path. + * + * @param p the path to evaluate. + * @param ext optionally, an extension to remove from the result. + */ + export function basename(p: string, ext?: string): string; + /** + * Return the extension of the path, from the last '.' to end of string in the last portion of the path. + * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string + * + * @param p the path to evaluate. + */ + export function extname(p: string): string; + /** + * The platform-specific file separator. '\\' or '/'. + */ + export var sep: string; + /** + * The platform-specific file delimiter. ';' or ':'. + */ + export var delimiter: string; + /** + * Returns an object from a path string - the opposite of format(). + * + * @param pathString path to evaluate. + */ + export function parse(pathString: string): ParsedPath; + /** + * Returns a path string from an object - the opposite of parse(). + * + * @param pathString path to evaluate. + */ + export function format(pathObject: ParsedPath): string; + + export module posix { + export function normalize(p: string): string; + export function join(...paths: any[]): string; + export function resolve(...pathSegments: any[]): string; + export function isAbsolute(p: string): boolean; + export function relative(from: string, to: string): string; + export function dirname(p: string): string; + export function basename(p: string, ext?: string): string; + export function extname(p: string): string; + export var sep: string; + export var delimiter: string; + export function parse(p: string): ParsedPath; + export function format(pP: ParsedPath): string; + } + + export module win32 { + export function normalize(p: string): string; + export function join(...paths: any[]): string; + export function resolve(...pathSegments: any[]): string; + export function isAbsolute(p: string): boolean; + export function relative(from: string, to: string): string; + export function dirname(p: string): string; + export function basename(p: string, ext?: string): string; + export function extname(p: string): string; + export var sep: string; + export var delimiter: string; + export function parse(p: string): ParsedPath; + export function format(pP: ParsedPath): string; + } +} + +declare module "string_decoder" { + export interface NodeStringDecoder { + write(buffer: Buffer): string; + detectIncompleteChar(buffer: Buffer): number; + } + export var StringDecoder: { + new (encoding: string): NodeStringDecoder; + }; +} + +declare module "tls" { + import * as crypto from "crypto"; + import * as net from "net"; + import * as stream from "stream"; + + var CLIENT_RENEG_LIMIT: number; + var CLIENT_RENEG_WINDOW: number; + + export interface TlsOptions { + host?: string; + port?: number; + pfx?: any; //string or buffer + key?: any; //string or buffer + passphrase?: string; + cert?: any; + ca?: any; //string or buffer + crl?: any; //string or string array + ciphers?: string; + honorCipherOrder?: any; + requestCert?: boolean; + rejectUnauthorized?: boolean; + NPNProtocols?: any; //array or Buffer; + SNICallback?: (servername: string) => any; + } + + export interface ConnectionOptions { + host?: string; + port?: number; + socket?: net.Socket; + pfx?: any; //string | Buffer + key?: any; //string | Buffer + passphrase?: string; + cert?: any; //string | Buffer + ca?: any; //Array of string | Buffer + rejectUnauthorized?: boolean; + NPNProtocols?: any; //Array of string | Buffer + servername?: string; + } + + export interface Server extends net.Server { + close(): Server; + address(): { port: number; family: string; address: string; }; + addContext(hostName: string, credentials: { + key: string; + cert: string; + ca: string; + }): void; + maxConnections: number; + connections: number; + } + + export interface ClearTextStream extends stream.Duplex { + authorized: boolean; + authorizationError: Error; + getPeerCertificate(): any; + getCipher: { + name: string; + version: string; + }; + address: { + port: number; + family: string; + address: string; + }; + remoteAddress: string; + remotePort: number; + } + + export interface SecurePair { + encrypted: any; + cleartext: any; + } + + export interface SecureContextOptions { + pfx?: any; //string | buffer + key?: any; //string | buffer + passphrase?: string; + cert?: any; // string | buffer + ca?: any; // string | buffer + crl?: any; // string | string[] + ciphers?: string; + honorCipherOrder?: boolean; + } + + export interface SecureContext { + context: any; + } + + export function createServer(options: TlsOptions, secureConnectionListener?: (cleartextStream: ClearTextStream) =>void ): Server; + export function connect(options: TlsOptions, secureConnectionListener?: () =>void ): ClearTextStream; + export function connect(port: number, host?: string, options?: ConnectionOptions, secureConnectListener?: () =>void ): ClearTextStream; + export function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () =>void ): ClearTextStream; + export function createSecurePair(credentials?: crypto.Credentials, isServer?: boolean, requestCert?: boolean, rejectUnauthorized?: boolean): SecurePair; + export function createSecureContext(details: SecureContextOptions): SecureContext; +} + +declare module "crypto" { + export interface CredentialDetails { + pfx: string; + key: string; + passphrase: string; + cert: string; + ca: any; //string | string array + crl: any; //string | string array + ciphers: string; + } + export interface Credentials { context?: any; } + export function createCredentials(details: CredentialDetails): Credentials; + export function createHash(algorithm: string): Hash; + export function createHmac(algorithm: string, key: string): Hmac; + export function createHmac(algorithm: string, key: Buffer): Hmac; + export interface Hash { + update(data: any, input_encoding?: string): Hash; + digest(encoding: 'buffer'): Buffer; + digest(encoding: string): any; + digest(): Buffer; + } + export interface Hmac extends NodeJS.ReadWriteStream { + update(data: any, input_encoding?: string): Hmac; + digest(encoding: 'buffer'): Buffer; + digest(encoding: string): any; + digest(): Buffer; + } + export function createCipher(algorithm: string, password: any): Cipher; + export function createCipheriv(algorithm: string, key: any, iv: any): Cipher; + export interface Cipher extends NodeJS.ReadWriteStream { + update(data: Buffer): Buffer; + update(data: string, input_encoding: "utf8"|"ascii"|"binary"): Buffer; + update(data: Buffer, input_encoding: any, output_encoding: "binary"|"base64"|"hex"): string; + update(data: string, input_encoding: "utf8"|"ascii"|"binary", output_encoding: "binary"|"base64"|"hex"): string; + final(): Buffer; + final(output_encoding: string): string; + setAutoPadding(auto_padding: boolean): void; + getAuthTag(): Buffer; + } + export function createDecipher(algorithm: string, password: any): Decipher; + export function createDecipheriv(algorithm: string, key: any, iv: any): Decipher; + export interface Decipher extends NodeJS.ReadWriteStream { + update(data: Buffer): Buffer; + update(data: string, input_encoding: "binary"|"base64"|"hex"): Buffer; + update(data: Buffer, input_encoding: any, output_encoding: "utf8"|"ascii"|"binary"): string; + update(data: string, input_encoding: "binary"|"base64"|"hex", output_encoding: "utf8"|"ascii"|"binary"): string; + final(): Buffer; + final(output_encoding: string): string; + setAutoPadding(auto_padding: boolean): void; + setAuthTag(tag: Buffer): void; + } + export function createSign(algorithm: string): Signer; + export interface Signer extends NodeJS.WritableStream { + update(data: any): void; + sign(private_key: string, output_format: string): string; + } + export function createVerify(algorith: string): Verify; + export interface Verify extends NodeJS.WritableStream { + update(data: any): void; + verify(object: string, signature: string, signature_format?: string): boolean; + } + export function createDiffieHellman(prime_length: number): DiffieHellman; + export function createDiffieHellman(prime: number, encoding?: string): DiffieHellman; + export interface DiffieHellman { + generateKeys(encoding?: string): string; + computeSecret(other_public_key: string, input_encoding?: string, output_encoding?: string): string; + getPrime(encoding?: string): string; + getGenerator(encoding: string): string; + getPublicKey(encoding?: string): string; + getPrivateKey(encoding?: string): string; + setPublicKey(public_key: string, encoding?: string): void; + setPrivateKey(public_key: string, encoding?: string): void; + } + export function getDiffieHellman(group_name: string): DiffieHellman; + export function pbkdf2(password: string|Buffer, salt: string|Buffer, iterations: number, keylen: number, callback: (err: Error, derivedKey: Buffer) => any): void; + export function pbkdf2(password: string|Buffer, salt: string|Buffer, iterations: number, keylen: number, digest: string, callback: (err: Error, derivedKey: Buffer) => any): void; + export function pbkdf2Sync(password: string|Buffer, salt: string|Buffer, iterations: number, keylen: number) : Buffer; + export function pbkdf2Sync(password: string|Buffer, salt: string|Buffer, iterations: number, keylen: number, digest: string) : Buffer; + export function randomBytes(size: number): Buffer; + export function randomBytes(size: number, callback: (err: Error, buf: Buffer) =>void ): void; + export function pseudoRandomBytes(size: number): Buffer; + export function pseudoRandomBytes(size: number, callback: (err: Error, buf: Buffer) =>void ): void; + export interface RsaPublicKey { + key: string; + padding?: any; + } + export interface RsaPrivateKey { + key: string; + passphrase?: string, + padding?: any; + } + export function publicEncrypt(public_key: string|RsaPublicKey, buffer: Buffer): Buffer + export function privateDecrypt(private_key: string|RsaPrivateKey, buffer: Buffer): Buffer +} + +declare module "stream" { + import * as events from "events"; + + export class Stream extends events.EventEmitter { + pipe(destination: T, options?: { end?: boolean; }): T; + } + + export interface ReadableOptions { + highWaterMark?: number; + encoding?: string; + objectMode?: boolean; + } + + export class Readable extends events.EventEmitter implements NodeJS.ReadableStream { + readable: boolean; + constructor(opts?: ReadableOptions); + _read(size: number): void; + read(size?: number): any; + setEncoding(encoding: string): void; + pause(): void; + resume(): void; + pipe(destination: T, options?: { end?: boolean; }): T; + unpipe(destination?: T): void; + unshift(chunk: any): void; + wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; + push(chunk: any, encoding?: string): boolean; + } + + export interface WritableOptions { + highWaterMark?: number; + decodeStrings?: boolean; + objectMode?: boolean; + } + + export class Writable extends events.EventEmitter implements NodeJS.WritableStream { + writable: boolean; + constructor(opts?: WritableOptions); + _write(chunk: any, encoding: string, callback: Function): void; + write(chunk: any, cb?: Function): boolean; + write(chunk: any, encoding?: string, cb?: Function): boolean; + end(): void; + end(chunk: any, cb?: Function): void; + end(chunk: any, encoding?: string, cb?: Function): void; + } + + export interface DuplexOptions extends ReadableOptions, WritableOptions { + allowHalfOpen?: boolean; + } + + // Note: Duplex extends both Readable and Writable. + export class Duplex extends Readable implements NodeJS.ReadWriteStream { + writable: boolean; + constructor(opts?: DuplexOptions); + _write(chunk: any, encoding: string, callback: Function): void; + write(chunk: any, cb?: Function): boolean; + write(chunk: any, encoding?: string, cb?: Function): boolean; + end(): void; + end(chunk: any, cb?: Function): void; + end(chunk: any, encoding?: string, cb?: Function): void; + } + + export interface TransformOptions extends ReadableOptions, WritableOptions {} + + // Note: Transform lacks the _read and _write methods of Readable/Writable. + export class Transform extends events.EventEmitter implements NodeJS.ReadWriteStream { + readable: boolean; + writable: boolean; + constructor(opts?: TransformOptions); + _transform(chunk: any, encoding: string, callback: Function): void; + _flush(callback: Function): void; + read(size?: number): any; + setEncoding(encoding: string): void; + pause(): void; + resume(): void; + pipe(destination: T, options?: { end?: boolean; }): T; + unpipe(destination?: T): void; + unshift(chunk: any): void; + wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; + push(chunk: any, encoding?: string): boolean; + write(chunk: any, cb?: Function): boolean; + write(chunk: any, encoding?: string, cb?: Function): boolean; + end(): void; + end(chunk: any, cb?: Function): void; + end(chunk: any, encoding?: string, cb?: Function): void; + } + + export class PassThrough extends Transform {} +} + +declare module "util" { + export interface InspectOptions { + showHidden?: boolean; + depth?: number; + colors?: boolean; + customInspect?: boolean; + } + + export function format(format: any, ...param: any[]): string; + export function debug(string: string): void; + export function error(...param: any[]): void; + export function puts(...param: any[]): void; + export function print(...param: any[]): void; + export function log(string: string): void; + export function inspect(object: any, showHidden?: boolean, depth?: number, color?: boolean): string; + export function inspect(object: any, options: InspectOptions): string; + export function isArray(object: any): boolean; + export function isRegExp(object: any): boolean; + export function isDate(object: any): boolean; + export function isError(object: any): boolean; + export function inherits(constructor: any, superConstructor: any): void; + export function debuglog(key:string): (msg:string,...param: any[])=>void; +} + +declare module "assert" { + function internal (value: any, message?: string): void; + namespace internal { + export class AssertionError implements Error { + name: string; + message: string; + actual: any; + expected: any; + operator: string; + generatedMessage: boolean; + + constructor(options?: {message?: string; actual?: any; expected?: any; + operator?: string; stackStartFunction?: Function}); + } + + export function fail(actual?: any, expected?: any, message?: string, operator?: string): void; + export function ok(value: any, message?: string): void; + export function equal(actual: any, expected: any, message?: string): void; + export function notEqual(actual: any, expected: any, message?: string): void; + export function deepEqual(actual: any, expected: any, message?: string): void; + export function notDeepEqual(acutal: any, expected: any, message?: string): void; + export function strictEqual(actual: any, expected: any, message?: string): void; + export function notStrictEqual(actual: any, expected: any, message?: string): void; + export function deepStrictEqual(actual: any, expected: any, message?: string): void; + export function notDeepStrictEqual(actual: any, expected: any, message?: string): void; + export var throws: { + (block: Function, message?: string): void; + (block: Function, error: Function, message?: string): void; + (block: Function, error: RegExp, message?: string): void; + (block: Function, error: (err: any) => boolean, message?: string): void; + }; + + export var doesNotThrow: { + (block: Function, message?: string): void; + (block: Function, error: Function, message?: string): void; + (block: Function, error: RegExp, message?: string): void; + (block: Function, error: (err: any) => boolean, message?: string): void; + }; + + export function ifError(value: any): void; + } + + export = internal; +} + +declare module "tty" { + import * as net from "net"; + + export function isatty(fd: number): boolean; + export interface ReadStream extends net.Socket { + isRaw: boolean; + setRawMode(mode: boolean): void; + isTTY: boolean; + } + export interface WriteStream extends net.Socket { + columns: number; + rows: number; + isTTY: boolean; + } +} + +declare module "domain" { + import * as events from "events"; + + export class Domain extends events.EventEmitter implements NodeJS.Domain { + run(fn: Function): void; + add(emitter: events.EventEmitter): void; + remove(emitter: events.EventEmitter): void; + bind(cb: (err: Error, data: any) => any): any; + intercept(cb: (data: any) => any): any; + dispose(): void; + } + + export function create(): Domain; +} + +declare module "constants" { + export var E2BIG: number; + export var EACCES: number; + export var EADDRINUSE: number; + export var EADDRNOTAVAIL: number; + export var EAFNOSUPPORT: number; + export var EAGAIN: number; + export var EALREADY: number; + export var EBADF: number; + export var EBADMSG: number; + export var EBUSY: number; + export var ECANCELED: number; + export var ECHILD: number; + export var ECONNABORTED: number; + export var ECONNREFUSED: number; + export var ECONNRESET: number; + export var EDEADLK: number; + export var EDESTADDRREQ: number; + export var EDOM: number; + export var EEXIST: number; + export var EFAULT: number; + export var EFBIG: number; + export var EHOSTUNREACH: number; + export var EIDRM: number; + export var EILSEQ: number; + export var EINPROGRESS: number; + export var EINTR: number; + export var EINVAL: number; + export var EIO: number; + export var EISCONN: number; + export var EISDIR: number; + export var ELOOP: number; + export var EMFILE: number; + export var EMLINK: number; + export var EMSGSIZE: number; + export var ENAMETOOLONG: number; + export var ENETDOWN: number; + export var ENETRESET: number; + export var ENETUNREACH: number; + export var ENFILE: number; + export var ENOBUFS: number; + export var ENODATA: number; + export var ENODEV: number; + export var ENOENT: number; + export var ENOEXEC: number; + export var ENOLCK: number; + export var ENOLINK: number; + export var ENOMEM: number; + export var ENOMSG: number; + export var ENOPROTOOPT: number; + export var ENOSPC: number; + export var ENOSR: number; + export var ENOSTR: number; + export var ENOSYS: number; + export var ENOTCONN: number; + export var ENOTDIR: number; + export var ENOTEMPTY: number; + export var ENOTSOCK: number; + export var ENOTSUP: number; + export var ENOTTY: number; + export var ENXIO: number; + export var EOPNOTSUPP: number; + export var EOVERFLOW: number; + export var EPERM: number; + export var EPIPE: number; + export var EPROTO: number; + export var EPROTONOSUPPORT: number; + export var EPROTOTYPE: number; + export var ERANGE: number; + export var EROFS: number; + export var ESPIPE: number; + export var ESRCH: number; + export var ETIME: number; + export var ETIMEDOUT: number; + export var ETXTBSY: number; + export var EWOULDBLOCK: number; + export var EXDEV: number; + export var WSAEINTR: number; + export var WSAEBADF: number; + export var WSAEACCES: number; + export var WSAEFAULT: number; + export var WSAEINVAL: number; + export var WSAEMFILE: number; + export var WSAEWOULDBLOCK: number; + export var WSAEINPROGRESS: number; + export var WSAEALREADY: number; + export var WSAENOTSOCK: number; + export var WSAEDESTADDRREQ: number; + export var WSAEMSGSIZE: number; + export var WSAEPROTOTYPE: number; + export var WSAENOPROTOOPT: number; + export var WSAEPROTONOSUPPORT: number; + export var WSAESOCKTNOSUPPORT: number; + export var WSAEOPNOTSUPP: number; + export var WSAEPFNOSUPPORT: number; + export var WSAEAFNOSUPPORT: number; + export var WSAEADDRINUSE: number; + export var WSAEADDRNOTAVAIL: number; + export var WSAENETDOWN: number; + export var WSAENETUNREACH: number; + export var WSAENETRESET: number; + export var WSAECONNABORTED: number; + export var WSAECONNRESET: number; + export var WSAENOBUFS: number; + export var WSAEISCONN: number; + export var WSAENOTCONN: number; + export var WSAESHUTDOWN: number; + export var WSAETOOMANYREFS: number; + export var WSAETIMEDOUT: number; + export var WSAECONNREFUSED: number; + export var WSAELOOP: number; + export var WSAENAMETOOLONG: number; + export var WSAEHOSTDOWN: number; + export var WSAEHOSTUNREACH: number; + export var WSAENOTEMPTY: number; + export var WSAEPROCLIM: number; + export var WSAEUSERS: number; + export var WSAEDQUOT: number; + export var WSAESTALE: number; + export var WSAEREMOTE: number; + export var WSASYSNOTREADY: number; + export var WSAVERNOTSUPPORTED: number; + export var WSANOTINITIALISED: number; + export var WSAEDISCON: number; + export var WSAENOMORE: number; + export var WSAECANCELLED: number; + export var WSAEINVALIDPROCTABLE: number; + export var WSAEINVALIDPROVIDER: number; + export var WSAEPROVIDERFAILEDINIT: number; + export var WSASYSCALLFAILURE: number; + export var WSASERVICE_NOT_FOUND: number; + export var WSATYPE_NOT_FOUND: number; + export var WSA_E_NO_MORE: number; + export var WSA_E_CANCELLED: number; + export var WSAEREFUSED: number; + export var SIGHUP: number; + export var SIGINT: number; + export var SIGILL: number; + export var SIGABRT: number; + export var SIGFPE: number; + export var SIGKILL: number; + export var SIGSEGV: number; + export var SIGTERM: number; + export var SIGBREAK: number; + export var SIGWINCH: number; + export var SSL_OP_ALL: number; + export var SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number; + export var SSL_OP_CIPHER_SERVER_PREFERENCE: number; + export var SSL_OP_CISCO_ANYCONNECT: number; + export var SSL_OP_COOKIE_EXCHANGE: number; + export var SSL_OP_CRYPTOPRO_TLSEXT_BUG: number; + export var SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number; + export var SSL_OP_EPHEMERAL_RSA: number; + export var SSL_OP_LEGACY_SERVER_CONNECT: number; + export var SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number; + export var SSL_OP_MICROSOFT_SESS_ID_BUG: number; + export var SSL_OP_MSIE_SSLV2_RSA_PADDING: number; + export var SSL_OP_NETSCAPE_CA_DN_BUG: number; + export var SSL_OP_NETSCAPE_CHALLENGE_BUG: number; + export var SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number; + export var SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number; + export var SSL_OP_NO_COMPRESSION: number; + export var SSL_OP_NO_QUERY_MTU: number; + export var SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number; + export var SSL_OP_NO_SSLv2: number; + export var SSL_OP_NO_SSLv3: number; + export var SSL_OP_NO_TICKET: number; + export var SSL_OP_NO_TLSv1: number; + export var SSL_OP_NO_TLSv1_1: number; + export var SSL_OP_NO_TLSv1_2: number; + export var SSL_OP_PKCS1_CHECK_1: number; + export var SSL_OP_PKCS1_CHECK_2: number; + export var SSL_OP_SINGLE_DH_USE: number; + export var SSL_OP_SINGLE_ECDH_USE: number; + export var SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number; + export var SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number; + export var SSL_OP_TLS_BLOCK_PADDING_BUG: number; + export var SSL_OP_TLS_D5_BUG: number; + export var SSL_OP_TLS_ROLLBACK_BUG: number; + export var ENGINE_METHOD_DSA: number; + export var ENGINE_METHOD_DH: number; + export var ENGINE_METHOD_RAND: number; + export var ENGINE_METHOD_ECDH: number; + export var ENGINE_METHOD_ECDSA: number; + export var ENGINE_METHOD_CIPHERS: number; + export var ENGINE_METHOD_DIGESTS: number; + export var ENGINE_METHOD_STORE: number; + export var ENGINE_METHOD_PKEY_METHS: number; + export var ENGINE_METHOD_PKEY_ASN1_METHS: number; + export var ENGINE_METHOD_ALL: number; + export var ENGINE_METHOD_NONE: number; + export var DH_CHECK_P_NOT_SAFE_PRIME: number; + export var DH_CHECK_P_NOT_PRIME: number; + export var DH_UNABLE_TO_CHECK_GENERATOR: number; + export var DH_NOT_SUITABLE_GENERATOR: number; + export var NPN_ENABLED: number; + export var RSA_PKCS1_PADDING: number; + export var RSA_SSLV23_PADDING: number; + export var RSA_NO_PADDING: number; + export var RSA_PKCS1_OAEP_PADDING: number; + export var RSA_X931_PADDING: number; + export var RSA_PKCS1_PSS_PADDING: number; + export var POINT_CONVERSION_COMPRESSED: number; + export var POINT_CONVERSION_UNCOMPRESSED: number; + export var POINT_CONVERSION_HYBRID: number; + export var O_RDONLY: number; + export var O_WRONLY: number; + export var O_RDWR: number; + export var S_IFMT: number; + export var S_IFREG: number; + export var S_IFDIR: number; + export var S_IFCHR: number; + export var S_IFLNK: number; + export var O_CREAT: number; + export var O_EXCL: number; + export var O_TRUNC: number; + export var O_APPEND: number; + export var F_OK: number; + export var R_OK: number; + export var W_OK: number; + export var X_OK: number; + export var UV_UDP_REUSEADDR: number; +} \ No newline at end of file diff --git a/typings/browser/ambient/protobufjs/index.d.ts b/typings/browser/ambient/protobufjs/index.d.ts new file mode 100644 index 0000000..ca05d23 --- /dev/null +++ b/typings/browser/ambient/protobufjs/index.d.ts @@ -0,0 +1,390 @@ +// Generated by typings +// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/protobufjs/protobufjs.d.ts +// Type definitions for ProtoBuf.js +// Project: https://github.com/dcodeIO/ProtoBuf.js +// Definitions by: Panu Horsmalahti +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + + +declare namespace ProtoBuf { + // ========== + // protobufjs/src/ProtoBuf.js + + var Builder: Builder; + // var ByteBuffer: Buffer; + var Long: LongStatic; + var DotProto: DotProto; + var Reflect: Reflect; + + // var Lang: Lang; TODO: implement interface Lang + // var Util: Util; TODO: implement interface Util + + export function loadJson(json: string, builder?: ProtoBuilder, + filename?: string): ProtoBuilder; + + export function loadJsonFile(filename: string, + callback?: (error: any, builder: ProtoBuilder) => void, + builder?: ProtoBuilder): ProtoBuilder; + + export function loadProto(proto: string, builder?: ProtoBuilder, + filename?: string): ProtoBuilder; + + export function loadProtoFile(filePath: string, + callback?: (error: any, builder: ProtoBuilder) => void, + builder?: ProtoBuilder): ProtoBuilder; + + export function newBuilder(options?: {[key: string]: any}): ProtoBuilder; + + export interface LongStatic { + new(low?: number, high?: number, unsigned?:boolean): Long; + + MAX_UNSIGNED_VALUE: Long; + MAX_VALUE: Long; + MIN_VALUE: Long; + NEG_ONE: Long; + ONE: Long; + UONE: Long; + UZERO: Long; + ZERO: Long; + + fromBits(lowBits: number, highBits: number, unsigned?: boolean): Long; + fromInt(value: number, unsigned?: boolean): Long; + fromNumber(value: number, unsigned?: boolean): Long; + fromString(str: string, unsigned?: boolean | number, radix?: number): Long; + fromValue(val: Long | number | string): Long; + + isLong(obj: any): boolean; + } + + // Based on https://github.com/dcodeIO/Long.js and https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/long/long.d.ts + export interface Long { + high: number; + low: number; + unsigned :boolean; + + add(other: Long | number | string): Long; + and(other: Long | number | string): Long; + compare(other: Long | number | string): number; + div(divisor: Long | number | string): Long; + equals(other: Long | number | string): boolean; + getHighBits(): number; + getHighBitsUnsigned(): number; + getLowBits(): number; + getLowBitsUnsigned(): number; + getNumBitsAbs(): number; + greaterThan(other: Long | number | string): boolean; + greaterThanOrEqual(other: Long | number | string): boolean; + isEven(): boolean; + isNegative(): boolean; + isOdd(): boolean; + isPositive(): boolean; + isZero(): boolean; + lessThan(other: Long | number | string): boolean; + lessThanOrEqual(other: Long | number | string): boolean; + modulo(divisor: Long | number | string): Long; + multiply(multiplier: Long | number | string): Long; + negate(): Long; + not(): Long; + notEquals(other: Long | number | string): boolean; + or(other: Long | number | string): Long; + shiftLeft(numBits: number | Long): Long; + shiftRight(numBits: number | Long): Long; + shiftRightUnsigned(numBits: number | Long): Long; + subtract(other: Long | number | string): Long; + toInt(): number; + toNumber(): number; + toSigned(): Long; + toString(radix?: number): string; + toUnsigned(): Long; + xor(other: Long | number | string): Long; + } + + // ========== + // protobufjs/src/ProtoBuf/Builder.js + + export interface Builder { + new(options?: {[key: string]: any}): ProtoBuilder; + Message: Message; + Service: Service; + isValidMessage(def: {[key: string]: any}): boolean; + isValidMessageField(def: {[key: string]: any}): boolean; + isValidEnum(def: {[key: string]: any}): boolean; + isValidService(def: {[key: string]: any}): boolean; + isValidExtend(def: {[key: string]: any}): boolean; + } + + /** + * TODO: Confirm that message needs no further implementation + */ + export interface Message { + new(values?: {[key: string]: any}, var_args?: string[]): Message; + [field: string]: any; + } + + /** + * TODO: Implement service interface + */ + export interface Service { + new(rpcImpl?: Function): Service; + } + + + // ========== + // meta objects for constructing protobufs + + export interface ProtoBuilder { + ns: ReflectNamespace; + ptr: ReflectNamespace; + resolved: boolean; + result: ProtoBuf; + files: string[]; + importRoot: string; + options: {[key: string]: any}; + syntax: string; + reset(): void; + define(pkg: string, options?: {[key: string]: any}): ProtoBuilder; + create(defs?: {[key: string]: any}[]): ProtoBuilder; + resolveAll(): void; + build(path?: string): ProtoBuf; + lookup(path?: string): ReflectT; + } + + export interface ProtoBuf { + [package: string]: {[key: string]: MetaMessage | any}; + } + + export interface MetaMessage { + new(values?: {[key: string]: any}, var_args?: string[]): Message; + decode(buffer?: Buffer, enc?: string): Message; + decodeDelimited(buffer?: Buffer, enc?: string): Message; + decode64(str: string): Message; + decodeHex(str: string): Message; + } + + // ========== + // protobufjs/src/ProtoBuf/DotProto.js + + export interface DotProto { + Parser: Parser; + Tokenizer: Tokenizer; + } + + export interface Parser { + new(proto: string): Parser; + tn: Tokenizer; + parse(): MetaProto; + toString(): string; + } + + export interface Tokenizer { + new(proto: string): Tokenizer; + source: string; + index: number; + line: number; + stack: string[]; + readingString: boolean; + stringEndsWith: string; + next(): string; + peek(): string; + toString(): string; + } + + // ========== + // proto meta information returned by the Parser + + export interface MetaProto { + package: string; + messages: ProtoMessage[]; + enums: ProtoEnum[]; + imports: string[]; + options: {[key: string]: any}; + services: ProtoService[]; + } + + export interface ProtoEnum { + name: string; + values: ProtoEnumValue; + options: {[key: string]: any}; + } + + export interface ProtoEnumValue { + name: string; + id: string; + } + + export interface ProtoField { + rule: string; + options: {[key: string]: any}; + type: string; + name: string; + id: number; + oneof?: string; + } + + export interface ProtoMessage { + name: string; + isGroup?: boolean; + fields: ProtoField[]; + enums: ProtoEnum[]; + messages: ProtoMessage[]; + options: {[key: string]: any}; + oneofs: {[key: string]:number[]}; + } + + export interface ProtoRpcService { + request: string; + response: string; + options: {[key: string]: any}; + } + + export interface ProtoService { + name: string; + rpc: {[key: string]:ProtoRpcService}; + options: {[key: string]: any}; + } + + + // ========== + // protobufjs/src/ProtoBuf/Reflect.js + + export interface Reflect { + T: ReflectT; + Namespace: ReflectNamespace; + Message: ReflectMessage; + Enum: ReflectEnum; + Extension: ReflectExtension; + Service: ReflectService; + } + + export interface ReflectT { + new(builder?: ProtoBuilder, parent?: ReflectT, name?: string): ReflectT; + builder: ProtoBuilder; + parent: ReflectT; + name: string; + fqn(): string; + toString(includeClass?: boolean): string; + } + + export interface ReflectNamespace extends ReflectT { + new(builder?: ProtoBuilder, parent?: ReflectNamespace, name?: string, + options?: {[key: string]: any}): ReflectNamespace; + className: string; + children: ReflectT[]; + options: {[key: string]: any}; + syntax: string; + getChildren(type?: ReflectT): ReflectT[]; + addChild(child: ReflectT): void; + getChild(nameOrId?: string | number): ReflectT; + resolve(qn: string, excludeFields?: boolean): ReflectNamespace; + build(): ProtoBuf; + buildOpt(): {[key: string]: any}; + getOption(name?: string): any; + } + + export interface ReflectMessage extends ReflectNamespace { + new(builder?: ProtoBuilder, parent?: ReflectNamespace, name?: string, + options?: {[key: string]: any}, isGroup?: boolean): ReflectMessage; + Field: ReflectField; // NOTE: only for new ProtoBuf.Reflect.Message.Field(); + ExtensionField: ReflectExtensionField; // NOTE: only for + // new ProtoBuf.Reflect.Message.ExtensionField(); + OneOf: ReflectOneOf; // NOTE: only for new ProtoBuf.Reflect.Message.OneOf(); + extensions: number[]; + clazz(): MetaMessage; + isGroup: boolean; + build(rebuild?: boolean): MetaMessage|any; + encode(message: Message, buffer: Buffer, noVerify?: boolean): Buffer; + calculate(message: Message): number; + decode(buffer: Buffer, length?: number, expectedGroupEndId?: number): Message; + } + + export interface ReflectEnum extends ReflectNamespace { + new(builder?: ProtoBuilder, parent?: ReflectT, name?: string, + options?: {[key: string]: any}): ReflectEnum; + Value: ReflectValue; // NOTE: only for new ProtoBuf.Reflect.Enum.Value(); + object: {[key: string]:number}; + build(): {[key: string]: any}; + } + + export interface ReflectExtension extends ReflectT { + new(builder?: ProtoBuilder, parent?: ReflectT, name?: string, + field?: ReflectField): ReflectExtension; + field: ReflectField; + } + + export interface ReflectService extends ReflectNamespace { + new(): ReflectService; + Method: ReflectMethod; // NOTE: only for new ProtoBuf.Reflect.Service.Method(); + RPCMethod: ReflectRPCMethod; // NOTE: only for new ProtoBuf.Reflect.Service.RPCMethod(); + clazz(): Function; + build(rebuild?: boolean): Function|any; + } + + // TODO: check that the runtime instance of this type reflects this definition + export interface ReflectField extends ReflectT { + new(builder: ProtoBuilder, message: ReflectMessage, rule: string, type: string, + name: string, id: number, options: {[key: string]: any}, oneof: ReflectOneOf): ReflectField; + className: string; + required: boolean; + repeated: boolean; + type: string | WireTuple; + resolvedType: ReflectT; + id: number; + options: {[key: string]: any}; + defaultValue: any; + oneof: ReflectOneOf; + originalName: string; + build(): {[key: string]: any}; + mkLong(value: any, unsigned?: boolean): number; + verifyValue(value: any, skipRepeated?: boolean): any; + encode(value: any, buffer: Buffer): Buffer; + encodeValue(value: any, buffer: Buffer): Buffer; + calculate(value: any): number; + calculateValue(value: any): number; + decode(wireType: number, buffer: Buffer, skipRepeated?: boolean): any; + } + + export interface WireTuple { + name: string; + wireType: number; + } + + // TODO: check that the runtime instance of this type reflects this definition + export interface ReflectExtensionField extends ReflectField { + new(builder: ProtoBuilder, message: ReflectMessage, rule: string, type: string, + name: string, id: number, options: {[key: string]: any}): ReflectExtensionField; + extension: ReflectExtension; + } + + export interface ReflectOneOf extends ReflectT { + new(builder?: ProtoBuilder, message?: ReflectMessage, name?: string): ReflectOneOf; + fields: ReflectField[]; + } + + export interface ReflectValue extends ReflectT { + new(builder?: ProtoBuilder, enm?: ReflectEnum, name?: string, id?: number): ReflectValue; + className: string; + id: number; + } + + export interface ReflectMethod extends ReflectT { + new(builder?: ProtoBuilder, svc?: ReflectService, name?: string, + options?: {[key: string]: any}): ReflectMethod; + className: string; + options: {[key: string]: any}; + buildOpt(): {[key: string]: any}; + } + + export interface ReflectRPCMethod extends ReflectMethod { + new(builder?: ProtoBuilder, svc?: ReflectService, name?: string, request?: string, + response?: string, options?: {[key: string]: any}): ReflectRPCMethod; + requestName: string; + responseName: string; + resolvedRequestType: ReflectMessage; + resolvedResponseType: ReflectMessage; + } + +} + +declare module "protobufjs" { + export = ProtoBuf; +} \ No newline at end of file diff --git a/web.js b/web.js new file mode 100644 index 0000000..af9715a --- /dev/null +++ b/web.js @@ -0,0 +1,64 @@ +var PORT = 12345; + +var http = require('http'); +var url = require('url'); +var fs = require('fs'); +var path = require('path'); +const mime = { + "css": "text/css", + "gif": "image/gif", + "html": "text/html", + "ico": "image/x-icon", + "jpeg": "image/jpeg", + "jpg": "image/jpeg", + "js": "text/javascript", + "json": "application/json", + "pdf": "application/pdf", + "png": "image/png", + "svg": "image/svg+xml", + "swf": "application/x-shockwave-flash", + "tiff": "image/tiff", + "txt": "text/plain", + "wav": "audio/x-wav", + "wma": "audio/x-ms-wma", + "wmv": "video/x-ms-wmv", + "xml": "text/xml" +}; + +var server = http.createServer(function (request, response) { + var realPath = url.parse(request.url).pathname.trim(); + if (!realPath || realPath == "/") { + realPath = "/index.html"; + } + realPath = path.join(__dirname, "dist", realPath); + console.log(realPath); + var ext = path.extname(realPath); + ext = ext ? ext.slice(1) : 'unknown'; + fs.exists(realPath, function (exists) { + if (!exists) { + response.writeHead(404, { + 'Content-Type': 'text/plain' + }); + + response.write(`无法找到文件${realPath}`); + response.end(); + } else { + fs.readFile(realPath, "binary", function (err, file) { + if (err) { + response.writeHead(500, { + 'Content-Type': 'text/plain' + }); + response.end(err); + } else { + var contentType = mime[ext] || "text/plain"; + response.writeHead(200, { + 'Content-Type': contentType + }); + response.write(file, "binary"); + response.end(); + } + }); + } + }); +}); +server.listen(PORT); \ No newline at end of file diff --git a/调试用.bat b/调试用.bat new file mode 100644 index 0000000..87c5e54 --- /dev/null +++ b/调试用.bat @@ -0,0 +1,2 @@ +start /b node web.js +electron app \ No newline at end of file

e9F+>*SzBRJw2s}73_s053z``zm_P#a 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