@wapri/gbase 1.0.1 → 2.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 wapri contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @wapri/gbase
2
2
 
3
+ 与框架无关的前端基础能力包:浏览器存储封装、运行环境(含鸿蒙)判断、正则校验,以及 `lodash-es`、`dayjs` 等基础依赖的统一出口。
4
+
5
+ ## 在线文档
6
+
7
+ https://sdmu-gaoqi.github.io/wapri/changelog/base
8
+
3
9
  ## Storage
4
10
 
5
11
  `MyStorage` 创建时先检查对应浏览器存储是否可用,并在不可用时回退到内存,避免 App 壳或非浏览器环境的读写异常。
@@ -1,15 +1,15 @@
1
- /**
2
- * 鸿蒙系统 UA 特征集中维护
3
- *
4
- * 约定与 `constant/regexp.ts` 一致:只导出「创建正则」的函数,避免正则字面量在脚本解析阶段抛错。
5
- *
6
- * 真实 UA 样本:
7
- * - 纯血鸿蒙(HarmonyOS NEXT)系统浏览器:
8
- * `Mozilla/5.0 (Phone; OpenHarmony 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/4.1.6.1 Mobile HuaweiBrowser/5.0.3.351`
9
- * - 纯血鸿蒙 App 内嵌 WebView(部分应用会把型号与版本追加在末尾,形态为 `Harmony/5.0.1.71`):
10
- * `Mozilla/5.0 (Phone; OpenHarmony 5.0) ... ArkWeb/4.1.6.1 Mobile PPDWebUI/10.5.0 ... (Harmony/5.0.1.71)`
11
- * - 旧版鸿蒙(HarmonyOS 4 及以前,兼容 AOSP):UA 中同时含 `Android` 与 `HarmonyOS`,
12
- * 形如 `Mozilla/5.0 (Linux; Android 10; HarmonyOS; ...) ... HuaweiBrowser/12.x`
1
+ /**
2
+ * 鸿蒙系统 UA 特征集中维护
3
+ *
4
+ * 约定与 `constant/regexp.ts` 一致:只导出「创建正则」的函数,避免正则字面量在脚本解析阶段抛错。
5
+ *
6
+ * 真实 UA 样本:
7
+ * - 纯血鸿蒙(HarmonyOS NEXT)系统浏览器:
8
+ * `Mozilla/5.0 (Phone; OpenHarmony 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/4.1.6.1 Mobile HuaweiBrowser/5.0.3.351`
9
+ * - 纯血鸿蒙 App 内嵌 WebView(部分应用会把型号与版本追加在末尾,形态为 `Harmony/5.0.1.71`):
10
+ * `Mozilla/5.0 (Phone; OpenHarmony 5.0) ... ArkWeb/4.1.6.1 Mobile PPDWebUI/10.5.0 ... (Harmony/5.0.1.71)`
11
+ * - 旧版鸿蒙(HarmonyOS 4 及以前,兼容 AOSP):UA 中同时含 `Android` 与 `HarmonyOS`,
12
+ * 形如 `Mozilla/5.0 (Linux; Android 10; HarmonyOS; ...) ... HuaweiBrowser/12.x`
13
13
  */
14
14
 
15
15
  /** 鸿蒙 ArkWeb 内核标识,纯血鸿蒙(HarmonyOS NEXT)必带,旧版鸿蒙不带 */
@@ -22,11 +22,11 @@ export var regexpHarmonyOSNext = function regexpHarmonyOSNext() {
22
22
  return new RegExp('openharmony|harmony/\\d', 'i');
23
23
  };
24
24
 
