@weapp-vite/web 1.3.15 → 1.3.17

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 (243) hide show
  1. package/README.md +2 -2
  2. package/dist/_virtual/_rolldown/runtime.mjs +18 -0
  3. package/dist/compiler/wxml/attributes.mjs +93 -0
  4. package/dist/compiler/wxml/attributes.mjs.map +1 -0
  5. package/dist/compiler/wxml/compile.mjs +158 -0
  6. package/dist/compiler/wxml/compile.mjs.map +1 -0
  7. package/dist/compiler/wxml/dependency.mjs +31 -0
  8. package/dist/compiler/wxml/dependency.mjs.map +1 -0
  9. package/dist/compiler/wxml/interpolation.mjs +142 -0
  10. package/dist/compiler/wxml/interpolation.mjs.map +1 -0
  11. package/dist/compiler/wxml/navigation.mjs +85 -0
  12. package/dist/compiler/wxml/navigation.mjs.map +1 -0
  13. package/dist/compiler/wxml/parser.mjs +41 -0
  14. package/dist/compiler/wxml/parser.mjs.map +1 -0
  15. package/dist/compiler/wxml/renderer.mjs +114 -0
  16. package/dist/compiler/wxml/renderer.mjs.map +1 -0
  17. package/dist/compiler/wxml/specialNodes.mjs +85 -0
  18. package/dist/compiler/wxml/specialNodes.mjs.map +1 -0
  19. package/dist/compiler/wxs.mjs +83 -0
  20. package/dist/compiler/wxs.mjs.map +1 -0
  21. package/dist/css/wxss.d.mts +25 -0
  22. package/dist/css/wxss.mjs +17 -0
  23. package/dist/css/wxss.mjs.map +1 -0
  24. package/dist/index.d.mts +18 -2
  25. package/dist/index.mjs +18 -3
  26. package/dist/plugin/constants.mjs +43 -0
  27. package/dist/plugin/constants.mjs.map +1 -0
  28. package/dist/plugin/entry.mjs +29 -0
  29. package/dist/plugin/entry.mjs.map +1 -0
  30. package/dist/plugin/files.mjs +58 -0
  31. package/dist/plugin/files.mjs.map +1 -0
  32. package/dist/plugin/index.d.mts +33 -0
  33. package/dist/plugin/index.mjs +188 -0
  34. package/dist/plugin/index.mjs.map +1 -0
  35. package/dist/plugin/navigation.mjs +20 -0
  36. package/dist/plugin/navigation.mjs.map +1 -0
  37. package/dist/plugin/path.mjs +85 -0
  38. package/dist/plugin/path.mjs.map +1 -0
  39. package/dist/plugin/register.mjs +83 -0
  40. package/dist/plugin/register.mjs.map +1 -0
  41. package/dist/plugin/scan.mjs +195 -0
  42. package/dist/plugin/scan.mjs.map +1 -0
  43. package/dist/plugin/scanConfig.mjs +45 -0
  44. package/dist/plugin/scanConfig.mjs.map +1 -0
  45. package/dist/plugin/state.mjs +22 -0
  46. package/dist/plugin/state.mjs.map +1 -0
  47. package/dist/plugin/types.d.mts +46 -0
  48. package/dist/plugin.d.mts +3 -2
  49. package/dist/plugin.mjs +3 -2
  50. package/dist/runtime/button/helpers.mjs +92 -0
  51. package/dist/runtime/button/helpers.mjs.map +1 -0
  52. package/dist/runtime/button/index.d.mts +9 -0
  53. package/dist/runtime/button/index.mjs +198 -0
  54. package/dist/runtime/button/index.mjs.map +1 -0
  55. package/dist/runtime/button/style.mjs +168 -0
  56. package/dist/runtime/button/style.mjs.map +1 -0
  57. package/dist/runtime/component/behavior.mjs +98 -0
  58. package/dist/runtime/component/behavior.mjs.map +1 -0
  59. package/dist/runtime/component/constants.mjs +13 -0
  60. package/dist/runtime/component/constants.mjs.map +1 -0
  61. package/dist/runtime/component/dom.mjs +32 -0
  62. package/dist/runtime/component/dom.mjs.map +1 -0
  63. package/dist/runtime/component/element.mjs +208 -0
  64. package/dist/runtime/component/element.mjs.map +1 -0
  65. package/dist/runtime/component/events.mjs +49 -0
  66. package/dist/runtime/component/events.mjs.map +1 -0
  67. package/dist/runtime/component/index.d.mts +7 -0
  68. package/dist/runtime/component/index.mjs +44 -0
  69. package/dist/runtime/component/index.mjs.map +1 -0
  70. package/dist/runtime/component/state.mjs +63 -0
  71. package/dist/runtime/component/state.mjs.map +1 -0
  72. package/dist/runtime/component/types.d.mts +49 -0
  73. package/dist/runtime/component/utils.mjs +39 -0
  74. package/dist/runtime/component/utils.mjs.map +1 -0
  75. package/dist/runtime/execution.d.mts +7 -0
  76. package/dist/runtime/execution.mjs +37 -0
  77. package/dist/runtime/execution.mjs.map +1 -0
  78. package/dist/runtime/index.d.mts +16 -2
  79. package/dist/runtime/index.mjs +16 -2
  80. package/dist/runtime/legacyTemplate/dom.mjs +76 -0
  81. package/dist/runtime/legacyTemplate/dom.mjs.map +1 -0
  82. package/dist/runtime/legacyTemplate/expression.mjs +113 -0
  83. package/dist/runtime/legacyTemplate/expression.mjs.map +1 -0
  84. package/dist/runtime/legacyTemplate/index.d.mts +9 -0
  85. package/dist/runtime/legacyTemplate/index.mjs +132 -0
  86. package/dist/runtime/legacyTemplate/index.mjs.map +1 -0
  87. package/dist/runtime/legacyTemplate/types.d.mts +6 -0
  88. package/dist/runtime/navigationBar/index.d.mts +10 -0
  89. package/dist/runtime/navigationBar/index.mjs +162 -0
  90. package/dist/runtime/navigationBar/index.mjs.map +1 -0
  91. package/dist/runtime/navigationBar/style.mjs +108 -0
  92. package/dist/runtime/navigationBar/style.mjs.map +1 -0
  93. package/dist/runtime/polyfill/ad.mjs +150 -0
  94. package/dist/runtime/polyfill/ad.mjs.map +1 -0
  95. package/dist/runtime/polyfill/appState.mjs +31 -0
  96. package/dist/runtime/polyfill/appState.mjs.map +1 -0
  97. package/dist/runtime/polyfill/async.mjs +31 -0
  98. package/dist/runtime/polyfill/async.mjs.map +1 -0
  99. package/dist/runtime/polyfill/auth.mjs +120 -0
  100. package/dist/runtime/polyfill/auth.mjs.map +1 -0
  101. package/dist/runtime/polyfill/authApi.mjs +101 -0
  102. package/dist/runtime/polyfill/authApi.mjs.map +1 -0
  103. package/dist/runtime/polyfill/background.mjs +31 -0
  104. package/dist/runtime/polyfill/background.mjs.map +1 -0
  105. package/dist/runtime/polyfill/canvasContext.mjs +115 -0
  106. package/dist/runtime/polyfill/canvasContext.mjs.map +1 -0
  107. package/dist/runtime/polyfill/capability.mjs +20 -0
  108. package/dist/runtime/polyfill/capability.mjs.map +1 -0
  109. package/dist/runtime/polyfill/cloud.mjs +39 -0
  110. package/dist/runtime/polyfill/cloud.mjs.map +1 -0
  111. package/dist/runtime/polyfill/device.mjs +44 -0
  112. package/dist/runtime/polyfill/device.mjs.map +1 -0
  113. package/dist/runtime/polyfill/deviceApi.mjs +31 -0
  114. package/dist/runtime/polyfill/deviceApi.mjs.map +1 -0
  115. package/dist/runtime/polyfill/deviceAuthSystemApi.d.mts +102 -0
  116. package/dist/runtime/polyfill/deviceAuthSystemApi.mjs +144 -0
  117. package/dist/runtime/polyfill/deviceAuthSystemApi.mjs.map +1 -0
  118. package/dist/runtime/polyfill/filePicker.mjs +158 -0
  119. package/dist/runtime/polyfill/filePicker.mjs.map +1 -0
  120. package/dist/runtime/polyfill/fileSystemManager.mjs +45 -0
  121. package/dist/runtime/polyfill/fileSystemManager.mjs.map +1 -0
  122. package/dist/runtime/polyfill/files.mjs +118 -0
  123. package/dist/runtime/polyfill/files.mjs.map +1 -0
  124. package/dist/runtime/polyfill/index.d.mts +40 -0
  125. package/dist/runtime/polyfill/index.mjs +110 -0
  126. package/dist/runtime/polyfill/index.mjs.map +1 -0
  127. package/dist/runtime/polyfill/interaction.mjs +38 -0
  128. package/dist/runtime/polyfill/interaction.mjs.map +1 -0
  129. package/dist/runtime/polyfill/interactionApi.mjs +54 -0
  130. package/dist/runtime/polyfill/interactionApi.mjs.map +1 -0
  131. package/dist/runtime/polyfill/location.mjs +106 -0
  132. package/dist/runtime/polyfill/location.mjs.map +1 -0
  133. package/dist/runtime/polyfill/locationApi.mjs +120 -0
  134. package/dist/runtime/polyfill/locationApi.mjs.map +1 -0
  135. package/dist/runtime/polyfill/mediaActions.mjs +52 -0
  136. package/dist/runtime/polyfill/mediaActions.mjs.map +1 -0
  137. package/dist/runtime/polyfill/mediaApi/file.mjs +63 -0
  138. package/dist/runtime/polyfill/mediaApi/file.mjs.map +1 -0
  139. package/dist/runtime/polyfill/mediaApi/info.mjs +59 -0
  140. package/dist/runtime/polyfill/mediaApi/info.mjs.map +1 -0
  141. package/dist/runtime/polyfill/mediaApi/picker.mjs +82 -0
  142. package/dist/runtime/polyfill/mediaApi/picker.mjs.map +1 -0
  143. package/dist/runtime/polyfill/mediaApi/preview.mjs +39 -0
  144. package/dist/runtime/polyfill/mediaApi/preview.mjs.map +1 -0
  145. package/dist/runtime/polyfill/mediaApi/process.mjs +46 -0
  146. package/dist/runtime/polyfill/mediaApi/process.mjs.map +1 -0
  147. package/dist/runtime/polyfill/mediaInfo.mjs +136 -0
  148. package/dist/runtime/polyfill/mediaInfo.mjs.map +1 -0
  149. package/dist/runtime/polyfill/mediaPicker.mjs +213 -0
  150. package/dist/runtime/polyfill/mediaPicker.mjs.map +1 -0
  151. package/dist/runtime/polyfill/mediaProcess.mjs +65 -0
  152. package/dist/runtime/polyfill/mediaProcess.mjs.map +1 -0
  153. package/dist/runtime/polyfill/menuApi.mjs +70 -0
  154. package/dist/runtime/polyfill/menuApi.mjs.map +1 -0
  155. package/dist/runtime/polyfill/navigationBarRuntime.mjs +66 -0
  156. package/dist/runtime/polyfill/navigationBarRuntime.mjs.map +1 -0
  157. package/dist/runtime/polyfill/network/request.mjs +162 -0
  158. package/dist/runtime/polyfill/network/request.mjs.map +1 -0
  159. package/dist/runtime/polyfill/network/requestBridge.mjs +49 -0
  160. package/dist/runtime/polyfill/network/requestBridge.mjs.map +1 -0
  161. package/dist/runtime/polyfill/network/status.mjs +55 -0
  162. package/dist/runtime/polyfill/network/status.mjs.map +1 -0
  163. package/dist/runtime/polyfill/platformApi.mjs +33 -0
  164. package/dist/runtime/polyfill/platformApi.mjs.map +1 -0
  165. package/dist/runtime/polyfill/platformRuntime.mjs +120 -0
  166. package/dist/runtime/polyfill/platformRuntime.mjs.map +1 -0
  167. package/dist/runtime/polyfill/routeRuntime/dom.mjs +36 -0
  168. package/dist/runtime/polyfill/routeRuntime/dom.mjs.map +1 -0
  169. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs +83 -0
  170. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs.map +1 -0
  171. package/dist/runtime/polyfill/routeRuntime/options.d.mts +33 -0
  172. package/dist/runtime/polyfill/routeRuntime/options.mjs +76 -0
  173. package/dist/runtime/polyfill/routeRuntime/options.mjs.map +1 -0
  174. package/dist/runtime/polyfill/routeRuntime/url.mjs +35 -0
  175. package/dist/runtime/polyfill/routeRuntime/url.mjs.map +1 -0
  176. package/dist/runtime/polyfill/routeRuntime.d.mts +43 -0
  177. package/dist/runtime/polyfill/routeRuntime.mjs +202 -0
  178. package/dist/runtime/polyfill/routeRuntime.mjs.map +1 -0
  179. package/dist/runtime/polyfill/runtimeCapabilityApi.mjs +26 -0
  180. package/dist/runtime/polyfill/runtimeCapabilityApi.mjs.map +1 -0
  181. package/dist/runtime/polyfill/runtimeDataApi.d.mts +79 -0
  182. package/dist/runtime/polyfill/runtimeDataApi.mjs +134 -0
  183. package/dist/runtime/polyfill/runtimeDataApi.mjs.map +1 -0
  184. package/dist/runtime/polyfill/runtimeInfra.mjs +40 -0
  185. package/dist/runtime/polyfill/runtimeInfra.mjs.map +1 -0
  186. package/dist/runtime/polyfill/runtimeOps.mjs +62 -0
  187. package/dist/runtime/polyfill/runtimeOps.mjs.map +1 -0
  188. package/dist/runtime/polyfill/selectorQuery.mjs +204 -0
  189. package/dist/runtime/polyfill/selectorQuery.mjs.map +1 -0
  190. package/dist/runtime/polyfill/storage.mjs +103 -0
  191. package/dist/runtime/polyfill/storage.mjs.map +1 -0
  192. package/dist/runtime/polyfill/storageAsync.mjs +62 -0
  193. package/dist/runtime/polyfill/storageAsync.mjs.map +1 -0
  194. package/dist/runtime/polyfill/subscribe.mjs +30 -0
  195. package/dist/runtime/polyfill/subscribe.mjs.map +1 -0
  196. package/dist/runtime/polyfill/system.mjs +111 -0
  197. package/dist/runtime/polyfill/system.mjs.map +1 -0
  198. package/dist/runtime/polyfill/systemApi.mjs +65 -0
  199. package/dist/runtime/polyfill/systemApi.mjs.map +1 -0
  200. package/dist/runtime/polyfill/types/base.d.mts +12 -0
  201. package/dist/runtime/polyfill/types/common.d.mts +126 -0
  202. package/dist/runtime/polyfill/types/locationRuntime.d.mts +151 -0
  203. package/dist/runtime/polyfill/types/mediaAuth.d.mts +152 -0
  204. package/dist/runtime/polyfill/types/platformRuntime.d.mts +141 -0
  205. package/dist/runtime/polyfill/types/systemAuth.d.mts +122 -0
  206. package/dist/runtime/polyfill/ui.mjs +135 -0
  207. package/dist/runtime/polyfill/ui.mjs.map +1 -0
  208. package/dist/runtime/polyfill/uiFeedback.mjs +35 -0
  209. package/dist/runtime/polyfill/uiFeedback.mjs.map +1 -0
  210. package/dist/runtime/polyfill/uiMediaApi.d.mts +172 -0
  211. package/dist/runtime/polyfill/uiMediaApi.mjs +162 -0
  212. package/dist/runtime/polyfill/uiMediaApi.mjs.map +1 -0
  213. package/dist/runtime/polyfill/videoContext.mjs +56 -0
  214. package/dist/runtime/polyfill/videoContext.mjs.map +1 -0
  215. package/dist/runtime/polyfill/vkSession.mjs +58 -0
  216. package/dist/runtime/polyfill/vkSession.mjs.map +1 -0
  217. package/dist/runtime/polyfill/windowResize.mjs +39 -0
  218. package/dist/runtime/polyfill/windowResize.mjs.map +1 -0
  219. package/dist/runtime/polyfill/worker.mjs +77 -0
  220. package/dist/runtime/polyfill/worker.mjs.map +1 -0
  221. package/dist/runtime/polyfill.d.mts +5 -0
  222. package/dist/runtime/renderContext.d.mts +21 -0
  223. package/dist/runtime/renderContext.mjs +147 -0
  224. package/dist/runtime/renderContext.mjs.map +1 -0
  225. package/dist/runtime/rpx.d.mts +9 -0
  226. package/dist/runtime/rpx.mjs +27 -0
  227. package/dist/runtime/rpx.mjs.map +1 -0
  228. package/dist/runtime/style.d.mts +6 -0
  229. package/dist/runtime/style.mjs +37 -0
  230. package/dist/runtime/style.mjs.map +1 -0
  231. package/dist/runtime/template.d.mts +10 -0
  232. package/dist/runtime/warning.d.mts +10 -0
  233. package/dist/runtime/warning.mjs +43 -0
  234. package/dist/runtime/warning.mjs.map +1 -0
  235. package/dist/{slugify-B4l45KNs.mjs → shared/slugify.mjs} +3 -1
  236. package/dist/shared/slugify.mjs.map +1 -0
  237. package/dist/shared/wxml.mjs +83 -0
  238. package/dist/shared/wxml.mjs.map +1 -0
  239. package/package.json +2 -2
  240. package/dist/index-w9xxIH-l.d.mts +0 -1229
  241. package/dist/plugin-BARxSPO8.mjs +0 -1567
  242. package/dist/plugin-DP2iPVmw.d.mts +0 -96
  243. package/dist/runtime-D6j2_x_N.mjs +0 -6251
