Skip to content
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

Websocket protocol #132

Merged
merged 68 commits into from
Sep 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
c4e5997
update
kungfuboy Sep 1, 2022
d4f3bb2
Merge branch 'feat/websocket' into feat/multi-proto
kungfuboy Sep 1, 2022
9f70482
merge code
buqiyuan Sep 1, 2022
cf4d9b4
feat: move many files
kungfuboy Sep 1, 2022
f7a1bd4
feat: move detail/
kungfuboy Sep 1, 2022
727bc32
feat: move detail
kungfuboy Sep 1, 2022
7df4730
grpc stop
buqiyuan Sep 1, 2022
a2339f3
feat: graph-ql
scarqin Sep 1, 2022
4091c19
feat: hidden grpc
kungfuboy Sep 1, 2022
b398c06
Merge branch 'feat/multi-proto' of github.com:eolinker/eoapi into fea…
kungfuboy Sep 1, 2022
1296ebc
feat: base layout
kungfuboy Sep 1, 2022
d531969
feat: editor
buqiyuan Sep 1, 2022
f9ed63f
feat: update ui
kungfuboy Sep 1, 2022
238c783
feat: drag
buqiyuan Sep 1, 2022
954fa87
fix: update css
buqiyuan Sep 1, 2022
7dea189
feat: commit for now
kungfuboy Sep 2, 2022
e2c94b5
fix: bug
scarqin Sep 2, 2022
2336e8d
stash
scarqin Sep 2, 2022
2f9136b
fix: ui error
kungfuboy Sep 5, 2022
8e0f089
feat: save to history
kungfuboy Sep 5, 2022
83b3eab
fix: tab bug and optimize testServer init
scarqin Sep 6, 2022
0db5eb9
feat: set reqHeader、query
kungfuboy Sep 6, 2022
19abd97
Merge branch 'feat/multi-proto' of github.com:eolinker/eoapi into fea…
kungfuboy Sep 6, 2022
be111a0
fix: jump error router cause error
scarqin Sep 6, 2022
02469b2
Merge branch 'feat/multi-proto' of github.com:eolinker/eoapi into fea…
scarqin Sep 6, 2022
6c71f4f
feat: update ui
kungfuboy Sep 6, 2022
baede1e
Merge branch 'feat/multi-proto' of github.com:eolinker/eoapi into fea…
kungfuboy Sep 6, 2022
931ab19
feat: save send data
kungfuboy Sep 6, 2022
17b5425
feat: merge sidebar websocket to http
scarqin Sep 6, 2022
c6d8ada
style: REST to API
scarqin Sep 6, 2022
4f09c1b
optimize: api test event
scarqin Sep 6, 2022
5f4c74c
fix: test in diff tab status error
scarqin Sep 6, 2022
5e8e642
style: message & headers
kungfuboy Sep 6, 2022
aa73d6c
feat: disable list-block & url input
kungfuboy Sep 7, 2022
913caa6
fix:client get many time same message
kungfuboy Sep 7, 2022
1a28f67
feat: ApiTabOperateService.newDefaultTab support params
kungfuboy Sep 7, 2022
23812e7
feat: ws uri
scarqin Sep 7, 2022
4c99692
feat: replace
scarqin Sep 7, 2022
a8fc896
feat: render ws test history
kungfuboy Sep 7, 2022
5e4676b
Merge branch 'feat/multi-proto' of github.com:eolinker/eoapi into fea…
kungfuboy Sep 7, 2022
ce9c096
fix: preview -> edit
kungfuboy Sep 7, 2022
0aec01e
fix: newDefaultTab params is null
kungfuboy Sep 7, 2022
c0db345
feat: add a couple { }
kungfuboy Sep 7, 2022
6c921ec
feat: add Tab Text
kungfuboy Sep 7, 2022
25da828
feat: delete useless code
kungfuboy Sep 7, 2022
0ffde48
fix: menu template repeat name
kungfuboy Sep 7, 2022
ff47d7f
fix: style bug
kungfuboy Sep 7, 2022
1da9d76
feat: add tips when connecting
kungfuboy Sep 7, 2022
0782e5c
feat: ui better
kungfuboy Sep 8, 2022
18d77e6
style: icon height & width
kungfuboy Sep 8, 2022
0b95966
feat: add isFixed config in tab of ws
kungfuboy Sep 8, 2022
ffe50b9
fix: scroll style
buqiyuan Sep 8, 2022
51a18a1
feat: catch connect error
kungfuboy Sep 8, 2022
7aab8d9
Merge branch 'feat/multi-proto' of github.com:eolinker/eoapi into fea…
kungfuboy Sep 8, 2022
60d63f9
fix: tab error
scarqin Sep 8, 2022
7d924d8
Merge branch 'feat/multi-proto' of github.com:eolinker/eoapi into fea…
scarqin Sep 8, 2022
1c407aa
fix: split-panel cannot auto height
buqiyuan Sep 8, 2022
45df157
fix: css style
buqiyuan Sep 8, 2022
de558cc
feat: set env
kungfuboy Sep 8, 2022
b05728f
Merge branch 'feat/multi-proto' of github.com:eolinker/eoapi into fea…
kungfuboy Sep 8, 2022
5b76809
feat: add websocket html
kungfuboy Sep 8, 2022
445796d
stash
scarqin Sep 8, 2022
ee9006b
fix: tab error
scarqin Sep 8, 2022
ffa4da0
chore: SOCKETIO_URL dev config
scarqin Sep 8, 2022
50232d8
feat: connecting button to disabled
kungfuboy Sep 8, 2022
5a89de6
fix: repeat listen message in client
kungfuboy Sep 8, 2022
2d34805
feat: save disconnect message
kungfuboy Sep 8, 2022
59b29fa
merge main
scarqin Sep 9, 2022
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
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,14 @@
"@bqy/node-module-alias": "^1.0.1",
"@electron/remote": "2.0.8",
"axios": "0.27.2",
"content-disposition": "^0.5.4",
"cors": "2.8.5",
"crypto-js": "^4.1.1",
"electron-log": "^4.4.8",
"electron-store": "8.0.2",
"electron-updater": "^5.0.5",
"express": "4.18.1",
"fix-path": "3.0.0",
"content-disposition": "^0.5.4",
"form-data": "^4.0.0",
"iconv-lite": "^0.6.3",
"jquery": "^3.3.0",
Expand All @@ -51,6 +52,8 @@
"portfinder": "1.0.28",
"resolve": "^1.22.1",
"rxjs": "7.5.5",
"socket.io": "4.5.1",
"ws": "8.8.1",
"xml2js": "^0.4.23"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion src/enviroment.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export const ELETRON_APP_CONFIG = {
EXTENSION_URL: 'http://106.12.149.147',
MOCK_URL: 'https://mockapi.eolink.com/ztBFKai20ee60c12871881565b5a6ddd718337df0e30979',
NODE_SERVER_PORT:4201
NODE_SERVER_PORT: 4201,
};
2 changes: 2 additions & 0 deletions src/platform/node/mock-server/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import express from 'express';

