@barefootjs/hono 0.18.4 → 0.18.5
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/adapter/hono-adapter.d.ts.map +1 -1
- package/dist/adapter/index.js +13 -4
- package/dist/build.js +13 -4
- package/dist/index.js +13 -4
- package/package.json +1 -1
- package/src/adapter/hono-adapter.ts +38 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hono-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/hono-adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hono-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/hono-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
emitAttrValue,
|
|
8
8
|
buildLoopChainExpr
|
|
9
9
|
} from "@barefootjs/jsx";
|
|
10
|
-
import { BF_SCOPE, BF_HOST, BF_AT, BF_ROOT, BF_PROPS, BF_REGION } from "@barefootjs/shared";
|
|
10
|
+
import { BF_SCOPE, BF_HOST, BF_AT, BF_ROOT, BF_PROPS, BF_REGION, escapeHtml } from "@barefootjs/shared";
|
|
11
11
|
function applyHonoLoopChain(loop) {
|
|
12
12
|
return buildLoopChainExpr({
|
|
13
13
|
base: loop.array,
|
|
@@ -397,7 +397,7 @@ export default ${this.componentName}` : "";
|
|
|
397
397
|
}
|
|
398
398
|
}
|
|
399
399
|
renderText(text) {
|
|
400
|
-
return text.value;
|
|
400
|
+
return escapeHtml(text.value).replace(/\{/g, "{").replace(/\}/g, "}");
|
|
401
401
|
}
|
|
402
402
|
renderExpression(expr) {
|
|
403
403
|
if (expr.expr === "null" || expr.expr === "undefined") {
|
|
@@ -478,6 +478,15 @@ export default ${this.componentName}` : "";
|
|
|
478
478
|
} else if (loop.iterationShape === "keys") {
|
|
479
479
|
chainedArray = `[...${chainedArray}.keys()]`;
|
|
480
480
|
callbackParam = `(${loop.param}${paramAnnotation})`;
|
|
481
|
+
} else if (loop.objectIteration === "entries") {
|
|
482
|
+
chainedArray = `Object.entries(${chainedArray})`;
|
|
483
|
+
callbackParam = loop.index ? `([${loop.index}${indexAnnotation}, ${loop.param}${paramAnnotation}])` : `(${loop.param}${paramAnnotation}${indexParam})`;
|
|
484
|
+
} else if (loop.objectIteration === "keys") {
|
|
485
|
+
chainedArray = `Object.keys(${chainedArray})`;
|
|
486
|
+
callbackParam = `(${loop.param}${paramAnnotation})`;
|
|
487
|
+
} else if (loop.objectIteration === "values") {
|
|
488
|
+
chainedArray = `Object.values(${chainedArray})`;
|
|
489
|
+
callbackParam = `(${loop.param}${paramAnnotation})`;
|
|
481
490
|
} else {
|
|
482
491
|
callbackParam = `(${loop.param}${paramAnnotation}${indexParam})`;
|
|
483
492
|
}
|
|
@@ -570,7 +579,7 @@ export default ${this.componentName}` : "";
|
|
|
570
579
|
return `<>{bfComment(\`scope:\${__scopeId}${hostExpr}${propsExpr}\`)}${body}</>`;
|
|
571
580
|
}
|
|
572
581
|
elementAttrEmitter = {
|
|
573
|
-
emitLiteral: (value, name) => `${name}="${value.value}"`,
|
|
582
|
+
emitLiteral: (value, name) => `${name}="${escapeHtml(value.value)}"`,
|
|
574
583
|
emitExpression: (value, name) => {
|
|
575
584
|
if (isBooleanAttr(name) || value.presenceOrUndefined) {
|
|
576
585
|
return `${name}={(${value.expr}) || undefined}`;
|
|
@@ -584,7 +593,7 @@ export default ${this.componentName}` : "";
|
|
|
584
593
|
emitJsxChildren: () => ""
|
|
585
594
|
};
|
|
586
595
|
componentPropEmitter = {
|
|
587
|
-
emitLiteral: (value, name) => `${name}="${value.value}"`,
|
|
596
|
+
emitLiteral: (value, name) => `${name}="${escapeHtml(value.value)}"`,
|
|
588
597
|
emitExpression: (value, name) => `${name}={${value.expr}}`,
|
|
589
598
|
emitBooleanAttr: (_value, name) => name,
|
|
590
599
|
emitBooleanShorthand: (_value, name) => name,
|
package/dist/build.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
emitAttrValue,
|
|
8
8
|
buildLoopChainExpr
|
|
9
9
|
} from "@barefootjs/jsx";
|
|
10
|
-
import { BF_SCOPE, BF_HOST, BF_AT, BF_ROOT, BF_PROPS, BF_REGION } from "@barefootjs/shared";
|
|
10
|
+
import { BF_SCOPE, BF_HOST, BF_AT, BF_ROOT, BF_PROPS, BF_REGION, escapeHtml } from "@barefootjs/shared";
|
|
11
11
|
function applyHonoLoopChain(loop) {
|
|
12
12
|
return buildLoopChainExpr({
|
|
13
13
|
base: loop.array,
|
|
@@ -397,7 +397,7 @@ export default ${this.componentName}` : "";
|
|
|
397
397
|
}
|
|
398
398
|
}
|
|
399
399
|
renderText(text) {
|
|
400
|
-
return text.value;
|
|
400
|
+
return escapeHtml(text.value).replace(/\{/g, "{").replace(/\}/g, "}");
|
|
401
401
|
}
|
|
402
402
|
renderExpression(expr) {
|
|
403
403
|
if (expr.expr === "null" || expr.expr === "undefined") {
|
|
@@ -478,6 +478,15 @@ export default ${this.componentName}` : "";
|
|
|
478
478
|
} else if (loop.iterationShape === "keys") {
|
|
479
479
|
chainedArray = `[...${chainedArray}.keys()]`;
|
|
480
480
|
callbackParam = `(${loop.param}${paramAnnotation})`;
|
|
481
|
+
} else if (loop.objectIteration === "entries") {
|
|
482
|
+
chainedArray = `Object.entries(${chainedArray})`;
|
|
483
|
+
callbackParam = loop.index ? `([${loop.index}${indexAnnotation}, ${loop.param}${paramAnnotation}])` : `(${loop.param}${paramAnnotation}${indexParam})`;
|
|
484
|
+
} else if (loop.objectIteration === "keys") {
|
|
485
|
+
chainedArray = `Object.keys(${chainedArray})`;
|
|
486
|
+
callbackParam = `(${loop.param}${paramAnnotation})`;
|
|
487
|
+
} else if (loop.objectIteration === "values") {
|
|
488
|
+
chainedArray = `Object.values(${chainedArray})`;
|
|
489
|
+
callbackParam = `(${loop.param}${paramAnnotation})`;
|
|
481
490
|
} else {
|
|
482
491
|
callbackParam = `(${loop.param}${paramAnnotation}${indexParam})`;
|
|
483
492
|
}
|
|
@@ -570,7 +579,7 @@ export default ${this.componentName}` : "";
|
|
|
570
579
|
return `<>{bfComment(\`scope:\${__scopeId}${hostExpr}${propsExpr}\`)}${body}</>`;
|
|
571
580
|
}
|
|
572
581
|
elementAttrEmitter = {
|
|
573
|
-
emitLiteral: (value, name) => `${name}="${value.value}"`,
|
|
582
|
+
emitLiteral: (value, name) => `${name}="${escapeHtml(value.value)}"`,
|
|
574
583
|
emitExpression: (value, name) => {
|
|
575
584
|
if (isBooleanAttr(name) || value.presenceOrUndefined) {
|
|
576
585
|
return `${name}={(${value.expr}) || undefined}`;
|
|
@@ -584,7 +593,7 @@ export default ${this.componentName}` : "";
|
|
|
584
593
|
emitJsxChildren: () => ""
|
|
585
594
|
};
|
|
586
595
|
componentPropEmitter = {
|
|
587
|
-
emitLiteral: (value, name) => `${name}="${value.value}"`,
|
|
596
|
+
emitLiteral: (value, name) => `${name}="${escapeHtml(value.value)}"`,
|
|
588
597
|
emitExpression: (value, name) => `${name}={${value.expr}}`,
|
|
589
598
|
emitBooleanAttr: (_value, name) => name,
|
|
590
599
|
emitBooleanShorthand: (_value, name) => name,
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
emitAttrValue,
|
|
8
8
|
buildLoopChainExpr
|
|
9
9
|
} from "@barefootjs/jsx";
|
|
10
|
-
import { BF_SCOPE, BF_HOST, BF_AT, BF_ROOT, BF_PROPS, BF_REGION } from "@barefootjs/shared";
|
|
10
|
+
import { BF_SCOPE, BF_HOST, BF_AT, BF_ROOT, BF_PROPS, BF_REGION, escapeHtml } from "@barefootjs/shared";
|
|
11
11
|
function applyHonoLoopChain(loop) {
|
|
12
12
|
return buildLoopChainExpr({
|
|
13
13
|
base: loop.array,
|
|
@@ -397,7 +397,7 @@ export default ${this.componentName}` : "";
|
|
|
397
397
|
}
|
|
398
398
|
}
|
|
399
399
|
renderText(text) {
|
|
400
|
-
return text.value;
|
|
400
|
+
return escapeHtml(text.value).replace(/\{/g, "{").replace(/\}/g, "}");
|
|
401
401
|
}
|
|
402
402
|
renderExpression(expr) {
|
|
403
403
|
if (expr.expr === "null" || expr.expr === "undefined") {
|
|
@@ -478,6 +478,15 @@ export default ${this.componentName}` : "";
|
|
|
478
478
|
} else if (loop.iterationShape === "keys") {
|
|
479
479
|
chainedArray = `[...${chainedArray}.keys()]`;
|
|
480
480
|
callbackParam = `(${loop.param}${paramAnnotation})`;
|
|
481
|
+
} else if (loop.objectIteration === "entries") {
|
|
482
|
+
chainedArray = `Object.entries(${chainedArray})`;
|
|
483
|
+
callbackParam = loop.index ? `([${loop.index}${indexAnnotation}, ${loop.param}${paramAnnotation}])` : `(${loop.param}${paramAnnotation}${indexParam})`;
|
|
484
|
+
} else if (loop.objectIteration === "keys") {
|
|
485
|
+
chainedArray = `Object.keys(${chainedArray})`;
|
|
486
|
+
callbackParam = `(${loop.param}${paramAnnotation})`;
|
|
487
|
+
} else if (loop.objectIteration === "values") {
|
|
488
|
+
chainedArray = `Object.values(${chainedArray})`;
|
|
489
|
+
callbackParam = `(${loop.param}${paramAnnotation})`;
|
|
481
490
|
} else {
|
|
482
491
|
callbackParam = `(${loop.param}${paramAnnotation}${indexParam})`;
|
|
483
492
|
}
|
|
@@ -570,7 +579,7 @@ export default ${this.componentName}` : "";
|
|
|
570
579
|
return `<>{bfComment(\`scope:\${__scopeId}${hostExpr}${propsExpr}\`)}${body}</>`;
|
|
571
580
|
}
|
|
572
581
|
elementAttrEmitter = {
|
|
573
|
-
emitLiteral: (value, name) => `${name}="${value.value}"`,
|
|
582
|
+
emitLiteral: (value, name) => `${name}="${escapeHtml(value.value)}"`,
|
|
574
583
|
emitExpression: (value, name) => {
|
|
575
584
|
if (isBooleanAttr(name) || value.presenceOrUndefined) {
|
|
576
585
|
return `${name}={(${value.expr}) || undefined}`;
|
|
@@ -584,7 +593,7 @@ export default ${this.componentName}` : "";
|
|
|
584
593
|
emitJsxChildren: () => ""
|
|
585
594
|
};
|
|
586
595
|
componentPropEmitter = {
|
|
587
|
-
emitLiteral: (value, name) => `${name}="${value.value}"`,
|
|
596
|
+
emitLiteral: (value, name) => `${name}="${escapeHtml(value.value)}"`,
|
|
588
597
|
emitExpression: (value, name) => `${name}={${value.expr}}`,
|
|
589
598
|
emitBooleanAttr: (_value, name) => name,
|
|
590
599
|
emitBooleanShorthand: (_value, name) => name,
|
package/package.json
CHANGED
|
@@ -47,7 +47,7 @@ type HonoRenderCtx = {
|
|
|
47
47
|
isInsideLoop?: boolean
|
|
48
48
|
isLoopItemRoot?: boolean
|
|
49
49
|
}
|
|
50
|
-
import { BF_SCOPE, BF_HOST, BF_AT, BF_ROOT, BF_PROPS, BF_REGION } from '@barefootjs/shared'
|
|
50
|
+
import { BF_SCOPE, BF_HOST, BF_AT, BF_ROOT, BF_PROPS, BF_REGION, escapeHtml } from '@barefootjs/shared'
|
|
51
51
|
|
|
52
52
|
export interface HonoAdapterOptions {
|
|
53
53
|
/**
|
|
@@ -731,7 +731,13 @@ export class HonoAdapter extends JsxAdapter implements IRNodeEmitter<HonoRenderC
|
|
|
731
731
|
}
|
|
732
732
|
|
|
733
733
|
private renderText(text: IRText): string {
|
|
734
|
-
|
|
734
|
+
// IRText carries the entity-DECODED value (Phase 1 decodes JSX
|
|
735
|
+
// character references). Re-encode for JSX SOURCE text: the shared
|
|
736
|
+
// HTML escape covers `< > & "` (the JSX parser decodes them right
|
|
737
|
+
// back; raw `'` is legal JSX text), and `{`/`}` — JSX expression delimiters with no named
|
|
738
|
+
// entity — go numeric. Rendering then re-escapes with Hono's own
|
|
739
|
+
// set, so output bytes match the pre-decode pipeline.
|
|
740
|
+
return escapeHtml(text.value).replace(/\{/g, '{').replace(/\}/g, '}')
|
|
735
741
|
}
|
|
736
742
|
|
|
737
743
|
renderExpression(expr: IRExpression): string {
|
|
@@ -899,6 +905,27 @@ export class HonoAdapter extends JsxAdapter implements IRNodeEmitter<HonoRenderC
|
|
|
899
905
|
} else if (loop.iterationShape === 'keys') {
|
|
900
906
|
chainedArray = `[...${chainedArray}.keys()]`
|
|
901
907
|
callbackParam = `(${loop.param}${paramAnnotation})`
|
|
908
|
+
} else if (loop.objectIteration === 'entries') {
|
|
909
|
+
// `objectIteration` (#2168 object-entries-map): reconstruct the
|
|
910
|
+
// STATIC `Object.entries(x)` call the IR stripped off (`x` is
|
|
911
|
+
// `chainedArray` here — a plain object, not an array). Unlike the
|
|
912
|
+
// array `iterationShape === 'entries'` case above, this does NOT
|
|
913
|
+
// require `loop.index` to be truthy: an elided/nested destructure
|
|
914
|
+
// (`([, cfg]) => …`) leaves `index` null and falls to the generic
|
|
915
|
+
// `paramAnnotation`/`loop.param` fallback below, where `loop.param`
|
|
916
|
+
// is already the raw (valid) destructure-pattern text — only the
|
|
917
|
+
// ARRAY needs wrapping in that case, matching the analogous split
|
|
918
|
+
// in `applyIterationShape` (`ir-to-client-js/html-template.ts`).
|
|
919
|
+
chainedArray = `Object.entries(${chainedArray})`
|
|
920
|
+
callbackParam = loop.index
|
|
921
|
+
? `([${loop.index}${indexAnnotation}, ${loop.param}${paramAnnotation}])`
|
|
922
|
+
: `(${loop.param}${paramAnnotation}${indexParam})`
|
|
923
|
+
} else if (loop.objectIteration === 'keys') {
|
|
924
|
+
chainedArray = `Object.keys(${chainedArray})`
|
|
925
|
+
callbackParam = `(${loop.param}${paramAnnotation})`
|
|
926
|
+
} else if (loop.objectIteration === 'values') {
|
|
927
|
+
chainedArray = `Object.values(${chainedArray})`
|
|
928
|
+
callbackParam = `(${loop.param}${paramAnnotation})`
|
|
902
929
|
} else {
|
|
903
930
|
callbackParam = `(${loop.param}${paramAnnotation}${indexParam})`
|
|
904
931
|
}
|
|
@@ -1076,7 +1103,10 @@ export class HonoAdapter extends JsxAdapter implements IRNodeEmitter<HonoRenderC
|
|
|
1076
1103
|
* AttrValue kind becomes a TS compile error here (#1290 step 2).
|
|
1077
1104
|
*/
|
|
1078
1105
|
private readonly elementAttrEmitter: AttrValueEmitter = {
|
|
1079
|
-
|
|
1106
|
+
// The decoded static value re-encodes for the JSX attr string (the
|
|
1107
|
+
// JSX parser decodes entities in quoted attribute values, so the
|
|
1108
|
+
// runtime sees the decoded string and escapes it on render).
|
|
1109
|
+
emitLiteral: (value, name) => `${name}="${escapeHtml(value.value)}"`,
|
|
1080
1110
|
emitExpression: (value, name) => {
|
|
1081
1111
|
// Boolean attrs / presence-folded expressions: pass `undefined` when
|
|
1082
1112
|
// falsy so Hono omits the attribute. Wrap in parens to keep `??`
|
|
@@ -1106,9 +1136,11 @@ export class HonoAdapter extends JsxAdapter implements IRNodeEmitter<HonoRenderC
|
|
|
1106
1136
|
private readonly componentPropEmitter: AttrValueEmitter = {
|
|
1107
1137
|
emitLiteral: (value, name) =>
|
|
1108
1138
|
// IR-authoritative string literal: `<X fill="var(--c)" />`.
|
|
1109
|
-
// Emitting
|
|
1110
|
-
// (`var(...)`, `url(...)`,
|
|
1111
|
-
|
|
1139
|
+
// Emitting as a plain JSX attr string (not a JS expression) is what
|
|
1140
|
+
// distinguishes a CSS-shaped value (`var(...)`, `url(...)`,
|
|
1141
|
+
// `calc(...)`) from a JS expression. The decoded value re-encodes
|
|
1142
|
+
// so the JSX parser hands the component the same decoded string.
|
|
1143
|
+
`${name}="${escapeHtml(value.value)}"`,
|
|
1112
1144
|
emitExpression: (value, name) => `${name}={${value.expr}}`,
|
|
1113
1145
|
emitBooleanAttr: (_value, name) => name,
|
|
1114
1146
|
emitBooleanShorthand: (_value, name) => name,
|