wevu 7.5.0 → 7.6.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.
- package/dist/config/defaults.d.mts +44 -0
- package/dist/config/pageFeatures.d.mts +51 -0
- package/dist/config.d.mts +4 -0
- package/dist/config.mjs +1 -0
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.153.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/defineProperty.mjs +1 -1
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.153.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/toPrimitive.mjs +1 -1
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.153.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/toPropertyKey.mjs +1 -1
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.153.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/typeof.mjs +1 -1
- package/dist/dev/package.mjs +1 -1
- package/dist/dev/reactivity/computed.mjs.map +1 -1
- package/dist/dev/reactivity/core.mjs +1 -1
- package/dist/dev/reactivity/ref.mjs +1 -1
- package/dist/dev/reactivity/ref.mjs.map +1 -1
- package/dist/dev/runtime/define/setupResult.mjs +3 -5
- package/dist/dev/runtime/define/setupResult.mjs.map +1 -1
- package/dist/dev/runtime/define.mjs +2 -7
- package/dist/dev/runtime/define.mjs.map +1 -1
- package/dist/dev/runtime/pageLayout.mjs.map +1 -1
- package/dist/dev/runtime/register/component/hmrRegistration.mjs +15 -0
- package/dist/dev/runtime/register/component/hmrRegistration.mjs.map +1 -0
- package/dist/dev/runtime/register/component/props.mjs +4 -4
- package/dist/dev/runtime/register/component/props.mjs.map +1 -1
- package/dist/dev/runtime/register/component/registerDefinition.mjs +6 -4
- package/dist/dev/runtime/register/component/registerDefinition.mjs.map +1 -1
- package/dist/dev/runtime/register/component.mjs +22 -12
- package/dist/dev/runtime/register/component.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs +2 -25
- package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance.mjs +11 -12
- package/dist/dev/runtime/register/runtimeInstance.mjs.map +1 -1
- package/dist/dev/runtime/register/watch.mjs +1 -3
- package/dist/dev/runtime/register/watch.mjs.map +1 -1
- package/dist/index.d.mts +13 -8
- package/dist/internal-reactivity.d.mts +2 -1
- package/dist/jsx-runtime.d.mts +2 -1
- package/dist/macros/shared.d.mts +3 -2
- package/dist/macros.d.mts +3 -10
- package/dist/package.mjs +1 -1
- package/dist/reactivity/asyncDerivation.d.mts +2 -1
- package/dist/reactivity/computed.d.mts +3 -7
- package/dist/reactivity/core.mjs +1 -1
- package/dist/reactivity/index.d.mts +2 -1
- package/dist/reactivity/reactive/mutation.d.mts +2 -1
- package/dist/reactivity/ref.d.mts +1 -1
- package/dist/reactivity/ref.mjs +1 -1
- package/dist/reactivity/toRefs.d.mts +2 -1
- package/dist/reactivity/watch/types.d.mts +2 -1
- package/dist/router/types.d.mts +2 -1
- package/dist/runtime/app/setData/observation.d.mts +2 -1
- package/dist/runtime/app.d.mts +1 -1
- package/dist/runtime/capabilities.d.mts +2 -2
- package/dist/runtime/define/setupResult.mjs +1 -1
- package/dist/runtime/define.d.mts +5 -3
- package/dist/runtime/define.mjs +1 -1
- package/dist/runtime/features/publicLayout.d.mts +2 -1
- package/dist/runtime/features/scopedSlots.d.mts +1 -1
- package/dist/runtime/index.d.mts +7 -4
- package/dist/runtime/pageLayout.d.mts +3 -2
- package/dist/runtime/register/app.d.mts +1 -1
- package/dist/runtime/register/component/hmrRegistration.mjs +1 -0
- package/dist/runtime/register/component/props.mjs +1 -1
- package/dist/runtime/register/component/registerDefinition.mjs +1 -1
- package/dist/runtime/register/component.d.mts +1 -1
- package/dist/runtime/register/component.mjs +1 -1
- package/dist/runtime/register/inline.d.mts +2 -1
- package/dist/runtime/register/runtimeInstance/setupPhase.mjs +1 -1
- package/dist/runtime/register/runtimeInstance.d.mts +3 -2
- package/dist/runtime/register/runtimeInstance.mjs +1 -1
- package/dist/runtime/register/setup.d.mts +2 -1
- package/dist/runtime/register/watch.d.mts +2 -1
- package/dist/runtime/register/watch.mjs +1 -1
- package/dist/runtime/templateRefTypes.d.mts +3 -5
- package/dist/runtime/types/core.d.mts +3 -7
- package/dist/runtime/types/miniprogramHostSources.d.mts +1 -0
- package/dist/runtime/types/options.d.mts +6 -52
- package/dist/runtime/types/props/propTypes.d.mts +2 -1
- package/dist/runtime/types/props/router.d.mts +2 -1
- package/dist/runtime/types/props/setup.d.mts +2 -1
- package/dist/runtime/types/runtime.d.mts +2 -1
- package/dist/runtime/types.d.mts +5 -3
- package/dist/runtime/uniAppHost.d.mts +2 -1
- package/dist/runtime/vueCompat/model.d.mts +3 -2
- package/dist/runtime/vueCompat/router.d.mts +2 -1
- package/dist/store/storeToRefs.d.mts +2 -1
- package/dist/store/types.d.mts +4 -3
- package/dist/types/definitions.d.mts +7 -0
- package/dist/types/pageLayout.d.mts +4 -0
- package/dist/types/pageMeta.d.mts +10 -0
- package/dist/types/reactivity.d.mts +13 -0
- package/dist/types.d.mts +5 -0
- package/dist/types.mjs +1 -0
- package/dist/vue-demi.d.mts +13 -7
- package/dist/vue-types.d.mts +3 -4
- package/package.json +21 -12
- /package/dist/_virtual/{_@oxc-project_runtime@0.153.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/defineProperty.mjs +0 -0
- /package/dist/_virtual/{_@oxc-project_runtime@0.153.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/toPrimitive.mjs +0 -0
- /package/dist/_virtual/{_@oxc-project_runtime@0.153.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/toPropertyKey.mjs +0 -0
- /package/dist/_virtual/{_@oxc-project_runtime@0.153.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/typeof.mjs +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { SetDataSnapshotOptions } from "../runtime/types/setData.mjs";
|
|
2
|
+
import { PageFeatures } from "./pageFeatures.mjs";
|
|
3
|
+
//#region src/config/defaults.d.ts
|
|
4
|
+
/** 编译期默认值允许的 JSON 数据;对象的可选字段可省略。 */
|
|
5
|
+
export type WevuConfigValue = string | number | boolean | null | WevuConfigValue[] | WevuConfigRecord;
|
|
6
|
+
export interface WevuConfigRecord {
|
|
7
|
+
[key: string]: WevuConfigValue | undefined;
|
|
8
|
+
}
|
|
9
|
+
/** 编译配置不会保留回调;运行时 setWevuDefaults 仍接受完整选项。 */
|
|
10
|
+
export type WevuConfigSetDataOptions = Omit<SetDataSnapshotOptions, 'debug'> & {
|
|
11
|
+
debug?: never;
|
|
12
|
+
};
|
|
13
|
+
/** 可写入编译产物的组件静态选项,不包含 RegExp 纯数据匹配器。 */
|
|
14
|
+
export interface WevuConfigComponentOptions {
|
|
15
|
+
multipleSlots?: boolean;
|
|
16
|
+
addGlobalClass?: boolean;
|
|
17
|
+
styleIsolation?: 'isolated' | 'apply-shared' | 'shared' | 'page-isolated' | 'page-apply-shared' | 'page-shared';
|
|
18
|
+
virtualHost?: boolean;
|
|
19
|
+
pureDataPattern?: never;
|
|
20
|
+
}
|
|
21
|
+
export interface WevuConfigAppDefaults {
|
|
22
|
+
data?: WevuConfigRecord;
|
|
23
|
+
globalData?: WevuConfigRecord;
|
|
24
|
+
setData?: WevuConfigSetDataOptions;
|
|
25
|
+
[key: string]: WevuConfigValue | undefined;
|
|
26
|
+
}
|
|
27
|
+
export interface WevuConfigComponentDefaults {
|
|
28
|
+
data?: WevuConfigRecord;
|
|
29
|
+
setData?: WevuConfigSetDataOptions;
|
|
30
|
+
features?: { [Key in keyof PageFeatures]: PageFeatures[Key]; };
|
|
31
|
+
allowNullPropInput?: boolean;
|
|
32
|
+
allowFunctionProps?: boolean | 'auto';
|
|
33
|
+
setupLifecycle?: 'created' | 'attached';
|
|
34
|
+
externalClasses?: string[];
|
|
35
|
+
behaviors?: string[];
|
|
36
|
+
options?: { [Key in keyof WevuConfigComponentOptions]: WevuConfigComponentOptions[Key]; };
|
|
37
|
+
[key: string]: WevuConfigValue | undefined;
|
|
38
|
+
}
|
|
39
|
+
/** 仅供构建配置使用的 JSON 默认值;运行时 WevuDefaults 的 API 保持独立。 */
|
|
40
|
+
export interface WevuConfigDefaults {
|
|
41
|
+
app?: WevuConfigAppDefaults;
|
|
42
|
+
component?: WevuConfigComponentDefaults;
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//#region src/config/pageFeatures.d.ts
|
|
2
|
+
export interface PageFeatures {
|
|
3
|
+
/**
|
|
4
|
+
* 启用页面滚动事件(注入 `onPageScroll`)。
|
|
5
|
+
*/
|
|
6
|
+
enableOnPageScroll?: boolean;
|
|
7
|
+
/**
|
|
8
|
+
* 启用下拉刷新事件(注入 `onPullDownRefresh`;仍需在页面配置开启 enablePullDownRefresh)。
|
|
9
|
+
*/
|
|
10
|
+
enableOnPullDownRefresh?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* 启用触底事件(注入 `onReachBottom`)。
|
|
13
|
+
*/
|
|
14
|
+
enableOnReachBottom?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* 启用路由动画完成事件(注入 `onRouteDone`)。
|
|
17
|
+
*/
|
|
18
|
+
enableOnRouteDone?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* 启用 onReady 阶段的 routeDone 兜底补发。
|
|
21
|
+
*
|
|
22
|
+
* 默认关闭:保持与微信小程序平台事件更一致的行为。
|
|
23
|
+
* 仅当个别 IDE/基础库未派发 routeDone 且业务确实依赖该时机时再开启。
|
|
24
|
+
*/
|
|
25
|
+
enableOnRouteDoneFallback?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* 启用 Tab 点击事件(注入 `onTabItemTap`)。
|
|
28
|
+
*/
|
|
29
|
+
enableOnTabItemTap?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* 启用窗口尺寸变化事件(注入 `onResize`)。
|
|
32
|
+
*/
|
|
33
|
+
enableOnResize?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* 启用“转发/分享给朋友”(注入 `onShareAppMessage`,使右上角菜单显示“转发”)。
|
|
36
|
+
*/
|
|
37
|
+
enableOnShareAppMessage?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* 启用“分享到朋友圈”(注入 `onShareTimeline`,使右上角菜单显示“分享到朋友圈”)。
|
|
40
|
+
*/
|
|
41
|
+
enableOnShareTimeline?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* 启用“收藏”(注入 `onAddToFavorites`)。
|
|
44
|
+
*/
|
|
45
|
+
enableOnAddToFavorites?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* 启用“退出状态保存”(注入 `onSaveExitState`)。
|
|
48
|
+
*/
|
|
49
|
+
enableOnSaveExitState?: boolean;
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { PageLayoutMeta, PageMeta } from "./types/pageMeta.mjs";
|
|
2
|
+
import { PageFeatures } from "./config/pageFeatures.mjs";
|
|
3
|
+
import { WevuConfigAppDefaults, WevuConfigComponentDefaults, WevuConfigComponentOptions, WevuConfigDefaults, WevuConfigRecord, WevuConfigSetDataOptions, WevuConfigValue } from "./config/defaults.mjs";
|
|
4
|
+
export type { PageFeatures, PageLayoutMeta, PageMeta, WevuConfigAppDefaults, WevuConfigComponentDefaults, WevuConfigComponentOptions, WevuConfigDefaults, WevuConfigRecord, WevuConfigSetDataOptions, WevuConfigValue };
|
package/dist/config.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import toPropertyKey from "./toPropertyKey.mjs";
|
|
2
2
|
|
|
3
|
-
//#region \0@oxc-project+runtime@0.
|
|
3
|
+
//#region \0@oxc-project+runtime@0.154.0/helpers/esm/defineProperty.js
|
|
4
4
|
function _defineProperty(e, r, t) {
|
|
5
5
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
6
6
|
value: t,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _typeof from "./typeof.mjs";
|
|
2
2
|
|
|
3
|
-
//#region \0@oxc-project+runtime@0.
|
|
3
|
+
//#region \0@oxc-project+runtime@0.154.0/helpers/esm/toPrimitive.js
|
|
4
4
|
function toPrimitive(t, r) {
|
|
5
5
|
if ("object" != _typeof(t) || !t) return t;
|
|
6
6
|
var e = t[Symbol.toPrimitive];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _typeof from "./typeof.mjs";
|
|
2
2
|
import toPrimitive from "./toPrimitive.mjs";
|
|
3
3
|
|
|
4
|
-
//#region \0@oxc-project+runtime@0.
|
|
4
|
+
//#region \0@oxc-project+runtime@0.154.0/helpers/esm/toPropertyKey.js
|
|
5
5
|
function toPropertyKey(t) {
|
|
6
6
|
var i = toPrimitive(t, "string");
|
|
7
7
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region \0@oxc-project+runtime@0.
|
|
1
|
+
//#region \0@oxc-project+runtime@0.154.0/helpers/esm/typeof.js
|
|
2
2
|
function _typeof(o) {
|
|
3
3
|
"@babel/helpers - typeof";
|
|
4
4
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
package/dist/dev/package.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computed.mjs","names":[],"sources":["../../../src/reactivity/computed.ts"],"sourcesContent":["import type { ReactiveEffect } from './core'\nimport type { Ref } from './ref'\nimport { createComputedEffect, track, trigger } from './core'\nimport { markRaw } from './reactive'\nimport { ReactiveFlags } from './reactive/shared'\nimport { markAsRef } from './ref'\n\nexport type ComputedGetter
|
|
1
|
+
{"version":3,"file":"computed.mjs","names":[],"sources":["../../../src/reactivity/computed.ts"],"sourcesContent":["import type { ComputedGetter, ComputedSetter, WritableComputedOptions } from '../types/reactivity'\nimport type { ReactiveEffect } from './core'\nimport type { Ref } from './ref'\nimport { createComputedEffect, track, trigger } from './core'\nimport { markRaw } from './reactive'\nimport { ReactiveFlags } from './reactive/shared'\nimport { markAsRef } from './ref'\n\nexport type { ComputedGetter, ComputedSetter, WritableComputedOptions } from '../types/reactivity'\n\ndeclare const computedBrand: unique symbol\ndeclare const writableComputedBrand: unique symbol\n\nconst computedRefs = new WeakSet<object>()\n\n/** 识别计算来源,供 Store 将派生值与可持久化 state 分离。 */\nexport function isComputedRef(value: unknown): value is ComputedRef | WritableComputedRef<any> {\n return typeof value === 'object' && value !== null && computedRefs.has(value)\n}\n\ninterface BaseComputedRef<T, S = T> extends Ref<T, S> {\n [key: symbol]: any\n}\n\nexport interface ComputedRef<T = any> extends BaseComputedRef<T> {\n readonly [computedBrand]: true\n readonly value: T\n}\n\nexport interface WritableComputedRef<T, S = T> extends BaseComputedRef<T, S> {\n readonly [writableComputedBrand]: true\n value: T\n}\n\nexport function computed<T>(getter: ComputedGetter<T>): ComputedRef<T>\nexport function computed<T>(options: WritableComputedOptions<T>): WritableComputedRef<T>\nexport function computed<T>(\n getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>,\n): ComputedRef<T> | WritableComputedRef<T> {\n let getter: ComputedGetter<T>\n let setter: ComputedSetter<T>\n const onlyGetter = typeof getterOrOptions === 'function'\n if (onlyGetter) {\n getter = getterOrOptions as ComputedGetter<T>\n setter = () => {\n throw new Error('计算属性是只读的')\n }\n }\n else {\n getter = (getterOrOptions as WritableComputedOptions<T>).get\n setter = (getterOrOptions as WritableComputedOptions<T>).set\n }\n let value: T\n let dirty = true\n let runner: ReactiveEffect<T>\n const obj: any = {\n get value() {\n if (dirty) {\n value = runner()\n dirty = false\n }\n track(obj, 'value')\n return value\n },\n set value(newValue: T) {\n setter(newValue)\n },\n }\n markAsRef(obj)\n markRaw(obj)\n computedRefs.add(obj)\n Object.defineProperty(obj, ReactiveFlags.IS_READONLY, { value: onlyGetter })\n runner = createComputedEffect(getter, {\n lazy: true,\n scheduler: () => {\n if (!dirty) {\n dirty = true\n trigger(obj, 'value')\n }\n },\n })\n return (onlyGetter ? obj as ComputedRef<T> : obj as WritableComputedRef<T>)\n}\n"],"mappings":";;;;;AAaA,MAAM,+BAAe,IAAI,QAAgB;;AAGzC,SAAgB,cAAc,OAAiE;CAC7F,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,aAAa,IAAI,KAAK;AAC9E;AAkBA,SAAgB,SACd,iBACyC;CACzC,IAAI;CACJ,IAAI;CACJ,MAAM,aAAa,OAAO,oBAAoB;CAC9C,IAAI,YAAY;EACd,SAAS;EACT,eAAe;GACb,MAAM,IAAI,MAAM,UAAU;EAC5B;CACF,OACK;EACH,SAAU,gBAA+C;EACzD,SAAU,gBAA+C;CAC3D;CACA,IAAI;CACJ,IAAI,QAAQ;CACZ,IAAI;CACJ,MAAM,MAAW;EACf,IAAI,QAAQ;GACV,IAAI,OAAO;IACT,QAAQ,OAAO;IACf,QAAQ;GACV;GACA,MAAM,KAAK,OAAO;GAClB,OAAO;EACT;EACA,IAAI,MAAM,UAAa;GACrB,OAAO,QAAQ;EACjB;CACF;CACA,UAAU,GAAG;CACb,QAAQ,GAAG;CACX,aAAa,IAAI,GAAG;CACpB,OAAO,eAAe,uBAAgC,EAAE,OAAO,WAAW,CAAC;CAC3E,SAAS,qBAAqB,QAAQ;EACpC,MAAM;EACN,iBAAiB;GACf,IAAI,CAAC,OAAO;IACV,QAAQ;IACR,QAAQ,KAAK,OAAO;GACtB;EACF;CACF,CAAC;CACD,OAAQ,aAAa,MAAwB;AAC/C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { queueJob } from "../scheduler.mjs";
|
|
2
|
-
import _defineProperty from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
+
import _defineProperty from "../_virtual/_@oxc-project_runtime@0.154.0/helpers/esm/defineProperty.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/reactivity/core.ts
|
|
5
5
|
const targetMap = /* @__PURE__ */ new WeakMap();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import _defineProperty from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import _defineProperty from "../_virtual/_@oxc-project_runtime@0.154.0/helpers/esm/defineProperty.mjs";
|
|
2
2
|
import { trackEffects, triggerEffects } from "./core.mjs";
|
|
3
3
|
import { convertToReactive, markRaw } from "./reactive.mjs";
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ref.mjs","names":[],"sources":["../../../src/reactivity/ref.ts"],"sourcesContent":["import type { Ref as VueRef, ShallowRef as VueShallowRef } from '../
|
|
1
|
+
{"version":3,"file":"ref.mjs","names":[],"sources":["../../../src/reactivity/ref.ts"],"sourcesContent":["import type { Ref as VueRef, ShallowRef as VueShallowRef } from '../types/reactivity'\nimport type { ComputedRef, WritableComputedRef } from './computed'\nimport type { Dep } from './core'\nimport { trackEffects, triggerEffects } from './core'\nimport { convertToReactive, markRaw } from './reactive'\n\n// 类型对齐 @vue/reactivity.Ref:\n// - 用于 Volar 模板自动解包(UnwrapRef 依赖 RefSymbol 品牌标记)。\n// - 运行时仍使用 wevu 自己的 ref 实现,不依赖 Vue。\nexport type Ref<T = any, S = T> = VueRef<T, S>\nexport type ShallowRef<T = any> = VueShallowRef<T>\nexport type MaybeRef<T = any> = T | Ref<T> | ShallowRef<T> | WritableComputedRef<T>\nexport type MaybeRefOrGetter<T = any> = MaybeRef<T> | ComputedRef<T> | (() => T)\n\nexport const RefFlag = '__v_isRef' as const\n\nexport function markAsRef<T extends object>(target: T): T {\n try {\n Object.defineProperty(target, RefFlag, {\n value: true,\n configurable: true,\n })\n }\n catch {\n ;(target as any)[RefFlag] = true\n }\n return target\n}\n\nexport function isRef(value: unknown): value is Ref<any> {\n return Boolean(value && typeof value === 'object' && (value as any)[RefFlag] === true)\n}\n\nclass RefImpl<T> {\n private _value: T\n private _rawValue: T\n public dep: Dep | undefined\n constructor(value: T) {\n markAsRef(this)\n this._rawValue = value\n this._value = convertToReactive(value)\n }\n\n get value(): T {\n if (!this.dep) {\n this.dep = new Set()\n }\n trackEffects(this.dep)\n return this._value\n }\n\n set value(newValue: T) {\n if (!Object.is(newValue, this._rawValue)) {\n this._rawValue = newValue\n this._value = convertToReactive(newValue)\n if (this.dep) {\n triggerEffects(this.dep)\n }\n }\n }\n}\n\nexport function ref<T = any>(): Ref<T | undefined>\nexport function ref<T>(value: T): Ref<T>\nexport function ref<T>(value?: T): Ref<T | undefined> {\n if (isRef(value)) {\n return value\n }\n return markRaw(new RefImpl(value as T | undefined)) as any\n}\n\nexport function unref<T>(value: MaybeRef<T> | ComputedRef<T>): T {\n return isRef(value) ? value.value : value\n}\n\nexport function toValue<T>(source: MaybeRefOrGetter<T>): T {\n return typeof source === 'function' ? (source as () => T)() : unref(source)\n}\n\n/**\n * 自定义 ref 工厂:用于创建可显式控制 track/trigger 的自定义 ref\n */\nexport type CustomRefFactory<T> = (\n track: () => void,\n trigger: () => void,\n) => {\n get: () => T\n set: (value: T) => void\n}\n\nexport interface CustomRefOptions<T> {\n get: () => T\n set: (value: T) => void\n}\n\nexport type CustomRefSource<T> = CustomRefFactory<T> | CustomRefOptions<T>\n\nclass CustomRefImpl<T> {\n private _getValue: () => T\n private _setValue: (value: T) => void\n public dep: Dep | undefined\n\n constructor(factory: CustomRefSource<T>, defaultValue?: T) {\n markAsRef(this)\n const fallbackValue = defaultValue\n const track = () => {\n if (!this.dep) {\n this.dep = new Set()\n }\n trackEffects(this.dep)\n }\n const trigger = () => {\n if (this.dep) {\n triggerEffects(this.dep)\n }\n }\n\n const withFallback = (value: T) => (value === undefined && fallbackValue !== undefined ? fallbackValue as T : value)\n\n if (typeof factory === 'function') {\n const handlers = factory(track, trigger)\n this._getValue = () => withFallback(handlers.get())\n this._setValue = value => handlers.set(value)\n return\n }\n\n const handlers = factory\n this._getValue = () => {\n track()\n return withFallback(handlers.get())\n }\n this._setValue = (value: T) => {\n handlers.set(value)\n trigger()\n }\n }\n\n get value(): T {\n return this._getValue()\n }\n\n set value(newValue: T) {\n this._setValue(newValue)\n }\n}\n\nexport function customRef<T>(factory: CustomRefSource<T>, defaultValue?: T): Ref<T> {\n return markRaw(new CustomRefImpl(factory, defaultValue)) as any\n}\n"],"mappings":";;;;;AAcA,MAAa,UAAU;AAEvB,SAAgB,UAA4B,QAAc;CACxD,IAAI;EACF,OAAO,eAAe,QAAQ,SAAS;GACrC,OAAO;GACP,cAAc;EAChB,CAAC;CACH,QACM;EACH,AAAC,OAAe,WAAW;CAC9B;CACA,OAAO;AACT;AAEA,SAAgB,MAAM,OAAmC;CACvD,OAAO,QAAQ,SAAS,OAAO,UAAU,YAAa,uBAA2B,IAAI;AACvF;AAEA,IAAM,UAAN,MAAiB;CAIf,YAAY,OAAU;wBAHd;wBACA;wBACD;EAEL,UAAU,IAAI;EACd,KAAK,YAAY;EACjB,KAAK,SAAS,kBAAkB,KAAK;CACvC;CAEA,IAAI,QAAW;EACb,IAAI,CAAC,KAAK,KACR,KAAK,sBAAM,IAAI,IAAI;EAErB,aAAa,KAAK,GAAG;EACrB,OAAO,KAAK;CACd;CAEA,IAAI,MAAM,UAAa;EACrB,IAAI,CAAC,OAAO,GAAG,UAAU,KAAK,SAAS,GAAG;GACxC,KAAK,YAAY;GACjB,KAAK,SAAS,kBAAkB,QAAQ;GACxC,IAAI,KAAK,KACP,eAAe,KAAK,GAAG;EAE3B;CACF;AACF;AAIA,SAAgB,IAAO,OAA+B;CACpD,IAAI,MAAM,KAAK,GACb,OAAO;CAET,OAAO,QAAQ,IAAI,QAAQ,KAAsB,CAAC;AACpD;AAEA,SAAgB,MAAS,OAAwC;CAC/D,OAAO,MAAM,KAAK,IAAI,MAAM,QAAQ;AACtC;AAEA,SAAgB,QAAW,QAAgC;CACzD,OAAO,OAAO,WAAW,aAAc,OAAmB,IAAI,MAAM,MAAM;AAC5E;AAoBA,IAAM,gBAAN,MAAuB;CAKrB,YAAY,SAA6B,cAAkB;wBAJnD;wBACA;wBACD;EAGL,UAAU,IAAI;EACd,MAAM,gBAAgB;EACtB,MAAM,cAAc;GAClB,IAAI,CAAC,KAAK,KACR,KAAK,sBAAM,IAAI,IAAI;GAErB,aAAa,KAAK,GAAG;EACvB;EACA,MAAM,gBAAgB;GACpB,IAAI,KAAK,KACP,eAAe,KAAK,GAAG;EAE3B;EAEA,MAAM,gBAAgB,UAAc,UAAU,UAAa,kBAAkB,SAAY,gBAAqB;EAE9G,IAAI,OAAO,YAAY,YAAY;GACjC,MAAM,WAAW,QAAQ,OAAO,OAAO;GACvC,KAAK,kBAAkB,aAAa,SAAS,IAAI,CAAC;GAClD,KAAK,aAAY,UAAS,SAAS,IAAI,KAAK;GAC5C;EACF;EAEA,MAAM,WAAW;EACjB,KAAK,kBAAkB;GACrB,MAAM;GACN,OAAO,aAAa,SAAS,IAAI,CAAC;EACpC;EACA,KAAK,aAAa,UAAa;GAC7B,SAAS,IAAI,KAAK;GAClB,QAAQ;EACV;CACF;CAEA,IAAI,QAAW;EACb,OAAO,KAAK,UAAU;CACxB;CAEA,IAAI,MAAM,UAAa;EACrB,KAAK,UAAU,QAAQ;CACzB;AACF;AAEA,SAAgB,UAAa,SAA6B,cAA0B;CAClF,OAAO,QAAQ,IAAI,cAAc,SAAS,YAAY,CAAC;AACzD"}
|
|
@@ -42,9 +42,7 @@ function preserveSetupAccessor(target, source, key) {
|
|
|
42
42
|
Object.defineProperty(target, key, descriptor);
|
|
43
43
|
return true;
|
|
44
44
|
}
|
|
45
|
-
function applySetupResult(runtime, target, result
|
|
46
|
-
const includeFunctionsInState = Boolean(options?.includeFunctionsInState);
|
|
47
|
-
const functionPropPaths = options?.functionPropPaths;
|
|
45
|
+
function applySetupResult(runtime, target, result) {
|
|
48
46
|
const methods = runtime?.methods ?? Object.create(null);
|
|
49
47
|
const state = runtime?.state ?? Object.create(null);
|
|
50
48
|
const setupState = runtime?.setupState ?? Object.create(null);
|
|
@@ -67,7 +65,7 @@ function applySetupResult(runtime, target, result, options) {
|
|
|
67
65
|
const bound = (...args) => val.apply(runtime?.proxy ?? runtime, args);
|
|
68
66
|
methods[key] = bound;
|
|
69
67
|
state[key] = bound;
|
|
70
|
-
|
|
68
|
+
rawSetupState[key] = bound;
|
|
71
69
|
methodsChanged = true;
|
|
72
70
|
} else {
|
|
73
71
|
if (hasTrackableSetupBinding(val)) runtime?.__wevu_trackSetupReactiveKey?.(key);
|
|
@@ -80,7 +78,7 @@ function applySetupResult(runtime, target, result, options) {
|
|
|
80
78
|
writable: true
|
|
81
79
|
});
|
|
82
80
|
} catch {}
|
|
83
|
-
if (!preservesAccessor)
|
|
81
|
+
if (!preservesAccessor) rawSetupState[key] = val;
|
|
84
82
|
}
|
|
85
83
|
});
|
|
86
84
|
if (runtime) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupResult.mjs","names":[],"sources":["../../../../src/runtime/define/setupResult.ts"],"sourcesContent":["import { isReactive, isRef, toRaw } from '../../reactivity'\nimport { hasTrackableSetupBinding } from '../setupTracking'\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n if (Object.prototype.toString.call(value) !== '[object Object]') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === null || proto === Object.prototype\n}\n\nexport function shouldExposeInSnapshot(value: unknown): boolean {\n if (value == null) {\n return true\n }\n if (typeof value !== 'object') {\n return true\n }\n if (isRef(value) || isReactive(value)) {\n return true\n }\n if (Array.isArray(value)) {\n return true\n }\n return isPlainObject(value)\n}\n\n/**\n * 合并编译后 setup 返回值,并保留可写顶层绑定的访问器。\n */\nexport function mergeSetupResultDescriptors(\n target: Record<string, unknown>,\n source: Record<string, unknown> | void,\n) {\n if (!source) {\n return target\n }\n for (const key of Object.keys(source)) {\n const descriptor = Object.getOwnPropertyDescriptor(source, key)\n if (typeof descriptor?.get === 'function' && typeof descriptor.set === 'function') {\n Object.defineProperty(target, key, descriptor)\n }\n else {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value: source[key],\n writable: true,\n })\n }\n }\n return target\n}\n\n/**\n * 将编译后 setup let 的访问器交给 setupState 持有。\n */\nexport function preserveSetupAccessor(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n key: string,\n) {\n const descriptor = Object.getOwnPropertyDescriptor(source, key)\n if (typeof descriptor?.get !== 'function' || typeof descriptor.set !== 'function') {\n return false\n }\n Object.defineProperty(target, key, descriptor)\n return true\n}\n\nexport function applySetupResult(\n runtime: any,\n target: any,\n result: any,\n
|
|
1
|
+
{"version":3,"file":"setupResult.mjs","names":[],"sources":["../../../../src/runtime/define/setupResult.ts"],"sourcesContent":["import { isReactive, isRef, toRaw } from '../../reactivity'\nimport { hasTrackableSetupBinding } from '../setupTracking'\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n if (Object.prototype.toString.call(value) !== '[object Object]') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === null || proto === Object.prototype\n}\n\nexport function shouldExposeInSnapshot(value: unknown): boolean {\n if (value == null) {\n return true\n }\n if (typeof value !== 'object') {\n return true\n }\n if (isRef(value) || isReactive(value)) {\n return true\n }\n if (Array.isArray(value)) {\n return true\n }\n return isPlainObject(value)\n}\n\n/**\n * 合并编译后 setup 返回值,并保留可写顶层绑定的访问器。\n */\nexport function mergeSetupResultDescriptors(\n target: Record<string, unknown>,\n source: Record<string, unknown> | void,\n) {\n if (!source) {\n return target\n }\n for (const key of Object.keys(source)) {\n const descriptor = Object.getOwnPropertyDescriptor(source, key)\n if (typeof descriptor?.get === 'function' && typeof descriptor.set === 'function') {\n Object.defineProperty(target, key, descriptor)\n }\n else {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value: source[key],\n writable: true,\n })\n }\n }\n return target\n}\n\n/**\n * 将编译后 setup let 的访问器交给 setupState 持有。\n */\nexport function preserveSetupAccessor(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n key: string,\n) {\n const descriptor = Object.getOwnPropertyDescriptor(source, key)\n if (typeof descriptor?.get !== 'function' || typeof descriptor.set !== 'function') {\n return false\n }\n Object.defineProperty(target, key, descriptor)\n return true\n}\n\nexport function applySetupResult(\n runtime: any,\n target: any,\n result: any,\n) {\n const methods = runtime?.methods ?? Object.create(null)\n const state = runtime?.state ?? Object.create(null)\n const setupState = runtime?.setupState ?? Object.create(null)\n const rawState = isReactive(state) ? toRaw(state) : state\n const rawSetupState = (isReactive(setupState) ? toRaw(setupState) : setupState) as Record<string, unknown>\n let methodsChanged = false\n if (runtime && !runtime.methods) {\n try {\n runtime.methods = methods\n }\n catch {\n // 个别场景 runtime 可能只读,保持兼容行为。\n }\n }\n if (runtime && !runtime.state) {\n try {\n runtime.state = state\n }\n catch {\n // 个别场景 runtime 可能只读,保持兼容行为。\n }\n }\n if (runtime && !runtime.setupState) {\n try {\n runtime.setupState = setupState\n }\n catch {\n // 个别场景 runtime 可能只读,保持兼容行为。\n }\n }\n Object.keys(result).forEach((key) => {\n const val = (result as any)[key]\n const preservesAccessor = preserveSetupAccessor(rawSetupState, result, key)\n if (typeof val === 'function' && !preservesAccessor) {\n const bound = (...args: any[]) => (val as any).apply(runtime?.proxy ?? runtime, args)\n ;(methods as any)[key] = bound\n ;(state as any)[key] = bound\n rawSetupState[key] = bound\n methodsChanged = true\n }\n else {\n if (hasTrackableSetupBinding(val)) {\n runtime?.__wevu_trackSetupReactiveKey?.(key)\n }\n ;(state as any)[key] = val\n if (val === target || !shouldExposeInSnapshot(val)) {\n try {\n Object.defineProperty(rawState, key, {\n value: val,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n }\n catch {\n // 保持 state 的兼容写入已完成,这里只兜底非枚举定义。\n }\n }\n if (!preservesAccessor) {\n rawSetupState[key] = val\n }\n }\n })\n if (runtime) {\n runtime.methods = runtime.methods ?? methods\n runtime.state = runtime.state ?? state\n if (methodsChanged) {\n runtime.__wevu_touchSetupMethodsVersion?.()\n }\n }\n}\n"],"mappings":";;;;;;AAGA,SAAS,cAAc,OAA8C;CACnE,IAAI,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM,mBAC5C,OAAO;CAET,MAAM,QAAQ,OAAO,eAAe,KAAK;CACzC,OAAO,UAAU,QAAQ,UAAU,OAAO;AAC5C;AAEA,SAAgB,uBAAuB,OAAyB;CAC9D,IAAI,SAAS,MACX,OAAO;CAET,IAAI,OAAO,UAAU,UACnB,OAAO;CAET,IAAI,MAAM,KAAK,KAAK,WAAW,KAAK,GAClC,OAAO;CAET,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO;CAET,OAAO,cAAc,KAAK;AAC5B;;;;AAKA,SAAgB,4BACd,QACA,QACA;CACA,IAAI,CAAC,QACH,OAAO;CAET,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,GAAG;EACrC,MAAM,aAAa,OAAO,yBAAyB,QAAQ,GAAG;EAC9D,IAAI,OAAO,YAAY,QAAQ,cAAc,OAAO,WAAW,QAAQ,YACrE,OAAO,eAAe,QAAQ,KAAK,UAAU;OAG7C,OAAO,eAAe,QAAQ,KAAK;GACjC,cAAc;GACd,YAAY;GACZ,OAAO,OAAO;GACd,UAAU;EACZ,CAAC;CAEL;CACA,OAAO;AACT;;;;AAKA,SAAgB,sBACd,QACA,QACA,KACA;CACA,MAAM,aAAa,OAAO,yBAAyB,QAAQ,GAAG;CAC9D,IAAI,OAAO,YAAY,QAAQ,cAAc,OAAO,WAAW,QAAQ,YACrE,OAAO;CAET,OAAO,eAAe,QAAQ,KAAK,UAAU;CAC7C,OAAO;AACT;AAEA,SAAgB,iBACd,SACA,QACA,QACA;CACA,MAAM,UAAU,SAAS,WAAW,OAAO,OAAO,IAAI;CACtD,MAAM,QAAQ,SAAS,SAAS,OAAO,OAAO,IAAI;CAClD,MAAM,aAAa,SAAS,cAAc,OAAO,OAAO,IAAI;CAC5D,MAAM,WAAW,WAAW,KAAK,IAAI,MAAM,KAAK,IAAI;CACpD,MAAM,gBAAiB,WAAW,UAAU,IAAI,MAAM,UAAU,IAAI;CACpE,IAAI,iBAAiB;CACrB,IAAI,WAAW,CAAC,QAAQ,SACtB,IAAI;EACF,QAAQ,UAAU;CACpB,QACM,CAEN;CAEF,IAAI,WAAW,CAAC,QAAQ,OACtB,IAAI;EACF,QAAQ,QAAQ;CAClB,QACM,CAEN;CAEF,IAAI,WAAW,CAAC,QAAQ,YACtB,IAAI;EACF,QAAQ,aAAa;CACvB,QACM,CAEN;CAEF,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,QAAQ;EACnC,MAAM,MAAO,OAAe;EAC5B,MAAM,oBAAoB,sBAAsB,eAAe,QAAQ,GAAG;EAC1E,IAAI,OAAO,QAAQ,cAAc,CAAC,mBAAmB;GACnD,MAAM,SAAS,GAAG,SAAiB,IAAY,MAAM,SAAS,SAAS,SAAS,IAAI;GACnF,AAAC,QAAgB,OAAO;GACxB,AAAC,MAAc,OAAO;GACvB,cAAc,OAAO;GACrB,iBAAiB;EACnB,OACK;GACH,IAAI,yBAAyB,GAAG,GAC9B,SAAS,+BAA+B,GAAG;GAE5C,AAAC,MAAc,OAAO;GACvB,IAAI,QAAQ,UAAU,CAAC,uBAAuB,GAAG,GAC/C,IAAI;IACF,OAAO,eAAe,UAAU,KAAK;KACnC,OAAO;KACP,cAAc;KACd,YAAY;KACZ,UAAU;IACZ,CAAC;GACH,QACM,CAEN;GAEF,IAAI,CAAC,mBACH,cAAc,OAAO;EAEzB;CACF,CAAC;CACD,IAAI,SAAS;EACX,QAAQ,UAAU,QAAQ,WAAW;EACrC,QAAQ,QAAQ,QAAQ,SAAS;EACjC,IAAI,gBACF,QAAQ,kCAAkC;CAE9C;AACF"}
|
|
@@ -62,7 +62,6 @@ function createComponentDefinition(options, registerNative) {
|
|
|
62
62
|
...setData ?? {},
|
|
63
63
|
functionPaths: functionPropPaths
|
|
64
64
|
} : setData);
|
|
65
|
-
const setupFunctionPropKeys = new Set(functionPropPaths.filter((path) => !path.includes(".")));
|
|
66
65
|
const normalizedMpOptions = normalizeProps(mpOptions, props, mpOptions.properties);
|
|
67
66
|
const initialDataContext = resolveInitialDataContext(normalizedMpOptions.properties, methods);
|
|
68
67
|
const resolvedData = typeof data === "function" ? () => data.call(initialDataContext) : data;
|
|
@@ -70,17 +69,13 @@ function createComponentDefinition(options, registerNative) {
|
|
|
70
69
|
if (cssModules && typeof cssModules === "object") ctx.instance[WEVU_CSS_MODULES_KEY] = cssModules;
|
|
71
70
|
const publicInstance = ctx?.proxy ?? ctx?.instance ?? Object.create(null);
|
|
72
71
|
const injected = resolveOptionsApiInjections(injectOptions, publicInstance);
|
|
73
|
-
if (provideOptions != null) applyOptionsApiProvide(provideOptions, publicInstance);
|
|
74
72
|
const setupResult = typeof setup === "function" ? runSetupFunction(setup, props, ctx) : void 0;
|
|
75
73
|
const result = mergeSetupResultDescriptors({
|
|
76
74
|
...injected,
|
|
77
75
|
...cssModules ?? {}
|
|
78
76
|
}, setupResult);
|
|
79
|
-
if (ctx && Object.keys(result).length) applySetupResult(ctx.runtime, ctx.instance, result
|
|
80
|
-
|
|
81
|
-
functionPropPaths: allowFunctionProps === false ? void 0 : setupFunctionPropKeys
|
|
82
|
-
});
|
|
83
|
-
return result;
|
|
77
|
+
if (ctx && Object.keys(result).length) applySetupResult(ctx.runtime, ctx.instance, result);
|
|
78
|
+
if (provideOptions != null) applyOptionsApiProvide(provideOptions, publicInstance);
|
|
84
79
|
}) : void 0;
|
|
85
80
|
const nativeData = typeof resolvedData === "function" ? resolvedData() : resolvedData;
|
|
86
81
|
const nativeOwnerId = nativeData && typeof nativeData === "object" ? Reflect.get(nativeData, WEVU_SLOT_OWNER_ID_KEY) : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.mjs","names":[],"sources":["../../../src/runtime/define.ts"],"sourcesContent":["import type { WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type { RuntimeComponentDefinitionOptions } from './define/componentDefinition'\nimport type {\n ComponentPropsOptions,\n ComponentPublicInstance,\n ComputedDefinitions,\n DefineComponent,\n DefineComponentOptions,\n InferProps,\n MethodDefinitions,\n MiniProgramComponentPropertyOption,\n MiniProgramComponentRawOptions,\n SetDataSnapshotOptions,\n ShallowUnwrapRef,\n} from './types'\nimport {\n WEVU_BINDING_MANIFEST_KEY,\n WEVU_CSS_MODULES_KEY,\n WEVU_FUNCTION_PROP_PATHS_KEY,\n WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY,\n WEVU_SLOT_OWNER_ID_KEY,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_SCOPE_KEY,\n} from '@weapp-core/constants'\nimport { hasOwn } from '../utils'\nimport { hasBindingOutputPath, resolveBindingManifest } from './bindingManifest'\nimport { requireRuntimeCapability } from './capabilities'\nimport { applyWevuComponentDefaults } from './defaults'\nimport {\n createRuntimeComponentDefinition,\n} from './define/componentDefinition'\nimport { resolveNativeInitialData } from './define/initialComputed'\nimport { resolveVueComponentOptions } from './define/options'\nimport { applyOptionsApiProvide, resolveOptionsApiInjections } from './define/optionsApi'\nimport { normalizeProps } from './define/props'\nimport { applySetupResult, mergeSetupResultDescriptors } from './define/setupResult'\nimport { runSetupFunction } from './register'\n\nconst componentLifecycleDefinitions = new WeakMap<object, Record<string, any>>()\n\nfunction resolveInitialDataContext(properties: unknown, methods: MethodDefinitions | undefined) {\n const context: Record<string, unknown> = { ...(methods ?? {}) }\n if (!properties || typeof properties !== 'object') {\n return context\n }\n for (const [name, definition] of Object.entries(properties)) {\n if (definition && typeof definition === 'object' && hasOwn(definition, 'value')) {\n context[name] = (definition as Record<string, unknown>).value\n }\n }\n return context\n}\n\nfunction shouldDeclareNativeSlotOwnerId(\n setData: SetDataSnapshotOptions | undefined,\n bindingManifest: WevuRuntimeBindingManifestV1 | undefined,\n) {\n return (\n Array.isArray(setData?.pick)\n && setData.pick.includes(WEVU_SLOT_OWNER_ID_KEY)\n ) || (\n bindingManifest?.features?.scopedSlots === true\n && hasBindingOutputPath(bindingManifest, WEVU_SLOT_OWNER_ID_KEY)\n )\n}\n\nfunction shouldSeedNativeSlotOwnerId(mpOptions: Record<string, unknown>) {\n return Boolean(mpOptions.__wevu_isPage)\n}\n\nfunction hasScopedSlotHostProperties(mpOptions: Record<string, any>) {\n const properties = mpOptions.properties\n return Boolean(\n properties\n && typeof properties === 'object'\n && (\n WEVU_SLOT_OWNER_ID_PROP in properties\n || WEVU_SLOT_SCOPE_KEY in properties\n ),\n )\n}\n\nfunction resolveScopedSlotHostSetData(\n mpOptions: Record<string, any>,\n setData: DefineComponentOptions<any, any, any, any, any>['setData'],\n) {\n if (setData?.strategy !== 'patch' || !hasScopedSlotHostProperties(mpOptions)) {\n return setData\n }\n return {\n ...setData,\n strategy: 'diff' as const,\n }\n}\n\n/**\n * defineComponent 返回的组件定义描述,用于手动注册或高级用法。\n */\nexport interface ComponentDefinition<\n D extends object,\n C extends ComputedDefinitions,\n M extends MethodDefinitions,\n> {\n /**\n * 内部 runtime app(高级能力使用),不对外暴露正式 API。\n * @internal\n */\n __wevu_runtime: import('./types').RuntimeApp<D, C, M>\n\n /**\n * 内部选项快照(高级能力使用),包含 data/computed/methods 等。\n * @internal\n */\n __wevu_options: {\n scopedSlotOwnerRequired: boolean\n data: () => D\n computed: C\n methods: M\n setData: import('./types').SetDataSnapshotOptions | undefined\n bindingManifest?: WevuRuntimeBindingManifestV1\n watch: Record<string, any> | undefined\n setup: ((props: any, ctx: any) => any) | undefined\n mpOptions: MiniProgramComponentRawOptions\n }\n}\n\nfunction materializeComponentDefinition(\n componentOptions: RuntimeComponentDefinitionOptions,\n registerNative = false,\n) {\n const { lifecycleDefinition, runtimeApp } = createRuntimeComponentDefinition(componentOptions, registerNative)\n const definition: ComponentDefinition<any, any, any> = {\n __wevu_runtime: runtimeApp as any,\n __wevu_options: componentOptions as ComponentDefinition<any, any, any>['__wevu_options'],\n }\n componentLifecycleDefinitions.set(definition, lifecycleDefinition)\n return definition\n}\n\ntype SetupBindings<S> = Exclude<S, void> extends never ? Record<never, never> : Exclude<S, void>\ntype ResolveProps<P> = P extends ComponentPropsOptions ? InferProps<P> : P\n\nexport interface WevuComponentConstructor<\n Props,\n RawBindings,\n D extends object,\n C extends ComputedDefinitions,\n M extends MethodDefinitions,\n> {\n new (): ComponentPublicInstance<D, C, M, Props> & ShallowUnwrapRef<RawBindings>\n}\n\nexport type WevuDefinedComponent<\n PropsOrPropOptions,\n RawBindings,\n D extends object,\n C extends ComputedDefinitions,\n M extends MethodDefinitions,\n> = DefineComponent<PropsOrPropOptions, RawBindings, D, C, M> & ComponentDefinition<D, C, M>\nexport interface SetupContextWithTypeProps<TypeProps> {\n props: TypeProps\n [key: string]: any\n}\nexport type SetupFunctionWithTypeProps<\n TypeProps,\n> = (\n props: TypeProps,\n ctx: SetupContextWithTypeProps<TypeProps>,\n) => Record<string, any> | void\nexport interface DefineComponentTypePropsOptions<TypeProps> {\n __typeProps: TypeProps\n setup?: SetupFunctionWithTypeProps<TypeProps>\n [key: string]: any\n}\nexport interface DefineComponentWithTypeProps<TypeProps> {\n new (): { $props: TypeProps } & Record<string, any>\n}\n\n/**\n * 按 Vue 3 风格定义一个小程序组件/页面。\n *\n * - 统一注册为 `Component()`\n *\n * @param options 组件定义项\n * @returns 可手动注册的组件定义\n *\n * @example\n * ```ts\n * defineComponent({\n * data: () => ({ count: 0 }),\n * setup() {\n * onMounted(() => console.log('已挂载'))\n * }\n * })\n * ```\n *\n * @example\n * ```ts\n * defineComponent({\n * setup() {\n * onPageScroll(() => {})\n * }\n * })\n * ```\n */\n// @ts-expect-error -- TS2589:__typeProps 签名的重载实例化深度过高。\nexport function defineComponent<\n TypeProps = any,\n>(\n options: DefineComponentTypePropsOptions<TypeProps>,\n): DefineComponentWithTypeProps<TypeProps>\nexport function defineComponent<\n P extends ComponentPropsOptions = Record<never, never>,\n D extends object = Record<never, never>,\n C extends ComputedDefinitions = Record<never, never>,\n M extends MethodDefinitions = Record<never, never>,\n S extends Record<string, any> | void = void,\n>(\n options: DefineComponentOptions<P, D, C, M, S>,\n): WevuComponentConstructor<ResolveProps<P>, SetupBindings<S>, D, C, M> & ComponentDefinition<D, C, M>\nexport function defineComponent(\n options: DefineComponentOptions<any, any, any, any, any>,\n): WevuComponentConstructor<Record<string, any>, Record<string, any>, Record<string, any>, ComputedDefinitions, MethodDefinitions>\n & ComponentDefinition<any, any, any> {\n // eslint-disable-next-line ts/no-use-before-define -- 重载实现需保持在内部共享工厂之前。\n return createComponentDefinition(options, true) as any\n}\n\nfunction createComponentDefinition(\n options: DefineComponentOptions<any, any, any, any, any>,\n registerNative: boolean,\n) {\n const resolvedOptions = resolveVueComponentOptions(applyWevuComponentDefaults(options))\n const {\n __typeProps: _typeProps,\n [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]: scopedSlotOwnerRequired,\n data,\n computed,\n methods,\n setData,\n watch,\n setup,\n props,\n inject: injectOptions,\n provide: provideOptions,\n allowFunctionProps,\n [WEVU_BINDING_MANIFEST_KEY]: rawBindingManifest,\n [WEVU_CSS_MODULES_KEY]: cssModules,\n ...mpOptions\n } = resolvedOptions as typeof resolvedOptions & { [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]?: boolean }\n const bindingManifest = resolveBindingManifest(rawBindingManifest)\n\n const rawFunctionPropPaths = (mpOptions as any)[WEVU_FUNCTION_PROP_PATHS_KEY]\n const functionPropPaths: string[] = Array.isArray(rawFunctionPropPaths)\n ? [...new Set(rawFunctionPropPaths.filter((path: unknown): path is string => typeof path === 'string' && path.length > 0))]\n : []\n delete (mpOptions as any)[WEVU_FUNCTION_PROP_PATHS_KEY]\n\n const rawResolvedSetData = allowFunctionProps === true\n ? {\n ...(setData ?? {}),\n includeFunctions: true,\n functionPaths: functionPropPaths,\n }\n : allowFunctionProps === false\n ? setData\n : functionPropPaths.length\n ? {\n ...(setData ?? {}),\n functionPaths: functionPropPaths,\n }\n : setData\n const resolvedSetData = resolveScopedSlotHostSetData(mpOptions, rawResolvedSetData)\n const setupFunctionPropKeys = new Set(\n functionPropPaths\n .filter(path => !path.includes('.')),\n )\n\n const normalizedMpOptions = normalizeProps(mpOptions, props, mpOptions.properties)\n const initialDataContext = resolveInitialDataContext(normalizedMpOptions.properties, methods)\n const resolvedData = typeof data === 'function'\n ? () => data.call(initialDataContext)\n : data\n\n const hasOptionsApiContext = injectOptions != null || provideOptions != null\n const setupWrapper = typeof setup === 'function' || hasOptionsApiContext || cssModules\n ? ((props, ctx) => {\n if (cssModules && typeof cssModules === 'object') {\n ;((ctx as any).instance as Record<string, any>)[WEVU_CSS_MODULES_KEY] = cssModules\n }\n const publicInstance = (ctx as any)?.proxy ?? (ctx as any)?.instance ?? Object.create(null)\n const injected = resolveOptionsApiInjections(injectOptions, publicInstance)\n if (provideOptions != null) {\n applyOptionsApiProvide(provideOptions, publicInstance)\n }\n const setupResult = typeof setup === 'function'\n ? runSetupFunction(setup as any, props as Record<string, any>, ctx as any) as Record<string, any> | void\n : undefined\n const result = mergeSetupResultDescriptors({\n ...injected,\n ...(cssModules ?? {}),\n }, setupResult)\n if (ctx && Object.keys(result).length) {\n applySetupResult((ctx as any).runtime, (ctx as any).instance, result, {\n includeFunctionsInState: allowFunctionProps === true,\n functionPropPaths: allowFunctionProps === false ? undefined : setupFunctionPropKeys,\n })\n }\n return result\n }) satisfies DefineComponentOptions<ComponentPropsOptions, any, any, any, any>['setup']\n : undefined\n\n const nativeData = typeof resolvedData === 'function'\n ? resolvedData()\n : resolvedData\n const nativeOwnerId = nativeData && typeof nativeData === 'object'\n ? Reflect.get(nativeData, WEVU_SLOT_OWNER_ID_KEY)\n : undefined\n const shouldDeclareOwnerId = shouldDeclareNativeSlotOwnerId(resolvedSetData, bindingManifest)\n const scopedSlotHooks = shouldDeclareOwnerId\n ? requireRuntimeCapability('scopedSlots', 'defineComponent(scoped-slot owner metadata)')\n : undefined\n const seededNativeData = shouldDeclareOwnerId\n ? {\n ...(nativeData && typeof nativeData === 'object' ? nativeData : {}),\n [WEVU_SLOT_OWNER_ID_KEY]: shouldSeedNativeSlotOwnerId(mpOptions)\n ? nativeOwnerId || scopedSlotHooks?.allocateOwnerId()\n : nativeOwnerId || '',\n }\n : nativeData\n const nativeInitialData = resolveNativeInitialData(seededNativeData, computed as ComputedDefinitions, resolvedSetData, methods as Record<string, any> | undefined, bindingManifest)\n const mpOptionsWithProps = nativeInitialData !== undefined\n ? {\n ...normalizedMpOptions,\n data: nativeInitialData,\n }\n : normalizedMpOptions\n\n const componentOptions: RuntimeComponentDefinitionOptions = {\n scopedSlotOwnerRequired: scopedSlotOwnerRequired === true,\n data: resolvedData as () => Record<string, any>,\n computed: computed as ComputedDefinitions,\n methods: methods as MethodDefinitions,\n setData: resolvedSetData,\n bindingManifest,\n watch,\n setup: setupWrapper,\n mpOptions: mpOptionsWithProps as MiniProgramComponentRawOptions,\n }\n\n const definition = materializeComponentDefinition(componentOptions, registerNative)\n\n return definition as unknown as WevuComponentConstructor<\n ResolveProps<ComponentPropsOptions>,\n Record<string, any>,\n Record<string, any>,\n ComputedDefinitions,\n MethodDefinitions\n > & ComponentDefinition<any, any, any>\n}\n\n/**\n * 创建不触发宿主全局注册的 Wevu 组件定义。\n *\n * @param options 组件选项\n * @internal\n */\nexport function createWevuComponentDefinition(\n options: DefineComponentOptions<any, any, any, any, any>,\n) {\n return createComponentDefinition(options, false)\n}\n\n/**\n * 从现有组件定义派生拥有独立应用上下文的组件定义。\n *\n * @param definition 已解析的 Wevu 组件定义\n * @internal\n */\nexport function createIsolatedWevuComponentDefinition(definition: object) {\n const componentOptions = (definition as ComponentDefinition<any, any, any>).__wevu_options\n if (!componentOptions) {\n throw new TypeError('无法从非 Wevu 组件定义创建独立运行时')\n }\n return materializeComponentDefinition(componentOptions)\n}\n\n/**\n * 获取组件定义对应的宿主生命周期定义。\n *\n * @param definition Wevu 组件定义\n * @internal\n */\nexport function getWevuComponentLifecycleDefinition(definition: object) {\n return componentLifecycleDefinitions.get(definition)\n}\n\n/**\n * 从 Vue SFC 选项创建 wevu 组件,供 weapp-vite 编译产物直接调用的兼容入口。\n *\n * @param options 组件选项,可能包含小程序特有的 properties\n * @internal\n */\nexport function createWevuComponent<\n P extends ComponentPropsOptions = ComponentPropsOptions,\n D extends object = Record<string, any>,\n C extends ComputedDefinitions = ComputedDefinitions,\n M extends MethodDefinitions = MethodDefinitions,\n>(\n options: DefineComponentOptions<P, D, C, M> & { properties?: MiniProgramComponentPropertyOption },\n): void {\n const allowNullPropInput = options.allowNullPropInput ?? true\n defineComponent({\n ...options,\n allowNullPropInput,\n __wevu_allowNullPropInput: allowNullPropInput,\n })\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"define.mjs","names":[],"sources":["../../../src/runtime/define.ts"],"sourcesContent":["import type { WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type { RuntimeComponentDefinitionOptions } from './define/componentDefinition'\nimport type {\n ComponentPropsOptions,\n ComponentPublicInstance,\n ComputedDefinitions,\n DefineComponent,\n DefineComponentOptions,\n InferProps,\n MethodDefinitions,\n MiniProgramComponentPropertyOption,\n MiniProgramComponentRawOptions,\n SetDataSnapshotOptions,\n ShallowUnwrapRef,\n} from './types'\nimport {\n WEVU_BINDING_MANIFEST_KEY,\n WEVU_CSS_MODULES_KEY,\n WEVU_FUNCTION_PROP_PATHS_KEY,\n WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY,\n WEVU_SLOT_OWNER_ID_KEY,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_SCOPE_KEY,\n} from '@weapp-core/constants'\nimport { hasOwn } from '../utils'\nimport { hasBindingOutputPath, resolveBindingManifest } from './bindingManifest'\nimport { requireRuntimeCapability } from './capabilities'\nimport { applyWevuComponentDefaults } from './defaults'\nimport {\n createRuntimeComponentDefinition,\n} from './define/componentDefinition'\nimport { resolveNativeInitialData } from './define/initialComputed'\nimport { resolveVueComponentOptions } from './define/options'\nimport { applyOptionsApiProvide, resolveOptionsApiInjections } from './define/optionsApi'\nimport { normalizeProps } from './define/props'\nimport { applySetupResult, mergeSetupResultDescriptors } from './define/setupResult'\nimport { runSetupFunction } from './register'\n\nconst componentLifecycleDefinitions = new WeakMap<object, Record<string, any>>()\n\nfunction resolveInitialDataContext(properties: unknown, methods: MethodDefinitions | undefined) {\n const context: Record<string, unknown> = { ...(methods ?? {}) }\n if (!properties || typeof properties !== 'object') {\n return context\n }\n for (const [name, definition] of Object.entries(properties)) {\n if (definition && typeof definition === 'object' && hasOwn(definition, 'value')) {\n context[name] = (definition as Record<string, unknown>).value\n }\n }\n return context\n}\n\nfunction shouldDeclareNativeSlotOwnerId(\n setData: SetDataSnapshotOptions | undefined,\n bindingManifest: WevuRuntimeBindingManifestV1 | undefined,\n) {\n return (\n Array.isArray(setData?.pick)\n && setData.pick.includes(WEVU_SLOT_OWNER_ID_KEY)\n ) || (\n bindingManifest?.features?.scopedSlots === true\n && hasBindingOutputPath(bindingManifest, WEVU_SLOT_OWNER_ID_KEY)\n )\n}\n\nfunction shouldSeedNativeSlotOwnerId(mpOptions: Record<string, unknown>) {\n return Boolean(mpOptions.__wevu_isPage)\n}\n\nfunction hasScopedSlotHostProperties(mpOptions: Record<string, any>) {\n const properties = mpOptions.properties\n return Boolean(\n properties\n && typeof properties === 'object'\n && (\n WEVU_SLOT_OWNER_ID_PROP in properties\n || WEVU_SLOT_SCOPE_KEY in properties\n ),\n )\n}\n\nfunction resolveScopedSlotHostSetData(\n mpOptions: Record<string, any>,\n setData: DefineComponentOptions<any, any, any, any, any>['setData'],\n) {\n if (setData?.strategy !== 'patch' || !hasScopedSlotHostProperties(mpOptions)) {\n return setData\n }\n return {\n ...setData,\n strategy: 'diff' as const,\n }\n}\n\n/**\n * defineComponent 返回的组件定义描述,用于手动注册或高级用法。\n */\nexport interface ComponentDefinition<\n D extends object,\n C extends ComputedDefinitions,\n M extends MethodDefinitions,\n> {\n /**\n * 内部 runtime app(高级能力使用),不对外暴露正式 API。\n * @internal\n */\n __wevu_runtime: import('./types').RuntimeApp<D, C, M>\n\n /**\n * 内部选项快照(高级能力使用),包含 data/computed/methods 等。\n * @internal\n */\n __wevu_options: {\n scopedSlotOwnerRequired: boolean\n data: () => D\n computed: C\n methods: M\n setData: import('./types').SetDataSnapshotOptions | undefined\n bindingManifest?: WevuRuntimeBindingManifestV1\n watch: Record<string, any> | undefined\n setup: ((props: any, ctx: any) => any) | undefined\n mpOptions: MiniProgramComponentRawOptions\n }\n}\n\nfunction materializeComponentDefinition(\n componentOptions: RuntimeComponentDefinitionOptions,\n registerNative = false,\n) {\n const { lifecycleDefinition, runtimeApp } = createRuntimeComponentDefinition(componentOptions, registerNative)\n const definition: ComponentDefinition<any, any, any> = {\n __wevu_runtime: runtimeApp as any,\n __wevu_options: componentOptions as ComponentDefinition<any, any, any>['__wevu_options'],\n }\n componentLifecycleDefinitions.set(definition, lifecycleDefinition)\n return definition\n}\n\ntype SetupBindings<S> = Exclude<S, void> extends never ? Record<never, never> : Exclude<S, void>\ntype ResolveProps<P> = P extends ComponentPropsOptions ? InferProps<P> : P\n\nexport interface WevuComponentConstructor<\n Props,\n RawBindings,\n D extends object,\n C extends ComputedDefinitions,\n M extends MethodDefinitions,\n> {\n new (): ComponentPublicInstance<D, C, M, Props> & ShallowUnwrapRef<RawBindings>\n}\n\nexport type WevuDefinedComponent<\n PropsOrPropOptions,\n RawBindings,\n D extends object,\n C extends ComputedDefinitions,\n M extends MethodDefinitions,\n> = DefineComponent<PropsOrPropOptions, RawBindings, D, C, M> & ComponentDefinition<D, C, M>\nexport interface SetupContextWithTypeProps<TypeProps> {\n props: TypeProps\n [key: string]: any\n}\nexport type SetupFunctionWithTypeProps<\n TypeProps,\n> = (\n props: TypeProps,\n ctx: SetupContextWithTypeProps<TypeProps>,\n) => Record<string, any> | void\nexport interface DefineComponentTypePropsOptions<TypeProps> {\n __typeProps: TypeProps\n setup?: SetupFunctionWithTypeProps<TypeProps>\n [key: string]: any\n}\nexport interface DefineComponentWithTypeProps<TypeProps> {\n new (): { $props: TypeProps } & Record<string, any>\n}\n\n/**\n * 按 Vue 3 风格定义一个小程序组件/页面。\n *\n * - 统一注册为 `Component()`\n *\n * @param options 组件定义项\n * @returns 可手动注册的组件定义\n *\n * @example\n * ```ts\n * defineComponent({\n * data: () => ({ count: 0 }),\n * setup() {\n * onMounted(() => console.log('已挂载'))\n * }\n * })\n * ```\n *\n * @example\n * ```ts\n * defineComponent({\n * setup() {\n * onPageScroll(() => {})\n * }\n * })\n * ```\n */\n// @ts-expect-error -- TS2589:__typeProps 签名的重载实例化深度过高。\nexport function defineComponent<\n TypeProps = any,\n>(\n options: DefineComponentTypePropsOptions<TypeProps>,\n): DefineComponentWithTypeProps<TypeProps>\nexport function defineComponent<\n P extends ComponentPropsOptions = Record<never, never>,\n D extends object = Record<never, never>,\n C extends ComputedDefinitions = Record<never, never>,\n M extends MethodDefinitions = Record<never, never>,\n S extends Record<string, any> | void = void,\n>(\n options: DefineComponentOptions<P, D, C, M, S>,\n): WevuComponentConstructor<ResolveProps<P>, SetupBindings<S>, D, C, M> & ComponentDefinition<D, C, M>\nexport function defineComponent(\n options: DefineComponentOptions<any, any, any, any, any>,\n): WevuComponentConstructor<Record<string, any>, Record<string, any>, Record<string, any>, ComputedDefinitions, MethodDefinitions>\n & ComponentDefinition<any, any, any> {\n // eslint-disable-next-line ts/no-use-before-define -- 重载实现需保持在内部共享工厂之前。\n return createComponentDefinition(options, true) as any\n}\n\nfunction createComponentDefinition(\n options: DefineComponentOptions<any, any, any, any, any>,\n registerNative: boolean,\n) {\n const resolvedOptions = resolveVueComponentOptions(applyWevuComponentDefaults(options))\n const {\n __typeProps: _typeProps,\n [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]: scopedSlotOwnerRequired,\n data,\n computed,\n methods,\n setData,\n watch,\n setup,\n props,\n inject: injectOptions,\n provide: provideOptions,\n allowFunctionProps,\n [WEVU_BINDING_MANIFEST_KEY]: rawBindingManifest,\n [WEVU_CSS_MODULES_KEY]: cssModules,\n ...mpOptions\n } = resolvedOptions as typeof resolvedOptions & { [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]?: boolean }\n const bindingManifest = resolveBindingManifest(rawBindingManifest)\n\n const rawFunctionPropPaths = (mpOptions as any)[WEVU_FUNCTION_PROP_PATHS_KEY]\n const functionPropPaths: string[] = Array.isArray(rawFunctionPropPaths)\n ? [...new Set(rawFunctionPropPaths.filter((path: unknown): path is string => typeof path === 'string' && path.length > 0))]\n : []\n delete (mpOptions as any)[WEVU_FUNCTION_PROP_PATHS_KEY]\n\n const rawResolvedSetData = allowFunctionProps === true\n ? {\n ...(setData ?? {}),\n includeFunctions: true,\n functionPaths: functionPropPaths,\n }\n : allowFunctionProps === false\n ? setData\n : functionPropPaths.length\n ? {\n ...(setData ?? {}),\n functionPaths: functionPropPaths,\n }\n : setData\n const resolvedSetData = resolveScopedSlotHostSetData(mpOptions, rawResolvedSetData)\n\n const normalizedMpOptions = normalizeProps(mpOptions, props, mpOptions.properties)\n const initialDataContext = resolveInitialDataContext(normalizedMpOptions.properties, methods)\n const resolvedData = typeof data === 'function'\n ? () => data.call(initialDataContext)\n : data\n\n const hasOptionsApiContext = injectOptions != null || provideOptions != null\n const setupWrapper = typeof setup === 'function' || hasOptionsApiContext || cssModules\n ? ((props, ctx) => {\n if (cssModules && typeof cssModules === 'object') {\n ;((ctx as any).instance as Record<string, any>)[WEVU_CSS_MODULES_KEY] = cssModules\n }\n const publicInstance = (ctx as any)?.proxy ?? (ctx as any)?.instance ?? Object.create(null)\n const injected = resolveOptionsApiInjections(injectOptions, publicInstance)\n const setupResult = typeof setup === 'function'\n ? runSetupFunction(setup as any, props as Record<string, any>, ctx as any) as Record<string, any> | void\n : undefined\n const result = mergeSetupResultDescriptors({\n ...injected,\n ...(cssModules ?? {}),\n }, setupResult)\n if (ctx && Object.keys(result).length) {\n applySetupResult(ctx.runtime, ctx.instance, result)\n }\n if (provideOptions != null) {\n applyOptionsApiProvide(provideOptions, publicInstance)\n }\n }) satisfies DefineComponentOptions<ComponentPropsOptions, any, any, any, any>['setup']\n : undefined\n\n const nativeData = typeof resolvedData === 'function'\n ? resolvedData()\n : resolvedData\n const nativeOwnerId = nativeData && typeof nativeData === 'object'\n ? Reflect.get(nativeData, WEVU_SLOT_OWNER_ID_KEY)\n : undefined\n const shouldDeclareOwnerId = shouldDeclareNativeSlotOwnerId(resolvedSetData, bindingManifest)\n const scopedSlotHooks = shouldDeclareOwnerId\n ? requireRuntimeCapability('scopedSlots', 'defineComponent(scoped-slot owner metadata)')\n : undefined\n const seededNativeData = shouldDeclareOwnerId\n ? {\n ...(nativeData && typeof nativeData === 'object' ? nativeData : {}),\n [WEVU_SLOT_OWNER_ID_KEY]: shouldSeedNativeSlotOwnerId(mpOptions)\n ? nativeOwnerId || scopedSlotHooks?.allocateOwnerId()\n : nativeOwnerId || '',\n }\n : nativeData\n const nativeInitialData = resolveNativeInitialData(seededNativeData, computed as ComputedDefinitions, resolvedSetData, methods as Record<string, any> | undefined, bindingManifest)\n const mpOptionsWithProps = nativeInitialData !== undefined\n ? {\n ...normalizedMpOptions,\n data: nativeInitialData,\n }\n : normalizedMpOptions\n\n const componentOptions: RuntimeComponentDefinitionOptions = {\n scopedSlotOwnerRequired: scopedSlotOwnerRequired === true,\n data: resolvedData as () => Record<string, any>,\n computed: computed as ComputedDefinitions,\n methods: methods as MethodDefinitions,\n setData: resolvedSetData,\n bindingManifest,\n watch,\n setup: setupWrapper,\n mpOptions: mpOptionsWithProps as MiniProgramComponentRawOptions,\n }\n\n const definition = materializeComponentDefinition(componentOptions, registerNative)\n\n return definition as unknown as WevuComponentConstructor<\n ResolveProps<ComponentPropsOptions>,\n Record<string, any>,\n Record<string, any>,\n ComputedDefinitions,\n MethodDefinitions\n > & ComponentDefinition<any, any, any>\n}\n\n/**\n * 创建不触发宿主全局注册的 Wevu 组件定义。\n *\n * @param options 组件选项\n * @internal\n */\nexport function createWevuComponentDefinition(\n options: DefineComponentOptions<any, any, any, any, any>,\n) {\n return createComponentDefinition(options, false)\n}\n\n/**\n * 从现有组件定义派生拥有独立应用上下文的组件定义。\n *\n * @param definition 已解析的 Wevu 组件定义\n * @internal\n */\nexport function createIsolatedWevuComponentDefinition(definition: object) {\n const componentOptions = (definition as ComponentDefinition<any, any, any>).__wevu_options\n if (!componentOptions) {\n throw new TypeError('无法从非 Wevu 组件定义创建独立运行时')\n }\n return materializeComponentDefinition(componentOptions)\n}\n\n/**\n * 获取组件定义对应的宿主生命周期定义。\n *\n * @param definition Wevu 组件定义\n * @internal\n */\nexport function getWevuComponentLifecycleDefinition(definition: object) {\n return componentLifecycleDefinitions.get(definition)\n}\n\n/**\n * 从 Vue SFC 选项创建 wevu 组件,供 weapp-vite 编译产物直接调用的兼容入口。\n *\n * @param options 组件选项,可能包含小程序特有的 properties\n * @internal\n */\nexport function createWevuComponent<\n P extends ComponentPropsOptions = ComponentPropsOptions,\n D extends object = Record<string, any>,\n C extends ComputedDefinitions = ComputedDefinitions,\n M extends MethodDefinitions = MethodDefinitions,\n>(\n options: DefineComponentOptions<P, D, C, M> & { properties?: MiniProgramComponentPropertyOption },\n): void {\n const allowNullPropInput = options.allowNullPropInput ?? true\n defineComponent({\n ...options,\n allowNullPropInput,\n __wevu_allowNullPropInput: allowNullPropInput,\n })\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageLayout.mjs","names":[],"sources":["../../../src/runtime/pageLayout.ts"],"sourcesContent":["import {\n WEVU_PAGE_LAYOUT_NAME_KEY,\n WEVU_PAGE_LAYOUT_NONE,\n WEVU_PAGE_LAYOUT_PROPS_KEY,\n WEVU_PAGE_LAYOUT_SETTER_KEY,\n} from '@weapp-core/constants'\nimport { reactive, readonly } from '../reactivity'\nimport { getCurrentInstance, getCurrentSetupContext } from './hooks'\nimport { getCurrentMiniProgramPages } from './platform'\nimport { getCurrentPageInstance } from './register/component/lifecycle/platform'\n\ntype PageLayoutProps = object\n\ntype PageLayoutSetter = (layout: string | false, props?: PageLayoutProps) => void\n\nexport
|
|
1
|
+
{"version":3,"file":"pageLayout.mjs","names":[],"sources":["../../../src/runtime/pageLayout.ts"],"sourcesContent":["import type { WevuPageLayoutMap } from '../types/pageLayout'\nimport {\n WEVU_PAGE_LAYOUT_NAME_KEY,\n WEVU_PAGE_LAYOUT_NONE,\n WEVU_PAGE_LAYOUT_PROPS_KEY,\n WEVU_PAGE_LAYOUT_SETTER_KEY,\n} from '@weapp-core/constants'\nimport { reactive, readonly } from '../reactivity'\nimport { getCurrentInstance, getCurrentSetupContext } from './hooks'\nimport { getCurrentMiniProgramPages } from './platform'\nimport { getCurrentPageInstance } from './register/component/lifecycle/platform'\n\ntype PageLayoutProps = object\n\ntype PageLayoutSetter = (layout: string | false, props?: PageLayoutProps) => void\n\nexport type { WevuPageLayoutMap } from '../types/pageLayout'\n\ntype ResolveTypedPageLayoutName = keyof WevuPageLayoutMap extends never\n ? string\n : Extract<keyof WevuPageLayoutMap, string>\n\ntype ResolveTypedPageLayoutProps<Name extends string> = Name extends keyof WevuPageLayoutMap\n ? WevuPageLayoutMap[Name]\n : PageLayoutProps\n\ntype PageLayoutNamedState = {\n [Name in ResolveTypedPageLayoutName]: {\n name: Name\n props: ResolveTypedPageLayoutProps<Name>\n }\n}[ResolveTypedPageLayoutName]\n\nexport type PageLayoutState\n = | PageLayoutNamedState\n | {\n name: false\n props: Record<string, any>\n }\n | {\n name: undefined\n props: Record<string, any>\n }\n\ninterface MutablePageLayoutState {\n name: string | false | undefined\n props: Record<string, any>\n}\n\nfunction resolveCurrentPageInstance() {\n const runtimeCurrentPage = getCurrentPageInstance()\n if (runtimeCurrentPage) {\n return runtimeCurrentPage\n }\n const pages = getCurrentMiniProgramPages()\n return pages[pages.length - 1]\n}\n\nfunction normalizeRuntimePageLayoutName(layout: string | undefined) {\n return layout === WEVU_PAGE_LAYOUT_NONE ? false : layout\n}\n\n/**\n * 获取当前页面 layout 状态。\n */\nexport function usePageLayout(): Readonly<PageLayoutState> {\n if (!getCurrentSetupContext()) {\n throw new Error('usePageLayout() 必须在 setup() 的同步阶段调用')\n }\n\n const currentInstance = getCurrentInstance() as Record<string, any> | undefined\n const runtimeState = currentInstance?.__wevu?.state as Record<string, any> | undefined\n const pageLayoutState = reactive<MutablePageLayoutState>({\n name: normalizeRuntimePageLayoutName(runtimeState?.[WEVU_PAGE_LAYOUT_NAME_KEY]) as string | false | undefined,\n props: { ...(runtimeState?.[WEVU_PAGE_LAYOUT_PROPS_KEY] ?? {}) },\n })\n\n if (currentInstance) {\n currentInstance.__wevuPageLayoutState = pageLayoutState\n }\n\n return readonly(pageLayoutState) as Readonly<PageLayoutState>\n}\n\nexport function syncRuntimePageLayoutState(target: Record<string, any>, layout: string | false, props: PageLayoutProps) {\n const state = target.__wevuPageLayoutState as MutablePageLayoutState | undefined\n if (!state) {\n return\n }\n state.name = layout\n state.props = { ...props }\n}\n\nexport function syncRuntimePageLayoutStateFromRuntime(target: Record<string, any>) {\n const state = target.__wevuPageLayoutState as MutablePageLayoutState | undefined\n const runtimeState = target.__wevu?.state as Record<string, any> | undefined\n if (!state || !runtimeState) {\n return\n }\n state.name = normalizeRuntimePageLayoutName(runtimeState[WEVU_PAGE_LAYOUT_NAME_KEY]) as string | false | undefined\n state.props = { ...(runtimeState[WEVU_PAGE_LAYOUT_PROPS_KEY] ?? {}) }\n}\n\nexport function setPageLayout(layout: false): void\nexport function setPageLayout<Name extends ResolveTypedPageLayoutName>(layout: Name, props?: ResolveTypedPageLayoutProps<Name>): void\n\n/**\n * 显式切换当前页面使用的 layout。\n */\nexport function setPageLayout(layout: string | false, props?: PageLayoutProps): void {\n const currentInstance = getCurrentInstance() as Record<string, any> | undefined\n const directSetter = currentInstance?.[WEVU_PAGE_LAYOUT_SETTER_KEY] as PageLayoutSetter | undefined\n if (typeof directSetter === 'function') {\n directSetter(layout, props)\n return\n }\n\n const currentPage = resolveCurrentPageInstance()\n const pageSetter = currentPage?.[WEVU_PAGE_LAYOUT_SETTER_KEY] as PageLayoutSetter | undefined\n if (typeof pageSetter === 'function') {\n pageSetter(layout, props)\n return\n }\n\n throw new Error('setPageLayout() 未找到当前页面实例。请在页面 setup()、事件回调或当前页面上下文中调用。')\n}\n\nexport function resolveRuntimePageLayoutName(layout: string | false) {\n return layout === false ? WEVU_PAGE_LAYOUT_NONE : layout\n}\n"],"mappings":";;;;;;;;AAiDA,SAAS,6BAA6B;CACpC,MAAM,qBAAqB,uBAAuB;CAClD,IAAI,oBACF,OAAO;CAET,MAAM,QAAQ,2BAA2B;CACzC,OAAO,MAAM,MAAM,SAAS;AAC9B;AAEA,SAAS,+BAA+B,QAA4B;CAClE,OAAO,WAAW,wBAAwB,QAAQ;AACpD;;;;AAKA,SAAgB,gBAA2C;CACzD,IAAI,CAAC,uBAAuB,GAC1B,MAAM,IAAI,MAAM,qCAAqC;CAGvD,MAAM,kBAAkB,mBAAmB;CAC3C,MAAM,eAAe,iBAAiB,QAAQ;CAC9C,MAAM,kBAAkB,SAAiC;EACvD,MAAM,+BAA+B,eAAe,0BAA0B;EAC9E,OAAO,EAAE,GAAI,eAAe,+BAA+B,CAAC,EAAG;CACjE,CAAC;CAED,IAAI,iBACF,gBAAgB,wBAAwB;CAG1C,OAAO,SAAS,eAAe;AACjC;AAEA,SAAgB,2BAA2B,QAA6B,QAAwB,OAAwB;CACtH,MAAM,QAAQ,OAAO;CACrB,IAAI,CAAC,OACH;CAEF,MAAM,OAAO;CACb,MAAM,QAAQ,EAAE,GAAG,MAAM;AAC3B;AAEA,SAAgB,sCAAsC,QAA6B;CACjF,MAAM,QAAQ,OAAO;CACrB,MAAM,eAAe,OAAO,QAAQ;CACpC,IAAI,CAAC,SAAS,CAAC,cACb;CAEF,MAAM,OAAO,+BAA+B,aAAa,0BAA0B;CACnF,MAAM,QAAQ,EAAE,GAAI,aAAa,+BAA+B,CAAC,EAAG;AACtE;;;;AAQA,SAAgB,cAAc,QAAwB,OAA+B;CAEnF,MAAM,eADkB,mBACW,CAAC,GAAG;CACvC,IAAI,OAAO,iBAAiB,YAAY;EACtC,aAAa,QAAQ,KAAK;EAC1B;CACF;CAGA,MAAM,aADc,2BACS,CAAC,GAAG;CACjC,IAAI,OAAO,eAAe,YAAY;EACpC,WAAW,QAAQ,KAAK;EACxB;CACF;CAEA,MAAM,IAAI,MAAM,yDAAyD;AAC3E;AAEA,SAAgB,6BAA6B,QAAwB;CACnE,OAAO,WAAW,QAAQ,wBAAwB;AACpD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { WEAPP_VITE_STATEFUL_HMR_REGISTRATION_CONTRACT_VERSION, WEAPP_VITE_STATEFUL_HMR_UNSUPPORTED_REGISTRATION_CODE } from "@weapp-core/constants";
|
|
2
|
+
|
|
3
|
+
//#region src/runtime/register/component/hmrRegistration.ts
|
|
4
|
+
/** 只向识别原始注册契约的桥接交付生成包装器,旧桥接必须保留兼容错误。 */
|
|
5
|
+
function createStatefulHmrRegistrationContract(bridge, inputs) {
|
|
6
|
+
if (bridge.registrationContractVersion !== WEAPP_VITE_STATEFUL_HMR_REGISTRATION_CONTRACT_VERSION) throw Object.assign(/* @__PURE__ */ new Error("Stateful HMR bridge does not support the Wevu registration contract; classic rebuild is required."), { code: WEAPP_VITE_STATEFUL_HMR_UNSUPPORTED_REGISTRATION_CODE });
|
|
7
|
+
return {
|
|
8
|
+
version: WEAPP_VITE_STATEFUL_HMR_REGISTRATION_CONTRACT_VERSION,
|
|
9
|
+
...inputs
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { createStatefulHmrRegistrationContract };
|
|
15
|
+
//# sourceMappingURL=hmrRegistration.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hmrRegistration.mjs","names":[],"sources":["../../../../../src/runtime/register/component/hmrRegistration.ts"],"sourcesContent":["import type { LayoutHostBinding, TemplateRefBinding } from '../../capabilities'\nimport { WEAPP_VITE_STATEFUL_HMR_REGISTRATION_CONTRACT_VERSION, WEAPP_VITE_STATEFUL_HMR_UNSUPPORTED_REGISTRATION_CODE } from '@weapp-core/constants'\n\nexport interface StatefulHmrRegistrationInputs {\n userObservers?: Record<string, unknown>\n userExport?: unknown\n propsAliases?: Record<string, string>\n propsDerivedKeys?: string[]\n templateRefs?: TemplateRefBinding[]\n layoutHosts?: LayoutHostBinding[]\n setupLifecycle: 'created' | 'attached'\n nativeSlotContext: boolean\n}\n\n/** 只向识别原始注册契约的桥接交付生成包装器,旧桥接必须保留兼容错误。 */\nexport function createStatefulHmrRegistrationContract(bridge: { registrationContractVersion?: unknown }, inputs: StatefulHmrRegistrationInputs) {\n if (bridge.registrationContractVersion !== WEAPP_VITE_STATEFUL_HMR_REGISTRATION_CONTRACT_VERSION) {\n throw Object.assign(new Error('Stateful HMR bridge does not support the Wevu registration contract; classic rebuild is required.'), {\n code: WEAPP_VITE_STATEFUL_HMR_UNSUPPORTED_REGISTRATION_CODE,\n })\n }\n return { version: WEAPP_VITE_STATEFUL_HMR_REGISTRATION_CONTRACT_VERSION, ...inputs }\n}\n"],"mappings":";;;;AAeA,SAAgB,sCAAsC,QAAmD,QAAuC;CAC9I,IAAI,OAAO,gCAAgC,uDACzC,MAAM,OAAO,uBAAO,IAAI,MAAM,mGAAmG,GAAG,EAClI,MAAM,sDACR,CAAC;CAEH,OAAO;EAAE,SAAS;EAAuD,GAAG;CAAO;AACrF"}
|
|
@@ -6,7 +6,7 @@ import { WEVU_ATTRS_KEY, WEVU_NATIVE_DECLARATION_ADDRESS_PROP, WEVU_PENDING_PROP
|
|
|
6
6
|
|
|
7
7
|
//#region src/runtime/register/component/props.ts
|
|
8
8
|
function createPropsSync(options) {
|
|
9
|
-
const { restOptions, propsAliases, propsDerivedKeys, userObservers } = options;
|
|
9
|
+
const { restOptions, nativeSlotContext, propsAliases, propsDerivedKeys, userObservers } = options;
|
|
10
10
|
const propKeys = restOptions.properties && typeof restOptions.properties === "object" ? Object.keys(restOptions.properties) : [];
|
|
11
11
|
const propKeySet = new Set(propKeys);
|
|
12
12
|
const propsDerivedKeySet = new Set(propsDerivedKeys ?? []);
|
|
@@ -183,17 +183,17 @@ function createPropsSync(options) {
|
|
|
183
183
|
};
|
|
184
184
|
const injectedObservers = {};
|
|
185
185
|
if (propKeys.length) for (const key of propKeys) injectedObservers[key] = function __wevu_prop_observer(newValue) {
|
|
186
|
-
if ((!import.meta.env?.PLATFORM || import.meta.env?.PLATFORM === "weapp") && key === WEVU_NATIVE_DECLARATION_ADDRESS_PROP) updateNativeDeclarationAddress(this, newValue);
|
|
186
|
+
if ((!import.meta.env?.PLATFORM || import.meta.env?.PLATFORM === "weapp") && nativeSlotContext && key === WEVU_NATIVE_DECLARATION_ADDRESS_PROP) updateNativeDeclarationAddress(this, newValue);
|
|
187
187
|
syncWevuPropValue(this, key, newValue);
|
|
188
188
|
};
|
|
189
189
|
const finalObservers = {
|
|
190
|
-
...(!import.meta.env?.PLATFORM || import.meta.env?.PLATFORM === "weapp") && propKeySet.has(WEVU_NATIVE_DECLARATION_ADDRESS_PROP) ? { [WEVU_NATIVE_DECLARATION_ADDRESS_PROP]: void 0 } : {},
|
|
190
|
+
...(!import.meta.env?.PLATFORM || import.meta.env?.PLATFORM === "weapp") && nativeSlotContext && propKeySet.has(WEVU_NATIVE_DECLARATION_ADDRESS_PROP) ? { [WEVU_NATIVE_DECLARATION_ADDRESS_PROP]: void 0 } : {},
|
|
191
191
|
...userObservers ?? {}
|
|
192
192
|
};
|
|
193
193
|
for (const [key, injected] of Object.entries(injectedObservers)) {
|
|
194
194
|
const existing = finalObservers[key];
|
|
195
195
|
if (typeof existing === "function") finalObservers[key] = function chainedObserver(...args) {
|
|
196
|
-
if (key === WEVU_NATIVE_DECLARATION_ADDRESS_PROP) {
|
|
196
|
+
if (nativeSlotContext && key === WEVU_NATIVE_DECLARATION_ADDRESS_PROP) {
|
|
197
197
|
injected.apply(this, args);
|
|
198
198
|
existing.apply(this, args);
|
|
199
199
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"props.mjs","names":[],"sources":["../../../../../src/runtime/register/component/props.ts"],"sourcesContent":["import type { InternalRuntimeState } from '../../types'\nimport {\n WEVU_ATTRS_KEY,\n WEVU_NATIVE_DECLARATION_ADDRESS_PROP,\n WEVU_PENDING_PROP_VALUES_KEY,\n WEVU_PROP_KEYS_KEY,\n WEVU_PROPS_DERIVED_KEYS_KEY,\n WEVU_PROPS_KEY,\n WEVU_SLOT_NAMES_PROP,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_SCOPE_KEY,\n} from '@weapp-core/constants'\nimport { hasOwn } from '../../../utils'\nimport { isDeepEqualValue } from '../../app/setData/snapshot'\nimport { updateNativeDeclarationAddress } from '../runtimeInstance/nativeDeclaration'\nimport { refreshOwnerSnapshotFromInstance } from '../snapshot'\n\ntype ImportMetaWithEnv = ImportMeta & { env?: { PLATFORM?: string } }\n\nexport function createPropsSync(options: {\n restOptions: Record<string, any>\n propsAliases?: Record<string, string>\n propsDerivedKeys?: string[]\n userObservers?: Record<string, any>\n}) {\n const { restOptions, propsAliases, propsDerivedKeys, userObservers } = options\n const propKeys = restOptions.properties && typeof restOptions.properties === 'object'\n ? Object.keys(restOptions.properties as any)\n : []\n const propKeySet = new Set(propKeys)\n const propsDerivedKeySet = new Set(propsDerivedKeys ?? [])\n const aliasEntries = Object.entries(propsAliases ?? {})\n .filter(([alias, propName]) => alias && propName)\n const templateRuntimePropKeys = new Set([\n WEVU_SLOT_NAMES_PROP,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_SCOPE_KEY,\n ])\n // 原生 properties 已由宿主管理,setup/data 中的同名绑定不能再通过 setData 回写。\n // 编译协议字段仍需镜像到顶层 data,供 WXML 的 slot 分支直接读取。\n const directPropsDerivedKeys = propKeys.filter(key => !templateRuntimePropKeys.has(key))\n const syncedAliases = new WeakMap<InternalRuntimeState, Set<string>>()\n\n const isInternalAttrKey = (key: string) => key.startsWith('__wv_')\n\n const updateSnapshotOmitKeys = (instance: InternalRuntimeState) => {\n const runtime = (instance as any).__wevu\n const snapshotOmitKeys = runtime?.[WEVU_PROPS_DERIVED_KEYS_KEY]\n if (!(snapshotOmitKeys instanceof Set)) {\n return\n }\n for (const key of directPropsDerivedKeys) {\n snapshotOmitKeys.add(key)\n }\n }\n\n const setIfChanged = (target: Record<string, unknown>, key: string, value: unknown) => {\n if (hasOwn(target, key) && Object.is(target[key], value)) {\n return false\n }\n target[key] = value\n return true\n }\n\n const setPropIfChanged = (target: Record<string, unknown>, key: string, value: unknown) => {\n if (\n templateRuntimePropKeys.has(key)\n && hasOwn(target, key)\n && isDeepEqualValue(target[key], value, 20, { keys: 10_000 })\n ) {\n return false\n }\n return setIfChanged(target, key, value)\n }\n\n const syncTemplateRuntimeProp = (instance: InternalRuntimeState, key: string, value: unknown) => {\n if (!templateRuntimePropKeys.has(key)) {\n return\n }\n let nativeDataChanged = false\n const runtimeState = (instance as any).__wevu?.state\n try {\n if (runtimeState && typeof runtimeState === 'object') {\n setPropIfChanged(runtimeState as Record<string, unknown>, key, value)\n }\n const nativeData = (instance as any).data\n if (nativeData && typeof nativeData === 'object') {\n nativeDataChanged = setPropIfChanged(nativeData as Record<string, unknown>, key, value)\n }\n }\n catch {\n // 忽略模板运行时字段同步失败,保持 props 主链路可用。\n }\n if (!nativeDataChanged || typeof (instance as any).setData !== 'function') {\n return\n }\n try {\n ;(instance as any).setData({ [key]: value })\n }\n catch {\n // 忽略模板桥接字段 setData 失败,后续响应式调度仍可兜底。\n }\n }\n\n const syncSetupStatePropsAliases = (instance: InternalRuntimeState, propsProxy: Record<string, unknown>) => {\n if (!aliasEntries.length) {\n return\n }\n const runtime = (instance as any).__wevu\n const setupState = runtime?.setupState\n const state = runtime?.state\n if (!setupState || typeof setupState !== 'object') {\n return\n }\n updateSnapshotOmitKeys(instance)\n const aliases = syncedAliases.get(instance) ?? new Set<string>()\n syncedAliases.set(instance, aliases)\n for (const [alias, propName] of aliasEntries) {\n if (hasOwn(setupState, alias) && !aliases.has(alias)) {\n continue\n }\n const value = propsProxy[propName]\n try {\n setIfChanged(setupState as Record<string, unknown>, alias, value)\n aliases.add(alias)\n }\n catch {\n // 忽略 alias 同步失败,保持 props 主链路可用。\n }\n if (state && typeof state === 'object' && (!hasOwn(state, alias) || aliases.has(alias))) {\n try {\n setIfChanged(state as Record<string, unknown>, alias, value)\n }\n catch {\n // 旧兼容 state 写入失败时不阻断运行时。\n }\n }\n }\n }\n\n const syncPropsDerivedKeys = (instance: InternalRuntimeState, propsProxy: Record<string, unknown>) => {\n if (!propsDerivedKeySet.size) {\n return\n }\n const runtime = (instance as any).__wevu\n const setupState = runtime?.setupState\n if (!setupState || typeof setupState !== 'object') {\n return\n }\n updateSnapshotOmitKeys(instance)\n const aliasToPropName = new Map<string, string>(aliasEntries)\n for (const key of propsDerivedKeySet) {\n const propName = aliasToPropName.get(key) ?? key\n if (!hasOwn(propsProxy, propName)) {\n continue\n }\n try {\n setIfChanged(setupState as Record<string, unknown>, key, propsProxy[propName])\n }\n catch {\n // 忽略 props-derived 同步失败,保持主 props 链路可用。\n }\n }\n }\n\n const attachWevuPropKeys = (instance: InternalRuntimeState) => {\n try {\n Object.defineProperty(instance, WEVU_PROP_KEYS_KEY, {\n value: propKeys,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n }\n catch {\n ;(instance as any)[WEVU_PROP_KEYS_KEY] = propKeys\n }\n }\n\n const syncWevuAttrsFromInstance = (instance: InternalRuntimeState) => {\n const attrsProxy = (instance as any)[WEVU_ATTRS_KEY]\n if (!attrsProxy || typeof attrsProxy !== 'object') {\n return\n }\n const hasRuntimeStateKey = (key: string) => {\n const runtimeState = (instance as any).__wevu?.state\n return runtimeState != null\n && typeof runtimeState === 'object'\n && hasOwn(runtimeState as Record<string, unknown>, key)\n }\n\n const properties = (instance as any).properties\n const next = properties && typeof properties === 'object'\n ? (properties as Record<string, unknown>)\n : undefined\n\n const currentKeys = Object.keys(attrsProxy as any)\n for (const existingKey of currentKeys) {\n if (\n !next\n || !hasOwn(next, existingKey)\n || isInternalAttrKey(existingKey)\n || propKeySet.has(existingKey)\n || hasRuntimeStateKey(existingKey)\n ) {\n try {\n delete (attrsProxy as any)[existingKey]\n }\n catch {\n // 忽略异常\n }\n }\n }\n\n if (!next) {\n refreshOwnerSnapshotFromInstance(instance)\n return\n }\n\n for (const [key, value] of Object.entries(next)) {\n if (isInternalAttrKey(key) || propKeySet.has(key) || hasRuntimeStateKey(key)) {\n continue\n }\n try {\n ;(attrsProxy as any)[key] = value\n }\n catch {\n // 忽略异常\n }\n }\n\n refreshOwnerSnapshotFromInstance(instance)\n }\n\n const syncWevuPropsFromInstance = (instance: InternalRuntimeState) => {\n const propsProxy = (instance as any)[WEVU_PROPS_KEY]\n const properties = (instance as any).properties\n const pendingPropValues = (instance as any)[WEVU_PENDING_PROP_VALUES_KEY] as Record<string, unknown> | undefined\n\n if (propsProxy && typeof propsProxy === 'object' && properties && typeof properties === 'object') {\n const next = properties as any\n const currentKeys = Object.keys(propsProxy as any)\n for (const existingKey of currentKeys) {\n if (!propKeySet.has(existingKey) || !hasOwn(next, existingKey)) {\n try {\n delete (propsProxy as any)[existingKey]\n }\n catch {\n // 忽略异常\n }\n }\n }\n for (const key of propKeys) {\n const hasPendingValue = pendingPropValues && hasOwn(pendingPropValues, key)\n if (!hasPendingValue && !hasOwn(next, key)) {\n continue\n }\n const nextValue = hasPendingValue ? pendingPropValues[key] : next[key]\n try {\n setPropIfChanged(propsProxy as Record<string, unknown>, key, nextValue)\n }\n catch {\n // 忽略异常\n }\n syncTemplateRuntimeProp(instance, key, nextValue)\n }\n syncPropsDerivedKeys(instance, propsProxy as Record<string, unknown>)\n syncSetupStatePropsAliases(instance, propsProxy as Record<string, unknown>)\n refreshOwnerSnapshotFromInstance(instance)\n }\n if (pendingPropValues) {\n delete (instance as any)[WEVU_PENDING_PROP_VALUES_KEY]\n }\n\n syncWevuAttrsFromInstance(instance)\n }\n\n const syncWevuPropsFromValues = (instance: InternalRuntimeState, values: Record<string, unknown> | undefined) => {\n if (!values || typeof values !== 'object') {\n return\n }\n const propsProxy = (instance as any)[WEVU_PROPS_KEY]\n if (!propsProxy || typeof propsProxy !== 'object') {\n return\n }\n let changed = false\n for (const key of propKeys) {\n if (!hasOwn(values, key)) {\n continue\n }\n try {\n changed = setPropIfChanged(propsProxy as Record<string, unknown>, key, values[key]) || changed\n }\n catch {\n // 忽略 query props 同步失败,保持页面生命周期主链路可用。\n }\n syncTemplateRuntimeProp(instance, key, values[key])\n }\n if (!changed) {\n return\n }\n syncPropsDerivedKeys(instance, propsProxy as Record<string, unknown>)\n syncSetupStatePropsAliases(instance, propsProxy as Record<string, unknown>)\n refreshOwnerSnapshotFromInstance(instance)\n syncWevuAttrsFromInstance(instance)\n }\n\n const syncWevuPropValue = (instance: InternalRuntimeState, key: string, value: unknown) => {\n const propsProxy = (instance as any)[WEVU_PROPS_KEY]\n if (!propsProxy || typeof propsProxy !== 'object') {\n return\n }\n try {\n if (!setPropIfChanged(propsProxy as Record<string, unknown>, key, value)) {\n syncTemplateRuntimeProp(instance, key, value)\n return\n }\n }\n catch {\n // 忽略异常\n }\n syncTemplateRuntimeProp(instance, key, value)\n const pendingPropValues = ((instance as any)[WEVU_PENDING_PROP_VALUES_KEY] ??= Object.create(null)) as Record<string, unknown>\n pendingPropValues[key] = value\n syncPropsDerivedKeys(instance, propsProxy as Record<string, unknown>)\n syncSetupStatePropsAliases(instance, propsProxy as Record<string, unknown>)\n refreshOwnerSnapshotFromInstance(instance)\n syncWevuAttrsFromInstance(instance)\n }\n\n const injectedObservers: Record<string, any> = {}\n if (propKeys.length) {\n for (const key of propKeys) {\n injectedObservers[key] = function __wevu_prop_observer(this: InternalRuntimeState, newValue: unknown) {\n if (\n (!(import.meta as ImportMetaWithEnv).env?.PLATFORM || (import.meta as ImportMetaWithEnv).env?.PLATFORM === 'weapp')\n && key === WEVU_NATIVE_DECLARATION_ADDRESS_PROP\n ) {\n updateNativeDeclarationAddress(this, newValue)\n }\n // 注意:在部分小程序运行时中,observer 回调触发时 `this.properties` 可能尚未更新,\n // 因此这里以 observer 的 newValue 为准写入 propsProxy,避免出现 props 仍为旧值/undefined。\n syncWevuPropValue(this, key, newValue)\n }\n }\n }\n\n const finalObservers: Record<string, any> = {\n // 地址 observer 必须先于通配/组合用户 observer,避免同步创建的后代看到旧索引。\n ...((!(import.meta as ImportMetaWithEnv).env?.PLATFORM || (import.meta as ImportMetaWithEnv).env?.PLATFORM === 'weapp')\n && propKeySet.has(WEVU_NATIVE_DECLARATION_ADDRESS_PROP)\n ? { [WEVU_NATIVE_DECLARATION_ADDRESS_PROP]: undefined }\n : {}),\n ...(userObservers ?? {}),\n }\n for (const [key, injected] of Object.entries(injectedObservers)) {\n const existing = finalObservers[key]\n if (typeof existing === 'function') {\n finalObservers[key] = function chainedObserver(this: InternalRuntimeState, ...args: any[]) {\n if (key === WEVU_NATIVE_DECLARATION_ADDRESS_PROP) {\n injected.apply(this, args)\n existing.apply(this, args)\n }\n else {\n existing.apply(this, args)\n injected.apply(this, args)\n }\n }\n }\n else {\n finalObservers[key] = injected\n }\n }\n\n const allObserver = finalObservers['**']\n finalObservers['**'] = function __wevu_observer_all(this: InternalRuntimeState, ...args: any[]) {\n if (typeof allObserver === 'function') {\n allObserver.apply(this, args)\n }\n syncWevuPropsFromInstance(this)\n }\n\n return {\n attachWevuPropKeys,\n directPropsDerivedKeys,\n syncWevuPropsFromInstance,\n syncWevuPropsFromValues,\n finalObservers,\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"props.mjs","names":[],"sources":["../../../../../src/runtime/register/component/props.ts"],"sourcesContent":["import type { InternalRuntimeState } from '../../types'\nimport {\n WEVU_ATTRS_KEY,\n WEVU_NATIVE_DECLARATION_ADDRESS_PROP,\n WEVU_PENDING_PROP_VALUES_KEY,\n WEVU_PROP_KEYS_KEY,\n WEVU_PROPS_DERIVED_KEYS_KEY,\n WEVU_PROPS_KEY,\n WEVU_SLOT_NAMES_PROP,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_SCOPE_KEY,\n} from '@weapp-core/constants'\nimport { hasOwn } from '../../../utils'\nimport { isDeepEqualValue } from '../../app/setData/snapshot'\nimport { updateNativeDeclarationAddress } from '../runtimeInstance/nativeDeclaration'\nimport { refreshOwnerSnapshotFromInstance } from '../snapshot'\n\ntype ImportMetaWithEnv = ImportMeta & { env?: { PLATFORM?: string } }\n\nexport function createPropsSync(options: {\n restOptions: Record<string, any>\n nativeSlotContext: boolean\n propsAliases?: Record<string, string>\n propsDerivedKeys?: string[]\n userObservers?: Record<string, any>\n}) {\n const { restOptions, nativeSlotContext, propsAliases, propsDerivedKeys, userObservers } = options\n const propKeys = restOptions.properties && typeof restOptions.properties === 'object'\n ? Object.keys(restOptions.properties as any)\n : []\n const propKeySet = new Set(propKeys)\n const propsDerivedKeySet = new Set(propsDerivedKeys ?? [])\n const aliasEntries = Object.entries(propsAliases ?? {})\n .filter(([alias, propName]) => alias && propName)\n const templateRuntimePropKeys = new Set([\n WEVU_SLOT_NAMES_PROP,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_SCOPE_KEY,\n ])\n // 原生 properties 已由宿主管理,setup/data 中的同名绑定不能再通过 setData 回写。\n // 编译协议字段仍需镜像到顶层 data,供 WXML 的 slot 分支直接读取。\n const directPropsDerivedKeys = propKeys.filter(key => !templateRuntimePropKeys.has(key))\n const syncedAliases = new WeakMap<InternalRuntimeState, Set<string>>()\n\n const isInternalAttrKey = (key: string) => key.startsWith('__wv_')\n\n const updateSnapshotOmitKeys = (instance: InternalRuntimeState) => {\n const runtime = (instance as any).__wevu\n const snapshotOmitKeys = runtime?.[WEVU_PROPS_DERIVED_KEYS_KEY]\n if (!(snapshotOmitKeys instanceof Set)) {\n return\n }\n for (const key of directPropsDerivedKeys) {\n snapshotOmitKeys.add(key)\n }\n }\n\n const setIfChanged = (target: Record<string, unknown>, key: string, value: unknown) => {\n if (hasOwn(target, key) && Object.is(target[key], value)) {\n return false\n }\n target[key] = value\n return true\n }\n\n const setPropIfChanged = (target: Record<string, unknown>, key: string, value: unknown) => {\n if (\n templateRuntimePropKeys.has(key)\n && hasOwn(target, key)\n && isDeepEqualValue(target[key], value, 20, { keys: 10_000 })\n ) {\n return false\n }\n return setIfChanged(target, key, value)\n }\n\n const syncTemplateRuntimeProp = (instance: InternalRuntimeState, key: string, value: unknown) => {\n if (!templateRuntimePropKeys.has(key)) {\n return\n }\n let nativeDataChanged = false\n const runtimeState = (instance as any).__wevu?.state\n try {\n if (runtimeState && typeof runtimeState === 'object') {\n setPropIfChanged(runtimeState as Record<string, unknown>, key, value)\n }\n const nativeData = (instance as any).data\n if (nativeData && typeof nativeData === 'object') {\n nativeDataChanged = setPropIfChanged(nativeData as Record<string, unknown>, key, value)\n }\n }\n catch {\n // 忽略模板运行时字段同步失败,保持 props 主链路可用。\n }\n if (!nativeDataChanged || typeof (instance as any).setData !== 'function') {\n return\n }\n try {\n ;(instance as any).setData({ [key]: value })\n }\n catch {\n // 忽略模板桥接字段 setData 失败,后续响应式调度仍可兜底。\n }\n }\n\n const syncSetupStatePropsAliases = (instance: InternalRuntimeState, propsProxy: Record<string, unknown>) => {\n if (!aliasEntries.length) {\n return\n }\n const runtime = (instance as any).__wevu\n const setupState = runtime?.setupState\n const state = runtime?.state\n if (!setupState || typeof setupState !== 'object') {\n return\n }\n updateSnapshotOmitKeys(instance)\n const aliases = syncedAliases.get(instance) ?? new Set<string>()\n syncedAliases.set(instance, aliases)\n for (const [alias, propName] of aliasEntries) {\n if (hasOwn(setupState, alias) && !aliases.has(alias)) {\n continue\n }\n const value = propsProxy[propName]\n try {\n setIfChanged(setupState as Record<string, unknown>, alias, value)\n aliases.add(alias)\n }\n catch {\n // 忽略 alias 同步失败,保持 props 主链路可用。\n }\n if (state && typeof state === 'object' && (!hasOwn(state, alias) || aliases.has(alias))) {\n try {\n setIfChanged(state as Record<string, unknown>, alias, value)\n }\n catch {\n // 旧兼容 state 写入失败时不阻断运行时。\n }\n }\n }\n }\n\n const syncPropsDerivedKeys = (instance: InternalRuntimeState, propsProxy: Record<string, unknown>) => {\n if (!propsDerivedKeySet.size) {\n return\n }\n const runtime = (instance as any).__wevu\n const setupState = runtime?.setupState\n if (!setupState || typeof setupState !== 'object') {\n return\n }\n updateSnapshotOmitKeys(instance)\n const aliasToPropName = new Map<string, string>(aliasEntries)\n for (const key of propsDerivedKeySet) {\n const propName = aliasToPropName.get(key) ?? key\n if (!hasOwn(propsProxy, propName)) {\n continue\n }\n try {\n setIfChanged(setupState as Record<string, unknown>, key, propsProxy[propName])\n }\n catch {\n // 忽略 props-derived 同步失败,保持主 props 链路可用。\n }\n }\n }\n\n const attachWevuPropKeys = (instance: InternalRuntimeState) => {\n try {\n Object.defineProperty(instance, WEVU_PROP_KEYS_KEY, {\n value: propKeys,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n }\n catch {\n ;(instance as any)[WEVU_PROP_KEYS_KEY] = propKeys\n }\n }\n\n const syncWevuAttrsFromInstance = (instance: InternalRuntimeState) => {\n const attrsProxy = (instance as any)[WEVU_ATTRS_KEY]\n if (!attrsProxy || typeof attrsProxy !== 'object') {\n return\n }\n const hasRuntimeStateKey = (key: string) => {\n const runtimeState = (instance as any).__wevu?.state\n return runtimeState != null\n && typeof runtimeState === 'object'\n && hasOwn(runtimeState as Record<string, unknown>, key)\n }\n\n const properties = (instance as any).properties\n const next = properties && typeof properties === 'object'\n ? (properties as Record<string, unknown>)\n : undefined\n\n const currentKeys = Object.keys(attrsProxy as any)\n for (const existingKey of currentKeys) {\n if (\n !next\n || !hasOwn(next, existingKey)\n || isInternalAttrKey(existingKey)\n || propKeySet.has(existingKey)\n || hasRuntimeStateKey(existingKey)\n ) {\n try {\n delete (attrsProxy as any)[existingKey]\n }\n catch {\n // 忽略异常\n }\n }\n }\n\n if (!next) {\n refreshOwnerSnapshotFromInstance(instance)\n return\n }\n\n for (const [key, value] of Object.entries(next)) {\n if (isInternalAttrKey(key) || propKeySet.has(key) || hasRuntimeStateKey(key)) {\n continue\n }\n try {\n ;(attrsProxy as any)[key] = value\n }\n catch {\n // 忽略异常\n }\n }\n\n refreshOwnerSnapshotFromInstance(instance)\n }\n\n const syncWevuPropsFromInstance = (instance: InternalRuntimeState) => {\n const propsProxy = (instance as any)[WEVU_PROPS_KEY]\n const properties = (instance as any).properties\n const pendingPropValues = (instance as any)[WEVU_PENDING_PROP_VALUES_KEY] as Record<string, unknown> | undefined\n\n if (propsProxy && typeof propsProxy === 'object' && properties && typeof properties === 'object') {\n const next = properties as any\n const currentKeys = Object.keys(propsProxy as any)\n for (const existingKey of currentKeys) {\n if (!propKeySet.has(existingKey) || !hasOwn(next, existingKey)) {\n try {\n delete (propsProxy as any)[existingKey]\n }\n catch {\n // 忽略异常\n }\n }\n }\n for (const key of propKeys) {\n const hasPendingValue = pendingPropValues && hasOwn(pendingPropValues, key)\n if (!hasPendingValue && !hasOwn(next, key)) {\n continue\n }\n const nextValue = hasPendingValue ? pendingPropValues[key] : next[key]\n try {\n setPropIfChanged(propsProxy as Record<string, unknown>, key, nextValue)\n }\n catch {\n // 忽略异常\n }\n syncTemplateRuntimeProp(instance, key, nextValue)\n }\n syncPropsDerivedKeys(instance, propsProxy as Record<string, unknown>)\n syncSetupStatePropsAliases(instance, propsProxy as Record<string, unknown>)\n refreshOwnerSnapshotFromInstance(instance)\n }\n if (pendingPropValues) {\n delete (instance as any)[WEVU_PENDING_PROP_VALUES_KEY]\n }\n\n syncWevuAttrsFromInstance(instance)\n }\n\n const syncWevuPropsFromValues = (instance: InternalRuntimeState, values: Record<string, unknown> | undefined) => {\n if (!values || typeof values !== 'object') {\n return\n }\n const propsProxy = (instance as any)[WEVU_PROPS_KEY]\n if (!propsProxy || typeof propsProxy !== 'object') {\n return\n }\n let changed = false\n for (const key of propKeys) {\n if (!hasOwn(values, key)) {\n continue\n }\n try {\n changed = setPropIfChanged(propsProxy as Record<string, unknown>, key, values[key]) || changed\n }\n catch {\n // 忽略 query props 同步失败,保持页面生命周期主链路可用。\n }\n syncTemplateRuntimeProp(instance, key, values[key])\n }\n if (!changed) {\n return\n }\n syncPropsDerivedKeys(instance, propsProxy as Record<string, unknown>)\n syncSetupStatePropsAliases(instance, propsProxy as Record<string, unknown>)\n refreshOwnerSnapshotFromInstance(instance)\n syncWevuAttrsFromInstance(instance)\n }\n\n const syncWevuPropValue = (instance: InternalRuntimeState, key: string, value: unknown) => {\n const propsProxy = (instance as any)[WEVU_PROPS_KEY]\n if (!propsProxy || typeof propsProxy !== 'object') {\n return\n }\n try {\n if (!setPropIfChanged(propsProxy as Record<string, unknown>, key, value)) {\n syncTemplateRuntimeProp(instance, key, value)\n return\n }\n }\n catch {\n // 忽略异常\n }\n syncTemplateRuntimeProp(instance, key, value)\n const pendingPropValues = ((instance as any)[WEVU_PENDING_PROP_VALUES_KEY] ??= Object.create(null)) as Record<string, unknown>\n pendingPropValues[key] = value\n syncPropsDerivedKeys(instance, propsProxy as Record<string, unknown>)\n syncSetupStatePropsAliases(instance, propsProxy as Record<string, unknown>)\n refreshOwnerSnapshotFromInstance(instance)\n syncWevuAttrsFromInstance(instance)\n }\n\n const injectedObservers: Record<string, any> = {}\n if (propKeys.length) {\n for (const key of propKeys) {\n injectedObservers[key] = function __wevu_prop_observer(this: InternalRuntimeState, newValue: unknown) {\n if (\n (!(import.meta as ImportMetaWithEnv).env?.PLATFORM || (import.meta as ImportMetaWithEnv).env?.PLATFORM === 'weapp')\n && nativeSlotContext\n && key === WEVU_NATIVE_DECLARATION_ADDRESS_PROP\n ) {\n updateNativeDeclarationAddress(this, newValue)\n }\n // 注意:在部分小程序运行时中,observer 回调触发时 `this.properties` 可能尚未更新,\n // 因此这里以 observer 的 newValue 为准写入 propsProxy,避免出现 props 仍为旧值/undefined。\n syncWevuPropValue(this, key, newValue)\n }\n }\n }\n\n const finalObservers: Record<string, any> = {\n // 地址 observer 必须先于通配/组合用户 observer,避免同步创建的后代看到旧索引。\n ...((!(import.meta as ImportMetaWithEnv).env?.PLATFORM || (import.meta as ImportMetaWithEnv).env?.PLATFORM === 'weapp')\n && nativeSlotContext\n && propKeySet.has(WEVU_NATIVE_DECLARATION_ADDRESS_PROP)\n ? { [WEVU_NATIVE_DECLARATION_ADDRESS_PROP]: undefined }\n : {}),\n ...(userObservers ?? {}),\n }\n for (const [key, injected] of Object.entries(injectedObservers)) {\n const existing = finalObservers[key]\n if (typeof existing === 'function') {\n finalObservers[key] = function chainedObserver(this: InternalRuntimeState, ...args: any[]) {\n if (nativeSlotContext && key === WEVU_NATIVE_DECLARATION_ADDRESS_PROP) {\n injected.apply(this, args)\n existing.apply(this, args)\n }\n else {\n existing.apply(this, args)\n injected.apply(this, args)\n }\n }\n }\n else {\n finalObservers[key] = injected\n }\n }\n\n const allObserver = finalObservers['**']\n finalObservers['**'] = function __wevu_observer_all(this: InternalRuntimeState, ...args: any[]) {\n if (typeof allObserver === 'function') {\n allObserver.apply(this, args)\n }\n syncWevuPropsFromInstance(this)\n }\n\n return {\n attachWevuPropKeys,\n directPropsDerivedKeys,\n syncWevuPropsFromInstance,\n syncWevuPropsFromValues,\n finalObservers,\n }\n}\n"],"mappings":"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"}
|