🚨 Shai-Hulud Strikes Again:834 Packages Compromised.Technical Analysis β†’
Socket
Book a DemoInstallSign in
Socket

@croquiscom/pds

Package Overview
Dependencies
Maintainers
15
Versions
555
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@croquiscom/pds

Design system for Zigzag's Partner Center

latest
Source
npmnpm
Version
16.32.1
Version published
Maintainers
15
Created
Source

npm version

PDS

PDS(νŒŒνŠΈλ„ˆ λ””μžμΈ μ‹œμŠ€ν…œ)은 μΉ΄μΉ΄μ˜€μŠ€νƒ€μΌ νŒŒνŠΈλ„ˆμ„Όν„° λ””μžμΈ μ‹œμŠ€ν…œμ„ μœ„ν•œ λ¦¬μ•‘νŠΈ 기반의 λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

μ‚¬μš©

ν”„λ‘œμ νŠΈμ— @croquiscom/pds와 peer dependenciesλ₯Ό μΆ”κ°€ν•΄μ€λ‹ˆλ‹€.

npm install --save @croquiscom/pds @emotion/react @emotion/styled react react-dom
import React from 'react'
import { value color, value text_styles, value HStack } from '@croquiscom/pds';
import styled from '@emotion/styled';

export default function Test() {
  return (
    <HStack spacing={10}>
      <BaseText kind='Heading_24_Bold' color={colors.gray900}>Hello</BaseText>
      <StyledText>PDS UI</StyledText>
    </HStack>
  );
}

const StyledText = styled.p`
  ${text_styles.Body_14_SemiBold};
  color: ${colors.gray600};
`;

개발

μš”κ΅¬λ˜λŠ” 개발 ν™˜κ²½

Node.js v20+, Yarn v1.22+

λ‘œμ»¬μ— 클둠된 λ ˆν¬μ§€ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬, node_modulesλ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

yarn

