rjweb-server
Version:
Easy and Robust Way to create a Web Server with many easy-to-use Features in Node.js
1,187 lines (765 loc) • 26.3 kB
Markdown
# Changelog
## 9.8.2
- Automatically turn headers lowercase
## 9.8.1
- Add `<Server>.$channel`
## 9.8.0
- Add `<WsOpenContext>.printRaw`
- Add `<WsOpenContext>.printRawChannel`
- Add `<WsOpenContext>.removeRawChannel`
- Add `<WsOpenContext>.$channel`
- Add `<WsOpenContext>.server`
- Add `<WsMessageContext>.printRaw`
- Add `<WsMessageContext>.printRawChannel`
- Add `<WsMessageContext>.removeRawChannel`
- Add `<WsMessageContext>.$channel`
- Add `<WsMessageContext>.server`
- Add `<WsCloseContext>.$channel`
- Add `<WsCloseContext>.server`
- Add `<HttpRequestContext>.$channel`
- Add `<HttpRequestContext>.server`
## 9.7.1
- Fix Websocket Json Parsing Issue
## 9.7.0
- Fix windows route file importing
- Cache empty arraybuffers
- Add `<HttpRequestContext>.$body`
- Add `<WsMessageContext>.$message`
## 9.6.0
- Allow setting http finish handlers in more places
## 9.5.6
- Add Routing with unions using template literals
## 9.5.5
- Expose `<Server>.finish()` callbacks properly
## 9.5.4
- Set `this.body.awaiting` to `false` when consuming body
## 9.5.3
- Fix `<HttpRequestContext>.client.proxied` not being updated
- Fix `<HttpRequestContext>.client.internal` not being updated
## 9.5.2
- Add back `<WsMessageContext>.getRateLimit`
- Add back `<WsMessageContext>.clearRateLimit`
- Add back `<WsMessageContext>.skipRateLimit`
## 9.5.1
- Fix `HEAD` Support breaking some route paths
## 9.5.0
- Add `options.methods.head`
- Add `options.methods.trace`
- Handle `HEAD` Requests automatically unless overridden
- Handle `TRACE` Requests automatically if enabled
- Add `<HttpRequestContext>.client.origin`
- Add `<HttpRequestContext>.client.referrer`
## 9.4.1
- Properly allow all headers in cors
## 9.4.0
- Make sure middlewares also run on 404
- Add `<RequestContext>.findRoute()`
- Fix Cors Middleware issues
## 9.3.6
- Reverse Cors prefer order
## 9.3.5
- Remove instanceof to check for IPAddress in proxy ip validation
- Fix Cors origin issue
## 9.3.4
- Properly support multiple origins in cors middleware
- Add `<HttpRequestContext>.vary()` to easily modify vary header
## 9.3.3
- Fix issues when merging middleware classes with outdated properties
## 9.3.2
- Set default ratelimits to null to prevent identifier overlapping
## 9.3.1
- Allow calling `<Ratelimit>.identifier()` without arguments to generate new identifier
- Fix some jsdocs
- Fix broken ratelimit ip addresses
## 9.3.0
- Add `<Server>.fetch` to run internal fetch calls
- Allow more inputs in `<ValueCollection>.import()`
- Add `<ValueCollection>.search()`
- Add `<ValueCollection>.json()`
- Add `<ValueCollection>.values()`
- Add `<ValueCollection>.keys()`
- Add `<ValueCollection>.size()`
- Deprecate `<ValueCollection>.objectCount`
- Deprecate `<ValueCollection>.toArray()`
- Deprecate `<ValueCollection>.toJSON()`
## 9.2.10
- Fix OpenAPi merging spreading up using validators
## 9.2.9
- Do not allow duplicate openapi parameters
## 9.2.8
- Fix some ratelimit issues when loading route files
## 9.2.7
- Fix OpenAPI Merging issues
## 9.2.6
- Fix validator extending issue
## 9.2.5
- Make sure validator callbacks are not ran twice when extending
## 9.2.4
- Fix some Context Issues
## 9.2.3
- Make `<HttpRequestContext>.rawContext` protected instead of private
- Make `<HttpRequestContext>.abort` protected instead of private
- Make `<WsOpenContext>.abort` protected instead of private
## 9.2.2
- Fix class merging breaking some methods
- Improve yielding logic
- Fix etag status message
- More typescript middleware fixes
## 9.2.1
- Fix Typescript Middleware issues
## 9.2.0
- Add `ctr.yield` to skip route handlers
- Fix some bad code in TSDocs
## 9.1.7
- Add Ratelimit cleanup interval
- Fix typo in readme
- fix some tabs
## 9.1.6
- Do not include prefix in route files directly
## 9.1.5
- Fix File Routing issues
- Make sure to always add date header
## 9.1.4
- Add `options.download` and `options.name` to `<HttpRequestContext>.printFile()`
## 9.1.3
- Fix OpenAPI not merging when loading routes
## 9.1.2
- Fix `<HttpRequestContext>.bindBody`
## 9.1.1
- Improve performance of `<HttpRequestContext>.wwwAuth`
- Fix some typescript issues on the `WsMessageContext`
- Export `RuntimeError`
## 9.1.0
- Fix issues in templates
- Add back `<HttpRequestContext>.wwwAuth`
- Add back `<HttpRequestContext>.getRateLimit`
- Add back `<HttpRequestContext>.clearRateLimit`
- Add back `<HttpRequestContext>.skipRateLimit`
- Allow Validators to dynamically add openapi using provided options
## 9.0.5
- Do not call finish handler on aborts
## 9.0.4
- Apply `FileLoader` validators properly
## 9.0.3
- Properly handle global context
## 9.0.2
- Split and trim the proxy header
## 9.0.1
- Properly handle `index` on route loading
## 9.0.0
[How to Migrate](https://github.com/0x7d8/NPM_WEB-SERVER/blob/main/migrating/9.md)
- Rewrote everything
- Support for multiple runtimes
- Added Validators
- Added FileLoaders
- Added ability for middlewares to listen to callback ends
- Better Performance, less chunked encoding by default
- Better Proxy Support with IP Whitelisting
- More Compression Control with `minSize`, `maxSize` and `preferOrder`
- Global Middlewares
- Smaller Package Size, not including uws anymore
- More Templates
- Proper SSE and custom chunking support
- Abort Handlers on all requests
- Names and versions for middlewares
- Removed Dashboard
- Removed Traffic, Requests, ... Stats
- Better Context Support for route files
- Replaced `Reference` with `Channel`
- Added `Cookie` Class
- Added `RuntimeError` Class to more easily find the cause of errors
- Internal Routing revamp
- Added `Throttler` Class to limit chunking speed (for example)
- Removed `ctr.printPart`
- Less unnecessary promises
- Allow sending binary and text in websockets
- Dont read request body until requested, improving memory usage when never read
- Typedocs are now all Docs
- New Typedocs (Docs) Style
## 8.8.7
- Allow setting routepath as array for multiple paths that point to same callback
## 8.8.6
- Fix some validation issues
- Allow adding `.redirect` in routeFiles
## 8.8.5
- Allow `null` as `JSONValue`
## 8.8.4
- Improve Content Type
- Allow 0 penalty for ratelimits
## 8.8.3
- Use `ctx.handleError()` instead of manual code
- Fix some issues with `mergeClasses()`
## 8.8.2
- Fix Ratelimit Penalty not being able to be 0
## 8.8.1
- Add Option to validate parseContent input
- Fix `.bindBody` & `.bindMessage` not returning correct data
## 8.8.0
- Validate Method Inputs
- Allow setting redirect type in router
- Remove Body Intellisense for 'GET' requests
- Allow Body & Message Binding with Zod
## 8.7.1
- Fix Compression duplicating data sometimes
## 8.7.0
- Add `html` function
- Fix Route File Rate Limits being overridden
- Fix some JSDocs
## 8.6.10
- Added better JSDocs
- Removed Old Code
- Added `<Server>.getListeningPort()`
## 8.6.9
- Fix WebSocket Message Rate Limits not counting up
## 8.6.8
- Fix Websocket Class Merging
## 8.6.7
- Fix more Typescript related issues
## 8.6.6
- Fix validations not including middleware types
## 8.6.5
- Added Ratelimit Cleanups every 30 seconds
## 8.6.4
- Fix some `@default`'s not being correct
## 8.6.3
- Fix ratelimits spreading up
## 8.6.2
- Fix X-Ratelimit-Remaining not showing if value is 0
## 8.6.1
- Fix some Typescript bugs
## 8.6.0
- Add built in rate limiting
## 8.5.3
- Fix non file based routing adding invalid prefixes
## 8.5.2
- Fix Crash when passing invalid URIs
## 8.5.1
- Fix some typescript related issues
## 8.5.0
- Add basic ability to document Endpoints
- Fix Multipart not parsing correctly
- Dont match 0 length params
## 8.4.5
- Correctly Match Routes ending with a param
## 8.4.4
- Allow validating `.printStream()` and `.printRef()` messages
## 8.4.3
- Respect File Prefixes when loading Routes
## 8.4.2
- Fix Static Files randomizing
## 8.4.1
- Remove accidentally included debug logs
## 8.4.0
- Allow putting parameters anywhere (e.g. `/@{username}/{file}-{version}/download`)
- Use `<Array>.find()` instead of a for .. break loop for searching routes
- Remove Warn Messages relating to old parameters (<...>)
- Update README
## 8.3.5
- Add a Check for negative Indexes when removing reference listeners
## 8.3.4
- Fix Empty web socket messages
- Update Templates
## 8.3.3
- Use `setImmediate()` to schedule instant tasks for web sockets
- Change Dashboard Toast Style
- Scrap custom execution functions for web sockets
- Change Dashboard Color Scheme
- Fix Dashboard Scroll Bars on Browsers with Sidebars
- Clean up some internal code
## 8.3.2
- Update Github Links
## 8.3.1
- Implement `ctr.cookies.delete` and `ctr.cookies.clear`
## 8.3.0
- Correctly Support Custom Status Messages everywhere
- Add `ctr.cookies.set` Support
## 8.2.1
- Remove Funky `Reserved` Type
## 8.2.0
- Upgrade Dependencies
- Correctly Cork Responses
- Add `.printPart()` for partial printing
- Add better JSDoc explainations for request contexts & handler classes
- Stop executing more validations if one fails
- Fix Default Proxy Header being uppercase
## 8.1.6
- Fix Typescript errors related to generics
- Parse Default Headers dynamically on requests to allow dynamic data (when using functions)
- Allow defining globalContext in 3rd server constructor argument
## 8.1.5
- Correctly assign cached params
## 8.1.4
- Make ctx and ctg public on the base context
- Correctly handle .context() method on http and ws definitions
- Add .rawBufferBytes and .rawMessageBytes properties to get Buffers easily
## 8.1.3
- Fix broken Routes when validation is async
## 8.1.2
- Fix BASIC www-authentication
## 8.1.1
- Make sure validations & middleware execute BEFORE actual code
## 8.1.0
- Change Parameters to {param} to be more like the OpenAPI Specification
- Fix some generateOpenAPI Param Issues
## 8.0.4
- Listen for http response event early
## 8.0.3
- Start recieving Body before Middlewares & http request run
## 8.0.2
- Include GlobalContext on .validate() methods
## 8.0.1
- Fix normal route loading (without fileBased loading)
## 8.0.0
- Fix some path Parser Edge Cases
- Fix KV Parser Edge Cases
- Correctly parse Accept-Encoding header according to RFC
- Automatically decide which compression to use based on browser
- Add Option for limiting compression on big files
- Add size() helper to easily define byte sizes
- Split body Option into body & message
- Add .httpCompression & .wsCompression options
- Add an export for rjutils-collection
- Allow excluding compression algorithms from automatically chosen ones
- Add more proxy options
- Only return port from .start()
- replace .setHeader() with headers.set()
- Add .wwwAuth() function to easily check for www-authentication
- Use Promise.all() for header parsing
- Dont require an initial value for references
- Add real read-only valueCollections
- Add .delete() to valueCollections
## 7.9.2
- Send Correct Range Headers
- Check Cache outside of cork
## 7.9.1
- Correctly calculate content-length when using ranges
## 7.9.0
- Fix Backpressure Problems with .printFile()
- Send Content-Length on uncompressed printFile requests
- Allow manually toggling compression on printFile() calls
- Add ParseStream class to parse content in a streamed manner
- Allow printing files over 1GB (seems to only work correctly uncompressed as of now)
## 7.8.9
- Make URLObject properties readonly
- Add internal Log count to dashboard
## 7.8.8
- Add more efficient url parser
## 7.8.7
- Do not free() arraybuffers on requests finishing
## 7.8.6
- Fix ValueCollection.has()
## 7.8.5
- Write correct headers on uncomressed requests
## 7.8.4
- Use all lowercase Header Keys
- Check some Range Header edge cases
- Add cacheLimit Option to limit the number of cached items
- Add Middleware Count to Dashboard
## 7.8.3
- Fix References not being removed correctly
- Handle x-gzip as gzip for compatibility
- Support byte ranges for .printFile()
## 7.8.2
- Provide Fallback for invalid middleware class extensions
- Add Internal AnyClass Type
- Fix class merging (hopefully)
## 7.8.1
- Begin routeCollection Class (UNFINISHED!)
- Add Waterfalling Param Intellisense (not for files though)
- Allow passing a function to .status() that gives a status enum to decide from (NOT ASYNC)
## 7.8.0
- Allow checking how a http body or ws message was parsed as using .bodyType and .messageType
- Export JSONParsed, URLEncodedParsed & MultiPartParsed Types
- Add automatic path parameter intellisense for .params.get()
## 7.7.7
- Improve JSDocs
- export parseContentType
## 7.7.6
- Automatically free() memory at the end of a request
- Show correct memory usage in Dashboard
- Add more JSDocs
## 7.7.5
- Prefer Defined Paths over Static Paths
- Correctly handle invalid multipart
## 7.7.4
- Remove ability to disable body parsing because .rawBody exists
- Automatically parse multipart/form-data
- Use Switch Statement instead of else if for body parsing checks
## 7.7.3
- Automatically parse application/x-www-form-urlencoded into jsons
- export parseKV
## 7.7.2
- Only search for static files on GET Requests
## 7.7.1
- Fix some npm ignore issues
## 7.7.0
- Rewrite Dashboard in React
- Add native Iterator to ValueCollections
- Correctly parse promised content
- Use Logger for default error messages
- Use Mini Event Emitter for http requests
## 7.6.4
- Add Icon to every TypeDoc Page
- Remove unnecessary Variables
- Fix WebSocket Events not working properly
- Rename wSClose Event to wsClose (Fix Typo)
## 7.6.3
- Normalize Posix Paths correctly
## 7.6.2
- Use Posix Paths for FFR
## 7.6.1
- Fix File Based Routing on Windows
## 7.6.0
- Allow getting OpenAPI 3.1 Definitions from the Server with .getOpenAPI3Def()
- Fix Some Typescript Check Lib Errors
- Fix Errors around Compression
## 7.5.1
- Fix some Errors relating to using socket after aborted
- Fix ?undefined query on requests without query
## 7.5.0
- Fix Content Parsing for Promisified Content
- Add File based Routing
## 7.4.0
- Added prettify to more methods
- Added Logging Options
- Allow recursion for promisified content
## 7.3.1
- General Code & Performance Improvements
## 7.3.0
- Add #/s count to dashboard
- Rework Internal Structure to remove Queue
- Add LocalContext to Middleware Class extendor
- Correctly count WebSocket Stats
## 7.2.3
- Decode Cookie and Query Parameters Correctly
- Add Case to parseKV tests
## 7.2.2
- Remove more 'as any's
- Dont Cork on WebSocket printStream's
- Fix some JSDoc Comments
- Remove endRequest Option on Websocket printStream's
- Use Object.assign instead of spreading for default headers in routers
- Add Headers on WebSocket Upgrade requests
## 7.2.1
- Allow Reference Setters to be callbacks
## 7.2.0
- Add Reference System
- Use less 'as any's
- Correctly handle printing Promises
- Make printHTML work correctly on 404 routes
- Fix printHTML with regex routes
- Update Templates
## 7.1.1
- Improve Readme
## 7.1.0
- Switch to custom uWS version
- Remove uwebsockets header
## 7.0.4
- Improve Readme
- Add Logo / Icon
## 7.0.3
- Update Examples
- Fix Reduce on empty arrays
## 7.0.2
- Fix Readme
## 7.0.1
- Fix Typescript Lib Checks
## 7.0.0
- Added some Basic Unit Tests
- Added a new, custom query & cookie parser thats 10x faster than before
- Added a more optimized path parser
- Switched Request Contexts to Classes to save memory & cpu
- Added ability to predefine contexts for routes and make them permanent
- Added ability to manually control the request body as its coming in
- Allow Route Paths to be regular expressions
- Dont Check Cache on every Route iteration
- Renamed Hashes to Fragments to match proper naming conventions
- Define Middlewares in the Server Constructor to allow automatic middleware intellisense
- Rework general Middleware definition system for Typescript
- Renamed .init() on middlewares to .config()
- Require a config for Middlewares to always be passed in
- Added Global Context to Server that applies to everything, including events
- Rework Route Files to support Middleware & Global Context Intellisense
- Upgrade uWebsockets to v20.24.0
## 6.7.1
- Use rjbuild-typescript for building
- Fix broken Attribute parsing
## 6.7.0
- Fix some JSDocs
- Add HTMLComponents
- Upgrade Dependencies
## 6.6.3
- Improve JSDocs
- Added more CLI examples to README
## 6.6.2
- Add .escaped() method to html builder for escaping user input to prevent xss
- Automatically escape direct content to tags
- Fix HTML Function parsing
## 6.6.1
- Fix some JSDocs
- Automatically turn native arrow functions into normal functions for HTML
- Add .if() method to html builder for easy conditional html
## 6.6.0
- Added built-in HTML Builder
## 6.5.1
- Upgrade uWebsockets to v20.23.0
## 6.5.0
- Fix some @default tags being incorrect
- Ignore yarn.lock in cli
- Automatically detect package managers in cli
- Automatically Install dependencies in cli
- Add NodeJS 20 Support and remove NodeJS 19 support
- Upgrade uWebsockets to v20.22.0
- Add Typedocs
## 6.4.2
- Fix Invalid Path in Downloaded File Message
- Fixed some Typos
## 6.4.1
- Add [ Variant ] to cli replace path
## 6.4.0
- Renamed Examples to Templates
- Rework Template System with CLI Support
- Addded more Templates
## 6.3.1
- Instantly show Stats after Websocket connection is established
## 6.3.0
- Added Performance Options
- eTag
- lastModified
- decompressBodies
- Added Custom Dashboard Update Interval
## 6.2.2
- Use getFilesRecursively from rjutils-collection instead of own method
## 6.2.1
- Use predefined Paths for internal Dashboard Routes
## 6.2.0
- Require NodeJS 16, 18 or 19
- Require specific npm, yarn and pnpm versions
- Use rjutils-collection for deep option parsing
- Update Typescript to v5
- Move Typings to seperate folder
- Add ability to prettify parsed jsons
- Serve correct port to start & reload callback
- Improve some general Syntax
- Improve some for-loops
- Export Options Type
## 6.1.1
- Make .validate() method generic like .http() and .ws()
- Upgrade Dependencies
- Fix Typos in README
## 6.1.0
- Allow Passing Types into .http() and .ws() functions for context and body / message properties
- Improve Returntype of .map() on valuecollections to match the returnType of the callback function
- Clean up some code and remove unnecessary imports
## 6.0.3
- Add more JSDocs to Value Collections
- Add .entries() to Value Collections
## 6.0.2
- Fix some outdated JSDocs
- Add Validations to RouteFiles
## 6.0.1
- Fix Router not applying Prefixes to HTTP Routes
## 6.0.0
- Made Internal Router Logic Typesafe
- Turn Router into a Typed EventEmitter
- Add end() functions to all events that would benefit from it
- Upgrade Dependencies
- Make sure all Files use Tabs for identation
- Add defaultHeaders() to the router so it can be applied to specific routes
- Make contentTypes() and defaultHeaders() use callbacks
- Added Last-Modified header to every request that has to do with the file system for better caching
- Added ETag Header to every request using SHA1 to allow better caching (can be disabled using options.cache)
- Improved Event Names
- runtimeError -> httpError
- http404 -> route404
- Add dhparams and ca file to ssl options
- Add Extra Class for Route Files to clean up the process of making ones
- Make HTTP Definitions work similar to websockets
## 5.10.6
- Add file:/// on win32 systems for dynamic imports
## 5.10.5
- Use Relative Paths instead of Absolute ones for ESM Loading to work correctly on Windows
## 5.10.4
- Make sure to actually reresolve win32 paths to posix
## 5.10.3
- Always use POSIX Paths for route loading, even on Windows
## 5.10.2
- Dont Check for Content-Type header when parsing websocket messages
## 5.10.1
- Use Lowercase File Extensions for Readmes
- Add Changelog link to Readme
## 5.10.0
- Add Middleware Cache (ctg.cache.middlewares)
- Add Ability to control the upgrade event of a WebSocket (.onUpgrade)
- Show a minimum of 10 in the requests and all websocket boxes in the dashboard
## 5.9.8
- Add Custom Status Messages to HTTP
- Dont call .toString() on the raw body minimum 2 times every parse
- Allow strings & Buffers for Headers since sometimes Strings are more performant
- If available, directly check the content-length header to decide early if the request should be cancelled
## 5.9.7
- Correctly handle parsed Body Cache
- Clean up some Code
## 5.9.6
- Add domain property to ctr
- Add ctx.isAborted for easy aborted check for middleware
- Dont instantly parse messages in wsClose Events
## 5.9.5
- Only Search for Static Files on GET requests
- Fix Detached ArrayBuffer Errors when POSTing large files
- Add Version Deprecation Infos to README
- Make Bodies & Messages getters to safe memory
- Use allocUnsafe for creating empty Buffers
- Make sure Content-Length exists because uWebsockets v20.20.0 doesnt support chunked encoding
- Error when Content-Length doesnt match the actual length of the Content
- Upgrade npm Dependencies
## 5.9.4
- Change ca to key for SSL
- Add another Space to CLI Prefix
- Bump uWebsockets
## 5.9.3
- Improve External Routers
- Skip spreading results when their length is 0
- Add Link to new Documentation in Readme
## 5.9.2
- Add CONNECT & TRACE HTTP Methods
- Dont activate anything by default in the CLI
- Make handleEvent slightly more Typesafe
- Encode URI Password for Dashboard
## 5.9.1
- Export parseContent & Content Type
- Fix .npmignore
## 5.9.0
- Rework CLI with yargs
- Export Router, pathParser & URLObject to allow for more options
- Type exported Version const as string instead of any
## 5.8.1
- Fix Dashboard Websocket not working on ports other than 80 / 443
## 5.8.0
- Allow Dashboard to use ws:// and wss://
- Add Optional Password to Dashboard
## 5.7.9
- Remove License Year
- Update examples in Readme
- Add C++ Info to Readme
- Fix Pathparser breaking on index routes
## 5.7.8
- Automatically Decompress HTTP Bodies
- Use more Buffers Internally
## 5.7.7
- Add more JSDocs
- Add URL Hashes Support
- Parse URL Hashes correctly in URLObjects
## 5.7.6
- Fix Dashboard Websocket 404
## 5.7.5
- Set ctx.executeCode every time a websocket runs anything
## 5.7.4
- Return Values Correctly
- Add more isAborted Checks
- Remove EventListener Leak
- Add more JSDocs to Options
- Fix Websocket related Crashes
- Fix Websocket Messages Sending Twice
## 5.7.3
- Add wsRequest Event
- Add missing isAborted check @ CORS Headers
## 5.7.2
- Add missing isAborted check
## 5.7.1
- Fix Definition Files
- Update Middleware Example
## 5.7.0
- Add an Enum based of RFC Docs for HTTP Statuses
- Add an Enum based on HTTP Request Methods
- Add a native Middleware Builder
- Add dedicated Stop Function to Middlewares
- Add Init Event to Middlewares
- Add Custom Contexts to Middlewares
- Add Websocket Support to Middlewares
## 5.6.4
- Always make sure request isnt aborted before sending data
- Dont handle CORS headers on WebSockets since it wont affect anything
## 5.6.3
- Remove Debug Logs
## 5.6.2
- Fix Default 404 Page displaying undefined
## 5.6.1
- Dont continue parsing path if Path is undefined
- Use Array.isArray for more safety when path parsing
- Fix Options Parser not following nested Objects correctly
## 5.6.0
- Switch Typescript to strict mode
- Allow undefined for ctr.print()
- Fix errors when using ctr.close() on websockets
- Add Custom URL Object to improve Typescript happiness
- Use DeepRequired for Internal Server Options
- Moved pathParser to URLObject
## 5.5.2
- Add ctr.rawBody and ctr.rawMessage to always allow getting unparsed messages
- Update Basic Chat App Example to add Chat History
## 5.5.1
- Clean up Dashboard Socket Interval when Closing
- Clear Cache correctly when reloading
- Use newer Syntax in some places
## 5.5.0
- Add Websocket Message Count to Dashboard
- Use Websockets for Dashboard Stats
- Allow ctr.print() to be called multiple times in a websocket
- Remove Request ms from Dashboard since it now uses websockets
## 5.4.2
- Check if Request is aborted before upgrading
- Use Internal Header Store for upgrading
## 5.4.1
- Fix Sending Normal & Empty Messages in WebSockets
## 5.4.0
- Add WebSocket Support 🎉
- Fix Broken Caching for Normal Routes
- Fix Issues with Routes Duplicating when reloading
- Cork Correctly on CORS OPTIONS Requests
- Fix Invalid Prefixes when using nested paths
- Export ValueCollection
- Add Chat Website example
## 5.3.1
- Add ability to toggle caching in the Config
- Clean up Type Files
- Add .map() to Value Collections
## 5.3.0
- Rename Interfaces Folder to Types
- Removed headers and contentTypes from Config
- Addded defaultHeaders and contentTypes routers to replace config
- Handle too large HTTP POST Bodies correctly
- Support Sets for print()
- Added more JSDocs to the HTTPRequestContext
## 5.2.2
- Dont leak Headers from the OPTIONS Handler on Requests
## 5.2.1
- Write Headers on OPTIONS Request
## 5.2.0
- Rewrote the entire HTTP Handler to have increased performance & mainstream the queue worker
- All Old Middleware that are using noWaiting will not work properly
## 5.1.2
- Add an Async Queue worker to the Webserver in order to improve async tasks
- Middleware if used should switch from the manual noWaiting to the queue
## 5.1.1
- Fix Problem with the Path parser & the always attached query string
## 5.1.0
- Switch to Uwebsockets for HTTP and HTTPS to allow websockets down the line
## 5.0.0
- Added a Changelog
- Revamped the Router using callbacks
- Stopped waiting for state if it wasnt required
- Added a Global Parsing Function
- Automatically parse Maps to JSON
- Removed Rate Limiting (will be implemented in an external package)
- Improved Event Names
- error -> runtimeError
- request -> httpRequest
- notfound -> http404
- Renamed .add to .http in the Router
- Renamed .prefix to .path in the Router
- Fixed Validations merging to the top
- Improved General Performance
- Removed Error Property from the HTTPRequestContext
- Removed STATIC & STATICDIR from the allowed HTTP Methods (old code)
- Fixed a null error when handling Compression externally