@weapp-vite/web 1.3.37 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/README.md +144 -5
  2. package/dist/_virtual/_rolldown/runtime.mjs +19 -1
  3. package/dist/compiler/wxml/attributes.mjs +1 -1
  4. package/dist/compiler/wxml/attributes.mjs.map +1 -1
  5. package/dist/compiler/wxml/compile.mjs +6 -3
  6. package/dist/compiler/wxml/compile.mjs.map +1 -1
  7. package/dist/compiler/wxml/interpolation.mjs +1 -2
  8. package/dist/compiler/wxml/interpolation.mjs.map +1 -1
  9. package/dist/compiler/wxml/navigation.mjs +5 -7
  10. package/dist/compiler/wxml/navigation.mjs.map +1 -1
  11. package/dist/compiler/wxml/parser.mjs +5 -5
  12. package/dist/compiler/wxml/parser.mjs.map +1 -1
  13. package/dist/compiler/wxml/renderer.mjs +13 -12
  14. package/dist/compiler/wxml/renderer.mjs.map +1 -1
  15. package/dist/compiler/wxml/specialNodes.mjs +6 -1
  16. package/dist/compiler/wxml/specialNodes.mjs.map +1 -1
  17. package/dist/compiler/wxml/types.d.mts +12 -0
  18. package/dist/compiler/wxs.mjs +5 -5
  19. package/dist/compiler/wxs.mjs.map +1 -1
  20. package/dist/css/wxss.d.mts +1 -0
  21. package/dist/css/wxss.mjs +110 -9
  22. package/dist/css/wxss.mjs.map +1 -1
  23. package/dist/index.d.mts +29 -6
  24. package/dist/index.mjs +197 -4
  25. package/dist/index.mjs.map +1 -0
  26. package/dist/plugin/assets.d.mts +7 -0
  27. package/dist/plugin/assets.mjs +122 -0
  28. package/dist/plugin/assets.mjs.map +1 -0
  29. package/dist/plugin/constants.mjs +10 -1
  30. package/dist/plugin/constants.mjs.map +1 -1
  31. package/dist/plugin/dependencyScan.mjs +41 -0
  32. package/dist/plugin/dependencyScan.mjs.map +1 -0
  33. package/dist/plugin/entry.mjs +55 -6
  34. package/dist/plugin/entry.mjs.map +1 -1
  35. package/dist/plugin/files.mjs +1 -1
  36. package/dist/plugin/files.mjs.map +1 -1
  37. package/dist/plugin/index.d.mts +37 -3
  38. package/dist/plugin/index.mjs +240 -73
  39. package/dist/plugin/index.mjs.map +1 -1
  40. package/dist/plugin/layout.mjs +24 -0
  41. package/dist/plugin/layout.mjs.map +1 -0
  42. package/dist/plugin/path.mjs +4 -1
  43. package/dist/plugin/path.mjs.map +1 -1
  44. package/dist/plugin/register.mjs +45 -33
  45. package/dist/plugin/register.mjs.map +1 -1
  46. package/dist/plugin/scan.mjs +206 -94
  47. package/dist/plugin/scan.mjs.map +1 -1
  48. package/dist/plugin/scanSfc.mjs +65 -0
  49. package/dist/plugin/scanSfc.mjs.map +1 -0
  50. package/dist/plugin/state.mjs +3 -2
  51. package/dist/plugin/state.mjs.map +1 -1
  52. package/dist/plugin/styleModule.mjs +52 -0
  53. package/dist/plugin/styleModule.mjs.map +1 -0
  54. package/dist/plugin/types.d.mts +37 -1
  55. package/dist/plugin/vueSfc.mjs +149 -0
  56. package/dist/plugin/vueSfc.mjs.map +1 -0
  57. package/dist/runtime/appShell/container.mjs +25 -0
  58. package/dist/runtime/appShell/container.mjs.map +1 -0
  59. package/dist/runtime/appShell/tabBar/index.mjs +192 -0
  60. package/dist/runtime/appShell/tabBar/index.mjs.map +1 -0
  61. package/dist/runtime/appShell/tabBar/style.mjs +127 -0
  62. package/dist/runtime/appShell/tabBar/style.mjs.map +1 -0
  63. package/dist/runtime/button/helpers.mjs +1 -58
  64. package/dist/runtime/button/helpers.mjs.map +1 -1
  65. package/dist/runtime/button/index.d.mts +4 -5
  66. package/dist/runtime/button/index.mjs +6 -28
  67. package/dist/runtime/button/index.mjs.map +1 -1
  68. package/dist/runtime/button/style.mjs +53 -28
  69. package/dist/runtime/button/style.mjs.map +1 -1
  70. package/dist/runtime/component/behavior.mjs +26 -2
  71. package/dist/runtime/component/behavior.mjs.map +1 -1
  72. package/dist/runtime/component/element.mjs +107 -31
  73. package/dist/runtime/component/element.mjs.map +1 -1
  74. package/dist/runtime/component/observers.mjs +36 -0
  75. package/dist/runtime/component/observers.mjs.map +1 -0
  76. package/dist/runtime/component/publicInstance.mjs +48 -0
  77. package/dist/runtime/component/publicInstance.mjs.map +1 -0
  78. package/dist/runtime/component/relations.mjs +35 -0
  79. package/dist/runtime/component/relations.mjs.map +1 -0
  80. package/dist/runtime/component/slots.mjs +24 -0
  81. package/dist/runtime/component/slots.mjs.map +1 -0
  82. package/dist/runtime/component/state.mjs +13 -3
  83. package/dist/runtime/component/state.mjs.map +1 -1
  84. package/dist/runtime/component/types.d.mts +29 -4
  85. package/dist/runtime/component/virtualHost.mjs +83 -0
  86. package/dist/runtime/component/virtualHost.mjs.map +1 -0
  87. package/dist/runtime/host/index.d.mts +13 -0
  88. package/dist/runtime/host/index.mjs +47 -0
  89. package/dist/runtime/host/index.mjs.map +1 -0
  90. package/dist/runtime/host/types.d.mts +28 -0
  91. package/dist/runtime/hostGlobals.d.mts +9 -0
  92. package/dist/runtime/hostGlobals.mjs +39 -0
  93. package/dist/runtime/hostGlobals.mjs.map +1 -0
  94. package/dist/runtime/index.d.mts +21 -3
  95. package/dist/runtime/index.mjs +26 -4
  96. package/dist/runtime/index.mjs.map +1 -0
  97. package/dist/runtime/legacyTemplate/dom.mjs +3 -3
  98. package/dist/runtime/legacyTemplate/dom.mjs.map +1 -1
  99. package/dist/runtime/legacyTemplate/expression.mjs +9 -9
  100. package/dist/runtime/legacyTemplate/expression.mjs.map +1 -1
  101. package/dist/runtime/legacyTemplate/index.mjs +6 -6
  102. package/dist/runtime/legacyTemplate/index.mjs.map +1 -1
  103. package/dist/runtime/nativeComponents/canvas/index.mjs +53 -0
  104. package/dist/runtime/nativeComponents/canvas/index.mjs.map +1 -0
  105. package/dist/runtime/nativeComponents/checkbox.mjs +137 -0
  106. package/dist/runtime/nativeComponents/checkbox.mjs.map +1 -0
  107. package/dist/runtime/nativeComponents/cover/index.mjs +23 -0
  108. package/dist/runtime/nativeComponents/cover/index.mjs.map +1 -0
  109. package/dist/runtime/nativeComponents/form.d.mts +7 -0
  110. package/dist/runtime/nativeComponents/form.mjs +50 -0
  111. package/dist/runtime/nativeComponents/form.mjs.map +1 -0
  112. package/dist/runtime/nativeComponents/formControl.mjs +61 -0
  113. package/dist/runtime/nativeComponents/formControl.mjs.map +1 -0
  114. package/dist/runtime/nativeComponents/helpers.mjs +25 -0
  115. package/dist/runtime/nativeComponents/helpers.mjs.map +1 -0
  116. package/dist/runtime/nativeComponents/icon/helpers.mjs +42 -0
  117. package/dist/runtime/nativeComponents/icon/helpers.mjs.map +1 -0
  118. package/dist/runtime/nativeComponents/icon/index.mjs +45 -0
  119. package/dist/runtime/nativeComponents/icon/index.mjs.map +1 -0
  120. package/dist/runtime/nativeComponents/icon/style.mjs +176 -0
  121. package/dist/runtime/nativeComponents/icon/style.mjs.map +1 -0
  122. package/dist/runtime/nativeComponents/image.d.mts +8 -0
  123. package/dist/runtime/nativeComponents/image.mjs +121 -0
  124. package/dist/runtime/nativeComponents/image.mjs.map +1 -0
  125. package/dist/runtime/nativeComponents/index.d.mts +11 -0
  126. package/dist/runtime/nativeComponents/index.mjs +83 -0
  127. package/dist/runtime/nativeComponents/index.mjs.map +1 -0
  128. package/dist/runtime/nativeComponents/input.d.mts +8 -0
  129. package/dist/runtime/nativeComponents/input.mjs +131 -0
  130. package/dist/runtime/nativeComponents/input.mjs.map +1 -0
  131. package/dist/runtime/nativeComponents/label.mjs +36 -0
  132. package/dist/runtime/nativeComponents/label.mjs.map +1 -0
  133. package/dist/runtime/nativeComponents/mediaRegistry.mjs +47 -0
  134. package/dist/runtime/nativeComponents/mediaRegistry.mjs.map +1 -0
  135. package/dist/runtime/nativeComponents/movable/helpers.mjs +23 -0
  136. package/dist/runtime/nativeComponents/movable/helpers.mjs.map +1 -0
  137. package/dist/runtime/nativeComponents/movable/index.mjs +117 -0
  138. package/dist/runtime/nativeComponents/movable/index.mjs.map +1 -0
  139. package/dist/runtime/nativeComponents/navigator.mjs +200 -0
  140. package/dist/runtime/nativeComponents/navigator.mjs.map +1 -0
  141. package/dist/runtime/nativeComponents/picker/editors.mjs +74 -0
  142. package/dist/runtime/nativeComponents/picker/editors.mjs.map +1 -0
  143. package/dist/runtime/nativeComponents/picker/helpers.mjs +57 -0
  144. package/dist/runtime/nativeComponents/picker/helpers.mjs.map +1 -0
  145. package/dist/runtime/nativeComponents/picker/index.mjs +210 -0
  146. package/dist/runtime/nativeComponents/picker/index.mjs.map +1 -0
  147. package/dist/runtime/nativeComponents/picker/style.mjs +71 -0
  148. package/dist/runtime/nativeComponents/picker/style.mjs.map +1 -0
  149. package/dist/runtime/nativeComponents/pickerView/column.mjs +134 -0
  150. package/dist/runtime/nativeComponents/pickerView/column.mjs.map +1 -0
  151. package/dist/runtime/nativeComponents/pickerView/helpers.mjs +17 -0
  152. package/dist/runtime/nativeComponents/pickerView/helpers.mjs.map +1 -0
  153. package/dist/runtime/nativeComponents/pickerView/index.mjs +128 -0
  154. package/dist/runtime/nativeComponents/pickerView/index.mjs.map +1 -0
  155. package/dist/runtime/nativeComponents/pickerView/style.mjs +58 -0
  156. package/dist/runtime/nativeComponents/pickerView/style.mjs.map +1 -0
  157. package/dist/runtime/nativeComponents/primitives.mjs +16 -0
  158. package/dist/runtime/nativeComponents/primitives.mjs.map +1 -0
  159. package/dist/runtime/nativeComponents/progress/helpers.mjs +29 -0
  160. package/dist/runtime/nativeComponents/progress/helpers.mjs.map +1 -0
  161. package/dist/runtime/nativeComponents/progress/index.mjs +130 -0
  162. package/dist/runtime/nativeComponents/progress/index.mjs.map +1 -0
  163. package/dist/runtime/nativeComponents/progress/style.mjs +40 -0
  164. package/dist/runtime/nativeComponents/progress/style.mjs.map +1 -0
  165. package/dist/runtime/nativeComponents/radio.mjs +147 -0
  166. package/dist/runtime/nativeComponents/radio.mjs.map +1 -0
  167. package/dist/runtime/nativeComponents/richText/helpers.mjs +230 -0
  168. package/dist/runtime/nativeComponents/richText/helpers.mjs.map +1 -0
  169. package/dist/runtime/nativeComponents/richText/index.mjs +74 -0
  170. package/dist/runtime/nativeComponents/richText/index.mjs.map +1 -0
  171. package/dist/runtime/nativeComponents/scrollView.d.mts +15 -0
  172. package/dist/runtime/nativeComponents/scrollView.mjs +79 -0
  173. package/dist/runtime/nativeComponents/scrollView.mjs.map +1 -0
  174. package/dist/runtime/nativeComponents/slider/helpers.mjs +28 -0
  175. package/dist/runtime/nativeComponents/slider/helpers.mjs.map +1 -0
  176. package/dist/runtime/nativeComponents/slider/index.mjs +120 -0
  177. package/dist/runtime/nativeComponents/slider/index.mjs.map +1 -0
  178. package/dist/runtime/nativeComponents/slider/style.mjs +60 -0
  179. package/dist/runtime/nativeComponents/slider/style.mjs.map +1 -0
  180. package/dist/runtime/nativeComponents/style.mjs +41 -0
  181. package/dist/runtime/nativeComponents/style.mjs.map +1 -0
  182. package/dist/runtime/nativeComponents/swiper/helpers.mjs +52 -0
  183. package/dist/runtime/nativeComponents/swiper/helpers.mjs.map +1 -0
  184. package/dist/runtime/nativeComponents/swiper/index.mjs +235 -0
  185. package/dist/runtime/nativeComponents/swiper/index.mjs.map +1 -0
  186. package/dist/runtime/nativeComponents/swiper/item.mjs +14 -0
  187. package/dist/runtime/nativeComponents/swiper/item.mjs.map +1 -0
  188. package/dist/runtime/nativeComponents/swiper/style.mjs +20 -0
  189. package/dist/runtime/nativeComponents/swiper/style.mjs.map +1 -0
  190. package/dist/runtime/nativeComponents/switch.d.mts +7 -0
  191. package/dist/runtime/nativeComponents/switch.mjs +132 -0
  192. package/dist/runtime/nativeComponents/switch.mjs.map +1 -0
  193. package/dist/runtime/nativeComponents/textarea.d.mts +9 -0
  194. package/dist/runtime/nativeComponents/textarea.mjs +144 -0
  195. package/dist/runtime/nativeComponents/textarea.mjs.map +1 -0
  196. package/dist/runtime/nativeComponents/video/helpers.d.mts +12 -0
  197. package/dist/runtime/nativeComponents/video/helpers.mjs +21 -0
  198. package/dist/runtime/nativeComponents/video/helpers.mjs.map +1 -0
  199. package/dist/runtime/nativeComponents/video/index.mjs +124 -0
  200. package/dist/runtime/nativeComponents/video/index.mjs.map +1 -0
  201. package/dist/runtime/nativeComponents/video/style.mjs +14 -0
  202. package/dist/runtime/nativeComponents/video/style.mjs.map +1 -0
  203. package/dist/runtime/navigationBar/index.mjs +1 -3
  204. package/dist/runtime/navigationBar/index.mjs.map +1 -1
  205. package/dist/runtime/pageLayout.d.mts +9 -0
  206. package/dist/runtime/pageLayout.mjs +16 -0
  207. package/dist/runtime/pageLayout.mjs.map +1 -0
  208. package/dist/runtime/polyfill/animation.mjs +120 -0
  209. package/dist/runtime/polyfill/animation.mjs.map +1 -0
  210. package/dist/runtime/polyfill/appState.mjs +1 -1
  211. package/dist/runtime/polyfill/appState.mjs.map +1 -1
  212. package/dist/runtime/polyfill/async.d.mts +7 -0
  213. package/dist/runtime/polyfill/async.mjs.map +1 -1
  214. package/dist/runtime/polyfill/canvasContext.mjs +41 -0
  215. package/dist/runtime/polyfill/canvasContext.mjs.map +1 -1
  216. package/dist/runtime/polyfill/device.mjs +1 -1
  217. package/dist/runtime/polyfill/device.mjs.map +1 -1
  218. package/dist/runtime/polyfill/deviceAuthSystemApi.mjs +8 -2
  219. package/dist/runtime/polyfill/deviceAuthSystemApi.mjs.map +1 -1
  220. package/dist/runtime/polyfill/eventBus.mjs +56 -0
  221. package/dist/runtime/polyfill/eventBus.mjs.map +1 -0
  222. package/dist/runtime/polyfill/fileSystemManager.mjs +5 -2
  223. package/dist/runtime/polyfill/fileSystemManager.mjs.map +1 -1
  224. package/dist/runtime/polyfill/files.mjs +10 -10
  225. package/dist/runtime/polyfill/files.mjs.map +1 -1
  226. package/dist/runtime/polyfill/font.mjs +32 -0
  227. package/dist/runtime/polyfill/font.mjs.map +1 -0
  228. package/dist/runtime/polyfill/index.d.mts +2 -2
  229. package/dist/runtime/polyfill/index.mjs +49 -45
  230. package/dist/runtime/polyfill/index.mjs.map +1 -1
  231. package/dist/runtime/polyfill/interaction.mjs +7 -6
  232. package/dist/runtime/polyfill/interaction.mjs.map +1 -1
  233. package/dist/runtime/polyfill/interactionApi.mjs +3 -2
  234. package/dist/runtime/polyfill/interactionApi.mjs.map +1 -1
  235. package/dist/runtime/polyfill/intersectionObserver.mjs +106 -0
  236. package/dist/runtime/polyfill/intersectionObserver.mjs.map +1 -0
  237. package/dist/runtime/polyfill/locale.mjs +14 -0
  238. package/dist/runtime/polyfill/locale.mjs.map +1 -0
  239. package/dist/runtime/polyfill/locationApi.mjs +7 -4
  240. package/dist/runtime/polyfill/locationApi.mjs.map +1 -1
  241. package/dist/runtime/polyfill/mediaActions.mjs +2 -2
  242. package/dist/runtime/polyfill/mediaActions.mjs.map +1 -1
  243. package/dist/runtime/polyfill/mediaApi/file.mjs +1 -1
  244. package/dist/runtime/polyfill/mediaApi/info.mjs +6 -4
  245. package/dist/runtime/polyfill/mediaApi/info.mjs.map +1 -1
  246. package/dist/runtime/polyfill/menuApi.mjs +38 -4
  247. package/dist/runtime/polyfill/menuApi.mjs.map +1 -1
  248. package/dist/runtime/polyfill/navigationBarRuntime.mjs +6 -1
  249. package/dist/runtime/polyfill/navigationBarRuntime.mjs.map +1 -1
  250. package/dist/runtime/polyfill/network/request.mjs +2 -2
  251. package/dist/runtime/polyfill/network/request.mjs.map +1 -1
  252. package/dist/runtime/polyfill/platformApi.mjs +1 -1
  253. package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs +88 -0
  254. package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs.map +1 -0
  255. package/dist/runtime/polyfill/routeRuntime/dom.mjs +44 -15
  256. package/dist/runtime/polyfill/routeRuntime/dom.mjs.map +1 -1
  257. package/dist/runtime/polyfill/routeRuntime/history.d.mts +30 -0
  258. package/dist/runtime/polyfill/routeRuntime/history.mjs +148 -0
  259. package/dist/runtime/polyfill/routeRuntime/history.mjs.map +1 -0
  260. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs +39 -8
  261. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs.map +1 -1
  262. package/dist/runtime/polyfill/routeRuntime/options.d.mts +11 -1
  263. package/dist/runtime/polyfill/routeRuntime/options.mjs +0 -1
  264. package/dist/runtime/polyfill/routeRuntime/options.mjs.map +1 -1
  265. package/dist/runtime/polyfill/routeRuntime/result.mjs +12 -0
  266. package/dist/runtime/polyfill/routeRuntime/result.mjs.map +1 -0
  267. package/dist/runtime/polyfill/routeRuntime/scroll.mjs +39 -0
  268. package/dist/runtime/polyfill/routeRuntime/scroll.mjs.map +1 -0
  269. package/dist/runtime/polyfill/routeRuntime/stack.mjs +122 -0
  270. package/dist/runtime/polyfill/routeRuntime/stack.mjs.map +1 -0
  271. package/dist/runtime/polyfill/routeRuntime.d.mts +26 -17
  272. package/dist/runtime/polyfill/routeRuntime.mjs +121 -96
  273. package/dist/runtime/polyfill/routeRuntime.mjs.map +1 -1
  274. package/dist/runtime/polyfill/runtimeDataApi.mjs +8 -3
  275. package/dist/runtime/polyfill/runtimeDataApi.mjs.map +1 -1
  276. package/dist/runtime/polyfill/runtimeOps.mjs +10 -6
  277. package/dist/runtime/polyfill/runtimeOps.mjs.map +1 -1
  278. package/dist/runtime/polyfill/selectorQuery.mjs +70 -14
  279. package/dist/runtime/polyfill/selectorQuery.mjs.map +1 -1
  280. package/dist/runtime/polyfill/storage.mjs +5 -2
  281. package/dist/runtime/polyfill/storage.mjs.map +1 -1
  282. package/dist/runtime/polyfill/system.mjs +30 -3
  283. package/dist/runtime/polyfill/system.mjs.map +1 -1
  284. package/dist/runtime/polyfill/types/locationRuntime.d.mts +1 -4
  285. package/dist/runtime/polyfill/types/platformRuntime.d.mts +9 -0
  286. package/dist/runtime/polyfill/types/systemAuth.d.mts +20 -9
  287. package/dist/runtime/polyfill/types/tabBarRuntime.d.mts +25 -0
  288. package/dist/runtime/polyfill/ui.mjs +2 -6
  289. package/dist/runtime/polyfill/ui.mjs.map +1 -1
  290. package/dist/runtime/polyfill/uiMediaApi.d.mts +11 -10
  291. package/dist/runtime/polyfill/uiMediaApi.mjs +26 -2
  292. package/dist/runtime/polyfill/uiMediaApi.mjs.map +1 -1
  293. package/dist/runtime/polyfill/videoContext.mjs +4 -0
  294. package/dist/runtime/polyfill/videoContext.mjs.map +1 -1
  295. package/dist/runtime/polyfill/vkSession.mjs +4 -14
  296. package/dist/runtime/polyfill/vkSession.mjs.map +1 -1
  297. package/dist/runtime/polyfill.d.mts +2 -2
  298. package/dist/runtime/renderContext.mjs +1 -1
  299. package/dist/runtime/renderContext.mjs.map +1 -1
  300. package/dist/runtime/rpx.mjs +17 -8
  301. package/dist/runtime/rpx.mjs.map +1 -1
  302. package/dist/runtime/seo/index.d.mts +31 -0
  303. package/dist/runtime/seo/index.mjs +94 -0
  304. package/dist/runtime/seo/index.mjs.map +1 -0
  305. package/dist/runtime/viewport/index.d.mts +12 -0
  306. package/dist/runtime/viewport/index.mjs +44 -0
  307. package/dist/runtime/viewport/index.mjs.map +1 -0
  308. package/dist/runtime/viewport/style.mjs +62 -0
  309. package/dist/runtime/viewport/style.mjs.map +1 -0
  310. package/dist/runtime/viewport/types.d.mts +14 -0
  311. package/dist/runtime/wevu.d.mts +20 -0
  312. package/dist/runtime/wevu.mjs +73 -0
  313. package/dist/runtime/wevu.mjs.map +1 -0
  314. package/dist/shared/nativeComponents.mjs +401 -0
  315. package/dist/shared/nativeComponents.mjs.map +1 -0
  316. package/dist/shared/tabBar.d.mts +19 -0
  317. package/dist/shared/tabBar.mjs +37 -0
  318. package/dist/shared/tabBar.mjs.map +1 -0
  319. package/dist/shared/wxml.mjs +3 -20
  320. package/dist/shared/wxml.mjs.map +1 -1
  321. package/package.json +13 -5
