@zl-ui-kit/composables 0.3.1 → 0.3.3

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/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # @zl-ui-kit/composables
2
2
 
3
+ > **完整使用文档**:[`@zl-ui-kit/components` 的 README(npm 页面)](https://www.npmjs.com/package/@zl-ui-kit/components) 即 UI 组件权威文档 ——
4
+ > 本包的 Hooks / 工具 / 主题 / 国际化用法都在其中,本文只保留本包速查与运行前提。
5
+
3
6
  ZL UI 组合式函数库(TypeScript):
4
7
 
5
8
  | 模块 | 说明 |
@@ -14,8 +17,15 @@ ZL UI 组合式函数库(TypeScript):
14
17
 
15
18
  ## 运行前提(微前端模块)
16
19
 
17
- `useMicro*`、`usePageTabs` 默认运行于 micro-app 微前端环境(决策 §12-Q11:保留并标注前提)。无主应用环境调试时可在**首次调用** `useMicroGlobalData()` 前执行 `enableGlobalDataMock()` 启用本地 mock。字典模块(`useDict` 等)已独立,不依赖微前端,可直接在任意项目中使用。
20
+ `@micro-zoe/micro-app` 是**可选 peer**(0.3.2 起)。`useMicroApp` / `useMicroAction` / `usePageTabs` 在缺失时会抛出带安装指引的错误;`useMicroGlobalData` 则**自动降级**为本地存储模式(`$zl_locale` / `$zl_theme` / `$zl_token`),因此 `useLocale`、主题、字典在纯 Web 应用中照常可用。
21
+
22
+ ```bash
23
+ # 只在用微前端时才需要
24
+ npm i @micro-zoe/micro-app
25
+ ```
26
+
27
+ `enableGlobalDataMock()` 仍保留用于强制 mock 调试,但**不再是**使用 `useMicroGlobalData` 的必要条件。字典模块(`useDict` 等)本身不依赖微前端。
18
28
 
19
29
  ## 本地调试
20
30
 
21
- playground alias 直指 `src/`;`pnpm build`(tsup)。详见 `docs/调试指南.md`。发布见 `docs/发布流程.md`。
31
+ playground alias 直指 `src/`;`pnpm build`(tsup)。详见 `@zl-ui-kit/components` README §11;发布见 `docs/发布流程.md`。
package/dist/index.d.ts CHANGED
@@ -3,7 +3,6 @@ import { ComputedRef, InjectionKey, WritableComputedRef, Ref, Component, VNode,
3
3
  export { ComputedRef } from 'vue';
4
4
  import { ElMessageBoxOptions, ElMessage, ElMessageBox, ElNotification } from 'element-plus';
5
5
  import { I18nOptions, I18n } from 'vue-i18n';
6
- import microApp from '@micro-zoe/micro-app';
7
6
 
8
7
  /**
9
8
  * 带缓存的 computed 工厂:同一对象的计算结果缓存,作用域销毁时自动清理
@@ -214,7 +213,7 @@ interface UseMicroAppReturn {
214
213
  /** 是否子应用(多层嵌套时可同时为主应用) */
215
214
  isMicroChild: () => boolean;
216
215
  updateApps: () => void;
217
- startMicroApp: (config?: StartMicroAppConfig) => typeof microApp;
216
+ startMicroApp: (config?: StartMicroAppConfig) => any;
218
217
  }
219
218
  declare const useMicroApp: () => UseMicroAppReturn;
220
219
 
package/dist/index.js CHANGED
@@ -160,10 +160,41 @@ import { createI18n } from "vue-i18n";
160
160
 
161
161
  // src/useMicroGlobalData.ts
162
162
  import { isFunction, isPlainObject as isPlainObject2, withResolvers } from "@zl-ui-kit/utils";
163
- import _microApp from "@micro-zoe/micro-app";
164
163
  import { createGlobalState as createGlobalState2, useStorage } from "@vueuse/core";
165
164
  import { computed as computed3, customRef, nextTick, readonly, ref as ref2, toValue, watch } from "vue";
166
- var microApp = window.microApp || _microApp;
165
+
166
+ // src/internal/microApp.ts
167
+ import _microApp from "@micro-zoe/micro-app";
168
+ function usable(mod) {
169
+ try {
170
+ return mod && typeof mod.getGlobalData === "function" ? mod : void 0;
171
+ } catch {
172
+ return void 0;
173
+ }
174
+ }
175
+ function resolveMicroApp() {
176
+ if (typeof window !== "undefined") {
177
+ const injected = window.microApp;
178
+ if (injected)
179
+ return injected;
180
+ }
181
+ return usable(_microApp);
182
+ }
183
+ function isMicroChildRuntime() {
184
+ return typeof window !== "undefined" && !!window.microApp;
185
+ }
186
+ function requireMicroApp(api) {
187
+ const app = resolveMicroApp();
188
+ if (!app) {
189
+ throw new Error(
190
+ `[zl-ui] ${api}() \u4F9D\u8D56 micro-app\uFF0C\u8BF7\u5148\u5B89\u88C5\uFF1Anpm i @micro-zoe/micro-app
191
+ \u82E5\u4E0D\u9700\u8981\u5FAE\u524D\u7AEF\u80FD\u529B\uFF0C\u8BF7\u6539\u7528 @zl-ui-kit/composables \u4E3B\u5165\u53E3\u4E2D\u7684\u5176\u5B83 hook\u3002`
192
+ );
193
+ }
194
+ return app;
195
+ }
196
+
197
+ // src/useMicroGlobalData.ts
167
198
  var devMockEnabled = false;
168
199
  function enableGlobalDataMock(enabled = true) {
169
200
  devMockEnabled = enabled;
@@ -234,7 +265,14 @@ function useDevMockGlobalData() {
234
265
  }, { getConfig, isConfig, setAndWaitUntil });
235
266
  }
