Skip to content

Commit

Permalink
feat: dts recipe generate boolean 처리 및 리팩토링 (#490)
Browse files Browse the repository at this point in the history
  • Loading branch information
junghyeonsu authored Dec 5, 2024
1 parent bcd2447 commit 5e836e5
Show file tree
Hide file tree
Showing 10 changed files with 36 additions and 34 deletions.
46 changes: 24 additions & 22 deletions packages/recipe-generator/core/src/dts.ts
Original file line number Diff line number Diff line change
@@ -1,43 +1,45 @@
import { outdent } from "outdent";

import { escapeReservedWord } from "./reserved-words";
import type { SlotRecipeDefinition, SlotRecipeVariantRecord } from "./types";
import type { SlotRecipeDefinition, SlotRecipeVariantRecord, StyleObject } from "./types";

const capitalize = (str: string) => str[0].toUpperCase() + str.slice(1);

const isBoolean = (key: string) => ["true", "false"].includes(key);

const stringify = (key: string) => (isBoolean(key) ? key : `"${key}"`);

const generateVariantInterface = (
variants: SlotRecipeDefinition<string, SlotRecipeVariantRecord<string>>["variants"],
defaultVariants?: SlotRecipeDefinition<
string,
SlotRecipeVariantRecord<string>
>["defaultVariants"],
) => {
if (!defaultVariants) {
return Object.entries(variants)
.map(([variantName, variant]) => {
return `${variantName}: ${Object.keys(variant)
.map((key) => (["true", "false"].includes(key) ? key : `"${key}"`))
.join(" | ")}`;
})
.join(";\n ");
}
const generateVariantType = (
variantName: string,
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
variant: Record<any, Partial<Record<string, StyleObject>>>,
) => {
const values = Object.keys(variant);
const booleanValues = values.filter(isBoolean);
const typeString = booleanValues.length > 0 ? "boolean" : values.map(stringify).join(" | ");
const defaultValue = defaultVariants?.[variantName];

return Object.entries(variants)
.map(([variantName, variant]) => {
const values = Object.keys(variant)
.map((key) => (["true", "false"].includes(key) ? key : `"${key}"`))
.join(" | ");
const defaultValue = defaultVariants[variantName];
if (defaultValue === undefined) {
return `${variantName}: ${values};`;
}
if (defaultValue !== undefined) {
return outdent`
/**
* @default ${defaultVariants[variantName]}
* @default ${defaultValue}
*/
${variantName}: ${values};
${variantName}: ${typeString};
`;
})
}

return `${variantName}: ${typeString};`;
};

return Object.entries(variants)
.map(([variantName, variant]) => generateVariantType(variantName, variant))
.join("\n");
};

Expand Down
2 changes: 1 addition & 1 deletion packages/recipe/lib/actionChip.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
interface ActionChipVariant {
size: "medium" | "small";
layout: "withText" | "iconOnly"
layout: "withText" | "iconOnly";
}

type ActionChipVariantMap = {
Expand Down
6 changes: 3 additions & 3 deletions packages/recipe/lib/badge.d.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
interface BadgeVariant {
size: "medium" | "small";
shape: "rectangle" | "pill";
variant: "soft" | "solid" | "outlined";
tone: "neutral" | "brand" | "informative" | "positive" | "danger"
shape: "rectangle" | "pill";
variant: "soft" | "solid" | "outlined";
tone: "neutral" | "brand" | "informative" | "positive" | "danger";
}

type BadgeVariantMap = {
Expand Down
4 changes: 2 additions & 2 deletions packages/recipe/lib/checkbox.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ interface CheckboxVariant {
/**
* @default false
*/
bold: true | false;
bold: boolean;
/**
* @default false
*/
indeterminate: true | false;
indeterminate: boolean;
/**
* @default square
*/
Expand Down
2 changes: 1 addition & 1 deletion packages/recipe/lib/chipTab.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
interface ChipTabVariant {
variant: "neutralSolid" | "brandSolid"
variant: "neutralSolid" | "brandSolid";
}

type ChipTabVariantMap = {
Expand Down
2 changes: 1 addition & 1 deletion packages/recipe/lib/chipTabs.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
interface ChipTabsVariant {
variant: "neutralSolid" | "brandSolid"
variant: "neutralSolid" | "brandSolid";
}

type ChipTabsVariantMap = {
Expand Down
2 changes: 1 addition & 1 deletion packages/recipe/lib/controlChip.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
interface ControlChipVariant {
size: "medium" | "small";
layout: "withText" | "iconOnly"
layout: "withText" | "iconOnly";
}

type ControlChipVariantMap = {
Expand Down
2 changes: 1 addition & 1 deletion packages/recipe/lib/dialog.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
interface DialogVariant {
footerLayout: "horizontal" | "vertical"
footerLayout: "horizontal" | "vertical";
}

type DialogVariantMap = {
Expand Down
2 changes: 1 addition & 1 deletion packages/recipe/lib/radio.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
interface RadioVariant {
size: "large" | "medium" | "small"
size: "large" | "medium" | "small";
}

type RadioVariantMap = {
Expand Down
2 changes: 1 addition & 1 deletion packages/recipe/lib/tabs.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ interface TabsVariant {
/**
* @default false
*/
fixTriggerList: true | false;
fixTriggerList: boolean;
}

type TabsVariantMap = {
Expand Down

0 comments on commit 5e836e5

Please sign in to comment.