Skip to content

remove naming suffixes #125

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 15 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -182,12 +182,9 @@ If you have an existing Twirp server you're connecting to and only need a client
`src/server/haberdasher/index.ts`

```ts
import {
HaberdasherService,
createHaberdasherHandler,
} from "../../protos/haberdasher.pb";
import { Haberdasher, createHaberdasher } from "../../protos/haberdasher.pb";

const Haberdasher: HaberdasherService = {
const haberdasher: Haberdasher = {
MakeHat: (size) => {
return {
inches: size.inches,
Expand All @@ -197,7 +194,7 @@ const Haberdasher: HaberdasherService = {
},
};

export const HaberdasherHandler = createHaberdasherHandler(Haberdasher);
export const haberdasherHandler = createHaberdasher(haberdasher);
```

#### 5. Connect your service to your application server
Expand All @@ -207,11 +204,11 @@ export const HaberdasherHandler = createHaberdasherHandler(Haberdasher);
```ts
import { createServer } from "http";
import { createTwirpServer } from "twirpscript";
import { HaberdasherHandler } from "./haberdasher";
import { haberdasherHandler } from "./haberdasher";

const PORT = 8080;

const app = createTwirpServer([HaberdasherHandler]);
const app = createTwirpServer([haberdasherHandler]);

createServer(app).listen(PORT, () =>
console.log(`Server listening on port ${PORT}`)
Expand Down Expand Up @@ -309,12 +306,12 @@ Servers can be configured by passing a configuration object to `createTwirpServe
```ts
import { createServer } from "http";
import { createTwirpServer } from "twirpscript";
import { HaberdasherHandler } from "./haberdasher";
import { haberdasherHandler } from "./haberdasher";

const PORT = 8080;

// This removes the "/twirp" prefix in the RPC path
const app = createTwirpServer([HaberdasherHandler], { prefix: "" });
const app = createTwirpServer([haberdasherHandler], { prefix: "" });

createServer(app).listen(PORT, () =>
console.log(`Server listening on port ${PORT}`)
Expand Down Expand Up @@ -347,13 +344,10 @@ Custom fields can be added to the context object via [middleware](#middleware--i
If you setup middleware similiar to the [authentication middleware example](https://github.com/tatethurston/TwirpScript#example-3), you could read the `currentUser` `username` property in your service handler. See the [authentication example](https://github.com/tatethurston/twirpscript/tree/main/examples/authentication) for a full application.

```ts
import {
HaberdasherService,
createHaberdasherHandler,
} from "../../protos/haberdasher.pb";
import { Haberdasher, createHaberdasher } from "../../protos/haberdasher.pb";
import { Context } from "../some-path-to-your-definition";

