* feat: introduce CSS Helper
* shorten
* feat(css): Implement css helper with callback (#1858)
* feat(css): Implement css helper with callback
* feat(css): add keyframes and pseudo selectors support
* fix(css): Specify missing "context" argument in resolveCallback()
* feat(css): use WeakMap instead of Map, to avoid memory leak
* feat(css): improve CSS helper
* fix(css): fix formatting and types in css helper
* chore: denoify
* docs(css): add experimental flag to css helper
* feat(css): Enable to embed sub `css`.
* fix(css): propagate selector to parent class
* feat(css): Use Record again for usedClassNameData
* feat(css): escape only close tag "</...>", not all slashes. we can use url() without escaping.
* fix(css): embedded `css` must have ";"
* Fix format.
* feat(css): add cx() helper
`cx()` is a helper function to combine multiple css classes.
This function is compatible with `cx()` in @emotion/css.
* feat(css): ignore boolean, null, and undefined values as same as jsx
* chore: denoify
* feat(css): enable to use cx() with external class name
* refactor(css): use symbols for keys
* chore: denoify
---------
Co-authored-by: Taku Amano <taku@taaas.jp>
* refactor: move streaming helper to `streaming/sse.ts`
* feat: add streamSSE's export in streaming handler
* feat: move `stream` and `streamText` to streaming helper
* chore: add deprecated expression for `c.stream` and `c.streamText`
* fix: use `stream` helper in streamSSE
* refactor: move `streamText` to `text.ts`
* test: add some case to `stream` and `streamText`
* test: refactor `streamSSE` case for uniformity
* chore: denoify
* fix: update jsdoc's deprecated description, simplify `c.stream` and `c.streamText`
* fix: match the header notation with that of `streamSSE
* chore: denoify
* refactor: remove unnecesary export
* feat: Ensure that calls to `c.json()` have a type equivalent to `c.jsonT()`
* refactor: Objects with "response" properties are never returned by the handler
* refactor: "status" is not needed in TypedResponse
* refactor: Revive `c.jsonT()` and add @deprecated label
* refactor: Tweaks commenting on "eslint-disable" broken by `format:fix`
* test: Use `c.json()` instead of `c.jsonT()` to make sure there are no problems
* refactor: allow ambiguous type for `c.json()`
* chore: denoify
* fix: Remove unused TypedResponse from import statement
* feat(jsx/streaming): Support Suspense in non-streaming mode.
* feat(jsx): Introduce ErrorBoundary component.
* chore: denoify
* feat: Support ErrorBoundary[fallbackRender].
* chore: denoify
* Rename utils.ts to components.ts
* refactor: export the ErrorBoundary component from the top level.
* fix: tweaks `resolveStream` to work with nested components
* refactor: Import `childrenToString` from `components.ts`
* fix: return immediately if the element is not found
* test: add test for jsx/components
* fix: run `npm run format:fix`
* chore: denoify
* feat(jsx): Support async component.
* chore: denoify
* feat: Support nested async components.
* chore: denoify
* Remove unintended file from commit.
* test(jsx): Add test for html tagged template strings.
* feat: Introduce streaming API with `Suspense` and `use`.
* chore: denoify
* "use" receives only Promise.
* feat: Support multiple calls and nested calls to "use".
* refactor: tweaks replacement script.
* test: Add test for replacement result of streaming
* chore: denoify
* test: Add test "Complex fallback content"
* refactor: Add "typescript-eslint/no-explicit-any".
* Use jsdom instead of happy-dom due to ci failure.
* test: update test data for suspense.
* refactor: Remove excessive exports
* refactor: Changed initialization of `useContexts[]` to clarify intent.
* perf: improve `renderToReadableStream()` performance.
* chore: denoify
* pref: Shortened the output JS a bit.
* pref: Delete unneeded condition
* docs(jsx/streaming): Add `@experimental` flag to streaming API.
* fix(jsx/streadming): fix loop when using fullfilled Promise with null or undefined.
* fix(jsx/streaming): Catch unhandledRejection to avoid streaming not being closed.
* chore(jsx/streaming): Add entries for jsx/streaming to package.json.
* chore: denoify
* feat(jsx/streaming): Support the Async Component inside Suspense.
* chore: denoify
* feat(jsx/streaming): remove implementation of `use()`.
* feat: implement stream api utility-class
* test: write the test of StreamApi
* feat: implement `c.stream` to context
* test: write the test of `c.stream()`
* chore: denoify
* fix: extend for bytes, remove buffer system, add pipe and log interface
* test: update test about log, pipe, etc... for streaming API
* feat: extend textStream interface, remove utf-8 content-type
* test: add test about `c.textStream`
* refactor: update some args name
* chore: denoify
* fix: for deno, removed the optional parameter of `write` and `writeln`
* chore: denoify
* feat: add charset for textStream content-type header
* fix: rename textStream to streamText
* fix: reuse stream in streamText for bundle size
* feat: add `stream.wait()` api
* chore: denoify
* fix: rename `stream.wait` to `stream.sleep`
* test: use `stream.sleep` for waiting
* refactor: remove `stream.log`
* fix: remove preHeader from `c.stream()` and use `transfer-encoding` only `c.streamText()`
* chore: denoify
* refactoring: remove preHeader initialize
* test: reduce sleep duration
* chore: denoify
Co-authored-by: Glen Maddern <glenmaddern@gmail.com>
* feat(context): `c.routerName()`
* chore: denoify
* Enable to get router name via `app.routerName`. (#1110)
---------
Co-authored-by: Taku Amano <taku@taaas.jp>