@azure-net/kit 3.0.2 → 3.0.4

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.
@@ -6,8 +6,10 @@ import { EnvironmentUtil } from 'azure-net-tools';
6
6
  import { UniversalCookie } from '../cookie/index.js';
7
7
  export const createMiddlewareManager = (middlewares) => {
8
8
  const universalRedirect = (location, status = 301, navigation) => {
9
- if (EnvironmentUtil.isBrowser && navigation) {
10
- navigation?.cancel();
9
+ if (EnvironmentUtil.isBrowser) {
10
+ if (navigation) {
11
+ navigation?.cancel();
12
+ }
11
13
  return goto(location);
12
14
  }
13
15
  else {
@@ -4,6 +4,10 @@ export interface AsyncSignalOptions<TData, TError = Error> {
4
4
  immediate?: boolean;
5
5
  watch?: (() => unknown)[];
6
6
  initialData?: TData;
7
+ beforeSend?: (meta: {
8
+ initial: boolean;
9
+ external: boolean;
10
+ }) => void | Promise<void>;
7
11
  onSuccess?: (data: TData) => void | Promise<void>;
8
12
  onError?: (error: TError) => void | Promise<void>;
9
13
  key?: string;
@@ -54,11 +54,17 @@ export const createAsyncSignal = (handler, options = {}) => {
54
54
  let abortController = null;
55
55
  let currentPromise = null;
56
56
  let currentRunId = 0;
57
- const run = async (runId) => {
57
+ let started = false;
58
+ const run = async (runId, external) => {
59
+ const initial = !started;
60
+ started = true;
58
61
  if (abortController) {
59
62
  abortController.abort();
60
63
  }
61
64
  abortController = new AbortController();
65
+ if (options.beforeSend) {
66
+ await options.beforeSend({ initial, external });
67
+ }
62
68
  status = 'pending';
63
69
  error = undefined;
64
70
  try {
@@ -90,18 +96,21 @@ export const createAsyncSignal = (handler, options = {}) => {
90
96
  }
91
97
  }
92
98
  };
93
- const start = () => {
99
+ const start = (external) => {
100
+ if (currentPromise) {
101
+ return currentPromise;
102
+ }
94
103
  const runId = ++currentRunId;
95
- const localPromise = run(runId);
104
+ const localPromise = run(runId, external);
96
105
  currentPromise = localPromise;
97
106
  return localPromise;
98
107
  };
99
108
  const execute = async () => {
100
- if (status === 'pending' && currentPromise) {
109
+ if (currentPromise) {
101
110
  await currentPromise;
102
111
  return;
103
112
  }
104
- await start();
113
+ await start(true);
105
114
  };
106
115
  if (EnvironmentUtil.isBrowser) {
107
116
  const signalKey = key ?? asyncSignalManager.generateKey();
@@ -120,7 +129,7 @@ export const createAsyncSignal = (handler, options = {}) => {
120
129
  return;
121
130
  }
122
131
  if (!isFirst) {
123
- void execute();
132
+ void start(false);
124
133
  }
125
134
  isFirst = false;
126
135
  });
@@ -129,11 +138,11 @@ export const createAsyncSignal = (handler, options = {}) => {
129
138
  if (immediate) {
130
139
  if (EnvironmentUtil.isServer && server) {
131
140
  untrack(() => {
132
- void execute();
141
+ void start(false);
133
142
  });
134
143
  }
135
144
  else if (EnvironmentUtil.isBrowser) {
136
- void execute();
145
+ void start(false);
137
146
  }
138
147
  }
139
148
  return {
@@ -152,7 +161,7 @@ export const createAsyncSignal = (handler, options = {}) => {
152
161
  get ready() {
153
162
  if (currentPromise)
154
163
  return currentPromise;
155
- return start();
164
+ return start(false);
156
165
  },
157
166
  execute,
158
167
  refresh: execute,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-net/kit",
3
- "version": "3.0.2",
3
+ "version": "3.0.4",
4
4
  "files": [
5
5
  "dist",
6
6
  "!dist/**/*.test.*",