@knighted/jsx 1.5.2 → 1.6.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 (49) hide show
  1. package/README.md +1 -0
  2. package/dist/cjs/debug/diagnostics.cjs +57 -0
  3. package/dist/cjs/debug/diagnostics.d.cts +6 -0
  4. package/dist/cjs/debug/index.cjs +7 -0
  5. package/dist/cjs/debug/index.d.cts +2 -0
  6. package/dist/cjs/internal/attribute-resolution.cjs +22 -4
  7. package/dist/cjs/internal/attribute-resolution.d.cts +5 -0
  8. package/dist/cjs/internal/dev-environment.cjs +41 -0
  9. package/dist/cjs/internal/dev-environment.d.cts +4 -0
  10. package/dist/cjs/internal/event-bindings.cjs +11 -2
  11. package/dist/cjs/internal/event-bindings.d.cts +5 -1
  12. package/dist/cjs/internal/template-diagnostics.cjs +171 -0
  13. package/dist/cjs/internal/template-diagnostics.d.cts +13 -0
  14. package/dist/cjs/jsx.cjs +2 -2
  15. package/dist/cjs/loader/jsx.cjs +72 -20
  16. package/dist/cjs/loader/jsx.d.cts +6 -1
  17. package/dist/cjs/node/debug/index.cjs +6 -0
  18. package/dist/cjs/node/debug/index.d.cts +2 -0
  19. package/dist/cjs/react/react-jsx.cjs +1 -1
  20. package/dist/cjs/runtime/shared.cjs +41 -22
  21. package/dist/cjs/runtime/shared.d.cts +5 -2
  22. package/dist/debug/diagnostics.d.ts +6 -0
  23. package/dist/debug/diagnostics.js +52 -0
  24. package/dist/debug/index.d.ts +2 -0
  25. package/dist/debug/index.js +3 -0
  26. package/dist/internal/attribute-resolution.d.ts +5 -0
  27. package/dist/internal/attribute-resolution.js +20 -3
  28. package/dist/internal/dev-environment.d.ts +4 -0
  29. package/dist/internal/dev-environment.js +34 -0
  30. package/dist/internal/event-bindings.d.ts +5 -1
  31. package/dist/internal/event-bindings.js +9 -1
  32. package/dist/internal/template-diagnostics.d.ts +13 -0
  33. package/dist/internal/template-diagnostics.js +167 -0
  34. package/dist/jsx.js +3 -3
  35. package/dist/lite/debug/diagnostics.js +1 -0
  36. package/dist/lite/debug/index.js +8 -0
  37. package/dist/lite/index.js +8 -4
  38. package/dist/lite/node/debug/index.js +8 -0
  39. package/dist/lite/node/index.js +8 -4
  40. package/dist/lite/node/react/index.js +7 -3
  41. package/dist/lite/react/index.js +7 -3
  42. package/dist/loader/jsx.d.ts +6 -1
  43. package/dist/loader/jsx.js +72 -20
  44. package/dist/node/debug/index.d.ts +2 -0
  45. package/dist/node/debug/index.js +6 -0
  46. package/dist/react/react-jsx.js +2 -2
  47. package/dist/runtime/shared.d.ts +5 -2
  48. package/dist/runtime/shared.js +39 -21
  49. package/package.json +39 -7
