From 061db1daaf4123f31ec183b7d1cd164bf1114f9d Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Wed, 10 Mar 2021 23:32:50 +0800 Subject: [PATCH] Make swr zero dependency (#1024) * Make swr zero dependencies * mark license --- package.json | 3 --- src/config.ts | 4 ++-- src/libs/deep-equal.ts | 36 ++++++++++++++++++++++++++++++++++++ yarn.lock | 5 ----- 4 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 src/libs/deep-equal.ts diff --git a/package.json b/package.json index dec42950a..357530e24 100644 --- a/package.json +++ b/package.json @@ -67,9 +67,6 @@ "ts-jest": "25.5.1", "typescript": "3.6.4" }, - "dependencies": { - "dequal": "2.0.2" - }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0" } diff --git a/src/config.ts b/src/config.ts index fbb87002f..e61dfe635 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,4 +1,4 @@ -import { dequal } from 'dequal/lite' +import deepEqual from './libs/deep-equal' import { Configuration, RevalidatorOptions, Revalidator } from './types' import Cache from './cache' import webPreset from './libs/web-preset' @@ -64,7 +64,7 @@ const defaultConfig = { refreshWhenOffline: false, shouldRetryOnError: true, suspense: false, - compare: dequal, + compare: deepEqual, isPaused: () => false, ...webPreset diff --git a/src/libs/deep-equal.ts b/src/libs/deep-equal.ts new file mode 100644 index 000000000..27223339b --- /dev/null +++ b/src/libs/deep-equal.ts @@ -0,0 +1,36 @@ +/** + * deep equal lite version from dequal + * https://github.com/lukeed/dequal/blob/master/license + */ + +const has = Object.prototype.hasOwnProperty + +export default function deepEqual(foo: any, bar: any) { + let ctor, len + if (foo === bar) return true + + if (foo && bar && (ctor = foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime() + if (ctor === RegExp) return foo.toString() === bar.toString() + + if (ctor === Array) { + if ((len = foo.length) === bar.length) { + while (len && deepEqual(foo[len], bar[len])) { + len-- + } + } + return len === -1 + } + + if (!ctor || typeof foo === 'object') { + len = 0 + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false + if (!(ctor in bar) || !deepEqual(foo[ctor], bar[ctor])) return false + } + return Object.keys(bar).length === len + } + } + + return foo !== foo && bar !== bar +} diff --git a/yarn.lock b/yarn.lock index 26ccdbe6a..954eff377 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1737,11 +1737,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -dequal@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" - integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== - detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"