25
- /**
26
- * 广义鸿蒙标识:覆盖纯血鸿蒙(`OpenHarmony`、`Harmony/5.x`、`ArkWeb`)与旧版鸿蒙(`HarmonyOS`)
27
- *
28
- * 注意不要把 `HMSCore` 作为判定依据:它是华为移动服务的 SDK 标识,普通华为 Android 机型
29
- * (如 ELS-AN00 / Mate 系列)的 UA 里同样带有,会把所有华为安卓机误判成鸿蒙。
25
+ /**
26
+ * 广义鸿蒙标识:覆盖纯血鸿蒙(`OpenHarmony`、`Harmony/5.x`、`ArkWeb`)与旧版鸿蒙(`HarmonyOS`)
27
+ *
28
+ * 注意不要把 `HMSCore` 作为判定依据:它是华为移动服务的 SDK 标识,普通华为 Android 机型
29
+ * (如 ELS-AN00 / Mate 系列)的 UA 里同样带有,会把所有华为安卓机误判成鸿蒙。
30
30
  */
31
31
  export var regexpHarmonyOS = function regexpHarmonyOS() {
32
32
  return new RegExp('openharmony|harmony/\\d|harmonyos|arkweb', 'i');
@@ -1,13 +1,13 @@
1
- /**
2
- * 正则集中维护
3
- *
4
- * 约定:
5
- * 1. 这里只导出「创建正则」的函数,不直接导出正则对象。
6
- * 2. 正则用字符串 + new RegExp 构造,而不是正则字面量。
7
- * 字面量会在脚本解析阶段就被引擎校验,一旦用到浏览器不支持的语法(如 lookbehind),
8
- * 解析期就会抛 SyntaxError,导致整个模块加载失败,调用方的 try/catch 也拦不住;
9
- * 字符串形式把编译推迟到调用时,异常才能被捕获并降级。
10
- * 3. 校验方法(src/regexp.ts)只负责调用,不内联正则。
1
+ /**
2
+ * 正则集中维护
3
+ *
4
+ * 约定:
5
+ * 1. 这里只导出「创建正则」的函数,不直接导出正则对象。
6
+ * 2. 正则用字符串 + new RegExp 构造,而不是正则字面量。
7
+ * 字面量会在脚本解析阶段就被引擎校验,一旦用到浏览器不支持的语法(如 lookbehind),
8
+ * 解析期就会抛 SyntaxError,导致整个模块加载失败,调用方的 try/catch 也拦不住;
9
+ * 字符串形式把编译推迟到调用时,异常才能被捕获并降级。
10
+ * 3. 校验方法(src/regexp.ts)只负责调用,不内联正则。
11
11
  */
12
12
 
13
13
  /** 邮箱 */
package/dist/download.js CHANGED
@@ -1,7 +1,7 @@
1
- /**
2
- * 下载 Blob 对象为文件
3
- * @param {string} name 文件名
4
- * @param {Blob} blob Blob 对象
1
+ /**
2
+ * 下载 Blob 对象为文件
3
+ * @param {string} name 文件名
4
+ * @param {Blob} blob Blob 对象
5
5
  */
6
6
  export var downloadBlob = function downloadBlob(name, blob) {
7
7
  try {
package/dist/index.d.ts CHANGED
@@ -3,8 +3,6 @@ export * from './sleep';
3
3
  export * from './env';
4
4
  export * from './copy';
5
5
  export { default as dayjs } from 'dayjs';
6
- export * from './auth';
7
- export * from './platform';
8
6
  export * from './url';
9
7
  export * from './download';
10
8
  export * from './emitter';
package/dist/index.js CHANGED
@@ -3,8 +3,6 @@ export * from "./sleep";
3
3
  export * from "./env";
4
4
  export * from "./copy";
5
5
  export { default as dayjs } from 'dayjs';
6
- export * from "./auth";
7
- export * from "./platform";
8
6
  export * from "./url";
9
7
  export * from "./download";
10
8
  export * from "./emitter";
@@ -1,4 +1,4 @@
1
1
  type Status = 'loading' | 'ready' | 'error';
2
2
  type LoadProps = Record<string, any>;
3
- export declare const loadResource: (path: string, props?: LoadProps, remove?: boolean) => Promise<void> | Promise<Status>;
3
+ export declare const loadResource: (path: string, props?: LoadProps, remove?: boolean) => Promise<Status> | Promise<void>;
4
4
  export {};
package/dist/os.js CHANGED
@@ -34,34 +34,34 @@ var isIpad = function isIpad() {
34
34
  return platform && navigator.maxTouchPoints > 1 || navigator.userAgent.match(/iPad/i) != null;
35
35
  };
36
36
 
37
- /**
38
- * 是否为 Android
39
- *
40
- * 旧版鸿蒙(HarmonyOS 4 及以前)兼容 AOSP,其 UA 中同时包含 `Android`,因此这里会返回 `true`;
41
- * 若需要区分两者,请优先用 `isHarmonyOS()` 判断。
37
+ /**
38
+ * 是否为 Android
39
+ *
40
+ * 旧版鸿蒙(HarmonyOS 4 及以前)兼容 AOSP,其 UA 中同时包含 `Android`,因此这里会返回 `true`;
41
+ * 若需要区分两者,请优先用 `isHarmonyOS()` 判断。
42
42
  */
43
43
  var isAndroid = function isAndroid() {
44
44
  var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getUA();
45
45
  return /android/i.test(ua);
46
46
  };
47
47
 
48
- /**
49
- * 是否为鸿蒙系统(广义)
50
- *
51
- * 覆盖两类:
52
- * - 纯血鸿蒙 HarmonyOS NEXT:UA 含 `OpenHarmony` / `ArkWeb`,不含 `Android`
53
- * - 旧版鸿蒙 HarmonyOS 4 及以前:UA 含 `HarmonyOS` / `HMSCore`,同时含 `Android`
48
+ /**
49
+ * 是否为鸿蒙系统(广义)
50
+ *
51
+ * 覆盖两类:
52
+ * - 纯血鸿蒙 HarmonyOS NEXT:UA 含 `OpenHarmony` / `ArkWeb`,不含 `Android`
53
+ * - 旧版鸿蒙 HarmonyOS 4 及以前:UA 含 `HarmonyOS` / `HMSCore`,同时含 `Android`
54
54
  */
55
55
  var isHarmonyOS = function isHarmonyOS() {
56
56
  var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getUA();
57
57
  return regexpHarmonyOS().test(ua);
58
58
  };
59
59
 
60
- /**
61
- * 是否为纯血鸿蒙(HarmonyOS NEXT,5.x)
62
- *
63
- * UA 含 `OpenHarmony` 或 `Harmony/x.y`,且不再是 AOSP 兼容架构,不含 `Android`。
64
- * 需要与旧版鸿蒙区分时使用。
60
+ /**
61
+ * 是否为纯血鸿蒙(HarmonyOS NEXT,5.x)
62
+ *
63
+ * UA 含 `OpenHarmony` 或 `Harmony/x.y`,且不再是 AOSP 兼容架构,不含 `Android`。
64
+ * 需要与旧版鸿蒙区分时使用。
65
65
  */
66
66
  var isHarmonyOSNext = function isHarmonyOSNext() {
67
67
  var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getUA();
@@ -69,10 +69,10 @@ var isHarmonyOSNext = function isHarmonyOSNext() {
69
69
  return regexpHarmonyOSNext().test(ua) || regexpArkWeb().test(ua);
70
70
  };
71
71
 
72
- /**
73
- * 是否为旧版鸿蒙(HarmonyOS 4 及以前,兼容 AOSP)
74
- *
75
- * UA 同时包含 `Android` 与鸿蒙标识,可正常安装 Android APK。
72
+ /**
73
+ * 是否为旧版鸿蒙(HarmonyOS 4 及以前,兼容 AOSP)
74
+ *
75
+ * UA 同时包含 `Android` 与鸿蒙标识,可正常安装 Android APK。
76
76
  */
77
77
  var isHarmonyOSLegacy = function isHarmonyOSLegacy() {
78
78
  var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getUA();
@@ -101,11 +101,11 @@ var isInWebview = function isInWebview() {
101
101
  return /Client|DeutolsWebSDK|UnrealEngine|PlayStation/i.test(ua);
102
102
  };
103
103
 
104
- /**
105
- * 获取操作系统类型
106
- *
107
- * 鸿蒙必须最先判断:旧版鸿蒙兼容 AOSP,其 appVersion 与 UA 中同时含 `Linux` 和 `Android`,
108
- * 若先匹配 `linux` 分支,鸿蒙会被吞成 `linux`,新增的 `harmonyos` 分支永远走不到。
104
+ /**
105
+ * 获取操作系统类型
106
+ *
107
+ * 鸿蒙必须最先判断:旧版鸿蒙兼容 AOSP,其 appVersion 与 UA 中同时含 `Linux` 和 `Android`,
108
+ * 若先匹配 `linux` 分支,鸿蒙会被吞成 `linux`,新增的 `harmonyos` 分支永远走不到。
109
109
  */
110
110
  var getOS = function getOS() {
111
111
  var userAgent = getUA();
package/dist/regexp.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { regexpEmail, regexpPhone } from "./constant/regexp";
2
2
 
3
- /**
4
- * 校验邮箱
5
- * 正则构造或匹配失败(如浏览器不支持对应语法)时返回 false,不向上抛错
6
- * @param value 待校验的值
3
+ /**
4
+ * 校验邮箱
5
+ * 正则构造或匹配失败(如浏览器不支持对应语法)时返回 false,不向上抛错
6
+ * @param value 待校验的值
7
7
  */
8
8
  export var isEmail = function isEmail(value) {
9
9
  try {
@@ -13,10 +13,10 @@ export var isEmail = function isEmail(value) {
13
13
  }
14
14
  };
15
15
 
16
- /**
17
- * 校验手机号(中国大陆 11 位)
18
- * 正则构造或匹配失败(如浏览器不支持对应语法)时返回 false,不向上抛错
19
- * @param value 待校验的值
16
+ /**
17
+ * 校验手机号(中国大陆 11 位)
18
+ * 正则构造或匹配失败(如浏览器不支持对应语法)时返回 false,不向上抛错
19
+ * @param value 待校验的值
20
20
  */
21
21
  export var isPhone = function isPhone(value) {
22
22
  try {
package/dist/storage.js CHANGED
@@ -5,8 +5,8 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
5
5
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
6
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
7
7
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
- /**
9
- * 在 App 壳未提供浏览器存储时,回退到内存存储,避免读写时抛出异常。
8
+ /**
9
+ * 在 App 壳未提供浏览器存储时,回退到内存存储,避免读写时抛出异常。
10
10
  */
11
11
 
12
12
  var noSupportLS = function noSupportLS(type) {
package/dist/url.js CHANGED
@@ -85,16 +85,16 @@ var splitUrl = function splitUrl(href) {
85
85
  };
86
86
  };
87
87
 
88
- /**
89
- * 通过 history.replaceState 修改地址栏参数,不触发页面刷新。
90
- *
91
- * - 同名参数以传入值为准,未传入的原有参数保持不变
92
- * - 值为 `null` / `undefined` / `''` 时删除该参数
93
- * - hash 路由(`/#/home?page=1`)时参数写在 hash 内
94
- *
95
- * @param params 需要合并进地址的参数
96
- * @param url 目标地址,默认为当前页面地址
97
- * @returns 替换后的完整地址
88
+ /**
89
+ * 通过 history.replaceState 修改地址栏参数,不触发页面刷新。
90
+ *
91
+ * - 同名参数以传入值为准,未传入的原有参数保持不变
92
+ * - 值为 `null` / `undefined` / `''` 时删除该参数
93
+ * - hash 路由(`/#/home?page=1`)时参数写在 hash 内
94
+ *
95
+ * @param params 需要合并进地址的参数
96
+ * @param url 目标地址,默认为当前页面地址
97
+ * @returns 替换后的完整地址
98
98
  */
99
99
  export function replaceUrl(params, url) {
100
100
  var _window$history;
package/package.json CHANGED
@@ -1,16 +1,20 @@
1
1
  {
2
2
  "name": "@wapri/gbase",
3
- "version": "1.0.1",
3
+ "version": "2.0.1",
4
4
  "description": "前端基础公共库",
5
5
  "keywords": [],
6
- "license": "UNLICENSED",
7
- "author": "wa",
8
- "sideEffects": false,
9
- "module": "dist/index.js",
10
- "types": "dist/index.d.ts",
6
+ "license": "MIT",
7
+ "author": "wapri contributors",
11
8
  "files": [
12
9
  "dist"
13
10
  ],
11
+ "sideEffects": false,
12
+ "module": "dist/index.js",
13
+ "types": "dist/index.d.ts",
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "registry": "https://registry.npmjs.org/"
17
+ },
14
18
  "dependencies": {
15
19
  "copy-to-clipboard": "^4.0.2",
16
20
  "currency.js": "^2.0.4",
@@ -24,13 +28,9 @@
24
28
  "@types/js-cookie": "^3.0.6",
25
29
  "@types/lodash-es": "^4.17.12"
26
30
  },
27
- "publishConfig": {
28
- "access": "public",
29
- "registry": "https://registry.npmjs.org/"
30
- },
31
31
  "peerDependenciesMeta": {},
32
32
  "scripts": {
33
- "build": "father build",
33
+ "build": "node ../../scripts/clean-dist.mjs && father build",
34
34
  "dev": "father dev"
35
35
  }
36
36
  }
package/dist/auth.d.ts DELETED
@@ -1,40 +0,0 @@
1
- import { type PlatformType } from './platform';
2
- export declare const systemType: {
3
- readonly PLATFORM: "PLATFORM";
4
- readonly MERCHANT: "MERCHANT";
5
- readonly MAITIAN: "MAITIAN";
6
- };
7
- export type SystemType = (typeof systemType)[keyof typeof systemType];
8
- /** 读取当前登录主体类型(内存态,由 Account 实例写入)。 */
9
- export declare const getCurrentUserType: () => SystemType | '';
10
- /** 写入当前登录主体类型(内存态,由 Account 实例调用)。 */
11
- export declare const setCurrentUserType: (userType: SystemType | '') => void;
12
- /**
13
- * 身份判断使用的平台参数名。
14
- *
15
- * 加 `kaimai-` 前缀,避免和业务自身常见的 `platform` 参数撞车:
16
- * 业务链接里带一个无关的 `platform=xxx` 就会把登录主体判错。
17
- */
18
- export declare const PLATFORM_URL_PARAM = "kaimai-platform";
19
- /** 读取 URL 上的平台参数;未传或非法时返回空字符串。 */
20
- export declare const getUrlPlatform: () => PlatformType | '';
21
- /**
22
- * 按 location.origin 识别部署域:
23
- * - `admin-xxx.xxx.com` / `admin.xxx.com` → 平台端
24
- * - `merchant-xxx.xxx.com` / `merchant.xxx.com` → 商家端
25
- */
26
- export declare const resolveOriginPlatform: (origin: string) => PlatformType | '';
27
- /** 读取当前 location.origin 对应的平台标识。 */
28
- export declare const getOriginPlatform: () => PlatformType | '';
29
- /**
30
- * 判断当前是否为平台端。
31
- *
32
- * 优先级:部署域(location.origin)> URL `kaimai-platform` 参数 > Account 实例写入的当前主体。
33
- * 部署域命中时以域名锁定为准,避免在 admin/merchant 业务域上被 URL 参数串用。
34
- */
35
- export declare const systemPlatform: () => boolean;
36
- export declare const systemMerchant: () => boolean;
37
- export declare const systemMaitian: () => boolean;
38
- export declare const getToken: () => string | null;
39
- export declare const setToken: (token: string) => void;
40
- export declare const removeToken: () => void;
package/dist/auth.js DELETED
@@ -1,128 +0,0 @@
1
- import { default as Cookies } from 'js-cookie';
2
- import { isPlatformType, platformType } from "./platform";
3
- import { storage } from "./storage";
4
- import { getUrlParam } from "./url";
5
- var TokenKey = 'Admin-Token';
6
- var tokenKeyMerchant = 'Admin-Token-MERCHANT';
7
- var tokenKeyPlatform = 'Admin-Token-PLATFORM';
8
- var tokenKeyMaitian = 'Admin-Token-MAITIAN';
9
- export var systemType = {
10
- PLATFORM: 'PLATFORM',
11
- MERCHANT: 'MERCHANT',
12
- MAITIAN: 'MAITIAN'
13
- };
14
- /**
15
- * 当前登录主体,只保存在内存中。
16
- *
17
- * 主体归属由 `@wapri/gaccount` 的 Account 实例按自身 platform 决定,
18
- * 不再落 storage:避免多平台页面共用同一份持久化主体而读错 Token。
19
- */
20
- var currentUserType = '';
21
-
22
- /** 读取当前登录主体类型(内存态,由 Account 实例写入)。 */
23
- export var getCurrentUserType = function getCurrentUserType() {
24
- return currentUserType;
25
- };
26
-
27
- /** 写入当前登录主体类型(内存态,由 Account 实例调用)。 */
28
- export var setCurrentUserType = function setCurrentUserType(userType) {
29
- currentUserType = userType;
30
- };
31
-
32
- /**
33
- * 网关 JWT 较长,不能放 Cookie:浏览器会自动带上 Admin-Token,
34
- * 与 Authorization: Bearer 同时出现时权限中心会返回 401。
35
- * Token 仅存 localStorage,请求时由 axios 写入 Authorization。
36
- */
37
- function clearLegacyTokenCookie() {
38
- Cookies.remove(TokenKey);
39
- Cookies.remove(TokenKey, {
40
- path: '/'
41
- });
42
- }
43
-
44
- /**
45
- * 身份判断使用的平台参数名。
46
- *
47
- * 加 `kaimai-` 前缀,避免和业务自身常见的 `platform` 参数撞车:
48
- * 业务链接里带一个无关的 `platform=xxx` 就会把登录主体判错。
49
- */
50
- export var PLATFORM_URL_PARAM = 'kaimai-platform';
51
-
52
- /** 读取 URL 上的平台参数;未传或非法时返回空字符串。 */
53
- export var getUrlPlatform = function getUrlPlatform() {
54
- if (typeof window === 'undefined') return '';
55
- var value = String(getUrlParam(PLATFORM_URL_PARAM) || '').toLowerCase();
56
- return isPlatformType(value) ? value : '';
57
- };
58
-
59
- /**
60
- * 按 location.origin 识别部署域:
61
- * - `admin-xxx.xxx.com` / `admin.xxx.com` → 平台端
62
- * - `merchant-xxx.xxx.com` / `merchant.xxx.com` → 商家端
63
- */
64
- export var resolveOriginPlatform = function resolveOriginPlatform(origin) {
65
- var normalized = origin.toLowerCase();
66
- if (/^https?:\/\/admin[.-]/.test(normalized)) return platformType.KAIMAI_ADMIN;
67
- if (/^https?:\/\/merchant[.-]/.test(normalized)) return platformType.KAIMAI_MERCHANT;
68
- return '';
69
- };
70
-
71
- /** 读取当前 location.origin 对应的平台标识。 */
72
- export var getOriginPlatform = function getOriginPlatform() {
73
- if (typeof window === 'undefined') return '';
74
- return resolveOriginPlatform(window.location.origin);
75
- };
76
-
77
- /**
78
- * 判断当前是否为平台端。
79
- *
80
- * 优先级:部署域(location.origin)> URL `kaimai-platform` 参数 > Account 实例写入的当前主体。
81
- * 部署域命中时以域名锁定为准,避免在 admin/merchant 业务域上被 URL 参数串用。
82
- */
83
- export var systemPlatform = function systemPlatform() {
84
- var originPlatform = getOriginPlatform();
85
- if (originPlatform) return originPlatform === platformType.KAIMAI_ADMIN;
86
- var urlPlatform = getUrlPlatform();
87
- if (urlPlatform) return urlPlatform === platformType.KAIMAI_ADMIN;
88
- return currentUserType === systemType.PLATFORM;
89
- };
90
- export var systemMerchant = function systemMerchant() {
91
- var originPlatform = getOriginPlatform();
92
- if (originPlatform) return originPlatform === platformType.KAIMAI_MERCHANT;
93
- var urlPlatform = getUrlPlatform();
94
- if (urlPlatform) return urlPlatform === platformType.KAIMAI_MERCHANT;
95
- return currentUserType === systemType.MERCHANT;
96
- };
97
- export var systemMaitian = function systemMaitian() {
98
- var originPlatform = getOriginPlatform();
99
- if (originPlatform) return originPlatform === platformType.MAITIAN;
100
- var urlPlatform = getUrlPlatform();
101
- if (urlPlatform) return urlPlatform === platformType.MAITIAN;
102
- return currentUserType === systemType.MAITIAN;
103
- };
104
- var getTokenKey = function getTokenKey() {
105
- if (systemPlatform()) {
106
- return tokenKeyPlatform;
107
- }
108
- if (systemMerchant()) {
109
- return tokenKeyMerchant;
110
- }
111
- if (systemMaitian()) {
112
- return tokenKeyMaitian;
113
- }
114
- return TokenKey;
115
- };
116
- export var getToken = function getToken() {
117
- // 历史版本会把 token 写进 Cookie,每次读取时顺带清掉,避免继续随请求发出
118
- clearLegacyTokenCookie();
119
- return storage.getItem(getTokenKey());
120
- };
121
- export var setToken = function setToken(token) {
122
- clearLegacyTokenCookie();
123
- storage.setItem(getTokenKey(), token);
124
- };
125
- export var removeToken = function removeToken() {
126
- clearLegacyTokenCookie();
127
- storage.removeItem(getTokenKey());
128
- };
@@ -1,10 +0,0 @@
1
- /** 业务平台标识,同时用于账号中心 URL 的 platform 参数。 */
2
- export declare const platformType: {
3
- readonly KAIMAI_ADMIN: "kaimai-admin";
4
- readonly KAIMAI_MERCHANT: "kaimai-merchant";
5
- readonly MAITIAN: "maitian";
6
- };
7
- export type PlatformType = (typeof platformType)[keyof typeof platformType];
8
- export declare const platformTypes: PlatformType[];
9
- /** 判断值是否为受支持的平台标识。 */
10
- export declare const isPlatformType: (value: unknown) => value is PlatformType;
package/dist/platform.js DELETED
@@ -1,12 +0,0 @@
1
- /** 业务平台标识,同时用于账号中心 URL 的 platform 参数。 */
2
- export var platformType = {
3
- KAIMAI_ADMIN: 'kaimai-admin',
4
- KAIMAI_MERCHANT: 'kaimai-merchant',
5
- MAITIAN: 'maitian'
6
- };
7
- export var platformTypes = Object.values(platformType);
8
-
9
- /** 判断值是否为受支持的平台标识。 */
10
- export var isPlatformType = function isPlatformType(value) {
11
- return typeof value === 'string' && platformTypes.includes(value);
12
- };