Skip to content

Commit 8eb9719

Browse files
committed
refactor(enableoptimizedarray): remove enableOptimizedArray option
1 parent e6d8eac commit 8eb9719

File tree

8 files changed

+21
-24
lines changed

8 files changed

+21
-24
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@
118118
"json2csv": "^5.0.7",
119119
"lodash": "^4.17.21",
120120
"lodash.clonedeep": "^4.5.0",
121+
"mitata": "^1.0.34",
121122
"prettier": "^3.6.2",
122123
"quickchart-js": "^3.1.3",
123124
"redux": "^5.0.1",

src/draft.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ const proxyHandler: ProxyHandler<ProxyDraft> = {
6969
const skipFinalization = target.options.skipFinalization;
7070

7171
if (
72-
skipFinalization &&
7372
source[key] &&
7473
target.finalities.draftsCache.has(source[key])
7574
) {
@@ -101,7 +100,6 @@ const proxyHandler: ProxyHandler<ProxyDraft> = {
101100
const value = desc?.value;
102101
if (
103102
target.type === DraftType.Array &&
104-
skipFinalization &&
105103
proxyArrayMethods.includes(key as string)
106104
) {
107105
return function (this: any, ...args: any[]) {
@@ -141,11 +139,11 @@ const proxyHandler: ProxyHandler<ProxyDraft> = {
141139
// Ensure that the assigned values are not drafted
142140
if (
143141
!target.finalities.arrayHandling &&
144-
(value === peek(target.original, key) || skipFinalization?.has(value))
142+
(value === peek(target.original, key) || skipFinalization.has(value))
145143
) {
146-
const shouldSkip = skipFinalization?.has(value);
144+
const shouldSkip = skipFinalization.has(value);
147145
if (shouldSkip) {
148-
skipFinalization!.delete(value);
146+
skipFinalization.delete(value);
149147
}
150148
ensureShallowCopy(target);
151149
target.copy![key] = createDraft({
@@ -167,7 +165,6 @@ const proxyHandler: ProxyHandler<ProxyDraft> = {
167165
}
168166
if (
169167
target.finalities.arrayHandling &&
170-
skipFinalization &&
171168
!isDraft(value) &&
172169
isDraftable(value)
173170
) {

src/interface.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ export type DraftOptions = Options<any, any> & {
139139
/**
140140
* a collection for array item skip deep check
141141
*/
142-
skipFinalization?: WeakSet<any>;
142+
skipFinalization: WeakSet<any>;
143143
};
144144

145145
export interface ExternalOptions<O extends PatchesOptions, F extends boolean> {
@@ -160,10 +160,6 @@ export interface ExternalOptions<O extends PatchesOptions, F extends boolean> {
160160
* And it can also return a shallow copy function(AutoFreeze and Patches should both be disabled).
161161
*/
162162
mark?: Mark<O, F>[] | Mark<O, F>;
163-
/**
164-
* Enable optimized array for improving performance.
165-
*/
166-
enableOptimizedArray?: boolean;
167163
}
168164

169165
// Exclude `symbol`

src/makeCreator.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,12 @@ export const makeCreator: MakeCreator = (arg) => {
143143
const enablePatches = options.enablePatches ?? false;
144144
const strict = options.strict ?? false;
145145
const enableAutoFreeze = options.enableAutoFreeze ?? false;
146-
const enableOptimizedArray = options.enableOptimizedArray ?? false;
147146
const _options: DraftOptions = {
148147
enableAutoFreeze,
149148
mark,
150149
strict,
151150
enablePatches,
152-
skipFinalization: enableOptimizedArray ? new WeakSet() : undefined,
151+
skipFinalization: new WeakSet(),
153152
};
154153
if (
155154
!isDraftable(state, _options) &&

src/utils/copy.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,9 @@ export function ensureShallowCopy(target: ProxyDraft) {
9393
target.copy = shallowCopy(target.original, target.options)!;
9494
}
9595

96-
function deepClone<T>(target: T): T;
97-
function deepClone(target: any) {
98-
if (!isDraftable(target)) return getValue(target);
99-
if (Array.isArray(target)) return target.map(deepClone);
96+
function deepClone<T>(target: T): T {
97+
if (!isDraftable(target)) return getValue(target as object) as T;
98+
if (Array.isArray(target)) return target.map(deepClone) as T;
10099
if (target instanceof Map) {
101100
const iterable = Array.from(target.entries()).map(([k, v]) => [
102101
k,
@@ -106,15 +105,15 @@ function deepClone(target: any) {
106105
const SubClass = Object.getPrototypeOf(target).constructor;
107106
return new SubClass(iterable);
108107
}
109-
return new Map(iterable);
108+
return new Map(iterable) as T;
110109
}
111110
if (target instanceof Set) {
112111
const iterable = Array.from(target).map(deepClone);
113112
if (!isBaseSetInstance(target)) {
114113
const SubClass = Object.getPrototypeOf(target).constructor;
115114
return new SubClass(iterable);
116115
}
117-
return new Set(iterable);
116+
return new Set(iterable) as T;
118117
}
119118
const copy = Object.create(Object.getPrototypeOf(target));
120119
for (const key in target) copy[key] = deepClone(target[key]);

src/utils/finalize.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export function handleValue(
2222
!isDraftable(target, options) ||
2323
handledSet.has(target) ||
2424
Object.isFrozen(target) ||
25-
options.skipFinalization?.has(target)
25+
options.skipFinalization.has(target)
2626
// It should skip the finalization process
2727
// This can avoid unnecessary deep traversal, as these objects are non-draft and do not contain draft in their deep object.
2828
)

test/performance/benchmark-reducer1.mjs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { produce as produce10, setAutoFreeze as setAutoFreeze10 } from 'immer';
2-
import { create as produceMutative } from '../../dist/mutative.esm.mjs';
2+
import { create as produceMutative } from '../..';
33
import { bench, run, summary } from 'mitata';
44

55
// repo: https://github.com/markerikson/immer-perf-tests
@@ -42,10 +42,10 @@ const concat = (index) => ({
4242
});
4343

4444
const actions = {
45-
// add,
45+
add,
4646
remove,
47-
// update,
48-
// concat,
47+
update,
48+
concat,
4949
};
5050

5151
const immerProducers = {

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6234,6 +6234,11 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
62346234
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
62356235
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
62366236

6237+
mitata@^1.0.34:
6238+
version "1.0.34"
6239+
resolved "https://registry.yarnpkg.com/mitata/-/mitata-1.0.34.tgz#131f500d58c0bdc958095ab64f637d6fe1cf101a"
6240+
integrity sha512-Mc3zrtNBKIMeHSCQ0XqRLo1vbdIx1wvFV9c8NJAiyho6AjNfMY8bVhbS12bwciUdd1t4rj8099CH3N3NFahaUA==
6241+
62376242
62386243
version "2.1.2"
62396244
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"

0 commit comments

Comments
 (0)