* Invalid HTTP header error is hidden
This error is captured and never shown which may by misleading. This PR suggest to throw this error directly to the reponse.
* fixed the linter error
* add a test
* denoify
---------
Co-authored-by: Yusuke Wada <yusuke@kamawada.com>
* 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
* fix: References this._s only when paramStash is passed from the router.
* chore: denoify
* fix: remove debug statement.
* test: Fix test for param keys.
* fix(jsx/streaming): Fixed a problem when multiple children are added directly under Suspense.
* refactor: Use `raw()` helper as constructor of `HtmlEscapedString`.
* chore: denoify.
* fix(jsx/streaming): Fix for renderToReadableStream(promise: Promise<HtmlEscapedString>).
* feat(jsx): Define jsxTemplate/jsxAttr/jsxEscape for "@jsx precompile" of Deno 1.38
* chore: denoify
* fix(jsx/streaming): some times jsxDEV is called with null props.
* test(deno-jsx): Add runtime tests for JSX by Deno.
* test: Refactor import map.
* test: Added @jsxImportSource to avoid type warnings
* fix(jsx/streaming): Fixed a bug that caused async components to be evaluated multiple times inside Suspense.
* test(jsx/streaming): The problem of catching the global unhandledRejection and causing an error has been fixed in the vitest.
* 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: types for JSX elements
* make it minimal
* add children
* denoify
* fixed some attributes
* denoify
* `dateTime` to `datetime`
* remove `onxxx`
* feat: Declare in the Hono namespace so that it can be overridden by the user. (#1616)
* feat: Declare in the Hono namespace so that it can be overridden by the user.
* feat: Use interface instead of type to enable overwriting
```ts
declare global {
namespace JSX {
interface IntrinsicElements {
'my-custom-element': Hono.HTMLAttributes & {
'x-event'?: 'click' | 'scroll';
}
}
}
}
```
---------
Co-authored-by: Yusuke Wada <yusuke@kamawada.com>
* remove `onxxx`
* denoify
---------
Co-authored-by: Taku Amano <taku@taaas.jp>
* fix: don't kebab case style property values
* add a test and format
* denoify and `denoify-ignore`
---------
Co-authored-by: Yusuke Wada <yusuke@kamawada.com>
* feat: add "all" option to parseBody
* feat: add parseBody option to `req.parseBody()`
* test: add single value (override) and multiple value cases to praseBody
* test: split parse case of parseBody
* chore: denoify
* refactor(body): make clear parseBody logic
* chore: denoify
* fix: single value of the field should not be parsed to array
* test: add some case of single value's field in "all" option
* chore: denoify
* fix: error to retrieve cookie
TypeError: Cannot read properties of undefined (reading 'split')
* add a test and denoify
---------
Co-authored-by: Yusuke Wada <yusuke@cloudflare.com>
* feat: improvement of parse body
* feat: add test for improvement of parse body commit
* chore: denoify and fix:format
* rm: test file on deno_dist
---------
Co-authored-by: irvan hakim <irvanhakim.dev@gmail.com>
* 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>