@knighted/jsx 1.12.0 → 1.13.1

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.
@@ -1,2 +1,2 @@
1
1
  export { jsx } from '../jsx.cjs';
2
- export type { JsxRenderable, JsxComponent } from '../jsx.cjs';
2
+ export type { JsxRenderable, JsxChildren, JsxComponent } from '../jsx.cjs';
@@ -1,2 +1,2 @@
1
1
  export { jsx } from './jsx.cjs';
2
- export type { JsxRenderable, JsxComponent } from './jsx.cjs';
2
+ export type { JsxRenderable, JsxChildren, JsxComponent } from './jsx.cjs';
@@ -1,7 +1,8 @@
1
1
  export type JsxRenderable = Node | DocumentFragment | string | number | bigint | boolean | null | undefined | Iterable<JsxRenderable>;
2
+ export type JsxChildren = JsxRenderable | JsxRenderable[];
2
3
  export type JsxComponent<Props = Record<string, unknown>> = {
3
4
  (props: Props & {
4
- children?: JsxRenderable | JsxRenderable[];
5
+ children?: JsxChildren;
5
6
  }): JsxRenderable;
6
7
  displayName?: string;
7
8
  };
@@ -1,6 +1,6 @@
1
1
  import { type JsxFragmentToken, type JsxCreateElement } from './internal/dom-create-element.cjs';
2
2
  import type { JsxRenderable } from './internal/jsx-types.cjs';
3
- export type { JsxRenderable, JsxComponent } from './internal/jsx-types.cjs';
3
+ export type { JsxRenderable, JsxChildren, JsxComponent } from './internal/jsx-types.cjs';
4
4
  export declare const createElement: JsxCreateElement;
5
5
  type JsxTaggedTemplate = {
6
6
  (templates: TemplateStringsArray, ...values: unknown[]): JsxRenderable;
@@ -3,4 +3,4 @@ export declare const jsx: {
3
3
  createElement: typeof import("../../jsx.cjs").createElement;
4
4
  Fragment: import("../../internal/dom-create-element.cjs").JsxFragmentToken;
5
5
  };
6
- export type { JsxRenderable, JsxComponent } from '../../jsx.cjs';
6
+ export type { JsxRenderable, JsxChildren, JsxComponent } from '../../jsx.cjs';
@@ -3,4 +3,4 @@ export declare const jsx: {
3
3
  createElement: typeof import("../jsx.cjs").createElement;
4
4
  Fragment: import("../internal/dom-create-element.cjs").JsxFragmentToken;
5
5
  };
6
- export type { JsxRenderable, JsxComponent } from '../jsx.cjs';
6
+ export type { JsxRenderable, JsxChildren, JsxComponent } from '../jsx.cjs';
@@ -1,2 +1,2 @@
1
1
  export { reactJsx } from './react-jsx.cjs';
2
- export type { ReactJsxComponent, ReactJsxDomAttributes, ReactJsxEventHandler, ReactJsxIntrinsicElement, ReactJsxIntrinsicElements, ReactJsxRef, ReactJsxRenderable, } from './react-jsx.cjs';
2
+ export type { ReactJsxChildren, ReactJsxComponent, ReactJsxDomAttributes, ReactJsxEventHandler, ReactJsxIntrinsicElement, ReactJsxIntrinsicElements, ReactJsxRef, ReactJsxRenderable, } from './react-jsx.cjs';
@@ -1,6 +1,7 @@
1
1
  import { type ComponentType, type DOMAttributes, type EventHandler, type JSX as ReactJSX, type PropsWithChildren, type ReactElement, type ReactNode, type Ref, type SyntheticEvent } from 'react';
2
2
  export type ReactJsxComponent<Props = Record<string, unknown>> = ComponentType<PropsWithChildren<Props>>;
3
3
  export type ReactJsxRenderable = ReactNode;
4
+ export type ReactJsxChildren = ReactJsxRenderable | ReactJsxRenderable[];
4
5
  export type ReactJsxRef<T> = Ref<T>;
5
6
  export type ReactJsxEventHandler<E extends SyntheticEvent> = EventHandler<E>;
6
7
  export type ReactJsxDomAttributes<T = unknown> = DOMAttributes<T>;
@@ -258,26 +258,37 @@ const unwrapExpressionNode = (value) => {
258
258
  }
259
259
  return current;
260
260
  };