236
267
  var useMicroGlobalData = createGlobalState2(() => {
237
- if (devMockEnabled && !window.microApp) {
268
+ const microApp = resolveMicroApp();
269
+ if (!microApp) {
270
+ console.warn(
271
+ "[useMicroGlobalData] \u672A\u68C0\u6D4B\u5230 micro-app\uFF0C\u5DF2\u964D\u7EA7\u4E3A\u672C\u5730\u5B58\u50A8\u6A21\u5F0F\uFF08$zl_locale / $zl_theme / $zl_token\uFF09\u3002\u9700\u8981\u8DE8\u5E94\u7528\u540C\u6B65\u8BF7\u5B89\u88C5 @micro-zoe/micro-app\u3002"
272
+ );
273
+ return useDevMockGlobalData();
274
+ }
275
+ if (devMockEnabled && !isMicroChildRuntime()) {
238
276
  console.warn("[useMicroGlobalData] \u4F7F\u7528\u5F00\u53D1\u6001 mock \u6570\u636E\uFF08enableGlobalDataMock \u5DF2\u5F00\u542F\uFF09");
239
277
  return useDevMockGlobalData();
240
278
  }
@@ -336,7 +374,8 @@ var useMicroGlobalData = createGlobalState2(() => {
336
374
  });
337
375
  });
338
376
  function updateBodyAttribute(key, value) {
339
- ;
377
+ if (typeof document === "undefined")
378
+ return;
340
379
  [document.body, ...document.querySelectorAll("micro-app-body")].forEach((el) => {
341
380
  el.setAttribute(key, String(value ?? ""));
342
381
  });
@@ -425,27 +464,26 @@ function useZlT() {
425
464
  }
426
465
 
427
466
  // src/useMicroAction.ts
428
- import microApp3 from "@micro-zoe/micro-app";
429
467
  import { createSharedComposable, tryOnScopeDispose as tryOnScopeDispose2 } from "@vueuse/core";
430
468
  import { watch as watch3 } from "vue";
431
469
 
432
470
  // src/useMicroApp.ts
433
- import microApp2 from "@micro-zoe/micro-app";
434
471
  import { createGlobalState as createGlobalState3 } from "@vueuse/core";
435
472
  import { ref as ref3 } from "vue";
436
473
  var useMicroApp = createGlobalState3(() => {
437
474
  const apps = ref3([]);
438
475
  function isMicroBase() {
439
- return !!window.__MICRO_APP_BASE_APPLICATION__;
476
+ return typeof window !== "undefined" && !!window.__MICRO_APP_BASE_APPLICATION__;
440
477
  }
441
478
  function isMicroChild() {
442
- return !!window.__MICRO_APP_ENVIRONMENT__;
479
+ return typeof window !== "undefined" && !!window.__MICRO_APP_ENVIRONMENT__;
443
480
  }
444
481
  function updateApps() {
445
- apps.value = microApp2.getActiveApps();
482
+ apps.value = requireMicroApp("useMicroApp().updateApps").getActiveApps();
446
483
  }
447
484
  function startMicroApp(config = {}) {
448
- microApp2.start({
485
+ const microApp = requireMicroApp("useMicroApp().startMicroApp");
486
+ microApp.start({
449
487
  ...config,
450
488
  lifeCycles: {
451
489
  mounted(data) {
@@ -459,7 +497,7 @@ var useMicroApp = createGlobalState3(() => {
459
497
  }
460
498
  }
461
499
  });
462
- return microApp2;
500
+ return microApp;
463
501
  }
464
502
  return { apps, isMicroBase, isMicroChild, updateApps, startMicroApp };
465
503
  });
@@ -500,17 +538,18 @@ var useMicroListener = createSharedComposable(() => {
500
538
  });
501
539
  }
502
540
  if (isMicroBase()) {
541
+ const microApp = requireMicroApp("useMicroAction");
503
542
  listeners.push(() => {
504
543
  apps.value.forEach((app) => {
505
- microApp3.removeDataListener(app, handler);
544
+ microApp.removeDataListener(app, handler);
506
545
  });
507
546
  });
508
547
  watch3(apps, (newApps, oldApps) => {
509
548
  oldApps.forEach((app) => {
510
- microApp3.removeDataListener(app, handler);
549
+ microApp.removeDataListener(app, handler);
511
550
  });
512
551
  newApps.forEach((app) => {
513
- microApp3.addDataListener(app, handler);
552
+ microApp.addDataListener(app, handler);
514
553
  });
515
554
  }, { deep: true });
516
555
  }
@@ -551,8 +590,11 @@ function useMicroAction(action, appName) {
551
590
  const _actionName = _action(action);
552
591
  return (...args) => {
553
592
  const _apps = !appName ? apps.value : apps.value.filter((app) => app === appName);
593
+ if (!_apps.length)
594
+ return;
595
+ const microApp = requireMicroApp("useMicroAction");
554
596
  _apps.forEach((app) => {
555
- microApp3.setData(app, { [JSON.stringify(args)]: _actionName });
597
+ microApp.setData(app, { [JSON.stringify(args)]: _actionName });
556
598
  });
557
599
  };
558
600
  }
@@ -571,7 +613,8 @@ function useMicroActionAsync(action, appName) {
571
613
  if (isMicroChild()) {
572
614
  return (...args) => {
573
615
  return new Promise((resolve, reject) => {
574
- microApp3.setData(appName, { [JSON.stringify(args)]: _actionName }, (promises) => {
616
+ const microApp = requireMicroApp("useMicroActionAsync");
617
+ microApp.setData(appName, { [JSON.stringify(args)]: _actionName }, (promises) => {
575
618
  Promise.all(promises).then(resolve, reject);
576
619
  });
577
620
  });
@@ -590,27 +633,27 @@ function useMicroResultListener(action, callback) {
590
633
  }
591
634
  }
592
635
  };
593
- const micro = isMicroBase() ? microApp3 : window.microApp;
636
+ const micro = isMicroBase() ? requireMicroApp("useMicroResultListener") : typeof window !== "undefined" ? window.microApp : void 0;
594
637
  micro?.addDataListener(handler);
595
638
  }
596
639
  function dispatchMicroAction(action, appName, ...data) {
597
640
  const _actionName = _action(action);
598
641
  return new Promise((resolve) => {
599
- microApp3.setData(appName, { [JSON.stringify(data)]: _actionName }, resolve);
642
+ requireMicroApp("dispatchMicroAction").setData(appName, { [JSON.stringify(data)]: _actionName }, resolve);
600
643
  });
601
644
  }
602
645
 
603
646
  // src/usePageTabs.ts
604
- import microApp4 from "@micro-zoe/micro-app";
605
647
  import { createGlobalState as createGlobalState4 } from "@vueuse/core";
606
648
  import { computed as computed4, getCurrentInstance, nextTick as nextTick2, reactive, readonly as readonly2, ref as ref4, shallowReactive, watch as watch4 } from "vue";
607
649
  function pushMicroRouter({ micro, url }) {
608
650
  if (!micro || !url)
609
651
  return;
610
- const activeApps = microApp4.getActiveApps();
652
+ const microApp = requireMicroApp("usePageTabs");
653
+ const activeApps = microApp.getActiveApps();
611
654
  if (!activeApps.includes(micro))
612
655
  return;
613
- return microApp4.router.push({ name: micro, path: url });
656
+ return microApp.router.push({ name: micro, path: url });
614
657
  }
615
658
  var createPageTabsState = createGlobalState4(() => {
616
659
  const { on } = useMicroListener();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zl-ui-kit/composables",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "type": "module",
5
5
  "description": "ZL UI 组合式函数库:useRequest 请求体系、微前端通信层、全局消息、字典、国际化等",
6
6
  "license": "MIT",
@@ -19,10 +19,10 @@
19
19
  ],
20
20
  "sideEffects": false,
21
21
  "dependencies": {
22
- "@zl-ui-kit/utils": "0.3.1"
22
+ "@zl-ui-kit/utils": "0.3.3"
23
23
  },
24
24
  "peerDependencies": {
25
- "@micro-zoe/micro-app": "1.0.0-rc.18",
25
+ "@micro-zoe/micro-app": ">=1.0.0-rc.10 <2",
26
26
  "@vueuse/core": "^12.3.0",
27
27
  "element-plus": "^2.9.2",
28
28
  "vue": "^3.5.13",
@@ -30,6 +30,9 @@
30
30
  "vue-router": "^4.5.0"
31
31
  },
32
32
  "peerDependenciesMeta": {
33
+ "@micro-zoe/micro-app": {
34
+ "optional": true
35
+ },
33
36
  "vue-router": {
34
37
  "optional": true
35
38
  }
@@ -41,8 +44,8 @@
41
44
  "cross-env": "^7.0.3",
42
45
  "tsup": "^8.3.5",
43
46
  "typescript": "^5.7.3",
44
- "@jichuang/eslint-config": "1.0.0",
45
- "@jichuang/tsconfig": "1.0.0"
47
+ "@jichuang/tsconfig": "1.0.0",
48
+ "@jichuang/eslint-config": "1.0.0"
46
49
  },
47
50
  "repository": {
48
51
  "type": "git",