@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.
- package/dist/cjs/debug/index.d.cts +1 -1
- package/dist/cjs/index.d.cts +1 -1
- package/dist/cjs/internal/jsx-types.d.cts +2 -1
- package/dist/cjs/jsx.d.cts +1 -1
- package/dist/cjs/node/debug/index.d.cts +1 -1
- package/dist/cjs/node/index.d.cts +1 -1
- package/dist/cjs/react/index.d.cts +1 -1
- package/dist/cjs/react/react-jsx.d.cts +1 -0
- package/dist/cjs/transform.cjs +26 -8
- package/dist/cjs/transform.d.cts +1 -0
- package/dist/debug/index.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/internal/jsx-types.d.ts +2 -1
- package/dist/jsx.d.ts +1 -1
- package/dist/lite/node/debug/index.js +5 -5
- package/dist/lite/react/index.js +7 -7
- package/dist/node/debug/index.d.ts +1 -1
- package/dist/node/index.d.ts +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/react-jsx.d.ts +1 -0
- package/dist/transform.d.ts +1 -0
- package/dist/transform.js +26 -8
- package/package.json +1 -1
|
@@ -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';
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -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?:
|
|
5
|
+
children?: JsxChildren;
|
|
5
6
|
}): JsxRenderable;
|
|
6
7
|
displayName?: string;
|
|
7
8
|
};
|
package/dist/cjs/jsx.d.cts
CHANGED
|
@@ -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>;
|
package/dist/cjs/transform.cjs
CHANGED
|
@@ -258,26 +258,37 @@ const unwrapExpressionNode = (value) => {
|
|
|
258
258
|
}
|
|
259
259
|
return current;
|
|
260
260
|
};
|
|
261
|
-
const
|
|
261
|
+
const toJsxExpressionNode = (value) => {
|
|
262
262
|
const unwrapped = unwrapExpressionNode(value);
|
|
263
263
|
if (!isObjectRecord(unwrapped) || typeof unwrapped.type !== 'string') {
|
|
264
|
-
return
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
if (unwrapped.type === 'JSXElement' || unwrapped.type === 'JSXFragment') {
|
|
267
|
+
return unwrapped;
|
|
265
268
|
}
|
|
266
|
-
return
|
|
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
|
|
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
|
-
|
|
277
|
-
|
|
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
|
|
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
|
|
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
|
}
|
package/dist/cjs/transform.d.cts
CHANGED
|
@@ -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/debug/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';
|
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?:
|
|
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);},
|
|
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)),
|
|
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}`),
|
|
6
|
-
${
|
|
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.")},
|
|
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};
|
package/dist/lite/react/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {parseSync}from'oxc-parser';import {createElement,Fragment}from'react';var
|
|
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
|
|
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
|
|
4
|
-
--> ${e} template:${
|
|
5
|
-
${p.message}`),h&&(
|
|
6
|
-
${h}`),t.helpMessage&&(
|
|
7
|
-
${t.helpMessage}`),
|
|
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';
|
package/dist/node/index.d.ts
CHANGED
|
@@ -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';
|
package/dist/react/index.d.ts
CHANGED
|
@@ -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>;
|
package/dist/transform.d.ts
CHANGED
|
@@ -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
|
|
258
|
+
const toJsxExpressionNode = (value) => {
|
|
259
259
|
const unwrapped = unwrapExpressionNode(value);
|
|
260
260
|
if (!isObjectRecord(unwrapped) || typeof unwrapped.type !== 'string') {
|
|
261
|
-
return
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
if (unwrapped.type === 'JSXElement' || unwrapped.type === 'JSXFragment') {
|
|
264
|
+
return unwrapped;
|
|
262
265
|
}
|
|
263
|
-
return
|
|
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
|
|
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
|
-
|
|
274
|
-
|
|
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
|
|
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
|
|
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
|
}
|