@norcy/react-native-toolkit 0.1.119 → 0.1.121
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/lib/commonjs/PrefData.js +5 -0
- package/lib/commonjs/PrefData.js.map +1 -1
- package/lib/commonjs/VersionManager.js +35 -23
- package/lib/commonjs/VersionManager.js.map +1 -1
- package/lib/module/PrefData.js +5 -0
- package/lib/module/PrefData.js.map +1 -1
- package/lib/module/VersionManager.js +36 -24
- package/lib/module/VersionManager.js.map +1 -1
- package/lib/typescript/VersionManager.d.ts +3 -1
- package/package.json +1 -1
- package/src/PrefData.ts +5 -0
- package/src/VersionManager.ts +55 -25
package/lib/commonjs/PrefData.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_asyncStorage","_interopRequireDefault","require","obj","__esModule","default","EventEmitter","eventEmitter","isDataLoaded","_PrefDatas","BuildInPrefs","exports","LastLoginType","key","type","DevVip","DevDanger","FrequenceConfig","Messages","ClearBadge","RegisterInThisDevice","LanguageMode","DisplayMode","Vibrate","getPrefByKey","Prefs","keyOfPref","PrefData","load","initPrefs","console","log","keys","pref","push","values","getMultiDatas","i","length","value","JSON","parse","parseInt","emit","getValue","setValue","finalValue","stringify","toString","storeData","addListener","callback","on","addListenerOnce","once","error","AsyncStorage","setItem","e","multiGet"],"sources":["PrefData.ts"],"sourcesContent":["import AsyncStorage from '@react-native-community/async-storage';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\nlet isDataLoaded = false;\n\nexport interface PrefType {\n key: string;\n type: string;\n default: any;\n}\n\nexport interface PrefsType {\n [key: string]: PrefType;\n}\n\nconst _PrefDatas: { [key: string]: any } = {};\n\nexport const BuildInPrefs: PrefsType = {\n LastLoginType: {\n key: 'LastLoginType_Key',\n type: 'int',\n default: -1,\n },\n DevVip: {\n key: 'DevVip_Key',\n type: 'int',\n default: 0,\n },\n DevDanger: {\n key: 'DevDanger_Key',\n type: 'int',\n default: 0,\n },\n FrequenceConfig: {\n key: 'FrequenceConfig_Key',\n type: 'object',\n default: {},\n },\n Messages: {\n key: 'Message_Key5',\n type: 'array',\n default: [],\n },\n ClearBadge: {\n key: 'BADGE_DATA_KEY_20230307',\n type: 'array',\n default: [],\n },\n RegisterInThisDevice: {\n key: 'RegisterInThisDevice_Key',\n type: 'bool',\n default: false,\n },\n LanguageMode: {\n key: 'Language_MODE_SELECT_KEY',\n type: 'int',\n default: 0,\n },\n DisplayMode: {\n key: 'Display_MODE_SELECT_KEY',\n type: 'int',\n default: 0,\n },\n Vibrate: {\n key: 'Vibrate',\n type: 'bool',\n default: true,\n },\n};\n\nconst getPrefByKey = (Prefs: PrefsType, key: string) => {\n for (const keyOfPref in Prefs) {\n if (Prefs[keyOfPref].key === key) {\n return Prefs[keyOfPref];\n }\n }\n return null;\n};\n\nexport const PrefData = {\n load: async (initPrefs: PrefsType) => {\n console.log('读取配置');\n let keys: string[] = [];\n const Prefs = { ...BuildInPrefs, ...initPrefs };\n for (const pref in Prefs) {\n keys.push(Prefs[pref].key);\n }\n const values = await getMultiDatas(keys);\n\n for (let i = 0; i < values.length; i++) {\n const key = values[i][0];\n const value = values[i][1];\n const pref = getPrefByKey(Prefs, key);\n if (!pref) {\n continue;\n }\n // console.log(key, value, pref);\n if (!value) {\n _PrefDatas[key] = pref.default;\n } else if (pref.type === 'object' || pref.type === 'array') {\n _PrefDatas[key] = JSON.parse(value);\n } else if (pref.type === 'int') {\n _PrefDatas[key] = parseInt(value, 10);\n } else if (pref.type === 'bool') {\n _PrefDatas[key] = JSON.parse(value);\n } else {\n _PrefDatas[key] = value;\n }\n\n // console.log(\n // '配置读取结果:',\n // key,\n // _PrefDatas[key],\n // typeof _PrefDatas[key],\n // );\n }\n\n console.log('读取配置结束');\n isDataLoaded = true;\n eventEmitter.emit('load');\n },\n\n getValue: (pref: PrefType) => {\n return _PrefDatas[pref.key];\n },\n\n setValue: async (pref: PrefType, value: any) => {\n const key = pref.key;\n let finalValue: string;\n _PrefDatas[key] = value;\n if (pref.type === 'object' || pref.type === 'array') {\n finalValue = JSON.stringify(value);\n } else if (pref.type === 'int') {\n finalValue = value.toString();\n } else if (pref.type === 'bool') {\n finalValue = value.toString();\n } else {\n finalValue = value;\n }\n\n await storeData(key, finalValue);\n },\n\n addListener: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.on('load', callback);\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.once('load', callback);\n },\n};\n\nconst storeData = async (key: string, value: string) => {\n try {\n if (typeof value !== 'string') {\n console.error('只接受 String');\n }\n // console.log('save to storage ' + value);\n await AsyncStorage.setItem(key, value);\n } catch (e) {\n console.error(e);\n }\n};\n\nconst getMultiDatas = async (keys: string[]) => {\n try {\n const values = await AsyncStorage.multiGet(keys);\n // console.log('read from storage ' + values);\n return values;\n } catch (e) {\n console.error(e);\n return [];\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAiE,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEjE,MAAMG,YAAY,GAAGJ,OAAO,CAAC,QAAQ,CAAC,CAACI,YAAY;AACnD,MAAMC,YAAY,GAAG,IAAID,YAAY,CAAC,CAAC;AAEvC,IAAIE,YAAY,GAAG,KAAK;AAYxB,MAAMC,UAAkC,GAAG,CAAC,CAAC;AAEtC,MAAMC,YAAuB,GAAAC,OAAA,CAAAD,YAAA,GAAG;EACrCE,aAAa,EAAE;IACbC,GAAG,EAAE,mBAAmB;IACxBC,IAAI,EAAE,KAAK;IACXT,OAAO,EAAE,CAAC;EACZ,CAAC;EACDU,MAAM,EAAE;IACNF,GAAG,EAAE,YAAY;IACjBC,IAAI,EAAE,KAAK;IACXT,OAAO,EAAE;EACX,CAAC;EACDW,SAAS,EAAE;IACTH,GAAG,EAAE,eAAe;IACpBC,IAAI,EAAE,KAAK;IACXT,OAAO,EAAE;EACX,CAAC;EACDY,eAAe,EAAE;IACfJ,GAAG,EAAE,qBAAqB;IAC1BC,IAAI,EAAE,QAAQ;IACdT,OAAO,EAAE,CAAC;EACZ,CAAC;EACDa,QAAQ,EAAE;IACRL,GAAG,EAAE,cAAc;IACnBC,IAAI,EAAE,OAAO;IACbT,OAAO,EAAE;EACX,CAAC;EACDc,UAAU,EAAE;IACVN,GAAG,EAAE,yBAAyB;IAC9BC,IAAI,EAAE,OAAO;IACbT,OAAO,EAAE;EACX,CAAC;EACDe,oBAAoB,EAAE;IACpBP,GAAG,EAAE,0BAA0B;IAC/BC,IAAI,EAAE,MAAM;IACZT,OAAO,EAAE;EACX,CAAC;EACDgB,YAAY,EAAE;IACZR,GAAG,EAAE,0BAA0B;IAC/BC,IAAI,EAAE,KAAK;IACXT,OAAO,EAAE;EACX,CAAC;EACDiB,WAAW,EAAE;IACXT,GAAG,EAAE,yBAAyB;IAC9BC,IAAI,EAAE,KAAK;IACXT,OAAO,EAAE;EACX,CAAC;EACDkB,OAAO,EAAE;IACPV,GAAG,EAAE,SAAS;IACdC,IAAI,EAAE,MAAM;IACZT,OAAO,EAAE;EACX;AACF,CAAC;AAED,
|
1
|
+
{"version":3,"names":["_asyncStorage","_interopRequireDefault","require","obj","__esModule","default","EventEmitter","eventEmitter","isDataLoaded","_PrefDatas","BuildInPrefs","exports","LastLoginType","key","type","DevVip","DevDanger","FrequenceConfig","Messages","ClearBadge","RegisterInThisDevice","LanguageMode","DisplayMode","Vibrate","CurrentBundleVersion","getPrefByKey","Prefs","keyOfPref","PrefData","load","initPrefs","console","log","keys","pref","push","values","getMultiDatas","i","length","value","JSON","parse","parseInt","emit","getValue","setValue","finalValue","stringify","toString","storeData","addListener","callback","on","addListenerOnce","once","error","AsyncStorage","setItem","e","multiGet"],"sources":["PrefData.ts"],"sourcesContent":["import AsyncStorage from '@react-native-community/async-storage';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\nlet isDataLoaded = false;\n\nexport interface PrefType {\n key: string;\n type: string;\n default: any;\n}\n\nexport interface PrefsType {\n [key: string]: PrefType;\n}\n\nconst _PrefDatas: { [key: string]: any } = {};\n\nexport const BuildInPrefs: PrefsType = {\n LastLoginType: {\n key: 'LastLoginType_Key',\n type: 'int',\n default: -1,\n },\n DevVip: {\n key: 'DevVip_Key',\n type: 'int',\n default: 0,\n },\n DevDanger: {\n key: 'DevDanger_Key',\n type: 'int',\n default: 0,\n },\n FrequenceConfig: {\n key: 'FrequenceConfig_Key',\n type: 'object',\n default: {},\n },\n Messages: {\n key: 'Message_Key5',\n type: 'array',\n default: [],\n },\n ClearBadge: {\n key: 'BADGE_DATA_KEY_20230307',\n type: 'array',\n default: [],\n },\n RegisterInThisDevice: {\n key: 'RegisterInThisDevice_Key',\n type: 'bool',\n default: false,\n },\n LanguageMode: {\n key: 'Language_MODE_SELECT_KEY',\n type: 'int',\n default: 0,\n },\n DisplayMode: {\n key: 'Display_MODE_SELECT_KEY',\n type: 'int',\n default: 0,\n },\n Vibrate: {\n key: 'Vibrate',\n type: 'bool',\n default: true,\n },\n CurrentBundleVersion: {\n key: 'CurrentBundleVersion',\n type: 'int',\n default: 0,\n },\n};\n\nconst getPrefByKey = (Prefs: PrefsType, key: string) => {\n for (const keyOfPref in Prefs) {\n if (Prefs[keyOfPref].key === key) {\n return Prefs[keyOfPref];\n }\n }\n return null;\n};\n\nexport const PrefData = {\n load: async (initPrefs: PrefsType) => {\n console.log('读取配置');\n let keys: string[] = [];\n const Prefs = { ...BuildInPrefs, ...initPrefs };\n for (const pref in Prefs) {\n keys.push(Prefs[pref].key);\n }\n const values = await getMultiDatas(keys);\n\n for (let i = 0; i < values.length; i++) {\n const key = values[i][0];\n const value = values[i][1];\n const pref = getPrefByKey(Prefs, key);\n if (!pref) {\n continue;\n }\n // console.log(key, value, pref);\n if (!value) {\n _PrefDatas[key] = pref.default;\n } else if (pref.type === 'object' || pref.type === 'array') {\n _PrefDatas[key] = JSON.parse(value);\n } else if (pref.type === 'int') {\n _PrefDatas[key] = parseInt(value, 10);\n } else if (pref.type === 'bool') {\n _PrefDatas[key] = JSON.parse(value);\n } else {\n _PrefDatas[key] = value;\n }\n\n // console.log(\n // '配置读取结果:',\n // key,\n // _PrefDatas[key],\n // typeof _PrefDatas[key],\n // );\n }\n\n console.log('读取配置结束');\n isDataLoaded = true;\n eventEmitter.emit('load');\n },\n\n getValue: (pref: PrefType) => {\n return _PrefDatas[pref.key];\n },\n\n setValue: async (pref: PrefType, value: any) => {\n const key = pref.key;\n let finalValue: string;\n _PrefDatas[key] = value;\n if (pref.type === 'object' || pref.type === 'array') {\n finalValue = JSON.stringify(value);\n } else if (pref.type === 'int') {\n finalValue = value.toString();\n } else if (pref.type === 'bool') {\n finalValue = value.toString();\n } else {\n finalValue = value;\n }\n\n await storeData(key, finalValue);\n },\n\n addListener: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.on('load', callback);\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.once('load', callback);\n },\n};\n\nconst storeData = async (key: string, value: string) => {\n try {\n if (typeof value !== 'string') {\n console.error('只接受 String');\n }\n // console.log('save to storage ' + value);\n await AsyncStorage.setItem(key, value);\n } catch (e) {\n console.error(e);\n }\n};\n\nconst getMultiDatas = async (keys: string[]) => {\n try {\n const values = await AsyncStorage.multiGet(keys);\n // console.log('read from storage ' + values);\n return values;\n } catch (e) {\n console.error(e);\n return [];\n }\n};\n"],"mappings":"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"}
|
@@ -12,10 +12,9 @@ const semverGte = require('semver/functions/gte');
|
|
12
12
|
const semverCoerce = require('semver/functions/coerce');
|
13
13
|
let VersionInfo = {
|
14
14
|
currentAppVersion: semverCoerce((0, _reactNativeDeviceInfo.getReadableVersion)()).version,
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
hasNewBundleVersion: false
|
15
|
+
latestAppVersion: semverCoerce((0, _reactNativeDeviceInfo.getReadableVersion)()).version,
|
16
|
+
currentBundleVersion: 0,
|
17
|
+
latestBundleVersion: 0
|
19
18
|
};
|
20
19
|
const VersionManager = exports.VersionManager = {
|
21
20
|
init: _ref => {
|
@@ -24,40 +23,53 @@ const VersionManager = exports.VersionManager = {
|
|
24
23
|
latestBundleVersion
|
25
24
|
} = _ref;
|
26
25
|
if (latestAppVersion) {
|
27
|
-
|
28
|
-
// online > current,才有新版本
|
29
|
-
if (semverGt(onlineVersion, VersionInfo.currentAppVersion)) {
|
30
|
-
VersionInfo.hasNewAppVersion = true;
|
31
|
-
}
|
32
|
-
// current > online,就危险
|
33
|
-
if (semverGt(VersionInfo.currentAppVersion, onlineVersion)) {
|
34
|
-
VersionInfo.isDanger = true;
|
35
|
-
}
|
36
|
-
}
|
37
|
-
if (__DEV__ && _DevConfig.DevConfig.hasValue(_PrefData.BuildInPrefs.DevDanger)) {
|
38
|
-
VersionInfo.isDanger = _DevConfig.DevConfig.getValue(_PrefData.BuildInPrefs.DevDanger);
|
26
|
+
VersionInfo.latestAppVersion = semverCoerce(latestAppVersion).version;
|
39
27
|
}
|
40
28
|
if (latestBundleVersion) {
|
41
|
-
|
42
|
-
if (semverGt(onlineVersion, VersionInfo.currentBundleVersion)) {
|
43
|
-
VersionInfo.hasNewBundleVersion = true;
|
44
|
-
}
|
29
|
+
VersionInfo.latestBundleVersion = semverCoerce(latestBundleVersion).version;
|
45
30
|
}
|
31
|
+
_PrefData.PrefData.addListenerOnce(() => {
|
32
|
+
VersionInfo.currentBundleVersion = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.CurrentBundleVersion);
|
33
|
+
});
|
46
34
|
},
|
47
35
|
isDanger: () => {
|
48
|
-
|
36
|
+
if (__DEV__ && _DevConfig.DevConfig.hasValue(_PrefData.BuildInPrefs.DevDanger)) {
|
37
|
+
return _DevConfig.DevConfig.getValue(_PrefData.BuildInPrefs.DevDanger);
|
38
|
+
}
|
39
|
+
// current > online,就危险
|
40
|
+
if (semverGt(VersionInfo.currentAppVersion, VersionInfo.latestAppVersion)) {
|
41
|
+
return true;
|
42
|
+
}
|
43
|
+
return false;
|
49
44
|
},
|
50
45
|
appVer: () => {
|
51
46
|
return VersionInfo.currentAppVersion;
|
52
47
|
},
|
48
|
+
setBundleVer: bundleVer => {
|
49
|
+
if (bundleVer) {
|
50
|
+
VersionInfo.currentBundleVersion = semverCoerce(bundleVer).version;
|
51
|
+
_PrefData.PrefData.setValue(_PrefData.BuildInPrefs.CurrentBundleVersion, VersionInfo.currentBundleVersion);
|
52
|
+
}
|
53
|
+
},
|
53
54
|
bundleVer: () => {
|
54
55
|
return VersionInfo.currentBundleVersion;
|
55
56
|
},
|
57
|
+
getReadableVersion: () => {
|
58
|
+
return VersionInfo.currentAppVersion + (VersionInfo.currentBundleVersion ? '(' + VersionInfo.currentBundleVersion + ')' : '');
|
59
|
+
},
|
56
60
|
hasNewAppVer: () => {
|
57
|
-
|
61
|
+
// online > current,才有新版本
|
62
|
+
if (semverGt(VersionInfo.latestAppVersion, VersionInfo.currentAppVersion)) {
|
63
|
+
return true;
|
64
|
+
}
|
65
|
+
return false;
|
58
66
|
},
|
59
67
|
hasNewBundleVer: () => {
|
60
|
-
|
68
|
+
// latestBundleVersion 如果没命中,则为 0,此时判断为无新 Bundle
|
69
|
+
if (semverGt(VersionInfo.latestBundleVersion, VersionInfo.currentBundleVersion)) {
|
70
|
+
return true;
|
71
|
+
}
|
72
|
+
return false;
|
61
73
|
},
|
62
74
|
isValidVersion: (minVer, maxVer) => {
|
63
75
|
var _minVer, _maxVer;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_reactNativeDeviceInfo","require","_DevConfig","_PrefData","semverGt","semverGte","semverCoerce","VersionInfo","currentAppVersion","getReadableVersion","version","
|
1
|
+
{"version":3,"names":["_reactNativeDeviceInfo","require","_DevConfig","_PrefData","semverGt","semverGte","semverCoerce","VersionInfo","currentAppVersion","getReadableVersion","version","latestAppVersion","currentBundleVersion","latestBundleVersion","VersionManager","exports","init","_ref","PrefData","addListenerOnce","getValue","BuildInPrefs","CurrentBundleVersion","isDanger","__DEV__","DevConfig","hasValue","DevDanger","appVer","setBundleVer","bundleVer","setValue","hasNewAppVer","hasNewBundleVer","isValidVersion","minVer","maxVer","_minVer","_maxVer","trim"],"sources":["VersionManager.ts"],"sourcesContent":["import { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { BuildInPrefs, PrefData } from './PrefData';\n\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nlet VersionInfo = {\n currentAppVersion: semverCoerce(getReadableVersion()).version,\n latestAppVersion: semverCoerce(getReadableVersion()).version,\n currentBundleVersion: 0,\n latestBundleVersion: 0,\n};\n\nexport const VersionManager = {\n init: ({\n latestAppVersion,\n latestBundleVersion,\n }: {\n latestAppVersion: string;\n latestBundleVersion?: string;\n }) => {\n if (latestAppVersion) {\n VersionInfo.latestAppVersion = semverCoerce(latestAppVersion).version;\n }\n\n if (latestBundleVersion) {\n VersionInfo.latestBundleVersion =\n semverCoerce(latestBundleVersion).version;\n }\n\n PrefData.addListenerOnce(() => {\n VersionInfo.currentBundleVersion = PrefData.getValue(\n BuildInPrefs.CurrentBundleVersion\n );\n });\n },\n\n isDanger: () => {\n if (__DEV__ && DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n return DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n // current > online,就危险\n if (semverGt(VersionInfo.currentAppVersion, VersionInfo.latestAppVersion)) {\n return true;\n }\n return false;\n },\n\n appVer: () => {\n return VersionInfo.currentAppVersion;\n },\n\n setBundleVer: (bundleVer: string) => {\n if (bundleVer) {\n VersionInfo.currentBundleVersion = semverCoerce(bundleVer).version;\n PrefData.setValue(\n BuildInPrefs.CurrentBundleVersion,\n VersionInfo.currentBundleVersion\n );\n }\n },\n\n bundleVer: () => {\n return VersionInfo.currentBundleVersion;\n },\n\n getReadableVersion: () => {\n return (\n VersionInfo.currentAppVersion +\n (VersionInfo.currentBundleVersion\n ? '(' + VersionInfo.currentBundleVersion + ')'\n : '')\n );\n },\n\n hasNewAppVer: () => {\n // online > current,才有新版本\n if (semverGt(VersionInfo.latestAppVersion, VersionInfo.currentAppVersion)) {\n return true;\n }\n return false;\n },\n\n hasNewBundleVer: () => {\n // latestBundleVersion 如果没命中,则为 0,此时判断为无新 Bundle\n if (\n semverGt(\n VersionInfo.latestBundleVersion,\n VersionInfo.currentBundleVersion\n )\n ) {\n return true;\n }\n return false;\n },\n\n isValidVersion: (minVer?: string, maxVer?: string) => {\n minVer = minVer?.trim();\n maxVer = maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (\n !!minVer &&\n semverGt(semverCoerce(minVer).version, VersionManager.appVer())\n ) {\n return false;\n }\n if (\n !!maxVer &&\n semverGte(VersionManager.appVer(), semverCoerce(maxVer).version)\n ) {\n return false;\n }\n return true;\n },\n};\n"],"mappings":"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"}
|
package/lib/module/PrefData.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["AsyncStorage","EventEmitter","require","eventEmitter","isDataLoaded","_PrefDatas","BuildInPrefs","LastLoginType","key","type","default","DevVip","DevDanger","FrequenceConfig","Messages","ClearBadge","RegisterInThisDevice","LanguageMode","DisplayMode","Vibrate","getPrefByKey","Prefs","keyOfPref","PrefData","load","initPrefs","console","log","keys","pref","push","values","getMultiDatas","i","length","value","JSON","parse","parseInt","emit","getValue","setValue","finalValue","stringify","toString","storeData","addListener","callback","on","addListenerOnce","once","error","setItem","e","multiGet"],"sources":["PrefData.ts"],"sourcesContent":["import AsyncStorage from '@react-native-community/async-storage';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\nlet isDataLoaded = false;\n\nexport interface PrefType {\n key: string;\n type: string;\n default: any;\n}\n\nexport interface PrefsType {\n [key: string]: PrefType;\n}\n\nconst _PrefDatas: { [key: string]: any } = {};\n\nexport const BuildInPrefs: PrefsType = {\n LastLoginType: {\n key: 'LastLoginType_Key',\n type: 'int',\n default: -1,\n },\n DevVip: {\n key: 'DevVip_Key',\n type: 'int',\n default: 0,\n },\n DevDanger: {\n key: 'DevDanger_Key',\n type: 'int',\n default: 0,\n },\n FrequenceConfig: {\n key: 'FrequenceConfig_Key',\n type: 'object',\n default: {},\n },\n Messages: {\n key: 'Message_Key5',\n type: 'array',\n default: [],\n },\n ClearBadge: {\n key: 'BADGE_DATA_KEY_20230307',\n type: 'array',\n default: [],\n },\n RegisterInThisDevice: {\n key: 'RegisterInThisDevice_Key',\n type: 'bool',\n default: false,\n },\n LanguageMode: {\n key: 'Language_MODE_SELECT_KEY',\n type: 'int',\n default: 0,\n },\n DisplayMode: {\n key: 'Display_MODE_SELECT_KEY',\n type: 'int',\n default: 0,\n },\n Vibrate: {\n key: 'Vibrate',\n type: 'bool',\n default: true,\n },\n};\n\nconst getPrefByKey = (Prefs: PrefsType, key: string) => {\n for (const keyOfPref in Prefs) {\n if (Prefs[keyOfPref].key === key) {\n return Prefs[keyOfPref];\n }\n }\n return null;\n};\n\nexport const PrefData = {\n load: async (initPrefs: PrefsType) => {\n console.log('读取配置');\n let keys: string[] = [];\n const Prefs = { ...BuildInPrefs, ...initPrefs };\n for (const pref in Prefs) {\n keys.push(Prefs[pref].key);\n }\n const values = await getMultiDatas(keys);\n\n for (let i = 0; i < values.length; i++) {\n const key = values[i][0];\n const value = values[i][1];\n const pref = getPrefByKey(Prefs, key);\n if (!pref) {\n continue;\n }\n // console.log(key, value, pref);\n if (!value) {\n _PrefDatas[key] = pref.default;\n } else if (pref.type === 'object' || pref.type === 'array') {\n _PrefDatas[key] = JSON.parse(value);\n } else if (pref.type === 'int') {\n _PrefDatas[key] = parseInt(value, 10);\n } else if (pref.type === 'bool') {\n _PrefDatas[key] = JSON.parse(value);\n } else {\n _PrefDatas[key] = value;\n }\n\n // console.log(\n // '配置读取结果:',\n // key,\n // _PrefDatas[key],\n // typeof _PrefDatas[key],\n // );\n }\n\n console.log('读取配置结束');\n isDataLoaded = true;\n eventEmitter.emit('load');\n },\n\n getValue: (pref: PrefType) => {\n return _PrefDatas[pref.key];\n },\n\n setValue: async (pref: PrefType, value: any) => {\n const key = pref.key;\n let finalValue: string;\n _PrefDatas[key] = value;\n if (pref.type === 'object' || pref.type === 'array') {\n finalValue = JSON.stringify(value);\n } else if (pref.type === 'int') {\n finalValue = value.toString();\n } else if (pref.type === 'bool') {\n finalValue = value.toString();\n } else {\n finalValue = value;\n }\n\n await storeData(key, finalValue);\n },\n\n addListener: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.on('load', callback);\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.once('load', callback);\n },\n};\n\nconst storeData = async (key: string, value: string) => {\n try {\n if (typeof value !== 'string') {\n console.error('只接受 String');\n }\n // console.log('save to storage ' + value);\n await AsyncStorage.setItem(key, value);\n } catch (e) {\n console.error(e);\n }\n};\n\nconst getMultiDatas = async (keys: string[]) => {\n try {\n const values = await AsyncStorage.multiGet(keys);\n // console.log('read from storage ' + values);\n return values;\n } catch (e) {\n console.error(e);\n return [];\n }\n};\n"],"mappings":"AAAA,OAAOA,YAAY,MAAM,uCAAuC;AAEhE,MAAMC,YAAY,GAAGC,OAAO,CAAC,QAAQ,CAAC,CAACD,YAAY;AACnD,MAAME,YAAY,GAAG,IAAIF,YAAY,CAAC,CAAC;AAEvC,IAAIG,YAAY,GAAG,KAAK;AAYxB,MAAMC,UAAkC,GAAG,CAAC,CAAC;AAE7C,OAAO,MAAMC,YAAuB,GAAG;EACrCC,aAAa,EAAE;IACbC,GAAG,EAAE,mBAAmB;IACxBC,IAAI,EAAE,KAAK;IACXC,OAAO,EAAE,CAAC;EACZ,CAAC;EACDC,MAAM,EAAE;IACNH,GAAG,EAAE,YAAY;IACjBC,IAAI,EAAE,KAAK;IACXC,OAAO,EAAE;EACX,CAAC;EACDE,SAAS,EAAE;IACTJ,GAAG,EAAE,eAAe;IACpBC,IAAI,EAAE,KAAK;IACXC,OAAO,EAAE;EACX,CAAC;EACDG,eAAe,EAAE;IACfL,GAAG,EAAE,qBAAqB;IAC1BC,IAAI,EAAE,QAAQ;IACdC,OAAO,EAAE,CAAC;EACZ,CAAC;EACDI,QAAQ,EAAE;IACRN,GAAG,EAAE,cAAc;IACnBC,IAAI,EAAE,OAAO;IACbC,OAAO,EAAE;EACX,CAAC;EACDK,UAAU,EAAE;IACVP,GAAG,EAAE,yBAAyB;IAC9BC,IAAI,EAAE,OAAO;IACbC,OAAO,EAAE;EACX,CAAC;EACDM,oBAAoB,EAAE;IACpBR,GAAG,EAAE,0BAA0B;IAC/BC,IAAI,EAAE,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDO,YAAY,EAAE;IACZT,GAAG,EAAE,0BAA0B;IAC/BC,IAAI,EAAE,KAAK;IACXC,OAAO,EAAE;EACX,CAAC;EACDQ,WAAW,EAAE;IACXV,GAAG,EAAE,yBAAyB;IAC9BC,IAAI,EAAE,KAAK;IACXC,OAAO,EAAE;EACX,CAAC;EACDS,OAAO,EAAE;IACPX,GAAG,EAAE,SAAS;IACdC,IAAI,EAAE,MAAM;IACZC,OAAO,EAAE;EACX;AACF,CAAC;AAED,
|
1
|
+
{"version":3,"names":["AsyncStorage","EventEmitter","require","eventEmitter","isDataLoaded","_PrefDatas","BuildInPrefs","LastLoginType","key","type","default","DevVip","DevDanger","FrequenceConfig","Messages","ClearBadge","RegisterInThisDevice","LanguageMode","DisplayMode","Vibrate","CurrentBundleVersion","getPrefByKey","Prefs","keyOfPref","PrefData","load","initPrefs","console","log","keys","pref","push","values","getMultiDatas","i","length","value","JSON","parse","parseInt","emit","getValue","setValue","finalValue","stringify","toString","storeData","addListener","callback","on","addListenerOnce","once","error","setItem","e","multiGet"],"sources":["PrefData.ts"],"sourcesContent":["import AsyncStorage from '@react-native-community/async-storage';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\nlet isDataLoaded = false;\n\nexport interface PrefType {\n key: string;\n type: string;\n default: any;\n}\n\nexport interface PrefsType {\n [key: string]: PrefType;\n}\n\nconst _PrefDatas: { [key: string]: any } = {};\n\nexport const BuildInPrefs: PrefsType = {\n LastLoginType: {\n key: 'LastLoginType_Key',\n type: 'int',\n default: -1,\n },\n DevVip: {\n key: 'DevVip_Key',\n type: 'int',\n default: 0,\n },\n DevDanger: {\n key: 'DevDanger_Key',\n type: 'int',\n default: 0,\n },\n FrequenceConfig: {\n key: 'FrequenceConfig_Key',\n type: 'object',\n default: {},\n },\n Messages: {\n key: 'Message_Key5',\n type: 'array',\n default: [],\n },\n ClearBadge: {\n key: 'BADGE_DATA_KEY_20230307',\n type: 'array',\n default: [],\n },\n RegisterInThisDevice: {\n key: 'RegisterInThisDevice_Key',\n type: 'bool',\n default: false,\n },\n LanguageMode: {\n key: 'Language_MODE_SELECT_KEY',\n type: 'int',\n default: 0,\n },\n DisplayMode: {\n key: 'Display_MODE_SELECT_KEY',\n type: 'int',\n default: 0,\n },\n Vibrate: {\n key: 'Vibrate',\n type: 'bool',\n default: true,\n },\n CurrentBundleVersion: {\n key: 'CurrentBundleVersion',\n type: 'int',\n default: 0,\n },\n};\n\nconst getPrefByKey = (Prefs: PrefsType, key: string) => {\n for (const keyOfPref in Prefs) {\n if (Prefs[keyOfPref].key === key) {\n return Prefs[keyOfPref];\n }\n }\n return null;\n};\n\nexport const PrefData = {\n load: async (initPrefs: PrefsType) => {\n console.log('读取配置');\n let keys: string[] = [];\n const Prefs = { ...BuildInPrefs, ...initPrefs };\n for (const pref in Prefs) {\n keys.push(Prefs[pref].key);\n }\n const values = await getMultiDatas(keys);\n\n for (let i = 0; i < values.length; i++) {\n const key = values[i][0];\n const value = values[i][1];\n const pref = getPrefByKey(Prefs, key);\n if (!pref) {\n continue;\n }\n // console.log(key, value, pref);\n if (!value) {\n _PrefDatas[key] = pref.default;\n } else if (pref.type === 'object' || pref.type === 'array') {\n _PrefDatas[key] = JSON.parse(value);\n } else if (pref.type === 'int') {\n _PrefDatas[key] = parseInt(value, 10);\n } else if (pref.type === 'bool') {\n _PrefDatas[key] = JSON.parse(value);\n } else {\n _PrefDatas[key] = value;\n }\n\n // console.log(\n // '配置读取结果:',\n // key,\n // _PrefDatas[key],\n // typeof _PrefDatas[key],\n // );\n }\n\n console.log('读取配置结束');\n isDataLoaded = true;\n eventEmitter.emit('load');\n },\n\n getValue: (pref: PrefType) => {\n return _PrefDatas[pref.key];\n },\n\n setValue: async (pref: PrefType, value: any) => {\n const key = pref.key;\n let finalValue: string;\n _PrefDatas[key] = value;\n if (pref.type === 'object' || pref.type === 'array') {\n finalValue = JSON.stringify(value);\n } else if (pref.type === 'int') {\n finalValue = value.toString();\n } else if (pref.type === 'bool') {\n finalValue = value.toString();\n } else {\n finalValue = value;\n }\n\n await storeData(key, finalValue);\n },\n\n addListener: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.on('load', callback);\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.once('load', callback);\n },\n};\n\nconst storeData = async (key: string, value: string) => {\n try {\n if (typeof value !== 'string') {\n console.error('只接受 String');\n }\n // console.log('save to storage ' + value);\n await AsyncStorage.setItem(key, value);\n } catch (e) {\n console.error(e);\n }\n};\n\nconst getMultiDatas = async (keys: string[]) => {\n try {\n const values = await AsyncStorage.multiGet(keys);\n // console.log('read from storage ' + values);\n return values;\n } catch (e) {\n console.error(e);\n return [];\n }\n};\n"],"mappings":"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"}
|
@@ -1,15 +1,14 @@
|
|
1
1
|
import { getReadableVersion } from 'react-native-device-info';
|
2
2
|
import { DevConfig } from './DevConfig';
|
3
|
-
import { BuildInPrefs } from './PrefData';
|
3
|
+
import { BuildInPrefs, PrefData } from './PrefData';
|
4
4
|
const semverGt = require('semver/functions/gt');
|
5
5
|
const semverGte = require('semver/functions/gte');
|
6
6
|
const semverCoerce = require('semver/functions/coerce');
|
7
7
|
let VersionInfo = {
|
8
8
|
currentAppVersion: semverCoerce(getReadableVersion()).version,
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
hasNewBundleVersion: false
|
9
|
+
latestAppVersion: semverCoerce(getReadableVersion()).version,
|
10
|
+
currentBundleVersion: 0,
|
11
|
+
latestBundleVersion: 0
|
13
12
|
};
|
14
13
|
export const VersionManager = {
|
15
14
|
init: _ref => {
|
@@ -18,40 +17,53 @@ export const VersionManager = {
|
|
18
17
|
latestBundleVersion
|
19
18
|
} = _ref;
|
20
19
|
if (latestAppVersion) {
|
21
|
-
|
22
|
-
// online > current,才有新版本
|
23
|
-
if (semverGt(onlineVersion, VersionInfo.currentAppVersion)) {
|
24
|
-
VersionInfo.hasNewAppVersion = true;
|
25
|
-
}
|
26
|
-
// current > online,就危险
|
27
|
-
if (semverGt(VersionInfo.currentAppVersion, onlineVersion)) {
|
28
|
-
VersionInfo.isDanger = true;
|
29
|
-
}
|
30
|
-
}
|
31
|
-
if (__DEV__ && DevConfig.hasValue(BuildInPrefs.DevDanger)) {
|
32
|
-
VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);
|
20
|
+
VersionInfo.latestAppVersion = semverCoerce(latestAppVersion).version;
|
33
21
|
}
|
34
22
|
if (latestBundleVersion) {
|
35
|
-
|
36
|
-
if (semverGt(onlineVersion, VersionInfo.currentBundleVersion)) {
|
37
|
-
VersionInfo.hasNewBundleVersion = true;
|
38
|
-
}
|
23
|
+
VersionInfo.latestBundleVersion = semverCoerce(latestBundleVersion).version;
|
39
24
|
}
|
25
|
+
PrefData.addListenerOnce(() => {
|
26
|
+
VersionInfo.currentBundleVersion = PrefData.getValue(BuildInPrefs.CurrentBundleVersion);
|
27
|
+
});
|
40
28
|
},
|
41
29
|
isDanger: () => {
|
42
|
-
|
30
|
+
if (__DEV__ && DevConfig.hasValue(BuildInPrefs.DevDanger)) {
|
31
|
+
return DevConfig.getValue(BuildInPrefs.DevDanger);
|
32
|
+
}
|
33
|
+
// current > online,就危险
|
34
|
+
if (semverGt(VersionInfo.currentAppVersion, VersionInfo.latestAppVersion)) {
|
35
|
+
return true;
|
36
|
+
}
|
37
|
+
return false;
|
43
38
|
},
|
44
39
|
appVer: () => {
|
45
40
|
return VersionInfo.currentAppVersion;
|
46
41
|
},
|
42
|
+
setBundleVer: bundleVer => {
|
43
|
+
if (bundleVer) {
|
44
|
+
VersionInfo.currentBundleVersion = semverCoerce(bundleVer).version;
|
45
|
+
PrefData.setValue(BuildInPrefs.CurrentBundleVersion, VersionInfo.currentBundleVersion);
|
46
|
+
}
|
47
|
+
},
|
47
48
|
bundleVer: () => {
|
48
49
|
return VersionInfo.currentBundleVersion;
|
49
50
|
},
|
51
|
+
getReadableVersion: () => {
|
52
|
+
return VersionInfo.currentAppVersion + (VersionInfo.currentBundleVersion ? '(' + VersionInfo.currentBundleVersion + ')' : '');
|
53
|
+
},
|
50
54
|
hasNewAppVer: () => {
|
51
|
-
|
55
|
+
// online > current,才有新版本
|
56
|
+
if (semverGt(VersionInfo.latestAppVersion, VersionInfo.currentAppVersion)) {
|
57
|
+
return true;
|
58
|
+
}
|
59
|
+
return false;
|
52
60
|
},
|
53
61
|
hasNewBundleVer: () => {
|
54
|
-
|
62
|
+
// latestBundleVersion 如果没命中,则为 0,此时判断为无新 Bundle
|
63
|
+
if (semverGt(VersionInfo.latestBundleVersion, VersionInfo.currentBundleVersion)) {
|
64
|
+
return true;
|
65
|
+
}
|
66
|
+
return false;
|
55
67
|
},
|
56
68
|
isValidVersion: (minVer, maxVer) => {
|
57
69
|
var _minVer, _maxVer;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["getReadableVersion","DevConfig","BuildInPrefs","semverGt","require","semverGte","semverCoerce","VersionInfo","currentAppVersion","version","
|
1
|
+
{"version":3,"names":["getReadableVersion","DevConfig","BuildInPrefs","PrefData","semverGt","require","semverGte","semverCoerce","VersionInfo","currentAppVersion","version","latestAppVersion","currentBundleVersion","latestBundleVersion","VersionManager","init","_ref","addListenerOnce","getValue","CurrentBundleVersion","isDanger","__DEV__","hasValue","DevDanger","appVer","setBundleVer","bundleVer","setValue","hasNewAppVer","hasNewBundleVer","isValidVersion","minVer","maxVer","_minVer","_maxVer","trim"],"sources":["VersionManager.ts"],"sourcesContent":["import { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { BuildInPrefs, PrefData } from './PrefData';\n\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nlet VersionInfo = {\n currentAppVersion: semverCoerce(getReadableVersion()).version,\n latestAppVersion: semverCoerce(getReadableVersion()).version,\n currentBundleVersion: 0,\n latestBundleVersion: 0,\n};\n\nexport const VersionManager = {\n init: ({\n latestAppVersion,\n latestBundleVersion,\n }: {\n latestAppVersion: string;\n latestBundleVersion?: string;\n }) => {\n if (latestAppVersion) {\n VersionInfo.latestAppVersion = semverCoerce(latestAppVersion).version;\n }\n\n if (latestBundleVersion) {\n VersionInfo.latestBundleVersion =\n semverCoerce(latestBundleVersion).version;\n }\n\n PrefData.addListenerOnce(() => {\n VersionInfo.currentBundleVersion = PrefData.getValue(\n BuildInPrefs.CurrentBundleVersion\n );\n });\n },\n\n isDanger: () => {\n if (__DEV__ && DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n return DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n // current > online,就危险\n if (semverGt(VersionInfo.currentAppVersion, VersionInfo.latestAppVersion)) {\n return true;\n }\n return false;\n },\n\n appVer: () => {\n return VersionInfo.currentAppVersion;\n },\n\n setBundleVer: (bundleVer: string) => {\n if (bundleVer) {\n VersionInfo.currentBundleVersion = semverCoerce(bundleVer).version;\n PrefData.setValue(\n BuildInPrefs.CurrentBundleVersion,\n VersionInfo.currentBundleVersion\n );\n }\n },\n\n bundleVer: () => {\n return VersionInfo.currentBundleVersion;\n },\n\n getReadableVersion: () => {\n return (\n VersionInfo.currentAppVersion +\n (VersionInfo.currentBundleVersion\n ? '(' + VersionInfo.currentBundleVersion + ')'\n : '')\n );\n },\n\n hasNewAppVer: () => {\n // online > current,才有新版本\n if (semverGt(VersionInfo.latestAppVersion, VersionInfo.currentAppVersion)) {\n return true;\n }\n return false;\n },\n\n hasNewBundleVer: () => {\n // latestBundleVersion 如果没命中,则为 0,此时判断为无新 Bundle\n if (\n semverGt(\n VersionInfo.latestBundleVersion,\n VersionInfo.currentBundleVersion\n )\n ) {\n return true;\n }\n return false;\n },\n\n isValidVersion: (minVer?: string, maxVer?: string) => {\n minVer = minVer?.trim();\n maxVer = maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (\n !!minVer &&\n semverGt(semverCoerce(minVer).version, VersionManager.appVer())\n ) {\n return false;\n }\n if (\n !!maxVer &&\n semverGte(VersionManager.appVer(), semverCoerce(maxVer).version)\n ) {\n return false;\n }\n return true;\n },\n};\n"],"mappings":"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"}
|
@@ -3,9 +3,11 @@ export declare const VersionManager: {
|
|
3
3
|
latestAppVersion: string;
|
4
4
|
latestBundleVersion?: string | undefined;
|
5
5
|
}) => void;
|
6
|
-
isDanger: () =>
|
6
|
+
isDanger: () => any;
|
7
7
|
appVer: () => any;
|
8
|
+
setBundleVer: (bundleVer: string) => void;
|
8
9
|
bundleVer: () => number;
|
10
|
+
getReadableVersion: () => string;
|
9
11
|
hasNewAppVer: () => boolean;
|
10
12
|
hasNewBundleVer: () => boolean;
|
11
13
|
isValidVersion: (minVer?: string, maxVer?: string) => boolean;
|
package/package.json
CHANGED
package/src/PrefData.ts
CHANGED
package/src/VersionManager.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import { getReadableVersion } from 'react-native-device-info';
|
2
2
|
import { DevConfig } from './DevConfig';
|
3
|
-
import { BuildInPrefs } from './PrefData';
|
3
|
+
import { BuildInPrefs, PrefData } from './PrefData';
|
4
4
|
|
5
5
|
const semverGt = require('semver/functions/gt');
|
6
6
|
const semverGte = require('semver/functions/gte');
|
@@ -8,10 +8,9 @@ const semverCoerce = require('semver/functions/coerce');
|
|
8
8
|
|
9
9
|
let VersionInfo = {
|
10
10
|
currentAppVersion: semverCoerce(getReadableVersion()).version,
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
hasNewBundleVersion: false,
|
11
|
+
latestAppVersion: semverCoerce(getReadableVersion()).version,
|
12
|
+
currentBundleVersion: 0,
|
13
|
+
latestBundleVersion: 0,
|
15
14
|
};
|
16
15
|
|
17
16
|
export const VersionManager = {
|
@@ -23,47 +22,78 @@ export const VersionManager = {
|
|
23
22
|
latestBundleVersion?: string;
|
24
23
|
}) => {
|
25
24
|
if (latestAppVersion) {
|
26
|
-
|
27
|
-
// online > current,才有新版本
|
28
|
-
if (semverGt(onlineVersion, VersionInfo.currentAppVersion)) {
|
29
|
-
VersionInfo.hasNewAppVersion = true;
|
30
|
-
}
|
31
|
-
// current > online,就危险
|
32
|
-
if (semverGt(VersionInfo.currentAppVersion, onlineVersion)) {
|
33
|
-
VersionInfo.isDanger = true;
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
if (__DEV__ && DevConfig.hasValue(BuildInPrefs.DevDanger)) {
|
38
|
-
VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);
|
25
|
+
VersionInfo.latestAppVersion = semverCoerce(latestAppVersion).version;
|
39
26
|
}
|
40
27
|
|
41
28
|
if (latestBundleVersion) {
|
42
|
-
|
43
|
-
|
44
|
-
VersionInfo.hasNewBundleVersion = true;
|
45
|
-
}
|
29
|
+
VersionInfo.latestBundleVersion =
|
30
|
+
semverCoerce(latestBundleVersion).version;
|
46
31
|
}
|
32
|
+
|
33
|
+
PrefData.addListenerOnce(() => {
|
34
|
+
VersionInfo.currentBundleVersion = PrefData.getValue(
|
35
|
+
BuildInPrefs.CurrentBundleVersion
|
36
|
+
);
|
37
|
+
});
|
47
38
|
},
|
48
39
|
|
49
40
|
isDanger: () => {
|
50
|
-
|
41
|
+
if (__DEV__ && DevConfig.hasValue(BuildInPrefs.DevDanger)) {
|
42
|
+
return DevConfig.getValue(BuildInPrefs.DevDanger);
|
43
|
+
}
|
44
|
+
// current > online,就危险
|
45
|
+
if (semverGt(VersionInfo.currentAppVersion, VersionInfo.latestAppVersion)) {
|
46
|
+
return true;
|
47
|
+
}
|
48
|
+
return false;
|
51
49
|
},
|
52
50
|
|
53
51
|
appVer: () => {
|
54
52
|
return VersionInfo.currentAppVersion;
|
55
53
|
},
|
56
54
|
|
55
|
+
setBundleVer: (bundleVer: string) => {
|
56
|
+
if (bundleVer) {
|
57
|
+
VersionInfo.currentBundleVersion = semverCoerce(bundleVer).version;
|
58
|
+
PrefData.setValue(
|
59
|
+
BuildInPrefs.CurrentBundleVersion,
|
60
|
+
VersionInfo.currentBundleVersion
|
61
|
+
);
|
62
|
+
}
|
63
|
+
},
|
64
|
+
|
57
65
|
bundleVer: () => {
|
58
66
|
return VersionInfo.currentBundleVersion;
|
59
67
|
},
|
60
68
|
|
69
|
+
getReadableVersion: () => {
|
70
|
+
return (
|
71
|
+
VersionInfo.currentAppVersion +
|
72
|
+
(VersionInfo.currentBundleVersion
|
73
|
+
? '(' + VersionInfo.currentBundleVersion + ')'
|
74
|
+
: '')
|
75
|
+
);
|
76
|
+
},
|
77
|
+
|
61
78
|
hasNewAppVer: () => {
|
62
|
-
|
79
|
+
// online > current,才有新版本
|
80
|
+
if (semverGt(VersionInfo.latestAppVersion, VersionInfo.currentAppVersion)) {
|
81
|
+
return true;
|
82
|
+
}
|
83
|
+
return false;
|
63
84
|
},
|
64
85
|
|
65
86
|
hasNewBundleVer: () => {
|
66
|
-
|
87
|
+
// latestBundleVersion 如果没命中,则为 0,此时判断为无新 Bundle
|
88
|
+
if (
|
89
|
+
semverGt(
|
90
|
+
VersionInfo.latestBundleVersion,
|
91
|
+
VersionInfo.currentBundleVersion
|
92
|
+
)
|
93
|
+
) {
|
94
|
+
return true;
|
95
|
+
}
|
96
|
+
return false;
|
67
97
|
},
|
68
98
|
|
69
99
|
isValidVersion: (minVer?: string, maxVer?: string) => {
|