examples to new tsrpc-cli

This commit is contained in:
King Wang
2021-10-07 15:30:02 +08:00
parent c21445548e
commit 69a90884d5
86 changed files with 652 additions and 1697 deletions

View File

@@ -4,27 +4,24 @@
"main": "index.js",
"private": true,
"scripts": {
"watch:proto": "onchange \"src/shared/protocols/**/Ptl*.ts\" -- npm run protoAndSync",
"protoAndSync": "npm run proto && npm run sync",
"proto": "tsrpc proto -i src/shared/protocols -o src/shared/protocols/serviceProto.ts",
"sync": "tsrpc sync --from src/shared --to ../frontend/src/shared",
"api": "tsrpc api -i src/shared/protocols/serviceProto.ts -o src/api",
"dev": "onchange \"src/**/*.ts\" -i -k -- ts-node \"src/index.ts\"",
"test": "mocha test/**/*.test.ts",
"build": "tsrpc build"
"proto": "tsrpc proto --config tsrpc.config.ts",
"sync": "tsrpc sync --config tsrpc.config.ts",
"api": "tsrpc api --config tsrpc.config.ts",
"dev": "tsrpc dev --config tsrpc.config.ts",
"build": "tsrpc build --config tsrpc.config.ts"
},
"devDependencies": {
"@types/mocha": "^8.2.2",
"@types/mongodb": "^3.6.18",
"@types/node": "^15.12.4",
"mocha": "^9.0.1",
"@types/mocha": "^8.2.3",
"@types/mongodb": "^3.6.20",
"@types/node": "^15.14.9",
"mocha": "^9.1.2",
"onchange": "^7.1.0",
"ts-node": "^10.0.0",
"tsrpc-cli": "^2.0.3",
"typescript": "^4.3.4"
"ts-node": "^10.2.1",
"tsrpc-cli": "^2.0.8",
"typescript": "^4.4.3"
},
"dependencies": {
"mongodb": "^3.6.9",
"tsrpc": "^3.0.2"
"mongodb": "^3.7.2",
"tsrpc": "^3.0.9"
}
}
}

View File

@@ -0,0 +1,36 @@
import { TsrpcConfig } from 'tsrpc-cli';
const tsrpcConf: TsrpcConfig = {
// Generate ServiceProto
proto: [
{
ptlDir: 'src/shared/protocols', // Protocol dir
output: 'src/shared/protocols/serviceProto.ts', // Path for generated ServiceProto
apiDir: 'src/api' // API dir
}
],
// Sync shared code
sync: [
{
from: 'src/shared',
to: '../frontend/src/shared',
type: 'symlink' // Change this to 'copy' if your environment not support symlink
}
],
// Dev server
dev: {
autoProto: true, // Auto regenerate proto
autoSync: true, // Auto sync when file changed
autoApi: true, // Auto create API when ServiceProto updated
watch: 'src', // Restart dev server when these files changed
entry: 'src/index.ts', // Dev server command: node -r ts-node/register {entry}
},
// Build config
build: {
autoProto: true, // Auto generate proto before build
autoSync: true, // Auto sync before build
autoApi: true, // Auto generate API before build
outDir: 'dist', // Clean this dir before build
}
}
export default tsrpcConf;

View File

