Releases: dscalzi/helios-core
Release v2.0.2 - Make Version Regex More Lenient
Release v2.0.2
This is a bugfix for release v2.0.0. Some Java distributions (Oracle) format their runtime versions differently than others. This update makes the regex more lenient to accomodate.
Fixes
- d170cd6 2.0.2 - Make version parse regex more lenient.
Release v2.0.1 - Fix Optional Java Build Version
Release v2.0.1
This is a bugfix for release v2.0.0. Some Java distributions (Oracle) may omit the build number in certain places, such as registry keys. This fix allows the build number to be optional.
Fixes
- 895d38c 2.0.1 - Build is optional in Java versions (esp. Oracle).
Release v2.0.0 - Major Asset, Download, Java, and Distro Rewrite
Release v2.0.0
This release includes new implementations of several core mechanisms of Helios Launcher. The new implementations replace the Distribution manager, AssetGuard, and JavaGuard. All rewritten code leverages the full power of Typescript and modern Javascript APIs. This has resulted in a more maintainable, robust, and concise codebase. Remember, async/await was not even stable in Node when v1 was being written!
Note: These release notes are on the technical side.
AssetGuard Rewrite
The implementation replacing AssetGuard is broken up into two core components, the Verification API and Download API. Verification of local files has been delegated to specialized Index Processors. Instances of index processor are responsible for verifying a group of local files based on where they are declared. The current implementation provides two index processors, the MojangIndexProcessor and DistributionIndexProcessor. The MojangIndexProcessor is responsable for parsing Mojang's various index files (asset, version, etc) and verifying the existence and validity of declared files on the local disk. Likewise, the DistributionIndexProcessor is responsable for parsing and verifying all files declared in the distribution.json. Index processors will return with a list of invalid files that require redownload. A file is typically invalid if it either does not exist or has an invalid checksum.
The next stage of the operation is to pass the invalid files discovered by the index processors to the download engine. Downloads are streamed asynchronously and configured to retry if specific error conditions are encountered. Mojang's asset servers have become outrageiously unreliable and will timeout several times during the download process. The retries can detect this, and will attempt a download again up to ten times.
Unlike the original AssetGuard, this implementation is designed to run in child process. As such, it was designed to be simpler and imperative. An API that wraps the IPC communication between the parent and child process is provided. This API follows a command-pattern model between a transmitter class in the parent process and a receiver class in the child process. Failure conditions, message passing, and command invocation is well defined and easy to work with.
JavaGuard Rewrite
Note: JavaGuard supports all new Java features defined by v1.2.0 of the distribution spec. To see what's new, check the release notes https://github.com/dscalzi/helios-distribution-types/releases/tag/v1.2.0
The new Java validation logic was designed with long-term support for multiple Java versions in mind. The validation now goes through three simple stages, discovery, filtering, and ranking. First, all installations of Java are discovered using various methods depending on OS. Once all installations are collected, they are analyzed and filtered based on the support range for the given server. The remaining applicable Java installations are ranked to decide on the best one to use. If no applicable installation of Java is resolved, Java will be queued for download through the new download engine.
Distribution API
The distribution manager was totally rewritten. A new class, DistributionAPI, is provided to control pulling, refreshing, and caching the distribution index. The distribution itself is wrapped in classes provided by the DistributionFactory file. This wrapping serves a similar purpose to the original code, providing an API around the distribution so that common data points are predictable. For example, a Module is wrapped by the HeliosModule class. HeliosModule provides many methods to work with the modules maven components, among other things. Note that methods and properties are only provided on the wrapped class when needed. Many properties are only accessible on the raw object, which is always stored on the wrapped class. For example, to access the raw module from a HeliosModule, you can just use the rawModule
property.
Full Changes
These release notes do not fully cover all of the changes and features. For a full overview of the changes, please review the pull request. #2
Release v0.1.2
v0.1.2
Release v0.1.1
v0.1.1 - Dependency upgrade.
Release v0.1.0
v0.1.0