@reckona/mreact-compiler 0.0.97 → 0.0.99
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/diagnostics.d.ts +1 -0
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +8 -0
- package/dist/diagnostics.js.map +1 -1
- package/dist/emit-client.js +14 -9
- package/dist/emit-client.js.map +1 -1
- package/dist/emit-compat.js +5 -1
- package/dist/emit-compat.js.map +1 -1
- package/dist/emit-server-stream.js +52 -3
- package/dist/emit-server-stream.js.map +1 -1
- package/dist/emit-server.js +51 -10
- package/dist/emit-server.js.map +1 -1
- package/dist/ir.d.ts +1 -0
- package/dist/ir.d.ts.map +1 -1
- package/dist/ir.js.map +1 -1
- package/dist/oxc-child-analysis.d.ts.map +1 -1
- package/dist/oxc-child-analysis.js +41 -7
- package/dist/oxc-child-analysis.js.map +1 -1
- package/dist/oxc-component-detection.d.ts +5 -2
- package/dist/oxc-component-detection.d.ts.map +1 -1
- package/dist/oxc-component-detection.js +80 -3
- package/dist/oxc-component-detection.js.map +1 -1
- package/dist/oxc-component-props.d.ts +1 -1
- package/dist/oxc-component-props.d.ts.map +1 -1
- package/dist/oxc-component-props.js +1 -1
- package/dist/oxc-component-props.js.map +1 -1
- package/dist/oxc-component-references.js +2 -2
- package/dist/oxc-component-references.js.map +1 -1
- package/dist/oxc-runtime-emit.d.ts.map +1 -1
- package/dist/oxc-runtime-emit.js +10 -2
- package/dist/oxc-runtime-emit.js.map +1 -1
- package/dist/oxc.d.ts.map +1 -1
- package/dist/oxc.js +109 -20
- package/dist/oxc.js.map +1 -1
- package/dist/transform.js +29 -11
- package/dist/transform.js.map +1 -1
- package/package.json +2 -2
- package/src/diagnostics.ts +10 -0
- package/src/emit-client.ts +20 -10
- package/src/emit-compat.ts +6 -1
- package/src/emit-server-stream.ts +67 -3
- package/src/emit-server.ts +64 -12
- package/src/ir.ts +1 -0
- package/src/oxc-child-analysis.ts +63 -18
- package/src/oxc-component-detection.ts +145 -2
- package/src/oxc-component-props.ts +2 -1
- package/src/oxc-component-references.ts +2 -2
- package/src/oxc-runtime-emit.ts +12 -2
- package/src/oxc.ts +167 -5
- package/src/transform.ts +42 -10
package/dist/transform.js
CHANGED
|
@@ -139,9 +139,10 @@ function createSegmentMappings(outputCode, sourceCode) {
|
|
|
139
139
|
let previousSourceLine = 0;
|
|
140
140
|
let previousSourceColumn = 0;
|
|
141
141
|
let previousNameIndex = 0;
|
|
142
|
+
const searchState = { tokenOffsets: new Map() };
|
|
142
143
|
for (const [lineIndex, generatedLine] of generatedLines.entries()) {
|
|
143
144
|
let previousGeneratedColumn = 0;
|
|
144
|
-
const segments = collectSourceMapSegments(generatedLine, lineIndex, sourceLines);
|
|
145
|
+
const segments = collectSourceMapSegments(generatedLine, lineIndex, sourceLines, searchState);
|
|
145
146
|
lines.push(segments
|
|
146
147
|
.map((segment) => {
|
|
147
148
|
const fields = [
|
|
@@ -166,7 +167,7 @@ function createSegmentMappings(outputCode, sourceCode) {
|
|
|
166
167
|
}
|
|
167
168
|
return { mappings: lines.join(";"), names };
|
|
168
169
|
}
|
|
169
|
-
function collectSourceMapSegments(generatedLine, generatedLineIndex, sourceLines) {
|
|
170
|
+
function collectSourceMapSegments(generatedLine, generatedLineIndex, sourceLines, searchState) {
|
|
170
171
|
const fallbackSourceLine = findFallbackSourceLine(generatedLine, generatedLineIndex, sourceLines);
|
|
171
172
|
const segments = [
|
|
172
173
|
{
|
|
@@ -219,11 +220,11 @@ function collectSourceMapSegments(generatedLine, generatedLineIndex, sourceLines
|
|
|
219
220
|
const bindPropAttribute = /bindProp\([^,]+,\s+"([^"]+)"/.exec(generatedLine)?.[1];
|
|
220
221
|
const sourceLocation = bindPropAttribute === undefined
|
|
221
222
|
? undefined
|
|
222
|
-
: (findSourceLocation(sourceLines, `${bindPropAttribute}={${dynamicExpression}}
|
|
223
|
-
findSourceLocation(sourceLines, `${bindPropAttribute}="${dynamicExpression}"
|
|
224
|
-
const fallbackSourceLocation = findSourceLocation(sourceLines, `{${dynamicExpression}}
|
|
223
|
+
: (findSourceLocation(sourceLines, `${bindPropAttribute}={${dynamicExpression}}`, searchState) ??
|
|
224
|
+
findSourceLocation(sourceLines, `${bindPropAttribute}="${dynamicExpression}"`, searchState));
|
|
225
|
+
const fallbackSourceLocation = findSourceLocation(sourceLines, `{${dynamicExpression}}`, searchState) ??
|
|
225
226
|
findJsxExpressionTokenLocation(sourceLines, dynamicExpression) ??
|
|
226
|
-
findSourceLocation(sourceLines, dynamicExpression);
|
|
227
|
+
findSourceLocation(sourceLines, dynamicExpression, searchState);
|
|
227
228
|
const resolvedSourceLocation = sourceLocation ?? fallbackSourceLocation;
|
|
228
229
|
if (generatedColumn >= 0 && resolvedSourceLocation !== undefined) {
|
|
229
230
|
const sourceColumnOffset = bindPropAttribute !== undefined && sourceLocation !== undefined
|
|
@@ -292,14 +293,31 @@ function findFallbackSourceLine(generatedLine, generatedLineIndex, sourceLines)
|
|
|
292
293
|
}
|
|
293
294
|
return Math.min(generatedLineIndex, Math.max(0, sourceLines.length - 1));
|
|
294
295
|
}
|
|
295
|
-
function findSourceLocation(sourceLines, token) {
|
|
296
|
+
function findSourceLocation(sourceLines, token, searchState) {
|
|
297
|
+
const source = sourceLines.join("\n");
|
|
298
|
+
const start = searchState?.tokenOffsets.get(token) ?? 0;
|
|
299
|
+
let offset = source.indexOf(token, start);
|
|
300
|
+
if (offset < 0 && start > 0) {
|
|
301
|
+
offset = source.indexOf(token);
|
|
302
|
+
}
|
|
303
|
+
if (offset < 0) {
|
|
304
|
+
return undefined;
|
|
305
|
+
}
|
|
306
|
+
searchState?.tokenOffsets.set(token, offset + token.length);
|
|
307
|
+
return sourceOffsetToLineColumn(sourceLines, offset);
|
|
308
|
+
}
|
|
309
|
+
function sourceOffsetToLineColumn(sourceLines, offset) {
|
|
310
|
+
let remaining = offset;
|
|
296
311
|
for (const [line, sourceLine] of sourceLines.entries()) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
return { line, column };
|
|
312
|
+
if (remaining <= sourceLine.length) {
|
|
313
|
+
return { line, column: remaining };
|
|
300
314
|
}
|
|
315
|
+
remaining -= sourceLine.length + 1;
|
|
301
316
|
}
|
|
302
|
-
return
|
|
317
|
+
return {
|
|
318
|
+
line: Math.max(0, sourceLines.length - 1),
|
|
319
|
+
column: sourceLines.at(-1)?.length ?? 0,
|
|
320
|
+
};
|
|
303
321
|
}
|
|
304
322
|
function findJsxExpressionTokenLocation(sourceLines, token) {
|
|
305
323
|
let insideJsxExpression = false;
|
package/dist/transform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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","sourcesContent":["import { emitClient } from \"./emit-client.js\";\nimport { emitCompat } from \"./emit-compat.js\";\nimport { emitServer } from \"./emit-server.js\";\nimport { emitServerStream } from \"./emit-server-stream.js\";\nimport { analyzeCompilerModuleContextWithOxc, analyzeWithOxc } from \"./oxc.js\";\nimport type { ComponentIr, JsxNodeIr } from \"./ir.js\";\nimport type { AnalyzeToIrInput, AnalyzeToIrOutput, CompilerModuleContext } from \"./internal.js\";\nimport type { AnalyzeModuleOptions } from \"./types.js\";\nimport type {\n ClientReferenceMetadata,\n EventHydrationEntryMetadata,\n ModuleMetadata,\n TransformInput,\n TransformOutput,\n} from \"./types.js\";\n\nexport function transform(input: TransformInput): TransformOutput {\n return transformWithAnalyzer(input, (analyzeTarget, analyzeOptions) =>\n analyzeWithOxc({\n code: input.code,\n filename: input.filename,\n target: analyzeTarget,\n options: analyzeOptions,\n }),\n );\n}\n\nexport function transformCompilerModuleContext(\n input: TransformInput & { moduleContext: CompilerModuleContext },\n): TransformOutput {\n if (\n (input.moduleContext.code !== input.code || input.moduleContext.filename !== input.filename)\n ) {\n throw new Error(\"Transform input moduleContext must match the input code and filename.\");\n }\n\n return transformWithAnalyzer(input, (analyzeTarget, analyzeOptions) =>\n analyzeCompilerModuleContextWithOxc(input.moduleContext, {\n target: analyzeTarget,\n options: analyzeOptions,\n }),\n );\n}\n\nfunction transformWithAnalyzer(\n input: TransformInput,\n analyze: (\n target: AnalyzeToIrInput[\"target\"],\n options: AnalyzeModuleOptions,\n ) => AnalyzeToIrOutput,\n): TransformOutput {\n const mode = input.mode ?? \"reactive\";\n const serverOutput = input.serverOutput ?? \"string\";\n const serverBootstrap = input.serverBootstrap ?? \"none\";\n const analyzeTarget = mode === \"compat\" ? \"client\" : input.target;\n const bodyStatementJsx =\n input.target === \"server\"\n ? \"server-string\"\n : mode === \"compat\" && input.target === \"client\"\n ? \"compat-object\"\n : \"dom-node\";\n const analyzeOptions = {\n topLevelJsx:\n mode === \"compat\" && input.target === \"client\"\n ? \"compat-object\"\n : input.target === \"server\"\n ? \"server-string\"\n : \"diagnostic\",\n bodyStatementJsx,\n ...(input.target === \"server\" ? { serverOutput } : {}),\n awaitCompatComponents:\n input.target === \"server\" && serverOutput === \"stream\" ? \"lower\" : \"diagnostic\",\n clientBoundaryImports: input.clientBoundaryImports ?? [],\n compatReactNodeReturn: mode === \"compat\",\n ...(mode === \"compat\" && input.target === \"server\"\n ? { compatReactNodeReturnRenderMode: \"react-node\" as const }\n : {}),\n } as const;\n const analyzed = analyze(analyzeTarget, analyzeOptions);\n const diagnostics = [...analyzed.diagnostics];\n const emitted =\n mode === \"compat\" && input.target === \"client\"\n ? emitCompat(analyzed.ir, { dev: input.dev })\n : input.target === \"server\"\n ? serverOutput === \"stream\"\n ? emitServerStream(\n analyzed.ir,\n {\n ...createServerOptions(\n serverBootstrap,\n input.serverBootstrapNonce,\n input.serverBootstrapSrc,\n input.serverHydration,\n input.reactSuspenseRevealScriptSrc,\n ),\n ...(input.serverAwaitHydration === true\n ? { serverAwaitHydration: true as const }\n : {}),\n dynamicAttributes: mode === \"compat\" ? \"drop\" : \"emit\",\n escape: input.serverEscape,\n },\n )\n : emitServer(\n analyzed.ir,\n {\n ...createServerOptions(\n serverBootstrap,\n input.serverBootstrapNonce,\n input.serverBootstrapSrc,\n input.serverHydration,\n ),\n dynamicAttributes: mode === \"compat\" ? \"drop\" : \"emit\",\n escape: input.serverEscape,\n },\n )\n : emitClient(analyzed.ir);\n\n const metadata: ModuleMetadata = {\n filename: input.filename,\n target: input.target,\n compiler: {\n frontend: \"oxc\",\n typescriptFallback: false,\n },\n components: analyzed.ir.components.map((component) => ({\n name: component.name,\n exportName: component.exportName,\n })),\n imports: emitted.imports,\n };\n const events = collectEventHydrationEntries(analyzed.ir.components);\n\n if (events.length > 0) {\n metadata.eventHydrationManifest = {\n version: 1,\n events,\n };\n }\n const clientReferences = collectClientReferences(analyzed.ir.components);\n\n if (clientReferences.length > 0) {\n metadata.clientReferences = clientReferences;\n }\n const clientReferenceManifest = collectClientReferenceManifest(analyzed.ir.components);\n\n if (clientReferenceManifest.length > 0) {\n metadata.clientReferenceManifest = clientReferenceManifest;\n }\n\n if (input.target === \"server\") {\n metadata.serverOutput = serverOutput;\n\n if (serverBootstrap !== \"none\") {\n metadata.serverBootstrap = serverBootstrap;\n }\n\n if (input.serverBootstrapNonce !== undefined) {\n metadata.serverBootstrapNonce = input.serverBootstrapNonce;\n }\n\n if (input.serverBootstrapSrc !== undefined) {\n metadata.serverBootstrapSrc = input.serverBootstrapSrc;\n }\n\n if (input.serverHydration === true) {\n metadata.serverHydration = true;\n }\n\n if (input.reactSuspenseRevealScriptSrc !== undefined) {\n metadata.reactSuspenseRevealScriptSrc = input.reactSuspenseRevealScriptSrc;\n }\n }\n\n return {\n code: emitted.code,\n map: input.sourceMap === true ? createSourceMap(input, emitted.code) : null,\n diagnostics,\n metadata,\n };\n}\n\nfunction createSourceMap(input: TransformInput, outputCode: string): string {\n const generatedMap = createSegmentMappings(outputCode, input.code);\n\n return JSON.stringify({\n version: 3,\n file: `${input.filename}.js`,\n sources: [input.filename],\n sourcesContent: [input.code],\n names: generatedMap.names,\n mappings: generatedMap.mappings,\n });\n}\n\ninterface GeneratedSourceMap {\n mappings: string;\n names: string[];\n}\n\nfunction createSegmentMappings(outputCode: string, sourceCode: string): GeneratedSourceMap {\n const generatedLines = outputCode.split(\"\\n\");\n const sourceLines = sourceCode.split(\"\\n\");\n const lines: string[] = [];\n const names: string[] = [];\n const nameIndexes = new Map<string, number>();\n let previousSourceIndex = 0;\n let previousSourceLine = 0;\n let previousSourceColumn = 0;\n let previousNameIndex = 0;\n\n for (const [lineIndex, generatedLine] of generatedLines.entries()) {\n let previousGeneratedColumn = 0;\n const segments = collectSourceMapSegments(generatedLine, lineIndex, sourceLines);\n\n lines.push(\n segments\n .map((segment) => {\n const fields = [\n encodeVlq(segment.generatedColumn - previousGeneratedColumn),\n encodeVlq(0 - previousSourceIndex),\n encodeVlq(segment.sourceLine - previousSourceLine),\n encodeVlq(segment.sourceColumn - previousSourceColumn),\n ];\n\n if (segment.name !== undefined) {\n const nameIndex = getSourceMapNameIndex(segment.name, names, nameIndexes);\n fields.push(encodeVlq(nameIndex - previousNameIndex));\n previousNameIndex = nameIndex;\n }\n\n const encoded = fields.join(\"\");\n previousGeneratedColumn = segment.generatedColumn;\n previousSourceIndex = 0;\n previousSourceLine = segment.sourceLine;\n previousSourceColumn = segment.sourceColumn;\n return encoded;\n })\n .join(\",\"),\n );\n }\n\n return { mappings: lines.join(\";\"), names };\n}\n\ninterface SourceMapSegment {\n generatedColumn: number;\n sourceLine: number;\n sourceColumn: number;\n name?: string;\n}\n\nfunction collectSourceMapSegments(\n generatedLine: string,\n generatedLineIndex: number,\n sourceLines: readonly string[],\n): SourceMapSegment[] {\n const fallbackSourceLine = findFallbackSourceLine(generatedLine, generatedLineIndex, sourceLines);\n const segments: SourceMapSegment[] = [\n {\n generatedColumn: 0,\n sourceLine: fallbackSourceLine,\n sourceColumn: 0,\n },\n ];\n\n const functionMatch = /function\\s+([A-Za-z_$][\\w$]*)/.exec(generatedLine);\n if (functionMatch !== null && functionMatch.index !== undefined) {\n const token = `function ${functionMatch[1]}`;\n const sourceLocation = findSourceLocation(sourceLines, token);\n\n if (sourceLocation !== undefined) {\n segments.push({\n generatedColumn: functionMatch.index,\n sourceLine: sourceLocation.line,\n sourceColumn: sourceLocation.column,\n });\n }\n }\n\n const returnColumn = generatedLine.indexOf(\"return\");\n if (returnColumn >= 0) {\n const sourceLocation = findSourceLocation(sourceLines, \"return\");\n\n if (sourceLocation !== undefined) {\n segments.push({\n generatedColumn: returnColumn,\n sourceLine: sourceLocation.line,\n sourceColumn: sourceLocation.column,\n });\n }\n }\n\n const templateStart = generatedLine.indexOf('createTemplate(\"');\n const templateTag =\n templateStart < 0\n ? undefined\n : generatedLine.slice(templateStart).match(/<[A-Za-z][\\w:-]*/)?.[0];\n if (templateTag !== undefined) {\n const generatedColumn = generatedLine.indexOf(templateTag);\n const sourceLocation = findSourceLocation(sourceLines, templateTag);\n\n if (generatedColumn >= 0 && sourceLocation !== undefined) {\n segments.push({\n generatedColumn,\n sourceLine: sourceLocation.line,\n sourceColumn: sourceLocation.column,\n });\n }\n }\n\n const dynamicExpression = /=> \\(([^)]+)\\)/.exec(generatedLine)?.[1]?.trim();\n if (dynamicExpression !== undefined && dynamicExpression !== \"\") {\n const generatedColumn = generatedLine.indexOf(dynamicExpression);\n const bindPropAttribute = /bindProp\\([^,]+,\\s+\"([^\"]+)\"/.exec(generatedLine)?.[1];\n const sourceLocation =\n bindPropAttribute === undefined\n ? undefined\n : (findSourceLocation(sourceLines, `${bindPropAttribute}={${dynamicExpression}}`) ??\n findSourceLocation(sourceLines, `${bindPropAttribute}=\"${dynamicExpression}\"`));\n const fallbackSourceLocation =\n findSourceLocation(sourceLines, `{${dynamicExpression}}`) ??\n findJsxExpressionTokenLocation(sourceLines, dynamicExpression) ??\n findSourceLocation(sourceLines, dynamicExpression);\n const resolvedSourceLocation = sourceLocation ?? fallbackSourceLocation;\n\n if (generatedColumn >= 0 && resolvedSourceLocation !== undefined) {\n const sourceColumnOffset =\n bindPropAttribute !== undefined && sourceLocation !== undefined\n ? bindPropAttribute.length + 2\n : sourceLines[resolvedSourceLocation.line]?.startsWith(\"{\", resolvedSourceLocation.column)\n ? 1\n : 0;\n\n segments.push({\n generatedColumn,\n sourceLine: resolvedSourceLocation.line,\n sourceColumn: resolvedSourceLocation.column + sourceColumnOffset,\n ...(isIdentifierName(dynamicExpression) ? { name: dynamicExpression } : {}),\n });\n\n for (const identifier of collectIdentifierReferences(dynamicExpression)) {\n segments.push({\n generatedColumn: generatedColumn + identifier.column,\n sourceLine: resolvedSourceLocation.line,\n sourceColumn: resolvedSourceLocation.column + sourceColumnOffset + identifier.column,\n name: identifier.name,\n });\n }\n }\n }\n\n return dedupeAndSortSegments(segments);\n}\n\nfunction getSourceMapNameIndex(\n name: string,\n names: string[],\n indexes: Map<string, number>,\n): number {\n const existing = indexes.get(name);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const index = names.length;\n names.push(name);\n indexes.set(name, index);\n return index;\n}\n\nfunction isIdentifierName(value: string): boolean {\n return /^[A-Za-z_$][\\w$]*$/.test(value);\n}\n\nfunction collectIdentifierReferences(expression: string): { name: string; column: number }[] {\n const references: { name: string; column: number }[] = [];\n const seen = new Set<string>();\n const identifierPattern = /\\b[A-Za-z_$][\\w$]*\\b/g;\n\n for (const match of expression.matchAll(identifierPattern)) {\n const name = match[0];\n const column = match.index ?? 0;\n\n if (sourceMapIgnoredIdentifiers.has(name) || seen.has(`${name}:${column}`)) {\n continue;\n }\n\n references.push({ name, column });\n seen.add(`${name}:${column}`);\n }\n\n return references;\n}\n\nconst sourceMapIgnoredIdentifiers = new Set([\"false\", \"null\", \"true\", \"undefined\"]);\n\nfunction findFallbackSourceLine(\n generatedLine: string,\n generatedLineIndex: number,\n sourceLines: readonly string[],\n): number {\n const functionName = /function\\s+([A-Za-z_$][\\w$]*)/.exec(generatedLine)?.[1];\n\n if (functionName !== undefined) {\n return findSourceLocation(sourceLines, `function ${functionName}`)?.line ?? 0;\n }\n\n if (generatedLine.includes(\"createTemplate\")) {\n const jsxLine = sourceLines.findIndex((line) => line.includes(\"<\"));\n return jsxLine < 0 ? 0 : jsxLine;\n }\n\n if (generatedLine.includes(\"return\")) {\n return findSourceLocation(sourceLines, \"return\")?.line ?? 0;\n }\n\n return Math.min(generatedLineIndex, Math.max(0, sourceLines.length - 1));\n}\n\nfunction findSourceLocation(\n sourceLines: readonly string[],\n token: string,\n): { line: number; column: number } | undefined {\n for (const [line, sourceLine] of sourceLines.entries()) {\n const column = sourceLine.indexOf(token);\n\n if (column >= 0) {\n return { line, column };\n }\n }\n\n return undefined;\n}\n\nfunction findJsxExpressionTokenLocation(\n sourceLines: readonly string[],\n token: string,\n): { line: number; column: number } | undefined {\n let insideJsxExpression = false;\n\n for (const [line, sourceLine] of sourceLines.entries()) {\n if (sourceLine.includes(\"<\") && sourceLine.includes(\"{\")) {\n insideJsxExpression = true;\n }\n\n if (insideJsxExpression) {\n const column = sourceLine.indexOf(token);\n\n if (column >= 0) {\n return { line, column };\n }\n }\n\n if (sourceLine.includes(\"}\")) {\n insideJsxExpression = false;\n }\n }\n\n return undefined;\n}\n\nfunction dedupeAndSortSegments(segments: readonly SourceMapSegment[]): SourceMapSegment[] {\n const byGeneratedColumn = new Map<number, SourceMapSegment>();\n\n for (const segment of segments) {\n byGeneratedColumn.set(segment.generatedColumn, segment);\n }\n\n return Array.from(byGeneratedColumn.values()).sort(\n (left, right) => left.generatedColumn - right.generatedColumn,\n );\n}\n\nconst sourceMapBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nfunction encodeVlq(value: number): string {\n let vlq = value < 0 ? (-value << 1) + 1 : value << 1;\n let encoded = \"\";\n\n do {\n let digit = vlq & 31;\n vlq >>>= 5;\n\n if (vlq > 0) {\n digit |= 32;\n }\n\n encoded += sourceMapBase64[digit] ?? \"\";\n } while (vlq > 0);\n\n return encoded;\n}\n\nfunction collectEventHydrationEntries(\n components: readonly ComponentIr[],\n): EventHydrationEntryMetadata[] {\n return components.flatMap((component) => {\n const entries: EventHydrationEntryMetadata[] = [];\n collectEventsFromNode(component.root, component.name, \"0\", entries);\n return entries;\n });\n}\n\nfunction collectClientReferences(components: readonly ComponentIr[]): string[] {\n const references = new Set<string>();\n\n for (const component of components) {\n collectClientReferencesFromNode(component.root, references);\n }\n\n return Array.from(references);\n}\n\nfunction collectClientReferenceManifest(\n components: readonly ComponentIr[],\n): ClientReferenceMetadata[] {\n const references = new Map<string, ClientReferenceMetadata>();\n\n for (const component of components) {\n collectClientReferenceManifestFromNode(component.root, references);\n }\n\n return Array.from(references.values());\n}\n\nfunction collectClientReferenceManifestFromNode(\n node: JsxNodeIr,\n references: Map<string, ClientReferenceMetadata>,\n): void {\n if (node.kind === \"component\" && node.clientReference !== undefined) {\n references.set(`${node.name}:${node.clientReference.moduleId}:${node.clientReference.exportName}`, {\n name: node.name,\n moduleId: node.clientReference.moduleId,\n exportName: node.clientReference.exportName,\n });\n }\n\n for (const child of getNodeChildren(node)) {\n collectClientReferenceManifestFromNode(child, references);\n }\n\n if (node.kind === \"component\") {\n for (const prop of node.props) {\n if (prop.kind === \"render-prop\") {\n for (const child of prop.children) {\n collectClientReferenceManifestFromNode(child, references);\n }\n }\n }\n }\n}\n\nfunction collectClientReferencesFromNode(\n node: JsxNodeIr,\n references: Set<string>,\n): void {\n if (node.kind === \"component\" && node.runtime === \"compat\" && node.clientReference !== undefined) {\n references.add(node.name);\n }\n\n for (const child of getNodeChildren(node)) {\n collectClientReferencesFromNode(child, references);\n }\n\n if (node.kind === \"component\") {\n for (const prop of node.props) {\n if (prop.kind === \"render-prop\") {\n for (const child of prop.children) {\n collectClientReferencesFromNode(child, references);\n }\n }\n }\n }\n}\n\nfunction collectEventsFromNode(\n node: JsxNodeIr,\n componentName: string,\n path: string,\n entries: EventHydrationEntryMetadata[],\n): void {\n if (node.kind === \"element\") {\n for (const attr of node.attributes) {\n if (attr.kind === \"event\") {\n entries.push({\n id: `${componentName}:${path}`,\n event: attr.eventName,\n handler: attr.code,\n });\n }\n }\n }\n\n for (const [index, child] of getNodeChildren(node).entries()) {\n collectEventsFromNode(child, componentName, `${path}.${index}`, entries);\n }\n}\n\nfunction getNodeChildren(node: JsxNodeIr): readonly JsxNodeIr[] {\n if (node.kind === \"element\" || node.kind === \"fragment\") {\n return node.children;\n }\n\n if (node.kind === \"conditional\") {\n return [...node.whenTrue, ...node.whenFalse];\n }\n\n if (node.kind === \"list\") {\n return node.children;\n }\n\n if (node.kind === \"async-boundary\") {\n return [...node.children, ...(node.placeholderChildren ?? []), ...(node.catchChildren ?? [])];\n }\n\n return [];\n}\n\nfunction createServerOptions(\n serverBootstrap: NonNullable<TransformInput[\"serverBootstrap\"]>,\n serverBootstrapNonce?: string,\n serverBootstrapSrc?: string,\n serverHydration?: boolean,\n reactSuspenseRevealScriptSrc?: string,\n) {\n return {\n serverBootstrap,\n ...(serverBootstrapNonce === undefined ? {} : { serverBootstrapNonce }),\n ...(serverBootstrapSrc === undefined ? {} : { serverBootstrapSrc }),\n ...(serverHydration === undefined ? {} : { serverHydration }),\n ...(reactSuspenseRevealScriptSrc === undefined ? {} : { reactSuspenseRevealScriptSrc }),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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","sourcesContent":["import { emitClient } from \"./emit-client.js\";\nimport { emitCompat } from \"./emit-compat.js\";\nimport { emitServer } from \"./emit-server.js\";\nimport { emitServerStream } from \"./emit-server-stream.js\";\nimport { analyzeCompilerModuleContextWithOxc, analyzeWithOxc } from \"./oxc.js\";\nimport type { ComponentIr, JsxNodeIr } from \"./ir.js\";\nimport type { AnalyzeToIrInput, AnalyzeToIrOutput, CompilerModuleContext } from \"./internal.js\";\nimport type { AnalyzeModuleOptions } from \"./types.js\";\nimport type {\n ClientReferenceMetadata,\n EventHydrationEntryMetadata,\n ModuleMetadata,\n TransformInput,\n TransformOutput,\n} from \"./types.js\";\n\nexport function transform(input: TransformInput): TransformOutput {\n return transformWithAnalyzer(input, (analyzeTarget, analyzeOptions) =>\n analyzeWithOxc({\n code: input.code,\n filename: input.filename,\n target: analyzeTarget,\n options: analyzeOptions,\n }),\n );\n}\n\nexport function transformCompilerModuleContext(\n input: TransformInput & { moduleContext: CompilerModuleContext },\n): TransformOutput {\n if (\n (input.moduleContext.code !== input.code || input.moduleContext.filename !== input.filename)\n ) {\n throw new Error(\"Transform input moduleContext must match the input code and filename.\");\n }\n\n return transformWithAnalyzer(input, (analyzeTarget, analyzeOptions) =>\n analyzeCompilerModuleContextWithOxc(input.moduleContext, {\n target: analyzeTarget,\n options: analyzeOptions,\n }),\n );\n}\n\nfunction transformWithAnalyzer(\n input: TransformInput,\n analyze: (\n target: AnalyzeToIrInput[\"target\"],\n options: AnalyzeModuleOptions,\n ) => AnalyzeToIrOutput,\n): TransformOutput {\n const mode = input.mode ?? \"reactive\";\n const serverOutput = input.serverOutput ?? \"string\";\n const serverBootstrap = input.serverBootstrap ?? \"none\";\n const analyzeTarget = mode === \"compat\" ? \"client\" : input.target;\n const bodyStatementJsx =\n input.target === \"server\"\n ? \"server-string\"\n : mode === \"compat\" && input.target === \"client\"\n ? \"compat-object\"\n : \"dom-node\";\n const analyzeOptions = {\n topLevelJsx:\n mode === \"compat\" && input.target === \"client\"\n ? \"compat-object\"\n : input.target === \"server\"\n ? \"server-string\"\n : \"diagnostic\",\n bodyStatementJsx,\n ...(input.target === \"server\" ? { serverOutput } : {}),\n awaitCompatComponents:\n input.target === \"server\" && serverOutput === \"stream\" ? \"lower\" : \"diagnostic\",\n clientBoundaryImports: input.clientBoundaryImports ?? [],\n compatReactNodeReturn: mode === \"compat\",\n ...(mode === \"compat\" && input.target === \"server\"\n ? { compatReactNodeReturnRenderMode: \"react-node\" as const }\n : {}),\n } as const;\n const analyzed = analyze(analyzeTarget, analyzeOptions);\n const diagnostics = [...analyzed.diagnostics];\n const emitted =\n mode === \"compat\" && input.target === \"client\"\n ? emitCompat(analyzed.ir, { dev: input.dev })\n : input.target === \"server\"\n ? serverOutput === \"stream\"\n ? emitServerStream(\n analyzed.ir,\n {\n ...createServerOptions(\n serverBootstrap,\n input.serverBootstrapNonce,\n input.serverBootstrapSrc,\n input.serverHydration,\n input.reactSuspenseRevealScriptSrc,\n ),\n ...(input.serverAwaitHydration === true\n ? { serverAwaitHydration: true as const }\n : {}),\n dynamicAttributes: mode === \"compat\" ? \"drop\" : \"emit\",\n escape: input.serverEscape,\n },\n )\n : emitServer(\n analyzed.ir,\n {\n ...createServerOptions(\n serverBootstrap,\n input.serverBootstrapNonce,\n input.serverBootstrapSrc,\n input.serverHydration,\n ),\n dynamicAttributes: mode === \"compat\" ? \"drop\" : \"emit\",\n escape: input.serverEscape,\n },\n )\n : emitClient(analyzed.ir);\n\n const metadata: ModuleMetadata = {\n filename: input.filename,\n target: input.target,\n compiler: {\n frontend: \"oxc\",\n typescriptFallback: false,\n },\n components: analyzed.ir.components.map((component) => ({\n name: component.name,\n exportName: component.exportName,\n })),\n imports: emitted.imports,\n };\n const events = collectEventHydrationEntries(analyzed.ir.components);\n\n if (events.length > 0) {\n metadata.eventHydrationManifest = {\n version: 1,\n events,\n };\n }\n const clientReferences = collectClientReferences(analyzed.ir.components);\n\n if (clientReferences.length > 0) {\n metadata.clientReferences = clientReferences;\n }\n const clientReferenceManifest = collectClientReferenceManifest(analyzed.ir.components);\n\n if (clientReferenceManifest.length > 0) {\n metadata.clientReferenceManifest = clientReferenceManifest;\n }\n\n if (input.target === \"server\") {\n metadata.serverOutput = serverOutput;\n\n if (serverBootstrap !== \"none\") {\n metadata.serverBootstrap = serverBootstrap;\n }\n\n if (input.serverBootstrapNonce !== undefined) {\n metadata.serverBootstrapNonce = input.serverBootstrapNonce;\n }\n\n if (input.serverBootstrapSrc !== undefined) {\n metadata.serverBootstrapSrc = input.serverBootstrapSrc;\n }\n\n if (input.serverHydration === true) {\n metadata.serverHydration = true;\n }\n\n if (input.reactSuspenseRevealScriptSrc !== undefined) {\n metadata.reactSuspenseRevealScriptSrc = input.reactSuspenseRevealScriptSrc;\n }\n }\n\n return {\n code: emitted.code,\n map: input.sourceMap === true ? createSourceMap(input, emitted.code) : null,\n diagnostics,\n metadata,\n };\n}\n\nfunction createSourceMap(input: TransformInput, outputCode: string): string {\n const generatedMap = createSegmentMappings(outputCode, input.code);\n\n return JSON.stringify({\n version: 3,\n file: `${input.filename}.js`,\n sources: [input.filename],\n sourcesContent: [input.code],\n names: generatedMap.names,\n mappings: generatedMap.mappings,\n });\n}\n\ninterface GeneratedSourceMap {\n mappings: string;\n names: string[];\n}\n\nfunction createSegmentMappings(outputCode: string, sourceCode: string): GeneratedSourceMap {\n const generatedLines = outputCode.split(\"\\n\");\n const sourceLines = sourceCode.split(\"\\n\");\n const lines: string[] = [];\n const names: string[] = [];\n const nameIndexes = new Map<string, number>();\n let previousSourceIndex = 0;\n let previousSourceLine = 0;\n let previousSourceColumn = 0;\n let previousNameIndex = 0;\n const searchState: SourceMapSearchState = { tokenOffsets: new Map() };\n\n for (const [lineIndex, generatedLine] of generatedLines.entries()) {\n let previousGeneratedColumn = 0;\n const segments = collectSourceMapSegments(generatedLine, lineIndex, sourceLines, searchState);\n\n lines.push(\n segments\n .map((segment) => {\n const fields = [\n encodeVlq(segment.generatedColumn - previousGeneratedColumn),\n encodeVlq(0 - previousSourceIndex),\n encodeVlq(segment.sourceLine - previousSourceLine),\n encodeVlq(segment.sourceColumn - previousSourceColumn),\n ];\n\n if (segment.name !== undefined) {\n const nameIndex = getSourceMapNameIndex(segment.name, names, nameIndexes);\n fields.push(encodeVlq(nameIndex - previousNameIndex));\n previousNameIndex = nameIndex;\n }\n\n const encoded = fields.join(\"\");\n previousGeneratedColumn = segment.generatedColumn;\n previousSourceIndex = 0;\n previousSourceLine = segment.sourceLine;\n previousSourceColumn = segment.sourceColumn;\n return encoded;\n })\n .join(\",\"),\n );\n }\n\n return { mappings: lines.join(\";\"), names };\n}\n\ninterface SourceMapSegment {\n generatedColumn: number;\n sourceLine: number;\n sourceColumn: number;\n name?: string;\n}\n\ninterface SourceMapSearchState {\n tokenOffsets: Map<string, number>;\n}\n\nfunction collectSourceMapSegments(\n generatedLine: string,\n generatedLineIndex: number,\n sourceLines: readonly string[],\n searchState: SourceMapSearchState,\n): SourceMapSegment[] {\n const fallbackSourceLine = findFallbackSourceLine(generatedLine, generatedLineIndex, sourceLines);\n const segments: SourceMapSegment[] = [\n {\n generatedColumn: 0,\n sourceLine: fallbackSourceLine,\n sourceColumn: 0,\n },\n ];\n\n const functionMatch = /function\\s+([A-Za-z_$][\\w$]*)/.exec(generatedLine);\n if (functionMatch !== null && functionMatch.index !== undefined) {\n const token = `function ${functionMatch[1]}`;\n const sourceLocation = findSourceLocation(sourceLines, token);\n\n if (sourceLocation !== undefined) {\n segments.push({\n generatedColumn: functionMatch.index,\n sourceLine: sourceLocation.line,\n sourceColumn: sourceLocation.column,\n });\n }\n }\n\n const returnColumn = generatedLine.indexOf(\"return\");\n if (returnColumn >= 0) {\n const sourceLocation = findSourceLocation(sourceLines, \"return\");\n\n if (sourceLocation !== undefined) {\n segments.push({\n generatedColumn: returnColumn,\n sourceLine: sourceLocation.line,\n sourceColumn: sourceLocation.column,\n });\n }\n }\n\n const templateStart = generatedLine.indexOf('createTemplate(\"');\n const templateTag =\n templateStart < 0\n ? undefined\n : generatedLine.slice(templateStart).match(/<[A-Za-z][\\w:-]*/)?.[0];\n if (templateTag !== undefined) {\n const generatedColumn = generatedLine.indexOf(templateTag);\n const sourceLocation = findSourceLocation(sourceLines, templateTag);\n\n if (generatedColumn >= 0 && sourceLocation !== undefined) {\n segments.push({\n generatedColumn,\n sourceLine: sourceLocation.line,\n sourceColumn: sourceLocation.column,\n });\n }\n }\n\n const dynamicExpression = /=> \\(([^)]+)\\)/.exec(generatedLine)?.[1]?.trim();\n if (dynamicExpression !== undefined && dynamicExpression !== \"\") {\n const generatedColumn = generatedLine.indexOf(dynamicExpression);\n const bindPropAttribute = /bindProp\\([^,]+,\\s+\"([^\"]+)\"/.exec(generatedLine)?.[1];\n const sourceLocation =\n bindPropAttribute === undefined\n ? undefined\n : (findSourceLocation(sourceLines, `${bindPropAttribute}={${dynamicExpression}}`, searchState) ??\n findSourceLocation(sourceLines, `${bindPropAttribute}=\"${dynamicExpression}\"`, searchState));\n const fallbackSourceLocation =\n findSourceLocation(sourceLines, `{${dynamicExpression}}`, searchState) ??\n findJsxExpressionTokenLocation(sourceLines, dynamicExpression) ??\n findSourceLocation(sourceLines, dynamicExpression, searchState);\n const resolvedSourceLocation = sourceLocation ?? fallbackSourceLocation;\n\n if (generatedColumn >= 0 && resolvedSourceLocation !== undefined) {\n const sourceColumnOffset =\n bindPropAttribute !== undefined && sourceLocation !== undefined\n ? bindPropAttribute.length + 2\n : sourceLines[resolvedSourceLocation.line]?.startsWith(\"{\", resolvedSourceLocation.column)\n ? 1\n : 0;\n\n segments.push({\n generatedColumn,\n sourceLine: resolvedSourceLocation.line,\n sourceColumn: resolvedSourceLocation.column + sourceColumnOffset,\n ...(isIdentifierName(dynamicExpression) ? { name: dynamicExpression } : {}),\n });\n\n for (const identifier of collectIdentifierReferences(dynamicExpression)) {\n segments.push({\n generatedColumn: generatedColumn + identifier.column,\n sourceLine: resolvedSourceLocation.line,\n sourceColumn: resolvedSourceLocation.column + sourceColumnOffset + identifier.column,\n name: identifier.name,\n });\n }\n }\n }\n\n return dedupeAndSortSegments(segments);\n}\n\nfunction getSourceMapNameIndex(\n name: string,\n names: string[],\n indexes: Map<string, number>,\n): number {\n const existing = indexes.get(name);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const index = names.length;\n names.push(name);\n indexes.set(name, index);\n return index;\n}\n\nfunction isIdentifierName(value: string): boolean {\n return /^[A-Za-z_$][\\w$]*$/.test(value);\n}\n\nfunction collectIdentifierReferences(expression: string): { name: string; column: number }[] {\n const references: { name: string; column: number }[] = [];\n const seen = new Set<string>();\n const identifierPattern = /\\b[A-Za-z_$][\\w$]*\\b/g;\n\n for (const match of expression.matchAll(identifierPattern)) {\n const name = match[0];\n const column = match.index ?? 0;\n\n if (sourceMapIgnoredIdentifiers.has(name) || seen.has(`${name}:${column}`)) {\n continue;\n }\n\n references.push({ name, column });\n seen.add(`${name}:${column}`);\n }\n\n return references;\n}\n\nconst sourceMapIgnoredIdentifiers = new Set([\"false\", \"null\", \"true\", \"undefined\"]);\n\nfunction findFallbackSourceLine(\n generatedLine: string,\n generatedLineIndex: number,\n sourceLines: readonly string[],\n): number {\n const functionName = /function\\s+([A-Za-z_$][\\w$]*)/.exec(generatedLine)?.[1];\n\n if (functionName !== undefined) {\n return findSourceLocation(sourceLines, `function ${functionName}`)?.line ?? 0;\n }\n\n if (generatedLine.includes(\"createTemplate\")) {\n const jsxLine = sourceLines.findIndex((line) => line.includes(\"<\"));\n return jsxLine < 0 ? 0 : jsxLine;\n }\n\n if (generatedLine.includes(\"return\")) {\n return findSourceLocation(sourceLines, \"return\")?.line ?? 0;\n }\n\n return Math.min(generatedLineIndex, Math.max(0, sourceLines.length - 1));\n}\n\nfunction findSourceLocation(\n sourceLines: readonly string[],\n token: string,\n searchState?: SourceMapSearchState,\n): { line: number; column: number } | undefined {\n const source = sourceLines.join(\"\\n\");\n const start = searchState?.tokenOffsets.get(token) ?? 0;\n let offset = source.indexOf(token, start);\n\n if (offset < 0 && start > 0) {\n offset = source.indexOf(token);\n }\n\n if (offset < 0) {\n return undefined;\n }\n\n searchState?.tokenOffsets.set(token, offset + token.length);\n return sourceOffsetToLineColumn(sourceLines, offset);\n}\n\nfunction sourceOffsetToLineColumn(\n sourceLines: readonly string[],\n offset: number,\n): { line: number; column: number } {\n let remaining = offset;\n\n for (const [line, sourceLine] of sourceLines.entries()) {\n if (remaining <= sourceLine.length) {\n return { line, column: remaining };\n }\n\n remaining -= sourceLine.length + 1;\n }\n\n return {\n line: Math.max(0, sourceLines.length - 1),\n column: sourceLines.at(-1)?.length ?? 0,\n };\n}\n\nfunction findJsxExpressionTokenLocation(\n sourceLines: readonly string[],\n token: string,\n): { line: number; column: number } | undefined {\n let insideJsxExpression = false;\n\n for (const [line, sourceLine] of sourceLines.entries()) {\n if (sourceLine.includes(\"<\") && sourceLine.includes(\"{\")) {\n insideJsxExpression = true;\n }\n\n if (insideJsxExpression) {\n const column = sourceLine.indexOf(token);\n\n if (column >= 0) {\n return { line, column };\n }\n }\n\n if (sourceLine.includes(\"}\")) {\n insideJsxExpression = false;\n }\n }\n\n return undefined;\n}\n\nfunction dedupeAndSortSegments(segments: readonly SourceMapSegment[]): SourceMapSegment[] {\n const byGeneratedColumn = new Map<number, SourceMapSegment>();\n\n for (const segment of segments) {\n byGeneratedColumn.set(segment.generatedColumn, segment);\n }\n\n return Array.from(byGeneratedColumn.values()).sort(\n (left, right) => left.generatedColumn - right.generatedColumn,\n );\n}\n\nconst sourceMapBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nfunction encodeVlq(value: number): string {\n let vlq = value < 0 ? (-value << 1) + 1 : value << 1;\n let encoded = \"\";\n\n do {\n let digit = vlq & 31;\n vlq >>>= 5;\n\n if (vlq > 0) {\n digit |= 32;\n }\n\n encoded += sourceMapBase64[digit] ?? \"\";\n } while (vlq > 0);\n\n return encoded;\n}\n\nfunction collectEventHydrationEntries(\n components: readonly ComponentIr[],\n): EventHydrationEntryMetadata[] {\n return components.flatMap((component) => {\n const entries: EventHydrationEntryMetadata[] = [];\n collectEventsFromNode(component.root, component.name, \"0\", entries);\n return entries;\n });\n}\n\nfunction collectClientReferences(components: readonly ComponentIr[]): string[] {\n const references = new Set<string>();\n\n for (const component of components) {\n collectClientReferencesFromNode(component.root, references);\n }\n\n return Array.from(references);\n}\n\nfunction collectClientReferenceManifest(\n components: readonly ComponentIr[],\n): ClientReferenceMetadata[] {\n const references = new Map<string, ClientReferenceMetadata>();\n\n for (const component of components) {\n collectClientReferenceManifestFromNode(component.root, references);\n }\n\n return Array.from(references.values());\n}\n\nfunction collectClientReferenceManifestFromNode(\n node: JsxNodeIr,\n references: Map<string, ClientReferenceMetadata>,\n): void {\n if (node.kind === \"component\" && node.clientReference !== undefined) {\n references.set(`${node.name}:${node.clientReference.moduleId}:${node.clientReference.exportName}`, {\n name: node.name,\n moduleId: node.clientReference.moduleId,\n exportName: node.clientReference.exportName,\n });\n }\n\n for (const child of getNodeChildren(node)) {\n collectClientReferenceManifestFromNode(child, references);\n }\n\n if (node.kind === \"component\") {\n for (const prop of node.props) {\n if (prop.kind === \"render-prop\") {\n for (const child of prop.children) {\n collectClientReferenceManifestFromNode(child, references);\n }\n }\n }\n }\n}\n\nfunction collectClientReferencesFromNode(\n node: JsxNodeIr,\n references: Set<string>,\n): void {\n if (node.kind === \"component\" && node.runtime === \"compat\" && node.clientReference !== undefined) {\n references.add(node.name);\n }\n\n for (const child of getNodeChildren(node)) {\n collectClientReferencesFromNode(child, references);\n }\n\n if (node.kind === \"component\") {\n for (const prop of node.props) {\n if (prop.kind === \"render-prop\") {\n for (const child of prop.children) {\n collectClientReferencesFromNode(child, references);\n }\n }\n }\n }\n}\n\nfunction collectEventsFromNode(\n node: JsxNodeIr,\n componentName: string,\n path: string,\n entries: EventHydrationEntryMetadata[],\n): void {\n if (node.kind === \"element\") {\n for (const attr of node.attributes) {\n if (attr.kind === \"event\") {\n entries.push({\n id: `${componentName}:${path}`,\n event: attr.eventName,\n handler: attr.code,\n });\n }\n }\n }\n\n for (const [index, child] of getNodeChildren(node).entries()) {\n collectEventsFromNode(child, componentName, `${path}.${index}`, entries);\n }\n}\n\nfunction getNodeChildren(node: JsxNodeIr): readonly JsxNodeIr[] {\n if (node.kind === \"element\" || node.kind === \"fragment\") {\n return node.children;\n }\n\n if (node.kind === \"conditional\") {\n return [...node.whenTrue, ...node.whenFalse];\n }\n\n if (node.kind === \"list\") {\n return node.children;\n }\n\n if (node.kind === \"async-boundary\") {\n return [...node.children, ...(node.placeholderChildren ?? []), ...(node.catchChildren ?? [])];\n }\n\n return [];\n}\n\nfunction createServerOptions(\n serverBootstrap: NonNullable<TransformInput[\"serverBootstrap\"]>,\n serverBootstrapNonce?: string,\n serverBootstrapSrc?: string,\n serverHydration?: boolean,\n reactSuspenseRevealScriptSrc?: string,\n) {\n return {\n serverBootstrap,\n ...(serverBootstrapNonce === undefined ? {} : { serverBootstrapNonce }),\n ...(serverBootstrapSrc === undefined ? {} : { serverBootstrapSrc }),\n ...(serverHydration === undefined ? {} : { serverHydration }),\n ...(reactSuspenseRevealScriptSrc === undefined ? {} : { reactSuspenseRevealScriptSrc }),\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reckona/mreact-compiler",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.99",
|
|
4
4
|
"description": "Compiler passes and OXC-backed JSX analysis for mreact.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"compiler",
|
|
@@ -50,6 +50,6 @@
|
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"oxc-parser": "0.129.0",
|
|
52
52
|
"oxc-transform": "0.129.0",
|
|
53
|
-
"@reckona/mreact-shared": "0.0.
|
|
53
|
+
"@reckona/mreact-shared": "0.0.99"
|
|
54
54
|
}
|
|
55
55
|
}
|
package/src/diagnostics.ts
CHANGED
|
@@ -139,6 +139,16 @@ export function unsupportedTopLevelJsxInitializerDiagnostic(
|
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
+
export function unsupportedJsxSpreadChildDiagnostic(loc?: SourceLocation): Diagnostic {
|
|
143
|
+
return {
|
|
144
|
+
level: "error",
|
|
145
|
+
code: "MR_UNSUPPORTED_JSX_SPREAD_CHILD",
|
|
146
|
+
message:
|
|
147
|
+
"JSX spread children are not supported yet. Pass an array expression as a normal JSX expression child instead of using `{...children}` syntax.",
|
|
148
|
+
...(loc === undefined ? {} : { loc }),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
142
152
|
export function invalidJsxExpressionDiagnostic(
|
|
143
153
|
loc?: SourceLocation,
|
|
144
154
|
context: "text" | "attribute" | "unknown" = "unknown",
|
package/src/emit-client.ts
CHANGED
|
@@ -238,7 +238,7 @@ function emitComponent(
|
|
|
238
238
|
|
|
239
239
|
const fragmentName = allocator("_fragment");
|
|
240
240
|
const rootName = allocator("_root");
|
|
241
|
-
const templateHtml =
|
|
241
|
+
const templateHtml = JSON.stringify(renderStaticHtml(component.root));
|
|
242
242
|
const setup = emitSetup(component.root, rootName, {
|
|
243
243
|
allocateName: allocator,
|
|
244
244
|
textIndex: 0,
|
|
@@ -246,7 +246,7 @@ function emitComponent(
|
|
|
246
246
|
clientBoundaryHelperName,
|
|
247
247
|
});
|
|
248
248
|
return [
|
|
249
|
-
`const ${templateName} = ${helperNames.createTemplate}(
|
|
249
|
+
`const ${templateName} = ${helperNames.createTemplate}(${templateHtml});`,
|
|
250
250
|
`${component.exportDefault === true ? "export default " : component.exported === false ? "" : "export "}function ${component.name}(${parameters}) {`,
|
|
251
251
|
...body,
|
|
252
252
|
` const ${fragmentName} = ${templateName}();`,
|
|
@@ -413,7 +413,7 @@ function emitSetup(
|
|
|
413
413
|
|
|
414
414
|
if (child.kind === "conditional") {
|
|
415
415
|
lines.push(
|
|
416
|
-
` ${state.helperNames.insertDynamic}(${path}, ${childPath}, () =>
|
|
416
|
+
` ${state.helperNames.insertDynamic}(${path}, ${childPath}, () => ${emitConditionalRenderValueExpression(child, state)});`,
|
|
417
417
|
);
|
|
418
418
|
childIndex += 1;
|
|
419
419
|
continue;
|
|
@@ -652,7 +652,7 @@ function emitNodeRenderValueExpression(
|
|
|
652
652
|
}
|
|
653
653
|
|
|
654
654
|
if (node.kind === "conditional") {
|
|
655
|
-
return
|
|
655
|
+
return emitConditionalRenderValueExpression(node, state);
|
|
656
656
|
}
|
|
657
657
|
|
|
658
658
|
if (node.kind === "list") {
|
|
@@ -667,13 +667,13 @@ function emitNodeRenderValueExpression(
|
|
|
667
667
|
const templateName = state.allocateName("_dynamicTemplate");
|
|
668
668
|
const fragmentName = state.allocateName("_dynamicFragment");
|
|
669
669
|
const rootName = state.allocateName("_dynamicRoot");
|
|
670
|
-
const templateHtml =
|
|
670
|
+
const templateHtml = JSON.stringify(renderStaticHtml(node));
|
|
671
671
|
const setup = emitSetup(node, rootName, state);
|
|
672
672
|
const setupLines = setup === "" ? [] : setup.split("\n");
|
|
673
673
|
|
|
674
674
|
return [
|
|
675
675
|
"(() => {",
|
|
676
|
-
` const ${templateName} = ${state.helperNames.createTemplate}(
|
|
676
|
+
` const ${templateName} = ${state.helperNames.createTemplate}(${templateHtml});`,
|
|
677
677
|
` const ${fragmentName} = ${templateName}();`,
|
|
678
678
|
` const ${rootName} = ${fragmentName}.firstChild;`,
|
|
679
679
|
...setupLines,
|
|
@@ -682,6 +682,20 @@ function emitNodeRenderValueExpression(
|
|
|
682
682
|
].join("\n");
|
|
683
683
|
}
|
|
684
684
|
|
|
685
|
+
function emitConditionalRenderValueExpression(
|
|
686
|
+
node: Extract<JsxNodeIr, { kind: "conditional" }>,
|
|
687
|
+
state: EmitSetupState,
|
|
688
|
+
): string {
|
|
689
|
+
const whenTrue = emitRenderValueExpression(node.whenTrue, state);
|
|
690
|
+
const whenFalse = emitRenderValueExpression(node.whenFalse, state);
|
|
691
|
+
|
|
692
|
+
if (node.conditionValueName === undefined) {
|
|
693
|
+
return `((${node.conditionCode}) ? ${whenTrue} : ${whenFalse})`;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
return `(() => { const ${node.conditionValueName} = (${node.conditionCode}); return ${node.conditionValueName} ? ${whenTrue} : ${whenFalse}; })()`;
|
|
697
|
+
}
|
|
698
|
+
|
|
685
699
|
function emitListRenderer(
|
|
686
700
|
node: Extract<JsxNodeIr, { kind: "list" }>,
|
|
687
701
|
parameters: string,
|
|
@@ -847,7 +861,3 @@ function visit(node: JsxNodeIr, fn: (node: JsxNodeIr) => void): void {
|
|
|
847
861
|
}
|
|
848
862
|
}
|
|
849
863
|
}
|
|
850
|
-
|
|
851
|
-
function escapeTemplateHtml(value: string): string {
|
|
852
|
-
return value.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"");
|
|
853
|
-
}
|
package/src/emit-compat.ts
CHANGED
|
@@ -325,7 +325,12 @@ function emitJsxNode(
|
|
|
325
325
|
}
|
|
326
326
|
|
|
327
327
|
if (node.kind === "conditional") {
|
|
328
|
-
|
|
328
|
+
const whenTrue = emitCompatChildren(node.whenTrue, helperNames, dev);
|
|
329
|
+
const whenFalse = emitCompatChildren(node.whenFalse, helperNames, dev);
|
|
330
|
+
|
|
331
|
+
return node.conditionValueName === undefined
|
|
332
|
+
? `(${node.conditionCode}) ? ${whenTrue} : ${whenFalse}`
|
|
333
|
+
: `(() => { const ${node.conditionValueName} = (${node.conditionCode}); return ${node.conditionValueName} ? ${whenTrue} : ${whenFalse}; })()`;
|
|
329
334
|
}
|
|
330
335
|
|
|
331
336
|
if (node.kind === "list") {
|
|
@@ -518,11 +518,25 @@ function emitAppendStatements(
|
|
|
518
518
|
return [];
|
|
519
519
|
}
|
|
520
520
|
|
|
521
|
+
const conditionCode = node.conditionValueName ?? node.conditionCode;
|
|
522
|
+
let statements: string[];
|
|
523
|
+
|
|
521
524
|
if (whenFalse.length === 0) {
|
|
522
|
-
|
|
525
|
+
statements = [` if (${conditionCode}) {`, ...whenTrue, ` }`];
|
|
526
|
+
} else {
|
|
527
|
+
statements = [` if (${conditionCode}) {`, ...whenTrue, ` } else {`, ...whenFalse, ` }`];
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
if (node.conditionValueName === undefined) {
|
|
531
|
+
return statements;
|
|
523
532
|
}
|
|
524
533
|
|
|
525
|
-
return [
|
|
534
|
+
return [
|
|
535
|
+
` {`,
|
|
536
|
+
` const ${node.conditionValueName} = (${node.conditionCode});`,
|
|
537
|
+
...statements.map((statement) => ` ${statement}`),
|
|
538
|
+
` }`,
|
|
539
|
+
];
|
|
526
540
|
}
|
|
527
541
|
|
|
528
542
|
const collectState: CollectHtmlState = {
|
|
@@ -842,6 +856,9 @@ function tryEmitPartAsStringExpression(
|
|
|
842
856
|
|
|
843
857
|
return `${stringLiteral(`<!--mreact-h:start:${encodeURIComponent(part.hydrationId)}-->`)} + ${rendered} + ${stringLiteral(`<!--mreact-h:end:${encodeURIComponent(part.hydrationId)}-->`)}`;
|
|
844
858
|
}
|
|
859
|
+
if (part.kind === "component" && part.hydrationId === undefined) {
|
|
860
|
+
return `${part.name}(${emitPropsObject(part.props, part.children, part.escapeHelperName)})`;
|
|
861
|
+
}
|
|
845
862
|
// Non-compat component parts require `await sink-write`; lists with
|
|
846
863
|
// sink-needing children also can't collapse. Signal fallback.
|
|
847
864
|
return undefined;
|
|
@@ -1099,10 +1116,16 @@ function collectHtmlParts(
|
|
|
1099
1116
|
}
|
|
1100
1117
|
|
|
1101
1118
|
if (node.kind === "conditional") {
|
|
1119
|
+
const whenTrue = emitHtmlExpressionFromChildren(node.whenTrue, escapeHelperName);
|
|
1120
|
+
const whenFalse = emitHtmlExpressionFromChildren(node.whenFalse, escapeHelperName);
|
|
1121
|
+
|
|
1102
1122
|
return [
|
|
1103
1123
|
{
|
|
1104
1124
|
kind: "raw-dynamic",
|
|
1105
|
-
code:
|
|
1125
|
+
code:
|
|
1126
|
+
node.conditionValueName === undefined
|
|
1127
|
+
? `((${node.conditionCode}) ? ${whenTrue} : ${whenFalse})`
|
|
1128
|
+
: `(() => { const ${node.conditionValueName} = (${node.conditionCode}); return ${node.conditionValueName} ? ${whenTrue} : ${whenFalse}; })()`,
|
|
1106
1129
|
},
|
|
1107
1130
|
];
|
|
1108
1131
|
}
|
|
@@ -1592,6 +1615,15 @@ function collectElementAttributeParts(
|
|
|
1592
1615
|
): HtmlSyncPart[] {
|
|
1593
1616
|
const escapeBatchHelperName = state.escapeBatchHelperName;
|
|
1594
1617
|
|
|
1618
|
+
if (state.dynamicAttributes === "emit" && attrs.some((attr) => attr.kind === "spread-attr")) {
|
|
1619
|
+
return [
|
|
1620
|
+
{
|
|
1621
|
+
kind: "raw-dynamic",
|
|
1622
|
+
code: emitMergedSpreadAttributeExpression(tagName, attrs, attributeScan),
|
|
1623
|
+
},
|
|
1624
|
+
];
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1595
1627
|
return attrs.flatMap((attr) =>
|
|
1596
1628
|
attr.kind !== "spread-attr" &&
|
|
1597
1629
|
((tagName === "input" &&
|
|
@@ -1610,6 +1642,38 @@ function collectElementAttributeParts(
|
|
|
1610
1642
|
);
|
|
1611
1643
|
}
|
|
1612
1644
|
|
|
1645
|
+
function emitMergedSpreadAttributeExpression(
|
|
1646
|
+
tagName: string,
|
|
1647
|
+
attrs: readonly AttributeIr[],
|
|
1648
|
+
attributeScan: ElementAttributeScan,
|
|
1649
|
+
): string {
|
|
1650
|
+
const statements = attrs.flatMap((attr): string[] => {
|
|
1651
|
+
if (
|
|
1652
|
+
attr.kind !== "spread-attr" &&
|
|
1653
|
+
((tagName === "input" &&
|
|
1654
|
+
((attr.name === "defaultValue" && attributeScan.hasExplicitInputValue) ||
|
|
1655
|
+
(attr.name === "defaultChecked" && attributeScan.hasExplicitInputChecked))) ||
|
|
1656
|
+
((tagName === "textarea" || tagName === "select") &&
|
|
1657
|
+
(attr.name === "value" || attr.name === "defaultValue")))
|
|
1658
|
+
) {
|
|
1659
|
+
return [];
|
|
1660
|
+
}
|
|
1661
|
+
|
|
1662
|
+
if (attr.kind === "spread-attr") {
|
|
1663
|
+
return [`Object.assign(_props, (${attr.code}) ?? {});`];
|
|
1664
|
+
}
|
|
1665
|
+
|
|
1666
|
+
if (attr.kind === "event" || attr.name === "key" || attr.name === "dangerouslySetInnerHTML") {
|
|
1667
|
+
return [];
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1670
|
+
const valueCode = attr.kind === "static-attr" ? stringLiteral(attr.value) : `(${attr.code})`;
|
|
1671
|
+
return [`_props[${stringLiteral(attr.name)}] = ${valueCode};`];
|
|
1672
|
+
});
|
|
1673
|
+
|
|
1674
|
+
return `(() => { const _props = {}; ${statements.join(" ")} return ${currentSpreadAttributesHelperName}(${stringLiteral(tagName)}, _props); })()`;
|
|
1675
|
+
}
|
|
1676
|
+
|
|
1613
1677
|
interface ElementAttributeScan {
|
|
1614
1678
|
hasExplicitInputValue: boolean;
|
|
1615
1679
|
hasExplicitInputChecked: boolean;
|
package/src/emit-server.ts
CHANGED
|
@@ -332,6 +332,7 @@ function collectHtmlStatements(
|
|
|
332
332
|
}
|
|
333
333
|
|
|
334
334
|
if (node.kind === "conditional") {
|
|
335
|
+
const conditionCode = node.conditionValueName ?? node.conditionCode;
|
|
335
336
|
const whenTrueStatements = node.whenTrue.flatMap((child) =>
|
|
336
337
|
collectHtmlStatements(
|
|
337
338
|
child,
|
|
@@ -363,27 +364,37 @@ function collectHtmlStatements(
|
|
|
363
364
|
return [];
|
|
364
365
|
}
|
|
365
366
|
|
|
367
|
+
let statements: string[];
|
|
366
368
|
if (whenFalseStatements.length === 0) {
|
|
367
|
-
|
|
368
|
-
`if (${
|
|
369
|
+
statements = [
|
|
370
|
+
`if (${conditionCode}) {`,
|
|
369
371
|
...whenTrueStatements.map((statement) => ` ${statement}`),
|
|
370
372
|
`}`,
|
|
371
373
|
];
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
return [
|
|
376
|
-
`if (!(${node.conditionCode})) {`,
|
|
374
|
+
} else if (whenTrueStatements.length === 0) {
|
|
375
|
+
statements = [
|
|
376
|
+
`if (!(${conditionCode})) {`,
|
|
377
377
|
...whenFalseStatements.map((statement) => ` ${statement}`),
|
|
378
378
|
`}`,
|
|
379
379
|
];
|
|
380
|
+
} else {
|
|
381
|
+
statements = [
|
|
382
|
+
`if (${conditionCode}) {`,
|
|
383
|
+
...whenTrueStatements.map((statement) => ` ${statement}`),
|
|
384
|
+
`} else {`,
|
|
385
|
+
...whenFalseStatements.map((statement) => ` ${statement}`),
|
|
386
|
+
`}`,
|
|
387
|
+
];
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
if (node.conditionValueName === undefined) {
|
|
391
|
+
return statements;
|
|
380
392
|
}
|
|
381
393
|
|
|
382
394
|
return [
|
|
383
|
-
`
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
...whenFalseStatements.map((statement) => ` ${statement}`),
|
|
395
|
+
`{`,
|
|
396
|
+
` const ${node.conditionValueName} = (${node.conditionCode});`,
|
|
397
|
+
...statements.map((statement) => ` ${statement}`),
|
|
387
398
|
`}`,
|
|
388
399
|
];
|
|
389
400
|
}
|
|
@@ -682,8 +693,13 @@ function collectHtmlParts(
|
|
|
682
693
|
}
|
|
683
694
|
|
|
684
695
|
if (node.kind === "conditional") {
|
|
696
|
+
const whenTrue = emitHtmlExpressionFromChildren(node.whenTrue, escapeHelperName, escapeBatchHelperName, asyncComponentNames, dynamicAttributes, contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName);
|
|
697
|
+
const whenFalse = emitHtmlExpressionFromChildren(node.whenFalse, escapeHelperName, escapeBatchHelperName, asyncComponentNames, dynamicAttributes, contextProviderHelperName, contextConsumerHelperName, reactNodeRenderHelperName);
|
|
698
|
+
|
|
685
699
|
return [
|
|
686
|
-
|
|
700
|
+
node.conditionValueName === undefined
|
|
701
|
+
? `((${node.conditionCode}) ? ${whenTrue} : ${whenFalse})`
|
|
702
|
+
: `(() => { const ${node.conditionValueName} = (${node.conditionCode}); return ${node.conditionValueName} ? ${whenTrue} : ${whenFalse}; })()`,
|
|
687
703
|
];
|
|
688
704
|
}
|
|
689
705
|
|
|
@@ -987,6 +1003,10 @@ function collectElementAttributeParts(
|
|
|
987
1003
|
dynamicAttributes: "drop" | "emit",
|
|
988
1004
|
attributeScan = scanElementAttributes(tagName, attrs),
|
|
989
1005
|
): string[] {
|
|
1006
|
+
if (dynamicAttributes === "emit" && attrs.some((attr) => attr.kind === "spread-attr")) {
|
|
1007
|
+
return [emitMergedSpreadAttributeExpression(tagName, attrs, attributeScan)];
|
|
1008
|
+
}
|
|
1009
|
+
|
|
990
1010
|
return attrs.flatMap((attr) =>
|
|
991
1011
|
attr.kind !== "spread-attr" &&
|
|
992
1012
|
((tagName === "input" &&
|
|
@@ -1005,6 +1025,38 @@ function collectElementAttributeParts(
|
|
|
1005
1025
|
);
|
|
1006
1026
|
}
|
|
1007
1027
|
|
|
1028
|
+
function emitMergedSpreadAttributeExpression(
|
|
1029
|
+
tagName: string,
|
|
1030
|
+
attrs: readonly AttributeIr[],
|
|
1031
|
+
attributeScan: ElementAttributeScan,
|
|
1032
|
+
): string {
|
|
1033
|
+
const statements = attrs.flatMap((attr): string[] => {
|
|
1034
|
+
if (
|
|
1035
|
+
attr.kind !== "spread-attr" &&
|
|
1036
|
+
((tagName === "input" &&
|
|
1037
|
+
((attr.name === "defaultValue" && attributeScan.hasExplicitInputValue) ||
|
|
1038
|
+
(attr.name === "defaultChecked" && attributeScan.hasExplicitInputChecked))) ||
|
|
1039
|
+
((tagName === "textarea" || tagName === "select") &&
|
|
1040
|
+
(attr.name === "value" || attr.name === "defaultValue")))
|
|
1041
|
+
) {
|
|
1042
|
+
return [];
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
if (attr.kind === "spread-attr") {
|
|
1046
|
+
return [`Object.assign(_props, (${attr.code}) ?? {});`];
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
if (attr.kind === "event" || attr.name === "key" || attr.name === "dangerouslySetInnerHTML") {
|
|
1050
|
+
return [];
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
const valueCode = attr.kind === "static-attr" ? stringLiteral(attr.value) : `(${attr.code})`;
|
|
1054
|
+
return [`_props[${stringLiteral(attr.name)}] = ${valueCode};`];
|
|
1055
|
+
});
|
|
1056
|
+
|
|
1057
|
+
return `(() => { const _props = {}; ${statements.join(" ")} return ${currentSpreadAttributesHelperName}(${stringLiteral(tagName)}, _props); })()`;
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1008
1060
|
interface ElementAttributeScan {
|
|
1009
1061
|
hasExplicitInputValue: boolean;
|
|
1010
1062
|
hasExplicitInputChecked: boolean;
|