import type { Response } from 'express';
import portfinder from 'portfinder';
// import { createProxyMiddleware } from 'http-proxy-middleware';
Expand All @@ -25,6 +26,7 @@ const jsonStringify = (obj) => {
cache = null; // Empty variables for easy recycling by garbage collection mechanisms
return str;
};

export class MockServer {
private app: ReturnType<typeof express>;
private server: Server;
Expand Down
157 changes: 156 additions & 1 deletion src/workbench/browser/angular.json
Original file line number Diff line number Diff line change
@@ -1 +1,156 @@
{"$schema":"./node_modules/@angular/cli/lib/config/schema.json","cli":{"analytics":false,"defaultCollection":"@angular-eslint/schematics"},"version":1,"newProjectRoot":"projects","projects":{"eoapi":{"root":"","i18n":{"sourceLocale":{"code":"en","baseHref":""},"locales":{"zh":{"translation":"src/locale/messages.zh.xlf","baseHref":""}}},"sourceRoot":"src","projectType":"application","schematics":{"@schematics/angular:application":{"strict":true}},"architect":{"build":{"builder":"@angular-builders/custom-webpack:browser","options":{"localize":true,"aot":true,"outputPath":"dist","index":"src/index.html","main":"src/main.ts","tsConfig":"src/tsconfig.app.json","polyfills":"src/polyfills.ts","assets":["src/icon.ico","src/assets",{"glob":"**/*","input":"../../../node_modules/monaco-editor/min/vs","output":"/assets/vs/"}],"styles":[{"input":"src/assets/theme/classic_forest.scss","bundleName":"classic_forest","inject":false},"src/styles.scss","src/assets/theme/antd.less","src/assets/font/iconfont.css","src/ng1/index.css"],"scripts":["src/ng1/lib/angular/angular.js","src/ng1/app.module.js","src/ng1/component/select-default.js","src/ng1/component/sort-and-filter.js","src/ng1/component/auto-complete.js","src/ng1/component/list-block.js","src/ng1/directive/get-dom-length.directive.js","src/ng1/directive/drop-down-menu.directive.js","src/ng1/directive/sort.directive.js","src/ng1/directive/drop-change-space.directive.js","src/ng1/directive/inner-html.directive.js","src/ng1/directive/insert-html.directive.js","src/ng1/directive/copy-common.directive.js"],"customWebpackConfig":{"path":"./angular.webpack.js","replaceDuplicatePlugins":true},"allowedCommonJsDependencies":["brace","qs","rxjs"]},"configurations":{"dev":{"optimization":false,"outputHashing":"none","sourceMap":true,"namedChunks":false,"extractLicenses":true,"vendorChunk":false,"buildOptimizer":false,"fileReplacements":[{"replace":"src/environments/environment.ts","with":"src/environments/environment.dev.ts"}]},"web":{"optimization":false,"outputHashing":"none","sourceMap":true,"namedChunks":false,"localize":false,"extractLicenses":true,"vendorChunk":false,"buildOptimizer":false,"fileReplacements":[{"replace":"src/environments/environment.ts","with":"src/environments/environment.web.ts"}]},"webCn":{"optimization":false,"outputHashing":"none","sourceMap":true,"namedChunks":false,"localize":["zh"],"extractLicenses":true,"vendorChunk":false,"buildOptimizer":false,"fileReplacements":[{"replace":"src/environments/environment.ts","with":"src/environments/environment.web.ts"}]},"production":{"optimization":true,"outputHashing":"all","sourceMap":false,"namedChunks":false,"extractLicenses":true,"vendorChunk":false,"buildOptimizer":true,"fileReplacements":[{"replace":"src/environments/environment.ts","with":"src/environments/environment.prod.ts"}]}}},"serve":{"builder":"@angular-builders/custom-webpack:dev-server","options":{"browserTarget":"eoapi:build"},"configurations":{"dev":{"browserTarget":"eoapi:build:dev"},"web":{"browserTarget":"eoapi:build:web"},"webCn":{"browserTarget":"eoapi:build:webCn"},"production":{"browserTarget":"eoapi:build:production"}}},"extract-i18n":{"builder":"@angular-devkit/build-angular:extract-i18n","options":{"browserTarget":"eoapi:build"}},"test":{"builder":"@angular-builders/custom-webpack:karma","options":{"main":"src/test.ts","polyfills":"src/polyfills-test.ts","tsConfig":"src/tsconfig.spec.json","karmaConfig":"src/karma.conf.js","scripts":[],"styles":["src/styles.scss"],"assets":["src/assets"],"customWebpackConfig":{"path":"./angular.webpack.js","replaceDuplicatePlugins":true}}},"lint":{"builder":"@angular-eslint/builder:lint","options":{"lintFilePatterns":["src/**/*.ts","src/**/*.html"]}}}},"eoapi-e2e":{"root":"e2e","projectType":"application","architect":{"lint":{"builder":"@angular-eslint/builder:lint","options":{"lintFilePatterns":["e2e/**/*.ts"]}}}}},"defaultProject":"eoapi","schematics":{"@schematics/angular:component":{"prefix":"eo","style":"scss"},"@schematics/angular:directive":{"prefix":"eo"}}}
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"cli": { "analytics": false, "defaultCollection": "@angular-eslint/schematics" },
"version": 1,
"newProjectRoot": "projects",
"projects": {
"eoapi": {
"root": "",
"i18n": {
"sourceLocale": { "code": "en", "baseHref": "" },
"locales": { "zh": { "translation": "src/locale/messages.zh.xlf", "baseHref": "" } }
},
"sourceRoot": "src",
"projectType": "application",
"schematics": { "@schematics/angular:application": { "strict": true } },
"architect": {
"build": {
"builder": "@angular-builders/custom-webpack:browser",
"options": {
"localize": true,
"aot": true,
"outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
"tsConfig": "src/tsconfig.app.json",
"polyfills": "src/polyfills.ts",
"assets": [
"src/icon.ico",
"src/assets",
{ "glob": "**/*", "input": "../../../node_modules/monaco-editor/min/vs", "output": "/assets/vs/" }
],
"styles": [
{ "input": "src/assets/theme/classic_forest.scss", "bundleName": "classic_forest", "inject": false },
"src/styles.scss",
"src/assets/theme/antd.less",
"src/assets/font/iconfont.css",
"src/ng1/index.css"
],
"scripts": [
"src/ng1/lib/angular/angular.js",
"src/ng1/app.module.js",
"src/ng1/component/select-default.js",
"src/ng1/component/sort-and-filter.js",
"src/ng1/component/auto-complete.js",
"src/ng1/component/list-block.js",
"src/ng1/directive/get-dom-length.directive.js",
"src/ng1/directive/drop-down-menu.directive.js",
"src/ng1/directive/sort.directive.js",
"src/ng1/directive/drop-change-space.directive.js",
"src/ng1/directive/inner-html.directive.js",
"src/ng1/directive/insert-html.directive.js",
"src/ng1/directive/copy-common.directive.js"
],
"customWebpackConfig": { "path": "./angular.webpack.js", "replaceDuplicatePlugins": true },
"allowedCommonJsDependencies": ["brace", "qs", "rxjs"]
},
"configurations": {
"dev": {
"optimization": false,
"outputHashing": "none",
"sourceMap": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": false,
"fileReplacements": [
{ "replace": "src/environments/environment.ts", "with": "src/environments/environment.dev.ts" }
]
},
"web": {
"optimization": false,
"outputHashing": "none",
"sourceMap": true,
"namedChunks": false,
"localize": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": false,
"fileReplacements": [
{ "replace": "src/environments/environment.ts", "with": "src/environments/environment.web.ts" }
]
},
"webCn": {
"optimization": false,
"outputHashing": "none",
"sourceMap": true,
"namedChunks": false,
"localize": ["zh"],
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": false,
"fileReplacements": [
{ "replace": "src/environments/environment.ts", "with": "src/environments/environment.web.ts" }
]
},
"production": {
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{ "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" }
]
}
}
},
"serve": {
"builder": "@angular-builders/custom-webpack:dev-server",
"options": { "browserTarget": "eoapi:build" },
"configurations": {
"dev": { "browserTarget": "eoapi:build:dev" },
"web": { "browserTarget": "eoapi:build:web" },
"webCn": { "browserTarget": "eoapi:build:webCn" },
"production": { "browserTarget": "eoapi:build:production" }
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": { "browserTarget": "eoapi:build" }
},
"test": {
"builder": "@angular-builders/custom-webpack:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills-test.ts",
"tsConfig": "src/tsconfig.spec.json",
"karmaConfig": "src/karma.conf.js",
"scripts": [],
"styles": ["src/styles.scss"],
"assets": ["src/assets"],
"customWebpackConfig": { "path": "./angular.webpack.js", "replaceDuplicatePlugins": true }
}
},
"lint": {
"builder": "@angular-eslint/builder:lint",
"options": { "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] }
}
}
},
"eoapi-e2e": {
"root": "e2e",
"projectType": "application",
"architect": {
"lint": { "builder": "@angular-eslint/builder:lint", "options": { "lintFilePatterns": ["e2e/**/*.ts"] } }
}
}
},
"defaultProject": "eoapi",
"schematics": {
"@schematics/angular:component": { "prefix": "eo", "style": "scss" },
"@schematics/angular:directive": { "prefix": "eo" }
}
}
1 change: 1 addition & 0 deletions src/workbench/browser/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
"ngx-ace-wrapper": "12.0.0",
"qs": "6.11.0",
"rxjs": "7.5.5",
"socket.io-client": "4.5.1",
"tslib": "^2.4.0",
"zone.js": "~0.11.6"
},
Expand Down
51 changes: 37 additions & 14 deletions src/workbench/browser/src/app/pages/api/api-routing.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,29 +11,52 @@ const routes: Routes = [
children: [
{
path: '',
redirectTo: 'test',
pathMatch: 'full'
redirectTo: 'http',
pathMatch: 'full',
},
{
path: 'overview',
component: ApiOverviewComponent,
},
{
path: 'detail',
loadChildren: () => import('./detail/api-detail.module').then((m) => m.ApiDetailModule),
path: 'http',
children: [
{
path: '',
redirectTo: 'test',
pathMatch: 'full',
},
{
path: 'detail',
loadChildren: () => import('./http/detail/api-detail.module').then((m) => m.ApiDetailModule),
},
{
path: 'edit',
loadChildren: () => import('./http/edit/api-edit.module').then((m) => m.ApiEditModule),
},
{
path: 'test',
loadChildren: () => import('./http/test/api-test.module').then((m) => m.ApiTestModule),
},
{
path: 'mock',
loadChildren: () => import('./http/mock/api-mock.module').then((m) => m.ApiMockModule),
},
],
},
{
path: 'edit',
loadChildren: () => import('./edit/api-edit.module').then((m) => m.ApiEditModule),
},
{
path: 'test',
loadChildren: () => import('./test/api-test.module').then((m) => m.ApiTestModule),
},
{
path: 'mock',
loadChildren: () => import('./mock/api-mock.module').then((m) => m.ApiMockModule),
path: 'ws',
children: [
{
path: 'test',
loadChildren: () => import('./websocket/websocket.module').then((m) => m.WebsocketModule),
},
]
},
// {
// path: 'grpc',
// loadChildren: () => import('./grpc/grpc.module').then((m) => m.GrpcModule),
// },
],
},
];
Expand Down
35 changes: 35 additions & 0 deletions src/workbench/browser/src/app/pages/api/api-shared.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';

