- (⬜FEAT) allow switching implementations, via hooks and optionally mutable version (an example of this could be to mutate CRDTs via structura)
- (⬜FEAT) hooks/callbacks for proxy traps or operations
- (⬜FEAT) add mutable version without copy
- (🟪DOCS) version in docs
- (🟪DOCS) write a reference documentation
- (⬛CODE) try a better solution instead than no-op patch
- (⬛CODE) enum also for op of json patches
- (🟦TYPE) better types for json patches
- (⬜FEAT) maybe use proxy revocable? maybe not necessary because they are already garbage collected
- (⬛CODE) add more comments in code
- (⬛CODE) give better names to variables and types
- (🟫BENC) add benchmarks for patches
- (🟫BENC) add benchmarks against newer versions of Immer
- [90%] (🟩TEST) increase test coverage
- (⬛CODE) correct the nomenclature and behaviour of the helpers
- original should always return the original object
- target should be renamed to make more understandable what it does
- clone should always return the shallow copy of the object or null
- (🟧BUGS) date methods don't work
- (🟧BUGS) methods don't work
- (🟩TEST) type testing
- (⬜FEAT) json patches don't support "" as key if the path is a string ( to solve this, use a placeholder like empty)
- (⬜FEAT) "NOTHING" as return, so you can return undefined
- (⬜FEAT) support async producers,so when you get the result you should check if it is a promise
- (⬛CODE) split the logic in multiple reusable functions
- (⬛CODE) organize the code better in multiple files
- (🟨PERF) turn the proxy trap into a class
- (🟪DOCS) documentate new settings and remove docs for old helpers, write breaking changes
- (🟨PERF) store type in the currData
- (⬜FEAT) full compatibility with this rfc of redux toolkit
- (🟧BUGS) test fails with both standard patches and auto freeze enabled
- (🟧BUGS) frozen sets caused infinite loops
- (🟩TEST) each test should possibly also run on strict copy and/or auto freeze
- (🟧BUGS) patches don't work with circular references
- (🟩TEST) generate and try patches in every test
- (🟨PERF) dummy objects in freeze should be reused as shallow targets
- (🟨PERF) use object like { [Symbol()]: target } as proxy target
- (🟧BUGS) reverse patches may create inconsistencies in sets
- (🟪DOCS) documentate helpers like original and target
- (⬜FEAT) possibility to convert patches in standard RFC JSON format
- (⬜FEAT) added support for the "in" operator and ownKeys trap
- (🟦TYPE) Passing a frozen object should never require explicit casting
- (🟦TYPE) produceWithPatches didn't allow a return type different from the draft
- (🟧BUGS) patches could delete an element wrongly with maps
- (🟧BUGS) assign the descriptor value during strict copy, because the descriptor could be a getter or setter
- (🟦TYPE) patches should not be callable for primitive types
- (🟩TEST) add test for symbols in strict mode
- (🟧BUGS) symbols were not copied on strict copy
- (🟫BENC) add benchmarks for different setups
- (⬜FEAT) added patches
- (🟧BUGS) if I have multiple link to a child for the same parent, the append action is only done once
[ ] (🟨PERF) maybe use only two proxies instead of creating one each time (not doable because you would lose the target ref)[ ] (🟨PERF) freeze the objects while you draft (not doable because if you have any other modifications it will fail them)[ ] (🟨PERF) turn walk parents into a class (actually I tried and it worsen performance)[ ] (⬜FEAT) maybe implement those types? TypedArray, DataView, File, Blob, FileList, DomException[ ] (⬜FEAT) maybe implement those proxy traps? defineProperty, setPrototypeOF, preventExtensions, apply[ ] (🟨PERF) appended: WeakSet could be used to see if an element was external to the tree, so we could avoid cloning it[ ] (🟨PERF) getOwnPropertySymbols adds some overhead on copy: we could disable it with a flag if necessary. Is it worth?[ ] (🟨PERF) typeof v is taken two times, the second time for checking if it's a function. Is it worth solving?