bantou 0.1.0 → 0.2.0

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 (515) hide show
  1. package/.output/nitro.json +13 -0
  2. package/.output/public/_nuxt/BmGsA4i2.js +1 -0
  3. package/.output/public/_nuxt/D_G6gzEa.js +1 -0
  4. package/.output/public/_nuxt/builds/latest.json +1 -0
  5. package/.output/public/_nuxt/builds/meta/1a8fc623-6671-445b-bdd3-c3d073520a3a.json +1 -0
  6. package/.output/public/_nuxt/entry.CZSvzYhH.css +1 -0
  7. package/.output/public/_nuxt/error-404.C3wqHTJz.css +1 -0
  8. package/.output/public/_nuxt/error-500.D6rBzoDj.css +1 -0
  9. package/.output/public/_nuxt/pdFQkwM_.js +4 -0
  10. package/.output/server/chunks/_/error-500.mjs +20 -0
  11. package/.output/server/chunks/_/error-500.mjs.map +1 -0
  12. package/.output/server/chunks/nitro/nitro.mjs +5870 -0
  13. package/.output/server/chunks/nitro/nitro.mjs.map +1 -0
  14. package/.output/server/chunks/routes/mcp.mjs +22 -0
  15. package/.output/server/chunks/routes/mcp.mjs.map +1 -0
  16. package/.output/server/chunks/routes/renderer.mjs +462 -0
  17. package/.output/server/chunks/routes/renderer.mjs.map +1 -0
  18. package/.output/server/chunks/virtual/_virtual_spa-template.mjs +4 -0
  19. package/.output/server/chunks/virtual/_virtual_spa-template.mjs.map +1 -0
  20. package/.output/server/chunks/virtual/precomputed.mjs +4 -0
  21. package/.output/server/chunks/virtual/precomputed.mjs.map +1 -0
  22. package/.output/server/index.mjs +18 -0
  23. package/.output/server/index.mjs.map +1 -0
  24. package/.output/server/node_modules/@babel/parser/lib/index.js +14657 -0
  25. package/.output/server/node_modules/@babel/parser/package.json +50 -0
  26. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js +64 -0
  27. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js +16 -0
  28. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/mcp-server.js +32 -0
  29. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js +246 -0
  30. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/package.json +1 -0
  31. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js +41 -0
  32. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +429 -0
  33. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js +971 -0
  34. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/requestBody.js +58 -0
  35. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sseKeepAlive.js +13 -0
  36. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.js +961 -0
  37. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +228 -0
  38. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js +51 -0
  39. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.js +57 -0
  40. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +1137 -0
  41. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js +92 -0
  42. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/uriTemplate.js +239 -0
  43. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +2065 -0
  44. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js +87 -0
  45. package/.output/server/node_modules/@modelcontextprotocol/sdk/package.json +165 -0
  46. package/.output/server/node_modules/@parcel/watcher-wasm/index.mjs +349 -0
  47. package/.output/server/node_modules/@parcel/watcher-wasm/package.json +44 -0
  48. package/.output/server/node_modules/@parcel/watcher-wasm/watcher.wasm +0 -0
  49. package/.output/server/node_modules/@parcel/watcher-wasm/wrapper.js +88 -0
  50. package/.output/server/node_modules/@unagents/messenger-broker/dist/index.mjs +12 -0
  51. package/.output/server/node_modules/@unagents/messenger-broker/dist/shared/messenger-broker.B8W77sqB.mjs +1177 -0
  52. package/.output/server/node_modules/@unagents/messenger-broker/package.json +37 -0
  53. package/.output/server/node_modules/@unagents/messenger-client/dist/index.mjs +9 -0
  54. package/.output/server/node_modules/@unagents/messenger-client/dist/shared/messenger-client.CfQVmH_Z.mjs +975 -0
  55. package/.output/server/node_modules/@unagents/messenger-client/dist/shared/messenger-client.CoDKzubj.mjs +1000 -0
  56. package/.output/server/node_modules/@unagents/messenger-client/package.json +37 -0
  57. package/.output/server/node_modules/@unagents/messenger-protocol/dist/index.mjs +103 -0
  58. package/.output/server/node_modules/@unagents/messenger-protocol/package.json +29 -0
  59. package/.output/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +6802 -0
  60. package/.output/server/node_modules/@vue/compiler-core/package.json +58 -0
  61. package/.output/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +729 -0
  62. package/.output/server/node_modules/@vue/compiler-dom/package.json +57 -0
  63. package/.output/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1420 -0
  64. package/.output/server/node_modules/@vue/compiler-ssr/package.json +34 -0
  65. package/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1933 -0
  66. package/.output/server/node_modules/@vue/reactivity/package.json +55 -0
  67. package/.output/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +7085 -0
  68. package/.output/server/node_modules/@vue/runtime-core/package.json +52 -0
  69. package/.output/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +1917 -0
  70. package/.output/server/node_modules/@vue/runtime-dom/package.json +60 -0
  71. package/.output/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +951 -0
  72. package/.output/server/node_modules/@vue/server-renderer/package.json +53 -0
  73. package/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +655 -0
  74. package/.output/server/node_modules/@vue/shared/package.json +47 -0
  75. package/.output/server/node_modules/ajv/dist/ajv.js +50 -0
  76. package/.output/server/node_modules/ajv/dist/compile/codegen/code.js +156 -0
  77. package/.output/server/node_modules/ajv/dist/compile/codegen/index.js +697 -0
  78. package/.output/server/node_modules/ajv/dist/compile/codegen/scope.js +143 -0
  79. package/.output/server/node_modules/ajv/dist/compile/errors.js +123 -0
  80. package/.output/server/node_modules/ajv/dist/compile/index.js +242 -0
  81. package/.output/server/node_modules/ajv/dist/compile/names.js +28 -0
  82. package/.output/server/node_modules/ajv/dist/compile/ref_error.js +12 -0
  83. package/.output/server/node_modules/ajv/dist/compile/resolve.js +155 -0
  84. package/.output/server/node_modules/ajv/dist/compile/rules.js +26 -0
  85. package/.output/server/node_modules/ajv/dist/compile/util.js +178 -0
  86. package/.output/server/node_modules/ajv/dist/compile/validate/applicability.js +19 -0
  87. package/.output/server/node_modules/ajv/dist/compile/validate/boolSchema.js +50 -0
  88. package/.output/server/node_modules/ajv/dist/compile/validate/dataType.js +203 -0
  89. package/.output/server/node_modules/ajv/dist/compile/validate/defaults.js +35 -0
  90. package/.output/server/node_modules/ajv/dist/compile/validate/index.js +520 -0
  91. package/.output/server/node_modules/ajv/dist/compile/validate/keyword.js +124 -0
  92. package/.output/server/node_modules/ajv/dist/compile/validate/subschema.js +81 -0
  93. package/.output/server/node_modules/ajv/dist/core.js +618 -0
  94. package/.output/server/node_modules/ajv/dist/refs/data.json +13 -0
  95. package/.output/server/node_modules/ajv/dist/refs/json-schema-draft-07.json +151 -0
  96. package/.output/server/node_modules/ajv/dist/runtime/equal.js +7 -0
  97. package/.output/server/node_modules/ajv/dist/runtime/ucs2length.js +24 -0
  98. package/.output/server/node_modules/ajv/dist/runtime/uri.js +6 -0
  99. package/.output/server/node_modules/ajv/dist/runtime/validation_error.js +11 -0
  100. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +49 -0
  101. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +106 -0
  102. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/allOf.js +23 -0
  103. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +12 -0
  104. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/contains.js +95 -0
  105. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +85 -0
  106. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/if.js +66 -0
  107. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/index.js +44 -0
  108. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/items.js +52 -0
  109. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/items2020.js +30 -0
  110. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/not.js +26 -0
  111. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +60 -0
  112. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +75 -0
  113. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +12 -0
  114. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/properties.js +54 -0
  115. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +38 -0
  116. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +13 -0
  117. package/.output/server/node_modules/ajv/dist/vocabularies/code.js +131 -0
  118. package/.output/server/node_modules/ajv/dist/vocabularies/core/id.js +10 -0
  119. package/.output/server/node_modules/ajv/dist/vocabularies/core/index.js +16 -0
  120. package/.output/server/node_modules/ajv/dist/vocabularies/core/ref.js +122 -0
  121. package/.output/server/node_modules/ajv/dist/vocabularies/discriminator/index.js +104 -0
  122. package/.output/server/node_modules/ajv/dist/vocabularies/discriminator/types.js +9 -0
  123. package/.output/server/node_modules/ajv/dist/vocabularies/draft7.js +17 -0
  124. package/.output/server/node_modules/ajv/dist/vocabularies/format/format.js +92 -0
  125. package/.output/server/node_modules/ajv/dist/vocabularies/format/index.js +6 -0
  126. package/.output/server/node_modules/ajv/dist/vocabularies/metadata.js +18 -0
  127. package/.output/server/node_modules/ajv/dist/vocabularies/validation/const.js +25 -0
  128. package/.output/server/node_modules/ajv/dist/vocabularies/validation/enum.js +48 -0
  129. package/.output/server/node_modules/ajv/dist/vocabularies/validation/index.js +33 -0
  130. package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitItems.js +24 -0
  131. package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitLength.js +27 -0
  132. package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +27 -0
  133. package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +24 -0
  134. package/.output/server/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +26 -0
  135. package/.output/server/node_modules/ajv/dist/vocabularies/validation/pattern.js +33 -0
  136. package/.output/server/node_modules/ajv/dist/vocabularies/validation/required.js +79 -0
  137. package/.output/server/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +64 -0
  138. package/.output/server/node_modules/ajv/package.json +126 -0
  139. package/.output/server/node_modules/ajv-formats/dist/formats.js +208 -0
  140. package/.output/server/node_modules/ajv-formats/dist/index.js +37 -0
  141. package/.output/server/node_modules/ajv-formats/dist/limit.js +69 -0
  142. package/.output/server/node_modules/ajv-formats/package.json +74 -0
  143. package/.output/server/node_modules/consola/dist/chunks/prompt.mjs +280 -0
  144. package/.output/server/node_modules/consola/dist/core.mjs +512 -0
  145. package/.output/server/node_modules/consola/dist/index.mjs +651 -0
  146. package/.output/server/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs +72 -0
  147. package/.output/server/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs +288 -0
  148. package/.output/server/node_modules/consola/dist/utils.mjs +54 -0
  149. package/.output/server/node_modules/consola/package.json +136 -0
  150. package/.output/server/node_modules/content-type/index.js +225 -0
  151. package/.output/server/node_modules/content-type/package.json +42 -0
  152. package/.output/server/node_modules/cookie-es/dist/index.mjs +268 -0
  153. package/.output/server/node_modules/cookie-es/package.json +46 -0
  154. package/.output/server/node_modules/crossws/dist/_chunks/_request.mjs +83 -0
  155. package/.output/server/node_modules/crossws/dist/_chunks/adapter.mjs +234 -0
  156. package/.output/server/node_modules/crossws/dist/_chunks/error.mjs +7 -0
  157. package/.output/server/node_modules/crossws/dist/_chunks/libs/ws.mjs +6 -0
  158. package/.output/server/node_modules/crossws/dist/_chunks/node.mjs +220 -0
  159. package/.output/server/node_modules/crossws/dist/_chunks/peer.mjs +208 -0
  160. package/.output/server/node_modules/crossws/dist/adapters/node.mjs +1 -0
  161. package/.output/server/node_modules/crossws/package.json +115 -0
  162. package/.output/server/node_modules/defu/dist/defu.mjs +69 -0
  163. package/.output/server/node_modules/defu/package.json +48 -0
  164. package/.output/server/node_modules/destr/dist/index.mjs +72 -0
  165. package/.output/server/node_modules/destr/package.json +47 -0
  166. package/.output/server/node_modules/devalue/index.js +17 -0
  167. package/.output/server/node_modules/devalue/package.json +39 -0
  168. package/.output/server/node_modules/devalue/src/base64.js +60 -0
  169. package/.output/server/node_modules/devalue/src/constants.js +12 -0
  170. package/.output/server/node_modules/devalue/src/operations.js +221 -0
  171. package/.output/server/node_modules/devalue/src/parse.js +279 -0
  172. package/.output/server/node_modules/devalue/src/stringify.js +433 -0
  173. package/.output/server/node_modules/devalue/src/uneval.js +698 -0
  174. package/.output/server/node_modules/devalue/src/utils.js +190 -0
  175. package/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
  176. package/.output/server/node_modules/entities/dist/commonjs/decode.js +568 -0
  177. package/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.js +7 -0
  178. package/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +7 -0
  179. package/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.js +21 -0
  180. package/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.js +31 -0
  181. package/.output/server/node_modules/entities/dist/commonjs/package.json +3 -0
  182. package/.output/server/node_modules/entities/package.json +120 -0
  183. package/.output/server/node_modules/estree-walker/dist/umd/estree-walker.js +344 -0
  184. package/.output/server/node_modules/estree-walker/package.json +37 -0
  185. package/.output/server/node_modules/fast-deep-equal/index.js +46 -0
  186. package/.output/server/node_modules/fast-deep-equal/package.json +61 -0
  187. package/.output/server/node_modules/fast-uri/index.js +711 -0
  188. package/.output/server/node_modules/fast-uri/lib/schemes.js +272 -0
  189. package/.output/server/node_modules/fast-uri/lib/utils.js +799 -0
  190. package/.output/server/node_modules/fast-uri/package.json +68 -0
  191. package/.output/server/node_modules/get-port-please/dist/index.mjs +430 -0
  192. package/.output/server/node_modules/get-port-please/package.json +39 -0
  193. package/.output/server/node_modules/h3/dist/index.mjs +2498 -0
  194. package/.output/server/node_modules/h3/package.json +75 -0
  195. package/.output/server/node_modules/hookable/dist/index.mjs +257 -0
  196. package/.output/server/node_modules/hookable/package.json +54 -0
  197. package/.output/server/node_modules/http-shutdown/index.js +85 -0
  198. package/.output/server/node_modules/http-shutdown/package.json +32 -0
  199. package/.output/server/node_modules/iron-webcrypto/dist/index.js +298 -0
  200. package/.output/server/node_modules/iron-webcrypto/package.json +72 -0
  201. package/.output/server/node_modules/is-extglob/index.js +20 -0
  202. package/.output/server/node_modules/is-extglob/package.json +69 -0
  203. package/.output/server/node_modules/is-glob/index.js +150 -0
  204. package/.output/server/node_modules/is-glob/package.json +81 -0
  205. package/.output/server/node_modules/jiti/dist/jiti.cjs +1 -0
  206. package/.output/server/node_modules/jiti/lib/jiti.mjs +29 -0
  207. package/.output/server/node_modules/jiti/package.json +146 -0
  208. package/.output/server/node_modules/json-schema-traverse/index.js +93 -0
  209. package/.output/server/node_modules/json-schema-traverse/package.json +43 -0
  210. package/.output/server/node_modules/listhen/dist/chunks/xdg-open.mjs +1069 -0
  211. package/.output/server/node_modules/listhen/dist/index.mjs +19 -0
  212. package/.output/server/node_modules/listhen/dist/shared/listhen.tqe5I1Rl.mjs +1040 -0
  213. package/.output/server/node_modules/listhen/package.json +84 -0
  214. package/.output/server/node_modules/napi-wasm/index.mjs +1371 -0
  215. package/.output/server/node_modules/napi-wasm/package.json +33 -0
  216. package/.output/server/node_modules/node-forge/lib/aes.js +1091 -0
  217. package/.output/server/node_modules/node-forge/lib/aesCipherSuites.js +282 -0
  218. package/.output/server/node_modules/node-forge/lib/asn1-validator.js +91 -0
  219. package/.output/server/node_modules/node-forge/lib/asn1.js +1522 -0
  220. package/.output/server/node_modules/node-forge/lib/baseN.js +186 -0
  221. package/.output/server/node_modules/node-forge/lib/cipher.js +230 -0
  222. package/.output/server/node_modules/node-forge/lib/cipherModes.js +1027 -0
  223. package/.output/server/node_modules/node-forge/lib/des.js +496 -0
  224. package/.output/server/node_modules/node-forge/lib/ed25519.js +1091 -0
  225. package/.output/server/node_modules/node-forge/lib/forge.js +13 -0
  226. package/.output/server/node_modules/node-forge/lib/hmac.js +146 -0
  227. package/.output/server/node_modules/node-forge/lib/index.js +33 -0
  228. package/.output/server/node_modules/node-forge/lib/jsbn.js +1294 -0
  229. package/.output/server/node_modules/node-forge/lib/kem.js +168 -0
  230. package/.output/server/node_modules/node-forge/lib/log.js +319 -0
  231. package/.output/server/node_modules/node-forge/lib/md.all.js +13 -0
  232. package/.output/server/node_modules/node-forge/lib/md.js +11 -0
  233. package/.output/server/node_modules/node-forge/lib/md5.js +289 -0
  234. package/.output/server/node_modules/node-forge/lib/mgf.js +12 -0
  235. package/.output/server/node_modules/node-forge/lib/mgf1.js +57 -0
  236. package/.output/server/node_modules/node-forge/lib/oids.js +180 -0
  237. package/.output/server/node_modules/node-forge/lib/pbe.js +1029 -0
  238. package/.output/server/node_modules/node-forge/lib/pbkdf2.js +211 -0
  239. package/.output/server/node_modules/node-forge/lib/pem.js +413 -0
  240. package/.output/server/node_modules/node-forge/lib/pkcs1.js +276 -0
  241. package/.output/server/node_modules/node-forge/lib/pkcs12.js +1081 -0
  242. package/.output/server/node_modules/node-forge/lib/pkcs7.js +1260 -0
  243. package/.output/server/node_modules/node-forge/lib/pkcs7asn1.js +410 -0
  244. package/.output/server/node_modules/node-forge/lib/pki.js +102 -0
  245. package/.output/server/node_modules/node-forge/lib/prime.js +297 -0
  246. package/.output/server/node_modules/node-forge/lib/prng.js +419 -0
  247. package/.output/server/node_modules/node-forge/lib/pss.js +241 -0
  248. package/.output/server/node_modules/node-forge/lib/random.js +191 -0
  249. package/.output/server/node_modules/node-forge/lib/rc2.js +410 -0
  250. package/.output/server/node_modules/node-forge/lib/rsa.js +2014 -0
  251. package/.output/server/node_modules/node-forge/lib/sha1.js +319 -0
  252. package/.output/server/node_modules/node-forge/lib/sha256.js +327 -0
  253. package/.output/server/node_modules/node-forge/lib/sha512.js +561 -0
  254. package/.output/server/node_modules/node-forge/lib/ssh.js +236 -0
  255. package/.output/server/node_modules/node-forge/lib/tls.js +4334 -0
  256. package/.output/server/node_modules/node-forge/lib/util.js +2652 -0
  257. package/.output/server/node_modules/node-forge/lib/x509.js +3257 -0
  258. package/.output/server/node_modules/node-forge/package.json +123 -0
  259. package/.output/server/node_modules/node-mock-http/dist/_polyfill/buffer/node.mjs +1 -0
  260. package/.output/server/node_modules/node-mock-http/dist/_polyfill/events/node.mjs +1 -0
  261. package/.output/server/node_modules/node-mock-http/dist/index.mjs +1 -0
  262. package/.output/server/node_modules/node-mock-http/package.json +63 -0
  263. package/.output/server/node_modules/nostics/dist/formatters/ansi.mjs +19 -0
  264. package/.output/server/node_modules/nostics/dist/index.mjs +194 -0
  265. package/.output/server/node_modules/nostics/package.json +126 -0
  266. package/.output/server/node_modules/pathe/dist/index.mjs +19 -0
  267. package/.output/server/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs +249 -0
  268. package/.output/server/node_modules/pathe/package.json +61 -0
  269. package/.output/server/node_modules/picomatch/index.js +17 -0
  270. package/.output/server/node_modules/picomatch/lib/constants.js +184 -0
  271. package/.output/server/node_modules/picomatch/lib/parse.js +1425 -0
  272. package/.output/server/node_modules/picomatch/lib/picomatch.js +361 -0
  273. package/.output/server/node_modules/picomatch/lib/scan.js +403 -0
  274. package/.output/server/node_modules/picomatch/lib/utils.js +72 -0
  275. package/.output/server/node_modules/picomatch/package.json +83 -0
  276. package/.output/server/node_modules/radix3/dist/index.mjs +262 -0
  277. package/.output/server/node_modules/radix3/package.json +52 -0
  278. package/.output/server/node_modules/source-map-js/lib/array-set.js +121 -0
  279. package/.output/server/node_modules/source-map-js/lib/base64-vlq.js +140 -0
  280. package/.output/server/node_modules/source-map-js/lib/base64.js +67 -0
  281. package/.output/server/node_modules/source-map-js/lib/binary-search.js +111 -0
  282. package/.output/server/node_modules/source-map-js/lib/mapping-list.js +79 -0
  283. package/.output/server/node_modules/source-map-js/lib/quick-sort.js +141 -0
  284. package/.output/server/node_modules/source-map-js/lib/source-map-consumer.js +1236 -0
  285. package/.output/server/node_modules/source-map-js/lib/source-map-generator.js +446 -0
  286. package/.output/server/node_modules/source-map-js/lib/source-node.js +420 -0
  287. package/.output/server/node_modules/source-map-js/lib/util.js +594 -0
  288. package/.output/server/node_modules/source-map-js/package.json +71 -0
  289. package/.output/server/node_modules/source-map-js/source-map.js +8 -0
  290. package/.output/server/node_modules/std-env/dist/index.mjs +1 -0
  291. package/.output/server/node_modules/std-env/package.json +43 -0
  292. package/.output/server/node_modules/tinyclip/dist/index.js +143 -0
  293. package/.output/server/node_modules/tinyclip/package.json +48 -0
  294. package/.output/server/node_modules/ufo/dist/index.mjs +645 -0
  295. package/.output/server/node_modules/ufo/package.json +48 -0
  296. package/.output/server/node_modules/uncrypto/dist/crypto.node.mjs +16 -0
  297. package/.output/server/node_modules/uncrypto/package.json +60 -0
  298. package/.output/server/node_modules/unhead/dist/client.mjs +22 -0
  299. package/.output/server/node_modules/unhead/dist/legacy.mjs +33 -0
  300. package/.output/server/node_modules/unhead/dist/minify.mjs +183 -0
  301. package/.output/server/node_modules/unhead/dist/parser.mjs +518 -0
  302. package/.output/server/node_modules/unhead/dist/plugins.mjs +782 -0
  303. package/.output/server/node_modules/unhead/dist/server.mjs +99 -0
  304. package/.output/server/node_modules/unhead/dist/shared/unhead.BEmVMkeA.mjs +673 -0
  305. package/.output/server/node_modules/unhead/dist/shared/unhead.Bf_fPVYA.mjs +6 -0
  306. package/.output/server/node_modules/unhead/dist/shared/unhead.Bm4Y6XQI.mjs +17 -0
  307. package/.output/server/node_modules/unhead/dist/shared/unhead.C5Bksi2B.mjs +49 -0
  308. package/.output/server/node_modules/unhead/dist/shared/unhead.CGPOfp5O.mjs +32 -0
  309. package/.output/server/node_modules/unhead/dist/shared/unhead.CHEy9ana.mjs +7 -0
  310. package/.output/server/node_modules/unhead/dist/shared/unhead.C_7zwq8E.mjs +11 -0
  311. package/.output/server/node_modules/unhead/dist/shared/unhead.CaeaMM5q.mjs +19 -0
  312. package/.output/server/node_modules/unhead/dist/shared/unhead.D7HkBzZn.mjs +59 -0
  313. package/.output/server/node_modules/unhead/dist/shared/unhead.D9VfQWNo.mjs +240 -0
  314. package/.output/server/node_modules/unhead/dist/shared/unhead.DD4N5B4k.mjs +224 -0
  315. package/.output/server/node_modules/unhead/dist/shared/unhead.DGl9jcjg.mjs +196 -0
  316. package/.output/server/node_modules/unhead/dist/shared/unhead.DJuZwX9c.mjs +400 -0
  317. package/.output/server/node_modules/unhead/dist/shared/unhead.DkxnqlHC.mjs +264 -0
  318. package/.output/server/node_modules/unhead/dist/shared/unhead.DspMpm6y.mjs +48 -0
  319. package/.output/server/node_modules/unhead/dist/shared/unhead.o8j9utSy.mjs +208 -0
  320. package/.output/server/node_modules/unhead/dist/stream/client.mjs +33 -0
  321. package/.output/server/node_modules/unhead/dist/stream/iife.mjs +2 -0
  322. package/.output/server/node_modules/unhead/dist/stream/server.mjs +446 -0
  323. package/.output/server/node_modules/unhead/dist/utils.mjs +7 -0
  324. package/.output/server/node_modules/unhead/package.json +179 -0
  325. package/.output/server/node_modules/untun/dist/_chunks/cloudflared.mjs +179 -0
  326. package/.output/server/node_modules/untun/dist/_chunks/log.mjs +27 -0
  327. package/.output/server/node_modules/untun/dist/index.mjs +47 -0
  328. package/.output/server/node_modules/untun/package.json +44 -0
  329. package/.output/server/node_modules/uqr/dist/index.mjs +739 -0
  330. package/.output/server/node_modules/uqr/package.json +69 -0
  331. package/.output/server/node_modules/vue/dist/vue.cjs.js +80 -0
  332. package/.output/server/node_modules/vue/dist/vue.cjs.prod.js +66 -0
  333. package/.output/server/node_modules/vue/index.js +7 -0
  334. package/.output/server/node_modules/vue/index.mjs +1 -0
  335. package/.output/server/node_modules/vue/package.json +112 -0
  336. package/.output/server/node_modules/vue/server-renderer/index.mjs +1 -0
  337. package/.output/server/node_modules/vue-bundle-renderer/dist/runtime.mjs +687 -0
  338. package/.output/server/node_modules/vue-bundle-renderer/package.json +66 -0
  339. package/.output/server/node_modules/zod/index.js +7 -0
  340. package/.output/server/node_modules/zod/package.json +147 -0
  341. package/.output/server/node_modules/zod/v3/ZodError.js +143 -0
  342. package/.output/server/node_modules/zod/v3/errors.js +9 -0
  343. package/.output/server/node_modules/zod/v3/external.js +6 -0
  344. package/.output/server/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  345. package/.output/server/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  346. package/.output/server/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  347. package/.output/server/node_modules/zod/v3/helpers/util.js +133 -0
  348. package/.output/server/node_modules/zod/v3/index.js +4 -0
  349. package/.output/server/node_modules/zod/v3/locales/en.js +109 -0
  350. package/.output/server/node_modules/zod/v3/package.json +7 -0
  351. package/.output/server/node_modules/zod/v3/types.js +3697 -0
  352. package/.output/server/node_modules/zod/v4/classic/checks.js +1 -0
  353. package/.output/server/node_modules/zod/v4/classic/coerce.js +17 -0
  354. package/.output/server/node_modules/zod/v4/classic/compat.js +31 -0
  355. package/.output/server/node_modules/zod/v4/classic/deep-partial.js +13 -0
  356. package/.output/server/node_modules/zod/v4/classic/errors.js +57 -0
  357. package/.output/server/node_modules/zod/v4/classic/external.js +17 -0
  358. package/.output/server/node_modules/zod/v4/classic/from-json-schema.js +881 -0
  359. package/.output/server/node_modules/zod/v4/classic/in-out.js +36 -0
  360. package/.output/server/node_modules/zod/v4/classic/index.js +4 -0
  361. package/.output/server/node_modules/zod/v4/classic/iso.js +15 -0
  362. package/.output/server/node_modules/zod/v4/classic/package.json +7 -0
  363. package/.output/server/node_modules/zod/v4/classic/parse.js +16 -0
  364. package/.output/server/node_modules/zod/v4/classic/schemas.js +1535 -0
  365. package/.output/server/node_modules/zod/v4/core/api.js +1107 -0
  366. package/.output/server/node_modules/zod/v4/core/checks.js +516 -0
  367. package/.output/server/node_modules/zod/v4/core/compile.js +1866 -0
  368. package/.output/server/node_modules/zod/v4/core/core.js +141 -0
  369. package/.output/server/node_modules/zod/v4/core/doc.js +38 -0
  370. package/.output/server/node_modules/zod/v4/core/errors.js +267 -0
  371. package/.output/server/node_modules/zod/v4/core/index.js +19 -0
  372. package/.output/server/node_modules/zod/v4/core/json-schema-generator.js +99 -0
  373. package/.output/server/node_modules/zod/v4/core/json-schema-processors.js +843 -0
  374. package/.output/server/node_modules/zod/v4/core/json-schema.js +1 -0
  375. package/.output/server/node_modules/zod/v4/core/memoizer.js +311 -0
  376. package/.output/server/node_modules/zod/v4/core/package.json +7 -0
  377. package/.output/server/node_modules/zod/v4/core/parse.js +175 -0
  378. package/.output/server/node_modules/zod/v4/core/regexes.js +156 -0
  379. package/.output/server/node_modules/zod/v4/core/registries.js +51 -0
  380. package/.output/server/node_modules/zod/v4/core/schemas.js +2636 -0
  381. package/.output/server/node_modules/zod/v4/core/to-json-schema.js +651 -0
  382. package/.output/server/node_modules/zod/v4/core/util.js +873 -0
  383. package/.output/server/node_modules/zod/v4/core/versions.js +5 -0
  384. package/.output/server/node_modules/zod/v4/core/visit.js +169 -0
  385. package/.output/server/node_modules/zod/v4/index.js +4 -0
  386. package/.output/server/node_modules/zod/v4/locales/ar.js +111 -0
  387. package/.output/server/node_modules/zod/v4/locales/az.js +110 -0
  388. package/.output/server/node_modules/zod/v4/locales/be.js +168 -0
  389. package/.output/server/node_modules/zod/v4/locales/bg.js +125 -0
  390. package/.output/server/node_modules/zod/v4/locales/bn.js +113 -0
  391. package/.output/server/node_modules/zod/v4/locales/ca.js +112 -0
  392. package/.output/server/node_modules/zod/v4/locales/ckb.js +133 -0
  393. package/.output/server/node_modules/zod/v4/locales/cs.js +116 -0
  394. package/.output/server/node_modules/zod/v4/locales/da.js +120 -0
  395. package/.output/server/node_modules/zod/v4/locales/de.js +113 -0
  396. package/.output/server/node_modules/zod/v4/locales/el.js +112 -0
  397. package/.output/server/node_modules/zod/v4/locales/en.js +125 -0
  398. package/.output/server/node_modules/zod/v4/locales/eo.js +114 -0
  399. package/.output/server/node_modules/zod/v4/locales/es.js +136 -0
  400. package/.output/server/node_modules/zod/v4/locales/fa.js +119 -0
  401. package/.output/server/node_modules/zod/v4/locales/fi.js +117 -0
  402. package/.output/server/node_modules/zod/v4/locales/fr-CA.js +112 -0
  403. package/.output/server/node_modules/zod/v4/locales/fr.js +129 -0
  404. package/.output/server/node_modules/zod/v4/locales/gu.js +113 -0
  405. package/.output/server/node_modules/zod/v4/locales/he.js +221 -0
  406. package/.output/server/node_modules/zod/v4/locales/hi.js +111 -0
  407. package/.output/server/node_modules/zod/v4/locales/hr.js +126 -0
  408. package/.output/server/node_modules/zod/v4/locales/hu.js +113 -0
  409. package/.output/server/node_modules/zod/v4/locales/hy.js +158 -0
  410. package/.output/server/node_modules/zod/v4/locales/id.js +111 -0
  411. package/.output/server/node_modules/zod/v4/locales/index.js +63 -0
  412. package/.output/server/node_modules/zod/v4/locales/is.js +114 -0
  413. package/.output/server/node_modules/zod/v4/locales/it.js +113 -0
  414. package/.output/server/node_modules/zod/v4/locales/ja.js +112 -0
  415. package/.output/server/node_modules/zod/v4/locales/ka.js +117 -0
  416. package/.output/server/node_modules/zod/v4/locales/kh.js +5 -0
  417. package/.output/server/node_modules/zod/v4/locales/km.js +115 -0
  418. package/.output/server/node_modules/zod/v4/locales/kn.js +116 -0
  419. package/.output/server/node_modules/zod/v4/locales/ko.js +116 -0
  420. package/.output/server/node_modules/zod/v4/locales/lt.js +207 -0
  421. package/.output/server/node_modules/zod/v4/locales/mk.js +114 -0
  422. package/.output/server/node_modules/zod/v4/locales/ms.js +112 -0
  423. package/.output/server/node_modules/zod/v4/locales/ne.js +111 -0
  424. package/.output/server/node_modules/zod/v4/locales/nl.js +115 -0
  425. package/.output/server/node_modules/zod/v4/locales/nn.js +113 -0
  426. package/.output/server/node_modules/zod/v4/locales/no.js +113 -0
  427. package/.output/server/node_modules/zod/v4/locales/ota.js +114 -0
  428. package/.output/server/node_modules/zod/v4/locales/package.json +7 -0
  429. package/.output/server/node_modules/zod/v4/locales/pl.js +114 -0
  430. package/.output/server/node_modules/zod/v4/locales/ps.js +119 -0
  431. package/.output/server/node_modules/zod/v4/locales/pt-BR.js +143 -0
  432. package/.output/server/node_modules/zod/v4/locales/pt.js +142 -0
  433. package/.output/server/node_modules/zod/v4/locales/ro.js +122 -0
  434. package/.output/server/node_modules/zod/v4/locales/ru.js +168 -0
  435. package/.output/server/node_modules/zod/v4/locales/sk.js +116 -0
  436. package/.output/server/node_modules/zod/v4/locales/sl.js +114 -0
  437. package/.output/server/node_modules/zod/v4/locales/sv.js +115 -0
  438. package/.output/server/node_modules/zod/v4/locales/ta.js +115 -0
  439. package/.output/server/node_modules/zod/v4/locales/tg.js +117 -0
  440. package/.output/server/node_modules/zod/v4/locales/th.js +115 -0
  441. package/.output/server/node_modules/zod/v4/locales/tk.js +107 -0
  442. package/.output/server/node_modules/zod/v4/locales/tr.js +110 -0
  443. package/.output/server/node_modules/zod/v4/locales/ua.js +5 -0
  444. package/.output/server/node_modules/zod/v4/locales/uk.js +113 -0
  445. package/.output/server/node_modules/zod/v4/locales/ur.js +115 -0
  446. package/.output/server/node_modules/zod/v4/locales/uz.js +113 -0
  447. package/.output/server/node_modules/zod/v4/locales/vi.js +113 -0
  448. package/.output/server/node_modules/zod/v4/locales/yo.js +112 -0
  449. package/.output/server/node_modules/zod/v4/locales/zh-CN.js +114 -0
  450. package/.output/server/node_modules/zod/v4/locales/zh-TW.js +112 -0
  451. package/.output/server/node_modules/zod/v4/mini/checks.js +1 -0
  452. package/.output/server/node_modules/zod/v4/mini/coerce.js +22 -0
  453. package/.output/server/node_modules/zod/v4/mini/deep-partial.js +13 -0
  454. package/.output/server/node_modules/zod/v4/mini/external.js +16 -0
  455. package/.output/server/node_modules/zod/v4/mini/in-out.js +36 -0
  456. package/.output/server/node_modules/zod/v4/mini/iso.js +34 -0
  457. package/.output/server/node_modules/zod/v4/mini/package.json +7 -0
  458. package/.output/server/node_modules/zod/v4/mini/parse.js +1 -0
  459. package/.output/server/node_modules/zod/v4/mini/schemas.js +1002 -0
  460. package/.output/server/node_modules/zod/v4/package.json +7 -0
  461. package/.output/server/node_modules/zod/v4-mini/index.js +3 -0
  462. package/.output/server/node_modules/zod/v4-mini/package.json +7 -0
  463. package/.output/server/node_modules/zod-to-json-schema/dist/esm/Options.js +46 -0
  464. package/.output/server/node_modules/zod-to-json-schema/dist/esm/Refs.js +22 -0
  465. package/.output/server/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +14 -0
  466. package/.output/server/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +8 -0
  467. package/.output/server/node_modules/zod-to-json-schema/dist/esm/index.js +40 -0
  468. package/.output/server/node_modules/zod-to-json-schema/dist/esm/package.json +1 -0
  469. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parseDef.js +62 -0
  470. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parseTypes.js +1 -0
  471. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +17 -0
  472. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +26 -0
  473. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +49 -0
  474. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +5 -0
  475. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +4 -0
  476. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +4 -0
  477. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +46 -0
  478. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +7 -0
  479. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +7 -0
  480. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +6 -0
  481. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +52 -0
  482. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +21 -0
  483. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +26 -0
  484. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +16 -0
  485. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +11 -0
  486. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +10 -0
  487. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +33 -0
  488. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +52 -0
  489. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +72 -0
  490. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +21 -0
  491. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +20 -0
  492. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +4 -0
  493. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +4 -0
  494. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +61 -0
  495. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +20 -0
  496. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +352 -0
  497. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +32 -0
  498. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +6 -0
  499. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +80 -0
  500. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +4 -0
  501. package/.output/server/node_modules/zod-to-json-schema/dist/esm/selectParser.js +105 -0
  502. package/.output/server/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +87 -0
  503. package/.output/server/node_modules/zod-to-json-schema/package.json +85 -0
  504. package/.output/server/package.json +64 -0
  505. package/README.md +227 -24
  506. package/bin/bantou.mjs +33 -0
  507. package/package.json +18 -8
  508. package/protocol/PROTOCOL.md +26 -0
  509. package/protocol/protocol.json +92 -0
  510. package/dist/cap.js +0 -7
  511. package/dist/cli.js +0 -27
  512. package/dist/config.js +0 -23
  513. package/dist/daemon.js +0 -23
  514. package/dist/session.js +0 -7
  515. package/dist/workspace.js +0 -8
