import assert from 'node:assert/strict'; import process from 'node:process'; import { fileURLToPath } from 'node:url'; import vue from '@vitejs/plugin-vue'; import tailwind from '@tailwindcss/vite'; import { createServer } from 'vite'; import { createSSRApp, h } from 'vue'; import { renderToString } from 'vue/server-renderer'; const serve = process.argv.includes('--serve'); const server = await createServer({ configFile: false, plugins: [vue(), ...(serve ? [tailwind()] : [])], resolve: { alias: { '@': fileURLToPath(new URL('../../resources/js', import.meta.url)), }, }, server: serve ? { host: '127.0.0.1', port: 4186, strictPort: true, hmr: false } : { middlewareMode: true, hmr: false, watch: null }, appType: 'custom', }); if (serve) { server.middlewares.use(async (request, response) => { response.setHeader('Content-Type', 'text/html'); response.end( await server.transformIndexHtml( request.url, '
', ), ); }); await server.listen(); console.log('Description fixture ready on port 4186'); } else { try { const { safeDescriptionLink, supportsVisualDescription, parseDescription, renderDescriptionNode, } = await server.ssrLoadModule( '/resources/js/lib/ticket-description.ts', ); const { default: Description } = await server.ssrLoadModule( '/resources/js/components/tickets/TicketDescription.vue', ); const { default: Editor } = await server.ssrLoadModule( '/resources/js/components/tickets/TicketDescriptionEditor.vue', ); const { createLocalization } = await server.ssrLoadModule( '/resources/js/lib/localization.ts', ); const render = (description) => renderToString( createSSRApp({ render: () => h(Description, { description }) }), ); const markdown = '# Title\n\n**Bold** and *italic* and ~~strike~~\n\n- One\n - Nested\n\n3. Third\n4. Fourth\n\n> Quote\n\n`inline`\n\n```js\n\n```\n\n[Link](https://example.test/path)\n\n---'; assert.equal(supportsVisualDescription(markdown), true); const rendered = await render(markdown); for (const snippet of [ '

Title

', 'Bold', 'italic', 'strike', '