261
- const isJsxExpressionNode = (value) => {
261
+ const toJsxExpressionNode = (value) => {
262
262
  const unwrapped = unwrapExpressionNode(value);
263
263
  if (!isObjectRecord(unwrapped) || typeof unwrapped.type !== 'string') {
264
- return false;
264
+ return null;
265
+ }
266
+ if (unwrapped.type === 'JSXElement' || unwrapped.type === 'JSXFragment') {
267
+ return unwrapped;
265
268
  }
266
- return unwrapped.type === 'JSXElement' || unwrapped.type === 'JSXFragment';
269
+ return null;
267
270
  };
271
+ const createEmptyTopLevelJsxExpressionMetadata = () => ({
272
+ hasTopLevelJsxExpression: false,
273
+ topLevelJsxExpressionRange: null,
274
+ });
268
275
  const collectTopLevelJsxExpressionMetadata = (body) => {
269
276
  if (!Array.isArray(body)) {
270
- return false;
277
+ return createEmptyTopLevelJsxExpressionMetadata();
271
278
  }
272
279
  for (const statement of body) {
273
280
  if (!isObjectRecord(statement) || statement.type !== 'ExpressionStatement') {
274
281
  continue;
275
282
  }
276
- if (isJsxExpressionNode(statement.expression)) {
277
- return true;
283
+ const jsxNode = toJsxExpressionNode(statement.expression);
284
+ if (jsxNode) {
285
+ return {
286
+ hasTopLevelJsxExpression: true,
287
+ topLevelJsxExpressionRange: toSourceRange(jsxNode),
288
+ };
278
289
  }
279
290
  }
280
- return false;
291
+ return createEmptyTopLevelJsxExpressionMetadata();
281
292
  };
282
293
  const ensureSupportedOptions = (options) => {
283
294
  if (options.sourceType !== undefined &&
@@ -316,9 +327,11 @@ function transformJsxSource(source, options = {}) {
316
327
  const declarations = internalOptions.collectTopLevelDeclarations
317
328
  ? collectTopLevelDeclarationMetadata(parsed.program.body)
318
329
  : undefined;
319
- const hasTopLevelJsxExpression = internalOptions.collectTopLevelJsxExpression
330
+ const topLevelJsxExpressionMetadata = internalOptions.collectTopLevelJsxExpression
320
331
  ? collectTopLevelJsxExpressionMetadata(parsed.program.body)
321
332
  : undefined;
333
+ const hasTopLevelJsxExpression = topLevelJsxExpressionMetadata?.hasTopLevelJsxExpression;
334
+ const topLevelJsxExpressionRange = topLevelJsxExpressionMetadata?.topLevelJsxExpressionRange;
322
335
  if (parserDiagnostics.length) {
323
336
  return {
324
337
  code: source,
@@ -327,6 +340,7 @@ function transformJsxSource(source, options = {}) {
327
340
  diagnostics: parserDiagnostics,
328
341
  declarations,
329
342
  hasTopLevelJsxExpression,
343
+ topLevelJsxExpressionRange,
330
344
  };
331
345
  }
332
346
  const transpileBaseOptions = {
@@ -344,6 +358,7 @@ function transformJsxSource(source, options = {}) {
344
358
  diagnostics: parserDiagnostics,
345
359
  declarations,
346
360
  hasTopLevelJsxExpression,
361
+ topLevelJsxExpressionRange,
347
362
  };
348
363
  }
349
364
  if (typescriptStripBackend === 'transpile-manual') {
@@ -358,6 +373,7 @@ function transformJsxSource(source, options = {}) {
358
373
  diagnostics: parserDiagnostics,
359
374
  declarations,
360
375
  hasTopLevelJsxExpression,
376
+ topLevelJsxExpressionRange,
361
377
  };
362
378
  }
363
379
  const transformed = (0, oxc_transform_1.transformSync)('transform-jsx-source.tsx', source, {
@@ -377,6 +393,7 @@ function transformJsxSource(source, options = {}) {
377
393
  diagnostics,
378
394
  declarations,
379
395
  hasTopLevelJsxExpression,
396
+ topLevelJsxExpressionRange,
380
397
  };
381
398
  }
382
399
  const jsxResult = (0, transpile_js_1.transpileJsxSource)(transformed.code, transpileBaseOptions);
@@ -387,5 +404,6 @@ function transformJsxSource(source, options = {}) {
387
404
  diagnostics,
388
405
  declarations,
389
406
  hasTopLevelJsxExpression,
407
+ topLevelJsxExpressionRange,
390
408
  };
391
409
  }
@@ -45,6 +45,7 @@ export type TransformJsxSourceResult = {
45
45
  diagnostics: TransformDiagnostic[];
46
46
  declarations?: TransformTopLevelDeclaration[];
47
47
  hasTopLevelJsxExpression?: boolean;
48
+ topLevelJsxExpressionRange?: SourceRange | null;
48
49
  };
49
50
  export declare function transformJsxSource(source: string, options?: TransformJsxSourceOptions): TransformJsxSourceResult;
50
51
  export {};
@@ -1,2 +1,2 @@
1
1
  export { jsx } from '../jsx.js';
2
- export type { JsxRenderable, JsxComponent } from '../jsx.js';
2
+ export type { JsxRenderable, JsxChildren, JsxComponent } from '../jsx.js';
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { jsx } from './jsx.js';
2
- export type { JsxRenderable, JsxComponent } from './jsx.js';
2
+ export type { JsxRenderable, JsxChildren, JsxComponent } from './jsx.js';
@@ -1,7 +1,8 @@
1
1
  export type JsxRenderable = Node | DocumentFragment | string | number | bigint | boolean | null | undefined | Iterable<JsxRenderable>;
2
+ export type JsxChildren = JsxRenderable | JsxRenderable[];
2
3
  export type JsxComponent<Props = Record<string, unknown>> = {
3
4
  (props: Props & {
4
- children?: JsxRenderable | JsxRenderable[];
5
+ children?: JsxChildren;
5
6
  }): JsxRenderable;
6
7
  displayName?: string;
7
8
  };
package/dist/jsx.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { type JsxFragmentToken, type JsxCreateElement } from './internal/dom-create-element.js';
2
2
  import type { JsxRenderable } from './internal/jsx-types.js';
3
- export type { JsxRenderable, JsxComponent } from './internal/jsx-types.js';
3
+ export type { JsxRenderable, JsxChildren, JsxComponent } from './internal/jsx-types.js';
4
4
  export declare const createElement: JsxCreateElement;
5
5
  type JsxTaggedTemplate = {
6
6
  (templates: TemplateStringsArray, ...values: unknown[]): JsxRenderable;
@@ -1,8 +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;},Ee=e=>{T?.warnLowercaseEventProp?.(e);},ye=e=>{T?.ensureValidDangerouslySetInnerHTML?.(e);},$=e=>{let{getIdentifierName:t,evaluateExpressionWithNamespace:n}=e;return (r,s,o)=>{let a={},c=(i,p)=>{i==="dangerouslySetInnerHTML"&&ye(p),a[i]=p;};return r.forEach(i=>{if(i.type==="JSXSpreadAttribute"){let l=n(i.argument,s,o);l&&typeof l=="object"&&!Array.isArray(l)&&Object.assign(a,l);return}let p=t(i.name);if(Ee(p),!i.value){c(p,true);return}if(i.value.type==="Literal"){c(p,i.value.value);return}if(i.value.type==="JSXExpressionContainer"){if(i.value.expression.type==="JSXEmptyExpression")return;c(p,n(i.value.expression,s,o));}}),a}};var W=null,B=e=>{W=e;},F="Capture",H=e=>e.endsWith(F)?{eventName:e.slice(0,-F.length),capture:true}:{eventName:e,capture:false},V=e=>{if(!e.startsWith("on"))return null;if(e.startsWith("on:")){let r=e.slice(3);if(!r)return null;let s=H(r);return s.eventName?s:null}let t=e.slice(2);if(!t)return null;let n=H(t);return n.eventName?{eventName:n.eventName.toLowerCase(),capture:n.capture}:null},U=e=>!e||typeof e!="object"?false:"handleEvent"in e&&typeof e.handleEvent=="function",he=e=>{if(!e||typeof e!="object"||!("handler"in e))return false;let t=e.handler;return typeof t=="function"?true:U(t)},be=(e,t)=>{W?.onInvalidHandler?.(e,t);},z=(e,t)=>{if(typeof t=="function"||U(t))return {listener:t};if(!he(t))return be(e,t),null;let n=t,r=n.options?{...n.options}:void 0,s=(o,a)=>{a!=null&&(r||(r={}),r[o]=a);};return s("capture",n.capture),s("once",n.once),s("passive",n.passive),s("signal",n.signal??void 0),{listener:n.handler,options:r}};var Se="@knighted/jsx",q=e=>`${Se}: ${e}`,C=()=>typeof process<"u"&&process.env?.KNIGHTED_JSX_DEBUG==="1",k=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(q(e)),G=(e,t=false)=>{!t&&!C()||typeof console<"u"&&typeof console.warn=="function"&&console.warn(q(e));};var we=e=>e>="a"&&e<="z",S="env",v=()=>S==="always"||S==="env"&&C(),Je=()=>S==="always",Te={warnLowercaseEventProp(e){if(!v()||!e.startsWith("on")||e.startsWith("on:")||e.length<3)return;let t=e[2]??"";if(!we(t))return;let n=`${e.slice(0,2)}${t.toUpperCase()}${e.slice(3)}`;G(`Use camelCase DOM event props when targeting runtime jsx templates. Received "${e}"; did you mean "${n}"?`,Je());},ensureValidDangerouslySetInnerHTML(e){if(!v())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 ${k(t)}.`)}},Ce={onInvalidHandler(e,t){if(v())throw b(`The "${e}" prop expects a function, EventListenerObject, or descriptor ({ handler }) but received ${k(t)}.`)}},K=e=>{S=e?.mode,I(Te),B(Ce);};var ve=createRequire(import.meta.url),Y=()=>ve,Q="<!doctype html><html><body></body></html>",Re=["window","self","document","HTMLElement","Element","Node","DocumentFragment","customElements","Text","Comment","MutationObserver","navigator"],Ae=()=>typeof document<"u"&&typeof document.createElement=="function",Ne=e=>{let t=globalThis,n=e;Re.forEach(r=>{t[r]===void 0&&n[r]!==void 0&&(t[r]=n[r]);});},D=()=>{let{parseHTML:e}=Y()("linkedom"),{window:t}=e(Q);return t},R=()=>{let{JSDOM:e}=Y()("jsdom"),{window:t}=new e(Q);return t},Pe=()=>{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"},je=()=>{let e=Pe();return e==="linkedom"?[D,R]:e==="jsdom"?[R,D]:[D,R]},Me=()=>{let e=[];for(let n of je())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)},Z=false,ee=()=>{if(Ae()||Z)return;let e=Me();Ne(e),Z=true;};var te=e=>{let t=e.replace(/\r/g,"").replace(/\n\s+/g," "),n=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"",s=/\n/.test(n),o=/\n/.test(r),a=t;return s&&(a=a.replace(/^\s+/,"")),o&&(a=a.replace(/\s+$/,"")),a.length===0||a.trim().length===0?null:a};var Xe="oxc-parser",Le=e=>{let t=e.raw??e,n=t[0]??"",r=[];for(let s=0;s<t.length-1;s++){let o="${expr#"+s+"}",a=n.length;n+=o;let c=n.length;r.push({index:s,templateStart:a,templateEnd:c,label:o}),n+=t[s+1]??"";}return {source:n,spans:r}},Oe=(e,t)=>{let n=new Map;return t.forEach(r=>{n.set(r.index,r);}),e.expressionRanges.map(r=>{let s=n.get(r.index);if(!s)return null;let o=Math.max(0,r.sourceEnd-r.sourceStart),a=Math.max(0,s.templateEnd-s.templateStart);return {sourceStart:r.sourceStart,sourceEnd:r.sourceEnd,templateStart:s.templateStart,templateEnd:s.templateEnd,delta:a-o}}).filter(r=>!!r).sort((r,s)=>r.sourceStart-s.sourceStart)},_e=(e,t,n)=>{if(!Number.isFinite(e)||e<=0)return 0;let r=0;for(let o of t){if(e<o.sourceStart)break;if(e<o.sourceEnd){let a=Math.max(0,e-o.sourceStart),c=Math.max(0,o.templateEnd-o.templateStart);if(c===0)return o.templateStart;let i=Math.min(a,Math.max(0,c-1));return o.templateStart+i}r+=o.delta;}let s=e+r;return s<=0?0:s>=n?n:s},ne=(e,t)=>{let n=Math.max(0,Math.min(t,e.length)),r=1,s=1;for(let o=0;o<n;o++){if(e.charCodeAt(o)===10){r++,s=1;continue}s++;}return {line:r,column:s}},Ie=e=>{let t=[],n=0;return e.forEach((r,s)=>{t.push(n),n+=r.length,s<e.length-1&&(n+=1);}),t},$e=(e,t,n,r,s,o,a)=>{let c=n+t.length,i=Math.max(r,n),p=Math.min(s,c);if(p>i){let l=Math.max(0,i-n),u=Math.max(1,p-i);return " ".repeat(l)+"^".repeat(u)}if(t.length===0&&e>=o&&e<=a)return "^";if(e===o){let l=Math.max(0,r-n);return " ".repeat(Math.min(l,t.length))+"^"}return ""},Fe=(e,t,n,r,s)=>{if(!e.length)return "";let o=e.split(`
1
+ import {createRequire}from'module';import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var T=null,I=e=>{T=e;},Ee=e=>{T?.warnLowercaseEventProp?.(e);},he=e=>{T?.ensureValidDangerouslySetInnerHTML?.(e);},$=e=>{let{getIdentifierName:t,evaluateExpressionWithNamespace:n}=e;return (r,s,o)=>{let a={},c=(i,p)=>{i==="dangerouslySetInnerHTML"&&he(p),a[i]=p;};return r.forEach(i=>{if(i.type==="JSXSpreadAttribute"){let l=n(i.argument,s,o);l&&typeof l=="object"&&!Array.isArray(l)&&Object.assign(a,l);return}let p=t(i.name);if(Ee(p),!i.value){c(p,true);return}if(i.value.type==="Literal"){c(p,i.value.value);return}if(i.value.type==="JSXExpressionContainer"){if(i.value.expression.type==="JSXEmptyExpression")return;c(p,n(i.value.expression,s,o));}}),a}};var W=null,B=e=>{W=e;},F="Capture",H=e=>e.endsWith(F)?{eventName:e.slice(0,-F.length),capture:true}:{eventName:e,capture:false},V=e=>{if(!e.startsWith("on"))return null;if(e.startsWith("on:")){let r=e.slice(3);if(!r)return null;let s=H(r);return s.eventName?s:null}let t=e.slice(2);if(!t)return null;let n=H(t);return n.eventName?{eventName:n.eventName.toLowerCase(),capture:n.capture}:null},U=e=>!e||typeof e!="object"?false:"handleEvent"in e&&typeof e.handleEvent=="function",ye=e=>{if(!e||typeof e!="object"||!("handler"in e))return false;let t=e.handler;return typeof t=="function"?true:U(t)},be=(e,t)=>{W?.onInvalidHandler?.(e,t);},z=(e,t)=>{if(typeof t=="function"||U(t))return {listener:t};if(!ye(t))return be(e,t),null;let n=t,r=n.options?{...n.options}:void 0,s=(o,a)=>{a!=null&&(r||(r={}),r[o]=a);};return s("capture",n.capture),s("once",n.once),s("passive",n.passive),s("signal",n.signal??void 0),{listener:n.handler,options:r}};var Se="@knighted/jsx",q=e=>`${Se}: ${e}`,C=()=>typeof process<"u"&&process.env?.KNIGHTED_JSX_DEBUG==="1",k=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(q(e)),G=(e,t=false)=>{!t&&!C()||typeof console<"u"&&typeof console.warn=="function"&&console.warn(q(e));};var Je=e=>e>="a"&&e<="z",S="env",v=()=>S==="always"||S==="env"&&C(),we=()=>S==="always",Te={warnLowercaseEventProp(e){if(!v()||!e.startsWith("on")||e.startsWith("on:")||e.length<3)return;let t=e[2]??"";if(!Je(t))return;let n=`${e.slice(0,2)}${t.toUpperCase()}${e.slice(3)}`;G(`Use camelCase DOM event props when targeting runtime jsx templates. Received "${e}"; did you mean "${n}"?`,we());},ensureValidDangerouslySetInnerHTML(e){if(!v())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 ${k(t)}.`)}},Ce={onInvalidHandler(e,t){if(v())throw b(`The "${e}" prop expects a function, EventListenerObject, or descriptor ({ handler }) but received ${k(t)}.`)}},K=e=>{S=e?.mode,I(Te),B(Ce);};var ve=createRequire(import.meta.url),Y=()=>ve,Q="<!doctype html><html><body></body></html>",Re=["window","self","document","HTMLElement","Element","Node","DocumentFragment","customElements","Text","Comment","MutationObserver","navigator"],Ae=()=>typeof document<"u"&&typeof document.createElement=="function",Ne=e=>{let t=globalThis,n=e;Re.forEach(r=>{t[r]===void 0&&n[r]!==void 0&&(t[r]=n[r]);});},D=()=>{let{parseHTML:e}=Y()("linkedom"),{window:t}=e(Q);return t},R=()=>{let{JSDOM:e}=Y()("jsdom"),{window:t}=new e(Q);return t},Pe=()=>{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"},je=()=>{let e=Pe();return e==="linkedom"?[D,R]:e==="jsdom"?[R,D]:[D,R]},Me=()=>{let e=[];for(let n of je())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)},Z=false,ee=()=>{if(Ae()||Z)return;let e=Me();Ne(e),Z=true;};var te=e=>{let t=e.replace(/\r/g,"").replace(/\n\s+/g," "),n=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"",s=/\n/.test(n),o=/\n/.test(r),a=t;return s&&(a=a.replace(/^\s+/,"")),o&&(a=a.replace(/\s+$/,"")),a.length===0||a.trim().length===0?null:a};var Xe="oxc-parser",Le=e=>{let t=e.raw??e,n=t[0]??"",r=[];for(let s=0;s<t.length-1;s++){let o="${expr#"+s+"}",a=n.length;n+=o;let c=n.length;r.push({index:s,templateStart:a,templateEnd:c,label:o}),n+=t[s+1]??"";}return {source:n,spans:r}},Oe=(e,t)=>{let n=new Map;return t.forEach(r=>{n.set(r.index,r);}),e.expressionRanges.map(r=>{let s=n.get(r.index);if(!s)return null;let o=Math.max(0,r.sourceEnd-r.sourceStart),a=Math.max(0,s.templateEnd-s.templateStart);return {sourceStart:r.sourceStart,sourceEnd:r.sourceEnd,templateStart:s.templateStart,templateEnd:s.templateEnd,delta:a-o}}).filter(r=>!!r).sort((r,s)=>r.sourceStart-s.sourceStart)},_e=(e,t,n)=>{if(!Number.isFinite(e)||e<=0)return 0;let r=0;for(let o of t){if(e<o.sourceStart)break;if(e<o.sourceEnd){let a=Math.max(0,e-o.sourceStart),c=Math.max(0,o.templateEnd-o.templateStart);if(c===0)return o.templateStart;let i=Math.min(a,Math.max(0,c-1));return o.templateStart+i}r+=o.delta;}let s=e+r;return s<=0?0:s>=n?n:s},ne=(e,t)=>{let n=Math.max(0,Math.min(t,e.length)),r=1,s=1;for(let o=0;o<n;o++){if(e.charCodeAt(o)===10){r++,s=1;continue}s++;}return {line:r,column:s}},Ie=e=>{let t=[],n=0;return e.forEach((r,s)=>{t.push(n),n+=r.length,s<e.length-1&&(n+=1);}),t},$e=(e,t,n,r,s,o,a)=>{let c=n+t.length,i=Math.max(r,n),p=Math.min(s,c);if(p>i){let l=Math.max(0,i-n),u=Math.max(1,p-i);return " ".repeat(l)+"^".repeat(u)}if(t.length===0&&e>=o&&e<=a)return "^";if(e===o){let l=Math.max(0,r-n);return " ".repeat(Math.min(l,t.length))+"^"}return ""},Fe=(e,t,n,r,s)=>{if(!e.length)return "";let o=e.split(`
2
2
  `),a=Ie(o),c=Math.max(1,r-1),i=Math.min(o.length,s+1),p=String(i).length,l=[];for(let u=c;u<=i;u++){let d=o[u-1]??"",m=String(u).padStart(p," ");l.push(`${m} | ${d}`);let g=$e(u,d,a[u-1]??0,t,n,r,s);g&&l.push(`${" ".repeat(p)} | ${g}`);}return l.join(`
3
- `)},A=(e,t,n,r,s)=>{let o=Xe,a=`[${o}] ${r.message}`,c=r.labels?.[0];if(!c)return a;let{source:i,spans:p}=Le(t),l=Oe(n,p),u=E=>_e(typeof E=="number"?E:0,l,i.length),d=u(c.start),m=u(c.end);m<=d&&(m=Math.min(i.length,d+1));let g=ne(i,d),x=ne(i,Math.max(d,m-1)),h=Fe(i,d,m,g.line,x.line),f=`[${o}] ${r.message}`;return f+=`
3
+ `)},A=(e,t,n,r,s)=>{let o=Xe,a=`[${o}] ${r.message}`,c=r.labels?.[0];if(!c)return a;let{source:i,spans:p}=Le(t),l=Oe(n,p),u=E=>_e(typeof E=="number"?E:0,l,i.length),d=u(c.start),m=u(c.end);m<=d&&(m=Math.min(i.length,d+1));let g=ne(i,d),x=ne(i,Math.max(d,m-1)),y=Fe(i,d,m,g.line,x.line),f=`[${o}] ${r.message}`;return f+=`
4
4
  --> ${e} template:${g.line}:${g.column}`,c.message&&(f+=`
5
- ${c.message}`),h&&(f+=`
6
- ${h}`),r.helpMessage&&(f+=`
7
- ${r.helpMessage}`),f};var He=/<\s*$/,We=/<\/\s*$/,oe="__KX_EXPR__",re=new RegExp(`${oe}\\d+_\\d+__`,"g"),Be=0;var se={lang:"jsx",sourceType:"module",range:true,preserveParens:true},ae=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(s=>N(s,t));return}typeof r=="object"&&N(r,t);}}));},ie=(e,t)=>{let n=te(e);if(!n)return [];let r=[];re.lastIndex=0;let s=0,o;for(;o=re.exec(n);){let c=o.index,i=n.slice(s,c);i&&r.push(i);let p=o[0];t.has(p)?r.push(t.get(p)):r.push(p),s=c+p.length;}let a=n.slice(s);return a&&r.push(a),r},Ve=(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)},pe=(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=Ve(e,t);try{let c=new Function(...a,`"use strict"; return (${o});`),i=a.map(p=>t.placeholders.get(p));return c(...i)}catch(c){throw new Error(`Failed to evaluate expression ${o}: ${c.message}`,{cause:c})}},Ue=e=>{let t=e.replace(/[^a-zA-Z0-9_$]/g,"");return t?/[A-Za-z_$]/.test(t[0])?t:`Component${t}`:"Component"},ze=(e,t,n)=>{let r=n.get(e);if(r)return r;let s=e.displayName||e.name||`Component${t.length}`,o=Ue(s??""),a=o,c=1;for(;t.some(p=>p.name===a);)a=`${o}${c++}`;let i={name:a,value:e};return t.push(i),n.set(e,i),i},ce=(e,t)=>{let n=e.raw??e,r=new Map,s=[],o=new Map,a=n[0]??"",c=Be++,i=0,p=[];for(let l=0;l<t.length;l++){let u=n[l]??"",d=n[l+1]??"",m=t[l],g=He.test(u)||We.test(u),x;if(g&&typeof m=="function")x=ze(m,s,o).name;else if(g&&typeof m=="string")x=m;else {let E=`${oe}${c}_${i++}__`;r.set(E,m),x=E;}let h=a.length;a+=x;let f=a.length;p.push({index:l,sourceStart:h,sourceEnd:f}),a+=d;}return {source:a,placeholders:r,bindings:s,diagnostics:{expressionRanges:p}}};var P=Symbol.for("@knighted/jsx::Fragment"),J="__jsxNs",qe=(e,t)=>t.length>0?t:Object.prototype.hasOwnProperty.call(e,"children")?[e.children]:[],Ge=(e,t)=>{let n={...e};return t.length===1?n.children=t[0]:t.length>1?n.children=t:delete n.children,n},Ke=e=>{if(!Object.prototype.hasOwnProperty.call(e,J))return;let t=e[J];if(delete e[J],t==="svg"||t===null)return t;throw new Error(`${J} must be "svg" or null when provided.`)},le=({ensureDomAvailable:e,appendChildValue:t,setDomProp:n,isPromiseLike:r})=>{function s(o,a,...c){e();let i=a?{...a}:{},p=qe(i,c);if(o===P){let m=document.createDocumentFragment();return p.forEach(g=>t(m,g)),m}if(typeof o=="function"){let m=o(Ge(i,p));if(r(m))throw new Error("Async jsx components are not supported.");return m}if(typeof o!="string")throw new Error(`Unsupported jsx createElement type: ${String(o)}`);delete i.children;let u=Ke(i)??(o==="svg"?"svg":null),d=u==="svg"?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o);return Object.entries(i).forEach(([m,g])=>{m!=="key"&&n(d,m,g,u);}),p.forEach(m=>t(d,m)),d}return s};var ue=()=>{if(typeof document>"u"||typeof document.createElement!="function")throw new Error("The jsx template tag requires a DOM-like environment (document missing).")},tt=e=>typeof Node>"u"?false:e instanceof Node||e instanceof DocumentFragment,nt=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",rt={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},de=e=>{if(!(!e||e==="html"||e==="svg"))return rt[e]},ot=e=>e==="svg"?svg:html,j=(e,t,n)=>{let r=de(t.space),s=String(n);if(r){e.setAttributeNS(r,t.attribute,s);return}e.setAttribute(t.attribute,s);},me=(e,t)=>{let n=de(t.space);if(n){e.removeAttributeNS(n,t.attribute);return}e.removeAttribute(t.attribute);},M=(e,t)=>Array.isArray(e)?e.filter(Boolean).join(t):e,st=(e,t,n)=>t==="svg"||!n.property||n.property.includes(":")?false:n.property in e,ge=(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 p=n,l=e.style;if(!l)return;let u=l;Object.entries(p).forEach(([d,m])=>{if(m!=null){if(d.startsWith("--")){l.setProperty(d,String(m));return}u[d]=m;}});return}let s=V(t);if(s){let p=z(t,n);if(p){let l=p.options?{...p.options}:void 0;s.capture&&(l?l.capture=true:l={capture:true}),e.addEventListener(s.eventName,p.listener,l);return}}let o=find(ot(r),t),a=e,c=st(e,r,o);if(o.mustUseProperty){let p=o.boolean?!!n:n;a[o.property]=p;return}if(o.boolean){let p=!!n;c&&(a[o.property]=p),p?j(e,o,""):me(e,o);return}let i=n;if(o.spaceSeparated?i=M(n," "):o.commaSeparated?i=M(n,","):o.commaOrSpaceSeparated&&(i=M(n," ")),o.booleanish&&typeof i=="boolean"&&(i=i?"true":"false"),o.overloadedBoolean){if(i===false){me(e,o);return}if(i===true){j(e,o,"");return}}if(c){a[o.property]=i;return}i!==false&&j(e,o,i);},y=(e,t)=>{if(t!=null&&typeof t!="boolean"){if(L(t))throw new Error("Async values are not supported inside jsx template results.");if(Array.isArray(t)){t.forEach(n=>y(e,n));return}if(nt(t)){for(let n of t)y(e,n);return}if(tt(t)){e.appendChild(t);return}e.appendChild(document.createTextNode(String(t)));}},X=(e,t,n)=>pe(e,t,r=>_(r,t,n)),fe=$({getIdentifierName:w,evaluateExpressionWithNamespace:X}),at=(e,t,n,r)=>{let s=fe(t,n,r);Object.entries(s).forEach(([o,a])=>{if(o!=="key"){if(o==="children"){y(e,a);return}ge(e,o,a,r);}});},O=(e,t,n)=>{let r=[];return e.forEach(s=>{switch(s.type){case "JSXText":{ie(s.value,t.placeholders).forEach(a=>{r.push(a);});break}case "JSXExpressionContainer":{if(s.expression.type==="JSXEmptyExpression")break;r.push(X(s.expression,t,n));break}case "JSXSpreadChild":{let o=X(s.expression,t,n);o!=null&&r.push(o);break}case "JSXElement":case "JSXFragment":{r.push(_(s,t,n));break}}}),r},it=(e,t,n,r)=>{let s=fe(e.openingElement.attributes,t,r),o=O(e.children,t,r);o.length===1?s.children=o[0]:o.length>1&&(s.children=o);let a=n(s);if(L(a))throw new Error("Async jsx components are not supported.");return a},pt=(e,t,n)=>{let r=e.openingElement,s=w(r.name),o=t.components.get(s);if(o)return it(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,c=s==="foreignObject"?null:a,i=a==="svg"?document.createElementNS("http://www.w3.org/2000/svg",s):document.createElement(s);return at(i,r.attributes,t,a),O(e.children,t,c).forEach(l=>y(i,l)),i},_=(e,t,n)=>{if(e.type==="JSXFragment"){let r=document.createDocumentFragment();return O(e.children,t,n).forEach(o=>y(r,o)),r}return pt(e,t,n)},ct=le({ensureDomAvailable:ue,appendChildValue:y,setDomProp:ge,isPromiseLike:L}),lt=(e,...t)=>{ue();let n=ce(e,t),r=parseSync("inline.jsx",n.source,se);if(r.errors.length>0)throw new Error(A("jsx",e,n.diagnostics,r.errors[0]));let s=ae(r.program),o={source:n.source,placeholders:n.placeholders,components:new Map(n.bindings.map(a=>[a.name,a.value]))};return _(s,o,null)},xe=Object.assign(lt,{createElement:ct,Fragment:P});K({mode:"always"});ee();var Ot=xe;
5
+ ${c.message}`),y&&(f+=`
6
+ ${y}`),r.helpMessage&&(f+=`
7
+ ${r.helpMessage}`),f};var He=/<\s*$/,We=/<\/\s*$/,oe="__KX_EXPR__",re=new RegExp(`${oe}\\d+_\\d+__`,"g"),Be=0;var se={lang:"jsx",sourceType:"module",range:true,preserveParens:true},ae=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.")},J=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${J(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(s=>N(s,t));return}typeof r=="object"&&N(r,t);}}));},ie=(e,t)=>{let n=te(e);if(!n)return [];let r=[];re.lastIndex=0;let s=0,o;for(;o=re.exec(n);){let c=o.index,i=n.slice(s,c);i&&r.push(i);let p=o[0];t.has(p)?r.push(t.get(p)):r.push(p),s=c+p.length;}let a=n.slice(s);return a&&r.push(a),r},Ve=(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)},pe=(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=Ve(e,t);try{let c=new Function(...a,`"use strict"; return (${o});`),i=a.map(p=>t.placeholders.get(p));return c(...i)}catch(c){throw new Error(`Failed to evaluate expression ${o}: ${c.message}`,{cause:c})}},Ue=e=>{let t=e.replace(/[^a-zA-Z0-9_$]/g,"");return t?/[A-Za-z_$]/.test(t[0])?t:`Component${t}`:"Component"},ze=(e,t,n)=>{let r=n.get(e);if(r)return r;let s=e.displayName||e.name||`Component${t.length}`,o=Ue(s??""),a=o,c=1;for(;t.some(p=>p.name===a);)a=`${o}${c++}`;let i={name:a,value:e};return t.push(i),n.set(e,i),i},ce=(e,t)=>{let n=e.raw??e,r=new Map,s=[],o=new Map,a=n[0]??"",c=Be++,i=0,p=[];for(let l=0;l<t.length;l++){let u=n[l]??"",d=n[l+1]??"",m=t[l],g=He.test(u)||We.test(u),x;if(g&&typeof m=="function")x=ze(m,s,o).name;else if(g&&typeof m=="string")x=m;else {let E=`${oe}${c}_${i++}__`;r.set(E,m),x=E;}let y=a.length;a+=x;let f=a.length;p.push({index:l,sourceStart:y,sourceEnd:f}),a+=d;}return {source:a,placeholders:r,bindings:s,diagnostics:{expressionRanges:p}}};var P=Symbol.for("@knighted/jsx::Fragment"),w="__jsxNs",qe=(e,t)=>t.length>0?t:Object.prototype.hasOwnProperty.call(e,"children")?[e.children]:[],Ge=(e,t)=>{let n={...e};return t.length===1?n.children=t[0]:t.length>1?n.children=t:delete n.children,n},Ke=e=>{if(!Object.prototype.hasOwnProperty.call(e,w))return;let t=e[w];if(delete e[w],t==="svg"||t===null)return t;throw new Error(`${w} must be "svg" or null when provided.`)},le=({ensureDomAvailable:e,appendChildValue:t,setDomProp:n,isPromiseLike:r})=>{function s(o,a,...c){e();let i=a?{...a}:{},p=qe(i,c);if(o===P){let m=document.createDocumentFragment();return p.forEach(g=>t(m,g)),m}if(typeof o=="function"){let m=o(Ge(i,p));if(r(m))throw new Error("Async jsx components are not supported.");return m}if(typeof o!="string")throw new Error(`Unsupported jsx createElement type: ${String(o)}`);delete i.children;let u=Ke(i)??(o==="svg"?"svg":null),d=u==="svg"?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o);return Object.entries(i).forEach(([m,g])=>{m!=="key"&&n(d,m,g,u);}),p.forEach(m=>t(d,m)),d}return s};var ue=()=>{if(typeof document>"u"||typeof document.createElement!="function")throw new Error("The jsx template tag requires a DOM-like environment (document missing).")},tt=e=>typeof Node>"u"?false:e instanceof Node||e instanceof DocumentFragment,nt=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",rt={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},de=e=>{if(!(!e||e==="html"||e==="svg"))return rt[e]},ot=e=>e==="svg"?svg:html,j=(e,t,n)=>{let r=de(t.space),s=String(n);if(r){e.setAttributeNS(r,t.attribute,s);return}e.setAttribute(t.attribute,s);},me=(e,t)=>{let n=de(t.space);if(n){e.removeAttributeNS(n,t.attribute);return}e.removeAttribute(t.attribute);},M=(e,t)=>Array.isArray(e)?e.filter(Boolean).join(t):e,st=(e,t,n)=>t==="svg"||!n.property||n.property.includes(":")?false:n.property in e,ge=(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 p=n,l=e.style;if(!l)return;let u=l;Object.entries(p).forEach(([d,m])=>{if(m!=null){if(d.startsWith("--")){l.setProperty(d,String(m));return}u[d]=m;}});return}let s=V(t);if(s){let p=z(t,n);if(p){let l=p.options?{...p.options}:void 0;s.capture&&(l?l.capture=true:l={capture:true}),e.addEventListener(s.eventName,p.listener,l);return}}let o=find(ot(r),t),a=e,c=st(e,r,o);if(o.mustUseProperty){let p=o.boolean?!!n:n;a[o.property]=p;return}if(o.boolean){let p=!!n;c&&(a[o.property]=p),p?j(e,o,""):me(e,o);return}let i=n;if(o.spaceSeparated?i=M(n," "):o.commaSeparated?i=M(n,","):o.commaOrSpaceSeparated&&(i=M(n," ")),o.booleanish&&typeof i=="boolean"&&(i=i?"true":"false"),o.overloadedBoolean){if(i===false){me(e,o);return}if(i===true){j(e,o,"");return}}if(c){a[o.property]=i;return}i!==false&&j(e,o,i);},h=(e,t)=>{if(t!=null&&typeof t!="boolean"){if(L(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(nt(t)){for(let n of t)h(e,n);return}if(tt(t)){e.appendChild(t);return}e.appendChild(document.createTextNode(String(t)));}},X=(e,t,n)=>pe(e,t,r=>_(r,t,n)),fe=$({getIdentifierName:J,evaluateExpressionWithNamespace:X}),at=(e,t,n,r)=>{let s=fe(t,n,r);Object.entries(s).forEach(([o,a])=>{if(o!=="key"){if(o==="children"){h(e,a);return}ge(e,o,a,r);}});},O=(e,t,n)=>{let r=[];return e.forEach(s=>{switch(s.type){case "JSXText":{ie(s.value,t.placeholders).forEach(a=>{r.push(a);});break}case "JSXExpressionContainer":{if(s.expression.type==="JSXEmptyExpression")break;r.push(X(s.expression,t,n));break}case "JSXSpreadChild":{let o=X(s.expression,t,n);o!=null&&r.push(o);break}case "JSXElement":case "JSXFragment":{r.push(_(s,t,n));break}}}),r},it=(e,t,n,r)=>{let s=fe(e.openingElement.attributes,t,r),o=O(e.children,t,r);o.length===1?s.children=o[0]:o.length>1&&(s.children=o);let a=n(s);if(L(a))throw new Error("Async jsx components are not supported.");return a},pt=(e,t,n)=>{let r=e.openingElement,s=J(r.name),o=t.components.get(s);if(o)return it(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,c=s==="foreignObject"?null:a,i=a==="svg"?document.createElementNS("http://www.w3.org/2000/svg",s):document.createElement(s);return at(i,r.attributes,t,a),O(e.children,t,c).forEach(l=>h(i,l)),i},_=(e,t,n)=>{if(e.type==="JSXFragment"){let r=document.createDocumentFragment();return O(e.children,t,n).forEach(o=>h(r,o)),r}return pt(e,t,n)},ct=le({ensureDomAvailable:ue,appendChildValue:h,setDomProp:ge,isPromiseLike:L}),lt=(e,...t)=>{ue();let n=ce(e,t),r=parseSync("inline.jsx",n.source,se);if(r.errors.length>0)throw new Error(A("jsx",e,n.diagnostics,r.errors[0]));let s=ae(r.program),o={source:n.source,placeholders:n.placeholders,components:new Map(n.bindings.map(a=>[a.name,a.value]))};return _(s,o,null)},xe=Object.assign(lt,{createElement:ct,Fragment:P});K({mode:"always"});ee();var Ot=xe;
8
8
  export{Ot as jsx};
@@ -1,7 +1,7 @@
1
- import {parseSync}from'oxc-parser';import {createElement,Fragment}from'react';var R=e=>{let r=e.replace(/\r/g,"").replace(/\n\s+/g," "),n=e.match(/^\s*/)?.[0]??"",t=e.match(/\s*$/)?.[0]??"",o=/\n/.test(n),s=/\n/.test(t),a=r;return o&&(a=a.replace(/^\s+/,"")),s&&(a=a.replace(/\s+$/,"")),a.length===0||a.trim().length===0?null:a};var _="oxc-parser",D=e=>{let r=e.raw??e,n=r[0]??"",t=[];for(let o=0;o<r.length-1;o++){let s="${expr#"+o+"}",a=n.length;n+=s;let p=n.length;t.push({index:o,templateStart:a,templateEnd:p,label:s}),n+=r[o+1]??"";}return {source:n,spans:t}},j=(e,r)=>{let n=new Map;return r.forEach(t=>{n.set(t.index,t);}),e.expressionRanges.map(t=>{let o=n.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,r,n)=>{if(!Number.isFinite(e)||e<=0)return 0;let t=0;for(let s of r){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>=n?n:o},w=(e,r)=>{let n=Math.max(0,Math.min(r,e.length)),t=1,o=1;for(let s=0;s<n;s++){if(e.charCodeAt(s)===10){t++,o=1;continue}o++;}return {line:t,column:o}},v=e=>{let r=[],n=0;return e.forEach((t,o)=>{r.push(n),n+=t.length,o<e.length-1&&(n+=1);}),r},B=(e,r,n,t,o,s,a)=>{let p=n+r.length,i=Math.max(t,n),c=Math.min(o,p);if(c>i){let m=Math.max(0,i-n),l=Math.max(1,c-i);return " ".repeat(m)+"^".repeat(l)}if(r.length===0&&e>=s&&e<=a)return "^";if(e===s){let m=Math.max(0,t-n);return " ".repeat(Math.min(m,r.length))+"^"}return ""},z=(e,r,n,t,o)=>{if(!e.length)return "";let s=e.split(`
2
- `),a=v(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 g=s[l-1]??"",u=String(l).padStart(c," ");m.push(`${u} | ${g}`);let d=B(l,g,a[l-1]??0,r,n,t,o);d&&m.push(`${" ".repeat(c)} | ${d}`);}return m.join(`
3
- `)},J=(e,r,n,t,o)=>{let s=_,a=`[${s}] ${t.message}`,p=t.labels?.[0];if(!p)return a;let{source:i,spans:c}=D(r),m=j(n,c),l=y=>L(typeof y=="number"?y:0,m,i.length),g=l(p.start),u=l(p.end);u<=g&&(u=Math.min(i.length,g+1));let d=w(i,g),f=w(i,Math.max(g,u-1)),h=z(i,g,u,d.line,f.line),x=`[${s}] ${t.message}`;return x+=`
4
- --> ${e} template:${d.line}:${d.column}`,p.message&&(x+=`
5
- ${p.message}`),h&&(x+=`
6
- ${h}`),t.helpMessage&&(x+=`
7
- ${t.helpMessage}`),x};var W=/<\s*$/,H=/<\/\s*$/,A="__KX_EXPR__",X=new RegExp(`${A}\\d+_\\d+__`,"g"),U=0;var k={lang:"jsx",sourceType:"module",range:true,preserveParens:true},$=e=>{for(let r of e.body)if(r.type==="ExpressionStatement"){let n=r.expression;if(n.type==="JSXElement"||n.type==="JSXFragment")return n}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 ""}},b=(e,r)=>{if(!e||typeof e!="object")return;let n=e;typeof n.type=="string"&&(r(n),Object.values(n).forEach(t=>{if(t){if(Array.isArray(t)){t.forEach(o=>b(o,r));return}typeof t=="object"&&b(t,r);}}));},M=(e,r)=>{let n=R(e);if(!n)return [];let t=[];X.lastIndex=0;let o=0,s;for(;s=X.exec(n);){let p=s.index,i=n.slice(o,p);i&&t.push(i);let c=s[0];r.has(c)?t.push(r.get(c)):t.push(c),o=p+c.length;}let a=n.slice(o);return a&&t.push(a),t},V=(e,r)=>{let n=new Set;return b(e,t=>{t.type==="Identifier"&&r.placeholders.has(t.name)&&n.add(t.name);}),Array.from(n)},N=(e,r,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[t,o]=e.range,s=r.source.slice(t,o),a=V(e,r);try{let p=new Function(...a,`"use strict"; return (${s});`),i=a.map(c=>r.placeholders.get(c));return p(...i)}catch(p){throw new Error(`Failed to evaluate expression ${s}: ${p.message}`,{cause:p})}},Z=e=>{let r=e.replace(/[^a-zA-Z0-9_$]/g,"");return r?/[A-Za-z_$]/.test(r[0])?r:`Component${r}`:"Component"},G=(e,r,n)=>{let t=n.get(e);if(t)return t;let o=e.displayName||e.name||`Component${r.length}`,s=Z(o??""),a=s,p=1;for(;r.some(c=>c.name===a);)a=`${s}${p++}`;let i={name:a,value:e};return r.push(i),n.set(e,i),i},I=(e,r)=>{let n=e.raw??e,t=new Map,o=[],s=new Map,a=n[0]??"",p=U++,i=0,c=[];for(let m=0;m<r.length;m++){let l=n[m]??"",g=n[m+1]??"",u=r[m],d=W.test(l)||H.test(l),f;if(d&&typeof u=="function")f=G(u,o,s).name;else if(d&&typeof u=="string")f=u;else {let y=`${A}${p}_${i++}__`;t.set(y,u),f=y;}let h=a.length;a+=f;let x=a.length;c.push({index:m,sourceStart:h,sourceEnd:x}),a+=g;}return {source:a,placeholders:t,bindings:o,diagnostics:{expressionRanges:c}}};var Q=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",Y=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",E=(e,r)=>{if(r!=null&&typeof r!="boolean"){if(Y(r))throw new Error("Async values are not supported inside reactJsx template results.");if(Array.isArray(r)){r.forEach(n=>E(e,n));return}if(Q(r)){for(let n of r)E(e,n);return}e.push(r);}},T=(e,r)=>N(e,r,n=>C(n,r)),ee=(e,r)=>{let n={};return e.forEach(t=>{if(t.type==="JSXSpreadAttribute"){let s=T(t.argument,r);s&&typeof s=="object"&&!Array.isArray(s)&&Object.assign(n,s);return}let o=S(t.name);if(!t.value){n[o]=true;return}if(t.value.type==="Literal"){n[o]=t.value.value;return}if(t.value.type==="JSXExpressionContainer"){if(t.value.expression.type==="JSXEmptyExpression")return;n[o]=T(t.value.expression,r);}}),n},O=(e,r)=>{let n=[];return e.forEach(t=>{switch(t.type){case "JSXText":{M(t.value,r.placeholders).forEach(s=>E(n,s));break}case "JSXExpressionContainer":{if(t.expression.type==="JSXEmptyExpression")break;E(n,T(t.expression,r));break}case "JSXSpreadChild":{let o=T(t.expression,r);o!=null&&E(n,o);break}case "JSXElement":case "JSXFragment":{n.push(C(t,r));break}}}),n},F=(e,r,n)=>createElement(e,r,...n),te=(e,r)=>{let n=e.openingElement,t=S(n.name),o=r.components.get(t),s=ee(n.attributes,r),a=O(e.children,r);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)},C=(e,r)=>{if(e.type==="JSXFragment"){let n=O(e.children,r);return createElement(Fragment,null,...n)}return te(e,r)},ne=(e,...r)=>{let n=I(e,r),t=parseSync("inline.jsx",n.source,k);if(t.errors.length>0)throw new Error(J("reactJsx",e,n.diagnostics,t.errors[0]));let o=$(t.program),s={source:n.source,placeholders:n.placeholders,components:new Map(n.bindings.map(a=>[a.name,a.value]))};return C(o,s)};export{ne as reactJsx};
1
+ import {parseSync}from'oxc-parser';import {createElement,Fragment}from'react';var C=e=>{let r=e.replace(/\r/g,"").replace(/\n\s+/g," "),n=e.match(/^\s*/)?.[0]??"",t=e.match(/\s*$/)?.[0]??"",o=/\n/.test(n),s=/\n/.test(t),a=r;return o&&(a=a.replace(/^\s+/,"")),s&&(a=a.replace(/\s+$/,"")),a.length===0||a.trim().length===0?null:a};var _="oxc-parser",D=e=>{let r=e.raw??e,n=r[0]??"",t=[];for(let o=0;o<r.length-1;o++){let s="${expr#"+o+"}",a=n.length;n+=s;let p=n.length;t.push({index:o,templateStart:a,templateEnd:p,label:s}),n+=r[o+1]??"";}return {source:n,spans:t}},j=(e,r)=>{let n=new Map;return r.forEach(t=>{n.set(t.index,t);}),e.expressionRanges.map(t=>{let o=n.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,r,n)=>{if(!Number.isFinite(e)||e<=0)return 0;let t=0;for(let s of r){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>=n?n:o},w=(e,r)=>{let n=Math.max(0,Math.min(r,e.length)),t=1,o=1;for(let s=0;s<n;s++){if(e.charCodeAt(s)===10){t++,o=1;continue}o++;}return {line:t,column:o}},v=e=>{let r=[],n=0;return e.forEach((t,o)=>{r.push(n),n+=t.length,o<e.length-1&&(n+=1);}),r},B=(e,r,n,t,o,s,a)=>{let p=n+r.length,i=Math.max(t,n),c=Math.min(o,p);if(c>i){let m=Math.max(0,i-n),l=Math.max(1,c-i);return " ".repeat(m)+"^".repeat(l)}if(r.length===0&&e>=s&&e<=a)return "^";if(e===s){let m=Math.max(0,t-n);return " ".repeat(Math.min(m,r.length))+"^"}return ""},z=(e,r,n,t,o)=>{if(!e.length)return "";let s=e.split(`
2
+ `),a=v(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 g=s[l-1]??"",u=String(l).padStart(c," ");m.push(`${u} | ${g}`);let x=B(l,g,a[l-1]??0,r,n,t,o);x&&m.push(`${" ".repeat(c)} | ${x}`);}return m.join(`
3
+ `)},J=(e,r,n,t,o)=>{let s=_,a=`[${s}] ${t.message}`,p=t.labels?.[0];if(!p)return a;let{source:i,spans:c}=D(r),m=j(n,c),l=y=>L(typeof y=="number"?y:0,m,i.length),g=l(p.start),u=l(p.end);u<=g&&(u=Math.min(i.length,g+1));let x=w(i,g),f=w(i,Math.max(g,u-1)),h=z(i,g,u,x.line,f.line),d=`[${s}] ${t.message}`;return d+=`
4
+ --> ${e} template:${x.line}:${x.column}`,p.message&&(d+=`
5
+ ${p.message}`),h&&(d+=`
6
+ ${h}`),t.helpMessage&&(d+=`
7
+ ${t.helpMessage}`),d};var W=/<\s*$/,H=/<\/\s*$/,A="__KX_EXPR__",X=new RegExp(`${A}\\d+_\\d+__`,"g"),U=0;var k={lang:"jsx",sourceType:"module",range:true,preserveParens:true},$=e=>{for(let r of e.body)if(r.type==="ExpressionStatement"){let n=r.expression;if(n.type==="JSXElement"||n.type==="JSXFragment")return n}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 ""}},b=(e,r)=>{if(!e||typeof e!="object")return;let n=e;typeof n.type=="string"&&(r(n),Object.values(n).forEach(t=>{if(t){if(Array.isArray(t)){t.forEach(o=>b(o,r));return}typeof t=="object"&&b(t,r);}}));},M=(e,r)=>{let n=C(e);if(!n)return [];let t=[];X.lastIndex=0;let o=0,s;for(;s=X.exec(n);){let p=s.index,i=n.slice(o,p);i&&t.push(i);let c=s[0];r.has(c)?t.push(r.get(c)):t.push(c),o=p+c.length;}let a=n.slice(o);return a&&t.push(a),t},V=(e,r)=>{let n=new Set;return b(e,t=>{t.type==="Identifier"&&r.placeholders.has(t.name)&&n.add(t.name);}),Array.from(n)},N=(e,r,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[t,o]=e.range,s=r.source.slice(t,o),a=V(e,r);try{let p=new Function(...a,`"use strict"; return (${s});`),i=a.map(c=>r.placeholders.get(c));return p(...i)}catch(p){throw new Error(`Failed to evaluate expression ${s}: ${p.message}`,{cause:p})}},Z=e=>{let r=e.replace(/[^a-zA-Z0-9_$]/g,"");return r?/[A-Za-z_$]/.test(r[0])?r:`Component${r}`:"Component"},G=(e,r,n)=>{let t=n.get(e);if(t)return t;let o=e.displayName||e.name||`Component${r.length}`,s=Z(o??""),a=s,p=1;for(;r.some(c=>c.name===a);)a=`${s}${p++}`;let i={name:a,value:e};return r.push(i),n.set(e,i),i},I=(e,r)=>{let n=e.raw??e,t=new Map,o=[],s=new Map,a=n[0]??"",p=U++,i=0,c=[];for(let m=0;m<r.length;m++){let l=n[m]??"",g=n[m+1]??"",u=r[m],x=W.test(l)||H.test(l),f;if(x&&typeof u=="function")f=G(u,o,s).name;else if(x&&typeof u=="string")f=u;else {let y=`${A}${p}_${i++}__`;t.set(y,u),f=y;}let h=a.length;a+=f;let d=a.length;c.push({index:m,sourceStart:h,sourceEnd:d}),a+=g;}return {source:a,placeholders:t,bindings:o,diagnostics:{expressionRanges:c}}};var Q=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",Y=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",E=(e,r)=>{if(r!=null&&typeof r!="boolean"){if(Y(r))throw new Error("Async values are not supported inside reactJsx template results.");if(Array.isArray(r)){r.forEach(n=>E(e,n));return}if(Q(r)){for(let n of r)E(e,n);return}e.push(r);}},T=(e,r)=>N(e,r,n=>R(n,r)),ee=(e,r)=>{let n={};return e.forEach(t=>{if(t.type==="JSXSpreadAttribute"){let s=T(t.argument,r);s&&typeof s=="object"&&!Array.isArray(s)&&Object.assign(n,s);return}let o=S(t.name);if(!t.value){n[o]=true;return}if(t.value.type==="Literal"){n[o]=t.value.value;return}if(t.value.type==="JSXExpressionContainer"){if(t.value.expression.type==="JSXEmptyExpression")return;n[o]=T(t.value.expression,r);}}),n},O=(e,r)=>{let n=[];return e.forEach(t=>{switch(t.type){case "JSXText":{M(t.value,r.placeholders).forEach(s=>E(n,s));break}case "JSXExpressionContainer":{if(t.expression.type==="JSXEmptyExpression")break;E(n,T(t.expression,r));break}case "JSXSpreadChild":{let o=T(t.expression,r);o!=null&&E(n,o);break}case "JSXElement":case "JSXFragment":{n.push(R(t,r));break}}}),n},F=(e,r,n)=>createElement(e,r,...n),te=(e,r)=>{let n=e.openingElement,t=S(n.name),o=r.components.get(t),s=ee(n.attributes,r),a=O(e.children,r);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)},R=(e,r)=>{if(e.type==="JSXFragment"){let n=O(e.children,r);return createElement(Fragment,null,...n)}return te(e,r)},ne=(e,...r)=>{let n=I(e,r),t=parseSync("inline.jsx",n.source,k);if(t.errors.length>0)throw new Error(J("reactJsx",e,n.diagnostics,t.errors[0]));let o=$(t.program),s={source:n.source,placeholders:n.placeholders,components:new Map(n.bindings.map(a=>[a.name,a.value]))};return R(o,s)};export{ne as reactJsx};
@@ -3,4 +3,4 @@ export declare const jsx: {
3
3
  createElement: typeof import("../../jsx.js").createElement;
4
4
  Fragment: import("../../internal/dom-create-element.js").JsxFragmentToken;
5
5
  };
6
- export type { JsxRenderable, JsxComponent } from '../../jsx.js';
6
+ export type { JsxRenderable, JsxChildren, JsxComponent } from '../../jsx.js';
@@ -3,4 +3,4 @@ export declare const jsx: {
3
3
  createElement: typeof import("../jsx.js").createElement;
4
4
  Fragment: import("../internal/dom-create-element.js").JsxFragmentToken;
5
5
  };
6
- export type { JsxRenderable, JsxComponent } from '../jsx.js';
6
+ export type { JsxRenderable, JsxChildren, JsxComponent } from '../jsx.js';
@@ -1,2 +1,2 @@
1
1
  export { reactJsx } from './react-jsx.js';
2
- export type { ReactJsxComponent, ReactJsxDomAttributes, ReactJsxEventHandler, ReactJsxIntrinsicElement, ReactJsxIntrinsicElements, ReactJsxRef, ReactJsxRenderable, } from './react-jsx.js';
2
+ export type { ReactJsxChildren, ReactJsxComponent, ReactJsxDomAttributes, ReactJsxEventHandler, ReactJsxIntrinsicElement, ReactJsxIntrinsicElements, ReactJsxRef, ReactJsxRenderable, } from './react-jsx.js';
@@ -1,6 +1,7 @@
1
1
  import { type ComponentType, type DOMAttributes, type EventHandler, type JSX as ReactJSX, type PropsWithChildren, type ReactElement, type ReactNode, type Ref, type SyntheticEvent } from 'react';
2
2
  export type ReactJsxComponent<Props = Record<string, unknown>> = ComponentType<PropsWithChildren<Props>>;
3
3
  export type ReactJsxRenderable = ReactNode;
4
+ export type ReactJsxChildren = ReactJsxRenderable | ReactJsxRenderable[];
4
5
  export type ReactJsxRef<T> = Ref<T>;
5
6
  export type ReactJsxEventHandler<E extends SyntheticEvent> = EventHandler<E>;
6
7
  export type ReactJsxDomAttributes<T = unknown> = DOMAttributes<T>;
@@ -45,6 +45,7 @@ export type TransformJsxSourceResult = {
45
45
  diagnostics: TransformDiagnostic[];
46
46
  declarations?: TransformTopLevelDeclaration[];
47
47
  hasTopLevelJsxExpression?: boolean;
48
+ topLevelJsxExpressionRange?: SourceRange | null;
48
49
  };
49
50
  export declare function transformJsxSource(source: string, options?: TransformJsxSourceOptions): TransformJsxSourceResult;
50
51
  export {};
package/dist/transform.js CHANGED
@@ -255,26 +255,37 @@ const unwrapExpressionNode = (value) => {
255
255
  }
256
256
  return current;
257
257
  };
258
- const isJsxExpressionNode = (value) => {
258
+ const toJsxExpressionNode = (value) => {
259
259
  const unwrapped = unwrapExpressionNode(value);
260
260
  if (!isObjectRecord(unwrapped) || typeof unwrapped.type !== 'string') {
261
- return false;
261
+ return null;
262
+ }
263
+ if (unwrapped.type === 'JSXElement' || unwrapped.type === 'JSXFragment') {
264
+ return unwrapped;
262
265
  }
263
- return unwrapped.type === 'JSXElement' || unwrapped.type === 'JSXFragment';
266
+ return null;
264
267
  };
268
+ const createEmptyTopLevelJsxExpressionMetadata = () => ({
269
+ hasTopLevelJsxExpression: false,
270
+ topLevelJsxExpressionRange: null,
271
+ });
265
272
  const collectTopLevelJsxExpressionMetadata = (body) => {
266
273
  if (!Array.isArray(body)) {
267
- return false;
274
+ return createEmptyTopLevelJsxExpressionMetadata();
268
275
  }
269
276
  for (const statement of body) {
270
277
  if (!isObjectRecord(statement) || statement.type !== 'ExpressionStatement') {
271
278
  continue;
272
279
  }
273
- if (isJsxExpressionNode(statement.expression)) {
274
- return true;
280
+ const jsxNode = toJsxExpressionNode(statement.expression);
281
+ if (jsxNode) {
282
+ return {
283
+ hasTopLevelJsxExpression: true,
284
+ topLevelJsxExpressionRange: toSourceRange(jsxNode),
285
+ };
275
286
  }
276
287
  }
277
- return false;
288
+ return createEmptyTopLevelJsxExpressionMetadata();
278
289
  };
279
290
  const ensureSupportedOptions = (options) => {
280
291
  if (options.sourceType !== undefined &&
@@ -313,9 +324,11 @@ export function transformJsxSource(source, options = {}) {
313
324
  const declarations = internalOptions.collectTopLevelDeclarations
314
325
  ? collectTopLevelDeclarationMetadata(parsed.program.body)
315
326
  : undefined;
316
- const hasTopLevelJsxExpression = internalOptions.collectTopLevelJsxExpression
327
+ const topLevelJsxExpressionMetadata = internalOptions.collectTopLevelJsxExpression
317
328
  ? collectTopLevelJsxExpressionMetadata(parsed.program.body)
318
329
  : undefined;
330
+ const hasTopLevelJsxExpression = topLevelJsxExpressionMetadata?.hasTopLevelJsxExpression;
331
+ const topLevelJsxExpressionRange = topLevelJsxExpressionMetadata?.topLevelJsxExpressionRange;
319
332
  if (parserDiagnostics.length) {
320
333
  return {
321
334
  code: source,
@@ -324,6 +337,7 @@ export function transformJsxSource(source, options = {}) {
324
337
  diagnostics: parserDiagnostics,
325
338
  declarations,
326
339
  hasTopLevelJsxExpression,
340
+ topLevelJsxExpressionRange,
327
341
  };
328
342
  }
329
343
  const transpileBaseOptions = {
@@ -341,6 +355,7 @@ export function transformJsxSource(source, options = {}) {
341
355
  diagnostics: parserDiagnostics,
342
356
  declarations,
343
357
  hasTopLevelJsxExpression,
358
+ topLevelJsxExpressionRange,
344
359
  };
345
360
  }
346
361
  if (typescriptStripBackend === 'transpile-manual') {
@@ -355,6 +370,7 @@ export function transformJsxSource(source, options = {}) {
355
370
  diagnostics: parserDiagnostics,
356
371
  declarations,
357
372
  hasTopLevelJsxExpression,
373
+ topLevelJsxExpressionRange,
358
374
  };
359
375
  }
360
376
  const transformed = transformSync('transform-jsx-source.tsx', source, {
@@ -374,6 +390,7 @@ export function transformJsxSource(source, options = {}) {
374
390
  diagnostics,
375
391
  declarations,
376
392
  hasTopLevelJsxExpression,
393
+ topLevelJsxExpressionRange,
377
394
  };
378
395
  }
379
396
  const jsxResult = transpileJsxSource(transformed.code, transpileBaseOptions);
@@ -384,5 +401,6 @@ export function transformJsxSource(source, options = {}) {
384
401
  diagnostics,
385
402
  declarations,
386
403
  hasTopLevelJsxExpression,
404
+ topLevelJsxExpressionRange,
387
405
  };
388
406
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knighted/jsx",
3
- "version": "1.12.0",
3
+ "version": "1.13.1",
4
4
  "description": "Runtime JSX tagged template that renders DOM or React trees anywhere with or without a build step.",
5
5
  "keywords": [
6
6
  "jsx runtime",