wevu 7.4.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/README.md +2 -0
- 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.151.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/defineProperty.mjs +1 -1
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/toPrimitive.mjs +1 -1
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/toPropertyKey.mjs +1 -1
- package/dist/dev/_virtual/{_@oxc-project_runtime@0.151.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/app/diagnostics.mjs +5 -1
- package/dist/dev/runtime/app/diagnostics.mjs.map +1 -1
- package/dist/dev/runtime/app/mount.mjs +8 -3
- package/dist/dev/runtime/app/mount.mjs.map +1 -1
- package/dist/dev/runtime/app/setData/commitTracker.mjs +39 -4
- package/dist/dev/runtime/app/setData/commitTracker.mjs.map +1 -1
- package/dist/dev/runtime/app/setData/observation.mjs +109 -0
- package/dist/dev/runtime/app/setData/observation.mjs.map +1 -0
- package/dist/dev/runtime/app/setData/scheduler.mjs +12 -1
- package/dist/dev/runtime/app/setData/scheduler.mjs.map +1 -1
- package/dist/dev/runtime/app/setDataOptions.mjs +1 -0
- package/dist/dev/runtime/app/setDataOptions.mjs.map +1 -1
- package/dist/dev/runtime/define/initialComputed.mjs +13 -12
- package/dist/dev/runtime/define/initialComputed.mjs.map +1 -1
- package/dist/dev/runtime/define/props.mjs +5 -1
- package/dist/dev/runtime/define/props.mjs.map +1 -1
- package/dist/dev/runtime/define/scopedSlotOptions.mjs +2 -1
- package/dist/dev/runtime/define/scopedSlotOptions.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 +3 -8
- package/dist/dev/runtime/define.mjs.map +1 -1
- package/dist/dev/runtime/features/scopedSlots.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 +15 -5
- package/dist/dev/runtime/register/component/props.mjs.map +1 -1
- package/dist/dev/runtime/register/component/registerDefinition.mjs +30 -18
- package/dist/dev/runtime/register/component/registerDefinition.mjs.map +1 -1
- package/dist/dev/runtime/register/component.mjs +23 -12
- package/dist/dev/runtime/register/component.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs +14 -7
- package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance/nativeDeclaration.mjs +78 -0
- package/dist/dev/runtime/register/runtimeInstance/nativeDeclaration.mjs.map +1 -0
- package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs +52 -8
- package/dist/dev/runtime/register/runtimeInstance/provideContext.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/utils.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance.mjs +69 -29
- 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/fetch.mjs +1 -1
- package/dist/index.d.mts +13 -8
- package/dist/internal-reactivity.d.mts +2 -1
- package/dist/internal-template.mjs +1 -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/reactive/patch.mjs +1 -1
- package/dist/reactivity/reactive/patchState.mjs +1 -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/helpers.mjs +1 -1
- package/dist/reactivity/watch/types.d.mts +2 -1
- package/dist/router/initialNavigation.mjs +1 -1
- package/dist/router/types.d.mts +2 -1
- package/dist/router/useRoute.mjs +1 -1
- package/dist/routerInternal/matching.mjs +1 -1
- package/dist/routerInternal/params.mjs +1 -1
- package/dist/routerInternal/path.mjs +1 -1
- package/dist/routerInternal/query.mjs +1 -1
- package/dist/routerInternal/records.mjs +1 -1
- package/dist/runtime/app/context.mjs +1 -1
- package/dist/runtime/app/diagnostics.mjs +1 -1
- package/dist/runtime/app/mount.mjs +1 -1
- package/dist/runtime/app/setData/commitTracker.d.mts +2 -1
- package/dist/runtime/app/setData/commitTracker.mjs +1 -1
- package/dist/runtime/app/setData/observation.d.mts +13 -0
- package/dist/runtime/app/setData/observation.mjs +1 -0
- package/dist/runtime/app/setData/scheduler.d.mts +1 -0
- package/dist/runtime/app/setData/scheduler.mjs +1 -1
- package/dist/runtime/app/setDataOptions.mjs +1 -1
- package/dist/runtime/app.d.mts +1 -1
- package/dist/runtime/capabilities.d.mts +2 -2
- package/dist/runtime/define/initialComputed.mjs +1 -1
- package/dist/runtime/define/props.mjs +1 -1
- package/dist/runtime/define/scopedSlotOptions.mjs +1 -1
- 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/diff.mjs +1 -1
- package/dist/runtime/features/publicLayout.d.mts +2 -1
- package/dist/runtime/features/publicLayout.mjs +1 -1
- package/dist/runtime/features/scopedSlots.d.mts +3 -2
- package/dist/runtime/index.d.mts +7 -4
- package/dist/runtime/jsxIsland.mjs +1 -1
- package/dist/runtime/pageLayout.d.mts +3 -2
- package/dist/runtime/pageLayout.mjs +1 -1
- package/dist/runtime/pageScroll.mjs +1 -1
- package/dist/runtime/register/app.d.mts +1 -1
- package/dist/runtime/register/component/alipayRegistration.mjs +1 -1
- package/dist/runtime/register/component/hmrRegistration.mjs +1 -0
- package/dist/runtime/register/component/lifecycle.mjs +1 -1
- package/dist/runtime/register/component/props.mjs +1 -1
- package/dist/runtime/register/component/registerDefinition.mjs +1 -1
- package/dist/runtime/register/component/registerNativeDefinition.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/methodBridge.mjs +1 -1
- package/dist/runtime/register/runtimeInstance/nativeDeclaration.mjs +1 -0
- package/dist/runtime/register/runtimeInstance/provideContext.mjs +1 -1
- package/dist/runtime/register/runtimeInstance/setupPhase.mjs +1 -1
- package/dist/runtime/register/runtimeInstance.d.mts +11 -6
- 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/setupTracking.mjs +1 -1
- package/dist/runtime/templateRefTypes.d.mts +3 -5
- package/dist/runtime/templateRefs.mjs +1 -1
- 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 +3 -1
- package/dist/runtime/types/setData.d.mts +30 -0
- 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/scheduler.mjs +1 -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/dist/web-apis.mjs +1 -1
- package/package.json +23 -13
- package/dist/dev/api/vitest/setup.d.mts +0 -1
- package/dist/dev/api/vitest.d.mts +0 -1
- package/dist/dev/api.d.mts +0 -1
- package/dist/dev/compiler.d.mts +0 -1
- package/dist/dev/fetch.d.mts +0 -9
- package/dist/dev/index.d.mts +0 -72
- package/dist/dev/internal-reactivity.d.mts +0 -18
- package/dist/dev/internal-runtime.d.mts +0 -45
- package/dist/dev/internal-template.d.mts +0 -2
- package/dist/dev/jsxTypes.d.mts +0 -9
- package/dist/dev/macros/shared.d.mts +0 -83
- package/dist/dev/macros.d.mts +0 -71
- package/dist/dev/reactivity/asyncDerivation.d.mts +0 -41
- package/dist/dev/reactivity/computed.d.mts +0 -25
- package/dist/dev/reactivity/core.d.mts +0 -35
- package/dist/dev/reactivity/index.d.mts +0 -16
- package/dist/dev/reactivity/reactive/mutation.d.mts +0 -21
- package/dist/dev/reactivity/reactive/patch.d.mts +0 -18
- package/dist/dev/reactivity/reactive/shallow.d.mts +0 -22
- package/dist/dev/reactivity/reactive/shared.d.mts +0 -4
- package/dist/dev/reactivity/reactive.d.mts +0 -42
- package/dist/dev/reactivity/readonly.d.mts +0 -27
- package/dist/dev/reactivity/ref.d.mts +0 -27
- package/dist/dev/reactivity/shallowRef.d.mts +0 -19
- package/dist/dev/reactivity/toRefs.d.mts +0 -43
- package/dist/dev/reactivity/traverse.d.mts +0 -8
- package/dist/dev/reactivity/watch/types.d.mts +0 -43
- package/dist/dev/reactivity/watch.d.mts +0 -22
- package/dist/dev/router/auto-routes.d.mts +0 -8
- package/dist/dev/router/createRouter.d.mts +0 -9
- package/dist/dev/router/navigationCore.d.mts +0 -7
- package/dist/dev/router/resolve.d.mts +0 -7
- package/dist/dev/router/routeSync.d.mts +0 -2
- package/dist/dev/router/scrollRestoration/adapters.d.mts +0 -8
- package/dist/dev/router/scrollRestoration/controller.d.mts +0 -8
- package/dist/dev/router/scrollRestoration/host.d.mts +0 -3
- package/dist/dev/router/scrollRestoration/index.d.mts +0 -9
- package/dist/dev/router/scrollRestoration/types.d.mts +0 -61
- package/dist/dev/router/types.d.mts +0 -267
- package/dist/dev/router/useRoute.d.mts +0 -20
- package/dist/dev/router/useRouter.d.mts +0 -9
- package/dist/dev/router.d.mts +0 -30
- package/dist/dev/routerInternal/location.d.mts +0 -2
- package/dist/dev/routerInternal/matching.d.mts +0 -2
- package/dist/dev/routerInternal/params.d.mts +0 -2
- package/dist/dev/routerInternal/query.d.mts +0 -7
- package/dist/dev/routerInternal/records.d.mts +0 -2
- package/dist/dev/routerInternal/recordsWarnings.d.mts +0 -2
- package/dist/dev/routerInternal/shared.d.mts +0 -9
- package/dist/dev/routerInternal/snapshots.d.mts +0 -2
- package/dist/dev/routerInternal/types.d.mts +0 -9
- package/dist/dev/runtime/app/pending.d.mts +0 -10
- package/dist/dev/runtime/app/setData/commitTracker.d.mts +0 -13
- package/dist/dev/runtime/app/setData/scheduler.d.mts +0 -51
- package/dist/dev/runtime/app.d.mts +0 -8
- package/dist/dev/runtime/capabilities.d.mts +0 -78
- package/dist/dev/runtime/css.d.mts +0 -14
- package/dist/dev/runtime/defaults.d.mts +0 -12
- package/dist/dev/runtime/define.d.mts +0 -118
- package/dist/dev/runtime/disposables.d.mts +0 -31
- package/dist/dev/runtime/elementIntersectionObserver.d.mts +0 -26
- package/dist/dev/runtime/features/inlineEvents.d.mts +0 -7
- package/dist/dev/runtime/features/jsxIslands.d.mts +0 -7
- package/dist/dev/runtime/features/layout.d.mts +0 -7
- package/dist/dev/runtime/features/patchStrategy.d.mts +0 -7
- package/dist/dev/runtime/features/publicLayout.d.mts +0 -24
- package/dist/dev/runtime/features/scopedSlots.d.mts +0 -23
- package/dist/dev/runtime/features/setDataHighFrequencyWarning.d.mts +0 -7
- package/dist/dev/runtime/features/templateRefs.d.mts +0 -7
- package/dist/dev/runtime/hooks/base.d.mts +0 -27
- package/dist/dev/runtime/hooks/register.d.mts +0 -30
- package/dist/dev/runtime/hooks/vue.d.mts +0 -52
- package/dist/dev/runtime/hooks.d.mts +0 -4
- package/dist/dev/runtime/index.d.mts +0 -46
- package/dist/dev/runtime/intersectionObserver.d.mts +0 -14
- package/dist/dev/runtime/jsxIsland.d.mts +0 -37
- package/dist/dev/runtime/layoutBridge.d.mts +0 -55
- package/dist/dev/runtime/noSetData.d.mts +0 -5
- package/dist/dev/runtime/pageEnvironment.d.mts +0 -50
- package/dist/dev/runtime/pageLayout.d.mts +0 -25
- package/dist/dev/runtime/pageScroll.d.mts +0 -29
- package/dist/dev/runtime/provide.d.mts +0 -60
- package/dist/dev/runtime/provideStore.d.mts +0 -7
- package/dist/dev/runtime/publicRuntime.d.mts +0 -22
- package/dist/dev/runtime/pullDownRefresh.d.mts +0 -12
- package/dist/dev/runtime/register/app.d.mts +0 -14
- package/dist/dev/runtime/register/component.d.mts +0 -17
- package/dist/dev/runtime/register/inline.d.mts +0 -15
- package/dist/dev/runtime/register/runtimeInstance.d.mts +0 -26
- package/dist/dev/runtime/register/setup.d.mts +0 -11
- package/dist/dev/runtime/register/watch.d.mts +0 -12
- package/dist/dev/runtime/register.d.mts +0 -5
- package/dist/dev/runtime/selectorQuery.d.mts +0 -54
- package/dist/dev/runtime/template.d.mts +0 -6
- package/dist/dev/runtime/templateRefTypes.d.mts +0 -12
- package/dist/dev/runtime/types/core.d.mts +0 -35
- package/dist/dev/runtime/types/miniprogram.d.mts +0 -84
- package/dist/dev/runtime/types/miniprogramHost.d.mts +0 -45
- package/dist/dev/runtime/types/miniprogramHostSources.d.mts +0 -112
- package/dist/dev/runtime/types/options.d.mts +0 -138
- package/dist/dev/runtime/types/props/propTypes.d.mts +0 -79
- package/dist/dev/runtime/types/props/router.d.mts +0 -51
- package/dist/dev/runtime/types/props/setup.d.mts +0 -96
- package/dist/dev/runtime/types/props.d.mts +0 -4
- package/dist/dev/runtime/types/runtime.d.mts +0 -59
- package/dist/dev/runtime/types/setData.d.mts +0 -237
- package/dist/dev/runtime/types.d.mts +0 -29
- package/dist/dev/runtime/uniAppHost.d.mts +0 -8
- package/dist/dev/runtime/updatePerformance.d.mts +0 -13
- package/dist/dev/runtime/use.d.mts +0 -13
- package/dist/dev/runtime/vueCompat/context.d.mts +0 -8
- package/dist/dev/runtime/vueCompat/model.d.mts +0 -30
- package/dist/dev/runtime/vueCompat/router.d.mts +0 -29
- package/dist/dev/runtime/vueCompat/templateRef.d.mts +0 -9
- package/dist/dev/runtime/vueCompat.d.mts +0 -5
- package/dist/dev/scheduler.d.mts +0 -4
- package/dist/dev/store/define.d.mts +0 -8
- package/dist/dev/store/manager.d.mts +0 -16
- package/dist/dev/store/storeToRefs.d.mts +0 -11
- package/dist/dev/store/types.d.mts +0 -106
- package/dist/dev/store.d.mts +0 -5
- package/dist/dev/version.d.mts +0 -4
- package/dist/dev/vue-augment.d.mts +0 -8
- package/dist/dev/vue-demi.d.mts +0 -87
- package/dist/dev/vue-types.d.mts +0 -19
- package/dist/dev/web-apis.d.mts +0 -3
- /package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/defineProperty.mjs +0 -0
- /package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/toPrimitive.mjs +0 -0
- /package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/toPropertyKey.mjs +0 -0
- /package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.154.0}/helpers/esm/typeof.mjs +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"props.mjs","names":[],"sources":["../../../../src/runtime/define/props.ts"],"sourcesContent":["import type {\n ComponentPropsOptions,\n MiniProgramComponentPropertyOption,\n MiniProgramComponentShortProperty,\n} from '../types'\nimport {\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'\n\nconst ALLOW_NULL_PROP_INPUT_KEY = '__wevu_allowNullPropInput'\nconst PUBLIC_ALLOW_NULL_PROP_INPUT_KEY = 'allowNullPropInput'\n\ntype NormalizedNativePropertyType = MiniProgramComponentShortProperty | FunctionConstructor | null\n\nconst NATIVE_PROPERTY_TYPE_MAP = new Map<unknown, NormalizedNativePropertyType>([\n [String, String],\n [Number, Number],\n [Boolean, Boolean],\n [Object, Object],\n [Array, Array],\n [Function, Function],\n ['String', String],\n ['Number', Number],\n ['Boolean', Boolean],\n ['Object', Object],\n ['Array', Array],\n ['Function', Function],\n [null, null],\n ['null', null],\n ['Null', null],\n])\n\nfunction toNativePropertyType(candidate: unknown) {\n return NATIVE_PROPERTY_TYPE_MAP.get(candidate)\n}\n\nfunction collectNativePropertyTypeCandidates(\n raw: unknown,\n normalized: NormalizedNativePropertyType[] = [],\n) {\n if (Array.isArray(raw)) {\n for (const item of raw) {\n collectNativePropertyTypeCandidates(item, normalized)\n }\n return normalized\n }\n const mapped = toNativePropertyType(raw)\n if (mapped !== undefined && !normalized.includes(mapped)) {\n normalized.push(mapped)\n }\n return normalized\n}\n\nfunction normalizeTypeCandidates(raw: unknown) {\n if (raw === undefined) {\n return []\n }\n const normalized = collectNativePropertyTypeCandidates(raw)\n const requiredNativeTypes = normalized.filter((item): item is Exclude<NormalizedNativePropertyType, null> => item !== null)\n if (requiredNativeTypes.length > 0) {\n return requiredNativeTypes\n }\n return [null]\n}\n\nfunction applyTypeOptions(target: Record<string, unknown>, rawType: unknown) {\n const candidates = normalizeTypeCandidates(rawType)\n if (candidates.length === 0) {\n return\n }\n\n target.type = candidates[0]\n if (candidates.length > 1) {\n const optionalTypes: NormalizedNativePropertyType[] = []\n for (const candidate of candidates.slice(1)) {\n if (!optionalTypes.includes(candidate)) {\n optionalTypes.push(candidate)\n }\n }\n if (optionalTypes.length > 0) {\n target.optionalTypes = optionalTypes\n }\n }\n}\n\nfunction preserveImplicitNativeDefault(target: Record<string, unknown>) {\n if (hasOwn(target, 'value')) {\n return\n }\n if (target.type === String) {\n target.value = ''\n }\n else if (target.type === Number) {\n target.value = 0\n }\n else if (target.type === Boolean) {\n target.value = false\n }\n else if (target.type === Array) {\n target.value = []\n }\n}\n\nfunction applyNullableTransportOptions(\n target: Record<string, unknown>,\n definition: unknown,\n allowNullPropInput: boolean,\n) {\n if (!allowNullPropInput || target.type === null) {\n return\n }\n const definitionRecord = definition && typeof definition === 'object' && !Array.isArray(definition)\n ? (definition as Record<string, unknown>)\n : undefined\n const candidates = collectNativePropertyTypeCandidates(\n definitionRecord\n ? [definitionRecord.type, definitionRecord.optionalTypes]\n : definition,\n )\n const explicitlyNullable = candidates.includes(null)\n const nativeTypes = candidates.filter(candidate => candidate !== null)\n const acceptsMultipleNativeTypes = nativeTypes.length > 1\n const acceptsMissingInput = definitionRecord?.required !== true\n // glass-easel 会先按主 type 校验并转换,optionalTypes 无法保护合法的联合值与空值传输。\n if (!explicitlyNullable && !acceptsMultipleNativeTypes && !acceptsMissingInput) {\n return\n }\n\n // 显式声明的 null 必须保持可观察;其余降级场景则保留原主类型的宿主隐式默认值。\n if (!explicitlyNullable) {\n preserveImplicitNativeDefault(target)\n }\n target.type = null\n delete target.optionalTypes\n}\n\nfunction normalizeVueProps(\n props: ComponentPropsOptions | undefined,\n allowNullPropInput: boolean,\n) {\n const properties: Record<string, any> = {}\n if (!props) {\n return properties\n }\n\n Object.entries(props).forEach(([key, definition]) => {\n if (definition === undefined) {\n return\n }\n if (definition === null) {\n properties[key] = { type: null }\n return\n }\n if (Array.isArray(definition) || typeof definition === 'function') {\n const propOptions: Record<string, unknown> = {}\n applyTypeOptions(propOptions, definition)\n if (!hasOwn(propOptions, 'type')) {\n propOptions.type = null\n }\n applyNullableTransportOptions(propOptions, definition, allowNullPropInput)\n properties[key] = propOptions\n return\n }\n if (typeof definition === 'object') {\n // 在 Vue <script setup> 中,defineModel() 会生成空的 modifiers props。\n if (key.endsWith('Modifiers') && Object.keys(definition).length === 0) {\n properties[key] = { type: Object, value: {} }\n return\n }\n const propOptions: Record<string, unknown> = {}\n if ('type' in definition && definition.type !== undefined) {\n applyTypeOptions(propOptions, (definition as any).type)\n }\n if (Array.isArray((definition as any).optionalTypes)) {\n const optionalTypes = (definition as any).optionalTypes.map((item: unknown) => toNativePropertyType(item)).filter((item: unknown): item is Exclude<NormalizedNativePropertyType, null> => item !== undefined && item !== null)\n if (optionalTypes.length > 0) {\n const existingOptionalTypes = Array.isArray(propOptions.optionalTypes)\n ? propOptions.optionalTypes as NormalizedNativePropertyType[]\n : []\n for (const optionalType of optionalTypes) {\n if (optionalType === propOptions.type) {\n continue\n }\n if (!existingOptionalTypes.includes(optionalType)) {\n existingOptionalTypes.push(optionalType)\n }\n }\n if (existingOptionalTypes.length > 0) {\n propOptions.optionalTypes = existingOptionalTypes\n }\n }\n }\n if ('observer' in definition && (typeof (definition as any).observer === 'function' || typeof (definition as any).observer === 'string')) {\n propOptions.observer = (definition as any).observer\n }\n const defaultValue = 'default' in definition ? (definition as any).default : (definition as any).value\n if (defaultValue !== undefined) {\n propOptions.value = typeof defaultValue === 'function' ? (defaultValue as any)() : defaultValue\n }\n if (!hasOwn(propOptions, 'type')) {\n propOptions.type = null\n }\n applyNullableTransportOptions(propOptions, definition, allowNullPropInput)\n properties[key] = propOptions\n }\n })\n\n return properties\n}\n\nexport function normalizeProps(\n baseOptions: Record<string, any>,\n props?: ComponentPropsOptions,\n explicitProperties?: MiniProgramComponentPropertyOption,\n) {\n const allowNullPropInput = Boolean(\n (baseOptions as any)[ALLOW_NULL_PROP_INPUT_KEY]\n ?? (baseOptions as any)[PUBLIC_ALLOW_NULL_PROP_INPUT_KEY],\n )\n const {\n [ALLOW_NULL_PROP_INPUT_KEY]: _ignoredAllowNullPropInput,\n [PUBLIC_ALLOW_NULL_PROP_INPUT_KEY]: _ignoredPublicAllowNullPropInput,\n ...normalizedBaseOptions\n } = baseOptions\n const baseProperties = (baseOptions as any).properties\n const normalizedBaseProperties = baseProperties && typeof baseProperties === 'object' && Object.keys(baseProperties).length > 0\n ? (baseProperties as any)\n : undefined\n const resolvedExplicit = explicitProperties\n ?? normalizedBaseProperties\n const shouldAttachInternalProps = Boolean(props || resolvedExplicit)\n const attachInternalProps = (source?: Record<string, any>) => {\n const next = { ...(source ?? {}) }\n if (!shouldAttachInternalProps) {\n return next\n }\n if (!hasOwn(next, WEVU_SLOT_OWNER_ID_PROP)) {\n next[WEVU_SLOT_OWNER_ID_PROP] = { type: String, value: '' }\n }\n if (!hasOwn(next, WEVU_SLOT_SCOPE_KEY)) {\n next[WEVU_SLOT_SCOPE_KEY] = { type: null, value: null }\n }\n if (!hasOwn(next, WEVU_SLOT_NAMES_PROP)) {\n next[WEVU_SLOT_NAMES_PROP] = { type: null, value: null }\n }\n return next\n }\n\n if (resolvedExplicit) {\n const {\n properties: _ignored,\n ...rest\n } = normalizedBaseOptions\n const normalizedExplicitProperties = resolvedExplicit\n const normalizedVueProps = normalizeVueProps(props, allowNullPropInput)\n return {\n ...rest,\n properties: attachInternalProps({\n ...normalizedVueProps,\n ...normalizedExplicitProperties,\n }),\n }\n }\n\n return {\n ...normalizedBaseOptions,\n properties: attachInternalProps(normalizeVueProps(props, allowNullPropInput)),\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"props.mjs","names":[],"sources":["../../../../src/runtime/define/props.ts"],"sourcesContent":["import type {\n ComponentPropsOptions,\n MiniProgramComponentPropertyOption,\n MiniProgramComponentShortProperty,\n} from '../types'\nimport {\n WEVU_NATIVE_DECLARATION_ADDRESS_PROP,\n WEVU_NATIVE_SLOT_CONTEXT_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'\n\nconst ALLOW_NULL_PROP_INPUT_KEY = '__wevu_allowNullPropInput'\nconst PUBLIC_ALLOW_NULL_PROP_INPUT_KEY = 'allowNullPropInput'\n\ntype NormalizedNativePropertyType = MiniProgramComponentShortProperty | FunctionConstructor | null\ntype ImportMetaWithEnv = ImportMeta & { env?: { PLATFORM?: string } }\n\nconst NATIVE_PROPERTY_TYPE_MAP = new Map<unknown, NormalizedNativePropertyType>([\n [String, String],\n [Number, Number],\n [Boolean, Boolean],\n [Object, Object],\n [Array, Array],\n [Function, Function],\n ['String', String],\n ['Number', Number],\n ['Boolean', Boolean],\n ['Object', Object],\n ['Array', Array],\n ['Function', Function],\n [null, null],\n ['null', null],\n ['Null', null],\n])\n\nfunction toNativePropertyType(candidate: unknown) {\n return NATIVE_PROPERTY_TYPE_MAP.get(candidate)\n}\n\nfunction collectNativePropertyTypeCandidates(\n raw: unknown,\n normalized: NormalizedNativePropertyType[] = [],\n) {\n if (Array.isArray(raw)) {\n for (const item of raw) {\n collectNativePropertyTypeCandidates(item, normalized)\n }\n return normalized\n }\n const mapped = toNativePropertyType(raw)\n if (mapped !== undefined && !normalized.includes(mapped)) {\n normalized.push(mapped)\n }\n return normalized\n}\n\nfunction normalizeTypeCandidates(raw: unknown) {\n if (raw === undefined) {\n return []\n }\n const normalized = collectNativePropertyTypeCandidates(raw)\n const requiredNativeTypes = normalized.filter((item): item is Exclude<NormalizedNativePropertyType, null> => item !== null)\n if (requiredNativeTypes.length > 0) {\n return requiredNativeTypes\n }\n return [null]\n}\n\nfunction applyTypeOptions(target: Record<string, unknown>, rawType: unknown) {\n const candidates = normalizeTypeCandidates(rawType)\n if (candidates.length === 0) {\n return\n }\n\n target.type = candidates[0]\n if (candidates.length > 1) {\n const optionalTypes: NormalizedNativePropertyType[] = []\n for (const candidate of candidates.slice(1)) {\n if (!optionalTypes.includes(candidate)) {\n optionalTypes.push(candidate)\n }\n }\n if (optionalTypes.length > 0) {\n target.optionalTypes = optionalTypes\n }\n }\n}\n\nfunction preserveImplicitNativeDefault(target: Record<string, unknown>) {\n if (hasOwn(target, 'value')) {\n return\n }\n if (target.type === String) {\n target.value = ''\n }\n else if (target.type === Number) {\n target.value = 0\n }\n else if (target.type === Boolean) {\n target.value = false\n }\n else if (target.type === Array) {\n target.value = []\n }\n}\n\nfunction applyNullableTransportOptions(\n target: Record<string, unknown>,\n definition: unknown,\n allowNullPropInput: boolean,\n) {\n if (!allowNullPropInput || target.type === null) {\n return\n }\n const definitionRecord = definition && typeof definition === 'object' && !Array.isArray(definition)\n ? (definition as Record<string, unknown>)\n : undefined\n const candidates = collectNativePropertyTypeCandidates(\n definitionRecord\n ? [definitionRecord.type, definitionRecord.optionalTypes]\n : definition,\n )\n const explicitlyNullable = candidates.includes(null)\n const nativeTypes = candidates.filter(candidate => candidate !== null)\n const acceptsMultipleNativeTypes = nativeTypes.length > 1\n const acceptsMissingInput = definitionRecord?.required !== true\n // glass-easel 会先按主 type 校验并转换,optionalTypes 无法保护合法的联合值与空值传输。\n if (!explicitlyNullable && !acceptsMultipleNativeTypes && !acceptsMissingInput) {\n return\n }\n\n // 显式声明的 null 必须保持可观察;其余降级场景则保留原主类型的宿主隐式默认值。\n if (!explicitlyNullable) {\n preserveImplicitNativeDefault(target)\n }\n target.type = null\n delete target.optionalTypes\n}\n\nfunction normalizeVueProps(\n props: ComponentPropsOptions | undefined,\n allowNullPropInput: boolean,\n) {\n const properties: Record<string, any> = {}\n if (!props) {\n return properties\n }\n\n Object.entries(props).forEach(([key, definition]) => {\n if (definition === undefined) {\n return\n }\n if (definition === null) {\n properties[key] = { type: null }\n return\n }\n if (Array.isArray(definition) || typeof definition === 'function') {\n const propOptions: Record<string, unknown> = {}\n applyTypeOptions(propOptions, definition)\n if (!hasOwn(propOptions, 'type')) {\n propOptions.type = null\n }\n applyNullableTransportOptions(propOptions, definition, allowNullPropInput)\n properties[key] = propOptions\n return\n }\n if (typeof definition === 'object') {\n // 在 Vue <script setup> 中,defineModel() 会生成空的 modifiers props。\n if (key.endsWith('Modifiers') && Object.keys(definition).length === 0) {\n properties[key] = { type: Object, value: {} }\n return\n }\n const propOptions: Record<string, unknown> = {}\n if ('type' in definition && definition.type !== undefined) {\n applyTypeOptions(propOptions, (definition as any).type)\n }\n if (Array.isArray((definition as any).optionalTypes)) {\n const optionalTypes = (definition as any).optionalTypes.map((item: unknown) => toNativePropertyType(item)).filter((item: unknown): item is Exclude<NormalizedNativePropertyType, null> => item !== undefined && item !== null)\n if (optionalTypes.length > 0) {\n const existingOptionalTypes = Array.isArray(propOptions.optionalTypes)\n ? propOptions.optionalTypes as NormalizedNativePropertyType[]\n : []\n for (const optionalType of optionalTypes) {\n if (optionalType === propOptions.type) {\n continue\n }\n if (!existingOptionalTypes.includes(optionalType)) {\n existingOptionalTypes.push(optionalType)\n }\n }\n if (existingOptionalTypes.length > 0) {\n propOptions.optionalTypes = existingOptionalTypes\n }\n }\n }\n if ('observer' in definition && (typeof (definition as any).observer === 'function' || typeof (definition as any).observer === 'string')) {\n propOptions.observer = (definition as any).observer\n }\n const defaultValue = 'default' in definition ? (definition as any).default : (definition as any).value\n if (defaultValue !== undefined) {\n propOptions.value = typeof defaultValue === 'function' ? (defaultValue as any)() : defaultValue\n }\n if (!hasOwn(propOptions, 'type')) {\n propOptions.type = null\n }\n applyNullableTransportOptions(propOptions, definition, allowNullPropInput)\n properties[key] = propOptions\n }\n })\n\n return properties\n}\n\nexport function normalizeProps(\n baseOptions: Record<string, any>,\n props?: ComponentPropsOptions,\n explicitProperties?: MiniProgramComponentPropertyOption,\n) {\n const allowNullPropInput = Boolean(\n (baseOptions as any)[ALLOW_NULL_PROP_INPUT_KEY]\n ?? (baseOptions as any)[PUBLIC_ALLOW_NULL_PROP_INPUT_KEY],\n )\n const {\n [ALLOW_NULL_PROP_INPUT_KEY]: _ignoredAllowNullPropInput,\n [PUBLIC_ALLOW_NULL_PROP_INPUT_KEY]: _ignoredPublicAllowNullPropInput,\n ...normalizedBaseOptions\n } = baseOptions\n const baseProperties = (baseOptions as any).properties\n const normalizedBaseProperties = baseProperties && typeof baseProperties === 'object' && Object.keys(baseProperties).length > 0\n ? (baseProperties as any)\n : undefined\n const resolvedExplicit = explicitProperties\n ?? normalizedBaseProperties\n const shouldAttachInternalProps = Boolean(props || resolvedExplicit)\n const attachInternalProps = (source?: Record<string, any>) => {\n const next = { ...(source ?? {}) }\n if (\n (!(import.meta as ImportMetaWithEnv).env?.PLATFORM || (import.meta as ImportMetaWithEnv).env?.PLATFORM === 'weapp')\n && (baseOptions as Record<string, unknown>)[WEVU_NATIVE_SLOT_CONTEXT_KEY] === true\n ) {\n next[WEVU_NATIVE_DECLARATION_ADDRESS_PROP] = { type: Array, value: [] }\n }\n if (!shouldAttachInternalProps) {\n return next\n }\n if (!hasOwn(next, WEVU_SLOT_OWNER_ID_PROP)) {\n next[WEVU_SLOT_OWNER_ID_PROP] = { type: String, value: '' }\n }\n if (!hasOwn(next, WEVU_SLOT_SCOPE_KEY)) {\n next[WEVU_SLOT_SCOPE_KEY] = { type: null, value: null }\n }\n if (!hasOwn(next, WEVU_SLOT_NAMES_PROP)) {\n next[WEVU_SLOT_NAMES_PROP] = { type: null, value: null }\n }\n return next\n }\n\n if (resolvedExplicit) {\n const {\n properties: _ignored,\n ...rest\n } = normalizedBaseOptions\n const normalizedExplicitProperties = resolvedExplicit\n const normalizedVueProps = normalizeVueProps(props, allowNullPropInput)\n return {\n ...rest,\n properties: attachInternalProps({\n ...normalizedVueProps,\n ...normalizedExplicitProperties,\n }),\n }\n }\n\n return {\n ...normalizedBaseOptions,\n properties: attachInternalProps(normalizeVueProps(props, allowNullPropInput)),\n }\n}\n"],"mappings":";;;;AAcA,MAAM,4BAA4B;AAClC,MAAM,mCAAmC;AAKzC,MAAM,2CAA2B,IAAI,IAA2C;CAC9E,CAAC,QAAQ,MAAM;CACf,CAAC,QAAQ,MAAM;CACf,CAAC,SAAS,OAAO;CACjB,CAAC,QAAQ,MAAM;CACf,CAAC,OAAO,KAAK;CACb,CAAC,UAAU,QAAQ;CACnB,CAAC,UAAU,MAAM;CACjB,CAAC,UAAU,MAAM;CACjB,CAAC,WAAW,OAAO;CACnB,CAAC,UAAU,MAAM;CACjB,CAAC,SAAS,KAAK;CACf,CAAC,YAAY,QAAQ;CACrB,CAAC,MAAM,IAAI;CACX,CAAC,QAAQ,IAAI;CACb,CAAC,QAAQ,IAAI;AACf,CAAC;AAED,SAAS,qBAAqB,WAAoB;CAChD,OAAO,yBAAyB,IAAI,SAAS;AAC/C;AAEA,SAAS,oCACP,KACA,aAA6C,CAAC,GAC9C;CACA,IAAI,MAAM,QAAQ,GAAG,GAAG;EACtB,KAAK,MAAM,QAAQ,KACjB,oCAAoC,MAAM,UAAU;EAEtD,OAAO;CACT;CACA,MAAM,SAAS,qBAAqB,GAAG;CACvC,IAAI,WAAW,UAAa,CAAC,WAAW,SAAS,MAAM,GACrD,WAAW,KAAK,MAAM;CAExB,OAAO;AACT;AAEA,SAAS,wBAAwB,KAAc;CAC7C,IAAI,QAAQ,QACV,OAAO,CAAC;CAGV,MAAM,sBADa,oCAAoC,GAClB,CAAC,CAAC,QAAQ,SAA8D,SAAS,IAAI;CAC1H,IAAI,oBAAoB,SAAS,GAC/B,OAAO;CAET,OAAO,CAAC,IAAI;AACd;AAEA,SAAS,iBAAiB,QAAiC,SAAkB;CAC3E,MAAM,aAAa,wBAAwB,OAAO;CAClD,IAAI,WAAW,WAAW,GACxB;CAGF,OAAO,OAAO,WAAW;CACzB,IAAI,WAAW,SAAS,GAAG;EACzB,MAAM,gBAAgD,CAAC;EACvD,KAAK,MAAM,aAAa,WAAW,MAAM,CAAC,GACxC,IAAI,CAAC,cAAc,SAAS,SAAS,GACnC,cAAc,KAAK,SAAS;EAGhC,IAAI,cAAc,SAAS,GACzB,OAAO,gBAAgB;CAE3B;AACF;AAEA,SAAS,8BAA8B,QAAiC;CACtE,IAAI,OAAO,QAAQ,OAAO,GACxB;CAEF,IAAI,OAAO,SAAS,QAClB,OAAO,QAAQ;MAEZ,IAAI,OAAO,SAAS,QACvB,OAAO,QAAQ;MAEZ,IAAI,OAAO,SAAS,SACvB,OAAO,QAAQ;MAEZ,IAAI,OAAO,SAAS,OACvB,OAAO,QAAQ,CAAC;AAEpB;AAEA,SAAS,8BACP,QACA,YACA,oBACA;CACA,IAAI,CAAC,sBAAsB,OAAO,SAAS,MACzC;CAEF,MAAM,mBAAmB,cAAc,OAAO,eAAe,YAAY,CAAC,MAAM,QAAQ,UAAU,IAC7F,aACD;CACJ,MAAM,aAAa,oCACjB,mBACI,CAAC,iBAAiB,MAAM,iBAAiB,aAAa,IACtD,UACN;CACA,MAAM,qBAAqB,WAAW,SAAS,IAAI;CAEnD,MAAM,6BADc,WAAW,QAAO,cAAa,cAAc,IACpB,CAAC,CAAC,SAAS;CACxD,MAAM,sBAAsB,kBAAkB,aAAa;CAE3D,IAAI,CAAC,sBAAsB,CAAC,8BAA8B,CAAC,qBACzD;CAIF,IAAI,CAAC,oBACH,8BAA8B,MAAM;CAEtC,OAAO,OAAO;CACd,OAAO,OAAO;AAChB;AAEA,SAAS,kBACP,OACA,oBACA;CACA,MAAM,aAAkC,CAAC;CACzC,IAAI,CAAC,OACH,OAAO;CAGT,OAAO,QAAQ,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,gBAAgB;EACnD,IAAI,eAAe,QACjB;EAEF,IAAI,eAAe,MAAM;GACvB,WAAW,OAAO,EAAE,MAAM,KAAK;GAC/B;EACF;EACA,IAAI,MAAM,QAAQ,UAAU,KAAK,OAAO,eAAe,YAAY;GACjE,MAAM,cAAuC,CAAC;GAC9C,iBAAiB,aAAa,UAAU;GACxC,IAAI,CAAC,OAAO,aAAa,MAAM,GAC7B,YAAY,OAAO;GAErB,8BAA8B,aAAa,YAAY,kBAAkB;GACzE,WAAW,OAAO;GAClB;EACF;EACA,IAAI,OAAO,eAAe,UAAU;GAElC,IAAI,IAAI,SAAS,WAAW,KAAK,OAAO,KAAK,UAAU,CAAC,CAAC,WAAW,GAAG;IACrE,WAAW,OAAO;KAAE,MAAM;KAAQ,OAAO,CAAC;IAAE;IAC5C;GACF;GACA,MAAM,cAAuC,CAAC;GAC9C,IAAI,UAAU,cAAc,WAAW,SAAS,QAC9C,iBAAiB,aAAc,WAAmB,IAAI;GAExD,IAAI,MAAM,QAAS,WAAmB,aAAa,GAAG;IACpD,MAAM,gBAAiB,WAAmB,cAAc,KAAK,SAAkB,qBAAqB,IAAI,CAAC,CAAC,CAAC,QAAQ,SAAuE,SAAS,UAAa,SAAS,IAAI;IAC7N,IAAI,cAAc,SAAS,GAAG;KAC5B,MAAM,wBAAwB,MAAM,QAAQ,YAAY,aAAa,IACjE,YAAY,gBACZ,CAAC;KACL,KAAK,MAAM,gBAAgB,eAAe;MACxC,IAAI,iBAAiB,YAAY,MAC/B;MAEF,IAAI,CAAC,sBAAsB,SAAS,YAAY,GAC9C,sBAAsB,KAAK,YAAY;KAE3C;KACA,IAAI,sBAAsB,SAAS,GACjC,YAAY,gBAAgB;IAEhC;GACF;GACA,IAAI,cAAc,eAAe,OAAQ,WAAmB,aAAa,cAAc,OAAQ,WAAmB,aAAa,WAC7H,YAAY,WAAY,WAAmB;GAE7C,MAAM,eAAe,aAAa,aAAc,WAAmB,UAAW,WAAmB;GACjG,IAAI,iBAAiB,QACnB,YAAY,QAAQ,OAAO,iBAAiB,aAAc,aAAqB,IAAI;GAErF,IAAI,CAAC,OAAO,aAAa,MAAM,GAC7B,YAAY,OAAO;GAErB,8BAA8B,aAAa,YAAY,kBAAkB;GACzE,WAAW,OAAO;EACpB;CACF,CAAC;CAED,OAAO;AACT;AAEA,SAAgB,eACd,aACA,OACA,oBACA;CACA,MAAM,qBAAqB,QACxB,YAAoB,8BACjB,YAAoB,iCAC1B;CACA,MAAM,GACH,4BAA4B,6BAC5B,mCAAmC,kCACpC,GAAG,0BACD;CACJ,MAAM,iBAAkB,YAAoB;CAC5C,MAAM,2BAA2B,kBAAkB,OAAO,mBAAmB,YAAY,OAAO,KAAK,cAAc,CAAC,CAAC,SAAS,IACzH,iBACD;CACJ,MAAM,mBAAmB,sBACpB;CACL,MAAM,4BAA4B,QAAQ,SAAS,gBAAgB;CACnE,MAAM,uBAAuB,WAAiC;EAC5D,MAAM,OAAO,EAAE,GAAI,UAAU,CAAC,EAAG;EACjC,KACG,CAAE,YAAkC,KAAK,YAAa,YAAkC,KAAK,aAAa,YACvG,YAAwC,kCAAkC,MAE9E,KAAK,wCAAwC;GAAE,MAAM;GAAO,OAAO,CAAC;EAAE;EAExE,IAAI,CAAC,2BACH,OAAO;EAET,IAAI,CAAC,OAAO,MAAM,uBAAuB,GACvC,KAAK,2BAA2B;GAAE,MAAM;GAAQ,OAAO;EAAG;EAE5D,IAAI,CAAC,OAAO,MAAM,mBAAmB,GACnC,KAAK,uBAAuB;GAAE,MAAM;GAAM,OAAO;EAAK;EAExD,IAAI,CAAC,OAAO,MAAM,oBAAoB,GACpC,KAAK,wBAAwB;GAAE,MAAM;GAAM,OAAO;EAAK;EAEzD,OAAO;CACT;CAEA,IAAI,kBAAkB;EACpB,MAAM,EACJ,YAAY,UACZ,GAAG,SACD;EACJ,MAAM,+BAA+B;EACrC,MAAM,qBAAqB,kBAAkB,OAAO,kBAAkB;EACtE,OAAO;GACL,GAAG;GACH,YAAY,oBAAoB;IAC9B,GAAG;IACH,GAAG;GACL,CAAC;EACH;CACF;CAEA,OAAO;EACL,GAAG;EACH,YAAY,oBAAoB,kBAAkB,OAAO,kBAAkB,CAAC;CAC9E;AACF"}
|
|
@@ -4,7 +4,7 @@ import { hasOwn } from "../../utils.mjs";
|
|
|
4
4
|
import { cloneSnapshotValue, isDeepEqualValue } from "../app/setData/snapshot.mjs";
|
|
5
5
|
import { decodeWxmlEntities, resolveDatasetEventValue } from "../inlineDataset.mjs";
|
|
6
6
|
import { getOwnerProxy, getOwnerSnapshot, getOwnerTarget, subscribeOwner } from "../scopedSlots.mjs";
|
|
7
|
-
import { WEVU_BINDING_MANIFEST_KEY, WEVU_INLINE_HANDLER, WEVU_INLINE_MAP_KEY, WEVU_LAYOUT_HOSTS_KEY, WEVU_OWNER_HANDLER, WEVU_PROPS_DERIVED_KEYS_KEY, WEVU_PUBLIC_RUNTIME_KEY, WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY, WEVU_SLOT_FUNCTION_TOKEN, WEVU_SLOT_OWNER_ID_KEY, WEVU_SLOT_OWNER_ID_PROP, WEVU_SLOT_OWNER_KEY, WEVU_SLOT_OWNER_PROXY_KEY, WEVU_SLOT_PROPS_DATA_KEY, WEVU_SLOT_PROPS_KEY, WEVU_SLOT_SCOPE_KEY, WEVU_TEMPLATE_REFS_KEY } from "@weapp-core/constants";
|
|
7
|
+
import { WEVU_BINDING_MANIFEST_KEY, WEVU_INLINE_HANDLER, WEVU_INLINE_MAP_KEY, WEVU_LAYOUT_HOSTS_KEY, WEVU_NATIVE_SLOT_CONTEXT_KEY, WEVU_OWNER_HANDLER, WEVU_PROPS_DERIVED_KEYS_KEY, WEVU_PUBLIC_RUNTIME_KEY, WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY, WEVU_SLOT_FUNCTION_TOKEN, WEVU_SLOT_OWNER_ID_KEY, WEVU_SLOT_OWNER_ID_PROP, WEVU_SLOT_OWNER_KEY, WEVU_SLOT_OWNER_PROXY_KEY, WEVU_SLOT_PROPS_DATA_KEY, WEVU_SLOT_PROPS_KEY, WEVU_SLOT_SCOPE_KEY, WEVU_TEMPLATE_REFS_KEY } from "@weapp-core/constants";
|
|
8
8
|
|
|
9
9
|
//#region src/runtime/define/scopedSlotOptions.ts
|
|
10
10
|
const SCOPED_SLOT_SNAPSHOT_OMIT_KEYS = [
|
|
@@ -271,6 +271,7 @@ function createScopedSlotOptions(overrides) {
|
|
|
271
271
|
return ownerId ? getOwnerTarget(ownerId) : void 0;
|
|
272
272
|
};
|
|
273
273
|
const baseOptions = {
|
|
274
|
+
[WEVU_NATIVE_SLOT_CONTEXT_KEY]: overrides?.[WEVU_NATIVE_SLOT_CONTEXT_KEY],
|
|
274
275
|
[WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]: true,
|
|
275
276
|
options: { virtualHost: true },
|
|
276
277
|
setData: { omit: SCOPED_SLOT_SNAPSHOT_OMIT_KEYS },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scopedSlotOptions.mjs","names":[],"sources":["../../../../src/runtime/define/scopedSlotOptions.ts"],"sourcesContent":["import type { WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type { LayoutHostBinding, TemplateRefBinding } from '../capabilities'\nimport type { InlineExpressionMap } from '../register/inline'\nimport type { ComputedDefinitions } from '../types'\nimport {\n WEVU_BINDING_MANIFEST_KEY,\n WEVU_INLINE_HANDLER,\n WEVU_INLINE_MAP_KEY,\n WEVU_LAYOUT_HOSTS_KEY,\n WEVU_OWNER_HANDLER,\n WEVU_PROPS_DERIVED_KEYS_KEY,\n WEVU_PUBLIC_RUNTIME_KEY,\n WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY,\n WEVU_SLOT_FUNCTION_TOKEN,\n WEVU_SLOT_OWNER_ID_KEY,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_OWNER_KEY,\n WEVU_SLOT_OWNER_PROXY_KEY,\n WEVU_SLOT_PROPS_DATA_KEY,\n WEVU_SLOT_PROPS_KEY,\n WEVU_SLOT_SCOPE_KEY,\n WEVU_TEMPLATE_REFS_KEY,\n} from '@weapp-core/constants'\nimport { hasOwn } from '../../utils'\nimport { cloneSnapshotValue, isDeepEqualValue } from '../app/setData/snapshot'\nimport { requireRuntimeCapability, runtimeCapabilityRegistry } from '../capabilities'\nimport { decodeWxmlEntities, resolveDatasetEventValue } from '../inlineDataset'\nimport { getOwnerProxy, getOwnerSnapshot, getOwnerTarget, subscribeOwner } from '../scopedSlots'\nimport { runTeardownSteps } from '../teardown'\n\nconst SCOPED_SLOT_SNAPSHOT_OMIT_KEYS = [\n WEVU_SLOT_OWNER_ID_KEY,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_OWNER_PROXY_KEY,\n WEVU_SLOT_OWNER_KEY,\n WEVU_SLOT_PROPS_DATA_KEY,\n WEVU_SLOT_PROPS_KEY,\n WEVU_SLOT_SCOPE_KEY,\n]\n\nfunction parseInlineArgs(event: any) {\n const dataset = event?.currentTarget?.dataset ?? event?.target?.dataset ?? {}\n const argsRaw = resolveDatasetEventValue(dataset, 'wvArgs', event)\n let args: any[] = []\n if (Array.isArray(argsRaw)) {\n args = argsRaw\n }\n else if (typeof argsRaw === 'string') {\n try {\n args = JSON.parse(argsRaw)\n }\n catch {\n try {\n args = JSON.parse(decodeWxmlEntities(argsRaw))\n }\n catch {\n args = []\n }\n }\n }\n if (!Array.isArray(args)) {\n args = []\n }\n return args.map((item: any) => item === '$event' ? event : item)\n}\n\nfunction normalizeSlotBindings(value: unknown): Record<string, any> {\n if (!value || typeof value !== 'object') {\n return {}\n }\n if (Array.isArray(value)) {\n const result: Record<string, any> = {}\n for (let i = 0; i < value.length; i += 2) {\n const key = value[i]\n if (typeof key === 'string' && key) {\n result[key] = value[i + 1]\n }\n }\n return result\n }\n return value as Record<string, any>\n}\n\nfunction isSlotFunctionDescriptor(value: unknown): value is [string, string, unknown[], unknown[]] {\n return Array.isArray(value)\n && value[0] === WEVU_SLOT_FUNCTION_TOKEN\n && typeof value[1] === 'string'\n}\n\nfunction createSlotFunctionProxy(instance: any, descriptor: [string, string, unknown[], unknown[]]) {\n return (...args: unknown[]) => {\n const owner = instance?.selectOwnerComponent?.()\n const handler = owner?.[WEVU_INLINE_HANDLER]\n if (typeof handler !== 'function') {\n return undefined\n }\n const dataset: Record<string, unknown> = {\n wd: 1,\n wi: descriptor[1],\n }\n const scopeBindings = Array.isArray(descriptor[2]) ? descriptor[2] : []\n const indexBindings = Array.isArray(descriptor[3]) ? descriptor[3] : []\n scopeBindings.forEach((value, index) => dataset[`wvS${index}`] = value)\n indexBindings.forEach((value, index) => dataset[`wvI${index}`] = value)\n const event = {\n type: 'wv-slot-function',\n detail: args,\n currentTarget: { dataset },\n target: { dataset },\n }\n return handler.call(owner, event)\n }\n}\n\nfunction resolveRuntimeSlotBindings(instance: any, bindings: Record<string, any>) {\n const resolved: Record<string, any> = {}\n for (const [key, value] of Object.entries(bindings)) {\n resolved[key] = isSlotFunctionDescriptor(value) ? createSlotFunctionProxy(instance, value) : value\n }\n return resolved\n}\n\nfunction resolveComputedContext(instance: any) {\n return instance?.__wevu?.proxy\n ?? instance?.[WEVU_PUBLIC_RUNTIME_KEY]?.proxy\n ?? instance\n}\n\nfunction collectComputedPayload(instance: any, computed?: ComputedDefinitions) {\n if (!computed || Object.keys(computed).length === 0) {\n return undefined\n }\n\n const context = resolveComputedContext(instance)\n const payload: Record<string, any> = {}\n for (const [key, definition] of Object.entries(computed)) {\n try {\n let value: any\n if (typeof definition === 'function') {\n value = definition.call(context)\n }\n else if (typeof (definition as any)?.get === 'function') {\n value = (definition as any).get.call(context)\n }\n if (value !== undefined) {\n payload[key] = value\n }\n }\n catch {\n }\n }\n return payload\n}\n\nfunction flushOwnerProxyBindings(instance: any) {\n instance?.__wevu?.__wevu_flushSetupSnapshotSync?.()\n}\n\nfunction flushScopedSlotComputedBindings(\n instance: any,\n computed?: ComputedDefinitions,\n options?: { force?: boolean },\n) {\n flushOwnerProxyBindings(instance)\n const payload = collectComputedPayload(instance, computed)\n if (!payload || typeof instance?.setData !== 'function') {\n return\n }\n const hasPrevious = hasOwn(instance, '__wvScopedSlotComputedSnapshot')\n const previous = instance.__wvScopedSlotComputedSnapshot ?? {}\n const next: Record<string, any> = {}\n const changed: Record<string, any> = {}\n for (const [key, value] of Object.entries(payload)) {\n next[key] = cloneSnapshotValue(value)\n if (options?.force || !hasPrevious || !hasOwn(previous, key) || !isDeepEqualValue(previous[key], value, 20, { keys: 10_000 })) {\n changed[key] = value\n }\n }\n for (const key of Object.keys(previous)) {\n if (!hasOwn(payload, key)) {\n changed[key] = null\n }\n }\n instance.__wvScopedSlotComputedSnapshot = next\n if (Object.keys(changed).length > 0) {\n instance.setData(changed)\n }\n}\n\nfunction syncSlotPropsData(\n instance: any,\n override?: { [WEVU_SLOT_SCOPE_KEY]?: unknown, [WEVU_SLOT_PROPS_KEY]?: unknown },\n) {\n const scopeSource = hasOwn(override ?? {}, WEVU_SLOT_SCOPE_KEY)\n ? (override as any)[WEVU_SLOT_SCOPE_KEY]\n : instance?.properties?.[WEVU_SLOT_SCOPE_KEY]\n const propsSource = hasOwn(override ?? {}, WEVU_SLOT_PROPS_KEY)\n ? (override as any)[WEVU_SLOT_PROPS_KEY]\n : instance?.properties?.[WEVU_SLOT_PROPS_KEY]\n const scope = normalizeSlotBindings(scopeSource)\n const slotProps = normalizeSlotBindings(propsSource)\n const snapshot = { ...scope, ...slotProps }\n const snapshotChanged = !hasOwn(instance, '__wvSlotPropsSnapshot')\n || !isDeepEqualValue(\n instance.__wvSlotPropsSnapshot ?? {},\n snapshot,\n 20,\n { keys: 10_000 },\n )\n const merged = snapshotChanged || !instance[WEVU_SLOT_PROPS_DATA_KEY]\n ? resolveRuntimeSlotBindings(instance, snapshot)\n : instance[WEVU_SLOT_PROPS_DATA_KEY]\n if (snapshotChanged) {\n instance.__wvSlotPropsSnapshot = cloneSnapshotValue(snapshot)\n }\n instance[WEVU_SLOT_PROPS_DATA_KEY] = merged\n const runtimeState = instance?.__wevu?.state\n const runtimeSnapshotChanged = Boolean(\n runtimeState\n && typeof runtimeState === 'object'\n && (\n !hasOwn(runtimeState, WEVU_SLOT_PROPS_DATA_KEY)\n || !isDeepEqualValue(\n runtimeState[WEVU_SLOT_PROPS_DATA_KEY] ?? {},\n snapshot,\n 20,\n { keys: 10_000 },\n )\n ),\n )\n if (runtimeState && typeof runtimeState === 'object') {\n runtimeState[WEVU_SLOT_PROPS_DATA_KEY] = merged\n }\n return { merged, runtimeSnapshotChanged, snapshot, snapshotChanged }\n}\n\nfunction mergeSlotProps(\n instance: any,\n computed?: ComputedDefinitions,\n override?: { [WEVU_SLOT_SCOPE_KEY]?: unknown, [WEVU_SLOT_PROPS_KEY]?: unknown },\n) {\n const { runtimeSnapshotChanged, snapshot, snapshotChanged } = syncSlotPropsData(instance, override)\n if ((snapshotChanged || runtimeSnapshotChanged) && typeof instance?.setData === 'function') {\n instance.setData({ [WEVU_SLOT_PROPS_DATA_KEY]: snapshot })\n }\n if (snapshotChanged) {\n flushScopedSlotComputedBindings(instance, computed)\n }\n}\n\nfunction setOwnerProxy(instance: any, proxy: any) {\n let changed = false\n if (instance[WEVU_SLOT_OWNER_PROXY_KEY] !== proxy) {\n instance[WEVU_SLOT_OWNER_PROXY_KEY] = proxy\n changed = true\n }\n const data = instance?.data\n if (data && typeof data === 'object' && data[WEVU_SLOT_OWNER_PROXY_KEY] !== proxy) {\n try {\n Object.defineProperty(data, WEVU_SLOT_OWNER_PROXY_KEY, {\n value: proxy,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n }\n catch {\n data[WEVU_SLOT_OWNER_PROXY_KEY] = proxy\n }\n changed = true\n }\n const runtimeState = instance?.__wevu?.state\n if (\n runtimeState\n && typeof runtimeState === 'object'\n && runtimeState[WEVU_SLOT_OWNER_PROXY_KEY] !== proxy\n ) {\n runtimeState[WEVU_SLOT_OWNER_PROXY_KEY] = proxy\n changed = true\n }\n return changed\n}\n\nfunction isSnapshotObject(value: unknown): value is Record<string, any> {\n if (!value || typeof value !== 'object') {\n return false\n }\n const prototype = Object.getPrototypeOf(value)\n return prototype === Object.prototype || prototype === null\n}\n\nfunction splitOwnerSnapshotFunctions(\n value: any,\n path: string,\n functionPayload: Record<string, any>,\n visiting: WeakSet<object>,\n): any {\n if (typeof value === 'function') {\n functionPayload[path] = value\n return undefined\n }\n if (value == null || typeof value !== 'object') {\n return value\n }\n if (visiting.has(value)) {\n return undefined\n }\n if (Array.isArray(value)) {\n visiting.add(value)\n const output = value.map((item, index) => {\n const next = splitOwnerSnapshotFunctions(item, `${path}.${index}`, functionPayload, visiting)\n return next === undefined ? null : next\n })\n visiting.delete(value)\n return output\n }\n if (!isSnapshotObject(value)) {\n return cloneSnapshotValue(value)\n }\n visiting.add(value)\n const output: Record<string, any> = {}\n for (const [key, child] of Object.entries(value)) {\n const next = splitOwnerSnapshotFunctions(child, `${path}.${key}`, functionPayload, visiting)\n if (next !== undefined) {\n output[key] = next\n }\n }\n visiting.delete(value)\n return output\n}\n\nfunction createOwnerSetDataPayload(snapshot: Record<string, any>) {\n const functionPayload: Record<string, any> = {}\n const ownerSnapshot = splitOwnerSnapshotFunctions(\n snapshot,\n WEVU_SLOT_OWNER_KEY,\n functionPayload,\n new WeakSet(),\n )\n return {\n [WEVU_SLOT_OWNER_KEY]: ownerSnapshot,\n ...functionPayload,\n }\n}\n\nfunction updateOwnerBindings(instance: any, snapshot: Record<string, any>, proxy: any, computed?: ComputedDefinitions) {\n const proxyChanged = setOwnerProxy(instance, proxy)\n const { snapshotChanged: slotPropsChanged } = syncSlotPropsData(instance)\n const nextOwnerSnapshot = snapshot || {}\n const ownerChanged = !hasOwn(instance, '__wvOwnerSnapshot')\n || !isDeepEqualValue(\n instance.__wvOwnerSnapshot ?? {},\n nextOwnerSnapshot,\n 20,\n { keys: 10_000 },\n )\n if (ownerChanged) {\n instance.__wvOwnerSnapshot = cloneSnapshotValue(nextOwnerSnapshot)\n instance[WEVU_SLOT_OWNER_KEY] = nextOwnerSnapshot\n const runtimeState = instance?.__wevu?.state\n if (runtimeState && typeof runtimeState === 'object') {\n runtimeState[WEVU_SLOT_OWNER_KEY] = nextOwnerSnapshot\n }\n }\n if (ownerChanged && typeof instance?.setData === 'function') {\n instance.setData(createOwnerSetDataPayload(nextOwnerSnapshot))\n }\n if (ownerChanged || proxyChanged || slotPropsChanged) {\n flushScopedSlotComputedBindings(instance, computed)\n }\n}\n\nfunction bindOwner(instance: any, ownerId: string, computed?: ComputedDefinitions) {\n if (!ownerId) {\n if (typeof instance?.__wvOwnerUnsub === 'function') {\n instance.__wvOwnerUnsub()\n }\n instance.__wvOwnerUnsub = undefined\n instance.__wvOwnerBoundId = ''\n setOwnerProxy(instance, undefined)\n return\n }\n\n const updateOwner = (snapshot: Record<string, any>, proxy: any) => {\n updateOwnerBindings(instance, snapshot, proxy, computed)\n }\n if (instance.__wvOwnerBoundId !== ownerId) {\n if (typeof instance.__wvOwnerUnsub === 'function') {\n instance.__wvOwnerUnsub()\n }\n instance.__wvOwnerBoundId = ownerId\n instance.__wvOwnerUnsub = subscribeOwner(ownerId, updateOwner)\n }\n const snapshot = getOwnerSnapshot(ownerId)\n if (snapshot) {\n updateOwner(snapshot, getOwnerProxy(ownerId))\n }\n}\n\nfunction resolveBoundOwnerId(instance: any) {\n return instance?.properties?.[WEVU_SLOT_OWNER_ID_PROP]\n ?? instance?.properties?.[WEVU_SLOT_OWNER_ID_KEY]\n ?? ''\n}\n\nfunction syncScopedSlotBindings(instance: any, computed?: ComputedDefinitions) {\n mergeSlotProps(instance, computed)\n const ownerId = resolveBoundOwnerId(instance)\n if (!ownerId) {\n return\n }\n bindOwner(instance, ownerId, computed)\n}\n\nfunction createScopedSlotData() {\n const data = {\n [WEVU_SLOT_OWNER_KEY]: {},\n [WEVU_SLOT_PROPS_DATA_KEY]: {},\n }\n Object.defineProperty(data, WEVU_SLOT_OWNER_PROXY_KEY, {\n value: undefined,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n return data\n}\n\nexport function createScopedSlotOptions(\n overrides?: {\n computed?: ComputedDefinitions\n inlineMap?: InlineExpressionMap\n layoutHosts?: LayoutHostBinding[]\n templateRefs?: TemplateRefBinding[]\n [WEVU_BINDING_MANIFEST_KEY]?: WevuRuntimeBindingManifestV1\n },\n) {\n const scopedSlotComputed = overrides?.computed\n const layoutHosts = overrides?.layoutHosts\n const templateRefs = overrides?.templateRefs\n if (templateRefs?.length) {\n requireRuntimeCapability('templateRefs', 'createWevuScopedSlotComponent(templateRefs)')\n }\n const hasInlineMap = Boolean(overrides?.inlineMap && Object.keys(overrides.inlineMap).length)\n if (hasInlineMap) {\n requireRuntimeCapability('inlineEvents', 'createWevuScopedSlotComponent(inlineMap)')\n }\n if (layoutHosts?.length) {\n requireRuntimeCapability('layout', 'createWevuScopedSlotComponent(layoutHosts)')\n }\n const resolveTemplateRefOwner = (instance: any) => {\n const ownerId = resolveBoundOwnerId(instance)\n return ownerId ? getOwnerTarget(ownerId) : undefined\n }\n const baseOptions = {\n [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]: true,\n options: {\n virtualHost: true,\n },\n setData: {\n omit: SCOPED_SLOT_SNAPSHOT_OMIT_KEYS,\n },\n [WEVU_PROPS_DERIVED_KEYS_KEY]: SCOPED_SLOT_SNAPSHOT_OMIT_KEYS,\n properties: {\n [WEVU_SLOT_OWNER_ID_PROP]: {\n type: String,\n value: '',\n observer(this: any, next: string) {\n bindOwner(this, next || '', scopedSlotComputed)\n },\n },\n [WEVU_SLOT_OWNER_ID_KEY]: {\n type: String,\n value: '',\n observer(this: any, next: string) {\n bindOwner(this, next || '', scopedSlotComputed)\n },\n },\n [WEVU_SLOT_PROPS_KEY]: {\n type: null,\n value: null,\n observer(this: any, next: unknown) {\n mergeSlotProps(this, scopedSlotComputed, { [WEVU_SLOT_PROPS_KEY]: next })\n },\n },\n [WEVU_SLOT_SCOPE_KEY]: {\n type: null,\n value: null,\n observer(this: any, next: unknown) {\n mergeSlotProps(this, scopedSlotComputed, { [WEVU_SLOT_SCOPE_KEY]: next })\n },\n },\n },\n data: createScopedSlotData,\n lifetimes: {\n attached(this: any) {\n syncScopedSlotBindings(this, scopedSlotComputed)\n },\n ready(this: any) {\n syncScopedSlotBindings(this, scopedSlotComputed)\n flushScopedSlotComputedBindings(this, scopedSlotComputed, { force: true })\n const owner = resolveTemplateRefOwner(this)\n if (owner && templateRefs?.length) {\n runtimeCapabilityRegistry.templateRefs?.schedule(this, undefined, owner)\n }\n },\n detached(this: any) {\n const owner = resolveTemplateRefOwner(this)\n runTeardownSteps([\n () => {\n if (owner && templateRefs?.length) {\n runtimeCapabilityRegistry.templateRefs?.clear(this, owner)\n }\n },\n () => {\n if (typeof this.__wvOwnerUnsub === 'function') {\n this.__wvOwnerUnsub()\n }\n },\n () => {\n this.__wvOwnerUnsub = undefined\n this.__wvOwnerBoundId = ''\n },\n () => setOwnerProxy(this, undefined),\n ])\n },\n },\n methods: {\n [WEVU_OWNER_HANDLER](this: any, event: any) {\n const owner = this[WEVU_SLOT_OWNER_PROXY_KEY]\n const inlineMap = (this as any).__wevu?.methods?.[WEVU_INLINE_MAP_KEY]\n if (hasInlineMap) {\n const result = runtimeCapabilityRegistry.inlineEvents?.run(owner, undefined, event, inlineMap)\n if (result !== undefined) {\n return result\n }\n }\n if (!owner) {\n return undefined\n }\n const dataset = event?.currentTarget?.dataset ?? event?.target?.dataset ?? {}\n const handlerName = resolveDatasetEventValue(dataset, 'wvHandler', event)\n if (typeof handlerName !== 'string' || !handlerName) {\n return undefined\n }\n const handler = owner?.[handlerName]\n if (typeof handler !== 'function') {\n return undefined\n }\n const args = parseInlineArgs(event)\n return handler.apply(owner, args)\n },\n },\n }\n\n if (overrides?.computed && Object.keys(overrides.computed).length > 0) {\n ;(baseOptions as any).computed = overrides.computed\n }\n if (overrides?.inlineMap && Object.keys(overrides.inlineMap).length > 0) {\n ;(baseOptions as any).methods = {\n ...(baseOptions as any).methods,\n [WEVU_INLINE_MAP_KEY]: overrides.inlineMap,\n }\n }\n if (templateRefs?.length) {\n ;(baseOptions as any)[WEVU_TEMPLATE_REFS_KEY] = templateRefs\n }\n if (layoutHosts?.length) {\n ;(baseOptions as Record<string, unknown>)[WEVU_LAYOUT_HOSTS_KEY] = layoutHosts\n }\n if (overrides?.[WEVU_BINDING_MANIFEST_KEY]) {\n ;(baseOptions as Record<string, unknown>)[WEVU_BINDING_MANIFEST_KEY] = overrides[WEVU_BINDING_MANIFEST_KEY]\n }\n\n return baseOptions\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scopedSlotOptions.mjs","names":[],"sources":["../../../../src/runtime/define/scopedSlotOptions.ts"],"sourcesContent":["import type { WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type { LayoutHostBinding, TemplateRefBinding } from '../capabilities'\nimport type { InlineExpressionMap } from '../register/inline'\nimport type { ComputedDefinitions } from '../types'\nimport {\n WEVU_BINDING_MANIFEST_KEY,\n WEVU_INLINE_HANDLER,\n WEVU_INLINE_MAP_KEY,\n WEVU_LAYOUT_HOSTS_KEY,\n WEVU_NATIVE_SLOT_CONTEXT_KEY,\n WEVU_OWNER_HANDLER,\n WEVU_PROPS_DERIVED_KEYS_KEY,\n WEVU_PUBLIC_RUNTIME_KEY,\n WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY,\n WEVU_SLOT_FUNCTION_TOKEN,\n WEVU_SLOT_OWNER_ID_KEY,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_OWNER_KEY,\n WEVU_SLOT_OWNER_PROXY_KEY,\n WEVU_SLOT_PROPS_DATA_KEY,\n WEVU_SLOT_PROPS_KEY,\n WEVU_SLOT_SCOPE_KEY,\n WEVU_TEMPLATE_REFS_KEY,\n} from '@weapp-core/constants'\nimport { hasOwn } from '../../utils'\nimport { cloneSnapshotValue, isDeepEqualValue } from '../app/setData/snapshot'\nimport { requireRuntimeCapability, runtimeCapabilityRegistry } from '../capabilities'\nimport { decodeWxmlEntities, resolveDatasetEventValue } from '../inlineDataset'\nimport { getOwnerProxy, getOwnerSnapshot, getOwnerTarget, subscribeOwner } from '../scopedSlots'\nimport { runTeardownSteps } from '../teardown'\n\nconst SCOPED_SLOT_SNAPSHOT_OMIT_KEYS = [\n WEVU_SLOT_OWNER_ID_KEY,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_OWNER_PROXY_KEY,\n WEVU_SLOT_OWNER_KEY,\n WEVU_SLOT_PROPS_DATA_KEY,\n WEVU_SLOT_PROPS_KEY,\n WEVU_SLOT_SCOPE_KEY,\n]\n\nfunction parseInlineArgs(event: any) {\n const dataset = event?.currentTarget?.dataset ?? event?.target?.dataset ?? {}\n const argsRaw = resolveDatasetEventValue(dataset, 'wvArgs', event)\n let args: any[] = []\n if (Array.isArray(argsRaw)) {\n args = argsRaw\n }\n else if (typeof argsRaw === 'string') {\n try {\n args = JSON.parse(argsRaw)\n }\n catch {\n try {\n args = JSON.parse(decodeWxmlEntities(argsRaw))\n }\n catch {\n args = []\n }\n }\n }\n if (!Array.isArray(args)) {\n args = []\n }\n return args.map((item: any) => item === '$event' ? event : item)\n}\n\nfunction normalizeSlotBindings(value: unknown): Record<string, any> {\n if (!value || typeof value !== 'object') {\n return {}\n }\n if (Array.isArray(value)) {\n const result: Record<string, any> = {}\n for (let i = 0; i < value.length; i += 2) {\n const key = value[i]\n if (typeof key === 'string' && key) {\n result[key] = value[i + 1]\n }\n }\n return result\n }\n return value as Record<string, any>\n}\n\nfunction isSlotFunctionDescriptor(value: unknown): value is [string, string, unknown[], unknown[]] {\n return Array.isArray(value)\n && value[0] === WEVU_SLOT_FUNCTION_TOKEN\n && typeof value[1] === 'string'\n}\n\nfunction createSlotFunctionProxy(instance: any, descriptor: [string, string, unknown[], unknown[]]) {\n return (...args: unknown[]) => {\n const owner = instance?.selectOwnerComponent?.()\n const handler = owner?.[WEVU_INLINE_HANDLER]\n if (typeof handler !== 'function') {\n return undefined\n }\n const dataset: Record<string, unknown> = {\n wd: 1,\n wi: descriptor[1],\n }\n const scopeBindings = Array.isArray(descriptor[2]) ? descriptor[2] : []\n const indexBindings = Array.isArray(descriptor[3]) ? descriptor[3] : []\n scopeBindings.forEach((value, index) => dataset[`wvS${index}`] = value)\n indexBindings.forEach((value, index) => dataset[`wvI${index}`] = value)\n const event = {\n type: 'wv-slot-function',\n detail: args,\n currentTarget: { dataset },\n target: { dataset },\n }\n return handler.call(owner, event)\n }\n}\n\nfunction resolveRuntimeSlotBindings(instance: any, bindings: Record<string, any>) {\n const resolved: Record<string, any> = {}\n for (const [key, value] of Object.entries(bindings)) {\n resolved[key] = isSlotFunctionDescriptor(value) ? createSlotFunctionProxy(instance, value) : value\n }\n return resolved\n}\n\nfunction resolveComputedContext(instance: any) {\n return instance?.__wevu?.proxy\n ?? instance?.[WEVU_PUBLIC_RUNTIME_KEY]?.proxy\n ?? instance\n}\n\nfunction collectComputedPayload(instance: any, computed?: ComputedDefinitions) {\n if (!computed || Object.keys(computed).length === 0) {\n return undefined\n }\n\n const context = resolveComputedContext(instance)\n const payload: Record<string, any> = {}\n for (const [key, definition] of Object.entries(computed)) {\n try {\n let value: any\n if (typeof definition === 'function') {\n value = definition.call(context)\n }\n else if (typeof (definition as any)?.get === 'function') {\n value = (definition as any).get.call(context)\n }\n if (value !== undefined) {\n payload[key] = value\n }\n }\n catch {\n }\n }\n return payload\n}\n\nfunction flushOwnerProxyBindings(instance: any) {\n instance?.__wevu?.__wevu_flushSetupSnapshotSync?.()\n}\n\nfunction flushScopedSlotComputedBindings(\n instance: any,\n computed?: ComputedDefinitions,\n options?: { force?: boolean },\n) {\n flushOwnerProxyBindings(instance)\n const payload = collectComputedPayload(instance, computed)\n if (!payload || typeof instance?.setData !== 'function') {\n return\n }\n const hasPrevious = hasOwn(instance, '__wvScopedSlotComputedSnapshot')\n const previous = instance.__wvScopedSlotComputedSnapshot ?? {}\n const next: Record<string, any> = {}\n const changed: Record<string, any> = {}\n for (const [key, value] of Object.entries(payload)) {\n next[key] = cloneSnapshotValue(value)\n if (options?.force || !hasPrevious || !hasOwn(previous, key) || !isDeepEqualValue(previous[key], value, 20, { keys: 10_000 })) {\n changed[key] = value\n }\n }\n for (const key of Object.keys(previous)) {\n if (!hasOwn(payload, key)) {\n changed[key] = null\n }\n }\n instance.__wvScopedSlotComputedSnapshot = next\n if (Object.keys(changed).length > 0) {\n instance.setData(changed)\n }\n}\n\nfunction syncSlotPropsData(\n instance: any,\n override?: { [WEVU_SLOT_SCOPE_KEY]?: unknown, [WEVU_SLOT_PROPS_KEY]?: unknown },\n) {\n const scopeSource = hasOwn(override ?? {}, WEVU_SLOT_SCOPE_KEY)\n ? (override as any)[WEVU_SLOT_SCOPE_KEY]\n : instance?.properties?.[WEVU_SLOT_SCOPE_KEY]\n const propsSource = hasOwn(override ?? {}, WEVU_SLOT_PROPS_KEY)\n ? (override as any)[WEVU_SLOT_PROPS_KEY]\n : instance?.properties?.[WEVU_SLOT_PROPS_KEY]\n const scope = normalizeSlotBindings(scopeSource)\n const slotProps = normalizeSlotBindings(propsSource)\n const snapshot = { ...scope, ...slotProps }\n const snapshotChanged = !hasOwn(instance, '__wvSlotPropsSnapshot')\n || !isDeepEqualValue(\n instance.__wvSlotPropsSnapshot ?? {},\n snapshot,\n 20,\n { keys: 10_000 },\n )\n const merged = snapshotChanged || !instance[WEVU_SLOT_PROPS_DATA_KEY]\n ? resolveRuntimeSlotBindings(instance, snapshot)\n : instance[WEVU_SLOT_PROPS_DATA_KEY]\n if (snapshotChanged) {\n instance.__wvSlotPropsSnapshot = cloneSnapshotValue(snapshot)\n }\n instance[WEVU_SLOT_PROPS_DATA_KEY] = merged\n const runtimeState = instance?.__wevu?.state\n const runtimeSnapshotChanged = Boolean(\n runtimeState\n && typeof runtimeState === 'object'\n && (\n !hasOwn(runtimeState, WEVU_SLOT_PROPS_DATA_KEY)\n || !isDeepEqualValue(\n runtimeState[WEVU_SLOT_PROPS_DATA_KEY] ?? {},\n snapshot,\n 20,\n { keys: 10_000 },\n )\n ),\n )\n if (runtimeState && typeof runtimeState === 'object') {\n runtimeState[WEVU_SLOT_PROPS_DATA_KEY] = merged\n }\n return { merged, runtimeSnapshotChanged, snapshot, snapshotChanged }\n}\n\nfunction mergeSlotProps(\n instance: any,\n computed?: ComputedDefinitions,\n override?: { [WEVU_SLOT_SCOPE_KEY]?: unknown, [WEVU_SLOT_PROPS_KEY]?: unknown },\n) {\n const { runtimeSnapshotChanged, snapshot, snapshotChanged } = syncSlotPropsData(instance, override)\n if ((snapshotChanged || runtimeSnapshotChanged) && typeof instance?.setData === 'function') {\n instance.setData({ [WEVU_SLOT_PROPS_DATA_KEY]: snapshot })\n }\n if (snapshotChanged) {\n flushScopedSlotComputedBindings(instance, computed)\n }\n}\n\nfunction setOwnerProxy(instance: any, proxy: any) {\n let changed = false\n if (instance[WEVU_SLOT_OWNER_PROXY_KEY] !== proxy) {\n instance[WEVU_SLOT_OWNER_PROXY_KEY] = proxy\n changed = true\n }\n const data = instance?.data\n if (data && typeof data === 'object' && data[WEVU_SLOT_OWNER_PROXY_KEY] !== proxy) {\n try {\n Object.defineProperty(data, WEVU_SLOT_OWNER_PROXY_KEY, {\n value: proxy,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n }\n catch {\n data[WEVU_SLOT_OWNER_PROXY_KEY] = proxy\n }\n changed = true\n }\n const runtimeState = instance?.__wevu?.state\n if (\n runtimeState\n && typeof runtimeState === 'object'\n && runtimeState[WEVU_SLOT_OWNER_PROXY_KEY] !== proxy\n ) {\n runtimeState[WEVU_SLOT_OWNER_PROXY_KEY] = proxy\n changed = true\n }\n return changed\n}\n\nfunction isSnapshotObject(value: unknown): value is Record<string, any> {\n if (!value || typeof value !== 'object') {\n return false\n }\n const prototype = Object.getPrototypeOf(value)\n return prototype === Object.prototype || prototype === null\n}\n\nfunction splitOwnerSnapshotFunctions(\n value: any,\n path: string,\n functionPayload: Record<string, any>,\n visiting: WeakSet<object>,\n): any {\n if (typeof value === 'function') {\n functionPayload[path] = value\n return undefined\n }\n if (value == null || typeof value !== 'object') {\n return value\n }\n if (visiting.has(value)) {\n return undefined\n }\n if (Array.isArray(value)) {\n visiting.add(value)\n const output = value.map((item, index) => {\n const next = splitOwnerSnapshotFunctions(item, `${path}.${index}`, functionPayload, visiting)\n return next === undefined ? null : next\n })\n visiting.delete(value)\n return output\n }\n if (!isSnapshotObject(value)) {\n return cloneSnapshotValue(value)\n }\n visiting.add(value)\n const output: Record<string, any> = {}\n for (const [key, child] of Object.entries(value)) {\n const next = splitOwnerSnapshotFunctions(child, `${path}.${key}`, functionPayload, visiting)\n if (next !== undefined) {\n output[key] = next\n }\n }\n visiting.delete(value)\n return output\n}\n\nfunction createOwnerSetDataPayload(snapshot: Record<string, any>) {\n const functionPayload: Record<string, any> = {}\n const ownerSnapshot = splitOwnerSnapshotFunctions(\n snapshot,\n WEVU_SLOT_OWNER_KEY,\n functionPayload,\n new WeakSet(),\n )\n return {\n [WEVU_SLOT_OWNER_KEY]: ownerSnapshot,\n ...functionPayload,\n }\n}\n\nfunction updateOwnerBindings(instance: any, snapshot: Record<string, any>, proxy: any, computed?: ComputedDefinitions) {\n const proxyChanged = setOwnerProxy(instance, proxy)\n const { snapshotChanged: slotPropsChanged } = syncSlotPropsData(instance)\n const nextOwnerSnapshot = snapshot || {}\n const ownerChanged = !hasOwn(instance, '__wvOwnerSnapshot')\n || !isDeepEqualValue(\n instance.__wvOwnerSnapshot ?? {},\n nextOwnerSnapshot,\n 20,\n { keys: 10_000 },\n )\n if (ownerChanged) {\n instance.__wvOwnerSnapshot = cloneSnapshotValue(nextOwnerSnapshot)\n instance[WEVU_SLOT_OWNER_KEY] = nextOwnerSnapshot\n const runtimeState = instance?.__wevu?.state\n if (runtimeState && typeof runtimeState === 'object') {\n runtimeState[WEVU_SLOT_OWNER_KEY] = nextOwnerSnapshot\n }\n }\n if (ownerChanged && typeof instance?.setData === 'function') {\n instance.setData(createOwnerSetDataPayload(nextOwnerSnapshot))\n }\n if (ownerChanged || proxyChanged || slotPropsChanged) {\n flushScopedSlotComputedBindings(instance, computed)\n }\n}\n\nfunction bindOwner(instance: any, ownerId: string, computed?: ComputedDefinitions) {\n if (!ownerId) {\n if (typeof instance?.__wvOwnerUnsub === 'function') {\n instance.__wvOwnerUnsub()\n }\n instance.__wvOwnerUnsub = undefined\n instance.__wvOwnerBoundId = ''\n setOwnerProxy(instance, undefined)\n return\n }\n\n const updateOwner = (snapshot: Record<string, any>, proxy: any) => {\n updateOwnerBindings(instance, snapshot, proxy, computed)\n }\n if (instance.__wvOwnerBoundId !== ownerId) {\n if (typeof instance.__wvOwnerUnsub === 'function') {\n instance.__wvOwnerUnsub()\n }\n instance.__wvOwnerBoundId = ownerId\n instance.__wvOwnerUnsub = subscribeOwner(ownerId, updateOwner)\n }\n const snapshot = getOwnerSnapshot(ownerId)\n if (snapshot) {\n updateOwner(snapshot, getOwnerProxy(ownerId))\n }\n}\n\nfunction resolveBoundOwnerId(instance: any) {\n return instance?.properties?.[WEVU_SLOT_OWNER_ID_PROP]\n ?? instance?.properties?.[WEVU_SLOT_OWNER_ID_KEY]\n ?? ''\n}\n\nfunction syncScopedSlotBindings(instance: any, computed?: ComputedDefinitions) {\n mergeSlotProps(instance, computed)\n const ownerId = resolveBoundOwnerId(instance)\n if (!ownerId) {\n return\n }\n bindOwner(instance, ownerId, computed)\n}\n\nfunction createScopedSlotData() {\n const data = {\n [WEVU_SLOT_OWNER_KEY]: {},\n [WEVU_SLOT_PROPS_DATA_KEY]: {},\n }\n Object.defineProperty(data, WEVU_SLOT_OWNER_PROXY_KEY, {\n value: undefined,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n return data\n}\n\nexport function createScopedSlotOptions(\n overrides?: {\n computed?: ComputedDefinitions\n inlineMap?: InlineExpressionMap\n layoutHosts?: LayoutHostBinding[]\n templateRefs?: TemplateRefBinding[]\n [WEVU_BINDING_MANIFEST_KEY]?: WevuRuntimeBindingManifestV1\n [WEVU_NATIVE_SLOT_CONTEXT_KEY]?: boolean\n },\n) {\n const scopedSlotComputed = overrides?.computed\n const layoutHosts = overrides?.layoutHosts\n const templateRefs = overrides?.templateRefs\n if (templateRefs?.length) {\n requireRuntimeCapability('templateRefs', 'createWevuScopedSlotComponent(templateRefs)')\n }\n const hasInlineMap = Boolean(overrides?.inlineMap && Object.keys(overrides.inlineMap).length)\n if (hasInlineMap) {\n requireRuntimeCapability('inlineEvents', 'createWevuScopedSlotComponent(inlineMap)')\n }\n if (layoutHosts?.length) {\n requireRuntimeCapability('layout', 'createWevuScopedSlotComponent(layoutHosts)')\n }\n const resolveTemplateRefOwner = (instance: any) => {\n const ownerId = resolveBoundOwnerId(instance)\n return ownerId ? getOwnerTarget(ownerId) : undefined\n }\n const baseOptions = {\n [WEVU_NATIVE_SLOT_CONTEXT_KEY]: overrides?.[WEVU_NATIVE_SLOT_CONTEXT_KEY],\n [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]: true,\n options: {\n virtualHost: true,\n },\n setData: {\n omit: SCOPED_SLOT_SNAPSHOT_OMIT_KEYS,\n },\n [WEVU_PROPS_DERIVED_KEYS_KEY]: SCOPED_SLOT_SNAPSHOT_OMIT_KEYS,\n properties: {\n [WEVU_SLOT_OWNER_ID_PROP]: {\n type: String,\n value: '',\n observer(this: any, next: string) {\n bindOwner(this, next || '', scopedSlotComputed)\n },\n },\n [WEVU_SLOT_OWNER_ID_KEY]: {\n type: String,\n value: '',\n observer(this: any, next: string) {\n bindOwner(this, next || '', scopedSlotComputed)\n },\n },\n [WEVU_SLOT_PROPS_KEY]: {\n type: null,\n value: null,\n observer(this: any, next: unknown) {\n mergeSlotProps(this, scopedSlotComputed, { [WEVU_SLOT_PROPS_KEY]: next })\n },\n },\n [WEVU_SLOT_SCOPE_KEY]: {\n type: null,\n value: null,\n observer(this: any, next: unknown) {\n mergeSlotProps(this, scopedSlotComputed, { [WEVU_SLOT_SCOPE_KEY]: next })\n },\n },\n },\n data: createScopedSlotData,\n lifetimes: {\n attached(this: any) {\n syncScopedSlotBindings(this, scopedSlotComputed)\n },\n ready(this: any) {\n syncScopedSlotBindings(this, scopedSlotComputed)\n flushScopedSlotComputedBindings(this, scopedSlotComputed, { force: true })\n const owner = resolveTemplateRefOwner(this)\n if (owner && templateRefs?.length) {\n runtimeCapabilityRegistry.templateRefs?.schedule(this, undefined, owner)\n }\n },\n detached(this: any) {\n const owner = resolveTemplateRefOwner(this)\n runTeardownSteps([\n () => {\n if (owner && templateRefs?.length) {\n runtimeCapabilityRegistry.templateRefs?.clear(this, owner)\n }\n },\n () => {\n if (typeof this.__wvOwnerUnsub === 'function') {\n this.__wvOwnerUnsub()\n }\n },\n () => {\n this.__wvOwnerUnsub = undefined\n this.__wvOwnerBoundId = ''\n },\n () => setOwnerProxy(this, undefined),\n ])\n },\n },\n methods: {\n [WEVU_OWNER_HANDLER](this: any, event: any) {\n const owner = this[WEVU_SLOT_OWNER_PROXY_KEY]\n const inlineMap = (this as any).__wevu?.methods?.[WEVU_INLINE_MAP_KEY]\n if (hasInlineMap) {\n const result = runtimeCapabilityRegistry.inlineEvents?.run(owner, undefined, event, inlineMap)\n if (result !== undefined) {\n return result\n }\n }\n if (!owner) {\n return undefined\n }\n const dataset = event?.currentTarget?.dataset ?? event?.target?.dataset ?? {}\n const handlerName = resolveDatasetEventValue(dataset, 'wvHandler', event)\n if (typeof handlerName !== 'string' || !handlerName) {\n return undefined\n }\n const handler = owner?.[handlerName]\n if (typeof handler !== 'function') {\n return undefined\n }\n const args = parseInlineArgs(event)\n return handler.apply(owner, args)\n },\n },\n }\n\n if (overrides?.computed && Object.keys(overrides.computed).length > 0) {\n ;(baseOptions as any).computed = overrides.computed\n }\n if (overrides?.inlineMap && Object.keys(overrides.inlineMap).length > 0) {\n ;(baseOptions as any).methods = {\n ...(baseOptions as any).methods,\n [WEVU_INLINE_MAP_KEY]: overrides.inlineMap,\n }\n }\n if (templateRefs?.length) {\n ;(baseOptions as any)[WEVU_TEMPLATE_REFS_KEY] = templateRefs\n }\n if (layoutHosts?.length) {\n ;(baseOptions as Record<string, unknown>)[WEVU_LAYOUT_HOSTS_KEY] = layoutHosts\n }\n if (overrides?.[WEVU_BINDING_MANIFEST_KEY]) {\n ;(baseOptions as Record<string, unknown>)[WEVU_BINDING_MANIFEST_KEY] = overrides[WEVU_BINDING_MANIFEST_KEY]\n }\n\n return baseOptions\n}\n"],"mappings":"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"}
|
|
@@ -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;
|
|
@@ -90,7 +85,7 @@ function createComponentDefinition(options, registerNative) {
|
|
|
90
85
|
...nativeData && typeof nativeData === "object" ? nativeData : {},
|
|
91
86
|
[WEVU_SLOT_OWNER_ID_KEY]: shouldSeedNativeSlotOwnerId(mpOptions) ? nativeOwnerId || scopedSlotHooks?.allocateOwnerId() : nativeOwnerId || ""
|
|
92
87
|
} : nativeData;
|
|
93
|
-
const nativeInitialData = resolveNativeInitialData(seededNativeData, computed, resolvedSetData, methods);
|
|
88
|
+
const nativeInitialData = resolveNativeInitialData(seededNativeData, computed, resolvedSetData, methods, bindingManifest);
|
|
94
89
|
const mpOptionsWithProps = nativeInitialData !== void 0 ? {
|
|
95
90
|
...normalizedMpOptions,
|
|
96
91
|
data: nativeInitialData
|
|
@@ -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)\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":"scopedSlots.mjs","names":[],"sources":["../../../../src/runtime/features/scopedSlots.ts"],"sourcesContent":["import type { WEVU_BINDING_MANIFEST_KEY, WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type {\n LayoutHostBinding,\n RuntimeCapabilityRegistry,\n ScopedSlotMountState,\n TemplateRefBinding,\n} from '../capabilities'\nimport type { InlineExpressionMap } from '../register/inline'\nimport type { ComputedDefinitions, InternalRuntimeState } from '../types'\nimport {\n WEVU_PROPS_KEY,\n WEVU_RUNTIME_OWNER_ID_KEY,\n WEVU_SCOPED_SLOT_CREATOR_KEY,\n WEVU_SLOT_OWNER_ID_KEY,\n} from '@weapp-core/constants'\nimport {\n getScopedSlotMountState,\n registerRuntimeCapability,\n requireRuntimeCapability,\n RUNTIME_SCOPED_SLOT_STATE_KEY,\n} from '../capabilities'\nimport { createWevuComponent } from '../define'\nimport { createScopedSlotOptions } from '../define/scopedSlotOptions'\nimport { getScopedSlotHostGlobalObject } from '../platform'\nimport { callNativeSetData, resolveNativeSetData } from '../register/runtimeInstance/utils'\nimport {\n allocateOwnerId,\n attachOwnerSnapshot,\n getOwnerProxy,\n mergeOwnerSnapshotProps,\n removeOwner,\n resolveOwnerSnapshot,\n updateOwnerSnapshot,\n} from '../scopedSlots'\nimport { runTeardownSteps } from '../teardown'\n\nexport interface CreateWevuScopedSlotComponentOptions {\n computed?: ComputedDefinitions\n inlineMap?: InlineExpressionMap\n layoutHosts?: LayoutHostBinding[]\n templateRefs?: TemplateRefBinding[]\n [WEVU_BINDING_MANIFEST_KEY]?: WevuRuntimeBindingManifestV1\n}\n\ntype RuntimeTargetWithScopedSlotState = InternalRuntimeState & {\n [RUNTIME_SCOPED_SLOT_STATE_KEY]?: ScopedSlotMountState\n [WEVU_PROPS_KEY]?: unknown\n [WEVU_RUNTIME_OWNER_ID_KEY]?: unknown\n [WEVU_SLOT_OWNER_ID_KEY]?: unknown\n}\n\nconst scopedSlotHooks: NonNullable<RuntimeCapabilityRegistry['scopedSlots']> = {\n prepareMount(target: InternalRuntimeState) {\n const existing = getScopedSlotMountState(target)\n if (existing) {\n return existing\n }\n const initialNativeOwnerId = target.data?.[WEVU_SLOT_OWNER_ID_KEY]\n const ownerId = typeof initialNativeOwnerId === 'string' && initialNativeOwnerId\n ? initialNativeOwnerId\n : allocateOwnerId()\n const state: ScopedSlotMountState = {\n ownerId,\n shouldFlushNativeOwnerId: typeof initialNativeOwnerId === 'string' && initialNativeOwnerId !== ownerId,\n }\n Object.defineProperty(target, RUNTIME_SCOPED_SLOT_STATE_KEY, {\n value: state,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n return state\n },\n attachMount(target, runtime, state, deferSnapshot) {\n attachOwnerSnapshot(target, runtime, state.ownerId, { deferSnapshot })\n },\n refresh(target: InternalRuntimeState, state: ScopedSlotMountState) {\n const runtime = target.__wevu\n if (!runtime) {\n return\n }\n const snapshot = resolveOwnerSnapshot(runtime)\n const propsSource = (target as RuntimeTargetWithScopedSlotState)[WEVU_PROPS_KEY] ?? target.properties\n mergeOwnerSnapshotProps(snapshot, propsSource)\n updateOwnerSnapshot(state.ownerId, snapshot, runtime.proxy, target)\n },\n syncNativeOwnerId(target: InternalRuntimeState, state: ScopedSlotMountState) {\n if (!state.shouldFlushNativeOwnerId) {\n return\n }\n try {\n if (target.data && typeof target.data === 'object') {\n target.data[WEVU_SLOT_OWNER_ID_KEY] = state.ownerId\n }\n }\n catch {\n // 忽略直接写入失败,后续 setData 仍会尝试同步。\n }\n const setData = resolveNativeSetData(target)\n if (setData) {\n callNativeSetData(target, setData, { [WEVU_SLOT_OWNER_ID_KEY]: state.ownerId })\n }\n },\n teardown(target: InternalRuntimeState) {\n const state = getScopedSlotMountState(target)\n const scopedTarget = target as RuntimeTargetWithScopedSlotState\n const ownerId = state?.ownerId\n ?? scopedTarget[WEVU_RUNTIME_OWNER_ID_KEY]\n ?? scopedTarget[WEVU_SLOT_OWNER_ID_KEY]\n runTeardownSteps([\n () => {\n if (typeof ownerId === 'string' && ownerId) {\n removeOwner(ownerId)\n }\n },\n () => {\n delete scopedTarget[RUNTIME_SCOPED_SLOT_STATE_KEY]\n },\n ])\n },\n resolveLifecycleProxy(target: InternalRuntimeState) {\n const scopedTarget = target as RuntimeTargetWithScopedSlotState\n const ownerId = scopedTarget[WEVU_RUNTIME_OWNER_ID_KEY]\n ?? scopedTarget[WEVU_SLOT_OWNER_ID_KEY]\n ?? target.data?.[WEVU_SLOT_OWNER_ID_KEY]\n ?? target.properties?.[WEVU_SLOT_OWNER_ID_KEY]\n return typeof ownerId === 'string' && ownerId ? getOwnerProxy(ownerId) : undefined\n },\n allocateOwnerId,\n}\n\n/**\n * 创建编译器生成的作用域插槽组件。\n */\nexport function createWevuScopedSlotComponent(\n overrides?: CreateWevuScopedSlotComponentOptions,\n): void {\n requireRuntimeCapability('scopedSlots', 'createWevuScopedSlotComponent')\n const baseOptions = createScopedSlotOptions(overrides)\n // 作用域插槽选项由内部工厂完整构造,动态常量键会丢失静态索引信息。\n const componentOptions = baseOptions as unknown as Parameters<typeof createWevuComponent>[0]\n createWevuComponent(componentOptions)\n}\n/**\n * 安装作用域插槽的 owner 生命周期与组件创建能力。\n */\nexport function installScopedSlots(): void {\n registerRuntimeCapability('scopedSlots', scopedSlotHooks)\n const globalObject = getScopedSlotHostGlobalObject()\n if (globalObject && globalObject[WEVU_SCOPED_SLOT_CREATOR_KEY] !== createWevuScopedSlotComponent) {\n globalObject[WEVU_SCOPED_SLOT_CREATOR_KEY] = createWevuScopedSlotComponent\n }\n}\n"],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"scopedSlots.mjs","names":[],"sources":["../../../../src/runtime/features/scopedSlots.ts"],"sourcesContent":["import type { WEVU_BINDING_MANIFEST_KEY, WEVU_NATIVE_SLOT_CONTEXT_KEY, WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type {\n LayoutHostBinding,\n RuntimeCapabilityRegistry,\n ScopedSlotMountState,\n TemplateRefBinding,\n} from '../capabilities'\nimport type { InlineExpressionMap } from '../register/inline'\nimport type { ComputedDefinitions, InternalRuntimeState } from '../types'\nimport {\n WEVU_PROPS_KEY,\n WEVU_RUNTIME_OWNER_ID_KEY,\n WEVU_SCOPED_SLOT_CREATOR_KEY,\n WEVU_SLOT_OWNER_ID_KEY,\n} from '@weapp-core/constants'\nimport {\n getScopedSlotMountState,\n registerRuntimeCapability,\n requireRuntimeCapability,\n RUNTIME_SCOPED_SLOT_STATE_KEY,\n} from '../capabilities'\nimport { createWevuComponent } from '../define'\nimport { createScopedSlotOptions } from '../define/scopedSlotOptions'\nimport { getScopedSlotHostGlobalObject } from '../platform'\nimport { callNativeSetData, resolveNativeSetData } from '../register/runtimeInstance/utils'\nimport {\n allocateOwnerId,\n attachOwnerSnapshot,\n getOwnerProxy,\n mergeOwnerSnapshotProps,\n removeOwner,\n resolveOwnerSnapshot,\n updateOwnerSnapshot,\n} from '../scopedSlots'\nimport { runTeardownSteps } from '../teardown'\n\nexport interface CreateWevuScopedSlotComponentOptions {\n computed?: ComputedDefinitions\n inlineMap?: InlineExpressionMap\n layoutHosts?: LayoutHostBinding[]\n templateRefs?: TemplateRefBinding[]\n [WEVU_BINDING_MANIFEST_KEY]?: WevuRuntimeBindingManifestV1\n [WEVU_NATIVE_SLOT_CONTEXT_KEY]?: boolean\n}\n\ntype RuntimeTargetWithScopedSlotState = InternalRuntimeState & {\n [RUNTIME_SCOPED_SLOT_STATE_KEY]?: ScopedSlotMountState\n [WEVU_PROPS_KEY]?: unknown\n [WEVU_RUNTIME_OWNER_ID_KEY]?: unknown\n [WEVU_SLOT_OWNER_ID_KEY]?: unknown\n}\n\nconst scopedSlotHooks: NonNullable<RuntimeCapabilityRegistry['scopedSlots']> = {\n prepareMount(target: InternalRuntimeState) {\n const existing = getScopedSlotMountState(target)\n if (existing) {\n return existing\n }\n const initialNativeOwnerId = target.data?.[WEVU_SLOT_OWNER_ID_KEY]\n const ownerId = typeof initialNativeOwnerId === 'string' && initialNativeOwnerId\n ? initialNativeOwnerId\n : allocateOwnerId()\n const state: ScopedSlotMountState = {\n ownerId,\n shouldFlushNativeOwnerId: typeof initialNativeOwnerId === 'string' && initialNativeOwnerId !== ownerId,\n }\n Object.defineProperty(target, RUNTIME_SCOPED_SLOT_STATE_KEY, {\n value: state,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n return state\n },\n attachMount(target, runtime, state, deferSnapshot) {\n attachOwnerSnapshot(target, runtime, state.ownerId, { deferSnapshot })\n },\n refresh(target: InternalRuntimeState, state: ScopedSlotMountState) {\n const runtime = target.__wevu\n if (!runtime) {\n return\n }\n const snapshot = resolveOwnerSnapshot(runtime)\n const propsSource = (target as RuntimeTargetWithScopedSlotState)[WEVU_PROPS_KEY] ?? target.properties\n mergeOwnerSnapshotProps(snapshot, propsSource)\n updateOwnerSnapshot(state.ownerId, snapshot, runtime.proxy, target)\n },\n syncNativeOwnerId(target: InternalRuntimeState, state: ScopedSlotMountState) {\n if (!state.shouldFlushNativeOwnerId) {\n return\n }\n try {\n if (target.data && typeof target.data === 'object') {\n target.data[WEVU_SLOT_OWNER_ID_KEY] = state.ownerId\n }\n }\n catch {\n // 忽略直接写入失败,后续 setData 仍会尝试同步。\n }\n const setData = resolveNativeSetData(target)\n if (setData) {\n callNativeSetData(target, setData, { [WEVU_SLOT_OWNER_ID_KEY]: state.ownerId })\n }\n },\n teardown(target: InternalRuntimeState) {\n const state = getScopedSlotMountState(target)\n const scopedTarget = target as RuntimeTargetWithScopedSlotState\n const ownerId = state?.ownerId\n ?? scopedTarget[WEVU_RUNTIME_OWNER_ID_KEY]\n ?? scopedTarget[WEVU_SLOT_OWNER_ID_KEY]\n runTeardownSteps([\n () => {\n if (typeof ownerId === 'string' && ownerId) {\n removeOwner(ownerId)\n }\n },\n () => {\n delete scopedTarget[RUNTIME_SCOPED_SLOT_STATE_KEY]\n },\n ])\n },\n resolveLifecycleProxy(target: InternalRuntimeState) {\n const scopedTarget = target as RuntimeTargetWithScopedSlotState\n const ownerId = scopedTarget[WEVU_RUNTIME_OWNER_ID_KEY]\n ?? scopedTarget[WEVU_SLOT_OWNER_ID_KEY]\n ?? target.data?.[WEVU_SLOT_OWNER_ID_KEY]\n ?? target.properties?.[WEVU_SLOT_OWNER_ID_KEY]\n return typeof ownerId === 'string' && ownerId ? getOwnerProxy(ownerId) : undefined\n },\n allocateOwnerId,\n}\n\n/**\n * 创建编译器生成的作用域插槽组件。\n */\nexport function createWevuScopedSlotComponent(\n overrides?: CreateWevuScopedSlotComponentOptions,\n): void {\n requireRuntimeCapability('scopedSlots', 'createWevuScopedSlotComponent')\n const baseOptions = createScopedSlotOptions(overrides)\n // 作用域插槽选项由内部工厂完整构造,动态常量键会丢失静态索引信息。\n const componentOptions = baseOptions as unknown as Parameters<typeof createWevuComponent>[0]\n createWevuComponent(componentOptions)\n}\n/**\n * 安装作用域插槽的 owner 生命周期与组件创建能力。\n */\nexport function installScopedSlots(): void {\n registerRuntimeCapability('scopedSlots', scopedSlotHooks)\n const globalObject = getScopedSlotHostGlobalObject()\n if (globalObject && globalObject[WEVU_SCOPED_SLOT_CREATOR_KEY] !== createWevuScopedSlotComponent) {\n globalObject[WEVU_SCOPED_SLOT_CREATOR_KEY] = createWevuScopedSlotComponent\n }\n}\n"],"mappings":";;;;;;;;;;AAoDA,MAAM,kBAAyE;CAC7E,aAAa,QAA8B;EACzC,MAAM,WAAW,wBAAwB,MAAM;EAC/C,IAAI,UACF,OAAO;EAET,MAAM,uBAAuB,OAAO,OAAO;EAC3C,MAAM,UAAU,OAAO,yBAAyB,YAAY,uBACxD,uBACA,gBAAgB;EACpB,MAAM,QAA8B;GAClC;GACA,0BAA0B,OAAO,yBAAyB,YAAY,yBAAyB;EACjG;EACA,OAAO,eAAe,QAAQ,+BAA+B;GAC3D,OAAO;GACP,cAAc;GACd,YAAY;GACZ,UAAU;EACZ,CAAC;EACD,OAAO;CACT;CACA,YAAY,QAAQ,SAAS,OAAO,eAAe;EACjD,oBAAoB,QAAQ,SAAS,MAAM,SAAS,EAAE,cAAc,CAAC;CACvE;CACA,QAAQ,QAA8B,OAA6B;EACjE,MAAM,UAAU,OAAO;EACvB,IAAI,CAAC,SACH;EAEF,MAAM,WAAW,qBAAqB,OAAO;EAC7C,MAAM,cAAe,OAA4C,mBAAmB,OAAO;EAC3F,wBAAwB,UAAU,WAAW;EAC7C,oBAAoB,MAAM,SAAS,UAAU,QAAQ,OAAO,MAAM;CACpE;CACA,kBAAkB,QAA8B,OAA6B;EAC3E,IAAI,CAAC,MAAM,0BACT;EAEF,IAAI;GACF,IAAI,OAAO,QAAQ,OAAO,OAAO,SAAS,UACxC,OAAO,KAAK,0BAA0B,MAAM;EAEhD,QACM,CAEN;EACA,MAAM,UAAU,qBAAqB,MAAM;EAC3C,IAAI,SACF,kBAAkB,QAAQ,SAAS,GAAG,yBAAyB,MAAM,QAAQ,CAAC;CAElF;CACA,SAAS,QAA8B;EACrC,MAAM,QAAQ,wBAAwB,MAAM;EAC5C,MAAM,eAAe;EACrB,MAAM,UAAU,OAAO,WAClB,aAAa,8BACb,aAAa;EAClB,iBAAiB,OACT;GACJ,IAAI,OAAO,YAAY,YAAY,SACjC,YAAY,OAAO;EAEvB,SACM;GACJ,OAAO,aAAa;EACtB,CACF,CAAC;CACH;CACA,sBAAsB,QAA8B;EAClD,MAAM,eAAe;EACrB,MAAM,UAAU,aAAa,8BACxB,aAAa,2BACb,OAAO,OAAO,2BACd,OAAO,aAAa;EACzB,OAAO,OAAO,YAAY,YAAY,UAAU,cAAc,OAAO,IAAI;CAC3E;CACA;AACF;;;;AAKA,SAAgB,8BACd,WACM;CACN,yBAAyB,eAAe,+BAA+B;CAGvE,MAAM,mBAFc,wBAAwB,SAET;CACnC,oBAAoB,gBAAgB;AACtC;;;;AAIA,SAAgB,qBAA2B;CACzC,0BAA0B,eAAe,eAAe;CACxD,MAAM,eAAe,8BAA8B;CACnD,IAAI,gBAAgB,aAAa,kCAAkC,+BACjE,aAAa,gCAAgC;AAEjD"}
|
|
@@ -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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { hasOwn } from "../../../utils.mjs";
|
|
2
2
|
import { isDeepEqualValue } from "../../app/setData/snapshot.mjs";
|
|
3
|
+
import { updateNativeDeclarationAddress } from "../runtimeInstance/nativeDeclaration.mjs";
|
|
3
4
|
import { refreshOwnerSnapshotFromInstance } from "../snapshot.mjs";
|
|
4
|
-
import { WEVU_ATTRS_KEY, WEVU_PENDING_PROP_VALUES_KEY, WEVU_PROPS_DERIVED_KEYS_KEY, WEVU_PROPS_KEY, WEVU_PROP_KEYS_KEY, WEVU_SLOT_NAMES_PROP, WEVU_SLOT_OWNER_ID_PROP, WEVU_SLOT_SCOPE_KEY } from "@weapp-core/constants";
|
|
5
|
+
import { WEVU_ATTRS_KEY, WEVU_NATIVE_DECLARATION_ADDRESS_PROP, WEVU_PENDING_PROP_VALUES_KEY, WEVU_PROPS_DERIVED_KEYS_KEY, WEVU_PROPS_KEY, WEVU_PROP_KEYS_KEY, WEVU_SLOT_NAMES_PROP, WEVU_SLOT_OWNER_ID_PROP, WEVU_SLOT_SCOPE_KEY } from "@weapp-core/constants";
|
|
5
6
|
|
|
6
7
|
//#region src/runtime/register/component/props.ts
|
|
7
8
|
function createPropsSync(options) {
|
|
8
|
-
const { restOptions, propsAliases, propsDerivedKeys, userObservers } = options;
|
|
9
|
+
const { restOptions, nativeSlotContext, propsAliases, propsDerivedKeys, userObservers } = options;
|
|
9
10
|
const propKeys = restOptions.properties && typeof restOptions.properties === "object" ? Object.keys(restOptions.properties) : [];
|
|
10
11
|
const propKeySet = new Set(propKeys);
|
|
11
12
|
const propsDerivedKeySet = new Set(propsDerivedKeys ?? []);
|
|
@@ -182,14 +183,23 @@ function createPropsSync(options) {
|
|
|
182
183
|
};
|
|
183
184
|
const injectedObservers = {};
|
|
184
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") && nativeSlotContext && key === WEVU_NATIVE_DECLARATION_ADDRESS_PROP) updateNativeDeclarationAddress(this, newValue);
|
|
185
187
|
syncWevuPropValue(this, key, newValue);
|
|
186
188
|
};
|
|
187
|
-
const finalObservers = {
|
|
189
|
+
const finalObservers = {
|
|
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
|
+
...userObservers ?? {}
|
|
192
|
+
};
|
|
188
193
|
for (const [key, injected] of Object.entries(injectedObservers)) {
|
|
189
194
|
const existing = finalObservers[key];
|
|
190
195
|
if (typeof existing === "function") finalObservers[key] = function chainedObserver(...args) {
|
|
191
|
-
|
|
192
|
-
|
|
196
|
+
if (nativeSlotContext && key === WEVU_NATIVE_DECLARATION_ADDRESS_PROP) {
|
|
197
|
+
injected.apply(this, args);
|
|
198
|
+
existing.apply(this, args);
|
|
199
|
+
} else {
|
|
200
|
+
existing.apply(this, args);
|
|
201
|
+
injected.apply(this, args);
|
|
202
|
+
}
|
|
193
203
|
};
|
|
194
204
|
else finalObservers[key] = injected;
|
|
195
205
|
}
|