@@ -0,0 +1,782 @@
1
+ export { A as AliasSortingPlugin, D as DeprecationsPlugin, P as PromisesPlugin, T as TemplateParamsPlugin } from './shared/unhead.D9VfQWNo.mjs';
2
+ import { d as defineHeadPlugin } from './shared/unhead.CHEy9ana.mjs';
3
+ export { F as FlatMetaPlugin, S as SafeInputPlugin } from './shared/unhead.DkxnqlHC.mjs';
4
+ import { h as hasContent } from './shared/unhead.CGPOfp5O.mjs';
5
+ import { minifyJS, minifyCSS, minifyJSON } from './minify.mjs';
6
+ import { u as unpackMeta } from './shared/unhead.o8j9utSy.mjs';
7
+ import { t as tagInputFromRuntime, u as tagPredicates, i as inputShapeFromRuntime, b as inputShapePredicates, U as URL_META_KEYS, v as titleInputFromRuntime, h as headInputPredicates } from './shared/unhead.BEmVMkeA.mjs';
8
+ import './shared/unhead.DspMpm6y.mjs';
9
+
10
+ const HTTP_SCHEME_RE = /^https?:\/\//i;
11
+ const META_TRANSFORMABLE_URL = [
12
+ "og:url",
13
+ "og:image",
14
+ "og:image:url",
15
+ "og:image:secure_url",
16
+ "twitter:image",
17
+ "twitter:image:src",
18
+ "og:video",
19
+ "og:video:url",
20
+ "og:video:secure_url",
21
+ "og:audio",
22
+ "og:audio:url",
23
+ "og:audio:secure_url",
24
+ "twitter:player",
25
+ "twitter:player:stream"
26
+ ];
27
+ const LINK_REL_RESOLVABLE = /* @__PURE__ */ new Set([
28
+ "canonical",
29
+ "next",
30
+ "prev",
31
+ "alternate",
32
+ "author",
33
+ "license",
34
+ "help",
35
+ "search",
36
+ "pingback"
37
+ ]);
38
+ const META_CANONICAL_URL = /* @__PURE__ */ new Set([
39
+ "og:url"
40
+ ]);
41
+ function CanonicalPlugin(options) {
42
+ return (head) => {
43
+ let host = options.canonicalHost || (!head.ssr ? window.location.origin : "");
44
+ if (!HTTP_SCHEME_RE.test(host) && !host.startsWith("//")) {
45
+ host = `https://${host}`;
46
+ }
47
+ host = new URL(host).origin;
48
+ const whitelist = options.queryWhitelist !== void 0 ? options.queryWhitelist : [];
49
+ function normalizeCanonicalUrl(url) {
50
+ try {
51
+ const parsed = new URL(url, host);
52
+ parsed.hash = "";
53
+ if (whitelist !== false && parsed.search) {
54
+ const filtered = new URLSearchParams();
55
+ for (const key of whitelist) {
56
+ if (parsed.searchParams.has(key)) {
57
+ for (const value of parsed.searchParams.getAll(key)) {
58
+ filtered.append(key, value);
59
+ }
60
+ }
61
+ }
62
+ parsed.search = filtered.toString();
63
+ }
64
+ if (options.trailingSlash === true && !parsed.pathname.endsWith("/")) {
65
+ parsed.pathname = `${parsed.pathname}/`;
66
+ } else if (options.trailingSlash === false && parsed.pathname !== "/" && parsed.pathname.endsWith("/")) {
67
+ parsed.pathname = parsed.pathname.slice(0, -1);
68
+ }
69
+ return parsed.toString();
70
+ } catch {
71
+ return url;
72
+ }
73
+ }
74
+ function resolvePath(path) {
75
+ if (options?.customResolver) {
76
+ return options.customResolver(path);
77
+ }
78
+ if (HTTP_SCHEME_RE.test(path) || path.startsWith("//"))
79
+ return path;
80
+ try {
81
+ return new URL(path, host).toString();
82
+ } catch {
83
+ return path;
84
+ }
85
+ }
86
+ return {
87
+ key: "canonical",
88
+ hooks: {
89
+ "tags:resolve": (ctx) => {
90
+ for (const tag of ctx.tags) {
91
+ const metaKey = tag.props?.property || tag.props?.name;
92
+ if (tag.tag === "meta" && META_TRANSFORMABLE_URL.includes(metaKey)) {
93
+ tag.props.content = resolvePath(tag.props.content);
94
+ if (META_CANONICAL_URL.has(metaKey)) {
95
+ tag.props.content = normalizeCanonicalUrl(tag.props.content);
96
+ }
97
+ } else if (tag.tag === "link" && LINK_REL_RESOLVABLE.has(tag.props.rel)) {
98
+ const isCanonical = tag.props.rel === "canonical";
99
+ tag.props.href = resolvePath(tag.props.href);
100
+ if (isCanonical) {
101
+ tag.props.href = normalizeCanonicalUrl(tag.props.href);
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ };
108
+ };
109
+ }
110
+
111
+ const IMAGE_META_KEYS = /* @__PURE__ */ new Set(["og:image", "og:image:url", "og:image:secure_url", "twitter:image", "twitter:image:src"]);
112
+ function isImageMeta(tag) {
113
+ if (tag.tag !== "meta")
114
+ return false;
115
+ const content = tag.props.content;
116
+ return IMAGE_META_KEYS.has(tag.props.property || tag.props.name) && !!hasContent(content) && String(content).trim() !== "";
117
+ }
118
+ function InferSeoMetaPlugin(options = {}) {
119
+ return defineHeadPlugin((head) => {
120
+ if (options.twitterCard !== false) {
121
+ head.push({
122
+ meta: [
123
+ options.twitterCard ? { name: "twitter:card", content: options.twitterCard, tagPriority: "low" } : { "name": "twitter:card", "tagPriority": "low", "data-infer": "" }
124
+ ]
125
+ });
126
+ }
127
+ head.push({
128
+ meta: [
129
+ // content is intentionally omitted - inferred from title/description by the hook below
130
+ {
131
+ "property": "og:title",
132
+ "tagPriority": "low",
133
+ "data-infer": ""
134
+ },
135
+ {
136
+ "property": "og:description",
137
+ "tagPriority": "low",
138
+ "data-infer": ""
139
+ }
140
+ ]
141
+ });
142
+ return {
143
+ key: "infer-seo-meta",
144
+ hooks: {
145
+ "tags:beforeResolve": ({ tagMap }) => {
146
+ let title = head._titleTemplate || head._title;
147
+ const ogTitle = tagMap.get("meta:og:title");
148
+ if (typeof ogTitle?.props["data-infer"] !== "undefined") {
149
+ if (typeof title === "function") {
150
+ title = title(head._title);
151
+ }
152
+ title = hasContent(title) ? String(title) : void 0;
153
+ ogTitle.props.content = options.ogTitle ? options.ogTitle(title) : title || "";
154
+ ogTitle.processTemplateParams = true;
155
+ }
156
+ const descriptionValue = tagMap.get("meta:description")?.props?.content;
157
+ const description = hasContent(descriptionValue) ? String(descriptionValue) : void 0;
158
+ const ogDescription = tagMap.get("meta:og:description");
159
+ if (typeof ogDescription?.props["data-infer"] !== "undefined") {
160
+ ogDescription.props.content = options.ogDescription ? options.ogDescription(description) : description || "";
161
+ ogDescription.processTemplateParams = true;
162
+ }
163
+ },
164
+ // after resolve so an image added or dropped by any other hook still counts
165
+ "tags:afterResolve": (ctx) => {
166
+ let cardIndex = -1;
167
+ let hasImage = false;
168
+ for (let i = 0; i < ctx.tags.length; i++) {
169
+ const tag = ctx.tags[i];
170
+ if (tag.tag === "meta" && tag.props.name === "twitter:card" && typeof tag.props["data-infer"] !== "undefined")
171
+ cardIndex = i;
172
+ else if (!hasImage && isImageMeta(tag))
173
+ hasImage = true;
174
+ }
175
+ if (cardIndex === -1)
176
+ return;
177
+ const card = ctx.tags[cardIndex];
178
+ const props = { ...card.props, content: hasImage ? "summary_large_image" : "summary" };
179
+ delete props["data-infer"];
180
+ ctx.tags[cardIndex] = { ...card, props };
181
+ }
182
+ }
183
+ };
184
+ }, "infer-seo-meta");
185
+ }
186
+
187
+ const JSON_TYPES = /* @__PURE__ */ new Set(["application/json", "application/ld+json", "speculationrules", "importmap"]);
188
+ function MinifyPlugin(options) {
189
+ const jsMinify = options?.js === false ? false : options?.js || minifyJS;
190
+ const cssMinify = options?.css === false ? false : options?.css || minifyCSS;
191
+ const jsonMinify = options?.json !== false;
192
+ const omitLineBreaks = options?.omitLineBreaks === true;
193
+ return {
194
+ key: "minify",
195
+ hooks: {
196
+ "ssr:render": (ctx) => {
197
+ if (omitLineBreaks)
198
+ ctx.options.omitLineBreaks = true;
199
+ for (const tag of ctx.tags) {
200
+ const content = tag.innerHTML;
201
+ if (!content || content.length < 20)
202
+ continue;
203
+ if (tag.tag === "script") {
204
+ const type = tag.props?.type;
205
+ if (type && JSON_TYPES.has(type)) {
206
+ if (jsonMinify) {
207
+ const min = minifyJSON(content);
208
+ if (min.length < content.length)
209
+ tag.innerHTML = min;
210
+ }
211
+ continue;
212
+ }
213
+ if (jsMinify) {
214
+ const min = jsMinify(content);
215
+ if (min.length < content.length)
216
+ tag.innerHTML = min;
217
+ }
218
+ } else if (tag.tag === "style" && cssMinify) {
219
+ const min = cssMinify(content);
220
+ if (min.length < content.length)
221
+ tag.innerHTML = min;
222
+ }
223
+ }
224
+ }
225
+ }
226
+ };
227
+ }
228
+
229
+ const TEMPLATE_PARAM_RE = /%\w+(?:\.\w+)?%/;
230
+ const TEMPLATE_PARAM_TOKEN_RE = /%\w+(?:\.\w+)?/;
231
+ const AT_PREFIX_RE = /^at\s+/;
232
+ const JAVASCRIPT_TYPES = /* @__PURE__ */ new Set([
233
+ "application/ecmascript",
234
+ "application/javascript",
235
+ "application/x-ecmascript",
236
+ "application/x-javascript",
237
+ "text/ecmascript",
238
+ "text/javascript",
239
+ "text/javascript1.0",
240
+ "text/javascript1.1",
241
+ "text/javascript1.2",
242
+ "text/javascript1.3",
243
+ "text/javascript1.4",
244
+ "text/javascript1.5",
245
+ "text/jscript",
246
+ "text/livescript",
247
+ "text/x-ecmascript",
248
+ "text/x-javascript"
249
+ ]);
250
+ const SLACK_TWITTER_META_NAMES = /* @__PURE__ */ new Set([
251
+ "twitter:data1",
252
+ "twitter:data2",
253
+ "twitter:label1",
254
+ "twitter:label2"
255
+ ]);
256
+ function isExecutableScript(type) {
257
+ const value = typeof type === "boolean" ? "" : String(type ?? "");
258
+ if (!value)
259
+ return true;
260
+ const normalized = value.replace(/^[\t\n\f\r ]+|[\t\n\f\r ]+$/g, "").toLowerCase();
261
+ return normalized === "module" || JAVASCRIPT_TYPES.has(normalized);
262
+ }
263
+ const PREDICATE_SEVERITY = {
264
+ "defer-on-module-script": "info",
265
+ "deprecated-prop-body": "warn",
266
+ "deprecated-prop-children": "warn",
267
+ "deprecated-prop-hid-vmid": "warn",
268
+ "empty-meta-content": "warn",
269
+ "html-in-title": "warn",
270
+ "invalid-input-shape": "warn",
271
+ "non-absolute-canonical": "warn",
272
+ "numeric-tag-priority": "info",
273
+ "possible-typo": "warn",
274
+ "preload-font-crossorigin": "warn",
275
+ "preload-missing-as": "warn",
276
+ "robots-conflict": "warn",
277
+ "script-src-with-content": "warn",
278
+ "streamed-tag-hidden-from-bots": "warn",
279
+ "twitter-handle-missing-at": "warn",
280
+ "viewport-user-scalable": "info"
281
+ };
282
+ function isAbsoluteUrl(url) {
283
+ return url.startsWith("http://") || url.startsWith("https://");
284
+ }
285
+ function extractOrigin(url) {
286
+ if (!isAbsoluteUrl(url))
287
+ return void 0;
288
+ const slash = url.indexOf("/", url.indexOf("//") + 2);
289
+ return slash === -1 ? url : url.slice(0, slash);
290
+ }
291
+ function resolveSeverity(config, fallback) {
292
+ if (config == null)
293
+ return fallback;
294
+ return Array.isArray(config) ? config[0] : config;
295
+ }
296
+ function resolveOptions(config, id, defaults) {
297
+ const entry = config[id];
298
+ if (Array.isArray(entry))
299
+ return { ...defaults, ...entry[1] };
300
+ return defaults;
301
+ }
302
+ function captureSource(root) {
303
+ const stack = new Error("source").stack;
304
+ if (!stack)
305
+ return void 0;
306
+ const lines = stack.split("\n");
307
+ for (let i = 4; i < lines.length; i++) {
308
+ const line = lines[i].trim();
309
+ if (line && !line.includes("node_modules") && !line.includes("unhead/src/")) {
310
+ let source = line.replace(AT_PREFIX_RE, "");
311
+ if (root) {
312
+ const prefix = root.endsWith("/") ? root : `${root}/`;
313
+ source = source.replace(prefix, "./");
314
+ }
315
+ return source;
316
+ }
317
+ }
318
+ return void 0;
319
+ }
320
+ function createInputShapeObserver() {
321
+ let remainingRootKeys;
322
+ let resolvedValues;
323
+ const resolver = (key, value) => {
324
+ if (key === void 0) {
325
+ if (value?.constructor === Object) {
326
+ remainingRootKeys = new Set(Object.keys(value));
327
+ resolvedValues = /* @__PURE__ */ new Map();
328
+ } else {
329
+ remainingRootKeys = void 0;
330
+ resolvedValues = void 0;
331
+ }
332
+ } else if (remainingRootKeys?.delete(key)) {
333
+ resolvedValues?.set(key, value);
334
+ }
335
+ return value;
336
+ };
337
+ resolver._static = true;
338
+ return {
339
+ resolver,
340
+ take() {
341
+ const input = resolvedValues ? Object.fromEntries(resolvedValues) : void 0;
342
+ remainingRootKeys = void 0;
343
+ resolvedValues = void 0;
344
+ return input;
345
+ }
346
+ };
347
+ }
348
+ const BOT_HEAD_META_NAMES = /* @__PURE__ */ new Set(["description", "robots", "googlebot", "bingbot", "slurp", "keywords"]);
349
+ const BOT_HEAD_META_EQUIVS = /* @__PURE__ */ new Set(["refresh", "content-language"]);
350
+ const BOT_HEAD_LINK_RELS = /* @__PURE__ */ new Set(["canonical", "alternate", "amphtml", "prev", "next", "author", "license"]);
351
+ const BOT_HEAD_META_PREFIX_RE = /^(?:og|twitter|article|book|profile|fb|al|music|video|place|product):/;
352
+ const JSON_LD_TYPE_RE = /^[\t\n\f\r ]*application\/ld\+json[\t\n\f\r ]*(?:;|$)/i;
353
+ const REL_SEPARATOR_RE = /[\t\n\f\r ]+/;
354
+ const SAFE_BLOCKED_RELS = /* @__PURE__ */ new Set(["canonical", "modulepreload", "prerender", "preload", "prefetch", "dns-prefetch", "preconnect", "manifest", "pingback"]);
355
+ function relTokens(value) {
356
+ return String(value || "").toLowerCase().split(REL_SEPARATOR_RE);
357
+ }
358
+ function* expandPendingTag(tag) {
359
+ if (tag._safe && tag.tag === "link" && relTokens(tag.props.rel).some((rel) => SAFE_BLOCKED_RELS.has(rel)))
360
+ return;
361
+ if (tag.props.body)
362
+ tag.tagPosition = "bodyClose";
363
+ if (tag.tag !== "_flatMeta") {
364
+ yield tag;
365
+ return;
366
+ }
367
+ for (const props of unpackMeta(tag.props))
368
+ yield { ...tag, tag: "meta", props };
369
+ }
370
+ function isHiddenFromBots(tag, writesBodyTags) {
371
+ const props = tag.props;
372
+ if (tag.tag === "script")
373
+ return !writesBodyTags && JSON_LD_TYPE_RE.test(String(props.type || ""));
374
+ if (tag.tagPosition?.startsWith("body"))
375
+ return false;
376
+ switch (tag.tag) {
377
+ case "title":
378
+ case "titleTemplate":
379
+ case "base":
380
+ return true;
381
+ case "meta": {
382
+ if (BOT_HEAD_META_NAMES.has(String(props.name || "").toLowerCase()))
383
+ return true;
384
+ if (BOT_HEAD_META_EQUIVS.has(String(props["http-equiv"] || "").toLowerCase()))
385
+ return true;
386
+ return BOT_HEAD_META_PREFIX_RE.test(String(props.property || props.name || "").toLowerCase());
387
+ }
388
+ case "link":
389
+ return relTokens(props.rel).some((rel) => BOT_HEAD_LINK_RELS.has(rel));
390
+ default:
391
+ return false;
392
+ }
393
+ }
394
+ function describeTag(tag) {
395
+ const props = tag.props;
396
+ if (tag.tag === "meta")
397
+ return `meta[${props.property ? `property="${props.property}"` : props["http-equiv"] ? `http-equiv="${props["http-equiv"]}"` : `name="${props.name}"`}]`;
398
+ if (tag.tag === "link")
399
+ return `link[rel="${props.rel}"]`;
400
+ if (tag.tag === "script")
401
+ return 'script[type="application/ld+json"]';
402
+ return tag.tag;
403
+ }
404
+ function ValidatePlugin(options = {}) {
405
+ const ruleConfig = options.rules || {};
406
+ const root = options.root;
407
+ const only = options.only && new Set(options.only);
408
+ const pluginKey = options.key || "validate";
409
+ function severityFor(id, fallback) {
410
+ if (only && !only.has(id))
411
+ return "off";
412
+ return resolveSeverity(ruleConfig[id], fallback);
413
+ }
414
+ return defineHeadPlugin((head) => {
415
+ const stacks = /* @__PURE__ */ new Map();
416
+ const pendingInputDiagnostics = [];
417
+ const inputShapeObserver = createInputShapeObserver();
418
+ head.resolvedOptions.propResolvers = [
419
+ ...head.resolvedOptions.propResolvers || [],
420
+ inputShapeObserver.resolver
421
+ ];
422
+ const hooks = head.hooks;
423
+ if (hooks) {
424
+ const _callHook = hooks.callHook.bind(hooks);
425
+ let warnedAsyncHook = false;
426
+ hooks.callHook = (name, ...args) => {
427
+ const result = _callHook(name, ...args);
428
+ if (result?.then && !warnedAsyncHook && !only) {
429
+ warnedAsyncHook = true;
430
+ console.warn(`[unhead] promise ignored: ${name}`);
431
+ }
432
+ return result;
433
+ };
434
+ }
435
+ const _push = head.push.bind(head);
436
+ head.push = (input, opts) => {
437
+ if (opts?.mode && severityFor("deprecated-option-mode", "warn") !== "off") {
438
+ console.warn(`[unhead] "mode: '${opts.mode}'" option was removed in v3. Use the appropriate createHead import (unhead/client or unhead/server) instead.`);
439
+ }
440
+ const source = captureSource(root);
441
+ const active = _push(input, opts);
442
+ if (source)
443
+ stacks.set(active._i, source);
444
+ const _dispose = active.dispose;
445
+ active.dispose = () => {
446
+ stacks.delete(active._i);
447
+ _dispose();
448
+ };
449
+ return active;
450
+ };
451
+ function dispatch(rules, mode) {
452
+ const head_ = head;
453
+ head_._validationRules = mode === "replace" ? rules : [...head_._validationRules || [], ...rules];
454
+ if (!rules.length)
455
+ return;
456
+ if (options.onReport) {
457
+ options.onReport(rules);
458
+ return;
459
+ }
460
+ for (const rule of rules) {
461
+ const loc = rule.source ? ` (${rule.source})` : "";
462
+ console.warn(`[unhead] ${rule.message}${loc}`);
463
+ }
464
+ }
465
+ return {
466
+ key: pluginKey,
467
+ hooks: {
468
+ "ssr:streamChunk": ({ tags }) => {
469
+ const severity = severityFor("streamed-tag-hidden-from-bots", "warn");
470
+ if (severity === "off")
471
+ return;
472
+ const rules = [];
473
+ for (const pending of tags) {
474
+ for (const tag of expandPendingTag(pending)) {
475
+ if (!isHiddenFromBots(tag, !!head._stream?.writesBodyTags))
476
+ continue;
477
+ const entryIndex = tag._p != null ? tag._p >> 10 : void 0;
478
+ rules.push({
479
+ id: "streamed-tag-hidden-from-bots",
480
+ message: `Bots will not see ${describeTag(tag)}. It arrived after the shell, so it ships as a client patch. Register it before the shell.`,
481
+ severity,
482
+ source: entryIndex != null ? stacks.get(entryIndex) : void 0,
483
+ tag
484
+ });
485
+ }
486
+ }
487
+ dispatch(rules, "append");
488
+ },
489
+ "entries:normalize": ({ entry }) => {
490
+ const input = inputShapeObserver.take();
491
+ if (!input || input.constructor !== Object)
492
+ return;
493
+ const shape = inputShapeFromRuntime("head", input);
494
+ for (const predicate of Object.values(inputShapePredicates)) {
495
+ for (const diagnostic of predicate(shape))
496
+ pendingInputDiagnostics.push({ diagnostic, entryIndex: entry._i });
497
+ }
498
+ },
499
+ "tags:afterResolve": ({ tags }) => {
500
+ const rules = [];
501
+ function report(id, message, defaultSeverity, tag, inputEntryIndex) {
502
+ const severity = severityFor(id, defaultSeverity);
503
+ if (severity === "off")
504
+ return;
505
+ const entryIndex = inputEntryIndex ?? (tag?._p != null ? tag._p >> 10 : void 0);
506
+ const source = entryIndex != null ? stacks.get(entryIndex) : void 0;
507
+ rules.push({ id, message, severity, source, tag });
508
+ }
509
+ for (const { diagnostic, entryIndex } of pendingInputDiagnostics) {
510
+ const severity = PREDICATE_SEVERITY[diagnostic.ruleId] ?? "warn";
511
+ report(diagnostic.ruleId, diagnostic.message, severity, void 0, entryIndex);
512
+ }
513
+ pendingInputDiagnostics.length = 0;
514
+ const metaByKey = /* @__PURE__ */ new Map();
515
+ let canonicalHref;
516
+ let hasOgTags = false;
517
+ let hasTitle = false;
518
+ let hasDescription = false;
519
+ let isIndexable = true;
520
+ for (const tag of tags) {
521
+ if (tag.tag === "title")
522
+ hasTitle = true;
523
+ if (tag.tag === "meta") {
524
+ const key = tag.props.property || (tag.props.name ? String(tag.props.name).toLowerCase() : void 0);
525
+ if (key) {
526
+ metaByKey.set(key, tag);
527
+ if (key.startsWith("og:"))
528
+ hasOgTags = true;
529
+ if (key === "description")
530
+ hasDescription = true;
531
+ if (key === "robots" && String(tag.props.content ?? "").toLowerCase().includes("noindex"))
532
+ isIndexable = false;
533
+ }
534
+ }
535
+ if (tag.tag === "link" && tag.props.rel === "canonical")
536
+ canonicalHref = tag.props.href;
537
+ }
538
+ function emitFromPredicates(diagnostics, tag) {
539
+ for (const diag of diagnostics) {
540
+ const sev = PREDICATE_SEVERITY[diag.ruleId] ?? "warn";
541
+ report(diag.ruleId, diag.message, sev, tag);
542
+ }
543
+ }
544
+ for (const tag of tags) {
545
+ const { props } = tag;
546
+ const metaKey = props.property || (props.name ? String(props.name).toLowerCase() : void 0);
547
+ const tagInput = tagInputFromRuntime(tag);
548
+ if (tagInput) {
549
+ for (const predicate of Object.values(tagPredicates))
550
+ emitFromPredicates(predicate(tagInput), tag);
551
+ }
552
+ if (tag.tag === "htmlAttrs" || tag.tag === "bodyAttrs") {
553
+ const inputShape = inputShapeFromRuntime(tag.tag, tag.props);
554
+ for (const predicate of Object.values(inputShapePredicates))
555
+ emitFromPredicates(predicate(inputShape), tag);
556
+ }
557
+ if (tag.tag === "meta" && typeof metaKey === "string") {
558
+ const normalizedMetaKey = metaKey.toLowerCase();
559
+ if (normalizedMetaKey.startsWith("twitter:") && !SLACK_TWITTER_META_NAMES.has(normalizedMetaKey))
560
+ report("deprecated-twitter-meta", `${normalizedMetaKey} is deprecated. Use Open Graph metadata instead.`, "warn", tag);
561
+ }
562
+ if (tag.tag === "meta" && metaKey && URL_META_KEYS.has(metaKey)) {
563
+ const content = String(props.content ?? "");
564
+ if (content && !isAbsoluteUrl(content))
565
+ report("non-absolute-og-url", `${metaKey} should be an absolute URL, received "${content}".`, "warn", tag);
566
+ }
567
+ if (tag.tag === "meta" && metaKey) {
568
+ const content = String(props.content ?? "");
569
+ if (content && TEMPLATE_PARAM_RE.test(content))
570
+ report("unresolved-template-param", `Unresolved template param in ${metaKey}: "${content}".`, "warn", tag);
571
+ }
572
+ if (tag.tag === "title") {
573
+ const titleInput = titleInputFromRuntime(tag);
574
+ if (titleInput) {
575
+ for (const diag of headInputPredicates["no-html-in-title"](titleInput))
576
+ report(diag.ruleId, diag.message, "warn", tag);
577
+ }
578
+ const text = String(tag.textContent ?? "");
579
+ if (TEMPLATE_PARAM_RE.test(text))
580
+ report("unresolved-template-param", `Unresolved template param in title: "${text}".`, "warn", tag);
581
+ if (!text.trim())
582
+ report("empty-title", `Title tag is empty. If using titleTemplate, ensure it produces output.`, "warn", tag);
583
+ }
584
+ if (tag.tag === "script" && props.src && !props.async && !props.defer && props.type !== "module" && (!tag.tagPosition || tag.tagPosition === "head"))
585
+ report("render-blocking-script", `Script "${props.src}" is render-blocking. Add "async", "defer", or use type="module" to avoid blocking the critical rendering path.`, "warn", tag);
586
+ if (tag.tag === "link" && props.rel === "preload" && props.fetchpriority === "low" && props.as !== "script")
587
+ report("preload-fetchpriority-conflict", `This preload uses fetchpriority="low". Check whether the resource needs a higher priority.`, "off", tag);
588
+ if (tag.tag === "style" && (tag.innerHTML || tag.textContent)) {
589
+ const content = tag.innerHTML || tag.textContent || "";
590
+ const sizeKB = new TextEncoder().encode(content).byteLength / 1024;
591
+ const { maxKB: styleMaxKB } = resolveOptions(ruleConfig, "inline-style-size", { maxKB: 14 });
592
+ if (sizeKB > styleMaxKB)
593
+ report("inline-style-size", `Inline <style> is ${sizeKB.toFixed(1)}KB \u2014 exceeds ${styleMaxKB}KB critical CSS budget. Consider moving to an external stylesheet for cacheability.`, "info", tag);
594
+ }
595
+ if (tag.tag === "script" && isExecutableScript(props.type) && !props.src && (tag.innerHTML || tag.textContent)) {
596
+ const content = tag.innerHTML || tag.textContent || "";
597
+ const sizeKB = new TextEncoder().encode(content).byteLength / 1024;
598
+ const { maxKB: scriptMaxKB } = resolveOptions(ruleConfig, "inline-script-size", { maxKB: 2 });
599
+ if (sizeKB > scriptMaxKB)
600
+ report("inline-script-size", `Inline <script> is ${sizeKB.toFixed(1)}KB \u2014 consider moving to an external file for cacheability.`, "info", tag);
601
+ }
602
+ }
603
+ const ogUrl = metaByKey.get("og:url");
604
+ if (canonicalHref && ogUrl?.props.content && canonicalHref !== ogUrl.props.content)
605
+ report("canonical-og-url-mismatch", `Canonical URL "${canonicalHref}" differs from og:url "${ogUrl.props.content}".`, "warn", ogUrl);
606
+ if (metaByKey.has("og:image") && (!metaByKey.has("og:image:width") || !metaByKey.has("og:image:height")))
607
+ report("og-image-missing-dimensions", `og:image is set but og:image:width and/or og:image:height are missing \u2014 social platforms may not display the image.`, "warn", metaByKey.get("og:image"));
608
+ if (hasOgTags) {
609
+ if (!metaByKey.has("og:title"))
610
+ report("og-missing-title", `Open Graph tags are present but og:title is missing.`, "warn");
611
+ if (!metaByKey.has("og:description"))
612
+ report("og-missing-description", `Open Graph tags are present but og:description is missing.`, "warn");
613
+ }
614
+ if (!hasTitle)
615
+ report("missing-title", `Page is missing a <title> tag.`, "warn");
616
+ if (!hasDescription && isIndexable)
617
+ report("missing-description", `Page is missing a meta description and is indexable by search engines.`, "warn");
618
+ const { max: maxPreloads } = resolveOptions(ruleConfig, "too-many-preloads", { max: 6 });
619
+ const preloadCount = tags.filter((t) => t.tag === "link" && t.props.rel === "preload").length;
620
+ if (preloadCount > maxPreloads)
621
+ report("too-many-preloads", `Found ${preloadCount} preload links \u2014 more than ${maxPreloads} preloads compete for bandwidth and can hurt performance.`, "warn");
622
+ const { max: maxPrefetches } = resolveOptions(ruleConfig, "too-many-prefetches", { max: 50 });
623
+ const prefetchCount = tags.filter((t) => t.tag === "link" && t.props.rel === "prefetch").length;
624
+ if (prefetchCount > maxPrefetches)
625
+ report("too-many-prefetches", `Found ${prefetchCount} prefetch links. The configured maximum of ${maxPrefetches} is an advisory guardrail, not a standards limit. Large speculative fetch sets can consume bandwidth and cache capacity.`, "info");
626
+ const { max: maxPreconnects } = resolveOptions(ruleConfig, "too-many-preconnects", { max: 4 });
627
+ const preconnectCount = tags.filter((t) => t.tag === "link" && t.props.rel === "preconnect").length;
628
+ if (preconnectCount > maxPreconnects)
629
+ report("too-many-preconnects", `Found ${preconnectCount} preconnect links \u2014 each initiates a TCP+TLS handshake, more than ${maxPreconnects} compete for limited connections.`, "warn");
630
+ const preconnectOrigins = /* @__PURE__ */ new Set();
631
+ const dnsPrefetchTags = [];
632
+ for (const tag of tags) {
633
+ if (tag.tag === "link" && tag.props.href) {
634
+ if (tag.props.rel === "preconnect")
635
+ preconnectOrigins.add(tag.props.href);
636
+ else if (tag.props.rel === "dns-prefetch")
637
+ dnsPrefetchTags.push(tag);
638
+ }
639
+ }
640
+ for (const tag of dnsPrefetchTags) {
641
+ if (preconnectOrigins.has(tag.props.href))
642
+ report("redundant-dns-prefetch", `dns-prefetch for "${tag.props.href}" is redundant \u2014 preconnect already includes DNS resolution.`, "info", tag);
643
+ }
644
+ const preloadScriptHrefs = /* @__PURE__ */ new Map();
645
+ for (const tag of tags) {
646
+ if (tag.tag === "link" && tag.props.rel === "preload" && tag.props.as === "script" && tag.props.href && tag.props.fetchpriority !== "low")
647
+ preloadScriptHrefs.set(tag.props.href, tag);
648
+ }
649
+ for (const tag of tags) {
650
+ if (tag.tag === "script" && tag.props.src && (tag.props.async || tag.props.defer)) {
651
+ const preloadTag = preloadScriptHrefs.get(tag.props.src);
652
+ if (preloadTag) {
653
+ const attr = tag.props.async ? "async" : "defer";
654
+ report("preload-async-defer-conflict", `Script "${tag.props.src}" is preloaded with "${attr}". Check whether early fetching is intentional.`, "off", preloadTag);
655
+ }
656
+ }
657
+ }
658
+ const preloadHrefs = /* @__PURE__ */ new Set();
659
+ for (const tag of tags) {
660
+ if (tag.tag === "link" && tag.props.rel === "preload" && tag.props.href)
661
+ preloadHrefs.add(tag.props.href);
662
+ }
663
+ for (const tag of tags) {
664
+ if (tag.tag === "link" && tag.props.rel === "prefetch" && tag.props.href && preloadHrefs.has(tag.props.href))
665
+ report("prefetch-preload-conflict", `"${tag.props.href}" has both preload and prefetch \u2014 use preload for current page resources, prefetch for future navigation.`, "warn", tag);
666
+ }
667
+ if (!head.plugins.has("template-params")) {
668
+ const tpTag = tags.find((t) => t.tag === "templateParams");
669
+ if (tpTag) {
670
+ report("missing-template-params-plugin", `templateParams are set but TemplateParamsPlugin is not registered. In v3, this plugin is opt-in. Add it to createHead({ plugins: [TemplateParamsPlugin] }).`, "warn", tpTag);
671
+ } else {
672
+ const tokenTag = tags.find((t) => {
673
+ if (t.tag === "title" || t.tag === "titleTemplate")
674
+ return TEMPLATE_PARAM_TOKEN_RE.test(String(t.textContent ?? ""));
675
+ if (t.tag === "meta")
676
+ return TEMPLATE_PARAM_TOKEN_RE.test(String(t.props.content ?? ""));
677
+ return false;
678
+ });
679
+ if (tokenTag) {
680
+ const text = String(tokenTag.tag === "meta" ? tokenTag.props.content : tokenTag.textContent);
681
+ const token = TEMPLATE_PARAM_TOKEN_RE.exec(text)[0];
682
+ report("missing-template-params-plugin", `A template param "${token}" is used but TemplateParamsPlugin is not registered, so it renders literally. In v3, this plugin is opt-in. Add it to createHead({ plugins: [TemplateParamsPlugin] }).`, "warn", tokenTag);
683
+ }
684
+ }
685
+ }
686
+ if (!head.plugins.has("aliasSorting")) {
687
+ for (const tag of tags) {
688
+ const p = typeof tag.tagPriority === "string" ? tag.tagPriority : "";
689
+ if (p.startsWith("before:") || p.startsWith("after:")) {
690
+ report("missing-alias-sorting-plugin", `Tag priority alias "${p}" requires AliasSortingPlugin. In v3, this plugin is opt-in. Add it to createHead({ plugins: [AliasSortingPlugin] }).`, "warn", tag);
691
+ break;
692
+ }
693
+ }
694
+ }
695
+ const { max: maxHighPriority } = resolveOptions(ruleConfig, "too-many-fetchpriority-high", { max: 2 });
696
+ const highPriorityCount = tags.filter((t) => t.props.fetchpriority === "high").length;
697
+ if (highPriorityCount > maxHighPriority)
698
+ report("too-many-fetchpriority-high", `Found ${highPriorityCount} resources with fetchpriority="high". When everything is high priority, nothing is. Limit to ${maxHighPriority} for the signal to be effective.`, "warn");
699
+ const resourceHintsSeen = /* @__PURE__ */ new Map();
700
+ for (const tag of tags) {
701
+ if (tag.tag === "link" && tag.props.href && (tag.props.rel === "preload" || tag.props.rel === "prefetch" || tag.props.rel === "preconnect")) {
702
+ const crossoriginSuffix = tag.props.rel === "preconnect" && "crossorigin" in tag.props ? ":cors" : "";
703
+ const key = `${tag.props.rel}:${tag.props.href}${crossoriginSuffix}`;
704
+ if (resourceHintsSeen.has(key))
705
+ report("duplicate-resource-hint", `Duplicate ${tag.props.rel} for "${tag.props.href}".`, "warn", tag);
706
+ else
707
+ resourceHintsSeen.set(key, tag);
708
+ }
709
+ }
710
+ if (head.ssr) {
711
+ const { maxPosition: charsetMaxPos } = resolveOptions(ruleConfig, "charset-not-early", { maxPosition: 3 });
712
+ const headElementTags = /* @__PURE__ */ new Set(["title", "base", "meta", "link", "style", "script", "noscript"]);
713
+ const sortedHeadTags = tags.filter((t) => headElementTags.has(t.tag) && (!t.tagPosition || t.tagPosition === "head")).sort((a, b) => (a._w ?? 100) === (b._w ?? 100) ? (a._p ?? 0) - (b._p ?? 0) : (a._w ?? 100) - (b._w ?? 100));
714
+ let charsetTag;
715
+ let charsetPosition = -1;
716
+ for (let i = 0; i < sortedHeadTags.length; i++) {
717
+ const tag = sortedHeadTags[i];
718
+ if (tag.tag === "meta" && ("charset" in tag.props || tag.props["http-equiv"]?.toLowerCase() === "content-type")) {
719
+ charsetTag = tag;
720
+ charsetPosition = i + 1;
721
+ break;
722
+ }
723
+ }
724
+ if (charsetTag && charsetPosition > charsetMaxPos)
725
+ report("charset-not-early", `<meta charset> is at position ${charsetPosition} in <head>. It should be within the first ${charsetMaxPos} tags so the browser doesn't need to re-parse.`, "warn", charsetTag);
726
+ }
727
+ const moduleScriptSrcs = /* @__PURE__ */ new Set();
728
+ for (const tag of tags) {
729
+ if (tag.tag === "script" && tag.props.type === "module" && tag.props.src)
730
+ moduleScriptSrcs.add(tag.props.src);
731
+ }
732
+ for (const tag of tags) {
733
+ if (tag.tag === "link" && tag.props.rel === "preload" && tag.props.as === "script" && tag.props.href && moduleScriptSrcs.has(tag.props.href))
734
+ report("preload-not-modulepreload", `"${tag.props.href}" is a module script but uses rel="preload". Use rel="modulepreload" instead to also trigger module parsing.`, "warn", tag);
735
+ }
736
+ const corsOrigins = /* @__PURE__ */ new Set();
737
+ const preconnectCorsOrigins = /* @__PURE__ */ new Set();
738
+ for (const tag of tags) {
739
+ if (tag.tag === "link" && tag.props.href && "crossorigin" in tag.props) {
740
+ const origin = extractOrigin(tag.props.href);
741
+ if (origin) {
742
+ corsOrigins.add(origin);
743
+ if (tag.props.rel === "preconnect")
744
+ preconnectCorsOrigins.add(origin);
745
+ }
746
+ }
747
+ }
748
+ for (const tag of tags) {
749
+ if (tag.tag === "link" && tag.props.rel === "preconnect" && tag.props.href && !("crossorigin" in tag.props)) {
750
+ const origin = extractOrigin(tag.props.href);
751
+ if (origin && corsOrigins.has(origin) && !preconnectCorsOrigins.has(origin))
752
+ report("preconnect-missing-crossorigin", `Preconnect to "${tag.props.href}" is missing "crossorigin" but CORS resources are loaded from this origin. Without it, the browser opens a separate connection for CORS requests.`, "warn", tag);
753
+ }
754
+ }
755
+ const { maxBytes: crawlerMaxBytes } = resolveOptions(ruleConfig, "meta-beyond-1mb", { maxBytes: 1048576 });
756
+ let byteOffset = 0;
757
+ for (const tag of tags) {
758
+ if (tag.tagPosition && tag.tagPosition !== "head")
759
+ continue;
760
+ const props = Object.entries(tag.props).filter(([, v]) => v !== false && v != null).map(([k, v]) => v === true || v === "" ? ` ${k}` : ` ${k}="${v}"`).join("");
761
+ const content = tag.innerHTML || tag.textContent || "";
762
+ const tagSize = `<${tag.tag}${props}>${content}</${tag.tag}>
763
+ `.length;
764
+ byteOffset += tagSize;
765
+ if (byteOffset > crawlerMaxBytes && tag.tag === "meta") {
766
+ const key = tag.props.property || tag.props.name || "unknown";
767
+ report(
768
+ "meta-beyond-1mb",
769
+ `Meta tag "${key}" is rendered ~${(byteOffset / 1024).toFixed(0)}KB into <head>, beyond the ${(crawlerMaxBytes / 1048576).toFixed(0)}MB crawler parsing limit. Social crawlers (Facebook, Twitter) may not see it. Use \`tagPriority\` to promote it, or configure a custom \`tagWeight\` to reorder tags for bot requests.`,
770
+ "warn",
771
+ tag
772
+ );
773
+ }
774
+ }
775
+ dispatch(rules, "replace");
776
+ }
777
+ }
778
+ };
779
+ }, pluginKey);
780
+ }
781
+
782
+ export { CanonicalPlugin, InferSeoMetaPlugin, MinifyPlugin, ValidatePlugin, defineHeadPlugin };