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.
Files changed (269) hide show
  1. package/README.md +3 -2
  2. package/docs/framework/README.md +2 -2
  3. package/docs/framework/UPSTREAM.md +1 -1
  4. package/docs/framework/guides/jsx.md +24 -0
  5. package/docs/framework/helpers/ssg.md +3 -6
  6. package/docs/framework/middleware/builtin/jsx-renderer.md +0 -3
  7. package/docs/framework/upstream.json +2 -2
  8. package/lib/accepts.d.ts +1 -1
  9. package/lib/acryl-base.d.ts +1 -1
  10. package/lib/adapter.d.ts +1 -1
  11. package/lib/{app-wFwpg-bt.d.ts → app-D8riatvv.d.ts} +1 -1
  12. package/lib/basic-auth.d.ts +1 -1
  13. package/lib/bearer-auth.d.ts +1 -1
  14. package/lib/body-limit.d.ts +1 -1
  15. package/lib/cache.d.ts +1 -1
  16. package/lib/cache.js +4 -4
  17. package/lib/{client-BHTr318g.js → client-DDLXwhBo.js} +2 -125
  18. package/lib/client.d.ts +2 -2
  19. package/lib/client.js +2 -1
  20. package/lib/combine.d.ts +1 -1
  21. package/lib/{components-Ce5FRyHU.js → components-0o0CBYNv.js} +2 -2
  22. package/lib/{components-DYZdxJIJ.js → components-DdI7-ns7.js} +1 -1
  23. package/lib/compress.d.ts +1 -1
  24. package/lib/conninfo.d.ts +2 -2
  25. package/lib/{context-DVQBjuns.d.ts → context-DS3fYyG-.d.ts} +1 -1
  26. package/lib/context-storage.d.ts +1 -1
  27. package/lib/cookie.d.ts +1 -1
  28. package/lib/cors.d.ts +1 -1
  29. package/lib/csrf.d.ts +1 -1
  30. package/lib/dev.d.ts +2 -2
  31. package/lib/etag.d.ts +1 -1
  32. package/lib/factory.d.ts +2 -2
  33. package/lib/{hooks-Bq5q9IMl.js → hooks-BMw6BAyP.js} +5 -5
  34. package/lib/{index-CUTfU69R.d.ts → index-Bb7YJKCq.d.ts} +2 -2
  35. package/lib/{index-CsvB-F9j.d.ts → index-BvFh1Gfx.d.ts} +1 -1
  36. package/lib/{index-Cqcdluyn.d.ts → index-CTy4N7ng.d.ts} +2 -2
  37. package/lib/index.d.ts +4 -4
  38. package/lib/ip-restriction.d.ts +2 -2
  39. package/lib/jsx/dom/client.js +1 -1
  40. package/lib/jsx/dom/jsx-dev-runtime.js +1 -1
  41. package/lib/jsx/dom/jsx-runtime.js +1 -1
  42. package/lib/jsx/dom/server.js +1 -1
  43. package/lib/jsx/dom.js +3 -3
  44. package/lib/jsx/streaming.js +1 -1
  45. package/lib/{jsx-dev-runtime-kAhR_4C7.js → jsx-dev-runtime-D18Y35TI.js} +1 -1
  46. package/lib/jsx-renderer.d.ts +75 -0
  47. package/lib/jsx-renderer.js +99 -0
  48. package/lib/jsx.js +3 -3
  49. package/lib/jwk.d.ts +1 -1
  50. package/lib/jwt.d.ts +1 -1
  51. package/lib/language.d.ts +1 -1
  52. package/lib/logger.d.ts +1 -1
  53. package/lib/loopback-only.d.ts +1 -1
  54. package/lib/method-not-allowed.d.ts +2 -2
  55. package/lib/method-override.d.ts +2 -2
  56. package/lib/mount.d.ts +1 -1
  57. package/lib/node-server/conninfo.d.ts +1 -1
  58. package/lib/node-server/serve-static.d.ts +1 -1
  59. package/lib/node-server/serve-static.js +1 -1
  60. package/lib/node-server.d.ts +1 -1
  61. package/lib/node-server.js +1 -1
  62. package/lib/powered-by.d.ts +1 -1
  63. package/lib/pretty-json.d.ts +1 -1
  64. package/lib/quick.d.ts +1 -1
  65. package/lib/request-id.d.ts +1 -1
  66. package/lib/request.d.ts +1 -1
  67. package/lib/route.d.ts +1 -1
  68. package/lib/schema-validator.d.ts +1 -1
  69. package/lib/secure-headers.d.ts +1 -1
  70. package/lib/{serve-static-Cw23shXv.js → serve-static-B14MF1Va.js} +1 -0
  71. package/lib/serve-static.d.ts +1 -1
  72. package/lib/ssg-BwjcA-Ge.js +389 -0
  73. package/lib/ssg.d.ts +156 -0
  74. package/lib/ssg.js +2 -0
  75. package/lib/streaming.d.ts +1 -1
  76. package/lib/testing.d.ts +3 -3
  77. package/lib/testing.js +1 -1
  78. package/lib/timeout.d.ts +1 -1
  79. package/lib/timing.d.ts +1 -1
  80. package/lib/tiny.d.ts +1 -1
  81. package/lib/trailing-slash.d.ts +1 -1
  82. package/lib/{types-nEL8VPDC.d.ts → types-Dv_nV2cv.d.ts} +1 -1
  83. package/lib/{types-CQiGmsWW.d.ts → types-zNxyEpG2.d.ts} +2 -2
  84. package/lib/types.d.ts +1 -1
  85. package/lib/utils/body.d.ts +1 -1
  86. package/lib/utils/ipaddr.d.ts +1 -1
  87. package/lib/utils-Cx61GFMC.js +125 -0
  88. package/lib/validator.d.ts +1 -1
  89. package/lib/ws.d.ts +1 -1
  90. package/package.json +9 -1
  91. package/plugins/acryl-inspect/upstream.json +1 -1
  92. package/plugins/acryl-node-server/upstream.json +1 -1
  93. package/plugins/acryl-router/src/core/helper/ssg/index.ts +14 -0
  94. package/plugins/acryl-router/src/core/helper/ssg/middleware.ts +83 -0
  95. package/plugins/acryl-router/src/core/helper/ssg/plugins.ts +72 -0
  96. package/plugins/acryl-router/src/core/helper/ssg/ssg.ts +471 -0
  97. package/plugins/acryl-router/src/core/helper/ssg/utils.ts +118 -0
  98. package/plugins/acryl-router/src/core/jsx/dom/render.ts +6 -6
  99. package/plugins/acryl-router/src/core/middleware/cache/index.ts +4 -4
  100. package/plugins/acryl-router/src/core/middleware/jsx-renderer/index.ts +162 -0
  101. package/plugins/acryl-router/src/helpers/index.ts +1 -0
  102. package/plugins/acryl-router/src/middleware/index.ts +1 -0
  103. package/plugins/acryl-router/upstream.json +2 -2
  104. package/plugins/acryl-router-http/upstream.json +1 -1
  105. package/plugins/acryl-state/upstream.json +1 -1
  106. package/plugins/desktop/upstream.json +1 -1
  107. package/plugins/desktop-web/upstream.json +1 -1
  108. package/plugins/extensions/resolve.ts +4 -0
  109. package/shared/AGENTS.core.md +4 -0
  110. package/templates/agent/tsconfig.json +7 -1
  111. package/templates/todo/upstream.json +1 -1
  112. package/plugins/acryl-inspect/tests/report.spec.ts +0 -69
  113. package/plugins/acryl-inspect/tests/service.spec.ts +0 -121
  114. package/plugins/acryl-node-server/tests/adapter/app.ts +0 -76
  115. package/plugins/acryl-node-server/tests/adapter/assets/.static/plain.txt +0 -1
  116. package/plugins/acryl-node-server/tests/adapter/assets/favicon.ico +0 -0
  117. package/plugins/acryl-node-server/tests/adapter/assets/secret.txt +0 -1
  118. package/plugins/acryl-node-server/tests/adapter/assets/static/acryl.html +0 -1
  119. package/plugins/acryl-node-server/tests/adapter/assets/static/admin/secret.txt +0 -1
  120. package/plugins/acryl-node-server/tests/adapter/assets/static/data.json +0 -5
  121. package/plugins/acryl-node-server/tests/adapter/assets/static/extensionless +0 -1
  122. package/plugins/acryl-node-server/tests/adapter/assets/static/foo..bar.txt +0 -0
  123. package/plugins/acryl-node-server/tests/adapter/assets/static/index.html +0 -1
  124. package/plugins/acryl-node-server/tests/adapter/assets/static/plain.txt +0 -1
  125. package/plugins/acryl-node-server/tests/adapter/assets/static-with-context-path/plain.txt +0 -1
  126. package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.bin +0 -1
  127. package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.bin.br +0 -1
  128. package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt +0 -1
  129. package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt.br +0 -1
  130. package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt.zst +0 -1
  131. package/plugins/acryl-node-server/tests/adapter/conninfo.test.ts +0 -34
  132. package/plugins/acryl-node-server/tests/adapter/content-length.test.ts +0 -248
  133. package/plugins/acryl-node-server/tests/adapter/early-hints.test.ts +0 -457
  134. package/plugins/acryl-node-server/tests/adapter/fixtures/keys/agent1-cert.pem +0 -23
  135. package/plugins/acryl-node-server/tests/adapter/fixtures/keys/agent1-key.pem +0 -27
  136. package/plugins/acryl-node-server/tests/adapter/headers.test.ts +0 -252
  137. package/plugins/acryl-node-server/tests/adapter/helpers/request.ts +0 -190
  138. package/plugins/acryl-node-server/tests/adapter/listener.test.ts +0 -727
  139. package/plugins/acryl-node-server/tests/adapter/request-client-disconnect.test.ts +0 -189
  140. package/plugins/acryl-node-server/tests/adapter/request.test.ts +0 -1230
  141. package/plugins/acryl-node-server/tests/adapter/response.test.ts +0 -285
  142. package/plugins/acryl-node-server/tests/adapter/serve-static.test.ts +0 -849
  143. package/plugins/acryl-node-server/tests/adapter/server-socket.test.ts +0 -790
  144. package/plugins/acryl-node-server/tests/adapter/server.test.ts +0 -1312
  145. package/plugins/acryl-node-server/tests/adapter/setup.ts +0 -16
  146. package/plugins/acryl-node-server/tests/adapter/url.test.ts +0 -76
  147. package/plugins/acryl-node-server/tests/adapter/utils/response.test.ts +0 -23
  148. package/plugins/acryl-node-server/tests/adapter/utils/stream.test.ts +0 -75
  149. package/plugins/acryl-node-server/tests/adapter/utils.test.ts +0 -235
  150. package/plugins/acryl-node-server/tests/adapter/websocket.test.ts +0 -260
  151. package/plugins/acryl-node-server/tests/server.spec.ts +0 -141
  152. package/plugins/acryl-router/src/core/app.test.ts +0 -3833
  153. package/plugins/acryl-router/src/core/client/client.test.ts +0 -2313
  154. package/plugins/acryl-router/src/core/client/types.test.ts +0 -149
  155. package/plugins/acryl-router/src/core/client/utils.test.ts +0 -405
  156. package/plugins/acryl-router/src/core/compose.test.ts +0 -751
  157. package/plugins/acryl-router/src/core/context.test.ts +0 -629
  158. package/plugins/acryl-router/src/core/helper/accepts/accepts.test.ts +0 -344
  159. package/plugins/acryl-router/src/core/helper/adapter/index.test.ts +0 -55
  160. package/plugins/acryl-router/src/core/helper/cookie/index.test.ts +0 -510
  161. package/plugins/acryl-router/src/core/helper/css/common.case.test.tsx +0 -506
  162. package/plugins/acryl-router/src/core/helper/css/index.test.tsx +0 -678
  163. package/plugins/acryl-router/src/core/helper/dev/index.test.ts +0 -181
  164. package/plugins/acryl-router/src/core/helper/factory/index.test.ts +0 -434
  165. package/plugins/acryl-router/src/core/helper/html/index.test.ts +0 -78
  166. package/plugins/acryl-router/src/core/helper/proxy/index.test.ts +0 -356
  167. package/plugins/acryl-router/src/core/helper/route/index.test.ts +0 -259
  168. package/plugins/acryl-router/src/core/helper/streaming/sse.test.tsx +0 -557
  169. package/plugins/acryl-router/src/core/helper/streaming/stream.test.ts +0 -128
  170. package/plugins/acryl-router/src/core/helper/streaming/text.test.ts +0 -34
  171. package/plugins/acryl-router/src/core/helper/testing/index.test.ts +0 -42
  172. package/plugins/acryl-router/src/core/helper/websocket/index.test.ts +0 -124
  173. package/plugins/acryl-router/src/core/http-exception.test.ts +0 -45
  174. package/plugins/acryl-router/src/core/jsx/base.test.tsx +0 -97
  175. package/plugins/acryl-router/src/core/jsx/children.test.ts +0 -52
  176. package/plugins/acryl-router/src/core/jsx/components.test.tsx +0 -936
  177. package/plugins/acryl-router/src/core/jsx/context-isolation.test.ts +0 -655
  178. package/plugins/acryl-router/src/core/jsx/dom/client.test.tsx +0 -128
  179. package/plugins/acryl-router/src/core/jsx/dom/components.test.tsx +0 -330
  180. package/plugins/acryl-router/src/core/jsx/dom/context.test.tsx +0 -184
  181. package/plugins/acryl-router/src/core/jsx/dom/css.test.tsx +0 -149
  182. package/plugins/acryl-router/src/core/jsx/dom/hooks/index.test.tsx +0 -172
  183. package/plugins/acryl-router/src/core/jsx/dom/index.test.tsx +0 -3681
  184. package/plugins/acryl-router/src/core/jsx/dom/intrinsic-element/components.test.tsx +0 -1344
  185. package/plugins/acryl-router/src/core/jsx/dom/server.test.tsx +0 -199
  186. package/plugins/acryl-router/src/core/jsx/hooks/dom.test.tsx +0 -859
  187. package/plugins/acryl-router/src/core/jsx/hooks/string.test.tsx +0 -40
  188. package/plugins/acryl-router/src/core/jsx/index.test.tsx +0 -1744
  189. package/plugins/acryl-router/src/core/jsx/intrinsic-element/components.test.tsx +0 -666
  190. package/plugins/acryl-router/src/core/jsx/jsx-runtime.test.tsx +0 -85
  191. package/plugins/acryl-router/src/core/jsx/streaming.test.tsx +0 -1281
  192. package/plugins/acryl-router/src/core/jsx/utils.test.ts +0 -366
  193. package/plugins/acryl-router/src/core/middleware/basic-auth/index.test.ts +0 -434
  194. package/plugins/acryl-router/src/core/middleware/bearer-auth/index.test.ts +0 -1018
  195. package/plugins/acryl-router/src/core/middleware/body-limit/index.test.ts +0 -273
  196. package/plugins/acryl-router/src/core/middleware/cache/index.test.ts +0 -1211
  197. package/plugins/acryl-router/src/core/middleware/combine/index.test.ts +0 -355
  198. package/plugins/acryl-router/src/core/middleware/compress/index.test.ts +0 -535
  199. package/plugins/acryl-router/src/core/middleware/context-storage/index.test.ts +0 -43
  200. package/plugins/acryl-router/src/core/middleware/cors/index.test.ts +0 -532
  201. package/plugins/acryl-router/src/core/middleware/csrf/index.test.ts +0 -534
  202. package/plugins/acryl-router/src/core/middleware/etag/digest.test.ts +0 -21
  203. package/plugins/acryl-router/src/core/middleware/etag/index.test.ts +0 -503
  204. package/plugins/acryl-router/src/core/middleware/ip-restriction/index.test.ts +0 -217
  205. package/plugins/acryl-router/src/core/middleware/jwk/index.test.ts +0 -1135
  206. package/plugins/acryl-router/src/core/middleware/jwk/keys.test.json +0 -48
  207. package/plugins/acryl-router/src/core/middleware/jwt/index.test.ts +0 -802
  208. package/plugins/acryl-router/src/core/middleware/language/index.test.ts +0 -552
  209. package/plugins/acryl-router/src/core/middleware/logger/index.test.ts +0 -204
  210. package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.test.ts +0 -292
  211. package/plugins/acryl-router/src/core/middleware/method-override/index.test.ts +0 -221
  212. package/plugins/acryl-router/src/core/middleware/mount/index.test.ts +0 -334
  213. package/plugins/acryl-router/src/core/middleware/powered-by/index.test.ts +0 -37
  214. package/plugins/acryl-router/src/core/middleware/pretty-json/index.test.ts +0 -218
  215. package/plugins/acryl-router/src/core/middleware/request-id/index.test.ts +0 -168
  216. package/plugins/acryl-router/src/core/middleware/secure-headers/index.test.ts +0 -671
  217. package/plugins/acryl-router/src/core/middleware/serve-static/index.test.ts +0 -450
  218. package/plugins/acryl-router/src/core/middleware/serve-static/path.test.ts +0 -50
  219. package/plugins/acryl-router/src/core/middleware/timeout/index.test.ts +0 -70
  220. package/plugins/acryl-router/src/core/middleware/timing/index.test.ts +0 -310
  221. package/plugins/acryl-router/src/core/middleware/trailing-slash/index.test.ts +0 -381
  222. package/plugins/acryl-router/src/core/preset/quick.test.ts +0 -42
  223. package/plugins/acryl-router/src/core/preset/tiny.test.ts +0 -42
  224. package/plugins/acryl-router/src/core/request.test.ts +0 -751
  225. package/plugins/acryl-router/src/core/router/common.case.test.ts +0 -1132
  226. package/plugins/acryl-router/src/core/router/linear-router/router.test.ts +0 -80
  227. package/plugins/acryl-router/src/core/router/pattern-router/router.test.ts +0 -46
  228. package/plugins/acryl-router/src/core/router/reg-exp-router/prepared-router.test.ts +0 -154
  229. package/plugins/acryl-router/src/core/router/reg-exp-router/router.test.ts +0 -265
  230. package/plugins/acryl-router/src/core/router/smart-router/router.test.ts +0 -13
  231. package/plugins/acryl-router/src/core/router/trie-router/node.test.ts +0 -896
  232. package/plugins/acryl-router/src/core/router/trie-router/router.test.ts +0 -8
  233. package/plugins/acryl-router/src/core/types.test.ts +0 -4134
  234. package/plugins/acryl-router/src/core/utils/accept.test.ts +0 -299
  235. package/plugins/acryl-router/src/core/utils/basic-auth.test.ts +0 -56
  236. package/plugins/acryl-router/src/core/utils/body.test.ts +0 -496
  237. package/plugins/acryl-router/src/core/utils/buffer.test.ts +0 -147
  238. package/plugins/acryl-router/src/core/utils/color.test.ts +0 -23
  239. package/plugins/acryl-router/src/core/utils/concurrent.test.ts +0 -69
  240. package/plugins/acryl-router/src/core/utils/cookie.test.ts +0 -460
  241. package/plugins/acryl-router/src/core/utils/crypto.test.ts +0 -43
  242. package/plugins/acryl-router/src/core/utils/encode.test.ts +0 -61
  243. package/plugins/acryl-router/src/core/utils/filepath.test.ts +0 -78
  244. package/plugins/acryl-router/src/core/utils/html.test.ts +0 -16
  245. package/plugins/acryl-router/src/core/utils/ipaddr.test.ts +0 -149
  246. package/plugins/acryl-router/src/core/utils/jwt/jwa.test.ts +0 -86
  247. package/plugins/acryl-router/src/core/utils/jwt/jwt.test.ts +0 -1788
  248. package/plugins/acryl-router/src/core/utils/mime.test.ts +0 -64
  249. package/plugins/acryl-router/src/core/utils/stream.test.ts +0 -212
  250. package/plugins/acryl-router/src/core/utils/types.test.ts +0 -295
  251. package/plugins/acryl-router/src/core/utils/url.test.ts +0 -384
  252. package/plugins/acryl-router/src/core/validator/utils.test.ts +0 -82
  253. package/plugins/acryl-router/src/core/validator/validator.test.ts +0 -1488
  254. package/plugins/acryl-router/tests/docs-examples.spec.ts +0 -152
  255. package/plugins/acryl-router/tests/jsx.spec.tsx +0 -63
  256. package/plugins/acryl-router/tests/live-install.spec.ts +0 -64
  257. package/plugins/acryl-router/tests/loader.spec.ts +0 -72
  258. package/plugins/acryl-router/tests/loopback-only.spec.ts +0 -80
  259. package/plugins/acryl-router/tests/no-dom/consumer.ts +0 -11
  260. package/plugins/acryl-router/tests/no-dom/tsconfig.json +0 -13
  261. package/plugins/acryl-router/tests/service.spec.ts +0 -426
  262. package/plugins/acryl-router/tests/shadow-state.spec.ts +0 -79
  263. package/plugins/acryl-router-http/tests/adapter.spec.ts +0 -174
  264. package/plugins/acryl-router-http/tests/stream.spec.ts +0 -133
  265. package/plugins/acryl-router-http/tests/surfaces.spec.ts +0 -101
  266. package/plugins/acryl-state/src/react.ts +0 -11
  267. package/plugins/acryl-state/tests/cell.spec.ts +0 -71
  268. package/plugins/acryl-state/tests/react.spec.ts +0 -39
  269. package/plugins/acryl-state/tests/service.spec.ts +0 -132
