@reckona/mreact-compiler 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,10 @@
1
1
  import type { Diagnostic, SourceLocation } from "./types.js";
2
+ export declare function formatDiagnostic(filename: string, diagnostic: Diagnostic): string;
2
3
  export declare function unsupportedComponentReferenceDiagnostic(name: string, loc?: SourceLocation): Diagnostic;
3
4
  export declare function unsupportedSpreadAttributeDiagnostic(loc?: SourceLocation): Diagnostic;
4
5
  export declare function unsupportedServerEventHandlerDiagnostic(name: string, loc?: SourceLocation): Diagnostic;
5
6
  export declare function unsupportedServerDynamicAttributeDiagnostic(name: string, loc?: SourceLocation): Diagnostic;
7
+ export declare function unsupportedRefAttributeDiagnostic(loc?: SourceLocation): Diagnostic;
6
8
  export declare function unsupportedCompatServerTargetDiagnostic(): Diagnostic;
7
9
  export declare function unsupportedAwaitInnerComponentDiagnostic(name: string, loc?: SourceLocation): Diagnostic;
8
10
  export declare function unserializableAwaitValueDiagnostic(reason: string, loc?: SourceLocation): Diagnostic;
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,wBAAgB,uCAAuC,CACrD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAOZ;AAED,wBAAgB,oCAAoC,CAClD,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAOZ;AAED,wBAAgB,uCAAuC,CACrD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAOZ;AAED,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAOZ;AAED,wBAAgB,uCAAuC,IAAI,UAAU,CAOpE;AAED,wBAAgB,wCAAwC,CACtD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAOZ;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAUZ;AAED,wBAAgB,qCAAqC,CACnD,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAQZ;AAED,wBAAgB,2CAA2C,CACzD,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAQZ;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAQZ"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,GACrB,MAAM,CAOR;AAED,wBAAgB,uCAAuC,CACrD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAOZ;AAED,wBAAgB,oCAAoC,CAClD,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAOZ;AAED,wBAAgB,uCAAuC,CACrD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAOZ;AAED,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAOZ;AAED,wBAAgB,iCAAiC,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,UAAU,CAQlF;AAED,wBAAgB,uCAAuC,IAAI,UAAU,CAOpE;AAED,wBAAgB,wCAAwC,CACtD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAOZ;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAWZ;AAED,wBAAgB,qCAAqC,CACnD,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAQZ;AAED,wBAAgB,2CAA2C,CACzD,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAQZ;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,CAAC,EAAE,cAAc,GACnB,UAAU,CAQZ"}
@@ -1,3 +1,9 @@
1
+ export function formatDiagnostic(filename, diagnostic) {
2
+ const loc = diagnostic.loc === undefined
3
+ ? ""
4
+ : `:${diagnostic.loc.line}:${diagnostic.loc.column}`;
5
+ return `${filename}${loc} [${diagnostic.code}] ${diagnostic.message}`;
6
+ }
1
7
  export function unsupportedComponentReferenceDiagnostic(name, loc) {
2
8
  return {
3
9
  level: "error",
@@ -30,11 +36,19 @@ export function unsupportedServerDynamicAttributeDiagnostic(name, loc) {
30
36
  ...(loc === undefined ? {} : { loc }),
31
37
  };
32
38
  }
39
+ export function unsupportedRefAttributeDiagnostic(loc) {
40
+ return {
41
+ level: "error",
42
+ code: "MR_UNSUPPORTED_REF_ATTRIBUTE",
43
+ message: "JSX ref attributes are only supported by compat client output. Server and reactive output cannot attach React-style refs yet.",
44
+ ...(loc === undefined ? {} : { loc }),
45
+ };
46
+ }
33
47
  export function unsupportedCompatServerTargetDiagnostic() {
34
48
  return {
35
49
  level: "error",
36
50
  code: "MR_UNSUPPORTED_COMPAT_SERVER_TARGET",
37
- message: "Compat mode does not support the server target in Phase 8. Use the reactive server target or wait for streaming SSR support.",
51
+ message: "Compat mode does not support server output yet. Use the reactive server output for server-rendered routes, or compile compat components for the client boundary.",
38
52
  };
39
53
  }
40
54
  export function unsupportedAwaitInnerComponentDiagnostic(name, loc) {
@@ -51,7 +65,8 @@ export function unserializableAwaitValueDiagnostic(reason, loc) {
51
65
  code: "MR_UNSERIALIZABLE_AWAIT_VALUE",
52
66
  message: `<Await value={...}> contains a non-JSON-serializable value (${reason}). ` +
53
67
  `The wire format uses JSON.stringify, so the client-side renderer will receive a different shape ` +
54
- `after the round-trip. See docs/mreact_router.md "<Await> value の制約".`,
68
+ `after the round-trip. Pass JSON-compatible data or serialize the value before it reaches <Await>. ` +
69
+ `See https://github.com/t-k/mreact#streaming-loading-and-await.`,
55
70
  ...(loc === undefined ? {} : { loc }),
56
71
  };
57
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,UAAsB;IAEtB,MAAM,GAAG,GACP,UAAU,CAAC,GAAG,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IAEzD,OAAO,GAAG,QAAQ,GAAG,GAAG,KAAK,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,IAAY,EACZ,GAAoB;IAEpB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,oCAAoC;QAC1C,OAAO,EAAE,wBAAwB,IAAI,6CAA6C;QAClF,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,GAAoB;IAEpB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,iCAAiC;QACvC,OAAO,EAAE,+DAA+D;QACxE,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,IAAY,EACZ,GAAoB;IAEpB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,qCAAqC;QAC3C,OAAO,EAAE,kBAAkB,IAAI,2CAA2C;QAC1E,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2CAA2C,CACzD,IAAY,EACZ,GAAoB;IAEpB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,yCAAyC;QAC/C,OAAO,EAAE,sBAAsB,IAAI,2CAA2C;QAC9E,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,GAAoB;IACpE,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,8BAA8B;QACpC,OAAO,EACL,+HAA+H;QACjI,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uCAAuC;IACrD,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,qCAAqC;QAC3C,OAAO,EACL,kKAAkK;KACrK,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,IAAY,EACZ,GAAoB;IAEpB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,sCAAsC;QAC5C,OAAO,EAAE,wBAAwB,IAAI,yGAAyG;QAC9I,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,MAAc,EACd,GAAoB;IAEpB,OAAO;QACL,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,+BAA+B;QACrC,OAAO,EACL,+DAA+D,MAAM,KAAK;YAC1E,kGAAkG;YAClG,oGAAoG;YACpG,gEAAgE;QAClE,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,GAAoB;IAEpB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,mCAAmC;QACzC,OAAO,EACL,+HAA+H;QACjI,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2CAA2C,CACzD,GAAoB;IAEpB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,0CAA0C;QAChD,OAAO,EACL,yJAAyJ;QAC3J,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,GAAoB;IAEpB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,2BAA2B;QACjC,OAAO,EACL,0HAA0H;QAC5H,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface StaticStyleObjectEntry {
2
+ cssName: string;
3
+ valueCode: string;
4
+ }
5
+ export declare function isUrlAttribute(name: string): boolean;
6
+ export declare function isDangerousHtmlAttribute(name: string): boolean;
7
+ export declare function isStaticUrlValueUnsafe(name: string, value: string): boolean;
8
+ export declare function parseStyleLiteralValue(code: string): string | number | null | undefined;
9
+ export declare function parseStaticStyleObjectLiteral(code: string): StaticStyleObjectEntry[] | undefined;
10
+ export declare function simpleSideEffectFreeExpression(code: string): string | undefined;
11
+ export declare function htmlAttributeName(name: string): string;
12
+ //# sourceMappingURL=emit-server-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-server-shared.d.ts","sourceRoot":"","sources":["../src/emit-server-shared.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgDD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAiB3E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAwBvF;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,GACX,sBAAsB,EAAE,GAAG,SAAS,CAStC;AA0HD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA0B/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD"}
@@ -0,0 +1,295 @@
1
+ import { parseSync } from "oxc-parser";
2
+ import { readArray, readObject, unwrapOxcParentheses } from "./oxc-node-utils.js";
3
+ const URL_ATTRIBUTE_NAMES = new Set([
4
+ "href",
5
+ "src",
6
+ "action",
7
+ "formaction",
8
+ "xlink:href",
9
+ "ping",
10
+ "poster",
11
+ "background",
12
+ "manifest",
13
+ ]);
14
+ const DANGEROUS_HTML_ATTRIBUTE_NAMES = new Set(["srcdoc"]);
15
+ const SIMPLE_IDENT_CHAIN_RE = /^(this|[A-Za-z_$][\w$]*)(\.[A-Za-z_$][\w$]*)*$/;
16
+ const NUMERIC_LITERAL_RE = /^-?(?:\d+(?:\.\d+)?|\.\d+)$/;
17
+ const SIMPLE_STRING_LITERAL_RE = /^"(?:[^"\\]|\\.)*"$/;
18
+ const SIMPLE_SINGLE_QUOTE_RE = /^'(?:[^'\\]|\\.)*'$/;
19
+ const HTML_ATTRIBUTE_ALIASES = {
20
+ acceptCharset: "accept-charset",
21
+ autoFocus: "autofocus",
22
+ autoPlay: "autoplay",
23
+ charSet: "charset",
24
+ className: "class",
25
+ colSpan: "colspan",
26
+ contentEditable: "contenteditable",
27
+ crossOrigin: "crossorigin",
28
+ encType: "enctype",
29
+ formAction: "formaction",
30
+ frameBorder: "frameborder",
31
+ htmlFor: "for",
32
+ httpEquiv: "http-equiv",
33
+ maxLength: "maxlength",
34
+ minLength: "minlength",
35
+ noValidate: "novalidate",
36
+ playsInline: "playsinline",
37
+ readOnly: "readonly",
38
+ rowSpan: "rowspan",
39
+ spellCheck: "spellcheck",
40
+ srcDoc: "srcdoc",
41
+ srcSet: "srcset",
42
+ tabIndex: "tabindex",
43
+ useMap: "usemap",
44
+ };
45
+ export function isUrlAttribute(name) {
46
+ return URL_ATTRIBUTE_NAMES.has(name);
47
+ }
48
+ export function isDangerousHtmlAttribute(name) {
49
+ return DANGEROUS_HTML_ATTRIBUTE_NAMES.has(name);
50
+ }
51
+ export function isStaticUrlValueUnsafe(name, value) {
52
+ let start = 0;
53
+ while (start < value.length && value.charCodeAt(start) <= 0x20) {
54
+ start += 1;
55
+ }
56
+ const canonical = value.slice(start).replace(/[\t\r\n]/g, "");
57
+ const match = /^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(canonical);
58
+ if (match === null || match[1] === undefined)
59
+ return false;
60
+ const scheme = match[1].toLowerCase();
61
+ if (scheme === "javascript" || scheme === "vbscript" || scheme === "livescript" || scheme === "mhtml" || scheme === "file")
62
+ return true;
63
+ if (scheme === "data") {
64
+ if ((name === "src" || name === "poster") && /^data:image\/(?!svg\+xml(?:[;,]|$))/i.test(canonical))
65
+ return false;
66
+ return true;
67
+ }
68
+ return false;
69
+ }
70
+ export function parseStyleLiteralValue(code) {
71
+ const trimmed = unwrapParenthesized(code.trim());
72
+ if (trimmed === "null" || trimmed === "false" || trimmed === "undefined") {
73
+ return null;
74
+ }
75
+ if (trimmed === "true") {
76
+ return "";
77
+ }
78
+ if (NUMERIC_LITERAL_RE.test(trimmed)) {
79
+ return Number(trimmed);
80
+ }
81
+ if (SIMPLE_STRING_LITERAL_RE.test(trimmed)) {
82
+ return JSON.parse(trimmed);
83
+ }
84
+ if (SIMPLE_SINGLE_QUOTE_RE.test(trimmed)) {
85
+ return JSON.parse(`"${trimmed.slice(1, -1).replaceAll('"', '\\"')}"`);
86
+ }
87
+ return undefined;
88
+ }
89
+ export function parseStaticStyleObjectLiteral(code) {
90
+ const objectCode = unwrapParenthesized(code.trim());
91
+ const stringParsedEntries = parseStaticStyleObjectLiteralFromString(objectCode);
92
+ if (stringParsedEntries !== undefined) {
93
+ return stringParsedEntries;
94
+ }
95
+ return parseStaticStyleObjectLiteralWithOxc(objectCode);
96
+ }
97
+ function parseStaticStyleObjectLiteralFromString(objectCode) {
98
+ if (!objectCode.startsWith("{") || !objectCode.endsWith("}")) {
99
+ return undefined;
100
+ }
101
+ const body = objectCode.slice(1, -1).trim();
102
+ if (body === "") {
103
+ return [];
104
+ }
105
+ const entries = [];
106
+ for (const property of splitTopLevel(body, ",")) {
107
+ const trimmed = property.trim();
108
+ if (trimmed === "" || trimmed.startsWith("...") || trimmed.startsWith("[")) {
109
+ return undefined;
110
+ }
111
+ const colonIndex = findTopLevelColon(trimmed);
112
+ if (colonIndex < 0) {
113
+ return undefined;
114
+ }
115
+ const rawKey = trimmed.slice(0, colonIndex).trim();
116
+ const valueCode = trimmed.slice(colonIndex + 1).trim();
117
+ const key = parseStaticObjectKey(rawKey);
118
+ if (key === undefined || valueCode === "") {
119
+ return undefined;
120
+ }
121
+ entries.push({ cssName: cssPropertyName(key), valueCode });
122
+ }
123
+ return entries;
124
+ }
125
+ function parseStaticStyleObjectLiteralWithOxc(objectCode) {
126
+ if (!objectCode.startsWith("{") || !objectCode.endsWith("}")) {
127
+ return undefined;
128
+ }
129
+ const prefix = "const __mreactStyle = ";
130
+ const source = `${prefix}${objectCode};`;
131
+ const parsed = parseSync("style-object.tsx", source, {
132
+ lang: "tsx",
133
+ sourceType: "module",
134
+ astType: "ts",
135
+ });
136
+ if (parsed.errors.length > 0) {
137
+ return undefined;
138
+ }
139
+ const body = readArray(readObject(parsed.program).body);
140
+ const declaration = readArray(readObject(body[0]).declarations)[0];
141
+ const init = unwrapOxcParentheses(readObject(readObject(declaration).init));
142
+ if (init.type !== "ObjectExpression") {
143
+ return undefined;
144
+ }
145
+ const entries = [];
146
+ for (const property of readArray(init.properties)) {
147
+ const propertyObject = readObject(property);
148
+ if (propertyObject.type !== "Property" ||
149
+ propertyObject.kind !== "init" ||
150
+ propertyObject.method === true ||
151
+ propertyObject.computed === true ||
152
+ propertyObject.shorthand === true) {
153
+ return undefined;
154
+ }
155
+ const key = readStaticOxcObjectKey(propertyObject.key);
156
+ const value = readObject(propertyObject.value);
157
+ const start = readNumber(value.start);
158
+ const end = readNumber(value.end);
159
+ if (key === undefined || start < prefix.length || end < start) {
160
+ return undefined;
161
+ }
162
+ entries.push({
163
+ cssName: cssPropertyName(key),
164
+ valueCode: source.slice(start, end),
165
+ });
166
+ }
167
+ return entries;
168
+ }
169
+ function readStaticOxcObjectKey(node) {
170
+ const key = readObject(node);
171
+ if (key.type === "Identifier") {
172
+ return typeof key.name === "string" ? key.name : undefined;
173
+ }
174
+ if (key.type === "Literal") {
175
+ return typeof key.value === "string" ? key.value : undefined;
176
+ }
177
+ return undefined;
178
+ }
179
+ function readNumber(value) {
180
+ return typeof value === "number" ? value : -1;
181
+ }
182
+ export function simpleSideEffectFreeExpression(code) {
183
+ const trimmed = unwrapParenthesized(code.trim());
184
+ if (trimmed === "") {
185
+ return undefined;
186
+ }
187
+ if (trimmed === "true" ||
188
+ trimmed === "false" ||
189
+ trimmed === "null" ||
190
+ trimmed === "undefined") {
191
+ return trimmed;
192
+ }
193
+ if (NUMERIC_LITERAL_RE.test(trimmed) ||
194
+ SIMPLE_STRING_LITERAL_RE.test(trimmed) ||
195
+ SIMPLE_SINGLE_QUOTE_RE.test(trimmed) ||
196
+ SIMPLE_IDENT_CHAIN_RE.test(trimmed)) {
197
+ return trimmed;
198
+ }
199
+ return undefined;
200
+ }
201
+ export function htmlAttributeName(name) {
202
+ return HTML_ATTRIBUTE_ALIASES[name] ?? name;
203
+ }
204
+ function unwrapParenthesized(code) {
205
+ let current = code;
206
+ while (current.startsWith("(") && current.endsWith(")") && findMatchingClose(current, 0) === current.length - 1) {
207
+ current = current.slice(1, -1).trim();
208
+ }
209
+ return current;
210
+ }
211
+ function splitTopLevel(code, separator) {
212
+ const parts = [];
213
+ let start = 0;
214
+ let depth = 0;
215
+ let quote;
216
+ for (let index = 0; index < code.length; index += 1) {
217
+ const char = code[index];
218
+ if (quote !== undefined) {
219
+ if (char === "\\") {
220
+ index += 1;
221
+ }
222
+ else if (char === quote) {
223
+ quote = undefined;
224
+ }
225
+ continue;
226
+ }
227
+ if (char === "\"" || char === "'" || char === "`") {
228
+ quote = char;
229
+ continue;
230
+ }
231
+ if (char === "{" || char === "[" || char === "(") {
232
+ depth += 1;
233
+ continue;
234
+ }
235
+ if (char === "}" || char === "]" || char === ")") {
236
+ depth -= 1;
237
+ continue;
238
+ }
239
+ if (depth === 0 && char === separator) {
240
+ parts.push(code.slice(start, index));
241
+ start = index + 1;
242
+ }
243
+ }
244
+ parts.push(code.slice(start));
245
+ return parts;
246
+ }
247
+ function findTopLevelColon(code) {
248
+ return splitTopLevel(code, ":")[0]?.length ?? -1;
249
+ }
250
+ function findMatchingClose(code, openIndex) {
251
+ let depth = 0;
252
+ let quote;
253
+ for (let index = openIndex; index < code.length; index += 1) {
254
+ const char = code[index];
255
+ if (quote !== undefined) {
256
+ if (char === "\\") {
257
+ index += 1;
258
+ }
259
+ else if (char === quote) {
260
+ quote = undefined;
261
+ }
262
+ continue;
263
+ }
264
+ if (char === "\"" || char === "'" || char === "`") {
265
+ quote = char;
266
+ continue;
267
+ }
268
+ if (char === "(") {
269
+ depth += 1;
270
+ }
271
+ else if (char === ")") {
272
+ depth -= 1;
273
+ if (depth === 0) {
274
+ return index;
275
+ }
276
+ }
277
+ }
278
+ return -1;
279
+ }
280
+ function parseStaticObjectKey(rawKey) {
281
+ if (/^[A-Za-z_$][\w$-]*$/.test(rawKey)) {
282
+ return rawKey;
283
+ }
284
+ if ((rawKey.startsWith("\"") && rawKey.endsWith("\"")) ||
285
+ (rawKey.startsWith("'") && rawKey.endsWith("'"))) {
286
+ return rawKey.slice(1, -1);
287
+ }
288
+ return undefined;
289
+ }
290
+ function cssPropertyName(name) {
291
+ return name.startsWith("--")
292
+ ? name
293
+ : name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);
294
+ }
295
+ //# sourceMappingURL=emit-server-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-server-shared.js","sourceRoot":"","sources":["../src/emit-server-shared.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"emit-server-stream.d.ts","sourceRoot":"","sources":["../src/emit-server-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAMV,QAAQ,EACT,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAI1F,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACzC,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC;AA8CD,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CA4GxB"}
1
+ {"version":3,"file":"emit-server-stream.d.ts","sourceRoot":"","sources":["../src/emit-server-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAMV,QAAQ,EACT,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAa1F,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACzC,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC;AAKD,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CA4GxB"}
@@ -1,44 +1,8 @@
1
1
  import { emitEscapeHtmlHelper } from "./emit-escape-helper.js";
2
2
  import { escapeHtmlAttribute as escapeHtml } from "@reckona/mreact-shared/html-escape";
3
+ import { htmlAttributeName, isDangerousHtmlAttribute, isStaticUrlValueUnsafe, isUrlAttribute, parseStaticStyleObjectLiteral, parseStyleLiteralValue, simpleSideEffectFreeExpression, } from "./emit-server-shared.js";
3
4
  let currentUrlSafeHelperName = "_urlAttrSafe";
4
5
  let currentClientBoundaryHelperName;
5
- const URL_ATTRIBUTE_NAMES = new Set([
6
- "href",
7
- "src",
8
- "action",
9
- "formaction",
10
- "xlink:href",
11
- "ping",
12
- "poster",
13
- "background",
14
- "manifest",
15
- ]);
16
- function isUrlAttribute(name) {
17
- return URL_ATTRIBUTE_NAMES.has(name);
18
- }
19
- const DANGEROUS_HTML_ATTRIBUTE_NAMES = new Set(["srcdoc"]);
20
- function isDangerousHtmlAttribute(name) {
21
- return DANGEROUS_HTML_ATTRIBUTE_NAMES.has(name);
22
- }
23
- function isStaticUrlValueUnsafe(name, value) {
24
- let start = 0;
25
- while (start < value.length && value.charCodeAt(start) <= 0x20) {
26
- start += 1;
27
- }
28
- const canonical = value.slice(start).replace(/[\t\r\n]/g, "");
29
- const match = /^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(canonical);
30
- if (match === null || match[1] === undefined)
31
- return false;
32
- const scheme = match[1].toLowerCase();
33
- if (scheme === "javascript" || scheme === "vbscript" || scheme === "livescript" || scheme === "mhtml" || scheme === "file")
34
- return true;
35
- if (scheme === "data") {
36
- if ((name === "src" || name === "poster") && /^data:image\//i.test(canonical))
37
- return false;
38
- return true;
39
- }
40
- return false;
41
- }
42
6
  export function emitServerStream(ir, options = {}) {
43
7
  const serverBootstrap = options.serverBootstrap ?? "none";
44
8
  const escapeHelperName = allocateHelperName(ir, "_escapeHtml");
@@ -68,7 +32,7 @@ export function emitServerStream(ir, options = {}) {
68
32
  ` if (_match === null) return value;`,
69
33
  ` const _scheme = _match[1].toLowerCase();`,
70
34
  ` if (_scheme !== "javascript" && _scheme !== "vbscript" && _scheme !== "livescript" && _scheme !== "mhtml" && _scheme !== "file" && _scheme !== "data") return value;`,
71
- ` if (_scheme === "data" && (name === "src" || name === "poster") && /^data:image\\//i.test(_canonical)) return value;`,
35
+ ` if (_scheme === "data" && (name === "src" || name === "poster") && /^data:image\\/(?!svg\\+xml(?:[;,]|$))/i.test(_canonical)) return value;`,
72
36
  ` return undefined;`,
73
37
  `}`,
74
38
  ].join("\n");
@@ -789,198 +753,6 @@ function emitStaticStyleObjectAttributeExpression(code, escapeHelperName) {
789
753
  const statements = entries.map((entry) => `{ const _v = (${entry.valueCode}); if (_v != null && _v !== false) _style += (_style === "" ? "" : ";") + ${stringLiteral(`${entry.cssName}:`)} + ${escapeHelperName}(_v === true ? "" : _v); }`);
790
754
  return `(() => { let _style = ""; ${statements.join(" ")} return _style === "" ? "" : ${stringLiteral(" style=\"")} + _style + ${stringLiteral("\"")}; })()`;
791
755
  }
792
- function parseStyleLiteralValue(code) {
793
- const trimmed = unwrapParenthesized(code.trim());
794
- if (trimmed === "null" || trimmed === "false" || trimmed === "undefined") {
795
- return null;
796
- }
797
- if (trimmed === "true") {
798
- return "";
799
- }
800
- if (NUMERIC_LITERAL_RE.test(trimmed)) {
801
- return Number(trimmed);
802
- }
803
- if (SIMPLE_STRING_LITERAL_RE.test(trimmed)) {
804
- return JSON.parse(trimmed);
805
- }
806
- if (SIMPLE_SINGLE_QUOTE_RE.test(trimmed)) {
807
- return JSON.parse(`"${trimmed.slice(1, -1).replaceAll('"', '\\"')}"`);
808
- }
809
- return undefined;
810
- }
811
- function parseStaticStyleObjectLiteral(code) {
812
- const objectCode = unwrapParenthesized(code.trim());
813
- if (!objectCode.startsWith("{") || !objectCode.endsWith("}")) {
814
- return undefined;
815
- }
816
- const body = objectCode.slice(1, -1).trim();
817
- if (body === "") {
818
- return [];
819
- }
820
- const entries = [];
821
- for (const property of splitTopLevel(body, ",")) {
822
- const trimmed = property.trim();
823
- if (trimmed === "" || trimmed.startsWith("...") || trimmed.startsWith("[")) {
824
- return undefined;
825
- }
826
- const colonIndex = findTopLevelColon(trimmed);
827
- if (colonIndex < 0) {
828
- return undefined;
829
- }
830
- const rawKey = trimmed.slice(0, colonIndex).trim();
831
- const valueCode = trimmed.slice(colonIndex + 1).trim();
832
- const key = parseStaticObjectKey(rawKey);
833
- if (key === undefined || valueCode === "") {
834
- return undefined;
835
- }
836
- entries.push({ cssName: cssPropertyName(key), valueCode });
837
- }
838
- return entries;
839
- }
840
- // Side-effect-free expression detection — see emit-server.ts for rationale.
841
- const SIMPLE_IDENT_CHAIN_RE = /^(this|[A-Za-z_$][\w$]*)(\.[A-Za-z_$][\w$]*)*$/;
842
- const NUMERIC_LITERAL_RE = /^-?(?:\d+(?:\.\d+)?|\.\d+)$/;
843
- const SIMPLE_STRING_LITERAL_RE = /^"(?:[^"\\]|\\.)*"$/;
844
- const SIMPLE_SINGLE_QUOTE_RE = /^'(?:[^'\\]|\\.)*'$/;
845
- function simpleSideEffectFreeExpression(code) {
846
- const trimmed = unwrapParenthesized(code.trim());
847
- if (trimmed === "") {
848
- return undefined;
849
- }
850
- if (trimmed === "true" ||
851
- trimmed === "false" ||
852
- trimmed === "null" ||
853
- trimmed === "undefined") {
854
- return trimmed;
855
- }
856
- if (NUMERIC_LITERAL_RE.test(trimmed) ||
857
- SIMPLE_STRING_LITERAL_RE.test(trimmed) ||
858
- SIMPLE_SINGLE_QUOTE_RE.test(trimmed) ||
859
- SIMPLE_IDENT_CHAIN_RE.test(trimmed)) {
860
- return trimmed;
861
- }
862
- return undefined;
863
- }
864
- function unwrapParenthesized(code) {
865
- let current = code;
866
- while (current.startsWith("(") && current.endsWith(")") && findMatchingClose(current, 0) === current.length - 1) {
867
- current = current.slice(1, -1).trim();
868
- }
869
- return current;
870
- }
871
- function splitTopLevel(code, separator) {
872
- const parts = [];
873
- let start = 0;
874
- let depth = 0;
875
- let quote;
876
- for (let index = 0; index < code.length; index += 1) {
877
- const char = code[index];
878
- if (quote !== undefined) {
879
- if (char === "\\") {
880
- index += 1;
881
- }
882
- else if (char === quote) {
883
- quote = undefined;
884
- }
885
- continue;
886
- }
887
- if (char === "\"" || char === "'" || char === "`") {
888
- quote = char;
889
- continue;
890
- }
891
- if (char === "{" || char === "[" || char === "(") {
892
- depth += 1;
893
- continue;
894
- }
895
- if (char === "}" || char === "]" || char === ")") {
896
- depth -= 1;
897
- continue;
898
- }
899
- if (depth === 0 && char === separator) {
900
- parts.push(code.slice(start, index));
901
- start = index + 1;
902
- }
903
- }
904
- parts.push(code.slice(start));
905
- return parts;
906
- }
907
- function findTopLevelColon(code) {
908
- return splitTopLevel(code, ":")[0]?.length ?? -1;
909
- }
910
- function findMatchingClose(code, openIndex) {
911
- let depth = 0;
912
- let quote;
913
- for (let index = openIndex; index < code.length; index += 1) {
914
- const char = code[index];
915
- if (quote !== undefined) {
916
- if (char === "\\") {
917
- index += 1;
918
- }
919
- else if (char === quote) {
920
- quote = undefined;
921
- }
922
- continue;
923
- }
924
- if (char === "\"" || char === "'" || char === "`") {
925
- quote = char;
926
- continue;
927
- }
928
- if (char === "(") {
929
- depth += 1;
930
- }
931
- else if (char === ")") {
932
- depth -= 1;
933
- if (depth === 0) {
934
- return index;
935
- }
936
- }
937
- }
938
- return -1;
939
- }
940
- function parseStaticObjectKey(rawKey) {
941
- if (/^[A-Za-z_$][\w$-]*$/.test(rawKey)) {
942
- return rawKey;
943
- }
944
- if ((rawKey.startsWith("\"") && rawKey.endsWith("\"")) ||
945
- (rawKey.startsWith("'") && rawKey.endsWith("'"))) {
946
- return rawKey.slice(1, -1);
947
- }
948
- return undefined;
949
- }
950
- function cssPropertyName(name) {
951
- return name.startsWith("--")
952
- ? name
953
- : name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);
954
- }
955
- function htmlAttributeName(name) {
956
- return HTML_ATTRIBUTE_ALIASES[name] ?? name;
957
- }
958
- const HTML_ATTRIBUTE_ALIASES = {
959
- acceptCharset: "accept-charset",
960
- autoFocus: "autofocus",
961
- autoPlay: "autoplay",
962
- charSet: "charset",
963
- className: "class",
964
- colSpan: "colspan",
965
- contentEditable: "contenteditable",
966
- crossOrigin: "crossorigin",
967
- encType: "enctype",
968
- formAction: "formaction",
969
- frameBorder: "frameborder",
970
- htmlFor: "for",
971
- httpEquiv: "http-equiv",
972
- maxLength: "maxlength",
973
- minLength: "minlength",
974
- noValidate: "novalidate",
975
- playsInline: "playsinline",
976
- readOnly: "readonly",
977
- rowSpan: "rowspan",
978
- spellCheck: "spellcheck",
979
- srcDoc: "srcdoc",
980
- srcSet: "srcset",
981
- tabIndex: "tabindex",
982
- useMap: "usemap",
983
- };
984
756
  function findFormValueAttributeCode(attrs) {
985
757
  const valueAttr = attrs.find((attr) => attr.kind !== "spread-attr" && attr.name === "value");
986
758
  const defaultValueAttr = attrs.find((attr) => attr.kind !== "spread-attr" && attr.name === "defaultValue");