@miot-rn/common-component 1.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.
Files changed (40) hide show
  1. package/README.md +9 -0
  2. package/dist/index.d.ts +0 -0
  3. package/dist/index.js +0 -0
  4. package/dist/resources/i18n.d.ts +55 -0
  5. package/dist/resources/i18n.js +212 -0
  6. package/dist/service/specs/error-code.d.ts +19 -0
  7. package/dist/service/specs/error-code.js +41 -0
  8. package/dist/service/specs/index.d.ts +95 -0
  9. package/dist/service/specs/index.js +412 -0
  10. package/dist/service/specs/spec.d.ts +10 -0
  11. package/dist/service/specs/spec.js +109 -0
  12. package/dist/service/specs/specCache.d.ts +85 -0
  13. package/dist/service/specs/specCache.js +421 -0
  14. package/dist/service/specs/std-spec.d.ts +5 -0
  15. package/dist/service/specs/std-spec.js +228 -0
  16. package/dist/service/specs/subject.d.ts +20 -0
  17. package/dist/service/specs/subject.js +145 -0
  18. package/dist/service/specs/utils.d.ts +28 -0
  19. package/dist/service/specs/utils.js +46 -0
  20. package/dist/specs/i18n-parser.d.ts +10 -0
  21. package/dist/specs/i18n-parser.js +300 -0
  22. package/dist/specs/instance-parser.d.ts +26 -0
  23. package/dist/specs/instance-parser.js +706 -0
  24. package/dist/store/useGlobalSpecManager.d.ts +320 -0
  25. package/dist/store/useGlobalSpecManager.js +867 -0
  26. package/dist/types/index.d.ts +23 -0
  27. package/dist/types/index.js +1 -0
  28. package/dist/utils/fns.d.ts +12 -0
  29. package/dist/utils/fns.js +308 -0
  30. package/dist/utils/get-value-or-default.d.ts +1 -0
  31. package/dist/utils/get-value-or-default.js +4 -0
  32. package/dist/utils/i18n.d.ts +1 -0
  33. package/dist/utils/i18n.js +141 -0
  34. package/dist/utils/objects.d.ts +2 -0
  35. package/dist/utils/objects.js +222 -0
  36. package/dist/utils/spec.d.ts +8 -0
  37. package/dist/utils/spec.js +171 -0
  38. package/dist/utils/types.d.ts +3 -0
  39. package/dist/utils/types.js +25 -0
  40. package/package.json +27 -0
