1Thrift Javascript Library
2=========================
3This browser based Apache Thrift implementation supports
4RPC clients using the JSON protocol over Http[s] with XHR
5and WebSocket.
6
7License
8-------
9Licensed to the Apache Software Foundation (ASF) under one
10or more contributor license agreements. See the NOTICE file
11distributed with this work for additional information
12regarding copyright ownership. The ASF licenses this file
13to you under the Apache License, Version 2.0 (the
14"License"); you may not use this file except in compliance
15with the License. You may obtain a copy of the License at
16
17  http://www.apache.org/licenses/LICENSE-2.0
18
19Unless required by applicable law or agreed to in writing,
20software distributed under the License is distributed on an
21"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
22KIND, either express or implied. See the License for the
23specific language governing permissions and limitations
24under the License.
25
26Grunt Build
27------------
28This is the base directory for the Apache Thrift JavaScript
29library. This directory contains a Gruntfile.js and a
30package.json. Many of the build and test tools used here
31require a recent version of Node.js to be installed. To
32install the support files for the Grunt build tool execute
33the command:
34
35    npm install
36
37This reads the package.json and pulls in the appropriate
38sources from the internet. To build the JavaScript branch
39of Apache Thrift execute the command:
40
41    npx grunt
42
43This runs the grunt build tool (from within `./node_modules/.bin/`),
44linting all of the source files, setting up and running the
45tests, concatenating and minifying the main libraries and
46generating the html documentation.
47
48Tree
49----
50The following directories are present (some only after the
51grunt build):
52  /src  - The JavaScript Apache Thrift source
53  /doc  - HTML documentation
54  /dist - Distribution files (thrift.js and thrift.min.js)
55  /test - Various tests, this is a good place to look for
56          example code
57  /node_modules - Build support files installed by npm
58
59
60Example JavaScript Client and Server
61------------------------------------
62The listing below demonstrates a simple browser based JavaScript
63Thrift client and Node.js JavaScript server for the hello_svc
64service.
65
66### hello.thrift - Service IDL
67### build with: $ thrift -gen js -gen js:node hello.thrift
68    service hello_svc {
69      string get_message(1: string name)
70    }
71
72### hello.html - Browser Client
73    <!DOCTYPE html>
74    <html lang="en">
75      <head>
76        <meta charset="utf-8">
77        <title>Hello Thrift</title>
78      </head>
79      <body>
80        Name: <input type="text" id="name_in">
81        <input type="button" id="get_msg" value="Get Message" >
82        <div id="output"></div>
83
84        <script src="thrift.js"></script>
85        <script src="gen-js/hello_svc.js"></script>
86        <script>
87          (function() {
88            var transport = new Thrift.TXHRTransport("/hello");
89            var protocol  = new Thrift.TJSONProtocol(transport);
90            var client    = new hello_svcClient(protocol);
91            var nameElement = document.getElementById("name_in");
92            var outputElement = document.getElementById("output");
93            document.getElementById("get_msg")
94              .addEventListener("click", function(){
95                client.get_message(nameElement.value, function(result) {
96                  outputElement.innerHTML = result;
97                });
98              });
99          })();
100        </script>
101      </body>
102    </html>
103
104### hello.js - Node Server
105    var thrift = require('thrift');
106    var hello_svc = require('./gen-nodejs/hello_svc.js');
107
108    var hello_handler = {
109      get_message: function(name, result) {
110        var msg = "Hello " + name + "!";
111        result(null, msg);
112      }
113    }
114
115    var hello_svc_opt = {
116      transport: thrift.TBufferedTransport,
117      protocol: thrift.TJSONProtocol,
118      processor: hello_svc,
119      handler: hello_handler
120    };
121
122    var server_opt = {
123      staticFilePath: ".",
124      services: {
125        "/hello": hello_svc_opt
126      }
127    }
128
129    var server = Thrift.createWebServer(server_opt);
130    var port = 9099;
131    server.listen(port);
132    console.log("Http/Thrift Server running on port: " + port);
133
134
135TypeScript
136------------------------------------
137TypeScript definition files can also be generated by running:
138
139    thrift --gen js:ts file.thrift
140
141# Breaking Changes
142
143## 0.13.0
144
1451. 64-bit integer constants are now generatd using node-int64 e.g.: var x = new Int64("7fffffffffffffff");
146