diff --git a/__tests__/patch.js b/__tests__/patch.js index bd8fe42a..cdebb4b1 100644 --- a/__tests__/patch.js +++ b/__tests__/patch.js @@ -618,7 +618,7 @@ describe("sets - add, delete, add - 2", () => { ) }) -describe.only("sets - mutate - 1", () => { +describe("sets - mutate - 1", () => { const findById = (set, id) => { for (const item of set) { if (item.id === id) return item diff --git a/src/es5.ts b/src/es5.ts index d952ecb3..a37520d1 100644 --- a/src/es5.ts +++ b/src/es5.ts @@ -11,7 +11,6 @@ import { hasSymbol, shallowCopy, DRAFT_STATE, - iterateMapValues, makeIterable, latest } from "./common" diff --git a/src/proxy.ts b/src/proxy.ts index 7020e8cd..74973c12 100644 --- a/src/proxy.ts +++ b/src/proxy.ts @@ -15,12 +15,11 @@ import { assignMap, assignSet, original, - iterateMapValues, latest } from "./common" import {ImmerScope} from "./scope" -import { proxyMap } from "./map" -import { proxySet } from "./set" +import {proxyMap} from "./map" +import {proxySet} from "./set" // Do nothing before being finalized. export function willFinalize() {} @@ -68,13 +67,13 @@ export function createProxy( // TODO: dedupe this, it is the same for ES5 if (isMap(base)) { const draft = proxyMap(base, parent) as any // TODO: typefix - scope.drafts.push(draft); - return draft; + scope.drafts.push(draft) + return draft } if (isSet(base)) { const draft = proxySet(base, parent) as any // TODO: typefix - scope.drafts.push(draft); - return draft; + scope.drafts.push(draft) + return draft } const state: ES6State = { @@ -249,78 +248,6 @@ const reflectTraps = makeReflectTraps([ * Map drafts */ -const mapTraps = makeTrapsForGetters>({ - [DRAFT_STATE]: state => state, - size: state => latest(state).size, - has: state => key => latest(state).has(key), - set: state => (key, value) => { - const values = latest(state) - if (!values.has(key) || values.get(key) !== value) { - markChanged(state) - // @ts-ignore - state.assigned.set(key, true) - state.copy!.set(key, value) - } - return state.draft - }, - delete: state => key => { - if (latest(state).has(key)) { - markChanged(state) - // @ts-ignore - state.assigned.set(key, false) - return state.copy!.delete(key) - } - return false - }, - clear: state => () => { - markChanged(state) - state.assigned = new Map() - each(latest(state).keys(), (_, key) => { - // @ts-ignore - state.assigned.set(key, false) - }) - return state.copy!.clear() - }, - // @ts-ignore - forEach: (state, _, receiver) => (cb, thisArg) => - latest(state).forEach((_, key, map) => { - const value = receiver.get(key) - cb.call(thisArg, value, key, map) - }), - get: state => key => { - const drafts = state.modified ? state.copy : state.drafts - - // @ts-ignore TODO: ...or fix by using different ES6Draft types (but better just unify to maps) - if (drafts!.has(key)) { - // @ts-ignore - const value = drafts.get(key) - - if (isDraft(value) || !isDraftable(value)) return value - - const draft = createProxy(value, state) - // @ts-ignore - drafts.set(key, draft) - return draft - } - - const value = latest(state).get(key) - if (state.finalized || !isDraftable(value)) { - return value - } - - const draft = createProxy(value, state) - //@ts-ignore - drafts.set(key, draft) - return draft - }, - keys: state => () => latest(state).keys(), - //@ts-ignore - values: iterateMapValues, - //@ts-ignore - entries: iterateMapValues, - [hasSymbol ? Symbol.iterator : "@@iterator"]: iterateMapValues -}) - // Access a property without creating an Immer draft. function peek(draft, prop) { const state = draft[DRAFT_STATE] @@ -338,7 +265,7 @@ export function markChanged(state) { const {base, drafts, parent} = state if (!isMap(base) && !isSet(base)) { // TODO: drop creating copies here? - const copy = state.copy = shallowCopy(base) + const copy = (state.copy = shallowCopy(base)) assign(copy, drafts) state.drafts = null } @@ -369,22 +296,3 @@ function makeReflectTraps( {} as any ) } - -function makeTrapsForGetters( - getters: { - [K in keyof T]: ( - state: ES6State - ) => /* Skip first arg of: ProxyHandler[K] */ any - } -): ProxyHandler { - return assign({}, reflectTraps, { - get(state, prop, receiver) { - return getters.hasOwnProperty(prop) - ? getters[prop](state, prop, receiver) - : Reflect.get(state, prop, receiver) - }, - setPrototypeOf(state) { - throw new Error("Object.setPrototypeOf() cannot be used on an Immer draft") // prettier-ignore - } - }) -} diff --git a/tsconfig.json b/tsconfig.json index c0cd5828..5c65c158 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,6 +7,7 @@ "strict": true, "declaration": true, "importHelpers": false, - "noImplicitAny": false // TODO: true, + "noImplicitAny": false, // TODO: true, + "esModuleInterop": true } }