@knighted/jsx 1.6.3-rc.1 → 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 +57 -33
- package/dist/cjs/loader/jsx.d.cts +3 -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 +3 -1
- package/dist/loader/jsx.js +55 -31
- 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 +6 -6
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,23 +228,13 @@ const TEMPLATE_PARSER_OPTIONS = {
|
|
|
223
228
|
preserveParens: true,
|
|
224
229
|
};
|
|
225
230
|
const DEFAULT_TAGS = ['jsx', 'reactJsx'];
|
|
226
|
-
const
|
|
231
|
+
const WEB_TARGETS = new Set(['web', 'webworker', 'electron-renderer', 'node-webkit']);
|
|
232
|
+
const isWebTarget = (target) => target ? WEB_TARGETS.has(target) : false;
|
|
227
233
|
const HELPER_SNIPPETS = {
|
|
228
234
|
react: `const __jsxReactMergeProps = (...sources) => Object.assign({}, ...sources)
|
|
229
235
|
const __jsxReact = (type, props, ...children) => React.createElement(type, props, ...children)
|
|
230
236
|
`,
|
|
231
|
-
|
|
232
|
-
const parseLoaderMode = (value) => {
|
|
233
|
-
if (typeof value !== 'string') {
|
|
234
|
-
return null;
|
|
235
|
-
}
|
|
236
|
-
switch (value) {
|
|
237
|
-
case 'runtime':
|
|
238
|
-
case 'react':
|
|
239
|
-
return value;
|
|
240
|
-
default:
|
|
241
|
-
return null;
|
|
242
|
-
}
|
|
237
|
+
...dom_template_builder_js_1.DOM_HELPER_SNIPPETS,
|
|
243
238
|
};
|
|
244
239
|
const escapeTemplateChunk = (chunk) => chunk.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\${/g, '\\${');
|
|
245
240
|
const formatParserError = (error) => {
|
|
@@ -416,19 +411,8 @@ const extractJsxRoot = (program) => {
|
|
|
416
411
|
throw new Error('[jsx-loader] Expected the template to contain a single JSX root node.');
|
|
417
412
|
};
|
|
418
413
|
const normalizeJsxTextSegments = (value, placeholders) => {
|
|
419
|
-
const
|
|
420
|
-
|
|
421
|
-
const trailingWhitespace = value.match(/\s*$/)?.[0] ?? '';
|
|
422
|
-
const trimStart = /\n/.test(leadingWhitespace);
|
|
423
|
-
const trimEnd = /\n/.test(trailingWhitespace);
|
|
424
|
-
let normalized = collapsed;
|
|
425
|
-
if (trimStart) {
|
|
426
|
-
normalized = normalized.replace(/^\s+/, '');
|
|
427
|
-
}
|
|
428
|
-
if (trimEnd) {
|
|
429
|
-
normalized = normalized.replace(/\s+$/, '');
|
|
430
|
-
}
|
|
431
|
-
if (normalized.length === 0 || normalized.trim().length === 0) {
|
|
414
|
+
const normalized = (0, normalize_text_js_1.normalizeJsxText)(value);
|
|
415
|
+
if (!normalized) {
|
|
432
416
|
return [];
|
|
433
417
|
}
|
|
434
418
|
const segments = [];
|
|
@@ -477,7 +461,7 @@ const materializeTemplateStrings = (quasis) => {
|
|
|
477
461
|
});
|
|
478
462
|
return templates;
|
|
479
463
|
};
|
|
480
|
-
const buildTemplateSource = (quasis, expressions, source, tag) => {
|
|
464
|
+
const buildTemplateSource = (quasis, expressions, source, tag, replacements) => {
|
|
481
465
|
const placeholderMap = new Map();
|
|
482
466
|
const tagPlaceholderMap = new Map();
|
|
483
467
|
let template = '';
|
|
@@ -536,7 +520,7 @@ const buildTemplateSource = (quasis, expressions, source, tag) => {
|
|
|
536
520
|
const nextValue = nextChunk?.value;
|
|
537
521
|
const rightText = nextValue?.cooked ?? nextValue?.raw ?? '';
|
|
538
522
|
const context = getTemplateExpressionContext(chunk, rightText);
|
|
539
|
-
const code =
|
|
523
|
+
const code = (0, materialize_slice_js_1.materializeSlice)(start, end, source, replacements);
|
|
540
524
|
const marker = registerMarker(code, context.type === 'tag');
|
|
541
525
|
const appendMarker = (wrapper) => {
|
|
542
526
|
const insertion = wrapper ? wrapper(marker) : marker;
|
|
@@ -633,13 +617,15 @@ const transformSource = (source, config, options) => {
|
|
|
633
617
|
const magic = new magic_string_1.default(source);
|
|
634
618
|
let mutated = false;
|
|
635
619
|
const helperKinds = new Set();
|
|
620
|
+
const replacements = new Map();
|
|
621
|
+
const inlineTags = new Set();
|
|
636
622
|
taggedTemplates
|
|
637
623
|
.sort((a, b) => b.node.start - a.node.start)
|
|
638
624
|
.forEach(entry => {
|
|
639
625
|
const { node, tagName } = entry;
|
|
640
|
-
const mode = config.tagModes.get(tagName) ?? DEFAULT_MODE;
|
|
626
|
+
const mode = config.tagModes.get(tagName) ?? modes_js_1.DEFAULT_MODE;
|
|
641
627
|
const quasi = node.quasi;
|
|
642
|
-
const templateSource = buildTemplateSource(quasi.quasis, quasi.expressions, source, tagName);
|
|
628
|
+
const templateSource = buildTemplateSource(quasi.quasis, quasi.expressions, source, tagName, replacements);
|
|
643
629
|
const templateStrings = materializeTemplateStrings(quasi.quasis);
|
|
644
630
|
if (mode === 'runtime') {
|
|
645
631
|
const { code, changed } = transformTemplateLiteral(templateSource.source, config.resourcePath, tagName, templateStrings, templateSource.diagnostics);
|
|
@@ -651,6 +637,7 @@ const transformSource = (source, config, options) => {
|
|
|
651
637
|
const tagSource = source.slice(node.tag.start, node.tag.end);
|
|
652
638
|
const replacement = `${tagSource}\`${restored}\``;
|
|
653
639
|
magic.overwrite(node.start, node.end, replacement);
|
|
640
|
+
replacements.set(`${node.start}:${node.end}`, replacement);
|
|
654
641
|
mutated = true;
|
|
655
642
|
return;
|
|
656
643
|
}
|
|
@@ -658,7 +645,18 @@ const transformSource = (source, config, options) => {
|
|
|
658
645
|
const compiled = compileReactTemplate(templateSource.source, templateSource.placeholders, config.resourcePath, tagName, templateStrings, templateSource.diagnostics);
|
|
659
646
|
helperKinds.add('react');
|
|
660
647
|
magic.overwrite(node.start, node.end, compiled);
|
|
648
|
+
replacements.set(`${node.start}:${node.end}`, compiled);
|
|
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);
|
|
661
658
|
mutated = true;
|
|
659
|
+
inlineTags.add(tagName);
|
|
662
660
|
return;
|
|
663
661
|
}
|
|
664
662
|
/* c8 ignore next */
|
|
@@ -666,12 +664,22 @@ const transformSource = (source, config, options) => {
|
|
|
666
664
|
// Modes are validated during option parsing; this fallback guards future extensions.
|
|
667
665
|
throw new Error(`[jsx-loader] Transformation mode "${mode}" not implemented yet for tag "${tagName}".`);
|
|
668
666
|
});
|
|
667
|
+
if ((0, rewrite_imports_without_tags_js_1.rewriteImportsWithoutTags)(ast.program, magic, inlineTags, source)) {
|
|
668
|
+
mutated = true;
|
|
669
|
+
}
|
|
669
670
|
const helperSource = Array.from(helperKinds)
|
|
670
671
|
.map(kind => HELPER_SNIPPETS[kind])
|
|
671
672
|
.filter(Boolean)
|
|
672
673
|
.join('\n');
|
|
673
674
|
if (helperSource) {
|
|
674
|
-
|
|
675
|
+
const helperBlock = `${helperSource.trimEnd()}\n\n`;
|
|
676
|
+
const shebangIndex = source.startsWith('#!') ? source.indexOf('\n') : -1;
|
|
677
|
+
if (shebangIndex >= 0) {
|
|
678
|
+
magic.appendLeft(shebangIndex + 1, helperBlock);
|
|
679
|
+
}
|
|
680
|
+
else {
|
|
681
|
+
magic.prepend(helperBlock);
|
|
682
|
+
}
|
|
675
683
|
mutated = true;
|
|
676
684
|
}
|
|
677
685
|
const code = mutated ? magic.toString() : source;
|
|
@@ -692,6 +700,8 @@ function jsxLoader(input) {
|
|
|
692
700
|
const callback = this.async();
|
|
693
701
|
try {
|
|
694
702
|
const options = this.getOptions?.() ?? {};
|
|
703
|
+
const warn = this.emitWarning?.bind(this);
|
|
704
|
+
const webTarget = isWebTarget(this.target);
|
|
695
705
|
const explicitTags = Array.isArray(options.tags)
|
|
696
706
|
? options.tags.filter((value) => typeof value === 'string' && value.length > 0)
|
|
697
707
|
: null;
|
|
@@ -705,22 +715,36 @@ function jsxLoader(input) {
|
|
|
705
715
|
const configuredTagModes = options.tagModes && typeof options.tagModes === 'object'
|
|
706
716
|
? options.tagModes
|
|
707
717
|
: undefined;
|
|
718
|
+
const userSpecifiedMode = (0, modes_js_1.parseLoaderMode)(options.mode);
|
|
719
|
+
const defaultMode = userSpecifiedMode ?? modes_js_1.DEFAULT_MODE;
|
|
720
|
+
const userConfiguredTags = new Set();
|
|
708
721
|
if (configuredTagModes) {
|
|
709
722
|
Object.entries(configuredTagModes).forEach(([tagName, mode]) => {
|
|
710
|
-
const parsed = parseLoaderMode(mode);
|
|
723
|
+
const parsed = (0, modes_js_1.parseLoaderMode)(mode);
|
|
711
724
|
if (!parsed || typeof tagName !== 'string' || !tagName.length) {
|
|
712
725
|
return;
|
|
713
726
|
}
|
|
714
727
|
tagModes.set(tagName, parsed);
|
|
728
|
+
userConfiguredTags.add(tagName);
|
|
715
729
|
});
|
|
716
730
|
}
|
|
717
|
-
const defaultMode = parseLoaderMode(options.mode) ?? DEFAULT_MODE;
|
|
718
731
|
const tags = Array.from(new Set([...tagList, ...tagModes.keys()]));
|
|
719
732
|
tags.forEach(tagName => {
|
|
720
733
|
if (!tagModes.has(tagName)) {
|
|
721
734
|
tagModes.set(tagName, defaultMode);
|
|
722
735
|
}
|
|
723
736
|
});
|
|
737
|
+
/**
|
|
738
|
+
* If targeting the web and runtime mode is only implied (not explicitly requested),
|
|
739
|
+
* keep the runtime output but surface a warning so users can opt into react mode when
|
|
740
|
+
* bundling for the browser.
|
|
741
|
+
*/
|
|
742
|
+
if (webTarget && userSpecifiedMode === null) {
|
|
743
|
+
const hasImplicitRuntime = tags.some(tagName => tagModes.get(tagName) === 'runtime' && !userConfiguredTags.has(tagName));
|
|
744
|
+
if (hasImplicitRuntime) {
|
|
745
|
+
warn?.(new Error('[jsx-loader] Web target detected while defaulting to runtime mode; the shipped parser expects a Node-like environment. Set mode: "react" (or configure per-tag) when bundling client code, or provide a browser-safe runtime parser if you intentionally need runtime output.'));
|
|
746
|
+
}
|
|
747
|
+
}
|
|
724
748
|
const source = typeof input === 'string' ? input : input.toString('utf8');
|
|
725
749
|
const enableSourceMap = options.sourceMap === true;
|
|
726
750
|
const { code, map } = transformSource(source, {
|
|
@@ -1,11 +1,13 @@
|
|
|
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;
|
|
6
|
+
target?: string;
|
|
7
|
+
emitWarning?: (warning: Error | string) => void;
|
|
5
8
|
async(): LoaderCallback;
|
|
6
9
|
getOptions?: () => Partial<TOptions>;
|
|
7
10
|
};
|
|
8
|
-
type LoaderMode = 'runtime' | 'react';
|
|
9
11
|
type LoaderOptions = {
|
|
10
12
|
/**
|
|
11
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};
|