diff --git a/.changeset/fiery-facts-pick.md b/.changeset/fiery-facts-pick.md new file mode 100644 index 00000000..d7122e63 --- /dev/null +++ b/.changeset/fiery-facts-pick.md @@ -0,0 +1,5 @@ +--- +"@ladle/react": patch +--- + +Ladle now prints a warning when it encounters a story file that contains no exported stories. diff --git a/packages/ladle/lib/cli/vite-plugin/parse/get-entry-data.js b/packages/ladle/lib/cli/vite-plugin/parse/get-entry-data.js index dade2457..a4ee0be7 100644 --- a/packages/ladle/lib/cli/vite-plugin/parse/get-entry-data.js +++ b/packages/ladle/lib/cli/vite-plugin/parse/get-entry-data.js @@ -69,5 +69,8 @@ export const getSingleEntry = async (entry) => { return 0; }); debug(result); + if (result.stories.length === 0) { + console.warn(`Warning: Found no exported stories at ${entry}`); + } return result; }; diff --git a/packages/ladle/tests/fixtures/no-export.stories.tsx b/packages/ladle/tests/fixtures/no-export.stories.tsx new file mode 100644 index 00000000..d1f5cdff --- /dev/null +++ b/packages/ladle/tests/fixtures/no-export.stories.tsx @@ -0,0 +1,10 @@ +import * as React from "react"; +import type { Story } from "@ladle/react"; + +const Cat: Story = () => { + return

Cat

; +}; + +const Dog: Story = () => { + return

Dog

; +}; diff --git a/packages/ladle/tests/parse/get-entry-data.test.ts b/packages/ladle/tests/parse/get-entry-data.test.ts index ae06e01f..fbfb2ba4 100644 --- a/packages/ladle/tests/parse/get-entry-data.test.ts +++ b/packages/ladle/tests/parse/get-entry-data.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "vitest"; +import { test, expect, vi } from "vitest"; import { getSingleEntry } from "../../lib/cli/vite-plugin/parse/get-entry-data.js"; test("Single file with two stories", async () => { @@ -54,3 +54,12 @@ test("Extract and merge story meta", async () => { ); expect(entryData).toMatchSnapshot(); }); + +test("Warns when a stories file has no exported stories", async () => { + const warn = vi.spyOn(console, "warn").mockImplementation(() => {}); + await getSingleEntry("tests/fixtures/no-export.stories.tsx"); + expect(warn).toHaveBeenCalledWith( + expect.stringContaining("Warning: Found no exported stories"), + ); + warn.mockRestore(); +});