zcw-shared 1.20.0 → 1.21.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.
Files changed (114) hide show
  1. package/dist/functions/array-object/deepClone.d.ts +12 -0
  2. package/dist/functions/array-object/deepClone.js +131 -0
  3. package/dist/functions/array-object/deepClone.js.map +1 -0
  4. package/dist/functions/array-object/flatten.d.ts +7 -0
  5. package/dist/functions/array-object/flatten.js +60 -0
  6. package/dist/functions/array-object/flatten.js.map +1 -0
  7. package/dist/functions/array-object/unique.d.ts +10 -0
  8. package/dist/functions/array-object/unique.js +85 -0
  9. package/dist/functions/array-object/unique.js.map +1 -0
  10. package/dist/functions/data-structures/Heap.d.ts +11 -0
  11. package/dist/functions/data-structures/Heap.js +91 -0
  12. package/dist/functions/data-structures/Heap.js.map +1 -0
  13. package/dist/functions/data-structures/LinkedList.d.ts +18 -0
  14. package/dist/functions/data-structures/LinkedList.js +135 -0
  15. package/dist/functions/data-structures/LinkedList.js.map +1 -0
  16. package/dist/functions/data-structures/PriorityQueue.d.ts +14 -0
  17. package/dist/functions/data-structures/PriorityQueue.js +77 -0
  18. package/dist/functions/data-structures/PriorityQueue.js.map +1 -0
  19. package/dist/functions/data-structures/Queue.d.ts +10 -0
  20. package/dist/functions/data-structures/Queue.js +27 -0
  21. package/dist/functions/data-structures/Queue.js.map +1 -0
  22. package/dist/functions/data-structures/Stack.d.ts +10 -0
  23. package/dist/functions/data-structures/Stack.js +27 -0
  24. package/dist/functions/data-structures/Stack.js.map +1 -0
  25. package/dist/functions/design-tokens/buildTokens.d.ts +76 -0
  26. package/dist/functions/design-tokens/buildTokens.js +183 -0
  27. package/dist/functions/design-tokens/buildTokens.js.map +1 -0
  28. package/dist/functions/design-tokens/generateVariables.d.ts +7 -0
  29. package/dist/functions/design-tokens/generateVariables.js +135 -0
  30. package/dist/functions/design-tokens/generateVariables.js.map +1 -0
  31. package/dist/functions/design-tokens/mixColors.d.ts +1 -0
  32. package/dist/functions/design-tokens/mixColors.js +38 -0
  33. package/dist/functions/design-tokens/mixColors.js.map +1 -0
  34. package/dist/functions/design-tokens/parseDesignTokens.d.ts +10 -0
  35. package/dist/functions/design-tokens/parseDesignTokens.js +216 -0
  36. package/dist/functions/design-tokens/parseDesignTokens.js.map +1 -0
  37. package/dist/functions/functional/compose.d.ts +1 -0
  38. package/dist/functions/functional/compose.js +10 -0
  39. package/dist/functions/functional/compose.js.map +1 -0
  40. package/dist/functions/functional/curry.d.ts +1 -0
  41. package/dist/functions/functional/curry.js +13 -0
  42. package/dist/functions/functional/curry.js.map +1 -0
  43. package/dist/functions/functional/pipe.d.ts +1 -0
  44. package/dist/functions/functional/pipe.js +10 -0
  45. package/dist/functions/functional/pipe.js.map +1 -0
  46. package/dist/functions/performance/debounce.d.ts +5 -0
  47. package/dist/functions/performance/debounce.js +12 -0
  48. package/dist/functions/performance/debounce.js.map +1 -0
  49. package/dist/functions/performance/memoize.d.ts +1 -0
  50. package/dist/functions/performance/memoize.js +13 -0
  51. package/dist/functions/performance/memoize.js.map +1 -0
  52. package/dist/functions/performance/throttle.d.ts +1 -0
  53. package/dist/functions/performance/throttle.js +11 -0
  54. package/dist/functions/performance/throttle.js.map +1 -0
  55. package/dist/functions/platform/tencent-cloud/deploy.tcb.d.ts +13 -0
  56. package/dist/functions/platform/tencent-cloud/deploy.tcb.js +46 -0
  57. package/dist/functions/platform/tencent-cloud/deploy.tcb.js.map +1 -0
  58. package/dist/functions/platform/tencent-cloud/getSecret.d.ts +4 -0
  59. package/dist/functions/platform/tencent-cloud/getSecret.js +19 -0
  60. package/dist/functions/platform/tencent-cloud/getSecret.js.map +1 -0
  61. package/dist/functions/platform/uniapp/app-plus/buildAndroidApp.d.ts +27 -0
  62. package/dist/functions/platform/uniapp/app-plus/buildAndroidApp.js +287 -0
  63. package/dist/functions/platform/uniapp/app-plus/buildAndroidApp.js.map +1 -0
  64. package/dist/functions/platform/uniapp/build.d.ts +21 -0
  65. package/dist/functions/platform/uniapp/build.js +83 -0
  66. package/dist/functions/platform/uniapp/build.js.map +1 -0
  67. package/dist/functions/platform/uniapp/detectAndroidProjectStructure.d.ts +11 -0
  68. package/dist/functions/platform/uniapp/detectAndroidProjectStructure.js +30 -0
  69. package/dist/functions/platform/uniapp/detectAndroidProjectStructure.js.map +1 -0
  70. package/dist/functions/platform/uniapp/detectProjectType.d.ts +20 -0
  71. package/dist/functions/platform/uniapp/detectProjectType.js +68 -0
  72. package/dist/functions/platform/uniapp/detectProjectType.js.map +1 -0
  73. package/dist/functions/platform/uniapp/parseManifest.d.ts +18 -0
  74. package/dist/functions/platform/uniapp/parseManifest.js +49 -0
  75. package/dist/functions/platform/uniapp/parseManifest.js.map +1 -0
  76. package/dist/functions/platform/uniapp/waitForPages.d.ts +7 -0
  77. package/dist/functions/platform/uniapp/waitForPages.js +20 -0
  78. package/dist/functions/platform/uniapp/waitForPages.js.map +1 -0
  79. package/dist/functions/principles/functionBind.d.ts +4 -0
  80. package/dist/functions/principles/functionBind.js +33 -0
  81. package/dist/functions/principles/functionBind.js.map +1 -0
  82. package/dist/functions/principles/myInstanceof.d.ts +5 -0
  83. package/dist/functions/principles/myInstanceof.js +56 -0
  84. package/dist/functions/principles/myInstanceof.js.map +1 -0
  85. package/dist/functions/principles/myNew.d.ts +3 -0
  86. package/dist/functions/principles/myNew.js +19 -0
  87. package/dist/functions/principles/myNew.js.map +1 -0
  88. package/dist/functions/utils/createI18n.d.ts +2 -0
  89. package/dist/functions/utils/createI18n.js +97 -0
  90. package/dist/functions/utils/createI18n.js.map +1 -0
  91. package/dist/functions/utils/createReactive.d.ts +10 -0
  92. package/dist/functions/utils/createReactive.js +50 -0
  93. package/dist/functions/utils/createReactive.js.map +1 -0
  94. package/dist/functions/utils/diff.d.ts +25 -0
  95. package/dist/functions/utils/diff.js +316 -0
  96. package/dist/functions/utils/diff.js.map +1 -0
  97. package/dist/functions/utils/formatString.d.ts +5 -0
  98. package/dist/functions/utils/formatString.js +9 -0
  99. package/dist/functions/utils/formatString.js.map +1 -0
  100. package/dist/functions/utils/i18n.d.ts +27 -0
  101. package/dist/functions/utils/i18n.js +119 -0
  102. package/dist/functions/utils/i18n.js.map +1 -0
  103. package/dist/functions/utils/permission.d.ts +40 -0
  104. package/dist/functions/utils/permission.js +189 -0
  105. package/dist/functions/utils/permission.js.map +1 -0
  106. package/dist/functions/utils/pinia.d.ts +52 -0
  107. package/dist/functions/utils/pinia.js +183 -0
  108. package/dist/functions/utils/pinia.js.map +1 -0
  109. package/dist/hooks/usePermission.d.ts +7 -0
  110. package/dist/hooks/usePermission.js +123 -0
  111. package/dist/hooks/usePermission.js.map +1 -0
  112. package/package.json +12 -2
  113. package/references/xlsx.d.ts +51 -0
  114. package/types/reactive.d.ts +67 -0
