diff --git a/docs/src/pages/docs/advantages/reliability.en.mdx b/docs/src/pages/docs/advantages/reliability.en.mdx
new file mode 100644
index 00000000..67921160
--- /dev/null
+++ b/docs/src/pages/docs/advantages/reliability.en.mdx
@@ -0,0 +1,14 @@
+---
+title: reliability
+---
+
+import Reliability from './reliability.tsx';
+
+# π― Providing High Reliability
+
+`es-hangul` has achieved 100% test coverage by adopting a testing framework. This means that all features of the library have been thoroughly verified, minimizing unexpected errors. Built on high reliability, it offers stable and predictable performance, so you can confidently incorporate it into your projects. Experience a new standard in Hangul processing by utilizing `es-hangul` now!
+
+
+
+
+
diff --git a/docs/src/pages/docs/advantages/reliability.ko.mdx b/docs/src/pages/docs/advantages/reliability.ko.mdx
new file mode 100644
index 00000000..3fe04428
--- /dev/null
+++ b/docs/src/pages/docs/advantages/reliability.ko.mdx
@@ -0,0 +1,14 @@
+---
+title: reliability
+---
+
+import Reliability from './reliability.tsx';
+
+# π― λμ μ λ’°μ± μ 곡
+
+`es-hangul`μ ν
μ€ν
νλ μμν¬λ₯Ό λμ
νμ¬ ν
μ€νΈ 컀λ²λ¦¬μ§ 100%λ₯Ό λ¬μ±νμμ΅λλ€. μ΄λ λΌμ΄λΈλ¬λ¦¬μ λͺ¨λ κΈ°λ₯μ΄ μ² μ νκ² κ²μ¦λμμμ μλ―Ένλ©°, μκΈ°μΉ μμ μ€λ₯λ₯Ό μ΅μνν©λλ€. λμ μ λ’°μ±μ λ°νμΌλ‘ μμ μ μ΄κ³ μμΈ‘ κ°λ₯ν μ±λ₯μ μ 곡νλ―λ‘, μμ¬νκ³ νλ‘μ νΈμ λμ
νμ€ μ μμ΅λλ€. μ§κΈ `es-hangul`μ νμ©νμ¬ νκΈ μ²λ¦¬μ μλ‘μ΄ κΈ°μ€μ κ²½νν΄ λ³΄μΈμ!
+
+
+
+
+
diff --git a/docs/src/pages/docs/advantages/reliability.tsx b/docs/src/pages/docs/advantages/reliability.tsx
new file mode 100644
index 00000000..e7d932f9
--- /dev/null
+++ b/docs/src/pages/docs/advantages/reliability.tsx
@@ -0,0 +1,162 @@
+import coverageJSON from '../../../../../coverage/coverage-summary.json';
+
+type Locale = 'ko' | 'en';
+
+interface TypeSupportTableProps {
+ locale: Locale;
+}
+
+export default function Reliability({ locale }: TypeSupportTableProps) {
+ const isKorean = locale === 'ko';
+ const statements = isKorean ? 'λ¬Έμ₯' : 'Statements';
+ const branches = isKorean ? 'λΈλμΉ' : 'Branches';
+ const functions = isKorean ? 'ν¨μ' : 'Functions';
+ const lines = isKorean ? 'λΌμΈ' : 'Lines';
+
+ const { total: totalCoverage, ...fileEntries } = coverageJSON;
+
+ const isValidFilePath = (filePath: string): boolean => {
+ // src λ€ 2-depthκΉμ§μ κ²½λ‘λ₯Ό νν°λ§νλ©°, anything.something.ts λ±μ λͺ
μΉμ κ°μ§ νμΌλ€μ λ°νλμ§ μλλ‘ `.ts`λ‘ λλλ μΆκ° μ (`.`)μ΄ μλ κ²½μ°λ§ νμ©
+ const regex = /\/src\/[^/]+\/[^/]+(? {
+ return filePath.split('/').pop()?.split('.')[0];
+ };
+
+ const filterValidFileEntries = (coverageFileEntries: typeof fileEntries) => {
+ return Object.entries(coverageFileEntries)
+ .filter(([filePath]) => isValidFilePath(filePath))
+ .flatMap(([filePath, info]) => {
+ const filename = extractFileName(filePath);
+
+ return filename != null ? [[filename, info] as const] : [];
+ });
+ };
+
+ return (
+
+
+
+
+ {isKorean ? 'es-hangulμ ν
μ€νΈ 컀λ²λ¦¬μ§ νλͺ©' : "es-hangul's test coverage item"}
+
+
+
+
+
+ {isKorean ? 'ν
μ€νΈ 컀λ²λ¦¬μ§ νλͺ©' : 'Test coverage item'}
+ |
+
+ {isKorean ? '컀λ²λ¦¬μ§ λΉμ¨' : 'Coverage percentage'}
+ |
+
+
+
+
+
+
+ {statements}
+
+
+ βΉοΈ
+ {isKorean
+ ? 'μ½λμμ μ€ν κ°λ₯ν λͺ¨λ λ¬Έμ₯μ΄ ν
μ€νΈμμ μ€νλμλμ§'
+ : 'Whether all executable statements in the code have been executed during testing'}
+
+ |
+ β
({totalCoverage.statements.pct}%) |
+
+
+
+
+ {branches}
+
+
+ βΉοΈ
+ {isKorean
+ ? '쑰건문(if, else, switch λ±)μμ λ°μνλ λͺ¨λ λΆκΈ° κ²½λ‘κ° ν
μ€νΈλμλμ§'
+ : 'Whether all branching paths in conditional statements (if, else, switch, etc.) have been tested'}
+
+ |
+ β
({totalCoverage.branches.pct}%) |
+
+
+
+
+ {functions}
+
+
+ βΉοΈ
+ {isKorean
+ ? 'μ½λ λ΄μ λͺ¨λ ν¨μκ° ν
μ€νΈμμ νΈμΆλμλμ§'
+ : 'Whether all functions within the code have been called during testing'}
+
+ |
+ β
({totalCoverage.functions.pct}%) |
+
+
+
+
+ {lines}
+
+
+ βΉοΈ
+ {isKorean
+ ? 'μμ€ μ½λμ κ° λΌμΈμ΄ ν
μ€νΈμμ μ€νλμλμ§'
+ : 'Whether each line of the source code has been executed during testing'}
+
+ |
+ β
({totalCoverage.lines.pct}%) |
+
+
+
+
+
+
+
+
+ {isKorean ? 'es-hangulμ ν
μ€νΈ 컀λ²λ¦¬μ§ νν©' : "es-hangul's test coverage status"}
+
+
+
+
+
+ API
+ |
+
+ {statements}
+ |
+
+ {branches}
+ |
+
+ {functions}
+ |
+
+ {lines}
+ |
+
+
+
+
+ {filterValidFileEntries(fileEntries).map(([filename, info]) => (
+
+
+ {filename} π
+ |
+
+ β
({info.statements.pct}%) |
+ β
({info.branches.pct}%) |
+ β
({info.functions.pct}%) |
+ β
({info.lines.pct}%) |
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/docs/src/pages/docs/introduction.ko.mdx b/docs/src/pages/docs/introduction.ko.mdx
index d2defa6d..384ee7f2 100644
--- a/docs/src/pages/docs/introduction.ko.mdx
+++ b/docs/src/pages/docs/introduction.ko.mdx
@@ -24,7 +24,7 @@ ECMAScript Modulesλ₯Ό μ΄μ©νμ¬ μ¬μ©νλ ν¨μλ§ μ ν리μΌμ΄μ
μ
### μ λ’°ν μ μμ΅λλ€
-μ°λ¦¬λ 컀λ²λ¦¬μ§ 100%λ₯Ό λͺ©νλ‘ λͺ¨λ κΈ°λ₯μ ν
μ€νΈνκΈ° μν΄ λ
Έλ ₯νκ³ μμ΅λλ€.
+μ°λ¦¬λ 컀λ²λ¦¬μ§ 100%λ₯Ό λͺ©νλ‘ λͺ¨λ κΈ°λ₯μ ν
μ€νΈνκΈ° μν΄ [λ
Έλ ₯νκ³ μμ΅λλ€](./advantages/reliability).
[](https://codecov.io/gh/toss/es-hangul)
### TypeScriptλ₯Ό μ§μν©λλ€
diff --git a/src/days/days.constants.ts b/src/days/constants.ts
similarity index 100%
rename from src/days/days.constants.ts
rename to src/days/constants.ts
diff --git a/src/days/days.ts b/src/days/days.ts
index ee00c736..43cf69c5 100644
--- a/src/days/days.ts
+++ b/src/days/days.ts
@@ -1,5 +1,5 @@
import { hasProperty } from '../_internal';
-import { DAYS_MAP, DAYS_ONLY_TENS_MAP } from './days.constants';
+import { DAYS_MAP, DAYS_ONLY_TENS_MAP } from './constants';
export function days(num: number): string {
return getNumberWord(num);
diff --git a/src/standardizePronunciation/standardizePronunciation.constants.ts b/src/standardizePronunciation/constants.ts
similarity index 100%
rename from src/standardizePronunciation/standardizePronunciation.constants.ts
rename to src/standardizePronunciation/constants.ts
diff --git a/src/standardizePronunciation/rules/transform12th.ts b/src/standardizePronunciation/rules/transform12th.ts
index 77841f94..a99ebb04 100644
--- a/src/standardizePronunciation/rules/transform12th.ts
+++ b/src/standardizePronunciation/rules/transform12th.ts
@@ -5,7 +5,7 @@ import {
λ°μλ³ν_첫μ리_γ
,
λ°μλ³ν_첫μ리_γ
_λ°μ,
μκ°κ°_μλ_μμ,
-} from '../standardizePronunciation.constants';
+} from '../constants';
import { Nullable, NullableReturnSyllables, ReturnSyllables, Syllable } from './rules.types';
import { replaceλ°μΉ¨γ
} from './rules.utils';
diff --git a/src/standardizePronunciation/rules/transform13And14th.ts b/src/standardizePronunciation/rules/transform13And14th.ts
index 651dcea7..2ff5184c 100644
--- a/src/standardizePronunciation/rules/transform13And14th.ts
+++ b/src/standardizePronunciation/rules/transform13And14th.ts
@@ -1,5 +1,5 @@
import { arrayIncludes } from '../../_internal';
-import { μκ°κ°_μλ_μμ } from '../standardizePronunciation.constants';
+import { μκ°κ°_μλ_μμ } from '../constants';
import { ReturnSyllables, Syllable } from './rules.types';
const λ°μΉ¨μκΈΈμ΄ = {
diff --git a/src/standardizePronunciation/rules/transform16th.ts b/src/standardizePronunciation/rules/transform16th.ts
index 5622b6a1..69b05027 100644
--- a/src/standardizePronunciation/rules/transform16th.ts
+++ b/src/standardizePronunciation/rules/transform16th.ts
@@ -1,10 +1,5 @@
import { arrayIncludes } from '../../_internal';
-import {
- μκ°κ°_μλ_μμ,
- νΉλ³ν_νκΈ_μλͺ¨,
- νΉλ³ν_νκΈ_μλͺ¨μ_λ°μ,
- νκΈ_μλͺ¨,
-} from '../standardizePronunciation.constants';
+import { μκ°κ°_μλ_μμ, νΉλ³ν_νκΈ_μλͺ¨, νΉλ³ν_νκΈ_μλͺ¨μ_λ°μ, νκΈ_μλͺ¨ } from '../constants';
import { ReturnSyllables, Syllable } from './rules.types';
type Apply16ν = {
diff --git a/src/standardizePronunciation/rules/transform17th.ts b/src/standardizePronunciation/rules/transform17th.ts
index a98f9a94..16cb3999 100644
--- a/src/standardizePronunciation/rules/transform17th.ts
+++ b/src/standardizePronunciation/rules/transform17th.ts
@@ -1,5 +1,5 @@
import { hasProperty } from '../../_internal';
-import { μμ_λν_λ°μΉ¨ } from '../standardizePronunciation.constants';
+import { μμ_λν_λ°μΉ¨ } from '../constants';
import { ReturnSyllables, Syllable } from './rules.types';
/**
diff --git a/src/standardizePronunciation/rules/transform18th.ts b/src/standardizePronunciation/rules/transform18th.ts
index 4d806e73..e108e993 100644
--- a/src/standardizePronunciation/rules/transform18th.ts
+++ b/src/standardizePronunciation/rules/transform18th.ts
@@ -1,5 +1,5 @@
import { arrayIncludes } from '../../_internal';
-import { λΉμν_λ°μΉ¨_γ΄_λ³ν, λΉμν_λ°μΉ¨_γ
_λ³ν, λΉμν_λ°μΉ¨_γ
_λ³ν } from '../standardizePronunciation.constants';
+import { λΉμν_λ°μΉ¨_γ΄_λ³ν, λΉμν_λ°μΉ¨_γ
_λ³ν, λΉμν_λ°μΉ¨_γ
_λ³ν } from '../constants';
import { ReturnSyllables, Syllable } from './rules.types';
/**
diff --git a/src/standardizePronunciation/rules/transform19th.ts b/src/standardizePronunciation/rules/transform19th.ts
index 6406705a..2038e400 100644
--- a/src/standardizePronunciation/rules/transform19th.ts
+++ b/src/standardizePronunciation/rules/transform19th.ts
@@ -1,5 +1,5 @@
import { arrayIncludes } from '../../_internal';
-import { μμλν_λ°μΉ¨_γ΄_λ³ν } from '../standardizePronunciation.constants';
+import { μμλν_λ°μΉ¨_γ΄_λ³ν } from '../constants';
import { ReturnSyllables, Syllable } from './rules.types';
/**
diff --git a/src/standardizePronunciation/rules/transform9And10And11th.ts b/src/standardizePronunciation/rules/transform9And10And11th.ts
index df77a217..b2f2e97b 100644
--- a/src/standardizePronunciation/rules/transform9And10And11th.ts
+++ b/src/standardizePronunciation/rules/transform9And10And11th.ts
@@ -1,5 +1,5 @@
import { hasProperty } from '../../_internal';
-import { λ°μΉ¨_λνμ_λ°μ, μκ°κ°_μλ_μμ } from '../standardizePronunciation.constants';
+import { λ°μΉ¨_λνμ_λ°μ, μκ°κ°_μλ_μμ } from '../constants';
import { Nullable, ReturnSyllables, Syllable } from './rules.types';
/**
diff --git a/src/standardizePronunciation/rules/transformHardConversion.ts b/src/standardizePronunciation/rules/transformHardConversion.ts
index 2b856f08..0319ca44 100644
--- a/src/standardizePronunciation/rules/transformHardConversion.ts
+++ b/src/standardizePronunciation/rules/transformHardConversion.ts
@@ -1,6 +1,5 @@
-import { arrayIncludes } from '../../_internal';
-import { hasProperty } from '../../_internal';
-import { λμ리, λμ리_λ°μΉ¨, μ΄κ°_λ°μΉ¨ } from '../standardizePronunciation.constants';
+import { arrayIncludes, hasProperty } from '../../_internal';
+import { λμ리, λμ리_λ°μΉ¨, μ΄κ°_λ°μΉ¨ } from '../constants';
import { ReturnSyllables, Syllable } from './rules.types';
/**
diff --git a/src/standardizePronunciation/rules/transformNLAssimilation.ts b/src/standardizePronunciation/rules/transformNLAssimilation.ts
index 22910c98..b1385cbb 100644
--- a/src/standardizePronunciation/rules/transformNLAssimilation.ts
+++ b/src/standardizePronunciation/rules/transformNLAssimilation.ts
@@ -4,7 +4,7 @@ import {
γ΄γΉμ΄_λ§λλ_νμμμ _λͺ¨μ,
γ΄γΉμ΄_λ§λμ_λ°μΉ¨_γ΄_λ³ν,
γ΄γΉμ΄_λ§λμ_λ°μΉ¨_γΉ_λ³ν,
-} from '../standardizePronunciation.constants';
+} from '../constants';
import { ReturnSyllables, Syllable } from './rules.types';
/**
diff --git a/vitest.config.mts b/vitest.config.mts
index 744c61b0..d0abb3c7 100644
--- a/vitest.config.mts
+++ b/vitest.config.mts
@@ -1,6 +1,6 @@
+import path from 'path';
import { defineConfig } from 'vitest/config';
import packageJson from './package.json';
-import path from 'path';
export default defineConfig({
resolve: {
@@ -13,6 +13,7 @@ export default defineConfig({
globals: true,
coverage: {
provider: 'istanbul',
+ reporter: ['json-summary', 'text'],
include: ['src/**/*'],
},
},