acrylblends 0.6.1 → 0.6.3

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 (217) hide show
  1. package/README.md +11 -6
  2. package/docs/framework/README.md +3 -2
  3. package/docs/framework/UPSTREAM.md +1 -1
  4. package/docs/framework/api/presets.md +0 -3
  5. package/docs/framework/cordis/acryl-in-a-cordis-app.md +9 -0
  6. package/docs/framework/getting-started/basic.md +5 -4
  7. package/docs/framework/getting-started/desktop.md +41 -0
  8. package/docs/framework/guides/jsx-dom.md +0 -3
  9. package/docs/framework/guides/jsx.md +1 -4
  10. package/docs/framework/guides/middleware.md +1 -1
  11. package/docs/framework/helpers/cookie.md +1 -1
  12. package/docs/framework/helpers/css.md +0 -3
  13. package/docs/framework/helpers/dev.md +0 -3
  14. package/docs/framework/helpers/jwt.md +1 -1
  15. package/docs/framework/helpers/proxy.md +0 -3
  16. package/docs/framework/middleware/builtin/basic-auth.md +6 -6
  17. package/docs/framework/middleware/builtin/cache.md +0 -3
  18. package/docs/framework/middleware/builtin/combine.md +1 -1
  19. package/docs/framework/middleware/builtin/ip-restriction.md +1 -1
  20. package/docs/framework/middleware/builtin/logger.md +1 -1
  21. package/docs/framework/middleware/builtin/mount.md +0 -3
  22. package/docs/framework/upstream.json +3 -3
  23. package/lib/accepts.d.ts +1 -1
  24. package/lib/acryl-base.d.ts +1 -1
  25. package/lib/adapter.d.ts +1 -1
  26. package/lib/{app-CmAYW1Al.d.ts → app-wFwpg-bt.d.ts} +1 -1
  27. package/lib/base-BpQy2Rk7.d.ts +783 -0
  28. package/lib/base-ddiVmiE7.js +721 -0
  29. package/lib/basic-auth.d.ts +1 -1
  30. package/lib/bearer-auth.d.ts +1 -1
  31. package/lib/body-limit.d.ts +1 -1
  32. package/lib/cache.d.ts +43 -0
  33. package/lib/cache.js +169 -0
  34. package/lib/client.d.ts +2 -2
  35. package/lib/combine.d.ts +1 -1
  36. package/lib/common-D8Z4JRCw.d.ts +46 -0
  37. package/lib/components-Ce5FRyHU.js +268 -0
  38. package/lib/components-DYZdxJIJ.js +24 -0
  39. package/lib/compress.d.ts +1 -1
  40. package/lib/conninfo.d.ts +2 -2
  41. package/lib/constants-BR9jM9BC.js +9 -0
  42. package/lib/{context-Bm7rI-oK.d.ts → context-DVQBjuns.d.ts} +1 -1
  43. package/lib/context-DxFdY_un.d.ts +250 -0
  44. package/lib/context-storage.d.ts +1 -1
  45. package/lib/{cookie-ClMaKDQf.d.ts → cookie-CCelEqky.d.ts} +1 -1
  46. package/lib/cookie.d.ts +3 -3
  47. package/lib/cors.d.ts +1 -1
  48. package/lib/csrf.d.ts +1 -1
  49. package/lib/css-D2jb7X8b.js +320 -0
  50. package/lib/css.d.ts +82 -0
  51. package/lib/css.js +134 -0
  52. package/lib/dev.d.ts +19 -0
  53. package/lib/dev.js +50 -0
  54. package/lib/etag.d.ts +1 -1
  55. package/lib/factory.d.ts +2 -2
  56. package/lib/hooks-Bq5q9IMl.js +762 -0
  57. package/lib/html-SllAe0YT.d.ts +46 -0
  58. package/lib/html.d.ts +1 -1
  59. package/lib/index-C850MeBA.d.ts +94 -0
  60. package/lib/{index-oOClm_Xk.d.ts → index-CUTfU69R.d.ts} +3 -3
  61. package/lib/{index-B-3F4wt2.d.ts → index-Cqcdluyn.d.ts} +2 -2
  62. package/lib/{index-UTBmM3GX.d.ts → index-CsvB-F9j.d.ts} +2 -2
  63. package/lib/index.d.ts +4 -4
  64. package/lib/ip-restriction.d.ts +2 -2
  65. package/lib/jsx/dom/client.d.ts +30 -0
  66. package/lib/jsx/dom/client.js +49 -0
  67. package/lib/jsx/dom/css.d.ts +84 -0
  68. package/lib/jsx/dom/css.js +2 -0
  69. package/lib/jsx/dom/jsx-dev-runtime.d.ts +3 -0
  70. package/lib/jsx/dom/jsx-dev-runtime.js +2 -0
  71. package/lib/jsx/dom/jsx-runtime.d.ts +3 -0
  72. package/lib/jsx/dom/jsx-runtime.js +2 -0
  73. package/lib/jsx/dom/server.d.ts +105 -0
  74. package/lib/jsx/dom/server.js +37 -0
  75. package/lib/jsx/dom.d.ts +5 -0
  76. package/lib/jsx/dom.js +74 -0
  77. package/lib/jsx/jsx-dev-runtime.d.ts +6 -0
  78. package/lib/jsx/jsx-dev-runtime.js +14 -0
  79. package/lib/jsx/jsx-runtime.d.ts +10 -0
  80. package/lib/jsx/jsx-runtime.js +30 -0
  81. package/lib/jsx/streaming.d.ts +2 -0
  82. package/lib/jsx/streaming.js +2 -0
  83. package/lib/jsx-dev-runtime-B22O-Npk.d.ts +7 -0
  84. package/lib/jsx-dev-runtime-kAhR_4C7.js +354 -0
  85. package/lib/jsx-runtime-BVVgDSdq.d.ts +1 -0
  86. package/lib/jsx.d.ts +3 -0
  87. package/lib/jsx.js +47 -0
  88. package/lib/jwk.d.ts +4 -4
  89. package/lib/{jwt-Dg493Tai.d.ts → jwt-BARhotDz.d.ts} +1 -1
  90. package/lib/jwt.d.ts +4 -4
  91. package/lib/language.d.ts +1 -1
  92. package/lib/linear-router-C3FPib6h.js +96 -0
  93. package/lib/logger.d.ts +1 -1
  94. package/lib/loopback-only.d.ts +1 -1
  95. package/lib/method-not-allowed.d.ts +2 -2
  96. package/lib/method-override.d.ts +2 -2
  97. package/lib/mount.d.ts +44 -0
  98. package/lib/mount.js +67 -0
  99. package/lib/node-server/conninfo.d.ts +1 -1
  100. package/lib/node-server/serve-static.d.ts +1 -1
  101. package/lib/node-server/serve-static.js +1 -1
  102. package/lib/node-server.d.ts +1 -1
  103. package/lib/node-server.js +1 -1
  104. package/lib/pattern-router-HZxjDGEQ.js +41 -0
  105. package/lib/powered-by.d.ts +1 -1
  106. package/lib/pretty-json.d.ts +1 -1
  107. package/lib/proxy.d.ts +72 -0
  108. package/lib/proxy.js +121 -0
  109. package/lib/quick.d.ts +8 -0
  110. package/lib/quick.js +17 -0
  111. package/lib/request-id.d.ts +1 -1
  112. package/lib/request.d.ts +1 -1
  113. package/lib/route.d.ts +1 -1
  114. package/lib/router/linear-router.js +1 -95
  115. package/lib/router/pattern-router.js +1 -40
  116. package/lib/schema-validator.d.ts +1 -1
  117. package/lib/secure-headers.d.ts +1 -1
  118. package/lib/{serve-static-Dw_m6KxR.js → serve-static-Cw23shXv.js} +1 -0
  119. package/lib/serve-static.d.ts +1 -1
  120. package/lib/streaming.d.ts +1 -1
  121. package/lib/testing.d.ts +4 -4
  122. package/lib/timeout.d.ts +1 -1
  123. package/lib/timing.d.ts +1 -1
  124. package/lib/tiny.d.ts +8 -0
  125. package/lib/tiny.js +15 -0
  126. package/lib/trailing-slash.d.ts +1 -1
  127. package/lib/{types-CHesD1KG.d.ts → types-CQiGmsWW.d.ts} +3 -3
  128. package/lib/{types-CwrQjlaM.d.ts → types-Lqx5BxQF.d.ts} +10 -1
  129. package/lib/{types-CDO6I3B0.d.ts → types-nEL8VPDC.d.ts} +1 -1
  130. package/lib/types.d.ts +1 -1
  131. package/lib/utils/body.d.ts +1 -1
  132. package/lib/utils/cookie.d.ts +1 -1
  133. package/lib/utils/crypto.d.ts +1 -1
  134. package/lib/utils/html.d.ts +1 -45
  135. package/lib/utils/ipaddr.d.ts +1 -1
  136. package/lib/utils/jwt.d.ts +1 -1
  137. package/lib/utils/types.d.ts +2 -2
  138. package/lib/validator.d.ts +2 -2
  139. package/lib/ws.d.ts +1 -1
  140. package/package.json +69 -1
  141. package/plugins/acryl-inspect/upstream.json +1 -1
  142. package/plugins/acryl-node-server/upstream.json +1 -1
  143. package/plugins/acryl-router/src/core/helper/css/common.case.test.tsx +506 -0
  144. package/plugins/acryl-router/src/core/helper/css/common.ts +337 -0
  145. package/plugins/acryl-router/src/core/helper/css/index.test.tsx +678 -0
  146. package/plugins/acryl-router/src/core/helper/css/index.ts +262 -0
  147. package/plugins/acryl-router/src/core/helper/dev/index.test.ts +181 -0
  148. package/plugins/acryl-router/src/core/helper/dev/index.ts +79 -0
  149. package/plugins/acryl-router/src/core/helper/proxy/index.test.ts +356 -0
  150. package/plugins/acryl-router/src/core/helper/proxy/index.ts +203 -0
  151. package/plugins/acryl-router/src/core/helper/streaming/sse.test.tsx +557 -0
  152. package/plugins/acryl-router/src/core/jsx/base.test.tsx +97 -0
  153. package/plugins/acryl-router/src/core/jsx/base.ts +490 -0
  154. package/plugins/acryl-router/src/core/jsx/children.test.ts +52 -0
  155. package/plugins/acryl-router/src/core/jsx/children.ts +20 -0
  156. package/plugins/acryl-router/src/core/jsx/components.test.tsx +936 -0
  157. package/plugins/acryl-router/src/core/jsx/components.ts +257 -0
  158. package/plugins/acryl-router/src/core/jsx/constants.ts +6 -0
  159. package/plugins/acryl-router/src/core/jsx/context-isolation.test.ts +655 -0
  160. package/plugins/acryl-router/src/core/jsx/context.ts +266 -0
  161. package/plugins/acryl-router/src/core/jsx/dom/client.test.tsx +128 -0
  162. package/plugins/acryl-router/src/core/jsx/dom/client.ts +89 -0
  163. package/plugins/acryl-router/src/core/jsx/dom/components.test.tsx +330 -0
  164. package/plugins/acryl-router/src/core/jsx/dom/components.ts +39 -0
  165. package/plugins/acryl-router/src/core/jsx/dom/context.test.tsx +184 -0
  166. package/plugins/acryl-router/src/core/jsx/dom/context.ts +52 -0
  167. package/plugins/acryl-router/src/core/jsx/dom/css.test.tsx +149 -0
  168. package/plugins/acryl-router/src/core/jsx/dom/css.ts +263 -0
  169. package/plugins/acryl-router/src/core/jsx/dom/hooks/index.test.tsx +172 -0
  170. package/plugins/acryl-router/src/core/jsx/dom/hooks/index.ts +91 -0
  171. package/plugins/acryl-router/src/core/jsx/dom/index.test.tsx +3681 -0
  172. package/plugins/acryl-router/src/core/jsx/dom/index.ts +170 -0
  173. package/plugins/acryl-router/src/core/jsx/dom/intrinsic-element/components.test.tsx +1344 -0
  174. package/plugins/acryl-router/src/core/jsx/dom/intrinsic-element/components.ts +438 -0
  175. package/plugins/acryl-router/src/core/jsx/dom/jsx-dev-runtime.ts +23 -0
  176. package/plugins/acryl-router/src/core/jsx/dom/jsx-runtime.ts +8 -0
  177. package/plugins/acryl-router/src/core/jsx/dom/render.ts +879 -0
  178. package/plugins/acryl-router/src/core/jsx/dom/server.test.tsx +199 -0
  179. package/plugins/acryl-router/src/core/jsx/dom/server.ts +76 -0
  180. package/plugins/acryl-router/src/core/jsx/dom/utils.ts +7 -0
  181. package/plugins/acryl-router/src/core/jsx/hooks/dom.test.tsx +859 -0
  182. package/plugins/acryl-router/src/core/jsx/hooks/index.ts +437 -0
  183. package/plugins/acryl-router/src/core/jsx/hooks/string.test.tsx +40 -0
  184. package/plugins/acryl-router/src/core/jsx/index.test.tsx +1744 -0
  185. package/plugins/acryl-router/src/core/jsx/index.ts +115 -0
  186. package/plugins/acryl-router/src/core/jsx/intrinsic-element/common.ts +23 -0
  187. package/plugins/acryl-router/src/core/jsx/intrinsic-element/components.test.tsx +666 -0
  188. package/plugins/acryl-router/src/core/jsx/intrinsic-element/components.ts +210 -0
  189. package/plugins/acryl-router/src/core/jsx/intrinsic-elements.ts +938 -0
  190. package/plugins/acryl-router/src/core/jsx/jsx-dev-runtime.ts +26 -0
  191. package/plugins/acryl-router/src/core/jsx/jsx-runtime.test.tsx +85 -0
  192. package/plugins/acryl-router/src/core/jsx/jsx-runtime.ts +51 -0
  193. package/plugins/acryl-router/src/core/jsx/streaming.test.tsx +1281 -0
  194. package/plugins/acryl-router/src/core/jsx/streaming.ts +231 -0
  195. package/plugins/acryl-router/src/core/jsx/types.ts +41 -0
  196. package/plugins/acryl-router/src/core/jsx/utils.test.ts +366 -0
  197. package/plugins/acryl-router/src/core/jsx/utils.ts +202 -0
  198. package/plugins/acryl-router/src/core/middleware/cache/index.test.ts +1211 -0
  199. package/plugins/acryl-router/src/core/middleware/cache/index.ts +323 -0
  200. package/plugins/acryl-router/src/core/middleware/mount/index.test.ts +334 -0
  201. package/plugins/acryl-router/src/core/middleware/mount/index.ts +108 -0
  202. package/plugins/acryl-router/src/core/preset/quick.test.ts +42 -0
  203. package/plugins/acryl-router/src/core/preset/quick.ts +24 -0
  204. package/plugins/acryl-router/src/core/preset/tiny.test.ts +42 -0
  205. package/plugins/acryl-router/src/core/preset/tiny.ts +20 -0
  206. package/plugins/acryl-router/src/core/utils/types.ts +9 -0
  207. package/plugins/acryl-router/src/helpers/index.ts +3 -0
  208. package/plugins/acryl-router/src/middleware/index.ts +2 -0
  209. package/plugins/acryl-router/src/service.ts +22 -5
  210. package/plugins/acryl-router/tests/jsx.spec.tsx +63 -0
  211. package/plugins/acryl-router/upstream.json +3 -3
  212. package/plugins/acryl-router-http/upstream.json +1 -1
  213. package/plugins/acryl-state/upstream.json +1 -1
  214. package/plugins/desktop/upstream.json +1 -1
  215. package/plugins/desktop-web/upstream.json +1 -1
  216. package/plugins/save/plugin.json +1 -1
  217. package/templates/todo/upstream.json +1 -1