@@ -0,0 +1,195 @@
1
+ import { normalizePath, toPosixId } from "./path.mjs";
2
+ import { slugify } from "../shared/slugify.mjs";
3
+ import { isRecord, readJsonFile, resolveJsonPath, resolveScriptFile, resolveStyleFile, resolveTemplateFile } from "./files.mjs";
4
+ import { mergeNavigationConfig, pickNavigationConfig } from "./navigation.mjs";
5
+ import { collectComponentTagsFromConfig, collectComponentTagsFromJson, mergeComponentTags } from "./scanConfig.mjs";
6
+ import process from "node:process";
7
+ import { dirname, extname, join, posix, relative, resolve } from "pathe";
8
+
9
+ //#region src/plugin/scan.ts
10
+ async function scanProject({ srcRoot, warn, state }) {
11
+ state.moduleMeta.clear();
12
+ state.pageNavigationMap.clear();
13
+ state.templateComponentMap.clear();
14
+ state.templatePathSet.clear();
15
+ state.componentTagMap.clear();
16
+ state.componentIdMap.clear();
17
+ let appNavigationDefaults = {};
18
+ let appComponentTags = {};
19
+ const pages = /* @__PURE__ */ new Map();
20
+ const components = /* @__PURE__ */ new Map();
21
+ const reportWarning = (message) => {
22
+ if (warn) {
23
+ warn(message);
24
+ return;
25
+ }
26
+ if (typeof process !== "undefined" && typeof process.emitWarning === "function") process.emitWarning(message);
27
+ };
28
+ const appScript = await resolveScriptFile(join(srcRoot, "app"));
29
+ if (appScript) state.moduleMeta.set(normalizePath(appScript), {
30
+ kind: "app",
31
+ id: "app",
32
+ scriptPath: appScript,
33
+ stylePath: await resolveStyleFile(appScript)
34
+ });
35
+ const resolveComponentScript = async (raw, importerDir) => {
36
+ const base = resolveComponentBase(raw, importerDir, srcRoot);
37
+ if (!base) return;
38
+ return resolveScriptFile(base);
39
+ };
40
+ const getComponentId = (script) => {
41
+ const cached = state.componentIdMap.get(script);
42
+ if (cached) return cached;
43
+ const componentIdPosix = toPosixId(relative(srcRoot, script).replace(new RegExp(`${extname(script)}$`), ""));
44
+ state.componentIdMap.set(script, componentIdPosix);
45
+ return componentIdPosix;
46
+ };
47
+ const getComponentTag = (script) => {
48
+ const cached = state.componentTagMap.get(script);
49
+ if (cached) return cached;
50
+ const tag = slugify(getComponentId(script), "wv-component");
51
+ state.componentTagMap.set(script, tag);
52
+ return tag;
53
+ };
54
+ const collectComponent = async (componentId, importerDir) => {
55
+ const base = resolveComponentBase(componentId, importerDir, srcRoot);
56
+ const script = base ? await resolveScriptFile(base) : void 0;
57
+ if (!script || components.has(script)) return;
58
+ const componentIdPosix = toPosixId(relative(srcRoot, script).replace(new RegExp(`${extname(script)}$`), ""));
59
+ const template = await resolveTemplateFile(script);
60
+ const style = await resolveStyleFile(script);
61
+ if (template) state.templatePathSet.add(normalizePath(template));
62
+ state.moduleMeta.set(normalizePath(script), {
63
+ kind: "component",
64
+ id: componentIdPosix,
65
+ scriptPath: script,
66
+ templatePath: template,
67
+ stylePath: style
68
+ });
69
+ components.set(script, {
70
+ script,
71
+ id: componentIdPosix
72
+ });
73
+ const componentTags = await collectComponentTagsFromJson({
74
+ jsonBasePath: `${script.replace(new RegExp(`${extname(script)}$`), "")}.json`,
75
+ importerDir: dirname(script),
76
+ warn: reportWarning,
77
+ collectFromConfig: (json, nextImporterDir, jsonPath, nextWarn) => collectComponentTagsFromConfig({
78
+ json,
79
+ importerDir: nextImporterDir,
80
+ jsonPath,
81
+ warn: nextWarn,
82
+ resolveComponentScript,
83
+ getComponentTag,
84
+ collectComponent
85
+ })
86
+ });
87
+ if (!template) return;
88
+ const mergedTags = mergeComponentTags(appComponentTags, componentTags);
89
+ if (Object.keys(mergedTags).length > 0) {
90
+ state.templateComponentMap.set(normalizePath(template), mergedTags);
91
+ return;
92
+ }
93
+ state.templateComponentMap.delete(normalizePath(template));
94
+ };
95
+ const appJsonPath = await resolveJsonPath(join(srcRoot, "app.json"));
96
+ if (appJsonPath) {
97
+ const appJson = await readJsonFile(appJsonPath);
98
+ if (appJson) appComponentTags = await collectComponentTagsFromConfig({
99
+ json: appJson,
100
+ importerDir: srcRoot,
101
+ jsonPath: appJsonPath,
102
+ warn: reportWarning,
103
+ resolveComponentScript,
104
+ getComponentTag,
105
+ collectComponent,
106
+ onResolved: (tags) => {
107
+ appComponentTags = tags;
108
+ }
109
+ });
110
+ if (appJson?.pages && Array.isArray(appJson.pages)) {
111
+ for (const page of appJson.pages) if (typeof page === "string") await collectPage(page);
112
+ }
113
+ if (appJson?.subPackages && Array.isArray(appJson.subPackages)) for (const pkg of appJson.subPackages) {
114
+ if (!pkg || typeof pkg !== "object" || !Array.isArray(pkg.pages)) continue;
115
+ const root = typeof pkg.root === "string" ? pkg.root : "";
116
+ for (const page of pkg.pages) {
117
+ if (typeof page !== "string") continue;
118
+ await collectPage(posix.join(root, page));
119
+ }
120
+ }
121
+ appNavigationDefaults = pickNavigationConfig(isRecord(appJson?.window) ? appJson.window : void 0);
122
+ }
123
+ state.appNavigationDefaults = appNavigationDefaults;
124
+ state.appComponentTags = appComponentTags;
125
+ state.scanResult = {
126
+ app: appScript,
127
+ pages: Array.from(pages.values()),
128
+ components: Array.from(components.values())
129
+ };
130
+ async function collectPage(pageId) {
131
+ const base = join(srcRoot, pageId);
132
+ const script = await resolveScriptFile(base);
133
+ if (!script) return;
134
+ const template = await resolveTemplateFile(base);
135
+ if (template) state.templatePathSet.add(normalizePath(template));
136
+ const style = await resolveStyleFile(base);
137
+ const pageJsonBasePath = join(srcRoot, `${pageId}.json`);
138
+ const pageJsonPath = await resolveJsonPath(pageJsonBasePath);
139
+ const pageJson = pageJsonPath ? await readJsonFile(pageJsonPath) : void 0;
140
+ state.moduleMeta.set(normalizePath(script), {
141
+ kind: "page",
142
+ id: toPosixId(pageId),
143
+ scriptPath: script,
144
+ templatePath: template,
145
+ stylePath: style
146
+ });
147
+ pages.set(script, {
148
+ script,
149
+ id: toPosixId(pageId)
150
+ });
151
+ const pageComponentTags = pageJson && pageJsonPath ? await collectComponentTagsFromConfig({
152
+ json: pageJson,
153
+ importerDir: dirname(script),
154
+ jsonPath: pageJsonPath,
155
+ warn: reportWarning,
156
+ resolveComponentScript,
157
+ getComponentTag,
158
+ collectComponent
159
+ }) : await collectComponentTagsFromJson({
160
+ jsonBasePath: pageJsonBasePath,
161
+ importerDir: dirname(script),
162
+ warn: reportWarning,
163
+ collectFromConfig: (json, importerDir, jsonPath, nextWarn) => collectComponentTagsFromConfig({
164
+ json,
165
+ importerDir,
166
+ jsonPath,
167
+ warn: nextWarn,
168
+ resolveComponentScript,
169
+ getComponentTag,
170
+ collectComponent
171
+ })
172
+ });
173
+ if (template) {
174
+ const mergedTags = mergeComponentTags(appComponentTags, pageComponentTags);
175
+ if (Object.keys(mergedTags).length > 0) state.templateComponentMap.set(normalizePath(template), mergedTags);
176
+ else state.templateComponentMap.delete(normalizePath(template));
177
+ }
178
+ if (!template) return;
179
+ if (pageJson) {
180
+ state.pageNavigationMap.set(normalizePath(template), mergeNavigationConfig(appNavigationDefaults, pickNavigationConfig(pageJson)));
181
+ return;
182
+ }
183
+ state.pageNavigationMap.set(normalizePath(template), { ...appNavigationDefaults });
184
+ }
185
+ }
186
+ function resolveComponentBase(raw, importerDir, srcRoot) {
187
+ if (!raw) return;
188
+ if (raw.startsWith(".")) return resolve(importerDir, raw);
189
+ if (raw.startsWith("/")) return resolve(srcRoot, raw.slice(1));
190
+ return resolve(srcRoot, raw);
191
+ }
192
+
193
+ //#endregion
194
+ export { scanProject };
195
+ //# sourceMappingURL=scan.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.mjs","names":[],"sources":["../../src/plugin/scan.ts"],"sourcesContent":["import type { ComponentEntry, PageEntry, ScanState, WarnFn } from './types'\nimport process from 'node:process'\n\nimport { dirname, extname, join, posix, relative, resolve } from 'pathe'\nimport { slugify } from '../shared/slugify'\nimport { isRecord, readJsonFile, resolveJsonPath, resolveScriptFile, resolveStyleFile, resolveTemplateFile } from './files'\nimport { mergeNavigationConfig, pickNavigationConfig } from './navigation'\nimport { normalizePath, toPosixId } from './path'\nimport { collectComponentTagsFromConfig, collectComponentTagsFromJson, mergeComponentTags } from './scanConfig'\n\ninterface ScanProjectOptions {\n srcRoot: string\n warn?: WarnFn\n state: ScanState\n}\n\nexport async function scanProject({ srcRoot, warn, state }: ScanProjectOptions) {\n state.moduleMeta.clear()\n state.pageNavigationMap.clear()\n state.templateComponentMap.clear()\n state.templatePathSet.clear()\n state.componentTagMap.clear()\n state.componentIdMap.clear()\n\n let appNavigationDefaults = {}\n let appComponentTags: Record<string, string> = {}\n\n const pages = new Map<string, PageEntry>()\n const components = new Map<string, ComponentEntry>()\n\n const reportWarning = (message: string) => {\n if (warn) {\n warn(message)\n return\n }\n if (typeof process !== 'undefined' && typeof process.emitWarning === 'function') {\n process.emitWarning(message)\n }\n }\n\n const appScript = await resolveScriptFile(join(srcRoot, 'app'))\n if (appScript) {\n state.moduleMeta.set(normalizePath(appScript), {\n kind: 'app',\n id: 'app',\n scriptPath: appScript,\n stylePath: await resolveStyleFile(appScript),\n })\n }\n\n const resolveComponentScript = async (raw: string, importerDir: string) => {\n const base = resolveComponentBase(raw, importerDir, srcRoot)\n if (!base) {\n return undefined\n }\n return resolveScriptFile(base)\n }\n\n const getComponentId = (script: string) => {\n const cached = state.componentIdMap.get(script)\n if (cached) {\n return cached\n }\n const idRelative = relative(srcRoot, script).replace(new RegExp(`${extname(script)}$`), '')\n const componentIdPosix = toPosixId(idRelative)\n state.componentIdMap.set(script, componentIdPosix)\n return componentIdPosix\n }\n\n const getComponentTag = (script: string) => {\n const cached = state.componentTagMap.get(script)\n if (cached) {\n return cached\n }\n const id = getComponentId(script)\n const tag = slugify(id, 'wv-component')\n state.componentTagMap.set(script, tag)\n return tag\n }\n\n const collectComponent = async (componentId: string, importerDir: string) => {\n const base = resolveComponentBase(componentId, importerDir, srcRoot)\n const script = base ? await resolveScriptFile(base) : undefined\n if (!script || components.has(script)) {\n return\n }\n\n const idRelative = relative(srcRoot, script).replace(new RegExp(`${extname(script)}$`), '')\n const componentIdPosix = toPosixId(idRelative)\n const template = await resolveTemplateFile(script)\n const style = await resolveStyleFile(script)\n\n if (template) {\n state.templatePathSet.add(normalizePath(template))\n }\n\n state.moduleMeta.set(normalizePath(script), {\n kind: 'component',\n id: componentIdPosix,\n scriptPath: script,\n templatePath: template,\n stylePath: style,\n })\n\n components.set(script, { script, id: componentIdPosix })\n\n const componentJsonBasePath = `${script.replace(new RegExp(`${extname(script)}$`), '')}.json`\n const componentTags = await collectComponentTagsFromJson({\n jsonBasePath: componentJsonBasePath,\n importerDir: dirname(script),\n warn: reportWarning,\n collectFromConfig: (json, nextImporterDir, jsonPath, nextWarn) => collectComponentTagsFromConfig({\n json,\n importerDir: nextImporterDir,\n jsonPath,\n warn: nextWarn,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n }),\n })\n\n if (!template) {\n return\n }\n\n const mergedTags = mergeComponentTags(appComponentTags, componentTags)\n if (Object.keys(mergedTags).length > 0) {\n state.templateComponentMap.set(normalizePath(template), mergedTags)\n return\n }\n state.templateComponentMap.delete(normalizePath(template))\n }\n\n const appJsonBasePath = join(srcRoot, 'app.json')\n const appJsonPath = await resolveJsonPath(appJsonBasePath)\n if (appJsonPath) {\n const appJson = await readJsonFile(appJsonPath)\n\n if (appJson) {\n appComponentTags = await collectComponentTagsFromConfig({\n json: appJson,\n importerDir: srcRoot,\n jsonPath: appJsonPath,\n warn: reportWarning,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n onResolved: (tags) => {\n appComponentTags = tags\n },\n })\n }\n\n if (appJson?.pages && Array.isArray(appJson.pages)) {\n for (const page of appJson.pages) {\n if (typeof page === 'string') {\n await collectPage(page)\n }\n }\n }\n\n if (appJson?.subPackages && Array.isArray(appJson.subPackages)) {\n for (const pkg of appJson.subPackages) {\n if (!pkg || typeof pkg !== 'object' || !Array.isArray(pkg.pages)) {\n continue\n }\n const root = typeof pkg.root === 'string' ? pkg.root : ''\n for (const page of pkg.pages) {\n if (typeof page !== 'string') {\n continue\n }\n await collectPage(posix.join(root, page))\n }\n }\n }\n\n const windowConfig = isRecord(appJson?.window) ? appJson.window : undefined\n appNavigationDefaults = pickNavigationConfig(windowConfig)\n }\n\n state.appNavigationDefaults = appNavigationDefaults\n state.appComponentTags = appComponentTags\n state.scanResult = {\n app: appScript,\n pages: Array.from(pages.values()),\n components: Array.from(components.values()),\n }\n\n async function collectPage(pageId: string) {\n const base = join(srcRoot, pageId)\n const script = await resolveScriptFile(base)\n if (!script) {\n return\n }\n\n const template = await resolveTemplateFile(base)\n if (template) {\n state.templatePathSet.add(normalizePath(template))\n }\n\n const style = await resolveStyleFile(base)\n const pageJsonBasePath = join(srcRoot, `${pageId}.json`)\n const pageJsonPath = await resolveJsonPath(pageJsonBasePath)\n const pageJson = pageJsonPath ? await readJsonFile(pageJsonPath) : undefined\n\n state.moduleMeta.set(normalizePath(script), {\n kind: 'page',\n id: toPosixId(pageId),\n scriptPath: script,\n templatePath: template,\n stylePath: style,\n })\n\n pages.set(script, {\n script,\n id: toPosixId(pageId),\n })\n\n const pageComponentTags = pageJson && pageJsonPath\n ? await collectComponentTagsFromConfig({\n json: pageJson,\n importerDir: dirname(script),\n jsonPath: pageJsonPath,\n warn: reportWarning,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n })\n : await collectComponentTagsFromJson({\n jsonBasePath: pageJsonBasePath,\n importerDir: dirname(script),\n warn: reportWarning,\n collectFromConfig: (json, importerDir, jsonPath, nextWarn) => collectComponentTagsFromConfig({\n json,\n importerDir,\n jsonPath,\n warn: nextWarn,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n }),\n })\n\n if (template) {\n const mergedTags = mergeComponentTags(appComponentTags, pageComponentTags)\n if (Object.keys(mergedTags).length > 0) {\n state.templateComponentMap.set(normalizePath(template), mergedTags)\n }\n else {\n state.templateComponentMap.delete(normalizePath(template))\n }\n }\n\n if (!template) {\n return\n }\n\n if (pageJson) {\n state.pageNavigationMap.set(\n normalizePath(template),\n mergeNavigationConfig(appNavigationDefaults, pickNavigationConfig(pageJson)),\n )\n return\n }\n\n state.pageNavigationMap.set(normalizePath(template), { ...appNavigationDefaults })\n }\n}\n\nfunction resolveComponentBase(raw: string, importerDir: string, srcRoot: string) {\n if (!raw) {\n return undefined\n }\n if (raw.startsWith('.')) {\n return resolve(importerDir, raw)\n }\n if (raw.startsWith('/')) {\n return resolve(srcRoot, raw.slice(1))\n }\n return resolve(srcRoot, raw)\n}\n"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { readJsonFile, resolveJsonPath } from "./files.mjs";
2
+
3
+ //#region src/plugin/scanConfig.ts
4
+ async function collectComponentTagsFromConfig({ json, importerDir, jsonPath, warn, resolveComponentScript, getComponentTag, collectComponent, onResolved }) {
5
+ const usingComponents = json.usingComponents;
6
+ if (!usingComponents || typeof usingComponents !== "object") return {};
7
+ const tags = {};
8
+ const resolved = [];
9
+ for (const [rawKey, rawValue] of Object.entries(usingComponents)) {
10
+ if (typeof rawValue !== "string") continue;
11
+ const key = normalizeComponentKey(rawKey);
12
+ if (!key) continue;
13
+ const script = await resolveComponentScript(rawValue, importerDir);
14
+ if (!script) {
15
+ warn(`[@weapp-vite/web] usingComponents entry "${rawKey}" not found: ${rawValue} (${jsonPath})`);
16
+ continue;
17
+ }
18
+ tags[key] = getComponentTag(script);
19
+ resolved.push({ rawValue });
20
+ }
21
+ onResolved?.(tags);
22
+ for (const entry of resolved) await collectComponent(entry.rawValue, importerDir);
23
+ return tags;
24
+ }
25
+ async function collectComponentTagsFromJson({ jsonBasePath, importerDir, warn, collectFromConfig }) {
26
+ const resolvedPath = await resolveJsonPath(jsonBasePath);
27
+ if (!resolvedPath) return {};
28
+ const json = await readJsonFile(resolvedPath);
29
+ if (!json) return {};
30
+ return collectFromConfig(json, importerDir, resolvedPath, warn);
31
+ }
32
+ function mergeComponentTags(base, overrides) {
33
+ if (!Object.keys(base).length && !Object.keys(overrides).length) return {};
34
+ return {
35
+ ...base,
36
+ ...overrides
37
+ };
38
+ }
39
+ function normalizeComponentKey(raw) {
40
+ return raw.trim().toLowerCase();
41
+ }
42
+
43
+ //#endregion
44
+ export { collectComponentTagsFromConfig, collectComponentTagsFromJson, mergeComponentTags };
45
+ //# sourceMappingURL=scanConfig.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanConfig.mjs","names":[],"sources":["../../src/plugin/scanConfig.ts"],"sourcesContent":["import type { WarnFn } from './types'\nimport { readJsonFile, resolveJsonPath } from './files'\n\ninterface CollectComponentTagsFromConfigOptions {\n json: Record<string, unknown>\n importerDir: string\n jsonPath: string\n warn: WarnFn\n resolveComponentScript: (raw: string, importerDir: string) => Promise<string | undefined>\n getComponentTag: (script: string) => string\n collectComponent: (componentId: string, importerDir: string) => Promise<void>\n onResolved?: (tags: Record<string, string>) => void\n}\n\nexport async function collectComponentTagsFromConfig({\n json,\n importerDir,\n jsonPath,\n warn,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n onResolved,\n}: CollectComponentTagsFromConfigOptions) {\n const usingComponents = json.usingComponents\n if (!usingComponents || typeof usingComponents !== 'object') {\n return {}\n }\n\n const tags: Record<string, string> = {}\n const resolved: Array<{ rawValue: string }> = []\n\n for (const [rawKey, rawValue] of Object.entries(usingComponents)) {\n if (typeof rawValue !== 'string') {\n continue\n }\n const key = normalizeComponentKey(rawKey)\n if (!key) {\n continue\n }\n const script = await resolveComponentScript(rawValue, importerDir)\n if (!script) {\n warn(`[@weapp-vite/web] usingComponents entry \"${rawKey}\" not found: ${rawValue} (${jsonPath})`)\n continue\n }\n const tag = getComponentTag(script)\n tags[key] = tag\n resolved.push({ rawValue })\n }\n\n onResolved?.(tags)\n for (const entry of resolved) {\n await collectComponent(entry.rawValue, importerDir)\n }\n\n return tags\n}\n\ninterface CollectComponentTagsFromJsonOptions {\n jsonBasePath: string\n importerDir: string\n warn: WarnFn\n collectFromConfig: (json: Record<string, unknown>, importerDir: string, jsonPath: string, warn: WarnFn) => Promise<Record<string, string>>\n}\n\nexport async function collectComponentTagsFromJson({\n jsonBasePath,\n importerDir,\n warn,\n collectFromConfig,\n}: CollectComponentTagsFromJsonOptions) {\n const resolvedPath = await resolveJsonPath(jsonBasePath)\n if (!resolvedPath) {\n return {}\n }\n const json = await readJsonFile(resolvedPath)\n if (!json) {\n return {}\n }\n return collectFromConfig(json, importerDir, resolvedPath, warn)\n}\n\nexport function mergeComponentTags(base: Record<string, string>, overrides: Record<string, string>) {\n if (!Object.keys(base).length && !Object.keys(overrides).length) {\n return {}\n }\n return {\n ...base,\n ...overrides,\n }\n}\n\nfunction normalizeComponentKey(raw: string) {\n return raw.trim().toLowerCase()\n}\n"],"mappings":";;;AAcA,eAAsB,+BAA+B,EACnD,MACA,aACA,UACA,MACA,wBACA,iBACA,kBACA,cACwC;CACxC,MAAM,kBAAkB,KAAK;AAC7B,KAAI,CAAC,mBAAmB,OAAO,oBAAoB,SACjD,QAAO,EAAE;CAGX,MAAM,OAA+B,EAAE;CACvC,MAAM,WAAwC,EAAE;AAEhD,MAAK,MAAM,CAAC,QAAQ,aAAa,OAAO,QAAQ,gBAAgB,EAAE;AAChE,MAAI,OAAO,aAAa,SACtB;EAEF,MAAM,MAAM,sBAAsB,OAAO;AACzC,MAAI,CAAC,IACH;EAEF,MAAM,SAAS,MAAM,uBAAuB,UAAU,YAAY;AAClE,MAAI,CAAC,QAAQ;AACX,QAAK,4CAA4C,OAAO,eAAe,SAAS,IAAI,SAAS,GAAG;AAChG;;AAGF,OAAK,OADO,gBAAgB,OAAO;AAEnC,WAAS,KAAK,EAAE,UAAU,CAAC;;AAG7B,cAAa,KAAK;AAClB,MAAK,MAAM,SAAS,SAClB,OAAM,iBAAiB,MAAM,UAAU,YAAY;AAGrD,QAAO;;AAUT,eAAsB,6BAA6B,EACjD,cACA,aACA,MACA,qBACsC;CACtC,MAAM,eAAe,MAAM,gBAAgB,aAAa;AACxD,KAAI,CAAC,aACH,QAAO,EAAE;CAEX,MAAM,OAAO,MAAM,aAAa,aAAa;AAC7C,KAAI,CAAC,KACH,QAAO,EAAE;AAEX,QAAO,kBAAkB,MAAM,aAAa,cAAc,KAAK;;AAGjE,SAAgB,mBAAmB,MAA8B,WAAmC;AAClG,KAAI,CAAC,OAAO,KAAK,KAAK,CAAC,UAAU,CAAC,OAAO,KAAK,UAAU,CAAC,OACvD,QAAO,EAAE;AAEX,QAAO;EACL,GAAG;EACH,GAAG;EACJ;;AAGH,SAAS,sBAAsB,KAAa;AAC1C,QAAO,IAAI,MAAM,CAAC,aAAa"}
@@ -0,0 +1,22 @@
1
+ //#region src/plugin/state.ts
2
+ function createEmptyScanState() {
3
+ return {
4
+ moduleMeta: /* @__PURE__ */ new Map(),
5
+ pageNavigationMap: /* @__PURE__ */ new Map(),
6
+ templateComponentMap: /* @__PURE__ */ new Map(),
7
+ templatePathSet: /* @__PURE__ */ new Set(),
8
+ componentTagMap: /* @__PURE__ */ new Map(),
9
+ componentIdMap: /* @__PURE__ */ new Map(),
10
+ appNavigationDefaults: {},
11
+ appComponentTags: {},
12
+ scanResult: {
13
+ app: void 0,
14
+ pages: [],
15
+ components: []
16
+ }
17
+ };
18
+ }
19
+
20
+ //#endregion
21
+ export { createEmptyScanState };
22
+ //# sourceMappingURL=state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.mjs","names":[],"sources":["../../src/plugin/state.ts"],"sourcesContent":["import type { ScanState } from './types'\n\nexport function createEmptyScanState(): ScanState {\n return {\n moduleMeta: new Map(),\n pageNavigationMap: new Map(),\n templateComponentMap: new Map(),\n templatePathSet: new Set(),\n componentTagMap: new Map(),\n componentIdMap: new Map(),\n appNavigationDefaults: {},\n appComponentTags: {},\n scanResult: {\n app: undefined,\n pages: [],\n components: [],\n },\n }\n}\n"],"mappings":";AAEA,SAAgB,uBAAkC;AAChD,QAAO;EACL,4BAAY,IAAI,KAAK;EACrB,mCAAmB,IAAI,KAAK;EAC5B,sCAAsB,IAAI,KAAK;EAC/B,iCAAiB,IAAI,KAAK;EAC1B,iCAAiB,IAAI,KAAK;EAC1B,gCAAgB,IAAI,KAAK;EACzB,uBAAuB,EAAE;EACzB,kBAAkB,EAAE;EACpB,YAAY;GACV,KAAK;GACL,OAAO,EAAE;GACT,YAAY,EAAE;GACf;EACF"}
@@ -0,0 +1,46 @@
1
+ import { WxssTransformOptions } from "../css/wxss.mjs";
2
+
3
+ //#region src/plugin/types.d.ts
4
+ interface WeappWebPluginOptions {
5
+ wxss?: WxssTransformOptions;
6
+ /**
7
+ * 小程序项目的源代码根目录,默认 `<root>/src`。
8
+ */
9
+ srcDir?: string;
10
+ /**
11
+ * Web 运行时的表单行为配置。
12
+ */
13
+ form?: {
14
+ /**
15
+ * 为 true 时阻止浏览器默认的表单提交,默认 true。
16
+ */
17
+ preventDefault?: boolean;
18
+ };
19
+ /**
20
+ * Web 运行时执行策略。
21
+ */
22
+ runtime?: {
23
+ /**
24
+ * 表达式与 WXS 执行模式:
25
+ * - compat: 保持当前行为(默认)
26
+ * - safe: 忽略解析/执行异常并告警
27
+ * - strict: 解析/执行异常直接抛错
28
+ */
29
+ executionMode?: 'compat' | 'safe' | 'strict';
30
+ /**
31
+ * 运行时告警策略:
32
+ * - warn: 使用 console.warn 输出(默认)
33
+ * - error: 使用 console.error 输出
34
+ * - off: 关闭告警输出
35
+ *
36
+ * dedupe 为 true 时同 key 告警仅输出一次(默认)。
37
+ */
38
+ warnings?: {
39
+ level?: 'off' | 'warn' | 'error';
40
+ dedupe?: boolean;
41
+ };
42
+ };
43
+ }
44
+ //#endregion
45
+ export { WeappWebPluginOptions };
46
+ //# sourceMappingURL=types.d.mts.map
package/dist/plugin.d.mts CHANGED
@@ -1,2 +1,3 @@
1
- import { n as WeappWebPluginOptions, t as weappWebPlugin } from "./plugin-DP2iPVmw.mjs";
2
- export { WeappWebPluginOptions, weappWebPlugin };
1
+ import { WeappWebPluginOptions } from "./plugin/types.mjs";
2
+ import { weappWebPlugin } from "./plugin/index.mjs";
3
+ export { type WeappWebPluginOptions, weappWebPlugin };
package/dist/plugin.mjs CHANGED
@@ -1,2 +1,3 @@
1
- import { t as weappWebPlugin } from "./plugin-BARxSPO8.mjs";
2
- export { weappWebPlugin };
1
+ import { weappWebPlugin } from "./plugin/index.mjs";
2
+
3
+ export { weappWebPlugin };
@@ -0,0 +1,92 @@
1
+ //#region src/runtime/button/helpers.ts
2
+ const DEFAULT_HOVER_CLASS = "button-hover";
3
+ function toBoolean(value) {
4
+ if (value === null) return false;
5
+ const normalized = value.trim().toLowerCase();
6
+ if (normalized === "" || normalized === "true") return true;
7
+ return normalized !== "false" && normalized !== "0";
8
+ }
9
+ function parseNumber(value, fallback) {
10
+ if (value === null || value === "") return fallback;
11
+ const numeric = Number(value);
12
+ return Number.isFinite(numeric) ? numeric : fallback;
13
+ }
14
+ function isDisabled(element) {
15
+ return toBoolean(element.getAttribute("disabled")) || toBoolean(element.getAttribute("loading"));
16
+ }
17
+ function normalizeType(value) {
18
+ if (!value) return "default";
19
+ const normalized = value.toLowerCase();
20
+ if (normalized === "primary" || normalized === "warn") return normalized;
21
+ return "default";
22
+ }
23
+ function getHoverClass(element) {
24
+ const hoverClass = element.getAttribute("hover-class");
25
+ if (!hoverClass) return DEFAULT_HOVER_CLASS;
26
+ if (hoverClass === "none") return "";
27
+ return hoverClass;
28
+ }
29
+ function isInternalNode(node) {
30
+ return node instanceof HTMLElement && node.dataset?.weappInternal === "true";
31
+ }
32
+ function collectFormValues(form) {
33
+ const values = {};
34
+ const appendValue = (name, value, multiple = false) => {
35
+ if (multiple) {
36
+ if (!Array.isArray(values[name])) values[name] = values[name] === void 0 ? [] : [values[name]];
37
+ values[name].push(value);
38
+ return;
39
+ }
40
+ values[name] = value;
41
+ };
42
+ const formElements = Array.from(form.elements ?? []);
43
+ for (const element of formElements) {
44
+ if (!(element instanceof HTMLElement)) continue;
45
+ const name = element.getAttribute("name")?.trim();
46
+ if (!name) continue;
47
+ if ("disabled" in element ? element.disabled : toBoolean(element.getAttribute("disabled"))) continue;
48
+ if (element instanceof HTMLInputElement) {
49
+ const type = element.type?.toLowerCase();
50
+ if (type === "checkbox") {
51
+ if (element.checked) appendValue(name, element.value, true);
52
+ continue;
53
+ }
54
+ if (type === "radio") {
55
+ if (element.checked) appendValue(name, element.value);
56
+ continue;
57
+ }
58
+ appendValue(name, element.value);
59
+ continue;
60
+ }
61
+ if (element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement) {
62
+ appendValue(name, element.value);
63
+ continue;
64
+ }
65
+ }
66
+ const customControls = form.querySelectorAll("switch, checkbox, radio, picker, slider, weapp-switch, weapp-checkbox, weapp-radio, weapp-picker, weapp-slider");
67
+ for (const element of Array.from(customControls)) {
68
+ const name = element.getAttribute("name")?.trim();
69
+ if (!name) continue;
70
+ if (toBoolean(element.getAttribute("disabled"))) continue;
71
+ const tag = element.tagName.toLowerCase();
72
+ const rawValue = element.value ?? element.getAttribute("value");
73
+ if (tag.includes("checkbox")) {
74
+ if (element.checked ?? toBoolean(element.getAttribute("checked"))) appendValue(name, rawValue ?? true, true);
75
+ continue;
76
+ }
77
+ if (tag.includes("radio")) {
78
+ if (element.checked ?? toBoolean(element.getAttribute("checked"))) appendValue(name, rawValue ?? true);
79
+ continue;
80
+ }
81
+ if (tag.includes("switch")) {
82
+ appendValue(name, element.checked ?? toBoolean(element.getAttribute("checked")));
83
+ continue;
84
+ }
85
+ appendValue(name, rawValue ?? "");
86
+ }
87
+ return values;
88
+ }
89
+
90
+ //#endregion
91
+ export { collectFormValues, getHoverClass, isDisabled, isInternalNode, normalizeType, parseNumber, toBoolean };
92
+ //# sourceMappingURL=helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.mjs","names":[],"sources":["../../../src/runtime/button/helpers.ts"],"sourcesContent":["const DEFAULT_HOVER_CLASS = 'button-hover'\n\nexport const DEFAULT_HOVER_START = 20\nexport const DEFAULT_HOVER_STAY = 70\n\nexport function toBoolean(value: string | null) {\n if (value === null) {\n return false\n }\n const normalized = value.trim().toLowerCase()\n if (normalized === '' || normalized === 'true') {\n return true\n }\n return normalized !== 'false' && normalized !== '0'\n}\n\nexport function parseNumber(value: string | null, fallback: number) {\n if (value === null || value === '') {\n return fallback\n }\n const numeric = Number(value)\n return Number.isFinite(numeric) ? numeric : fallback\n}\n\nexport function isDisabled(element: HTMLElement) {\n return toBoolean(element.getAttribute('disabled')) || toBoolean(element.getAttribute('loading'))\n}\n\nexport function normalizeType(value: string | null) {\n if (!value) {\n return 'default'\n }\n const normalized = value.toLowerCase()\n if (normalized === 'primary' || normalized === 'warn') {\n return normalized\n }\n return 'default'\n}\n\nexport function getHoverClass(element: HTMLElement) {\n const hoverClass = element.getAttribute('hover-class')\n if (!hoverClass) {\n return DEFAULT_HOVER_CLASS\n }\n if (hoverClass === 'none') {\n return ''\n }\n return hoverClass\n}\n\nexport function isInternalNode(node: Node) {\n return node instanceof HTMLElement && node.dataset?.weappInternal === 'true'\n}\n\nexport function collectFormValues(form: HTMLFormElement) {\n const values: Record<string, any> = {}\n\n const appendValue = (name: string, value: any, multiple = false) => {\n if (multiple) {\n if (!Array.isArray(values[name])) {\n values[name] = values[name] === undefined ? [] : [values[name]]\n }\n values[name].push(value)\n return\n }\n values[name] = value\n }\n\n const formElements = Array.from(form.elements ?? [])\n for (const element of formElements) {\n if (!(element instanceof HTMLElement)) {\n continue\n }\n const name = element.getAttribute('name')?.trim()\n if (!name) {\n continue\n }\n const disabled = 'disabled' in element ? (element as any).disabled : toBoolean(element.getAttribute('disabled'))\n if (disabled) {\n continue\n }\n if (element instanceof HTMLInputElement) {\n const type = element.type?.toLowerCase()\n if (type === 'checkbox') {\n if (element.checked) {\n appendValue(name, element.value, true)\n }\n continue\n }\n if (type === 'radio') {\n if (element.checked) {\n appendValue(name, element.value)\n }\n continue\n }\n appendValue(name, element.value)\n continue\n }\n if (element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement) {\n appendValue(name, (element as HTMLTextAreaElement | HTMLSelectElement).value)\n continue\n }\n }\n\n const customControls = form.querySelectorAll('switch, checkbox, radio, picker, slider, weapp-switch, weapp-checkbox, weapp-radio, weapp-picker, weapp-slider')\n for (const element of Array.from(customControls)) {\n const name = element.getAttribute('name')?.trim()\n if (!name) {\n continue\n }\n const disabled = toBoolean(element.getAttribute('disabled'))\n if (disabled) {\n continue\n }\n const tag = element.tagName.toLowerCase()\n const rawValue = (element as any).value ?? element.getAttribute('value')\n if (tag.includes('checkbox')) {\n const checked = (element as any).checked ?? toBoolean(element.getAttribute('checked'))\n if (checked) {\n appendValue(name, rawValue ?? true, true)\n }\n continue\n }\n if (tag.includes('radio')) {\n const checked = (element as any).checked ?? toBoolean(element.getAttribute('checked'))\n if (checked) {\n appendValue(name, rawValue ?? true)\n }\n continue\n }\n if (tag.includes('switch')) {\n const checked = (element as any).checked ?? toBoolean(element.getAttribute('checked'))\n appendValue(name, checked)\n continue\n }\n appendValue(name, rawValue ?? '')\n }\n\n return values\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ //#region src/runtime/button/index.d.ts
2
+ interface ButtonFormConfig {
3
+ preventDefault?: boolean;
4
+ }
5
+ declare function ensureButtonDefined(): void;
6
+ declare function setButtonFormConfig(next: ButtonFormConfig): void;
7
+ //#endregion
8
+ export { type ButtonFormConfig, ensureButtonDefined, setButtonFormConfig };
9
+ //# sourceMappingURL=index.d.mts.map