@spoosh/core 0.4.2 → 0.5.0
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/dist/index.d.mts +21 -24
- package/dist/index.d.ts +21 -24
- package/dist/index.js +3 -3
- package/dist/index.mjs +3 -3
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -76,16 +76,24 @@ type BaseRequestOptions = {
|
|
|
76
76
|
cache?: RequestCache;
|
|
77
77
|
signal?: AbortSignal;
|
|
78
78
|
};
|
|
79
|
-
type BodyOption<TBody> = [TBody] extends [never] ? object : {
|
|
79
|
+
type BodyOption<TBody> = [TBody] extends [never] ? object : undefined extends TBody ? {
|
|
80
|
+
body?: Exclude<TBody, undefined>;
|
|
81
|
+
} : {
|
|
80
82
|
body: TBody;
|
|
81
83
|
};
|
|
82
|
-
type QueryOption<TQuery> = [TQuery] extends [never] ? object : {
|
|
84
|
+
type QueryOption<TQuery> = [TQuery] extends [never] ? object : undefined extends TQuery ? {
|
|
85
|
+
query?: Exclude<TQuery, undefined>;
|
|
86
|
+
} : {
|
|
83
87
|
query: TQuery;
|
|
84
88
|
};
|
|
85
|
-
type FormDataOption<TFormData> = [TFormData] extends [never] ? object : {
|
|
89
|
+
type FormDataOption<TFormData> = [TFormData] extends [never] ? object : undefined extends TFormData ? {
|
|
90
|
+
formData?: Exclude<TFormData, undefined>;
|
|
91
|
+
} : {
|
|
86
92
|
formData: TFormData;
|
|
87
93
|
};
|
|
88
|
-
type UrlEncodedOption<TUrlEncoded> = [TUrlEncoded] extends [never] ? object : {
|
|
94
|
+
type UrlEncodedOption<TUrlEncoded> = [TUrlEncoded] extends [never] ? object : undefined extends TUrlEncoded ? {
|
|
95
|
+
urlEncoded?: Exclude<TUrlEncoded, undefined>;
|
|
96
|
+
} : {
|
|
89
97
|
urlEncoded: TUrlEncoded;
|
|
90
98
|
};
|
|
91
99
|
type RequestOptions<TBody = never, TQuery = never, TFormData = never, TUrlEncoded = never> = BaseRequestOptions & BodyOption<TBody> & QueryOption<TQuery> & FormDataOption<TFormData> & UrlEncodedOption<TUrlEncoded>;
|
|
@@ -197,7 +205,7 @@ type StateManager = {
|
|
|
197
205
|
getCacheByTags: <TData>(tags: string[]) => CacheEntry<TData> | undefined;
|
|
198
206
|
getCacheEntriesByTags: <TData, TError>(tags: string[]) => CacheEntryWithKey<TData, TError>[];
|
|
199
207
|
getCacheEntriesBySelfTag: <TData, TError>(selfTag: string) => CacheEntryWithKey<TData, TError>[];
|
|
200
|
-
|
|
208
|
+
setMeta: (key: string, data: Record<string, unknown>) => void;
|
|
201
209
|
/** Mark all cache entries with matching tags as stale */
|
|
202
210
|
markStale: (tags: string[]) => void;
|
|
203
211
|
/** Get all cache entries */
|
|
@@ -223,7 +231,7 @@ type CacheEntry<TData = unknown, TError = unknown> = {
|
|
|
223
231
|
state: OperationState<TData, TError>;
|
|
224
232
|
tags: string[];
|
|
225
233
|
/** Plugin-contributed result data (e.g., isOptimistic, isStale). Merged into hook result. */
|
|
226
|
-
|
|
234
|
+
meta: Map<string, unknown>;
|
|
227
235
|
/** The original path-derived tag (e.g., "posts/1/comments"). Used for exact matching in cache */
|
|
228
236
|
selfTag?: string;
|
|
229
237
|
previousData?: TData;
|
|
@@ -734,27 +742,16 @@ type Endpoint<T extends {
|
|
|
734
742
|
}> = {
|
|
735
743
|
[EndpointBrand]: true;
|
|
736
744
|
} & T;
|
|
745
|
+
type ExtractProperty<T, K extends string, TDefault = never> = K extends keyof T ? T[K] : TDefault;
|
|
737
746
|
type NormalizeEndpoint<T, TDefaultError> = T extends {
|
|
738
747
|
[EndpointBrand]: true;
|
|
739
748
|
} ? {
|
|
740
|
-
data: T
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
body: T extends {
|
|
747
|
-
body: infer B;
|
|
748
|
-
} ? B : never;
|
|
749
|
-
query: T extends {
|
|
750
|
-
query: infer Q;
|
|
751
|
-
} ? Q : never;
|
|
752
|
-
formData: T extends {
|
|
753
|
-
formData: infer F;
|
|
754
|
-
} ? F : never;
|
|
755
|
-
urlEncoded: T extends {
|
|
756
|
-
urlEncoded: infer U;
|
|
757
|
-
} ? U : never;
|
|
749
|
+
data: ExtractProperty<T, "data">;
|
|
750
|
+
error: ExtractProperty<T, "error", TDefaultError>;
|
|
751
|
+
body: ExtractProperty<T, "body">;
|
|
752
|
+
query: ExtractProperty<T, "query">;
|
|
753
|
+
formData: ExtractProperty<T, "formData">;
|
|
754
|
+
urlEncoded: ExtractProperty<T, "urlEncoded">;
|
|
758
755
|
} : {
|
|
759
756
|
data: T;
|
|
760
757
|
error: TDefaultError;
|
package/dist/index.d.ts
CHANGED
|
@@ -76,16 +76,24 @@ type BaseRequestOptions = {
|
|
|
76
76
|
cache?: RequestCache;
|
|
77
77
|
signal?: AbortSignal;
|
|
78
78
|
};
|
|
79
|
-
type BodyOption<TBody> = [TBody] extends [never] ? object : {
|
|
79
|
+
type BodyOption<TBody> = [TBody] extends [never] ? object : undefined extends TBody ? {
|
|
80
|
+
body?: Exclude<TBody, undefined>;
|
|
81
|
+
} : {
|
|
80
82
|
body: TBody;
|
|
81
83
|
};
|
|
82
|
-
type QueryOption<TQuery> = [TQuery] extends [never] ? object : {
|
|
84
|
+
type QueryOption<TQuery> = [TQuery] extends [never] ? object : undefined extends TQuery ? {
|
|
85
|
+
query?: Exclude<TQuery, undefined>;
|
|
86
|
+
} : {
|
|
83
87
|
query: TQuery;
|
|
84
88
|
};
|
|
85
|
-
type FormDataOption<TFormData> = [TFormData] extends [never] ? object : {
|
|
89
|
+
type FormDataOption<TFormData> = [TFormData] extends [never] ? object : undefined extends TFormData ? {
|
|
90
|
+
formData?: Exclude<TFormData, undefined>;
|
|
91
|
+
} : {
|
|
86
92
|
formData: TFormData;
|
|
87
93
|
};
|
|
88
|
-
type UrlEncodedOption<TUrlEncoded> = [TUrlEncoded] extends [never] ? object : {
|
|
94
|
+
type UrlEncodedOption<TUrlEncoded> = [TUrlEncoded] extends [never] ? object : undefined extends TUrlEncoded ? {
|
|
95
|
+
urlEncoded?: Exclude<TUrlEncoded, undefined>;
|
|
96
|
+
} : {
|
|
89
97
|
urlEncoded: TUrlEncoded;
|
|
90
98
|
};
|
|
91
99
|
type RequestOptions<TBody = never, TQuery = never, TFormData = never, TUrlEncoded = never> = BaseRequestOptions & BodyOption<TBody> & QueryOption<TQuery> & FormDataOption<TFormData> & UrlEncodedOption<TUrlEncoded>;
|
|
@@ -197,7 +205,7 @@ type StateManager = {
|
|
|
197
205
|
getCacheByTags: <TData>(tags: string[]) => CacheEntry<TData> | undefined;
|
|
198
206
|
getCacheEntriesByTags: <TData, TError>(tags: string[]) => CacheEntryWithKey<TData, TError>[];
|
|
199
207
|
getCacheEntriesBySelfTag: <TData, TError>(selfTag: string) => CacheEntryWithKey<TData, TError>[];
|
|
200
|
-
|
|
208
|
+
setMeta: (key: string, data: Record<string, unknown>) => void;
|
|
201
209
|
/** Mark all cache entries with matching tags as stale */
|
|
202
210
|
markStale: (tags: string[]) => void;
|
|
203
211
|
/** Get all cache entries */
|
|
@@ -223,7 +231,7 @@ type CacheEntry<TData = unknown, TError = unknown> = {
|
|
|
223
231
|
state: OperationState<TData, TError>;
|
|
224
232
|
tags: string[];
|
|
225
233
|
/** Plugin-contributed result data (e.g., isOptimistic, isStale). Merged into hook result. */
|
|
226
|
-
|
|
234
|
+
meta: Map<string, unknown>;
|
|
227
235
|
/** The original path-derived tag (e.g., "posts/1/comments"). Used for exact matching in cache */
|
|
228
236
|
selfTag?: string;
|
|
229
237
|
previousData?: TData;
|
|
@@ -734,27 +742,16 @@ type Endpoint<T extends {
|
|
|
734
742
|
}> = {
|
|
735
743
|
[EndpointBrand]: true;
|
|
736
744
|
} & T;
|
|
745
|
+
type ExtractProperty<T, K extends string, TDefault = never> = K extends keyof T ? T[K] : TDefault;
|
|
737
746
|
type NormalizeEndpoint<T, TDefaultError> = T extends {
|
|
738
747
|
[EndpointBrand]: true;
|
|
739
748
|
} ? {
|
|
740
|
-
data: T
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
body: T extends {
|
|
747
|
-
body: infer B;
|
|
748
|
-
} ? B : never;
|
|
749
|
-
query: T extends {
|
|
750
|
-
query: infer Q;
|
|
751
|
-
} ? Q : never;
|
|
752
|
-
formData: T extends {
|
|
753
|
-
formData: infer F;
|
|
754
|
-
} ? F : never;
|
|
755
|
-
urlEncoded: T extends {
|
|
756
|
-
urlEncoded: infer U;
|
|
757
|
-
} ? U : never;
|
|
749
|
+
data: ExtractProperty<T, "data">;
|
|
750
|
+
error: ExtractProperty<T, "error", TDefaultError>;
|
|
751
|
+
body: ExtractProperty<T, "body">;
|
|
752
|
+
query: ExtractProperty<T, "query">;
|
|
753
|
+
formData: ExtractProperty<T, "formData">;
|
|
754
|
+
urlEncoded: ExtractProperty<T, "urlEncoded">;
|
|
758
755
|
} : {
|
|
759
756
|
data: T;
|
|
760
757
|
error: TDefaultError;
|
package/dist/index.js
CHANGED
|
@@ -598,7 +598,7 @@ function createStateManager() {
|
|
|
598
598
|
const newEntry = {
|
|
599
599
|
state: entry.state ?? createInitialState(),
|
|
600
600
|
tags: entry.tags ?? [],
|
|
601
|
-
|
|
601
|
+
meta: /* @__PURE__ */ new Map(),
|
|
602
602
|
selfTag: generateSelfTagFromKey(key),
|
|
603
603
|
previousData: entry.previousData,
|
|
604
604
|
stale: entry.stale
|
|
@@ -658,11 +658,11 @@ function createStateManager() {
|
|
|
658
658
|
});
|
|
659
659
|
return entries;
|
|
660
660
|
},
|
|
661
|
-
|
|
661
|
+
setMeta(key, data) {
|
|
662
662
|
const entry = cache.get(key);
|
|
663
663
|
if (entry) {
|
|
664
664
|
for (const [name, value] of Object.entries(data)) {
|
|
665
|
-
entry.
|
|
665
|
+
entry.meta.set(name, value);
|
|
666
666
|
}
|
|
667
667
|
notifySubscribers(key);
|
|
668
668
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -543,7 +543,7 @@ function createStateManager() {
|
|
|
543
543
|
const newEntry = {
|
|
544
544
|
state: entry.state ?? createInitialState(),
|
|
545
545
|
tags: entry.tags ?? [],
|
|
546
|
-
|
|
546
|
+
meta: /* @__PURE__ */ new Map(),
|
|
547
547
|
selfTag: generateSelfTagFromKey(key),
|
|
548
548
|
previousData: entry.previousData,
|
|
549
549
|
stale: entry.stale
|
|
@@ -603,11 +603,11 @@ function createStateManager() {
|
|
|
603
603
|
});
|
|
604
604
|
return entries;
|
|
605
605
|
},
|
|
606
|
-
|
|
606
|
+
setMeta(key, data) {
|
|
607
607
|
const entry = cache.get(key);
|
|
608
608
|
if (entry) {
|
|
609
609
|
for (const [name, value] of Object.entries(data)) {
|
|
610
|
-
entry.
|
|
610
|
+
entry.meta.set(name, value);
|
|
611
611
|
}
|
|
612
612
|
notifySubscribers(key);
|
|
613
613
|
}
|