From 28d3599e11b82185fb127ad97b19e2ec1136010f Mon Sep 17 00:00:00 2001 From: BluJ Date: Mon, 1 May 2023 16:01:21 -0600 Subject: [PATCH] fix: Fix the wrapper data types --- lib/test/configBuilder.test.ts | 8 +++----- lib/test/wrapperData.test.ts | 26 +++++++++++++++++++++----- lib/types.ts | 8 +++++--- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/lib/test/configBuilder.test.ts b/lib/test/configBuilder.test.ts index 6626229..ccf72f1 100644 --- a/lib/test/configBuilder.test.ts +++ b/lib/test/configBuilder.test.ts @@ -619,7 +619,7 @@ describe("Builder List", () => { ) const validator = value.validator validator.unsafeCast(["test", "text"]) - expect(() => validator.unsafeCast([3,4])).toThrowError() + expect(() => validator.unsafeCast([3, 4])).toThrowError() expect(() => validator.unsafeCast(null)).toThrowError() testOutput()(null) expect(await value.build({} as any)).toMatchObject({ @@ -636,9 +636,8 @@ describe("Builder List", () => { })), ) const validator = value.validator - expect(() => - validator.unsafeCast(["test", "text"])).toThrowError() - validator.unsafeCast([4,2]) + expect(() => validator.unsafeCast(["test", "text"])).toThrowError() + validator.unsafeCast([4, 2]) expect(() => validator.unsafeCast(null)).toThrowError() validator.unsafeCast([]) testOutput()(null) @@ -648,7 +647,6 @@ describe("Builder List", () => { }) }) }) -}) describe("Nested nullable values", () => { test("Testing text", async () => { diff --git a/lib/test/wrapperData.test.ts b/lib/test/wrapperData.test.ts index 71ab605..5a35ece 100644 --- a/lib/test/wrapperData.test.ts +++ b/lib/test/wrapperData.test.ts @@ -3,7 +3,7 @@ import { utils } from "../util" type WrapperType = { config: { - someValue: string + someValue: "a" | "b" } } const todo = (): A => { @@ -12,10 +12,16 @@ const todo = (): A => { const noop = () => {} describe("wrapperData", () => { test.skip("types", async () => { + utils(todo()).setOwnWrapperData("/config", { + someValue: "a", + }) utils(todo()).setOwnWrapperData( "/config/someValue", - "someValue", + "b", ) + utils(todo()).setOwnWrapperData("", { + config: { someValue: "b" }, + }) utils(todo()).setOwnWrapperData( "/config/someValue", @@ -30,7 +36,7 @@ describe("wrapperData", () => { todo().setWrapperData({ path: "/config/someValue", - value: "someValueIn", + value: "b", }) todo().setWrapperData({ //@ts-expect-error Path is wrong @@ -41,7 +47,7 @@ describe("wrapperData", () => { todo().setWrapperData({ //@ts-expect-error Path is wrong path: "/config/some2Value", - value: "someValueIn", + value: "a", }) ;(await utils(todo()) .getOwnWrapperData("/config/someValue") @@ -53,7 +59,17 @@ describe("wrapperData", () => { // @ts-expect-error Path is wrong .getOwnWrapperData("/config/somdsfeValue") .const() - /// + /// ----------------- ERRORS ----------------- + + utils(todo()).setOwnWrapperData("", { + // @ts-expect-error Type is wrong for the setting value + config: { someValue: "notInAOrB" }, + }) + utils(todo()).setOwnWrapperData( + "/config/someValue", + // @ts-expect-error Type is wrong for the setting value + "notInAOrB", + ) ;(await utils(todo()) .getOwnWrapperData("/config/someValue") // @ts-expect-error Const should normally not be callable diff --git a/lib/types.ts b/lib/types.ts index e8960e7..f05dc3b 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -418,13 +418,15 @@ export type Effects = { export type ExtractWrapperData = Path extends `/${infer A }/${infer Rest }` ? (A extends keyof WrapperData ? ExtractWrapperData : never) : Path extends `/${infer A }` ? (A extends keyof WrapperData ? WrapperData[A] : never) : + Path extends '' ? WrapperData : never // prettier-ignore type _EnsureWrapperDataPath = -Path extends `/${infer A }/${infer Rest }` ? (A extends keyof WrapperData ? ExtractWrapperData : never) : -Path extends `/${infer A }` ? (A extends keyof WrapperData ? Origin : never) : -never + Path extends`/${infer A }/${infer Rest}` ? (WrapperData extends {[K in A & string]: infer NextWrapperData} ? _EnsureWrapperDataPath : never) : + Path extends `/${infer A }` ? (WrapperData extends {[K in A]: any} ? Origin : never) : + Path extends '' ? Origin : + never // prettier-ignore export type EnsureWrapperDataPath = _EnsureWrapperDataPath