feat: release design system engine, studio and component contracts
This commit is contained in:
1 parent
ff1065fb27
commit
3943b946d6
693 files changed
+175546
-3894
No files matched your search
@@ -22,7 +22,7 @@ const reference = JSON.parse(
|
||||
};
|
||||
const manifest = JSON.parse(readFileSync(join(root, "showcase-manifest.json"), "utf8")) as {
|
||||
removed: string[];
|
||||
blocks: Array<{name: string; slug: string; path: string}>;
|
||||
blocks: Array<{ name: string; slug: string; path: string }>;
|
||||
componentCount: number;
|
||||
categoryCount: number;
|
||||
totalDemoCount: number;
|
||||
@@ -71,17 +71,28 @@ test("showcase configures local Lucide icon generation", () => {
|
||||
});
|
||||
|
||||
test("showcase manifest matches the generated UI reference", () => {
|
||||
expect(manifest.componentCount + manifest.blocks.length + manifest.removed.length).toBe(reference.count);
|
||||
expect(manifest.removed).toEqual(["AuthForm", "AuthSplitLayout", "PortalDashboard", "PublicPageShell"]);
|
||||
expect(manifest.blocks.some(block => block.name === "Hero")).toBe(true);
|
||||
expect(manifest.blocks.some(block => block.name === "CTASection")).toBe(true);
|
||||
expect(manifest.componentCount + manifest.blocks.length + manifest.removed.length).toBe(
|
||||
reference.count,
|
||||
);
|
||||
expect(manifest.removed).toEqual([
|
||||
"AuthForm",
|
||||
"AuthSplitLayout",
|
||||
"PortalDashboard",
|
||||
"PublicPageShell",
|
||||
]);
|
||||
expect(manifest.blocks.some((block) => block.name === "Hero")).toBe(true);
|
||||
expect(manifest.blocks.some((block) => block.name === "CTASection")).toBe(true);
|
||||
expect(manifest.components).toHaveLength(manifest.componentCount);
|
||||
expect(manifest.totalDemoCount).toBeGreaterThanOrEqual(manifest.componentCount * 2);
|
||||
expect(new Set(manifest.components.map((component) => component.slug)).size).toBe(
|
||||
manifest.componentCount,
|
||||
);
|
||||
|
||||
for (const component of reference.components.filter(entry => !manifest.removed.includes(entry.name) && !manifest.blocks.some(block => block.name === entry.name))) {
|
||||
for (const component of reference.components.filter(
|
||||
(entry) =>
|
||||
!manifest.removed.includes(entry.name) &&
|
||||
!manifest.blocks.some((block) => block.name === entry.name),
|
||||
)) {
|
||||
const documented = manifest.components.find((entry) => entry.name === component.name);
|
||||
expect(documented).toBeTruthy();
|
||||
expect(documented?.mount).toBe(component.mount);
|
||||
@@ -120,12 +131,14 @@ test("category pages preview every UI component exactly once", () => {
|
||||
.map((file) => readFileSync(join(pagesDir, file), "utf8"))
|
||||
.join("\n");
|
||||
|
||||
const invalidPreviews = reference.components.filter(entry => manifest.components.some(component => component.name === entry.name)).flatMap((component) => {
|
||||
const count = mountCount(categoryPages, component.mount);
|
||||
return count === 1
|
||||
? []
|
||||
: [{ name: component.name, mount: component.mount, category: component.category, count }];
|
||||
});
|
||||
const invalidPreviews = reference.components
|
||||
.filter((entry) => manifest.components.some((component) => component.name === entry.name))
|
||||
.flatMap((component) => {
|
||||
const count = mountCount(categoryPages, component.mount);
|
||||
return count === 1
|
||||
? []
|
||||
: [{ name: component.name, mount: component.mount, category: component.category, count }];
|
||||
});
|
||||
|
||||
expect(invalidPreviews).toEqual([]);
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user