Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.husky/* text eol=lf
21 changes: 21 additions & 0 deletions .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/sh

COMMIT_MSG_FILE="$1"
COMMIT_MSG_HEADER=$(grep -v '^[[:space:]]*#' "$COMMIT_MSG_FILE" | head -n 1)

# Merge나 Revert 커밋은 검사하지 않고 통과시킴
if echo "$COMMIT_MSG_HEADER" | grep -Eq "^(Merge|Revert)"; then
exit 0
fi

PATTERN='^(init|feat|fix|design|update|remove|add|move|rename|docs|comment|refactor|test|chore|deploy): .+ \(#[0-9]+\)$'

# 커밋 컨벤션과 일치하는지 체크
if ! echo "$COMMIT_MSG_HEADER" | grep -Eq "$PATTERN"; then
echo "🚨 [커밋 메시지 에러] 형식이 컨벤션과 다릅니다."
echo "👉 규칙: <타입>: <내용> (#<이슈번호>)"
echo "👉 예시: feat: 공통 컴포넌트 퍼블리싱 (#1)"
exit 1
fi

exit 0
5 changes: 5 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/sh

echo "🐶 Husky pre-commit 실행"
pnpm exec lint-staged || exit 1
echo "🎉 lint-staged 통과"
17 changes: 9 additions & 8 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
import type { StorybookConfig } from '@storybook/react-vite';
import { mergeConfig } from 'vite';
import tsconfigPaths from 'vite-tsconfig-paths';
import { mergeConfig } from "vite";
import tsconfigPaths from "vite-tsconfig-paths";

import type { StorybookConfig } from "@storybook/react-vite";

const config: StorybookConfig = {
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],

addons: ['@storybook/addon-docs', '@storybook/addon-a11y'],
addons: ["@storybook/addon-docs", "@storybook/addon-a11y"],

framework: '@storybook/react-vite',
framework: "@storybook/react-vite",

viteFinal: async (storybookConfig) =>
mergeConfig(storybookConfig, {
plugins: [tsconfigPaths()],
}),

typescript: {
reactDocgen: 'react-docgen-typescript',
reactDocgen: "react-docgen-typescript",
reactDocgenTypescriptOptions: {
shouldExtractLiteralValuesFromEnum: true,
shouldRemoveUndefinedFromOptional: true,
propFilter: (prop) => !/node_modules/.test(prop.parent?.fileName || ''),
propFilter: (prop) => !/node_modules/.test(prop.parent?.fileName || ""),
},
},
};
Expand Down
6 changes: 3 additions & 3 deletions .storybook/preview.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import type { Preview } from '@storybook/react-vite';
import type { Preview } from "@storybook/react-vite";

// 나중에 전역 스타일 여기서 import
// vanilla-extract의 globalStyle / theme entry 여기서 불러옴
// 예: import '@/shared/styles/global.css.ts';

const preview: Preview = {
tags: ['autodocs'],
tags: ["autodocs"],

parameters: {
layout: 'padded',
layout: "padded",

controls: {
matchers: {
Expand Down
12 changes: 12 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,19 @@
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview",
"prepare": "husky",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build"
},
"lint-staged": {
"*.{ts,tsx,js,jsx}": [
"eslint --fix",
"prettier --write"
],
"*.{json,md,mdx,css,scss,yml,yaml}": [
"prettier --write"
]
},
"dependencies": {
"eslint-import-resolver-typescript": "^4.4.4",
"react": "^19.2.0",
Expand All @@ -37,6 +47,8 @@
"eslint-plugin-react-refresh": "^0.4.24",
"eslint-plugin-storybook": "^10.1.11",
"globals": "^16.5.0",
"husky": "^9.1.7",
"lint-staged": "^16.2.7",
"storybook": "^10.1.11",
"prettier": "3.7.4",
"typescript": "~5.9.3",
Expand Down
Loading