@qhr123/sa2kit 0.6.1 → 0.7.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.
@@ -0,0 +1,81 @@
1
+ export { ElectronStorageAdapter, MiniAppStorageAdapter, ReactNativeStorageAdapter, StorageAdapter, StorageChangeEvent, WebStorageAdapter, useAsyncStorage, useElectronStorage, useLocalStorage, useStorage, useTaroStorage } from '../storage/index.mjs';
2
+
3
+ /**
4
+ * 请求配置接口
5
+ */
6
+ interface RequestConfig {
7
+ /** 请求 URL */
8
+ url: string;
9
+ /** HTTP 方法 */
10
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
11
+ /** 请求头 */
12
+ headers?: Record<string, string>;
13
+ /** 请求体 */
14
+ body?: any;
15
+ /** 查询参数 */
16
+ params?: Record<string, any>;
17
+ }
18
+ /**
19
+ * 请求适配器接口
20
+ * 用于抽象不同平台的网络请求实现
21
+ * - Mobile/Desktop: fetch API
22
+ * - Miniapp: Taro.request
23
+ */
24
+ interface RequestAdapter {
25
+ /**
26
+ * 发送 HTTP 请求
27
+ * @param config 请求配置
28
+ * @returns 响应数据
29
+ */
30
+ request<T = any>(config: RequestConfig): Promise<T>;
31
+ }
32
+
33
+ /**
34
+ * Web 平台请求适配器
35
+ * 基于标准 fetch API
36
+ *
37
+ * 适用平台:
38
+ * - Web (Next.js)
39
+ * - Desktop (Electron)
40
+ * - Mobile (React Native)
41
+ */
42
+ declare class WebRequestAdapter implements RequestAdapter {
43
+ request<T = any>(config: RequestConfig): Promise<T>;
44
+ }
45
+
46
+ /**
47
+ * Taro Request 接口定义
48
+ * 兼容 @tarojs/taro request API
49
+ */
50
+ interface TaroRequestStatic {
51
+ request<T = any>(options: {
52
+ url: string;
53
+ method?: string;
54
+ header?: Record<string, string>;
55
+ data?: any;
56
+ }): Promise<{
57
+ statusCode: number;
58
+ data: T;
59
+ }>;
60
+ }
61
+ /**
62
+ * Miniapp 平台请求适配器
63
+ * 基于 Taro.request API
64
+ *
65
+ * 使用方式:
66
+ * ```typescript
67
+ * import Taro from '@tarojs/taro'
68
+ * const adapter = new MiniappRequestAdapter(Taro)
69
+ * ```
70
+ *
71
+ * 适用平台:
72
+ * - WeChat Miniapp
73
+ * - Other Taro-based miniapps
74
+ */
75
+ declare class MiniappRequestAdapter implements RequestAdapter {
76
+ private taro;
77
+ constructor(taro: TaroRequestStatic);
78
+ request<T = any>(config: RequestConfig): Promise<T>;
79
+ }
80
+
81
+ export { MiniappRequestAdapter, type RequestAdapter, type RequestConfig, WebRequestAdapter };
@@ -0,0 +1,81 @@
1
+ export { ElectronStorageAdapter, MiniAppStorageAdapter, ReactNativeStorageAdapter, StorageAdapter, StorageChangeEvent, WebStorageAdapter, useAsyncStorage, useElectronStorage, useLocalStorage, useStorage, useTaroStorage } from '../storage/index.js';
2
+
3
+ /**
4
+ * 请求配置接口
5
+ */
6
+ interface RequestConfig {
7
+ /** 请求 URL */
8
+ url: string;
9
+ /** HTTP 方法 */
10
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
11
+ /** 请求头 */
12
+ headers?: Record<string, string>;
13
+ /** 请求体 */
14
+ body?: any;
15
+ /** 查询参数 */
16
+ params?: Record<string, any>;
17
+ }
18
+ /**
19
+ * 请求适配器接口
20
+ * 用于抽象不同平台的网络请求实现
21
+ * - Mobile/Desktop: fetch API
22
+ * - Miniapp: Taro.request
23
+ */
24
+ interface RequestAdapter {
25
+ /**
26
+ * 发送 HTTP 请求
27
+ * @param config 请求配置
28
+ * @returns 响应数据
29
+ */
30
+ request<T = any>(config: RequestConfig): Promise<T>;
31
+ }
32
+
33
+ /**
34
+ * Web 平台请求适配器
35
+ * 基于标准 fetch API
36
+ *
37
+ * 适用平台:
38
+ * - Web (Next.js)
39
+ * - Desktop (Electron)
40
+ * - Mobile (React Native)
41
+ */
42
+ declare class WebRequestAdapter implements RequestAdapter {
43
+ request<T = any>(config: RequestConfig): Promise<T>;
44
+ }
45
+
46
+ /**
47
+ * Taro Request 接口定义
48
+ * 兼容 @tarojs/taro request API
49
+ */
50
+ interface TaroRequestStatic {
51
+ request<T = any>(options: {
52
+ url: string;
53
+ method?: string;
54
+ header?: Record<string, string>;
55
+ data?: any;
56
+ }): Promise<{
57
+ statusCode: number;
58
+ data: T;
59
+ }>;
60
+ }
61
+ /**
62
+ * Miniapp 平台请求适配器
63
+ * 基于 Taro.request API
64
+ *
65
+ * 使用方式:
66
+ * ```typescript
67
+ * import Taro from '@tarojs/taro'
68
+ * const adapter = new MiniappRequestAdapter(Taro)
69
+ * ```
70
+ *
71
+ * 适用平台:
72
+ * - WeChat Miniapp
73
+ * - Other Taro-based miniapps
74
+ */
75
+ declare class MiniappRequestAdapter implements RequestAdapter {
76
+ private taro;
77
+ constructor(taro: TaroRequestStatic);
78
+ request<T = any>(config: RequestConfig): Promise<T>;
79
+ }
80
+
81
+ export { MiniappRequestAdapter, type RequestAdapter, type RequestConfig, WebRequestAdapter };
@@ -0,0 +1,122 @@
1
+ 'use strict';
2
+
3
+ var chunkTLXAIOXP_js = require('../chunk-TLXAIOXP.js');
4
+ require('../chunk-DGUM43GV.js');
5
+
6
+ // src/adapters/request/web-adapter.ts
7
+ var WebRequestAdapter = class {
8
+ async request(config) {
9
+ const { url, method = "GET", headers = {}, body, params } = config;
10
+ let fullUrl = url;
11
+ if (params) {
12
+ const searchParams = new URLSearchParams();
13
+ Object.entries(params).forEach(([key, value]) => {
14
+ if (value !== void 0 && value !== null) {
15
+ searchParams.append(key, String(value));
16
+ }
17
+ });
18
+ const queryString = searchParams.toString();
19
+ if (queryString) {
20
+ fullUrl += (url.includes("?") ? "&" : "?") + queryString;
21
+ }
22
+ }
23
+ const response = await fetch(fullUrl, {
24
+ method,
25
+ headers: {
26
+ "Content-Type": "application/json",
27
+ ...headers
28
+ },
29
+ body: body ? JSON.stringify(body) : void 0,
30
+ credentials: "include"
31
+ // 🔐 自动发送和接收 Cookie(支持 httpOnly Cookie 认证)
32
+ });
33
+ const data = await response.json();
34
+ if (!response.ok) {
35
+ return {
36
+ success: false,
37
+ error: data.error || `\u8BF7\u6C42\u5931\u8D25: ${response.status}`
38
+ };
39
+ }
40
+ return data;
41
+ }
42
+ };
43
+
44
+ // src/adapters/request/miniapp-adapter.ts
45
+ var MiniappRequestAdapter = class {
46
+ constructor(taro) {
47
+ if (!taro) {
48
+ throw new Error("MiniappRequestAdapter requires Taro instance");
49
+ }
50
+ this.taro = taro;
51
+ }
52
+ async request(config) {
53
+ const { url, method = "GET", headers = {}, body, params } = config;
54
+ try {
55
+ const response = await this.taro.request({
56
+ url,
57
+ method,
58
+ header: {
59
+ "Content-Type": "application/json",
60
+ ...headers
61
+ },
62
+ data: method === "GET" ? params : body
63
+ });
64
+ const data = response.data;
65
+ if (response.statusCode >= 200 && response.statusCode < 300) {
66
+ return data;
67
+ } else {
68
+ return {
69
+ success: false,
70
+ error: data.error || `\u8BF7\u6C42\u5931\u8D25: ${response.statusCode}`
71
+ };
72
+ }
73
+ } catch (error) {
74
+ console.error("[MiniappRequestAdapter] request error:", error);
75
+ return {
76
+ success: false,
77
+ error: error instanceof Error ? error.message : "\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"
78
+ };
79
+ }
80
+ }
81
+ };
82
+
83
+ Object.defineProperty(exports, "ElectronStorageAdapter", {
84
+ enumerable: true,
85
+ get: function () { return chunkTLXAIOXP_js.ElectronStorageAdapter; }
86
+ });
87
+ Object.defineProperty(exports, "MiniAppStorageAdapter", {
88
+ enumerable: true,
89
+ get: function () { return chunkTLXAIOXP_js.MiniAppStorageAdapter; }
90
+ });
91
+ Object.defineProperty(exports, "ReactNativeStorageAdapter", {
92
+ enumerable: true,
93
+ get: function () { return chunkTLXAIOXP_js.ReactNativeStorageAdapter; }
94
+ });
95
+ Object.defineProperty(exports, "WebStorageAdapter", {
96
+ enumerable: true,
97
+ get: function () { return chunkTLXAIOXP_js.WebStorageAdapter; }
98
+ });
99
+ Object.defineProperty(exports, "useAsyncStorage", {
100
+ enumerable: true,
101
+ get: function () { return chunkTLXAIOXP_js.useAsyncStorage; }
102
+ });
103
+ Object.defineProperty(exports, "useElectronStorage", {
104
+ enumerable: true,
105
+ get: function () { return chunkTLXAIOXP_js.useElectronStorage; }
106
+ });
107
+ Object.defineProperty(exports, "useLocalStorage", {
108
+ enumerable: true,
109
+ get: function () { return chunkTLXAIOXP_js.useLocalStorage; }
110
+ });
111
+ Object.defineProperty(exports, "useStorage", {
112
+ enumerable: true,
113
+ get: function () { return chunkTLXAIOXP_js.useStorage; }
114
+ });
115
+ Object.defineProperty(exports, "useTaroStorage", {
116
+ enumerable: true,
117
+ get: function () { return chunkTLXAIOXP_js.useTaroStorage; }
118
+ });
119
+ exports.MiniappRequestAdapter = MiniappRequestAdapter;
120
+ exports.WebRequestAdapter = WebRequestAdapter;
121
+ //# sourceMappingURL=index.js.map
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/adapters/request/web-adapter.ts","../../src/adapters/request/miniapp-adapter.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { RequestAdapter, RequestConfig } from './types';\n\n/**\n * Web 平台请求适配器\n * 基于标准 fetch API\n *\n * 适用平台:\n * - Web (Next.js)\n * - Desktop (Electron)\n * - Mobile (React Native)\n */\nexport class WebRequestAdapter implements RequestAdapter {\n async request<T = any>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n // 构建 URL(如果有查询参数)\n let fullUrl = url;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n fullUrl += (url.includes('?') ? '&' : '?') + queryString;\n }\n }\n\n // 发送请求\n const response = await fetch(fullUrl, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n credentials: 'include', // 🔐 自动发送和接收 Cookie(支持 httpOnly Cookie 认证)\n });\n\n // 解析响应\n const data = await response.json();\n\n // 如果响应不成功,返回错误格式\n if (!response.ok) {\n return {\n success: false,\n error: data.error || `请求失败: ${response.status}`,\n } as T;\n }\n\n return data;\n }\n}\n\n","import type { RequestAdapter, RequestConfig } from './types';\n\n/**\n * Taro Request 接口定义\n * 兼容 @tarojs/taro request API\n */\ninterface TaroRequestStatic {\n request<T = any>(options: {\n url: string;\n method?: string;\n header?: Record<string, string>;\n data?: any;\n }): Promise<{\n statusCode: number;\n data: T;\n }>;\n}\n\n/**\n * Miniapp 平台请求适配器\n * 基于 Taro.request API\n *\n * 使用方式:\n * ```typescript\n * import Taro from '@tarojs/taro'\n * const adapter = new MiniappRequestAdapter(Taro)\n * ```\n *\n * 适用平台:\n * - WeChat Miniapp\n * - Other Taro-based miniapps\n */\nexport class MiniappRequestAdapter implements RequestAdapter {\n private taro: TaroRequestStatic;\n\n constructor(taro: TaroRequestStatic) {\n if (!taro) {\n throw new Error('MiniappRequestAdapter requires Taro instance');\n }\n this.taro = taro;\n }\n\n async request<T = any>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n try {\n const response = await this.taro.request({\n url,\n method: method as any,\n header: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n data: method === 'GET' ? params : body,\n });\n\n const data = response.data as any;\n\n // 统一返回格式\n if (response.statusCode >= 200 && response.statusCode < 300) {\n return data;\n } else {\n return {\n success: false,\n error: data.error || `请求失败: ${response.statusCode}`,\n } as T;\n }\n } catch (error) {\n console.error('[MiniappRequestAdapter] request error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : '网络请求失败',\n } as T;\n }\n }\n}\n\n"]}
@@ -0,0 +1,83 @@
1
+ export { ElectronStorageAdapter, MiniAppStorageAdapter, ReactNativeStorageAdapter, WebStorageAdapter, useAsyncStorage, useElectronStorage, useLocalStorage, useStorage, useTaroStorage } from '../chunk-WUTGV44D.mjs';
2
+ import '../chunk-BJTO5JO5.mjs';
3
+
4
+ // src/adapters/request/web-adapter.ts
5
+ var WebRequestAdapter = class {
6
+ async request(config) {
7
+ const { url, method = "GET", headers = {}, body, params } = config;
8
+ let fullUrl = url;
9
+ if (params) {
10
+ const searchParams = new URLSearchParams();
11
+ Object.entries(params).forEach(([key, value]) => {
12
+ if (value !== void 0 && value !== null) {
13
+ searchParams.append(key, String(value));
14
+ }
15
+ });
16
+ const queryString = searchParams.toString();
17
+ if (queryString) {
18
+ fullUrl += (url.includes("?") ? "&" : "?") + queryString;
19
+ }
20
+ }
21
+ const response = await fetch(fullUrl, {
22
+ method,
23
+ headers: {
24
+ "Content-Type": "application/json",
25
+ ...headers
26
+ },
27
+ body: body ? JSON.stringify(body) : void 0,
28
+ credentials: "include"
29
+ // 🔐 自动发送和接收 Cookie(支持 httpOnly Cookie 认证)
30
+ });
31
+ const data = await response.json();
32
+ if (!response.ok) {
33
+ return {
34
+ success: false,
35
+ error: data.error || `\u8BF7\u6C42\u5931\u8D25: ${response.status}`
36
+ };
37
+ }
38
+ return data;
39
+ }
40
+ };
41
+
42
+ // src/adapters/request/miniapp-adapter.ts
43
+ var MiniappRequestAdapter = class {
44
+ constructor(taro) {
45
+ if (!taro) {
46
+ throw new Error("MiniappRequestAdapter requires Taro instance");
47
+ }
48
+ this.taro = taro;
49
+ }
50
+ async request(config) {
51
+ const { url, method = "GET", headers = {}, body, params } = config;
52
+ try {
53
+ const response = await this.taro.request({
54
+ url,
55
+ method,
56
+ header: {
57
+ "Content-Type": "application/json",
58
+ ...headers
59
+ },
60
+ data: method === "GET" ? params : body
61
+ });
62
+ const data = response.data;
63
+ if (response.statusCode >= 200 && response.statusCode < 300) {
64
+ return data;
65
+ } else {
66
+ return {
67
+ success: false,
68
+ error: data.error || `\u8BF7\u6C42\u5931\u8D25: ${response.statusCode}`
69
+ };
70
+ }
71
+ } catch (error) {
72
+ console.error("[MiniappRequestAdapter] request error:", error);
73
+ return {
74
+ success: false,
75
+ error: error instanceof Error ? error.message : "\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"
76
+ };
77
+ }
78
+ }
79
+ };
80
+
81
+ export { MiniappRequestAdapter, WebRequestAdapter };
82
+ //# sourceMappingURL=index.mjs.map
83
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/adapters/request/web-adapter.ts","../../src/adapters/request/miniapp-adapter.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { RequestAdapter, RequestConfig } from './types';\n\n/**\n * Web 平台请求适配器\n * 基于标准 fetch API\n *\n * 适用平台:\n * - Web (Next.js)\n * - Desktop (Electron)\n * - Mobile (React Native)\n */\nexport class WebRequestAdapter implements RequestAdapter {\n async request<T = any>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n // 构建 URL(如果有查询参数)\n let fullUrl = url;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n fullUrl += (url.includes('?') ? '&' : '?') + queryString;\n }\n }\n\n // 发送请求\n const response = await fetch(fullUrl, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n credentials: 'include', // 🔐 自动发送和接收 Cookie(支持 httpOnly Cookie 认证)\n });\n\n // 解析响应\n const data = await response.json();\n\n // 如果响应不成功,返回错误格式\n if (!response.ok) {\n return {\n success: false,\n error: data.error || `请求失败: ${response.status}`,\n } as T;\n }\n\n return data;\n }\n}\n\n","import type { RequestAdapter, RequestConfig } from './types';\n\n/**\n * Taro Request 接口定义\n * 兼容 @tarojs/taro request API\n */\ninterface TaroRequestStatic {\n request<T = any>(options: {\n url: string;\n method?: string;\n header?: Record<string, string>;\n data?: any;\n }): Promise<{\n statusCode: number;\n data: T;\n }>;\n}\n\n/**\n * Miniapp 平台请求适配器\n * 基于 Taro.request API\n *\n * 使用方式:\n * ```typescript\n * import Taro from '@tarojs/taro'\n * const adapter = new MiniappRequestAdapter(Taro)\n * ```\n *\n * 适用平台:\n * - WeChat Miniapp\n * - Other Taro-based miniapps\n */\nexport class MiniappRequestAdapter implements RequestAdapter {\n private taro: TaroRequestStatic;\n\n constructor(taro: TaroRequestStatic) {\n if (!taro) {\n throw new Error('MiniappRequestAdapter requires Taro instance');\n }\n this.taro = taro;\n }\n\n async request<T = any>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n try {\n const response = await this.taro.request({\n url,\n method: method as any,\n header: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n data: method === 'GET' ? params : body,\n });\n\n const data = response.data as any;\n\n // 统一返回格式\n if (response.statusCode >= 200 && response.statusCode < 300) {\n return data;\n } else {\n return {\n success: false,\n error: data.error || `请求失败: ${response.statusCode}`,\n } as T;\n }\n } catch (error) {\n console.error('[MiniappRequestAdapter] request error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : '网络请求失败',\n } as T;\n }\n }\n}\n\n"]}