@knighted/jsx 1.6.3 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/loader/dom-template-builder.cjs +217 -0
- package/dist/cjs/loader/dom-template-builder.d.cts +12 -0
- package/dist/cjs/loader/helpers/dom-snippets.cjs +149 -0
- package/dist/cjs/loader/helpers/dom-snippets.d.cts +2 -0
- package/dist/cjs/loader/helpers/format-import-specifier.cjs +30 -0
- package/dist/cjs/loader/helpers/format-import-specifier.d.cts +13 -0
- package/dist/cjs/loader/helpers/materialize-slice.cjs +37 -0
- package/dist/cjs/loader/helpers/materialize-slice.d.cts +1 -0
- package/dist/cjs/loader/helpers/parse-range-key.cjs +14 -0
- package/dist/cjs/loader/helpers/parse-range-key.d.cts +1 -0
- package/dist/cjs/loader/helpers/rewrite-imports-without-tags.cjs +62 -0
- package/dist/cjs/loader/helpers/rewrite-imports-without-tags.d.cts +3 -0
- package/dist/cjs/loader/jsx.cjs +32 -33
- package/dist/cjs/loader/jsx.d.cts +1 -1
- package/dist/cjs/loader/modes.cjs +17 -0
- package/dist/cjs/loader/modes.d.cts +3 -0
- package/dist/cjs/runtime/shared.cjs +3 -13
- package/dist/cjs/shared/normalize-text.cjs +22 -0
- package/dist/cjs/shared/normalize-text.d.cts +1 -0
- package/dist/lite/debug/index.js +7 -7
- package/dist/lite/index.js +7 -7
- package/dist/lite/node/debug/index.js +7 -7
- package/dist/lite/node/index.js +7 -7
- package/dist/lite/node/react/index.js +5 -5
- package/dist/lite/react/index.js +5 -5
- package/dist/loader/dom-template-builder.d.ts +12 -0
- package/dist/loader/dom-template-builder.js +213 -0
- package/dist/loader/helpers/dom-snippets.d.ts +2 -0
- package/dist/loader/helpers/dom-snippets.js +146 -0
- package/dist/loader/helpers/format-import-specifier.d.ts +13 -0
- package/dist/loader/helpers/format-import-specifier.js +26 -0
- package/dist/loader/helpers/materialize-slice.d.ts +1 -0
- package/dist/loader/helpers/materialize-slice.js +33 -0
- package/dist/loader/helpers/parse-range-key.d.ts +1 -0
- package/dist/loader/helpers/parse-range-key.js +10 -0
- package/dist/loader/helpers/rewrite-imports-without-tags.d.ts +3 -0
- package/dist/loader/helpers/rewrite-imports-without-tags.js +58 -0
- package/dist/loader/jsx.d.ts +1 -1
- package/dist/loader/jsx.js +28 -29
- package/dist/loader/modes.d.ts +3 -0
- package/dist/loader/modes.js +13 -0
- package/dist/runtime/shared.js +3 -13
- package/dist/shared/normalize-text.d.ts +1 -0
- package/dist/shared/normalize-text.js +18 -0
- package/package.json +2 -2
package/dist/cjs/loader/jsx.cjs
CHANGED
|
@@ -7,6 +7,11 @@ exports.default = jsxLoader;
|
|
|
7
7
|
const magic_string_1 = __importDefault(require("magic-string"));
|
|
8
8
|
const oxc_parser_1 = require("oxc-parser");
|
|
9
9
|
const template_diagnostics_js_1 = require("../internal/template-diagnostics.cjs");
|
|
10
|
+
const dom_template_builder_js_1 = require("./dom-template-builder.cjs");
|
|
11
|
+
const materialize_slice_js_1 = require("./helpers/materialize-slice.cjs");
|
|
12
|
+
const rewrite_imports_without_tags_js_1 = require("./helpers/rewrite-imports-without-tags.cjs");
|
|
13
|
+
const modes_js_1 = require("./modes.cjs");
|
|
14
|
+
const normalize_text_js_1 = require("../shared/normalize-text.cjs");
|
|
10
15
|
const createPlaceholderMap = (placeholders) => new Map(placeholders.map(entry => [entry.marker, entry.code]));
|
|
11
16
|
class ReactTemplateBuilder {
|
|
12
17
|
placeholderMap;
|
|
@@ -223,25 +228,13 @@ const TEMPLATE_PARSER_OPTIONS = {
|
|
|
223
228
|
preserveParens: true,
|
|
224
229
|
};
|
|
225
230
|
const DEFAULT_TAGS = ['jsx', 'reactJsx'];
|
|
226
|
-
const DEFAULT_MODE = 'runtime';
|
|
227
231
|
const WEB_TARGETS = new Set(['web', 'webworker', 'electron-renderer', 'node-webkit']);
|
|
228
232
|
const isWebTarget = (target) => target ? WEB_TARGETS.has(target) : false;
|
|
229
233
|
const HELPER_SNIPPETS = {
|
|
230
234
|
react: `const __jsxReactMergeProps = (...sources) => Object.assign({}, ...sources)
|
|
231
235
|
const __jsxReact = (type, props, ...children) => React.createElement(type, props, ...children)
|
|
232
236
|
`,
|
|
233
|
-
|
|
234
|
-
const parseLoaderMode = (value) => {
|
|
235
|
-
if (typeof value !== 'string') {
|
|
236
|
-
return null;
|
|
237
|
-
}
|
|
238
|
-
switch (value) {
|
|
239
|
-
case 'runtime':
|
|
240
|
-
case 'react':
|
|
241
|
-
return value;
|
|
242
|
-
default:
|
|
243
|
-
return null;
|
|
244
|
-
}
|
|
237
|
+
...dom_template_builder_js_1.DOM_HELPER_SNIPPETS,
|
|
245
238
|
};
|
|
246
239
|
const escapeTemplateChunk = (chunk) => chunk.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\${/g, '\\${');
|
|
247
240
|
const formatParserError = (error) => {
|
|
@@ -418,19 +411,8 @@ const extractJsxRoot = (program) => {
|
|
|
418
411
|
throw new Error('[jsx-loader] Expected the template to contain a single JSX root node.');
|
|
419
412
|
};
|
|
420
413
|
const normalizeJsxTextSegments = (value, placeholders) => {
|
|
421
|
-
const
|
|
422
|
-
|
|
423
|
-
const trailingWhitespace = value.match(/\s*$/)?.[0] ?? '';
|
|
424
|
-
const trimStart = /\n/.test(leadingWhitespace);
|
|
425
|
-
const trimEnd = /\n/.test(trailingWhitespace);
|
|
426
|
-
let normalized = collapsed;
|
|
427
|
-
if (trimStart) {
|
|
428
|
-
normalized = normalized.replace(/^\s+/, '');
|
|
429
|
-
}
|
|
430
|
-
if (trimEnd) {
|
|
431
|
-
normalized = normalized.replace(/\s+$/, '');
|
|
432
|
-
}
|
|
433
|
-
if (normalized.length === 0 || normalized.trim().length === 0) {
|
|
414
|
+
const normalized = (0, normalize_text_js_1.normalizeJsxText)(value);
|
|
415
|
+
if (!normalized) {
|
|
434
416
|
return [];
|
|
435
417
|
}
|
|
436
418
|
const segments = [];
|
|
@@ -479,7 +461,7 @@ const materializeTemplateStrings = (quasis) => {
|
|
|
479
461
|
});
|
|
480
462
|
return templates;
|
|
481
463
|
};
|
|
482
|
-
const buildTemplateSource = (quasis, expressions, source, tag) => {
|
|
464
|
+
const buildTemplateSource = (quasis, expressions, source, tag, replacements) => {
|
|
483
465
|
const placeholderMap = new Map();
|
|
484
466
|
const tagPlaceholderMap = new Map();
|
|
485
467
|
let template = '';
|
|
@@ -538,7 +520,7 @@ const buildTemplateSource = (quasis, expressions, source, tag) => {
|
|
|
538
520
|
const nextValue = nextChunk?.value;
|
|
539
521
|
const rightText = nextValue?.cooked ?? nextValue?.raw ?? '';
|
|
540
522
|
const context = getTemplateExpressionContext(chunk, rightText);
|
|
541
|
-
const code =
|
|
523
|
+
const code = (0, materialize_slice_js_1.materializeSlice)(start, end, source, replacements);
|
|
542
524
|
const marker = registerMarker(code, context.type === 'tag');
|
|
543
525
|
const appendMarker = (wrapper) => {
|
|
544
526
|
const insertion = wrapper ? wrapper(marker) : marker;
|
|
@@ -635,13 +617,15 @@ const transformSource = (source, config, options) => {
|
|
|
635
617
|
const magic = new magic_string_1.default(source);
|
|
636
618
|
let mutated = false;
|
|
637
619
|
const helperKinds = new Set();
|
|
620
|
+
const replacements = new Map();
|
|
621
|
+
const inlineTags = new Set();
|
|
638
622
|
taggedTemplates
|
|
639
623
|
.sort((a, b) => b.node.start - a.node.start)
|
|
640
624
|
.forEach(entry => {
|
|
641
625
|
const { node, tagName } = entry;
|
|
642
|
-
const mode = config.tagModes.get(tagName) ?? DEFAULT_MODE;
|
|
626
|
+
const mode = config.tagModes.get(tagName) ?? modes_js_1.DEFAULT_MODE;
|
|
643
627
|
const quasi = node.quasi;
|
|
644
|
-
const templateSource = buildTemplateSource(quasi.quasis, quasi.expressions, source, tagName);
|
|
628
|
+
const templateSource = buildTemplateSource(quasi.quasis, quasi.expressions, source, tagName, replacements);
|
|
645
629
|
const templateStrings = materializeTemplateStrings(quasi.quasis);
|
|
646
630
|
if (mode === 'runtime') {
|
|
647
631
|
const { code, changed } = transformTemplateLiteral(templateSource.source, config.resourcePath, tagName, templateStrings, templateSource.diagnostics);
|
|
@@ -653,6 +637,7 @@ const transformSource = (source, config, options) => {
|
|
|
653
637
|
const tagSource = source.slice(node.tag.start, node.tag.end);
|
|
654
638
|
const replacement = `${tagSource}\`${restored}\``;
|
|
655
639
|
magic.overwrite(node.start, node.end, replacement);
|
|
640
|
+
replacements.set(`${node.start}:${node.end}`, replacement);
|
|
656
641
|
mutated = true;
|
|
657
642
|
return;
|
|
658
643
|
}
|
|
@@ -660,7 +645,18 @@ const transformSource = (source, config, options) => {
|
|
|
660
645
|
const compiled = compileReactTemplate(templateSource.source, templateSource.placeholders, config.resourcePath, tagName, templateStrings, templateSource.diagnostics);
|
|
661
646
|
helperKinds.add('react');
|
|
662
647
|
magic.overwrite(node.start, node.end, compiled);
|
|
648
|
+
replacements.set(`${node.start}:${node.end}`, compiled);
|
|
663
649
|
mutated = true;
|
|
650
|
+
inlineTags.add(tagName);
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
653
|
+
if (mode === 'dom') {
|
|
654
|
+
const result = (0, dom_template_builder_js_1.compileDomTemplate)(templateSource.source, templateSource.placeholders, config.resourcePath, tagName, templateStrings, templateSource.diagnostics);
|
|
655
|
+
result.helpers.forEach(helper => helperKinds.add(helper));
|
|
656
|
+
magic.overwrite(node.start, node.end, result.code);
|
|
657
|
+
replacements.set(`${node.start}:${node.end}`, result.code);
|
|
658
|
+
mutated = true;
|
|
659
|
+
inlineTags.add(tagName);
|
|
664
660
|
return;
|
|
665
661
|
}
|
|
666
662
|
/* c8 ignore next */
|
|
@@ -668,6 +664,9 @@ const transformSource = (source, config, options) => {
|
|
|
668
664
|
// Modes are validated during option parsing; this fallback guards future extensions.
|
|
669
665
|
throw new Error(`[jsx-loader] Transformation mode "${mode}" not implemented yet for tag "${tagName}".`);
|
|
670
666
|
});
|
|
667
|
+
if ((0, rewrite_imports_without_tags_js_1.rewriteImportsWithoutTags)(ast.program, magic, inlineTags, source)) {
|
|
668
|
+
mutated = true;
|
|
669
|
+
}
|
|
671
670
|
const helperSource = Array.from(helperKinds)
|
|
672
671
|
.map(kind => HELPER_SNIPPETS[kind])
|
|
673
672
|
.filter(Boolean)
|
|
@@ -716,12 +715,12 @@ function jsxLoader(input) {
|
|
|
716
715
|
const configuredTagModes = options.tagModes && typeof options.tagModes === 'object'
|
|
717
716
|
? options.tagModes
|
|
718
717
|
: undefined;
|
|
719
|
-
const userSpecifiedMode = parseLoaderMode(options.mode);
|
|
720
|
-
const defaultMode = userSpecifiedMode ?? DEFAULT_MODE;
|
|
718
|
+
const userSpecifiedMode = (0, modes_js_1.parseLoaderMode)(options.mode);
|
|
719
|
+
const defaultMode = userSpecifiedMode ?? modes_js_1.DEFAULT_MODE;
|
|
721
720
|
const userConfiguredTags = new Set();
|
|
722
721
|
if (configuredTagModes) {
|
|
723
722
|
Object.entries(configuredTagModes).forEach(([tagName, mode]) => {
|
|
724
|
-
const parsed = parseLoaderMode(mode);
|
|
723
|
+
const parsed = (0, modes_js_1.parseLoaderMode)(mode);
|
|
725
724
|
if (!parsed || typeof tagName !== 'string' || !tagName.length) {
|
|
726
725
|
return;
|
|
727
726
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type SourceMap } from 'magic-string';
|
|
2
|
+
import { type LoaderMode } from './modes.cjs';
|
|
2
3
|
type LoaderCallback = (error: Error | null, content?: string, map?: SourceMap | null) => void;
|
|
3
4
|
type LoaderContext<TOptions> = {
|
|
4
5
|
resourcePath: string;
|
|
@@ -7,7 +8,6 @@ type LoaderContext<TOptions> = {
|
|
|
7
8
|
async(): LoaderCallback;
|
|
8
9
|
getOptions?: () => Partial<TOptions>;
|
|
9
10
|
};
|
|
10
|
-
type LoaderMode = 'runtime' | 'react';
|
|
11
11
|
type LoaderOptions = {
|
|
12
12
|
/**
|
|
13
13
|
* Name of the tagged template function. Defaults to `jsx`.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseLoaderMode = exports.DEFAULT_MODE = void 0;
|
|
4
|
+
exports.DEFAULT_MODE = 'runtime';
|
|
5
|
+
const parseLoaderMode = (value) => {
|
|
6
|
+
if (typeof value !== 'string')
|
|
7
|
+
return null;
|
|
8
|
+
switch (value) {
|
|
9
|
+
case 'runtime':
|
|
10
|
+
case 'react':
|
|
11
|
+
case 'dom':
|
|
12
|
+
return value;
|
|
13
|
+
default:
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
exports.parseLoaderMode = parseLoaderMode;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buildTemplate = exports.ensureBinding = exports.sanitizeIdentifier = exports.evaluateExpression = exports.collectPlaceholderNames = exports.normalizeJsxTextSegments = exports.walkAst = exports.getIdentifierName = exports.extractRootNode = exports.parserOptions = exports.formatParserError = exports.placeholderPattern = exports.PLACEHOLDER_PREFIX = exports.formatTaggedTemplateParserError = void 0;
|
|
4
|
+
const normalize_text_js_1 = require("../shared/normalize-text.cjs");
|
|
4
5
|
var template_diagnostics_js_1 = require("../internal/template-diagnostics.cjs");
|
|
5
6
|
Object.defineProperty(exports, "formatTaggedTemplateParserError", { enumerable: true, get: function () { return template_diagnostics_js_1.formatTaggedTemplateParserError; } });
|
|
6
7
|
const OPEN_TAG_RE = /<\s*$/;
|
|
@@ -78,19 +79,8 @@ const walkAst = (node, visitor) => {
|
|
|
78
79
|
};
|
|
79
80
|
exports.walkAst = walkAst;
|
|
80
81
|
const normalizeJsxTextSegments = (value, placeholders) => {
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
const trailingWhitespace = value.match(/\s*$/)?.[0] ?? '';
|
|
84
|
-
const trimStart = /\n/.test(leadingWhitespace);
|
|
85
|
-
const trimEnd = /\n/.test(trailingWhitespace);
|
|
86
|
-
let normalized = collapsed;
|
|
87
|
-
if (trimStart) {
|
|
88
|
-
normalized = normalized.replace(/^\s+/, '');
|
|
89
|
-
}
|
|
90
|
-
if (trimEnd) {
|
|
91
|
-
normalized = normalized.replace(/\s+$/, '');
|
|
92
|
-
}
|
|
93
|
-
if (normalized.length === 0 || normalized.trim().length === 0) {
|
|
82
|
+
const normalized = (0, normalize_text_js_1.normalizeJsxText)(value);
|
|
83
|
+
if (!normalized) {
|
|
94
84
|
return [];
|
|
95
85
|
}
|
|
96
86
|
const segments = [];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeJsxText = void 0;
|
|
4
|
+
const normalizeJsxText = (value) => {
|
|
5
|
+
const collapsed = value.replace(/\r/g, '').replace(/\n\s+/g, ' ');
|
|
6
|
+
const leadingWhitespace = value.match(/^\s*/)?.[0] ?? '';
|
|
7
|
+
const trailingWhitespace = value.match(/\s*$/)?.[0] ?? '';
|
|
8
|
+
const trimStart = /\n/.test(leadingWhitespace);
|
|
9
|
+
const trimEnd = /\n/.test(trailingWhitespace);
|
|
10
|
+
let normalized = collapsed;
|
|
11
|
+
if (trimStart) {
|
|
12
|
+
normalized = normalized.replace(/^\s+/, '');
|
|
13
|
+
}
|
|
14
|
+
if (trimEnd) {
|
|
15
|
+
normalized = normalized.replace(/\s+$/, '');
|
|
16
|
+
}
|
|
17
|
+
if (normalized.length === 0 || normalized.trim().length === 0) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return normalized;
|
|
21
|
+
};
|
|
22
|
+
exports.normalizeJsxText = normalizeJsxText;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const normalizeJsxText: (value: string) => string | null;
|
package/dist/lite/debug/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var
|
|
2
|
-
`),
|
|
3
|
-
`)},k=(e,t,n,r,o)=>{let s=
|
|
4
|
-
--> ${e} template:${g.line}:${g.column}`,
|
|
5
|
-
${
|
|
1
|
+
import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var w=null,$=e=>{w=e;},se=e=>{w?.warnLowercaseEventProp?.(e);},ae=e=>{w?.ensureValidDangerouslySetInnerHTML?.(e);},P=e=>{let{getIdentifierName:t,evaluateExpressionWithNamespace:n}=e;return (r,o,s)=>{let a={},c=(i,p)=>{i==="dangerouslySetInnerHTML"&&ae(p),a[i]=p;};return r.forEach(i=>{if(i.type==="JSXSpreadAttribute"){let l=n(i.argument,o,s);l&&typeof l=="object"&&!Array.isArray(l)&&Object.assign(a,l);return}let p=t(i.name);if(se(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,o,s));}}),a}};var L=null,O=e=>{L=e;},j="Capture",I=e=>e.endsWith(j)?{eventName:e.slice(0,-j.length),capture:true}:{eventName:e,capture:false},_=e=>{if(!e.startsWith("on"))return null;if(e.startsWith("on:")){let r=e.slice(3);if(!r)return null;let o=I(r);return o.eventName?o:null}let t=e.slice(2);if(!t)return null;let n=I(t);return n.eventName?{eventName:n.eventName.toLowerCase(),capture:n.capture}:null},H=e=>!e||typeof e!="object"?false:"handleEvent"in e&&typeof e.handleEvent=="function",ie=e=>{if(!e||typeof e!="object"||!("handler"in e))return false;let t=e.handler;return typeof t=="function"?true:H(t)},pe=(e,t)=>{L?.onInvalidHandler?.(e,t);},F=(e,t)=>{if(typeof t=="function"||H(t))return {listener:t};if(!ie(t))return pe(e,t),null;let n=t,r=n.options?{...n.options}:void 0,o=(s,a)=>{a!=null&&(r||(r={}),r[s]=a);};return o("capture",n.capture),o("once",n.once),o("passive",n.passive),o("signal",n.signal??void 0),{listener:n.handler,options:r}};var ce="@knighted/jsx",B=e=>`${ce}: ${e}`,J=()=>typeof process<"u"&&process.env?.KNIGHTED_JSX_DEBUG==="1",C=e=>{if(e===null)return "null";if(e===void 0)return "undefined";if(typeof e=="function")return e.name?`function ${e.name}`:"function";if(Array.isArray(e))return "array";if(typeof e=="object"){let t=e.constructor;return t&&typeof t.name=="string"&&t.name&&t.name!=="Object"?`${t.name} instance`:"object"}return typeof e},b=e=>new Error(B(e)),W=(e,t=false)=>{!t&&!J()||typeof console<"u"&&typeof console.warn=="function"&&console.warn(B(e));};var le=e=>e>="a"&&e<="z",S="env",A=()=>S==="always"||S==="env"&&J(),me=()=>S==="always",ue={warnLowercaseEventProp(e){if(!A()||!e.startsWith("on")||e.startsWith("on:")||e.length<3)return;let t=e[2]??"";if(!le(t))return;let n=`${e.slice(0,2)}${t.toUpperCase()}${e.slice(3)}`;W(`Use camelCase DOM event props when targeting runtime jsx templates. Received "${e}"; did you mean "${n}"?`,me());},ensureValidDangerouslySetInnerHTML(e){if(!A())return;if(!e||typeof e!="object"||Array.isArray(e))throw b("dangerouslySetInnerHTML expects an object with a string __html field.");let t=e.__html;if(typeof t!="string")throw b(`dangerouslySetInnerHTML.__html must be a string but received ${C(t)}.`)}},de={onInvalidHandler(e,t){if(A())throw b(`The "${e}" prop expects a function, EventListenerObject, or descriptor ({ handler }) but received ${C(t)}.`)}},V=e=>{S=e?.mode,$(ue),O(de);};var z=e=>{let t=e.replace(/\r/g,"").replace(/\n\s+/g," "),n=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"",o=/\n/.test(n),s=/\n/.test(r),a=t;return o&&(a=a.replace(/^\s+/,"")),s&&(a=a.replace(/\s+$/,"")),a.length===0||a.trim().length===0?null:a};var ge="oxc-parser",fe=e=>{let t=e.raw??e,n=t[0]??"",r=[];for(let o=0;o<t.length-1;o++){let s="${expr#"+o+"}",a=n.length;n+=s;let c=n.length;r.push({index:o,templateStart:a,templateEnd:c,label:s}),n+=t[o+1]??"";}return {source:n,spans:r}},xe=(e,t)=>{let n=new Map;return t.forEach(r=>{n.set(r.index,r);}),e.expressionRanges.map(r=>{let o=n.get(r.index);if(!o)return null;let s=Math.max(0,r.sourceEnd-r.sourceStart),a=Math.max(0,o.templateEnd-o.templateStart);return {sourceStart:r.sourceStart,sourceEnd:r.sourceEnd,templateStart:o.templateStart,templateEnd:o.templateEnd,delta:a-s}}).filter(r=>!!r).sort((r,o)=>r.sourceStart-o.sourceStart)},ye=(e,t,n)=>{if(!Number.isFinite(e)||e<=0)return 0;let r=0;for(let s of t){if(e<s.sourceStart)break;if(e<s.sourceEnd){let a=Math.max(0,e-s.sourceStart),c=Math.max(0,s.templateEnd-s.templateStart);if(c===0)return s.templateStart;let i=Math.min(a,Math.max(0,c-1));return s.templateStart+i}r+=s.delta;}let o=e+r;return o<=0?0:o>=n?n:o},U=(e,t)=>{let n=Math.max(0,Math.min(t,e.length)),r=1,o=1;for(let s=0;s<n;s++){if(e.charCodeAt(s)===10){r++,o=1;continue}o++;}return {line:r,column:o}},Ee=e=>{let t=[],n=0;return e.forEach((r,o)=>{t.push(n),n+=r.length,o<e.length-1&&(n+=1);}),t},he=(e,t,n,r,o,s,a)=>{let c=n+t.length,i=Math.max(r,n),p=Math.min(o,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>=s&&e<=a)return "^";if(e===s){let l=Math.max(0,r-n);return " ".repeat(Math.min(l,t.length))+"^"}return ""},be=(e,t,n,r,o)=>{if(!e.length)return "";let s=e.split(`
|
|
2
|
+
`),a=Ee(s),c=Math.max(1,r-1),i=Math.min(s.length,o+1),p=String(i).length,l=[];for(let u=c;u<=i;u++){let d=s[u-1]??"",m=String(u).padStart(p," ");l.push(`${m} | ${d}`);let g=he(u,d,a[u-1]??0,t,n,r,o);g&&l.push(`${" ".repeat(p)} | ${g}`);}return l.join(`
|
|
3
|
+
`)},k=(e,t,n,r,o)=>{let s=ge,a=`[${s}] ${r.message}`,c=r.labels?.[0];if(!c)return a;let{source:i,spans:p}=fe(t),l=xe(n,p),u=y=>ye(typeof y=="number"?y:0,l,i.length),d=u(c.start),m=u(c.end);m<=d&&(m=Math.min(i.length,d+1));let g=U(i,d),x=U(i,Math.max(d,m-1)),h=be(i,d,m,g.line,x.line),f=`[${s}] ${r.message}`;return f+=`
|
|
4
|
+
--> ${e} template:${g.line}:${g.column}`,c.message&&(f+=`
|
|
5
|
+
${c.message}`),h&&(f+=`
|
|
6
6
|
${h}`),r.helpMessage&&(f+=`
|
|
7
|
-
${r.helpMessage}`),f};var
|
|
8
|
-
export{
|
|
7
|
+
${r.helpMessage}`),f};var Se=/<\s*$/,Te=/<\/\s*$/,G="__KX_EXPR__",K=new RegExp(`${G}\\d+_\\d+__`,"g"),we=0;var Z={lang:"jsx",sourceType:"module",range:true,preserveParens:true},q=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.")},T=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${T(e.object)}.${e.property.name}`;default:return ""}},v=(e,t)=>{if(!e||typeof e!="object")return;let n=e;typeof n.type=="string"&&(t(n),Object.values(n).forEach(r=>{if(r){if(Array.isArray(r)){r.forEach(o=>v(o,t));return}typeof r=="object"&&v(r,t);}}));},Q=(e,t)=>{let n=z(e);if(!n)return [];let r=[];K.lastIndex=0;let o=0,s;for(;s=K.exec(n);){let c=s.index,i=n.slice(o,c);i&&r.push(i);let p=s[0];t.has(p)?r.push(t.get(p)):r.push(p),o=c+p.length;}let a=n.slice(o);return a&&r.push(a),r},Je=(e,t)=>{let n=new Set;return v(e,r=>{r.type==="Identifier"&&t.placeholders.has(r.name)&&n.add(r.name);}),Array.from(n)},Y=(e,t,n)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return n(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[r,o]=e.range,s=t.source.slice(r,o),a=Je(e,t);try{let c=new Function(...a,`"use strict"; return (${s});`),i=a.map(p=>t.placeholders.get(p));return c(...i)}catch(c){throw new Error(`Failed to evaluate expression ${s}: ${c.message}`)}},Ce=e=>{let t=e.replace(/[^a-zA-Z0-9_$]/g,"");return t?/[A-Za-z_$]/.test(t[0])?t:`Component${t}`:"Component"},Ae=(e,t,n)=>{let r=n.get(e);if(r)return r;let o=e.displayName||e.name||`Component${t.length}`,s=Ce(o??""),a=s,c=1;for(;t.some(p=>p.name===a);)a=`${s}${c++}`;let i={name:a,value:e};return t.push(i),n.set(e,i),i},ee=(e,t)=>{let n=e.raw??e,r=new Map,o=[],s=new Map,a=n[0]??"",c=we++,i=0,p=[];for(let l=0;l<t.length;l++){let u=n[l]??"",d=n[l+1]??"",m=t[l],g=Se.test(u)||Te.test(u),x;if(g&&typeof m=="function")x=Ae(m,o,s).name;else if(g&&typeof m=="string")x=m;else {let y=`${G}${c}_${i++}__`;r.set(y,m),x=y;}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:o,diagnostics:{expressionRanges:p}}};var Xe=()=>{if(typeof document>"u"||typeof document.createElement!="function")throw new Error("The jsx template tag requires a DOM-like environment (document missing).")},Re=e=>typeof Node>"u"?false:e instanceof Node||e instanceof DocumentFragment,Me=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",ne=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",$e={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},re=e=>{if(!(!e||e==="html"||e==="svg"))return $e[e]},Pe=e=>e==="svg"?svg:html,D=(e,t,n)=>{let r=re(t.space),o=String(n);if(r){e.setAttributeNS(r,t.attribute,o);return}e.setAttribute(t.attribute,o);},te=(e,t)=>{let n=re(t.space);if(n){e.removeAttributeNS(n,t.attribute);return}e.removeAttribute(t.attribute);},N=(e,t)=>Array.isArray(e)?e.filter(Boolean).join(t):e,je=(e,t,n)=>t==="svg"||!n.property||n.property.includes(":")?false:n.property in e,Ie=(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 o=_(t);if(o){let p=F(t,n);if(p){let l=p.options?{...p.options}:void 0;o.capture&&(l?l.capture=true:l={capture:true}),e.addEventListener(o.eventName,p.listener,l);return}}let s=find(Pe(r),t),a=e,c=je(e,r,s);if(s.mustUseProperty){let p=s.boolean?!!n:n;a[s.property]=p;return}if(s.boolean){let p=!!n;c&&(a[s.property]=p),p?D(e,s,""):te(e,s);return}let i=n;if(s.spaceSeparated?i=N(n," "):s.commaSeparated?i=N(n,","):s.commaOrSpaceSeparated&&(i=N(n," ")),s.booleanish&&typeof i=="boolean"&&(i=i?"true":"false"),s.overloadedBoolean){if(i===false){te(e,s);return}if(i===true){D(e,s,"");return}}if(c){a[s.property]=i;return}i!==false&&D(e,s,i);},E=(e,t)=>{if(t!=null&&typeof t!="boolean"){if(ne(t))throw new Error("Async values are not supported inside jsx template results.");if(Array.isArray(t)){t.forEach(n=>E(e,n));return}if(Me(t)){for(let n of t)E(e,n);return}if(Re(t)){e.appendChild(t);return}e.appendChild(document.createTextNode(String(t)));}},X=(e,t,n)=>Y(e,t,r=>M(r,t,n)),oe=P({getIdentifierName:T,evaluateExpressionWithNamespace:X}),Le=(e,t,n,r)=>{let o=oe(t,n,r);Object.entries(o).forEach(([s,a])=>{if(s!=="key"){if(s==="children"){E(e,a);return}Ie(e,s,a,r);}});},R=(e,t,n)=>{let r=[];return e.forEach(o=>{switch(o.type){case "JSXText":{Q(o.value,t.placeholders).forEach(a=>{r.push(a);});break}case "JSXExpressionContainer":{if(o.expression.type==="JSXEmptyExpression")break;r.push(X(o.expression,t,n));break}case "JSXSpreadChild":{let s=X(o.expression,t,n);s!=null&&r.push(s);break}case "JSXElement":case "JSXFragment":{r.push(M(o,t,n));break}}}),r},Oe=(e,t,n,r)=>{let o=oe(e.openingElement.attributes,t,r),s=R(e.children,t,r);s.length===1?o.children=s[0]:s.length>1&&(o.children=s);let a=n(o);if(ne(a))throw new Error("Async jsx components are not supported.");return a},_e=(e,t,n)=>{let r=e.openingElement,o=T(r.name),s=t.components.get(o);if(s)return Oe(e,t,s,n);if(/[A-Z]/.test(o[0]??""))throw new Error(`Unknown component "${o}". Did you interpolate it with the template literal?`);let a=o==="svg"?"svg":n,c=o==="foreignObject"?null:a,i=a==="svg"?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o);return Le(i,r.attributes,t,a),R(e.children,t,c).forEach(l=>E(i,l)),i},M=(e,t,n)=>{if(e.type==="JSXFragment"){let r=document.createDocumentFragment();return R(e.children,t,n).forEach(s=>E(r,s)),r}return _e(e,t,n)},He=(e,...t)=>{Xe();let n=ee(e,t),r=parseSync("inline.jsx",n.source,Z);if(r.errors.length>0)throw new Error(k("jsx",e,n.diagnostics,r.errors[0]));let o=q(r.program),s={source:n.source,placeholders:n.placeholders,components:new Map(n.bindings.map(a=>[a.name,a.value]))};return M(o,s,null)};V({mode:"always"});
|
|
8
|
+
export{He as jsx};
|
package/dist/lite/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var
|
|
2
|
-
`),
|
|
3
|
-
`)},S=(e,n,t,r,o)=>{let s=
|
|
4
|
-
--> ${e} template:${g.line}:${g.column}`,
|
|
5
|
-
${
|
|
1
|
+
import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var N=e=>{let n=e.replace(/\r/g,"").replace(/\n\s+/g," "),t=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"",o=/\n/.test(t),s=/\n/.test(r),a=n;return o&&(a=a.replace(/^\s+/,"")),s&&(a=a.replace(/\s+$/,"")),a.length===0||a.trim().length===0?null:a};var K="oxc-parser",Z=e=>{let n=e.raw??e,t=n[0]??"",r=[];for(let o=0;o<n.length-1;o++){let s="${expr#"+o+"}",a=t.length;t+=s;let c=t.length;r.push({index:o,templateStart:a,templateEnd:c,label:s}),t+=n[o+1]??"";}return {source:t,spans:r}},G=(e,n)=>{let t=new Map;return n.forEach(r=>{t.set(r.index,r);}),e.expressionRanges.map(r=>{let o=t.get(r.index);if(!o)return null;let s=Math.max(0,r.sourceEnd-r.sourceStart),a=Math.max(0,o.templateEnd-o.templateStart);return {sourceStart:r.sourceStart,sourceEnd:r.sourceEnd,templateStart:o.templateStart,templateEnd:o.templateEnd,delta:a-s}}).filter(r=>!!r).sort((r,o)=>r.sourceStart-o.sourceStart)},q=(e,n,t)=>{if(!Number.isFinite(e)||e<=0)return 0;let r=0;for(let s of n){if(e<s.sourceStart)break;if(e<s.sourceEnd){let a=Math.max(0,e-s.sourceStart),c=Math.max(0,s.templateEnd-s.templateStart);if(c===0)return s.templateStart;let i=Math.min(a,Math.max(0,c-1));return s.templateStart+i}r+=s.delta;}let o=e+r;return o<=0?0:o>=t?t:o},v=(e,n)=>{let t=Math.max(0,Math.min(n,e.length)),r=1,o=1;for(let s=0;s<t;s++){if(e.charCodeAt(s)===10){r++,o=1;continue}o++;}return {line:r,column:o}},Q=e=>{let n=[],t=0;return e.forEach((r,o)=>{n.push(t),t+=r.length,o<e.length-1&&(t+=1);}),n},Y=(e,n,t,r,o,s,a)=>{let c=t+n.length,i=Math.max(r,t),p=Math.min(o,c);if(p>i){let l=Math.max(0,i-t),u=Math.max(1,p-i);return " ".repeat(l)+"^".repeat(u)}if(n.length===0&&e>=s&&e<=a)return "^";if(e===s){let l=Math.max(0,r-t);return " ".repeat(Math.min(l,n.length))+"^"}return ""},ee=(e,n,t,r,o)=>{if(!e.length)return "";let s=e.split(`
|
|
2
|
+
`),a=Q(s),c=Math.max(1,r-1),i=Math.min(s.length,o+1),p=String(i).length,l=[];for(let u=c;u<=i;u++){let d=s[u-1]??"",m=String(u).padStart(p," ");l.push(`${m} | ${d}`);let g=Y(u,d,a[u-1]??0,n,t,r,o);g&&l.push(`${" ".repeat(p)} | ${g}`);}return l.join(`
|
|
3
|
+
`)},S=(e,n,t,r,o)=>{let s=K,a=`[${s}] ${r.message}`,c=r.labels?.[0];if(!c)return a;let{source:i,spans:p}=Z(n),l=G(t,p),u=y=>q(typeof y=="number"?y:0,l,i.length),d=u(c.start),m=u(c.end);m<=d&&(m=Math.min(i.length,d+1));let g=v(i,d),x=v(i,Math.max(d,m-1)),h=ee(i,d,m,g.line,x.line),f=`[${s}] ${r.message}`;return f+=`
|
|
4
|
+
--> ${e} template:${g.line}:${g.column}`,c.message&&(f+=`
|
|
5
|
+
${c.message}`),h&&(f+=`
|
|
6
6
|
${h}`),r.helpMessage&&(f+=`
|
|
7
|
-
${r.helpMessage}`),f};var
|
|
8
|
-
export{
|
|
7
|
+
${r.helpMessage}`),f};var te=/<\s*$/,ne=/<\/\s*$/,R="__KX_EXPR__",X=new RegExp(`${R}\\d+_\\d+__`,"g"),re=0;var P={lang:"jsx",sourceType:"module",range:true,preserveParens:true},M=e=>{for(let n of e.body)if(n.type==="ExpressionStatement"){let t=n.expression;if(t.type==="JSXElement"||t.type==="JSXFragment")return t}throw new Error("The jsx template must contain a single JSX element or fragment.")},b=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${b(e.object)}.${e.property.name}`;default:return ""}},T=(e,n)=>{if(!e||typeof e!="object")return;let t=e;typeof t.type=="string"&&(n(t),Object.values(t).forEach(r=>{if(r){if(Array.isArray(r)){r.forEach(o=>T(o,n));return}typeof r=="object"&&T(r,n);}}));},D=(e,n)=>{let t=N(e);if(!t)return [];let r=[];X.lastIndex=0;let o=0,s;for(;s=X.exec(t);){let c=s.index,i=t.slice(o,c);i&&r.push(i);let p=s[0];n.has(p)?r.push(n.get(p)):r.push(p),o=c+p.length;}let a=t.slice(o);return a&&r.push(a),r},oe=(e,n)=>{let t=new Set;return T(e,r=>{r.type==="Identifier"&&n.placeholders.has(r.name)&&t.add(r.name);}),Array.from(t)},I=(e,n,t)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return t(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[r,o]=e.range,s=n.source.slice(r,o),a=oe(e,n);try{let c=new Function(...a,`"use strict"; return (${s});`),i=a.map(p=>n.placeholders.get(p));return c(...i)}catch(c){throw new Error(`Failed to evaluate expression ${s}: ${c.message}`)}},se=e=>{let n=e.replace(/[^a-zA-Z0-9_$]/g,"");return n?/[A-Za-z_$]/.test(n[0])?n:`Component${n}`:"Component"},ae=(e,n,t)=>{let r=t.get(e);if(r)return r;let o=e.displayName||e.name||`Component${n.length}`,s=se(o??""),a=s,c=1;for(;n.some(p=>p.name===a);)a=`${s}${c++}`;let i={name:a,value:e};return n.push(i),t.set(e,i),i},L=(e,n)=>{let t=e.raw??e,r=new Map,o=[],s=new Map,a=t[0]??"",c=re++,i=0,p=[];for(let l=0;l<n.length;l++){let u=t[l]??"",d=t[l+1]??"",m=n[l],g=te.test(u)||ne.test(u),x;if(g&&typeof m=="function")x=ae(m,o,s).name;else if(g&&typeof m=="string")x=m;else {let y=`${R}${c}_${i++}__`;r.set(y,m),x=y;}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:o,diagnostics:{expressionRanges:p}}};var $=e=>{let{getIdentifierName:n,evaluateExpressionWithNamespace:t}=e;return (r,o,s)=>{let a={},c=(i,p)=>{a[i]=p;};return r.forEach(i=>{if(i.type==="JSXSpreadAttribute"){let l=t(i.argument,o,s);l&&typeof l=="object"&&!Array.isArray(l)&&Object.assign(a,l);return}let p=n(i.name);if(!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,t(i.value.expression,o,s));}}),a}};var O="Capture",F=e=>e.endsWith(O)?{eventName:e.slice(0,-O.length),capture:true}:{eventName:e,capture:false},_=e=>{if(!e.startsWith("on"))return null;if(e.startsWith("on:")){let r=e.slice(3);if(!r)return null;let o=F(r);return o.eventName?o:null}let n=e.slice(2);if(!n)return null;let t=F(n);return t.eventName?{eventName:t.eventName.toLowerCase(),capture:t.capture}:null},H=e=>!e||typeof e!="object"?false:"handleEvent"in e&&typeof e.handleEvent=="function",le=e=>{if(!e||typeof e!="object"||!("handler"in e))return false;let n=e.handler;return typeof n=="function"?true:H(n)},B=(e,n)=>{if(typeof n=="function"||H(n))return {listener:n};if(!le(n))return null;let t=n,r=t.options?{...t.options}:void 0,o=(s,a)=>{a!=null&&(r||(r={}),r[s]=a);};return o("capture",t.capture),o("once",t.once),o("passive",t.passive),o("signal",t.signal??void 0),{listener:t.handler,options:r}};var xe=()=>{if(typeof document>"u"||typeof document.createElement!="function")throw new Error("The jsx template tag requires a DOM-like environment (document missing).")},ye=e=>typeof Node>"u"?false:e instanceof Node||e instanceof DocumentFragment,Ee=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",V=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",he={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},z=e=>{if(!(!e||e==="html"||e==="svg"))return he[e]},be=e=>e==="svg"?svg:html,w=(e,n,t)=>{let r=z(n.space),o=String(t);if(r){e.setAttributeNS(r,n.attribute,o);return}e.setAttribute(n.attribute,o);},W=(e,n)=>{let t=z(n.space);if(t){e.removeAttributeNS(t,n.attribute);return}e.removeAttribute(n.attribute);},C=(e,n)=>Array.isArray(e)?e.filter(Boolean).join(n):e,Se=(e,n,t)=>n==="svg"||!t.property||t.property.includes(":")?false:t.property in e,Te=(e,n,t,r)=>{if(t==null)return;if(n==="dangerouslySetInnerHTML"&&typeof t=="object"&&t&&"__html"in t){e.innerHTML=String(t.__html??"");return}if(n==="ref"){if(typeof t=="function"){t(e);return}if(t&&typeof t=="object"){t.current=e;return}}if(n==="style"&&typeof t=="object"&&t!==null){let p=t,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 o=_(n);if(o){let p=B(n,t);if(p){let l=p.options?{...p.options}:void 0;o.capture&&(l?l.capture=true:l={capture:true}),e.addEventListener(o.eventName,p.listener,l);return}}let s=find(be(r),n),a=e,c=Se(e,r,s);if(s.mustUseProperty){let p=s.boolean?!!t:t;a[s.property]=p;return}if(s.boolean){let p=!!t;c&&(a[s.property]=p),p?w(e,s,""):W(e,s);return}let i=t;if(s.spaceSeparated?i=C(t," "):s.commaSeparated?i=C(t,","):s.commaOrSpaceSeparated&&(i=C(t," ")),s.booleanish&&typeof i=="boolean"&&(i=i?"true":"false"),s.overloadedBoolean){if(i===false){W(e,s);return}if(i===true){w(e,s,"");return}}if(c){a[s.property]=i;return}i!==false&&w(e,s,i);},E=(e,n)=>{if(n!=null&&typeof n!="boolean"){if(V(n))throw new Error("Async values are not supported inside jsx template results.");if(Array.isArray(n)){n.forEach(t=>E(e,t));return}if(Ee(n)){for(let t of n)E(e,t);return}if(ye(n)){e.appendChild(n);return}e.appendChild(document.createTextNode(String(n)));}},J=(e,n,t)=>I(e,n,r=>k(r,n,t)),U=$({getIdentifierName:b,evaluateExpressionWithNamespace:J}),we=(e,n,t,r)=>{let o=U(n,t,r);Object.entries(o).forEach(([s,a])=>{if(s!=="key"){if(s==="children"){E(e,a);return}Te(e,s,a,r);}});},A=(e,n,t)=>{let r=[];return e.forEach(o=>{switch(o.type){case "JSXText":{D(o.value,n.placeholders).forEach(a=>{r.push(a);});break}case "JSXExpressionContainer":{if(o.expression.type==="JSXEmptyExpression")break;r.push(J(o.expression,n,t));break}case "JSXSpreadChild":{let s=J(o.expression,n,t);s!=null&&r.push(s);break}case "JSXElement":case "JSXFragment":{r.push(k(o,n,t));break}}}),r},Ce=(e,n,t,r)=>{let o=U(e.openingElement.attributes,n,r),s=A(e.children,n,r);s.length===1?o.children=s[0]:s.length>1&&(o.children=s);let a=t(o);if(V(a))throw new Error("Async jsx components are not supported.");return a},Je=(e,n,t)=>{let r=e.openingElement,o=b(r.name),s=n.components.get(o);if(s)return Ce(e,n,s,t);if(/[A-Z]/.test(o[0]??""))throw new Error(`Unknown component "${o}". Did you interpolate it with the template literal?`);let a=o==="svg"?"svg":t,c=o==="foreignObject"?null:a,i=a==="svg"?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o);return we(i,r.attributes,n,a),A(e.children,n,c).forEach(l=>E(i,l)),i},k=(e,n,t)=>{if(e.type==="JSXFragment"){let r=document.createDocumentFragment();return A(e.children,n,t).forEach(s=>E(r,s)),r}return Je(e,n,t)},Ae=(e,...n)=>{xe();let t=L(e,n),r=parseSync("inline.jsx",t.source,P);if(r.errors.length>0)throw new Error(S("jsx",e,t.diagnostics,r.errors[0]));let o=M(r.program),s={source:t.source,placeholders:t.placeholders,components:new Map(t.bindings.map(a=>[a.name,a.value]))};return k(o,s,null)};
|
|
8
|
+
export{Ae as jsx};
|
|
@@ -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;},
|
|
2
|
-
`),
|
|
3
|
-
`)},v=(e,t,n,r,o)=>{let s=
|
|
4
|
-
--> ${e} template:${f.line}:${f.column}`,
|
|
5
|
-
${
|
|
1
|
+
import {createRequire}from'module';import {parseSync}from'oxc-parser';import {find,svg,html}from'property-information';var T=null,I=e=>{T=e;},ue=e=>{T?.warnLowercaseEventProp?.(e);},de=e=>{T?.ensureValidDangerouslySetInnerHTML?.(e);},P=e=>{let{getIdentifierName:t,evaluateExpressionWithNamespace:n}=e;return (r,o,s)=>{let a={},c=(i,p)=>{i==="dangerouslySetInnerHTML"&&de(p),a[i]=p;};return r.forEach(i=>{if(i.type==="JSXSpreadAttribute"){let l=n(i.argument,o,s);l&&typeof l=="object"&&!Array.isArray(l)&&Object.assign(a,l);return}let p=t(i.name);if(ue(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,o,s));}}),a}};var _=null,H=e=>{_=e;},$="Capture",O=e=>e.endsWith($)?{eventName:e.slice(0,-$.length),capture:true}:{eventName:e,capture:false},F=e=>{if(!e.startsWith("on"))return null;if(e.startsWith("on:")){let r=e.slice(3);if(!r)return null;let o=O(r);return o.eventName?o:null}let t=e.slice(2);if(!t)return null;let n=O(t);return n.eventName?{eventName:n.eventName.toLowerCase(),capture:n.capture}:null},W=e=>!e||typeof e!="object"?false:"handleEvent"in e&&typeof e.handleEvent=="function",fe=e=>{if(!e||typeof e!="object"||!("handler"in e))return false;let t=e.handler;return typeof t=="function"?true:W(t)},ge=(e,t)=>{_?.onInvalidHandler?.(e,t);},B=(e,t)=>{if(typeof t=="function"||W(t))return {listener:t};if(!fe(t))return ge(e,t),null;let n=t,r=n.options?{...n.options}:void 0,o=(s,a)=>{a!=null&&(r||(r={}),r[s]=a);};return o("capture",n.capture),o("once",n.once),o("passive",n.passive),o("signal",n.signal??void 0),{listener:n.handler,options:r}};var xe="@knighted/jsx",V=e=>`${xe}: ${e}`,J=()=>typeof process<"u"&&process.env?.KNIGHTED_JSX_DEBUG==="1",C=e=>{if(e===null)return "null";if(e===void 0)return "undefined";if(typeof e=="function")return e.name?`function ${e.name}`:"function";if(Array.isArray(e))return "array";if(typeof e=="object"){let t=e.constructor;return t&&typeof t.name=="string"&&t.name&&t.name!=="Object"?`${t.name} instance`:"object"}return typeof e},b=e=>new Error(V(e)),U=(e,t=false)=>{!t&&!J()||typeof console<"u"&&typeof console.warn=="function"&&console.warn(V(e));};var ye=e=>e>="a"&&e<="z",S="env",k=()=>S==="always"||S==="env"&&J(),he=()=>S==="always",Ee={warnLowercaseEventProp(e){if(!k()||!e.startsWith("on")||e.startsWith("on:")||e.length<3)return;let t=e[2]??"";if(!ye(t))return;let n=`${e.slice(0,2)}${t.toUpperCase()}${e.slice(3)}`;U(`Use camelCase DOM event props when targeting runtime jsx templates. Received "${e}"; did you mean "${n}"?`,he());},ensureValidDangerouslySetInnerHTML(e){if(!k())return;if(!e||typeof e!="object"||Array.isArray(e))throw b("dangerouslySetInnerHTML expects an object with a string __html field.");let t=e.__html;if(typeof t!="string")throw b(`dangerouslySetInnerHTML.__html must be a string but received ${C(t)}.`)}},be={onInvalidHandler(e,t){if(k())throw b(`The "${e}" prop expects a function, EventListenerObject, or descriptor ({ handler }) but received ${C(t)}.`)}},z=e=>{S=e?.mode,I(Ee),H(be);};var we=createRequire(import.meta.url),K=()=>we,q="<!doctype html><html><body></body></html>",Je=["window","self","document","HTMLElement","Element","Node","DocumentFragment","customElements","Text","Comment","MutationObserver","navigator"],Ce=()=>typeof document<"u"&&typeof document.createElement=="function",ke=e=>{let t=globalThis,n=e;Je.forEach(r=>{t[r]===void 0&&n[r]!==void 0&&(t[r]=n[r]);});},D=()=>{let{parseHTML:e}=K()("linkedom"),{window:t}=e(q);return t},A=()=>{let{JSDOM:e}=K()("jsdom"),{window:t}=new e(q);return t},De=()=>{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"},Ae=()=>{let e=De();return e==="linkedom"?[D,A]:e==="jsdom"?[A,D]:[D,A]},ve=()=>{let e=[];for(let n of Ae())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)},G=false,Z=()=>{if(Ce()||G)return;let e=ve();ke(e),G=true;};var Y=e=>{let t=e.replace(/\r/g,"").replace(/\n\s+/g," "),n=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"",o=/\n/.test(n),s=/\n/.test(r),a=t;return o&&(a=a.replace(/^\s+/,"")),s&&(a=a.replace(/\s+$/,"")),a.length===0||a.trim().length===0?null:a};var Ne="oxc-parser",Me=e=>{let t=e.raw??e,n=t[0]??"",r=[];for(let o=0;o<t.length-1;o++){let s="${expr#"+o+"}",a=n.length;n+=s;let c=n.length;r.push({index:o,templateStart:a,templateEnd:c,label:s}),n+=t[o+1]??"";}return {source:n,spans:r}},Re=(e,t)=>{let n=new Map;return t.forEach(r=>{n.set(r.index,r);}),e.expressionRanges.map(r=>{let o=n.get(r.index);if(!o)return null;let s=Math.max(0,r.sourceEnd-r.sourceStart),a=Math.max(0,o.templateEnd-o.templateStart);return {sourceStart:r.sourceStart,sourceEnd:r.sourceEnd,templateStart:o.templateStart,templateEnd:o.templateEnd,delta:a-s}}).filter(r=>!!r).sort((r,o)=>r.sourceStart-o.sourceStart)},Xe=(e,t,n)=>{if(!Number.isFinite(e)||e<=0)return 0;let r=0;for(let s of t){if(e<s.sourceStart)break;if(e<s.sourceEnd){let a=Math.max(0,e-s.sourceStart),c=Math.max(0,s.templateEnd-s.templateStart);if(c===0)return s.templateStart;let i=Math.min(a,Math.max(0,c-1));return s.templateStart+i}r+=s.delta;}let o=e+r;return o<=0?0:o>=n?n:o},Q=(e,t)=>{let n=Math.max(0,Math.min(t,e.length)),r=1,o=1;for(let s=0;s<n;s++){if(e.charCodeAt(s)===10){r++,o=1;continue}o++;}return {line:r,column:o}},Le=e=>{let t=[],n=0;return e.forEach((r,o)=>{t.push(n),n+=r.length,o<e.length-1&&(n+=1);}),t},je=(e,t,n,r,o,s,a)=>{let c=n+t.length,i=Math.max(r,n),p=Math.min(o,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>=s&&e<=a)return "^";if(e===s){let l=Math.max(0,r-n);return " ".repeat(Math.min(l,t.length))+"^"}return ""},Ie=(e,t,n,r,o)=>{if(!e.length)return "";let s=e.split(`
|
|
2
|
+
`),a=Le(s),c=Math.max(1,r-1),i=Math.min(s.length,o+1),p=String(i).length,l=[];for(let u=c;u<=i;u++){let d=s[u-1]??"",m=String(u).padStart(p," ");l.push(`${m} | ${d}`);let f=je(u,d,a[u-1]??0,t,n,r,o);f&&l.push(`${" ".repeat(p)} | ${f}`);}return l.join(`
|
|
3
|
+
`)},v=(e,t,n,r,o)=>{let s=Ne,a=`[${s}] ${r.message}`,c=r.labels?.[0];if(!c)return a;let{source:i,spans:p}=Me(t),l=Re(n,p),u=y=>Xe(typeof y=="number"?y:0,l,i.length),d=u(c.start),m=u(c.end);m<=d&&(m=Math.min(i.length,d+1));let f=Q(i,d),x=Q(i,Math.max(d,m-1)),E=Ie(i,d,m,f.line,x.line),g=`[${s}] ${r.message}`;return g+=`
|
|
4
|
+
--> ${e} template:${f.line}:${f.column}`,c.message&&(g+=`
|
|
5
|
+
${c.message}`),E&&(g+=`
|
|
6
6
|
${E}`),r.helpMessage&&(g+=`
|
|
7
|
-
${r.helpMessage}`),g};var
|
|
8
|
-
export{
|
|
7
|
+
${r.helpMessage}`),g};var Pe=/<\s*$/,$e=/<\/\s*$/,te="__KX_EXPR__",ee=new RegExp(`${te}\\d+_\\d+__`,"g"),Oe=0;var ne={lang:"jsx",sourceType:"module",range:true,preserveParens:true},re=e=>{for(let t of e.body)if(t.type==="ExpressionStatement"){let n=t.expression;if(n.type==="JSXElement"||n.type==="JSXFragment")return n}throw new Error("The jsx template must contain a single JSX element or fragment.")},w=e=>{switch(e.type){case "JSXIdentifier":return e.name;case "JSXNamespacedName":return `${e.namespace.name}:${e.name.name}`;case "JSXMemberExpression":return `${w(e.object)}.${e.property.name}`;default:return ""}},N=(e,t)=>{if(!e||typeof e!="object")return;let n=e;typeof n.type=="string"&&(t(n),Object.values(n).forEach(r=>{if(r){if(Array.isArray(r)){r.forEach(o=>N(o,t));return}typeof r=="object"&&N(r,t);}}));},oe=(e,t)=>{let n=Y(e);if(!n)return [];let r=[];ee.lastIndex=0;let o=0,s;for(;s=ee.exec(n);){let c=s.index,i=n.slice(o,c);i&&r.push(i);let p=s[0];t.has(p)?r.push(t.get(p)):r.push(p),o=c+p.length;}let a=n.slice(o);return a&&r.push(a),r},_e=(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)},se=(e,t,n)=>{if(e.type==="JSXElement"||e.type==="JSXFragment")return n(e);if(!("range"in e)||!e.range)throw new Error("Unable to evaluate expression: missing source range information.");let[r,o]=e.range,s=t.source.slice(r,o),a=_e(e,t);try{let c=new Function(...a,`"use strict"; return (${s});`),i=a.map(p=>t.placeholders.get(p));return c(...i)}catch(c){throw new Error(`Failed to evaluate expression ${s}: ${c.message}`)}},He=e=>{let t=e.replace(/[^a-zA-Z0-9_$]/g,"");return t?/[A-Za-z_$]/.test(t[0])?t:`Component${t}`:"Component"},Fe=(e,t,n)=>{let r=n.get(e);if(r)return r;let o=e.displayName||e.name||`Component${t.length}`,s=He(o??""),a=s,c=1;for(;t.some(p=>p.name===a);)a=`${s}${c++}`;let i={name:a,value:e};return t.push(i),n.set(e,i),i},ae=(e,t)=>{let n=e.raw??e,r=new Map,o=[],s=new Map,a=n[0]??"",c=Oe++,i=0,p=[];for(let l=0;l<t.length;l++){let u=n[l]??"",d=n[l+1]??"",m=t[l],f=Pe.test(u)||$e.test(u),x;if(f&&typeof m=="function")x=Fe(m,o,s).name;else if(f&&typeof m=="string")x=m;else {let y=`${te}${c}_${i++}__`;r.set(y,m),x=y;}let E=a.length;a+=x;let g=a.length;p.push({index:l,sourceStart:E,sourceEnd:g}),a+=d;}return {source:a,placeholders:r,bindings:o,diagnostics:{expressionRanges:p}}};var ze=()=>{if(typeof document>"u"||typeof document.createElement!="function")throw new Error("The jsx template tag requires a DOM-like environment (document missing).")},Ge=e=>typeof Node>"u"?false:e instanceof Node||e instanceof DocumentFragment,Ke=e=>!e||typeof e=="string"?false:typeof e[Symbol.iterator]=="function",pe=e=>!e||typeof e!="object"&&typeof e!="function"?false:typeof e.then=="function",qe={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},ce=e=>{if(!(!e||e==="html"||e==="svg"))return qe[e]},Ze=e=>e==="svg"?svg:html,M=(e,t,n)=>{let r=ce(t.space),o=String(n);if(r){e.setAttributeNS(r,t.attribute,o);return}e.setAttribute(t.attribute,o);},ie=(e,t)=>{let n=ce(t.space);if(n){e.removeAttributeNS(n,t.attribute);return}e.removeAttribute(t.attribute);},R=(e,t)=>Array.isArray(e)?e.filter(Boolean).join(t):e,Ye=(e,t,n)=>t==="svg"||!n.property||n.property.includes(":")?false:n.property in e,Qe=(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 o=F(t);if(o){let p=B(t,n);if(p){let l=p.options?{...p.options}:void 0;o.capture&&(l?l.capture=true:l={capture:true}),e.addEventListener(o.eventName,p.listener,l);return}}let s=find(Ze(r),t),a=e,c=Ye(e,r,s);if(s.mustUseProperty){let p=s.boolean?!!n:n;a[s.property]=p;return}if(s.boolean){let p=!!n;c&&(a[s.property]=p),p?M(e,s,""):ie(e,s);return}let i=n;if(s.spaceSeparated?i=R(n," "):s.commaSeparated?i=R(n,","):s.commaOrSpaceSeparated&&(i=R(n," ")),s.booleanish&&typeof i=="boolean"&&(i=i?"true":"false"),s.overloadedBoolean){if(i===false){ie(e,s);return}if(i===true){M(e,s,"");return}}if(c){a[s.property]=i;return}i!==false&&M(e,s,i);},h=(e,t)=>{if(t!=null&&typeof t!="boolean"){if(pe(t))throw new Error("Async values are not supported inside jsx template results.");if(Array.isArray(t)){t.forEach(n=>h(e,n));return}if(Ke(t)){for(let n of t)h(e,n);return}if(Ge(t)){e.appendChild(t);return}e.appendChild(document.createTextNode(String(t)));}},X=(e,t,n)=>se(e,t,r=>j(r,t,n)),le=P({getIdentifierName:w,evaluateExpressionWithNamespace:X}),et=(e,t,n,r)=>{let o=le(t,n,r);Object.entries(o).forEach(([s,a])=>{if(s!=="key"){if(s==="children"){h(e,a);return}Qe(e,s,a,r);}});},L=(e,t,n)=>{let r=[];return e.forEach(o=>{switch(o.type){case "JSXText":{oe(o.value,t.placeholders).forEach(a=>{r.push(a);});break}case "JSXExpressionContainer":{if(o.expression.type==="JSXEmptyExpression")break;r.push(X(o.expression,t,n));break}case "JSXSpreadChild":{let s=X(o.expression,t,n);s!=null&&r.push(s);break}case "JSXElement":case "JSXFragment":{r.push(j(o,t,n));break}}}),r},tt=(e,t,n,r)=>{let o=le(e.openingElement.attributes,t,r),s=L(e.children,t,r);s.length===1?o.children=s[0]:s.length>1&&(o.children=s);let a=n(o);if(pe(a))throw new Error("Async jsx components are not supported.");return a},nt=(e,t,n)=>{let r=e.openingElement,o=w(r.name),s=t.components.get(o);if(s)return tt(e,t,s,n);if(/[A-Z]/.test(o[0]??""))throw new Error(`Unknown component "${o}". Did you interpolate it with the template literal?`);let a=o==="svg"?"svg":n,c=o==="foreignObject"?null:a,i=a==="svg"?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o);return et(i,r.attributes,t,a),L(e.children,t,c).forEach(l=>h(i,l)),i},j=(e,t,n)=>{if(e.type==="JSXFragment"){let r=document.createDocumentFragment();return L(e.children,t,n).forEach(s=>h(r,s)),r}return nt(e,t,n)},me=(e,...t)=>{ze();let n=ae(e,t),r=parseSync("inline.jsx",n.source,ne);if(r.errors.length>0)throw new Error(v("jsx",e,n.diagnostics,r.errors[0]));let o=re(r.program),s={source:n.source,placeholders:n.placeholders,components:new Map(n.bindings.map(a=>[a.name,a.value]))};return j(o,s,null)};z({mode:"always"});Z();var Dt=me;
|
|
8
|
+
export{Dt as jsx};
|