@@ -9,14 +9,14 @@
"devDependencies": {
"copy-webpack-plugin": "^9.0.1",
"html-webpack-plugin": "^5.3.2",
"ts-loader": "^9.2.3",
"typescript": "^4.3.4",
"webpack": "^5.40.0",
"webpack-cli": "^4.7.2",
"ts-loader": "^9.2.6",
"typescript": "^4.4.3",
"webpack": "^5.57.1",
"webpack-cli": "^4.9.0",
"webpack-dev-server": "^3.11.2"
},
"dependencies": {
"tsrpc-browser": "^3.0.3"
"tsrpc-browser": "^3.0.7"
},
"browserslist": [
"defaults"

View File

@@ -0,0 +1 @@
../../backend/src/shared

View File

@@ -1,9 +0,0 @@
import { Post } from "./models/Post";
export interface ReqAddPost {
newPost: Omit<Post, '_id' | 'create' | 'update' | 'visitedNum'>;
}
export interface ResAddPost {
insertedId: string;
}

View File

@@ -1,7 +0,0 @@
export interface ReqDelPost {
_id: string;
}
export interface ResDelPost {
}

View File

@@ -1,9 +0,0 @@
import { Post } from "./models/Post";
export interface ReqGetPost {
_id: string;
}
export interface ResGetPost {
post: Post;
}

View File

@@ -1,9 +0,0 @@
import { Post } from "./models/Post";
export interface ReqUpdatePost {
update: { _id: string } & Partial<Pick<Post, 'title' | 'content'>>;
}
export interface ResUpdatePost {
matchedCount: number;
}

View File

@@ -1,17 +0,0 @@
export interface Post {
_id: string;
author: string;
title: string;
content: string;
visitedNum: number;
create: {
uid: string;
time: Date;
}
update?: {
uid: string,
time: Date
}
}

View File

@@ -1,276 +0,0 @@
import { ServiceProto } from 'tsrpc-proto';
import { ReqAddPost, ResAddPost } from './PtlAddPost';
import { ReqDelPost, ResDelPost } from './PtlDelPost';
import { ReqGetPost, ResGetPost } from './PtlGetPost';
import { ReqUpdatePost, ResUpdatePost } from './PtlUpdatePost';
export interface ServiceType {
api: {
"AddPost": {
req: ReqAddPost,
res: ResAddPost
},
"DelPost": {
req: ReqDelPost,
res: ResDelPost
},
"GetPost": {
req: ReqGetPost,
res: ResGetPost
},
"UpdatePost": {
req: ReqUpdatePost,
res: ResUpdatePost
}
},
msg: {
}
}
export const serviceProto: ServiceProto<ServiceType> = {
"version": 16,
"services": [
{
"id": 0,
"name": "AddPost",
"type": "api"
},
{
"id": 1,
"name": "DelPost",
"type": "api"
},
{
"id": 2,
"name": "GetPost",
"type": "api"
},
{
"id": 3,
"name": "UpdatePost",
"type": "api"
}
],
"types": {
"PtlAddPost/ReqAddPost": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "newPost",
"type": {
"target": {
"type": "Reference",
"target": "models/Post/Post"
},
"keys": [
"_id",
"create",
"update",
"visitedNum"
],
"type": "Omit"
}
}
]
},
"models/Post/Post": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "_id",
"type": {
"type": "String"
}
},
{
"id": 1,
"name": "author",
"type": {
"type": "String"
}
},
{
"id": 2,
"name": "title",
"type": {
"type": "String"
}
},
{
"id": 3,
"name": "content",
"type": {
"type": "String"
}
},
{
"id": 4,
"name": "visitedNum",
"type": {
"type": "Number"
}
},
{
"id": 5,
"name": "create",
"type": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "uid",
"type": {
"type": "String"
}
},
{
"id": 1,
"name": "time",
"type": {
"type": "Date"
}
}
]
}
},
{
"id": 6,
"name": "update",
"type": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "uid",
"type": {
"type": "String"
}
},
{
"id": 1,
"name": "time",
"type": {
"type": "Date"
}
}
]
},
"optional": true
}
]
},
"PtlAddPost/ResAddPost": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "insertedId",
"type": {
"type": "String"
}
}
]
},
"PtlDelPost/ReqDelPost": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "_id",
"type": {
"type": "String"
}
}
]
},
"PtlDelPost/ResDelPost": {
"type": "Interface"
},
"PtlGetPost/ReqGetPost": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "_id",
"type": {
"type": "String"
}
}
]
},
"PtlGetPost/ResGetPost": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "post",
"type": {
"type": "Reference",
"target": "models/Post/Post"
}
}
]
},
"PtlUpdatePost/ReqUpdatePost": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "update",
"type": {
"type": "Intersection",
"members": [
{
"id": 1,
"type": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "_id",
"type": {
"type": "String"
}
}
]
}
},
{
"id": 3,
"type": {
"type": "Partial",
"target": {
"target": {
"type": "Reference",
"target": "models/Post/Post"
},
"keys": [
"title",
"content"
],
"type": "Pick"
}
}
}
]
}
}
]
},
"PtlUpdatePost/ResUpdatePost": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "matchedCount",
"type": {
"type": "Number"
}
}
]
}
}
};