@melt-js/libs-core-vue3 0.0.0-stage → 2026.11.14-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,21 @@
1
- # Temporary Holding Version
1
+ # @melt-js/libs-core-vue3
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ vue3 的远程组件 UI 适配。地址协议、缓存、请求串行与加载状态来自 libs-core;本包只负责组件生命周期、props/事件/插槽透传、加载展示和渲染错误兜底。
4
+
5
+ ```js
6
+ import { defineHelComponent, preloadHelLibs } from '@melt-js/libs-core-vue3'
7
+
8
+ const Chart = defineHelComponent({
9
+ type: 'github',
10
+ dep: '@example/comps-charts',
11
+ exportName: 'Chart',
12
+ })
13
+ ```
14
+
15
+ 预加载与懒加载共用 `{ type, base }` 地址协议:unpkg 保留原始包名与 scope;GitHub 从 `@scope` 推导组织域名,无 scope 时需传 `base`。公共库不默认补任何组织名。以上包名用于说明 API;须先部署对应模块。组件挂载时才发起加载。高频模块继续用 preloadHelLibs 后动态导入业务入口;低频模块用 defineHelComponent。
16
+
17
+ 默认展示加载提示;下载失败、导出缺失或子组件渲染错误时展示错误和“重试”按钮。没有自动重试或内置超时。可传 loadingComponent / errorComponent 自定义 UI,错误组件接收 error 与 retry;onError 可报告错误。
18
+
19
+ 有宿主运行时注入步骤时,可用 loader: async () => moduleObject 替代 dep;推荐 loader 内调用核心 loadHelLib,以复用预加载缓存。
20
+
21
+ 包以原生 ESM 和声明文件交付,无构建产物步骤。发布顺序:libs-core → 本适配包 → 消费方;将 workspace:* 换为包含这些 API 的已发布版本即可独立安装。
package/package.json CHANGED
@@ -1,6 +1,43 @@
1
1
  {
2
2
  "name": "@melt-js/libs-core-vue3",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "2026.11.14-1",
4
+ "type": "module",
5
+ "description": "Melt 远程组件 vue3 UI 薄适配层",
6
+ "main": "./src/index.mjs",
7
+ "module": "./src/index.mjs",
8
+ "types": "./src/index.d.mts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./src/index.d.mts",
12
+ "import": "./src/index.mjs",
13
+ "default": "./src/index.mjs"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
17
+ "files": [
18
+ "src",
19
+ "README.md"
20
+ ],
21
+ "sideEffects": false,
22
+ "dependencies": {
23
+ "@melt-js/libs-core": "2026.11.14"
24
+ },
25
+ "peerDependencies": {
26
+ "vue": "^3.4.0"
27
+ },
28
+ "devDependencies": {
29
+ "vue": "3.5.45",
30
+ "jsdom": "26.1.0",
31
+ "typescript": "5.9.3"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public",
35
+ "registry": "https://registry.npmjs.org",
36
+ "tag": "latest"
37
+ },
38
+ "scripts": {
39
+ "typecheck": "tsc --noEmit",
40
+ "test": "node --test tests/*.test.mjs",
41
+ "publish:stage": "hel-publish-stage"
42
+ }
6
43
  }
@@ -0,0 +1,13 @@
1
+ import type { Component, DefineComponent } from 'vue'
2
+ import type { HelComponentOptions } from '@melt-js/libs-core'
3
+ export * from '@melt-js/libs-core'
4
+
5
+ export type HelErrorProps = { error: unknown; retry: () => void }
6
+ export type DefineHelComponentOptions = HelComponentOptions & {
7
+ loadingComponent?: Component
8
+ /** Receives error and retry props. */
9
+ errorComponent?: Component
10
+ }
11
+ export const HelLoading: Component
12
+ export const HelError: Component<HelErrorProps>
13
+ export function defineHelComponent(options: DefineHelComponentOptions): DefineComponent
package/src/index.mjs ADDED
@@ -0,0 +1,39 @@
1
+ import { defineComponent, h, onBeforeUnmount, onErrorCaptured, onMounted, shallowRef } from 'vue'
2
+ import { createHelComponentResource } from '@melt-js/libs-core'
3
+ export * from '@melt-js/libs-core'
4
+
5
+ export const HelLoading = defineComponent({
6
+ name: 'HelLoading',
7
+ setup: () => () => h('p', { role: 'status' }, '正在加载远程组件…'),
8
+ })
9
+ export const HelError = defineComponent({
10
+ name: 'HelError',
11
+ props: ['error', 'retry'],
12
+ setup: props => () => h('div', { role: 'alert' }, [
13
+ h('p', '远程组件不可用:' + String(props.error)),
14
+ h('button', { type: 'button', onClick: props.retry }, '重试'),
15
+ ]),
16
+ })
17
+
18
+ export function defineHelComponent(options) {
19
+ return defineComponent({
20
+ name: 'HelRemote(' + options.exportName + ')',
21
+ inheritAttrs: false,
22
+ setup(_, { attrs, slots }) {
23
+ const state = shallowRef({ status: 'loading', component: null, error: null })
24
+ const resource = createHelComponentResource(options, next => { state.value = next })
25
+ onMounted(resource.load)
26
+ onBeforeUnmount(resource.dispose)
27
+ onErrorCaptured(error => {
28
+ if (state.value.status === 'error') return
29
+ resource.fail(error)
30
+ return false
31
+ })
32
+ return () => {
33
+ if (state.value.status === 'error') return h(options.errorComponent || HelError, { error: state.value.error, retry: resource.retry })
34
+ if (state.value.status !== 'ready') return h(options.loadingComponent || HelLoading)
35
+ return h(state.value.component, attrs, slots)
36
+ }
37
+ },
38
+ })
39
+ }