@reckona/mreact-compiler 0.0.82 → 0.0.83
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/emit-boundary-lowering.d.ts +43 -0
- package/dist/emit-boundary-lowering.d.ts.map +1 -0
- package/dist/emit-boundary-lowering.js +63 -0
- package/dist/emit-boundary-lowering.js.map +1 -0
- package/dist/emit-code-builder.d.ts +9 -0
- package/dist/emit-code-builder.d.ts.map +1 -0
- package/dist/emit-code-builder.js +17 -0
- package/dist/emit-code-builder.js.map +1 -0
- package/dist/emit-server-stream.d.ts.map +1 -1
- package/dist/emit-server-stream.js +64 -84
- package/dist/emit-server-stream.js.map +1 -1
- package/dist/emit-server.d.ts.map +1 -1
- package/dist/emit-server.js +12 -1
- package/dist/emit-server.js.map +1 -1
- package/dist/types.d.ts +16 -69
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/src/emit-boundary-lowering.ts +165 -0
- package/src/emit-code-builder.ts +27 -0
- package/src/emit-server-stream.ts +61 -152
- package/src/emit-server.ts +12 -1
- package/src/types.ts +32 -79
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export type NestedAppendEmitter<Part> = (parts: readonly Part[], sinkName: string, compatRenderToStringHelperName: string) => string;
|
|
2
|
+
export interface BoundaryLoweringContext<Part> {
|
|
3
|
+
compatRenderToStringHelperName: string;
|
|
4
|
+
emitNestedAppendStatements: NestedAppendEmitter<Part>;
|
|
5
|
+
sinkName: string;
|
|
6
|
+
}
|
|
7
|
+
export interface AsyncBoundaryPart<Part> {
|
|
8
|
+
awaitId?: string;
|
|
9
|
+
catchName?: string;
|
|
10
|
+
catchParts?: readonly Part[];
|
|
11
|
+
parts: readonly Part[];
|
|
12
|
+
valueCode: string;
|
|
13
|
+
valueName: string;
|
|
14
|
+
}
|
|
15
|
+
export interface OutOfOrderBoundaryPart<Part> extends AsyncBoundaryPart<Part> {
|
|
16
|
+
id: string;
|
|
17
|
+
hydration: boolean;
|
|
18
|
+
placeholderParts: readonly Part[];
|
|
19
|
+
placeholderTagCode?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ReactSuspenseBoundaryPart<Part> {
|
|
22
|
+
parts: readonly Part[];
|
|
23
|
+
}
|
|
24
|
+
export interface ReactSuspenseOutOfOrderBoundaryPart<Part> extends AsyncBoundaryPart<Part> {
|
|
25
|
+
boundaryId: string;
|
|
26
|
+
fallbackParts: readonly Part[];
|
|
27
|
+
nonce?: string;
|
|
28
|
+
scriptSrc?: string;
|
|
29
|
+
segmentId: string;
|
|
30
|
+
}
|
|
31
|
+
export declare function emitAsyncBoundary<Part>(part: AsyncBoundaryPart<Part>, context: BoundaryLoweringContext<Part> & {
|
|
32
|
+
asyncBoundaryHelperName: string;
|
|
33
|
+
}): string;
|
|
34
|
+
export declare function emitOutOfOrderBoundary<Part>(part: OutOfOrderBoundaryPart<Part>, context: BoundaryLoweringContext<Part> & {
|
|
35
|
+
outOfOrderBoundaryHelperName: string;
|
|
36
|
+
}): string;
|
|
37
|
+
export declare function emitReactSuspenseBoundary<Part>(part: ReactSuspenseBoundaryPart<Part>, context: BoundaryLoweringContext<Part> & {
|
|
38
|
+
reactSuspenseBoundaryHelperName: string;
|
|
39
|
+
}): string;
|
|
40
|
+
export declare function emitReactSuspenseOutOfOrderBoundary<Part>(part: ReactSuspenseOutOfOrderBoundaryPart<Part>, context: BoundaryLoweringContext<Part> & {
|
|
41
|
+
reactSuspenseOutOfOrderBoundaryHelperName: string;
|
|
42
|
+
}): string;
|
|
43
|
+
//# sourceMappingURL=emit-boundary-lowering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-boundary-lowering.d.ts","sourceRoot":"","sources":["../src/emit-boundary-lowering.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,CAAC,IAAI,IAAI,CACtC,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,QAAQ,EAAE,MAAM,EAChB,8BAA8B,EAAE,MAAM,KACnC,MAAM,CAAC;AAEZ,MAAM,WAAW,uBAAuB,CAAC,IAAI;IAC3C,8BAA8B,EAAE,MAAM,CAAC;IACvC,0BAA0B,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB,CAAC,IAAI;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB,CAAC,IAAI,CAAE,SAAQ,iBAAiB,CAAC,IAAI,CAAC;IAC3E,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,SAAS,IAAI,EAAE,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB,CAAC,IAAI;IAC7C,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,mCAAmC,CAAC,IAAI,CAAE,SAAQ,iBAAiB,CAAC,IAAI,CAAC;IACxF,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,SAAS,IAAI,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EACpC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAC7B,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG;IACvC,uBAAuB,EAAE,MAAM,CAAC;CACjC,GACA,MAAM,CAwBR;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EACzC,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAClC,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG;IACvC,4BAA4B,EAAE,MAAM,CAAC;CACtC,GACA,MAAM,CA6BR;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAC5C,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,EACrC,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG;IACvC,+BAA+B,EAAE,MAAM,CAAC;CACzC,GACA,MAAM,CAUR;AAED,wBAAgB,mCAAmC,CAAC,IAAI,EACtD,IAAI,EAAE,mCAAmC,CAAC,IAAI,CAAC,EAC/C,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG;IACvC,yCAAyC,EAAE,MAAM,CAAC;CACnD,GACA,MAAM,CAmCR"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export function emitAsyncBoundary(part, context) {
|
|
2
|
+
const optionFields = [];
|
|
3
|
+
if (part.catchName !== undefined && part.catchParts !== undefined) {
|
|
4
|
+
optionFields.push(`catch: (${context.sinkName}, ${part.catchName}) => {\n${context.emitNestedAppendStatements(part.catchParts, context.sinkName, context.compatRenderToStringHelperName)}\n }`);
|
|
5
|
+
}
|
|
6
|
+
if (part.awaitId !== undefined) {
|
|
7
|
+
optionFields.push(`hydrationAwaitId: ${JSON.stringify(part.awaitId)}`);
|
|
8
|
+
}
|
|
9
|
+
const optionsExpression = optionFields.length === 0 ? "" : `, { ${optionFields.join(", ")} }`;
|
|
10
|
+
return [
|
|
11
|
+
` await ${context.asyncBoundaryHelperName}(${context.sinkName}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,
|
|
12
|
+
context.emitNestedAppendStatements(part.parts, context.sinkName, context.compatRenderToStringHelperName),
|
|
13
|
+
` }${optionsExpression});`,
|
|
14
|
+
].join("\n");
|
|
15
|
+
}
|
|
16
|
+
export function emitOutOfOrderBoundary(part, context) {
|
|
17
|
+
const catchOption = part.catchName === undefined || part.catchParts === undefined
|
|
18
|
+
? ""
|
|
19
|
+
: `,\n catch: (${context.sinkName}, ${part.catchName}) => {\n${context.emitNestedAppendStatements(part.catchParts, context.sinkName, context.compatRenderToStringHelperName)}\n }`;
|
|
20
|
+
const hydrationAwaitIdOption = part.awaitId === undefined ? "" : `,\n hydrationAwaitId: ${JSON.stringify(part.awaitId)}`;
|
|
21
|
+
const placeholderTagOption = part.placeholderTagCode === undefined ? "" : `,\n placeholderTag: (${part.placeholderTagCode})`;
|
|
22
|
+
return [
|
|
23
|
+
` ${context.outOfOrderBoundaryHelperName}(${context.sinkName}, ${JSON.stringify(part.id)}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,
|
|
24
|
+
context.emitNestedAppendStatements(part.parts, context.sinkName, context.compatRenderToStringHelperName),
|
|
25
|
+
` }, {`,
|
|
26
|
+
...(part.hydration ? [` hydration: true,`] : []),
|
|
27
|
+
` placeholder: (${context.sinkName}) => {`,
|
|
28
|
+
context.emitNestedAppendStatements(part.placeholderParts, context.sinkName, context.compatRenderToStringHelperName),
|
|
29
|
+
` }${catchOption}${hydrationAwaitIdOption}${placeholderTagOption}`,
|
|
30
|
+
` });`,
|
|
31
|
+
].join("\n");
|
|
32
|
+
}
|
|
33
|
+
export function emitReactSuspenseBoundary(part, context) {
|
|
34
|
+
return [
|
|
35
|
+
` await ${context.reactSuspenseBoundaryHelperName}(${context.sinkName}, async (${context.sinkName}) => {`,
|
|
36
|
+
context.emitNestedAppendStatements(part.parts, context.sinkName, context.compatRenderToStringHelperName),
|
|
37
|
+
` });`,
|
|
38
|
+
].join("\n");
|
|
39
|
+
}
|
|
40
|
+
export function emitReactSuspenseOutOfOrderBoundary(part, context) {
|
|
41
|
+
const options = [
|
|
42
|
+
` fallback: (${context.sinkName}) => {`,
|
|
43
|
+
context.emitNestedAppendStatements(part.fallbackParts, context.sinkName, context.compatRenderToStringHelperName),
|
|
44
|
+
` },`,
|
|
45
|
+
...(part.catchName === undefined || part.catchParts === undefined
|
|
46
|
+
? []
|
|
47
|
+
: [
|
|
48
|
+
` catch: (${context.sinkName}, ${part.catchName}) => {`,
|
|
49
|
+
context.emitNestedAppendStatements(part.catchParts, context.sinkName, context.compatRenderToStringHelperName),
|
|
50
|
+
` },`,
|
|
51
|
+
]),
|
|
52
|
+
...(part.nonce === undefined ? [] : [` nonce: ${JSON.stringify(part.nonce)},`]),
|
|
53
|
+
...(part.scriptSrc === undefined ? [] : [` src: ${JSON.stringify(part.scriptSrc)},`]),
|
|
54
|
+
];
|
|
55
|
+
return [
|
|
56
|
+
` ${context.reactSuspenseOutOfOrderBoundaryHelperName}(${context.sinkName}, ${JSON.stringify(part.boundaryId)}, ${JSON.stringify(part.segmentId)}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,
|
|
57
|
+
context.emitNestedAppendStatements(part.parts, context.sinkName, context.compatRenderToStringHelperName),
|
|
58
|
+
` }, {`,
|
|
59
|
+
...options,
|
|
60
|
+
` });`,
|
|
61
|
+
].join("\n");
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=emit-boundary-lowering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-boundary-lowering.js","sourceRoot":"","sources":["../src/emit-boundary-lowering.ts"],"names":[],"mappings":"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","sourcesContent":["export type NestedAppendEmitter<Part> = (\n parts: readonly Part[],\n sinkName: string,\n compatRenderToStringHelperName: string,\n) => string;\n\nexport interface BoundaryLoweringContext<Part> {\n compatRenderToStringHelperName: string;\n emitNestedAppendStatements: NestedAppendEmitter<Part>;\n sinkName: string;\n}\n\nexport interface AsyncBoundaryPart<Part> {\n awaitId?: string;\n catchName?: string;\n catchParts?: readonly Part[];\n parts: readonly Part[];\n valueCode: string;\n valueName: string;\n}\n\nexport interface OutOfOrderBoundaryPart<Part> extends AsyncBoundaryPart<Part> {\n id: string;\n hydration: boolean;\n placeholderParts: readonly Part[];\n placeholderTagCode?: string;\n}\n\nexport interface ReactSuspenseBoundaryPart<Part> {\n parts: readonly Part[];\n}\n\nexport interface ReactSuspenseOutOfOrderBoundaryPart<Part> extends AsyncBoundaryPart<Part> {\n boundaryId: string;\n fallbackParts: readonly Part[];\n nonce?: string;\n scriptSrc?: string;\n segmentId: string;\n}\n\nexport function emitAsyncBoundary<Part>(\n part: AsyncBoundaryPart<Part>,\n context: BoundaryLoweringContext<Part> & {\n asyncBoundaryHelperName: string;\n },\n): string {\n const optionFields: string[] = [];\n\n if (part.catchName !== undefined && part.catchParts !== undefined) {\n optionFields.push(\n `catch: (${context.sinkName}, ${part.catchName}) => {\\n${context.emitNestedAppendStatements(part.catchParts, context.sinkName, context.compatRenderToStringHelperName)}\\n }`,\n );\n }\n\n if (part.awaitId !== undefined) {\n optionFields.push(`hydrationAwaitId: ${JSON.stringify(part.awaitId)}`);\n }\n\n const optionsExpression = optionFields.length === 0 ? \"\" : `, { ${optionFields.join(\", \")} }`;\n\n return [\n ` await ${context.asyncBoundaryHelperName}(${context.sinkName}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,\n context.emitNestedAppendStatements(\n part.parts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` }${optionsExpression});`,\n ].join(\"\\n\");\n}\n\nexport function emitOutOfOrderBoundary<Part>(\n part: OutOfOrderBoundaryPart<Part>,\n context: BoundaryLoweringContext<Part> & {\n outOfOrderBoundaryHelperName: string;\n },\n): string {\n const catchOption =\n part.catchName === undefined || part.catchParts === undefined\n ? \"\"\n : `,\\n catch: (${context.sinkName}, ${part.catchName}) => {\\n${context.emitNestedAppendStatements(part.catchParts, context.sinkName, context.compatRenderToStringHelperName)}\\n }`;\n\n const hydrationAwaitIdOption =\n part.awaitId === undefined ? \"\" : `,\\n hydrationAwaitId: ${JSON.stringify(part.awaitId)}`;\n const placeholderTagOption =\n part.placeholderTagCode === undefined ? \"\" : `,\\n placeholderTag: (${part.placeholderTagCode})`;\n\n return [\n ` ${context.outOfOrderBoundaryHelperName}(${context.sinkName}, ${JSON.stringify(part.id)}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,\n context.emitNestedAppendStatements(\n part.parts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` }, {`,\n ...(part.hydration ? [` hydration: true,`] : []),\n ` placeholder: (${context.sinkName}) => {`,\n context.emitNestedAppendStatements(\n part.placeholderParts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` }${catchOption}${hydrationAwaitIdOption}${placeholderTagOption}`,\n ` });`,\n ].join(\"\\n\");\n}\n\nexport function emitReactSuspenseBoundary<Part>(\n part: ReactSuspenseBoundaryPart<Part>,\n context: BoundaryLoweringContext<Part> & {\n reactSuspenseBoundaryHelperName: string;\n },\n): string {\n return [\n ` await ${context.reactSuspenseBoundaryHelperName}(${context.sinkName}, async (${context.sinkName}) => {`,\n context.emitNestedAppendStatements(\n part.parts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` });`,\n ].join(\"\\n\");\n}\n\nexport function emitReactSuspenseOutOfOrderBoundary<Part>(\n part: ReactSuspenseOutOfOrderBoundaryPart<Part>,\n context: BoundaryLoweringContext<Part> & {\n reactSuspenseOutOfOrderBoundaryHelperName: string;\n },\n): string {\n const options = [\n ` fallback: (${context.sinkName}) => {`,\n context.emitNestedAppendStatements(\n part.fallbackParts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` },`,\n ...(part.catchName === undefined || part.catchParts === undefined\n ? []\n : [\n ` catch: (${context.sinkName}, ${part.catchName}) => {`,\n context.emitNestedAppendStatements(\n part.catchParts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` },`,\n ]),\n ...(part.nonce === undefined ? [] : [` nonce: ${JSON.stringify(part.nonce)},`]),\n ...(part.scriptSrc === undefined ? [] : [` src: ${JSON.stringify(part.scriptSrc)},`]),\n ];\n\n return [\n ` ${context.reactSuspenseOutOfOrderBoundaryHelperName}(${context.sinkName}, ${JSON.stringify(part.boundaryId)}, ${JSON.stringify(part.segmentId)}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,\n context.emitNestedAppendStatements(\n part.parts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` }, {`,\n ...options,\n ` });`,\n ].join(\"\\n\");\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface CodeBuilder {
|
|
2
|
+
section(code: string | undefined, options?: CodeBuilderSectionOptions): void;
|
|
3
|
+
toString(): string;
|
|
4
|
+
}
|
|
5
|
+
export interface CodeBuilderSectionOptions {
|
|
6
|
+
leadingBlankLines?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function createCodeBuilder(): CodeBuilder;
|
|
9
|
+
//# sourceMappingURL=emit-code-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-code-builder.d.ts","sourceRoot":"","sources":["../src/emit-code-builder.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC7E,QAAQ,IAAI,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAiB/C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function createCodeBuilder() {
|
|
2
|
+
const sections = [];
|
|
3
|
+
return {
|
|
4
|
+
section(code, options = {}) {
|
|
5
|
+
if (code === undefined || code === "") {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
const leadingBlankLines = options.leadingBlankLines ?? 1;
|
|
9
|
+
const prefix = sections.length === 0 ? "" : "\n".repeat(leadingBlankLines + 1);
|
|
10
|
+
sections.push(`${prefix}${code}`);
|
|
11
|
+
},
|
|
12
|
+
toString() {
|
|
13
|
+
return sections.length === 0 ? "\n" : `${sections.join("")}\n`;
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=emit-code-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-code-builder.js","sourceRoot":"","sources":["../src/emit-code-builder.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,OAAO;QACL,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE;YACxB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBACtC,OAAO;YACT,CAAC;YAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;YAC/E,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,QAAQ;YACN,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["export interface CodeBuilder {\n section(code: string | undefined, options?: CodeBuilderSectionOptions): void;\n toString(): string;\n}\n\nexport interface CodeBuilderSectionOptions {\n leadingBlankLines?: number;\n}\n\nexport function createCodeBuilder(): CodeBuilder {\n const sections: string[] = [];\n\n return {\n section(code, options = {}) {\n if (code === undefined || code === \"\") {\n return;\n }\n\n const leadingBlankLines = options.leadingBlankLines ?? 1;\n const prefix = sections.length === 0 ? \"\" : \"\\n\".repeat(leadingBlankLines + 1);\n sections.push(`${prefix}${code}`);\n },\n toString() {\n return sections.length === 0 ? \"\\n\" : `${sections.join(\"\")}\\n`;\n },\n };\n}\n"]}
|
|
@@ -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;
|
|
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;AAqB1F,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;AAcD,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAqIxB"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { emitEscapeHtmlHelper } from "./emit-escape-helper.js";
|
|
2
|
+
import { createCodeBuilder } from "./emit-code-builder.js";
|
|
3
|
+
import { emitAsyncBoundary as emitLoweredAsyncBoundary, emitOutOfOrderBoundary as emitLoweredOutOfOrderBoundary, emitReactSuspenseBoundary as emitLoweredReactSuspenseBoundary, emitReactSuspenseOutOfOrderBoundary as emitLoweredReactSuspenseOutOfOrderBoundary, } from "./emit-boundary-lowering.js";
|
|
2
4
|
import { escapeHtmlAttribute as escapeHtml } from "@reckona/mreact-shared/html-escape";
|
|
3
5
|
import { htmlAttributeName, isDangerousHtmlAttribute, isStaticUrlValueUnsafe, isUrlAttribute, parseStaticStyleObjectLiteral, parseStyleLiteralValue, simpleSideEffectFreeExpression, } from "./emit-server-shared.js";
|
|
4
6
|
import { oxcServerStringReactNodeRenderHelperPlaceholder } from "./oxc-runtime-emit.js";
|
|
@@ -101,20 +103,26 @@ export function emitServerStream(ir, options = {}) {
|
|
|
101
103
|
const moduleStatements = emitModuleStatements(ir);
|
|
102
104
|
const importsBlock = [importLine, escapeImport, userImports, moduleStatements].filter(Boolean).join("\n");
|
|
103
105
|
const needsSpreadAttributesHelper = components.includes(spreadAttributesHelperName);
|
|
104
|
-
const urlSafeBlock = components.includes(urlSafeHelperName) || needsSpreadAttributesHelper
|
|
105
|
-
? `\n\n${urlSafeHelper}`
|
|
106
|
-
: "";
|
|
106
|
+
const urlSafeBlock = components.includes(urlSafeHelperName) || needsSpreadAttributesHelper ? urlSafeHelper : "";
|
|
107
107
|
const clientBoundaryBlock = clientBoundaryHelperName === undefined || !components.includes(clientBoundaryHelperName)
|
|
108
108
|
? ""
|
|
109
|
-
:
|
|
109
|
+
: emitClientBoundaryHelper(clientBoundaryHelperName);
|
|
110
110
|
const spreadAttributesBlock = needsSpreadAttributesHelper
|
|
111
|
-
?
|
|
111
|
+
? emitSpreadAttributesHelper(spreadAttributesHelperName, escapeHelperName, urlSafeHelperName)
|
|
112
112
|
: "";
|
|
113
113
|
const streamNodeBlock = components.includes(streamNodeHelperName)
|
|
114
|
-
?
|
|
114
|
+
? emitStreamNodeHelper(streamNodeHelperName)
|
|
115
115
|
: "";
|
|
116
|
+
const code = createCodeBuilder();
|
|
117
|
+
code.section(importsBlock);
|
|
118
|
+
code.section(helper);
|
|
119
|
+
code.section(urlSafeBlock);
|
|
120
|
+
code.section(clientBoundaryBlock);
|
|
121
|
+
code.section(spreadAttributesBlock);
|
|
122
|
+
code.section(streamNodeBlock);
|
|
123
|
+
code.section(components);
|
|
116
124
|
return {
|
|
117
|
-
code:
|
|
125
|
+
code: code.toString(),
|
|
118
126
|
imports,
|
|
119
127
|
};
|
|
120
128
|
}
|
|
@@ -360,16 +368,36 @@ function emitAppendStatements(node, sinkName, escapeHelperName, asyncBoundaryHel
|
|
|
360
368
|
try {
|
|
361
369
|
return coalesceAdjacentStaticParts(collected).map((part) => {
|
|
362
370
|
if (part.kind === "async-boundary") {
|
|
363
|
-
return
|
|
371
|
+
return emitLoweredAsyncBoundary(part, {
|
|
372
|
+
asyncBoundaryHelperName,
|
|
373
|
+
compatRenderToStringHelperName,
|
|
374
|
+
emitNestedAppendStatements,
|
|
375
|
+
sinkName,
|
|
376
|
+
});
|
|
364
377
|
}
|
|
365
378
|
if (part.kind === "out-of-order-boundary") {
|
|
366
|
-
return
|
|
379
|
+
return emitLoweredOutOfOrderBoundary(part, {
|
|
380
|
+
compatRenderToStringHelperName,
|
|
381
|
+
emitNestedAppendStatements,
|
|
382
|
+
outOfOrderBoundaryHelperName,
|
|
383
|
+
sinkName,
|
|
384
|
+
});
|
|
367
385
|
}
|
|
368
386
|
if (part.kind === "react-suspense-boundary") {
|
|
369
|
-
return
|
|
387
|
+
return emitLoweredReactSuspenseBoundary(part, {
|
|
388
|
+
compatRenderToStringHelperName,
|
|
389
|
+
emitNestedAppendStatements,
|
|
390
|
+
reactSuspenseBoundaryHelperName,
|
|
391
|
+
sinkName,
|
|
392
|
+
});
|
|
370
393
|
}
|
|
371
394
|
if (part.kind === "react-suspense-out-of-order-boundary") {
|
|
372
|
-
return
|
|
395
|
+
return emitLoweredReactSuspenseOutOfOrderBoundary(part, {
|
|
396
|
+
compatRenderToStringHelperName,
|
|
397
|
+
emitNestedAppendStatements,
|
|
398
|
+
reactSuspenseOutOfOrderBoundaryHelperName,
|
|
399
|
+
sinkName,
|
|
400
|
+
});
|
|
373
401
|
}
|
|
374
402
|
if (part.kind === "component") {
|
|
375
403
|
if (part.runtime === "compat") {
|
|
@@ -565,76 +593,8 @@ function emitListPartAsStringExpression(part, compatRenderToStringHelperName) {
|
|
|
565
593
|
const concatLines = stringExpressions.map((expr) => `_listOut += ${expr};`);
|
|
566
594
|
return `(() => { const _arr = (${part.itemsCode}); let _listOut = ""; for (let _i = 0, _len = _arr.length; _i < _len; _i++) { const ${part.itemName} = _arr[_i];${part.indexName === undefined ? "" : ` const ${part.indexName} = _i;`}${part.arrayName === undefined ? "" : ` const ${part.arrayName} = _arr;`}${part.bodyStatements.length === 0 ? "" : ` ${part.bodyStatements.join(" ")}`} ${concatLines.join(" ")} } return _listOut; })()`;
|
|
567
595
|
}
|
|
568
|
-
function emitAsyncBoundary(part, sinkName, asyncBoundaryHelperName, compatRenderToStringHelperName) {
|
|
569
|
-
const optionFields = [];
|
|
570
|
-
if (part.catchName !== undefined && part.catchParts !== undefined) {
|
|
571
|
-
optionFields.push(`catch: (${sinkName}, ${part.catchName}) => {\n${emitNestedAppendStatements(part.catchParts, sinkName, compatRenderToStringHelperName)}\n }`);
|
|
572
|
-
}
|
|
573
|
-
if (part.awaitId !== undefined) {
|
|
574
|
-
optionFields.push(`hydrationAwaitId: ${JSON.stringify(part.awaitId)}`);
|
|
575
|
-
}
|
|
576
|
-
const optionsExpression = optionFields.length === 0
|
|
577
|
-
? ""
|
|
578
|
-
: `, { ${optionFields.join(", ")} }`;
|
|
579
|
-
return [
|
|
580
|
-
` await ${asyncBoundaryHelperName}(${sinkName}, (${part.valueCode}), async (${sinkName}, ${part.valueName}) => {`,
|
|
581
|
-
emitNestedAppendStatements(part.parts, sinkName, compatRenderToStringHelperName),
|
|
582
|
-
` }${optionsExpression});`,
|
|
583
|
-
].join("\n");
|
|
584
|
-
}
|
|
585
|
-
function emitOutOfOrderBoundary(part, sinkName, outOfOrderBoundaryHelperName, compatRenderToStringHelperName) {
|
|
586
|
-
const catchOption = part.catchName === undefined || part.catchParts === undefined
|
|
587
|
-
? ""
|
|
588
|
-
: `,\n catch: (${sinkName}, ${part.catchName}) => {\n${emitNestedAppendStatements(part.catchParts, sinkName, compatRenderToStringHelperName)}\n }`;
|
|
589
|
-
const hydrationAwaitIdOption = part.awaitId === undefined
|
|
590
|
-
? ""
|
|
591
|
-
: `,\n hydrationAwaitId: ${JSON.stringify(part.awaitId)}`;
|
|
592
|
-
const placeholderTagOption = part.placeholderTagCode === undefined
|
|
593
|
-
? ""
|
|
594
|
-
: `,\n placeholderTag: (${part.placeholderTagCode})`;
|
|
595
|
-
return [
|
|
596
|
-
` ${outOfOrderBoundaryHelperName}(${sinkName}, ${JSON.stringify(part.id)}, (${part.valueCode}), async (${sinkName}, ${part.valueName}) => {`,
|
|
597
|
-
emitNestedAppendStatements(part.parts, sinkName, compatRenderToStringHelperName),
|
|
598
|
-
` }, {`,
|
|
599
|
-
...(part.hydration ? [` hydration: true,`] : []),
|
|
600
|
-
` placeholder: (${sinkName}) => {`,
|
|
601
|
-
emitNestedAppendStatements(part.placeholderParts, sinkName, compatRenderToStringHelperName),
|
|
602
|
-
` }${catchOption}${hydrationAwaitIdOption}${placeholderTagOption}`,
|
|
603
|
-
` });`,
|
|
604
|
-
].join("\n");
|
|
605
|
-
}
|
|
606
|
-
function emitReactSuspenseBoundary(part, sinkName, reactSuspenseBoundaryHelperName, compatRenderToStringHelperName) {
|
|
607
|
-
return [
|
|
608
|
-
` await ${reactSuspenseBoundaryHelperName}(${sinkName}, async (${sinkName}) => {`,
|
|
609
|
-
emitNestedAppendStatements(part.parts, sinkName, compatRenderToStringHelperName),
|
|
610
|
-
` });`,
|
|
611
|
-
].join("\n");
|
|
612
|
-
}
|
|
613
|
-
function emitReactSuspenseOutOfOrderBoundary(part, sinkName, reactSuspenseOutOfOrderBoundaryHelperName, compatRenderToStringHelperName) {
|
|
614
|
-
const options = [
|
|
615
|
-
` fallback: (${sinkName}) => {`,
|
|
616
|
-
emitNestedAppendStatements(part.fallbackParts, sinkName, compatRenderToStringHelperName),
|
|
617
|
-
` },`,
|
|
618
|
-
...(part.catchName === undefined || part.catchParts === undefined
|
|
619
|
-
? []
|
|
620
|
-
: [
|
|
621
|
-
` catch: (${sinkName}, ${part.catchName}) => {`,
|
|
622
|
-
emitNestedAppendStatements(part.catchParts, sinkName, compatRenderToStringHelperName),
|
|
623
|
-
` },`,
|
|
624
|
-
]),
|
|
625
|
-
...(part.nonce === undefined ? [] : [` nonce: ${stringLiteral(part.nonce)},`]),
|
|
626
|
-
...(part.scriptSrc === undefined ? [] : [` src: ${stringLiteral(part.scriptSrc)},`]),
|
|
627
|
-
];
|
|
628
|
-
return [
|
|
629
|
-
` ${reactSuspenseOutOfOrderBoundaryHelperName}(${sinkName}, ${JSON.stringify(part.boundaryId)}, ${JSON.stringify(part.segmentId)}, (${part.valueCode}), async (${sinkName}, ${part.valueName}) => {`,
|
|
630
|
-
emitNestedAppendStatements(part.parts, sinkName, compatRenderToStringHelperName),
|
|
631
|
-
` }, {`,
|
|
632
|
-
...options,
|
|
633
|
-
` });`,
|
|
634
|
-
].join("\n");
|
|
635
|
-
}
|
|
636
596
|
function emitNestedAppendStatements(parts, sinkName, compatRenderToStringHelperName) {
|
|
637
|
-
return coalesceAdjacentStaticParts(parts)
|
|
597
|
+
return coalesceAdjacentStaticParts([...parts])
|
|
638
598
|
.map((part) => emitSyncPartAsAppendStatement(part, sinkName, compatRenderToStringHelperName, " "))
|
|
639
599
|
.join("\n");
|
|
640
600
|
}
|
|
@@ -642,16 +602,36 @@ function emitNestedStreamAppendStatements(parts, sinkName, compatRenderToStringH
|
|
|
642
602
|
return coalesceAdjacentStaticParts(parts)
|
|
643
603
|
.map((part) => {
|
|
644
604
|
if (part.kind === "async-boundary") {
|
|
645
|
-
return
|
|
605
|
+
return emitLoweredAsyncBoundary(part, {
|
|
606
|
+
asyncBoundaryHelperName: currentAsyncBoundaryHelperName,
|
|
607
|
+
compatRenderToStringHelperName,
|
|
608
|
+
emitNestedAppendStatements,
|
|
609
|
+
sinkName,
|
|
610
|
+
}).replace(/^/gm, " ");
|
|
646
611
|
}
|
|
647
612
|
if (part.kind === "out-of-order-boundary") {
|
|
648
|
-
return
|
|
613
|
+
return emitLoweredOutOfOrderBoundary(part, {
|
|
614
|
+
compatRenderToStringHelperName,
|
|
615
|
+
emitNestedAppendStatements,
|
|
616
|
+
outOfOrderBoundaryHelperName: currentOutOfOrderBoundaryHelperName,
|
|
617
|
+
sinkName,
|
|
618
|
+
}).replace(/^/gm, " ");
|
|
649
619
|
}
|
|
650
620
|
if (part.kind === "react-suspense-boundary") {
|
|
651
|
-
return
|
|
621
|
+
return emitLoweredReactSuspenseBoundary(part, {
|
|
622
|
+
compatRenderToStringHelperName,
|
|
623
|
+
emitNestedAppendStatements,
|
|
624
|
+
reactSuspenseBoundaryHelperName: currentReactSuspenseBoundaryHelperName,
|
|
625
|
+
sinkName,
|
|
626
|
+
}).replace(/^/gm, " ");
|
|
652
627
|
}
|
|
653
628
|
if (part.kind === "react-suspense-out-of-order-boundary") {
|
|
654
|
-
return
|
|
629
|
+
return emitLoweredReactSuspenseOutOfOrderBoundary(part, {
|
|
630
|
+
compatRenderToStringHelperName,
|
|
631
|
+
emitNestedAppendStatements,
|
|
632
|
+
reactSuspenseOutOfOrderBoundaryHelperName: currentReactSuspenseOutOfOrderBoundaryHelperName,
|
|
633
|
+
sinkName,
|
|
634
|
+
}).replace(/^/gm, " ");
|
|
655
635
|
}
|
|
656
636
|
return emitSyncPartAsAppendStatement(part, sinkName, compatRenderToStringHelperName, " ");
|
|
657
637
|
})
|