acrylblends 0.6.3 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/docs/framework/README.md +2 -2
- package/docs/framework/UPSTREAM.md +1 -1
- package/docs/framework/guides/jsx.md +24 -0
- package/docs/framework/helpers/ssg.md +3 -6
- package/docs/framework/middleware/builtin/jsx-renderer.md +0 -3
- package/docs/framework/upstream.json +2 -2
- package/lib/accepts.d.ts +1 -1
- package/lib/acryl-base.d.ts +1 -1
- package/lib/adapter.d.ts +1 -1
- package/lib/{app-wFwpg-bt.d.ts → app-D8riatvv.d.ts} +1 -1
- package/lib/basic-auth.d.ts +1 -1
- package/lib/bearer-auth.d.ts +1 -1
- package/lib/body-limit.d.ts +1 -1
- package/lib/cache.d.ts +1 -1
- package/lib/cache.js +4 -4
- package/lib/{client-BHTr318g.js → client-DDLXwhBo.js} +2 -125
- package/lib/client.d.ts +2 -2
- package/lib/client.js +2 -1
- package/lib/combine.d.ts +1 -1
- package/lib/{components-Ce5FRyHU.js → components-0o0CBYNv.js} +2 -2
- package/lib/{components-DYZdxJIJ.js → components-DdI7-ns7.js} +1 -1
- package/lib/compress.d.ts +1 -1
- package/lib/conninfo.d.ts +2 -2
- package/lib/{context-DVQBjuns.d.ts → context-DS3fYyG-.d.ts} +1 -1
- package/lib/context-storage.d.ts +1 -1
- package/lib/cookie.d.ts +1 -1
- package/lib/cors.d.ts +1 -1
- package/lib/csrf.d.ts +1 -1
- package/lib/dev.d.ts +2 -2
- package/lib/etag.d.ts +1 -1
- package/lib/factory.d.ts +2 -2
- package/lib/{hooks-Bq5q9IMl.js → hooks-BMw6BAyP.js} +5 -5
- package/lib/{index-CUTfU69R.d.ts → index-Bb7YJKCq.d.ts} +2 -2
- package/lib/{index-CsvB-F9j.d.ts → index-BvFh1Gfx.d.ts} +1 -1
- package/lib/{index-Cqcdluyn.d.ts → index-CTy4N7ng.d.ts} +2 -2
- package/lib/index.d.ts +4 -4
- package/lib/ip-restriction.d.ts +2 -2
- package/lib/jsx/dom/client.js +1 -1
- package/lib/jsx/dom/jsx-dev-runtime.js +1 -1
- package/lib/jsx/dom/jsx-runtime.js +1 -1
- package/lib/jsx/dom/server.js +1 -1
- package/lib/jsx/dom.js +3 -3
- package/lib/jsx/streaming.js +1 -1
- package/lib/{jsx-dev-runtime-kAhR_4C7.js → jsx-dev-runtime-D18Y35TI.js} +1 -1
- package/lib/jsx-renderer.d.ts +75 -0
- package/lib/jsx-renderer.js +99 -0
- package/lib/jsx.js +3 -3
- package/lib/jwk.d.ts +1 -1
- package/lib/jwt.d.ts +1 -1
- package/lib/language.d.ts +1 -1
- package/lib/logger.d.ts +1 -1
- package/lib/loopback-only.d.ts +1 -1
- package/lib/method-not-allowed.d.ts +2 -2
- package/lib/method-override.d.ts +2 -2
- package/lib/mount.d.ts +1 -1
- package/lib/node-server/conninfo.d.ts +1 -1
- package/lib/node-server/serve-static.d.ts +1 -1
- package/lib/node-server/serve-static.js +1 -1
- package/lib/node-server.d.ts +1 -1
- package/lib/node-server.js +1 -1
- package/lib/powered-by.d.ts +1 -1
- package/lib/pretty-json.d.ts +1 -1
- package/lib/quick.d.ts +1 -1
- package/lib/request-id.d.ts +1 -1
- package/lib/request.d.ts +1 -1
- package/lib/route.d.ts +1 -1
- package/lib/schema-validator.d.ts +1 -1
- package/lib/secure-headers.d.ts +1 -1
- package/lib/{serve-static-Cw23shXv.js → serve-static-B14MF1Va.js} +1 -0
- package/lib/serve-static.d.ts +1 -1
- package/lib/ssg-BwjcA-Ge.js +389 -0
- package/lib/ssg.d.ts +156 -0
- package/lib/ssg.js +2 -0
- package/lib/streaming.d.ts +1 -1
- package/lib/testing.d.ts +3 -3
- package/lib/testing.js +1 -1
- package/lib/timeout.d.ts +1 -1
- package/lib/timing.d.ts +1 -1
- package/lib/tiny.d.ts +1 -1
- package/lib/trailing-slash.d.ts +1 -1
- package/lib/{types-nEL8VPDC.d.ts → types-Dv_nV2cv.d.ts} +1 -1
- package/lib/{types-CQiGmsWW.d.ts → types-zNxyEpG2.d.ts} +2 -2
- package/lib/types.d.ts +1 -1
- package/lib/utils/body.d.ts +1 -1
- package/lib/utils/ipaddr.d.ts +1 -1
- package/lib/utils-Cx61GFMC.js +125 -0
- package/lib/validator.d.ts +1 -1
- package/lib/ws.d.ts +1 -1
- package/package.json +9 -1
- package/plugins/acryl-inspect/upstream.json +1 -1
- package/plugins/acryl-node-server/upstream.json +1 -1
- package/plugins/acryl-router/src/core/helper/ssg/index.ts +14 -0
- package/plugins/acryl-router/src/core/helper/ssg/middleware.ts +83 -0
- package/plugins/acryl-router/src/core/helper/ssg/plugins.ts +72 -0
- package/plugins/acryl-router/src/core/helper/ssg/ssg.ts +471 -0
- package/plugins/acryl-router/src/core/helper/ssg/utils.ts +118 -0
- package/plugins/acryl-router/src/core/jsx/dom/render.ts +6 -6
- package/plugins/acryl-router/src/core/middleware/cache/index.ts +4 -4
- package/plugins/acryl-router/src/core/middleware/jsx-renderer/index.ts +162 -0
- package/plugins/acryl-router/src/helpers/index.ts +1 -0
- package/plugins/acryl-router/src/middleware/index.ts +1 -0
- package/plugins/acryl-router/upstream.json +2 -2
- package/plugins/acryl-router-http/upstream.json +1 -1
- package/plugins/acryl-state/upstream.json +1 -1
- package/plugins/desktop/upstream.json +1 -1
- package/plugins/desktop-web/upstream.json +1 -1
- package/plugins/extensions/resolve.ts +4 -0
- package/shared/AGENTS.core.md +4 -0
- package/templates/agent/tsconfig.json +7 -1
- package/templates/todo/upstream.json +1 -1
- package/plugins/acryl-inspect/tests/report.spec.ts +0 -69
- package/plugins/acryl-inspect/tests/service.spec.ts +0 -121
- package/plugins/acryl-node-server/tests/adapter/app.ts +0 -76
- package/plugins/acryl-node-server/tests/adapter/assets/.static/plain.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/favicon.ico +0 -0
- package/plugins/acryl-node-server/tests/adapter/assets/secret.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/acryl.html +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/admin/secret.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/data.json +0 -5
- package/plugins/acryl-node-server/tests/adapter/assets/static/extensionless +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/foo..bar.txt +0 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static/index.html +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/plain.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-context-path/plain.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.bin +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.bin.br +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt.br +0 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt.zst +0 -1
- package/plugins/acryl-node-server/tests/adapter/conninfo.test.ts +0 -34
- package/plugins/acryl-node-server/tests/adapter/content-length.test.ts +0 -248
- package/plugins/acryl-node-server/tests/adapter/early-hints.test.ts +0 -457
- package/plugins/acryl-node-server/tests/adapter/fixtures/keys/agent1-cert.pem +0 -23
- package/plugins/acryl-node-server/tests/adapter/fixtures/keys/agent1-key.pem +0 -27
- package/plugins/acryl-node-server/tests/adapter/headers.test.ts +0 -252
- package/plugins/acryl-node-server/tests/adapter/helpers/request.ts +0 -190
- package/plugins/acryl-node-server/tests/adapter/listener.test.ts +0 -727
- package/plugins/acryl-node-server/tests/adapter/request-client-disconnect.test.ts +0 -189
- package/plugins/acryl-node-server/tests/adapter/request.test.ts +0 -1230
- package/plugins/acryl-node-server/tests/adapter/response.test.ts +0 -285
- package/plugins/acryl-node-server/tests/adapter/serve-static.test.ts +0 -849
- package/plugins/acryl-node-server/tests/adapter/server-socket.test.ts +0 -790
- package/plugins/acryl-node-server/tests/adapter/server.test.ts +0 -1312
- package/plugins/acryl-node-server/tests/adapter/setup.ts +0 -16
- package/plugins/acryl-node-server/tests/adapter/url.test.ts +0 -76
- package/plugins/acryl-node-server/tests/adapter/utils/response.test.ts +0 -23
- package/plugins/acryl-node-server/tests/adapter/utils/stream.test.ts +0 -75
- package/plugins/acryl-node-server/tests/adapter/utils.test.ts +0 -235
- package/plugins/acryl-node-server/tests/adapter/websocket.test.ts +0 -260
- package/plugins/acryl-node-server/tests/server.spec.ts +0 -141
- package/plugins/acryl-router/src/core/app.test.ts +0 -3833
- package/plugins/acryl-router/src/core/client/client.test.ts +0 -2313
- package/plugins/acryl-router/src/core/client/types.test.ts +0 -149
- package/plugins/acryl-router/src/core/client/utils.test.ts +0 -405
- package/plugins/acryl-router/src/core/compose.test.ts +0 -751
- package/plugins/acryl-router/src/core/context.test.ts +0 -629
- package/plugins/acryl-router/src/core/helper/accepts/accepts.test.ts +0 -344
- package/plugins/acryl-router/src/core/helper/adapter/index.test.ts +0 -55
- package/plugins/acryl-router/src/core/helper/cookie/index.test.ts +0 -510
- package/plugins/acryl-router/src/core/helper/css/common.case.test.tsx +0 -506
- package/plugins/acryl-router/src/core/helper/css/index.test.tsx +0 -678
- package/plugins/acryl-router/src/core/helper/dev/index.test.ts +0 -181
- package/plugins/acryl-router/src/core/helper/factory/index.test.ts +0 -434
- package/plugins/acryl-router/src/core/helper/html/index.test.ts +0 -78
- package/plugins/acryl-router/src/core/helper/proxy/index.test.ts +0 -356
- package/plugins/acryl-router/src/core/helper/route/index.test.ts +0 -259
- package/plugins/acryl-router/src/core/helper/streaming/sse.test.tsx +0 -557
- package/plugins/acryl-router/src/core/helper/streaming/stream.test.ts +0 -128
- package/plugins/acryl-router/src/core/helper/streaming/text.test.ts +0 -34
- package/plugins/acryl-router/src/core/helper/testing/index.test.ts +0 -42
- package/plugins/acryl-router/src/core/helper/websocket/index.test.ts +0 -124
- package/plugins/acryl-router/src/core/http-exception.test.ts +0 -45
- package/plugins/acryl-router/src/core/jsx/base.test.tsx +0 -97
- package/plugins/acryl-router/src/core/jsx/children.test.ts +0 -52
- package/plugins/acryl-router/src/core/jsx/components.test.tsx +0 -936
- package/plugins/acryl-router/src/core/jsx/context-isolation.test.ts +0 -655
- package/plugins/acryl-router/src/core/jsx/dom/client.test.tsx +0 -128
- package/plugins/acryl-router/src/core/jsx/dom/components.test.tsx +0 -330
- package/plugins/acryl-router/src/core/jsx/dom/context.test.tsx +0 -184
- package/plugins/acryl-router/src/core/jsx/dom/css.test.tsx +0 -149
- package/plugins/acryl-router/src/core/jsx/dom/hooks/index.test.tsx +0 -172
- package/plugins/acryl-router/src/core/jsx/dom/index.test.tsx +0 -3681
- package/plugins/acryl-router/src/core/jsx/dom/intrinsic-element/components.test.tsx +0 -1344
- package/plugins/acryl-router/src/core/jsx/dom/server.test.tsx +0 -199
- package/plugins/acryl-router/src/core/jsx/hooks/dom.test.tsx +0 -859
- package/plugins/acryl-router/src/core/jsx/hooks/string.test.tsx +0 -40
- package/plugins/acryl-router/src/core/jsx/index.test.tsx +0 -1744
- package/plugins/acryl-router/src/core/jsx/intrinsic-element/components.test.tsx +0 -666
- package/plugins/acryl-router/src/core/jsx/jsx-runtime.test.tsx +0 -85
- package/plugins/acryl-router/src/core/jsx/streaming.test.tsx +0 -1281
- package/plugins/acryl-router/src/core/jsx/utils.test.ts +0 -366
- package/plugins/acryl-router/src/core/middleware/basic-auth/index.test.ts +0 -434
- package/plugins/acryl-router/src/core/middleware/bearer-auth/index.test.ts +0 -1018
- package/plugins/acryl-router/src/core/middleware/body-limit/index.test.ts +0 -273
- package/plugins/acryl-router/src/core/middleware/cache/index.test.ts +0 -1211
- package/plugins/acryl-router/src/core/middleware/combine/index.test.ts +0 -355
- package/plugins/acryl-router/src/core/middleware/compress/index.test.ts +0 -535
- package/plugins/acryl-router/src/core/middleware/context-storage/index.test.ts +0 -43
- package/plugins/acryl-router/src/core/middleware/cors/index.test.ts +0 -532
- package/plugins/acryl-router/src/core/middleware/csrf/index.test.ts +0 -534
- package/plugins/acryl-router/src/core/middleware/etag/digest.test.ts +0 -21
- package/plugins/acryl-router/src/core/middleware/etag/index.test.ts +0 -503
- package/plugins/acryl-router/src/core/middleware/ip-restriction/index.test.ts +0 -217
- package/plugins/acryl-router/src/core/middleware/jwk/index.test.ts +0 -1135
- package/plugins/acryl-router/src/core/middleware/jwk/keys.test.json +0 -48
- package/plugins/acryl-router/src/core/middleware/jwt/index.test.ts +0 -802
- package/plugins/acryl-router/src/core/middleware/language/index.test.ts +0 -552
- package/plugins/acryl-router/src/core/middleware/logger/index.test.ts +0 -204
- package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.test.ts +0 -292
- package/plugins/acryl-router/src/core/middleware/method-override/index.test.ts +0 -221
- package/plugins/acryl-router/src/core/middleware/mount/index.test.ts +0 -334
- package/plugins/acryl-router/src/core/middleware/powered-by/index.test.ts +0 -37
- package/plugins/acryl-router/src/core/middleware/pretty-json/index.test.ts +0 -218
- package/plugins/acryl-router/src/core/middleware/request-id/index.test.ts +0 -168
- package/plugins/acryl-router/src/core/middleware/secure-headers/index.test.ts +0 -671
- package/plugins/acryl-router/src/core/middleware/serve-static/index.test.ts +0 -450
- package/plugins/acryl-router/src/core/middleware/serve-static/path.test.ts +0 -50
- package/plugins/acryl-router/src/core/middleware/timeout/index.test.ts +0 -70
- package/plugins/acryl-router/src/core/middleware/timing/index.test.ts +0 -310
- package/plugins/acryl-router/src/core/middleware/trailing-slash/index.test.ts +0 -381
- package/plugins/acryl-router/src/core/preset/quick.test.ts +0 -42
- package/plugins/acryl-router/src/core/preset/tiny.test.ts +0 -42
- package/plugins/acryl-router/src/core/request.test.ts +0 -751
- package/plugins/acryl-router/src/core/router/common.case.test.ts +0 -1132
- package/plugins/acryl-router/src/core/router/linear-router/router.test.ts +0 -80
- package/plugins/acryl-router/src/core/router/pattern-router/router.test.ts +0 -46
- package/plugins/acryl-router/src/core/router/reg-exp-router/prepared-router.test.ts +0 -154
- package/plugins/acryl-router/src/core/router/reg-exp-router/router.test.ts +0 -265
- package/plugins/acryl-router/src/core/router/smart-router/router.test.ts +0 -13
- package/plugins/acryl-router/src/core/router/trie-router/node.test.ts +0 -896
- package/plugins/acryl-router/src/core/router/trie-router/router.test.ts +0 -8
- package/plugins/acryl-router/src/core/types.test.ts +0 -4134
- package/plugins/acryl-router/src/core/utils/accept.test.ts +0 -299
- package/plugins/acryl-router/src/core/utils/basic-auth.test.ts +0 -56
- package/plugins/acryl-router/src/core/utils/body.test.ts +0 -496
- package/plugins/acryl-router/src/core/utils/buffer.test.ts +0 -147
- package/plugins/acryl-router/src/core/utils/color.test.ts +0 -23
- package/plugins/acryl-router/src/core/utils/concurrent.test.ts +0 -69
- package/plugins/acryl-router/src/core/utils/cookie.test.ts +0 -460
- package/plugins/acryl-router/src/core/utils/crypto.test.ts +0 -43
- package/plugins/acryl-router/src/core/utils/encode.test.ts +0 -61
- package/plugins/acryl-router/src/core/utils/filepath.test.ts +0 -78
- package/plugins/acryl-router/src/core/utils/html.test.ts +0 -16
- package/plugins/acryl-router/src/core/utils/ipaddr.test.ts +0 -149
- package/plugins/acryl-router/src/core/utils/jwt/jwa.test.ts +0 -86
- package/plugins/acryl-router/src/core/utils/jwt/jwt.test.ts +0 -1788
- package/plugins/acryl-router/src/core/utils/mime.test.ts +0 -64
- package/plugins/acryl-router/src/core/utils/stream.test.ts +0 -212
- package/plugins/acryl-router/src/core/utils/types.test.ts +0 -295
- package/plugins/acryl-router/src/core/utils/url.test.ts +0 -384
- package/plugins/acryl-router/src/core/validator/utils.test.ts +0 -82
- package/plugins/acryl-router/src/core/validator/validator.test.ts +0 -1488
- package/plugins/acryl-router/tests/docs-examples.spec.ts +0 -152
- package/plugins/acryl-router/tests/jsx.spec.tsx +0 -63
- package/plugins/acryl-router/tests/live-install.spec.ts +0 -64
- package/plugins/acryl-router/tests/loader.spec.ts +0 -72
- package/plugins/acryl-router/tests/loopback-only.spec.ts +0 -80
- package/plugins/acryl-router/tests/no-dom/consumer.ts +0 -11
- package/plugins/acryl-router/tests/no-dom/tsconfig.json +0 -13
- package/plugins/acryl-router/tests/service.spec.ts +0 -426
- package/plugins/acryl-router/tests/shadow-state.spec.ts +0 -79
- package/plugins/acryl-router-http/tests/adapter.spec.ts +0 -174
- package/plugins/acryl-router-http/tests/stream.spec.ts +0 -133
- package/plugins/acryl-router-http/tests/surfaces.spec.ts +0 -101
- package/plugins/acryl-state/src/react.ts +0 -11
- package/plugins/acryl-state/tests/cell.spec.ts +0 -71
- package/plugins/acryl-state/tests/react.spec.ts +0 -39
- package/plugins/acryl-state/tests/service.spec.ts +0 -132
|
@@ -1,355 +0,0 @@
|
|
|
1
|
-
import { every, except, some } from './index.ts'
|
|
2
|
-
import { Acryl } from '../../app.ts'
|
|
3
|
-
import type { MiddlewareHandler } from '../../types.ts'
|
|
4
|
-
|
|
5
|
-
const nextMiddleware: MiddlewareHandler = async (_, next) => await next()
|
|
6
|
-
|
|
7
|
-
describe('some', () => {
|
|
8
|
-
let app: Acryl
|
|
9
|
-
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
app = new Acryl()
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
it('Should call only the first middleware', async () => {
|
|
15
|
-
const middleware1 = vi.fn(nextMiddleware)
|
|
16
|
-
const middleware2 = vi.fn(nextMiddleware)
|
|
17
|
-
|
|
18
|
-
app.use('/', some(middleware1, middleware2))
|
|
19
|
-
app.get('/', (c) => {
|
|
20
|
-
return c.text('Hello World')
|
|
21
|
-
})
|
|
22
|
-
const res = await app.request('http://localhost/')
|
|
23
|
-
|
|
24
|
-
expect(middleware1).toBeCalled()
|
|
25
|
-
expect(middleware2).not.toBeCalled()
|
|
26
|
-
expect(await res.text()).toBe('Hello World')
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
it('Should try to call the second middleware if the first one throws an error', async () => {
|
|
30
|
-
const middleware1 = () => {
|
|
31
|
-
throw new Error('Error')
|
|
32
|
-
}
|
|
33
|
-
const middleware2 = vi.fn(nextMiddleware)
|
|
34
|
-
|
|
35
|
-
app.use('/', some(middleware1, middleware2))
|
|
36
|
-
app.get('/', (c) => {
|
|
37
|
-
return c.text('Hello World')
|
|
38
|
-
})
|
|
39
|
-
const res = await app.request('http://localhost/')
|
|
40
|
-
|
|
41
|
-
expect(middleware2).toBeCalled()
|
|
42
|
-
expect(await res.text()).toBe('Hello World')
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
it('Should try to call the second middleware if the first one returns false', async () => {
|
|
46
|
-
const middleware1 = () => false
|
|
47
|
-
const middleware2 = vi.fn(nextMiddleware)
|
|
48
|
-
|
|
49
|
-
app.use('/', some(middleware1, middleware2))
|
|
50
|
-
app.get('/', (c) => {
|
|
51
|
-
return c.text('Hello World')
|
|
52
|
-
})
|
|
53
|
-
const res = await app.request('http://localhost/')
|
|
54
|
-
|
|
55
|
-
expect(middleware2).toBeCalled()
|
|
56
|
-
expect(await res.text()).toBe('Hello World')
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
it('Should throw last error if all middleware throw an error', async () => {
|
|
60
|
-
const middleware1 = () => {
|
|
61
|
-
throw new Error('Error1')
|
|
62
|
-
}
|
|
63
|
-
const middleware2 = () => {
|
|
64
|
-
throw new Error('Error2')
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
app.use('/', some(middleware1, middleware2))
|
|
68
|
-
app.get('/', (c) => {
|
|
69
|
-
return c.text('Hello World')
|
|
70
|
-
})
|
|
71
|
-
app.onError((error, c) => {
|
|
72
|
-
return c.text(error.message)
|
|
73
|
-
})
|
|
74
|
-
const res = await app.request('http://localhost/')
|
|
75
|
-
|
|
76
|
-
expect(await res.text()).toBe('Error2')
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
it('Should throw error if all middleware return false', async () => {
|
|
80
|
-
const middleware1 = () => false
|
|
81
|
-
const middleware2 = () => false
|
|
82
|
-
|
|
83
|
-
app.use('/', some(middleware1, middleware2))
|
|
84
|
-
app.get('/', (c) => {
|
|
85
|
-
return c.text('Hello World')
|
|
86
|
-
})
|
|
87
|
-
app.onError((_, c) => {
|
|
88
|
-
return c.text('oops')
|
|
89
|
-
})
|
|
90
|
-
const res = await app.request('http://localhost/')
|
|
91
|
-
|
|
92
|
-
expect(await res.text()).toBe('oops')
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
it('Should not call skipped middleware even if an error is thrown', async () => {
|
|
96
|
-
const middleware1: MiddlewareHandler = async (_c, next) => {
|
|
97
|
-
await next()
|
|
98
|
-
}
|
|
99
|
-
const middleware2 = vi.fn(() => true)
|
|
100
|
-
|
|
101
|
-
app.use(
|
|
102
|
-
'/',
|
|
103
|
-
every(some(middleware1, middleware2), () => {
|
|
104
|
-
throw new Error('Error')
|
|
105
|
-
})
|
|
106
|
-
)
|
|
107
|
-
app.get('/', (c) => c.text('OK'))
|
|
108
|
-
app.onError((_, c) => {
|
|
109
|
-
return c.text('oops')
|
|
110
|
-
})
|
|
111
|
-
const res = await app.request('http://localhost/')
|
|
112
|
-
|
|
113
|
-
expect(middleware2).not.toBeCalled()
|
|
114
|
-
expect(await res.text()).toBe('oops')
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
it('Should not call skipped middleware even if an error is thrown with returning truthy value middleware', async () => {
|
|
118
|
-
const middleware1 = () => true
|
|
119
|
-
const middleware2 = vi.fn(() => true)
|
|
120
|
-
|
|
121
|
-
app.use(
|
|
122
|
-
'/',
|
|
123
|
-
every(some(middleware1, middleware2), () => {
|
|
124
|
-
throw new Error('Error')
|
|
125
|
-
})
|
|
126
|
-
)
|
|
127
|
-
app.get('/', (c) => c.text('OK'))
|
|
128
|
-
app.onError((_, c) => {
|
|
129
|
-
return c.text('oops')
|
|
130
|
-
})
|
|
131
|
-
const res = await app.request('http://localhost/')
|
|
132
|
-
|
|
133
|
-
expect(middleware2).not.toBeCalled()
|
|
134
|
-
expect(await res.text()).toBe('oops')
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
it('Should return a Response from a middleware that short-circuits', async () => {
|
|
138
|
-
const shortCircuit: MiddlewareHandler = async (c) => c.json({ error: 'bad request' }, 400)
|
|
139
|
-
const next = vi.fn(async (_c, n) => {
|
|
140
|
-
await n()
|
|
141
|
-
})
|
|
142
|
-
|
|
143
|
-
const app = new Acryl()
|
|
144
|
-
app.use('/', some(shortCircuit, next))
|
|
145
|
-
app.get('/', (c) => c.text('handler'))
|
|
146
|
-
|
|
147
|
-
const res = await app.request('http://localhost/')
|
|
148
|
-
|
|
149
|
-
expect(res.status).toBe(400)
|
|
150
|
-
expect(await res.json()).toEqual({ error: 'bad request' })
|
|
151
|
-
expect(next).not.toBeCalled()
|
|
152
|
-
})
|
|
153
|
-
})
|
|
154
|
-
|
|
155
|
-
describe('every', () => {
|
|
156
|
-
let app: Acryl
|
|
157
|
-
|
|
158
|
-
beforeEach(() => {
|
|
159
|
-
app = new Acryl()
|
|
160
|
-
})
|
|
161
|
-
|
|
162
|
-
it('Should call all middleware', async () => {
|
|
163
|
-
const middleware1 = vi.fn(nextMiddleware)
|
|
164
|
-
const middleware2 = vi.fn(nextMiddleware)
|
|
165
|
-
|
|
166
|
-
app.use('/', every(middleware1, middleware2))
|
|
167
|
-
app.get('/', (c) => {
|
|
168
|
-
return c.text('Hello World')
|
|
169
|
-
})
|
|
170
|
-
const res = await app.request('http://localhost/')
|
|
171
|
-
|
|
172
|
-
expect(middleware1).toBeCalled()
|
|
173
|
-
expect(middleware2).toBeCalled()
|
|
174
|
-
expect(await res.text()).toBe('Hello World')
|
|
175
|
-
})
|
|
176
|
-
|
|
177
|
-
it('Should throw error if any middleware throws an error', async () => {
|
|
178
|
-
const middleware1 = () => {
|
|
179
|
-
throw new Error('Error1')
|
|
180
|
-
}
|
|
181
|
-
const middleware2 = vi.fn(nextMiddleware)
|
|
182
|
-
|
|
183
|
-
app.use('/', every(middleware1, middleware2))
|
|
184
|
-
app.get('/', (c) => {
|
|
185
|
-
return c.text('Hello World')
|
|
186
|
-
})
|
|
187
|
-
app.onError((error, c) => {
|
|
188
|
-
return c.text(error.message)
|
|
189
|
-
})
|
|
190
|
-
const res = await app.request('http://localhost/')
|
|
191
|
-
|
|
192
|
-
expect(await res.text()).toBe('Error1')
|
|
193
|
-
expect(middleware2).not.toBeCalled()
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
it('Should throw error if any middleware returns false', async () => {
|
|
197
|
-
const middleware1 = () => false
|
|
198
|
-
const middleware2 = vi.fn(nextMiddleware)
|
|
199
|
-
|
|
200
|
-
app.use('/', every(middleware1, middleware2))
|
|
201
|
-
app.get('/', (c) => {
|
|
202
|
-
return c.text('Hello World')
|
|
203
|
-
})
|
|
204
|
-
app.onError((_, c) => {
|
|
205
|
-
return c.text('oops')
|
|
206
|
-
})
|
|
207
|
-
const res = await app.request('http://localhost/')
|
|
208
|
-
|
|
209
|
-
expect(await res.text()).toBe('oops')
|
|
210
|
-
expect(middleware2).not.toBeCalled()
|
|
211
|
-
})
|
|
212
|
-
|
|
213
|
-
it('Should return the same response a middleware returns if it short-circuits the chain', async () => {
|
|
214
|
-
const middleware1: MiddlewareHandler = async (c) => {
|
|
215
|
-
return c.text('Hello Middleware 1')
|
|
216
|
-
}
|
|
217
|
-
const middleware2 = vi.fn(nextMiddleware)
|
|
218
|
-
|
|
219
|
-
app.use('/', every(middleware1, middleware2))
|
|
220
|
-
app.get('/', (c) => {
|
|
221
|
-
return c.text('Hello World')
|
|
222
|
-
})
|
|
223
|
-
const res = await app.request('http://localhost/')
|
|
224
|
-
|
|
225
|
-
expect(await res.text()).toBe('Hello Middleware 1')
|
|
226
|
-
expect(middleware2).not.toBeCalled()
|
|
227
|
-
})
|
|
228
|
-
|
|
229
|
-
it('Should pass the path params to middlewares', async () => {
|
|
230
|
-
const app = new Acryl()
|
|
231
|
-
app.use('*', nextMiddleware)
|
|
232
|
-
const paramMiddleware: MiddlewareHandler = async (c) => {
|
|
233
|
-
return c.json(c.req.param(), 200)
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
app.use('/:id', every(paramMiddleware))
|
|
237
|
-
app.get('/:id', (c) => {
|
|
238
|
-
return c.text('Hello World')
|
|
239
|
-
})
|
|
240
|
-
|
|
241
|
-
const res = await app.request('http://localhost/123')
|
|
242
|
-
expect(await res.json()).toEqual({ id: '123' })
|
|
243
|
-
})
|
|
244
|
-
})
|
|
245
|
-
|
|
246
|
-
describe('except', () => {
|
|
247
|
-
let app: Acryl
|
|
248
|
-
|
|
249
|
-
beforeEach(() => {
|
|
250
|
-
app = new Acryl()
|
|
251
|
-
})
|
|
252
|
-
|
|
253
|
-
it('Should call all middleware, except the one that matches the condition', async () => {
|
|
254
|
-
const middleware1 = vi.fn(nextMiddleware)
|
|
255
|
-
const middleware2 = vi.fn(nextMiddleware)
|
|
256
|
-
|
|
257
|
-
app.use('*', except('/maintenance', middleware1, middleware2))
|
|
258
|
-
app.get('/maintenance', (c) => {
|
|
259
|
-
return c.text('Hello Maintenance')
|
|
260
|
-
})
|
|
261
|
-
app.get('*', (c) => {
|
|
262
|
-
return c.redirect('/maintenance')
|
|
263
|
-
})
|
|
264
|
-
let res = await app.request('http://localhost/')
|
|
265
|
-
|
|
266
|
-
expect(middleware1).toBeCalled()
|
|
267
|
-
expect(middleware2).toBeCalled()
|
|
268
|
-
expect(res.headers.get('location')).toBe('/maintenance')
|
|
269
|
-
|
|
270
|
-
middleware1.mockClear()
|
|
271
|
-
middleware2.mockClear()
|
|
272
|
-
res = await app.request('http://localhost/maintenance')
|
|
273
|
-
|
|
274
|
-
expect(middleware1).not.toBeCalled()
|
|
275
|
-
expect(middleware2).not.toBeCalled()
|
|
276
|
-
expect(await res.text()).toBe('Hello Maintenance')
|
|
277
|
-
})
|
|
278
|
-
|
|
279
|
-
it('Should call all middleware, except the one that matches some of the conditions', async () => {
|
|
280
|
-
const middleware1 = vi.fn(nextMiddleware)
|
|
281
|
-
const middleware2 = vi.fn(nextMiddleware)
|
|
282
|
-
|
|
283
|
-
app.use('*', except(['/maintenance', '/public/users/:id'], middleware1, middleware2))
|
|
284
|
-
app.get('/maintenance', (c) => {
|
|
285
|
-
return c.text('Hello Maintenance')
|
|
286
|
-
})
|
|
287
|
-
app.get('/public/users/:id', (c) => {
|
|
288
|
-
return c.text(`Hello Public User ${c.req.param('id')}`)
|
|
289
|
-
})
|
|
290
|
-
app.get('/secret', (c) => {
|
|
291
|
-
return c.text('Hello Secret')
|
|
292
|
-
})
|
|
293
|
-
let res = await app.request('http://localhost/secret')
|
|
294
|
-
|
|
295
|
-
expect(middleware1).toBeCalled()
|
|
296
|
-
expect(middleware2).toBeCalled()
|
|
297
|
-
expect(await res.text()).toBe('Hello Secret')
|
|
298
|
-
|
|
299
|
-
middleware1.mockClear()
|
|
300
|
-
middleware2.mockClear()
|
|
301
|
-
res = await app.request('http://localhost/maintenance')
|
|
302
|
-
|
|
303
|
-
expect(middleware1).not.toBeCalled()
|
|
304
|
-
expect(middleware2).not.toBeCalled()
|
|
305
|
-
expect(await res.text()).toBe('Hello Maintenance')
|
|
306
|
-
|
|
307
|
-
middleware1.mockClear()
|
|
308
|
-
middleware2.mockClear()
|
|
309
|
-
res = await app.request('http://localhost/public/users/123')
|
|
310
|
-
|
|
311
|
-
expect(middleware1).not.toBeCalled()
|
|
312
|
-
expect(middleware2).not.toBeCalled()
|
|
313
|
-
expect(await res.text()).toBe('Hello Public User 123')
|
|
314
|
-
})
|
|
315
|
-
|
|
316
|
-
it('Should call all middleware, except the one that matches some of the condition function', async () => {
|
|
317
|
-
const middleware1 = vi.fn(nextMiddleware)
|
|
318
|
-
const middleware2 = vi.fn(nextMiddleware)
|
|
319
|
-
|
|
320
|
-
app.use(
|
|
321
|
-
'*',
|
|
322
|
-
except(['/maintenance', (c) => !!c.req.path.match(/public/)], middleware1, middleware2)
|
|
323
|
-
)
|
|
324
|
-
app.get('/maintenance', (c) => {
|
|
325
|
-
return c.text('Hello Maintenance')
|
|
326
|
-
})
|
|
327
|
-
app.get('/public/users/:id', (c) => {
|
|
328
|
-
return c.text(`Hello Public User ${c.req.param('id')}`)
|
|
329
|
-
})
|
|
330
|
-
app.get('/secret', (c) => {
|
|
331
|
-
return c.text('Hello Secret')
|
|
332
|
-
})
|
|
333
|
-
let res = await app.request('http://localhost/secret')
|
|
334
|
-
|
|
335
|
-
expect(middleware1).toBeCalled()
|
|
336
|
-
expect(middleware2).toBeCalled()
|
|
337
|
-
expect(await res.text()).toBe('Hello Secret')
|
|
338
|
-
|
|
339
|
-
middleware1.mockClear()
|
|
340
|
-
middleware2.mockClear()
|
|
341
|
-
res = await app.request('http://localhost/maintenance')
|
|
342
|
-
|
|
343
|
-
expect(middleware1).not.toBeCalled()
|
|
344
|
-
expect(middleware2).not.toBeCalled()
|
|
345
|
-
expect(await res.text()).toBe('Hello Maintenance')
|
|
346
|
-
|
|
347
|
-
middleware1.mockClear()
|
|
348
|
-
middleware2.mockClear()
|
|
349
|
-
res = await app.request('http://localhost/public/users/123')
|
|
350
|
-
|
|
351
|
-
expect(middleware1).not.toBeCalled()
|
|
352
|
-
expect(middleware2).not.toBeCalled()
|
|
353
|
-
expect(await res.text()).toBe('Hello Public User 123')
|
|
354
|
-
})
|
|
355
|
-
})
|