@@ -1,4 +1,8 @@
1
- import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var M=/<\s*$/,W=/<\/\s*$/,w="__KX_EXPR__",C=new RegExp(`${w}\\d+_\\d+__`,"g"),H=0,T={lang:"jsx",sourceType:"module",range:true,preserveParens:true},N=e=>{let t=`[oxc-parser] ${e.message}`;if(e.labels?.length){let n=e.labels[0];n.message&&(t+=`
2
- ${n.message}`);}return e.codeframe&&(t+=`
3
- ${e.codeframe}`),t},A=e=>{for(let t of e.body)if(t.type==="ExpressionStatement"){let n=t.expression;if(n.type==="JSXElement"||n.type==="JSXFragment")return n}throw new Error("The jsx template must contain a single JSX element or fragment.")},x=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${x(e.object)}.${e.property.name}`;default:return ""}},y=(e,t)=>{if(!e||typeof e!="object")return;let n=e;typeof n.type=="string"&&(t(n),Object.values(n).forEach(r=>{if(r){if(Array.isArray(r)){r.forEach(s=>y(s,t));return}typeof r=="object"&&y(r,t);}}));},X=(e,t)=>{let n=e.replace(/\r/g,"").replace(/\n\s+/g," "),r=e.match(/^\s*/)?.[0]??"",s=e.match(/\s*$/)?.[0]??"",o=/\n/.test(r),a=/\n/.test(s),p=n;if(o&&(p=p.replace(/^\s+/,"")),a&&(p=p.replace(/\s+$/,"")),p.length===0||p.trim().length===0)return [];let i=[];C.lastIndex=0;let c=0,l;for(;l=C.exec(p);){let m=l.index,u=p.slice(c,m);u&&i.push(u);let f=l[0];t.has(f)?i.push(t.get(f)):i.push(f),c=m+f.length;}let d=p.slice(c);return d&&i.push(d),i},V=(e,t)=>{let n=new Set;return y(e,r=>{r.type==="Identifier"&&t.placeholders.has(r.name)&&n.add(r.name);}),Array.from(n)},k=(e,t,n)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return n(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[r,s]=e.range,o=t.source.slice(r,s),a=V(e,t);try{let p=new Function(...a,`"use strict"; return (${o});`),i=a.map(c=>t.placeholders.get(c));return p(...i)}catch(p){throw new Error(`Failed to evaluate expression ${o}: ${p.message}`)}},z=e=>{let t=e.replace(/[^a-zA-Z0-9_$]/g,"");return t?/[A-Za-z_$]/.test(t[0])?t:`Component${t}`:"Component"},U=(e,t,n)=>{let r=n.get(e);if(r)return r;let s=e.displayName||e.name||`Component${t.length}`,o=z(s??""),a=o,p=1;for(;t.some(c=>c.name===a);)a=`${o}${p++}`;let i={name:a,value:e};return t.push(i),n.set(e,i),i},R=(e,t)=>{let n=e.raw??e,r=new Map,s=[],o=new Map,a=n[0]??"",p=H++,i=0;for(let c=0;c<t.length;c++){let l=n[c]??"",d=n[c+1]??"",m=t[c],u=M.test(l)||W.test(l);if(u&&typeof m=="function"){let D=U(m,s,o);a+=D.name+d;continue}if(u&&typeof m=="string"){a+=m+d;continue}let f=`${w}${p}_${i++}__`;r.set(f,m),a+=f+d;}return {source:a,placeholders:r,bindings:s}};var v=e=>{let{getIdentifierName:t,evaluateExpressionWithNamespace:n}=e;return (r,s,o)=>{let a={};return r.forEach(p=>{if(p.type==="JSXSpreadAttribute"){let c=n(p.argument,s,o);c&&typeof c=="object"&&!Array.isArray(c)&&Object.assign(a,c);return}let i=t(p.name);if(!p.value){a[i]=true;return}if(p.value.type==="Literal"){a[i]=p.value.value;return}if(p.value.type==="JSXExpressionContainer"){if(p.value.expression.type==="JSXEmptyExpression")return;a[i]=n(p.value.expression,s,o);}}),a}};var P="Capture",j=e=>e.endsWith(P)?{eventName:e.slice(0,-P.length),capture:true}:{eventName:e,capture:false},O=e=>{if(!e.startsWith("on"))return null;if(e.startsWith("on:")){let r=e.slice(3);if(!r)return null;let s=j(r);return s.eventName?s:null}let t=e.slice(2);if(!t)return null;let n=j(t);return n.eventName?{eventName:n.eventName.toLowerCase(),capture:n.capture}:null},I=e=>!e||typeof e!="object"?false:"handleEvent"in e&&typeof e.handleEvent=="function",K=e=>{if(!e||typeof e!="object"||!("handler"in e))return false;let t=e.handler;return typeof t=="function"?true:I(t)},F=e=>{if(typeof e=="function"||I(e))return {listener:e};if(!K(e))return null;let t=e,n=t.options?{...t.options}:void 0,r=(s,o)=>{o!=null&&(n||(n={}),n[s]=o);};return r("capture",t.capture),r("once",t.once),r("passive",t.passive),r("signal",t.signal??void 0),{listener:t.handler,options:n}};var Y=()=>{if(typeof document>"u"||typeof document.createElement!="function")throw new Error("The jsx template tag requires a DOM-like environment (document missing).")},ee=e=>typeof Node>"u"?false:e instanceof Node||e instanceof DocumentFragment,te=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",_=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",ne={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},$=e=>{if(!(!e||e==="html"||e==="svg"))return ne[e]},re=e=>e==="svg"?svg:html,E=(e,t,n)=>{let r=$(t.space),s=String(n);if(r){e.setAttributeNS(r,t.attribute,s);return}e.setAttribute(t.attribute,s);},L=(e,t)=>{let n=$(t.space);if(n){e.removeAttributeNS(n,t.attribute);return}e.removeAttribute(t.attribute);},h=(e,t)=>Array.isArray(e)?e.filter(Boolean).join(t):e,oe=(e,t,n)=>t==="svg"||!n.property||n.property.includes(":")?false:n.property in e,se=(e,t,n,r)=>{if(n==null)return;if(t==="dangerouslySetInnerHTML"&&typeof n=="object"&&n&&"__html"in n){e.innerHTML=String(n.__html??"");return}if(t==="ref"){if(typeof n=="function"){n(e);return}if(n&&typeof n=="object"){n.current=e;return}}if(t==="style"&&typeof n=="object"&&n!==null){let c=n,l=e.style;if(!l)return;let d=l;Object.entries(c).forEach(([m,u])=>{if(u!=null){if(m.startsWith("--")){l.setProperty(m,String(u));return}d[m]=u;}});return}let s=O(t);if(s){let c=F(n);if(c){let l=c.options?{...c.options}:void 0;s.capture&&(l?l.capture=true:l={capture:true}),e.addEventListener(s.eventName,c.listener,l);return}}let o=find(re(r),t),a=e,p=oe(e,r,o);if(o.mustUseProperty){let c=o.boolean?!!n:n;a[o.property]=c;return}if(o.boolean){let c=!!n;p&&(a[o.property]=c),c?E(e,o,""):L(e,o);return}let i=n;if(o.spaceSeparated?i=h(n," "):o.commaSeparated?i=h(n,","):o.commaOrSpaceSeparated&&(i=h(n," ")),o.booleanish&&typeof i=="boolean"&&(i=i?"true":"false"),o.overloadedBoolean){if(i===false){L(e,o);return}if(i===true){E(e,o,"");return}}if(p){a[o.property]=i;return}i!==false&&E(e,o,i);},g=(e,t)=>{if(t!=null&&typeof t!="boolean"){if(_(t))throw new Error("Async values are not supported inside jsx template results.");if(Array.isArray(t)){t.forEach(n=>g(e,n));return}if(te(t)){for(let n of t)g(e,n);return}if(ee(t)){e.appendChild(t);return}e.appendChild(document.createTextNode(String(t)));}},b=(e,t,n)=>k(e,t,r=>J(r,t,n)),B=v({getIdentifierName:x,evaluateExpressionWithNamespace:b}),ae=(e,t,n,r)=>{let s=B(t,n,r);Object.entries(s).forEach(([o,a])=>{if(o!=="key"){if(o==="children"){g(e,a);return}se(e,o,a,r);}});},S=(e,t,n)=>{let r=[];return e.forEach(s=>{switch(s.type){case "JSXText":{X(s.value,t.placeholders).forEach(a=>{r.push(a);});break}case "JSXExpressionContainer":{if(s.expression.type==="JSXEmptyExpression")break;r.push(b(s.expression,t,n));break}case "JSXSpreadChild":{let o=b(s.expression,t,n);o!=null&&r.push(o);break}case "JSXElement":case "JSXFragment":{r.push(J(s,t,n));break}}}),r},ie=(e,t,n,r)=>{let s=B(e.openingElement.attributes,t,r),o=S(e.children,t,r);o.length===1?s.children=o[0]:o.length>1&&(s.children=o);let a=n(s);if(_(a))throw new Error("Async jsx components are not supported.");return a},pe=(e,t,n)=>{let r=e.openingElement,s=x(r.name),o=t.components.get(s);if(o)return ie(e,t,o,n);if(/[A-Z]/.test(s[0]??""))throw new Error(`Unknown component "${s}". Did you interpolate it with the template literal?`);let a=s==="svg"?"svg":n,p=s==="foreignObject"?null:a,i=a==="svg"?document.createElementNS("http://www.w3.org/2000/svg",s):document.createElement(s);return ae(i,r.attributes,t,a),S(e.children,t,p).forEach(l=>g(i,l)),i},J=(e,t,n)=>{if(e.type==="JSXFragment"){let r=document.createDocumentFragment();return S(e.children,t,n).forEach(o=>g(r,o)),r}return pe(e,t,n)},ce=(e,...t)=>{Y();let n=R(e,t),r=parseSync("inline.jsx",n.source,T);if(r.errors.length>0)throw new Error(N(r.errors[0]));let s=A(r.program),o={source:n.source,placeholders:n.placeholders,components:new Map(n.bindings.map(a=>[a.name,a.value]))};return J(s,o,null)};
4
- export{ce as jsx};
1
+ import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var z="oxc-parser",K=e=>{let n=e.raw??e,t=n[0]??"",r=[];for(let o=0;o<n.length-1;o++){let s="${expr#"+o+"}",i=t.length;t+=s;let p=t.length;r.push({index:o,templateStart:i,templateEnd:p,label:s}),t+=n[o+1]??"";}return {source:t,spans:r}},Z=(e,n)=>{let t=new Map;return n.forEach(r=>{t.set(r.index,r);}),e.expressionRanges.map(r=>{let o=t.get(r.index);if(!o)return null;let s=Math.max(0,r.sourceEnd-r.sourceStart),i=Math.max(0,o.templateEnd-o.templateStart);return {sourceStart:r.sourceStart,sourceEnd:r.sourceEnd,templateStart:o.templateStart,templateEnd:o.templateEnd,delta:i-s}}).filter(r=>!!r).sort((r,o)=>r.sourceStart-o.sourceStart)},G=(e,n,t)=>{if(!Number.isFinite(e)||e<=0)return 0;let r=0;for(let s of n){if(e<s.sourceStart)break;if(e<s.sourceEnd){let i=Math.max(0,e-s.sourceStart),p=Math.max(0,s.templateEnd-s.templateStart);if(p===0)return s.templateStart;let a=Math.min(i,Math.max(0,p-1));return s.templateStart+a}r+=s.delta;}let o=e+r;return o<=0?0:o>=t?t:o},N=(e,n)=>{let t=Math.max(0,Math.min(n,e.length)),r=1,o=1;for(let s=0;s<t;s++){if(e.charCodeAt(s)===10){r++,o=1;continue}o++;}return {line:r,column:o}},q=e=>{let n=[],t=0;return e.forEach((r,o)=>{n.push(t),t+=r.length,o<e.length-1&&(t+=1);}),n},Q=(e,n,t,r,o,s,i)=>{let p=t+n.length,a=Math.max(r,t),c=Math.min(o,p);if(c>a){let l=Math.max(0,a-t),u=Math.max(1,c-a);return " ".repeat(l)+"^".repeat(u)}if(n.length===0&&e>=s&&e<=i)return "^";if(e===s){let l=Math.max(0,r-t);return " ".repeat(Math.min(l,n.length))+"^"}return ""},Y=(e,n,t,r,o)=>{if(!e.length)return "";let s=e.split(`
2
+ `),i=q(s),p=Math.max(1,r-1),a=Math.min(s.length,o+1),c=String(a).length,l=[];for(let u=p;u<=a;u++){let d=s[u-1]??"",m=String(u).padStart(c," ");l.push(`${m} | ${d}`);let g=Q(u,d,i[u-1]??0,n,t,r,o);g&&l.push(`${" ".repeat(c)} | ${g}`);}return l.join(`
3
+ `)},S=(e,n,t,r,o)=>{let s=z,i=`[${s}] ${r.message}`,p=r.labels?.[0];if(!p)return i;let{source:a,spans:c}=K(n),l=Z(t,c),u=y=>G(typeof y=="number"?y:0,l,a.length),d=u(p.start),m=u(p.end);m<=d&&(m=Math.min(a.length,d+1));let g=N(a,d),x=N(a,Math.max(d,m-1)),h=Y(a,d,m,g.line,x.line),f=`[${s}] ${r.message}`;return f+=`
4
+ --> ${e} template:${g.line}:${g.column}`,p.message&&(f+=`
5
+ ${p.message}`),h&&(f+=`
6
+ ${h}`),r.helpMessage&&(f+=`
7
+ ${r.helpMessage}`),f};var ee=/<\s*$/,te=/<\/\s*$/,X="__KX_EXPR__",v=new RegExp(`${X}\\d+_\\d+__`,"g"),ne=0;var R={lang:"jsx",sourceType:"module",range:true,preserveParens:true},P=e=>{for(let n of e.body)if(n.type==="ExpressionStatement"){let t=n.expression;if(t.type==="JSXElement"||t.type==="JSXFragment")return t}throw new Error("The jsx template must contain a single JSX element or fragment.")},b=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${b(e.object)}.${e.property.name}`;default:return ""}},T=(e,n)=>{if(!e||typeof e!="object")return;let t=e;typeof t.type=="string"&&(n(t),Object.values(t).forEach(r=>{if(r){if(Array.isArray(r)){r.forEach(o=>T(o,n));return}typeof r=="object"&&T(r,n);}}));},M=(e,n)=>{let t=e.replace(/\r/g,"").replace(/\n\s+/g," "),r=e.match(/^\s*/)?.[0]??"",o=e.match(/\s*$/)?.[0]??"",s=/\n/.test(r),i=/\n/.test(o),p=t;if(s&&(p=p.replace(/^\s+/,"")),i&&(p=p.replace(/\s+$/,"")),p.length===0||p.trim().length===0)return [];let a=[];v.lastIndex=0;let c=0,l;for(;l=v.exec(p);){let d=l.index,m=p.slice(c,d);m&&a.push(m);let g=l[0];n.has(g)?a.push(n.get(g)):a.push(g),c=d+g.length;}let u=p.slice(c);return u&&a.push(u),a},re=(e,n)=>{let t=new Set;return T(e,r=>{r.type==="Identifier"&&n.placeholders.has(r.name)&&t.add(r.name);}),Array.from(t)},D=(e,n,t)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return t(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[r,o]=e.range,s=n.source.slice(r,o),i=re(e,n);try{let p=new Function(...i,`"use strict"; return (${s});`),a=i.map(c=>n.placeholders.get(c));return p(...a)}catch(p){throw new Error(`Failed to evaluate expression ${s}: ${p.message}`)}},oe=e=>{let n=e.replace(/[^a-zA-Z0-9_$]/g,"");return n?/[A-Za-z_$]/.test(n[0])?n:`Component${n}`:"Component"},se=(e,n,t)=>{let r=t.get(e);if(r)return r;let o=e.displayName||e.name||`Component${n.length}`,s=oe(o??""),i=s,p=1;for(;n.some(c=>c.name===i);)i=`${s}${p++}`;let a={name:i,value:e};return n.push(a),t.set(e,a),a},I=(e,n)=>{let t=e.raw??e,r=new Map,o=[],s=new Map,i=t[0]??"",p=ne++,a=0,c=[];for(let l=0;l<n.length;l++){let u=t[l]??"",d=t[l+1]??"",m=n[l],g=ee.test(u)||te.test(u),x;if(g&&typeof m=="function")x=se(m,o,s).name;else if(g&&typeof m=="string")x=m;else {let y=`${X}${p}_${a++}__`;r.set(y,m),x=y;}let h=i.length;i+=x;let f=i.length;c.push({index:l,sourceStart:h,sourceEnd:f}),i+=d;}return {source:i,placeholders:r,bindings:o,diagnostics:{expressionRanges:c}}};var j=e=>{let{getIdentifierName:n,evaluateExpressionWithNamespace:t}=e;return (r,o,s)=>{let i={},p=(a,c)=>{i[a]=c;};return r.forEach(a=>{if(a.type==="JSXSpreadAttribute"){let l=t(a.argument,o,s);l&&typeof l=="object"&&!Array.isArray(l)&&Object.assign(i,l);return}let c=n(a.name);if(!a.value){p(c,true);return}if(a.value.type==="Literal"){p(c,a.value.value);return}if(a.value.type==="JSXExpressionContainer"){if(a.value.expression.type==="JSXEmptyExpression")return;p(c,t(a.value.expression,o,s));}}),i}};var $="Capture",O=e=>e.endsWith($)?{eventName:e.slice(0,-$.length),capture:true}:{eventName:e,capture:false},F=e=>{if(!e.startsWith("on"))return null;if(e.startsWith("on:")){let r=e.slice(3);if(!r)return null;let o=O(r);return o.eventName?o:null}let n=e.slice(2);if(!n)return null;let t=O(n);return t.eventName?{eventName:t.eventName.toLowerCase(),capture:t.capture}:null},_=e=>!e||typeof e!="object"?false:"handleEvent"in e&&typeof e.handleEvent=="function",ce=e=>{if(!e||typeof e!="object"||!("handler"in e))return false;let n=e.handler;return typeof n=="function"?true:_(n)},H=(e,n)=>{if(typeof n=="function"||_(n))return {listener:n};if(!ce(n))return null;let t=n,r=t.options?{...t.options}:void 0,o=(s,i)=>{i!=null&&(r||(r={}),r[s]=i);};return o("capture",t.capture),o("once",t.once),o("passive",t.passive),o("signal",t.signal??void 0),{listener:t.handler,options:r}};var fe=()=>{if(typeof document>"u"||typeof document.createElement!="function")throw new Error("The jsx template tag requires a DOM-like environment (document missing).")},xe=e=>typeof Node>"u"?false:e instanceof Node||e instanceof DocumentFragment,ye=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",W=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",Ee={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},V=e=>{if(!(!e||e==="html"||e==="svg"))return Ee[e]},he=e=>e==="svg"?svg:html,w=(e,n,t)=>{let r=V(n.space),o=String(t);if(r){e.setAttributeNS(r,n.attribute,o);return}e.setAttribute(n.attribute,o);},B=(e,n)=>{let t=V(n.space);if(t){e.removeAttributeNS(t,n.attribute);return}e.removeAttribute(n.attribute);},C=(e,n)=>Array.isArray(e)?e.filter(Boolean).join(n):e,be=(e,n,t)=>n==="svg"||!t.property||t.property.includes(":")?false:t.property in e,Se=(e,n,t,r)=>{if(t==null)return;if(n==="dangerouslySetInnerHTML"&&typeof t=="object"&&t&&"__html"in t){e.innerHTML=String(t.__html??"");return}if(n==="ref"){if(typeof t=="function"){t(e);return}if(t&&typeof t=="object"){t.current=e;return}}if(n==="style"&&typeof t=="object"&&t!==null){let c=t,l=e.style;if(!l)return;let u=l;Object.entries(c).forEach(([d,m])=>{if(m!=null){if(d.startsWith("--")){l.setProperty(d,String(m));return}u[d]=m;}});return}let o=F(n);if(o){let c=H(n,t);if(c){let l=c.options?{...c.options}:void 0;o.capture&&(l?l.capture=true:l={capture:true}),e.addEventListener(o.eventName,c.listener,l);return}}let s=find(he(r),n),i=e,p=be(e,r,s);if(s.mustUseProperty){let c=s.boolean?!!t:t;i[s.property]=c;return}if(s.boolean){let c=!!t;p&&(i[s.property]=c),c?w(e,s,""):B(e,s);return}let a=t;if(s.spaceSeparated?a=C(t," "):s.commaSeparated?a=C(t,","):s.commaOrSpaceSeparated&&(a=C(t," ")),s.booleanish&&typeof a=="boolean"&&(a=a?"true":"false"),s.overloadedBoolean){if(a===false){B(e,s);return}if(a===true){w(e,s,"");return}}if(p){i[s.property]=a;return}a!==false&&w(e,s,a);},E=(e,n)=>{if(n!=null&&typeof n!="boolean"){if(W(n))throw new Error("Async values are not supported inside jsx template results.");if(Array.isArray(n)){n.forEach(t=>E(e,t));return}if(ye(n)){for(let t of n)E(e,t);return}if(xe(n)){e.appendChild(n);return}e.appendChild(document.createTextNode(String(n)));}},J=(e,n,t)=>D(e,n,r=>k(r,n,t)),U=j({getIdentifierName:b,evaluateExpressionWithNamespace:J}),Te=(e,n,t,r)=>{let o=U(n,t,r);Object.entries(o).forEach(([s,i])=>{if(s!=="key"){if(s==="children"){E(e,i);return}Se(e,s,i,r);}});},A=(e,n,t)=>{let r=[];return e.forEach(o=>{switch(o.type){case "JSXText":{M(o.value,n.placeholders).forEach(i=>{r.push(i);});break}case "JSXExpressionContainer":{if(o.expression.type==="JSXEmptyExpression")break;r.push(J(o.expression,n,t));break}case "JSXSpreadChild":{let s=J(o.expression,n,t);s!=null&&r.push(s);break}case "JSXElement":case "JSXFragment":{r.push(k(o,n,t));break}}}),r},we=(e,n,t,r)=>{let o=U(e.openingElement.attributes,n,r),s=A(e.children,n,r);s.length===1?o.children=s[0]:s.length>1&&(o.children=s);let i=t(o);if(W(i))throw new Error("Async jsx components are not supported.");return i},Ce=(e,n,t)=>{let r=e.openingElement,o=b(r.name),s=n.components.get(o);if(s)return we(e,n,s,t);if(/[A-Z]/.test(o[0]??""))throw new Error(`Unknown component "${o}". Did you interpolate it with the template literal?`);let i=o==="svg"?"svg":t,p=o==="foreignObject"?null:i,a=i==="svg"?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o);return Te(a,r.attributes,n,i),A(e.children,n,p).forEach(l=>E(a,l)),a},k=(e,n,t)=>{if(e.type==="JSXFragment"){let r=document.createDocumentFragment();return A(e.children,n,t).forEach(s=>E(r,s)),r}return Ce(e,n,t)},Je=(e,...n)=>{fe();let t=I(e,n),r=parseSync("inline.jsx",t.source,R);if(r.errors.length>0)throw new Error(S("jsx",e,t.diagnostics,r.errors[0]));let o=P(r.program),s={source:t.source,placeholders:t.placeholders,components:new Map(t.bindings.map(i=>[i.name,i.value]))};return k(o,s,null)};
8
+ export{Je as jsx};
@@ -0,0 +1,8 @@
1
+ import {createRequire}from'module';import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var T=null,I=e=>{T=e;},me=e=>{T?.warnLowercaseEventProp?.(e);},ue=e=>{T?.ensureValidDangerouslySetInnerHTML?.(e);},P=e=>{let{getIdentifierName:t,evaluateExpressionWithNamespace:n}=e;return (r,o,s)=>{let i={},p=(a,c)=>{a==="dangerouslySetInnerHTML"&&ue(c),i[a]=c;};return r.forEach(a=>{if(a.type==="JSXSpreadAttribute"){let l=n(a.argument,o,s);l&&typeof l=="object"&&!Array.isArray(l)&&Object.assign(i,l);return}let c=t(a.name);if(me(c),!a.value){p(c,true);return}if(a.value.type==="Literal"){p(c,a.value.value);return}if(a.value.type==="JSXExpressionContainer"){if(a.value.expression.type==="JSXEmptyExpression")return;p(c,n(a.value.expression,o,s));}}),i}};var _=null,H=e=>{_=e;},$="Capture",O=e=>e.endsWith($)?{eventName:e.slice(0,-$.length),capture:true}:{eventName:e,capture:false},F=e=>{if(!e.startsWith("on"))return null;if(e.startsWith("on:")){let r=e.slice(3);if(!r)return null;let o=O(r);return o.eventName?o:null}let t=e.slice(2);if(!t)return null;let n=O(t);return n.eventName?{eventName:n.eventName.toLowerCase(),capture:n.capture}:null},W=e=>!e||typeof e!="object"?false:"handleEvent"in e&&typeof e.handleEvent=="function",de=e=>{if(!e||typeof e!="object"||!("handler"in e))return false;let t=e.handler;return typeof t=="function"?true:W(t)},fe=(e,t)=>{_?.onInvalidHandler?.(e,t);},B=(e,t)=>{if(typeof t=="function"||W(t))return {listener:t};if(!de(t))return fe(e,t),null;let n=t,r=n.options?{...n.options}:void 0,o=(s,i)=>{i!=null&&(r||(r={}),r[s]=i);};return o("capture",n.capture),o("once",n.once),o("passive",n.passive),o("signal",n.signal??void 0),{listener:n.handler,options:r}};var ge="@knighted/jsx",V=e=>`${ge}: ${e}`,J=()=>typeof process<"u"&&process.env?.KNIGHTED_JSX_DEBUG==="1",C=e=>{if(e===null)return "null";if(e===void 0)return "undefined";if(typeof e=="function")return e.name?`function ${e.name}`:"function";if(Array.isArray(e))return "array";if(typeof e=="object"){let t=e.constructor;return t&&typeof t.name=="string"&&t.name&&t.name!=="Object"?`${t.name} instance`:"object"}return typeof e},b=e=>new Error(V(e)),U=(e,t=false)=>{!t&&!J()||typeof console<"u"&&typeof console.warn=="function"&&console.warn(V(e));};var xe=e=>e>="a"&&e<="z",S="env",k=()=>S==="always"||S==="env"&&J(),ye=()=>S==="always",he={warnLowercaseEventProp(e){if(!k()||!e.startsWith("on")||e.startsWith("on:")||e.length<3)return;let t=e[2]??"";if(!xe(t))return;let n=`${e.slice(0,2)}${t.toUpperCase()}${e.slice(3)}`;U(`Use camelCase DOM event props when targeting runtime jsx templates. Received "${e}"; did you mean "${n}"?`,ye());},ensureValidDangerouslySetInnerHTML(e){if(!k())return;if(!e||typeof e!="object"||Array.isArray(e))throw b("dangerouslySetInnerHTML expects an object with a string __html field.");let t=e.__html;if(typeof t!="string")throw b(`dangerouslySetInnerHTML.__html must be a string but received ${C(t)}.`)}},Ee={onInvalidHandler(e,t){if(k())throw b(`The "${e}" prop expects a function, EventListenerObject, or descriptor ({ handler }) but received ${C(t)}.`)}},G=e=>{S=e?.mode,I(he),H(Ee);};var Se=createRequire(import.meta.url),q=()=>Se,z="<!doctype html><html><body></body></html>",Te=["window","self","document","HTMLElement","Element","Node","DocumentFragment","customElements","Text","Comment","MutationObserver","navigator"],Je=()=>typeof document<"u"&&typeof document.createElement=="function",Ce=e=>{let t=globalThis,n=e;Te.forEach(r=>{t[r]===void 0&&n[r]!==void 0&&(t[r]=n[r]);});},D=()=>{let{parseHTML:e}=q()("linkedom"),{window:t}=e(z);return t},A=()=>{let{JSDOM:e}=q()("jsdom"),{window:t}=new e(z);return t},ke=()=>{let e=typeof process<"u"&&process.env?.KNIGHTED_JSX_NODE_SHIM?process.env.KNIGHTED_JSX_NODE_SHIM.toLowerCase():void 0;return e==="linkedom"||e==="jsdom"?e:"auto"},De=()=>{let e=ke();return e==="linkedom"?[D,A]:e==="jsdom"?[A,D]:[D,A]},Ae=()=>{let e=[];for(let n of De())try{return n()}catch(r){e.push(r);}let t='Unable to bootstrap a DOM-like environment. Install "linkedom" or "jsdom" (both optional peer dependencies) or set KNIGHTED_JSX_NODE_SHIM to pick one explicitly.';throw new AggregateError(e,t)},K=false,Z=()=>{if(Je()||K)return;let e=Ae();Ce(e),K=true;};var ve="oxc-parser",Ne=e=>{let t=e.raw??e,n=t[0]??"",r=[];for(let o=0;o<t.length-1;o++){let s="${expr#"+o+"}",i=n.length;n+=s;let p=n.length;r.push({index:o,templateStart:i,templateEnd:p,label:s}),n+=t[o+1]??"";}return {source:n,spans:r}},Me=(e,t)=>{let n=new Map;return t.forEach(r=>{n.set(r.index,r);}),e.expressionRanges.map(r=>{let o=n.get(r.index);if(!o)return null;let s=Math.max(0,r.sourceEnd-r.sourceStart),i=Math.max(0,o.templateEnd-o.templateStart);return {sourceStart:r.sourceStart,sourceEnd:r.sourceEnd,templateStart:o.templateStart,templateEnd:o.templateEnd,delta:i-s}}).filter(r=>!!r).sort((r,o)=>r.sourceStart-o.sourceStart)},Re=(e,t,n)=>{if(!Number.isFinite(e)||e<=0)return 0;let r=0;for(let s of t){if(e<s.sourceStart)break;if(e<s.sourceEnd){let i=Math.max(0,e-s.sourceStart),p=Math.max(0,s.templateEnd-s.templateStart);if(p===0)return s.templateStart;let a=Math.min(i,Math.max(0,p-1));return s.templateStart+a}r+=s.delta;}let o=e+r;return o<=0?0:o>=n?n:o},Y=(e,t)=>{let n=Math.max(0,Math.min(t,e.length)),r=1,o=1;for(let s=0;s<n;s++){if(e.charCodeAt(s)===10){r++,o=1;continue}o++;}return {line:r,column:o}},Xe=e=>{let t=[],n=0;return e.forEach((r,o)=>{t.push(n),n+=r.length,o<e.length-1&&(n+=1);}),t},Le=(e,t,n,r,o,s,i)=>{let p=n+t.length,a=Math.max(r,n),c=Math.min(o,p);if(c>a){let l=Math.max(0,a-n),u=Math.max(1,c-a);return " ".repeat(l)+"^".repeat(u)}if(t.length===0&&e>=s&&e<=i)return "^";if(e===s){let l=Math.max(0,r-n);return " ".repeat(Math.min(l,t.length))+"^"}return ""},je=(e,t,n,r,o)=>{if(!e.length)return "";let s=e.split(`
2
+ `),i=Xe(s),p=Math.max(1,r-1),a=Math.min(s.length,o+1),c=String(a).length,l=[];for(let u=p;u<=a;u++){let d=s[u-1]??"",m=String(u).padStart(c," ");l.push(`${m} | ${d}`);let f=Le(u,d,i[u-1]??0,t,n,r,o);f&&l.push(`${" ".repeat(c)} | ${f}`);}return l.join(`
3
+ `)},v=(e,t,n,r,o)=>{let s=ve,i=`[${s}] ${r.message}`,p=r.labels?.[0];if(!p)return i;let{source:a,spans:c}=Ne(t),l=Me(n,c),u=y=>Re(typeof y=="number"?y:0,l,a.length),d=u(p.start),m=u(p.end);m<=d&&(m=Math.min(a.length,d+1));let f=Y(a,d),x=Y(a,Math.max(d,m-1)),E=je(a,d,m,f.line,x.line),g=`[${s}] ${r.message}`;return g+=`
4
+ --> ${e} template:${f.line}:${f.column}`,p.message&&(g+=`
5
+ ${p.message}`),E&&(g+=`
6
+ ${E}`),r.helpMessage&&(g+=`
7
+ ${r.helpMessage}`),g};var Ie=/<\s*$/,Pe=/<\/\s*$/,ee="__KX_EXPR__",Q=new RegExp(`${ee}\\d+_\\d+__`,"g"),$e=0;var te={lang:"jsx",sourceType:"module",range:true,preserveParens:true},ne=e=>{for(let t of e.body)if(t.type==="ExpressionStatement"){let n=t.expression;if(n.type==="JSXElement"||n.type==="JSXFragment")return n}throw new Error("The jsx template must contain a single JSX element or fragment.")},w=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${w(e.object)}.${e.property.name}`;default:return ""}},N=(e,t)=>{if(!e||typeof e!="object")return;let n=e;typeof n.type=="string"&&(t(n),Object.values(n).forEach(r=>{if(r){if(Array.isArray(r)){r.forEach(o=>N(o,t));return}typeof r=="object"&&N(r,t);}}));},re=(e,t)=>{let n=e.replace(/\r/g,"").replace(/\n\s+/g," "),r=e.match(/^\s*/)?.[0]??"",o=e.match(/\s*$/)?.[0]??"",s=/\n/.test(r),i=/\n/.test(o),p=n;if(s&&(p=p.replace(/^\s+/,"")),i&&(p=p.replace(/\s+$/,"")),p.length===0||p.trim().length===0)return [];let a=[];Q.lastIndex=0;let c=0,l;for(;l=Q.exec(p);){let d=l.index,m=p.slice(c,d);m&&a.push(m);let f=l[0];t.has(f)?a.push(t.get(f)):a.push(f),c=d+f.length;}let u=p.slice(c);return u&&a.push(u),a},Oe=(e,t)=>{let n=new Set;return N(e,r=>{r.type==="Identifier"&&t.placeholders.has(r.name)&&n.add(r.name);}),Array.from(n)},oe=(e,t,n)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return n(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[r,o]=e.range,s=t.source.slice(r,o),i=Oe(e,t);try{let p=new Function(...i,`"use strict"; return (${s});`),a=i.map(c=>t.placeholders.get(c));return p(...a)}catch(p){throw new Error(`Failed to evaluate expression ${s}: ${p.message}`)}},_e=e=>{let t=e.replace(/[^a-zA-Z0-9_$]/g,"");return t?/[A-Za-z_$]/.test(t[0])?t:`Component${t}`:"Component"},He=(e,t,n)=>{let r=n.get(e);if(r)return r;let o=e.displayName||e.name||`Component${t.length}`,s=_e(o??""),i=s,p=1;for(;t.some(c=>c.name===i);)i=`${s}${p++}`;let a={name:i,value:e};return t.push(a),n.set(e,a),a},se=(e,t)=>{let n=e.raw??e,r=new Map,o=[],s=new Map,i=n[0]??"",p=$e++,a=0,c=[];for(let l=0;l<t.length;l++){let u=n[l]??"",d=n[l+1]??"",m=t[l],f=Ie.test(u)||Pe.test(u),x;if(f&&typeof m=="function")x=He(m,o,s).name;else if(f&&typeof m=="string")x=m;else {let y=`${ee}${p}_${a++}__`;r.set(y,m),x=y;}let E=i.length;i+=x;let g=i.length;c.push({index:l,sourceStart:E,sourceEnd:g}),i+=d;}return {source:i,placeholders:r,bindings:o,diagnostics:{expressionRanges:c}}};var Ue=()=>{if(typeof document>"u"||typeof document.createElement!="function")throw new Error("The jsx template tag requires a DOM-like environment (document missing).")},Ge=e=>typeof Node>"u"?false:e instanceof Node||e instanceof DocumentFragment,Ke=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",ie=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",qe={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},pe=e=>{if(!(!e||e==="html"||e==="svg"))return qe[e]},ze=e=>e==="svg"?svg:html,M=(e,t,n)=>{let r=pe(t.space),o=String(n);if(r){e.setAttributeNS(r,t.attribute,o);return}e.setAttribute(t.attribute,o);},ae=(e,t)=>{let n=pe(t.space);if(n){e.removeAttributeNS(n,t.attribute);return}e.removeAttribute(t.attribute);},R=(e,t)=>Array.isArray(e)?e.filter(Boolean).join(t):e,Ze=(e,t,n)=>t==="svg"||!n.property||n.property.includes(":")?false:n.property in e,Ye=(e,t,n,r)=>{if(n==null)return;if(t==="dangerouslySetInnerHTML"&&typeof n=="object"&&n&&"__html"in n){e.innerHTML=String(n.__html??"");return}if(t==="ref"){if(typeof n=="function"){n(e);return}if(n&&typeof n=="object"){n.current=e;return}}if(t==="style"&&typeof n=="object"&&n!==null){let c=n,l=e.style;if(!l)return;let u=l;Object.entries(c).forEach(([d,m])=>{if(m!=null){if(d.startsWith("--")){l.setProperty(d,String(m));return}u[d]=m;}});return}let o=F(t);if(o){let c=B(t,n);if(c){let l=c.options?{...c.options}:void 0;o.capture&&(l?l.capture=true:l={capture:true}),e.addEventListener(o.eventName,c.listener,l);return}}let s=find(ze(r),t),i=e,p=Ze(e,r,s);if(s.mustUseProperty){let c=s.boolean?!!n:n;i[s.property]=c;return}if(s.boolean){let c=!!n;p&&(i[s.property]=c),c?M(e,s,""):ae(e,s);return}let a=n;if(s.spaceSeparated?a=R(n," "):s.commaSeparated?a=R(n,","):s.commaOrSpaceSeparated&&(a=R(n," ")),s.booleanish&&typeof a=="boolean"&&(a=a?"true":"false"),s.overloadedBoolean){if(a===false){ae(e,s);return}if(a===true){M(e,s,"");return}}if(p){i[s.property]=a;return}a!==false&&M(e,s,a);},h=(e,t)=>{if(t!=null&&typeof t!="boolean"){if(ie(t))throw new Error("Async values are not supported inside jsx template results.");if(Array.isArray(t)){t.forEach(n=>h(e,n));return}if(Ke(t)){for(let n of t)h(e,n);return}if(Ge(t)){e.appendChild(t);return}e.appendChild(document.createTextNode(String(t)));}},X=(e,t,n)=>oe(e,t,r=>j(r,t,n)),ce=P({getIdentifierName:w,evaluateExpressionWithNamespace:X}),Qe=(e,t,n,r)=>{let o=ce(t,n,r);Object.entries(o).forEach(([s,i])=>{if(s!=="key"){if(s==="children"){h(e,i);return}Ye(e,s,i,r);}});},L=(e,t,n)=>{let r=[];return e.forEach(o=>{switch(o.type){case "JSXText":{re(o.value,t.placeholders).forEach(i=>{r.push(i);});break}case "JSXExpressionContainer":{if(o.expression.type==="JSXEmptyExpression")break;r.push(X(o.expression,t,n));break}case "JSXSpreadChild":{let s=X(o.expression,t,n);s!=null&&r.push(s);break}case "JSXElement":case "JSXFragment":{r.push(j(o,t,n));break}}}),r},et=(e,t,n,r)=>{let o=ce(e.openingElement.attributes,t,r),s=L(e.children,t,r);s.length===1?o.children=s[0]:s.length>1&&(o.children=s);let i=n(o);if(ie(i))throw new Error("Async jsx components are not supported.");return i},tt=(e,t,n)=>{let r=e.openingElement,o=w(r.name),s=t.components.get(o);if(s)return et(e,t,s,n);if(/[A-Z]/.test(o[0]??""))throw new Error(`Unknown component "${o}". Did you interpolate it with the template literal?`);let i=o==="svg"?"svg":n,p=o==="foreignObject"?null:i,a=i==="svg"?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o);return Qe(a,r.attributes,t,i),L(e.children,t,p).forEach(l=>h(a,l)),a},j=(e,t,n)=>{if(e.type==="JSXFragment"){let r=document.createDocumentFragment();return L(e.children,t,n).forEach(s=>h(r,s)),r}return tt(e,t,n)},le=(e,...t)=>{Ue();let n=se(e,t),r=parseSync("inline.jsx",n.source,te);if(r.errors.length>0)throw new Error(v("jsx",e,n.diagnostics,r.errors[0]));let o=ne(r.program),s={source:n.source,placeholders:n.placeholders,components:new Map(n.bindings.map(i=>[i.name,i.value]))};return j(o,s,null)};G({mode:"always"});Z();var Jt=le;
8
+ export{Jt as jsx};
@@ -1,4 +1,8 @@
1
- import {createRequire}from'module';import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var G=createRequire(import.meta.url),N=()=>G,k="<!doctype html><html><body></body></html>",Y=["window","self","document","HTMLElement","Element","Node","DocumentFragment","customElements","Text","Comment","MutationObserver","navigator"],Q=()=>typeof document<"u"&&typeof document.createElement=="function",ee=e=>{let t=globalThis,n=e;Y.forEach(r=>{t[r]===void 0&&n[r]!==void 0&&(t[r]=n[r]);});},y=()=>{let{parseHTML:e}=N()("linkedom"),{window:t}=e(k);return t},E=()=>{let{JSDOM:e}=N()("jsdom"),{window:t}=new e(k);return t},te=()=>{let e=typeof process<"u"&&process.env?.KNIGHTED_JSX_NODE_SHIM?process.env.KNIGHTED_JSX_NODE_SHIM.toLowerCase():void 0;return e==="linkedom"||e==="jsdom"?e:"auto"},ne=()=>{let e=te();return e==="linkedom"?[y,E]:e==="jsdom"?[E,y]:[y,E]},re=()=>{let e=[];for(let n of ne())try{return n()}catch(r){e.push(r);}let t='Unable to bootstrap a DOM-like environment. Install "linkedom" or "jsdom" (both optional peer dependencies) or set KNIGHTED_JSX_NODE_SHIM to pick one explicitly.';throw new AggregateError(e,t)},T=false,A=()=>{if(Q()||T)return;let e=re();ee(e),T=true;};var oe=/<\s*$/,se=/<\/\s*$/,R="__KX_EXPR__",X=new RegExp(`${R}\\d+_\\d+__`,"g"),ie=0,v={lang:"jsx",sourceType:"module",range:true,preserveParens:true},j=e=>{let t=`[oxc-parser] ${e.message}`;if(e.labels?.length){let n=e.labels[0];n.message&&(t+=`
2
- ${n.message}`);}return e.codeframe&&(t+=`
3
- ${e.codeframe}`),t},P=e=>{for(let t of e.body)if(t.type==="ExpressionStatement"){let n=t.expression;if(n.type==="JSXElement"||n.type==="JSXFragment")return n}throw new Error("The jsx template must contain a single JSX element or fragment.")},x=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${x(e.object)}.${e.property.name}`;default:return ""}},h=(e,t)=>{if(!e||typeof e!="object")return;let n=e;typeof n.type=="string"&&(t(n),Object.values(n).forEach(r=>{if(r){if(Array.isArray(r)){r.forEach(s=>h(s,t));return}typeof r=="object"&&h(r,t);}}));},O=(e,t)=>{let n=e.replace(/\r/g,"").replace(/\n\s+/g," "),r=e.match(/^\s*/)?.[0]??"",s=e.match(/\s*$/)?.[0]??"",o=/\n/.test(r),i=/\n/.test(s),p=n;if(o&&(p=p.replace(/^\s+/,"")),i&&(p=p.replace(/\s+$/,"")),p.length===0||p.trim().length===0)return [];let a=[];X.lastIndex=0;let c=0,l;for(;l=X.exec(p);){let m=l.index,u=p.slice(c,m);u&&a.push(u);let f=l[0];t.has(f)?a.push(t.get(f)):a.push(f),c=m+f.length;}let d=p.slice(c);return d&&a.push(d),a},ae=(e,t)=>{let n=new Set;return h(e,r=>{r.type==="Identifier"&&t.placeholders.has(r.name)&&n.add(r.name);}),Array.from(n)},L=(e,t,n)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return n(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[r,s]=e.range,o=t.source.slice(r,s),i=ae(e,t);try{let p=new Function(...i,`"use strict"; return (${o});`),a=i.map(c=>t.placeholders.get(c));return p(...a)}catch(p){throw new Error(`Failed to evaluate expression ${o}: ${p.message}`)}},pe=e=>{let t=e.replace(/[^a-zA-Z0-9_$]/g,"");return t?/[A-Za-z_$]/.test(t[0])?t:`Component${t}`:"Component"},ce=(e,t,n)=>{let r=n.get(e);if(r)return r;let s=e.displayName||e.name||`Component${t.length}`,o=pe(s??""),i=o,p=1;for(;t.some(c=>c.name===i);)i=`${o}${p++}`;let a={name:i,value:e};return t.push(a),n.set(e,a),a},_=(e,t)=>{let n=e.raw??e,r=new Map,s=[],o=new Map,i=n[0]??"",p=ie++,a=0;for(let c=0;c<t.length;c++){let l=n[c]??"",d=n[c+1]??"",m=t[c],u=oe.test(l)||se.test(l);if(u&&typeof m=="function"){let U=ce(m,s,o);i+=U.name+d;continue}if(u&&typeof m=="string"){i+=m+d;continue}let f=`${R}${p}_${a++}__`;r.set(f,m),i+=f+d;}return {source:i,placeholders:r,bindings:s}};var I=e=>{let{getIdentifierName:t,evaluateExpressionWithNamespace:n}=e;return (r,s,o)=>{let i={};return r.forEach(p=>{if(p.type==="JSXSpreadAttribute"){let c=n(p.argument,s,o);c&&typeof c=="object"&&!Array.isArray(c)&&Object.assign(i,c);return}let a=t(p.name);if(!p.value){i[a]=true;return}if(p.value.type==="Literal"){i[a]=p.value.value;return}if(p.value.type==="JSXExpressionContainer"){if(p.value.expression.type==="JSXEmptyExpression")return;i[a]=n(p.value.expression,s,o);}}),i}};var M="Capture",D=e=>e.endsWith(M)?{eventName:e.slice(0,-M.length),capture:true}:{eventName:e,capture:false},F=e=>{if(!e.startsWith("on"))return null;if(e.startsWith("on:")){let r=e.slice(3);if(!r)return null;let s=D(r);return s.eventName?s:null}let t=e.slice(2);if(!t)return null;let n=D(t);return n.eventName?{eventName:n.eventName.toLowerCase(),capture:n.capture}:null},$=e=>!e||typeof e!="object"?false:"handleEvent"in e&&typeof e.handleEvent=="function",le=e=>{if(!e||typeof e!="object"||!("handler"in e))return false;let t=e.handler;return typeof t=="function"?true:$(t)},W=e=>{if(typeof e=="function"||$(e))return {listener:e};if(!le(e))return null;let t=e,n=t.options?{...t.options}:void 0,r=(s,o)=>{o!=null&&(n||(n={}),n[s]=o);};return r("capture",t.capture),r("once",t.once),r("passive",t.passive),r("signal",t.signal??void 0),{listener:t.handler,options:n}};var ge=()=>{if(typeof document>"u"||typeof document.createElement!="function")throw new Error("The jsx template tag requires a DOM-like environment (document missing).")},xe=e=>typeof Node>"u"?false:e instanceof Node||e instanceof DocumentFragment,ye=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",H=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",Ee={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},V=e=>{if(!(!e||e==="html"||e==="svg"))return Ee[e]},he=e=>e==="svg"?svg:html,S=(e,t,n)=>{let r=V(t.space),s=String(n);if(r){e.setAttributeNS(r,t.attribute,s);return}e.setAttribute(t.attribute,s);},B=(e,t)=>{let n=V(t.space);if(n){e.removeAttributeNS(n,t.attribute);return}e.removeAttribute(t.attribute);},b=(e,t)=>Array.isArray(e)?e.filter(Boolean).join(t):e,Se=(e,t,n)=>t==="svg"||!n.property||n.property.includes(":")?false:n.property in e,be=(e,t,n,r)=>{if(n==null)return;if(t==="dangerouslySetInnerHTML"&&typeof n=="object"&&n&&"__html"in n){e.innerHTML=String(n.__html??"");return}if(t==="ref"){if(typeof n=="function"){n(e);return}if(n&&typeof n=="object"){n.current=e;return}}if(t==="style"&&typeof n=="object"&&n!==null){let c=n,l=e.style;if(!l)return;let d=l;Object.entries(c).forEach(([m,u])=>{if(u!=null){if(m.startsWith("--")){l.setProperty(m,String(u));return}d[m]=u;}});return}let s=F(t);if(s){let c=W(n);if(c){let l=c.options?{...c.options}:void 0;s.capture&&(l?l.capture=true:l={capture:true}),e.addEventListener(s.eventName,c.listener,l);return}}let o=find(he(r),t),i=e,p=Se(e,r,o);if(o.mustUseProperty){let c=o.boolean?!!n:n;i[o.property]=c;return}if(o.boolean){let c=!!n;p&&(i[o.property]=c),c?S(e,o,""):B(e,o);return}let a=n;if(o.spaceSeparated?a=b(n," "):o.commaSeparated?a=b(n,","):o.commaOrSpaceSeparated&&(a=b(n," ")),o.booleanish&&typeof a=="boolean"&&(a=a?"true":"false"),o.overloadedBoolean){if(a===false){B(e,o);return}if(a===true){S(e,o,"");return}}if(p){i[o.property]=a;return}a!==false&&S(e,o,a);},g=(e,t)=>{if(t!=null&&typeof t!="boolean"){if(H(t))throw new Error("Async values are not supported inside jsx template results.");if(Array.isArray(t)){t.forEach(n=>g(e,n));return}if(ye(t)){for(let n of t)g(e,n);return}if(xe(t)){e.appendChild(t);return}e.appendChild(document.createTextNode(String(t)));}},w=(e,t,n)=>L(e,t,r=>C(r,t,n)),q=I({getIdentifierName:x,evaluateExpressionWithNamespace:w}),we=(e,t,n,r)=>{let s=q(t,n,r);Object.entries(s).forEach(([o,i])=>{if(o!=="key"){if(o==="children"){g(e,i);return}be(e,o,i,r);}});},J=(e,t,n)=>{let r=[];return e.forEach(s=>{switch(s.type){case "JSXText":{O(s.value,t.placeholders).forEach(i=>{r.push(i);});break}case "JSXExpressionContainer":{if(s.expression.type==="JSXEmptyExpression")break;r.push(w(s.expression,t,n));break}case "JSXSpreadChild":{let o=w(s.expression,t,n);o!=null&&r.push(o);break}case "JSXElement":case "JSXFragment":{r.push(C(s,t,n));break}}}),r},Je=(e,t,n,r)=>{let s=q(e.openingElement.attributes,t,r),o=J(e.children,t,r);o.length===1?s.children=o[0]:o.length>1&&(s.children=o);let i=n(s);if(H(i))throw new Error("Async jsx components are not supported.");return i},Ce=(e,t,n)=>{let r=e.openingElement,s=x(r.name),o=t.components.get(s);if(o)return Je(e,t,o,n);if(/[A-Z]/.test(s[0]??""))throw new Error(`Unknown component "${s}". Did you interpolate it with the template literal?`);let i=s==="svg"?"svg":n,p=s==="foreignObject"?null:i,a=i==="svg"?document.createElementNS("http://www.w3.org/2000/svg",s):document.createElement(s);return we(a,r.attributes,t,i),J(e.children,t,p).forEach(l=>g(a,l)),a},C=(e,t,n)=>{if(e.type==="JSXFragment"){let r=document.createDocumentFragment();return J(e.children,t,n).forEach(o=>g(r,o)),r}return Ce(e,t,n)},K=(e,...t)=>{ge();let n=_(e,t),r=parseSync("inline.jsx",n.source,v);if(r.errors.length>0)throw new Error(j(r.errors[0]));let s=P(r.program),o={source:n.source,placeholders:n.placeholders,components:new Map(n.bindings.map(i=>[i.name,i.value]))};return C(s,o,null)};A();var Me=K;
4
- export{Me as jsx};
1
+ import {createRequire}from'module';import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var te=createRequire(import.meta.url),R=()=>te,M="<!doctype html><html><body></body></html>",re=["window","self","document","HTMLElement","Element","Node","DocumentFragment","customElements","Text","Comment","MutationObserver","navigator"],oe=()=>typeof document<"u"&&typeof document.createElement=="function",se=e=>{let t=globalThis,n=e;re.forEach(r=>{t[r]===void 0&&n[r]!==void 0&&(t[r]=n[r]);});},S=()=>{let{parseHTML:e}=R()("linkedom"),{window:t}=e(M);return t},w=()=>{let{JSDOM:e}=R()("jsdom"),{window:t}=new e(M);return t},ae=()=>{let e=typeof process<"u"&&process.env?.KNIGHTED_JSX_NODE_SHIM?process.env.KNIGHTED_JSX_NODE_SHIM.toLowerCase():void 0;return e==="linkedom"||e==="jsdom"?e:"auto"},ie=()=>{let e=ae();return e==="linkedom"?[S,w]:e==="jsdom"?[w,S]:[S,w]},pe=()=>{let e=[];for(let n of ie())try{return n()}catch(r){e.push(r);}let t='Unable to bootstrap a DOM-like environment. Install "linkedom" or "jsdom" (both optional peer dependencies) or set KNIGHTED_JSX_NODE_SHIM to pick one explicitly.';throw new AggregateError(e,t)},X=false,D=()=>{if(oe()||X)return;let e=pe();se(e),X=true;};var ce="oxc-parser",le=e=>{let t=e.raw??e,n=t[0]??"",r=[];for(let o=0;o<t.length-1;o++){let s="${expr#"+o+"}",i=n.length;n+=s;let p=n.length;r.push({index:o,templateStart:i,templateEnd:p,label:s}),n+=t[o+1]??"";}return {source:n,spans:r}},me=(e,t)=>{let n=new Map;return t.forEach(r=>{n.set(r.index,r);}),e.expressionRanges.map(r=>{let o=n.get(r.index);if(!o)return null;let s=Math.max(0,r.sourceEnd-r.sourceStart),i=Math.max(0,o.templateEnd-o.templateStart);return {sourceStart:r.sourceStart,sourceEnd:r.sourceEnd,templateStart:o.templateStart,templateEnd:o.templateEnd,delta:i-s}}).filter(r=>!!r).sort((r,o)=>r.sourceStart-o.sourceStart)},ue=(e,t,n)=>{if(!Number.isFinite(e)||e<=0)return 0;let r=0;for(let s of t){if(e<s.sourceStart)break;if(e<s.sourceEnd){let i=Math.max(0,e-s.sourceStart),p=Math.max(0,s.templateEnd-s.templateStart);if(p===0)return s.templateStart;let a=Math.min(i,Math.max(0,p-1));return s.templateStart+a}r+=s.delta;}let o=e+r;return o<=0?0:o>=n?n:o},L=(e,t)=>{let n=Math.max(0,Math.min(t,e.length)),r=1,o=1;for(let s=0;s<n;s++){if(e.charCodeAt(s)===10){r++,o=1;continue}o++;}return {line:r,column:o}},de=e=>{let t=[],n=0;return e.forEach((r,o)=>{t.push(n),n+=r.length,o<e.length-1&&(n+=1);}),t},fe=(e,t,n,r,o,s,i)=>{let p=n+t.length,a=Math.max(r,n),c=Math.min(o,p);if(c>a){let l=Math.max(0,a-n),u=Math.max(1,c-a);return " ".repeat(l)+"^".repeat(u)}if(t.length===0&&e>=s&&e<=i)return "^";if(e===s){let l=Math.max(0,r-n);return " ".repeat(Math.min(l,t.length))+"^"}return ""},ge=(e,t,n,r,o)=>{if(!e.length)return "";let s=e.split(`
2
+ `),i=de(s),p=Math.max(1,r-1),a=Math.min(s.length,o+1),c=String(a).length,l=[];for(let u=p;u<=a;u++){let d=s[u-1]??"",m=String(u).padStart(c," ");l.push(`${m} | ${d}`);let f=fe(u,d,i[u-1]??0,t,n,r,o);f&&l.push(`${" ".repeat(c)} | ${f}`);}return l.join(`
3
+ `)},T=(e,t,n,r,o)=>{let s=ce,i=`[${s}] ${r.message}`,p=r.labels?.[0];if(!p)return i;let{source:a,spans:c}=le(t),l=me(n,c),u=h=>ue(typeof h=="number"?h:0,l,a.length),d=u(p.start),m=u(p.end);m<=d&&(m=Math.min(a.length,d+1));let f=L(a,d),x=L(a,Math.max(d,m-1)),y=ge(a,d,m,f.line,x.line),g=`[${s}] ${r.message}`;return g+=`
4
+ --> ${e} template:${f.line}:${f.column}`,p.message&&(g+=`
5
+ ${p.message}`),y&&(g+=`
6
+ ${y}`),r.helpMessage&&(g+=`
7
+ ${r.helpMessage}`),g};var xe=/<\s*$/,he=/<\/\s*$/,I="__KX_EXPR__",P=new RegExp(`${I}\\d+_\\d+__`,"g"),Ee=0;var j={lang:"jsx",sourceType:"module",range:true,preserveParens:true},O=e=>{for(let t of e.body)if(t.type==="ExpressionStatement"){let n=t.expression;if(n.type==="JSXElement"||n.type==="JSXFragment")return n}throw new Error("The jsx template must contain a single JSX element or fragment.")},b=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${b(e.object)}.${e.property.name}`;default:return ""}},J=(e,t)=>{if(!e||typeof e!="object")return;let n=e;typeof n.type=="string"&&(t(n),Object.values(n).forEach(r=>{if(r){if(Array.isArray(r)){r.forEach(o=>J(o,t));return}typeof r=="object"&&J(r,t);}}));},$=(e,t)=>{let n=e.replace(/\r/g,"").replace(/\n\s+/g," "),r=e.match(/^\s*/)?.[0]??"",o=e.match(/\s*$/)?.[0]??"",s=/\n/.test(r),i=/\n/.test(o),p=n;if(s&&(p=p.replace(/^\s+/,"")),i&&(p=p.replace(/\s+$/,"")),p.length===0||p.trim().length===0)return [];let a=[];P.lastIndex=0;let c=0,l;for(;l=P.exec(p);){let d=l.index,m=p.slice(c,d);m&&a.push(m);let f=l[0];t.has(f)?a.push(t.get(f)):a.push(f),c=d+f.length;}let u=p.slice(c);return u&&a.push(u),a},ye=(e,t)=>{let n=new Set;return J(e,r=>{r.type==="Identifier"&&t.placeholders.has(r.name)&&n.add(r.name);}),Array.from(n)},_=(e,t,n)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return n(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[r,o]=e.range,s=t.source.slice(r,o),i=ye(e,t);try{let p=new Function(...i,`"use strict"; return (${s});`),a=i.map(c=>t.placeholders.get(c));return p(...a)}catch(p){throw new Error(`Failed to evaluate expression ${s}: ${p.message}`)}},be=e=>{let t=e.replace(/[^a-zA-Z0-9_$]/g,"");return t?/[A-Za-z_$]/.test(t[0])?t:`Component${t}`:"Component"},Se=(e,t,n)=>{let r=n.get(e);if(r)return r;let o=e.displayName||e.name||`Component${t.length}`,s=be(o??""),i=s,p=1;for(;t.some(c=>c.name===i);)i=`${s}${p++}`;let a={name:i,value:e};return t.push(a),n.set(e,a),a},F=(e,t)=>{let n=e.raw??e,r=new Map,o=[],s=new Map,i=n[0]??"",p=Ee++,a=0,c=[];for(let l=0;l<t.length;l++){let u=n[l]??"",d=n[l+1]??"",m=t[l],f=xe.test(u)||he.test(u),x;if(f&&typeof m=="function")x=Se(m,o,s).name;else if(f&&typeof m=="string")x=m;else {let h=`${I}${p}_${a++}__`;r.set(h,m),x=h;}let y=i.length;i+=x;let g=i.length;c.push({index:l,sourceStart:y,sourceEnd:g}),i+=d;}return {source:i,placeholders:r,bindings:o,diagnostics:{expressionRanges:c}}};var W=e=>{let{getIdentifierName:t,evaluateExpressionWithNamespace:n}=e;return (r,o,s)=>{let i={},p=(a,c)=>{i[a]=c;};return r.forEach(a=>{if(a.type==="JSXSpreadAttribute"){let l=n(a.argument,o,s);l&&typeof l=="object"&&!Array.isArray(l)&&Object.assign(i,l);return}let c=t(a.name);if(!a.value){p(c,true);return}if(a.value.type==="Literal"){p(c,a.value.value);return}if(a.value.type==="JSXExpressionContainer"){if(a.value.expression.type==="JSXEmptyExpression")return;p(c,n(a.value.expression,o,s));}}),i}};var B="Capture",V=e=>e.endsWith(B)?{eventName:e.slice(0,-B.length),capture:true}:{eventName:e,capture:false},U=e=>{if(!e.startsWith("on"))return null;if(e.startsWith("on:")){let r=e.slice(3);if(!r)return null;let o=V(r);return o.eventName?o:null}let t=e.slice(2);if(!t)return null;let n=V(t);return n.eventName?{eventName:n.eventName.toLowerCase(),capture:n.capture}:null},q=e=>!e||typeof e!="object"?false:"handleEvent"in e&&typeof e.handleEvent=="function",Ce=e=>{if(!e||typeof e!="object"||!("handler"in e))return false;let t=e.handler;return typeof t=="function"?true:q(t)},K=(e,t)=>{if(typeof t=="function"||q(t))return {listener:t};if(!Ce(t))return null;let n=t,r=n.options?{...n.options}:void 0,o=(s,i)=>{i!=null&&(r||(r={}),r[s]=i);};return o("capture",n.capture),o("once",n.once),o("passive",n.passive),o("signal",n.signal??void 0),{listener:n.handler,options:r}};var Re=()=>{if(typeof document>"u"||typeof document.createElement!="function")throw new Error("The jsx template tag requires a DOM-like environment (document missing).")},Me=e=>typeof Node>"u"?false:e instanceof Node||e instanceof DocumentFragment,De=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",G=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",Le={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},Z=e=>{if(!(!e||e==="html"||e==="svg"))return Le[e]},Pe=e=>e==="svg"?svg:html,C=(e,t,n)=>{let r=Z(t.space),o=String(n);if(r){e.setAttributeNS(r,t.attribute,o);return}e.setAttribute(t.attribute,o);},z=(e,t)=>{let n=Z(t.space);if(n){e.removeAttributeNS(n,t.attribute);return}e.removeAttribute(t.attribute);},k=(e,t)=>Array.isArray(e)?e.filter(Boolean).join(t):e,Ie=(e,t,n)=>t==="svg"||!n.property||n.property.includes(":")?false:n.property in e,je=(e,t,n,r)=>{if(n==null)return;if(t==="dangerouslySetInnerHTML"&&typeof n=="object"&&n&&"__html"in n){e.innerHTML=String(n.__html??"");return}if(t==="ref"){if(typeof n=="function"){n(e);return}if(n&&typeof n=="object"){n.current=e;return}}if(t==="style"&&typeof n=="object"&&n!==null){let c=n,l=e.style;if(!l)return;let u=l;Object.entries(c).forEach(([d,m])=>{if(m!=null){if(d.startsWith("--")){l.setProperty(d,String(m));return}u[d]=m;}});return}let o=U(t);if(o){let c=K(t,n);if(c){let l=c.options?{...c.options}:void 0;o.capture&&(l?l.capture=true:l={capture:true}),e.addEventListener(o.eventName,c.listener,l);return}}let s=find(Pe(r),t),i=e,p=Ie(e,r,s);if(s.mustUseProperty){let c=s.boolean?!!n:n;i[s.property]=c;return}if(s.boolean){let c=!!n;p&&(i[s.property]=c),c?C(e,s,""):z(e,s);return}let a=n;if(s.spaceSeparated?a=k(n," "):s.commaSeparated?a=k(n,","):s.commaOrSpaceSeparated&&(a=k(n," ")),s.booleanish&&typeof a=="boolean"&&(a=a?"true":"false"),s.overloadedBoolean){if(a===false){z(e,s);return}if(a===true){C(e,s,"");return}}if(p){i[s.property]=a;return}a!==false&&C(e,s,a);},E=(e,t)=>{if(t!=null&&typeof t!="boolean"){if(G(t))throw new Error("Async values are not supported inside jsx template results.");if(Array.isArray(t)){t.forEach(n=>E(e,n));return}if(De(t)){for(let n of t)E(e,n);return}if(Me(t)){e.appendChild(t);return}e.appendChild(document.createTextNode(String(t)));}},N=(e,t,n)=>_(e,t,r=>v(r,t,n)),Y=W({getIdentifierName:b,evaluateExpressionWithNamespace:N}),Oe=(e,t,n,r)=>{let o=Y(t,n,r);Object.entries(o).forEach(([s,i])=>{if(s!=="key"){if(s==="children"){E(e,i);return}je(e,s,i,r);}});},A=(e,t,n)=>{let r=[];return e.forEach(o=>{switch(o.type){case "JSXText":{$(o.value,t.placeholders).forEach(i=>{r.push(i);});break}case "JSXExpressionContainer":{if(o.expression.type==="JSXEmptyExpression")break;r.push(N(o.expression,t,n));break}case "JSXSpreadChild":{let s=N(o.expression,t,n);s!=null&&r.push(s);break}case "JSXElement":case "JSXFragment":{r.push(v(o,t,n));break}}}),r},$e=(e,t,n,r)=>{let o=Y(e.openingElement.attributes,t,r),s=A(e.children,t,r);s.length===1?o.children=s[0]:s.length>1&&(o.children=s);let i=n(o);if(G(i))throw new Error("Async jsx components are not supported.");return i},_e=(e,t,n)=>{let r=e.openingElement,o=b(r.name),s=t.components.get(o);if(s)return $e(e,t,s,n);if(/[A-Z]/.test(o[0]??""))throw new Error(`Unknown component "${o}". Did you interpolate it with the template literal?`);let i=o==="svg"?"svg":n,p=o==="foreignObject"?null:i,a=i==="svg"?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o);return Oe(a,r.attributes,t,i),A(e.children,t,p).forEach(l=>E(a,l)),a},v=(e,t,n)=>{if(e.type==="JSXFragment"){let r=document.createDocumentFragment();return A(e.children,t,n).forEach(s=>E(r,s)),r}return _e(e,t,n)},Q=(e,...t)=>{Re();let n=F(e,t),r=parseSync("inline.jsx",n.source,j);if(r.errors.length>0)throw new Error(T("jsx",e,n.diagnostics,r.errors[0]));let o=O(r.program),s={source:n.source,placeholders:n.placeholders,components:new Map(n.bindings.map(i=>[i.name,i.value]))};return v(o,s,null)};D();var rt=Q;
8
+ export{rt as jsx};
@@ -1,3 +1,7 @@
1
- import {parseSync}from'oxc-parser';import {createElement,Fragment}from'react';var F=/<\s*$/,P=/<\/\s*$/,h="__KX_EXPR__",C=new RegExp(`${h}\\d+_\\d+__`,"g"),_=0,S={lang:"jsx",sourceType:"module",range:true,preserveParens:true},T=e=>{let n=`[oxc-parser] ${e.message}`;if(e.labels?.length){let t=e.labels[0];t.message&&(n+=`
2
- ${t.message}`);}return e.codeframe&&(n+=`
3
- ${e.codeframe}`),n},w=e=>{for(let n of e.body)if(n.type==="ExpressionStatement"){let t=n.expression;if(t.type==="JSXElement"||t.type==="JSXFragment")return t}throw new Error("The jsx template must contain a single JSX element or fragment.")},f=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${f(e.object)}.${e.property.name}`;default:return ""}},E=(e,n)=>{if(!e||typeof e!="object")return;let t=e;typeof t.type=="string"&&(n(t),Object.values(t).forEach(r=>{if(r){if(Array.isArray(r)){r.forEach(o=>E(o,n));return}typeof r=="object"&&E(r,n);}}));},X=(e,n)=>{let t=e.replace(/\r/g,"").replace(/\n\s+/g," "),r=e.match(/^\s*/)?.[0]??"",o=e.match(/\s*$/)?.[0]??"",s=/\n/.test(r),a=/\n/.test(o),p=t;if(s&&(p=p.replace(/^\s+/,"")),a&&(p=p.replace(/\s+$/,"")),p.length===0||p.trim().length===0)return [];let c=[];C.lastIndex=0;let i=0,u;for(;u=C.exec(p);){let m=u.index,d=p.slice(i,m);d&&c.push(d);let l=u[0];n.has(l)?c.push(n.get(l)):c.push(l),i=m+l.length;}let g=p.slice(i);return g&&c.push(g),c},I=(e,n)=>{let t=new Set;return E(e,r=>{r.type==="Identifier"&&n.placeholders.has(r.name)&&t.add(r.name);}),Array.from(t)},R=(e,n,t)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return t(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[r,o]=e.range,s=n.source.slice(r,o),a=I(e,n);try{let p=new Function(...a,`"use strict"; return (${s});`),c=a.map(i=>n.placeholders.get(i));return p(...c)}catch(p){throw new Error(`Failed to evaluate expression ${s}: ${p.message}`)}},O=e=>{let n=e.replace(/[^a-zA-Z0-9_$]/g,"");return n?/[A-Za-z_$]/.test(n[0])?n:`Component${n}`:"Component"},j=(e,n,t)=>{let r=t.get(e);if(r)return r;let o=e.displayName||e.name||`Component${n.length}`,s=O(o??""),a=s,p=1;for(;n.some(i=>i.name===a);)a=`${s}${p++}`;let c={name:a,value:e};return n.push(c),t.set(e,c),c},k=(e,n)=>{let t=e.raw??e,r=new Map,o=[],s=new Map,a=t[0]??"",p=_++,c=0;for(let i=0;i<n.length;i++){let u=t[i]??"",g=t[i+1]??"",m=n[i],d=F.test(u)||P.test(u);if(d&&typeof m=="function"){let $=j(m,o,s);a+=$.name+g;continue}if(d&&typeof m=="string"){a+=m+g;continue}let l=`${h}${p}_${c++}__`;r.set(l,m),a+=l+g;}return {source:a,placeholders:r,bindings:o}};var z=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",L=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",x=(e,n)=>{if(n!=null&&typeof n!="boolean"){if(L(n))throw new Error("Async values are not supported inside reactJsx template results.");if(Array.isArray(n)){n.forEach(t=>x(e,t));return}if(z(n)){for(let t of n)x(e,t);return}e.push(n);}},y=(e,n)=>R(e,n,t=>J(t,n)),v=(e,n)=>{let t={};return e.forEach(r=>{if(r.type==="JSXSpreadAttribute"){let s=y(r.argument,n);s&&typeof s=="object"&&!Array.isArray(s)&&Object.assign(t,s);return}let o=f(r.name);if(!r.value){t[o]=true;return}if(r.value.type==="Literal"){t[o]=r.value.value;return}if(r.value.type==="JSXExpressionContainer"){if(r.value.expression.type==="JSXEmptyExpression")return;t[o]=y(r.value.expression,n);}}),t},N=(e,n)=>{let t=[];return e.forEach(r=>{switch(r.type){case "JSXText":{X(r.value,n.placeholders).forEach(s=>x(t,s));break}case "JSXExpressionContainer":{if(r.expression.type==="JSXEmptyExpression")break;x(t,y(r.expression,n));break}case "JSXSpreadChild":{let o=y(r.expression,n);o!=null&&x(t,o);break}case "JSXElement":case "JSXFragment":{t.push(J(r,n));break}}}),t},A=(e,n,t)=>createElement(e,n,...t),V=(e,n)=>{let t=e.openingElement,r=f(t.name),o=n.components.get(r),s=v(t.attributes,n),a=N(e.children,n);if(o)return A(o,s,a);if(/[A-Z]/.test(r[0]??""))throw new Error(`Unknown component "${r}". Did you interpolate it with the template literal?`);return A(r,s,a)},J=(e,n)=>{if(e.type==="JSXFragment"){let t=N(e.children,n);return createElement(Fragment,null,...t)}return V(e,n)},Z=(e,...n)=>{let t=k(e,n),r=parseSync("inline.jsx",t.source,S);if(r.errors.length>0)throw new Error(T(r.errors[0]));let o=w(r.program),s={source:t.source,placeholders:t.placeholders,components:new Map(t.bindings.map(a=>[a.name,a.value]))};return J(o,s)};export{Z as reactJsx};
1
+ import {parseSync}from'oxc-parser';import {createElement,Fragment}from'react';var _="oxc-parser",O=e=>{let n=e.raw??e,r=n[0]??"",t=[];for(let o=0;o<n.length-1;o++){let s="${expr#"+o+"}",a=r.length;r+=s;let p=r.length;t.push({index:o,templateStart:a,templateEnd:p,label:s}),r+=n[o+1]??"";}return {source:r,spans:t}},j=(e,n)=>{let r=new Map;return n.forEach(t=>{r.set(t.index,t);}),e.expressionRanges.map(t=>{let o=r.get(t.index);if(!o)return null;let s=Math.max(0,t.sourceEnd-t.sourceStart),a=Math.max(0,o.templateEnd-o.templateStart);return {sourceStart:t.sourceStart,sourceEnd:t.sourceEnd,templateStart:o.templateStart,templateEnd:o.templateEnd,delta:a-s}}).filter(t=>!!t).sort((t,o)=>t.sourceStart-o.sourceStart)},L=(e,n,r)=>{if(!Number.isFinite(e)||e<=0)return 0;let t=0;for(let s of n){if(e<s.sourceStart)break;if(e<s.sourceEnd){let a=Math.max(0,e-s.sourceStart),p=Math.max(0,s.templateEnd-s.templateStart);if(p===0)return s.templateStart;let i=Math.min(a,Math.max(0,p-1));return s.templateStart+i}t+=s.delta;}let o=e+t;return o<=0?0:o>=r?r:o},w=(e,n)=>{let r=Math.max(0,Math.min(n,e.length)),t=1,o=1;for(let s=0;s<r;s++){if(e.charCodeAt(s)===10){t++,o=1;continue}o++;}return {line:t,column:o}},D=e=>{let n=[],r=0;return e.forEach((t,o)=>{n.push(r),r+=t.length,o<e.length-1&&(r+=1);}),n},B=(e,n,r,t,o,s,a)=>{let p=r+n.length,i=Math.max(t,r),c=Math.min(o,p);if(c>i){let m=Math.max(0,i-r),l=Math.max(1,c-i);return " ".repeat(m)+"^".repeat(l)}if(n.length===0&&e>=s&&e<=a)return "^";if(e===s){let m=Math.max(0,t-r);return " ".repeat(Math.min(m,n.length))+"^"}return ""},v=(e,n,r,t,o)=>{if(!e.length)return "";let s=e.split(`
2
+ `),a=D(s),p=Math.max(1,t-1),i=Math.min(s.length,o+1),c=String(i).length,m=[];for(let l=p;l<=i;l++){let d=s[l-1]??"",u=String(l).padStart(c," ");m.push(`${u} | ${d}`);let g=B(l,d,a[l-1]??0,n,r,t,o);g&&m.push(`${" ".repeat(c)} | ${g}`);}return m.join(`
3
+ `)},b=(e,n,r,t,o)=>{let s=_,a=`[${s}] ${t.message}`,p=t.labels?.[0];if(!p)return a;let{source:i,spans:c}=O(n),m=j(r,c),l=h=>L(typeof h=="number"?h:0,m,i.length),d=l(p.start),u=l(p.end);u<=d&&(u=Math.min(i.length,d+1));let g=w(i,d),f=w(i,Math.max(d,u-1)),E=v(i,d,u,g.line,f.line),x=`[${s}] ${t.message}`;return x+=`
4
+ --> ${e} template:${g.line}:${g.column}`,p.message&&(x+=`
5
+ ${p.message}`),E&&(x+=`
6
+ ${E}`),t.helpMessage&&(x+=`
7
+ ${t.helpMessage}`),x};var z=/<\s*$/,W=/<\/\s*$/,X="__KX_EXPR__",R=new RegExp(`${X}\\d+_\\d+__`,"g"),U=0;var $={lang:"jsx",sourceType:"module",range:true,preserveParens:true},A=e=>{for(let n of e.body)if(n.type==="ExpressionStatement"){let r=n.expression;if(r.type==="JSXElement"||r.type==="JSXFragment")return r}throw new Error("The jsx template must contain a single JSX element or fragment.")},S=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${S(e.object)}.${e.property.name}`;default:return ""}},C=(e,n)=>{if(!e||typeof e!="object")return;let r=e;typeof r.type=="string"&&(n(r),Object.values(r).forEach(t=>{if(t){if(Array.isArray(t)){t.forEach(o=>C(o,n));return}typeof t=="object"&&C(t,n);}}));},k=(e,n)=>{let r=e.replace(/\r/g,"").replace(/\n\s+/g," "),t=e.match(/^\s*/)?.[0]??"",o=e.match(/\s*$/)?.[0]??"",s=/\n/.test(t),a=/\n/.test(o),p=r;if(s&&(p=p.replace(/^\s+/,"")),a&&(p=p.replace(/\s+$/,"")),p.length===0||p.trim().length===0)return [];let i=[];R.lastIndex=0;let c=0,m;for(;m=R.exec(p);){let d=m.index,u=p.slice(c,d);u&&i.push(u);let g=m[0];n.has(g)?i.push(n.get(g)):i.push(g),c=d+g.length;}let l=p.slice(c);return l&&i.push(l),i},V=(e,n)=>{let r=new Set;return C(e,t=>{t.type==="Identifier"&&n.placeholders.has(t.name)&&r.add(t.name);}),Array.from(r)},M=(e,n,r)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return r(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[t,o]=e.range,s=n.source.slice(t,o),a=V(e,n);try{let p=new Function(...a,`"use strict"; return (${s});`),i=a.map(c=>n.placeholders.get(c));return p(...i)}catch(p){throw new Error(`Failed to evaluate expression ${s}: ${p.message}`)}},Z=e=>{let n=e.replace(/[^a-zA-Z0-9_$]/g,"");return n?/[A-Za-z_$]/.test(n[0])?n:`Component${n}`:"Component"},G=(e,n,r)=>{let t=r.get(e);if(t)return t;let o=e.displayName||e.name||`Component${n.length}`,s=Z(o??""),a=s,p=1;for(;n.some(c=>c.name===a);)a=`${s}${p++}`;let i={name:a,value:e};return n.push(i),r.set(e,i),i},N=(e,n)=>{let r=e.raw??e,t=new Map,o=[],s=new Map,a=r[0]??"",p=U++,i=0,c=[];for(let m=0;m<n.length;m++){let l=r[m]??"",d=r[m+1]??"",u=n[m],g=z.test(l)||W.test(l),f;if(g&&typeof u=="function")f=G(u,o,s).name;else if(g&&typeof u=="string")f=u;else {let h=`${X}${p}_${i++}__`;t.set(h,u),f=h;}let E=a.length;a+=f;let x=a.length;c.push({index:m,sourceStart:E,sourceEnd:x}),a+=d;}return {source:a,placeholders:t,bindings:o,diagnostics:{expressionRanges:c}}};var q=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",Q=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",y=(e,n)=>{if(n!=null&&typeof n!="boolean"){if(Q(n))throw new Error("Async values are not supported inside reactJsx template results.");if(Array.isArray(n)){n.forEach(r=>y(e,r));return}if(q(n)){for(let r of n)y(e,r);return}e.push(n);}},T=(e,n)=>M(e,n,r=>J(r,n)),Y=(e,n)=>{let r={};return e.forEach(t=>{if(t.type==="JSXSpreadAttribute"){let s=T(t.argument,n);s&&typeof s=="object"&&!Array.isArray(s)&&Object.assign(r,s);return}let o=S(t.name);if(!t.value){r[o]=true;return}if(t.value.type==="Literal"){r[o]=t.value.value;return}if(t.value.type==="JSXExpressionContainer"){if(t.value.expression.type==="JSXEmptyExpression")return;r[o]=T(t.value.expression,n);}}),r},I=(e,n)=>{let r=[];return e.forEach(t=>{switch(t.type){case "JSXText":{k(t.value,n.placeholders).forEach(s=>y(r,s));break}case "JSXExpressionContainer":{if(t.expression.type==="JSXEmptyExpression")break;y(r,T(t.expression,n));break}case "JSXSpreadChild":{let o=T(t.expression,n);o!=null&&y(r,o);break}case "JSXElement":case "JSXFragment":{r.push(J(t,n));break}}}),r},F=(e,n,r)=>createElement(e,n,...r),ee=(e,n)=>{let r=e.openingElement,t=S(r.name),o=n.components.get(t),s=Y(r.attributes,n),a=I(e.children,n);if(o)return F(o,s,a);if(/[A-Z]/.test(t[0]??""))throw new Error(`Unknown component "${t}". Did you interpolate it with the template literal?`);return F(t,s,a)},J=(e,n)=>{if(e.type==="JSXFragment"){let r=I(e.children,n);return createElement(Fragment,null,...r)}return ee(e,n)},te=(e,...n)=>{let r=N(e,n),t=parseSync("inline.jsx",r.source,$);if(t.errors.length>0)throw new Error(b("reactJsx",e,r.diagnostics,t.errors[0]));let o=A(t.program),s={source:r.source,placeholders:r.placeholders,components:new Map(r.bindings.map(a=>[a.name,a.value]))};return J(o,s)};export{te as reactJsx};
@@ -1,3 +1,7 @@
1
- import {parseSync}from'oxc-parser';import {createElement,Fragment}from'react';var F=/<\s*$/,P=/<\/\s*$/,h="__KX_EXPR__",C=new RegExp(`${h}\\d+_\\d+__`,"g"),_=0,S={lang:"jsx",sourceType:"module",range:true,preserveParens:true},T=e=>{let n=`[oxc-parser] ${e.message}`;if(e.labels?.length){let t=e.labels[0];t.message&&(n+=`
2
- ${t.message}`);}return e.codeframe&&(n+=`
3
- ${e.codeframe}`),n},w=e=>{for(let n of e.body)if(n.type==="ExpressionStatement"){let t=n.expression;if(t.type==="JSXElement"||t.type==="JSXFragment")return t}throw new Error("The jsx template must contain a single JSX element or fragment.")},f=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${f(e.object)}.${e.property.name}`;default:return ""}},E=(e,n)=>{if(!e||typeof e!="object")return;let t=e;typeof t.type=="string"&&(n(t),Object.values(t).forEach(r=>{if(r){if(Array.isArray(r)){r.forEach(o=>E(o,n));return}typeof r=="object"&&E(r,n);}}));},X=(e,n)=>{let t=e.replace(/\r/g,"").replace(/\n\s+/g," "),r=e.match(/^\s*/)?.[0]??"",o=e.match(/\s*$/)?.[0]??"",s=/\n/.test(r),a=/\n/.test(o),p=t;if(s&&(p=p.replace(/^\s+/,"")),a&&(p=p.replace(/\s+$/,"")),p.length===0||p.trim().length===0)return [];let c=[];C.lastIndex=0;let i=0,u;for(;u=C.exec(p);){let m=u.index,d=p.slice(i,m);d&&c.push(d);let l=u[0];n.has(l)?c.push(n.get(l)):c.push(l),i=m+l.length;}let g=p.slice(i);return g&&c.push(g),c},I=(e,n)=>{let t=new Set;return E(e,r=>{r.type==="Identifier"&&n.placeholders.has(r.name)&&t.add(r.name);}),Array.from(t)},R=(e,n,t)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return t(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[r,o]=e.range,s=n.source.slice(r,o),a=I(e,n);try{let p=new Function(...a,`"use strict"; return (${s});`),c=a.map(i=>n.placeholders.get(i));return p(...c)}catch(p){throw new Error(`Failed to evaluate expression ${s}: ${p.message}`)}},O=e=>{let n=e.replace(/[^a-zA-Z0-9_$]/g,"");return n?/[A-Za-z_$]/.test(n[0])?n:`Component${n}`:"Component"},j=(e,n,t)=>{let r=t.get(e);if(r)return r;let o=e.displayName||e.name||`Component${n.length}`,s=O(o??""),a=s,p=1;for(;n.some(i=>i.name===a);)a=`${s}${p++}`;let c={name:a,value:e};return n.push(c),t.set(e,c),c},k=(e,n)=>{let t=e.raw??e,r=new Map,o=[],s=new Map,a=t[0]??"",p=_++,c=0;for(let i=0;i<n.length;i++){let u=t[i]??"",g=t[i+1]??"",m=n[i],d=F.test(u)||P.test(u);if(d&&typeof m=="function"){let $=j(m,o,s);a+=$.name+g;continue}if(d&&typeof m=="string"){a+=m+g;continue}let l=`${h}${p}_${c++}__`;r.set(l,m),a+=l+g;}return {source:a,placeholders:r,bindings:o}};var z=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",L=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",x=(e,n)=>{if(n!=null&&typeof n!="boolean"){if(L(n))throw new Error("Async values are not supported inside reactJsx template results.");if(Array.isArray(n)){n.forEach(t=>x(e,t));return}if(z(n)){for(let t of n)x(e,t);return}e.push(n);}},y=(e,n)=>R(e,n,t=>J(t,n)),v=(e,n)=>{let t={};return e.forEach(r=>{if(r.type==="JSXSpreadAttribute"){let s=y(r.argument,n);s&&typeof s=="object"&&!Array.isArray(s)&&Object.assign(t,s);return}let o=f(r.name);if(!r.value){t[o]=true;return}if(r.value.type==="Literal"){t[o]=r.value.value;return}if(r.value.type==="JSXExpressionContainer"){if(r.value.expression.type==="JSXEmptyExpression")return;t[o]=y(r.value.expression,n);}}),t},N=(e,n)=>{let t=[];return e.forEach(r=>{switch(r.type){case "JSXText":{X(r.value,n.placeholders).forEach(s=>x(t,s));break}case "JSXExpressionContainer":{if(r.expression.type==="JSXEmptyExpression")break;x(t,y(r.expression,n));break}case "JSXSpreadChild":{let o=y(r.expression,n);o!=null&&x(t,o);break}case "JSXElement":case "JSXFragment":{t.push(J(r,n));break}}}),t},A=(e,n,t)=>createElement(e,n,...t),V=(e,n)=>{let t=e.openingElement,r=f(t.name),o=n.components.get(r),s=v(t.attributes,n),a=N(e.children,n);if(o)return A(o,s,a);if(/[A-Z]/.test(r[0]??""))throw new Error(`Unknown component "${r}". Did you interpolate it with the template literal?`);return A(r,s,a)},J=(e,n)=>{if(e.type==="JSXFragment"){let t=N(e.children,n);return createElement(Fragment,null,...t)}return V(e,n)},Z=(e,...n)=>{let t=k(e,n),r=parseSync("inline.jsx",t.source,S);if(r.errors.length>0)throw new Error(T(r.errors[0]));let o=w(r.program),s={source:t.source,placeholders:t.placeholders,components:new Map(t.bindings.map(a=>[a.name,a.value]))};return J(o,s)};export{Z as reactJsx};
1
+ import {parseSync}from'oxc-parser';import {createElement,Fragment}from'react';var _="oxc-parser",O=e=>{let n=e.raw??e,r=n[0]??"",t=[];for(let o=0;o<n.length-1;o++){let s="${expr#"+o+"}",a=r.length;r+=s;let p=r.length;t.push({index:o,templateStart:a,templateEnd:p,label:s}),r+=n[o+1]??"";}return {source:r,spans:t}},j=(e,n)=>{let r=new Map;return n.forEach(t=>{r.set(t.index,t);}),e.expressionRanges.map(t=>{let o=r.get(t.index);if(!o)return null;let s=Math.max(0,t.sourceEnd-t.sourceStart),a=Math.max(0,o.templateEnd-o.templateStart);return {sourceStart:t.sourceStart,sourceEnd:t.sourceEnd,templateStart:o.templateStart,templateEnd:o.templateEnd,delta:a-s}}).filter(t=>!!t).sort((t,o)=>t.sourceStart-o.sourceStart)},L=(e,n,r)=>{if(!Number.isFinite(e)||e<=0)return 0;let t=0;for(let s of n){if(e<s.sourceStart)break;if(e<s.sourceEnd){let a=Math.max(0,e-s.sourceStart),p=Math.max(0,s.templateEnd-s.templateStart);if(p===0)return s.templateStart;let i=Math.min(a,Math.max(0,p-1));return s.templateStart+i}t+=s.delta;}let o=e+t;return o<=0?0:o>=r?r:o},w=(e,n)=>{let r=Math.max(0,Math.min(n,e.length)),t=1,o=1;for(let s=0;s<r;s++){if(e.charCodeAt(s)===10){t++,o=1;continue}o++;}return {line:t,column:o}},D=e=>{let n=[],r=0;return e.forEach((t,o)=>{n.push(r),r+=t.length,o<e.length-1&&(r+=1);}),n},B=(e,n,r,t,o,s,a)=>{let p=r+n.length,i=Math.max(t,r),c=Math.min(o,p);if(c>i){let m=Math.max(0,i-r),l=Math.max(1,c-i);return " ".repeat(m)+"^".repeat(l)}if(n.length===0&&e>=s&&e<=a)return "^";if(e===s){let m=Math.max(0,t-r);return " ".repeat(Math.min(m,n.length))+"^"}return ""},v=(e,n,r,t,o)=>{if(!e.length)return "";let s=e.split(`
2
+ `),a=D(s),p=Math.max(1,t-1),i=Math.min(s.length,o+1),c=String(i).length,m=[];for(let l=p;l<=i;l++){let d=s[l-1]??"",u=String(l).padStart(c," ");m.push(`${u} | ${d}`);let g=B(l,d,a[l-1]??0,n,r,t,o);g&&m.push(`${" ".repeat(c)} | ${g}`);}return m.join(`
3
+ `)},b=(e,n,r,t,o)=>{let s=_,a=`[${s}] ${t.message}`,p=t.labels?.[0];if(!p)return a;let{source:i,spans:c}=O(n),m=j(r,c),l=h=>L(typeof h=="number"?h:0,m,i.length),d=l(p.start),u=l(p.end);u<=d&&(u=Math.min(i.length,d+1));let g=w(i,d),f=w(i,Math.max(d,u-1)),E=v(i,d,u,g.line,f.line),x=`[${s}] ${t.message}`;return x+=`
4
+ --> ${e} template:${g.line}:${g.column}`,p.message&&(x+=`
5
+ ${p.message}`),E&&(x+=`
6
+ ${E}`),t.helpMessage&&(x+=`
7
+ ${t.helpMessage}`),x};var z=/<\s*$/,W=/<\/\s*$/,X="__KX_EXPR__",R=new RegExp(`${X}\\d+_\\d+__`,"g"),U=0;var $={lang:"jsx",sourceType:"module",range:true,preserveParens:true},A=e=>{for(let n of e.body)if(n.type==="ExpressionStatement"){let r=n.expression;if(r.type==="JSXElement"||r.type==="JSXFragment")return r}throw new Error("The jsx template must contain a single JSX element or fragment.")},S=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${S(e.object)}.${e.property.name}`;default:return ""}},C=(e,n)=>{if(!e||typeof e!="object")return;let r=e;typeof r.type=="string"&&(n(r),Object.values(r).forEach(t=>{if(t){if(Array.isArray(t)){t.forEach(o=>C(o,n));return}typeof t=="object"&&C(t,n);}}));},k=(e,n)=>{let r=e.replace(/\r/g,"").replace(/\n\s+/g," "),t=e.match(/^\s*/)?.[0]??"",o=e.match(/\s*$/)?.[0]??"",s=/\n/.test(t),a=/\n/.test(o),p=r;if(s&&(p=p.replace(/^\s+/,"")),a&&(p=p.replace(/\s+$/,"")),p.length===0||p.trim().length===0)return [];let i=[];R.lastIndex=0;let c=0,m;for(;m=R.exec(p);){let d=m.index,u=p.slice(c,d);u&&i.push(u);let g=m[0];n.has(g)?i.push(n.get(g)):i.push(g),c=d+g.length;}let l=p.slice(c);return l&&i.push(l),i},V=(e,n)=>{let r=new Set;return C(e,t=>{t.type==="Identifier"&&n.placeholders.has(t.name)&&r.add(t.name);}),Array.from(r)},M=(e,n,r)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return r(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[t,o]=e.range,s=n.source.slice(t,o),a=V(e,n);try{let p=new Function(...a,`"use strict"; return (${s});`),i=a.map(c=>n.placeholders.get(c));return p(...i)}catch(p){throw new Error(`Failed to evaluate expression ${s}: ${p.message}`)}},Z=e=>{let n=e.replace(/[^a-zA-Z0-9_$]/g,"");return n?/[A-Za-z_$]/.test(n[0])?n:`Component${n}`:"Component"},G=(e,n,r)=>{let t=r.get(e);if(t)return t;let o=e.displayName||e.name||`Component${n.length}`,s=Z(o??""),a=s,p=1;for(;n.some(c=>c.name===a);)a=`${s}${p++}`;let i={name:a,value:e};return n.push(i),r.set(e,i),i},N=(e,n)=>{let r=e.raw??e,t=new Map,o=[],s=new Map,a=r[0]??"",p=U++,i=0,c=[];for(let m=0;m<n.length;m++){let l=r[m]??"",d=r[m+1]??"",u=n[m],g=z.test(l)||W.test(l),f;if(g&&typeof u=="function")f=G(u,o,s).name;else if(g&&typeof u=="string")f=u;else {let h=`${X}${p}_${i++}__`;t.set(h,u),f=h;}let E=a.length;a+=f;let x=a.length;c.push({index:m,sourceStart:E,sourceEnd:x}),a+=d;}return {source:a,placeholders:t,bindings:o,diagnostics:{expressionRanges:c}}};var q=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",Q=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",y=(e,n)=>{if(n!=null&&typeof n!="boolean"){if(Q(n))throw new Error("Async values are not supported inside reactJsx template results.");if(Array.isArray(n)){n.forEach(r=>y(e,r));return}if(q(n)){for(let r of n)y(e,r);return}e.push(n);}},T=(e,n)=>M(e,n,r=>J(r,n)),Y=(e,n)=>{let r={};return e.forEach(t=>{if(t.type==="JSXSpreadAttribute"){let s=T(t.argument,n);s&&typeof s=="object"&&!Array.isArray(s)&&Object.assign(r,s);return}let o=S(t.name);if(!t.value){r[o]=true;return}if(t.value.type==="Literal"){r[o]=t.value.value;return}if(t.value.type==="JSXExpressionContainer"){if(t.value.expression.type==="JSXEmptyExpression")return;r[o]=T(t.value.expression,n);}}),r},I=(e,n)=>{let r=[];return e.forEach(t=>{switch(t.type){case "JSXText":{k(t.value,n.placeholders).forEach(s=>y(r,s));break}case "JSXExpressionContainer":{if(t.expression.type==="JSXEmptyExpression")break;y(r,T(t.expression,n));break}case "JSXSpreadChild":{let o=T(t.expression,n);o!=null&&y(r,o);break}case "JSXElement":case "JSXFragment":{r.push(J(t,n));break}}}),r},F=(e,n,r)=>createElement(e,n,...r),ee=(e,n)=>{let r=e.openingElement,t=S(r.name),o=n.components.get(t),s=Y(r.attributes,n),a=I(e.children,n);if(o)return F(o,s,a);if(/[A-Z]/.test(t[0]??""))throw new Error(`Unknown component "${t}". Did you interpolate it with the template literal?`);return F(t,s,a)},J=(e,n)=>{if(e.type==="JSXFragment"){let r=I(e.children,n);return createElement(Fragment,null,...r)}return ee(e,n)},te=(e,...n)=>{let r=N(e,n),t=parseSync("inline.jsx",r.source,$);if(t.errors.length>0)throw new Error(b("reactJsx",e,r.diagnostics,t.errors[0]));let o=A(t.program),s={source:r.source,placeholders:r.placeholders,components:new Map(r.bindings.map(a=>[a.name,a.value]))};return J(o,s)};export{te as reactJsx};
@@ -1,4 +1,5 @@
1
- type LoaderCallback = (err: Error | null, content?: string) => void;
1
+ import { type SourceMap } from 'magic-string';
2
+ type LoaderCallback = (error: Error | null, content?: string, map?: SourceMap | null) => void;
2
3
  type LoaderContext<TOptions> = {
3
4
  resourcePath: string;
4
5
  async(): LoaderCallback;
@@ -24,6 +25,10 @@ type LoaderOptions = {
24
25
  * Optional per-tag override of the transformation mode. Keys map to tag names.
25
26
  */
26
27
  tagModes?: Record<string, LoaderMode | undefined>;
28
+ /**
29
+ * When true, generate inline source maps for mutated files.
30
+ */
31
+ sourceMap?: boolean;
27
32
  };
28
33
  export default function jsxLoader(this: LoaderContext<LoaderOptions>, input: string | Buffer): void;
29
34
  export {};
@@ -1,5 +1,6 @@
1
1
  import MagicString from 'magic-string';
2
2
  import { parseSync } from 'oxc-parser';
3
+ import { formatTaggedTemplateParserError, } from '../internal/template-diagnostics.js';
3
4
  const createPlaceholderMap = (placeholders) => new Map(placeholders.map(entry => [entry.marker, entry.code]));
4
5
  class ReactTemplateBuilder {
5
6
  placeholderMap;
@@ -377,10 +378,12 @@ const renderTemplateWithSlots = (source, slots) => {
377
378
  output += escapeTemplateChunk(source.slice(cursor));
378
379
  return { code: output, changed: slots.length > 0 };
379
380
  };
380
- const transformTemplateLiteral = (templateSource, resourcePath) => {
381
+ const transformTemplateLiteral = (templateSource, resourcePath, tagName, templates, diagnostics) => {
381
382
  const result = parseSync(`${resourcePath}?jsx-template`, templateSource, TEMPLATE_PARSER_OPTIONS);
382
383
  if (result.errors.length > 0) {
383
- throw new Error(formatParserError(result.errors[0]));
384
+ throw new Error(formatTaggedTemplateParserError(tagName, templates, diagnostics, result.errors[0], {
385
+ label: 'jsx-loader',
386
+ }));
384
387
  }
385
388
  const slots = collectSlots(result.program, templateSource);
386
389
  return renderTemplateWithSlots(templateSource, slots);
@@ -449,6 +452,25 @@ const normalizeJsxTextSegments = (value, placeholders) => {
449
452
  return segments;
450
453
  };
451
454
  const TAG_PLACEHOLDER_PREFIX = '__JSX_LOADER_TAG_EXPR_';
455
+ const materializeTemplateStrings = (quasis) => {
456
+ const cooked = [];
457
+ const raw = [];
458
+ quasis.forEach(quasi => {
459
+ const value = quasi.value;
460
+ const cookedChunk = typeof value.cooked === 'string' ? value.cooked : (value.raw ?? '');
461
+ const rawChunk = typeof value.raw === 'string' ? value.raw : cookedChunk;
462
+ cooked.push(cookedChunk);
463
+ raw.push(rawChunk);
464
+ });
465
+ const templates = cooked;
466
+ Object.defineProperty(templates, 'raw', {
467
+ value: raw,
468
+ writable: false,
469
+ configurable: false,
470
+ enumerable: false,
471
+ });
472
+ return templates;
473
+ };
452
474
  const buildTemplateSource = (quasis, expressions, source, tag) => {
453
475
  const placeholderMap = new Map();
454
476
  const tagPlaceholderMap = new Map();
@@ -456,6 +478,7 @@ const buildTemplateSource = (quasis, expressions, source, tag) => {
456
478
  let placeholderIndex = 0;
457
479
  let trimStartNext = 0;
458
480
  let mutated = false;
481
+ const expressionRanges = [];
459
482
  const registerMarker = (code, isTag) => {
460
483
  if (isTag) {
461
484
  const existing = tagPlaceholderMap.get(code);
@@ -471,6 +494,12 @@ const buildTemplateSource = (quasis, expressions, source, tag) => {
471
494
  placeholderMap.set(marker, code);
472
495
  return marker;
473
496
  };
497
+ const appendInsertion = (expressionIndex, insertion) => {
498
+ const start = template.length;
499
+ template += insertion;
500
+ const end = template.length;
501
+ expressionRanges.push({ index: expressionIndex, sourceStart: start, sourceEnd: end });
502
+ };
474
503
  quasis.forEach((quasi, index) => {
475
504
  let chunk = quasi.value.cooked;
476
505
  if (typeof chunk !== 'string') {
@@ -488,6 +517,7 @@ const buildTemplateSource = (quasis, expressions, source, tag) => {
488
517
  if (!expression) {
489
518
  return;
490
519
  }
520
+ const expressionIndex = index;
491
521
  const start = expression.start ?? null;
492
522
  const end = expression.end ?? null;
493
523
  if (start === null || end === null) {
@@ -503,7 +533,8 @@ const buildTemplateSource = (quasis, expressions, source, tag) => {
503
533
  const code = source.slice(start, end);
504
534
  const marker = registerMarker(code, context.type === 'tag');
505
535
  const appendMarker = (wrapper) => {
506
- template += wrapper ? wrapper(marker) : marker;
536
+ const insertion = wrapper ? wrapper(marker) : marker;
537
+ appendInsertion(expressionIndex, insertion);
507
538
  };
508
539
  switch (context.type) {
509
540
  case 'tag':
@@ -545,15 +576,22 @@ const buildTemplateSource = (quasis, expressions, source, tag) => {
545
576
  marker,
546
577
  code,
547
578
  })),
579
+ diagnostics: { expressionRanges },
548
580
  };
549
581
  };
550
582
  const restoreTemplatePlaceholders = (code, placeholders) => placeholders.reduce((result, placeholder) => {
551
583
  return result.split(placeholder.marker).join(`\${${placeholder.code}}`);
552
584
  }, code);
553
- const compileReactTemplate = (templateSource, placeholders, resourcePath) => {
585
+ const createInlineSourceMapComment = (map) => {
586
+ const payload = Buffer.from(JSON.stringify(map), 'utf8').toString('base64');
587
+ return `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${payload}`;
588
+ };
589
+ const compileReactTemplate = (templateSource, placeholders, resourcePath, tagName, templates, diagnostics) => {
554
590
  const parsed = parseSync(`${resourcePath}?jsx-react-template`, templateSource, TEMPLATE_PARSER_OPTIONS);
555
591
  if (parsed.errors.length > 0) {
556
- throw new Error(formatParserError(parsed.errors[0]));
592
+ throw new Error(formatTaggedTemplateParserError(tagName, templates, diagnostics, parsed.errors[0], {
593
+ label: 'jsx-loader',
594
+ }));
557
595
  }
558
596
  const root = extractJsxRoot(parsed.program);
559
597
  const builder = new ReactTemplateBuilder(placeholders);
@@ -571,7 +609,7 @@ const isLoaderPlaceholderIdentifier = (node) => {
571
609
  return (node.name.startsWith(TEMPLATE_EXPR_PLACEHOLDER_PREFIX) ||
572
610
  node.name.startsWith(TAG_PLACEHOLDER_PREFIX));
573
611
  };
574
- const transformSource = (source, config) => {
612
+ const transformSource = (source, config, options) => {
575
613
  const ast = parseSync(config.resourcePath, source, MODULE_PARSER_OPTIONS);
576
614
  if (ast.errors.length > 0) {
577
615
  throw new Error(formatParserError(ast.errors[0]));
@@ -584,7 +622,7 @@ const transformSource = (source, config) => {
584
622
  }
585
623
  });
586
624
  if (!taggedTemplates.length) {
587
- return { code: source, helpers: [] };
625
+ return { code: source, mutated: false };
588
626
  }
589
627
  const magic = new MagicString(source);
590
628
  let mutated = false;
@@ -596,8 +634,9 @@ const transformSource = (source, config) => {
596
634
  const mode = config.tagModes.get(tagName) ?? DEFAULT_MODE;
597
635
  const quasi = node.quasi;
598
636
  const templateSource = buildTemplateSource(quasi.quasis, quasi.expressions, source, tagName);
637
+ const templateStrings = materializeTemplateStrings(quasi.quasis);
599
638
  if (mode === 'runtime') {
600
- const { code, changed } = transformTemplateLiteral(templateSource.source, config.resourcePath);
639
+ const { code, changed } = transformTemplateLiteral(templateSource.source, config.resourcePath, tagName, templateStrings, templateSource.diagnostics);
601
640
  const restored = restoreTemplatePlaceholders(code, templateSource.placeholders);
602
641
  const templateChanged = changed || templateSource.mutated;
603
642
  if (!templateChanged) {
@@ -610,7 +649,7 @@ const transformSource = (source, config) => {
610
649
  return;
611
650
  }
612
651
  if (mode === 'react') {
613
- const compiled = compileReactTemplate(templateSource.source, templateSource.placeholders, config.resourcePath);
652
+ const compiled = compileReactTemplate(templateSource.source, templateSource.placeholders, config.resourcePath, tagName, templateStrings, templateSource.diagnostics);
614
653
  helperKinds.add('react');
615
654
  magic.overwrite(node.start, node.end, compiled);
616
655
  mutated = true;
@@ -621,11 +660,26 @@ const transformSource = (source, config) => {
621
660
  // Modes are validated during option parsing; this fallback guards future extensions.
622
661
  throw new Error(`[jsx-loader] Transformation mode "${mode}" not implemented yet for tag "${tagName}".`);
623
662
  });
663
+ const helperSource = Array.from(helperKinds)
664
+ .map(kind => HELPER_SNIPPETS[kind])
665
+ .filter(Boolean)
666
+ .join('\n');
667
+ if (helperSource) {
668
+ magic.append(`\n${helperSource}`);
669
+ mutated = true;
670
+ }
671
+ const code = mutated ? magic.toString() : source;
672
+ const map = options?.sourceMap && mutated
673
+ ? magic.generateMap({
674
+ hires: true,
675
+ source: config.resourcePath,
676
+ includeContent: true,
677
+ })
678
+ : undefined;
624
679
  return {
625
- code: mutated ? magic.toString() : source,
626
- helpers: Array.from(helperKinds)
627
- .map(kind => HELPER_SNIPPETS[kind])
628
- .filter(Boolean),
680
+ code,
681
+ map,
682
+ mutated,
629
683
  };
630
684
  };
631
685
  export default function jsxLoader(input) {
@@ -662,16 +716,14 @@ export default function jsxLoader(input) {
662
716
  }
663
717
  });
664
718
  const source = typeof input === 'string' ? input : input.toString('utf8');
665
- const { code, helpers } = transformSource(source, {
719
+ const enableSourceMap = options.sourceMap === true;
720
+ const { code, map } = transformSource(source, {
666
721
  resourcePath: this.resourcePath,
667
722
  tags,
668
723
  tagModes,
669
- });
670
- if (helpers.length) {
671
- callback(null, `${code}\n${helpers.join('\n')}`);
672
- return;
673
- }
674
- callback(null, code);
724
+ }, { sourceMap: enableSourceMap });
725
+ const output = map && enableSourceMap ? `${code}\n${createInlineSourceMapComment(map)}` : code;
726
+ callback(null, output, map);
675
727
  }
676
728
  catch (error) {
677
729
  callback(error);
@@ -0,0 +1,2 @@
1
+ export declare const jsx: (templates: TemplateStringsArray, ...values: unknown[]) => import("../../jsx.js").JsxRenderable;
2
+ export type { JsxRenderable, JsxComponent } from '../../jsx.js';
@@ -0,0 +1,6 @@
1
+ import { enableJsxDebugDiagnostics } from '../../debug/diagnostics.js';
2
+ import { ensureNodeDom } from '../bootstrap.js';
3
+ import { jsx as baseJsx } from '../../jsx.js';
4
+ enableJsxDebugDiagnostics({ mode: 'always' });
5
+ ensureNodeDom();
6
+ export const jsx = baseJsx;
@@ -1,5 +1,5 @@
1
1
  import { parseSync } from 'oxc-parser';
2
- import { buildTemplate, evaluateExpression, extractRootNode, formatParserError, getIdentifierName, normalizeJsxTextSegments, parserOptions, } from '../runtime/shared.js';
2
+ import { buildTemplate, evaluateExpression, extractRootNode, formatTaggedTemplateParserError, getIdentifierName, normalizeJsxTextSegments, parserOptions, } from '../runtime/shared.js';
3
3
  import { Fragment, createElement, } from 'react';
4
4
  const isIterable = (value) => {
5
5
  if (!value || typeof value === 'string') {
@@ -124,7 +124,7 @@ export const reactJsx = (templates, ...values) => {
124
124
  const build = buildTemplate(templates, values);
125
125
  const result = parseSync('inline.jsx', build.source, parserOptions);
126
126
  if (result.errors.length > 0) {
127
- throw new Error(formatParserError(result.errors[0]));
127
+ throw new Error(formatTaggedTemplateParserError('reactJsx', templates, build.diagnostics, result.errors[0]));
128
128
  }
129
129
  const root = extractRootNode(result.program);
130
130
  const ctx = {
@@ -1,7 +1,11 @@
1
1
  import type { Expression, JSXElement, JSXFragment, JSXIdentifier, JSXMemberExpression, JSXNamespacedName, Program } from '@oxc-project/types';
2
2
  import type { OxcError, ParserOptions } from 'oxc-parser';
3
+ import type { TemplateDiagnostics } from '../internal/template-diagnostics.js';
4
+ export { formatTaggedTemplateParserError } from '../internal/template-diagnostics.js';
5
+ export type { TemplateDiagnostics, TemplateExpressionRange, } from '../internal/template-diagnostics.js';
3
6
  export declare const PLACEHOLDER_PREFIX = "__KX_EXPR__";
4
7
  export declare const placeholderPattern: RegExp;
8
+ export declare const formatParserError: (error: OxcError) => string;
5
9
  type AnyTemplateFunction = (...args: any[]) => unknown;
6
10
  type AnyTemplateConstructor = abstract new (...args: any[]) => unknown;
7
11
  export type TemplateComponent = (AnyTemplateFunction | AnyTemplateConstructor) & {
@@ -16,6 +20,7 @@ export type TemplateBuildResult<TComponent extends TemplateComponent> = {
16
20
  source: string;
17
21
  placeholders: Map<string, unknown>;
18
22
  bindings: BindingEntry<TComponent>[];
23
+ diagnostics: TemplateDiagnostics;
19
24
  };
20
25
  export type TemplateContext<TComponent extends TemplateComponent> = {
21
26
  source: string;
@@ -23,7 +28,6 @@ export type TemplateContext<TComponent extends TemplateComponent> = {
23
28
  components: Map<string, TComponent>;
24
29
  };
25
30
  export declare const parserOptions: ParserOptions;
26
- export declare const formatParserError: (error: OxcError) => string;
27
31
  export declare const extractRootNode: (program: Program) => JSXElement | JSXFragment;
28
32
  export declare const getIdentifierName: (identifier: JSXIdentifier | JSXNamespacedName | JSXMemberExpression) => string;
29
33
  type AnyOxcNode = {
@@ -37,4 +41,3 @@ export declare const evaluateExpression: <TComponent extends TemplateComponent>(
37
41
  export declare const sanitizeIdentifier: (value: string) => string;
38
42
  export declare const ensureBinding: <TComponent extends TemplateComponent>(value: TComponent, bindings: BindingEntry<TComponent>[], bindingLookup: Map<TComponent, BindingEntry<TComponent>>) => BindingEntry<TComponent>;
39
43
  export declare const buildTemplate: <TComponent extends TemplateComponent>(strings: TemplateStringsArray, values: unknown[]) => TemplateBuildResult<TComponent>;
40
- export {};