Compare commits
5
Commits
better-timeout
...
v4.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6f92d61381 | ||
|
|
506677ee02 | ||
|
|
3d97cff0f4 | ||
|
|
bda1f98693 | ||
|
|
7e0b82cb14 |
@@ -1,4 +1,6 @@
|
|||||||
node_modules
|
node_modules
|
||||||
client/dist
|
client/dist
|
||||||
server/build
|
server/build
|
||||||
|
server/lakefile.olean
|
||||||
**/lake-packages/
|
**/lake-packages/
|
||||||
|
**/.DS_Store
|
||||||
|
|||||||
@@ -15,9 +15,6 @@ npm install -g http-server
|
|||||||
|
|
||||||
```
|
```
|
||||||
git clone https://github.com/hhu-adam/NNG4.git
|
git clone https://github.com/hhu-adam/NNG4.git
|
||||||
cd NNG4
|
|
||||||
docker rmi nng4:latest
|
|
||||||
docker build --pull --rm -f "Dockerfile" -t nng4:latest "."
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -146,12 +143,6 @@ Activate config:
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Install `unzip` for Importing Docker Images
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo apt-get install unzip
|
|
||||||
```
|
|
||||||
|
|
||||||
## Install bubblewrap (bwrap)
|
## Install bubblewrap (bwrap)
|
||||||
```
|
```
|
||||||
sudo apt-get install bubblewrap
|
sudo apt-get install bubblewrap
|
||||||
|
|||||||
@@ -615,7 +615,7 @@ function useLevelEditor(codeviewRef, initialCode, initialSelections, onDidChange
|
|||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
editorConnection.api.sendClientNotification(uriStr, "textDocument/didClose", {textDocument: {uri: uriStr}})
|
editorConnection.api.sendClientNotification(uriStr, "textDocument/didClose", {textDocument: {uri: uriStr}})
|
||||||
model.dispose(); }
|
}
|
||||||
}
|
}
|
||||||
}, [editor, levelId, connection, leanClientStarted])
|
}, [editor, levelId, connection, leanClientStarted])
|
||||||
|
|
||||||
|
|||||||
@@ -42,12 +42,6 @@ body {
|
|||||||
border-radius: .3em;
|
border-radius: .3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Hide monaco editor notifications */
|
|
||||||
.monaco-workbench > .notifications-toasts.visible {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading {
|
.loading {
|
||||||
margin: auto;
|
margin: auto;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|||||||
+36
-20
@@ -1,29 +1,45 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react'
|
||||||
import { createRoot } from 'react-dom/client';
|
import { createRoot } from 'react-dom/client'
|
||||||
import App from './app';
|
import App from './app'
|
||||||
import { ConnectionContext, connection } from './connection'
|
import { ConnectionContext, connection } from './connection'
|
||||||
import { store } from './state/store';
|
import { store } from './state/store'
|
||||||
import { Provider } from 'react-redux';
|
import { Provider } from 'react-redux'
|
||||||
import {
|
import type { RouteObject } from "react-router"
|
||||||
createHashRouter,
|
import { createHashRouter, RouterProvider, Route, redirect } from "react-router-dom"
|
||||||
RouterProvider,
|
import ErrorPage from './components/error_page'
|
||||||
Route,
|
import Welcome from './components/welcome'
|
||||||
} from "react-router-dom";
|
import LandingPage from './components/landing_page'
|
||||||
import ErrorPage from './components/error_page';
|
import Level from './components/level'
|
||||||
import Welcome from './components/welcome';
|
import { monacoSetup } from 'lean4web/client/src/monacoSetup'
|
||||||
import LandingPage from './components/landing_page';
|
|
||||||
import Level from './components/level';
|
|
||||||
import { monacoSetup } from 'lean4web/client/src/monacoSetup';
|
|
||||||
import { redirect } from 'react-router-dom';
|
|
||||||
|
|
||||||
monacoSetup()
|
monacoSetup()
|
||||||
|
|
||||||
|
// // Do not show the landing page in the dev-container context
|
||||||
|
// let root_path: RouteObject = (process.env.LEAN4GAME_SINGLE_GAME == "true") ? {
|
||||||
|
// path: "/",
|
||||||
|
// loader: () => redirect("/g/local/game")
|
||||||
|
// } : {
|
||||||
|
// path: "/",
|
||||||
|
// element: <LandingPage />,
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// If `VITE_LEAN4GAME_SINGLE` is set to true, then `/` should be redirected to
|
||||||
|
// `/g/local/game`. This is used for the devcontainer setup
|
||||||
|
let single_game = (import.meta.env.VITE_LEAN4GAME_SINGLE == "true")
|
||||||
|
let root_object: RouteObject = single_game ? {
|
||||||
|
path: "/",
|
||||||
|
loader: () => redirect("/g/local/game")
|
||||||
|
} : {
|
||||||
|
path: "/",
|
||||||
|
element: <LandingPage />,
|
||||||
|
}
|
||||||
|
|
||||||
const router = createHashRouter([
|
const router = createHashRouter([
|
||||||
|
root_object,
|
||||||
{
|
{
|
||||||
path: "/",
|
// For backwards compatibility
|
||||||
element: <LandingPage />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/game/nng",
|
path: "/game/nng",
|
||||||
loader: () => redirect("/g/hhu-adam/NNG4")
|
loader: () => redirect("/g/hhu-adam/NNG4")
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
// This file is a copy of `index.tsx` where the path "/" is redirected to "/g/local/game".
|
|
||||||
// It is used for the dev. setup where there is only one game in a folder called `game`.
|
|
||||||
import * as React from 'react';
|
|
||||||
import { createRoot } from 'react-dom/client';
|
|
||||||
import App from './app';
|
|
||||||
import { ConnectionContext, connection } from './connection'
|
|
||||||
import { store } from './state/store';
|
|
||||||
import { Provider } from 'react-redux';
|
|
||||||
import {
|
|
||||||
createHashRouter,
|
|
||||||
RouterProvider,
|
|
||||||
Route,
|
|
||||||
} from "react-router-dom";
|
|
||||||
import ErrorPage from './components/error_page';
|
|
||||||
import Welcome from './components/welcome';
|
|
||||||
import LandingPage from './components/landing_page';
|
|
||||||
import Level from './components/level';
|
|
||||||
import { monacoSetup } from 'lean4web/client/src/monacoSetup';
|
|
||||||
import { redirect } from 'react-router-dom';
|
|
||||||
|
|
||||||
monacoSetup()
|
|
||||||
|
|
||||||
const router = createHashRouter([
|
|
||||||
{
|
|
||||||
path: "/",
|
|
||||||
loader: () => redirect("/g/local/game")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/g/:owner/:repo",
|
|
||||||
element: <App />,
|
|
||||||
errorElement: <ErrorPage />,
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: "/g/:owner/:repo",
|
|
||||||
element: <Welcome />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/g/:owner/:repo/world/:worldId/level/:levelId",
|
|
||||||
element: <Level />,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
const container = document.getElementById('root');
|
|
||||||
const root = createRoot(container!);
|
|
||||||
root.render(
|
|
||||||
<React.StrictMode>
|
|
||||||
<Provider store={store}>
|
|
||||||
<ConnectionContext.Provider value={connection}>
|
|
||||||
<RouterProvider router={router} />
|
|
||||||
</ConnectionContext.Provider>
|
|
||||||
</Provider>
|
|
||||||
</React.StrictMode>
|
|
||||||
);
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
/// <reference types="vite/client" />
|
||||||
|
|
||||||
|
interface ImportMetaEnv {
|
||||||
|
readonly VITE_LEAN4GAME_SINGLE: string
|
||||||
|
// more env variables...
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ImportMeta {
|
||||||
|
readonly env: ImportMetaEnv
|
||||||
|
}
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</noscript>
|
</noscript>
|
||||||
<script src="bundle.js"></script>
|
<script type="module" src="/client/src/index.tsx"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
Generated
+1424
-524
File diff suppressed because it is too large
Load Diff
+10
-17
@@ -15,6 +15,7 @@
|
|||||||
"@reduxjs/toolkit": "^1.9.1",
|
"@reduxjs/toolkit": "^1.9.1",
|
||||||
"@types/cytoscape": "^3.19.9",
|
"@types/cytoscape": "^3.19.9",
|
||||||
"@types/react-router-dom": "^5.3.3",
|
"@types/react-router-dom": "^5.3.3",
|
||||||
|
"@vitejs/plugin-react-swc": "^3.4.0",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"cytoscape": "^3.23.0",
|
"cytoscape": "^3.23.0",
|
||||||
"cytoscape-elk": "^2.1.0",
|
"cytoscape-elk": "^2.1.0",
|
||||||
@@ -36,21 +37,18 @@
|
|||||||
"remark-gfm": "^3.0.1",
|
"remark-gfm": "^3.0.1",
|
||||||
"remark-math": "^5.1.1",
|
"remark-math": "^5.1.1",
|
||||||
"request-progress": "^3.0.0",
|
"request-progress": "^3.0.0",
|
||||||
|
"vite": "^4.5.0",
|
||||||
|
"vite-plugin-static-copy": "^0.17.0",
|
||||||
|
"vite-plugin-svgr": "^4.1.0",
|
||||||
"vscode-ws-jsonrpc": "^2.0.1",
|
"vscode-ws-jsonrpc": "^2.0.1",
|
||||||
"web-worker": "^1.2.0",
|
"web-worker": "^1.2.0",
|
||||||
"ws": "^8.11.0"
|
"ws": "^8.11.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.19.3",
|
|
||||||
"@babel/core": "^7.20.5",
|
|
||||||
"@babel/preset-env": "^7.20.2",
|
|
||||||
"@babel/preset-react": "^7.18.6",
|
|
||||||
"@babel/preset-typescript": "^7.18.6",
|
|
||||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
|
||||||
"@redux-devtools/core": "^3.13.1",
|
"@redux-devtools/core": "^3.13.1",
|
||||||
"@testing-library/react": "^13.4.0",
|
"@testing-library/react": "^13.4.0",
|
||||||
"@types/debounce": "^1.2.1",
|
"@types/debounce": "^1.2.1",
|
||||||
"babel-loader": "^8.3.0",
|
|
||||||
"concurrently": "^7.6.0",
|
"concurrently": "^7.6.0",
|
||||||
"css-loader": "^6.7.3",
|
"css-loader": "^6.7.3",
|
||||||
"file-loader": "^6.2.0",
|
"file-loader": "^6.2.0",
|
||||||
@@ -59,21 +57,16 @@
|
|||||||
"style-loader": "^3.3.1",
|
"style-loader": "^3.3.1",
|
||||||
"ts-loader": "^9.4.2",
|
"ts-loader": "^9.4.2",
|
||||||
"typescript": "^4.9.4",
|
"typescript": "^4.9.4",
|
||||||
"url-loader": "^4.1.1",
|
"url-loader": "^4.1.1"
|
||||||
"webpack": "^5.75.0",
|
|
||||||
"webpack-cli": "^4.10.0",
|
|
||||||
"webpack-dev-server": "^4.11.1",
|
|
||||||
"webpack-shell-plugin-next": "^2.3.1"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "concurrently -n server,client -c blue,green \"npm run start_server\" \"npm run start_client\"",
|
"start": "concurrently -n server,client -c blue,green \"npm run start_server\" \"npm run start_client\"",
|
||||||
"start_server": "cd server && lake build && cross-env NODE_ENV=development nodemon -e mjs --exec \"node ./index.mjs\"",
|
"start_server": "cd server && lake build && cross-env NODE_ENV=development nodemon -e mjs --exec \"node ./index.mjs\"",
|
||||||
"start_client": "cross-env NODE_ENV=development webpack-dev-server --hot",
|
"start_client": "cross-env NODE_ENV=development vite --host",
|
||||||
"build": "cross-env NODE_ENV=production webpack",
|
"build": "npm run build_server && npm run build_client",
|
||||||
"production": "cross-env NODE_ENV=production node server/index.mjs",
|
"build_server": "cd server && lake build",
|
||||||
"build_robo": "rm -rf ./Robo && git clone https://github.com/hhu-adam/Robo && docker build ./Robo --file ./Robo/Dockerfile --tag g/hhu-adam/robo && rm -rf ./Robo",
|
"build_client": "cross-env NODE_ENV=production vite build",
|
||||||
"build_nng": "rm -rf ./NNG4 && git clone https://github.com/hhu-adam/NNG4 && docker build ./NNG4 --file ./NNG4/Dockerfile --tag g/hhu-adam/nng4 && rm -rf ./NNG4",
|
"production": "cross-env NODE_ENV=production node server/index.mjs"
|
||||||
"update_lean": "./UPDATE_LEAN.sh"
|
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"extends": [
|
"extends": [
|
||||||
|
|||||||
@@ -496,7 +496,7 @@ section NotificationHandling
|
|||||||
IO.eprintln s!"Got outdated version number: {newVersion} ≤ {oldDoc.meta.version}"
|
IO.eprintln s!"Got outdated version number: {newVersion} ≤ {oldDoc.meta.version}"
|
||||||
else if ¬ changes.isEmpty then
|
else if ¬ changes.isEmpty then
|
||||||
let newDocText := foldDocumentChanges changes oldDoc.meta.text
|
let newDocText := foldDocumentChanges changes oldDoc.meta.text
|
||||||
updateDocument ⟨docId.uri, newVersion, newDocText⟩
|
updateDocument ⟨docId.uri, newVersion, newDocText, .always⟩
|
||||||
|
|
||||||
end NotificationHandling
|
end NotificationHandling
|
||||||
|
|
||||||
@@ -573,7 +573,7 @@ def initAndRunWorker (i o e : FS.Stream) (opts : Options) : IO UInt32 := do
|
|||||||
This is because LSP always refers to characters by (line, column),
|
This is because LSP always refers to characters by (line, column),
|
||||||
so if we get the line number correct it shouldn't matter that there
|
so if we get the line number correct it shouldn't matter that there
|
||||||
is a CR there. -/
|
is a CR there. -/
|
||||||
let meta : DocumentMeta := ⟨doc.uri, doc.version, doc.text.toFileMap⟩
|
let meta : DocumentMeta := ⟨doc.uri, doc.version, doc.text.toFileMap, .always⟩
|
||||||
let e := e.withPrefix s!"[{param.textDocument.uri}] "
|
let e := e.withPrefix s!"[{param.textDocument.uri}] "
|
||||||
let _ ← IO.setStderr e
|
let _ ← IO.setStderr e
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
import GameServer.FileWorker
|
import GameServer.FileWorker
|
||||||
import GameServer.Watchdog
|
import GameServer.Watchdog
|
||||||
|
import GameServer.Commands
|
||||||
|
|
||||||
|
-- TODO: The only reason we import `Commands` is so that it gets built to on `lake build`
|
||||||
|
-- should we have a different solution?
|
||||||
|
|
||||||
unsafe def main : List String → IO UInt32 := fun args => do
|
unsafe def main : List String → IO UInt32 := fun args => do
|
||||||
let e ← IO.getStderr
|
let e ← IO.getStderr
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
leanprover/lean4:v4.1.0
|
leanprover/lean4:v4.2.0
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import { defineConfig } from 'vite'
|
||||||
|
import react from '@vitejs/plugin-react-swc'
|
||||||
|
import { viteStaticCopy } from 'vite-plugin-static-copy'
|
||||||
|
import svgr from "vite-plugin-svgr"
|
||||||
|
|
||||||
|
// https://vitejs.dev/config/
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [
|
||||||
|
react(),
|
||||||
|
svgr({
|
||||||
|
svgrOptions: {
|
||||||
|
// svgr options
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
viteStaticCopy({
|
||||||
|
targets: [
|
||||||
|
{
|
||||||
|
src: 'node_modules/@leanprover/infoview/dist/*.production.min.js',
|
||||||
|
dest: '.'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
],
|
||||||
|
publicDir: "client/public",
|
||||||
|
server: {
|
||||||
|
port: 3000,
|
||||||
|
proxy: {
|
||||||
|
'/websocket': {
|
||||||
|
target: 'ws://localhost:8080',
|
||||||
|
ws: true
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
path: "path-browserify",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user