Skip to content
This repository was archived by the owner on Dec 30, 2023. It is now read-only.

Commit 2a4f017

Browse files
committed
refactor(packages/string): ♻️ Fix validators
1 parent d7612d9 commit 2a4f017

File tree

4 files changed

+16
-21
lines changed

4 files changed

+16
-21
lines changed

packages/string/source/char/char.test.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,9 @@ describe("isSingleChar(input)", () => {
9696
describe("validateSingleChar(char)", () => {
9797
testInvalidCharInput(validateSingleChar);
9898

99-
it(returns({ what: "String", value: "<single char>" }).on(`passed single chars`).samples(SINGLE_CHARS), () => {
99+
it(returns().on(`passed single chars`).samples(SINGLE_CHARS), () => {
100100
for (const singleChar of SINGLE_CHARS) {
101-
const validatedChar = validateSingleChar(singleChar);
102-
103-
expect(validatedChar).toStrictEqual(singleChar);
104-
expect(validatedChar).toBeTypeOf("string");
101+
expect(() => validateSingleChar(singleChar)).not.toThrowError();
105102
}
106103
});
107104
});
@@ -113,12 +110,9 @@ describe("validateCharType(type)", () => {
113110
expect(() => validateCharType(sample)).toThrowError(ZodError);
114111
});
115112

116-
it(returns({ what: "String", value: "<valid char type>" }).on(`valid char types`).samples(CHAR_TYPES), () => {
113+
it(returns().on(`valid char types`).samples(CHAR_TYPES), () => {
117114
for (const type of CHAR_TYPES) {
118-
const validatedCharType = validateCharType(type);
119-
120-
expect(validatedCharType).toBeTypeOf("string");
121-
expect(validatedCharType).toStrictEqual(type);
115+
expect(() => validateCharType(type)).not.toThrowError();
122116
}
123117
});
124118
});

packages/string/source/char/char.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { charIn, createRegExp, type RegExpOptions, setRegExpFlags } from "@terminal-nerds/snippets-regexp/creator";
2+
import { STRING_SCHEMA } from "@terminal-nerds/snippets-type";
23
import type { Join, PascalCase } from "type-fest";
34
import { z } from "zod";
45

5-
import { validateString } from "../main.js";
6+
import { validateString } from "../schema/schema.js";
67

78
export const CHAR_TYPES = ["latin", "number", "special"] as const;
89
export type CharType = (typeof CHAR_TYPES)[number];
@@ -47,7 +48,7 @@ export const NON_LATIN_CHARS = [...NUMBER_CHARS, ...SPECIAL_CHARS] as const;
4748
export const NON_NUMBER_CHARS = [...LATIN_CHARS, ...SPECIAL_CHARS] as const;
4849
export const NON_SPECIAL_CHARS = [...LATIN_CHARS, ...NUMBER_CHARS] as const;
4950

50-
export const CHAR_SCHEMA = z.string().length(1, "This is supposed to be a single char");
51+
export const CHAR_SCHEMA = STRING_SCHEMA.length(1, "This is supposed to be a single char");
5152
export const CHAR_TYPE_SCHEMA = z.enum(CHAR_TYPES);
5253

5354
export const LATIN_CHAR_SCHEMA = z.enum(LOWER_CASED_LATIN_CHARS);
@@ -62,16 +63,16 @@ export const CHARS_SCHEMAS = {
6263
} as const;
6364
/* c8 ignore stop */
6465

66+
export function validateSingleChar(char: string): asserts char is SingleChar {
67+
CHAR_SCHEMA.parse(char);
68+
}
69+
6570
export function isSingleChar(input: string): input is SingleChar {
6671
validateString(input);
6772

6873
return CHAR_SCHEMA.safeParse(input).success;
6974
}
7075

71-
export function validateSingleChar(char: string): string {
72-
return CHAR_SCHEMA.parse(char);
73-
}
74-
7576
export function getJoinedChars<T extends readonly string[]>(chars: T) {
7677
return chars.join("") as Join<T, "">;
7778
}
@@ -80,8 +81,8 @@ export interface CharOptions<T extends CharType> extends RegExpOptions {
8081
type: T;
8182
}
8283

83-
export function validateCharType(type: string): CharType {
84-
return CHAR_TYPE_SCHEMA.parse(type);
84+
export function validateCharType(type: string): asserts type is CharType {
85+
CHAR_TYPE_SCHEMA.parse(type);
8586
}
8687

8788
export function isValidCharType(type: string): type is CharType {

packages/string/source/schema/schema.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import { STRING_SCHEMA, validatePrimitive } from "@terminal-nerds/snippets-type/primitive";
1+
import { isPrimitive, validatePrimitive } from "@terminal-nerds/snippets-type/primitive";
22
import { z } from "zod";
33

44
export function validateString(value: unknown): asserts value is string {
55
return validatePrimitive(value, "string");
66
}
77

88
export function isString(value: unknown): value is string {
9-
return STRING_SCHEMA.safeParse(value).success;
9+
return isPrimitive(value, "string");
1010
}
1111

1212
export type EmptyString = "";

packages/string/source/word/word.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export function reverseString<T extends string>(input: T): ReversedString<T> {
1111
return [...input].reverse().join("") as ReversedString<T>;
1212
}
1313

14-
/** Palindrome - {@link https://en.wikipedia.org/wiki/Palindrome} */
14+
/** @see {@link https://en.wikipedia.org/wiki/Palindrome} Palindrome */
1515
export function isPalindrome(input: string): boolean {
1616
return reverseString(input) === input;
1717
}

0 commit comments

Comments
 (0)