diff --git a/.changeset/unlucky-carpets-remain.md b/.changeset/unlucky-carpets-remain.md new file mode 100644 index 0000000000..21b0c23e97 --- /dev/null +++ b/.changeset/unlucky-carpets-remain.md @@ -0,0 +1,5 @@ +--- +"@medusajs/types": patch +--- + +fix: pluralization of words ending in y, where y follows a vowel diff --git a/packages/core/types/src/common/__tests__/pluralize.spec.ts b/packages/core/types/src/common/__tests__/pluralize.spec.ts index 438cc7baac..a6e4ea5c7c 100644 --- a/packages/core/types/src/common/__tests__/pluralize.spec.ts +++ b/packages/core/types/src/common/__tests__/pluralize.spec.ts @@ -18,6 +18,11 @@ describe("Pluralize", () => { expectTypeOf>().toEqualTypeOf<"knives">() }) + test("pluralize words ending with ch", () => { + expectTypeOf>().toEqualTypeOf<"churches">() + expectTypeOf>().toEqualTypeOf<"arches">() + }) + test("pluralize words ending with o", () => { expectTypeOf>().toEqualTypeOf<"heroes">() }) @@ -30,8 +35,20 @@ describe("Pluralize", () => { expectTypeOf>().toEqualTypeOf<"fizes">() }) - test("pluralize words ending with y", () => { + test("pluralize words ending with y, in which y follows a constant", () => { expectTypeOf>().toEqualTypeOf<"puppies">() + expectTypeOf>().toEqualTypeOf<"twenties">() + expectTypeOf>().toEqualTypeOf<"copies">() + }) + + test("pluralize words ending with y, in which y follow a vowel", () => { + expectTypeOf>().toEqualTypeOf<"plays">() + expectTypeOf>().toEqualTypeOf<"relays">() + expectTypeOf>().toEqualTypeOf<"alleys">() + expectTypeOf>().toEqualTypeOf<"alleys">() + expectTypeOf>().toEqualTypeOf<"boys">() + expectTypeOf>().toEqualTypeOf<"enjoys">() + expectTypeOf>().toEqualTypeOf<"buys">() }) test("pluralize words with special rules", () => { diff --git a/packages/core/types/src/common/common.ts b/packages/core/types/src/common/common.ts index c7595dcaeb..261482629c 100644 --- a/packages/core/types/src/common/common.ts +++ b/packages/core/types/src/common/common.ts @@ -365,26 +365,34 @@ export type Pluralize = ? PluralizationSpecialRules[Lowercase] : Lowercase extends UncountableRules ? Singular - : Singular extends `${infer R}ss` + : Singular extends `${string}ss` ? `${Singular}es` : Singular extends `${infer R}sis` ? `${R}ses` : Singular extends `${infer R}is` ? `${R}ises` - : Singular extends `${infer R}s` + : Singular extends `${string}s` ? `${Singular}` + : Singular extends `${infer R}ay` + ? `${R}ays` : Singular extends `${infer R}ey` ? `${R}eys` + : Singular extends `${infer R}iy` + ? `${R}iys` + : Singular extends `${infer R}oy` + ? `${R}oys` + : Singular extends `${infer R}uy` + ? `${R}uys` : Singular extends `${infer R}y` ? `${R}ies` - : Singular extends `${infer R}es` + : Singular extends `${string}es` ? `${Singular}` : Singular extends - | `${infer R}sh` - | `${infer R}ch` - | `${infer R}x` - | `${infer R}z` - | `${infer R}o` + | `${string}sh` + | `${string}ch` + | `${string}x` + | `${string}z` + | `${string}o` ? `${Singular}es` : Singular extends `${infer R}fe` ? `${R}ves`