@zk-tech/bedrock 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist/array/index.cjs +22 -0
- package/dist/array/index.cjs.map +1 -0
- package/dist/array/index.d.cts +13 -0
- package/dist/array/index.d.ts +13 -0
- package/dist/array/index.js +19 -0
- package/dist/array/index.js.map +1 -0
- package/dist/assert/index.cjs +29 -0
- package/dist/assert/index.cjs.map +1 -0
- package/dist/assert/index.d.cts +25 -0
- package/dist/assert/index.d.ts +25 -0
- package/dist/assert/index.js +24 -0
- package/dist/assert/index.js.map +1 -0
- package/dist/async/index.cjs +746 -0
- package/dist/async/index.cjs.map +1 -0
- package/dist/async/index.d.cts +47 -0
- package/dist/async/index.d.ts +47 -0
- package/dist/async/index.js +738 -0
- package/dist/async/index.js.map +1 -0
- package/dist/barrier-316Xonfd.d.cts +18 -0
- package/dist/barrier-316Xonfd.d.ts +18 -0
- package/dist/byte/index.cjs +59 -0
- package/dist/byte/index.cjs.map +1 -0
- package/dist/byte/index.d.cts +12 -0
- package/dist/byte/index.d.ts +12 -0
- package/dist/byte/index.js +49 -0
- package/dist/byte/index.js.map +1 -0
- package/dist/cache/index.cjs +418 -0
- package/dist/cache/index.cjs.map +1 -0
- package/dist/cache/index.d.cts +40 -0
- package/dist/cache/index.d.ts +40 -0
- package/dist/cache/index.js +415 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cancellation-BIIv2UJm.d.cts +25 -0
- package/dist/cancellation-ClqPPsV1.d.ts +25 -0
- package/dist/context/index.cjs +59 -0
- package/dist/context/index.cjs.map +1 -0
- package/dist/context/index.d.cts +33 -0
- package/dist/context/index.d.ts +33 -0
- package/dist/context/index.js +51 -0
- package/dist/context/index.js.map +1 -0
- package/dist/di/index.cjs +1965 -0
- package/dist/di/index.cjs.map +1 -0
- package/dist/di/index.d.cts +140 -0
- package/dist/di/index.d.ts +140 -0
- package/dist/di/index.js +1949 -0
- package/dist/di/index.js.map +1 -0
- package/dist/disposable-t-B15Nu57y.d.ts +93 -0
- package/dist/disposable-t-CVsiyHPL.d.cts +93 -0
- package/dist/dispose/index.cjs +356 -0
- package/dist/dispose/index.cjs.map +1 -0
- package/dist/dispose/index.d.cts +26 -0
- package/dist/dispose/index.d.ts +26 -0
- package/dist/dispose/index.js +340 -0
- package/dist/dispose/index.js.map +1 -0
- package/dist/dispose-base-CAeXDpjg.d.cts +6 -0
- package/dist/dispose-base-CAeXDpjg.d.ts +6 -0
- package/dist/emitter-CAfCtSTg.d.cts +35 -0
- package/dist/emitter-DeM5mlEm.d.ts +35 -0
- package/dist/error/index.cjs +145 -0
- package/dist/error/index.cjs.map +1 -0
- package/dist/error/index.d.cts +45 -0
- package/dist/error/index.d.ts +45 -0
- package/dist/error/index.js +126 -0
- package/dist/error/index.js.map +1 -0
- package/dist/error-base-B4zaiJ5m.d.cts +32 -0
- package/dist/error-base-B4zaiJ5m.d.ts +32 -0
- package/dist/event/index.cjs +550 -0
- package/dist/event/index.cjs.map +1 -0
- package/dist/event/index.d.cts +139 -0
- package/dist/event/index.d.ts +139 -0
- package/dist/event/index.js +538 -0
- package/dist/event/index.js.map +1 -0
- package/dist/function/index.cjs +132 -0
- package/dist/function/index.cjs.map +1 -0
- package/dist/function/index.d.cts +26 -0
- package/dist/function/index.d.ts +26 -0
- package/dist/function/index.js +129 -0
- package/dist/function/index.js.map +1 -0
- package/dist/graph-BGbNOniY.d.cts +23 -0
- package/dist/graph-BGbNOniY.d.ts +23 -0
- package/dist/hash/index.cjs +54 -0
- package/dist/hash/index.cjs.map +1 -0
- package/dist/hash/index.d.cts +5 -0
- package/dist/hash/index.d.ts +5 -0
- package/dist/hash/index.js +50 -0
- package/dist/hash/index.js.map +1 -0
- package/dist/instantiation-service.interface-CVFMBUUD.d.cts +78 -0
- package/dist/instantiation-service.interface-CVFMBUUD.d.ts +78 -0
- package/dist/json/index.cjs +28 -0
- package/dist/json/index.cjs.map +1 -0
- package/dist/json/index.d.cts +8 -0
- package/dist/json/index.d.ts +8 -0
- package/dist/json/index.js +26 -0
- package/dist/json/index.js.map +1 -0
- package/dist/launch/index.cjs +213 -0
- package/dist/launch/index.cjs.map +1 -0
- package/dist/launch/index.d.cts +46 -0
- package/dist/launch/index.d.ts +46 -0
- package/dist/launch/index.js +211 -0
- package/dist/launch/index.js.map +1 -0
- package/dist/linked-list-CUkue5DZ.d.cts +24 -0
- package/dist/linked-list-CUkue5DZ.d.ts +24 -0
- package/dist/lock/index.cjs +662 -0
- package/dist/lock/index.cjs.map +1 -0
- package/dist/lock/index.d.cts +145 -0
- package/dist/lock/index.d.ts +145 -0
- package/dist/lock/index.js +656 -0
- package/dist/lock/index.js.map +1 -0
- package/dist/lodash-es/index.cjs +14 -0
- package/dist/lodash-es/index.cjs.map +1 -0
- package/dist/lodash-es/index.d.cts +1 -0
- package/dist/lodash-es/index.d.ts +1 -0
- package/dist/lodash-es/index.js +3 -0
- package/dist/lodash-es/index.js.map +1 -0
- package/dist/math/index.cjs +161 -0
- package/dist/math/index.cjs.map +1 -0
- package/dist/math/index.d.cts +76 -0
- package/dist/math/index.d.ts +76 -0
- package/dist/math/index.js +156 -0
- package/dist/math/index.js.map +1 -0
- package/dist/network/index.cjs +91 -0
- package/dist/network/index.cjs.map +1 -0
- package/dist/network/index.d.cts +62 -0
- package/dist/network/index.d.ts +62 -0
- package/dist/network/index.js +82 -0
- package/dist/network/index.js.map +1 -0
- package/dist/objects/index.cjs +80 -0
- package/dist/objects/index.cjs.map +1 -0
- package/dist/objects/index.d.cts +11 -0
- package/dist/objects/index.d.ts +11 -0
- package/dist/objects/index.js +77 -0
- package/dist/objects/index.js.map +1 -0
- package/dist/platform/index.cjs +62 -0
- package/dist/platform/index.cjs.map +1 -0
- package/dist/platform/index.d.cts +21 -0
- package/dist/platform/index.d.ts +21 -0
- package/dist/platform/index.js +48 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/promise/index.cjs +639 -0
- package/dist/promise/index.cjs.map +1 -0
- package/dist/promise/index.d.cts +63 -0
- package/dist/promise/index.d.ts +63 -0
- package/dist/promise/index.js +633 -0
- package/dist/promise/index.js.map +1 -0
- package/dist/scheduler/index.cjs +599 -0
- package/dist/scheduler/index.cjs.map +1 -0
- package/dist/scheduler/index.d.cts +57 -0
- package/dist/scheduler/index.d.ts +57 -0
- package/dist/scheduler/index.js +594 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/sprintf/index.cjs +101 -0
- package/dist/sprintf/index.cjs.map +1 -0
- package/dist/sprintf/index.d.cts +3 -0
- package/dist/sprintf/index.d.ts +3 -0
- package/dist/sprintf/index.js +99 -0
- package/dist/sprintf/index.js.map +1 -0
- package/dist/structure/index.cjs +300 -0
- package/dist/structure/index.cjs.map +1 -0
- package/dist/structure/index.d.cts +21 -0
- package/dist/structure/index.d.ts +21 -0
- package/dist/structure/index.js +296 -0
- package/dist/structure/index.js.map +1 -0
- package/dist/type/index.cjs +4 -0
- package/dist/type/index.cjs.map +1 -0
- package/dist/type/index.d.cts +20 -0
- package/dist/type/index.d.ts +20 -0
- package/dist/type/index.js +3 -0
- package/dist/type/index.js.map +1 -0
- package/dist/undo-redo-stack/index.cjs +545 -0
- package/dist/undo-redo-stack/index.cjs.map +1 -0
- package/dist/undo-redo-stack/index.d.cts +130 -0
- package/dist/undo-redo-stack/index.d.ts +130 -0
- package/dist/undo-redo-stack/index.js +542 -0
- package/dist/undo-redo-stack/index.js.map +1 -0
- package/dist/uuid/index.cjs +67 -0
- package/dist/uuid/index.cjs.map +1 -0
- package/dist/uuid/index.d.cts +17 -0
- package/dist/uuid/index.d.ts +17 -0
- package/dist/uuid/index.js +61 -0
- package/dist/uuid/index.js.map +1 -0
- package/dist/worker/index.cjs +271 -0
- package/dist/worker/index.cjs.map +1 -0
- package/dist/worker/index.d.cts +66 -0
- package/dist/worker/index.d.ts +66 -0
- package/dist/worker/index.js +267 -0
- package/dist/worker/index.js.map +1 -0
- package/package.json +285 -0
- package/src/_internal/logger.ts +59 -0
- package/src/array/array.test.ts +35 -0
- package/src/array/array.ts +25 -0
- package/src/array/index.ts +1 -0
- package/src/assert/assert.test.ts +86 -0
- package/src/assert/assert.ts +42 -0
- package/src/assert/index.ts +2 -0
- package/src/async/barrier.test.ts +90 -0
- package/src/async/barrier.ts +58 -0
- package/src/async/cancellation.test.ts +85 -0
- package/src/async/cancellation.ts +193 -0
- package/src/async/index.ts +18 -0
- package/src/async/queue/queue.test.ts +70 -0
- package/src/async/queue/queue.ts +56 -0
- package/src/async/queue/task.test.ts +155 -0
- package/src/async/queue/task.ts +67 -0
- package/src/async/utils.test.ts +28 -0
- package/src/async/utils.ts +8 -0
- package/src/async/wait.ts +9 -0
- package/src/byte/format.test.ts +64 -0
- package/src/byte/format.ts +44 -0
- package/src/byte/index.ts +2 -0
- package/src/byte/node_modules/.vitest/results.json +1 -0
- package/src/byte/var.ts +11 -0
- package/src/cache/index.ts +2 -0
- package/src/cache/lru-with-timeout.test.ts +88 -0
- package/src/cache/lru-with-timeout.ts +85 -0
- package/src/cache/lru.test.ts +56 -0
- package/src/cache/lru.ts +59 -0
- package/src/context/context.test.ts +17 -0
- package/src/context/context.ts +60 -0
- package/src/context/index.ts +8 -0
- package/src/di/base.ts +73 -0
- package/src/di/container-service.test.ts +179 -0
- package/src/di/context.web.tsx +41 -0
- package/src/di/descriptor.ts +31 -0
- package/src/di/idle-value.test.ts +73 -0
- package/src/di/idle-value.ts +63 -0
- package/src/di/index.common.ts +32 -0
- package/src/di/index.ts +2 -0
- package/src/di/instantiation-service.interface.ts +46 -0
- package/src/di/instantiation-service.test.ts +337 -0
- package/src/di/instantiation-service.ts +468 -0
- package/src/di/lazy/foo.mock.ts +28 -0
- package/src/di/lazy/idle-load.ts +39 -0
- package/src/di/lazy/index.ts +4 -0
- package/src/di/lazy/lazy-service.test.ts +65 -0
- package/src/di/lazy/lazy-service.ts +71 -0
- package/src/di/lazy/type.ts +5 -0
- package/src/di/node_modules/.vitest/results.json +1 -0
- package/src/di/proxy-builder.test.ts +45 -0
- package/src/di/proxy-builder.ts +38 -0
- package/src/di/service-collection.test.ts +27 -0
- package/src/di/service-collection.ts +46 -0
- package/src/di/service-ownership-collection.test.ts +39 -0
- package/src/di/service-ownership-collection.ts +38 -0
- package/src/di/service-registry.test.ts +66 -0
- package/src/di/service-registry.ts +99 -0
- package/src/di/trace.ts +85 -0
- package/src/dispose/disposable-store.test.ts +57 -0
- package/src/dispose/disposable-store.ts +80 -0
- package/src/dispose/disposable-t.test.ts +123 -0
- package/src/dispose/disposable-t.ts +238 -0
- package/src/dispose/disposable-utils.test.ts +15 -0
- package/src/dispose/disposable-utils.ts +28 -0
- package/src/dispose/dispose-base.ts +9 -0
- package/src/dispose/index.ts +34 -0
- package/src/dispose/logger.test.ts +65 -0
- package/src/dispose/logger.ts +39 -0
- package/src/dispose/timer.test.ts +30 -0
- package/src/dispose/timer.ts +16 -0
- package/src/dispose/tracker.test.ts +51 -0
- package/src/dispose/tracker.ts +105 -0
- package/src/error/error-base.ts +45 -0
- package/src/error/error-code.ts +39 -0
- package/src/error/error-const.test.ts +30 -0
- package/src/error/error-const.ts +16 -0
- package/src/error/error-or.test.ts +44 -0
- package/src/error/error-or.ts +2 -0
- package/src/error/error-t.test.ts +116 -0
- package/src/error/error-t.ts +100 -0
- package/src/error/index.ts +24 -0
- package/src/error/node_modules/.vitest/results.json +1 -0
- package/src/event/disposable-linked-list.ts +29 -0
- package/src/event/emitter.test.ts +191 -0
- package/src/event/emitter.ts +162 -0
- package/src/event/error-handler.ts +22 -0
- package/src/event/index.ts +34 -0
- package/src/event/once.ts +29 -0
- package/src/event/phase-emitter.test.ts +212 -0
- package/src/event/phase-emitter.ts +209 -0
- package/src/event/shortcut-event-utils.ts +33 -0
- package/src/event/utils.ts +6 -0
- package/src/event/when.ts +40 -0
- package/src/function/debounce.test.ts +274 -0
- package/src/function/debounce.ts +168 -0
- package/src/function/index.ts +2 -0
- package/src/function/node_modules/.vitest/results.json +1 -0
- package/src/function/throttle.test.ts +179 -0
- package/src/function/throttle.ts +26 -0
- package/src/hash/hash-t.test.ts +100 -0
- package/src/hash/hash-t.ts +51 -0
- package/src/hash/index.ts +3 -0
- package/src/json/index.ts +1 -0
- package/src/json/node_modules/.vitest/results.json +1 -0
- package/src/json/parse.ts +19 -0
- package/src/launch/abstract-job.ts +45 -0
- package/src/launch/cost-recorder.ts +22 -0
- package/src/launch/index.ts +2 -0
- package/src/launch/job-scheduler.test.ts +122 -0
- package/src/launch/job-scheduler.ts +118 -0
- package/src/launch/node_modules/.vitest/deps/_metadata.json +8 -0
- package/src/launch/node_modules/.vitest/deps/package.json +3 -0
- package/src/launch/node_modules/.vitest/results.json +1 -0
- package/src/lock/README.md +11 -0
- package/src/lock/capability.test.ts +110 -0
- package/src/lock/capability.ts +89 -0
- package/src/lock/index.ts +15 -0
- package/src/lock/node_modules/.vitest/results.json +1 -0
- package/src/lock/semaphore.ts +21 -0
- package/src/lock/shared-mutex.test.ts +537 -0
- package/src/lock/shared-mutex.ts +242 -0
- package/src/lock/utils.test.ts +165 -0
- package/src/lock/utils.ts +135 -0
- package/src/lodash-es/index.ts +1 -0
- package/src/math/degree.ts +16 -0
- package/src/math/index.ts +7 -0
- package/src/math/math.test.ts +40 -0
- package/src/math/math.ts +64 -0
- package/src/math/node_modules/.vitest/results.json +1 -0
- package/src/math/vector.test.ts +73 -0
- package/src/math/vector.ts +114 -0
- package/src/network/client.interface.ts +104 -0
- package/src/network/client.web.ts +24 -0
- package/src/network/index.common.ts +10 -0
- package/src/network/index.ts +2 -0
- package/src/network/plugins/retry.ts +98 -0
- package/src/objects/deep-clone.test.ts +40 -0
- package/src/objects/deep-clone.ts +13 -0
- package/src/objects/deep-equal.test.ts +86 -0
- package/src/objects/deep-equal.ts +60 -0
- package/src/objects/index.ts +4 -0
- package/src/platform/index.ts +64 -0
- package/src/promise/index.ts +16 -0
- package/src/promise/promise.test.ts +254 -0
- package/src/promise/promise.ts +212 -0
- package/src/scheduler/callback-token.ts +31 -0
- package/src/scheduler/core/actuator-args.test.ts +47 -0
- package/src/scheduler/core/actuator.test.ts +82 -0
- package/src/scheduler/core/actuator.ts +58 -0
- package/src/scheduler/core/chunk-scheduler.test.ts +54 -0
- package/src/scheduler/core/chunk-scheduler.ts +28 -0
- package/src/scheduler/core/node_modules/.vitest/results.json +1 -0
- package/src/scheduler/core/scheduler.test.ts +328 -0
- package/src/scheduler/core/scheduler.ts +172 -0
- package/src/scheduler/core/task-queue.test.ts +78 -0
- package/src/scheduler/core/task-queue.ts +44 -0
- package/src/scheduler/core/task.test.ts +34 -0
- package/src/scheduler/core/task.ts +52 -0
- package/src/scheduler/core/utils.ts +48 -0
- package/src/scheduler/executor/abstract-executor.test.ts +44 -0
- package/src/scheduler/executor/abstract-executor.ts +38 -0
- package/src/scheduler/executor/executor.interface.ts +39 -0
- package/src/scheduler/executor/idle-callback-executor.test.ts +70 -0
- package/src/scheduler/executor/idle-callback-executor.ts +98 -0
- package/src/scheduler/executor/make-executor.ts +18 -0
- package/src/scheduler/executor/post-message-executor.test.ts +66 -0
- package/src/scheduler/executor/post-message-executor.ts +52 -0
- package/src/scheduler/index.ts +15 -0
- package/src/scheduler/lv-scheduler-callback.ts +19 -0
- package/src/scheduler/lv-scheduler-config.ts +17 -0
- package/src/scheduler/type.ts +48 -0
- package/src/sprintf/index.ts +2 -0
- package/src/sprintf/sprintf.test.ts +95 -0
- package/src/sprintf/sprintf.ts +97 -0
- package/src/structure/graph.test.ts +181 -0
- package/src/structure/graph.ts +105 -0
- package/src/structure/index.ts +8 -0
- package/src/structure/linked-list.test.ts +74 -0
- package/src/structure/linked-list.ts +145 -0
- package/src/structure/min-heap.test.ts +71 -0
- package/src/structure/min-heap.ts +91 -0
- package/src/type/REAME.md +2 -0
- package/src/type/distributive-omit.interface.ts +4 -0
- package/src/type/index.ts +3 -0
- package/src/type/object-key-paths.interface.ts +40 -0
- package/src/undo-redo-stack/README.md +61 -0
- package/src/undo-redo-stack/action-stack.test.ts +330 -0
- package/src/undo-redo-stack/action-stack.ts +150 -0
- package/src/undo-redo-stack/element.ts +4 -0
- package/src/undo-redo-stack/index.ts +7 -0
- package/src/undo-redo-stack/state-stack.test.ts +118 -0
- package/src/undo-redo-stack/state-stack.ts +133 -0
- package/src/uuid/index.ts +7 -0
- package/src/uuid/uuid.ts +86 -0
- package/src/worker/cors-worker.ts +38 -0
- package/src/worker/index.ts +4 -0
- package/src/worker/node_modules/.vitest/results.json +1 -0
- package/src/worker/promise-worker-main-thread.test.ts +91 -0
- package/src/worker/promise-worker-main-thread.ts +76 -0
- package/src/worker/promise-worker-worker-thread.ts +64 -0
- package/src/worker/promise-worker.interface.ts +15 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var axios = require('axios');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var axios__default = /*#__PURE__*/_interopDefault(axios);
|
|
8
|
+
|
|
9
|
+
// src/network/client.interface.ts
|
|
10
|
+
var HostNameTypeNameSpace = "custom-host-name-type";
|
|
11
|
+
|
|
12
|
+
// src/network/plugins/retry.ts
|
|
13
|
+
var NAME_SPACE = "network-client-retry-plugin";
|
|
14
|
+
function getCurrentState(config) {
|
|
15
|
+
const currentState = config[NAME_SPACE] || {
|
|
16
|
+
lastRequestTime: 0,
|
|
17
|
+
retryCount: 0
|
|
18
|
+
};
|
|
19
|
+
return currentState;
|
|
20
|
+
}
|
|
21
|
+
function fixConfig(networkClient, config) {
|
|
22
|
+
if (networkClient.defaults.agent === config.agent) {
|
|
23
|
+
delete config.agent;
|
|
24
|
+
}
|
|
25
|
+
if (networkClient.defaults.httpAgent === config.httpAgent) {
|
|
26
|
+
delete config.httpAgent;
|
|
27
|
+
}
|
|
28
|
+
if (networkClient.defaults.httpsAgent === config.httpsAgent) {
|
|
29
|
+
delete config.httpsAgent;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function addRetryPlugin(networkClient, options = {}) {
|
|
33
|
+
networkClient.interceptors.request.use((config) => {
|
|
34
|
+
const state = getCurrentState(config);
|
|
35
|
+
state.lastRequestTime = Date.now();
|
|
36
|
+
config[NAME_SPACE] = state;
|
|
37
|
+
return config;
|
|
38
|
+
});
|
|
39
|
+
networkClient.interceptors.response.use(void 0, (error) => {
|
|
40
|
+
const config = error?.config;
|
|
41
|
+
if (!config) {
|
|
42
|
+
return Promise.reject(error);
|
|
43
|
+
}
|
|
44
|
+
const {
|
|
45
|
+
retries = 1,
|
|
46
|
+
isRetry = () => true,
|
|
47
|
+
// isNetworkOrIdempotentRequestError
|
|
48
|
+
retryDelay = 200,
|
|
49
|
+
resetTimeout = true
|
|
50
|
+
} = { ...options, ...config?.[NAME_SPACE] };
|
|
51
|
+
const state = getCurrentState(config);
|
|
52
|
+
const needRetry = (isRetry(error) || state.canRetry) && state.retryCount < retries;
|
|
53
|
+
if (needRetry) {
|
|
54
|
+
state.retryCount += 1;
|
|
55
|
+
const delay = typeof retryDelay === "number" ? retryDelay : retryDelay(state.retryCount, error);
|
|
56
|
+
fixConfig(networkClient, config);
|
|
57
|
+
if (!resetTimeout && config.timeout && state.lastRequestTime) {
|
|
58
|
+
const lastRequestDuration = Date.now() - state.lastRequestTime;
|
|
59
|
+
config.timeout = Math.max(config.timeout - lastRequestDuration - delay, 1);
|
|
60
|
+
}
|
|
61
|
+
config.transformRequest = [(data) => data];
|
|
62
|
+
return new Promise((resolve) => setTimeout(() => resolve(networkClient(config)), delay));
|
|
63
|
+
}
|
|
64
|
+
return Promise.reject(error);
|
|
65
|
+
});
|
|
66
|
+
return networkClient;
|
|
67
|
+
}
|
|
68
|
+
function createClient(config) {
|
|
69
|
+
return axios__default.default.create(config);
|
|
70
|
+
}
|
|
71
|
+
var NetworkError = class extends axios.AxiosError {
|
|
72
|
+
constructor(opts) {
|
|
73
|
+
let message;
|
|
74
|
+
if (opts.message) {
|
|
75
|
+
message = opts.message;
|
|
76
|
+
} else if (opts.error) {
|
|
77
|
+
message = opts.error.message;
|
|
78
|
+
}
|
|
79
|
+
super(message, opts.code, opts.config, opts.request, opts.response);
|
|
80
|
+
}
|
|
81
|
+
get isNetworkError() {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
exports.HostNameTypeNameSpace = HostNameTypeNameSpace;
|
|
87
|
+
exports.NetworkError = NetworkError;
|
|
88
|
+
exports.addRetryPlugin = addRetryPlugin;
|
|
89
|
+
exports.createClient = createClient;
|
|
90
|
+
//# sourceMappingURL=index.cjs.map
|
|
91
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/network/client.interface.ts","../../src/network/plugins/retry.ts","../../src/network/client.web.ts"],"names":["axios","AxiosError"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n AxiosRequestConfig,\n AxiosResponse,\n AxiosInstance,\n AxiosError,\n AxiosRequestHeaders,\n AxiosInterceptorOptions,\n} from 'axios';\n\nexport const HostNameTypeNameSpace = 'custom-host-name-type';\n\nexport interface FetchOptions {\n url: string;\n params?: Record<string, any>;\n method?: 'GET' | 'POST';\n header?: Record<string, any>;\n data?: Record<string, any>;\n needCommonParams?: boolean;\n needTiming?: boolean;\n}\n\n// 请求配置\nexport interface NetworkRequestConfig<D = any> extends AxiosRequestConfig<D> {\n // web扩展,只对web生效\n [HostNameTypeNameSpace]?: string;\n}\n\ninterface BaseNetworkErrorOptions<T = unknown, D = any> {\n message?: string;\n error?: Error;\n code?: string;\n config?: NetworkMiddleRequestConfig;\n request?: any;\n response?: NetworkResponse<T, D>;\n}\n\ninterface NetworkErrorFromMessageOptions<T = unknown, D = any> extends BaseNetworkErrorOptions<T, D> {\n message: string;\n}\n\ninterface NetworkErrorFromErrorOptions<T = unknown, D = any> extends BaseNetworkErrorOptions<T, D> {\n error: Error;\n}\n\nexport type NetworkErrorOptions<T = unknown, D = any> =\n | NetworkErrorFromMessageOptions<T, D>\n | NetworkErrorFromErrorOptions<T, D>;\n\n// 请求结果\nexport type NetworkResponse<T = any, D = any> = Omit<AxiosResponse<T, D>, 'config'> & {\n // 覆盖config字段,增加扩展\n // 注意:不是写错,就是NetworkMiddleRequestConfig,并非NetworkRequestConfig\n config: NetworkMiddleRequestConfig<D>;\n};\n\n// 请求失败时,reject获取的对象\nexport type NetworkError<T = unknown, D = any> = AxiosError<T, D> & {\n // 平替isAxiosError标记,表示内部错误\n isNetworkError: boolean;\n};\n\n// 请求经过中间件时配置\nexport interface NetworkMiddleRequestConfig<D = any> extends NetworkRequestConfig<D> {\n headers: AxiosRequestHeaders;\n}\n\n// 为了支持中间件req、res类型扩展,单独声明InterceptorManager类型\nexport interface InterceptorManager<V> {\n use(\n onFulfilled?: ((value: V) => V | Promise<V>) | null,\n onRejected?: ((error: any) => any) | null,\n options?: AxiosInterceptorOptions,\n ): number;\n eject(id: number): void;\n clear(): void;\n}\n\n// axios实例\nexport type NetworkClientInstance = Omit<AxiosInstance, 'interceptors'> & {\n // 支持中间件req、res类型扩展,覆盖interceptors\n interceptors: {\n request: InterceptorManager<NetworkMiddleRequestConfig>;\n response: InterceptorManager<NetworkResponse>;\n };\n\n // 重新声明,为了参数覆盖\n request: <T = any, R = NetworkResponse<T>, D = any>(\n configOrUrl: NetworkRequestConfig<D> | string,\n config?: NetworkRequestConfig<D>,\n ) => Promise<R>;\n get: <T = any, R = NetworkResponse<T>, D = any>(\n url: string,\n config?: Omit<NetworkRequestConfig<D>, 'url'>,\n ) => Promise<R>;\n post: <T = any, R = NetworkResponse<T>, D = any>(\n url: string,\n data?: D,\n config?: Omit<NetworkRequestConfig<D>, 'url'>,\n ) => Promise<R>;\n\n // 重新声明可直接调用,否则会丢失该能力\n <T = any, R = NetworkResponse<T>, D = any>(config: NetworkRequestConfig<D>): Promise<R>;\n <T = any, R = NetworkResponse<T>, D = any>(url: string, config?: NetworkRequestConfig<D>): Promise<R>;\n};\n","import type {\n NetworkClientInstance,\n NetworkError,\n NetworkRequestConfig,\n} from '../client.interface';\n\nexport const NAME_SPACE = 'network-client-retry-plugin';\n\ntype RetryConfig = {\n lastRequestTime: number;\n retryCount: number;\n canRetry?: boolean;\n};\n\ntype CustomNetworkConfig = NetworkRequestConfig & {\n [NAME_SPACE]?: RetryConfig;\n};\n\ntype RetryOptions = {\n retries?: number; // default retry times\n resetTimeout?: boolean; // if reset timeout between retries, default is true\n isRetry?: (error: NetworkError) => boolean;\n retryDelay?: ((count: number) => number) | number;\n};\n\nfunction getCurrentState(config: CustomNetworkConfig): RetryConfig {\n const currentState = config[NAME_SPACE] || ({\n lastRequestTime: 0,\n retryCount: 0,\n } satisfies RetryConfig);\n return currentState;\n}\n\nfunction fixConfig(networkClient: NetworkClientInstance, config: any) {\n // @ts-expect-error type error\n if (networkClient.defaults.agent === config.agent) {\n delete config.agent;\n }\n if (networkClient.defaults.httpAgent === config.httpAgent) {\n delete config.httpAgent;\n }\n if (networkClient.defaults.httpsAgent === config.httpsAgent) {\n delete config.httpsAgent;\n }\n}\n\nexport function addRetryPlugin(\n networkClient: NetworkClientInstance,\n options: RetryOptions = {},\n): NetworkClientInstance {\n networkClient.interceptors.request.use((config) => {\n const state = getCurrentState(config as NetworkRequestConfig);\n state.lastRequestTime = Date.now();\n (config as CustomNetworkConfig)[NAME_SPACE] = state;\n return config;\n });\n\n networkClient.interceptors.response.use(undefined, (error) => {\n const config = error?.config;\n if (!config) {\n return Promise.reject(error);\n }\n\n const {\n retries = 1,\n isRetry = () => true, // isNetworkOrIdempotentRequestError\n retryDelay = 200,\n resetTimeout = true,\n } = { ...options, ...config?.[NAME_SPACE] };\n\n const state = getCurrentState(config);\n\n // canRetry & isRetry just need one\n const needRetry = (isRetry(error) || state.canRetry) && state.retryCount < retries;\n if (needRetry) {\n state.retryCount += 1;\n const delay = typeof retryDelay === 'number' ? retryDelay : retryDelay(state.retryCount, error);\n\n // Axios fails merging this configuration to the default configuration because it has an issue\n // with circular structures: https://github.com/mzabriskie/axios/issues/370\n fixConfig(networkClient, config);\n\n if (!resetTimeout && config.timeout && state.lastRequestTime) {\n const lastRequestDuration = Date.now() - state.lastRequestTime;\n // Minimum 1ms timeout (passing 0 or less to XHR means no timeout)\n config.timeout = Math.max(config.timeout - lastRequestDuration - delay, 1);\n }\n\n config.transformRequest = [(data: any) => data];\n\n return new Promise((resolve) => setTimeout(() => resolve(networkClient(config)), delay));\n }\n\n return Promise.reject(error);\n });\n\n return networkClient;\n}\n","import axios, { AxiosError } from 'axios';\nimport type { NetworkRequestConfig, NetworkClientInstance } from '.';\nimport type { NetworkErrorOptions } from './client.interface';\n\nexport function createClient(config?: NetworkRequestConfig): NetworkClientInstance {\n return axios.create(config);\n}\n\nexport class NetworkError<T = unknown, D = any> extends AxiosError<T, D> {\n constructor(opts: NetworkErrorOptions<T, D>) {\n let message;\n\n if (opts.message) {\n message = opts.message;\n } else if (opts.error) {\n message = opts.error.message;\n }\n super(message, opts.code, opts.config, opts.request, opts.response);\n }\n\n get isNetworkError() {\n return true;\n }\n}\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { AxiosRequestConfig, AxiosInstance, AxiosInterceptorOptions, AxiosRequestHeaders, AxiosResponse, AxiosError } from 'axios';
|
|
2
|
+
|
|
3
|
+
declare const HostNameTypeNameSpace = "custom-host-name-type";
|
|
4
|
+
interface NetworkRequestConfig<D = any> extends AxiosRequestConfig<D> {
|
|
5
|
+
[HostNameTypeNameSpace]?: string;
|
|
6
|
+
}
|
|
7
|
+
interface BaseNetworkErrorOptions<T = unknown, D = any> {
|
|
8
|
+
message?: string;
|
|
9
|
+
error?: Error;
|
|
10
|
+
code?: string;
|
|
11
|
+
config?: NetworkMiddleRequestConfig;
|
|
12
|
+
request?: any;
|
|
13
|
+
response?: NetworkResponse<T, D>;
|
|
14
|
+
}
|
|
15
|
+
interface NetworkErrorFromMessageOptions<T = unknown, D = any> extends BaseNetworkErrorOptions<T, D> {
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
interface NetworkErrorFromErrorOptions<T = unknown, D = any> extends BaseNetworkErrorOptions<T, D> {
|
|
19
|
+
error: Error;
|
|
20
|
+
}
|
|
21
|
+
type NetworkErrorOptions<T = unknown, D = any> = NetworkErrorFromMessageOptions<T, D> | NetworkErrorFromErrorOptions<T, D>;
|
|
22
|
+
type NetworkResponse<T = any, D = any> = Omit<AxiosResponse<T, D>, 'config'> & {
|
|
23
|
+
config: NetworkMiddleRequestConfig<D>;
|
|
24
|
+
};
|
|
25
|
+
type NetworkError$1<T = unknown, D = any> = AxiosError<T, D> & {
|
|
26
|
+
isNetworkError: boolean;
|
|
27
|
+
};
|
|
28
|
+
interface NetworkMiddleRequestConfig<D = any> extends NetworkRequestConfig<D> {
|
|
29
|
+
headers: AxiosRequestHeaders;
|
|
30
|
+
}
|
|
31
|
+
interface InterceptorManager<V> {
|
|
32
|
+
use(onFulfilled?: ((value: V) => V | Promise<V>) | null, onRejected?: ((error: any) => any) | null, options?: AxiosInterceptorOptions): number;
|
|
33
|
+
eject(id: number): void;
|
|
34
|
+
clear(): void;
|
|
35
|
+
}
|
|
36
|
+
type NetworkClientInstance = Omit<AxiosInstance, 'interceptors'> & {
|
|
37
|
+
interceptors: {
|
|
38
|
+
request: InterceptorManager<NetworkMiddleRequestConfig>;
|
|
39
|
+
response: InterceptorManager<NetworkResponse>;
|
|
40
|
+
};
|
|
41
|
+
request: <T = any, R = NetworkResponse<T>, D = any>(configOrUrl: NetworkRequestConfig<D> | string, config?: NetworkRequestConfig<D>) => Promise<R>;
|
|
42
|
+
get: <T = any, R = NetworkResponse<T>, D = any>(url: string, config?: Omit<NetworkRequestConfig<D>, 'url'>) => Promise<R>;
|
|
43
|
+
post: <T = any, R = NetworkResponse<T>, D = any>(url: string, data?: D, config?: Omit<NetworkRequestConfig<D>, 'url'>) => Promise<R>;
|
|
44
|
+
<T = any, R = NetworkResponse<T>, D = any>(config: NetworkRequestConfig<D>): Promise<R>;
|
|
45
|
+
<T = any, R = NetworkResponse<T>, D = any>(url: string, config?: NetworkRequestConfig<D>): Promise<R>;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
type RetryOptions = {
|
|
49
|
+
retries?: number;
|
|
50
|
+
resetTimeout?: boolean;
|
|
51
|
+
isRetry?: (error: NetworkError$1) => boolean;
|
|
52
|
+
retryDelay?: ((count: number) => number) | number;
|
|
53
|
+
};
|
|
54
|
+
declare function addRetryPlugin(networkClient: NetworkClientInstance, options?: RetryOptions): NetworkClientInstance;
|
|
55
|
+
|
|
56
|
+
declare function createClient(config?: NetworkRequestConfig): NetworkClientInstance;
|
|
57
|
+
declare class NetworkError<T = unknown, D = any> extends AxiosError<T, D> {
|
|
58
|
+
constructor(opts: NetworkErrorOptions<T, D>);
|
|
59
|
+
get isNetworkError(): boolean;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { HostNameTypeNameSpace, type NetworkClientInstance, NetworkError, type NetworkMiddleRequestConfig, type NetworkRequestConfig, type NetworkResponse, addRetryPlugin, createClient };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { AxiosRequestConfig, AxiosInstance, AxiosInterceptorOptions, AxiosRequestHeaders, AxiosResponse, AxiosError } from 'axios';
|
|
2
|
+
|
|
3
|
+
declare const HostNameTypeNameSpace = "custom-host-name-type";
|
|
4
|
+
interface NetworkRequestConfig<D = any> extends AxiosRequestConfig<D> {
|
|
5
|
+
[HostNameTypeNameSpace]?: string;
|
|
6
|
+
}
|
|
7
|
+
interface BaseNetworkErrorOptions<T = unknown, D = any> {
|
|
8
|
+
message?: string;
|
|
9
|
+
error?: Error;
|
|
10
|
+
code?: string;
|
|
11
|
+
config?: NetworkMiddleRequestConfig;
|
|
12
|
+
request?: any;
|
|
13
|
+
response?: NetworkResponse<T, D>;
|
|
14
|
+
}
|
|
15
|
+
interface NetworkErrorFromMessageOptions<T = unknown, D = any> extends BaseNetworkErrorOptions<T, D> {
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
interface NetworkErrorFromErrorOptions<T = unknown, D = any> extends BaseNetworkErrorOptions<T, D> {
|
|
19
|
+
error: Error;
|
|
20
|
+
}
|
|
21
|
+
type NetworkErrorOptions<T = unknown, D = any> = NetworkErrorFromMessageOptions<T, D> | NetworkErrorFromErrorOptions<T, D>;
|
|
22
|
+
type NetworkResponse<T = any, D = any> = Omit<AxiosResponse<T, D>, 'config'> & {
|
|
23
|
+
config: NetworkMiddleRequestConfig<D>;
|
|
24
|
+
};
|
|
25
|
+
type NetworkError$1<T = unknown, D = any> = AxiosError<T, D> & {
|
|
26
|
+
isNetworkError: boolean;
|
|
27
|
+
};
|
|
28
|
+
interface NetworkMiddleRequestConfig<D = any> extends NetworkRequestConfig<D> {
|
|
29
|
+
headers: AxiosRequestHeaders;
|
|
30
|
+
}
|
|
31
|
+
interface InterceptorManager<V> {
|
|
32
|
+
use(onFulfilled?: ((value: V) => V | Promise<V>) | null, onRejected?: ((error: any) => any) | null, options?: AxiosInterceptorOptions): number;
|
|
33
|
+
eject(id: number): void;
|
|
34
|
+
clear(): void;
|
|
35
|
+
}
|
|
36
|
+
type NetworkClientInstance = Omit<AxiosInstance, 'interceptors'> & {
|
|
37
|
+
interceptors: {
|
|
38
|
+
request: InterceptorManager<NetworkMiddleRequestConfig>;
|
|
39
|
+
response: InterceptorManager<NetworkResponse>;
|
|
40
|
+
};
|
|
41
|
+
request: <T = any, R = NetworkResponse<T>, D = any>(configOrUrl: NetworkRequestConfig<D> | string, config?: NetworkRequestConfig<D>) => Promise<R>;
|
|
42
|
+
get: <T = any, R = NetworkResponse<T>, D = any>(url: string, config?: Omit<NetworkRequestConfig<D>, 'url'>) => Promise<R>;
|
|
43
|
+
post: <T = any, R = NetworkResponse<T>, D = any>(url: string, data?: D, config?: Omit<NetworkRequestConfig<D>, 'url'>) => Promise<R>;
|
|
44
|
+
<T = any, R = NetworkResponse<T>, D = any>(config: NetworkRequestConfig<D>): Promise<R>;
|
|
45
|
+
<T = any, R = NetworkResponse<T>, D = any>(url: string, config?: NetworkRequestConfig<D>): Promise<R>;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
type RetryOptions = {
|
|
49
|
+
retries?: number;
|
|
50
|
+
resetTimeout?: boolean;
|
|
51
|
+
isRetry?: (error: NetworkError$1) => boolean;
|
|
52
|
+
retryDelay?: ((count: number) => number) | number;
|
|
53
|
+
};
|
|
54
|
+
declare function addRetryPlugin(networkClient: NetworkClientInstance, options?: RetryOptions): NetworkClientInstance;
|
|
55
|
+
|
|
56
|
+
declare function createClient(config?: NetworkRequestConfig): NetworkClientInstance;
|
|
57
|
+
declare class NetworkError<T = unknown, D = any> extends AxiosError<T, D> {
|
|
58
|
+
constructor(opts: NetworkErrorOptions<T, D>);
|
|
59
|
+
get isNetworkError(): boolean;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { HostNameTypeNameSpace, type NetworkClientInstance, NetworkError, type NetworkMiddleRequestConfig, type NetworkRequestConfig, type NetworkResponse, addRetryPlugin, createClient };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import axios, { AxiosError } from 'axios';
|
|
2
|
+
|
|
3
|
+
// src/network/client.interface.ts
|
|
4
|
+
var HostNameTypeNameSpace = "custom-host-name-type";
|
|
5
|
+
|
|
6
|
+
// src/network/plugins/retry.ts
|
|
7
|
+
var NAME_SPACE = "network-client-retry-plugin";
|
|
8
|
+
function getCurrentState(config) {
|
|
9
|
+
const currentState = config[NAME_SPACE] || {
|
|
10
|
+
lastRequestTime: 0,
|
|
11
|
+
retryCount: 0
|
|
12
|
+
};
|
|
13
|
+
return currentState;
|
|
14
|
+
}
|
|
15
|
+
function fixConfig(networkClient, config) {
|
|
16
|
+
if (networkClient.defaults.agent === config.agent) {
|
|
17
|
+
delete config.agent;
|
|
18
|
+
}
|
|
19
|
+
if (networkClient.defaults.httpAgent === config.httpAgent) {
|
|
20
|
+
delete config.httpAgent;
|
|
21
|
+
}
|
|
22
|
+
if (networkClient.defaults.httpsAgent === config.httpsAgent) {
|
|
23
|
+
delete config.httpsAgent;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function addRetryPlugin(networkClient, options = {}) {
|
|
27
|
+
networkClient.interceptors.request.use((config) => {
|
|
28
|
+
const state = getCurrentState(config);
|
|
29
|
+
state.lastRequestTime = Date.now();
|
|
30
|
+
config[NAME_SPACE] = state;
|
|
31
|
+
return config;
|
|
32
|
+
});
|
|
33
|
+
networkClient.interceptors.response.use(void 0, (error) => {
|
|
34
|
+
const config = error?.config;
|
|
35
|
+
if (!config) {
|
|
36
|
+
return Promise.reject(error);
|
|
37
|
+
}
|
|
38
|
+
const {
|
|
39
|
+
retries = 1,
|
|
40
|
+
isRetry = () => true,
|
|
41
|
+
// isNetworkOrIdempotentRequestError
|
|
42
|
+
retryDelay = 200,
|
|
43
|
+
resetTimeout = true
|
|
44
|
+
} = { ...options, ...config?.[NAME_SPACE] };
|
|
45
|
+
const state = getCurrentState(config);
|
|
46
|
+
const needRetry = (isRetry(error) || state.canRetry) && state.retryCount < retries;
|
|
47
|
+
if (needRetry) {
|
|
48
|
+
state.retryCount += 1;
|
|
49
|
+
const delay = typeof retryDelay === "number" ? retryDelay : retryDelay(state.retryCount, error);
|
|
50
|
+
fixConfig(networkClient, config);
|
|
51
|
+
if (!resetTimeout && config.timeout && state.lastRequestTime) {
|
|
52
|
+
const lastRequestDuration = Date.now() - state.lastRequestTime;
|
|
53
|
+
config.timeout = Math.max(config.timeout - lastRequestDuration - delay, 1);
|
|
54
|
+
}
|
|
55
|
+
config.transformRequest = [(data) => data];
|
|
56
|
+
return new Promise((resolve) => setTimeout(() => resolve(networkClient(config)), delay));
|
|
57
|
+
}
|
|
58
|
+
return Promise.reject(error);
|
|
59
|
+
});
|
|
60
|
+
return networkClient;
|
|
61
|
+
}
|
|
62
|
+
function createClient(config) {
|
|
63
|
+
return axios.create(config);
|
|
64
|
+
}
|
|
65
|
+
var NetworkError = class extends AxiosError {
|
|
66
|
+
constructor(opts) {
|
|
67
|
+
let message;
|
|
68
|
+
if (opts.message) {
|
|
69
|
+
message = opts.message;
|
|
70
|
+
} else if (opts.error) {
|
|
71
|
+
message = opts.error.message;
|
|
72
|
+
}
|
|
73
|
+
super(message, opts.code, opts.config, opts.request, opts.response);
|
|
74
|
+
}
|
|
75
|
+
get isNetworkError() {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export { HostNameTypeNameSpace, NetworkError, addRetryPlugin, createClient };
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/network/client.interface.ts","../../src/network/plugins/retry.ts","../../src/network/client.web.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type {\n AxiosRequestConfig,\n AxiosResponse,\n AxiosInstance,\n AxiosError,\n AxiosRequestHeaders,\n AxiosInterceptorOptions,\n} from 'axios';\n\nexport const HostNameTypeNameSpace = 'custom-host-name-type';\n\nexport interface FetchOptions {\n url: string;\n params?: Record<string, any>;\n method?: 'GET' | 'POST';\n header?: Record<string, any>;\n data?: Record<string, any>;\n needCommonParams?: boolean;\n needTiming?: boolean;\n}\n\n// 请求配置\nexport interface NetworkRequestConfig<D = any> extends AxiosRequestConfig<D> {\n // web扩展,只对web生效\n [HostNameTypeNameSpace]?: string;\n}\n\ninterface BaseNetworkErrorOptions<T = unknown, D = any> {\n message?: string;\n error?: Error;\n code?: string;\n config?: NetworkMiddleRequestConfig;\n request?: any;\n response?: NetworkResponse<T, D>;\n}\n\ninterface NetworkErrorFromMessageOptions<T = unknown, D = any> extends BaseNetworkErrorOptions<T, D> {\n message: string;\n}\n\ninterface NetworkErrorFromErrorOptions<T = unknown, D = any> extends BaseNetworkErrorOptions<T, D> {\n error: Error;\n}\n\nexport type NetworkErrorOptions<T = unknown, D = any> =\n | NetworkErrorFromMessageOptions<T, D>\n | NetworkErrorFromErrorOptions<T, D>;\n\n// 请求结果\nexport type NetworkResponse<T = any, D = any> = Omit<AxiosResponse<T, D>, 'config'> & {\n // 覆盖config字段,增加扩展\n // 注意:不是写错,就是NetworkMiddleRequestConfig,并非NetworkRequestConfig\n config: NetworkMiddleRequestConfig<D>;\n};\n\n// 请求失败时,reject获取的对象\nexport type NetworkError<T = unknown, D = any> = AxiosError<T, D> & {\n // 平替isAxiosError标记,表示内部错误\n isNetworkError: boolean;\n};\n\n// 请求经过中间件时配置\nexport interface NetworkMiddleRequestConfig<D = any> extends NetworkRequestConfig<D> {\n headers: AxiosRequestHeaders;\n}\n\n// 为了支持中间件req、res类型扩展,单独声明InterceptorManager类型\nexport interface InterceptorManager<V> {\n use(\n onFulfilled?: ((value: V) => V | Promise<V>) | null,\n onRejected?: ((error: any) => any) | null,\n options?: AxiosInterceptorOptions,\n ): number;\n eject(id: number): void;\n clear(): void;\n}\n\n// axios实例\nexport type NetworkClientInstance = Omit<AxiosInstance, 'interceptors'> & {\n // 支持中间件req、res类型扩展,覆盖interceptors\n interceptors: {\n request: InterceptorManager<NetworkMiddleRequestConfig>;\n response: InterceptorManager<NetworkResponse>;\n };\n\n // 重新声明,为了参数覆盖\n request: <T = any, R = NetworkResponse<T>, D = any>(\n configOrUrl: NetworkRequestConfig<D> | string,\n config?: NetworkRequestConfig<D>,\n ) => Promise<R>;\n get: <T = any, R = NetworkResponse<T>, D = any>(\n url: string,\n config?: Omit<NetworkRequestConfig<D>, 'url'>,\n ) => Promise<R>;\n post: <T = any, R = NetworkResponse<T>, D = any>(\n url: string,\n data?: D,\n config?: Omit<NetworkRequestConfig<D>, 'url'>,\n ) => Promise<R>;\n\n // 重新声明可直接调用,否则会丢失该能力\n <T = any, R = NetworkResponse<T>, D = any>(config: NetworkRequestConfig<D>): Promise<R>;\n <T = any, R = NetworkResponse<T>, D = any>(url: string, config?: NetworkRequestConfig<D>): Promise<R>;\n};\n","import type {\n NetworkClientInstance,\n NetworkError,\n NetworkRequestConfig,\n} from '../client.interface';\n\nexport const NAME_SPACE = 'network-client-retry-plugin';\n\ntype RetryConfig = {\n lastRequestTime: number;\n retryCount: number;\n canRetry?: boolean;\n};\n\ntype CustomNetworkConfig = NetworkRequestConfig & {\n [NAME_SPACE]?: RetryConfig;\n};\n\ntype RetryOptions = {\n retries?: number; // default retry times\n resetTimeout?: boolean; // if reset timeout between retries, default is true\n isRetry?: (error: NetworkError) => boolean;\n retryDelay?: ((count: number) => number) | number;\n};\n\nfunction getCurrentState(config: CustomNetworkConfig): RetryConfig {\n const currentState = config[NAME_SPACE] || ({\n lastRequestTime: 0,\n retryCount: 0,\n } satisfies RetryConfig);\n return currentState;\n}\n\nfunction fixConfig(networkClient: NetworkClientInstance, config: any) {\n // @ts-expect-error type error\n if (networkClient.defaults.agent === config.agent) {\n delete config.agent;\n }\n if (networkClient.defaults.httpAgent === config.httpAgent) {\n delete config.httpAgent;\n }\n if (networkClient.defaults.httpsAgent === config.httpsAgent) {\n delete config.httpsAgent;\n }\n}\n\nexport function addRetryPlugin(\n networkClient: NetworkClientInstance,\n options: RetryOptions = {},\n): NetworkClientInstance {\n networkClient.interceptors.request.use((config) => {\n const state = getCurrentState(config as NetworkRequestConfig);\n state.lastRequestTime = Date.now();\n (config as CustomNetworkConfig)[NAME_SPACE] = state;\n return config;\n });\n\n networkClient.interceptors.response.use(undefined, (error) => {\n const config = error?.config;\n if (!config) {\n return Promise.reject(error);\n }\n\n const {\n retries = 1,\n isRetry = () => true, // isNetworkOrIdempotentRequestError\n retryDelay = 200,\n resetTimeout = true,\n } = { ...options, ...config?.[NAME_SPACE] };\n\n const state = getCurrentState(config);\n\n // canRetry & isRetry just need one\n const needRetry = (isRetry(error) || state.canRetry) && state.retryCount < retries;\n if (needRetry) {\n state.retryCount += 1;\n const delay = typeof retryDelay === 'number' ? retryDelay : retryDelay(state.retryCount, error);\n\n // Axios fails merging this configuration to the default configuration because it has an issue\n // with circular structures: https://github.com/mzabriskie/axios/issues/370\n fixConfig(networkClient, config);\n\n if (!resetTimeout && config.timeout && state.lastRequestTime) {\n const lastRequestDuration = Date.now() - state.lastRequestTime;\n // Minimum 1ms timeout (passing 0 or less to XHR means no timeout)\n config.timeout = Math.max(config.timeout - lastRequestDuration - delay, 1);\n }\n\n config.transformRequest = [(data: any) => data];\n\n return new Promise((resolve) => setTimeout(() => resolve(networkClient(config)), delay));\n }\n\n return Promise.reject(error);\n });\n\n return networkClient;\n}\n","import axios, { AxiosError } from 'axios';\nimport type { NetworkRequestConfig, NetworkClientInstance } from '.';\nimport type { NetworkErrorOptions } from './client.interface';\n\nexport function createClient(config?: NetworkRequestConfig): NetworkClientInstance {\n return axios.create(config);\n}\n\nexport class NetworkError<T = unknown, D = any> extends AxiosError<T, D> {\n constructor(opts: NetworkErrorOptions<T, D>) {\n let message;\n\n if (opts.message) {\n message = opts.message;\n } else if (opts.error) {\n message = opts.error.message;\n }\n super(message, opts.code, opts.config, opts.request, opts.response);\n }\n\n get isNetworkError() {\n return true;\n }\n}\n"]}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/assert/assert.ts
|
|
4
|
+
function abort(reason) {
|
|
5
|
+
throw new Error(`lvAssert(${reason})`);
|
|
6
|
+
}
|
|
7
|
+
function lvAssert(expr, reason) {
|
|
8
|
+
if (!expr) {
|
|
9
|
+
abort(reason);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// src/objects/deep-equal.ts
|
|
14
|
+
function equalsInternal(lhs, rhs, seen) {
|
|
15
|
+
if (lhs === rhs) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
if (lhs === null || lhs === void 0 || rhs === null || rhs === void 0) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
if (typeof lhs !== typeof rhs) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
if (typeof lhs !== "object") {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
lvAssert(!seen.has(lhs), "arguments object has circular.");
|
|
28
|
+
seen.add(lhs);
|
|
29
|
+
if (Array.isArray(lhs) !== Array.isArray(rhs)) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (Array.isArray(lhs)) {
|
|
33
|
+
if (lhs.length !== rhs.length) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
for (let i = 0; i < lhs.length; i++) {
|
|
37
|
+
if (!equalsInternal(lhs[i], rhs[i], seen)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
} else {
|
|
42
|
+
const lhsKeys = Object.keys(lhs);
|
|
43
|
+
lhsKeys.sort();
|
|
44
|
+
const rhsKeys = Object.keys(rhs);
|
|
45
|
+
rhsKeys.sort();
|
|
46
|
+
if (!equalsInternal(lhsKeys, rhsKeys, seen)) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
for (let i = 0; i < lhsKeys.length; i++) {
|
|
50
|
+
if (!equalsInternal(lhs[lhsKeys[i]], rhs[lhsKeys[i]], seen)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
seen.delete(lhs);
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
function deepEqual(lhs, rhs) {
|
|
59
|
+
return equalsInternal(lhs, rhs, /* @__PURE__ */ new Set());
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// src/objects/deep-clone.ts
|
|
63
|
+
function deepClone(obj) {
|
|
64
|
+
if (!obj || typeof obj !== "object") {
|
|
65
|
+
return obj;
|
|
66
|
+
}
|
|
67
|
+
if (obj instanceof RegExp) {
|
|
68
|
+
return obj;
|
|
69
|
+
}
|
|
70
|
+
const result = Array.isArray(obj) ? [] : {};
|
|
71
|
+
Object.entries(obj).forEach(([key, value]) => {
|
|
72
|
+
result[key] = value && typeof value === "object" ? deepClone(value) : value;
|
|
73
|
+
});
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
exports.deepClone = deepClone;
|
|
78
|
+
exports.deepEqual = deepEqual;
|
|
79
|
+
//# sourceMappingURL=index.cjs.map
|
|
80
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/assert/assert.ts","../../src/objects/deep-equal.ts","../../src/objects/deep-clone.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["function abort(reason: string): never {\n throw new Error(`lvAssert(${reason})`);\n}\n\n/**\n * 断言表达式为真\n * @param expr \n * @param reason \n */\nexport function lvAssert(expr: unknown, reason?: string): asserts expr {\n if (!expr) {\n abort(reason ?? '#expr is false');\n }\n}\n\n/**\n * 断言deadcode路径\n * @param reason \n */\nexport function lvAssertNotHere(reason?: string): never {\n abort(reason ?? 'unreachable code flow');\n}\n\n/**\n * 断言类型不可达\n * @param member \n * @param message \n */\nexport function lvAssertNever(member: never, message = 'Illegal value:'): never {\n abort(`${message}: ${member}`);\n}\n\n/**\n * 断言变量为null或者undefined\n * @param val \n * @param reason \n */\nexport function lvAssertNotNil<T>(val: T, reason?: string): asserts val is NonNullable<T> {\n if (val === null || val === undefined) {\n abort(reason ?? '#val is nil');\n }\n}\n","import { lvAssert } from '../assert';\n\nfunction equalsInternal(lhs: any, rhs: any, seen: Set<any>): boolean {\n if (lhs === rhs) {\n return true;\n }\n if (lhs === null || lhs === undefined || rhs === null || rhs === undefined) {\n return false;\n }\n if (typeof lhs !== typeof rhs) {\n return false;\n }\n if (typeof lhs !== 'object') {\n return false;\n }\n lvAssert(!seen.has(lhs), 'arguments object has circular.');\n seen.add(lhs);\n if (Array.isArray(lhs) !== Array.isArray(rhs)) {\n return false;\n }\n\n if (Array.isArray(lhs)) {\n if (lhs.length !== rhs.length) {\n return false;\n }\n for (let i = 0; i < lhs.length; i++) {\n if (!equalsInternal(lhs[i], rhs[i], seen)) {\n return false;\n }\n }\n } else {\n const lhsKeys: string[] = Object.keys(lhs);\n lhsKeys.sort();\n\n const rhsKeys: string[] = Object.keys(rhs);\n rhsKeys.sort();\n\n if (!equalsInternal(lhsKeys, rhsKeys, seen)) {\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < lhsKeys.length; i++) {\n if (!equalsInternal(lhs[lhsKeys[i]], rhs[lhsKeys[i]], seen)) {\n return false;\n }\n }\n }\n seen.delete(lhs);\n return true;\n}\n\n/**\n * 提供对象的深度对比是否相等\n *\n * 目前支持的是js中的基础类型,如果需要支持一些高级类型,请联系基建侧同学。\n * 注意:对象内部出现循环依赖时,会throw error\n */\nexport function deepEqual(lhs: any, rhs: any): boolean {\n return equalsInternal(lhs, rhs, new Set());\n}\n","export function deepClone<T>(obj: T): T {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n if (obj instanceof RegExp) {\n return obj;\n }\n const result: any = Array.isArray(obj) ? [] : {};\n Object.entries(obj).forEach(([key, value]) => {\n result[key] = value && typeof value === 'object' ? deepClone(value) : value;\n });\n return result;\n}\n"]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// src/assert/assert.ts
|
|
2
|
+
function abort(reason) {
|
|
3
|
+
throw new Error(`lvAssert(${reason})`);
|
|
4
|
+
}
|
|
5
|
+
function lvAssert(expr, reason) {
|
|
6
|
+
if (!expr) {
|
|
7
|
+
abort(reason);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// src/objects/deep-equal.ts
|
|
12
|
+
function equalsInternal(lhs, rhs, seen) {
|
|
13
|
+
if (lhs === rhs) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
if (lhs === null || lhs === void 0 || rhs === null || rhs === void 0) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
if (typeof lhs !== typeof rhs) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
if (typeof lhs !== "object") {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
lvAssert(!seen.has(lhs), "arguments object has circular.");
|
|
26
|
+
seen.add(lhs);
|
|
27
|
+
if (Array.isArray(lhs) !== Array.isArray(rhs)) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (Array.isArray(lhs)) {
|
|
31
|
+
if (lhs.length !== rhs.length) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
for (let i = 0; i < lhs.length; i++) {
|
|
35
|
+
if (!equalsInternal(lhs[i], rhs[i], seen)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
const lhsKeys = Object.keys(lhs);
|
|
41
|
+
lhsKeys.sort();
|
|
42
|
+
const rhsKeys = Object.keys(rhs);
|
|
43
|
+
rhsKeys.sort();
|
|
44
|
+
if (!equalsInternal(lhsKeys, rhsKeys, seen)) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
for (let i = 0; i < lhsKeys.length; i++) {
|
|
48
|
+
if (!equalsInternal(lhs[lhsKeys[i]], rhs[lhsKeys[i]], seen)) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
seen.delete(lhs);
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
function deepEqual(lhs, rhs) {
|
|
57
|
+
return equalsInternal(lhs, rhs, /* @__PURE__ */ new Set());
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// src/objects/deep-clone.ts
|
|
61
|
+
function deepClone(obj) {
|
|
62
|
+
if (!obj || typeof obj !== "object") {
|
|
63
|
+
return obj;
|
|
64
|
+
}
|
|
65
|
+
if (obj instanceof RegExp) {
|
|
66
|
+
return obj;
|
|
67
|
+
}
|
|
68
|
+
const result = Array.isArray(obj) ? [] : {};
|
|
69
|
+
Object.entries(obj).forEach(([key, value]) => {
|
|
70
|
+
result[key] = value && typeof value === "object" ? deepClone(value) : value;
|
|
71
|
+
});
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { deepClone, deepEqual };
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
77
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/assert/assert.ts","../../src/objects/deep-equal.ts","../../src/objects/deep-clone.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["function abort(reason: string): never {\n throw new Error(`lvAssert(${reason})`);\n}\n\n/**\n * 断言表达式为真\n * @param expr \n * @param reason \n */\nexport function lvAssert(expr: unknown, reason?: string): asserts expr {\n if (!expr) {\n abort(reason ?? '#expr is false');\n }\n}\n\n/**\n * 断言deadcode路径\n * @param reason \n */\nexport function lvAssertNotHere(reason?: string): never {\n abort(reason ?? 'unreachable code flow');\n}\n\n/**\n * 断言类型不可达\n * @param member \n * @param message \n */\nexport function lvAssertNever(member: never, message = 'Illegal value:'): never {\n abort(`${message}: ${member}`);\n}\n\n/**\n * 断言变量为null或者undefined\n * @param val \n * @param reason \n */\nexport function lvAssertNotNil<T>(val: T, reason?: string): asserts val is NonNullable<T> {\n if (val === null || val === undefined) {\n abort(reason ?? '#val is nil');\n }\n}\n","import { lvAssert } from '../assert';\n\nfunction equalsInternal(lhs: any, rhs: any, seen: Set<any>): boolean {\n if (lhs === rhs) {\n return true;\n }\n if (lhs === null || lhs === undefined || rhs === null || rhs === undefined) {\n return false;\n }\n if (typeof lhs !== typeof rhs) {\n return false;\n }\n if (typeof lhs !== 'object') {\n return false;\n }\n lvAssert(!seen.has(lhs), 'arguments object has circular.');\n seen.add(lhs);\n if (Array.isArray(lhs) !== Array.isArray(rhs)) {\n return false;\n }\n\n if (Array.isArray(lhs)) {\n if (lhs.length !== rhs.length) {\n return false;\n }\n for (let i = 0; i < lhs.length; i++) {\n if (!equalsInternal(lhs[i], rhs[i], seen)) {\n return false;\n }\n }\n } else {\n const lhsKeys: string[] = Object.keys(lhs);\n lhsKeys.sort();\n\n const rhsKeys: string[] = Object.keys(rhs);\n rhsKeys.sort();\n\n if (!equalsInternal(lhsKeys, rhsKeys, seen)) {\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < lhsKeys.length; i++) {\n if (!equalsInternal(lhs[lhsKeys[i]], rhs[lhsKeys[i]], seen)) {\n return false;\n }\n }\n }\n seen.delete(lhs);\n return true;\n}\n\n/**\n * 提供对象的深度对比是否相等\n *\n * 目前支持的是js中的基础类型,如果需要支持一些高级类型,请联系基建侧同学。\n * 注意:对象内部出现循环依赖时,会throw error\n */\nexport function deepEqual(lhs: any, rhs: any): boolean {\n return equalsInternal(lhs, rhs, new Set());\n}\n","export function deepClone<T>(obj: T): T {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n if (obj instanceof RegExp) {\n return obj;\n }\n const result: any = Array.isArray(obj) ? [] : {};\n Object.entries(obj).forEach(([key, value]) => {\n result[key] = value && typeof value === 'object' ? deepClone(value) : value;\n });\n return result;\n}\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/platform/index.ts
|
|
4
|
+
var _isWindows = false;
|
|
5
|
+
var _isMac = false;
|
|
6
|
+
var _isLinux = false;
|
|
7
|
+
var _isWeb = false;
|
|
8
|
+
var _isIOS = false;
|
|
9
|
+
var _isAndroid = false;
|
|
10
|
+
var _isMobile = false;
|
|
11
|
+
var _isIPad = false;
|
|
12
|
+
var _isFirefox = false;
|
|
13
|
+
var _isChrome = false;
|
|
14
|
+
var _isSafari = false;
|
|
15
|
+
var _userAgent;
|
|
16
|
+
if (typeof navigator === "object") {
|
|
17
|
+
_userAgent = navigator.userAgent;
|
|
18
|
+
_isWindows = _userAgent.indexOf("Windows") >= 0;
|
|
19
|
+
_isIOS = (_userAgent.indexOf("Macintosh") >= 0 || _userAgent.indexOf("iPad") >= 0 || _userAgent.indexOf("iPhone") >= 0) && Boolean(navigator.maxTouchPoints) && navigator.maxTouchPoints > 0;
|
|
20
|
+
_isAndroid = _userAgent.indexOf("Android") >= 0;
|
|
21
|
+
_isLinux = _userAgent.indexOf("Linux") >= 0;
|
|
22
|
+
_isMobile = _userAgent.indexOf("Mobi") >= 0;
|
|
23
|
+
_isIPad = _userAgent.indexOf("iPad") >= 0;
|
|
24
|
+
_isMac = !_isMobile && _userAgent.indexOf("Macintosh") >= 0;
|
|
25
|
+
_isFirefox = /firefox/i.test(_userAgent);
|
|
26
|
+
_isChrome = /chrome/i.test(_userAgent);
|
|
27
|
+
_isSafari = /^((?!chrome|android).)*safari/i.test(_userAgent);
|
|
28
|
+
_isWeb = true;
|
|
29
|
+
}
|
|
30
|
+
var isWindows = _isWindows;
|
|
31
|
+
var isMac = _isMac;
|
|
32
|
+
var isLinux = _isLinux;
|
|
33
|
+
var isWeb = _isWeb;
|
|
34
|
+
var isIOS = _isIOS;
|
|
35
|
+
var isAndroid = _isAndroid;
|
|
36
|
+
var isIPad = _isIPad;
|
|
37
|
+
var isMobile = _isMobile;
|
|
38
|
+
var isChrome = _isChrome;
|
|
39
|
+
var isFirefox = _isFirefox;
|
|
40
|
+
var isSafari = _isSafari;
|
|
41
|
+
function isArcBrowser() {
|
|
42
|
+
return getComputedStyle(document.documentElement).getPropertyValue("--arc-palette-title") ? true : false;
|
|
43
|
+
}
|
|
44
|
+
function isBrowser() {
|
|
45
|
+
return typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
exports.isAndroid = isAndroid;
|
|
49
|
+
exports.isArcBrowser = isArcBrowser;
|
|
50
|
+
exports.isBrowser = isBrowser;
|
|
51
|
+
exports.isChrome = isChrome;
|
|
52
|
+
exports.isFirefox = isFirefox;
|
|
53
|
+
exports.isIOS = isIOS;
|
|
54
|
+
exports.isIPad = isIPad;
|
|
55
|
+
exports.isLinux = isLinux;
|
|
56
|
+
exports.isMac = isMac;
|
|
57
|
+
exports.isMobile = isMobile;
|
|
58
|
+
exports.isSafari = isSafari;
|
|
59
|
+
exports.isWeb = isWeb;
|
|
60
|
+
exports.isWindows = isWindows;
|
|
61
|
+
//# sourceMappingURL=index.cjs.map
|
|
62
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/platform/index.ts"],"names":[],"mappings":";;;AACA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAI,MAAA,GAAS,KAAA;AACb,IAAI,QAAA,GAAW,KAAA;AACf,IAAI,MAAA,GAAS,KAAA;AACb,IAAI,MAAA,GAAS,KAAA;AACb,IAAI,UAAA,GAAa,KAAA;AACjB,IAAI,SAAA,GAAY,KAAA;AAChB,IAAI,OAAA,GAAU,KAAA;AACd,IAAI,UAAA,GAAa,KAAA;AACjB,IAAI,SAAA,GAAY,KAAA;AAChB,IAAI,SAAA,GAAY,KAAA;AAChB,IAAI,UAAA;AAGJ,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,EAAA,UAAA,GAAa,SAAA,CAAU,SAAA;AACvB,EAAA,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,SAAS,CAAA,IAAK,CAAA;AAC9C,EAAA,MAAA,GAAA,CACG,UAAA,CAAW,QAAQ,WAAW,CAAA,IAAK,KAClC,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,IAAK,CAAA,IAC9B,WAAW,OAAA,CAAQ,QAAQ,KAAK,CAAA,KAClC,OAAA,CAAQ,UAAU,cAAc,CAAA,IAChC,UAAU,cAAA,GAAiB,CAAA;AAC7B,EAAA,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,SAAS,CAAA,IAAK,CAAA;AAC9C,EAAA,QAAA,GAAW,UAAA,CAAW,OAAA,CAAQ,OAAO,CAAA,IAAK,CAAA;AAC1C,EAAA,SAAA,GAAY,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,IAAK,CAAA;AAC1C,EAAA,OAAA,GAAU,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,IAAK,CAAA;AACxC,EAAA,MAAA,GAAS,CAAC,SAAA,IAAa,UAAA,CAAW,OAAA,CAAQ,WAAW,CAAA,IAAK,CAAA;AAC1D,EAAA,UAAA,GAAa,UAAA,CAAW,KAAK,UAAU,CAAA;AACvC,EAAA,SAAA,GAAY,SAAA,CAAU,KAAK,UAAU,CAAA;AACrC,EAAA,SAAA,GAAY,gCAAA,CAAiC,KAAK,UAAU,CAAA;AAC5D,EAAA,MAAA,GAAS,IAAA;AACX;AAEO,IAAM,SAAA,GAAY;AAClB,IAAM,KAAA,GAAQ;AACd,IAAM,OAAA,GAAU;AAChB,IAAM,KAAA,GAAQ;AACd,IAAM,KAAA,GAAQ;AACd,IAAM,SAAA,GAAY;AAClB,IAAM,MAAA,GAAS;AACf,IAAM,QAAA,GAAW;AACjB,IAAM,QAAA,GAAW;AACjB,IAAM,SAAA,GAAY;AAClB,IAAM,QAAA,GAAW;AAOjB,SAAS,YAAA,GAAwB;AACtC,EAAA,OAAO,iBAAiB,QAAA,CAAS,eAAe,EAAE,gBAAA,CAAiB,qBAAqB,IAAI,IAAA,GAAO,KAAA;AACrG;AAGO,SAAS,SAAA,GAAqB;AACnC,EAAA,OACE,OAAO,MAAA,KAAW,WAAA,IAClB,OAAO,MAAA,CAAO,aAAa,WAAA,IAC3B,OAAO,MAAA,CAAO,QAAA,CAAS,aAAA,KAAkB,WAAA;AAE7C","file":"index.cjs","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nlet _isWindows = false;\nlet _isMac = false;\nlet _isLinux = false;\nlet _isWeb = false;\nlet _isIOS = false;\nlet _isAndroid = false;\nlet _isMobile = false;\nlet _isIPad = false;\nlet _isFirefox = false;\nlet _isChrome = false;\nlet _isSafari = false;\nlet _userAgent: string | undefined;\n\n// Web environment\nif (typeof navigator === 'object') {\n _userAgent = navigator.userAgent;\n _isWindows = _userAgent.indexOf('Windows') >= 0;\n _isIOS =\n (_userAgent.indexOf('Macintosh') >= 0 ||\n _userAgent.indexOf('iPad') >= 0 ||\n _userAgent.indexOf('iPhone') >= 0) &&\n Boolean(navigator.maxTouchPoints) &&\n navigator.maxTouchPoints > 0;\n _isAndroid = _userAgent.indexOf('Android') >= 0;\n _isLinux = _userAgent.indexOf('Linux') >= 0;\n _isMobile = _userAgent.indexOf('Mobi') >= 0;\n _isIPad = _userAgent.indexOf('iPad') >= 0;\n _isMac = !_isMobile && _userAgent.indexOf('Macintosh') >= 0;\n _isFirefox = /firefox/i.test(_userAgent);\n _isChrome = /chrome/i.test(_userAgent);\n _isSafari = /^((?!chrome|android).)*safari/i.test(_userAgent);\n _isWeb = true;\n}\n\nexport const isWindows = _isWindows;\nexport const isMac = _isMac;\nexport const isLinux = _isLinux;\nexport const isWeb = _isWeb;\nexport const isIOS = _isIOS;\nexport const isAndroid = _isAndroid;\nexport const isIPad = _isIPad;\nexport const isMobile = _isMobile;\nexport const isChrome = _isChrome;\nexport const isFirefox = _isFirefox;\nexport const isSafari = _isSafari;\n\n/**\n * 判断是否为 Arc 浏览器\n * arc 浏览器判定方式比较奇特,无法通过 UA 判断\n * https://stackoverflow.com/questions/76123232/can-javascript-detect-the-arc-browser\n */\nexport function isArcBrowser(): boolean {\n return getComputedStyle(document.documentElement).getPropertyValue('--arc-palette-title') ? true : false;\n};\n\n/** ace2.0 不再提供这个方法 用于判断是否为浏览器环境*/\nexport function isBrowser(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined'\n );\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare const isWindows: boolean;
|
|
2
|
+
declare const isMac: boolean;
|
|
3
|
+
declare const isLinux: boolean;
|
|
4
|
+
declare const isWeb: boolean;
|
|
5
|
+
declare const isIOS: boolean;
|
|
6
|
+
declare const isAndroid: boolean;
|
|
7
|
+
declare const isIPad: boolean;
|
|
8
|
+
declare const isMobile: boolean;
|
|
9
|
+
declare const isChrome: boolean;
|
|
10
|
+
declare const isFirefox: boolean;
|
|
11
|
+
declare const isSafari: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* 判断是否为 Arc 浏览器
|
|
14
|
+
* arc 浏览器判定方式比较奇特,无法通过 UA 判断
|
|
15
|
+
* https://stackoverflow.com/questions/76123232/can-javascript-detect-the-arc-browser
|
|
16
|
+
*/
|
|
17
|
+
declare function isArcBrowser(): boolean;
|
|
18
|
+
/** ace2.0 不再提供这个方法 用于判断是否为浏览器环境*/
|
|
19
|
+
declare function isBrowser(): boolean;
|
|
20
|
+
|
|
21
|
+
export { isAndroid, isArcBrowser, isBrowser, isChrome, isFirefox, isIOS, isIPad, isLinux, isMac, isMobile, isSafari, isWeb, isWindows };
|