What's Changed
This release is the continutation of the 4.x goal of aligning closer to NodeJS. Under the cover much of the changes are nominal, but there have been a few substantial sets of features and improvments to the core platform. Beyond NodeJS alignment, there is also a push to defer to ecosystem standard libraries where possible.
Path
The path implementation in the manifest module ensures POSIX-like behavior for all join/resolve/etc. operations. The challenge was to remember to pull in the proper module, and some of the slight differences beteween the module and what a full path implementation looked like. This release sees the shift to asking the user to import path from the node standard library, and the framework will swap it out behind the scenes. This ensures the code looks and feels like it should, while ensuring consistency at the platform level.
Runtime
Previously known as Base, this represented the foundation for which all modules build apon. Base unfortunately wasn't a clear name for what it should contain, and ended up being a general catch-all for various functionalities. Going forward, Runtime will act as the layer between the operating system and the various modules. The goal is to have this module become as small as possible, specifically as NodeJS evolves. In addition to general renames, quite a few functions were moved closer to where they belong, and a handful of functionality was removed as it was no longer needed.
Model + Blob - Asset
Moving towards standard behavior, the Asset service acted as a thin wrapper around the Model + Stream services. Essentialy it was just NodeJS streams + metadata. That recipe is basically what blobs are. By moving the Model contract from streams to blobs, the Asset service was no longer necessary. This work also touched upload, as upload is no longer tied to assets, but just a standard blob/file upload interceptor that is usable by the Rest framework. Blobs are the new stanard for streams + metadata, and have reduced the coupling between various modules.
Test
The test framework was given an internal overhaul, allowing for some neat new features, and also shoring up quite a few bugs in the process. The primary new feature is the ability to tag tests via decorators, and to target or exclude certain tests during invocation. This is helpful for tests that shouldn't be run in CI/CD for example. Outstanding bugs were also fixed in the unresolved promise detection.
As an extra feature, suites are now randomized as well when executing. This helps to normalize resource usage (and speed up processes), as well as uncover any bugs that may have been hidden due to specific ordering of test runs.
Tooling (Compiler + VSCode)
Additional love and attention has been provided to the compiler, resolving a few outstanding bugs, specifically where a kill -1 was able to be invoked (this kills all userland processes). Additional love was given to how many open connections/processes VSCode has at once. Other fixes included ensuring a workspace reload properly kills the compiler (we were ending up with multiple).
Pack
The final enhancement was to allow for marking certain dependencies as external to the bundle process which allows for them to be installed via npm post bundling. The docker support already picks this up and will install them. This helps to minimize the amount of boilerplate needed for the most trivial of configurations.
Whats Next?
The ecosystem is still waiting on ES Decorators being fully ratified (including parameter decorators), including support for standalone functions. Once all the necessary features are available within Typescript, the framework will overhaul decorator behavior, and allow for isolated functions where it make sense (e.g. DI factory functions, standalone rest routes, caching, etc).
No comments:
Post a Comment