@@ -0,0 +1,316 @@
1
+ function isObject(value) {
2
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
3
+ }
4
+ function isArray(value) {
5
+ return Array.isArray(value);
6
+ }
7
+ function isPrimitive(value) {
8
+ return value === null ||
9
+ value === undefined ||
10
+ typeof value === 'string' ||
11
+ typeof value === 'number' ||
12
+ typeof value === 'boolean' ||
13
+ typeof value === 'bigint' ||
14
+ typeof value === 'symbol';
15
+ }
16
+ function deepEqual(a, b, comparator) {
17
+ if (comparator) {
18
+ return comparator(a, b);
19
+ }
20
+ if (a === b) {
21
+ return true;
22
+ }
23
+ if (typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b)) {
24
+ return true;
25
+ }
26
+ if (typeof a !== typeof b) {
27
+ return false;
28
+ }
29
+ if (a === null || b === null || a === undefined || b === undefined) {
30
+ return a === b;
31
+ }
32
+ if (Array.isArray(a) && Array.isArray(b)) {
33
+ if (a.length !== b.length) {
34
+ return false;
35
+ }
36
+ return a.every((item, index) => deepEqual(item, b[index]));
37
+ }
38
+ if (isObject(a) && isObject(b)) {
39
+ const keysA = Object.keys(a);
40
+ const keysB = Object.keys(b);
41
+ if (keysA.length !== keysB.length) {
42
+ return false;
43
+ }
44
+ return keysA.every(key => keysB.includes(key) && deepEqual(a[key], b[key]));
45
+ }
46
+ return false;
47
+ }
48
+ function diffObject(oldObj, newObj, path, options, currentDepth) {
49
+ const changes = [];
50
+ const maxDepth = options.maxDepth ?? Infinity;
51
+ if (currentDepth >= maxDepth) {
52
+ return changes;
53
+ }
54
+ const oldKeys = Object.keys(oldObj);
55
+ const newKeys = Object.keys(newObj);
56
+ const allKeys = new Set([...oldKeys, ...newKeys]);
57
+ allKeys.forEach(key => {
58
+ const currentPath = path ? `${path}.${key}` : key;
59
+ const oldValue = oldObj[key];
60
+ const newValue = newObj[key];
61
+ const hasOld = key in oldObj;
62
+ const hasNew = key in newObj;
63
+ if (!hasOld && hasNew) {
64
+ changes.push({
65
+ path: currentPath,
66
+ type: 'added',
67
+ newValue: newValue
68
+ });
69
+ return;
70
+ }
71
+ if (hasOld && !hasNew) {
72
+ changes.push({
73
+ path: currentPath,
74
+ type: 'deleted',
75
+ oldValue: oldValue
76
+ });
77
+ return;
78
+ }
79
+ if (options.deep && isObject(oldValue) && isObject(newValue)) {
80
+ const nestedChanges = diffObject(oldValue, newValue, currentPath, options, currentDepth + 1);
81
+ changes.push(...nestedChanges);
82
+ }
83
+ else if (options.deep && isArray(oldValue) && isArray(newValue)) {
84
+ const nestedChanges = diffArray(oldValue, newValue, currentPath, options, currentDepth + 1);
85
+ changes.push(...nestedChanges);
86
+ }
87
+ else {
88
+ const isEqual = deepEqual(oldValue, newValue, options.comparator);
89
+ if (isEqual) {
90
+ if (options.includeUnchanged) {
91
+ changes.push({
92
+ path: currentPath,
93
+ type: 'unchanged',
94
+ oldValue: oldValue,
95
+ newValue: newValue
96
+ });
97
+ }
98
+ }
99
+ else {
100
+ changes.push({
101
+ path: currentPath,
102
+ type: 'modified',
103
+ oldValue: oldValue,
104
+ newValue: newValue
105
+ });
106
+ }
107
+ }
108
+ });
109
+ return changes;
110
+ }
111
+ function diffArray(oldArr, newArr, path, options, currentDepth) {
112
+ const changes = [];
113
+ const maxDepth = options.maxDepth ?? Infinity;
114
+ if (currentDepth >= maxDepth) {
115
+ return changes;
116
+ }
117
+ if (options.ignoreArrayOrder) {
118
+ const oldSet = new Set(oldArr.map(item => JSON.stringify(item)));
119
+ const newSet = new Set(newArr.map(item => JSON.stringify(item)));
120
+ newArr.forEach((item, index) => {
121
+ const itemStr = JSON.stringify(item);
122
+ if (!oldSet.has(itemStr)) {
123
+ changes.push({
124
+ path: `${path}[${index}]`,
125
+ type: 'added',
126
+ newValue: item
127
+ });
128
+ }
129
+ });
130
+ oldArr.forEach((item, index) => {
131
+ const itemStr = JSON.stringify(item);
132
+ if (!newSet.has(itemStr)) {
133
+ changes.push({
134
+ path: `${path}[${index}]`,
135
+ type: 'deleted',
136
+ oldValue: item
137
+ });
138
+ }
139
+ });
140
+ }
141
+ else {
142
+ const maxLength = Math.max(oldArr.length, newArr.length);
143
+ for (let i = 0; i < maxLength; i++) {
144
+ const currentPath = `${path}[${i}]`;
145
+ const oldValue = oldArr[i];
146
+ const newValue = newArr[i];
147
+ const hasOld = i < oldArr.length;
148
+ const hasNew = i < newArr.length;
149
+ if (!hasOld && hasNew) {
150
+ changes.push({
151
+ path: currentPath,
152
+ type: 'added',
153
+ newValue: newValue
154
+ });
155
+ }
156
+ else if (hasOld && !hasNew) {
157
+ changes.push({
158
+ path: currentPath,
159
+ type: 'deleted',
160
+ oldValue: oldValue
161
+ });
162
+ }
163
+ else {
164
+ if (options.deep && isObject(oldValue) && isObject(newValue)) {
165
+ const nestedChanges = diffObject(oldValue, newValue, currentPath, options, currentDepth + 1);
166
+ changes.push(...nestedChanges);
167
+ }
168
+ else if (options.deep && isArray(oldValue) && isArray(newValue)) {
169
+ const nestedChanges = diffArray(oldValue, newValue, currentPath, options, currentDepth + 1);
170
+ changes.push(...nestedChanges);
171
+ }
172
+ else {
173
+ const isEqual = deepEqual(oldValue, newValue, options.comparator);
174
+ if (isEqual) {
175
+ if (options.includeUnchanged) {
176
+ changes.push({
177
+ path: currentPath,
178
+ type: 'unchanged',
179
+ oldValue: oldValue,
180
+ newValue: newValue
181
+ });
182
+ }
183
+ }
184
+ else {
185
+ changes.push({
186
+ path: currentPath,
187
+ type: 'modified',
188
+ oldValue: oldValue,
189
+ newValue: newValue
190
+ });
191
+ }
192
+ }
193
+ }
194
+ }
195
+ }
196
+ return changes;
197
+ }
198
+ export function diff(oldValue, newValue, options = {}) {
199
+ const config = {
200
+ deep: true,
201
+ ignoreArrayOrder: false,
202
+ includeUnchanged: false,
203
+ maxDepth: Infinity,
204
+ ...options
205
+ };
206
+ let changes = [];
207
+ if (isPrimitive(oldValue) && isPrimitive(newValue)) {
208
+ const isEqual = deepEqual(oldValue, newValue, config.comparator);
209
+ if (isEqual) {
210
+ if (config.includeUnchanged) {
211
+ changes.push({
212
+ path: '',
213
+ type: 'unchanged',
214
+ oldValue: oldValue,
215
+ newValue: newValue
216
+ });
217
+ }
218
+ }
219
+ else {
220
+ changes.push({
221
+ path: '',
222
+ type: 'modified',
223
+ oldValue: oldValue,
224
+ newValue: newValue
225
+ });
226
+ }
227
+ }
228
+ else if (isObject(oldValue) && isObject(newValue)) {
229
+ changes = diffObject(oldValue, newValue, '', config, 0);
230
+ }
231
+ else if (isArray(oldValue) && isArray(newValue)) {
232
+ changes = diffArray(oldValue, newValue, '', config, 0);
233
+ }
234
+ else {
235
+ changes.push({
236
+ path: '',
237
+ type: 'modified',
238
+ oldValue: oldValue,
239
+ newValue: newValue
240
+ });
241
+ }
242
+ const added = changes.filter(c => c.type === 'added');
243
+ const deleted = changes.filter(c => c.type === 'deleted');
244
+ const modified = changes.filter(c => c.type === 'modified');
245
+ const unchanged = changes.filter(c => c.type === 'unchanged');
246
+ return {
247
+ hasChanges: added.length > 0 || deleted.length > 0 || modified.length > 0,
248
+ changes,
249
+ added,
250
+ deleted,
251
+ modified,
252
+ unchanged
253
+ };
254
+ }
255
+ export function applyDiff(target, changes) {
256
+ const result = JSON.parse(JSON.stringify(target));
257
+ changes.forEach(change => {
258
+ if (change.type === 'deleted') {
259
+ const keys = change.path.replace(/\[(\d+)\]/g, '.$1').split('.');
260
+ let current = result;
261
+ for (let i = 0; i < keys.length - 1; i++) {
262
+ const key = keys[i];
263
+ if (current[key] === undefined) {
264
+ return;
265
+ }
266
+ current = current[key];
267
+ }
268
+ const lastKey = keys[keys.length - 1];
269
+ if (Array.isArray(current)) {
270
+ current.splice(Number(lastKey), 1);
271
+ }
272
+ else {
273
+ delete current[lastKey];
274
+ }
275
+ }
276
+ else if (change.type === 'added' || change.type === 'modified') {
277
+ const keys = change.path.replace(/\[(\d+)\]/g, '.$1').split('.');
278
+ let current = result;
279
+ for (let i = 0; i < keys.length - 1; i++) {
280
+ const key = keys[i];
281
+ if (current[key] === undefined) {
282
+ const nextKey = keys[i + 1];
283
+ current[key] = /^\d+$/.test(nextKey) ? [] : {};
284
+ }
285
+ current = current[key];
286
+ }
287
+ const lastKey = keys[keys.length - 1];
288
+ current[lastKey] = change.newValue;
289
+ }
290
+ });
291
+ return result;
292
+ }
293
+ export function mergeDiff(...results) {
294
+ const allChanges = [];
295
+ results.forEach(result => {
296
+ allChanges.push(...result.changes);
297
+ });
298
+ const changeMap = new Map();
299
+ allChanges.forEach(change => {
300
+ changeMap.set(change.path, change);
301
+ });
302
+ const changes = Array.from(changeMap.values());
303
+ const added = changes.filter(c => c.type === 'added');
304
+ const deleted = changes.filter(c => c.type === 'deleted');
305
+ const modified = changes.filter(c => c.type === 'modified');
306
+ const unchanged = changes.filter(c => c.type === 'unchanged');
307
+ return {
308
+ hasChanges: added.length > 0 || deleted.length > 0 || modified.length > 0,
309
+ changes,
310
+ added,
311
+ deleted,
312
+ modified,
313
+ unchanged
314
+ };
315
+ }
316
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/functions/utils/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface FormatStringDeps {
2
+ replace: (str: string, searchValue: string, replaceValue: string) => string;
3
+ replaceAll: (str: string, searchValue: string | RegExp, replaceValue: string) => string;
4
+ }
5
+ export declare function formatString(template: string, params: Record<string, string | number>, deps: FormatStringDeps): string;
@@ -0,0 +1,9 @@
1
+ export function formatString(template, params, deps) {
2
+ let result = template;
3
+ for (const [key, value] of Object.entries(params)) {
4
+ const placeholder = `{${key}}`;
5
+ result = deps.replace(result, placeholder, String(value));
6
+ }
7
+ return result;
8
+ }
9
+ //# sourceMappingURL=formatString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatString.js","sourceRoot":"","sources":["../../../src/functions/utils/formatString.ts"],"names":[],"mappings":"AAkCA,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,MAAuC,EACvC,IAAsB;IAEtB,IAAI,MAAM,GAAG,QAAQ,CAAA;IAGrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,GAAG,GAAG,CAAA;QAC9B,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { CreateReactive } from '../../../types/reactive';
2
+ export interface I18nTranslation {
3
+ [key: string]: string | I18nTranslation;
4
+ }
5
+ export interface I18nMessages {
6
+ [locale: string]: I18nTranslation;
7
+ }
8
+ export interface I18nConfig {
9
+ defaultLocale: string;
10
+ fallbackLocale?: string;
11
+ messages: I18nMessages;
12
+ }
13
+ export interface I18nDeps {
14
+ createReactive: CreateReactive;
15
+ log: (...args: any[]) => void;
16
+ warn: (...args: any[]) => void;
17
+ }
18
+ export interface I18nInstance {
19
+ locale: string;
20
+ t: (key: string, params?: Record<string, any>) => string;
21
+ setLocale: (locale: string) => void;
22
+ getLocales: () => string[];
23
+ hasLocale: (locale: string) => boolean;
24
+ addMessages: (locale: string, messages: I18nTranslation) => void;
25
+ getMessages: () => I18nTranslation;
26
+ }
27
+ export declare function createI18n(config: I18nConfig, deps: I18nDeps): I18nInstance;
@@ -0,0 +1,119 @@
1
+ export function createI18n(config, deps) {
2
+ if (!config.defaultLocale) {
3
+ throw new Error('defaultLocale is required');
4
+ }
5
+ if (!config.messages || Object.keys(config.messages).length === 0) {
6
+ throw new Error('messages is required and cannot be empty');
7
+ }
8
+ if (!config.messages[config.defaultLocale]) {
9
+ throw new Error(`Default locale "${config.defaultLocale}" not found in messages`);
10
+ }
11
+ const state = {
12
+ locale: config.defaultLocale,
13
+ fallbackLocale: config.fallbackLocale || config.defaultLocale,
14
+ messages: config.messages
15
+ };
16
+ const reactiveState = deps.createReactive(state, {
17
+ subscribers: new Set(),
18
+ notify: () => {
19
+ },
20
+ subscribe: (listener) => {
21
+ reactiveState.subscribers.add(listener);
22
+ return () => reactiveState.subscribers.delete(listener);
23
+ },
24
+ dispose: () => reactiveState.subscribers.clear(),
25
+ createProxy: (target, reactiveDeps) => new Proxy(target, {
26
+ get(target, property) {
27
+ if (property === 'subscribe' || property === 'notify' ||
28
+ property === 'dispose' || property === 'subscribers') {
29
+ return reactiveDeps[property];
30
+ }
31
+ return target[property];
32
+ },
33
+ set(target, property, value) {
34
+ const oldValue = target[property];
35
+ target[property] = value;
36
+ if (property === 'locale') {
37
+ reactiveDeps.notify();
38
+ deps.log(`语言已切换到: ${value}`);
39
+ }
40
+ return true;
41
+ },
42
+ deleteProperty(target, property) {
43
+ if (property in target) {
44
+ delete target[property];
45
+ reactiveDeps.notify();
46
+ return true;
47
+ }
48
+ return false;
49
+ }
50
+ }),
51
+ getChangePath: (target, property) => [String(property)]
52
+ });
53
+ function getNestedValue(obj, path) {
54
+ return path.split('.').reduce((current, key) => {
55
+ return current && current[key] !== undefined ? current[key] : undefined;
56
+ }, obj);
57
+ }
58
+ function t(key, params) {
59
+ let message = getNestedValue(reactiveState.messages[reactiveState.locale], key);
60
+ if (message === undefined && reactiveState.fallbackLocale !== reactiveState.locale) {
61
+ message = getNestedValue(reactiveState.messages[reactiveState.fallbackLocale], key);
62
+ }
63
+ if (message === undefined) {
64
+ deps.warn(`Translation key "${key}" not found for locale "${reactiveState.locale}"`);
65
+ return key;
66
+ }
67
+ if (params && typeof message === 'string') {
68
+ return message.replace(/\{(\w+)\}/g, (match, paramKey) => {
69
+ return params[paramKey] !== undefined ? String(params[paramKey]) : match;
70
+ });
71
+ }
72
+ return String(message);
73
+ }
74
+ function setLocale(locale) {
75
+ if (!reactiveState.messages[locale]) {
76
+ deps.warn(`Locale "${locale}" not found in messages`);
77
+ return;
78
+ }
79
+ reactiveState.locale = locale;
80
+ }
81
+ function getLocales() {
82
+ return Object.keys(reactiveState.messages);
83
+ }
84
+ function hasLocale(locale) {
85
+ return locale in reactiveState.messages;
86
+ }
87
+ function addMessages(locale, messages) {
88
+ if (reactiveState.messages[locale]) {
89
+ reactiveState.messages[locale] = {
90
+ ...reactiveState.messages[locale],
91
+ ...messages
92
+ };
93
+ }
94
+ else {
95
+ reactiveState.messages[locale] = messages;
96
+ }
97
+ deps.log(`已添加语言包: ${locale}`);
98
+ }
99
+ function getMessages() {
100
+ return reactiveState.messages[reactiveState.locale] || {};
101
+ }
102
+ return {
103
+ get locale() {
104
+ return reactiveState.locale;
105
+ },
106
+ set locale(value) {
107
+ setLocale(value);
108
+ },
109
+ t,
110
+ setLocale,
111
+ getLocales,
112
+ hasLocale,
113
+ addMessages,
114
+ getMessages,
115
+ subscribe: reactiveState.subscribe,
116
+ dispose: reactiveState.dispose
117
+ };
118
+ }
119
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/functions/utils/i18n.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { CreateReactive } from '../../../types/reactive';
2
+ export interface Permission {
3
+ code: string;
4
+ name: string;
5
+ description?: string;
6
+ }
7
+ export interface Role {
8
+ code: string;
9
+ name: string;
10
+ permissions: string[];
11
+ description?: string;
12
+ }
13
+ export interface PermissionConfig {
14
+ defaultRole: string;
15
+ permissions: Permission[];
16
+ roles: Role[];
17
+ strict?: boolean;
18
+ }
19
+ export interface PermissionDeps {
20
+ createReactive: CreateReactive;
21
+ log: (...args: any[]) => void;
22
+ warn: (...args: any[]) => void;
23
+ }
24
+ export interface PermissionInstance {
25
+ currentRole: string;
26
+ hasPermission: (permissionCode: string) => boolean;
27
+ hasAllPermissions: (permissionCodes: string[]) => boolean;
28
+ hasAnyPermission: (permissionCodes: string[]) => boolean;
29
+ setRole: (roleCode: string) => void;
30
+ getCurrentRole: () => Role | undefined;
31
+ getCurrentPermissions: () => Permission[];
32
+ getRoles: () => Role[];
33
+ getPermissions: () => Permission[];
34
+ hasRole: (roleCode: string) => boolean;
35
+ addRole: (role: Role) => void;
36
+ addPermission: (permission: Permission) => void;
37
+ addPermissionToRole: (roleCode: string, permissionCode: string) => void;
38
+ removePermissionFromRole: (roleCode: string, permissionCode: string) => void;
39
+ }
40
+ export declare function createPermission(config: PermissionConfig, deps: PermissionDeps): PermissionInstance;