const Haberdasher: HaberdasherService<Context> = {
const haberdasher: Haberdasher<Context> = {
MakeHat: (size, ctx) => {
return {
inches: size.inches,
Expand All @@ -363,7 +357,7 @@ const Haberdasher: HaberdasherService<Context> = {
},
};

export const HaberdasherHandler = createHaberdasherHandler(HaberdasherService);
export const haberdasherHandler = createHaberdasher(haberdasher);
```

### Middleware / Interceptors
Expand Down Expand Up @@ -425,18 +419,18 @@ The middleware handler will receive `req`, `context` and `next` parameters. `req
```ts
import { createServer } from "http";
import { createTwirpServer, TwirpError } from "twirpscript";
import { AuthenticationHandler } from "./authentication";
import { authenticationHandler } from "./authentication";

export interface Context {
currentUser: { username: string };
}

const services = [AuthenticationHandler]
const services = [authenticationHandler]
const app = createTwirpServer<Context, typeof services>(services);

app.use(async (req, ctx, next) => {
// exception so unauthenticated users can authenticate
if (ctx.service.name === AuthenticationHandler.name) {
if (ctx.service.name === authenticationHandler.name) {
return next();
}

Expand Down Expand Up @@ -537,11 +531,11 @@ response) have been written. Called with the current `context` and the response.
```ts
import { createServer } from "http";
import { createTwirpServer } from "twirpscript";
import { HaberdasherHandler } from "./haberdasher";
import { habderdasherHandler } from "./haberdasher";

const PORT = 8080;

const app = createTwirpServer([HaberdasherHandler]);
const app = createTwirpServer([habderdasherHandler]);

app.on("responseSent", (ctx) => {
// log or report
Expand Down
8 changes: 3 additions & 5 deletions clientcompat/src/clientcompat.pb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,17 +70,15 @@ export async function NoopMethodJSON(
}

//========================================//
// CompatService Service //
// CompatService //
//========================================//

export interface CompatServiceService<Context = unknown> {
export interface CompatService<Context = unknown> {
Method: (req: Req, context: Context) => Promise<Resp> | Resp;
NoopMethod: (empty: Empty, context: Context) => Promise<Empty> | Empty;
}

export function createCompatServiceHandler<Context>(
service: CompatServiceService<Context>
) {
export function createCompatService<Context>(service: CompatService<Context>) {
return {
name: "twirp.clientcompat.CompatService",
methods: {
Expand Down
2 changes: 1 addition & 1 deletion examples/authentication/src/client/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ const App: FC = () => {

return (
<div>
<h1>Haberdasher Service</h1>
<h1>Haberdasher </h1>
<h3>Current User: </h3>
{user ? (
<div>
Expand Down
8 changes: 4 additions & 4 deletions examples/authentication/src/protos/authentication.pb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ export async function LoginJSON(
}

//========================================//
// Authentication Service //
// Authentication //
//========================================//

export interface AuthenticationService<Context = unknown> {
export interface Authentication<Context = unknown> {
/**
* Login in a user
*/
Expand All @@ -65,8 +65,8 @@ export interface AuthenticationService<Context = unknown> {
) => Promise<CurrentUser> | CurrentUser;
}

export function createAuthenticationHandler<Context>(
service: AuthenticationService<Context>
export function createAuthentication<Context>(
service: Authentication<Context>
) {
return {
name: "Authentication",
Expand Down
8 changes: 3 additions & 5 deletions examples/authentication/src/protos/haberdasher.pb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,22 +48,20 @@ export async function MakeHatJSON(
}

//========================================//
// Haberdasher Service //
// Haberdasher //
//========================================//

/**
* Haberdasher service makes hats for clients.
*/
export interface HaberdasherService<Context = unknown> {
export interface Haberdasher<Context = unknown> {
/**
* MakeHat produces a hat of mysterious, randomly-selected color!
*/
MakeHat: (size: Size, context: Context) => Promise<Hat> | Hat;
}

export function createHaberdasherHandler<Context>(
service: HaberdasherService<Context>
) {
export function createHaberdasher<Context>(service: Haberdasher<Context>) {
return {
name: "Haberdasher",
methods: {
Expand Down
6 changes: 3 additions & 3 deletions examples/authentication/src/server/index.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { createServer } from "http";
import { createTwirpServer } from "twirpscript";
import { AuthenticationHandler, HaberdasherHandler } from "./services";
import { authenticationHandler, habderdasherHandler } from "./services";
import { Context } from "./context";
import { cors, requireAuthentication } from "./middleware";

const PORT = 8080;
const services = [AuthenticationHandler, HaberdasherHandler];
const services = [authenticationHandler, habderdasherHandler];

const app = createTwirpServer<Context, typeof services>(services)
.use(cors)
.use(requireAuthentication({ exceptions: [AuthenticationHandler.name] }));
.use(requireAuthentication({ exceptions: [authenticationHandler.name] }));

createServer(app).listen(PORT, () =>
console.log(`Server listening on port ${PORT}`)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IncomingMessage } from "http";
import { Middleware, TwirpErrorResponse } from "twirpscript";
import { Context } from "../context";
import { getCurrentUser, UnauthenticatedUser } from "../services";
import { getCurrentUser, unauthenticatedUser } from "../services";

interface RequireAuthenticationOpts {
exceptions: string[];
Expand All @@ -13,7 +13,7 @@ export function requireAuthentication({
return async (req, ctx, next) => {
for (let exception of exceptions) {
if (ctx.service?.name === exception) {
ctx.currentUser = UnauthenticatedUser;
ctx.currentUser = unauthenticatedUser;
return next();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {
AuthenticationService,
createAuthenticationHandler,
Authentication,
createAuthentication,
CurrentUser,
Credentials,
} from "../../../protos/authentication.pb";
Expand All @@ -27,7 +27,7 @@ function login(credentials: Credentials): CurrentUser | undefined {
/**
* Sentinal value for unauthenticated routes.
*/
export const UnauthenticatedUser: CurrentUser = {
export const unauthenticatedUser: CurrentUser = {
username: "",
token: "",
};
Expand All @@ -41,7 +41,7 @@ export function getCurrentUser(
return sessions.find((s) => s.token === token);
}

export const Authentication: AuthenticationService = {
export const authentication: Authentication = {
Login: (credentials) => {
const user = login(credentials);
if (!user) {
Expand All @@ -54,5 +54,4 @@ export const Authentication: AuthenticationService = {
},
};

export const AuthenticationHandler =
createAuthenticationHandler(Authentication);
export const authenticationHandler = createAuthentication(authentication);
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import { Context } from "../../context";
import {
HaberdasherService,
createHaberdasherHandler,
} from "../../../protos/haberdasher.pb";
import { Haberdasher, createHaberdasher } from "../../../protos/haberdasher.pb";

function choose<T>(list: T[]): T {
return list[Math.floor(Math.random() * list.length)];
}

export const Haberdasher: HaberdasherService<Context> = {
export const haberdasher: Haberdasher<Context> = {
MakeHat: (size, ctx) => {
const username = ctx.currentUser.username;
const hat = choose(["beanie", "fedora", "top hat", "cowboy", "beret"]);
Expand All @@ -22,4 +19,4 @@ export const Haberdasher: HaberdasherService<Context> = {
},
};

export const HaberdasherHandler = createHaberdasherHandler(Haberdasher);
export const habderdasherHandler = createHaberdasher(haberdasher);
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { describe, it, expect } from "@jest/globals";
import { Haberdasher } from ".";
import { haberdasher } from ".";

describe("Haberdasher", () => {
describe("Haberdasher.MakeHat", () => {
it("makes hats", () => {
const size = { inches: 12 };
const ctx = { currentUser: { username: "tate" } };

expect(Haberdasher.MakeHat(size, ctx)).toEqual(
expect(haberdasher.MakeHat(size, ctx)).toEqual(
expect.objectContaining({
inches: size.inches,
name: expect.stringMatching("tate"),
Expand Down
6 changes: 3 additions & 3 deletions examples/authentication/src/server/services/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export {
AuthenticationHandler,
authenticationHandler,
getCurrentUser,
UnauthenticatedUser,
unauthenticatedUser,
} from "./authentication";
export { HaberdasherHandler } from "./haberdasher";
export { habderdasherHandler } from "./haberdasher";
6 changes: 3 additions & 3 deletions examples/aws-lambda/src/habderdasher.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { HaberdasherService, createHaberdasherHandler } from "./haberdasher.pb";
import { Haberdasher, createHaberdasher } from "./haberdasher.pb";

function choose<T>(list: T[]): T {
return list[Math.floor(Math.random() * list.length)];
}

export const Haberdasher: HaberdasherService = {
export const haberdasher: Haberdasher = {
MakeHat: (size) => {
return {
inches: size.inches,
Expand All @@ -14,4 +14,4 @@ export const Haberdasher: HaberdasherService = {
},
};

export const HaberdasherHandler = createHaberdasherHandler(Haberdasher);
export const habderdasherHandler = createHaberdasher(haberdasher);
8 changes: 3 additions & 5 deletions examples/aws-lambda/src/haberdasher.pb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,22 +48,20 @@ export async function MakeHatJSON(
}

//========================================//
// Haberdasher Service //
// Haberdasher //
//========================================//

/**
* Haberdasher service makes hats for clients.
*/
export interface HaberdasherService<Context = unknown> {
export interface Haberdasher<Context = unknown> {
/**
* MakeHat produces a hat of mysterious, randomly-selected color!
*/
MakeHat: (size: Size, context: Context) => Promise<Hat> | Hat;
}

export function createHaberdasherHandler<Context>(
service: HaberdasherService<Context>
) {
export function createHaberdasher<Context>(service: Haberdasher<Context>) {
return {
name: "Haberdasher",
methods: {
Expand Down
4 changes: 2 additions & 2 deletions examples/aws-lambda/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { createTwirpServerless } from "twirpscript";
import { HaberdasherHandler } from "./habderdasher";
import { habderdasherHandler } from "./habderdasher";
import {
Handler,
APIGatewayProxyEvent,
APIGatewayProxyResult,
} from "aws-lambda";

const app = createTwirpServerless([HaberdasherHandler]);
const app = createTwirpServerless([habderdasherHandler]);

const handler: Handler<APIGatewayProxyEvent, APIGatewayProxyResult> = async (
event
Expand Down
2 changes: 1 addition & 1 deletion examples/javascript-fullstack/src/client/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const App = () => {

return (
<div>
<h1>Haberdasher Service</h1>
<h1>Haberdasher </h1>
<h3>Hats: </h3>
<ul>
{hats.map((hat) => (
Expand Down
2 changes: 1 addition & 1 deletion examples/javascript-fullstack/src/protos/haberdasher.pb.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export async function MakeHatJSON(size, config) {
return response;
}

export function createHaberdasherHandler(service) {
export function createHaberdasher(service) {
return {
name: "Haberdasher",
methods: {
Expand Down
Loading