Commit Graph
2123 Commits
Author SHA1 Message Date
Hornwitser ffe5040644 Implement autosaving of data held in memory
Add controller.autosave_interval config that specifies the frequency
which controller config, hosts, instances, users, mod packs and plugin
specific data which is held in memory should be automatically flushed to
disk if they have changed since the last time they were saved.  This
prevents data loss in the event of a server crash.

Plugins can use the onSaveData hook to save its own data at the same
time as the controller does and this obsoletes making an autosave
interval in the plugin.

Resolves #523.
2023-11-29 20:18:50 +01:00
Hornwitser faadf873fb Merge pull request #524 from Hornwitser/typescript-plugin-web
Port plugin web code to TypeScript
2023-11-29 20:16:24 +01:00
Hornwitser 1434ede2dc Improve error reporting when web_ui fails to load
Catch uncaught errors and display the error message on the page itself
if bootstraping fails. This should prevent most cases of the of the web
interface being stuck on "Loading web interface..." after an error was
thrown and the loading failed.
2023-11-29 19:01:46 +01:00
Hornwitser f1edbd78cb Move dist/web_build inside dest/web
By default webpack-dev-middleware will refuse to delete files outside of
its working directory. This becomes dist/web in the configuration
currently set up, which means that a rebuild triggered on the watched
files will fail when declaration files are output to to dist/web_build.

Fix by moving dist/web_build to dist/web/build.
2023-11-29 18:02:27 +01:00
Hornwitser 0a4368d1c0 Rename index.css to style.css
Make the tab completion on web/in<Tab> give the TypeScript code instead
of annoyingly stopping at the extension.
2023-11-28 15:52:54 +01:00
Hornwitser 6a404d9fb3 Refactor and port plugin web code to TypeScript
Clean up the configuration for compiling TypeScript for the Web
interface to us its own tsconfig.web.json config files and reference the
TypeScript source files directly in the configuration and imports
instead of files compiled to dist.

To properly support recompliation with TypeScript's projects feature
each package's tsconfig.web.json file is set to output the build to
dist/web_build which is then ignored in .npmignore.  Webpack is still
used to create the proper build in dist/web, so this is mainly to make
TypeScipt's compiler happy but it also allows the root tsconfig.json
file to include the web interface code, meaning running the build script
now also checks the typing of the web interface.

Final part of #491.
2023-11-28 15:52:54 +01:00
Hornwitser 8c724e3bc5 Provide control at init time for web plugins
The control interface is required for adding handlers for message types
a plugin defines, but the plugins were loaded before the Control
instance was created. This meant there was no sensible way for web
plugins to register handlers for their own message types.

Move the creating of the Control instance to before plugins are loaded
and set this.control for web plugins before init is called.
2023-11-28 15:35:40 +01:00
Hornwitser 70d2b319b3 Fix types related to plugins and the web interface 2023-11-28 15:35:40 +01:00
Hornwitser 8b5c66d900 Output compiled validator to source tree as well
Output message_validate.js to both dist/src/data and src/data. This
allows tools to directly consume the TypeScript sources in src/data
without throwing an error due to message_validate being missing.
2023-11-28 15:35:40 +01:00
Hornwitser ceb7e48c99 Fix global declaration of staticRoot and webRoot
These variables were intended to be globals declare in the global
namespace. That this ends up on the window object is an implementation
detail of JavaScript. Remove the window. prefix put in front of
staticRoot and webRoot and include the global declaration in the
TypeScript module.
2023-11-28 15:35:40 +01:00
Hornwitser 9df6717364 Move PluginWebApi to lib
Resolve circular dependency of controller depending on web_ui and web_ui
depending on controller by moving the type from controller that was used
in web_ui to lib.
2023-11-28 14:48:06 +01:00
Hornwitser 47c5a727b5 Merge pull request #522 from Hornwitser/base-plugin-move
Refactor plugin code
2023-11-28 14:47:23 +01:00
Hornwitser 654df76065 Strongly type invokeHook
Add strong typing of the invokeHook function to prevent incorrect
paramaters being passed to plugin hooks. This detected a few places
where the parameters passed were incorrect.
2023-11-28 14:28:22 +01:00
Hornwitser e3e5867d60 Fix PlayerEvent being completely broken
Fix the name being passed as the type when deserialising the event, the
stats being missing, and incorrect parameters passed to plugins.
2023-11-28 14:28:22 +01:00
Hornwitser b9c3458cc2 Fix onMetrics using the wrong iteration type 2023-11-28 14:07:38 +01:00
Hornwitser ee9c200ebf Implement host plugins
Add ability to define plugin code that runs in the context of a host,
starts up with the host does, and stops when the host shuts down.
2023-11-25 19:18:33 +01:00
Hornwitser 808eda0513 Move base plugins to their respective packages
Move BaseControllerPlugin to controller/src/BaseControllerPlugin.ts
Move BaseInstancePlugin to host/src/BaseInstancePlugin.ts
Move BaseControlPlugin to ctl/src/BaseCtlPlugin.ts
Move BaseWebPlugin to web_ui/src/BaseWebPlugin.ts

