Initial commit

This commit is contained in:
Robin Steinberg 2021-08-24 22:27:57 +02:00
commit 2f9fbe3ff9
5 changed files with 222 additions and 0 deletions

102
.gitignore vendored Normal file
View File

@ -0,0 +1,102 @@
dist/
node_modules/
.node_modules/
built/*
tests/cases/rwc/*
tests/cases/test262/*
tests/cases/perf/*
!tests/cases/webharness/compilerToString.js
test-args.txt
~*.docx
\#*\#
.\#*
tests/baselines/local/*
tests/baselines/local.old/*
tests/services/baselines/local/*
tests/baselines/prototyping/local/*
tests/baselines/rwc/*
tests/baselines/test262/*
tests/baselines/reference/projectOutput/*
tests/baselines/local/projectOutput/*
tests/baselines/reference/testresults.tap
tests/services/baselines/prototyping/local/*
tests/services/browser/typescriptServices.js
src/harness/*.js
src/compiler/diagnosticInformationMap.generated.ts
src/compiler/diagnosticMessages.generated.json
src/parser/diagnosticInformationMap.generated.ts
src/parser/diagnosticMessages.generated.json
rwc-report.html
*.swp
build.json
*.actual
tests/webTestServer.js
tests/webTestServer.js.map
tests/webhost/*.d.ts
tests/webhost/webtsc.js
tests/cases/**/*.js
!tests/cases/docker/*.js/
tests/cases/**/*.js.map
*.config
scripts/eslint/built/
scripts/debug.bat
scripts/run.bat
scripts/word2md.js
scripts/buildProtocol.js
scripts/ior.js
scripts/authors.js
scripts/configurePrerelease.js
scripts/configureLanguageServiceBuild.js
scripts/open-user-pr.js
scripts/open-cherry-pick-pr.js
scripts/processDiagnosticMessages.d.ts
scripts/processDiagnosticMessages.js
scripts/produceLKG.js
scripts/importDefinitelyTypedTests/importDefinitelyTypedTests.js
scripts/generateLocalizedDiagnosticMessages.js
scripts/request-pr-review.js
scripts/*.js.map
scripts/typings/
coverage/
internal/
**/.DS_Store
.settings
**/.vs
**/.vscode/*
!**/.vscode/tasks.json
!**/.vscode/settings.template.json
!**/.vscode/launch.template.json
!**/.vscode/extensions.json
!tests/cases/projects/projectOption/**/node_modules
!tests/cases/projects/NodeModulesSearch/**/*
!tests/baselines/reference/project/nodeModules*/**/*
.idea
yarn.lock
yarn-error.log
.parallelperf.*
tests/cases/user/*/package-lock.json
tests/cases/user/*/node_modules/
tests/cases/user/*/**/*.js
tests/cases/user/*/**/*.js.map
tests/cases/user/*/**/*.d.ts
!tests/cases/user/zone.js/
!tests/cases/user/bignumber.js/
!tests/cases/user/discord.js/
tests/baselines/reference/dt
.failed-tests
TEST-results.xml
package-lock.json
tests/cases/user/npm/npm
tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter
tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter
tests/cases/user/TypeScript-React-Native-Starter/TypeScript-React-Native-Starter
tests/cases/user/TypeScript-Vue-Starter/TypeScript-Vue-Starter
tests/cases/user/TypeScript-WeChat-Starter/TypeScript-WeChat-Starter
tests/cases/user/create-react-app/create-react-app
tests/cases/user/fp-ts/fp-ts
tests/cases/user/webpack/webpack
tests/cases/user/puppeteer/puppeteer
tests/cases/user/axios-src/axios-src
tests/cases/user/prettier/prettier
.eslintcache

25
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,25 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "typescript",
"tsconfig": "tsconfig.json",
"problemMatcher": [
"$tsc"
],
"group": {
"kind": "build",
"isDefault": true
},
"label": "tsc: Erstellen tsconfig.json"
},
{
"type": "npm",
"script": "build",
"group": "build",
"problemMatcher": [],
"label": "npm: build",
"detail": "tsc -p ./"
}
]
}

14
package.json Normal file
View File

@ -0,0 +1,14 @@
{
"scripts": {
"build": "npm install && tsc -p ./"
},
"devDependencies": {
"@tsconfig/node16": "^1.0.2",
"@types/node": "^16.7.1",
"@types/ws": "^7.4.7",
"typescript": "^4.3.5"
},
"dependencies": {
"ws": "^8.2.0"
}
}

71
src/app.ts Normal file
View File

@ -0,0 +1,71 @@
import WebSocket from 'ws';
const wss = new WebSocket.Server({ port: 8081 });
const receivers: WebSocket[] = [];
let sender: WebSocket | null = null;
const paths = [] as string[];
wss.on('connection', ws => {
console.log('CONNECTION incoming');
ws.once('message', message => {
const str = message.toString();
switch (str) {
case 'SENDER':
setSender(ws);
break;
case 'RECEIVER':
addReceiver(ws)
break;
default:
paths.push(str);
break;
}
});
});
console.log('READY');
function addReceiver(ws: WebSocket) {
console.log('RECEIVER registered');
for (const path of paths) {
ws.send(path);
}
receivers.push(ws);
ws.onclose = () => {
// Remove receiver when connection closes
for (const [i, recv] of receivers.entries()) {
if (ws === recv) {
receivers.splice(i, 1);
}
}
};
}
function setSender(ws: WebSocket) {
console.log('SENDER is being registered')
if (sender) {
console.log('Removing current sender...')
sender.close();
clearPaths();
}
sender = ws;
ws.on('message', msg => processMessage(msg));
}
function processMessage(message: WebSocket.Data) {
const path = message.toString();
console.log('PATH RECEIVED: ' + path);
paths.push(path);
console.log('SENDING to ' + receivers.length, 'clients');
receivers.forEach(r => r.send(path));
}
function clearPaths() {
paths.splice(0, paths.length);
receivers.forEach(r => r.send("CLEAR"));
console.log('Paths have been cleared');
}

10
tsconfig.json Normal file
View File

@ -0,0 +1,10 @@
{
"extends": "@tsconfig/node16/tsconfig.json",
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"moduleResolution": "node"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*.spec.ts"]
}