Compare commits
103 Commits
@hono/sent
...
main
Author | SHA1 | Date |
---|---|---|
|
80481dd5ed | |
|
1baa0b281d | |
|
5cba9a4819 | |
|
acff470c7f | |
|
9235709060 | |
|
40f916f944 | |
|
a2409d2314 | |
|
cf3c17e3d1 | |
|
7c6a860814 | |
|
be73703184 | |
|
2f57dd5ebb | |
|
bb56b3176e | |
|
ede1aaff4f | |
|
44b1c24b95 | |
|
b73b7aed29 | |
|
a7ee664c98 | |
|
86a4ca460d | |
|
0758fd0af1 | |
|
d4cc24f754 | |
|
c880649458 | |
|
3c1ecb0ce9 | |
|
b8802e01b7 | |
|
0bda87e4ee | |
|
1cdfdbd292 | |
|
aaf90c39e6 | |
|
641fd4c3de | |
|
f0475c7324 | |
|
8303d979f1 | |
|
50aa61d9c2 | |
|
e1eae2078f | |
|
ab390305fb | |
|
3a9920a258 | |
|
b6f3bc674b | |
|
683455895d | |
|
1adca4c918 | |
|
471cf0580d | |
|
a70d91950f | |
|
d05b6158ec | |
|
69a0a586f5 | |
|
3c70dcd6ae | |
|
858c6b4fc3 | |
|
ccc49dd508 | |
|
2fccb8b764 | |
|
5c3f61f889 | |
|
c97fcf08b2 | |
|
9afa292ca5 | |
|
a62b59f450 | |
|
deeeac9e1c | |
|
52a1d46cd2 | |
|
7585969171 | |
|
7a45d5749d | |
|
8fafbc1d4d | |
|
cf48336cbd | |
|
2c917b33a4 | |
|
1ca88da019 | |
|
74d0fe0cb4 | |
|
d29f2cbdc6 | |
|
e63499755a | |
|
7717755dd3 | |
|
026e1deac3 | |
|
7d3aa32e79 | |
|
20d3fd1fe5 | |
|
414f0a6c95 | |
|
0debb59474 | |
|
bed23c62f5 | |
|
b8453438b6 | |
|
0dc8b719b4 | |
|
01cd896e9b | |
|
928f8cd5b8 | |
|
1765a9a3aa | |
|
247f7705b3 | |
|
8ed99d9d79 | |
|
b9fa57530a | |
|
a756d2235b | |
|
237bff1b82 | |
|
abb260632f | |
|
63a9dff2b9 | |
|
6c36f525f9 | |
|
944f1989f5 | |
|
a1fcb554ef | |
|
684ae9a21d | |
|
ca3cada076 | |
|
362b6701a6 | |
|
bebdfa2a88 | |
|
26d0efb036 | |
|
73c899bc81 | |
|
99e7bf2e64 | |
|
ad4622a853 | |
|
542391f8db | |
|
1fd8ebf9b6 | |
|
9f3027a4a0 | |
|
448a8fc687 | |
|
f349fba499 | |
|
091b182a6a | |
|
e8512f0ee9 | |
|
5dd598f499 | |
|
519404ad2c | |
|
b18f24379b | |
|
9a536e6abb | |
|
b70735cc6c | |
|
b0e0d40be4 | |
|
7b1d2393a5 | |
|
8e6961ec9b |
|
@ -1,30 +0,0 @@
|
||||||
name: ci-ajv-validator
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/ajv-validator/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/ajv-validator/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/ajv-validator
|
|
||||||
- run: yarn workspace @hono/ajv-validator build
|
|
||||||
- run: yarn workspace @hono/ajv-validator publint
|
|
||||||
- run: yarn test --coverage --project @hono/ajv-validator
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: ajv-validator
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-arktype-validator
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/arktype-validator/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/arktype-validator/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/arktype-validator
|
|
||||||
- run: yarn workspace @hono/arktype-validator build
|
|
||||||
- run: yarn workspace @hono/arktype-validator publint
|
|
||||||
- run: yarn test --coverage --project @hono/arktype-validator
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: arktype-validator
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-auth-js
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/auth-js/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/auth-js/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/auth-js
|
|
||||||
- run: yarn workspace @hono/auth-js build
|
|
||||||
- run: yarn workspace @hono/auth-js publint
|
|
||||||
- run: yarn test --coverage --project @hono/auth-js
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: auth-js
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -20,6 +20,9 @@ jobs:
|
||||||
- run: yarn workspaces focus hono-middleware @hono/bun-transpiler
|
- run: yarn workspaces focus hono-middleware @hono/bun-transpiler
|
||||||
- run: yarn workspace @hono/bun-transpiler build
|
- run: yarn workspace @hono/bun-transpiler build
|
||||||
- run: yarn workspace @hono/bun-transpiler publint
|
- run: yarn workspace @hono/bun-transpiler publint
|
||||||
|
- run: yarn workspace @hono/bun-transpiler typecheck
|
||||||
|
- run: yarn eslint packages/bun-transpiler
|
||||||
|
- run: yarn prettier --check . !packages packages/bun-transpiler
|
||||||
- run: yarn workspace @hono/bun-transpiler test --coverage --coverage-reporter lcov
|
- run: yarn workspace @hono/bun-transpiler test --coverage --coverage-reporter lcov
|
||||||
- uses: codecov/codecov-action@v5
|
- uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-casbin
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/casbin/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/casbin/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/casbin
|
|
||||||
- run: yarn workspace @hono/casbin build
|
|
||||||
- run: yarn workspace @hono/casbin publint
|
|
||||||
- run: yarn test --coverage --project @hono/casbin
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: casbin
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-class-validator
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/class-validator/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/class-validator/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/class-validator
|
|
||||||
- run: yarn workspace @hono/class-validator build
|
|
||||||
- run: yarn workspace @hono/class-validator publint
|
|
||||||
- run: yarn test --coverage --project @hono/class-validator
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: class-validator
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-clerk-auth
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/clerk-auth/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/clerk-auth/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/clerk-auth
|
|
||||||
- run: yarn workspace @hono/clerk-auth build
|
|
||||||
- run: yarn workspace @hono/clerk-auth publint
|
|
||||||
- run: yarn test --coverage --project @hono/clerk-auth
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: clerk-auth
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-cloudflare-access
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/cloudflare-access/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/cloudflare-access/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/cloudflare-access
|
|
||||||
- run: yarn workspace @hono/cloudflare-access build
|
|
||||||
- run: yarn workspace @hono/cloudflare-access publint
|
|
||||||
- run: yarn test --coverage --project @hono/cloudflare-access
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: cloudflare-access
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-conform-validator
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/conform-validator/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/conform-validator/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/conform-validator
|
|
||||||
- run: yarn workspace @hono/conform-validator build
|
|
||||||
- run: yarn workspace @hono/conform-validator publint
|
|
||||||
- run: yarn test --coverage --project @hono/conform-validator
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: conform-validator
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-effect-validator
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/effect-validator/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/effect-validator/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/effect-validator
|
|
||||||
- run: yarn workspace @hono/effect-validator build
|
|
||||||
- run: yarn workspace @hono/effect-validator publint
|
|
||||||
- run: yarn test --coverage --project @hono/effect-validator
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: effect-validator
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-esbuild-transpiler
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/esbuild-transpiler/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/esbuild-transpiler/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/esbuild-transpiler
|
|
||||||
- run: yarn workspace @hono/esbuild-transpiler build
|
|
||||||
- run: yarn workspace @hono/esbuild-transpiler publint
|
|
||||||
- run: yarn test --coverage --project @hono/esbuild-transpiler
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: esbuild-transpiler
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-event-emitter
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/event-emitter/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/event-emitter/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/event-emitter
|
|
||||||
- run: yarn workspace @hono/event-emitter build
|
|
||||||
- run: yarn workspace @hono/event-emitter publint
|
|
||||||
- run: yarn test --coverage --project @hono/event-emitter
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: event-emitter
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-firebase-auth
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/firebase-auth/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/firebase-auth/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/firebase-auth
|
|
||||||
- run: yarn workspace @hono/firebase-auth build
|
|
||||||
- run: yarn workspace @hono/firebase-auth publint
|
|
||||||
- run: yarn test --coverage --project @hono/firebase-auth
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: firebase-auth
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-graphql-server
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/graphql-server/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/graphql-server/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/graphql-server
|
|
||||||
- run: yarn workspace @hono/graphql-server build
|
|
||||||
- run: yarn workspace @hono/graphql-server publint
|
|
||||||
- run: yarn test --coverage --project @hono/graphql-server
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: graphql-server
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-hello
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/hello/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/hello/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/hello
|
|
||||||
- run: yarn workspace @hono/hello build
|
|
||||||
- run: yarn workspace @hono/hello publint
|
|
||||||
- run: yarn test --coverage --project @hono/hello
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: hello
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,17 +0,0 @@
|
||||||
name: ci-lint
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
eslint:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn install
|
|
||||||
- run: yarn lint
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-medley-router
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/medley-router/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/medley-router/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/medley-router
|
|
||||||
- run: yarn workspace @hono/medley-router build
|
|
||||||
- run: yarn workspace @hono/medley-router publint
|
|
||||||
- run: yarn test --coverage --project @hono/medley-router
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: medley-router
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-node-ws
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/node-ws/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/node-ws/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/node-ws
|
|
||||||
- run: yarn workspace @hono/node-ws build
|
|
||||||
- run: yarn workspace @hono/node-ws publint
|
|
||||||
- run: yarn test --coverage --project @hono/node-ws
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: node-ws
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-oauth-providers
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/oauth-providers/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/oauth-providers/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/oauth-providers
|
|
||||||
- run: yarn workspace @hono/oauth-providers build
|
|
||||||
- run: yarn workspace @hono/oauth-providers publint
|
|
||||||
- run: yarn test --coverage --project @hono/oauth-providers
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: oauth-providers
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-oidc-auth
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/oidc-auth/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/oidc-auth/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/oidc-auth
|
|
||||||
- run: yarn workspace @hono/oidc-auth build
|
|
||||||
- run: yarn workspace @hono/oidc-auth publint
|
|
||||||
- run: yarn test --coverage --project @hono/oidc-auth
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: oidc-auth
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-otel
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/otel/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/otel/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/otel
|
|
||||||
- run: yarn workspace @hono/otel build
|
|
||||||
- run: yarn workspace @hono/otel publint
|
|
||||||
- run: yarn test --coverage --project @hono/otel
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: otel
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-prometheus
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/prometheus/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/prometheus/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/prometheus
|
|
||||||
- run: yarn workspace @hono/prometheus build
|
|
||||||
- run: yarn workspace @hono/prometheus publint
|
|
||||||
- run: yarn test --coverage --project @hono/prometheus
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: prometheus
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-qwik-city
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/qwik-city/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/qwik-city/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/qwik-city
|
|
||||||
- run: yarn workspace @hono/qwik-city build
|
|
||||||
- run: yarn workspace @hono/qwik-city publint
|
|
||||||
# - run: yarn test --coverage --project @hono/qwik-city
|
|
||||||
# - uses: codecov/codecov-action@v5
|
|
||||||
# with:
|
|
||||||
# fail_ci_if_error: true
|
|
||||||
# directory: ./coverage
|
|
||||||
# flags: qwik-city
|
|
||||||
# env:
|
|
||||||
# CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-react-compat
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/react-compat/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/react-compat/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/react-compat
|
|
||||||
- run: yarn workspace @hono/react-compat build
|
|
||||||
- run: yarn workspace @hono/react-compat publint
|
|
||||||
# - run: yarn test --coverage --project @hono/react-compat
|
|
||||||
# - uses: codecov/codecov-action@v5
|
|
||||||
# with:
|
|
||||||
# fail_ci_if_error: true
|
|
||||||
# directory: ./coverage
|
|
||||||
# flags: react-compat
|
|
||||||
# env:
|
|
||||||
# CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-react-renderer
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/react-renderer/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/react-renderer/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/react-renderer
|
|
||||||
- run: yarn workspace @hono/react-renderer build
|
|
||||||
- run: yarn workspace @hono/react-renderer publint
|
|
||||||
- run: yarn test --coverage --project @hono/react-renderer
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: react-renderer
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-sentry
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/sentry/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/sentry/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/sentry
|
|
||||||
- run: yarn workspace @hono/sentry build
|
|
||||||
- run: yarn workspace @hono/sentry publint
|
|
||||||
- run: yarn test --coverage --project @hono/sentry
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: sentry
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-standard-validator
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/standard-validator/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/standard-validator/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/standard-validator
|
|
||||||
- run: yarn workspace @hono/standard-validator build
|
|
||||||
- run: yarn workspace @hono/standard-validator publint
|
|
||||||
- run: yarn test --coverage --project @hono/standard-validator
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: standard-validator
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-swagger-editor
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/swagger-editor/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/swagger-editor/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/swagger-editor
|
|
||||||
- run: yarn workspace @hono/swagger-editor build
|
|
||||||
- run: yarn workspace @hono/swagger-editor publint
|
|
||||||
- run: yarn test --coverage --project @hono/swagger-editor
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: swagger-editor
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-swagger-ui
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/swagger-ui/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/swagger-ui/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/swagger-ui
|
|
||||||
- run: yarn workspace @hono/swagger-ui build
|
|
||||||
- run: yarn workspace @hono/swagger-ui publint
|
|
||||||
- run: yarn test --coverage --project @hono/swagger-ui
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: swagger-ui
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-trpc-server
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/trpc-server/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/trpc-server/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/trpc-server
|
|
||||||
- run: yarn workspace @hono/trpc-server build
|
|
||||||
- run: yarn workspace @hono/trpc-server publint
|
|
||||||
- run: yarn test --coverage --project @hono/trpc-server
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: trpc-server
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-tsyringe
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/tsyringe/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/tsyringe/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/tsyringe
|
|
||||||
- run: yarn workspace @hono/tsyringe build
|
|
||||||
- run: yarn workspace @hono/tsyringe publint
|
|
||||||
- run: yarn test --coverage --project @hono/tsyringe
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: tsyringe
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-typebox-validator
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/typebox-validator/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/typebox-validator/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/typebox-validator
|
|
||||||
- run: yarn workspace @hono/typebox-validator build
|
|
||||||
- run: yarn workspace @hono/typebox-validator publint
|
|
||||||
- run: yarn test --coverage --project @hono/typebox-validator
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: typebox-validator
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-typia-validator
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/typia-validator/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/typia-validator/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/typia-validator
|
|
||||||
- run: yarn workspace @hono/typia-validator build
|
|
||||||
- run: yarn workspace @hono/typia-validator publint
|
|
||||||
- run: yarn test --coverage --project @hono/typia-validator
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: typia-validator
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
name: Sync robots.json
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# Runs every day at midnight
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sync-and-pr:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Node.js and Yarn
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '22'
|
||||||
|
cache: 'yarn'
|
||||||
|
|
||||||
|
- run: yarn workspaces focus hono-middleware @hono/ua-blocker
|
||||||
|
|
||||||
|
- name: Fetch latest robots.json
|
||||||
|
run: yarn workspace @hono/ua-blocker getrobotstxt
|
||||||
|
|
||||||
|
- name: Generate data
|
||||||
|
run: yarn workspace @hono/ua-blocker prebuild
|
||||||
|
|
||||||
|
- name: Create Pull Request if changes exist
|
||||||
|
uses: peter-evans/create-pull-request@v6
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
commit-message: 'chore(ua-blocker): update robots.json from upstream'
|
||||||
|
title: 'chore(ua-blocker): update robots.json from upstream'
|
||||||
|
body: 'This PR was automatically created after detecting changes in the upstream `robots.json` file.'
|
||||||
|
branch: 'chore/sync-robots-json'
|
||||||
|
delete-branch: true
|
||||||
|
# Assignee and labels
|
||||||
|
assignees: finxol
|
||||||
|
reviewers: finxol
|
||||||
|
labels: robots.json
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-valibot-validator
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/valibot-validator/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/valibot-validator/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/valibot-validator
|
|
||||||
- run: yarn workspace @hono/valibot-validator build
|
|
||||||
- run: yarn workspace @hono/valibot-validator publint
|
|
||||||
- run: yarn test --coverage --project @hono/valibot-validator
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: valibot-validator
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-zod-openapi
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/zod-openapi/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/zod-openapi/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/zod-openapi
|
|
||||||
- run: yarn workspace @hono/zod-openapi build
|
|
||||||
- run: yarn workspace @hono/zod-openapi publint
|
|
||||||
- run: yarn test --coverage --project @hono/zod-openapi
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: zod-openapi
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -1,30 +0,0 @@
|
||||||
name: ci-zod-validator
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- 'packages/zod-validator/**'
|
|
||||||
pull_request:
|
|
||||||
branches: ['*']
|
|
||||||
paths:
|
|
||||||
- 'packages/zod-validator/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- run: yarn workspaces focus hono-middleware @hono/zod-validator
|
|
||||||
- run: yarn workspace @hono/zod-validator build
|
|
||||||
- run: yarn workspace @hono/zod-validator publint
|
|
||||||
- run: yarn test --coverage --project @hono/zod-validator
|
|
||||||
- uses: codecov/codecov-action@v5
|
|
||||||
with:
|
|
||||||
fail_ci_if_error: true
|
|
||||||
directory: ./coverage
|
|
||||||
flags: zod-validator
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
name: ci
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: ['*']
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
what-changed:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
packages: ${{ steps.set-packages.outputs.packages }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20.x
|
||||||
|
- name: Get changed packages
|
||||||
|
id: set-packages
|
||||||
|
run: |
|
||||||
|
exclude=(
|
||||||
|
"hono-middleware"
|
||||||
|
"@hono/bun-transpiler"
|
||||||
|
);
|
||||||
|
changed=$(yarn workspaces list --json --since | jq -nc '[inputs.name | select(any(.; inside($ARGS.positional[])) | not) | sub("@hono/"; "")]' --args "${exclude[@]}")
|
||||||
|
echo "packages=${changed}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [what-changed]
|
||||||
|
if: ${{ needs.what-changed.outputs.packages != '[]' }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
package: ${{ fromJSON(needs.what-changed.outputs.packages) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20.x
|
||||||
|
- run: yarn workspaces focus hono-middleware @hono/${{ matrix.package }}
|
||||||
|
- run: yarn workspaces foreach --topological --recursive --from @hono/${{ matrix.package }} run publint
|
||||||
|
- run: yarn workspace @hono/${{ matrix.package }} typecheck
|
||||||
|
- run: yarn eslint packages/${{ matrix.package }}
|
||||||
|
- run: yarn prettier --check . !packages packages/${{ matrix.package }}
|
||||||
|
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [what-changed]
|
||||||
|
if: ${{ needs.what-changed.outputs.packages != '[]' }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
package: ${{ fromJSON(needs.what-changed.outputs.packages) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20.x
|
||||||
|
- run: yarn workspaces focus hono-middleware @hono/${{ matrix.package }}
|
||||||
|
- run: yarn workspaces foreach --topological --recursive --from @hono/${{ matrix.package }} run build
|
||||||
|
- run: yarn test --coverage --project @hono/${{ matrix.package }}
|
||||||
|
id: test
|
||||||
|
if: ${{ matrix.package != 'qwik-city' && matrix.package != 'react-compat' }}
|
||||||
|
- uses: codecov/codecov-action@v5
|
||||||
|
if: ${{ matrix.package != 'qwik-city' && matrix.package != 'react-compat' }}
|
||||||
|
with:
|
||||||
|
fail_ci_if_error: true
|
||||||
|
directory: ./coverage
|
||||||
|
flags: ${{ matrix.package }}
|
||||||
|
env:
|
||||||
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
@ -26,11 +26,17 @@ jobs:
|
||||||
- name: Build
|
- name: Build
|
||||||
run: yarn build
|
run: yarn build
|
||||||
|
|
||||||
|
- name: Set NPM Auth Token
|
||||||
|
run: yarn config set npmAuthToken ${NPM_TOKEN}
|
||||||
|
env:
|
||||||
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
|
|
||||||
- name: Create Release Pull Request or Publish to npm
|
- name: Create Release Pull Request or Publish to npm
|
||||||
id: changesets
|
id: changesets
|
||||||
uses: changesets/action@v1
|
uses: changesets/action@v1
|
||||||
with:
|
with:
|
||||||
publish: yarn changeset publish
|
publish: yarn run publish
|
||||||
|
version: yarn changeset version
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
|
|
|
@ -3,7 +3,7 @@ dist
|
||||||
node_modules
|
node_modules
|
||||||
*.tgz
|
*.tgz
|
||||||
coverage
|
coverage
|
||||||
|
.eslintcache
|
||||||
.yarn/*
|
.yarn/*
|
||||||
!.yarn/cache
|
!.yarn/cache
|
||||||
!.yarn/patches
|
!.yarn/patches
|
||||||
|
@ -15,4 +15,11 @@ yarn-error.log
|
||||||
|
|
||||||
# for debug or playing
|
# for debug or playing
|
||||||
sandbox
|
sandbox
|
||||||
*.log
|
*.log
|
||||||
|
|
||||||
|
# Claude Code local files
|
||||||
|
CLAUDE.local.md
|
||||||
|
settings.local.json
|
||||||
|
|
||||||
|
# Code editor
|
||||||
|
.zed
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
.changeset
|
||||||
|
.vscode
|
||||||
|
.yarn
|
||||||
|
|
||||||
|
# Casbin
|
||||||
|
*.conf
|
||||||
|
*.csv
|
||||||
|
|
||||||
|
**/generated.ts
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
||||||
|
nmHoistingLimits: workspaces
|
||||||
|
|
||||||
nodeLinker: node-modules
|
nodeLinker: node-modules
|
||||||
|
|
||||||
yarnPath: .yarn/releases/yarn-4.0.2.cjs
|
yarnPath: .yarn/releases/yarn-4.9.2.cjs
|
||||||
|
|
||||||
nmHoistingLimits: 'workspaces'
|
|
||||||
|
|
|
@ -1,6 +1,61 @@
|
||||||
|
import baseConfig from '@hono/eslint-config'
|
||||||
import { defineConfig, globalIgnores } from 'eslint/config'
|
import { defineConfig, globalIgnores } from 'eslint/config'
|
||||||
import baseConfig from './packages/eslint-config/index.js'
|
|
||||||
|
|
||||||
export default defineConfig(globalIgnores(['.yarn', '**/dist']), {
|
export default defineConfig(globalIgnores(['.yarn', '**/coverage', '**/dist']), {
|
||||||
extends: baseConfig,
|
extends: baseConfig,
|
||||||
|
|
||||||
|
languageOptions: {
|
||||||
|
parserOptions: {
|
||||||
|
projectService: true,
|
||||||
|
tsconfigRootDir: import.meta.dirname,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
linterOptions: {
|
||||||
|
reportUnusedDisableDirectives: 'error',
|
||||||
|
reportUnusedInlineConfigs: 'error',
|
||||||
|
},
|
||||||
|
|
||||||
|
rules: {
|
||||||
|
'@typescript-eslint/await-thenable': 'off',
|
||||||
|
'@typescript-eslint/consistent-indexed-object-style': 'off',
|
||||||
|
'@typescript-eslint/consistent-type-definitions': 'off',
|
||||||
|
'@typescript-eslint/dot-notation': 'off',
|
||||||
|
'@typescript-eslint/no-base-to-string': 'off',
|
||||||
|
'@typescript-eslint/no-confusing-void-expression': 'off',
|
||||||
|
'@typescript-eslint/no-deprecated': 'off',
|
||||||
|
'@typescript-eslint/no-duplicate-type-constituents': 'off',
|
||||||
|
'@typescript-eslint/no-dynamic-delete': 'off',
|
||||||
|
'@typescript-eslint/no-floating-promises': 'off',
|
||||||
|
'@typescript-eslint/no-invalid-void-type': 'off',
|
||||||
|
'@typescript-eslint/no-misused-promises': 'off',
|
||||||
|
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||||
|
'@typescript-eslint/no-redundant-type-constituents': 'off',
|
||||||
|
'@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off',
|
||||||
|
'@typescript-eslint/no-unnecessary-condition': 'off',
|
||||||
|
'@typescript-eslint/no-unnecessary-template-expression': 'off',
|
||||||
|
'@typescript-eslint/no-unnecessary-type-arguments': 'off',
|
||||||
|
'@typescript-eslint/no-unnecessary-type-assertion': 'off',
|
||||||
|
'@typescript-eslint/no-unnecessary-type-parameters': 'off',
|
||||||
|
'@typescript-eslint/no-unsafe-argument': 'off',
|
||||||
|
'@typescript-eslint/no-unsafe-assignment': 'off',
|
||||||
|
'@typescript-eslint/no-unsafe-call': 'off',
|
||||||
|
'@typescript-eslint/no-unsafe-enum-comparison': 'off',
|
||||||
|
'@typescript-eslint/no-unsafe-member-access': 'off',
|
||||||
|
'@typescript-eslint/no-unsafe-return': 'off',
|
||||||
|
'@typescript-eslint/no-useless-constructor': 'off',
|
||||||
|
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
|
||||||
|
'@typescript-eslint/only-throw-error': 'off',
|
||||||
|
'@typescript-eslint/prefer-function-type': 'off',
|
||||||
|
'@typescript-eslint/prefer-includes': 'off',
|
||||||
|
'@typescript-eslint/prefer-nullish-coalescing': 'off',
|
||||||
|
'@typescript-eslint/prefer-optional-chain': 'off',
|
||||||
|
'@typescript-eslint/prefer-regexp-exec': 'off',
|
||||||
|
'@typescript-eslint/prefer-return-this-type': 'off',
|
||||||
|
'@typescript-eslint/require-await': 'off',
|
||||||
|
'@typescript-eslint/restrict-plus-operands': 'off',
|
||||||
|
'@typescript-eslint/restrict-template-expressions': 'off',
|
||||||
|
'@typescript-eslint/unbound-method': 'off',
|
||||||
|
'@typescript-eslint/unified-signatures': 'off',
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
62
package.json
62
package.json
|
@ -8,48 +8,17 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:hello": "yarn workspace @hono/hello build",
|
"build": "yarn workspaces foreach --all --topological --verbose run build",
|
||||||
"build:zod-validator": "yarn workspace @hono/zod-validator build",
|
"publint": "yarn workspaces foreach --all --topological --verbose run publint",
|
||||||
"build:class-validator": "yarn workspace @hono/class-validator build",
|
"publish": "yarn workspaces foreach --all --no-private --topological --verbose npm publish --tolerate-republish && changeset tag",
|
||||||
"build:arktype-validator": "yarn workspace @hono/arktype-validator build",
|
"typecheck": "yarn tsc --build",
|
||||||
"build:qwik-city": "yarn workspace @hono/qwik-city build",
|
"typecheck:clean": "yarn tsc --build --clean",
|
||||||
"build:graphql-server": "yarn workspace @hono/graphql-server build",
|
"typecheck:watch": "yarn tsc --build --watch",
|
||||||
"build:sentry": "yarn workspace @hono/sentry build",
|
|
||||||
"build:firebase-auth": "yarn workspace @hono/firebase-auth build",
|
|
||||||
"build:trpc-server": "yarn workspace @hono/trpc-server build",
|
|
||||||
"build:clerk-auth": "yarn workspace @hono/clerk-auth build",
|
|
||||||
"build:typebox-validator": "yarn workspace @hono/typebox-validator build",
|
|
||||||
"build:medley-router": "yarn workspace @hono/medley-router build",
|
|
||||||
"build:valibot-validator": "yarn workspace @hono/valibot-validator build",
|
|
||||||
"build:zod-openapi": "yarn workspace @hono/zod-openapi install && yarn workspace @hono/zod-openapi build",
|
|
||||||
"build:typia-validator": "yarn workspace @hono/typia-validator build",
|
|
||||||
"build:swagger-ui": "yarn workspace @hono/swagger-ui build",
|
|
||||||
"build:swagger-editor": "yarn workspace @hono/swagger-editor build",
|
|
||||||
"build:esbuild-transpiler": "yarn workspace @hono/esbuild-transpiler build",
|
|
||||||
"build:event-emitter": "yarn workspace @hono/event-emitter build",
|
|
||||||
"build:oauth-providers": "yarn workspace @hono/oauth-providers build",
|
|
||||||
"build:react-renderer": "yarn workspace @hono/react-renderer build",
|
|
||||||
"build:auth-js": "yarn workspace @hono/auth-js build",
|
|
||||||
"build:bun-transpiler": "yarn workspace @hono/bun-transpiler build",
|
|
||||||
"build:prometheus": "yarn workspace @hono/prometheus build",
|
|
||||||
"build:oidc-auth": "yarn workspace @hono/oidc-auth build",
|
|
||||||
"build:node-ws": "yarn workspace @hono/node-ws build",
|
|
||||||
"build:react-compat": "yarn workspace @hono/react-compat build",
|
|
||||||
"build:effect-validator": "yarn workspace @hono/effect-validator build",
|
|
||||||
"build:conform-validator": "yarn workspace @hono/conform-validator build",
|
|
||||||
"build:casbin": "yarn workspace @hono/casbin build",
|
|
||||||
"build:ajv-validator": "yarn workspace @hono/ajv-validator build",
|
|
||||||
"build:tsyringe": "yarn workspace @hono/tsyringe build",
|
|
||||||
"build:cloudflare-access": "yarn workspace @hono/cloudflare-access build",
|
|
||||||
"build:standard-validator": "yarn workspace @hono/standard-validator build",
|
|
||||||
"build:otel": "yarn workspace @hono/otel build",
|
|
||||||
"build": "yarn workspaces foreach --all --parallel --topological --verbose run build",
|
|
||||||
"publint": "yarn workspaces foreach --all --parallel --topological --verbose run publint",
|
|
||||||
"test": "vitest",
|
"test": "vitest",
|
||||||
"lint": "eslint 'packages/**/*.{ts,tsx}'",
|
"lint": "eslint 'packages/**/*.{ts,tsx}'",
|
||||||
"lint:fix": "eslint --fix 'packages/**/*.{ts,tsx}'",
|
"lint:fix": "eslint --fix 'packages/**/*.{ts,tsx}'",
|
||||||
"format": "prettier --check 'packages/**/*.{ts,tsx}'",
|
"format": "prettier --check .",
|
||||||
"format:fix": "prettier --write 'packages/**/*.{ts,tsx}'"
|
"format:fix": "prettier --write ."
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
@ -62,17 +31,18 @@
|
||||||
"@changesets/cli": "^2.26.0",
|
"@changesets/cli": "^2.26.0",
|
||||||
"@cloudflare/vitest-pool-workers": "^0.7.8",
|
"@cloudflare/vitest-pool-workers": "^0.7.8",
|
||||||
"@cloudflare/workers-types": "^4.20230307.0",
|
"@cloudflare/workers-types": "^4.20230307.0",
|
||||||
|
"@hono/eslint-config": "workspace:*",
|
||||||
"@ryoppippi/unplugin-typia": "^1.2.0",
|
"@ryoppippi/unplugin-typia": "^1.2.0",
|
||||||
"@types/node": "^20.14.8",
|
"@types/bun": "^1.0.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.7.0",
|
"@types/node": "^20.17.28",
|
||||||
"@typescript-eslint/parser": "^8.7.0",
|
"@types/ws": "^8.18.0",
|
||||||
"@vitest/coverage-istanbul": "^3.0.8",
|
"@vitest/coverage-istanbul": "^3.0.8",
|
||||||
"eslint": "^9.17.0",
|
"eslint": "^9.23.0",
|
||||||
"npm-run-all2": "^6.2.2",
|
"hono": "^4.7.11",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^3.5.3",
|
||||||
"tsup": "^8.4.0",
|
"tsup": "^8.4.0",
|
||||||
"typescript": "^5.8.2",
|
"typescript": "^5.8.2",
|
||||||
"vitest": "^3.0.8"
|
"vitest": "^3.0.8"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@4.0.2"
|
"packageManager": "yarn@4.9.2"
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
"build": "tsup ./src/index.ts",
|
"build": "tsup ./src/index.ts",
|
||||||
"prepack": "yarn build",
|
"prepack": "yarn build",
|
||||||
"publint": "attw --pack && publint",
|
"publint": "attw --pack && publint",
|
||||||
|
"typecheck": "tsc -b tsconfig.json",
|
||||||
"test": "vitest"
|
"test": "vitest"
|
||||||
},
|
},
|
||||||
"exports": {
|
"exports": {
|
||||||
|
@ -43,10 +44,10 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@arethetypeswrong/cli": "^0.17.4",
|
"@arethetypeswrong/cli": "^0.17.4",
|
||||||
"ajv": ">=8.12.0",
|
"ajv": "^8.12.0",
|
||||||
"hono": "^4.4.12",
|
|
||||||
"publint": "^0.3.9",
|
"publint": "^0.3.9",
|
||||||
"tsup": "^8.4.0",
|
"tsup": "^8.4.0",
|
||||||
|
"typescript": "^5.8.2",
|
||||||
"vitest": "^3.0.8"
|
"vitest": "^3.0.8"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import type { JSONSchemaType, type ErrorObject } from 'ajv'
|
import type { JSONSchemaType, ErrorObject } from 'ajv'
|
||||||
import { Hono } from 'hono'
|
import { Hono } from 'hono'
|
||||||
|
import type { ContentfulStatusCode } from 'hono/utils/http-status'
|
||||||
import type { Equal, Expect } from 'hono/utils/types'
|
import type { Equal, Expect } from 'hono/utils/types'
|
||||||
import { ajvValidator } from '.'
|
import { ajvValidator } from '.'
|
||||||
|
|
||||||
|
@ -40,6 +41,8 @@ describe('Basic', () => {
|
||||||
success: boolean
|
success: boolean
|
||||||
message: string
|
message: string
|
||||||
}
|
}
|
||||||
|
outputFormat: 'json'
|
||||||
|
status: ContentfulStatusCode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ export function ajvValidator<
|
||||||
T,
|
T,
|
||||||
Target extends keyof ValidationTargets,
|
Target extends keyof ValidationTargets,
|
||||||
E extends Env = Env,
|
E extends Env = Env,
|
||||||
P extends string = string
|
P extends string = string,
|
||||||
>(
|
>(
|
||||||
target: Target,
|
target: Target,
|
||||||
schema: JSONSchemaType<T>,
|
schema: JSONSchemaType<T>,
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist",
|
||||||
|
"tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo",
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"isolatedDeclarations": true
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts"],
|
||||||
|
"exclude": ["**/*.test.ts"],
|
||||||
|
"references": []
|
||||||
|
}
|
|
@ -1,6 +1,12 @@
|
||||||
{
|
{
|
||||||
"extends": "../../tsconfig.json",
|
"files": [],
|
||||||
"compilerOptions": {
|
"include": [],
|
||||||
"outDir": "./dist"
|
"references": [
|
||||||
}
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc/packages/ajv-validator",
|
||||||
|
"types": ["vitest/globals"]
|
||||||
|
},
|
||||||
|
"include": ["**/*.test.ts", "vitest.config.ts"],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,5 +1,11 @@
|
||||||
# @hono/arktype-validator
|
# @hono/arktype-validator
|
||||||
|
|
||||||
|
## 2.0.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#1137](https://github.com/honojs/middleware/pull/1137) [`01cd896e9b3c6a00c3c16ed59e0c3d20f5983918`](https://github.com/honojs/middleware/commit/01cd896e9b3c6a00c3c16ed59e0c3d20f5983918) Thanks [@MonsterDeveloper](https://github.com/MonsterDeveloper)! - Don't return restricted data fields on error responses
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
### Major Changes
|
### Major Changes
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@hono/arktype-validator",
|
"name": "@hono/arktype-validator",
|
||||||
"version": "2.0.0",
|
"version": "2.0.1",
|
||||||
"description": "ArkType validator middleware",
|
"description": "ArkType validator middleware",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
|
@ -13,6 +13,7 @@
|
||||||
"build": "tsup ./src/index.ts",
|
"build": "tsup ./src/index.ts",
|
||||||
"prepack": "yarn build",
|
"prepack": "yarn build",
|
||||||
"publint": "attw --pack && publint",
|
"publint": "attw --pack && publint",
|
||||||
|
"typecheck": "tsc -b tsconfig.json",
|
||||||
"test": "vitest"
|
"test": "vitest"
|
||||||
},
|
},
|
||||||
"exports": {
|
"exports": {
|
||||||
|
@ -45,9 +46,9 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@arethetypeswrong/cli": "^0.17.4",
|
"@arethetypeswrong/cli": "^0.17.4",
|
||||||
"arktype": "^2.0.0-dev.14",
|
"arktype": "^2.0.0-dev.14",
|
||||||
"hono": "^3.11.7",
|
|
||||||
"publint": "^0.3.9",
|
"publint": "^0.3.9",
|
||||||
"tsup": "^8.4.0",
|
"tsup": "^8.4.0",
|
||||||
|
"typescript": "^5.8.2",
|
||||||
"vitest": "^3.0.8"
|
"vitest": "^3.0.8"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { type } from 'arktype'
|
import { type } from 'arktype'
|
||||||
import { Hono } from 'hono'
|
import { Hono } from 'hono'
|
||||||
|
import type { ContentfulStatusCode } from 'hono/utils/http-status'
|
||||||
import type { Equal, Expect } from 'hono/utils/types'
|
import type { Equal, Expect } from 'hono/utils/types'
|
||||||
import { arktypeValidator } from '.'
|
import { arktypeValidator } from '.'
|
||||||
|
|
||||||
|
@ -34,6 +35,17 @@ describe('Basic', () => {
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
app.get(
|
||||||
|
'/headers',
|
||||||
|
arktypeValidator(
|
||||||
|
'header',
|
||||||
|
type({
|
||||||
|
'User-Agent': 'string',
|
||||||
|
})
|
||||||
|
),
|
||||||
|
(c) => c.json({ success: true, userAgent: c.header('User-Agent') })
|
||||||
|
)
|
||||||
|
|
||||||
type Actual = ExtractSchema<typeof route>
|
type Actual = ExtractSchema<typeof route>
|
||||||
type Expected = {
|
type Expected = {
|
||||||
'/author': {
|
'/author': {
|
||||||
|
@ -53,6 +65,8 @@ describe('Basic', () => {
|
||||||
message: string
|
message: string
|
||||||
queryName: string | undefined
|
queryName: string | undefined
|
||||||
}
|
}
|
||||||
|
outputFormat: 'json'
|
||||||
|
status: ContentfulStatusCode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,6 +109,22 @@ describe('Basic', () => {
|
||||||
const data = (await res.json()) as { success: boolean }
|
const data = (await res.json()) as { success: boolean }
|
||||||
expect(data['success']).toBe(false)
|
expect(data['success']).toBe(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("doesn't return cookies after headers validation", async () => {
|
||||||
|
const req = new Request('http://localhost/headers', {
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'invalid',
|
||||||
|
Cookie: 'SECRET=123',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const res = await app.request(req)
|
||||||
|
expect(res).not.toBeNull()
|
||||||
|
expect(res.status).toBe(400)
|
||||||
|
const data = (await res.json()) as { succcess: false; errors: type.errors }
|
||||||
|
expect(data.errors).toHaveLength(1)
|
||||||
|
expect(data.errors[0].data).not.toHaveProperty('cookie')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('With Hook', () => {
|
describe('With Hook', () => {
|
||||||
|
|
|
@ -10,6 +10,10 @@ export type Hook<T, E extends Env, P extends string, O = {}> = (
|
||||||
|
|
||||||
type HasUndefined<T> = undefined extends T ? true : false
|
type HasUndefined<T> = undefined extends T ? true : false
|
||||||
|
|
||||||
|
const RESTRICTED_DATA_FIELDS = {
|
||||||
|
header: ['cookie'],
|
||||||
|
}
|
||||||
|
|
||||||
export const arktypeValidator = <
|
export const arktypeValidator = <
|
||||||
T extends Type,
|
T extends Type,
|
||||||
Target extends keyof ValidationTargets,
|
Target extends keyof ValidationTargets,
|
||||||
|
@ -23,12 +27,13 @@ export const arktypeValidator = <
|
||||||
} = {
|
} = {
|
||||||
in: HasUndefined<I> extends true ? { [K in Target]?: I } : { [K in Target]: I }
|
in: HasUndefined<I> extends true ? { [K in Target]?: I } : { [K in Target]: I }
|
||||||
out: { [K in Target]: O }
|
out: { [K in Target]: O }
|
||||||
}
|
},
|
||||||
>(
|
>(
|
||||||
target: Target,
|
target: Target,
|
||||||
schema: T,
|
schema: T,
|
||||||
hook?: Hook<T['infer'], E, P>
|
hook?: Hook<T['infer'], E, P>
|
||||||
): MiddlewareHandler<E, P, V> =>
|
): MiddlewareHandler<E, P, V> =>
|
||||||
|
// @ts-expect-error not typed well
|
||||||
validator(target, (value, c) => {
|
validator(target, (value, c) => {
|
||||||
const out = schema(value)
|
const out = schema(value)
|
||||||
|
|
||||||
|
@ -53,7 +58,31 @@ export const arktypeValidator = <
|
||||||
return c.json(
|
return c.json(
|
||||||
{
|
{
|
||||||
success: false,
|
success: false,
|
||||||
errors: out,
|
errors:
|
||||||
|
target in RESTRICTED_DATA_FIELDS
|
||||||
|
? out.map((error) => {
|
||||||
|
const restrictedFields =
|
||||||
|
RESTRICTED_DATA_FIELDS[target as keyof typeof RESTRICTED_DATA_FIELDS] || []
|
||||||
|
|
||||||
|
if (
|
||||||
|
error &&
|
||||||
|
typeof error === 'object' &&
|
||||||
|
'data' in error &&
|
||||||
|
typeof error.data === 'object' &&
|
||||||
|
error.data !== null &&
|
||||||
|
!Array.isArray(error.data)
|
||||||
|
) {
|
||||||
|
const dataCopy = { ...(error.data as Record<string, unknown>) }
|
||||||
|
for (const field of restrictedFields) {
|
||||||
|
delete dataCopy[field]
|
||||||
|
}
|
||||||
|
|
||||||
|
error.data = dataCopy
|
||||||
|
}
|
||||||
|
|
||||||
|
return error
|
||||||
|
})
|
||||||
|
: out,
|
||||||
},
|
},
|
||||||
400
|
400
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist",
|
||||||
|
"tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo",
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"isolatedDeclarations": true
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts"],
|
||||||
|
"exclude": ["**/*.test.ts"],
|
||||||
|
"references": []
|
||||||
|
}
|
|
@ -1,6 +1,12 @@
|
||||||
{
|
{
|
||||||
"extends": "../../tsconfig.json",
|
"files": [],
|
||||||
"compilerOptions": {
|
"include": [],
|
||||||
"outDir": "./dist"
|
"references": [
|
||||||
}
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc/packages/arktype-validator",
|
||||||
|
"types": ["vitest/globals"]
|
||||||
|
},
|
||||||
|
"include": ["**/*.test.ts", "vitest.config.ts"],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,5 +1,17 @@
|
||||||
# @hono/auth-js
|
# @hono/auth-js
|
||||||
|
|
||||||
|
## 1.0.17
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#1210](https://github.com/honojs/middleware/pull/1210) [`0758fd0af1f213131d0894299e5bec716d284580`](https://github.com/honojs/middleware/commit/0758fd0af1f213131d0894299e5bec716d284580) Thanks [@BarryThePenguin](https://github.com/BarryThePenguin)! - Add explicit return types
|
||||||
|
|
||||||
|
## 1.0.16
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#1170](https://github.com/honojs/middleware/pull/1170) [`7585969171ad4876e7620c7369eb9b638849d0eb`](https://github.com/honojs/middleware/commit/7585969171ad4876e7620c7369eb9b638849d0eb) Thanks [@hambergerpls](https://github.com/hambergerpls)! - fix(auth-js): use HonoRequest.blob() instead of HonoRequest.raw.body()
|
||||||
|
|
||||||
## 1.0.15
|
## 1.0.15
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@hono/auth-js",
|
"name": "@hono/auth-js",
|
||||||
"version": "1.0.15",
|
"version": "1.0.17",
|
||||||
"description": "A third-party Auth js middleware for Hono",
|
"description": "A third-party Auth js middleware for Hono",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
@ -40,6 +40,7 @@
|
||||||
"build": "tsup src/index.ts src/react.tsx",
|
"build": "tsup src/index.ts src/react.tsx",
|
||||||
"prepack": "yarn build",
|
"prepack": "yarn build",
|
||||||
"publint": "attw --pack --profile node16 && publint",
|
"publint": "attw --pack --profile node16 && publint",
|
||||||
|
"typecheck": "tsc -b tsconfig.json",
|
||||||
"test": "vitest"
|
"test": "vitest"
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@ -62,10 +63,10 @@
|
||||||
"@arethetypeswrong/cli": "^0.17.4",
|
"@arethetypeswrong/cli": "^0.17.4",
|
||||||
"@auth/core": "^0.35.3",
|
"@auth/core": "^0.35.3",
|
||||||
"@types/react": "^18",
|
"@types/react": "^18",
|
||||||
"hono": "^3.11.7",
|
|
||||||
"publint": "^0.3.9",
|
"publint": "^0.3.9",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"tsup": "^8.4.0",
|
"tsup": "^8.4.0",
|
||||||
|
"typescript": "^5.8.2",
|
||||||
"vitest": "^3.0.8"
|
"vitest": "^3.0.8"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
|
@ -134,7 +134,7 @@ export async function fetchData<T = any>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useOnline() {
|
export function useOnline(): boolean {
|
||||||
const [isOnline, setIsOnline] = useState(
|
const [isOnline, setIsOnline] = useState(
|
||||||
typeof navigator !== 'undefined' ? navigator.onLine : false
|
typeof navigator !== 'undefined' ? navigator.onLine : false
|
||||||
)
|
)
|
||||||
|
@ -157,11 +157,19 @@ export function useOnline() {
|
||||||
return isOnline
|
return isOnline
|
||||||
}
|
}
|
||||||
|
|
||||||
export function now() {
|
export function now(): number {
|
||||||
return Math.floor(Date.now() / 1000)
|
return Math.floor(Date.now() / 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function parseUrl(url?: string) {
|
interface ParsedUrl {
|
||||||
|
origin: string
|
||||||
|
host: string
|
||||||
|
path: string
|
||||||
|
base: string
|
||||||
|
toString: () => string
|
||||||
|
}
|
||||||
|
|
||||||
|
export function parseUrl(url?: string): ParsedUrl {
|
||||||
const defaultUrl = 'http://localhost:3000/api/auth'
|
const defaultUrl = 'http://localhost:3000/api/auth'
|
||||||
const parsedUrl = new URL(url ? (url.startsWith('http') ? url : `https://${url}`) : defaultUrl)
|
const parsedUrl = new URL(url ? (url.startsWith('http') ? url : `https://${url}`) : defaultUrl)
|
||||||
const path = parsedUrl.pathname === '/' ? '/api/auth' : parsedUrl.pathname.replace(/\/$/, '')
|
const path = parsedUrl.pathname === '/' ? '/api/auth' : parsedUrl.pathname.replace(/\/$/, '')
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { skipCSRFCheck } from '@auth/core'
|
||||||
import type { Adapter } from '@auth/core/adapters'
|
import type { Adapter } from '@auth/core/adapters'
|
||||||
import Credentials from '@auth/core/providers/credentials'
|
import Credentials from '@auth/core/providers/credentials'
|
||||||
import { Hono } from 'hono'
|
import { Hono } from 'hono'
|
||||||
|
import { validator } from 'hono/validator'
|
||||||
import { describe, expect, it, vi } from 'vitest'
|
import { describe, expect, it, vi } from 'vitest'
|
||||||
import type { AuthConfig } from '.'
|
import type { AuthConfig } from '.'
|
||||||
import { authHandler, verifyAuth, initAuthConfig, reqWithEnvUrl } from '.'
|
import { authHandler, verifyAuth, initAuthConfig, reqWithEnvUrl } from '.'
|
||||||
|
@ -80,6 +81,128 @@ describe('reqWithEnvUrl()', async () => {
|
||||||
it('Should rewrite the base path', () => {
|
it('Should rewrite the base path', () => {
|
||||||
expect(newReq.url.toString()).toBe('https://auth-url-base/request-path')
|
expect(newReq.url.toString()).toBe('https://auth-url-base/request-path')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const mockAdapter: Adapter = {
|
||||||
|
createVerificationToken: vi.fn(),
|
||||||
|
useVerificationToken: vi.fn(),
|
||||||
|
getUserByEmail: vi.fn(),
|
||||||
|
createUser: vi.fn(),
|
||||||
|
getUser: vi.fn(),
|
||||||
|
getUserByAccount: vi.fn(),
|
||||||
|
updateUser: vi.fn(),
|
||||||
|
linkAccount: vi.fn(),
|
||||||
|
createSession: vi.fn(),
|
||||||
|
getSessionAndUser: vi.fn(),
|
||||||
|
updateSession: vi.fn(),
|
||||||
|
deleteSession: vi.fn(),
|
||||||
|
}
|
||||||
|
|
||||||
|
globalThis.process.env = {
|
||||||
|
AUTH_SECRET: 'secret',
|
||||||
|
}
|
||||||
|
|
||||||
|
const user = { email: 'hono@hono.hono', name: 'Hono' }
|
||||||
|
|
||||||
|
const credentials = Credentials({
|
||||||
|
credentials: {
|
||||||
|
password: {},
|
||||||
|
},
|
||||||
|
authorize: (credentials) => {
|
||||||
|
if (credentials.password === 'password') {
|
||||||
|
return user
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
function getAuthConfig(): AuthConfig {
|
||||||
|
return {
|
||||||
|
secret: 'secret',
|
||||||
|
providers: [credentials],
|
||||||
|
adapter: mockAdapter,
|
||||||
|
basePath: '/api/auth',
|
||||||
|
callbacks: {
|
||||||
|
jwt: ({ token, user }) => {
|
||||||
|
if (user) {
|
||||||
|
token.id = user.id
|
||||||
|
}
|
||||||
|
return token
|
||||||
|
},
|
||||||
|
},
|
||||||
|
session: {
|
||||||
|
strategy: 'jwt',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let cookie = ['']
|
||||||
|
|
||||||
|
it('Should be able to instantiate new Request after passing through validator', async () => {
|
||||||
|
const app = new Hono()
|
||||||
|
|
||||||
|
app.use('*', initAuthConfig(getAuthConfig))
|
||||||
|
app.use(
|
||||||
|
'/api/auth/*',
|
||||||
|
validator('form', (value, _) => {
|
||||||
|
const csrfToken = value['csrfToken']
|
||||||
|
return {
|
||||||
|
csrfToken,
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
authHandler()
|
||||||
|
)
|
||||||
|
|
||||||
|
let csrfRes = await app.request('http://localhost/api/auth/csrf', {
|
||||||
|
method: 'GET',
|
||||||
|
})
|
||||||
|
let { csrfToken } = await csrfRes.json()
|
||||||
|
|
||||||
|
cookie = csrfRes.headers.getSetCookie()
|
||||||
|
|
||||||
|
let headers = new Headers()
|
||||||
|
headers.append('cookie', cookie[0])
|
||||||
|
|
||||||
|
const signInRes = await app.request('http://localhost/api/auth/callback/credentials', {
|
||||||
|
method: 'POST',
|
||||||
|
headers,
|
||||||
|
body: new URLSearchParams({
|
||||||
|
csrfToken,
|
||||||
|
password: 'password',
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
expect(signInRes.status).toBe(302)
|
||||||
|
expect(signInRes.headers.get('location')).toBe('http://localhost')
|
||||||
|
|
||||||
|
cookie = signInRes.headers.getSetCookie()
|
||||||
|
|
||||||
|
const sessionCookie = cookie[1]
|
||||||
|
|
||||||
|
headers = new Headers()
|
||||||
|
headers.append('cookie', cookie[1])
|
||||||
|
headers.append('Content-Type', 'application/json')
|
||||||
|
|
||||||
|
csrfRes = await app.request('http://localhost/api/auth/csrf', {
|
||||||
|
method: 'GET',
|
||||||
|
})
|
||||||
|
;({ csrfToken } = await csrfRes.json())
|
||||||
|
|
||||||
|
cookie = csrfRes.headers.getSetCookie()
|
||||||
|
|
||||||
|
headers = new Headers()
|
||||||
|
headers.append('cookie', cookie[0])
|
||||||
|
headers.append('cookie', sessionCookie)
|
||||||
|
|
||||||
|
const req = new Request('http://localhost/api/auth/signout', {
|
||||||
|
method: 'POST',
|
||||||
|
body: new URLSearchParams({
|
||||||
|
csrfToken,
|
||||||
|
password: 'password',
|
||||||
|
}),
|
||||||
|
headers,
|
||||||
|
})
|
||||||
|
const res = await app.request(req)
|
||||||
|
expect(res.status).toBe(302)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('Credentials Provider', () => {
|
describe('Credentials Provider', () => {
|
||||||
|
|
|
@ -31,12 +31,12 @@ export interface AuthConfig extends Omit<AuthConfigCore, 'raw'> {}
|
||||||
|
|
||||||
export type ConfigHandler = (c: Context) => AuthConfig
|
export type ConfigHandler = (c: Context) => AuthConfig
|
||||||
|
|
||||||
export function setEnvDefaults(env: AuthEnv, config: AuthConfig) {
|
export function setEnvDefaults(env: AuthEnv, config: AuthConfig): void {
|
||||||
config.secret ??= env.AUTH_SECRET
|
config.secret ??= env.AUTH_SECRET
|
||||||
coreSetEnvDefaults(env, config)
|
coreSetEnvDefaults(env, config)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function reqWithEnvUrl(req: Request, authUrl?: string) {
|
export function reqWithEnvUrl(req: Request, authUrl?: string): Request {
|
||||||
if (authUrl) {
|
if (authUrl) {
|
||||||
const reqUrlObj = new URL(req.url)
|
const reqUrlObj = new URL(req.url)
|
||||||
const authUrlObj = new URL(authUrl)
|
const authUrlObj = new URL(authUrl)
|
||||||
|
@ -135,7 +135,27 @@ export function authHandler(): MiddlewareHandler {
|
||||||
throw new HTTPException(500, { message: 'Missing AUTH_SECRET' })
|
throw new HTTPException(500, { message: 'Missing AUTH_SECRET' })
|
||||||
}
|
}
|
||||||
|
|
||||||
const res = await Auth(reqWithEnvUrl(c.req.raw, ctxEnv.AUTH_URL), config)
|
const body = c.req.raw.body ? await c.req.blob() : undefined
|
||||||
|
const res = await Auth(
|
||||||
|
reqWithEnvUrl(
|
||||||
|
new Request(c.req.raw.url, {
|
||||||
|
body,
|
||||||
|
cache: c.req.raw.cache,
|
||||||
|
credentials: c.req.raw.credentials,
|
||||||
|
headers: c.req.raw.headers,
|
||||||
|
integrity: c.req.raw.integrity,
|
||||||
|
keepalive: c.req.raw.keepalive,
|
||||||
|
method: c.req.raw.method,
|
||||||
|
mode: c.req.raw.mode,
|
||||||
|
redirect: c.req.raw.redirect,
|
||||||
|
referrer: c.req.raw.referrer,
|
||||||
|
referrerPolicy: c.req.raw.referrerPolicy,
|
||||||
|
signal: c.req.raw.signal,
|
||||||
|
}),
|
||||||
|
ctxEnv.AUTH_URL
|
||||||
|
),
|
||||||
|
config
|
||||||
|
)
|
||||||
return new Response(res.body, res)
|
return new Response(res.body, res)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,9 +65,11 @@ class AuthConfigManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const authConfigManager = AuthConfigManager.getInstance()
|
export const authConfigManager: AuthConfigManager = AuthConfigManager.getInstance()
|
||||||
|
|
||||||
export const SessionContext = React.createContext<SessionContextValue | undefined>(undefined)
|
export const SessionContext: React.Context<SessionContextValue | undefined> = React.createContext<
|
||||||
|
SessionContextValue | undefined
|
||||||
|
>(undefined)
|
||||||
|
|
||||||
function useInitializeSession(hasInitialSession: boolean, initialSession: Session | null) {
|
function useInitializeSession(hasInitialSession: boolean, initialSession: Session | null) {
|
||||||
const authConfig = authConfigManager.getConfig()
|
const authConfig = authConfigManager.getConfig()
|
||||||
|
@ -148,7 +150,7 @@ function useRefetchInterval(
|
||||||
}, [refetchInterval, shouldRefetch])
|
}, [refetchInterval, shouldRefetch])
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getSession(params?: GetSessionParams) {
|
export async function getSession(params?: GetSessionParams): Promise<Session | null> {
|
||||||
const { baseUrl, basePath, credentials } = authConfigManager.getConfig()
|
const { baseUrl, basePath, credentials } = authConfigManager.getConfig()
|
||||||
const session = await fetchData<Session>(
|
const session = await fetchData<Session>(
|
||||||
'session',
|
'session',
|
||||||
|
@ -163,7 +165,7 @@ export async function getSession(params?: GetSessionParams) {
|
||||||
return session
|
return session
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getCsrfToken() {
|
export async function getCsrfToken(): Promise<string> {
|
||||||
const { baseUrl, basePath, credentials } = authConfigManager.getConfig()
|
const { baseUrl, basePath, credentials } = authConfigManager.getConfig()
|
||||||
const response = await fetchData<{ csrfToken: string }>(
|
const response = await fetchData<{ csrfToken: string }>(
|
||||||
'csrf',
|
'csrf',
|
||||||
|
@ -177,7 +179,7 @@ export async function getCsrfToken() {
|
||||||
return response?.csrfToken ?? ''
|
return response?.csrfToken ?? ''
|
||||||
}
|
}
|
||||||
|
|
||||||
export function SessionProvider(props: SessionProviderProps) {
|
export function SessionProvider(props: SessionProviderProps): React.JSX.Element {
|
||||||
if (!SessionContext) {
|
if (!SessionContext) {
|
||||||
throw new Error('React Context is unavailable in Server Components')
|
throw new Error('React Context is unavailable in Server Components')
|
||||||
}
|
}
|
||||||
|
@ -225,7 +227,7 @@ export function SessionProvider(props: SessionProviderProps) {
|
||||||
}
|
}
|
||||||
return updatedSession
|
return updatedSession
|
||||||
},
|
},
|
||||||
} as SessionContextValue),
|
}) as SessionContextValue,
|
||||||
[session, loading, setSession]
|
[session, loading, setSession]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -274,7 +276,7 @@ export function useSession<R extends boolean>(
|
||||||
|
|
||||||
type ProvidersType = Record<LiteralUnion<BuiltInProviderType>, ClientSafeProvider>
|
type ProvidersType = Record<LiteralUnion<BuiltInProviderType>, ClientSafeProvider>
|
||||||
|
|
||||||
export async function getProviders() {
|
export async function getProviders(): Promise<ProvidersType | null> {
|
||||||
return fetchData<ProvidersType>('providers', authConfigManager.getConfig(), logger)
|
return fetchData<ProvidersType>('providers', authConfigManager.getConfig(), logger)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,10 +397,14 @@ interface PopupLoginOptions extends Partial<Omit<WindowProps, 'url'>> {
|
||||||
callbackUrl?: string
|
callbackUrl?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface LoginState extends AuthState {
|
||||||
|
popUpSignin: () => Promise<void>
|
||||||
|
}
|
||||||
|
|
||||||
export const useOauthPopupLogin = (
|
export const useOauthPopupLogin = (
|
||||||
provider: Parameters<typeof signIn>[0],
|
provider: Parameters<typeof signIn>[0],
|
||||||
options: PopupLoginOptions = {}
|
options: PopupLoginOptions = {}
|
||||||
) => {
|
): LoginState => {
|
||||||
const { width = 500, height = 500, title = 'Signin', onSuccess, callbackUrl = '/' } = options
|
const { width = 500, height = 500, title = 'Signin', onSuccess, callbackUrl = '/' } = options
|
||||||
|
|
||||||
const [externalWindow, setExternalWindow] = useState<Window | null>()
|
const [externalWindow, setExternalWindow] = useState<Window | null>()
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist",
|
||||||
|
"tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo",
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"isolatedDeclarations": true,
|
||||||
|
"jsx": "react"
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts", "src/**/*.tsx"],
|
||||||
|
"exclude": ["**/*.test.ts"],
|
||||||
|
"references": []
|
||||||
|
}
|
|
@ -1,11 +1,12 @@
|
||||||
{
|
{
|
||||||
"extends": "../../tsconfig.json",
|
"files": [],
|
||||||
"compilerOptions": {
|
"include": [],
|
||||||
"target": "ESNext",
|
"references": [
|
||||||
"module": "ESNext",
|
{
|
||||||
"moduleResolution": "node",
|
"path": "./tsconfig.build.json"
|
||||||
"outDir": "./dist",
|
},
|
||||||
"jsx": "react",
|
{
|
||||||
"types": ["node", "vitest/globals"]
|
"path": "./tsconfig.spec.json"
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc/packages/auth-js",
|
||||||
|
"jsx": "react"
|
||||||
|
},
|
||||||
|
"include": ["**/*.test.ts", "vitest.config.ts"],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
# @hono/bun-compress
|
||||||
|
|
||||||
|
## 0.1.0
|
||||||
|
|
||||||
|
### Minor Changes
|
||||||
|
|
||||||
|
- [#1153](https://github.com/honojs/middleware/pull/1153) [`7717755dd35aec882b452f91373439d357eb516c`](https://github.com/honojs/middleware/commit/7717755dd35aec882b452f91373439d357eb516c) Thanks [@nrdobie](https://github.com/nrdobie)! - Created Bun Compress Middleware
|
|
@ -0,0 +1,30 @@
|
||||||
|
# Bun Compress Middleware for Hono
|
||||||
|
|
||||||
|
Bun does not currently support the [CompressionStream API](https://developer.mozilla.org/en-US/docs/Web/API/CompressionStream) so this middleware replicates the behavior of [`hono/compress`](https://hono.dev/docs/middleware/builtin/compress) using the Zlib library. This middleware will be deprecated once [Bun adds support for `CompressionStream`](https://github.com/oven-sh/bun/issues/1723).
|
||||||
|
|
||||||
|
This middleware will use `hono/compress` if CompressionStream is available so you can use this middleware in Bun and Node.js without any changes.
|
||||||
|
|
||||||
|
## Import
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { Hono } from 'hono'
|
||||||
|
import { compress } from '@hono/bun-compress'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```ts
|
||||||
|
const app = new Hono()
|
||||||
|
|
||||||
|
app.use(compress())
|
||||||
|
```
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
### <Badge type="info" text="optional" /> encoding: `'gzip'` | `'deflate'`
|
||||||
|
|
||||||
|
The compression scheme to allow for response compression. Either `gzip` or `deflate`. If not defined, both are allowed and will be used based on the `Accept-Encoding` header. `gzip` is prioritized if this option is not provided and the client provides both in the `Accept-Encoding` header.
|
||||||
|
|
||||||
|
### <Badge type="info" text="optional" /> threshold: `number`
|
||||||
|
|
||||||
|
The minimum size in bytes to compress. Defaults to 1024 bytes.
|
|
@ -0,0 +1,53 @@
|
||||||
|
{
|
||||||
|
"name": "@hono/bun-compress",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "A Hono middleware for compressing responses using Bun's built-in compression.",
|
||||||
|
"type": "module",
|
||||||
|
"module": "dist/index.js",
|
||||||
|
"types": "dist/index.d.ts",
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsup ./src/index.ts",
|
||||||
|
"prepack": "yarn build",
|
||||||
|
"publint": "attw --pack && publint",
|
||||||
|
"typecheck": "tsc -b tsconfig.json",
|
||||||
|
"test": "bun test"
|
||||||
|
},
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"import": {
|
||||||
|
"types": "./dist/index.d.ts",
|
||||||
|
"default": "./dist/index.js"
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"types": "./dist/index.d.cts",
|
||||||
|
"default": "./dist/index.cjs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"publishConfig": {
|
||||||
|
"registry": "https://registry.npmjs.org",
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/honojs/middleware.git",
|
||||||
|
"directory": "packages/bun-compress"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/honojs/middleware",
|
||||||
|
"peerDependencies": {
|
||||||
|
"hono": "*"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@arethetypeswrong/cli": "^0.17.4",
|
||||||
|
"@types/bun": "^1.2.12",
|
||||||
|
"@types/node": "^22.15.15",
|
||||||
|
"publint": "^0.3.9",
|
||||||
|
"tsup": "^8.4.0",
|
||||||
|
"typescript": "^5.8.2",
|
||||||
|
"vitest": "^3.0.8"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,231 @@
|
||||||
|
import { Hono } from 'hono'
|
||||||
|
import { stream, streamSSE } from 'hono/streaming'
|
||||||
|
import { Readable } from 'node:stream'
|
||||||
|
import type { ReadableStream } from 'node:stream/web'
|
||||||
|
import { createGunzip } from 'node:zlib'
|
||||||
|
import { compress } from '.'
|
||||||
|
|
||||||
|
describe('Bun Compress Middleware', () => {
|
||||||
|
const app = new Hono()
|
||||||
|
|
||||||
|
// Apply compress middleware to all routes
|
||||||
|
app.use('*', compress())
|
||||||
|
|
||||||
|
// Test routes
|
||||||
|
app.get('/small', (c) => {
|
||||||
|
c.header('Content-Type', 'text/plain')
|
||||||
|
c.header('Content-Length', '5')
|
||||||
|
return c.text('small')
|
||||||
|
})
|
||||||
|
app.get('/large', (c) => {
|
||||||
|
c.header('Content-Type', 'text/plain')
|
||||||
|
c.header('Content-Length', '1024')
|
||||||
|
return c.text('a'.repeat(1024))
|
||||||
|
})
|
||||||
|
app.get('/small-json', (c) => {
|
||||||
|
c.header('Content-Type', 'application/json')
|
||||||
|
c.header('Content-Length', '26')
|
||||||
|
return c.json({ message: 'Hello, World!' })
|
||||||
|
})
|
||||||
|
app.get('/large-json', (c) => {
|
||||||
|
c.header('Content-Type', 'application/json')
|
||||||
|
c.header('Content-Length', '1024')
|
||||||
|
return c.json({ data: 'a'.repeat(1024), message: 'Large JSON' })
|
||||||
|
})
|
||||||
|
app.get('/no-transform', (c) => {
|
||||||
|
c.header('Content-Type', 'text/plain')
|
||||||
|
c.header('Content-Length', '1024')
|
||||||
|
c.header('Cache-Control', 'no-transform')
|
||||||
|
return c.text('a'.repeat(1024))
|
||||||
|
})
|
||||||
|
app.get('/jpeg-image', (c) => {
|
||||||
|
c.header('Content-Type', 'image/jpeg')
|
||||||
|
c.header('Content-Length', '1024')
|
||||||
|
return c.body(new Uint8Array(1024)) // Simulated JPEG data
|
||||||
|
})
|
||||||
|
app.get('/already-compressed', (c) => {
|
||||||
|
c.header('Content-Type', 'application/octet-stream')
|
||||||
|
c.header('Content-Encoding', 'br')
|
||||||
|
c.header('Content-Length', '1024')
|
||||||
|
return c.body(new Uint8Array(1024)) // Simulated compressed data
|
||||||
|
})
|
||||||
|
app.get('/transfer-encoding-deflate', (c) => {
|
||||||
|
c.header('Content-Type', 'application/octet-stream')
|
||||||
|
c.header('Transfer-Encoding', 'deflate')
|
||||||
|
c.header('Content-Length', '1024')
|
||||||
|
return c.body(new Uint8Array(1024)) // Simulated deflate data
|
||||||
|
})
|
||||||
|
app.get('/chunked', (c) => {
|
||||||
|
c.header('Content-Type', 'application/octet-stream')
|
||||||
|
c.header('Transfer-Encoding', 'chunked')
|
||||||
|
c.header('Content-Length', '1024')
|
||||||
|
return c.body(new Uint8Array(1024)) // Simulated chunked data
|
||||||
|
})
|
||||||
|
app.get('/stream', (c) =>
|
||||||
|
stream(c, async (stream) => {
|
||||||
|
c.header('Content-Type', 'text/plain')
|
||||||
|
// 60000 bytes
|
||||||
|
for (let i = 0; i < 10000; i++) {
|
||||||
|
await stream.write('chunk ')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
app.get('/already-compressed-stream', (c) =>
|
||||||
|
stream(c, async (stream) => {
|
||||||
|
c.header('Content-Type', 'text/plain')
|
||||||
|
c.header('Content-Encoding', 'br')
|
||||||
|
// 60000 bytes
|
||||||
|
for (let i = 0; i < 10000; i++) {
|
||||||
|
await stream.write(new Uint8Array([0, 1, 2, 3, 4, 5])) // Simulated compressed data
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
app.get('/sse', (c) =>
|
||||||
|
streamSSE(c, async (stream) => {
|
||||||
|
for (let i = 0; i < 1000; i++) {
|
||||||
|
await stream.writeSSE({ data: 'chunk' })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
app.notFound((c) => c.text('Custom NotFound', 404))
|
||||||
|
|
||||||
|
const testCompression = async (
|
||||||
|
path: string,
|
||||||
|
acceptEncoding: string,
|
||||||
|
expectedEncoding: string | null
|
||||||
|
) => {
|
||||||
|
const req = new Request(`http://localhost${path}`, {
|
||||||
|
method: 'GET',
|
||||||
|
headers: new Headers({ 'Accept-Encoding': acceptEncoding }),
|
||||||
|
})
|
||||||
|
const res = await app.request(req)
|
||||||
|
expect(res.headers.get('Content-Encoding')).toBe(expectedEncoding)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('Compression Behavior', () => {
|
||||||
|
it('should compress large responses with gzip', async () => {
|
||||||
|
const res = await testCompression('/large', 'gzip', 'gzip')
|
||||||
|
expect(res.headers.get('Content-Length')).toBeNull()
|
||||||
|
expect((await res.arrayBuffer()).byteLength).toBeLessThan(1024)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should compress large responses with deflate', async () => {
|
||||||
|
const res = await testCompression('/large', 'deflate', 'deflate')
|
||||||
|
expect((await res.arrayBuffer()).byteLength).toBeLessThan(1024)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should prioritize gzip over deflate when both are accepted', async () => {
|
||||||
|
await testCompression('/large', 'gzip, deflate', 'gzip')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not compress small responses', async () => {
|
||||||
|
const res = await testCompression('/small', 'gzip, deflate', null)
|
||||||
|
expect(res.headers.get('Content-Length')).toBe('5')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not compress when no Accept-Encoding is provided', async () => {
|
||||||
|
await testCompression('/large', '', null)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not compress images', async () => {
|
||||||
|
const res = await testCompression('/jpeg-image', 'gzip', null)
|
||||||
|
expect(res.headers.get('Content-Type')).toBe('image/jpeg')
|
||||||
|
expect(res.headers.get('Content-Length')).toBe('1024')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not compress already compressed responses', async () => {
|
||||||
|
const res = await testCompression('/already-compressed', 'gzip', 'br')
|
||||||
|
expect(res.headers.get('Content-Length')).toBe('1024')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should remove Content-Length when compressing', async () => {
|
||||||
|
const res = await testCompression('/large', 'gzip', 'gzip')
|
||||||
|
expect(res.headers.get('Content-Length')).toBeNull()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not remove Content-Length when not compressing', async () => {
|
||||||
|
const res = await testCompression('/jpeg-image', 'gzip', null)
|
||||||
|
expect(res.headers.get('Content-Length')).toBeDefined()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not compress transfer-encoding: deflate', async () => {
|
||||||
|
const res = await testCompression('/transfer-encoding-deflate', 'gzip', null)
|
||||||
|
expect(res.headers.get('Content-Length')).toBe('1024')
|
||||||
|
expect(res.headers.get('Transfer-Encoding')).toBe('deflate')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not compress transfer-encoding: chunked', async () => {
|
||||||
|
const res = await testCompression('/chunked', 'gzip', null)
|
||||||
|
expect(res.headers.get('Content-Length')).toBe('1024')
|
||||||
|
expect(res.headers.get('Transfer-Encoding')).toBe('chunked')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('JSON Handling', () => {
|
||||||
|
it('should not compress small JSON responses', async () => {
|
||||||
|
const res = await testCompression('/small-json', 'gzip', null)
|
||||||
|
expect(res.headers.get('Content-Length')).toBe('26')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should compress large JSON responses', async () => {
|
||||||
|
const res = await testCompression('/large-json', 'gzip', 'gzip')
|
||||||
|
expect(res.headers.get('Content-Length')).toBeNull()
|
||||||
|
const decompressed = await decompressResponse(res)
|
||||||
|
const json = JSON.parse(decompressed)
|
||||||
|
expect(json.data.length).toBe(1024)
|
||||||
|
expect(json.message).toBe('Large JSON')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('Streaming Responses', () => {
|
||||||
|
it('should compress streaming responses written in multiple chunks', async () => {
|
||||||
|
const res = await testCompression('/stream', 'gzip', 'gzip')
|
||||||
|
const decompressed = await decompressResponse(res)
|
||||||
|
expect(decompressed.length).toBe(60000)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not compress already compressed streaming responses', async () => {
|
||||||
|
const res = await testCompression('/already-compressed-stream', 'gzip', 'br')
|
||||||
|
expect((await res.arrayBuffer()).byteLength).toBe(60000)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not compress server-sent events', async () => {
|
||||||
|
const res = await testCompression('/sse', 'gzip', null)
|
||||||
|
expect((await res.arrayBuffer()).byteLength).toBe(13000)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('Edge Cases', () => {
|
||||||
|
it('should not compress responses with Cache-Control: no-transform', async () => {
|
||||||
|
await testCompression('/no-transform', 'gzip', null)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should handle HEAD requests without compression', async () => {
|
||||||
|
const req = new Request('http://localhost/large', {
|
||||||
|
method: 'HEAD',
|
||||||
|
headers: new Headers({ 'Accept-Encoding': 'gzip' }),
|
||||||
|
})
|
||||||
|
const res = await app.request(req)
|
||||||
|
expect(res.headers.get('Content-Encoding')).toBeNull()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should compress custom 404 Not Found responses', async () => {
|
||||||
|
const res = await testCompression('/not-found', 'gzip', 'gzip')
|
||||||
|
expect(res.status).toBe(404)
|
||||||
|
const decompressed = await decompressResponse(res)
|
||||||
|
expect(decompressed).toBe('Custom NotFound')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
async function decompressResponse(res: Response): Promise<string> {
|
||||||
|
const resBody = res.body as ReadableStream
|
||||||
|
const readableStream = Readable.fromWeb(resBody)
|
||||||
|
const decompressedStream = readableStream.pipe(createGunzip())
|
||||||
|
const decompressedReadableStream = Readable.toWeb(decompressedStream)
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
const decompressedResponse = new Response(decompressedReadableStream as any)
|
||||||
|
return await decompressedResponse.text()
|
||||||
|
}
|
|
@ -0,0 +1,103 @@
|
||||||
|
/**
|
||||||
|
* @module
|
||||||
|
* Compress Middleware for Hono.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type { MiddlewareHandler } from 'hono'
|
||||||
|
import { compress as originalCompress } from 'hono/compress'
|
||||||
|
import { COMPRESSIBLE_CONTENT_TYPE_REGEX } from 'hono/utils/compress'
|
||||||
|
import { Readable } from 'node:stream'
|
||||||
|
import type { ReadableStream } from 'node:stream/web'
|
||||||
|
import { createDeflate, createGzip } from 'node:zlib'
|
||||||
|
|
||||||
|
const ENCODING_TYPES = ['gzip', 'deflate'] as const
|
||||||
|
const cacheControlNoTransformRegExp = /(?:^|,)\s*?no-transform\s*?(?:,|$)/i
|
||||||
|
|
||||||
|
interface CompressionOptions {
|
||||||
|
encoding?: (typeof ENCODING_TYPES)[number]
|
||||||
|
threshold?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compress Middleware for Hono on Bun.
|
||||||
|
*
|
||||||
|
* Bun does not currently support CompressionStream, so this uses the zlib module to compress the response body.
|
||||||
|
*
|
||||||
|
* @see {@link https://hono.dev/docs/middleware/builtin/compress}
|
||||||
|
* @see {@link https://github.com/oven-sh/bun/issues/1723}
|
||||||
|
*
|
||||||
|
* @param {CompressionOptions} [options] - The options for the compress middleware.
|
||||||
|
* @param {'gzip' | 'deflate'} [options.encoding] - The compression scheme to allow for response compression. Either 'gzip' or 'deflate'. If not defined, both are allowed and will be used based on the Accept-Encoding header. 'gzip' is prioritized if this option is not provided and the client provides both in the Accept-Encoding header.
|
||||||
|
* @param {number} [options.threshold=1024] - The minimum size in bytes to compress. Defaults to 1024 bytes.
|
||||||
|
* @returns {MiddlewareHandler} The middleware handler function.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* ```ts
|
||||||
|
* const app = new Hono()
|
||||||
|
*
|
||||||
|
* app.use(bunCompress())
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
export const compress = (options?: CompressionOptions): MiddlewareHandler => {
|
||||||
|
// Check CompressionStream support
|
||||||
|
if (typeof CompressionStream !== 'undefined') {
|
||||||
|
return originalCompress(options)
|
||||||
|
}
|
||||||
|
|
||||||
|
const threshold = options?.threshold ?? 1024
|
||||||
|
|
||||||
|
return async function compress(ctx, next) {
|
||||||
|
await next()
|
||||||
|
|
||||||
|
const contentLength = ctx.res.headers.get('Content-Length')
|
||||||
|
|
||||||
|
// Check if response should be compressed
|
||||||
|
if (
|
||||||
|
ctx.res.headers.has('Content-Encoding') || // already encoded
|
||||||
|
ctx.res.headers.has('Transfer-Encoding') || // already encoded or chunked
|
||||||
|
ctx.req.method === 'HEAD' || // HEAD request
|
||||||
|
(contentLength && Number(contentLength) < threshold) || // content-length below threshold
|
||||||
|
!shouldCompress(ctx.res) || // not compressible type
|
||||||
|
!shouldTransform(ctx.res) // cache-control: no-transform
|
||||||
|
) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const accepted = ctx.req.header('Accept-Encoding')
|
||||||
|
const encoding =
|
||||||
|
options?.encoding ?? ENCODING_TYPES.find((encoding) => accepted?.includes(encoding))
|
||||||
|
if (!encoding || !ctx.res.body) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compress the response
|
||||||
|
try {
|
||||||
|
const compressedStream = encoding === 'gzip' ? createGzip() : createDeflate()
|
||||||
|
|
||||||
|
const readableBody = ctx.res.body as ReadableStream
|
||||||
|
const readableStream = Readable.fromWeb(readableBody)
|
||||||
|
const compressedBody = readableStream.pipe(compressedStream)
|
||||||
|
const compressedReadableStream = Readable.toWeb(compressedBody) as ReadableStream<Uint8Array>
|
||||||
|
|
||||||
|
// Create a new response with the compressed body
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
ctx.res = new Response(compressedReadableStream as any, ctx.res)
|
||||||
|
ctx.res.headers.delete('Content-Length')
|
||||||
|
ctx.res.headers.set('Content-Encoding', encoding)
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Compression error:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const shouldCompress = (res: Response) => {
|
||||||
|
const type = res.headers.get('Content-Type')
|
||||||
|
return type && COMPRESSIBLE_CONTENT_TYPE_REGEX.test(type)
|
||||||
|
}
|
||||||
|
|
||||||
|
const shouldTransform = (res: Response) => {
|
||||||
|
const cacheControl = res.headers.get('Cache-Control')
|
||||||
|
// Don't compress for Cache-Control: no-transform
|
||||||
|
// https://tools.ietf.org/html/rfc7234#section-5.2.2.4
|
||||||
|
return !cacheControl || !cacheControlNoTransformRegExp.test(cacheControl)
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist",
|
||||||
|
"tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo",
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"isolatedDeclarations": true,
|
||||||
|
"types": ["node", "bun"]
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts"],
|
||||||
|
"exclude": ["**/*.test.ts"],
|
||||||
|
"references": []
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"files": [],
|
||||||
|
"include": [],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc/packages/hello",
|
||||||
|
"types": ["vitest/globals"]
|
||||||
|
},
|
||||||
|
"include": ["**/*.test.ts", "vitest.config.ts"],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
import { defineProject } from 'vitest/config'
|
||||||
|
|
||||||
|
export default defineProject({
|
||||||
|
test: {
|
||||||
|
globals: true,
|
||||||
|
},
|
||||||
|
})
|
|
@ -1,5 +1,11 @@
|
||||||
# @hono/bun-transpiler
|
# @hono/bun-transpiler
|
||||||
|
|
||||||
|
## 0.2.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#1193](https://github.com/honojs/middleware/pull/1193) [`1adca4c91822af8f68f4a134344cca93e0796ad0`](https://github.com/honojs/middleware/commit/1adca4c91822af8f68f4a134344cca93e0796ad0) Thanks [@BarryThePenguin](https://github.com/BarryThePenguin)! - Add explicit `MiddlewareHandler` return type
|
||||||
|
|
||||||
## 0.2.0
|
## 0.2.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@hono/bun-transpiler",
|
"name": "@hono/bun-transpiler",
|
||||||
"version": "0.2.0",
|
"version": "0.2.1",
|
||||||
"description": "Bun Transpiler Middleware for Hono",
|
"description": "Bun Transpiler Middleware for Hono",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
|
@ -13,6 +13,7 @@
|
||||||
"build": "tsup ./src/index.ts --external bun",
|
"build": "tsup ./src/index.ts --external bun",
|
||||||
"prepack": "yarn build",
|
"prepack": "yarn build",
|
||||||
"publint": "attw --pack && publint",
|
"publint": "attw --pack && publint",
|
||||||
|
"typecheck": "tsc -b tsconfig.json",
|
||||||
"test": "bun test"
|
"test": "bun test"
|
||||||
},
|
},
|
||||||
"exports": {
|
"exports": {
|
||||||
|
@ -43,10 +44,9 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@arethetypeswrong/cli": "^0.17.4",
|
"@arethetypeswrong/cli": "^0.17.4",
|
||||||
"@types/bun": "^1.0.0",
|
|
||||||
"hono": "^3.11.7",
|
|
||||||
"publint": "^0.3.9",
|
"publint": "^0.3.9",
|
||||||
"tsup": "^8.4.0",
|
"tsup": "^8.4.0",
|
||||||
|
"typescript": "^5.8.2",
|
||||||
"vitest": "^3.0.8"
|
"vitest": "^3.0.8"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import Bun from 'bun'
|
import Bun from 'bun'
|
||||||
|
import type { MiddlewareHandler } from 'hono'
|
||||||
import { createMiddleware } from 'hono/factory'
|
import { createMiddleware } from 'hono/factory'
|
||||||
|
|
||||||
type BunTranspilerOptions = {
|
type BunTranspilerOptions = {
|
||||||
|
@ -16,7 +17,7 @@ export const defaultOptions: Required<BunTranspilerOptions> = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export const bunTranspiler = (options?: BunTranspilerOptions) => {
|
export const bunTranspiler = (options?: BunTranspilerOptions): MiddlewareHandler => {
|
||||||
return createMiddleware(async (c, next) => {
|
return createMiddleware(async (c, next) => {
|
||||||
await next()
|
await next()
|
||||||
const url = new URL(c.req.url)
|
const url = new URL(c.req.url)
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist",
|
||||||
|
"tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo",
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"isolatedDeclarations": true
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts"],
|
||||||
|
"exclude": ["**/*.test.ts"],
|
||||||
|
"references": []
|
||||||
|
}
|
|
@ -1,6 +1,12 @@
|
||||||
{
|
{
|
||||||
"extends": "../../tsconfig.json",
|
"files": [],
|
||||||
"compilerOptions": {
|
"include": [],
|
||||||
"outDir": "./dist"
|
"references": [
|
||||||
}
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc/packages/bun-transpiler",
|
||||||
|
"types": ["vitest/globals"]
|
||||||
|
},
|
||||||
|
"include": ["**/*.test.ts", "vitest.config.ts"],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -35,6 +35,7 @@
|
||||||
"build": "tsup ./src/index.ts ./src/helper/index.ts",
|
"build": "tsup ./src/index.ts ./src/helper/index.ts",
|
||||||
"prepack": "yarn build",
|
"prepack": "yarn build",
|
||||||
"publint": "attw --pack --profile node16 && publint",
|
"publint": "attw --pack --profile node16 && publint",
|
||||||
|
"typecheck": "tsc -b tsconfig.json",
|
||||||
"test": "vitest"
|
"test": "vitest"
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@ -55,9 +56,9 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@arethetypeswrong/cli": "^0.17.4",
|
"@arethetypeswrong/cli": "^0.17.4",
|
||||||
"casbin": "^5.30.0",
|
"casbin": "^5.30.0",
|
||||||
"hono": "^4.5.11",
|
|
||||||
"publint": "^0.3.9",
|
"publint": "^0.3.9",
|
||||||
"tsup": "^8.4.0",
|
"tsup": "^8.4.0",
|
||||||
|
"typescript": "^5.8.2",
|
||||||
"vitest": "^3.0.8"
|
"vitest": "^3.0.8"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist",
|
||||||
|
"tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo",
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"isolatedDeclarations": true
|
||||||
|
},
|
||||||
|
"include": ["./src/**/*.ts"],
|
||||||
|
"references": []
|
||||||
|
}
|
|
@ -1,6 +1,12 @@
|
||||||
{
|
{
|
||||||
"extends": "../../tsconfig.json",
|
"files": [],
|
||||||
"compilerOptions": {
|
"include": [],
|
||||||
"exactOptionalPropertyTypes": true
|
"references": [
|
||||||
}
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc/packages/casbin",
|
||||||
|
"types": ["vitest/globals"]
|
||||||
|
},
|
||||||
|
"include": ["**/*.test.ts", "vitest.config.ts", "vitest.setup.ts"],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -26,6 +26,7 @@
|
||||||
"build": "tsup ./src/index.ts",
|
"build": "tsup ./src/index.ts",
|
||||||
"prepack": "yarn build",
|
"prepack": "yarn build",
|
||||||
"publint": "attw --pack && publint",
|
"publint": "attw --pack && publint",
|
||||||
|
"typecheck": "tsc -b tsconfig.json",
|
||||||
"test": "vitest"
|
"test": "vitest"
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@ -44,9 +45,9 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@arethetypeswrong/cli": "^0.17.4",
|
"@arethetypeswrong/cli": "^0.17.4",
|
||||||
"hono": "^4.0.10",
|
|
||||||
"publint": "^0.3.9",
|
"publint": "^0.3.9",
|
||||||
"tsup": "^8.4.0",
|
"tsup": "^8.4.0",
|
||||||
|
"typescript": "^5.8.2",
|
||||||
"vitest": "^3.0.8"
|
"vitest": "^3.0.8"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -3,6 +3,7 @@ import type { ValidationError } from 'class-validator'
|
||||||
import { IsInt, IsString, ValidateNested } from 'class-validator'
|
import { IsInt, IsString, ValidateNested } from 'class-validator'
|
||||||
import { Hono } from 'hono'
|
import { Hono } from 'hono'
|
||||||
import type { ExtractSchema } from 'hono/types'
|
import type { ExtractSchema } from 'hono/types'
|
||||||
|
import type { ContentfulStatusCode } from 'hono/utils/http-status'
|
||||||
import type { Equal, Expect } from 'hono/utils/types'
|
import type { Equal, Expect } from 'hono/utils/types'
|
||||||
import { classValidator } from '.'
|
import { classValidator } from '.'
|
||||||
|
|
||||||
|
@ -39,6 +40,8 @@ describe('Basic', () => {
|
||||||
success: boolean
|
success: boolean
|
||||||
message: string
|
message: string
|
||||||
}
|
}
|
||||||
|
outputFormat: 'json'
|
||||||
|
status: ContentfulStatusCode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ type Hook<
|
||||||
E extends Env,
|
E extends Env,
|
||||||
P extends string,
|
P extends string,
|
||||||
Target extends keyof ValidationTargets = keyof ValidationTargets,
|
Target extends keyof ValidationTargets = keyof ValidationTargets,
|
||||||
O = object
|
O = object,
|
||||||
> = (
|
> = (
|
||||||
result: ({ success: true } | { success: false; errors: ValidationError[] }) & {
|
result: ({ success: true } | { success: false; errors: ValidationError[] }) & {
|
||||||
data: T
|
data: T
|
||||||
|
@ -119,19 +119,19 @@ export const classValidator = <
|
||||||
[K in Target]?: K extends 'json'
|
[K in Target]?: K extends 'json'
|
||||||
? In
|
? In
|
||||||
: HasUndefined<keyof ValidationTargets[K]> extends true
|
: HasUndefined<keyof ValidationTargets[K]> extends true
|
||||||
? { [K2 in keyof In]?: ValidationTargets[K][K2] }
|
? { [K2 in keyof In]?: ValidationTargets[K][K2] }
|
||||||
: { [K2 in keyof In]: ValidationTargets[K][K2] }
|
: { [K2 in keyof In]: ValidationTargets[K][K2] }
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
[K in Target]: K extends 'json'
|
[K in Target]: K extends 'json'
|
||||||
? In
|
? In
|
||||||
: HasUndefined<keyof ValidationTargets[K]> extends true
|
: HasUndefined<keyof ValidationTargets[K]> extends true
|
||||||
? { [K2 in keyof In]?: ValidationTargets[K][K2] }
|
? { [K2 in keyof In]?: ValidationTargets[K][K2] }
|
||||||
: { [K2 in keyof In]: ValidationTargets[K][K2] }
|
: { [K2 in keyof In]: ValidationTargets[K][K2] }
|
||||||
}
|
}
|
||||||
out: { [K in Target]: Output }
|
out: { [K in Target]: Output }
|
||||||
},
|
},
|
||||||
V extends I = I
|
V extends I = I,
|
||||||
>(
|
>(
|
||||||
target: Target,
|
target: Target,
|
||||||
dataType: T,
|
dataType: T,
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist",
|
||||||
|
"tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo",
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"isolatedDeclarations": true
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts"],
|
||||||
|
"exclude": ["**/*.test.ts"],
|
||||||
|
"references": []
|
||||||
|
}
|
|
@ -1,8 +1,12 @@
|
||||||
{
|
{
|
||||||
"extends": "../../tsconfig.json",
|
"files": [],
|
||||||
"compilerOptions": {
|
"include": [],
|
||||||
"outDir": "./dist",
|
"references": [
|
||||||
"emitDecoratorMetadata": true,
|
{
|
||||||
"experimentalDecorators": true
|
"path": "./tsconfig.build.json"
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc/packages/class-validator",
|
||||||
|
"types": ["vitest/globals"]
|
||||||
|
},
|
||||||
|
"include": ["**/*.test.ts", "vitest.config.ts"],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.build.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,8 +0,0 @@
|
||||||
{
|
|
||||||
"extends": "../../tsconfig.json",
|
|
||||||
"compilerOptions": {
|
|
||||||
"types": ["vitest/globals"],
|
|
||||||
"emitDecoratorMetadata": true,
|
|
||||||
"experimentalDecorators": true
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -4,7 +4,8 @@ export default defineProject({
|
||||||
test: {
|
test: {
|
||||||
globals: true,
|
globals: true,
|
||||||
typecheck: {
|
typecheck: {
|
||||||
tsconfig: './tsconfig.vitest.json',
|
tsconfig: './tsconfig.json',
|
||||||
|
enabled: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,5 +1,11 @@
|
||||||
# @hono/clerk-auth
|
# @hono/clerk-auth
|
||||||
|
|
||||||
|
## 2.0.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#1194](https://github.com/honojs/middleware/pull/1194) [`683455895d35de50bd5c4cc60c0d764b99a8c8ec`](https://github.com/honojs/middleware/commit/683455895d35de50bd5c4cc60c0d764b99a8c8ec) Thanks [@BarryThePenguin](https://github.com/BarryThePenguin)! - Add explicit `MiddlewareHandler` return type
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
### Major Changes
|
### Major Changes
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@hono/clerk-auth",
|
"name": "@hono/clerk-auth",
|
||||||
"version": "2.0.0",
|
"version": "2.0.1",
|
||||||
"description": "A third-party Clerk auth middleware for Hono",
|
"description": "A third-party Clerk auth middleware for Hono",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.cjs",
|
"main": "dist/index.cjs",
|
||||||
|
@ -13,6 +13,7 @@
|
||||||
"build": "tsup ./src/index.ts",
|
"build": "tsup ./src/index.ts",
|
||||||
"prepack": "yarn build",
|
"prepack": "yarn build",
|
||||||
"publint": "attw --pack && publint",
|
"publint": "attw --pack && publint",
|
||||||
|
"typecheck": "tsc -b tsconfig.json",
|
||||||
"test": "vitest"
|
"test": "vitest"
|
||||||
},
|
},
|
||||||
"exports": {
|
"exports": {
|
||||||
|
@ -46,10 +47,10 @@
|
||||||
"@arethetypeswrong/cli": "^0.17.4",
|
"@arethetypeswrong/cli": "^0.17.4",
|
||||||
"@clerk/backend": "^1.0.0",
|
"@clerk/backend": "^1.0.0",
|
||||||
"@types/react": "^18",
|
"@types/react": "^18",
|
||||||
"hono": "^3.11.7",
|
|
||||||
"publint": "^0.3.9",
|
"publint": "^0.3.9",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"tsup": "^8.4.0",
|
"tsup": "^8.4.0",
|
||||||
|
"typescript": "^5.8.2",
|
||||||
"vitest": "^3.0.8"
|
"vitest": "^3.0.8"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
|
@ -12,7 +12,7 @@ declare module 'hono' {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getAuth = (c: Context) => {
|
export const getAuth = (c: Context): ClerkAuth => {
|
||||||
return c.get('clerkAuth')
|
return c.get('clerkAuth')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist",
|
||||||
|
"tsBuildInfoFile": "dist/tsconfig.build.tsbuildinfo",
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"isolatedDeclarations": true
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts"],
|
||||||
|
"exclude": ["**/*.test.ts"],
|
||||||
|
"references": []
|
||||||
|
}
|
|
@ -1,7 +1,12 @@
|
||||||
{
|
{
|
||||||
"extends": "../../tsconfig.json",
|
"files": [],
|
||||||
"compilerOptions": {
|
"include": [],
|
||||||
"outDir": "./dist",
|
"references": [
|
||||||
"types": ["vitest/globals"]
|
{
|
||||||
}
|
"path": "./tsconfig.build.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue