0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2024-12-16 21:46:22 -05:00
This commit is contained in:
Emanuele Stoppa 2024-07-01 13:04:45 +01:00
parent 697a539adf
commit d9397a1cf6
5 changed files with 46 additions and 12 deletions

View file

@ -1,5 +1,5 @@
import assert from 'node:assert/strict';
import { before, describe, it } from 'node:test';
import { after, before, describe, it } from 'node:test';
import { experimental_AstroContainer } from '../dist/container/index.js';
import {
Fragment,
@ -233,7 +233,29 @@ describe('Container', () => {
});
});
describe('Container with renderers', () => {
describe('Container with renderers, DEV', () => {
let fixture;
let devServer;
before(async () => {
fixture = await loadFixture({
root: new URL('./fixtures/container-custom-renderers/', import.meta.url),
});
devServer = await fixture.startDevServer();
});
after(async () => {
await devServer.stop();
});
it('the endpoint should return the HTML of the React component', async () => {
const response = await fixture.fetch('/button-directive');
const html = await response.text();
assert.match(html, /I am a react button/);
});
});
describe.skip('Container with renderers, SSR', () => {
let fixture;
let app;
before(async () => {
@ -262,7 +284,7 @@ describe('Container with renderers', () => {
assert.match(html, /I am a vue button/);
});
it('Should render a component with directives', async () => {
it.skip('Should render a component with directives', async () => {
const request = new Request('https://example.com/button-directive');
const response = await app.render(request);
const html = await response.text();

View file

@ -3,10 +3,12 @@
"version": "0.0.0",
"private": true,
"type": "module",
"dependencies": {
"devDependencies": {
"@astrojs/react": "workspace:*",
"@astrojs/vue": "workspace:*",
"astro": "workspace:*",
"astro": "workspace:*"
},
"dependencies": {
"react": "^18.3.1",
"react-dom": "^18.3.1",
"vue": "^3.4.31"

View file

@ -2,4 +2,4 @@
import Button from "./button.jsx"
---
<Button client:idle />
<Button/>

View file

@ -1,12 +1,22 @@
import type { APIRoute, SSRLoadedRenderer } from 'astro';
import { experimental_AstroContainer } from 'astro/container';
import renderer from '@astrojs/react/server.js';
import { loadRenderers } from 'astro:container';
import { getContainerRenderer as r } from '@astrojs/react';
import { getContainerRenderer as v } from '@astrojs/vue';
import Component from '../components/buttonDirective.astro';
export const GET: APIRoute = async (ctx) => {
const container = await experimental_AstroContainer.create();
container.addServerRenderer({ renderer });
return await container.renderToResponse(Component, {
skipClientDirectives: true,
try {
const renderers = await loadRenderers([v(), r()]);
} catch (e) {
console.log(e);
}
return new Response(null, {
status: 200,
});
// const container = await experimental_AstroContainer.create({
// renderers,
// });
// container.addServerRenderer({ renderer });
// return await container.renderToResponse(Component);
};

View file

@ -25,7 +25,7 @@
"./client.js": "./client.js",
"./client-v17.js": "./client-v17.js",
"./server.js": {
"default": "./server.js",
"import": "./server.js",
"types": "./server.d.ts"
},
"./server-v17.js": {