This solves the circular package dependency problem of the base plugins
needing types that are available only in the dependencies to lib.
2023-11-25 18:41:43 +01:00
Hornwitser 63dc370ea0 Merge pull request #520 from Hornwitser/vs-code-config
Add VSCode workspace config
2023-11-25 18:41:23 +01:00
Hornwitser 26827ec8a7 Configure VSCode Workspace
Add configuration for VSCode to use tabs for indent, unix style endings
and leave a newline at the last line of the file.  This will make
editing from VSCode less error-prone as it will select the right
settings by default.
2023-11-25 18:36:30 +01:00
Hornwitser 87e52b804e Convert JSON file indents to tabs
Be consistent with the usage of tabs as indents in all JSON files in the
project.  This makes it easier to configure editors to emit the right
indents when manually editing these files.
2023-11-25 18:19:15 +01:00
Hornwitser 702c323610 Merge pull request #519 from Hornwitser/small-things-11
Small things 11
2023-11-25 17:53:08 +01:00
Hornwitser d47fd20926 Fix --dev broken after 7517917 2023-11-24 21:11:56 +01:00
Hornwitser 51f7430a4b Add warning to generated server-settings.json
Leave a warning in case someone opens and tries to modify the
server-settings.json file in the instance folder, as any changes
made will be lost when it's overwritten.
2023-11-24 21:07:17 +01:00
Hornwitser fc6e9d0002 Fix type checking on Request and Event types
When defining a generic type where a type argument is never used
as a part of the type itself, TypeScript will consider two instances of
the generic type with different values for the type to be the same.
This caused the handle method to accept any handler for any
Request/Event, ignoring the event/request type completely.

Fix by specifying the constructor to return the intersection of the type
itself and the Request/Event type.
2023-11-24 20:56:02 +01:00
Hornwitser f23e442c4c Ignore BOM in locale files
Ignore BOM at the start of Factorio locale files as this is a thing
Factorio also does.

Fixes #507
2023-11-24 20:53:16 +01:00
Hornwitser 6eda1f78d5 Turn on --enable-source-maps
Turn on source map deduction in stack traces from thrown errors. This
feature is off by default due to potential performance degration in
certain corner cases.  For the dev environment add instructions for
passing the option to node.
2023-11-24 20:53:16 +01:00
Hornwitser 142cf8a626 Fix log splitting not happening on UTC boundnary 2023-11-24 20:53:16 +01:00
Hornwitser 56d3997675 Refactor to keep handle to Instance in connection
Keep a handle to the Instance in the connection the host has to the
instance so that methods can be called directly on the Instance. This
simplifies logic that exists outside of the link system like the host
shutting down all of its instances when it exits.

