μ΄ λ¬Έμλ AI μμ΄μ νΈκ° node-packages λͺ¨λ
Έλ ν¬μμ μ½λλ₯Ό μμ±νκ³ κΈ°μ¬ν λ λ°λΌμΌ νλ κ·μΉκ³Ό κ°μ΄λλΌμΈμ μ μν©λλ€.
- νλ‘μ νΈ κ°μ
- μ½λ μμ± κ·μΉ
- μ»€λ° κ·μΉ
- 보μ λ° κ°μΈμ 보
- νμΌ κ΅¬μ‘°
- μ½λ μ€νμΌ
- λ¬Έμν
- ν μ€νΈ
- ν¨ν€μ§ λ°ν
node-packages λ hmmhmmhm μ κ°μΈ μ°κ΅¬μ© npm ν¨ν€μ§ λͺ¨λ
Έλ ν¬μ
λλ€. pnpm workspaces + Turborepo κ΅¬μ‘°λ‘ μ΄μλλ©°, νμ¬ 10κ° ν¨ν€μ§λ₯Ό ν¬ν¨ν©λλ€.
base2000,base6000β μ§μ λ³νΒ·μΈμ½λ© μ€νbiggestβ μμ μ λ°λ ν° μΒ·μμ λΌμ΄λΈλ¬λ¦¬curse-scriptβ ν μ€νΈ λ³ν μ€νedge-cryptoβ μ£μ§ λ°νμμ© μνΈν ν¬νΌgauss-spiralβ κ°μ°μ€ λμ μ’ν μμ€ν mugunghwaβ νκΈ κΈ°λ° base μΈμ½λ©patternlyβ ν¨ν΄ λ§€μΉ μ νΈpseudo-shuffleβ μμ΄ μλ κ°μ§ μ νusernamerβ μ¬μ©μλͺ μμ±κΈ°
κ° ν¨ν€μ§λ λ 립μ μΌλ‘ npm μ λ°νλλ©°, κ³΅ν΅ μμ‘΄μ±Β·λꡬ μ€μ μ 루νΈμμ κ΄λ¦¬ν©λλ€.
λͺ¨λ μ½λ νμΌμ 450μ€ μ΄νλ‘ μμ±λμ΄μΌ ν©λλ€.
- μ΅λ μ€ μ: 450μ€
- κΆμ₯ μ€ μ: 300-400μ€
- μ΄κ³Ό μ μ‘°μΉ: νμΌμ΄ 450μ€μ μ΄κ³Όνλ©΄ κΈ°λ₯λ³λ‘ λΆλ¦¬νμ¬ λͺ¨λν
- μμΈ: μλ μμ± νμΌ(μ: λΉλ μ°μΆλ¬Ό, lockfile) μ μμΈλ‘ λ μ μμ
// β λμ μ: νλμ νμΌμ λͺ¨λ κΈ°λ₯ (600μ€)
// packages/biggest/src/index.ts (600μ€)
// β
μ’μ μ: κΈ°λ₯λ³λ‘ λΆλ¦¬
// packages/biggest/src/integer.ts (200μ€)
// packages/biggest/src/decimal.ts (180μ€)
// packages/biggest/src/format.ts (120μ€)
// packages/biggest/src/index.ts (50μ€, re-export)- λͺ νμ±: μ½λλ λͺ ννκ³ μ΄ν΄νκΈ° μ½κ² μμ±
- μ¬μ¬μ©μ±: μ€λ³΅ μ½λλ₯Ό μ΅μννκ³ κ³΅ν΅ λ‘μ§μ ν¨μλ‘ μΆμΆ
- νμ μμ μ±: TypeScript μ νμ μμ€ν μ μ κ·Ή νμ© (strict λͺ¨λ μ μ§)
- μλ¬ νΈλ€λ§: λͺ¨λ λΉλκΈ° μμ κ³Ό μΈλΆ API νΈμΆμ μ μ ν μλ¬ μ²λ¦¬ ꡬν
- μ λ‘ μμ‘΄μ± μ§ν₯: κ°λ₯ν ν μΈλΆ λ°νμ μμ‘΄μ±μ μΆκ°νμ§ μμ΅λλ€. μΆκ° μ ν©λΉν μ¬μ λ₯Ό PR λ³Έλ¬Έμ λͺ μν©λλ€.
// β
μ’μ μ
export function parse(input: string): Result {
if (!input) {
throw new TypeError("input must be a non-empty string");
}
return doParse(input);
}
// β λμ μ
export function parse(input: any) {
return doParse(input);
}- μ£ΌκΈ°μ μΈ μ»€λ°: λ Όλ¦¬μ μΈ μμ λ¨μλ§λ€ 컀λ°
- μμ λ¨μ: ν λ²μ νλμ κΈ°λ₯μ΄λ μμ μ¬νλ§ ν¬ν¨
- μμ±λ μ½λ: λΉλ μ€ν¨λ λ°νμ μλ¬κ° μλ μνμμλ§ μ»€λ°
<type>: <μ€λͺ
>
[μ ν: λ³Έλ¬Έ]
featβ μ κ· κΈ°λ₯fixβ λ²κ·Έ μμ docsβ λ¬Έμλ§ λ³κ²½choreβ λΉλ/λꡬ/μμ‘΄μ±refactorβ λμ λ³κ²½ μλ ꡬ쑰 κ°μtestβ ν μ€νΈ μΆκ°/μμ perfβ μ±λ₯ κ°μ
feat: add base6000 hangul-aware decoder
fix: handle negative zero in biggest comparison
chore: bump turbo to 2.x
- λΉλ°ν€Β·ν ν°Β·μ격μ¦λͺ μ μ½λΒ·ν μ€νΈΒ·λ¬Έμμ ν¬ν¨νμ§ μμ΅λλ€.
- κ°μΈ μ 보(μ΄λ©μΌ, μ€λͺ ) λ₯Ό μμ μ½λμ λ°μ§ μκ³ , μλλ mock λ§ μ¬μ©ν©λλ€.
- 보μ κ΄λ ¨ λ³κ²½(μ: edge-crypto μ μκ³ λ¦¬μ¦ λ³κ²½) μ λ³λ PR λ‘ λΆλ¦¬νκ³ commit λ©μμ§μ λͺ μν©λλ€.
node-packages/
βββ packages/
β βββ <name>/
β βββ src/
β βββ tests/ (μλ κ²½μ°)
β βββ package.json
β βββ tsconfig.json
β βββ README.md
βββ package.json (root, workspaces μ μ)
βββ pnpm-workspace.yaml
βββ turbo.json
βββ AGENTS.md / CLAUDE.md
κ° ν¨ν€μ§λ μκΈ° μμ μ package.json μ κ°μ§λ©°, npm μ λ
립 λ°νλ©λλ€.
- ν¬λ§€ν°: prettier (
pnpm format) - λ¦°ν°: κ° ν¨ν€μ§ λ¨μλ‘ turbo κ° μμ (
pnpm lint) - νμ
체ν¬:
pnpm check-types - λΉλ:
pnpm build(turbo κ° μμ‘΄ κ·Έλνμ λ°λΌ μΊμΒ·λ³λ ¬ μ€ν)
PR μ μΆ μ μ 4κ°λ₯Ό λͺ¨λ ν΅κ³Όμν΅λλ€.
- κ° ν¨ν€μ§λ μ체
README.mdλ₯Ό κ°μ§λ©°, μ€μΉΒ·μ¬μ© μμ Β·API νλ₯Ό ν¬ν¨ν©λλ€. - μμ΄ README λ₯Ό μ°μ νλ©°, νκ΅μ΄ README λ μ νμ μ λλ€ (μλ€λ©΄ μμ΄μ λκΈ° μ μ§).
- μ ν¨ν€μ§ μΆκ° μ root
README.mdμ ν¨ν€μ§ λͺ©λ‘λ κ°±μ ν©λλ€.
- κ° ν¨ν€μ§λ μκΈ°μκ² μ ν©ν ν μ€νΈ λꡬλ₯Ό μ¬μ©ν©λλ€ (Vitest κΆμ₯).
- μ κ· ν¨μΒ·λ²κ·Έ μμ μλ νκ· ν μ€νΈλ₯Ό λλ΄ν©λλ€.
- μΈλΆ μμ€ν μ μμ‘΄νμ§ μλ λ¨μ ν μ€νΈλ§ μ΄μν©λλ€ (μμ‘΄νλ©΄ mock μ²λ¦¬).
- κ° ν¨ν€μ§μ
package.jsonμpublishConfig.access = publicλͺ μ. - λ°ν μ
pnpm build && pnpm check-types && pnpm lintλͺ¨λ ν΅κ³Ό νμΈ. - λ²μ λ²νλ SemVer λ₯Ό λ°λ¦ λλ€. breaking change λ major.
- npm λ°ν ν ν°μ
personal-agent/secrets/.npmrc.personalμ μ¬μ©ν©λλ€ (CI κ° μλ λ‘컬 λ°ν μ).