import { ApiTestHeaderComponent } from './http/test/header/api-test-header.component';
import { ApiTestQueryComponent } from './http/test/query/api-test-query.component';
import { ApiTestResultHeaderComponent } from './http/test/result-header/api-test-result-header.component';

import { ParamsImportModule } from '../../shared/components/params-import/params-import.module';
import { Ng1Module } from '../../ng1/ng1.module';
import { NzEmptyModule } from 'ng-zorro-antd/empty';
import { NzFormModule } from 'ng-zorro-antd/form';
import { NzLayoutModule } from 'ng-zorro-antd/layout';

import { ApiTestUtilService } from './http/test/api-test-util.service';
import { ApiTestService } from './http/test/api-test.service';

const COMPONENTS = [ApiTestHeaderComponent, ApiTestQueryComponent, ApiTestResultHeaderComponent];

@NgModule({
imports: [
CommonModule,
Ng1Module,
FormsModule,
ReactiveFormsModule,
NzFormModule,
NzEmptyModule,
NzLayoutModule,
ParamsImportModule,
],
declarations: [...COMPONENTS],
providers: [ApiTestUtilService, ApiTestService],
exports: [...COMPONENTS, NzFormModule, FormsModule, ReactiveFormsModule],
})
export class ApiSharedModule {}
Loading