Fixes validation error thrown on host shutdown with running instances.
2023-11-24 20:53:16 +01:00
Hornwitser 82ed0adfc3 Merge pull request #517 from Hornwitser/setup-typescript-eslint
Setup TypeScript ESLint
2023-11-20 16:04:47 +01:00
Hornwitser 9f31394318 Name a type for event data
Use a named type for the EventData used in subscriptions.  This was done
as a workaround for a bug in the linter.
2023-11-20 14:43:03 +01:00
Hornwitser 2a1821993c Remove .js extension from import
This confuses the node/no-missing-import linter rule.
2023-11-20 14:03:52 +01:00
Hornwitser 3cc9ec3c68 Ignore complexity in ConfigGroup.define
This method will most likely be rewritten in a future config refactor.
Ignore linter complexity for now.
2023-11-20 13:50:20 +01:00
Hornwitser 52d3bba6f6 Move instance buttons out of InstanceViewPage
Break out the button row at the top of the instance page into its own
component to reduce the complexity of InstanceViewPage.
2023-11-20 13:49:23 +01:00
Hornwitser 0de70df472 Move dev server logic out of _startInternal
Break out the logic for setting up the webpack dev server into its own
method to reduce the complexity of _startInternal.
2023-11-20 13:46:51 +01:00
Hornwitser 7517917832 Move controller's TypeScript output to dist
Be consistent with the other packages and set the controller's
TypeScript compilation outDir to dist instead of dist/controller.
2023-11-20 13:46:25 +01:00
Hornwitser af9ed19af0 Setup typescript-eslint
Configure eslint to work with TypeScript via the typescript-eslint
plugin.
2023-11-19 04:50:07 +01:00
Hornwitser b78ca31b09 Add typing for serialized collector type
Setup TypeScript tyings and JSON schema for serializeResult and
deserializeResult and use these in the metrics related requests.
2023-11-19 04:50:07 +01:00
Hornwitser b66138587b Move exposition content type to its own var
Remove anti-pattern of setting properties on Function object that is
difficult to document.
2023-11-19 04:50:07 +01:00
Hornwitser 80e1904175 Fix bad typings left over from the migration 2023-11-19 04:50:07 +01:00
Hornwitser 7314dc99c8 Fix code style errors
Remove extra whitespace, use more consistent spacing, add missing
semicolons, using dangling commas, break up long lines, consistent
multiline operator placement, add missing JSDoc strings and so on.
2023-11-19 04:48:38 +01:00
Hornwitser 97e05c0610 Update GitHub actions 2023-11-18 22:14:29 +01:00
Hornwitser 2c9b07b8d6 Add subscription handlers in constructor
Move the calls to add subscrition handlers into the constructor of
Controller to reduce the amount of code in the start logic.
2023-11-18 22:12:14 +01:00
Hornwitser 60f09b11f9 Merge pull request #510 from Cooldude2606/refactor/subscriptions
Refactor/subscriptions - Create a generalized event subscription class
2023-10-13 14:45:44 +02:00
Cooldude2606andHornwitser 54cb483a31 Convert overloads to generic function
Co-authored-by: Hornwitser <github@hornwitser.no>
2023-10-13 11:21:55 +01:00
Hornwitser d58602f1a1 Fix merge conflicts 2023-10-12 17:21:56 +02:00
Hornwitser d84445baa1 Fix line endings and indents 2023-10-12 17:07:07 +02:00
Jonas Meeuws d73f26c83f Fix subspace_storage IpcItems type and UpdateStorageEvent.type (#516) 2023-10-12 16:20:27 +02:00
Cooldude2606 23ba5d612a Fixed failing tests for unsubscribe 2023-10-06 18:56:27 +01:00
Cooldude2606 b15b1a6007 Fixed bugs found during pre-review 2023-10-06 18:30:15 +01:00
Luciole e2dea35e02 allow to revoke host tokens from web ui (#511)
* allow to revoke / restore host access from web ui

* refector to what is expected

* remove core.admin check on HostViewPage.tsx

* update core.host.revoke_token description
2023-09-29 19:50:14 +02:00