@@ -1 +1 @@
1
- {"version":3,"file":"videoContext.mjs","names":[],"sources":["../../../src/runtime/polyfill/videoContext.ts"],"sourcesContent":["import type { VideoContext } from './types/platformRuntime'\n\nfunction resolveVideoElementById(videoId: string) {\n if (typeof document === 'undefined') {\n return undefined\n }\n const normalized = String(videoId ?? '').trim()\n if (!normalized) {\n return undefined\n }\n const fromId = document.getElementById(normalized)\n if (fromId && 'play' in fromId && 'pause' in fromId) {\n return fromId as unknown as HTMLVideoElement\n }\n const escaped = typeof CSS !== 'undefined' && typeof CSS.escape === 'function'\n ? CSS.escape(normalized)\n : normalized.replace(/\"/g, '\\\\\"')\n const fromQuery = document.querySelector(`video#${escaped}`)\n if (fromQuery && 'play' in fromQuery && 'pause' in fromQuery) {\n return fromQuery as HTMLVideoElement\n }\n return undefined\n}\n\nexport function createVideoContextBridge(videoId: string): VideoContext {\n const getVideo = () => resolveVideoElementById(videoId)\n return {\n play() {\n getVideo()?.play?.()\n },\n pause() {\n getVideo()?.pause?.()\n },\n stop() {\n const video = getVideo()\n if (!video) {\n return\n }\n video.pause?.()\n try {\n video.currentTime = 0\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n seek(position: number) {\n if (!Number.isFinite(position)) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.currentTime = Math.max(0, position)\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n playbackRate(rate: number) {\n if (!Number.isFinite(rate) || rate <= 0) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.playbackRate = rate\n }\n catch {\n // ignore unsupported playbackRate mutation\n }\n },\n requestFullScreen() {\n const video = getVideo() as (HTMLVideoElement & { requestFullscreen?: () => Promise<void> | void }) | undefined\n video?.requestFullscreen?.()\n },\n exitFullScreen() {\n const runtimeDocument = document as { exitFullscreen?: () => Promise<void> | void }\n runtimeDocument.exitFullscreen?.()\n },\n }\n}\n"],"mappings":";AAEA,SAAS,wBAAwB,SAAiB;CAChD,IAAI,OAAO,aAAa,aACtB;CAEF,MAAM,aAAa,OAAO,WAAW,EAAE,CAAC,CAAC,KAAK;CAC9C,IAAI,CAAC,YACH;CAEF,MAAM,SAAS,SAAS,eAAe,UAAU;CACjD,IAAI,UAAU,UAAU,UAAU,WAAW,QAC3C,OAAO;CAET,MAAM,UAAU,OAAO,QAAQ,eAAe,OAAO,IAAI,WAAW,aAChE,IAAI,OAAO,UAAU,IACrB,WAAW,QAAQ,MAAM,MAAK;CAClC,MAAM,YAAY,SAAS,cAAc,SAAS,SAAS;CAC3D,IAAI,aAAa,UAAU,aAAa,WAAW,WACjD,OAAO;AAGX;AAEA,SAAgB,yBAAyB,SAA+B;CACtE,MAAM,iBAAiB,wBAAwB,OAAO;CACtD,OAAO;EACL,OAAO;GACL,SAAS,CAAC,EAAE,OAAO;EACrB;EACA,QAAQ;GACN,SAAS,CAAC,EAAE,QAAQ;EACtB;EACA,OAAO;GACL,MAAM,QAAQ,SAAS;GACvB,IAAI,CAAC,OACH;GAEF,MAAM,QAAQ;GACd,IAAI;IACF,MAAM,cAAc;GACtB,QACM,CAEN;EACF;EACA,KAAK,UAAkB;GACrB,IAAI,CAAC,OAAO,SAAS,QAAQ,GAC3B;GAEF,MAAM,QAAQ,SAAS;GACvB,IAAI,CAAC,OACH;GAEF,IAAI;IACF,MAAM,cAAc,KAAK,IAAI,GAAG,QAAQ;GAC1C,QACM,CAEN;EACF;EACA,aAAa,MAAc;GACzB,IAAI,CAAC,OAAO,SAAS,IAAI,KAAK,QAAQ,GACpC;GAEF,MAAM,QAAQ,SAAS;GACvB,IAAI,CAAC,OACH;GAEF,IAAI;IACF,MAAM,eAAe;GACvB,QACM,CAEN;EACF;EACA,oBAAoB;GAElB,AADc,SACV,CAAC,EAAE,oBAAoB;EAC7B;EACA,iBAAiB;GAEf,SAAgB,iBAAiB;EACnC;CACF;AACF"}
1
+ {"version":3,"file":"videoContext.mjs","names":[],"sources":["../../../src/runtime/polyfill/videoContext.ts"],"sourcesContent":["import type { VideoContext } from './types/platformRuntime'\nimport { resolveNativeMediaElement } from '../nativeComponents/mediaRegistry'\n\nfunction resolveVideoElementById(videoId: string) {\n if (typeof document === 'undefined') {\n return undefined\n }\n const normalized = String(videoId ?? '').trim()\n if (!normalized) {\n return undefined\n }\n const registered = resolveNativeMediaElement<HTMLVideoElement>('video', normalized)\n if (registered) {\n return registered\n }\n const fromId = document.getElementById(normalized)\n if (fromId && 'play' in fromId && 'pause' in fromId) {\n return fromId as unknown as HTMLVideoElement\n }\n const escaped = typeof CSS !== 'undefined' && typeof CSS.escape === 'function'\n ? CSS.escape(normalized)\n : normalized.replace(/\"/g, '\\\\\"')\n const fromQuery = document.querySelector(`video#${escaped}`)\n if (fromQuery && 'play' in fromQuery && 'pause' in fromQuery) {\n return fromQuery as HTMLVideoElement\n }\n return undefined\n}\n\nexport function createVideoContextBridge(videoId: string): VideoContext {\n const getVideo = () => resolveVideoElementById(videoId)\n return {\n play() {\n getVideo()?.play?.()\n },\n pause() {\n getVideo()?.pause?.()\n },\n stop() {\n const video = getVideo()\n if (!video) {\n return\n }\n video.pause?.()\n try {\n video.currentTime = 0\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n seek(position: number) {\n if (!Number.isFinite(position)) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.currentTime = Math.max(0, position)\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n playbackRate(rate: number) {\n if (!Number.isFinite(rate) || rate <= 0) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.playbackRate = rate\n }\n catch {\n // ignore unsupported playbackRate mutation\n }\n },\n requestFullScreen() {\n const video = getVideo() as (HTMLVideoElement & { requestFullscreen?: () => Promise<void> | void }) | undefined\n video?.requestFullscreen?.()\n },\n exitFullScreen() {\n const runtimeDocument = document as { exitFullscreen?: () => Promise<void> | void }\n runtimeDocument.exitFullscreen?.()\n },\n }\n}\n"],"mappings":";;;AAGA,SAAS,wBAAwB,SAAiB;CAChD,IAAI,OAAO,aAAa,aACtB;CAEF,MAAM,aAAa,OAAO,WAAW,EAAE,CAAC,CAAC,KAAK;CAC9C,IAAI,CAAC,YACH;CAEF,MAAM,aAAa,0BAA4C,SAAS,UAAU;CAClF,IAAI,YACF,OAAO;CAET,MAAM,SAAS,SAAS,eAAe,UAAU;CACjD,IAAI,UAAU,UAAU,UAAU,WAAW,QAC3C,OAAO;CAET,MAAM,UAAU,OAAO,QAAQ,eAAe,OAAO,IAAI,WAAW,aAChE,IAAI,OAAO,UAAU,IACrB,WAAW,QAAQ,MAAM,MAAK;CAClC,MAAM,YAAY,SAAS,cAAc,SAAS,SAAS;CAC3D,IAAI,aAAa,UAAU,aAAa,WAAW,WACjD,OAAO;AAGX;AAEA,SAAgB,yBAAyB,SAA+B;CACtE,MAAM,iBAAiB,wBAAwB,OAAO;CACtD,OAAO;EACL,OAAO;GACL,SAAS,CAAC,EAAE,OAAO;EACrB;EACA,QAAQ;GACN,SAAS,CAAC,EAAE,QAAQ;EACtB;EACA,OAAO;GACL,MAAM,QAAQ,SAAS;GACvB,IAAI,CAAC,OACH;GAEF,MAAM,QAAQ;GACd,IAAI;IACF,MAAM,cAAc;GACtB,QACM,CAEN;EACF;EACA,KAAK,UAAkB;GACrB,IAAI,CAAC,OAAO,SAAS,QAAQ,GAC3B;GAEF,MAAM,QAAQ,SAAS;GACvB,IAAI,CAAC,OACH;GAEF,IAAI;IACF,MAAM,cAAc,KAAK,IAAI,GAAG,QAAQ;GAC1C,QACM,CAEN;EACF;EACA,aAAa,MAAc;GACzB,IAAI,CAAC,OAAO,SAAS,IAAI,KAAK,QAAQ,GACpC;GAEF,MAAM,QAAQ,SAAS;GACvB,IAAI,CAAC,OACH;GAEF,IAAI;IACF,MAAM,eAAe;GACvB,QACM,CAEN;EACF;EACA,oBAAoB;GAElB,AADc,SACV,CAAC,EAAE,oBAAoB;EAC7B;EACA,iBAAiB;GAEf,SAAgB,iBAAiB;EACnC;CACF;AACF"}
@@ -2,26 +2,16 @@
2
2
  function createVkSessionBridge() {
3
3
  let destroyed = false;
4
4
  const listeners = /* @__PURE__ */ new Map();
5
- const ensureAvailable = (action) => {
6
- if (destroyed) throw new TypeError(`createVKSession:fail session is destroyed (${action})`);
5
+ const unavailable = (action) => {
6
+ return Promise.reject(/* @__PURE__ */ new TypeError(`createVKSession:fail session is destroyed (${action})`));
7
7
  };
8
8
  return {
9
9
  start() {
10
- try {
11
- ensureAvailable("start");
12
- } catch (error) {
13
- const message = error instanceof Error ? error.message : String(error);
14
- return Promise.reject(new TypeError(message));
15
- }
10
+ if (destroyed) return unavailable("start");
16
11
  return Promise.resolve({ errMsg: "vkSession.start:ok" });
17
12
  },
18
13
  stop() {
19
- try {
20
- ensureAvailable("stop");
21
- } catch (error) {
22
- const message = error instanceof Error ? error.message : String(error);
23
- return Promise.reject(new TypeError(message));
24
- }
14
+ if (destroyed) return unavailable("stop");
25
15
  return Promise.resolve({ errMsg: "vkSession.stop:ok" });
26
16
  },
27
17
  destroy() {
@@ -1 +1 @@
1
- {"version":3,"file":"vkSession.mjs","names":[],"sources":["../../../src/runtime/polyfill/vkSession.ts"],"sourcesContent":["interface VkSession {\n start: () => Promise<{ errMsg: string }>\n stop: () => Promise<{ errMsg: string }>\n destroy: () => void\n on: (eventName: string, callback: (payload: unknown) => void) => void\n off: (eventName?: string, callback?: (payload: unknown) => void) => void\n}\n\nexport function createVkSessionBridge(): VkSession {\n let destroyed = false\n const listeners = new Map<string, Set<(payload: unknown) => void>>()\n\n const ensureAvailable = (action: string) => {\n if (destroyed) {\n throw new TypeError(`createVKSession:fail session is destroyed (${action})`)\n }\n }\n\n return {\n start() {\n try {\n ensureAvailable('start')\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return Promise.reject(new TypeError(message))\n }\n return Promise.resolve({ errMsg: 'vkSession.start:ok' })\n },\n stop() {\n try {\n ensureAvailable('stop')\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return Promise.reject(new TypeError(message))\n }\n return Promise.resolve({ errMsg: 'vkSession.stop:ok' })\n },\n destroy() {\n destroyed = true\n listeners.clear()\n },\n on(eventName: string, callback: (payload: unknown) => void) {\n if (typeof eventName !== 'string' || typeof callback !== 'function') {\n return\n }\n const key = eventName.trim()\n if (!key) {\n return\n }\n const list = listeners.get(key) ?? new Set<(payload: unknown) => void>()\n list.add(callback)\n listeners.set(key, list)\n },\n off(eventName?: string, callback?: (payload: unknown) => void) {\n if (typeof eventName !== 'string' || !eventName.trim()) {\n listeners.clear()\n return\n }\n const list = listeners.get(eventName.trim())\n if (!list) {\n return\n }\n if (typeof callback !== 'function') {\n listeners.delete(eventName.trim())\n return\n }\n list.delete(callback)\n if (list.size === 0) {\n listeners.delete(eventName.trim())\n }\n },\n }\n}\n"],"mappings":";AAQA,SAAgB,wBAAmC;CACjD,IAAI,YAAY;CAChB,MAAM,4BAAY,IAAI,IAA6C;CAEnE,MAAM,mBAAmB,WAAmB;EAC1C,IAAI,WACF,MAAM,IAAI,UAAU,8CAA8C,OAAO,EAAE;CAE/E;CAEA,OAAO;EACL,QAAQ;GACN,IAAI;IACF,gBAAgB,OAAO;GACzB,SACO,OAAO;IACZ,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;IACrE,OAAO,QAAQ,OAAO,IAAI,UAAU,OAAO,CAAC;GAC9C;GACA,OAAO,QAAQ,QAAQ,EAAE,QAAQ,qBAAqB,CAAC;EACzD;EACA,OAAO;GACL,IAAI;IACF,gBAAgB,MAAM;GACxB,SACO,OAAO;IACZ,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;IACrE,OAAO,QAAQ,OAAO,IAAI,UAAU,OAAO,CAAC;GAC9C;GACA,OAAO,QAAQ,QAAQ,EAAE,QAAQ,oBAAoB,CAAC;EACxD;EACA,UAAU;GACR,YAAY;GACZ,UAAU,MAAM;EAClB;EACA,GAAG,WAAmB,UAAsC;GAC1D,IAAI,OAAO,cAAc,YAAY,OAAO,aAAa,YACvD;GAEF,MAAM,MAAM,UAAU,KAAK;GAC3B,IAAI,CAAC,KACH;GAEF,MAAM,OAAO,UAAU,IAAI,GAAG,qBAAK,IAAI,IAAgC;GACvE,KAAK,IAAI,QAAQ;GACjB,UAAU,IAAI,KAAK,IAAI;EACzB;EACA,IAAI,WAAoB,UAAuC;GAC7D,IAAI,OAAO,cAAc,YAAY,CAAC,UAAU,KAAK,GAAG;IACtD,UAAU,MAAM;IAChB;GACF;GACA,MAAM,OAAO,UAAU,IAAI,UAAU,KAAK,CAAC;GAC3C,IAAI,CAAC,MACH;GAEF,IAAI,OAAO,aAAa,YAAY;IAClC,UAAU,OAAO,UAAU,KAAK,CAAC;IACjC;GACF;GACA,KAAK,OAAO,QAAQ;GACpB,IAAI,KAAK,SAAS,GAChB,UAAU,OAAO,UAAU,KAAK,CAAC;EAErC;CACF;AACF"}
1
+ {"version":3,"file":"vkSession.mjs","names":[],"sources":["../../../src/runtime/polyfill/vkSession.ts"],"sourcesContent":["interface VkSession {\n start: () => Promise<{ errMsg: string }>\n stop: () => Promise<{ errMsg: string }>\n destroy: () => void\n on: (eventName: string, callback: (payload: unknown) => void) => void\n off: (eventName?: string, callback?: (payload: unknown) => void) => void\n}\n\nexport function createVkSessionBridge(): VkSession {\n let destroyed = false\n const listeners = new Map<string, Set<(payload: unknown) => void>>()\n\n const unavailable = (action: string) => {\n return Promise.reject(new TypeError(`createVKSession:fail session is destroyed (${action})`))\n }\n\n return {\n start() {\n if (destroyed) {\n return unavailable('start')\n }\n return Promise.resolve({ errMsg: 'vkSession.start:ok' })\n },\n stop() {\n if (destroyed) {\n return unavailable('stop')\n }\n return Promise.resolve({ errMsg: 'vkSession.stop:ok' })\n },\n destroy() {\n destroyed = true\n listeners.clear()\n },\n on(eventName: string, callback: (payload: unknown) => void) {\n if (typeof eventName !== 'string' || typeof callback !== 'function') {\n return\n }\n const key = eventName.trim()\n if (!key) {\n return\n }\n const list = listeners.get(key) ?? new Set<(payload: unknown) => void>()\n list.add(callback)\n listeners.set(key, list)\n },\n off(eventName?: string, callback?: (payload: unknown) => void) {\n if (typeof eventName !== 'string' || !eventName.trim()) {\n listeners.clear()\n return\n }\n const list = listeners.get(eventName.trim())\n if (!list) {\n return\n }\n if (typeof callback !== 'function') {\n listeners.delete(eventName.trim())\n return\n }\n list.delete(callback)\n if (list.size === 0) {\n listeners.delete(eventName.trim())\n }\n },\n }\n}\n"],"mappings":";AAQA,SAAgB,wBAAmC;CACjD,IAAI,YAAY;CAChB,MAAM,4BAAY,IAAI,IAA6C;CAEnE,MAAM,eAAe,WAAmB;EACtC,OAAO,QAAQ,uBAAO,IAAI,UAAU,8CAA8C,OAAO,EAAE,CAAC;CAC9F;CAEA,OAAO;EACL,QAAQ;GACN,IAAI,WACF,OAAO,YAAY,OAAO;GAE5B,OAAO,QAAQ,QAAQ,EAAE,QAAQ,qBAAqB,CAAC;EACzD;EACA,OAAO;GACL,IAAI,WACF,OAAO,YAAY,MAAM;GAE3B,OAAO,QAAQ,QAAQ,EAAE,QAAQ,oBAAoB,CAAC;EACxD;EACA,UAAU;GACR,YAAY;GACZ,UAAU,MAAM;EAClB;EACA,GAAG,WAAmB,UAAsC;GAC1D,IAAI,OAAO,cAAc,YAAY,OAAO,aAAa,YACvD;GAEF,MAAM,MAAM,UAAU,KAAK;GAC3B,IAAI,CAAC,KACH;GAEF,MAAM,OAAO,UAAU,IAAI,GAAG,qBAAK,IAAI,IAAgC;GACvE,KAAK,IAAI,QAAQ;GACjB,UAAU,IAAI,KAAK,IAAI;EACzB;EACA,IAAI,WAAoB,UAAuC;GAC7D,IAAI,OAAO,cAAc,YAAY,CAAC,UAAU,KAAK,GAAG;IACtD,UAAU,MAAM;IAChB;GACF;GACA,MAAM,OAAO,UAAU,IAAI,UAAU,KAAK,CAAC;GAC3C,IAAI,CAAC,MACH;GAEF,IAAI,OAAO,aAAa,YAAY;IAClC,UAAU,OAAO,UAAU,KAAK,CAAC;IACjC;GACF;GACA,KAAK,OAAO,QAAQ;GACpB,IAAI,KAAK,SAAS,GAChB,UAAU,OAAO,UAAU,KAAK,CAAC;EAErC;CACF;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { authorize, checkSession, getAccountInfoSync, getAppAuthorizeSetting, getAppBaseInfo, getBatteryInfo, getBatteryInfoSync, getDeviceInfo, getFuzzyLocation, getLocation, getMenuButtonBoundingClientRect, getNetworkType, getSetting, getSystemInfo, getSystemInfoSync, getSystemSetting, getUserInfo, getUserProfile, getWindowInfo, login, offNetworkStatusChange, offWindowResize, onNetworkStatusChange, onWindowResize, openAppAuthorizeSetting, openSetting, vibrateShort } from "./polyfill/deviceAuthSystemApi.mjs";
2
2
  import { getEnterOptionsSync, getLaunchOptionsSync, initializePageRoutes, navigateBack, navigateTo, reLaunch, redirectTo, registerApp, registerComponent, registerPage, switchTab } from "./polyfill/routeRuntime.mjs";
3
3
  import { clearStorage, clearStorageSync, createCanvasContext, createSelectorQuery, createVKSession, createVideoContext, createWorker, downloadFile, exitMiniProgram, getFileSystemManager, getStorage, getStorageInfo, getStorageInfoSync, getStorageSync, hideKeyboard, loadSubPackage, navigateToMiniProgram, nextTick, pageScrollTo, preloadSubpackage, removeStorage, removeStorageSync, request, setStorage, setStorageSync, startPullDownRefresh, stopPullDownRefresh, uploadFile } from "./polyfill/runtimeDataApi.mjs";
4
- import { chooseAddress, chooseFile, chooseImage, chooseLocation, chooseMedia, chooseMessageFile, chooseVideo, compressImage, compressVideo, getClipboardData, getImageInfo, getVideoInfo, hideLoading, hideTabBar, makePhoneCall, openCustomerServiceChat, openDocument, openLocation, openVideoEditor, previewImage, previewMedia, requestPayment, requestSubscribeMessage, saveFile, saveFileToDisk, saveImageToPhotosAlbum, saveVideoToPhotosAlbum, scanCode, setClipboardData, showActionSheet, showLoading, showModal, showShareMenu, showTabBar, showToast, updateShareMenu } from "./polyfill/uiMediaApi.mjs";
4
+ import { chooseAddress, chooseFile, chooseImage, chooseLocation, chooseMedia, chooseMessageFile, chooseVideo, compressImage, compressVideo, getClipboardData, getImageInfo, getVideoInfo, hideLoading, hideTabBar, hideTabBarRedDot, makePhoneCall, openCustomerServiceChat, openDocument, openLocation, openVideoEditor, previewImage, previewMedia, removeTabBarBadge, requestPayment, requestSubscribeMessage, saveFile, saveFileToDisk, saveImageToPhotosAlbum, saveVideoToPhotosAlbum, scanCode, setClipboardData, setTabBarBadge, setTabBarItem, setTabBarStyle, showActionSheet, showLoading, showModal, showShareMenu, showTabBar, showTabBarRedDot, showToast, updateShareMenu } from "./polyfill/uiMediaApi.mjs";
5
5
  import { canIUse, createInterstitialAd, createRewardedVideoAd, getExtConfig, getExtConfigSync, getLogManager, getUpdateManager, hideNavigationBarLoading, reportAnalytics, setBackgroundColor, setBackgroundTextStyle, setNavigationBarColor, setNavigationBarTitle, showNavigationBarLoading } from "./polyfill/index.mjs";
6
- export { authorize, canIUse, checkSession, chooseAddress, chooseFile, chooseImage, chooseLocation, chooseMedia, chooseMessageFile, chooseVideo, clearStorage, clearStorageSync, compressImage, compressVideo, createCanvasContext, createInterstitialAd, createRewardedVideoAd, createSelectorQuery, createVKSession, createVideoContext, createWorker, downloadFile, exitMiniProgram, getAccountInfoSync, getAppAuthorizeSetting, getAppBaseInfo, getBatteryInfo, getBatteryInfoSync, getClipboardData, getDeviceInfo, getEnterOptionsSync, getExtConfig, getExtConfigSync, getFileSystemManager, getFuzzyLocation, getImageInfo, getLaunchOptionsSync, getLocation, getLogManager, getMenuButtonBoundingClientRect, getNetworkType, getSetting, getStorage, getStorageInfo, getStorageInfoSync, getStorageSync, getSystemInfo, getSystemInfoSync, getSystemSetting, getUpdateManager, getUserInfo, getUserProfile, getVideoInfo, getWindowInfo, hideKeyboard, hideLoading, hideNavigationBarLoading, hideTabBar, initializePageRoutes, loadSubPackage, login, makePhoneCall, navigateBack, navigateTo, navigateToMiniProgram, nextTick, offNetworkStatusChange, offWindowResize, onNetworkStatusChange, onWindowResize, openAppAuthorizeSetting, openCustomerServiceChat, openDocument, openLocation, openSetting, openVideoEditor, pageScrollTo, preloadSubpackage, previewImage, previewMedia, reLaunch, redirectTo, registerApp, registerComponent, registerPage, removeStorage, removeStorageSync, reportAnalytics, request, requestPayment, requestSubscribeMessage, saveFile, saveFileToDisk, saveImageToPhotosAlbum, saveVideoToPhotosAlbum, scanCode, setBackgroundColor, setBackgroundTextStyle, setClipboardData, setNavigationBarColor, setNavigationBarTitle, setStorage, setStorageSync, showActionSheet, showLoading, showModal, showNavigationBarLoading, showShareMenu, showTabBar, showToast, startPullDownRefresh, stopPullDownRefresh, switchTab, updateShareMenu, uploadFile, vibrateShort };
6
+ export { authorize, canIUse, checkSession, chooseAddress, chooseFile, chooseImage, chooseLocation, chooseMedia, chooseMessageFile, chooseVideo, clearStorage, clearStorageSync, compressImage, compressVideo, createCanvasContext, createInterstitialAd, createRewardedVideoAd, createSelectorQuery, createVKSession, createVideoContext, createWorker, downloadFile, exitMiniProgram, getAccountInfoSync, getAppAuthorizeSetting, getAppBaseInfo, getBatteryInfo, getBatteryInfoSync, getClipboardData, getDeviceInfo, getEnterOptionsSync, getExtConfig, getExtConfigSync, getFileSystemManager, getFuzzyLocation, getImageInfo, getLaunchOptionsSync, getLocation, getLogManager, getMenuButtonBoundingClientRect, getNetworkType, getSetting, getStorage, getStorageInfo, getStorageInfoSync, getStorageSync, getSystemInfo, getSystemInfoSync, getSystemSetting, getUpdateManager, getUserInfo, getUserProfile, getVideoInfo, getWindowInfo, hideKeyboard, hideLoading, hideNavigationBarLoading, hideTabBar, hideTabBarRedDot, initializePageRoutes, loadSubPackage, login, makePhoneCall, navigateBack, navigateTo, navigateToMiniProgram, nextTick, offNetworkStatusChange, offWindowResize, onNetworkStatusChange, onWindowResize, openAppAuthorizeSetting, openCustomerServiceChat, openDocument, openLocation, openSetting, openVideoEditor, pageScrollTo, preloadSubpackage, previewImage, previewMedia, reLaunch, redirectTo, registerApp, registerComponent, registerPage, removeStorage, removeStorageSync, removeTabBarBadge, reportAnalytics, request, requestPayment, requestSubscribeMessage, saveFile, saveFileToDisk, saveImageToPhotosAlbum, saveVideoToPhotosAlbum, scanCode, setBackgroundColor, setBackgroundTextStyle, setClipboardData, setNavigationBarColor, setNavigationBarTitle, setStorage, setStorageSync, setTabBarBadge, setTabBarItem, setTabBarStyle, showActionSheet, showLoading, showModal, showNavigationBarLoading, showShareMenu, showTabBar, showTabBarRedDot, showToast, startPullDownRefresh, stopPullDownRefresh, switchTab, updateShareMenu, uploadFile, vibrateShort };
@@ -27,7 +27,7 @@ function evaluateExpression(expression, scope) {
27
27
  evaluator = () => void 0;
28
28
  } else throw new SyntaxError(`[@weapp-vite/web] 无法解析表达式 "${trimmed}": ${reason}`);
29
29
  }
30
- if (evaluator) expressionCache.set(trimmed, evaluator);
30
+ expressionCache.set(trimmed, evaluator);
31
31
  }
32
32
  try {
33
33
  return evaluator?.(scope);
@@ -1 +1 @@
1
- {"version":3,"file":"renderContext.mjs","names":[],"sources":["../../src/runtime/renderContext.ts"],"sourcesContent":["import type { ComponentPublicInstance } from './component'\nimport type { TemplateScope } from './template'\nimport { getRuntimeExecutionMode, warnRuntimeExecutionOnce } from './execution'\nimport { emitRuntimeWarning } from './warning'\n\nexport interface RenderContext {\n instance: ComponentPublicInstance\n eval: (expression: string, scope: TemplateScope, wxs?: Record<string, any>) => any\n createScope: (parent: TemplateScope, locals?: Record<string, any>) => TemplateScope\n mergeScope: (parent: TemplateScope, data?: any) => TemplateScope\n normalizeList: (value: any) => any[]\n key: (rawKey: string, item: any, index: number, scope: TemplateScope, wxs?: Record<string, any>) => any\n renderTemplate: (templates: Record<string, any>, name: any, scope: TemplateScope, ctx: RenderContext) => any\n event: (eventName: string, handlerName: any, scope: TemplateScope, wxs?: Record<string, any>, flags?: { catch?: boolean, capture?: boolean }) => (event: Event) => void\n createWxsModule: (code: string, id: string, requireMap?: Record<string, any>) => Record<string, any>\n}\n\nconst expressionCache = new Map<string, (scope: TemplateScope) => any>()\nconst MUSTACHE_PREFIX_RE = /^\\{\\{\\s*/\nconst MUSTACHE_SUFFIX_RE = /\\s*\\}\\}$/\nconst SIMPLE_KEY_PATH_RE = /[.[()]/\n\nfunction createScope(initial?: TemplateScope): TemplateScope {\n return Object.assign(Object.create(null), initial ?? {})\n}\n\nfunction createChildScope(parent: TemplateScope, locals?: Record<string, any>): TemplateScope {\n return Object.assign(Object.create(parent), locals ?? {})\n}\n\nfunction evaluateExpression(expression: string, scope: TemplateScope): any {\n if (!expression) {\n return undefined\n }\n const trimmed = expression.trim()\n if (!trimmed) {\n return undefined\n }\n let evaluator = expressionCache.get(trimmed)\n if (!evaluator) {\n try {\n // eslint-disable-next-line no-new-func -- dynamic expressions are required for template evaluation\n evaluator = new Function('scope', `with(scope){ return (${trimmed}); }`) as (scope: TemplateScope) => any\n }\n catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n const mode = getRuntimeExecutionMode()\n if (mode === 'safe') {\n warnRuntimeExecutionOnce(\n `safe-expression-parse:${trimmed}`,\n `[@weapp-vite/web] safe 模式下忽略表达式解析错误 \"${trimmed}\": ${reason}`,\n )\n evaluator = () => undefined\n }\n else {\n throw new SyntaxError(`[@weapp-vite/web] 无法解析表达式 \"${trimmed}\": ${reason}`)\n }\n }\n if (evaluator) {\n expressionCache.set(trimmed, evaluator)\n }\n }\n try {\n return evaluator?.(scope)\n }\n catch (error) {\n const mode = getRuntimeExecutionMode()\n if (mode === 'strict') {\n const reason = error instanceof Error ? error.message : String(error)\n throw new Error(`[@weapp-vite/web] strict 模式下表达式执行失败 \"${trimmed}\": ${reason}`)\n }\n if (mode === 'safe') {\n const reason = error instanceof Error ? error.message : String(error)\n warnRuntimeExecutionOnce(\n `safe-expression-runtime:${trimmed}`,\n `[@weapp-vite/web] safe 模式下忽略表达式执行错误 \"${trimmed}\": ${reason}`,\n )\n }\n return undefined\n }\n}\n\nfunction normalizeList(value: any): any[] {\n if (Array.isArray(value)) {\n return value\n }\n if (value == null) {\n return []\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n const length = Math.max(0, Math.floor(value))\n return Array.from({ length }, (_, index) => index)\n }\n if (typeof value === 'object') {\n return Object.values(value)\n }\n return []\n}\n\nfunction normalizeKey(rawKey: string, item: any, index: number, scope: TemplateScope): any {\n const key = rawKey?.trim()\n if (!key) {\n if (item != null && (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean')) {\n return item\n }\n return index\n }\n if (key === '*this') {\n return item\n }\n if (key.includes('{{') && key.includes('}}')) {\n const expr = key.replace(MUSTACHE_PREFIX_RE, '').replace(MUSTACHE_SUFFIX_RE, '')\n return evaluateExpression(expr, scope)\n }\n if (!SIMPLE_KEY_PATH_RE.test(key) && item && typeof item === 'object' && key in item) {\n return (item as Record<string, any>)[key]\n }\n return evaluateExpression(key, scope)\n}\n\nfunction createEventHandler(\n instance: ComponentPublicInstance,\n methods: Record<string, (event: any) => any>,\n eventName: string,\n handlerRef: string | ((event: any) => any),\n flags?: { catch?: boolean },\n) {\n const handler = typeof handlerRef === 'function'\n ? handlerRef\n : methods[handlerRef] ?? (instance as Record<string, any>)[handlerRef]\n if (typeof handler !== 'function') {\n return () => {}\n }\n return (nativeEvent: Event) => {\n if (flags?.catch) {\n nativeEvent.stopPropagation()\n }\n const target = nativeEvent.target as HTMLElement | null\n const currentTarget = nativeEvent.currentTarget as HTMLElement | null\n const dataset = currentTarget?.dataset ?? {}\n const syntheticEvent = {\n type: eventName,\n timeStamp: nativeEvent.timeStamp,\n detail: (nativeEvent as CustomEvent).detail ?? (nativeEvent as InputEvent).data ?? undefined,\n target: {\n dataset: target?.dataset ?? dataset,\n },\n currentTarget: {\n dataset,\n },\n originalEvent: nativeEvent,\n }\n handler.call(instance, syntheticEvent)\n }\n}\n\nfunction createWxsModule(code: string, id: string, requireMap?: Record<string, any>) {\n const module = { exports: {} as Record<string, any> }\n const exports = module.exports\n const getRegExp = (pattern: string, flags?: string) => new RegExp(pattern, flags)\n const getDate = (value?: string | number | Date) => (value == null ? new Date() : new Date(value))\n const require = (request: string) => requireMap?.[request]\n try {\n // eslint-disable-next-line no-new-func -- run in isolated module scope\n const runner = new Function('module', 'exports', 'require', 'getRegExp', 'getDate', code)\n runner(module, exports, require, getRegExp, getDate)\n }\n catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n const mode = getRuntimeExecutionMode()\n if (mode === 'safe') {\n warnRuntimeExecutionOnce(\n `safe-wxs-runtime:${id}`,\n `[@weapp-vite/web] safe 模式下忽略 WXS 执行错误: ${id} ${reason}`,\n )\n return {}\n }\n throw new Error(`[@weapp-vite/web] WXS 执行失败: ${id} ${reason}`)\n }\n return module.exports\n}\n\nexport function createRenderContext(\n instance: ComponentPublicInstance,\n methods: Record<string, (event: any) => any>,\n): RenderContext {\n const warnMissingTemplate = (name: string) => {\n emitRuntimeWarning(`[@weapp-vite/web] 未找到模板: ${name}`, {\n key: `template-missing:${name}`,\n context: 'runtime:template',\n })\n }\n\n return {\n instance,\n eval: (expression, scope, wxs) => {\n const baseScope = scope ?? createScope()\n const renderScope = wxs ? createChildScope(baseScope, wxs) : baseScope\n return evaluateExpression(expression, renderScope)\n },\n createScope: (parent, locals) => createChildScope(parent, locals),\n mergeScope: (parent, data) => {\n const baseScope = parent ?? createScope()\n if (!data || typeof data !== 'object') {\n return baseScope\n }\n return createChildScope(baseScope, data as Record<string, any>)\n },\n normalizeList,\n key: (rawKey, item, index, scope, wxs) => {\n const baseScope = scope ?? createScope()\n const renderScope = wxs ? createChildScope(baseScope, wxs) : baseScope\n return normalizeKey(rawKey, item, index, renderScope)\n },\n renderTemplate: (templates, name, scope, ctx) => {\n const resolvedName = typeof name === 'string' ? name : String(name)\n const template = templates?.[resolvedName]\n if (typeof template !== 'function') {\n warnMissingTemplate(resolvedName)\n return ''\n }\n return template(scope, ctx)\n },\n event: (eventName, handlerName, _scope, _wxs, flags) => {\n if (typeof handlerName === 'function') {\n return createEventHandler(instance, methods, eventName, handlerName, flags)\n }\n const resolvedHandler = String(handlerName ?? '')\n return createEventHandler(instance, methods, eventName, resolvedHandler, flags)\n },\n createWxsModule,\n }\n}\n\nexport { createChildScope, createScope, evaluateExpression }\n"],"mappings":"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"}
1
+ {"version":3,"file":"renderContext.mjs","names":[],"sources":["../../src/runtime/renderContext.ts"],"sourcesContent":["import type { ComponentPublicInstance } from './component'\nimport type { TemplateScope } from './template'\nimport { getRuntimeExecutionMode, warnRuntimeExecutionOnce } from './execution'\nimport { emitRuntimeWarning } from './warning'\n\nexport interface RenderContext {\n instance: ComponentPublicInstance\n eval: (expression: string, scope: TemplateScope, wxs?: Record<string, any>) => any\n createScope: (parent: TemplateScope, locals?: Record<string, any>) => TemplateScope\n mergeScope: (parent: TemplateScope, data?: any) => TemplateScope\n normalizeList: (value: any) => any[]\n key: (rawKey: string, item: any, index: number, scope: TemplateScope, wxs?: Record<string, any>) => any\n renderTemplate: (templates: Record<string, any>, name: any, scope: TemplateScope, ctx: RenderContext) => any\n event: (eventName: string, handlerName: any, scope: TemplateScope, wxs?: Record<string, any>, flags?: { catch?: boolean, capture?: boolean }) => (event: Event) => void\n createWxsModule: (code: string, id: string, requireMap?: Record<string, any>) => Record<string, any>\n}\n\nconst expressionCache = new Map<string, (scope: TemplateScope) => any>()\nconst MUSTACHE_PREFIX_RE = /^\\{\\{\\s*/\nconst MUSTACHE_SUFFIX_RE = /\\s*\\}\\}$/\nconst SIMPLE_KEY_PATH_RE = /[.[()]/\n\nfunction createScope(initial?: TemplateScope): TemplateScope {\n return Object.assign(Object.create(null), initial ?? {})\n}\n\nfunction createChildScope(parent: TemplateScope, locals?: Record<string, any>): TemplateScope {\n return Object.assign(Object.create(parent), locals ?? {})\n}\n\nfunction evaluateExpression(expression: string, scope: TemplateScope): any {\n if (!expression) {\n return undefined\n }\n const trimmed = expression.trim()\n if (!trimmed) {\n return undefined\n }\n let evaluator = expressionCache.get(trimmed)\n if (!evaluator) {\n try {\n // eslint-disable-next-line no-new-func -- dynamic expressions are required for template evaluation\n evaluator = new Function('scope', `with(scope){ return (${trimmed}); }`) as (scope: TemplateScope) => any\n }\n catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n const mode = getRuntimeExecutionMode()\n if (mode === 'safe') {\n warnRuntimeExecutionOnce(\n `safe-expression-parse:${trimmed}`,\n `[@weapp-vite/web] safe 模式下忽略表达式解析错误 \"${trimmed}\": ${reason}`,\n )\n evaluator = () => undefined\n }\n else {\n throw new SyntaxError(`[@weapp-vite/web] 无法解析表达式 \"${trimmed}\": ${reason}`)\n }\n }\n expressionCache.set(trimmed, evaluator)\n }\n try {\n return evaluator?.(scope)\n }\n catch (error) {\n const mode = getRuntimeExecutionMode()\n if (mode === 'strict') {\n const reason = error instanceof Error ? error.message : String(error)\n throw new Error(`[@weapp-vite/web] strict 模式下表达式执行失败 \"${trimmed}\": ${reason}`)\n }\n if (mode === 'safe') {\n const reason = error instanceof Error ? error.message : String(error)\n warnRuntimeExecutionOnce(\n `safe-expression-runtime:${trimmed}`,\n `[@weapp-vite/web] safe 模式下忽略表达式执行错误 \"${trimmed}\": ${reason}`,\n )\n }\n return undefined\n }\n}\n\nfunction normalizeList(value: any): any[] {\n if (Array.isArray(value)) {\n return value\n }\n if (value == null) {\n return []\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n const length = Math.max(0, Math.floor(value))\n return Array.from({ length }, (_, index) => index)\n }\n if (typeof value === 'object') {\n return Object.values(value)\n }\n return []\n}\n\nfunction normalizeKey(rawKey: string, item: any, index: number, scope: TemplateScope): any {\n const key = rawKey?.trim()\n if (!key) {\n if (item != null && (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean')) {\n return item\n }\n return index\n }\n if (key === '*this') {\n return item\n }\n if (key.includes('{{') && key.includes('}}')) {\n const expr = key.replace(MUSTACHE_PREFIX_RE, '').replace(MUSTACHE_SUFFIX_RE, '')\n return evaluateExpression(expr, scope)\n }\n if (!SIMPLE_KEY_PATH_RE.test(key) && item && typeof item === 'object' && key in item) {\n return (item as Record<string, any>)[key]\n }\n return evaluateExpression(key, scope)\n}\n\nfunction createEventHandler(\n instance: ComponentPublicInstance,\n methods: Record<string, (event: any) => any>,\n eventName: string,\n handlerRef: string | ((event: any) => any),\n flags?: { catch?: boolean },\n) {\n const handler = typeof handlerRef === 'function'\n ? handlerRef\n : methods[handlerRef] ?? (instance as Record<string, any>)[handlerRef]\n if (typeof handler !== 'function') {\n return () => {}\n }\n return (nativeEvent: Event) => {\n if (flags?.catch) {\n nativeEvent.stopPropagation()\n }\n const target = nativeEvent.target as HTMLElement | null\n const currentTarget = nativeEvent.currentTarget as HTMLElement | null\n const dataset = currentTarget?.dataset ?? {}\n const syntheticEvent = {\n type: eventName,\n timeStamp: nativeEvent.timeStamp,\n detail: (nativeEvent as CustomEvent).detail ?? (nativeEvent as InputEvent).data ?? undefined,\n target: {\n dataset: target?.dataset ?? dataset,\n },\n currentTarget: {\n dataset,\n },\n originalEvent: nativeEvent,\n }\n handler.call(instance, syntheticEvent)\n }\n}\n\nfunction createWxsModule(code: string, id: string, requireMap?: Record<string, any>) {\n const module = { exports: {} as Record<string, any> }\n const exports = module.exports\n const getRegExp = (pattern: string, flags?: string) => new RegExp(pattern, flags)\n const getDate = (value?: string | number | Date) => (value == null ? new Date() : new Date(value))\n const require = (request: string) => requireMap?.[request]\n try {\n // eslint-disable-next-line no-new-func -- run in isolated module scope\n const runner = new Function('module', 'exports', 'require', 'getRegExp', 'getDate', code)\n runner(module, exports, require, getRegExp, getDate)\n }\n catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n const mode = getRuntimeExecutionMode()\n if (mode === 'safe') {\n warnRuntimeExecutionOnce(\n `safe-wxs-runtime:${id}`,\n `[@weapp-vite/web] safe 模式下忽略 WXS 执行错误: ${id} ${reason}`,\n )\n return {}\n }\n throw new Error(`[@weapp-vite/web] WXS 执行失败: ${id} ${reason}`)\n }\n return module.exports\n}\n\nexport function createRenderContext(\n instance: ComponentPublicInstance,\n methods: Record<string, (event: any) => any>,\n): RenderContext {\n const warnMissingTemplate = (name: string) => {\n emitRuntimeWarning(`[@weapp-vite/web] 未找到模板: ${name}`, {\n key: `template-missing:${name}`,\n context: 'runtime:template',\n })\n }\n\n return {\n instance,\n eval: (expression, scope, wxs) => {\n const baseScope = scope ?? createScope()\n const renderScope = wxs ? createChildScope(baseScope, wxs) : baseScope\n return evaluateExpression(expression, renderScope)\n },\n createScope: (parent, locals) => createChildScope(parent, locals),\n mergeScope: (parent, data) => {\n const baseScope = parent ?? createScope()\n if (!data || typeof data !== 'object') {\n return baseScope\n }\n return createChildScope(baseScope, data as Record<string, any>)\n },\n normalizeList,\n key: (rawKey, item, index, scope, wxs) => {\n const baseScope = scope ?? createScope()\n const renderScope = wxs ? createChildScope(baseScope, wxs) : baseScope\n return normalizeKey(rawKey, item, index, renderScope)\n },\n renderTemplate: (templates, name, scope, ctx) => {\n const resolvedName = typeof name === 'string' ? name : String(name)\n const template = templates?.[resolvedName]\n if (typeof template !== 'function') {\n warnMissingTemplate(resolvedName)\n return ''\n }\n return template(scope, ctx)\n },\n event: (eventName, handlerName, _scope, _wxs, flags) => {\n if (typeof handlerName === 'function') {\n return createEventHandler(instance, methods, eventName, handlerName, flags)\n }\n const resolvedHandler = String(handlerName ?? '')\n return createEventHandler(instance, methods, eventName, resolvedHandler, flags)\n },\n createWxsModule,\n }\n}\n\nexport { createChildScope, createScope, evaluateExpression }\n"],"mappings":"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"}
@@ -1,22 +1,31 @@
1
+ import { getWebViewportWidth } from "./viewport/index.mjs";
2
+
1
3
  //#region src/runtime/rpx.ts
2
4
  const DEFAULT_DESIGN_WIDTH = 750;
3
5
  const DEFAULT_VAR_NAME = "--rpx";
4
6
  let initialized = false;
7
+ let activeConfig = {
8
+ designWidth: DEFAULT_DESIGN_WIDTH,
9
+ varName: DEFAULT_VAR_NAME
10
+ };
5
11
  function computeRpx(designWidth) {
6
12
  if (typeof window === "undefined") return 0;
7
- return (document.documentElement?.clientWidth ?? window.innerWidth) / designWidth;
13
+ return getWebViewportWidth() / designWidth;
14
+ }
15
+ function applyRpx() {
16
+ const root = document.documentElement;
17
+ const value = computeRpx(activeConfig.designWidth);
18
+ root.style.setProperty(activeConfig.varName, `${value}px`);
8
19
  }
9
20
  function setupRpx(config) {
10
21
  if (typeof document === "undefined") return;
11
- const designWidth = config?.designWidth ?? DEFAULT_DESIGN_WIDTH;
12
- const varName = config?.varName ?? DEFAULT_VAR_NAME;
13
- const root = document.documentElement;
14
- const apply = () => {
15
- const value = computeRpx(designWidth);
16
- root.style.setProperty(varName, `${value}px`);
22
+ activeConfig = {
23
+ designWidth: config?.designWidth ?? DEFAULT_DESIGN_WIDTH,
24
+ varName: config?.varName ?? DEFAULT_VAR_NAME
17
25
  };
26
+ const apply = () => applyRpx();
18
27
  apply();
19
- if (!initialized) {
28
+ if (!initialized && typeof window !== "undefined") {
20
29
  initialized = true;
21
30
  window.addEventListener("resize", apply);
22
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rpx.mjs","names":[],"sources":["../../src/runtime/rpx.ts"],"sourcesContent":["export interface RpxConfig {\n designWidth?: number\n varName?: string\n}\n\nconst DEFAULT_DESIGN_WIDTH = 750\nconst DEFAULT_VAR_NAME = '--rpx'\nlet initialized = false\n\nfunction computeRpx(designWidth: number) {\n if (typeof window === 'undefined') {\n return 0\n }\n const width = document.documentElement?.clientWidth ?? window.innerWidth\n return width / designWidth\n}\n\nexport function setupRpx(config?: RpxConfig) {\n if (typeof document === 'undefined') {\n return\n }\n const designWidth = config?.designWidth ?? DEFAULT_DESIGN_WIDTH\n const varName = config?.varName ?? DEFAULT_VAR_NAME\n const root = document.documentElement\n const apply = () => {\n const value = computeRpx(designWidth)\n root.style.setProperty(varName, `${value}px`)\n }\n apply()\n if (!initialized) {\n initialized = true\n window.addEventListener('resize', apply)\n }\n}\n"],"mappings":";AAKA,MAAM,uBAAuB;AAC7B,MAAM,mBAAmB;AACzB,IAAI,cAAc;AAElB,SAAS,WAAW,aAAqB;CACvC,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,QADc,SAAS,iBAAiB,eAAe,OAAO,cAC/C;AACjB;AAEA,SAAgB,SAAS,QAAoB;CAC3C,IAAI,OAAO,aAAa,aACtB;CAEF,MAAM,cAAc,QAAQ,eAAe;CAC3C,MAAM,UAAU,QAAQ,WAAW;CACnC,MAAM,OAAO,SAAS;CACtB,MAAM,cAAc;EAClB,MAAM,QAAQ,WAAW,WAAW;EACpC,KAAK,MAAM,YAAY,SAAS,GAAG,MAAM,GAAG;CAC9C;CACA,MAAM;CACN,IAAI,CAAC,aAAa;EAChB,cAAc;EACd,OAAO,iBAAiB,UAAU,KAAK;CACzC;AACF"}
1
+ {"version":3,"file":"rpx.mjs","names":[],"sources":["../../src/runtime/rpx.ts"],"sourcesContent":["import { getWebViewportWidth } from './viewport'\n\nexport interface RpxConfig {\n designWidth?: number\n varName?: string\n}\n\nconst DEFAULT_DESIGN_WIDTH = 750\nconst DEFAULT_VAR_NAME = '--rpx'\nlet initialized = false\nlet activeConfig = {\n designWidth: DEFAULT_DESIGN_WIDTH,\n varName: DEFAULT_VAR_NAME,\n}\n\nfunction computeRpx(designWidth: number) {\n if (typeof window === 'undefined') {\n return 0\n }\n const width = getWebViewportWidth()\n return width / designWidth\n}\n\nfunction applyRpx() {\n const root = document.documentElement\n const value = computeRpx(activeConfig.designWidth)\n root.style.setProperty(activeConfig.varName, `${value}px`)\n}\n\nexport function setupRpx(config?: RpxConfig) {\n if (typeof document === 'undefined') {\n return\n }\n activeConfig = {\n designWidth: config?.designWidth ?? DEFAULT_DESIGN_WIDTH,\n varName: config?.varName ?? DEFAULT_VAR_NAME,\n }\n const apply = () => applyRpx()\n apply()\n if (!initialized && typeof window !== 'undefined') {\n initialized = true\n window.addEventListener('resize', apply)\n }\n}\n"],"mappings":";;;AAOA,MAAM,uBAAuB;AAC7B,MAAM,mBAAmB;AACzB,IAAI,cAAc;AAClB,IAAI,eAAe;CACjB,aAAa;CACb,SAAS;AACX;AAEA,SAAS,WAAW,aAAqB;CACvC,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,OADc,oBACH,IAAI;AACjB;AAEA,SAAS,WAAW;CAClB,MAAM,OAAO,SAAS;CACtB,MAAM,QAAQ,WAAW,aAAa,WAAW;CACjD,KAAK,MAAM,YAAY,aAAa,SAAS,GAAG,MAAM,GAAG;AAC3D;AAEA,SAAgB,SAAS,QAAoB;CAC3C,IAAI,OAAO,aAAa,aACtB;CAEF,eAAe;EACb,aAAa,QAAQ,eAAe;EACpC,SAAS,QAAQ,WAAW;CAC9B;CACA,MAAM,cAAc,SAAS;CAC7B,MAAM;CACN,IAAI,CAAC,eAAe,OAAO,WAAW,aAAa;EACjD,cAAc;EACd,OAAO,iBAAiB,UAAU,KAAK;CACzC;AACF"}
@@ -0,0 +1,31 @@
1
+ //#region src/runtime/seo/index.d.ts
2
+ type WebResourceHintRelation = 'preconnect' | 'dns-prefetch' | 'prefetch' | 'preload';
3
+ interface WebResourceHint {
4
+ href: string;
5
+ rel: WebResourceHintRelation;
6
+ as?: string;
7
+ type?: string;
8
+ crossOrigin?: 'anonymous' | 'use-credentials';
9
+ }
10
+ interface WebResourceHintsConfig {
11
+ links?: WebResourceHint[];
12
+ }
13
+ interface WebSeoConfig {
14
+ enabled?: boolean;
15
+ defaultTitle?: string;
16
+ titleTemplate?: string;
17
+ description?: string;
18
+ canonical?: boolean;
19
+ }
20
+ interface WebPageHead {
21
+ route?: string;
22
+ title?: string;
23
+ }
24
+ declare function configureWebSeo(next?: WebSeoConfig): void;
25
+ declare function syncWebDocumentHead(head: WebPageHead): void;
26
+ declare function updateWebDocumentTitle(title: string): void;
27
+ declare function setupWebResourceHints(config?: WebResourceHintsConfig): void;
28
+ declare function resetWebDocumentHead(): void;
29
+ //#endregion
30
+ export { WebPageHead, WebResourceHint, WebResourceHintRelation, WebResourceHintsConfig, type WebSeoConfig as WebRuntimeSeoConfig, WebSeoConfig, configureWebSeo, resetWebDocumentHead, setupWebResourceHints, syncWebDocumentHead, updateWebDocumentTitle };
31
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,94 @@
1
+ //#region src/runtime/seo/index.ts
2
+ const HEAD_MARKER = "data-weapp-web-head";
3
+ const HEAD_OWNER = "weapp-web-runtime";
4
+ let seoConfig = { enabled: false };
5
+ function getDocument() {
6
+ return typeof document === "undefined" ? void 0 : document;
7
+ }
8
+ function findOrCreateMeta(documentRef, name) {
9
+ const selector = `meta[${HEAD_MARKER}="${HEAD_OWNER}"][name="${name}"]`;
10
+ const existing = documentRef.head?.querySelector(selector);
11
+ if (existing) return existing;
12
+ const meta = documentRef.createElement("meta");
13
+ meta.setAttribute("name", name);
14
+ meta.setAttribute(HEAD_MARKER, HEAD_OWNER);
15
+ documentRef.head?.append(meta);
16
+ return meta;
17
+ }
18
+ function resolveTitle(title, route) {
19
+ const raw = title || seoConfig.defaultTitle || route || "";
20
+ if (!seoConfig.titleTemplate || !raw) return raw;
21
+ return seoConfig.titleTemplate.includes("%s") ? seoConfig.titleTemplate.replaceAll("%s", raw) : `${raw}${seoConfig.titleTemplate}`;
22
+ }
23
+ function resolveCanonicalUrl() {
24
+ if (typeof window === "undefined" || !window.location) return;
25
+ try {
26
+ const url = new URL(window.location.href);
27
+ url.search = "";
28
+ url.hash = "";
29
+ return url.href;
30
+ } catch {
31
+ return;
32
+ }
33
+ }
34
+ function configureWebSeo(next) {
35
+ seoConfig = next ? {
36
+ enabled: next.enabled !== false,
37
+ ...next
38
+ } : { enabled: false };
39
+ const documentRef = getDocument();
40
+ if (!documentRef || seoConfig.enabled === false) return;
41
+ if (seoConfig.description !== void 0) findOrCreateMeta(documentRef, "description").content = seoConfig.description;
42
+ }
43
+ function syncWebDocumentHead(head) {
44
+ const documentRef = getDocument();
45
+ if (!documentRef || seoConfig.enabled === false) return;
46
+ const title = resolveTitle(head.title, head.route);
47
+ if (title) documentRef.title = title;
48
+ if (seoConfig.description !== void 0) findOrCreateMeta(documentRef, "description").content = seoConfig.description;
49
+ if (seoConfig.canonical !== false) {
50
+ const canonical = resolveCanonicalUrl();
51
+ if (canonical && documentRef.head) {
52
+ let link = documentRef.head.querySelector(`link[${HEAD_MARKER}="${HEAD_OWNER}"][rel="canonical"]`);
53
+ if (!link) {
54
+ link = documentRef.createElement("link");
55
+ link.rel = "canonical";
56
+ link.setAttribute(HEAD_MARKER, HEAD_OWNER);
57
+ documentRef.head.append(link);
58
+ }
59
+ link.href = canonical;
60
+ }
61
+ }
62
+ }
63
+ function updateWebDocumentTitle(title) {
64
+ syncWebDocumentHead({ title });
65
+ }
66
+ function setupWebResourceHints(config) {
67
+ const documentRef = getDocument();
68
+ if (!documentRef?.head || !config?.links?.length) return;
69
+ for (const hint of config.links) {
70
+ if (!hint || typeof hint.href !== "string" || !hint.href || typeof hint.rel !== "string") continue;
71
+ const selector = `link[${HEAD_MARKER}="${HEAD_OWNER}"][rel="${hint.rel}"][href="${hint.href}"]`;
72
+ let link = documentRef.head.querySelector(selector);
73
+ if (!link) {
74
+ link = documentRef.createElement("link");
75
+ link.rel = hint.rel;
76
+ link.href = hint.href;
77
+ link.setAttribute(HEAD_MARKER, HEAD_OWNER);
78
+ documentRef.head.append(link);
79
+ }
80
+ if (hint.as) link.as = hint.as;
81
+ if (hint.type) link.type = hint.type;
82
+ if (hint.crossOrigin) link.crossOrigin = hint.crossOrigin;
83
+ }
84
+ }
85
+ function resetWebDocumentHead() {
86
+ const documentRef = getDocument();
87
+ if (!documentRef?.head) return;
88
+ documentRef.head.querySelectorAll(`[${HEAD_MARKER}="${HEAD_OWNER}"]`).forEach((node) => node.remove());
89
+ seoConfig = { enabled: false };
90
+ }
91
+
92
+ //#endregion
93
+ export { configureWebSeo, resetWebDocumentHead, setupWebResourceHints, syncWebDocumentHead, updateWebDocumentTitle };
94
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/runtime/seo/index.ts"],"sourcesContent":["export type WebResourceHintRelation = 'preconnect' | 'dns-prefetch' | 'prefetch' | 'preload'\n\nexport interface WebResourceHint {\n href: string\n rel: WebResourceHintRelation\n as?: string\n type?: string\n crossOrigin?: 'anonymous' | 'use-credentials'\n}\n\nexport interface WebResourceHintsConfig {\n links?: WebResourceHint[]\n}\n\nexport interface WebSeoConfig {\n enabled?: boolean\n defaultTitle?: string\n titleTemplate?: string\n description?: string\n canonical?: boolean\n}\n\nexport interface WebPageHead {\n route?: string\n title?: string\n}\n\nconst HEAD_MARKER = 'data-weapp-web-head'\nconst HEAD_OWNER = 'weapp-web-runtime'\nlet seoConfig: WebSeoConfig = { enabled: false }\n\nfunction getDocument(): Document | undefined {\n return typeof document === 'undefined' ? undefined : document\n}\n\nfunction findOrCreateMeta(documentRef: Document, name: string) {\n const selector = `meta[${HEAD_MARKER}=\"${HEAD_OWNER}\"][name=\"${name}\"]`\n const existing = documentRef.head?.querySelector(selector) as HTMLMetaElement | null\n if (existing) {\n return existing\n }\n const meta = documentRef.createElement('meta')\n meta.setAttribute('name', name)\n meta.setAttribute(HEAD_MARKER, HEAD_OWNER)\n documentRef.head?.append(meta)\n return meta\n}\n\nfunction resolveTitle(title: string | undefined, route: string | undefined) {\n const raw = title || seoConfig.defaultTitle || route || ''\n if (!seoConfig.titleTemplate || !raw) {\n return raw\n }\n return seoConfig.titleTemplate.includes('%s')\n ? seoConfig.titleTemplate.replaceAll('%s', raw)\n : `${raw}${seoConfig.titleTemplate}`\n}\n\nfunction resolveCanonicalUrl() {\n if (typeof window === 'undefined' || !window.location) {\n return undefined\n }\n try {\n const url = new URL(window.location.href)\n url.search = ''\n url.hash = ''\n return url.href\n }\n catch {\n return undefined\n }\n}\n\nexport function configureWebSeo(next?: WebSeoConfig) {\n seoConfig = next\n ? { enabled: next.enabled !== false, ...next }\n : { enabled: false }\n const documentRef = getDocument()\n if (!documentRef || seoConfig.enabled === false) {\n return\n }\n if (seoConfig.description !== undefined) {\n findOrCreateMeta(documentRef, 'description').content = seoConfig.description\n }\n}\n\nexport function syncWebDocumentHead(head: WebPageHead) {\n const documentRef = getDocument()\n if (!documentRef || seoConfig.enabled === false) {\n return\n }\n const title = resolveTitle(head.title, head.route)\n if (title) {\n documentRef.title = title\n }\n if (seoConfig.description !== undefined) {\n findOrCreateMeta(documentRef, 'description').content = seoConfig.description\n }\n if (seoConfig.canonical !== false) {\n const canonical = resolveCanonicalUrl()\n if (canonical && documentRef.head) {\n let link = documentRef.head.querySelector(`link[${HEAD_MARKER}=\"${HEAD_OWNER}\"][rel=\"canonical\"]`) as HTMLLinkElement | null\n if (!link) {\n link = documentRef.createElement('link')\n link.rel = 'canonical'\n link.setAttribute(HEAD_MARKER, HEAD_OWNER)\n documentRef.head.append(link)\n }\n link.href = canonical\n }\n }\n}\n\nexport function updateWebDocumentTitle(title: string) {\n syncWebDocumentHead({ title })\n}\n\nexport function setupWebResourceHints(config?: WebResourceHintsConfig) {\n const documentRef = getDocument()\n if (!documentRef?.head || !config?.links?.length) {\n return\n }\n for (const hint of config.links) {\n if (!hint || typeof hint.href !== 'string' || !hint.href || typeof hint.rel !== 'string') {\n continue\n }\n const selector = `link[${HEAD_MARKER}=\"${HEAD_OWNER}\"][rel=\"${hint.rel}\"][href=\"${hint.href}\"]`\n let link = documentRef.head.querySelector(selector) as HTMLLinkElement | null\n if (!link) {\n link = documentRef.createElement('link')\n link.rel = hint.rel\n link.href = hint.href\n link.setAttribute(HEAD_MARKER, HEAD_OWNER)\n documentRef.head.append(link)\n }\n if (hint.as) {\n link.as = hint.as\n }\n if (hint.type) {\n link.type = hint.type\n }\n if (hint.crossOrigin) {\n link.crossOrigin = hint.crossOrigin\n }\n }\n}\n\nexport function resetWebDocumentHead() {\n const documentRef = getDocument()\n if (!documentRef?.head) {\n return\n }\n documentRef.head.querySelectorAll(`[${HEAD_MARKER}=\"${HEAD_OWNER}\"]`).forEach(node => node.remove())\n seoConfig = { enabled: false }\n}\n\nexport type { WebSeoConfig as WebRuntimeSeoConfig }\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ResolvedWebViewportConfig, WebViewportConfig } from "./types.mjs";
2
+ //#region src/runtime/viewport/index.d.ts
3
+ declare function resolveWebViewportConfig(config?: WebViewportConfig): ResolvedWebViewportConfig;
4
+ declare function setupWebViewport(config?: WebViewportConfig): {
5
+ mode: "mini-program" | "responsive";
6
+ maxWidth: number;
7
+ desktopBreakpoint: number;
8
+ };
9
+ declare function getWebViewportWidth(): number;
10
+ //#endregion
11
+ export { type ResolvedWebViewportConfig, type WebViewportConfig, getWebViewportWidth, resolveWebViewportConfig, setupWebViewport };
12
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,44 @@
1
+ import { WEB_VIEWPORT_STYLE_ID, createWebViewportStyle } from "./style.mjs";
2
+
3
+ //#region src/runtime/viewport/index.ts
4
+ const DEFAULT_VIEWPORT_CONFIG = {
5
+ mode: "mini-program",
6
+ maxWidth: 375,
7
+ desktopBreakpoint: 600
8
+ };
9
+ let resolvedConfig = { ...DEFAULT_VIEWPORT_CONFIG };
10
+ function resolvePositiveNumber(value, fallback) {
11
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : fallback;
12
+ }
13
+ function resolveWebViewportConfig(config) {
14
+ return {
15
+ mode: config?.mode === "responsive" ? "responsive" : "mini-program",
16
+ maxWidth: resolvePositiveNumber(config?.maxWidth, DEFAULT_VIEWPORT_CONFIG.maxWidth),
17
+ desktopBreakpoint: resolvePositiveNumber(config?.desktopBreakpoint, DEFAULT_VIEWPORT_CONFIG.desktopBreakpoint)
18
+ };
19
+ }
20
+ function setupWebViewport(config) {
21
+ resolvedConfig = resolveWebViewportConfig(config);
22
+ if (typeof document === "undefined") return resolvedConfig;
23
+ document.documentElement?.setAttribute("data-weapp-viewport-mode", resolvedConfig.mode);
24
+ let style = document.querySelector(`#${WEB_VIEWPORT_STYLE_ID}`);
25
+ if (!style) {
26
+ style = document.createElement("style");
27
+ style.id = WEB_VIEWPORT_STYLE_ID;
28
+ document.head?.append(style);
29
+ }
30
+ style.textContent = createWebViewportStyle(resolvedConfig);
31
+ return resolvedConfig;
32
+ }
33
+ function getWebViewportWidth() {
34
+ if (typeof document === "undefined") return 0;
35
+ const containerWidth = document.querySelector("#app")?.clientWidth ?? 0;
36
+ if (containerWidth > 0) return containerWidth;
37
+ const documentWidth = document.documentElement?.clientWidth ?? 0;
38
+ if (resolvedConfig.mode === "mini-program" && documentWidth >= resolvedConfig.desktopBreakpoint) return Math.min(documentWidth, resolvedConfig.maxWidth);
39
+ return documentWidth || (typeof window !== "undefined" ? window.innerWidth : 0);
40
+ }
41
+
42
+ //#endregion
43
+ export { getWebViewportWidth, resolveWebViewportConfig, setupWebViewport };
44
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/runtime/viewport/index.ts"],"sourcesContent":["import type { ResolvedWebViewportConfig, WebViewportConfig } from './types'\nimport { createWebViewportStyle, WEB_VIEWPORT_STYLE_ID } from './style'\n\nconst DEFAULT_VIEWPORT_CONFIG: ResolvedWebViewportConfig = {\n mode: 'mini-program',\n maxWidth: 375,\n desktopBreakpoint: 600,\n}\n\nlet resolvedConfig = { ...DEFAULT_VIEWPORT_CONFIG }\n\nfunction resolvePositiveNumber(value: number | undefined, fallback: number) {\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : fallback\n}\n\nexport function resolveWebViewportConfig(config?: WebViewportConfig): ResolvedWebViewportConfig {\n return {\n mode: config?.mode === 'responsive' ? 'responsive' : 'mini-program',\n maxWidth: resolvePositiveNumber(config?.maxWidth, DEFAULT_VIEWPORT_CONFIG.maxWidth),\n desktopBreakpoint: resolvePositiveNumber(config?.desktopBreakpoint, DEFAULT_VIEWPORT_CONFIG.desktopBreakpoint),\n }\n}\n\nexport function setupWebViewport(config?: WebViewportConfig) {\n resolvedConfig = resolveWebViewportConfig(config)\n if (typeof document === 'undefined') {\n return resolvedConfig\n }\n document.documentElement?.setAttribute('data-weapp-viewport-mode', resolvedConfig.mode)\n let style = document.querySelector(`#${WEB_VIEWPORT_STYLE_ID}`) as HTMLStyleElement | null\n if (!style) {\n style = document.createElement('style')\n style.id = WEB_VIEWPORT_STYLE_ID\n document.head?.append(style)\n }\n style.textContent = createWebViewportStyle(resolvedConfig)\n return resolvedConfig\n}\n\nexport function getWebViewportWidth() {\n if (typeof document === 'undefined') {\n return 0\n }\n const container = document.querySelector('#app') as HTMLElement | null\n const containerWidth = container?.clientWidth ?? 0\n if (containerWidth > 0) {\n return containerWidth\n }\n const documentWidth = document.documentElement?.clientWidth ?? 0\n if (resolvedConfig.mode === 'mini-program' && documentWidth >= resolvedConfig.desktopBreakpoint) {\n return Math.min(documentWidth, resolvedConfig.maxWidth)\n }\n return documentWidth || (typeof window !== 'undefined' ? window.innerWidth : 0)\n}\n\nexport type { ResolvedWebViewportConfig, WebViewportConfig } from './types'\n"],"mappings":";;;AAGA,MAAM,0BAAqD;CACzD,MAAM;CACN,UAAU;CACV,mBAAmB;AACrB;AAEA,IAAI,iBAAiB,EAAE,GAAG,wBAAwB;AAElD,SAAS,sBAAsB,OAA2B,UAAkB;CAC1E,OAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;AACpF;AAEA,SAAgB,yBAAyB,QAAuD;CAC9F,OAAO;EACL,MAAM,QAAQ,SAAS,eAAe,eAAe;EACrD,UAAU,sBAAsB,QAAQ,UAAU,wBAAwB,QAAQ;EAClF,mBAAmB,sBAAsB,QAAQ,mBAAmB,wBAAwB,iBAAiB;CAC/G;AACF;AAEA,SAAgB,iBAAiB,QAA4B;CAC3D,iBAAiB,yBAAyB,MAAM;CAChD,IAAI,OAAO,aAAa,aACtB,OAAO;CAET,SAAS,iBAAiB,aAAa,4BAA4B,eAAe,IAAI;CACtF,IAAI,QAAQ,SAAS,cAAc,IAAI,uBAAuB;CAC9D,IAAI,CAAC,OAAO;EACV,QAAQ,SAAS,cAAc,OAAO;EACtC,MAAM,KAAK;EACX,SAAS,MAAM,OAAO,KAAK;CAC7B;CACA,MAAM,cAAc,uBAAuB,cAAc;CACzD,OAAO;AACT;AAEA,SAAgB,sBAAsB;CACpC,IAAI,OAAO,aAAa,aACtB,OAAO;CAGT,MAAM,iBADY,SAAS,cAAc,MACV,CAAC,EAAE,eAAe;CACjD,IAAI,iBAAiB,GACnB,OAAO;CAET,MAAM,gBAAgB,SAAS,iBAAiB,eAAe;CAC/D,IAAI,eAAe,SAAS,kBAAkB,iBAAiB,eAAe,mBAC5E,OAAO,KAAK,IAAI,eAAe,eAAe,QAAQ;CAExD,OAAO,kBAAkB,OAAO,WAAW,cAAc,OAAO,aAAa;AAC/E"}
@@ -0,0 +1,62 @@
1
+ //#region src/runtime/viewport/style.ts
2
+ const WEB_VIEWPORT_STYLE_ID = "weapp-web-viewport-style";
3
+ function createWebViewportStyle(config) {
4
+ const maxWidth = `${config.maxWidth}px`;
5
+ return `
6
+ :root {
7
+ --weapp-viewport-width: 100vw;
8
+ --weapp-viewport-max-width: ${maxWidth};
9
+ --weapp-viewport-left: 0px;
10
+ --weapp-viewport-right: 0px;
11
+ --weapp-safe-area-inset-top: env(safe-area-inset-top, 0px);
12
+ --weapp-safe-area-inset-right: env(safe-area-inset-right, 0px);
13
+ --weapp-safe-area-inset-bottom: env(safe-area-inset-bottom, 0px);
14
+ --weapp-safe-area-inset-left: env(safe-area-inset-left, 0px);
15
+ }
16
+
17
+ html,
18
+ body {
19
+ min-width: 0;
20
+ height: 100%;
21
+ margin: 0;
22
+ overflow: hidden;
23
+ }
24
+
25
+ body {
26
+ background: #f2f2f2;
27
+ font-family: Helvetica, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;
28
+ }
29
+
30
+ #app {
31
+ --weapp-tab-bar-inset: 0px;
32
+ --weapp-tab-bar-top-inset: 0px;
33
+ position: relative;
34
+ box-sizing: border-box;
35
+ width: 100%;
36
+ height: 100dvh;
37
+ min-height: 0;
38
+ margin: 0 auto;
39
+ overflow: auto;
40
+ overscroll-behavior: contain;
41
+ background: #ffffff;
42
+ contain: layout paint;
43
+ transform: translateZ(0);
44
+ }
45
+
46
+ @media (min-width: ${`${config.desktopBreakpoint}px`}) {
47
+ html[data-weapp-viewport-mode="mini-program"] {
48
+ --weapp-viewport-width: ${maxWidth};
49
+ --weapp-viewport-left: calc((100vw - ${maxWidth}) / 2);
50
+ --weapp-viewport-right: calc((100vw - ${maxWidth}) / 2);
51
+ }
52
+
53
+ html[data-weapp-viewport-mode="mini-program"] #app {
54
+ width: ${maxWidth};
55
+ }
56
+ }
57
+ `;
58
+ }
59
+
60
+ //#endregion
61
+ export { WEB_VIEWPORT_STYLE_ID, createWebViewportStyle };
62
+ //# sourceMappingURL=style.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.mjs","names":[],"sources":["../../../src/runtime/viewport/style.ts"],"sourcesContent":["import type { ResolvedWebViewportConfig } from './types'\n\nexport const WEB_VIEWPORT_STYLE_ID = 'weapp-web-viewport-style'\n\nexport function createWebViewportStyle(config: ResolvedWebViewportConfig) {\n const maxWidth = `${config.maxWidth}px`\n const breakpoint = `${config.desktopBreakpoint}px`\n return `\n:root {\n --weapp-viewport-width: 100vw;\n --weapp-viewport-max-width: ${maxWidth};\n --weapp-viewport-left: 0px;\n --weapp-viewport-right: 0px;\n --weapp-safe-area-inset-top: env(safe-area-inset-top, 0px);\n --weapp-safe-area-inset-right: env(safe-area-inset-right, 0px);\n --weapp-safe-area-inset-bottom: env(safe-area-inset-bottom, 0px);\n --weapp-safe-area-inset-left: env(safe-area-inset-left, 0px);\n}\n\nhtml,\nbody {\n min-width: 0;\n height: 100%;\n margin: 0;\n overflow: hidden;\n}\n\nbody {\n background: #f2f2f2;\n font-family: Helvetica, -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif;\n}\n\n#app {\n --weapp-tab-bar-inset: 0px;\n --weapp-tab-bar-top-inset: 0px;\n position: relative;\n box-sizing: border-box;\n width: 100%;\n height: 100dvh;\n min-height: 0;\n margin: 0 auto;\n overflow: auto;\n overscroll-behavior: contain;\n background: #ffffff;\n contain: layout paint;\n transform: translateZ(0);\n}\n\n@media (min-width: ${breakpoint}) {\n html[data-weapp-viewport-mode=\"mini-program\"] {\n --weapp-viewport-width: ${maxWidth};\n --weapp-viewport-left: calc((100vw - ${maxWidth}) / 2);\n --weapp-viewport-right: calc((100vw - ${maxWidth}) / 2);\n }\n\n html[data-weapp-viewport-mode=\"mini-program\"] #app {\n width: ${maxWidth};\n }\n}\n`\n}\n"],"mappings":";AAEA,MAAa,wBAAwB;AAErC,SAAgB,uBAAuB,QAAmC;CACxE,MAAM,WAAW,GAAG,OAAO,SAAS;CAEpC,OAAO;;;gCAGuB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAsCpB,GA1CG,OAAO,kBAAkB,IA0CjB;;8BAEF,SAAS;2CACI,SAAS;4CACR,SAAS;;;;aAIxC,SAAS;;;;AAItB"}
@@ -0,0 +1,14 @@
1
+ //#region src/runtime/viewport/types.d.ts
2
+ interface WebViewportConfig {
3
+ mode?: 'mini-program' | 'responsive';
4
+ maxWidth?: number;
5
+ desktopBreakpoint?: number;
6
+ }
7
+ interface ResolvedWebViewportConfig {
8
+ mode: 'mini-program' | 'responsive';
9
+ maxWidth: number;
10
+ desktopBreakpoint: number;
11
+ }
12
+ //#endregion
13
+ export { ResolvedWebViewportConfig, WebViewportConfig };
14
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1,20 @@
1
+ import { RegisterMeta } from "./polyfill/routeRuntime/options.mjs";
2
+ //#region src/runtime/wevu.d.ts
3
+ interface WevuRegisterMeta extends RegisterMeta {
4
+ kind: 'app' | 'page' | 'component';
5
+ }
6
+ /**
7
+ * 将 Wevu App 注册过程接入 Web 页面栈。
8
+ */
9
+ declare function registerWebWevuApp(options: Record<string, any>, meta: WevuRegisterMeta): void;
10
+ /**
11
+ * 将 Wevu 页面或组件注册过程接入 Web 自定义元素。
12
+ */
13
+ declare function registerWebWevuComponent(options: Record<string, any>, meta: WevuRegisterMeta): void;
14
+ /**
15
+ * 在原生模块同步求值期间安装带页面元数据的宿主注册函数。
16
+ */
17
+ declare function installWebModuleRegistration(meta: WevuRegisterMeta, target?: Record<string, any>): () => void;
18
+ //#endregion
19
+ export { installWebModuleRegistration, registerWebWevuApp, registerWebWevuComponent };
20
+ //# sourceMappingURL=wevu.d.mts.map
@@ -0,0 +1,73 @@
1
+ import { registerApp, registerComponent, registerPage } from "./polyfill/routeRuntime.mjs";
2
+ import { createApp, createWevuComponent, takePendingRuntimeAppRegistration } from "wevu/internal-runtime";
3
+
4
+ //#region src/runtime/wevu.ts
5
+ function createRuntimeConstructor(meta, name) {
6
+ return (definition) => {
7
+ if (name === "App") registerApp(definition, meta);
8
+ else if (name === "Page" || meta.kind === "page") registerPage(definition, meta);
9
+ else registerComponent(definition, meta);
10
+ return definition;
11
+ };
12
+ }
13
+ function withRuntimeConstructor(name, constructor, run) {
14
+ const target = globalThis;
15
+ const hadOwn = Object.prototype.hasOwnProperty.call(target, name);
16
+ const previous = target[name];
17
+ target[name] = constructor;
18
+ try {
19
+ return run();
20
+ } finally {
21
+ if (hadOwn) target[name] = previous;
22
+ else delete target[name];
23
+ }
24
+ }
25
+ /**
26
+ * 将 Wevu App 注册过程接入 Web 页面栈。
27
+ */
28
+ function registerWebWevuApp(options, meta) {
29
+ const pendingRegistration = takePendingRuntimeAppRegistration();
30
+ withRuntimeConstructor("App", (definition) => registerApp(definition, meta), () => {
31
+ if (pendingRegistration) {
32
+ pendingRegistration.register();
33
+ return pendingRegistration.app;
34
+ }
35
+ return createApp(options);
36
+ });
37
+ }
38
+ /**
39
+ * 将 Wevu 页面或组件注册过程接入 Web 自定义元素。
40
+ */
41
+ function registerWebWevuComponent(options, meta) {
42
+ withRuntimeConstructor("Component", (definition) => {
43
+ return meta.kind === "page" ? registerPage(definition, meta) : registerComponent(definition, meta);
44
+ }, () => createWevuComponent(options));
45
+ }
46
+ /**
47
+ * 在原生模块同步求值期间安装带页面元数据的宿主注册函数。
48
+ */
49
+ function installWebModuleRegistration(meta, target = globalThis) {
50
+ const names = meta.kind === "app" ? ["App"] : meta.kind === "page" ? ["Page", "Component"] : ["Component"];
51
+ const previous = names.map((name) => ({
52
+ hadOwn: Object.prototype.hasOwnProperty.call(target, name),
53
+ name,
54
+ value: target[name]
55
+ }));
56
+ const installed = /* @__PURE__ */ new Map();
57
+ for (const name of names) {
58
+ const constructor = createRuntimeConstructor(meta, name);
59
+ installed.set(name, constructor);
60
+ target[name] = constructor;
61
+ }
62
+ return () => {
63
+ for (const entry of previous) {
64
+ if (target[entry.name] !== installed.get(entry.name)) continue;
65
+ if (entry.hadOwn) target[entry.name] = entry.value;
66
+ else delete target[entry.name];
67
+ }
68
+ };
69
+ }
70
+
71
+ //#endregion
72
+ export { installWebModuleRegistration, registerWebWevuApp, registerWebWevuComponent };
73
+ //# sourceMappingURL=wevu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wevu.mjs","names":[],"sources":["../../src/runtime/wevu.ts"],"sourcesContent":["import type { RegisterMeta } from './polyfill/routeRuntime/options'\nimport { createApp, createWevuComponent, takePendingRuntimeAppRegistration } from 'wevu/internal-runtime'\nimport { registerApp, registerComponent, registerPage } from './polyfill/routeRuntime'\n\ninterface WevuRegisterMeta extends RegisterMeta {\n kind: 'app' | 'page' | 'component'\n}\n\ntype RuntimeConstructorName = 'App' | 'Page' | 'Component'\n\nfunction createRuntimeConstructor(meta: WevuRegisterMeta, name: RuntimeConstructorName) {\n return (definition: Record<string, any>) => {\n if (name === 'App') {\n registerApp(definition, meta)\n }\n else if (name === 'Page' || meta.kind === 'page') {\n registerPage(definition, meta)\n }\n else {\n registerComponent(definition, meta)\n }\n return definition\n }\n}\n\nfunction withRuntimeConstructor<T>(\n name: 'App' | 'Component',\n constructor: (options: Record<string, any>) => unknown,\n run: () => T,\n) {\n const target = globalThis as Record<string, any>\n const hadOwn = Object.prototype.hasOwnProperty.call(target, name)\n const previous = target[name]\n target[name] = constructor\n try {\n return run()\n }\n finally {\n if (hadOwn) {\n target[name] = previous\n }\n else {\n delete target[name]\n }\n }\n}\n\n/**\n * 将 Wevu App 注册过程接入 Web 页面栈。\n */\nexport function registerWebWevuApp(options: Record<string, any>, meta: WevuRegisterMeta): void {\n const pendingRegistration = takePendingRuntimeAppRegistration()\n withRuntimeConstructor('App', definition => registerApp(definition, meta), () => {\n if (pendingRegistration) {\n pendingRegistration.register()\n return pendingRegistration.app\n }\n return createApp(options)\n })\n}\n\n/**\n * 将 Wevu 页面或组件注册过程接入 Web 自定义元素。\n */\nexport function registerWebWevuComponent(options: Record<string, any>, meta: WevuRegisterMeta): void {\n withRuntimeConstructor('Component', (definition) => {\n return meta.kind === 'page'\n ? registerPage(definition, meta)\n : registerComponent(definition, meta)\n }, () => createWevuComponent(options))\n}\n\n/**\n * 在原生模块同步求值期间安装带页面元数据的宿主注册函数。\n */\nexport function installWebModuleRegistration(\n meta: WevuRegisterMeta,\n target: Record<string, any> = globalThis,\n): () => void {\n const names: RuntimeConstructorName[] = meta.kind === 'app'\n ? ['App']\n : meta.kind === 'page'\n ? ['Page', 'Component']\n : ['Component']\n const previous = names.map(name => ({\n hadOwn: Object.prototype.hasOwnProperty.call(target, name),\n name,\n value: target[name],\n }))\n const installed = new Map<RuntimeConstructorName, (definition: Record<string, any>) => Record<string, any>>()\n\n for (const name of names) {\n const constructor = createRuntimeConstructor(meta, name)\n installed.set(name, constructor)\n target[name] = constructor\n }\n\n return () => {\n for (const entry of previous) {\n if (target[entry.name] !== installed.get(entry.name)) {\n continue\n }\n if (entry.hadOwn) {\n target[entry.name] = entry.value\n }\n else {\n delete target[entry.name]\n }\n }\n }\n}\n"],"mappings":";;;;AAUA,SAAS,yBAAyB,MAAwB,MAA8B;CACtF,QAAQ,eAAoC;EAC1C,IAAI,SAAS,OACX,YAAY,YAAY,IAAI;OAEzB,IAAI,SAAS,UAAU,KAAK,SAAS,QACxC,aAAa,YAAY,IAAI;OAG7B,kBAAkB,YAAY,IAAI;EAEpC,OAAO;CACT;AACF;AAEA,SAAS,uBACP,MACA,aACA,KACA;CACA,MAAM,SAAS;CACf,MAAM,SAAS,OAAO,UAAU,eAAe,KAAK,QAAQ,IAAI;CAChE,MAAM,WAAW,OAAO;CACxB,OAAO,QAAQ;CACf,IAAI;EACF,OAAO,IAAI;CACb,UACQ;EACN,IAAI,QACF,OAAO,QAAQ;OAGf,OAAO,OAAO;CAElB;AACF;;;;AAKA,SAAgB,mBAAmB,SAA8B,MAA8B;CAC7F,MAAM,sBAAsB,kCAAkC;CAC9D,uBAAuB,QAAO,eAAc,YAAY,YAAY,IAAI,SAAS;EAC/E,IAAI,qBAAqB;GACvB,oBAAoB,SAAS;GAC7B,OAAO,oBAAoB;EAC7B;EACA,OAAO,UAAU,OAAO;CAC1B,CAAC;AACH;;;;AAKA,SAAgB,yBAAyB,SAA8B,MAA8B;CACnG,uBAAuB,cAAc,eAAe;EAClD,OAAO,KAAK,SAAS,SACjB,aAAa,YAAY,IAAI,IAC7B,kBAAkB,YAAY,IAAI;CACxC,SAAS,oBAAoB,OAAO,CAAC;AACvC;;;;AAKA,SAAgB,6BACd,MACA,SAA8B,YAClB;CACZ,MAAM,QAAkC,KAAK,SAAS,QAClD,CAAC,KAAK,IACN,KAAK,SAAS,SACZ,CAAC,QAAQ,WAAW,IACpB,CAAC,WAAW;CAClB,MAAM,WAAW,MAAM,KAAI,UAAS;EAClC,QAAQ,OAAO,UAAU,eAAe,KAAK,QAAQ,IAAI;EACzD;EACA,OAAO,OAAO;CAChB,EAAE;CACF,MAAM,4BAAY,IAAI,IAAsF;CAE5G,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,cAAc,yBAAyB,MAAM,IAAI;EACvD,UAAU,IAAI,MAAM,WAAW;EAC/B,OAAO,QAAQ;CACjB;CAEA,aAAa;EACX,KAAK,MAAM,SAAS,UAAU;GAC5B,IAAI,OAAO,MAAM,UAAU,UAAU,IAAI,MAAM,IAAI,GACjD;GAEF,IAAI,MAAM,QACR,OAAO,MAAM,QAAQ,MAAM;QAG3B,OAAO,OAAO,MAAM;EAExB;CACF;AACF"}