Releases
What shipped, and what is still supported.
These notes are pulled from GitHub when this page is built, so they are the same text attached to each tag — not a summary of it. The support line above each list is ours.
Found something exploitable? Mail security@expressive-tea.io rather than opening an issue. An issue is world-readable the moment you press the button.
Green Tea
beta · actively developedGreen Tea versions by calendar, so a number tells you when a release shipped, not how many breaking changes came before it — there is no 1.0 on the way to wait for. The channel is what marks the line: betas carry a -beta.N suffix and publish under npm's beta dist-tag, the API can still change between them, and every change that breaks is named in the changelog. That channel closes at an API freeze and a first stable release, not at a version number. Until then latest resolves to the newest beta because there is nothing else to install — ask for @beta explicitly anyway, so the day a stable ships you stay on the channel you meant. Only the newest beta gets security fixes; there is no backport channel yet.
Added
-
Observability: a correlated lifecycle event stream and an injectable logger. Every request is
given an id — an incomingx-request-idis adopted rather than replaced — and every event of that
request carries it, alongside the matched route pattern (never the concrete URL, which would give
a metrics backend one label per distinct path). Each step reports its own duration.createApp({ logger })accepts any object withdebug/info/warn/error; the default writes structured JSON,
or a readable line on a TTY, decided once at boot. Nothing in core writes toconsole, enforced by a
lint rule rather than by intention.createApp({ logRequests: true })logs one line per request, off
by default. New exports:Logger,LogLevel,LogFields,createDefaultLogger,
withConsoleFallback,logRequests,LifecycleEvent,EventPayload,Correlation.No metrics registry and no OpenTelemetry exporter in core — those live outside it, because core
keeps one runtime dependency. Atraceparentheader is carried through untouched for an exporter to
interpret; core implements no propagation spec. Closes #10. -
A bounded
close()on the Deno and Bun adapters, andcreateApp({ shutdownTimeoutMs })for the
Node one.app.close()returns at its no-server guard on Deno and Bun, so the deadline lives on the
serverserveDeno()/serveBun()returns. One difference the deadline cannot hide: Node and Bun
force the remainder shut, while Deno cannot — aborting a server that is already draining throws from
Deno's own listener, so there the deadline bounds how longclose()waits, not when connections die. -
Shutdown is now an extension point. A
@Providermay declaredispose(), a plugin may call
api.onShutdown(fn), and an application may passcreateApp({ hooks: [{ onShutdown }] })— three
doors into one registry, so an app closing a connection no longer writesprocess.on('SIGTERM')
by hand. Callbacks are awaited, unlikebus.onlisteners, and take no arguments: whatever
needs closing is already in the closure that registered it.They run in reverse boot order, so a
cachethat needsdbcloses before thedbit is holding.
A failing teardown is logged and the rest still run — one broken callback must not leave the
process up. Everything happens insideclose()'s existing deadline;createApp({ teardownTimeoutMs })
reserves a slice of that budget when a connection must get its chance to close, and is rejected at
boot if it exceedsshutdownTimeoutMs.Node, Deno and Bun behave identically — on Deno and Bun the teardown runs from the
close()on the
serverserveDeno()/serveBun()returned. The edge cannot participate: workerd has no
shutdown to intercept, so anything that must be released belongs in the request that acquired it.Nothing changes for existing code.
Plugin's signature is unchanged,Hooksmethods are optional,
anddispose()is called only if present. -
limits.maxConnectionschanges Node's previously unlimited concurrent socket count to a
default cap of1000; values<= 0leave Node unlimited. Deno and Bun have no equivalent
runtime setting and require a platform or reverse-proxy connection cap.
Changed
-
A request that crosses the mesh keeps its identity. The RPC envelope now carries the caller's
requestIdandtraceId, and a teapot adopts them rather than opening a new investigation — the
same rule an incomingx-request-idalready got, applied at the process boundary where a trace
matters most. It also carriesurl, so a proxied handler sees the path its caller asked for.Both fields are optional on the wire and the protocol version does not move:
decodevalidates
only what a frame type requires and passes extras through, so a teapot on an older green-tea
ignores them and keeps answering. That is degraded, not broken. The rule for when the version
does move is now written next to the constant, because "bump on any breaking change" never said
what counts as breaking.The remote-route envelope is also built explicitly instead of cast from the internal request
object, which had been puttingipandprotocolon the wire — fields the protocol never
declared and a teapot could have come to depend on. -
Boot waits for a teapot that is merely slow, and still fails for one that is absent.
createApp({ mesh: { bootTimeoutMs } })gives a teacup a grace period — defaulttimeoutMs, so
30s — in which a teapot that has not finished starting is retried with backoff. When it passes,
the boot still fails, because a provider the graph depends on is not optional: booting without it
would only move the failure to the first request, where it becomes a caller's 503 instead of the
deploy's error.bootTimeoutMs: 0restores a single attempt.A refusal is not retried. A wrong secret or a protocol-version mismatch is the teapot's
decision and will be the same decision in thirty seconds, so it fails immediately rather than
spending the whole budget to reach an identical error. The two are told apart by whether the
socket ever opened — a peer that accepted the connection and then hung up rejected us on purpose;
one that never accepted it may simply not be listening yet.Every retry is logged and emitted as the new
mesh:boot:retrylifecycle event, so a slow boot
is visible to whatever collects events and not only to whoever is watching a terminal. -
.and..in a request path are now resolved rather than 404'd.GET /public/../adminreaches
a route declared as/admin, and%2ecounts as a dot, so the encoded spelling cannot reach a route
the plain one resolves away from. This is a behaviour change on Node only, and it exists to end a
divergence: Deno, Bun and Workers resolve dot segments inside theRequestconstructor before the
framework sees anything, so the same bytes on the wire already reached different routes depending on
where you deployed. Rejecting them — the stricter option, and what this module does for//— is not
implementable on three of the four runtimes. If a proxy or WAF in front of you matches on the literal
path, note that it sees/public/...where the application now routes/admin.
Fixed
-
A mesh export that carried behaviour arrived as
{}, with HTTP 200 and no warning. The wire is
JSON, so a value with methods — a connection pool, a client, aMap— lost everything but its
shape in transit. What reached the caller was an object: truthy, passing anyif (db)check, and
missing every method, so the failure surfaced asdb.query is not a functionat a call site
arbitrarily far from the export that caused it.A teapot now refuses to send one, on the side that still holds the real value, with a message
naming the token and what sat where:mesh cannot transport 'db': result.db is a Pool instance.
The check is an allowlist — primitives, plain objects, arrays — soDateis refused too, since it
would arrive as a string rather than the type the caller declared, which is the same silent
difference in a smaller costume. It is bounded by a scan budget, so a large legitimate payload is
never turned into an error by the cost of checking it.This is a constraint the documentation never stated: a mesh export carries data, never
behaviour. Export what a handle produces, not the handle. -
A mesh teacup now reconnects to a teapot that came back. A dropped link used to stay dead for
the life of the process: every RPC answered 503 until the teacup was restarted, so deploying a
teapot forced a restart of every teacup that depended on it, and boot order became load-bearing.
Links now reconnect with exponential backoff and jitter (500ms doubling to 30s), tunable through
mesh: { reconnect: { initialDelayMs, maxDelayMs } }and disabled withreconnect: false.
close()is terminal — a link the application hung up on never reconnects, soapp.close()cannot
leave a process that refuses to exit.A returning teapot whose manifest no longer exports something the graph was validated against at
boot is refused rather than adopted, named bymesh: { onManifestChange: 'refuse' }, which is
the default and currently the only policy. The link keeps retrying, since a partial deploy may
still restore it, and logs the refusal once per distinct manifest rather than once per attempt.
Serving against a manifest that no longer backs the graph would surface as a 500 that looks like
application code. Extra exports in a returning manifest are ignored: the graph is fixed at boot.This also closes the documented gap where an app-scope export outlived its teapot with a stale
value — a successful reconnect re-registers those bindings, so the next resolve re-runs the RPC.Mesh remains alpha and behind
experimental: true. -
mesh:rpc:errorreported the wire id where every other emitter reports a name. A failing
remote call emittedname: "0"— the per-link request counter — so the teacup's event could not be
lined up with the teapot's event for the same failure. It now names the token or route. -
A teapot now bounds its own handshake and caps the size of a control frame. The teacup has
always timed out its side; the teapot had no equivalent, so an unauthenticated peer could hold a
socket open forever by simply never sendinghello. AnddecoderunsJSON.parseon
peer-controlled input before authentication, with no ceiling below whatever the WebSocket layer
allowed — 100 MiB under thewspackage's defaults. Frames above 4,000,000 characters are now
refused with close code 1009, sized above the 1 MB default body limit a legitimate RPC can carry. -
A
ws://teapot on a non-loopback host now warns at boot. The shared secret travels verbatim
in thehelloframe, so an unencrypted link puts it in front of anyone on the path. A warning
rather than a refusal, since a private network doing its own mutual TLS is a real deployment and
green-tea cannot tell the two apart. -
Buffered response bodies are narrowed to what the host runtime's
Responseaccepts. A Node
Bufferis aUint8Arrayat runtime but its declared backing store admitsSharedArrayBuffer, which
BodyInitdoes not — so Deno's types rejected it. This was a real typing hole on theapp.fetch
path, which is the path Deno, Bun and the edge all use, rather than a JSR formality. -
close()'s shutdown timer is armed beforefinish()is referenced. The previous ordering relied
onserver.close(cb)deferring, which is Node's behaviour rather than a guarantee to us, and left a
ReferenceErrorwaiting in the shutdown path for whoever changed it.
-
Added
-
Safe constrained route parameters: patterns such as
:id(\d+)match a complete decoded
segment. The parser accepts a deliberately small, bounded regex subset and rejects unsafe or
malformed expressions at boot. Specificity is now static ▸ constrained param ▸ plain param ▸
catch-all; matching remains a linear scan. -
@Headand@Optionsroute decorators, explicit-handler priority, buffered-GET HEAD fallback,
and automatic204OPTIONS responses with deterministicAllowordering. GET implies HEAD and
every existing path implies OPTIONS; streaming GET routes do not become implicit HEAD routes. -
OpenAPI route constraints and methods: constrained path params emit
schema.pattern, and
explicitly declared HEAD/OPTIONS handlers appear as operations without inventing automatic ones. -
HTML / views:
@Htmldecorator (string, file, and template modes), a zero-dep built-in
template engine ({{ }}escaped /{{{ }}}raw, exported asrender) with aviewEngine
bring-your-own hook, and zero-configstaticdirectory serving (createApp({ static: true })).
File and static serving require a filesystem (Node/Deno/Bun); string-mode@Htmlruns everywhere. -
app.fetch(request): Promise<Response>— a Web-Standards handler so the
same app runs HTTP and SSE on Deno/Bun/edge runtimes via the Fetch API. -
Deno adapter (
@green-tea/core/deno):serveDeno(app)runs HTTP + SSE + WebSocket on Deno. -
Bun adapter (
@green-tea/core/bun):serveBun(app)runs HTTP + SSE + WebSocket on Bun, reusing the neutralapp.upgrade/WsSocketcapability. WebSocket, rooms, and channels behave identically to Node and Deno. -
Cloudflare Workers / edge adapter (
@green-tea/core/edge):edgeHandler(app)runs HTTP + SSE + WebSocket on workerd, reusing the neutralapp.upgrade/WsSocketcapability. Requires thenodejs_compatcompatibility flag. Green Tea now runs on Node, Deno, Bun, and the edge — with identical WebSocket, rooms, and channel behaviour on all four. -
app.upgrade(request, socket): neutral WebSocket entry point for non-Node runtimes, built on a sharedWsSocketcapability. WebSocket logic is now runtime-agnostic (src/http/ws-core.ts). -
Mesh (alpha) runs on Node, Deno and Bun — teapot and teacup, in any combination
(a Deno teapot can serve a Node teacup). It no longer needsapp.listen(): the graph boots on
first use, soserveDeno/serveBunwork throughapp.fetch/app.upgrade. Edge is not
supported — the teapot's secret comparison needsnode:crypto'stimingSafeEqual, which
nodejs_compatdoes not provide. -
MESH_PROTOCOL_VERSION: the mesh wire is versioned. Peers exchange it in thehello/manifest
frames and refuse a mismatch, naming both versions, instead of misreading each other's frames.
The teapot checks the version before the secret — a skewed peer is not an auth failure. -
HttpErroracceptsheaders, so a custom error can carry its own response headers
(retry-after,etag, …) without a special case in the error renderer. -
app.ready(): Promise<void>— resolves the dependency graph and returns. On a mesh app it
connects the teapots and splices their scopes in; on every other app it is a no-op, so
await app.ready()beforeinspect()/graph()/explain()works against either kind without
knowing which you were handed. It does not boot providers: resolving the graph and being
ready to serve are different things, and drawing a diagram should not open your database
connections. Serving boots them too and shares the same memoized step. -
Mesh heartbeat (
mesh.heartbeatMs, default 15s): each teacup pings its teapots and closes a
link after two unanswered rounds, so a half-open connection surfaces as an immediate 503 rather
than every request payingtimeoutMsfirst. Ping/pong are mesh frames, not WebSocket protocol
pings — the platformWebSocketon Deno/Bun does not exposews.ping().
Fixed
- The Deno WebSocket adapter snapshots request and connection metadata before accepting an upgrade;
Deno 2.9 invalidates that metadata once upgraded, which previously broke WebSocket and mesh boots. - Repeated slashes and malformed path encoding now return
400consistently across Node and Fetch
adapters, retaining configured security/CORS headers./pathand/path/remain equivalent. - Ambiguous same-method route shapes now fail at boot with both declarations named. Effective-shape
checks also cover remote mesh conflicts and local routes that shadow a remote export. - HEAD responses always suppress the body while preserving handler status and headers; Fetch
responses also avoid constructing forbidden bodies for204,205, and304statuses. - The opt-in dev routes
/__graph__(graph viewer) and/__openapi__are now
served overapp.fetchtoo, so they work on every runtime (Deno/Bun/edge),
not only the Nodeapp.listen()path. - A teapot with a live control channel could never shut down. Mesh control connections were
not registered with the stream registry, soserver.close()waited on a connected teacup that
had no reason to hang up, andapp.close()never resolved. - A downed teapot now answers 503 immediately instead of hanging for the full
timeoutMs
(30s by default) and then answering 500. A closed socket cannot deliver the frame, so the wait
bought nothing. An RPC that times out on a live link is now 504, not 500 — a dead upstream and
a slow one are different operational stories, and neither is "this service broke". request:step:enter/leaveare now emitted for@Wsand mesh routes. Only HTTP routes
emitted them, so a logging plugin silently observed nothing on a WebSocket route — a gap in a
documented plugin API. All transports now run their steps through one path.- A mesh route exported by two teapots now fails the boot, naming both effective patterns and
both teapots, instead of silently serving whichever connected first and leaving the other dead.
There is no load balancing to fall back on, so green-tea will not pick for you. - A local route shadowing a remote one now warns. Local still takes precedence — that is how you
override a teapot — but a silently shadowed export used to look like a broken teapot. app.close()closes mesh links even with no server, so a mesh app booted throughapp.fetch
(every Deno/Bun deployment) no longer leaks its teapot connections.- WebSocket frames arriving during boot are no longer dropped.
app.upgradeawaited the boot
before handing the socket to a consumer, and the inbound channel is fan-out, so a peer that spoke
first lost those frames — for mesh, that was the handshake itself. - The plugins guide documented a
request:step:exitevent that has never existed; the bus emits
request:step:leave.
Changed
- Root, runtime-only, and website dependency audits are clean after supported package updates and
narrow pins for vulnerable transitives. CI audits root + website trees and builds the docs; the
GitHub OIDC release workflow audits immediately before its publish gate. - App-scope providers now boot exactly once (memoized): a second
app.listen()
call no longer re-runs provider factories or their side effects. WsOpenCtx.req(available in@Ws/@Ssehandlers) is now a neutral
WsRequest({ url, headers, protocol, ip }) instead of the Node
http.IncomingMessage, so it works the same across Node and Deno. Node-only
fields such asreq.socket/req.rawHeadersare no longer available on
ctx.req; usectx.protocol/ctx.ip/ctx.query/ctx.headers
instead — all still provided.- Breaking (pre-1.0): transport is now enforced by declaration. A buffered route
(@Get/@Head/@Post/@Put/@Patch/@Delete/@Options) whose handler returns an
AsyncIterable, or a streaming route (@Sse/@Ws) whose handler returns a plain value, now
fails with a 500TransportMismatchErrorinstead of silently switching behavior.@Stream
still negotiates both. Declare@Sse/@Stream/@Wsto stream — a return value no longer
changes a route's wire contract.
-
Expressive Tea
stable · security fixes onlyExpressive Tea is finished. The 2.0.x line still receives security patches and dependency updates, and nothing else — no new features, and no fixes for anything that is merely inconvenient. Everything below 2.0 is unsupported, and 1.3.x Beta must not be used at all: it shipped a critical flaw in the Teapot/Teacup gateway encryption and was never promoted to a release.
v2.0.1 Overview
This release focuses on framework stability, boot-order correctness, and test/CI modernization across the
v2.0.0..v2.0.1range.Highlights
- Fixed boot-stage race conditions in HTTP engine by resolving stages sequentially, preventing dependency initialization timing issues in application startup (includes fix for #247).
- Completed migration from Jest to Vitest, including config/setup updates and broad test suite compatibility fixes.
- Improved test reliability with shutdown/cleanup hardening, port/isolation fixes, and expanded engine lifecycle coverage.
- Added extensive new unit/integration/benchmark coverage for boot lifecycle, engine shutdown behavior, health checks, and proxy/module flows.
- Improved core stability and consistency across boot/decorator/engine/helper paths from the comprehensive audit v2 work.
Notable Fix Areas
- HTTP engine stage resolution ordering and startup sequencing.
- EngineRegistry/Boot lifecycle safety and guardrails.
- WebSocket/Socket.IO/HTTP shutdown behavior and listener cleanup.
- Vitest module resolution and test interop/mocking updates.
- CI/test infrastructure updates supporting Vitest-based workflows.
Packages Published
@expressive-tea/core@2.0.1@zerooneit/expressive-tea@2.0.1-patch.1
Issues
- Closes/addresses: #247
Full Changelog
🚀 Expressive Tea v2.0.0 - Major Release
Package Rename
@expressive-tea/core is the new official package name (formerly @zerooneit/expressive-tea)
npm install @expressive-tea/core # or yarn add @expressive-tea/core
⚠️ Breaking ChangesNode.js Version Requirement
- Dropped Node.js 18 - Now requires Node.js 20.0.0+
- Reason: Node.js 18 reached End-of-Life (April 2025) + ESLint 9.x compatibility
- Supported: Node.js 20 LTS and Node.js 22
Package Rename
- New package:
@expressive-tea/core - Legacy package:
@zerooneit/expressive-tea(security patches until April 30, 2026) - Repository: https://github.com/Expressive-Tea/expresive-tea
Deprecated Versions
- All versions before 2.0.0 are deprecated
- No security patches, bug fixes, or support for v1.x
- Upgrade to v2.0.0 immediately
✨ Features
Complete Framework Refactoring
- TypeScript Strict Mode enabled for maximum type safety
- Enhanced Dependency Injection with scoping methods (
registerSingleton,registerTransient,registerScoped) - EngineRegistry for centralized engine management with dependency resolution
- Native Utility Library - removed internal lodash dependencies, reduced bundle size
Health Check System (NEW)
Built-in production-ready health monitoring:
/health- Detailed health status with all checks/health/live- Liveness probe (Kubernetes compatible)/health/ready- Readiness probe with critical check validation@HealthCheckdecorator for custom health checks
Environment Variable Support (NEW)
@Envdecorator for loading .env files- YAML Configuration support (.expressive-tea.yaml)
- Type-safe environment variables with transformation and validation
- Integration with Zod, Yup, and other validation libraries
ESLint 9 Migration
- Migrated to ESLint v9 flat config (
eslint.config.mjs) - 0 errors, 246 acceptable warnings
- Better TypeScript integration and performance
🔒 Security Fixes
Critical Cryptography Improvements
- Fixed AES-256-GCM implementation with proper authentication tags
- HKDF key derivation for cryptographically secure encryption
- PBKDF2 password hashing (replaced insecure MD5)
- Removed plaintext credential logging
- Fixed HTTPS server initialization
🏗️ Infrastructure
CI/CD Improvements
- CircleCI: Updated to Node.js 22 with Yarn 4.x
- GitHub Actions: Complete CI pipeline (lint, type-check, build, test)
- CodeQL: Security scanning with Node.js 20
- Corepack: Enabled for proper Yarn modern (Berry) support
Test Coverage
- 363 tests passing (363/363 - 100%)
- 95.9% statement coverage
- 88.56% branch coverage
- 97.26% function coverage
📦 Installation
# npm npm install @expressive-tea/core # yarn yarn add @expressive-tea/core # pnpm pnpm add @expressive-tea/core
🔄 Migration Guide
From v1.x to v2.0.0
1. Update Package Name
npm uninstall @zerooneit/expressive-tea npm install @expressive-tea/core
2. Upgrade Node.js
# Using nvm nvm install 20 nvm use 20 # Or Node.js 22 nvm install 22 nvm use 22
3. Update imports
// Old import { Boot } from '@zerooneit/expressive-tea'; // New import { Boot } from '@expressive-tea/core';
4. Update package.json
{ "engines": { "node": ">=20.0.0" } }No code changes required - This is primarily a runtime and package rename upgrade.
📊 Statistics
- Files Modified: 113 files
- Tests: 363 passing (148 new tests added)
- Coverage: 95.9% (up from ~80%)
- TypeScript Errors Fixed: 85 strict mode violations
- Security Vulnerabilities Fixed: 3 critical issues
- Documentation: 10 comprehensive guides added
📚 Documentation
- CHANGELOG.md - Complete changelog
- MIGRATION_GUIDE_v2.md - Detailed migration guide
- RELEASE_NOTES_v2.0.0.md - Full release notes
- Configuration Files Guide - YAML config support
- Environment Variables Guide - @env decorator usage
🙏 Acknowledgments
Special thanks to the Expressive Tea community for their patience during this major refactoring. This release represents significant work to modernize the framework while maintaining developer experience.
🐛 Found a Bug?
Report issues at: https://github.com/Expressive-Tea/expresive-tea/issues
📝 License
Apache-2.0
Full Changelog: v1.3.0-Beta.6...v2.0.0
What's Changed
- Maintenance Release by @chrnx-dev in #222
Full Changelog: v1.3.0-Beta.5...v1.3.0-Beta.6
What's Changed
- [FEATURE] Remove Gulp Support by @chrnx-dev in #113
- [PROXYFY] Added Proxify by @chrnx-dev in #151
- [RELEASE] Upgrade Packages by @chrnx-dev in #162
- Feature/upgrade packages by @chrnx-dev in #167
- Bump ts-jest from 28.0.2 to 28.0.3 by @dependabot in #168
- Feature/upgrade packages by @chrnx-dev in #169
- Bump eiows from 4.0.1 to 4.1.2 by @dependabot in #171
- Feature/maintenance release by @chrnx-dev in #206
- [Snyk] Security upgrade socket.io from 4.5.4 to 4.6.0 by @chrnx-dev in #205
Full Changelog: v1.3.0-Beta.1...v1.3.0-Beta.5
What's Changed
- Handling Number responses properly.
- Error Handling respond properly to Expressive Tea Exceptions.
- Added Settings by file .expressive-tea as json file.
- Multiple fixes to microservices core.
What's Changed
- Module Providers settings is now optional.
- Allow pass arguments to Plugin's Constructor.
- Fixes Handling Number Responses.
- Fixes Error Responses as 500 always.
- Remove unused code.
- Code Enhancements.
Full Changelog: v1.2.1...v1.2.2
- Next parameter decorator is not redirect flow to next middleware instead of returns empty responses.
- Outdated and Vulnerabilities dependencies are now solved.
- Improve Boot stages process in order to keep them in the correct order and steps now should place correctly in the internal event loop (not node).
- Added websockets implementation
- Fixed Testing and add integrations testing.
RELEASE] 1.2.0 Release
- View decorator allows us to render a view if a view engine is
configurated. - Added Request, Response Express instances with a specific decorator.
- Get Query, Body parameters directly using parameter decorators.
- Get Url parameters using a parameter decorator.
- Allow Flexibility by allowing use of the returning values as the response on
every decorated Controller Method, if already sent a response using the
response instance is automatically detected. - Allow the Https Configuration.
- Improve Documentation.
- View decorator allows us to render a view if a view engine is
Description
There was a critical issue on the Boot engine when there were more than one plugins assigned. As this creates potential block implementation we create a hotfix to resolve it.
Changelog
- a3c0e01 [HOTFIX] Plugin Issues
Implementations
- Added Static Decorator to allow response to some of the static directories.
- Added Express Directive Decorator to allow configure special settings for express module.
- Modify Documentation Template.
- Added Better Documentation.
- Added plugins to Jsdocs to accept decorators as tags and parse @ symbols on examples.
- Fixed small issues.
Commits Included
- 93ec93f [MAINTENANCE] Fixes Small Issues and Documentation
- 45c6f7e [MAINTENANCE] Fixes Small Issues and Documentation
- cc44044 [MAINTENANCE] Fixes Small Issues and Documentation
- 5662633 [MAINTENANCE] Fixes Small Issues and Documentation
- e46a599 [MAINTENANCE] Fixes Small Issues and Documentation
- 131c7b7 [MAINTENANCE] Small issues and refactoring
- ec51c34 [MAINTENANCE] Fixes Small Issues and Documentation
- 945e336 [MAINTENANCE] Fixes Small Issues and Documentation
- a050c84 [CORE] Publish Tooling
- ae56fc1 [CORE] Publish Tooling
- 40d2528 [CORE] Publish Tooling
- 60d3804 [CORE] Publish Tooling
- a92d774 [CORE] Publish Tooling
- 7e7700c [CORE] Publish Tooling
- 858fa72 [PLUGIN ENGINE] Added Plugin Decorator
- 5b96274 1.1.0
- d7d7c53 [PLUGIN ENGINE] Added Plugin Decorator
- 1276141 [PLUGIN ENGINE] Added Plugin Decorator
- c8aadb5 [PLUGIN ENGINE] Added Plugin Decorator
- 6a58113 [PLUGIN ENGINE] Added Plugin Decorator
- 817810e [DOCUMENTATION] Added Logo
- fe69be9 [DOCUMENTATION] Added Logo
- 871f06c [DOCUMENTATION] Added Logo
- 502f1c6 [DOCUMENTATION] Added Plugin Decorator
- 7244473 [FEATURE] Adding Plugin Structure
- 997700f [FEATURE] Adding Plugin Structure
- a2f08a1 [REFACTORING] Improve Code
- ce043f5 [REFACTORING] Improve Code
- 8372d66 [REFACTORING] Improve Code
- 9e9dab7 [REFACTORING] Improve Code
- 156e2b0 [REFACTORING] Improve Code
- e704314 [TEST] Benchmark Test
- 8b8cd95 [BADGES] Added Test Coverage on Code Climate
- 5943334 [DOCUMENTATION] Update Badges
- 7e933cc Add license scan report and status
[DOCUMENTATION] Added Correct Path to documentation (Diego Resendez) 9076aa4
[DOCUMENTATION] Added Correct Path to documentation (Diego Resendez) 2060f5b
[TESTING FRAMEWORK] Codecov (Diego Resendez) 461508b
[TESTING FRAMEWORK] Codecov (Diego Resendez) 69e7972
[TESTING FRAMEWORK] Codecov (Diego Resendez) 8fc0aee
[TEST] Remove Cache from Travis (Diego Resendez) 5c945bd
[TESTING FRAMEWORK] Jest and Travis (Diego Resendez) b4b552c
[TEST] Test Framework - Adding jest as test framework. - Adding tests (Resendez Prado, Diego) 04924ea
[DOCUMENTATIOM] JSDocs Tags and Documentation (Resendez Prado, Diego) e75374d
[DOCUMENTATION] Added Project Documentation (Resendez Prado, Diego) 03ecdaaExpressive Tea is a simple library which allow to generate RESTful services with Typescript over Expressjs, is ready to start working with the current tool.
- Improve stability.
- Made little changes over decorators.
- Removing Non used code or files.
- Adding Types.