@@ -1,78 +0,0 @@
1
- import { getFilePath, getFilePathWithoutDefaultDocument } from './filepath.ts'
2
-
3
- describe('getFilePathWithoutDefaultDocument', () => {
4
- it('Should return file path correctly', async () => {
5
- expect(getFilePathWithoutDefaultDocument({ filename: 'foo.txt' })).toBe('foo.txt')
6
- expect(getFilePathWithoutDefaultDocument({ filename: 'foo.txt', root: 'bar' })).toBe(
7
- 'bar/foo.txt'
8
- )
9
-
10
- expect(getFilePathWithoutDefaultDocument({ filename: '../foo' })).toBeUndefined()
11
- expect(getFilePathWithoutDefaultDocument({ filename: '/../foo' })).toBeUndefined()
12
- expect(getFilePathWithoutDefaultDocument({ filename: './../foo' })).toBeUndefined()
13
- expect(getFilePathWithoutDefaultDocument({ filename: 'foo..bar.txt' })).toBe('foo..bar.txt')
14
- expect(getFilePathWithoutDefaultDocument({ filename: '/foo..bar.txt' })).toBe('foo..bar.txt')
15
- expect(getFilePathWithoutDefaultDocument({ filename: './foo..bar.txt' })).toBe('foo..bar.txt')
16
- expect(getFilePathWithoutDefaultDocument({ filename: './..foo/bar.txt' })).toBe('..foo/bar.txt')
17
- expect(getFilePathWithoutDefaultDocument({ filename: './foo../bar.txt' })).toBe('foo../bar.txt')
18
- expect(getFilePathWithoutDefaultDocument({ filename: './..foo../bar.txt' })).toBe(
19
- '..foo../bar.txt'
20
- )
21
-
22
- expect(
23
- getFilePathWithoutDefaultDocument({ filename: slashToBackslash('/../foo') })
24
- ).toBeUndefined()
25
- expect(
26
- getFilePathWithoutDefaultDocument({ filename: slashToBackslash('./../foo') })
27
- ).toBeUndefined()
28
- expect(getFilePathWithoutDefaultDocument({ filename: slashToBackslash('foo..bar.txt') })).toBe(
29
- 'foo..bar.txt'
30
- )
31
- expect(getFilePathWithoutDefaultDocument({ filename: slashToBackslash('/foo..bar.txt') })).toBe(
32
- 'foo..bar.txt'
33
- )
34
- expect(
35
- getFilePathWithoutDefaultDocument({ filename: slashToBackslash('./foo..bar.txt') })
36
- ).toBe('foo..bar.txt')
37
- expect(
38
- getFilePathWithoutDefaultDocument({ filename: slashToBackslash('./..foo/bar.txt') })
39
- ).toBe('..foo/bar.txt')
40
- expect(
41
- getFilePathWithoutDefaultDocument({ filename: slashToBackslash('./foo../bar.txt') })
42
- ).toBe('foo../bar.txt')
43
- expect(
44
- getFilePathWithoutDefaultDocument({ filename: slashToBackslash('./..foo../bar.txt') })
45
- ).toBe('..foo../bar.txt')
46
-
47
- // Multiple path segments: every backslash must be normalized, not just the first
48
- expect(
49
- getFilePathWithoutDefaultDocument({ filename: slashToBackslash('foo/bar/baz.txt') })
50
- ).toBe('foo/bar/baz.txt')
51
- expect(
52
- getFilePathWithoutDefaultDocument({
53
- filename: slashToBackslash('foo/bar/baz.txt'),
54
- root: 'assets',
55
- })
56
- ).toBe('assets/foo/bar/baz.txt')
57
- })
58
- })
59
-
60
- describe('getFilePath', () => {
61
- it('Should return file path correctly', async () => {
62
- expect(getFilePath({ filename: 'foo' })).toBe('foo/index.html')
63
-
64
- expect(getFilePath({ filename: 'foo', root: 'bar' })).toBe('bar/foo/index.html')
65
-
66
- expect(getFilePath({ filename: 'foo', defaultDocument: 'index.txt' })).toBe('foo/index.txt')
67
- expect(getFilePath({ filename: 'foo', root: 'bar', defaultDocument: 'index.txt' })).toBe(
68
- 'bar/foo/index.txt'
69
- )
70
-
71
- expect(getFilePath({ filename: 'filename.suffix_index' })).toBe('filename.suffix_index')
72
- expect(getFilePath({ filename: 'filename.suffix-index' })).toBe('filename.suffix-index')
73
- })
74
- })
75
-
76
- function slashToBackslash(filename: string) {
77
- return filename.split('/').join('\\')
78
- }
@@ -1,16 +0,0 @@
1
- import { escapeToBuffer } from './html.ts'
2
- import type { StringBuffer } from './html.ts'
3
-
4
- describe('HTML utilities', () => {
5
- describe('escapeToBuffer', () => {
6
- it('Should escape special characters', () => {
7
- let buffer: StringBuffer = ['']
8
- escapeToBuffer('I <b>think</b> this is good.', buffer)
9
- expect(buffer[0]).toBe('I &lt;b&gt;think&lt;/b&gt; this is good.')
10
-
11
- buffer = ['']
12
- escapeToBuffer('John "Johnny" Smith', buffer)
13
- expect(buffer[0]).toBe('John &quot;Johnny&quot; Smith')
14
- })
15
- })
16
- })
@@ -1,149 +0,0 @@
1
- import {
2
- convertIPv4BinaryToString,
3
- convertIPv4ToBinary,
4
- convertIPv6BinaryToString,
5
- convertIPv6ToBinary,
6
- distinctRemoteAddr,
7
- expandIPv6,
8
- INVALID_IP_ADDRESS_ERROR_CODE,
9
- } from './ipaddr.ts'
10
-
11
- const expectInvalidIPAddressError = (fn: () => unknown) => {
12
- try {
13
- fn()
14
- } catch (error) {
15
- expect(error).toBeInstanceOf(TypeError)
16
- expect(error).toHaveProperty('code', INVALID_IP_ADDRESS_ERROR_CODE)
17
- return
18
- }
19
- throw new Error('Expected invalid IP address error')
20
- }
21
-
22
- describe('expandIPv6', () => {
23
- it('Should result be valid', () => {
24
- expect(expandIPv6('1::1')).toBe('0001:0000:0000:0000:0000:0000:0000:0001')
25
- expect(expandIPv6('::1')).toBe('0000:0000:0000:0000:0000:0000:0000:0001')
26
- expect(expandIPv6('2001:2::')).toBe('2001:0002:0000:0000:0000:0000:0000:0000')
27
- expect(expandIPv6('2001:2::')).toBe('2001:0002:0000:0000:0000:0000:0000:0000')
28
- expect(expandIPv6('2001:0:0:db8::1')).toBe('2001:0000:0000:0db8:0000:0000:0000:0001')
29
- expect(expandIPv6('::ffff:127.0.0.1')).toBe('0000:0000:0000:0000:0000:ffff:7f00:0001')
30
- expect(expandIPv6('::ffff:0.0.0.1')).toBe('0000:0000:0000:0000:0000:ffff:0000:0001')
31
- expect(expandIPv6('2001:db8:1:2:3:4:0.0.0.1')).toBe('2001:0db8:0001:0002:0003:0004:0000:0001')
32
- expect(expandIPv6('::0.0.0.0')).toBe('0000:0000:0000:0000:0000:0000:0000:0000')
33
- })
34
-
35
- it('Should expand the unspecified address "::" to eight zero groups', () => {
36
- expect(expandIPv6('::')).toBe('0000:0000:0000:0000:0000:0000:0000:0000')
37
- })
38
- })
39
- describe('distinctRemoteAddr', () => {
40
- it('Should result be valid', () => {
41
- expect(distinctRemoteAddr('1::1')).toBe('IPv6')
42
- expect(distinctRemoteAddr('::1')).toBe('IPv6')
43
- expect(distinctRemoteAddr('::ffff:127.0.0.1')).toBe('IPv6')
44
-
45
- expect(distinctRemoteAddr('192.168.2.0')).toBe('IPv4')
46
- expect(distinctRemoteAddr('192.168.2.0')).toBe('IPv4')
47
-
48
- expect(distinctRemoteAddr('example.com')).toBeUndefined()
49
- })
50
-
51
- it('Should reject invalid IPv4 addresses with octets > 255', () => {
52
- expect(distinctRemoteAddr('1.2.3.256')).toBeUndefined()
53
- expect(distinctRemoteAddr('1.2.3.999')).toBeUndefined()
54
- expect(distinctRemoteAddr('1.2.2.355')).toBeUndefined()
55
- expect(distinctRemoteAddr('256.0.0.1')).toBeUndefined()
56
- expect(distinctRemoteAddr('999.999.999.999')).toBeUndefined()
57
- })
58
-
59
- it('Should accept valid IPv4 edge cases', () => {
60
- expect(distinctRemoteAddr('0.0.0.0')).toBe('IPv4')
61
- expect(distinctRemoteAddr('255.255.255.255')).toBe('IPv4')
62
- expect(distinctRemoteAddr('1.2.3.4')).toBe('IPv4')
63
- })
64
- })
65
-
66
- describe('convertIPv4ToBinary', () => {
67
- it('Should result is valid', () => {
68
- expect(convertIPv4ToBinary('0.0.0.0')).toBe(0n)
69
- expect(convertIPv4ToBinary('0.0.0.1')).toBe(1n)
70
-
71
- expect(convertIPv4ToBinary('0.0.1.0')).toBe(1n << 8n)
72
- })
73
-
74
- test.each(['1.2.3.256', '1.2.3', '1.2.3.4.5', '1..3.4', '01.2.3.4', 'a.b.c.d'])(
75
- 'Should throw for invalid IPv4: %s',
76
- (input) => {
77
- expectInvalidIPAddressError(() => convertIPv4ToBinary(input))
78
- }
79
- )
80
- })
81
-
82
- describe('convertIPv4ToString', () => {
83
- // add tons of test cases here
84
- test.each`
85
- input | expected
86
- ${'0.0.0.0'} | ${'0.0.0.0'}
87
- ${'0.0.0.1'} | ${'0.0.0.1'}
88
- ${'0.0.1.0'} | ${'0.0.1.0'}
89
- `('convertIPv4ToString($input) === $expected', ({ input, expected }) => {
90
- expect(convertIPv4BinaryToString(convertIPv4ToBinary(input))).toBe(expected)
91
- })
92
- })
93
-
94
- describe('convertIPv6ToBinary', () => {
95
- it('Should result is valid', () => {
96
- expect(convertIPv6ToBinary('::0')).toBe(0n)
97
- expect(convertIPv6ToBinary('::1')).toBe(1n)
98
-
99
- expect(convertIPv6ToBinary('::f')).toBe(15n)
100
- expect(convertIPv6ToBinary('1234::5678')).toBe(24196103360772296748952112894165669496n)
101
- expect(convertIPv6ToBinary('::ffff:127.0.0.1')).toBe(281472812449793n)
102
- expect(convertIPv6ToBinary('fe80::1%eth0')).toBe(convertIPv6ToBinary('fe80::1'))
103
- })
104
-
105
- test.each([
106
- '1::2::3',
107
- '1:2:3:4:5:6:7:8:9',
108
- '1:2:3:4:5:6:7',
109
- '12345::',
110
- 'gggg::',
111
- '::ffff:127.0.0.256',
112
- '1234:::5678',
113
- '2001:db8::1%eth0',
114
- '::ffff:127.0.0.1%eth0',
115
- '1:2:3%eth0',
116
- 'gggg%eth0',
117
- 'fe80::1%',
118
- ])('Should throw for invalid IPv6: %s', (input) => {
119
- expectInvalidIPAddressError(() => convertIPv6ToBinary(input))
120
- })
121
- })
122
-
123
- describe('convertIPv6ToString', () => {
124
- // add tons of test cases here
125
- test.each`
126
- input | expected
127
- ${'::1'} | ${'::1'}
128
- ${'1::'} | ${'1::'}
129
- ${'1234::5678'} | ${'1234::5678'}
130
- ${'2001:2::'} | ${'2001:2::'}
131
- ${'2001::db8:0:0:0:0:1'} | ${'2001:0:db8::1'}
132
- ${'1234:5678:9abc:def0:1234:5678:9abc:def0'} | ${'1234:5678:9abc:def0:1234:5678:9abc:def0'}
133
- ${'::ffff:127.0.0.1'} | ${'::ffff:127.0.0.1'}
134
- ${'fe80::1%eth0'} | ${'fe80::1'}
135
- ${'1:0:2:3:4:5:6:7'} | ${'1:0:2:3:4:5:6:7'}
136
- ${'0:1:2:3:4:5:6:7'} | ${'0:1:2:3:4:5:6:7'}
137
- ${'1:2:3:4:5:6:7:0'} | ${'1:2:3:4:5:6:7:0'}
138
- ${'1:0:0:2:3:4:5:6'} | ${'1::2:3:4:5:6'}
139
- `('convertIPv6ToString($input) === $expected', ({ input, expected }) => {
140
- expect(convertIPv6BinaryToString(convertIPv6ToBinary(input))).toBe(expected)
141
- })
142
-
143
- it('Should compress the unspecified address (all zero groups) to "::"', () => {
144
- expect(convertIPv6BinaryToString(0n)).toBe('::')
145
- expect(convertIPv6BinaryToString(convertIPv6ToBinary('::'))).toBe('::')
146
- // The output must round-trip back to the same binary value.
147
- expect(convertIPv6ToBinary(convertIPv6BinaryToString(0n))).toBe(0n)
148
- })
149
- })
@@ -1,86 +0,0 @@
1
- import { AlgorithmTypes } from './jwa.ts'
2
- import type { AsymmetricAlgorithm, SymmetricAlgorithm, SignatureAlgorithm } from './jwa.ts'
3
-
4
- describe('Types', () => {
5
- it('AlgorithmTypes', () => {
6
- expect('HS256' as AlgorithmTypes).toBe(AlgorithmTypes.HS256)
7
- expect('HS384' as AlgorithmTypes).toBe(AlgorithmTypes.HS384)
8
- expect('HS512' as AlgorithmTypes).toBe(AlgorithmTypes.HS512)
9
- expect('RS256' as AlgorithmTypes).toBe(AlgorithmTypes.RS256)
10
- expect('RS384' as AlgorithmTypes).toBe(AlgorithmTypes.RS384)
11
- expect('RS512' as AlgorithmTypes).toBe(AlgorithmTypes.RS512)
12
- expect('PS256' as AlgorithmTypes).toBe(AlgorithmTypes.PS256)
13
- expect('PS384' as AlgorithmTypes).toBe(AlgorithmTypes.PS384)
14
- expect('PS512' as AlgorithmTypes).toBe(AlgorithmTypes.PS512)
15
- expect('ES256' as AlgorithmTypes).toBe(AlgorithmTypes.ES256)
16
- expect('ES384' as AlgorithmTypes).toBe(AlgorithmTypes.ES384)
17
- expect('ES512' as AlgorithmTypes).toBe(AlgorithmTypes.ES512)
18
- expect('EdDSA' as AlgorithmTypes).toBe(AlgorithmTypes.EdDSA)
19
-
20
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
21
- // @ts-ignore
22
- expect(undefined as AlgorithmTypes).toBe(undefined)
23
- expect('' as AlgorithmTypes).toBe('')
24
- })
25
-
26
- it('SymmetricAlgorithm type should only include HMAC algorithms', () => {
27
- // These should be valid SymmetricAlgorithm values
28
- const hs256: SymmetricAlgorithm = 'HS256'
29
- const hs384: SymmetricAlgorithm = 'HS384'
30
- const hs512: SymmetricAlgorithm = 'HS512'
31
-
32
- expect(hs256).toBe('HS256')
33
- expect(hs384).toBe('HS384')
34
- expect(hs512).toBe('HS512')
35
-
36
- // Type-level test: these would cause compile errors if uncommented
37
- // const rs256: SymmetricAlgorithm = 'RS256' // Error: Type '"RS256"' is not assignable to type 'SymmetricAlgorithm'
38
- })
39
-
40
- it('AsymmetricAlgorithm type should only include asymmetric algorithms', () => {
41
- // These should be valid AsymmetricAlgorithm values
42
- const asymmetricAlgs: AsymmetricAlgorithm[] = [
43
- 'RS256',
44
- 'RS384',
45
- 'RS512',
46
- 'PS256',
47
- 'PS384',
48
- 'PS512',
49
- 'ES256',
50
- 'ES384',
51
- 'ES512',
52
- 'EdDSA',
53
- ]
54
-
55
- expect(asymmetricAlgs).toHaveLength(10)
56
-
57
- // Verify all asymmetric algorithms are included
58
- expect(asymmetricAlgs).toContain('RS256')
59
- expect(asymmetricAlgs).toContain('ES256')
60
- expect(asymmetricAlgs).toContain('EdDSA')
61
-
62
- // Type-level test: these would cause compile errors if uncommented
63
- // const hs256: AsymmetricAlgorithm = 'HS256' // Error: Type '"HS256"' is not assignable to type 'AsymmetricAlgorithm'
64
- })
65
-
66
- it('SignatureAlgorithm type should include all algorithms', () => {
67
- // SignatureAlgorithm should include both symmetric and asymmetric algorithms
68
- const allAlgs: SignatureAlgorithm[] = [
69
- 'HS256',
70
- 'HS384',
71
- 'HS512',
72
- 'RS256',
73
- 'RS384',
74
- 'RS512',
75
- 'PS256',
76
- 'PS384',
77
- 'PS512',
78
- 'ES256',
79
- 'ES384',
80
- 'ES512',
81
- 'EdDSA',
82
- ]
83
-
84
- expect(allAlgs).toHaveLength(13)
85
- })
86
- })