package/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # @miot-rn/door-components
2
+
3
+ ## 背景
4
+
5
+ 为了能够提供灵活支持插件开发者的业务组件功能,miot-react-native-plugins 项目提供了一系列丰富的业务UI组件包,其他开发者可以基于此业务UI组件包集合进行插件开发,减少开发工作量。
6
+
7
+ ## 使用
8
+ 开发过程中新创建的包,需要在pacakge.json中添加如下配置:min_sdk_api_level字段,以告知使用者支持的最低SKDK版本。
9
+
File without changes
package/dist/index.js ADDED
File without changes
@@ -0,0 +1,55 @@
1
+ export interface I18nLanguageResources {
2
+ [key: string]: string | {
3
+ [pluralForm: string]: string;
4
+ };
5
+ }
6
+ export interface I18nConfig {
7
+ cs?: I18nLanguageResources;
8
+ de?: I18nLanguageResources;
9
+ el?: I18nLanguageResources;
10
+ en?: I18nLanguageResources;
11
+ es_us?: I18nLanguageResources;
12
+ es?: I18nLanguageResources;
13
+ fi?: I18nLanguageResources;
14
+ fr?: I18nLanguageResources;
15
+ bo?: I18nLanguageResources;
16
+ hu?: I18nLanguageResources;
17
+ id?: I18nLanguageResources;
18
+ it?: I18nLanguageResources;
19
+ ja?: I18nLanguageResources;
20
+ ko?: I18nLanguageResources;
21
+ nb?: I18nLanguageResources;
22
+ nl?: I18nLanguageResources;
23
+ pl?: I18nLanguageResources;
24
+ pt_pt?: I18nLanguageResources;
25
+ pt?: I18nLanguageResources;
26
+ ro?: I18nLanguageResources;
27
+ ru?: I18nLanguageResources;
28
+ sk?: I18nLanguageResources;
29
+ sv?: I18nLanguageResources;
30
+ th?: I18nLanguageResources;
31
+ tr?: I18nLanguageResources;
32
+ uk?: I18nLanguageResources;
33
+ vi?: I18nLanguageResources;
34
+ zh_hk?: I18nLanguageResources;
35
+ zh_tw?: I18nLanguageResources;
36
+ zh?: I18nLanguageResources;
37
+ ar?: I18nLanguageResources;
38
+ he?: I18nLanguageResources;
39
+ [key: string]: I18nLanguageResources | undefined;
40
+ }
41
+ export declare let i18ns: I18nConfig;
42
+ export declare let hasInitI18nConfig: boolean;
43
+ export declare const initI18nConfig: (i18nConfig: I18nConfig) => void;
44
+ export declare class I18n {
45
+ keyMapper: any;
46
+ strings: any;
47
+ i18nValueMapper: any;
48
+ constructor(i18n: any, hasLang?: boolean, keyMapper?: any, i18nValueMapper?: any);
49
+ get(key: string, values?: any[], defaultValue?: string): string;
50
+ getI18nKey(key: string, values: any[]): string;
51
+ }
52
+ declare const _default: {
53
+ get(key: string, values?: any[], defaultValue?: string): string;
54
+ };
55
+ export default _default;
@@ -0,0 +1,212 @@
1
+ import { Resources, Host } from 'miot';
2
+ import { getStringGenerator } from "../utils/fns";
3
+ import { getPluralRules } from "../utils/i18n";
4
+ import { isTypeOf } from "../utils/types";
5
+ const lang = Host.locale.language;
6
+ function replaceHolder(v = '') {
7
+ if (typeof v !== 'string') return v;
8
+ let ret = v;
9
+ let index = 1;
10
+ while (ret.indexOf('${}') !== -1) {
11
+ ret = ret.replace('${}', `{${index}}`);
12
+ index += 1;
13
+ }
14
+ return ret;
15
+ }
16
+
17
+ /* eslint-disable global-require, @typescript-eslint/no-var-requires, camelcase, @typescript-eslint/no-explicit-any */
18
+
19
+ // Type definition for i18n language resources
20
+
21
+ // Type definition for i18n config
22
+
23
+ // eslint-disable-next-line import/no-mutable-exports
24
+ export let i18ns = {};
25
+ // get cs() {
26
+ // return require('../assets/i18n/cs').default;
27
+ // },
28
+ // get de() {
29
+ // return require('../assets/i18n/de').default;
30
+ // },
31
+ // get el() {
32
+ // return require('../assets/i18n/el').default;
33
+ // },
34
+ // get en() {
35
+ // return require('../assets/i18n/en').default;
36
+ // },
37
+ // get es_us() {
38
+ // return require('../assets/i18n/es_us').default;
39
+ // },
40
+ // get es() {
41
+ // return require('../assets/i18n/es').default;
42
+ // },
43
+ // get fi() {
44
+ // return require('../assets/i18n/fi').default;
45
+ // },
46
+ // get fr() {
47
+ // return require('../assets/i18n/fr').default;
48
+ // },
49
+ // get bo() {
50
+ // return require('../assets/i18n/bo').default;
51
+ // },
52
+ // get hu() {
53
+ // return require('../assets/i18n/hu').default;
54
+ // },
55
+ // get id() {
56
+ // return require('../assets/i18n/id').default;
57
+ // },
58
+ // get it() {
59
+ // return require('../assets/i18n/it').default;
60
+ // },
61
+ // get ja() {
62
+ // return require('../assets/i18n/ja').default;
63
+ // },
64
+ // get ko() {
65
+ // return require('../assets/i18n/ko').default;
66
+ // },
67
+ // get nb() {
68
+ // return require('../assets/i18n/nb').default;
69
+ // },
70
+ // get nl() {
71
+ // return require('../assets/i18n/nl').default;
72
+ // },
73
+ // get pl() {
74
+ // return require('../assets/i18n/pl').default;
75
+ // },
76
+ // get pt_pt() {
77
+ // return require('../assets/i18n/pt_pt').default;
78
+ // },
79
+ // get pt() {
80
+ // return require('../assets/i18n/pt').default;
81
+ // },
82
+ // get ro() {
83
+ // return require('../assets/i18n/ro').default;
84
+ // },
85
+ // get ru() {
86
+ // return require('../assets/i18n/ru').default;
87
+ // },
88
+ // get sk() {
89
+ // return require('../assets/i18n/sk').default;
90
+ // },
91
+ // get sv() {
92
+ // return require('../assets/i18n/sv').default;
93
+ // },
94
+ // get th() {
95
+ // return require('../assets/i18n/th').default;
96
+ // },
97
+ // get tr() {
98
+ // return require('../assets/i18n/tr').default;
99
+ // },
100
+ // get uk() {
101
+ // return require('../assets/i18n/uk').default;
102
+ // },
103
+ // get vi() {
104
+ // return require('../assets/i18n/vi').default;
105
+ // },
106
+ // get zh_hk() {
107
+ // return require('../assets/i18n/zh_hk').default;
108
+ // },
109
+ // get zh_tw() {
110
+ // return require('../assets/i18n/zh_tw').default;
111
+ // },
112
+ // get zh() {
113
+ // return require('../assets/i18n/zh').default;
114
+ // },
115
+ // get ar() {
116
+ // return require('../assets/i18n/ar').default;
117
+ // },
118
+ // get he() {
119
+ // return require('../assets/i18n/he').default;
120
+ // },
121
+ // };
122
+ /* eslint-enable global-require, @typescript-eslint/no-var-requires, camelcase */
123
+ export let hasInitI18nConfig = false;
124
+ let LocalI18n = i18ns[lang] || i18ns.en || i18ns.zh || {};
125
+ export const initI18nConfig = i18nConfig => {
126
+ if (hasInitI18nConfig) {
127
+ return;
128
+ }
129
+ i18ns = i18nConfig;
130
+ LocalI18n = i18ns[lang] || i18ns.en || i18ns.zh || {};
131
+ hasInitI18nConfig = true;
132
+ };
133
+
134
+ // 根据传参返回多语言解析器
135
+ export class I18n {
136
+ /**
137
+ * Creates an instance of I18n.
138
+ * @param {object} i18n { title: 'xxx' } 或{ zh: { title: 'xxx' } }
139
+ * @param {boolean} [hasLang=false]
140
+ * @param {object} keyMapper
141
+ * @param {(values) => values} [i18nValueMapper=null] 将控件的 values 根据需求进行转换,供多语言求值
142
+ * @memberof I18n
143
+ */
144
+ // eslint-disable-next-line default-param-last
145
+ constructor(i18n, hasLang = false, keyMapper, i18nValueMapper = null) {
146
+ this.keyMapper = keyMapper || {};
147
+ const tI18n = (hasLang ? i18n[lang] || i18n.en || i18n.zh : i18n) || {};
148
+ const rI18n = Object.entries(tI18n).reduce((r, [k, v]) => {
149
+ if (!isTypeOf('Object', v)) {
150
+ return {
151
+ ...r,
152
+ [k]: replaceHolder(v)
153
+ };
154
+ }
155
+ return {
156
+ ...r,
157
+ ...Object.entries(v).reduce((rr, [kk, vv]) => {
158
+ return {
159
+ ...rr,
160
+ [`${k}:${kk}`]: replaceHolder(vv)
161
+ };
162
+ }, {})
163
+ };
164
+ }, {});
165
+ this.strings = i18n ? (Resources.createI18n({
166
+ [lang]: rI18n
167
+ }, lang) || {}).strings : null;
168
+ this.i18nValueMapper = i18nValueMapper;
169
+ }
170
+ get(key, values, defaultValue = '') {
171
+ let _values = JSON.parse(JSON.stringify(values || []));
172
+ if (this.i18nValueMapper && values?.length) {
173
+ _values = this.i18nValueMapper(_values, key) || [];
174
+ }
175
+ const strings = this.strings || {};
176
+ const i18nKey = this.getI18nKey(key, _values || []);
177
+ const firstNumber = _values.find(v => isTypeOf('Number', v));
178
+ const isNumber = isTypeOf('Number', firstNumber);
179
+ let finalI18nKey = i18nKey;
180
+ const pluralKey = `${i18nKey}:${getPluralRules(lang, firstNumber)}`;
181
+ if (isNumber && strings[pluralKey]) {
182
+ finalI18nKey = pluralKey;
183
+ }
184
+ if (!finalI18nKey || !strings[finalI18nKey]) {
185
+ return defaultValue;
186
+ }
187
+ let result = strings[finalI18nKey](...(_values || []));
188
+ // 不显示 {1} 这样的占位符
189
+ const placeholderReg = /^\{\d+\}$/;
190
+ if (typeof result === 'string' && result.match(placeholderReg)) {
191
+ result = '';
192
+ }
193
+ return result;
194
+ }
195
+ getI18nKey(key, values) {
196
+ const keyGenerator = this.keyMapper[key] ? getStringGenerator(this.keyMapper[key]) : null;
197
+ const ret = keyGenerator ? keyGenerator(...values) : key;
198
+ return ret;
199
+ }
200
+ }
201
+
202
+ // 根据固定模块返回多语言解析器
203
+
204
+ export default {
205
+ get(key, values, defaultValue = '') {
206
+ const i18nValue = LocalI18n[key];
207
+ const t = new I18n({
208
+ [key]: i18nValue
209
+ }, false);
210
+ return t.get(key, values, defaultValue);
211
+ }
212
+ };
@@ -0,0 +1,19 @@
1
+ export declare const OK = 0;
2
+ export declare const IN_PROCESS = 1;
3
+ export declare const SERVICE_NOT_FOUND = -704040002;
4
+ export declare const PROP_NOT_FOUND = -702000003;
5
+ export declare const EVENT_NOT_FOUND = -704040004;
6
+ export declare const ACTION_NOT_FOUND = -704040005;
7
+ export declare const PROP_READ_ERROR = -704030013;
8
+ export declare const PROP_WRITE_ERROR = -704030023;
9
+ export declare const DEVICE__OFFLINE = -704042011;
10
+ export declare const DEVICE_RESET = -16;
11
+ export declare const PLUGIN_UNKNOWN_ERROR = -1;
12
+ export declare const PLUGIN_NULL_ERROR = -2;
13
+ export declare const PLUGIN_ILLEGAL_ARGS_ERROR = -3;
14
+ export declare const PLUGIN_ILLEGAL_STATE_ERROR = -4;
15
+ export declare const BT_NONSUPPORT = -5;
16
+ export declare const BT_DISABLED = -6;
17
+ export declare const ACTION_CANCELED = -7;
18
+ export declare function isSuccess(code: number): boolean;
19
+ export declare function getCustomErrorCode(code: number): number | string;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * DataSource 操作错误码定义
3
+ *
4
+ * 参考文档:
5
+ * 1 [错误码定义] {@link https://iot.mi.com/new/doc/extension-development/basic-functions/communication#%E9%94%99%E8%AF%AF%E7%A0%81}
6
+ * 2 [内部文档] {@link https://wiki.n.miui.com/pages/viewpage.action?pageId=369793016}
7
+ */
8
+
9
+ export const OK = 0;
10
+ export const IN_PROCESS = 1;
11
+
12
+ // 和云端保持一致
13
+ export const SERVICE_NOT_FOUND = -704040002;
14
+ export const PROP_NOT_FOUND = -702000003;
15
+ export const EVENT_NOT_FOUND = -704040004;
16
+ export const ACTION_NOT_FOUND = -704040005;
17
+ export const PROP_READ_ERROR = -704030013;
18
+ export const PROP_WRITE_ERROR = -704030023;
19
+ export const DEVICE__OFFLINE = -704042011;
20
+ export const DEVICE_RESET = -16;
21
+
22
+ // 插件引擎内部错误
23
+ export const PLUGIN_UNKNOWN_ERROR = -1;
24
+ export const PLUGIN_NULL_ERROR = -2;
25
+ export const PLUGIN_ILLEGAL_ARGS_ERROR = -3;
26
+ export const PLUGIN_ILLEGAL_STATE_ERROR = -4;
27
+ export const BT_NONSUPPORT = -5;
28
+ export const BT_DISABLED = -6;
29
+ export const ACTION_CANCELED = -7;
30
+ export function isSuccess(code) {
31
+ return code === OK || code === IN_PROCESS;
32
+ }
33
+
34
+ // 某些情况会需要自定义code
35
+ // 比如action 的返回值,会与内置错误码冲突
36
+ export function getCustomErrorCode(code) {
37
+ if (!code) {
38
+ return code;
39
+ }
40
+ return `customErrorCode${code}`;
41
+ }
@@ -0,0 +1,95 @@
1
+ import { CACHE_SOURCE } from './specCache';
2
+ import { Spec } from '../../types';
3
+ export { CACHE_SOURCE };
4
+ export declare function enableCache(enabled: boolean): void;
5
+ export declare function isCacheEnabled(): boolean;
6
+ export interface GetPropsOptions {
7
+ useCache?: boolean;
8
+ forceRefresh?: boolean;
9
+ fromSourceIfNeed?: boolean;
10
+ }
11
+ export interface SetPropsOptions {
12
+ updateCache?: boolean;
13
+ }
14
+ export interface SubscribeOptions {
15
+ publishImmediately?: boolean;
16
+ updateCache?: boolean;
17
+ }
18
+ export interface SpecResult {
19
+ siid: number;
20
+ piid?: number;
21
+ eiid?: number;
22
+ aiid?: number;
23
+ miid?: number;
24
+ value?: unknown;
25
+ code: number;
26
+ updateTime?: number;
27
+ specDataSource?: string;
28
+ fromCache?: boolean;
29
+ did?: string;
30
+ in?: unknown[];
31
+ dataSource?: number;
32
+ }
33
+ export interface SubscribeResult {
34
+ props: SpecResult[];
35
+ unsubscribe: () => void;
36
+ }
37
+ export interface CachedProp {
38
+ value: unknown;
39
+ updateTime: number;
40
+ specDataSource: string;
41
+ }
42
+ export declare function getProps(props: Spec[], options?: GetPropsOptions): Promise<any>;
43
+ export declare function getCachedProps(props: Spec[]): ({
44
+ value: any;
45
+ updateTime: any;
46
+ code: number;
47
+ specDataSource: any;
48
+ did?: string | undefined;
49
+ siid: number;
50
+ piid?: number | undefined;
51
+ aiid?: number | undefined;
52
+ miid?: number | undefined;
53
+ in?: any[] | undefined;
54
+ dataSource?: number | undefined;
55
+ } | {
56
+ code: number;
57
+ did?: string | undefined;
58
+ siid: number;
59
+ piid?: number | undefined;
60
+ aiid?: number | undefined;
61
+ miid?: number | undefined;
62
+ value?: any;
63
+ in?: any[] | undefined;
64
+ dataSource?: number | undefined;
65
+ })[];
66
+ export declare function setProps(props: Spec[], options?: SetPropsOptions): Promise<SpecResult[]>;
67
+ export declare function setCachedProps(props: Spec[]): Promise<{
68
+ code: number;
69
+ did?: string | undefined;
70
+ siid: number;
71
+ piid?: number | undefined;
72
+ aiid?: number | undefined;
73
+ miid?: number | undefined;
74
+ value?: any;
75
+ in?: any[] | undefined;
76
+ dataSource?: number | undefined;
77
+ }[]>;
78
+ export declare function doAction(prop: Spec): Promise<{
79
+ code: number;
80
+ message: string;
81
+ }> | Promise<{
82
+ code: number;
83
+ did?: string | undefined;
84
+ siid: number;
85
+ piid?: number | undefined;
86
+ aiid?: number | undefined;
87
+ miid?: number | undefined;
88
+ value?: any;
89
+ in?: any[] | undefined;
90
+ dataSource?: number | undefined;
91
+ }>;
92
+ export declare function subscribe(props: Spec[], listener: (data: SpecResult) => void, options?: SubscribeOptions): Promise<{
93
+ props: SpecResult[];
94
+ unsubscribe: () => void;
95
+ }>;