μŠ€ν† λ¦¬λΆμ„ 톡해 ν™•μΈν•˜κΈ° μœ„ν•΄μ„  λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. (λΈŒλΌμš°μ €μ—μ„œ http://localhost:6006/ 둜 μ΄λ™ν•˜μ„Έμš”.)

yarn storybook

ꡬ쑰

β”œβ”€β”€ assets
β”‚   β”œβ”€β”€ icons
β”‚   └── images
β”œβ”€β”€ src
β”‚   β”œβ”€β”€ components
β”‚   β”‚   β”œβ”€β”€[COMPONENT]
β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ [COMPONENT].tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ [COMPONENT].mdx
β”‚   β”‚   β”‚   β”œβ”€β”€ types.ts
β”‚   β”‚   β”‚   └── styles.ts
β”‚   β”‚   β”œβ”€β”€ icons
β”‚   β”‚   β”‚   β”œβ”€β”€ generated
β”‚   β”‚   β”‚   β”œβ”€β”€ Icon.stories.tsx
β”‚   β”‚   β”‚   └── Icons.mdx
β”‚   β”‚   β”œβ”€β”€ images
β”‚   β”‚   β”‚   β”œβ”€β”€ generated
β”‚   β”‚   β”‚   β”œβ”€β”€ Image.stories.tsx
β”‚   β”‚   β”‚   └── Images.mdx
β”‚   β”œβ”€β”€ container
β”‚   β”‚   β”œβ”€β”€[CONTAINER]
β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ [CONTAINER].tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ [CONTAINER].mdx
β”‚   β”‚   β”‚   β”œβ”€β”€ types.ts
β”‚   β”‚   β”‚   └── styles.ts
β”‚   β”œβ”€β”€ constants
β”‚   β”œβ”€β”€ foundation
β”‚   β”œβ”€β”€ global_styles
β”‚   β”œβ”€β”€ styles
β”‚   β”œβ”€β”€ hooks
β”‚   β”œβ”€β”€ stories
β”‚   β”œβ”€β”€ types
β”‚   β”œβ”€β”€ utils
β”‚   β”œβ”€β”€ locales
β”‚   └── index.ts
└── tools
    β”œβ”€β”€ svgr-icons-component-template.js
    β”œβ”€β”€ svgr-icons-template.js
    β”œβ”€β”€ svgr-images-component-template.js
    └── svgr-images-template.js
  • [COMPONENT|CONTAINER]: μ»΄ν¬λ„ŒνŠΈ 디렉토리 이름은 μ†Œλ¬Έμž, κ΅¬λΆ„μžλŠ” -둜 (eg. toggle-switch) μž‘μ„±ν•©λ‹ˆλ‹€. ν•˜μœ„μ—λŠ” κ΄€λ ¨ μ»΄ν¬λ„ŒνŠΈ 파일과 ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ˜ μŠ€ν† λ¦¬λΆ(*.stories.tsx) νŒŒμΌμ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
    • styles.ts, types.tsκ³Ό 같은 νŒŒμΌμ„ 포함할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ»΄ν¬λ„ŒνŠΈλŠ” Named Exports ν•©λ‹ˆλ‹€.
    • 각 μ»΄ν¬λ„ŒνŠΈ 디렉토리와 src ν•˜μœ„μ˜ index.tsλ₯Ό 톡해 export ν•©λ‹ˆλ‹€.
  • global_styles: 리셋 μŠ€νƒ€μΌμ„ ν¬ν•¨ν•œ κΈ€λ‘œλ²Œ μŠ€νƒ€μΌμ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
    • 리셋 μŠ€νƒ€μΌμ„ μœ„ν•œ class λ„€μž„μ€ prefix둜 pds-λ₯Ό λΆ™μ—¬μ€λ‹ˆλ‹€.
  • foundation: color, typography와 같은 themeκ³Ό κ΄€λ ¨λœ μŠ€νƒ€μΌ, μŠ€νƒ€μΌ 토큰을 ν¬ν•¨ν•©λ‹ˆλ‹€.
  • styles: μ»΄ν¬λ„ŒνŠΈμ— 곡용으둜 μ‚¬μš©ν•  μŠ€νƒ€μΌ, μŠ€νƒ€μΌ ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • hooks: μ»€μŠ€ν…€ 훅을 ν¬ν•¨ν•©λ‹ˆλ‹€.
  • stories: μŠ€ν† λ¦¬λΆμš© μ»΄ν¬λ„ŒνŠΈλ‚˜ μŠ€νƒ€μΌ, μ»΄ν¬λ„ŒνŠΈ μ™Έμ˜ μŠ€ν† λ¦¬λΆ λ¬Έμ„œ
  • utils: μ»΄ν¬λ„ŒνŠΈμ— 곡용으둜 μ‚¬μš©ν•  μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ“€μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
  • constants: μƒμˆ˜ μ •μ˜λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • types: νƒ€μž… μ •μ˜λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • assets: svg λ“±μ˜ 에셋을 ν¬ν•¨ν•©λ‹ˆλ‹€.
  • locales: κΈ°λ³Έν‘œκΈ°λ“±μ— μ‚¬μš©λ˜λŠ” 언어셋을 ν¬ν•¨ν•©λ‹ˆλ‹€.
  • scripts: ν”ŒλŸ¬κ·ΈμΈ μ œμž‘μ„ μœ„ν•œ 슀크립트λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • tools: svgr template λ“±μ˜ 라이브러리 μ œμž‘μ„ μœ„ν•œ 슀크립트λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

μ•„μ΄μ½˜ μΆ”κ°€

⚠️ 기본적으둜 ν”Όκ·Έλ§ˆ ν”ŒλŸ¬κ·ΈμΈμ„ 톡해 μžλ™ μƒμ„±ν•©λ‹ˆλ‹€. μˆ˜λ™ μΆ”κ°€λ₯Ό ν•  경우 SVGR을 톡해 svgνŒŒμΌμ„ λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ μ œλ„€λ ˆμ΄νŠΈν•©λ‹ˆλ‹€. src/[icons|images]/generated ν•˜μœ„μ—μ„œ 직접 μˆ˜μ •ν•˜μ§€ λ§μ•„μ£Όμ„Έμš”!

  • assets/icons, assets/images에 svgλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
  • yarn svgr을 μ‹€ν–‰ν•©λ‹ˆλ‹€.
  • src/[icons|images]/generated ν•˜μœ„μ— μ œλ„€λ ˆμ΄νŠΈλœ μ•„μ΄μ½˜ λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈμ™€ src/[icons|images]/generated/index.ts에 ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ˜ exportκ°€ μΆ”κ°€λœ 것을 ν™•μΈν•©λ‹ˆλ‹€.
  • yarn storybook을 μ‹€ν–‰ν•˜μ—¬ μŠ€ν† λ¦¬λΆ λ‚΄μ—μ„œ Icon/Icons, Image/Images λ©”λ‰΄λ‘œ μ΄λ™ν•˜μ—¬ λͺ©λ‘μ—μ„œ ν•΄λ‹Ή μ•„μ΄μ½˜μ΄ 잘 μΆ”κ°€λ˜μ—ˆλŠ”μ§€ ν™•μž…λ‹ˆλ‹€.

PR

  • main을 base 브랜치둜 ν•œ μž‘μ—… 브랜치λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  • 배포 및 버전관리λ₯Ό changeset을 톡해 κ΄€λ¦¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. PR μƒμ„±μ‹œ changeset README.md λ¬Έμ„œλ₯Ό μ°Έκ³ ν•˜μ—¬ νŒŒμΌμ„ μƒμ„±ν•΄μ£Όμ„Έμš”.
  • PR 및 λ§ˆμŠ€ν„° λ¨Έμ§€ μ‹œμ— chromatic으둜 μžλ™ λ°°ν¬λ©λ‹ˆλ‹€.

배포

Github Action을 톡해 μžλ™μœΌλ‘œ λ°°ν¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

changeset νŒŒμΌμ„ ν¬ν•¨ν•œ PR이 main에 λ¨Έμ§€λ˜λ©΄, Github Action μ›Œν¬ν”Œλ‘œμš°κ°€ λ™μž‘λ˜λ©°, 버전 배포λ₯Ό μœ„ν•œ Version Packages PR이 μƒμ„±λ©λ‹ˆλ‹€. ν•΄λ‹Ή PR은 μ…€ν”„λ‘œ Approve ν›„ λ¨Έμ§€ν•˜κ²Œ 되면 Github Action의 μ›Œν¬ν”Œλ‘œμš°κ°€ λ™μž‘λ˜λ©° νŒ¨ν‚€μ§€κ°€ λ°°ν¬λ©λ‹ˆλ‹€.

Github Action을 ν†΅ν•œ 배포가 λΆˆκ°€λŠ₯ν•  경우

npm κΆŒν•œμ΄ ν•„μš”ν•©λ‹ˆλ‹€. npm에 κ°€μž… ν›„ κΆŒν•œμ„ μš”μ²­ν•΄μ£Όμ„Έμš”.

  • Version Packages PR이 μƒμ„±λ˜μ§€ μ•Šμ•˜μ„ 경우, λ‹€μŒμ„ μˆ˜ν–‰ν•΄ changelog와 package.json을 version bumpλ₯Ό ν¬ν•¨ν•œ μž‘μ—… PR을 μƒμ„±ν•©λ‹ˆλ‹€.
yarn changeset version
git commit -m "chore: version bump"
  • Version Packages PR이 μƒμ„±λ˜μ—ˆμ„ 경우 ν•΄λ‹Ή PR을 λ¨Έμ§€ν•˜κ³  main을 μ΅œμ‹  μƒνƒœλ‘œ PULL λ°›μ•„μ£Όμ„Έμš”.
yarn release

Figma Code Connect

PDSλŠ” Figma의 Code Connectλ₯Ό μ‚¬μš©ν•΄μ„œ, Dev Modeμ—μ„œ κ°œλ°œμžκ°€ μ‚¬μš©ν•  수 μžˆλŠ” JSXλ₯Ό λ°”λ‘œ λ…ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Code Connectλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ”, PDSμ—μ„œ figma μ»΄ν¬λ„ŒνŠΈ 맀핑을 μ§„ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. 각 μ»΄ν¬λ„ŒνŠΈμ˜ .figma.tsxκ°€ 맀핑을 μ§€μ›ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

Figma Personal access token λ°œκΈ‰

둜컬 ν™˜κ²½μ—μ„œ Code Connectλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ Figma의 PAT (Personal Access Token)을 λ°œκΈ‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • https://www.figma.com/ μ—μ„œ λ‘œκ·ΈμΈν•œ λ’€, 쒌츑 μƒλ‹¨μ˜ 계정 이름을 μ„ νƒν•œ ν›„ Settingsλ₯Ό λˆ„λ¦…λ‹ˆλ‹€.
  • Account νƒ­μ—μ„œ, ν•˜λ‹¨μœΌλ‘œ μŠ€ν¬λ‘€μ„ 내리면 Personal access tokens ν•­λͺ©μ΄ μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ Generate new token을 μ„ νƒν•©λ‹ˆλ‹€.
    • 토큰 이름을 μ λ‹Ήνžˆ μ§€μ •ν•˜κ³ , Expiration을 No expiration으둜 μ„ νƒν•©λ‹ˆλ‹€.
    • File contentλŠ” Read-only, Code ConnectλŠ” Write둜 μ§€μ •ν•©λ‹ˆλ‹€.
    • Generate token λ²„νŠΌμ„ λˆ„λ¦…λ‹ˆλ‹€.
  • PDSμ—μ„œ .env νŒŒμΌμ„ μƒˆλ‘œ μƒμ„±ν•˜κ³ , λ°œκΈ‰λœ 토큰 값을 μ•„λž˜μ™€ 같이 λΆ™μ—¬λ„£μŠ΅λ‹ˆλ‹€.
FIGMA_ACCESS_TOKEN=figd_...

Figma Code Connect μž‘μ—…ν•˜κΈ°

PDS의 μ»΄ν¬λ„ŒνŠΈλ₯Ό Figma와 μ—°λ™ν•˜κ³ μž ν•˜λŠ” 경우, μ•„λž˜μ™€ 같은 κ³Όμ •μœΌλ‘œ μ§„ν–‰ν•˜λ©΄ λ©λ‹ˆλ‹€.

  • Figmaμ—μ„œ μ›ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμ˜ 원본을 μ°ΎμŠ΅λ‹ˆλ‹€.
    • μ»΄ν¬λ„ŒνŠΈ 원본은 μ•„λž˜μ™€ 같은 λͺ¨μ–‘μœΌλ‘œ μƒκ²ΌμŠ΅λ‹ˆλ‹€.
      • μ»΄ν¬λ„ŒνŠΈ 원본
    • μ»΄ν¬λ„ŒνŠΈλ₯Ό μ„ νƒν•œ λ’€, 우츑의 "Go to main component"λ₯Ό μ„ νƒν•˜λ©΄ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ»΄ν¬λ„ŒνŠΈλ₯Ό μ™Όμͺ½μ˜ νŠΈλ¦¬μ—μ„œ μš°ν΄λ¦­ν•œ ν›„, "Copy link to selection"을 μ„ νƒν•©λ‹ˆλ‹€.
    • μ»΄ν¬λ„ŒνŠΈ μ£Όμ†Œ 볡사
  • ν„°λ―Έλ„μ—μ„œ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ˜ μ†ŒμŠ€κ°€ μ‘΄μž¬ν•˜λŠ” λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜κ³ , μ•„λž˜μ™€ 같이 λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€.
$ yarn figma connect create 'https://www.figma.com/design/...'
  • μ»΄ν¬λ„ŒνŠΈ 이름에 λ§žλŠ” Component.figma.tsxκ°€ μƒμ„±λ©λ‹ˆλ‹€.
  • ν”Όκ·Έλ§ˆκ°€ μ œκ³΅ν•œ κΈ°λ³Έ 맀핑을 μ‹€μ œ μ»΄ν¬λ„ŒνŠΈμ— 맞게 μˆ˜μ •ν•©λ‹ˆλ‹€. λ§€ν•‘ κ°€μ΄λ“œ
  • μž‘μ—…μ„ 마치면, μ•„λž˜ λͺ…령을 톡해 μ‹€μ œλ‘œ ν”Όκ·Έλ§ˆλ‘œ μ—…λ‘œλ“œν•©λ‹ˆλ‹€.
$ yarn figma connect publish
  • ν”Όκ·Έλ§ˆμ—μ„œ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” κ³³μ—μ„œ dev modeλ₯Ό 켜면, μ‹€μ œλ‘œ ν•΄λ‹Ή μ½”λ“œλ₯Ό 확인해볼 수 μžˆμŠ΅λ‹ˆλ‹€.
  • GitHub Action λ˜ν•œ μ„ΈνŒ…λ˜μ–΄ 있기 λ•Œλ¬Έμ—, 직접 publishν•˜μ§€ μ•Šμ•„λ„ μžλ™μœΌλ‘œ λ°˜μ˜λ©λ‹ˆλ‹€.

μ•„μ΄μ½˜ μ—…λ‘œλ“œν•˜κΈ°

Figma Code Connect의 μ•„μ΄μ½˜, 이미지듀은 scripts/figma-import-icons.js에 μ˜ν•΄ μžλ™μœΌλ‘œ λ§€ν•‘λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. yarn svgr을 μ‹€ν–‰ν•˜λ©΄ μžλ™μœΌλ‘œ ν”Όκ·Έλ§ˆμ˜ μ•„μ΄μ½˜λ“€κ³Ό λ§€ν•‘λ©λ‹ˆλ‹€.

Component Test

$ yarn test
  • μœ„ λͺ…λ Ήμ–΄ ν˜Ήμ€ storybook uiλ₯Ό 톡해 개발 ν™˜κ²½μ—μ„œ μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€.
  • νŠΉμ • μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ°œμƒν•œ 이슈의 μ‹œλ‚˜λ¦¬μ˜€λ₯Ό story의 play ν•¨μˆ˜μ— μ •μ˜ν•©λ‹ˆλ‹€.
  • μžλ™ν™” ν…ŒμŠ€νŠΈμ™€ UIν…ŒμŠ€νŠΈ μŠ€ν† λ¦¬λ₯Ό λΆ„λ¦¬ν•˜κΈ° μœ„ν•΄ μžλ™ν™” ν…ŒμŠ€νŠΈμ½”λ“œλŠ” [Components].test.stories.tsx ν˜•νƒœλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.

FAQs

Package last updated on 21 Nov 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts