diff --git a/__tests__/produce.ts b/__tests__/produce.ts index e034a8a9..1c8a14a0 100644 --- a/__tests__/produce.ts +++ b/__tests__/produce.ts @@ -769,3 +769,17 @@ it("infers async curried", async () => { assert(n, _ as ROState) // yay! } } + +it("allows for mixed property value types", () => { + type TestReadonlyObject = { + readonly testObjectOrNull: {readonly testProperty: number} | null + } + + const input: TestReadonlyObject = {testObjectOrNull: null} + + produce(input, draft => { + if (draft.testObjectOrNull) { + draft.testObjectOrNull.testProperty = 5 + } + }) +}) diff --git a/__tests__/types/type-externals.ts b/__tests__/types/type-externals.ts deleted file mode 100644 index 0cf9a4c8..00000000 --- a/__tests__/types/type-externals.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {isType, JSONTypes} from "type-plus" -import {Draft} from "../../src/types/types-external" - -describe("Draft", () => { - test("can use JSONTypes as T", () => { - type A = Draft - isType.equal() - }) -}) diff --git a/package.json b/package.json index 84e30237..4775980f 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,6 @@ "spec.ts": "^1.1.0", "ts-jest": "^25.2.0", "tsdx": "^0.12.3", - "type-plus": "^4.15.2", "typescript": "^4.2.3" } } diff --git a/src/types/types-external.ts b/src/types/types-external.ts index 2bf551ec..d1ef6482 100644 --- a/src/types/types-external.ts +++ b/src/types/types-external.ts @@ -30,9 +30,7 @@ export type IfAvailable = */ type WeakReferences = IfAvailable> | IfAvailable> -export type WritableDraft = { - -readonly [K in keyof T]: T[K] extends object ? Draft : T[K] -} +export type WritableDraft = {-readonly [K in keyof T]: Draft} /** Convert a readonly type into a mutable type, if possible */ export type Draft = T extends PrimitiveType diff --git a/yarn.lock b/yarn.lock index 5b75262e..ef9d82db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1791,11 +1791,6 @@ acorn@^7.1.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== -acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -5859,11 +5854,6 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-callable@^1.1.4, is-callable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" @@ -11265,15 +11255,6 @@ terser@^4.1.2, terser@^4.6.2: source-map "~0.6.1" source-map-support "~0.5.12" -tersify@^3.10.2: - version "3.10.5" - resolved "https://registry.yarnpkg.com/tersify/-/tersify-3.10.5.tgz#eb2b230e7725481129b7fa349f2ce2683bd8a9ec" - integrity sha512-dLgsTbGVH/6Z+KU4d+NqMmsMFRwRmTFNxsl5vKGkUmaSQ0TTAwnv+Hck5S8Pdn5bcZSyjR3aTvvetJ7ZUs+ZYg== - dependencies: - acorn "^8.8.0" - is-buffer "^2.0.5" - unpartial "^1.0.0" - test-exclude@^5.2.3: version "5.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" @@ -11626,14 +11607,6 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-plus@^4.15.2: - version "4.15.2" - resolved "https://registry.yarnpkg.com/type-plus/-/type-plus-4.15.2.tgz#2d97273bde0c921845ae70a0d1cef075a7c0cfc1" - integrity sha512-5hEzFXMHOK/p5hVhNmgy7CIxUjTIK9a/NOw0pDbc4tb7LXm9JLwLEH0QdGWU5fGPp5l05rtPZfjdSOPqfAyX9w== - dependencies: - tersify "^3.10.2" - unpartial "^1.0.3" - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -11752,11 +11725,6 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpartial@^1.0.0, unpartial@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unpartial/-/unpartial-1.0.4.tgz#56490ed475105110cee61890a80c5da394741833" - integrity sha512-xY8319WOQcRDRVFWvTty2YJXKvM8XRPehqWZUd7k/BatpbuitI4Jd+2xlwjTZbZScSvT75TnUsUmy5uwFa3o0g== - unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"