@@ -0,0 +1,210 @@
1
+ import { raw } from '../../helper/html/index.ts'
2
+ import type { HtmlEscapedCallback, HtmlEscapedString } from '../../utils/html.ts'
3
+ import { JSXNode, getNameSpaceContext, renderChildren } from '../base.ts'
4
+ import type { Child, Props } from '../base.ts'
5
+ import { toArray } from '../children.ts'
6
+ import { PERMALINK } from '../constants.ts'
7
+ import { useContext } from '../context.ts'
8
+ import type { IntrinsicElements } from '../intrinsic-elements.ts'
9
+ import type { FC, PropsWithChildren } from '../types.ts'
10
+ import {
11
+ dataPrecedenceAttr,
12
+ deDupeKeyMap,
13
+ isStylesheetLinkWithPrecedence,
14
+ shouldDeDupeByKey,
15
+ } from './common.ts'
16
+
17
+ const metaTagMap: WeakMap<
18
+ object,
19
+ Record<string, [string, Props, string | undefined][]>
20
+ > = new WeakMap()
21
+ const insertIntoHead: (
22
+ tagName: string,
23
+ tag: string,
24
+ props: Props,
25
+ precedence: string | undefined
26
+ ) => HtmlEscapedCallback =
27
+ (tagName, tag, props, precedence) =>
28
+ ({ buffer, context }): undefined => {
29
+ if (!buffer) {
30
+ return
31
+ }
32
+ const map = metaTagMap.get(context) || {}
33
+ metaTagMap.set(context, map)
34
+ const tags = (map[tagName] ||= [])
35
+
36
+ let duped = false
37
+ const deDupeKeys = deDupeKeyMap[tagName]
38
+ const deDupeByKey = shouldDeDupeByKey(tagName, precedence !== undefined)
39
+ if (deDupeByKey) {
40
+ LOOP: for (const [, tagProps] of tags) {
41
+ if (
42
+ tagName === 'link' &&
43
+ !(tagProps.rel === 'stylesheet' && tagProps[dataPrecedenceAttr] !== undefined)
44
+ ) {
45
+ continue
46
+ }
47
+ for (const key of deDupeKeys) {
48
+ if ((tagProps?.[key] ?? null) === props?.[key]) {
49
+ duped = true
50
+ break LOOP
51
+ }
52
+ }
53
+ }
54
+ }
55
+
56
+ if (duped) {
57
+ buffer[0] = buffer[0].replaceAll(tag, '')
58
+ } else if (deDupeByKey || tagName === 'link') {
59
+ tags.push([tag, props, precedence])
60
+ } else {
61
+ tags.unshift([tag, props, precedence])
62
+ }
63
+
64
+ if (buffer[0].indexOf('</head>') !== -1) {
65
+ let insertTags
66
+ if (tagName === 'link' || precedence !== undefined) {
67
+ const precedences: string[] = []
68
+ insertTags = tags
69
+ .map(([tag, , tagPrecedence], index) => {
70
+ if (tagPrecedence === undefined) {
71
+ return [tag, Number.MAX_SAFE_INTEGER, index] as [string, number, number]
72
+ }
73
+ let order = precedences.indexOf(tagPrecedence as string)
74
+ if (order === -1) {
75
+ precedences.push(tagPrecedence as string)
76
+ order = precedences.length - 1
77
+ }
78
+ return [tag, order, index] as [string, number, number]
79
+ })
80
+ .sort((a, b) => a[1] - b[1] || a[2] - b[2])
81
+ .map(([tag]) => tag)
82
+ } else {
83
+ insertTags = tags.map(([tag]) => tag)
84
+ }
85
+
86
+ insertTags.forEach((tag) => {
87
+ buffer[0] = buffer[0].replaceAll(tag, '')
88
+ })
89
+ buffer[0] = buffer[0].replace(/(?=<\/head>)/, () => insertTags.join(''))
90
+ }
91
+ }
92
+
93
+ const returnWithoutSpecialBehavior = (tag: string, children: Child, props: Props) =>
94
+ renderChildren([new JSXNode(tag, props, toArray(children ?? []))])
95
+
96
+ const documentMetadataTag = (tag: string, children: Child, props: Props, sort: boolean) => {
97
+ if ('itemProp' in props) {
98
+ return returnWithoutSpecialBehavior(tag, children, props)
99
+ }
100
+
101
+ let { precedence, blocking, ...restProps } = props
102
+ precedence = sort ? (precedence ?? '') : undefined
103
+ if (sort) {
104
+ restProps[dataPrecedenceAttr] = precedence
105
+ }
106
+
107
+ const string = new JSXNode(tag, restProps, toArray(children || [])).toString()
108
+
109
+ if (string instanceof Promise) {
110
+ return string.then((resString) =>
111
+ raw(resString, [
112
+ ...((resString as HtmlEscapedString).callbacks || []),
113
+ insertIntoHead(tag, resString, restProps, precedence),
114
+ ])
115
+ )
116
+ } else {
117
+ return raw(string, [insertIntoHead(tag, string, restProps, precedence)])
118
+ }
119
+ }
120
+
121
+ export const title: FC<PropsWithChildren> = ({ children, ...props }) => {
122
+ const nameSpaceContext = getNameSpaceContext()
123
+ if (nameSpaceContext) {
124
+ const context = useContext(nameSpaceContext)
125
+ if (context === 'svg' || context === 'head') {
126
+ return new JSXNode(
127
+ 'title',
128
+ props,
129
+ toArray(children ?? []) as Child[]
130
+ ) as unknown as HtmlEscapedString
131
+ }
132
+ }
133
+
134
+ return documentMetadataTag('title', children, props, false)
135
+ }
136
+ export const script: FC<PropsWithChildren<IntrinsicElements['script']>> = ({
137
+ children,
138
+ ...props
139
+ }) => {
140
+ const nameSpaceContext = getNameSpaceContext()
141
+ if (
142
+ ['src', 'async'].some((k) => !props[k]) ||
143
+ (nameSpaceContext && useContext(nameSpaceContext) === 'head')
144
+ ) {
145
+ return returnWithoutSpecialBehavior('script', children, props)
146
+ }
147
+
148
+ return documentMetadataTag('script', children, props, false)
149
+ }
150
+
151
+ export const style: FC<PropsWithChildren<IntrinsicElements['style']>> = ({
152
+ children,
153
+ ...props
154
+ }) => {
155
+ if (!['href', 'precedence'].every((k) => k in props)) {
156
+ return returnWithoutSpecialBehavior('style', children, props)
157
+ }
158
+ props['data-href'] = props.href
159
+ delete props.href
160
+ return documentMetadataTag('style', children, props, true)
161
+ }
162
+ export const link: FC<PropsWithChildren<IntrinsicElements['link']>> = ({ children, ...props }) => {
163
+ if (
164
+ ['onLoad', 'onError'].some((k) => k in props) ||
165
+ (props.rel === 'stylesheet' && (!('precedence' in props) || 'disabled' in props))
166
+ ) {
167
+ return returnWithoutSpecialBehavior('link', children, props)
168
+ }
169
+ return documentMetadataTag('link', children, props, isStylesheetLinkWithPrecedence(props))
170
+ }
171
+ export const meta: FC<PropsWithChildren> = ({ children, ...props }) => {
172
+ const nameSpaceContext = getNameSpaceContext()
173
+ if (nameSpaceContext && useContext(nameSpaceContext) === 'head') {
174
+ return returnWithoutSpecialBehavior('meta', children, props)
175
+ }
176
+ return documentMetadataTag('meta', children, props, false)
177
+ }
178
+
179
+ const newJSXNode = (tag: string, { children, ...props }: PropsWithChildren<unknown>) =>
180
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
181
+ new JSXNode(tag, props, toArray(children ?? []) as Child[]) as any
182
+ export const form: FC<
183
+ PropsWithChildren<{
184
+ action?: Function | string
185
+ method?: 'get' | 'post'
186
+ }>
187
+ > = (props) => {
188
+ if (typeof props.action === 'function') {
189
+ props.action = PERMALINK in props.action ? (props.action[PERMALINK] as string) : undefined
190
+ }
191
+ return newJSXNode('form', props)
192
+ }
193
+
194
+ const formActionableElement = (
195
+ tag: string,
196
+ props: PropsWithChildren<{
197
+ formAction?: Function | string
198
+ }>
199
+ ) => {
200
+ if (typeof props.formAction === 'function') {
201
+ props.formAction =
202
+ PERMALINK in props.formAction ? (props.formAction[PERMALINK] as string) : undefined
203
+ }
204
+ return newJSXNode(tag, props)
205
+ }
206
+
207
+ export const input: (props: PropsWithChildren) => unknown = (props) =>
208
+ formActionableElement('input', props)
209
+ export const button: (props: PropsWithChildren) => unknown = (props) =>
210
+ formActionableElement('button', props)