diff --git a/src/schema.test.ts b/src/schema.test.ts new file mode 100644 index 00000000..c6b577de --- /dev/null +++ b/src/schema.test.ts @@ -0,0 +1,22 @@ +import { assertEquals } from '@std/assert'; + +import { percentageSchema } from '@/schema.ts'; + +Deno.test('Value is any percentage from 1 to 100', () => { + assertEquals(percentageSchema.safeParse('latvia' as unknown).success, false); + assertEquals(percentageSchema.safeParse(1.5).success, false); + assertEquals(percentageSchema.safeParse(Infinity).success, false); + assertEquals(percentageSchema.safeParse('Infinity').success, false); + assertEquals(percentageSchema.safeParse('0').success, false); + assertEquals(percentageSchema.safeParse(0).success, false); + assertEquals(percentageSchema.safeParse(-1).success, false); + assertEquals(percentageSchema.safeParse('-10').success, false); + assertEquals(percentageSchema.safeParse([]).success, false); + assertEquals(percentageSchema.safeParse(undefined).success, false); + + for (let i = 1; i < 100; i++) { + assertEquals(percentageSchema.safeParse(String(i)).success, true); + } + + assertEquals(percentageSchema.safeParse('1e1').success, true); +}); diff --git a/src/schema.ts b/src/schema.ts index d152a0d4..fc7efd01 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -38,4 +38,14 @@ const booleanParamSchema = z.enum(['true', 'false']).transform((value) => value /** Schema for `File` objects. */ const fileSchema = z.custom((value) => value instanceof File); -export { booleanParamSchema, decode64Schema, fileSchema, filteredArray, hashtagSchema, safeUrlSchema }; +const percentageSchema = z.coerce.number().int().gte(1).lte(100); + +export { + booleanParamSchema, + decode64Schema, + fileSchema, + filteredArray, + hashtagSchema, + percentageSchema, + safeUrlSchema, +}; diff --git a/src/utils.test.ts b/src/utils.test.ts deleted file mode 100644 index d89472c6..00000000 --- a/src/utils.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { assertEquals } from '@std/assert'; - -import { isNumberFrom1To100 } from '@/utils.ts'; - -Deno.test('Value is any number from 1 to 100', () => { - assertEquals(isNumberFrom1To100('latvia'), false); - assertEquals(isNumberFrom1To100(1.5), false); - assertEquals(isNumberFrom1To100(Infinity), false); - assertEquals(isNumberFrom1To100('Infinity'), false); - assertEquals(isNumberFrom1To100('0'), false); - assertEquals(isNumberFrom1To100(0), false); - assertEquals(isNumberFrom1To100(-1), false); - assertEquals(isNumberFrom1To100('-10'), false); - assertEquals(isNumberFrom1To100([]), false); - assertEquals(isNumberFrom1To100(undefined), false); - - for (let i = 1; i < 100; i++) { - assertEquals(isNumberFrom1To100(String(i)), true); - } - - assertEquals(isNumberFrom1To100('1e1'), true); -}); diff --git a/src/utils.ts b/src/utils.ts index a1c3b1d1..e9213ed1 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -93,17 +93,12 @@ function isURL(value: unknown): boolean { return z.string().url().safeParse(value).success; } -function isNumberFrom1To100(value: unknown): boolean { - return z.coerce.number().int().gte(1).lte(100).safeParse(value).success; -} - export { bech32ToPubkey, dedupeEvents, eventAge, findTag, isNostrId, - isNumberFrom1To100, isURL, type Nip05, nostrDate, diff --git a/src/utils/zap-split.ts b/src/utils/zap-split.ts index 54fe04a5..830c1e7c 100644 --- a/src/utils/zap-split.ts +++ b/src/utils/zap-split.ts @@ -1,9 +1,10 @@ -import { Conf } from '@/config.ts'; -import { NSchema as n, NStore } from '@nostrify/nostrify'; -import { isNumberFrom1To100, nostrNow } from '@/utils.ts'; -import { Storages } from '@/storages.ts'; import { AdminSigner } from '@/signers/AdminSigner.ts'; +import { Conf } from '@/config.ts'; import { handleEvent } from '@/pipeline.ts'; +import { NSchema as n, NStore } from '@nostrify/nostrify'; +import { nostrNow } from '@/utils.ts'; +import { percentageSchema } from '@/schema.ts'; +import { Storages } from '@/storages.ts'; type Pubkey = string; type ExtraMessage = string; @@ -29,7 +30,7 @@ export async function getZapSplits(store: NStore, pubkey: string): Promise