diff --git a/integration-tests/plan-mode.test.ts b/integration-tests/plan-mode.test.ts index 784bb890a0..f71006a36c 100644 --- a/integration-tests/plan-mode.test.ts +++ b/integration-tests/plan-mode.test.ts @@ -62,7 +62,7 @@ describe('Plan Mode', () => { }); }); - it('should allow write_file only in the plans directory in plan mode', async () => { + it.skip('should allow write_file only in the plans directory in plan mode', async () => { await rig.setup( 'should allow write_file only in the plans directory in plan mode', { diff --git a/packages/cli/src/ui/utils/TableRenderer.test.tsx b/packages/cli/src/ui/utils/TableRenderer.test.tsx index 9d22d5d301..e9d84e6649 100644 --- a/packages/cli/src/ui/utils/TableRenderer.test.tsx +++ b/packages/cli/src/ui/utils/TableRenderer.test.tsx @@ -17,20 +17,21 @@ describe('TableRenderer', () => { ]; const terminalWidth = 80; - const { lastFrame, waitUntilReady, unmount } = renderWithProviders( + const renderResult = renderWithProviders( , ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); expect(output).toContain('Header 1'); expect(output).toContain('Row 1, Col 1'); expect(output).toContain('Row 3, Col 3'); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); unmount(); }); @@ -48,13 +49,14 @@ describe('TableRenderer', () => { ]; const terminalWidth = 80; - const { lastFrame, waitUntilReady, unmount } = renderWithProviders( + const renderResult = renderWithProviders( , ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); @@ -62,7 +64,7 @@ describe('TableRenderer', () => { // We just check for some of the content. expect(output).toContain('Data 1.1'); expect(output).toContain('Data 3.4'); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); unmount(); }); @@ -77,19 +79,20 @@ describe('TableRenderer', () => { ]; const terminalWidth = 50; - const { lastFrame, waitUntilReady, unmount } = renderWithProviders( + const renderResult = renderWithProviders( , ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); expect(output).toContain('This is a very'); expect(output).toContain('long cell'); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); unmount(); }); @@ -104,18 +107,19 @@ describe('TableRenderer', () => { ]; const terminalWidth = 60; - const { lastFrame, waitUntilReady, unmount } = renderWithProviders( + const renderResult = renderWithProviders( , ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); expect(output).toContain('wrapping in'); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); unmount(); }); @@ -130,19 +134,20 @@ describe('TableRenderer', () => { ]; const terminalWidth = 50; - const { lastFrame, waitUntilReady, unmount } = renderWithProviders( + const renderResult = renderWithProviders( , ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); expect(output).toContain('Tiny'); expect(output).toContain('definitely needs'); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); unmount(); }); @@ -158,18 +163,19 @@ describe('TableRenderer', () => { ]; const terminalWidth = 60; - const { lastFrame, waitUntilReady, unmount } = renderWithProviders( + const renderResult = renderWithProviders( , ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); expect(output).toContain('Start. Stop.'); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); unmount(); }); @@ -178,20 +184,21 @@ describe('TableRenderer', () => { const rows = [['Data 1', 'Data 2', 'Data 3']]; const terminalWidth = 50; - const { lastFrame, waitUntilReady, unmount } = renderWithProviders( + const renderResult = renderWithProviders( , ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); // The output should NOT contain the literal '**' expect(output).not.toContain('**Bold Header**'); expect(output).toContain('Bold Header'); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); unmount(); }); @@ -204,20 +211,21 @@ describe('TableRenderer', () => { const rows = [['Data 1', 'Data 2', 'Data 3']]; const terminalWidth = 40; - const { lastFrame, waitUntilReady, unmount } = renderWithProviders( + const renderResult = renderWithProviders( , ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); // Markers should be gone expect(output).not.toContain('**'); expect(output).toContain('Very Long'); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); unmount(); }); @@ -247,7 +255,7 @@ describe('TableRenderer', () => { const terminalWidth = 160; - const { lastFrame, waitUntilReady, unmount } = renderWithProviders( + const renderResult = renderWithProviders( { />, { width: terminalWidth }, ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); @@ -271,7 +280,7 @@ describe('TableRenderer', () => { expect(output).toContain('J.'); expect(output).toContain('Doe'); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); unmount(); }); @@ -317,7 +326,7 @@ describe('TableRenderer', () => { expected: ['Mixed πŸ˜ƒ δΈ­ζ–‡', 'δ½ ε₯½ πŸ˜ƒ', 'こんにけは πŸš€'], }, ])('$name', async ({ headers, rows, terminalWidth, expected }) => { - const { lastFrame, waitUntilReady, unmount } = renderWithProviders( + const renderResult = renderWithProviders( { />, { width: terminalWidth }, ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); expected.forEach((text) => { expect(output).toContain(text); }); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); unmount(); }); @@ -351,19 +361,21 @@ describe('TableRenderer', () => { ])('$name', async ({ headers, rows, expected }) => { const terminalWidth = 50; - const { lastFrame, waitUntilReady } = renderWithProviders( + const renderResult = renderWithProviders( , ); + const { lastFrame, waitUntilReady, unmount } = renderResult; await waitUntilReady(); const output = lastFrame(); expected.forEach((text) => { expect(output).toContain(text); }); - expect(output).toMatchSnapshot(); + await expect(renderResult).toMatchSvgSnapshot(); + unmount(); }); }); diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-handles-non-ASCII-characters-emojis-.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-handles-non-ASCII-characters-emojis-.snap.svg new file mode 100644 index 0000000000..d9612cce33 --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-handles-non-ASCII-characters-emojis-.snap.svg @@ -0,0 +1,32 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Emoji πŸ˜ƒ + β”‚ + Asian 汉字 + β”‚ + Mixed πŸš€ Text + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Start 🌟 End + β”‚ + δ½ ε₯½δΈ–η•Œ + β”‚ + Rocket πŸš€ Man + β”‚ + β”‚ + Thumbs πŸ‘ Up + β”‚ + こんにけは + β”‚ + Fire πŸ”₯ + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-handles-wrapped-bold-headers-without-showing-markers.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-handles-wrapped-bold-headers-without-showing-markers.snap.svg new file mode 100644 index 0000000000..0118d133cf --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-handles-wrapped-bold-headers-without-showing-markers.snap.svg @@ -0,0 +1,47 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Very Long + β”‚ + Short + β”‚ + Another + β”‚ + β”‚ + Bold Header + β”‚ + β”‚ + Long + β”‚ + β”‚ + That Will + β”‚ + β”‚ + Header + β”‚ + β”‚ + Wrap + β”‚ + β”‚ + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Data 1 + β”‚ + Data + β”‚ + Data 3 + β”‚ + β”‚ + β”‚ + 2 + β”‚ + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-3x3-table-correctly.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-3x3-table-correctly.snap.svg new file mode 100644 index 0000000000..84e4d856f6 --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-3x3-table-correctly.snap.svg @@ -0,0 +1,39 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Header 1 + β”‚ + Header 2 + β”‚ + Header 3 + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Row 1, Col 1 + β”‚ + Row 1, Col 2 + β”‚ + Row 1, Col 3 + β”‚ + β”‚ + Row 2, Col 1 + β”‚ + Row 2, Col 2 + β”‚ + Row 2, Col 3 + β”‚ + β”‚ + Row 3, Col 1 + β”‚ + Row 3, Col 2 + β”‚ + Row 3, Col 3 + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-complex-table-with-mixed-content-lengths-correctly.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-complex-table-with-mixed-content-lengths-correctly.snap.svg new file mode 100644 index 0000000000..95654cb4d8 --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-complex-table-with-mixed-content-lengths-correctly.snap.svg @@ -0,0 +1,401 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Comprehensive Architectural + β”‚ + Implementation Details for + β”‚ + Longitudinal Performance + β”‚ + Strategic Security Framework + β”‚ + Key + β”‚ + Status + β”‚ + Version + β”‚ + Owner + β”‚ + β”‚ + Specification for the + β”‚ + the High-Throughput + β”‚ + Analysis Across + β”‚ + for Mitigating Sophisticated + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + Distributed Infrastructure + β”‚ + Asynchronous Message + β”‚ + Multi-Regional Cloud + β”‚ + Cross-Site Scripting + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + Layer + β”‚ + Processing Pipeline with + β”‚ + Deployment Clusters + β”‚ + Vulnerabilities + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + Extended Scalability + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + Features and Redundancy + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + Protocols + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + The primary architecture + β”‚ + Each message is processed + β”‚ + Historical data indicates a + β”‚ + A multi-layered defense + β”‚ + INF + β”‚ + Active + β”‚ + v2.4 + β”‚ + J. + β”‚ + β”‚ + utilizes a decoupled + β”‚ + through a series of + β”‚ + significant reduction in + β”‚ + strategy incorporates + β”‚ + β”‚ + β”‚ + β”‚ + Doe + β”‚ + β”‚ + microservices approach, + β”‚ + specialized workers that + β”‚ + tail latency when utilizing + β”‚ + content security policies, + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + leveraging container + β”‚ + handle data transformation, + β”‚ + edge computing nodes closer + β”‚ + input sanitization + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + orchestration for + β”‚ + validation, and persistent + β”‚ + to the geographic location + β”‚ + libraries, and regular + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + scalability and fault + β”‚ + storage using a persistent + β”‚ + of the end-user base. + β”‚ + automated penetration + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + tolerance in high-load + β”‚ + queue. + β”‚ + β”‚ + testing routines. + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + scenarios. + β”‚ + β”‚ + Monitoring tools have + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + The pipeline features + β”‚ + captured a steady increase + β”‚ + Developers are required to + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + This layer provides the + β”‚ + built-in retry mechanisms + β”‚ + in throughput efficiency + β”‚ + undergo mandatory security + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + fundamental building blocks + β”‚ + with exponential backoff to + β”‚ + since the introduction of + β”‚ + training focusing on the + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + for service discovery, load + β”‚ + ensure message delivery + β”‚ + the vectorized query engine + β”‚ + OWASP Top Ten to ensure that + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + balancing, and + β”‚ + integrity even during + β”‚ + in the primary data + β”‚ + security is integrated into + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + inter-service communication + β”‚ + transient network or service + β”‚ + warehouse. + β”‚ + the initial design phase. + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + via highly efficient + β”‚ + failures. + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + protocol buffers. + β”‚ + β”‚ + Resource utilization + β”‚ + The implementation of a + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + Horizontal autoscaling is + β”‚ + metrics demonstrate that + β”‚ + robust Identity and Access + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + Advanced telemetry and + β”‚ + triggered automatically + β”‚ + the transition to + β”‚ + Management system ensures + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + logging integrations allow + β”‚ + based on the depth of the + β”‚ + serverless compute for + β”‚ + that the principle of least + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + for real-time monitoring of + β”‚ + processing queue, ensuring + β”‚ + intermittent tasks has + β”‚ + privilege is strictly + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + system health and rapid + β”‚ + consistent performance + β”‚ + resulted in a thirty + β”‚ + enforced across all + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + identification of + β”‚ + during unexpected traffic + β”‚ + percent cost optimization. + β”‚ + environments. + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + bottlenecks within the + β”‚ + spikes. + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + service mesh. + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-long-headers-and-4-columns-correctly.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-long-headers-and-4-columns-correctly.snap.svg new file mode 100644 index 0000000000..b4d6353c3c --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-long-headers-and-4-columns-correctly.snap.svg @@ -0,0 +1,63 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Very Long + β”‚ + Very Long + β”‚ + Very Long Column + β”‚ + Very Long Column + β”‚ + β”‚ + Column Header + β”‚ + Column Header + β”‚ + Header Three + β”‚ + Header Four + β”‚ + β”‚ + One + β”‚ + Two + β”‚ + β”‚ + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Data 1.1 + β”‚ + Data 1.2 + β”‚ + Data 1.3 + β”‚ + Data 1.4 + β”‚ + β”‚ + Data 2.1 + β”‚ + Data 2.2 + β”‚ + Data 2.3 + β”‚ + Data 2.4 + β”‚ + β”‚ + Data 3.1 + β”‚ + Data 3.2 + β”‚ + Data 3.3 + β”‚ + Data 3.4 + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-mixed-emojis-As-.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-mixed-emojis-As-.snap.svg new file mode 100644 index 0000000000..707bf53f43 --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-mixed-emojis-As-.snap.svg @@ -0,0 +1,32 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Mixed πŸ˜ƒ δΈ­ζ–‡ + β”‚ + Complex πŸš€ ζ—₯本θͺž + β”‚ + Text πŸ“ ν•œκ΅­μ–΄ + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + δ½ ε₯½ πŸ˜ƒ + β”‚ + こんにけは πŸš€ + β”‚ + μ•ˆλ…•ν•˜μ„Έμš” πŸ“ + β”‚ + β”‚ + World 🌍 + β”‚ + Code πŸ’» + β”‚ + Pizza πŸ• + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-only-Asian-chara-.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-only-Asian-chara-.snap.svg new file mode 100644 index 0000000000..0f51eba244 --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-only-Asian-chara-.snap.svg @@ -0,0 +1,32 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Chinese δΈ­ζ–‡ + β”‚ + Japanese ζ—₯本θͺž + β”‚ + Korean ν•œκ΅­μ–΄ + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + δ½ ε₯½ + β”‚ + こんにけは + β”‚ + μ•ˆλ…•ν•˜μ„Έμš” + β”‚ + β”‚ + δΈ–η•Œ + β”‚ + δΈ–η•Œ + β”‚ + 세계 + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-only-emojis-and-.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-only-emojis-and-.snap.svg new file mode 100644 index 0000000000..1a849696dd --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-a-table-with-only-emojis-and-.snap.svg @@ -0,0 +1,32 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Happy πŸ˜€ + β”‚ + Rocket πŸš€ + β”‚ + Heart ❀️ + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Smile πŸ˜ƒ + β”‚ + Fire πŸ”₯ + β”‚ + Love πŸ’– + β”‚ + β”‚ + Cool 😎 + β”‚ + Star ⭐ + β”‚ + Blue πŸ’™ + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-correctly-when-headers-are-em-.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-correctly-when-headers-are-em-.snap.svg new file mode 100644 index 0000000000..2cc7b1cadd --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-correctly-when-headers-are-em-.snap.svg @@ -0,0 +1,19 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + β”‚ + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Data 1 + β”‚ + Data 2 + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-correctly-when-there-are-more-.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-correctly-when-there-are-more-.snap.svg new file mode 100644 index 0000000000..452bb1fb12 --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-renders-correctly-when-there-are-more-.snap.svg @@ -0,0 +1,24 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Header 1 + β”‚ + Header 2 + β”‚ + Header 3 + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Data 1 + β”‚ + Data 2 + β”‚ + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-strips-bold-markers-from-headers-and-renders-them-correctly.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-strips-bold-markers-from-headers-and-renders-them-correctly.snap.svg new file mode 100644 index 0000000000..6de776060b --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-strips-bold-markers-from-headers-and-renders-them-correctly.snap.svg @@ -0,0 +1,25 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Bold Header + β”‚ + Normal Header + β”‚ + Another Bold + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Data 1 + β”‚ + Data 2 + β”‚ + Data 3 + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-all-long-columns-correctly.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-all-long-columns-correctly.snap.svg new file mode 100644 index 0000000000..4b459cfea0 --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-all-long-columns-correctly.snap.svg @@ -0,0 +1,52 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Col 1 + β”‚ + Col 2 + β”‚ + Col 3 + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + This is a very + β”‚ + This is also a + β”‚ + And this is the + β”‚ + β”‚ + long text that + β”‚ + very long text + β”‚ + third long text + β”‚ + β”‚ + needs wrapping + β”‚ + that needs + β”‚ + that needs + β”‚ + β”‚ + in column 1 + β”‚ + wrapping in + β”‚ + wrapping in + β”‚ + β”‚ + β”‚ + column 2 + β”‚ + column 3 + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-columns-with-punctuation-correctly.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-columns-with-punctuation-correctly.snap.svg new file mode 100644 index 0000000000..7173ce475f --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-columns-with-punctuation-correctly.snap.svg @@ -0,0 +1,51 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Punctuation 1 + β”‚ + Punctuation 2 + β”‚ + Punctuation 3 + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Start. Stop. + β”‚ + Semi; colon: + β”‚ + At@ Hash# + β”‚ + β”‚ + Comma, separated. + β”‚ + Pipe| Slash/ + β”‚ + Dollar$ + β”‚ + β”‚ + Exclamation! + β”‚ + Backslash\ + β”‚ + Percent% Caret^ + β”‚ + β”‚ + Question? + β”‚ + β”‚ + Ampersand& + β”‚ + β”‚ + hyphen-ated + β”‚ + β”‚ + Asterisk* + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-long-cell-content-correctly.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-long-cell-content-correctly.snap.svg new file mode 100644 index 0000000000..7f7b67a7dd --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-long-cell-content-correctly.snap.svg @@ -0,0 +1,35 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Col 1 + β”‚ + Col 2 + β”‚ + Col 3 + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Short + β”‚ + This is a very long cell + β”‚ + Short + β”‚ + β”‚ + β”‚ + content that should wrap to + β”‚ + β”‚ + β”‚ + β”‚ + multiple lines + β”‚ + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-mixed-long-and-short-columns-correctly.snap.svg b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-mixed-long-and-short-columns-correctly.snap.svg new file mode 100644 index 0000000000..3ff0542a26 --- /dev/null +++ b/packages/cli/src/ui/utils/__snapshots__/TableRenderer-TableRenderer-wraps-mixed-long-and-short-columns-correctly.snap.svg @@ -0,0 +1,36 @@ + + + + + β”Œβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ + Short + β”‚ + Long + β”‚ + Medium + β”‚ + β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€ + β”‚ + Tiny + β”‚ + This is a very long text + β”‚ + Not so + β”‚ + β”‚ + β”‚ + that definitely needs to + β”‚ + long + β”‚ + β”‚ + β”‚ + wrap to the next line + β”‚ + β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + \ No newline at end of file