Skip to content

Commit

Permalink
Update node-ts example with an empty response type (webrpc#131)
Browse files Browse the repository at this point in the history
This proves webrpc#74 is not caused by TypeScript generator
  • Loading branch information
VojtechVitek authored Nov 14, 2022
1 parent 3f15b9f commit 22c3a14
Show file tree
Hide file tree
Showing 8 changed files with 91 additions and 67 deletions.
3 changes: 0 additions & 3 deletions _examples/hello-webrpc-ts/webapp/src/client.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@ export class ExampleService implements ExampleService {
).then((res) => {
return buildResponse(res).then(_data => {
return {

status: <boolean>(_data.status)
}
})
Expand All @@ -102,7 +101,6 @@ export class ExampleService implements ExampleService {
createHTTPRequest(args, headers)).then((res) => {
return buildResponse(res).then(_data => {
return {

user: <User>(_data.user)
}
})
Expand All @@ -115,7 +113,6 @@ export class ExampleService implements ExampleService {
createHTTPRequest(args, headers)).then((res) => {
return buildResponse(res).then(_data => {
return {

page: <Page>(_data.page),
users: <Array<User>>(_data.users)
}
Expand Down
7 changes: 7 additions & 0 deletions _examples/node-ts/.prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"trailingComma": "es5",
"tabWidth": 2,
"semi": false,
"singleQuote": true,
"useTabs": true
}
50 changes: 24 additions & 26 deletions _examples/node-ts/server/index.ts
Original file line number Diff line number Diff line change
@@ -1,42 +1,40 @@
import express from 'express'
import { createExampleServiceApp } from './server.gen'
import * as proto from './server.gen'
import { createExampleServiceApp } from './server.gen'

const app = express()

app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*')
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
res.setHeader('Access-Control-Allow-Headers', 'Content-Type')
res.setHeader('Access-Control-Allow-Origin', '*')
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
res.setHeader('Access-Control-Allow-Headers', 'Content-Type')

if (req.method === 'OPTIONS') {
res.status(200).end()
return
}
if (req.method === 'OPTIONS') {
res.status(200).end()
return
}

next()
});
next()
})

const exampleServiceApp = createExampleServiceApp({
Ping: () => {
return {
status: false
}
},

GetUser: () => ({
code: 1,
user: {
id: 1,
USERNAME: 'webrpcfan',
role: proto.Kind.ADMIN,
meta: {}
}
})
Ping: () => {
return {}
},

GetUser: () => ({
code: 1,
user: {
id: 1,
USERNAME: 'webrpcfan',
role: proto.Kind.ADMIN,
meta: {},
},
}),
})

app.use(exampleServiceApp)

app.listen(3000, () => {
console.log('> Listening on port 3000');
console.log('> Listening on port 3000')
})
11 changes: 3 additions & 8 deletions _examples/node-ts/server/server.gen.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* eslint-disable */
// node-ts v1.0.0 ecee5cfb3e360bc0bc632e78556b19a2c58d4e25
// node-ts v1.0.0 ad568d12a684eb48ae2b38f98a2933cd65f7a4fc
// --
// Code generated by webrpc-gen@v0.7.0 with typescript generator. DO NOT EDIT.
//
Expand All @@ -12,7 +12,7 @@ export const WebRPCVersion = "v1"
export const WebRPCSchemaVersion = "v1.0.0"

// Schema hash generated from your RIDL schema
export const WebRPCSchemaHash = "ecee5cfb3e360bc0bc632e78556b19a2c58d4e25"
export const WebRPCSchemaHash = "ad568d12a684eb48ae2b38f98a2933cd65f7a4fc"

//
// Types
Expand Down Expand Up @@ -43,8 +43,7 @@ export interface ExampleService {
export interface PingArgs {
}

export interface PingReturn {
status: boolean
export interface PingReturn {
}
export interface GetUserArgs {
userID: number
Expand Down Expand Up @@ -108,10 +107,6 @@ import express from 'express'
const response = await serviceImplementation["Ping"](req.body);


if (!("status" in response)) {
throw new WebRPCError("internal", 500);
}


res.status(200).json(response);
} catch (err) {
Expand Down
2 changes: 1 addition & 1 deletion _examples/node-ts/service.ridl
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,5 @@ message Page


service ExampleService
- Ping() => (status: bool)
- Ping() => ()
- GetUser(userID: uint64) => (code: uint32, user: User)
10 changes: 3 additions & 7 deletions _examples/node-ts/webapp/client.gen.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* eslint-disable */
// node-ts v1.0.0 ecee5cfb3e360bc0bc632e78556b19a2c58d4e25
// node-ts v1.0.0 ad568d12a684eb48ae2b38f98a2933cd65f7a4fc
// --
// Code generated by webrpc-gen@v0.7.0 with typescript generator. DO NOT EDIT.
//
Expand All @@ -12,7 +12,7 @@ export const WebRPCVersion = "v1"
export const WebRPCSchemaVersion = "v1.0.0"

// Schema hash generated from your RIDL schema
export const WebRPCSchemaHash = "ecee5cfb3e360bc0bc632e78556b19a2c58d4e25"
export const WebRPCSchemaHash = "ad568d12a684eb48ae2b38f98a2933cd65f7a4fc"

//
// Types
Expand Down Expand Up @@ -43,8 +43,7 @@ export interface ExampleService {
export interface PingArgs {
}

export interface PingReturn {
status: boolean
export interface PingReturn {
}
export interface GetUserArgs {
userID: number
Expand Down Expand Up @@ -81,8 +80,6 @@ export class ExampleService implements ExampleService {
).then((res) => {
return buildResponse(res).then(_data => {
return {

status: <boolean>(_data.status)
}
})
})
Expand All @@ -94,7 +91,6 @@ export class ExampleService implements ExampleService {
createHTTPRequest(args, headers)).then((res) => {
return buildResponse(res).then(_data => {
return {

code: <number>(_data.code),
user: <User>(_data.user)
}
Expand Down
15 changes: 9 additions & 6 deletions _examples/node-ts/webapp/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,22 @@
display: none;
}

.user.loaded {
display: block;
div {
padding-bottom: 10px;
}
</style>
</head>

<body>
<div class="js-user user">
<h1>Username:</h1>
<p class="js-username"></p>
<div>
<button id="js-ping-btn">Ping</button>
<span id="js-ping-text"></span>
</div>

<button class="js-load-user-btn">Get user</button>
<div>
<button id="js-get-user-btn">Get user</button>
<span id="js-username-text"></span>
</div>

<script src="./index.ts"></script>
</body>
Expand Down
60 changes: 44 additions & 16 deletions _examples/node-ts/webapp/index.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,54 @@
import { ExampleService } from './client.gen'

const exampleService = new ExampleService(
'http://localhost:3000',
(input, init) => fetch(input, init)
'http://localhost:3000',
(input, init) => fetch(input, init)
)

document.addEventListener('DOMContentLoaded', () => {
const userContainer = document.getElementsByClassName('js-user')[0]
const loadUserButton = document.getElementsByClassName('js-load-user-btn')[0]
const userNameText = document.getElementsByClassName('js-username')[0]
const pingButton = document.getElementById('js-ping-btn')
const pingText = document.getElementById('js-ping-text')

loadUserButton.addEventListener('click', () => {
exampleService
.getUser({
userID: 1
})
.then(({ user }) => {
console.log('getUser() responded with:', {user})
if (!pingButton || !pingText) {
console.log('error getting ping HTML elements')
return
}

userContainer.classList.add('loaded')
pingButton.addEventListener('click', () => {
exampleService
.ping({})
.then(({}) => {
console.log('ping() responded:', {})
pingText.textContent = 'PONG'
})
.catch((e) => {
console.log('ping() failed:', e)
pingText.textContent = 'ping() failed: ' + e.message
})
})
})

document.addEventListener('DOMContentLoaded', () => {
const getUserButton = document.getElementById('js-get-user-btn')
const usernameText = document.getElementById('js-username-text')

if (!getUserButton || !usernameText) {
console.log('error getting username HTML elements')
return
}

userNameText.textContent = user.USERNAME
})
})
getUserButton.addEventListener('click', () => {
exampleService
.getUser({
userID: 1,
})
.then(({ user }) => {
console.log('getUser() responded with:', { user })
usernameText.textContent = user.USERNAME
})
.catch((e) => {
console.log('getUser() failed:', e)
usernameText.textContent = 'getUser() failed: ' + e.message
})
})
})

0 comments on commit 22c3a14

Please sign in to comment.