@weapp-vite/web 1.3.28 → 1.3.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.mjs +0 -8
- package/dist/compiler/wxml/attributes.mjs +0 -8
- package/dist/compiler/wxml/attributes.mjs.map +1 -1
- package/dist/compiler/wxml/compile.mjs +0 -8
- package/dist/compiler/wxml/compile.mjs.map +1 -1
- package/dist/compiler/wxml/dependency.mjs +0 -8
- package/dist/compiler/wxml/dependency.mjs.map +1 -1
- package/dist/compiler/wxml/interpolation.mjs +0 -8
- package/dist/compiler/wxml/interpolation.mjs.map +1 -1
- package/dist/compiler/wxml/navigation.mjs +0 -8
- package/dist/compiler/wxml/navigation.mjs.map +1 -1
- package/dist/compiler/wxml/parser.mjs +0 -8
- package/dist/compiler/wxml/parser.mjs.map +1 -1
- package/dist/compiler/wxml/renderer.mjs +0 -8
- package/dist/compiler/wxml/renderer.mjs.map +1 -1
- package/dist/compiler/wxml/specialNodes.mjs +0 -8
- package/dist/compiler/wxml/specialNodes.mjs.map +1 -1
- package/dist/compiler/wxs.mjs +0 -8
- package/dist/compiler/wxs.mjs.map +1 -1
- package/dist/css/wxss.d.mts +0 -2
- package/dist/css/wxss.mjs +0 -8
- package/dist/css/wxss.mjs.map +1 -1
- package/dist/index.d.mts +0 -2
- package/dist/index.mjs +0 -8
- package/dist/plugin/constants.mjs +0 -8
- package/dist/plugin/constants.mjs.map +1 -1
- package/dist/plugin/entry.mjs +0 -8
- package/dist/plugin/entry.mjs.map +1 -1
- package/dist/plugin/files.mjs +0 -8
- package/dist/plugin/files.mjs.map +1 -1
- package/dist/plugin/index.d.mts +0 -2
- package/dist/plugin/index.mjs +0 -8
- package/dist/plugin/index.mjs.map +1 -1
- package/dist/plugin/navigation.mjs +0 -8
- package/dist/plugin/navigation.mjs.map +1 -1
- package/dist/plugin/path.mjs +0 -8
- package/dist/plugin/path.mjs.map +1 -1
- package/dist/plugin/register.mjs +0 -8
- package/dist/plugin/register.mjs.map +1 -1
- package/dist/plugin/scan.mjs +0 -8
- package/dist/plugin/scan.mjs.map +1 -1
- package/dist/plugin/scanConfig.mjs +0 -8
- package/dist/plugin/scanConfig.mjs.map +1 -1
- package/dist/plugin/state.mjs +0 -8
- package/dist/plugin/state.mjs.map +1 -1
- package/dist/plugin/types.d.mts +0 -2
- package/dist/plugin.d.mts +0 -2
- package/dist/plugin.mjs +0 -8
- package/dist/runtime/button/helpers.mjs +0 -8
- package/dist/runtime/button/helpers.mjs.map +1 -1
- package/dist/runtime/button/index.d.mts +0 -2
- package/dist/runtime/button/index.mjs +0 -8
- package/dist/runtime/button/index.mjs.map +1 -1
- package/dist/runtime/button/style.mjs +0 -8
- package/dist/runtime/button/style.mjs.map +1 -1
- package/dist/runtime/component/behavior.mjs +0 -8
- package/dist/runtime/component/behavior.mjs.map +1 -1
- package/dist/runtime/component/constants.mjs +0 -8
- package/dist/runtime/component/constants.mjs.map +1 -1
- package/dist/runtime/component/dom.mjs +0 -8
- package/dist/runtime/component/dom.mjs.map +1 -1
- package/dist/runtime/component/element.mjs +0 -8
- package/dist/runtime/component/element.mjs.map +1 -1
- package/dist/runtime/component/events.mjs +0 -8
- package/dist/runtime/component/events.mjs.map +1 -1
- package/dist/runtime/component/index.d.mts +0 -2
- package/dist/runtime/component/index.mjs +0 -8
- package/dist/runtime/component/index.mjs.map +1 -1
- package/dist/runtime/component/state.mjs +0 -8
- package/dist/runtime/component/state.mjs.map +1 -1
- package/dist/runtime/component/types.d.mts +0 -2
- package/dist/runtime/component/utils.mjs +0 -8
- package/dist/runtime/component/utils.mjs.map +1 -1
- package/dist/runtime/execution.d.mts +0 -2
- package/dist/runtime/execution.mjs +0 -8
- package/dist/runtime/execution.mjs.map +1 -1
- package/dist/runtime/index.d.mts +0 -2
- package/dist/runtime/index.mjs +0 -8
- package/dist/runtime/legacyTemplate/dom.mjs +0 -8
- package/dist/runtime/legacyTemplate/dom.mjs.map +1 -1
- package/dist/runtime/legacyTemplate/expression.mjs +0 -8
- package/dist/runtime/legacyTemplate/expression.mjs.map +1 -1
- package/dist/runtime/legacyTemplate/index.d.mts +0 -2
- package/dist/runtime/legacyTemplate/index.mjs +0 -8
- package/dist/runtime/legacyTemplate/index.mjs.map +1 -1
- package/dist/runtime/legacyTemplate/types.d.mts +0 -2
- package/dist/runtime/navigationBar/index.d.mts +0 -2
- package/dist/runtime/navigationBar/index.mjs +0 -8
- package/dist/runtime/navigationBar/index.mjs.map +1 -1
- package/dist/runtime/navigationBar/style.mjs +0 -8
- package/dist/runtime/navigationBar/style.mjs.map +1 -1
- package/dist/runtime/polyfill/ad.mjs +0 -8
- package/dist/runtime/polyfill/ad.mjs.map +1 -1
- package/dist/runtime/polyfill/appState.mjs +0 -8
- package/dist/runtime/polyfill/appState.mjs.map +1 -1
- package/dist/runtime/polyfill/async.mjs +0 -8
- package/dist/runtime/polyfill/async.mjs.map +1 -1
- package/dist/runtime/polyfill/auth.mjs +0 -8
- package/dist/runtime/polyfill/auth.mjs.map +1 -1
- package/dist/runtime/polyfill/authApi.mjs +0 -8
- package/dist/runtime/polyfill/authApi.mjs.map +1 -1
- package/dist/runtime/polyfill/background.mjs +0 -8
- package/dist/runtime/polyfill/background.mjs.map +1 -1
- package/dist/runtime/polyfill/canvasContext.mjs +0 -8
- package/dist/runtime/polyfill/canvasContext.mjs.map +1 -1
- package/dist/runtime/polyfill/capability.mjs +0 -8
- package/dist/runtime/polyfill/capability.mjs.map +1 -1
- package/dist/runtime/polyfill/cloud.mjs +0 -8
- package/dist/runtime/polyfill/cloud.mjs.map +1 -1
- package/dist/runtime/polyfill/device.mjs +0 -8
- package/dist/runtime/polyfill/device.mjs.map +1 -1
- package/dist/runtime/polyfill/deviceApi.mjs +0 -8
- package/dist/runtime/polyfill/deviceApi.mjs.map +1 -1
- package/dist/runtime/polyfill/deviceAuthSystemApi.d.mts +0 -2
- package/dist/runtime/polyfill/deviceAuthSystemApi.mjs +0 -8
- package/dist/runtime/polyfill/deviceAuthSystemApi.mjs.map +1 -1
- package/dist/runtime/polyfill/filePicker.mjs +0 -8
- package/dist/runtime/polyfill/filePicker.mjs.map +1 -1
- package/dist/runtime/polyfill/fileSystemManager.mjs +0 -8
- package/dist/runtime/polyfill/fileSystemManager.mjs.map +1 -1
- package/dist/runtime/polyfill/files.mjs +0 -8
- package/dist/runtime/polyfill/files.mjs.map +1 -1
- package/dist/runtime/polyfill/index.d.mts +0 -2
- package/dist/runtime/polyfill/index.mjs +0 -8
- package/dist/runtime/polyfill/index.mjs.map +1 -1
- package/dist/runtime/polyfill/interaction.mjs +0 -8
- package/dist/runtime/polyfill/interaction.mjs.map +1 -1
- package/dist/runtime/polyfill/interactionApi.mjs +0 -8
- package/dist/runtime/polyfill/interactionApi.mjs.map +1 -1
- package/dist/runtime/polyfill/location.mjs +0 -8
- package/dist/runtime/polyfill/location.mjs.map +1 -1
- package/dist/runtime/polyfill/locationApi.mjs +0 -8
- package/dist/runtime/polyfill/locationApi.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaActions.mjs +0 -8
- package/dist/runtime/polyfill/mediaActions.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaApi/file.mjs +0 -8
- package/dist/runtime/polyfill/mediaApi/file.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaApi/info.mjs +0 -8
- package/dist/runtime/polyfill/mediaApi/info.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaApi/picker.mjs +0 -8
- package/dist/runtime/polyfill/mediaApi/picker.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaApi/preview.mjs +0 -8
- package/dist/runtime/polyfill/mediaApi/preview.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaApi/process.mjs +0 -8
- package/dist/runtime/polyfill/mediaApi/process.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaInfo.mjs +0 -8
- package/dist/runtime/polyfill/mediaInfo.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaPicker.mjs +0 -8
- package/dist/runtime/polyfill/mediaPicker.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaProcess.mjs +0 -8
- package/dist/runtime/polyfill/mediaProcess.mjs.map +1 -1
- package/dist/runtime/polyfill/menuApi.mjs +0 -8
- package/dist/runtime/polyfill/menuApi.mjs.map +1 -1
- package/dist/runtime/polyfill/navigationBarRuntime.mjs +0 -8
- package/dist/runtime/polyfill/navigationBarRuntime.mjs.map +1 -1
- package/dist/runtime/polyfill/network/request.mjs +0 -8
- package/dist/runtime/polyfill/network/request.mjs.map +1 -1
- package/dist/runtime/polyfill/network/requestBridge.mjs +0 -8
- package/dist/runtime/polyfill/network/requestBridge.mjs.map +1 -1
- package/dist/runtime/polyfill/network/status.mjs +0 -8
- package/dist/runtime/polyfill/network/status.mjs.map +1 -1
- package/dist/runtime/polyfill/platformApi.mjs +0 -8
- package/dist/runtime/polyfill/platformApi.mjs.map +1 -1
- package/dist/runtime/polyfill/platformRuntime.mjs +0 -8
- package/dist/runtime/polyfill/platformRuntime.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/dom.mjs +0 -8
- package/dist/runtime/polyfill/routeRuntime/dom.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs +0 -8
- package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/options.d.mts +0 -2
- package/dist/runtime/polyfill/routeRuntime/options.mjs +0 -8
- package/dist/runtime/polyfill/routeRuntime/options.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/url.mjs +0 -8
- package/dist/runtime/polyfill/routeRuntime/url.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime.d.mts +0 -2
- package/dist/runtime/polyfill/routeRuntime.mjs +0 -8
- package/dist/runtime/polyfill/routeRuntime.mjs.map +1 -1
- package/dist/runtime/polyfill/runtimeCapabilityApi.mjs +0 -8
- package/dist/runtime/polyfill/runtimeCapabilityApi.mjs.map +1 -1
- package/dist/runtime/polyfill/runtimeDataApi.d.mts +0 -2
- package/dist/runtime/polyfill/runtimeDataApi.mjs +0 -8
- package/dist/runtime/polyfill/runtimeDataApi.mjs.map +1 -1
- package/dist/runtime/polyfill/runtimeInfra.mjs +0 -8
- package/dist/runtime/polyfill/runtimeInfra.mjs.map +1 -1
- package/dist/runtime/polyfill/runtimeOps.mjs +0 -8
- package/dist/runtime/polyfill/runtimeOps.mjs.map +1 -1
- package/dist/runtime/polyfill/selectorQuery.mjs +0 -8
- package/dist/runtime/polyfill/selectorQuery.mjs.map +1 -1
- package/dist/runtime/polyfill/storage.mjs +0 -8
- package/dist/runtime/polyfill/storage.mjs.map +1 -1
- package/dist/runtime/polyfill/storageAsync.mjs +0 -8
- package/dist/runtime/polyfill/storageAsync.mjs.map +1 -1
- package/dist/runtime/polyfill/subscribe.mjs +0 -8
- package/dist/runtime/polyfill/subscribe.mjs.map +1 -1
- package/dist/runtime/polyfill/system.mjs +0 -8
- package/dist/runtime/polyfill/system.mjs.map +1 -1
- package/dist/runtime/polyfill/systemApi.mjs +0 -8
- package/dist/runtime/polyfill/systemApi.mjs.map +1 -1
- package/dist/runtime/polyfill/types/base.d.mts +0 -2
- package/dist/runtime/polyfill/types/common.d.mts +0 -2
- package/dist/runtime/polyfill/types/locationRuntime.d.mts +0 -2
- package/dist/runtime/polyfill/types/mediaAuth.d.mts +0 -2
- package/dist/runtime/polyfill/types/platformRuntime.d.mts +0 -2
- package/dist/runtime/polyfill/types/systemAuth.d.mts +0 -2
- package/dist/runtime/polyfill/ui.mjs +0 -8
- package/dist/runtime/polyfill/ui.mjs.map +1 -1
- package/dist/runtime/polyfill/uiFeedback.mjs +0 -8
- package/dist/runtime/polyfill/uiFeedback.mjs.map +1 -1
- package/dist/runtime/polyfill/uiMediaApi.d.mts +0 -2
- package/dist/runtime/polyfill/uiMediaApi.mjs +0 -8
- package/dist/runtime/polyfill/uiMediaApi.mjs.map +1 -1
- package/dist/runtime/polyfill/videoContext.mjs +0 -8
- package/dist/runtime/polyfill/videoContext.mjs.map +1 -1
- package/dist/runtime/polyfill/vkSession.mjs +0 -8
- package/dist/runtime/polyfill/vkSession.mjs.map +1 -1
- package/dist/runtime/polyfill/windowResize.mjs +0 -8
- package/dist/runtime/polyfill/windowResize.mjs.map +1 -1
- package/dist/runtime/polyfill/worker.mjs +0 -8
- package/dist/runtime/polyfill/worker.mjs.map +1 -1
- package/dist/runtime/polyfill.d.mts +0 -2
- package/dist/runtime/renderContext.d.mts +0 -2
- package/dist/runtime/renderContext.mjs +0 -8
- package/dist/runtime/renderContext.mjs.map +1 -1
- package/dist/runtime/rpx.d.mts +0 -2
- package/dist/runtime/rpx.mjs +0 -8
- package/dist/runtime/rpx.mjs.map +1 -1
- package/dist/runtime/style.d.mts +0 -2
- package/dist/runtime/style.mjs +0 -8
- package/dist/runtime/style.mjs.map +1 -1
- package/dist/runtime/template.d.mts +0 -2
- package/dist/runtime/utils/object.mjs +0 -8
- package/dist/runtime/utils/object.mjs.map +1 -1
- package/dist/runtime/warning.d.mts +0 -2
- package/dist/runtime/warning.mjs +0 -8
- package/dist/runtime/warning.mjs.map +1 -1
- package/dist/shared/slugify.mjs +0 -8
- package/dist/shared/slugify.mjs.map +1 -1
- package/dist/shared/wxml.mjs +0 -8
- package/dist/shared/wxml.mjs.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/plugin/index.ts"],"sourcesContent":["import type { SourceMap } from 'magic-string'\nimport type { WeappWebPluginOptions } from './types'\nimport process from 'node:process'\n\nimport { extname, resolve } from 'pathe'\nimport { compileWxml } from '../compiler/wxml'\nimport { transformWxsToEsm } from '../compiler/wxs'\nimport { transformWxssToCss } from '../css/wxss'\nimport { ENTRY_ID, SCRIPT_EXTS, STYLE_EXTS, TEMPLATE_EXTS, TRANSFORM_STYLE_EXTS, WXS_EXTS } from './constants'\nimport { generateEntryModule } from './entry'\nimport { cleanUrl, isHtmlEntry, isInsideDir, normalizePath, resolveTemplatePathSync, resolveWxsPathSync, toRelativeImport } from './path'\nimport { transformScriptModule } from './register'\nimport { scanProject } from './scan'\nimport { createEmptyScanState } from './state'\n\ninterface WebPluginContext {\n warn?: (message: string) => void\n addWatchFile?: (id: string) => void\n}\n\ntype WebTransformResult = { code: string, map: SourceMap | null } | null\n\ninterface WebResolvedConfig {\n root: string\n command: string\n}\n\ninterface WebHmrContext {\n file: string\n}\n\ninterface WeappWebVitePlugin {\n name: string\n enforce?: 'pre' | 'post'\n configResolved?: (this: WebPluginContext, config: WebResolvedConfig) => void | Promise<void>\n buildStart?: (this: WebPluginContext) => void | Promise<void>\n resolveId?: (id: string) => string | null | Promise<string | null>\n load?: (id: string) => string | null | Promise<string | null>\n handleHotUpdate?: (this: WebPluginContext, ctx: WebHmrContext) => void | Promise<void>\n transform?: (\n this: WebPluginContext,\n code: string,\n id: string,\n ) => WebTransformResult | Promise<WebTransformResult>\n}\n\nfunction isTemplateFile(id: string) {\n const lower = id.toLowerCase()\n return TEMPLATE_EXTS.some(ext => lower.endsWith(ext))\n}\n\nfunction isWxsFile(id: string) {\n const lower = id.toLowerCase()\n return WXS_EXTS.some(ext => lower.endsWith(ext))\n}\n\nfunction hasWxsQuery(id: string) {\n return id.includes('?wxs') || id.includes('&wxs')\n}\n\nfunction createInlineStyleModule(css: string) {\n const serialized = JSON.stringify(css)\n return [\n `const __weapp_injected_styles__ = new Map()`,\n `function __weapp_createStyleId__(css) {`,\n ` let hash = 2166136261`,\n ` for (let i = 0; i < css.length; i++) {`,\n ` hash ^= css.charCodeAt(i)`,\n ` hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24)`,\n ` }`,\n ` return 'weapp-web-style-' + (hash >>> 0).toString(36)`,\n `}`,\n `function __weapp_removeStyle__(id) {`,\n ` if (typeof document === 'undefined') {`,\n ` return`,\n ` }`,\n ` const style = __weapp_injected_styles__.get(id)`,\n ` if (style) {`,\n ` style.remove()`,\n ` __weapp_injected_styles__.delete(id)`,\n ` }`,\n `}`,\n `function injectStyle(css, id) {`,\n ` if (typeof document === 'undefined') {`,\n ` return () => {}`,\n ` }`,\n ` const styleId = id ?? __weapp_createStyleId__(css)`,\n ` const existing = __weapp_injected_styles__.get(styleId)`,\n ` if (existing) {`,\n ` if (existing.textContent !== css) {`,\n ` existing.textContent = css`,\n ` }`,\n ` return () => __weapp_removeStyle__(styleId)`,\n ` }`,\n ` const style = document.createElement('style')`,\n ` style.id = styleId`,\n ` style.textContent = css`,\n ` document.head.append(style)`,\n ` __weapp_injected_styles__.set(styleId, style)`,\n ` return () => __weapp_removeStyle__(styleId)`,\n `}`,\n `const css = ${serialized}`,\n `export default css`,\n `export function useStyle(id) {`,\n ` return injectStyle(css, id)`,\n `}`,\n ].join('\\n')\n}\n\nexport function weappWebPlugin(options: WeappWebPluginOptions = {}): WeappWebVitePlugin {\n let root = process.cwd()\n let srcRoot = resolve(root, options.srcDir ?? 'src')\n let enableHmr = false\n\n const state = createEmptyScanState()\n const wxssOptions = options.wxss\n\n const resolveTemplatePath = (raw: string, importer: string) => resolveTemplatePathSync(raw, importer, srcRoot)\n const resolveWxsPath = (raw: string, importer: string) => resolveWxsPathSync(raw, importer, srcRoot)\n\n return {\n name: '@weapp-vite/web',\n enforce: 'pre',\n async configResolved(this: WebPluginContext, config: WebResolvedConfig) {\n root = config.root\n srcRoot = resolve(root, options.srcDir ?? 'src')\n enableHmr = config.command === 'serve'\n await scanProject({ srcRoot, warn: this.warn?.bind(this), state })\n },\n async buildStart(this: WebPluginContext) {\n await scanProject({ srcRoot, warn: this.warn?.bind(this), state })\n },\n resolveId(id: string) {\n if (id === '/@weapp-vite/web/entry' || id === '@weapp-vite/web/entry') {\n return ENTRY_ID\n }\n return null\n },\n load(id: string) {\n if (id === ENTRY_ID) {\n return generateEntryModule(state.scanResult, root, wxssOptions, options)\n }\n return null\n },\n async handleHotUpdate(this: WebPluginContext, ctx: WebHmrContext) {\n const clean = cleanUrl(ctx.file)\n if (clean.endsWith('.json') || isTemplateFile(clean) || isWxsFile(clean) || clean.endsWith('.wxss') || SCRIPT_EXTS.includes(extname(clean))) {\n await scanProject({ srcRoot, warn: this.warn?.bind(this), state })\n }\n },\n transform(this: WebPluginContext, code: string, id: string) {\n const clean = cleanUrl(id)\n\n if (isTemplateFile(clean)) {\n if (isHtmlEntry(clean, root)) {\n return null\n }\n const normalizedId = normalizePath(clean)\n if (state.templatePathSet.size > 0) {\n if (!isInsideDir(clean, srcRoot)) {\n return null\n }\n if (!state.templatePathSet.has(normalizedId)) {\n return null\n }\n }\n const navigationConfig = state.pageNavigationMap.get(normalizedId)\n const componentTags = state.templateComponentMap.get(normalizedId)\n const { code: compiled, dependencies, warnings } = compileWxml({\n id: clean,\n source: code,\n resolveTemplatePath,\n resolveWxsPath,\n navigationBar: navigationConfig ? { config: navigationConfig } : undefined,\n componentTags,\n })\n const addWatchFile = this.addWatchFile\n if (dependencies.length > 0 && addWatchFile) {\n for (const dep of dependencies) {\n addWatchFile.call(this, dep)\n }\n }\n const warn = this.warn\n if (warnings?.length && warn) {\n for (const warning of warnings) {\n warn.call(this, warning)\n }\n }\n return { code: compiled, map: null }\n }\n\n if (isWxsFile(clean) || hasWxsQuery(id)) {\n const { code: compiled, dependencies, warnings } = transformWxsToEsm(code, clean, {\n resolvePath: resolveWxsPath,\n toImportPath: (resolved, importer) => normalizePath(toRelativeImport(importer, resolved)),\n })\n const addWatchFile = this.addWatchFile\n if (dependencies.length > 0 && addWatchFile) {\n for (const dep of dependencies) {\n addWatchFile.call(this, dep)\n }\n }\n const warn = this.warn\n if (warnings?.length && warn) {\n for (const warning of warnings) {\n warn.call(this, warning)\n }\n }\n return { code: compiled, map: null }\n }\n\n if (TRANSFORM_STYLE_EXTS.some(ext => clean.endsWith(ext))) {\n const { css } = transformWxssToCss(code, wxssOptions)\n return {\n code: createInlineStyleModule(css),\n map: null,\n }\n }\n\n if (STYLE_EXTS.some(ext => clean.endsWith(ext)) && !clean.endsWith('.wxss')) {\n const { css } = transformWxssToCss(code, wxssOptions)\n return { code: css, map: null }\n }\n\n if (!SCRIPT_EXTS.some(ext => clean.endsWith(ext))) {\n return null\n }\n if (clean.includes('node_modules')) {\n return null\n }\n\n const meta = state.moduleMeta.get(normalizePath(clean))\n if (!meta) {\n return null\n }\n\n return transformScriptModule({\n code,\n cleanId: clean,\n meta,\n enableHmr,\n })\n },\n }\n}\n\nexport type { WeappWebPluginOptions } from './types'\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/plugin/index.ts"],"sourcesContent":["import type { SourceMap } from 'magic-string'\nimport type { WeappWebPluginOptions } from './types'\nimport process from 'node:process'\n\nimport { extname, resolve } from 'pathe'\nimport { compileWxml } from '../compiler/wxml'\nimport { transformWxsToEsm } from '../compiler/wxs'\nimport { transformWxssToCss } from '../css/wxss'\nimport { ENTRY_ID, SCRIPT_EXTS, STYLE_EXTS, TEMPLATE_EXTS, TRANSFORM_STYLE_EXTS, WXS_EXTS } from './constants'\nimport { generateEntryModule } from './entry'\nimport { cleanUrl, isHtmlEntry, isInsideDir, normalizePath, resolveTemplatePathSync, resolveWxsPathSync, toRelativeImport } from './path'\nimport { transformScriptModule } from './register'\nimport { scanProject } from './scan'\nimport { createEmptyScanState } from './state'\n\ninterface WebPluginContext {\n warn?: (message: string) => void\n addWatchFile?: (id: string) => void\n}\n\ntype WebTransformResult = { code: string, map: SourceMap | null } | null\n\ninterface WebResolvedConfig {\n root: string\n command: string\n}\n\ninterface WebHmrContext {\n file: string\n}\n\ninterface WeappWebVitePlugin {\n name: string\n enforce?: 'pre' | 'post'\n configResolved?: (this: WebPluginContext, config: WebResolvedConfig) => void | Promise<void>\n buildStart?: (this: WebPluginContext) => void | Promise<void>\n resolveId?: (id: string) => string | null | Promise<string | null>\n load?: (id: string) => string | null | Promise<string | null>\n handleHotUpdate?: (this: WebPluginContext, ctx: WebHmrContext) => void | Promise<void>\n transform?: (\n this: WebPluginContext,\n code: string,\n id: string,\n ) => WebTransformResult | Promise<WebTransformResult>\n}\n\nfunction isTemplateFile(id: string) {\n const lower = id.toLowerCase()\n return TEMPLATE_EXTS.some(ext => lower.endsWith(ext))\n}\n\nfunction isWxsFile(id: string) {\n const lower = id.toLowerCase()\n return WXS_EXTS.some(ext => lower.endsWith(ext))\n}\n\nfunction hasWxsQuery(id: string) {\n return id.includes('?wxs') || id.includes('&wxs')\n}\n\nfunction createInlineStyleModule(css: string) {\n const serialized = JSON.stringify(css)\n return [\n `const __weapp_injected_styles__ = new Map()`,\n `function __weapp_createStyleId__(css) {`,\n ` let hash = 2166136261`,\n ` for (let i = 0; i < css.length; i++) {`,\n ` hash ^= css.charCodeAt(i)`,\n ` hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24)`,\n ` }`,\n ` return 'weapp-web-style-' + (hash >>> 0).toString(36)`,\n `}`,\n `function __weapp_removeStyle__(id) {`,\n ` if (typeof document === 'undefined') {`,\n ` return`,\n ` }`,\n ` const style = __weapp_injected_styles__.get(id)`,\n ` if (style) {`,\n ` style.remove()`,\n ` __weapp_injected_styles__.delete(id)`,\n ` }`,\n `}`,\n `function injectStyle(css, id) {`,\n ` if (typeof document === 'undefined') {`,\n ` return () => {}`,\n ` }`,\n ` const styleId = id ?? __weapp_createStyleId__(css)`,\n ` const existing = __weapp_injected_styles__.get(styleId)`,\n ` if (existing) {`,\n ` if (existing.textContent !== css) {`,\n ` existing.textContent = css`,\n ` }`,\n ` return () => __weapp_removeStyle__(styleId)`,\n ` }`,\n ` const style = document.createElement('style')`,\n ` style.id = styleId`,\n ` style.textContent = css`,\n ` document.head.append(style)`,\n ` __weapp_injected_styles__.set(styleId, style)`,\n ` return () => __weapp_removeStyle__(styleId)`,\n `}`,\n `const css = ${serialized}`,\n `export default css`,\n `export function useStyle(id) {`,\n ` return injectStyle(css, id)`,\n `}`,\n ].join('\\n')\n}\n\nexport function weappWebPlugin(options: WeappWebPluginOptions = {}): WeappWebVitePlugin {\n let root = process.cwd()\n let srcRoot = resolve(root, options.srcDir ?? 'src')\n let enableHmr = false\n\n const state = createEmptyScanState()\n const wxssOptions = options.wxss\n\n const resolveTemplatePath = (raw: string, importer: string) => resolveTemplatePathSync(raw, importer, srcRoot)\n const resolveWxsPath = (raw: string, importer: string) => resolveWxsPathSync(raw, importer, srcRoot)\n\n return {\n name: '@weapp-vite/web',\n enforce: 'pre',\n async configResolved(this: WebPluginContext, config: WebResolvedConfig) {\n root = config.root\n srcRoot = resolve(root, options.srcDir ?? 'src')\n enableHmr = config.command === 'serve'\n await scanProject({ srcRoot, warn: this.warn?.bind(this), state })\n },\n async buildStart(this: WebPluginContext) {\n await scanProject({ srcRoot, warn: this.warn?.bind(this), state })\n },\n resolveId(id: string) {\n if (id === '/@weapp-vite/web/entry' || id === '@weapp-vite/web/entry') {\n return ENTRY_ID\n }\n return null\n },\n load(id: string) {\n if (id === ENTRY_ID) {\n return generateEntryModule(state.scanResult, root, wxssOptions, options)\n }\n return null\n },\n async handleHotUpdate(this: WebPluginContext, ctx: WebHmrContext) {\n const clean = cleanUrl(ctx.file)\n if (clean.endsWith('.json') || isTemplateFile(clean) || isWxsFile(clean) || clean.endsWith('.wxss') || SCRIPT_EXTS.includes(extname(clean))) {\n await scanProject({ srcRoot, warn: this.warn?.bind(this), state })\n }\n },\n transform(this: WebPluginContext, code: string, id: string) {\n const clean = cleanUrl(id)\n\n if (isTemplateFile(clean)) {\n if (isHtmlEntry(clean, root)) {\n return null\n }\n const normalizedId = normalizePath(clean)\n if (state.templatePathSet.size > 0) {\n if (!isInsideDir(clean, srcRoot)) {\n return null\n }\n if (!state.templatePathSet.has(normalizedId)) {\n return null\n }\n }\n const navigationConfig = state.pageNavigationMap.get(normalizedId)\n const componentTags = state.templateComponentMap.get(normalizedId)\n const { code: compiled, dependencies, warnings } = compileWxml({\n id: clean,\n source: code,\n resolveTemplatePath,\n resolveWxsPath,\n navigationBar: navigationConfig ? { config: navigationConfig } : undefined,\n componentTags,\n })\n const addWatchFile = this.addWatchFile\n if (dependencies.length > 0 && addWatchFile) {\n for (const dep of dependencies) {\n addWatchFile.call(this, dep)\n }\n }\n const warn = this.warn\n if (warnings?.length && warn) {\n for (const warning of warnings) {\n warn.call(this, warning)\n }\n }\n return { code: compiled, map: null }\n }\n\n if (isWxsFile(clean) || hasWxsQuery(id)) {\n const { code: compiled, dependencies, warnings } = transformWxsToEsm(code, clean, {\n resolvePath: resolveWxsPath,\n toImportPath: (resolved, importer) => normalizePath(toRelativeImport(importer, resolved)),\n })\n const addWatchFile = this.addWatchFile\n if (dependencies.length > 0 && addWatchFile) {\n for (const dep of dependencies) {\n addWatchFile.call(this, dep)\n }\n }\n const warn = this.warn\n if (warnings?.length && warn) {\n for (const warning of warnings) {\n warn.call(this, warning)\n }\n }\n return { code: compiled, map: null }\n }\n\n if (TRANSFORM_STYLE_EXTS.some(ext => clean.endsWith(ext))) {\n const { css } = transformWxssToCss(code, wxssOptions)\n return {\n code: createInlineStyleModule(css),\n map: null,\n }\n }\n\n if (STYLE_EXTS.some(ext => clean.endsWith(ext)) && !clean.endsWith('.wxss')) {\n const { css } = transformWxssToCss(code, wxssOptions)\n return { code: css, map: null }\n }\n\n if (!SCRIPT_EXTS.some(ext => clean.endsWith(ext))) {\n return null\n }\n if (clean.includes('node_modules')) {\n return null\n }\n\n const meta = state.moduleMeta.get(normalizePath(clean))\n if (!meta) {\n return null\n }\n\n return transformScriptModule({\n code,\n cleanId: clean,\n meta,\n enableHmr,\n })\n },\n }\n}\n\nexport type { WeappWebPluginOptions } from './types'\n"],"mappings":"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"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
//#region src/plugin/navigation.ts
|
|
10
2
|
function pickNavigationConfig(source) {
|
|
11
3
|
const config = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.mjs","names":[],"sources":["../../src/plugin/navigation.ts"],"sourcesContent":["import type { NavigationBarConfig } from '../compiler/wxml'\n\nexport function pickNavigationConfig(source: Record<string, unknown> | undefined): NavigationBarConfig {\n const config: NavigationBarConfig = {}\n if (!source) {\n return config\n }\n if (typeof source.navigationBarTitleText === 'string') {\n config.title = source.navigationBarTitleText\n }\n if (typeof source.navigationBarBackgroundColor === 'string') {\n config.backgroundColor = source.navigationBarBackgroundColor\n }\n if (typeof source.navigationBarTextStyle === 'string') {\n config.textStyle = source.navigationBarTextStyle\n }\n if (typeof source.navigationStyle === 'string') {\n config.navigationStyle = source.navigationStyle\n }\n return config\n}\n\nexport function mergeNavigationConfig(base: NavigationBarConfig, overrides: NavigationBarConfig) {\n return {\n ...base,\n ...overrides,\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"navigation.mjs","names":[],"sources":["../../src/plugin/navigation.ts"],"sourcesContent":["import type { NavigationBarConfig } from '../compiler/wxml'\n\nexport function pickNavigationConfig(source: Record<string, unknown> | undefined): NavigationBarConfig {\n const config: NavigationBarConfig = {}\n if (!source) {\n return config\n }\n if (typeof source.navigationBarTitleText === 'string') {\n config.title = source.navigationBarTitleText\n }\n if (typeof source.navigationBarBackgroundColor === 'string') {\n config.backgroundColor = source.navigationBarBackgroundColor\n }\n if (typeof source.navigationBarTextStyle === 'string') {\n config.textStyle = source.navigationBarTextStyle\n }\n if (typeof source.navigationStyle === 'string') {\n config.navigationStyle = source.navigationStyle\n }\n return config\n}\n\nexport function mergeNavigationConfig(base: NavigationBarConfig, overrides: NavigationBarConfig) {\n return {\n ...base,\n ...overrides,\n }\n}\n"],"mappings":";AAEA,SAAgB,qBAAqB,QAAkE;CACrG,MAAM,SAA8B,CAAC;CACrC,IAAI,CAAC,QACH,OAAO;CAET,IAAI,OAAO,OAAO,2BAA2B,UAC3C,OAAO,QAAQ,OAAO;CAExB,IAAI,OAAO,OAAO,iCAAiC,UACjD,OAAO,kBAAkB,OAAO;CAElC,IAAI,OAAO,OAAO,2BAA2B,UAC3C,OAAO,YAAY,OAAO;CAE5B,IAAI,OAAO,OAAO,oBAAoB,UACpC,OAAO,kBAAkB,OAAO;CAElC,OAAO;AACT;AAEA,SAAgB,sBAAsB,MAA2B,WAAgC;CAC/F,OAAO;EACL,GAAG;EACH,GAAG;CACL;AACF"}
|
package/dist/plugin/path.mjs
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
import { TEMPLATE_EXTS, WXS_RESOLVE_EXTS } from "./constants.mjs";
|
|
10
2
|
import { dirname, extname, normalize, posix, relative, resolve } from "pathe";
|
|
11
3
|
import { existsSync } from "node:fs";
|
package/dist/plugin/path.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.mjs","names":[],"sources":["../../src/plugin/path.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { fileURLToPath } from 'node:url'\nimport { dirname, extname, normalize, posix, relative, resolve } from 'pathe'\n\nimport { TEMPLATE_EXTS, WXS_RESOLVE_EXTS } from './constants'\n\nexport function cleanUrl(url: string) {\n const queryIndex = url.indexOf('?')\n if (queryIndex >= 0) {\n return url.slice(0, queryIndex)\n }\n return url\n}\n\nexport function normalizePath(p: string) {\n return posix.normalize(p.split('\\\\').join('/'))\n}\n\nexport function isInsideDir(filePath: string, dir: string) {\n const rel = relative(dir, filePath)\n return rel === '' || (!rel.startsWith('..') && !posix.isAbsolute(rel))\n}\n\nexport function isHtmlEntry(filePath: string, root: string) {\n if (!filePath.toLowerCase().endsWith('.html')) {\n return false\n }\n return normalizePath(filePath) === normalizePath(resolve(root, 'index.html'))\n}\n\nexport function toPosixId(id: string) {\n return normalize(id).split('\\\\').join('/')\n}\n\nexport function toRelativeImport(from: string, target: string) {\n const fromDir = dirname(from)\n const rel = relative(fromDir, target)\n if (!rel || rel.startsWith('.')) {\n return normalizePath(rel || `./${posix.basename(target)}`)\n }\n return `./${normalizePath(rel)}`\n}\n\nexport function appendInlineQuery(id: string) {\n if (id.includes('?')) {\n if (id.includes('?inline') || id.includes('&inline')) {\n return id\n }\n return `${id}&inline`\n }\n return `${id}?inline`\n}\n\nexport function relativeModuleId(root: string, absPath: string) {\n const rel = relative(root, absPath)\n return `/${normalizePath(rel)}`\n}\n\nexport function toViteFsImport(absPath: string) {\n const normalized = normalizePath(absPath)\n return normalized.startsWith('/')\n ? `/@fs${normalized}`\n : `/@fs/${normalized}`\n}\n\nexport function resolveRuntimePolyfillPath() {\n const currentDir = dirname(fileURLToPath(import.meta.url))\n const candidates = [\n resolve(currentDir, '../runtime/index.mjs'),\n resolve(currentDir, './runtime/index.mjs'),\n resolve(currentDir, '../runtime/polyfill.ts'),\n resolve(currentDir, '../runtime/index.ts'),\n ]\n\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n return candidate\n }\n }\n\n throw new Error('[@weapp-vite/web] Failed to resolve runtime polyfill path.')\n}\n\nexport function resolveImportBase(raw: string, importer: string, srcRoot: string) {\n if (!raw) {\n return undefined\n }\n if (raw.startsWith('.')) {\n return resolve(dirname(importer), raw)\n }\n if (raw.startsWith('/')) {\n return resolve(srcRoot, raw.slice(1))\n }\n return resolve(srcRoot, raw)\n}\n\nexport function resolveFileWithExtensionsSync(basePath: string, extensions: string[]) {\n if (extname(basePath) && existsSync(basePath)) {\n return basePath\n }\n for (const ext of extensions) {\n const candidate = `${basePath}${ext}`\n if (existsSync(candidate)) {\n return candidate\n }\n }\n return undefined\n}\n\nexport function resolveTemplatePathSync(raw: string, importer: string, srcRoot: string) {\n const base = resolveImportBase(raw, importer, srcRoot)\n if (!base) {\n return undefined\n }\n return resolveFileWithExtensionsSync(base, TEMPLATE_EXTS)\n}\n\nexport function resolveWxsPathSync(raw: string, importer: string, srcRoot: string) {\n if (!raw) {\n return undefined\n }\n let base: string | undefined\n if (raw.startsWith('.')) {\n base = resolve(dirname(importer), raw)\n }\n else if (raw.startsWith('/')) {\n base = resolve(srcRoot, raw.slice(1))\n }\n else {\n return undefined\n }\n return resolveFileWithExtensionsSync(base, WXS_RESOLVE_EXTS)\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"path.mjs","names":[],"sources":["../../src/plugin/path.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { fileURLToPath } from 'node:url'\nimport { dirname, extname, normalize, posix, relative, resolve } from 'pathe'\n\nimport { TEMPLATE_EXTS, WXS_RESOLVE_EXTS } from './constants'\n\nexport function cleanUrl(url: string) {\n const queryIndex = url.indexOf('?')\n if (queryIndex >= 0) {\n return url.slice(0, queryIndex)\n }\n return url\n}\n\nexport function normalizePath(p: string) {\n return posix.normalize(p.split('\\\\').join('/'))\n}\n\nexport function isInsideDir(filePath: string, dir: string) {\n const rel = relative(dir, filePath)\n return rel === '' || (!rel.startsWith('..') && !posix.isAbsolute(rel))\n}\n\nexport function isHtmlEntry(filePath: string, root: string) {\n if (!filePath.toLowerCase().endsWith('.html')) {\n return false\n }\n return normalizePath(filePath) === normalizePath(resolve(root, 'index.html'))\n}\n\nexport function toPosixId(id: string) {\n return normalize(id).split('\\\\').join('/')\n}\n\nexport function toRelativeImport(from: string, target: string) {\n const fromDir = dirname(from)\n const rel = relative(fromDir, target)\n if (!rel || rel.startsWith('.')) {\n return normalizePath(rel || `./${posix.basename(target)}`)\n }\n return `./${normalizePath(rel)}`\n}\n\nexport function appendInlineQuery(id: string) {\n if (id.includes('?')) {\n if (id.includes('?inline') || id.includes('&inline')) {\n return id\n }\n return `${id}&inline`\n }\n return `${id}?inline`\n}\n\nexport function relativeModuleId(root: string, absPath: string) {\n const rel = relative(root, absPath)\n return `/${normalizePath(rel)}`\n}\n\nexport function toViteFsImport(absPath: string) {\n const normalized = normalizePath(absPath)\n return normalized.startsWith('/')\n ? `/@fs${normalized}`\n : `/@fs/${normalized}`\n}\n\nexport function resolveRuntimePolyfillPath() {\n const currentDir = dirname(fileURLToPath(import.meta.url))\n const candidates = [\n resolve(currentDir, '../runtime/index.mjs'),\n resolve(currentDir, './runtime/index.mjs'),\n resolve(currentDir, '../runtime/polyfill.ts'),\n resolve(currentDir, '../runtime/index.ts'),\n ]\n\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n return candidate\n }\n }\n\n throw new Error('[@weapp-vite/web] Failed to resolve runtime polyfill path.')\n}\n\nexport function resolveImportBase(raw: string, importer: string, srcRoot: string) {\n if (!raw) {\n return undefined\n }\n if (raw.startsWith('.')) {\n return resolve(dirname(importer), raw)\n }\n if (raw.startsWith('/')) {\n return resolve(srcRoot, raw.slice(1))\n }\n return resolve(srcRoot, raw)\n}\n\nexport function resolveFileWithExtensionsSync(basePath: string, extensions: string[]) {\n if (extname(basePath) && existsSync(basePath)) {\n return basePath\n }\n for (const ext of extensions) {\n const candidate = `${basePath}${ext}`\n if (existsSync(candidate)) {\n return candidate\n }\n }\n return undefined\n}\n\nexport function resolveTemplatePathSync(raw: string, importer: string, srcRoot: string) {\n const base = resolveImportBase(raw, importer, srcRoot)\n if (!base) {\n return undefined\n }\n return resolveFileWithExtensionsSync(base, TEMPLATE_EXTS)\n}\n\nexport function resolveWxsPathSync(raw: string, importer: string, srcRoot: string) {\n if (!raw) {\n return undefined\n }\n let base: string | undefined\n if (raw.startsWith('.')) {\n base = resolve(dirname(importer), raw)\n }\n else if (raw.startsWith('/')) {\n base = resolve(srcRoot, raw.slice(1))\n }\n else {\n return undefined\n }\n return resolveFileWithExtensionsSync(base, WXS_RESOLVE_EXTS)\n}\n"],"mappings":"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"}
|
package/dist/plugin/register.mjs
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
import { appendInlineQuery, resolveRuntimePolyfillPath, toRelativeImport, toViteFsImport } from "./path.mjs";
|
|
10
2
|
import { parse } from "@babel/parser";
|
|
11
3
|
import _babelTraverse from "@babel/traverse";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.mjs","names":[],"sources":["../../src/plugin/register.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse'\nimport type { CallExpression } from '@babel/types'\nimport type { SourceMap } from 'magic-string'\n\nimport type { ModuleMeta } from './types'\nimport { parse } from '@babel/parser'\nimport _babelTraverse from '@babel/traverse'\nimport * as t from '@babel/types'\n\nimport MagicString from 'magic-string'\nimport { appendInlineQuery, resolveRuntimePolyfillPath, toRelativeImport, toViteFsImport } from './path'\n\ntype TraverseFunction = typeof _babelTraverse extends (...args: any[]) => any\n ? typeof _babelTraverse\n : typeof _babelTraverse extends { default: infer D }\n ? D\n : typeof _babelTraverse\n\nconst traverseCandidate: any = (() => {\n const mod: any = _babelTraverse\n if (typeof mod === 'function') {\n return mod\n }\n if (mod?.default && typeof mod.default === 'function') {\n return mod.default\n }\n if (mod?.traverse && typeof mod.traverse === 'function') {\n return mod.traverse\n }\n return undefined\n})()\n\nif (typeof traverseCandidate !== 'function') {\n throw new TypeError('[@weapp-vite/web] Failed to resolve @babel/traverse export.')\n}\n\nconst traverse: TraverseFunction = traverseCandidate\n\nfunction mapRegisterIdentifier(kind: ModuleMeta['kind']) {\n if (kind === 'page') {\n return 'Page'\n }\n if (kind === 'component') {\n return 'Component'\n }\n if (kind === 'app') {\n return 'App'\n }\n return ''\n}\n\nfunction getRegisterName(kind: ModuleMeta['kind']) {\n if (kind === 'page') {\n return 'registerPage'\n }\n if (kind === 'component') {\n return 'registerComponent'\n }\n if (kind === 'app') {\n return 'registerApp'\n }\n return undefined\n}\n\nfunction overwriteCall(\n path: NodePath<CallExpression>,\n meta: ModuleMeta,\n registerName: string,\n templateIdent: string | undefined,\n styleIdent: string | undefined,\n s: MagicString,\n) {\n const node = path.node\n const callee = node.callee\n if (!t.isIdentifier(callee)) {\n return\n }\n const end = node.end!\n const insertPosition = end - 1\n const metaParts: string[] = [`id: ${JSON.stringify(meta.id)}`]\n if (templateIdent) {\n metaParts.push(`template: ${templateIdent}`)\n }\n if (styleIdent) {\n metaParts.push(`style: ${styleIdent}`)\n }\n const metaCode = `{ ${metaParts.join(', ')} }`\n s.overwrite(callee.start!, callee.end!, registerName)\n s.appendLeft(insertPosition, `, ${metaCode}`)\n}\n\ninterface TransformScriptModuleOptions {\n code: string\n cleanId: string\n meta: ModuleMeta\n enableHmr: boolean\n}\n\nexport function transformScriptModule({\n code,\n cleanId,\n meta,\n enableHmr,\n}: TransformScriptModuleOptions): null | { code: string, map: SourceMap } {\n const registerName = getRegisterName(meta.kind)\n if (!registerName) {\n return null\n }\n\n let ast: ReturnType<typeof parse> | undefined\n try {\n ast = parse(code, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx'],\n errorRecovery: true,\n ranges: true,\n })\n }\n catch {\n return null\n }\n\n const s = new MagicString(code)\n let transformed = false\n\n const imports: string[] = []\n const runtimePolyfillId = toViteFsImport(resolveRuntimePolyfillPath())\n const templateIdent = meta.templatePath ? '__weapp_template__' : undefined\n const styleIdent = meta.stylePath ? '__weapp_style__' : undefined\n\n if (meta.templatePath && templateIdent) {\n imports.push(`import ${templateIdent} from '${toRelativeImport(cleanId, meta.templatePath)}'`)\n }\n\n if (meta.stylePath && styleIdent) {\n imports.push(`import ${styleIdent} from '${appendInlineQuery(toRelativeImport(cleanId, meta.stylePath))}'`)\n }\n\n const registerImports = new Set<string>()\n\n traverse(ast, {\n CallExpression(path: NodePath<CallExpression>) {\n if (!t.isIdentifier(path.node.callee)) {\n return\n }\n const name = path.node.callee.name\n if (name === mapRegisterIdentifier(meta.kind)) {\n registerImports.add(registerName)\n overwriteCall(path, meta, registerName, templateIdent, styleIdent, s)\n transformed = true\n }\n },\n })\n\n if (!transformed) {\n return null\n }\n\n if (registerImports.size > 0) {\n imports.unshift(`import { ${Array.from(registerImports).join(', ')} } from '${runtimePolyfillId}'`)\n }\n\n const prefix = `${imports.join('\\n')}\\n`\n s.prepend(prefix)\n\n if (enableHmr) {\n s.append(`\\nif (import.meta.hot) { import.meta.hot.accept() }\\n`)\n }\n\n return {\n code: s.toString(),\n map: s.generateMap({\n hires: true,\n }),\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"register.mjs","names":[],"sources":["../../src/plugin/register.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse'\nimport type { CallExpression } from '@babel/types'\nimport type { SourceMap } from 'magic-string'\n\nimport type { ModuleMeta } from './types'\nimport { parse } from '@babel/parser'\nimport _babelTraverse from '@babel/traverse'\nimport * as t from '@babel/types'\n\nimport MagicString from 'magic-string'\nimport { appendInlineQuery, resolveRuntimePolyfillPath, toRelativeImport, toViteFsImport } from './path'\n\ntype TraverseFunction = typeof _babelTraverse extends (...args: any[]) => any\n ? typeof _babelTraverse\n : typeof _babelTraverse extends { default: infer D }\n ? D\n : typeof _babelTraverse\n\nconst traverseCandidate: any = (() => {\n const mod: any = _babelTraverse\n if (typeof mod === 'function') {\n return mod\n }\n if (mod?.default && typeof mod.default === 'function') {\n return mod.default\n }\n if (mod?.traverse && typeof mod.traverse === 'function') {\n return mod.traverse\n }\n return undefined\n})()\n\nif (typeof traverseCandidate !== 'function') {\n throw new TypeError('[@weapp-vite/web] Failed to resolve @babel/traverse export.')\n}\n\nconst traverse: TraverseFunction = traverseCandidate\n\nfunction mapRegisterIdentifier(kind: ModuleMeta['kind']) {\n if (kind === 'page') {\n return 'Page'\n }\n if (kind === 'component') {\n return 'Component'\n }\n if (kind === 'app') {\n return 'App'\n }\n return ''\n}\n\nfunction getRegisterName(kind: ModuleMeta['kind']) {\n if (kind === 'page') {\n return 'registerPage'\n }\n if (kind === 'component') {\n return 'registerComponent'\n }\n if (kind === 'app') {\n return 'registerApp'\n }\n return undefined\n}\n\nfunction overwriteCall(\n path: NodePath<CallExpression>,\n meta: ModuleMeta,\n registerName: string,\n templateIdent: string | undefined,\n styleIdent: string | undefined,\n s: MagicString,\n) {\n const node = path.node\n const callee = node.callee\n if (!t.isIdentifier(callee)) {\n return\n }\n const end = node.end!\n const insertPosition = end - 1\n const metaParts: string[] = [`id: ${JSON.stringify(meta.id)}`]\n if (templateIdent) {\n metaParts.push(`template: ${templateIdent}`)\n }\n if (styleIdent) {\n metaParts.push(`style: ${styleIdent}`)\n }\n const metaCode = `{ ${metaParts.join(', ')} }`\n s.overwrite(callee.start!, callee.end!, registerName)\n s.appendLeft(insertPosition, `, ${metaCode}`)\n}\n\ninterface TransformScriptModuleOptions {\n code: string\n cleanId: string\n meta: ModuleMeta\n enableHmr: boolean\n}\n\nexport function transformScriptModule({\n code,\n cleanId,\n meta,\n enableHmr,\n}: TransformScriptModuleOptions): null | { code: string, map: SourceMap } {\n const registerName = getRegisterName(meta.kind)\n if (!registerName) {\n return null\n }\n\n let ast: ReturnType<typeof parse> | undefined\n try {\n ast = parse(code, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx'],\n errorRecovery: true,\n ranges: true,\n })\n }\n catch {\n return null\n }\n\n const s = new MagicString(code)\n let transformed = false\n\n const imports: string[] = []\n const runtimePolyfillId = toViteFsImport(resolveRuntimePolyfillPath())\n const templateIdent = meta.templatePath ? '__weapp_template__' : undefined\n const styleIdent = meta.stylePath ? '__weapp_style__' : undefined\n\n if (meta.templatePath && templateIdent) {\n imports.push(`import ${templateIdent} from '${toRelativeImport(cleanId, meta.templatePath)}'`)\n }\n\n if (meta.stylePath && styleIdent) {\n imports.push(`import ${styleIdent} from '${appendInlineQuery(toRelativeImport(cleanId, meta.stylePath))}'`)\n }\n\n const registerImports = new Set<string>()\n\n traverse(ast, {\n CallExpression(path: NodePath<CallExpression>) {\n if (!t.isIdentifier(path.node.callee)) {\n return\n }\n const name = path.node.callee.name\n if (name === mapRegisterIdentifier(meta.kind)) {\n registerImports.add(registerName)\n overwriteCall(path, meta, registerName, templateIdent, styleIdent, s)\n transformed = true\n }\n },\n })\n\n if (!transformed) {\n return null\n }\n\n if (registerImports.size > 0) {\n imports.unshift(`import { ${Array.from(registerImports).join(', ')} } from '${runtimePolyfillId}'`)\n }\n\n const prefix = `${imports.join('\\n')}\\n`\n s.prepend(prefix)\n\n if (enableHmr) {\n s.append(`\\nif (import.meta.hot) { import.meta.hot.accept() }\\n`)\n }\n\n return {\n code: s.toString(),\n map: s.generateMap({\n hires: true,\n }),\n }\n}\n"],"mappings":"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"}
|
package/dist/plugin/scan.mjs
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
import { normalizePath, toPosixId } from "./path.mjs";
|
|
10
2
|
import { slugify } from "../shared/slugify.mjs";
|
|
11
3
|
import { isRecord, readJsonFile, resolveJsonPath, resolveScriptFile, resolveStyleFile, resolveTemplateFile } from "./files.mjs";
|
package/dist/plugin/scan.mjs.map
CHANGED
|
@@ -1 +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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"}
|
|
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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"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
import { readJsonFile, resolveJsonPath } from "./files.mjs";
|
|
10
2
|
|
|
11
3
|
//#region src/plugin/scanConfig.ts
|
|
@@ -1 +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":"
|
|
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;CAC7B,IAAI,CAAC,mBAAmB,OAAO,oBAAoB,UACjD,OAAO,CAAC;CAGV,MAAM,OAA+B,CAAC;CACtC,MAAM,WAAwC,CAAC;CAE/C,KAAK,MAAM,CAAC,QAAQ,aAAa,OAAO,QAAQ,eAAe,GAAG;EAChE,IAAI,OAAO,aAAa,UACtB;EAEF,MAAM,MAAM,sBAAsB,MAAM;EACxC,IAAI,CAAC,KACH;EAEF,MAAM,SAAS,MAAM,uBAAuB,UAAU,WAAW;EACjE,IAAI,CAAC,QAAQ;GACX,KAAK,4CAA4C,OAAO,eAAe,SAAS,IAAI,SAAS,EAAE;GAC/F;EACF;EAEA,KAAK,OADO,gBAAgB,MACd;EACd,SAAS,KAAK,EAAE,SAAS,CAAC;CAC5B;CAEA,aAAa,IAAI;CACjB,KAAK,MAAM,SAAS,UAClB,MAAM,iBAAiB,MAAM,UAAU,WAAW;CAGpD,OAAO;AACT;AASA,eAAsB,6BAA6B,EACjD,cACA,aACA,MACA,qBACsC;CACtC,MAAM,eAAe,MAAM,gBAAgB,YAAY;CACvD,IAAI,CAAC,cACH,OAAO,CAAC;CAEV,MAAM,OAAO,MAAM,aAAa,YAAY;CAC5C,IAAI,CAAC,MACH,OAAO,CAAC;CAEV,OAAO,kBAAkB,MAAM,aAAa,cAAc,IAAI;AAChE;AAEA,SAAgB,mBAAmB,MAA8B,WAAmC;CAClG,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,QACvD,OAAO,CAAC;CAEV,OAAO;EACL,GAAG;EACH,GAAG;CACL;AACF;AAEA,SAAS,sBAAsB,KAAa;CAC1C,OAAO,IAAI,KAAK,EAAE,YAAY;AAChC"}
|
package/dist/plugin/state.mjs
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
//#region src/plugin/state.ts
|
|
10
2
|
function createEmptyScanState() {
|
|
11
3
|
return {
|
|
@@ -1 +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":"
|
|
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;CAChD,OAAO;EACL,4BAAY,IAAI,IAAI;EACpB,mCAAmB,IAAI,IAAI;EAC3B,sCAAsB,IAAI,IAAI;EAC9B,iCAAiB,IAAI,IAAI;EACzB,iCAAiB,IAAI,IAAI;EACzB,gCAAgB,IAAI,IAAI;EACxB,uBAAuB,CAAC;EACxB,kBAAkB,CAAC;EACnB,YAAY;GACV,KAAK;GACL,OAAO,CAAC;GACR,YAAY,CAAC;EACf;CACF;AACF"}
|
package/dist/plugin/types.d.mts
CHANGED
package/dist/plugin.d.mts
CHANGED
package/dist/plugin.mjs
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
import { weappWebPlugin } from "./plugin/index.mjs";
|
|
10
2
|
|
|
11
3
|
export { weappWebPlugin };
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
//#region src/runtime/button/helpers.ts
|
|
10
2
|
const DEFAULT_HOVER_CLASS = "button-hover";
|
|
11
3
|
function toBoolean(value) {
|
|
@@ -1 +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":"
|
|
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":";AAAA,MAAM,sBAAsB;AAK5B,SAAgB,UAAU,OAAsB;CAC9C,IAAI,UAAU,MACZ,OAAO;CAET,MAAM,aAAa,MAAM,KAAK,EAAE,YAAY;CAC5C,IAAI,eAAe,MAAM,eAAe,QACtC,OAAO;CAET,OAAO,eAAe,WAAW,eAAe;AAClD;AAEA,SAAgB,YAAY,OAAsB,UAAkB;CAClE,IAAI,UAAU,QAAQ,UAAU,IAC9B,OAAO;CAET,MAAM,UAAU,OAAO,KAAK;CAC5B,OAAO,OAAO,SAAS,OAAO,IAAI,UAAU;AAC9C;AAEA,SAAgB,WAAW,SAAsB;CAC/C,OAAO,UAAU,QAAQ,aAAa,UAAU,CAAC,KAAK,UAAU,QAAQ,aAAa,SAAS,CAAC;AACjG;AAEA,SAAgB,cAAc,OAAsB;CAClD,IAAI,CAAC,OACH,OAAO;CAET,MAAM,aAAa,MAAM,YAAY;CACrC,IAAI,eAAe,aAAa,eAAe,QAC7C,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,cAAc,SAAsB;CAClD,MAAM,aAAa,QAAQ,aAAa,aAAa;CACrD,IAAI,CAAC,YACH,OAAO;CAET,IAAI,eAAe,QACjB,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,eAAe,MAAY;CACzC,OAAO,gBAAgB,eAAe,KAAK,SAAS,kBAAkB;AACxE;AAEA,SAAgB,kBAAkB,MAAuB;CACvD,MAAM,SAA8B,CAAC;CAErC,MAAM,eAAe,MAAc,OAAY,WAAW,UAAU;EAClE,IAAI,UAAU;GACZ,IAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,GAC7B,OAAO,QAAQ,OAAO,UAAU,SAAY,CAAC,IAAI,CAAC,OAAO,KAAK;GAEhE,OAAO,MAAM,KAAK,KAAK;GACvB;EACF;EACA,OAAO,QAAQ;CACjB;CAEA,MAAM,eAAe,MAAM,KAAK,KAAK,YAAY,CAAC,CAAC;CACnD,KAAK,MAAM,WAAW,cAAc;EAClC,IAAI,EAAE,mBAAmB,cACvB;EAEF,MAAM,OAAO,QAAQ,aAAa,MAAM,GAAG,KAAK;EAChD,IAAI,CAAC,MACH;EAGF,IADiB,cAAc,UAAW,QAAgB,WAAW,UAAU,QAAQ,aAAa,UAAU,CAAC,GAE7G;EAEF,IAAI,mBAAmB,kBAAkB;GACvC,MAAM,OAAO,QAAQ,MAAM,YAAY;GACvC,IAAI,SAAS,YAAY;IACvB,IAAI,QAAQ,SACV,YAAY,MAAM,QAAQ,OAAO,IAAI;IAEvC;GACF;GACA,IAAI,SAAS,SAAS;IACpB,IAAI,QAAQ,SACV,YAAY,MAAM,QAAQ,KAAK;IAEjC;GACF;GACA,YAAY,MAAM,QAAQ,KAAK;GAC/B;EACF;EACA,IAAI,mBAAmB,uBAAuB,mBAAmB,mBAAmB;GAClF,YAAY,MAAO,QAAoD,KAAK;GAC5E;EACF;CACF;CAEA,MAAM,iBAAiB,KAAK,iBAAiB,gHAAgH;CAC7J,KAAK,MAAM,WAAW,MAAM,KAAK,cAAc,GAAG;EAChD,MAAM,OAAO,QAAQ,aAAa,MAAM,GAAG,KAAK;EAChD,IAAI,CAAC,MACH;EAGF,IADiB,UAAU,QAAQ,aAAa,UAAU,CAC/C,GACT;EAEF,MAAM,MAAM,QAAQ,QAAQ,YAAY;EACxC,MAAM,WAAY,QAAgB,SAAS,QAAQ,aAAa,OAAO;EACvE,IAAI,IAAI,SAAS,UAAU,GAAG;GAE5B,IADiB,QAAgB,WAAW,UAAU,QAAQ,aAAa,SAAS,CAAC,GAEnF,YAAY,MAAM,YAAY,MAAM,IAAI;GAE1C;EACF;EACA,IAAI,IAAI,SAAS,OAAO,GAAG;GAEzB,IADiB,QAAgB,WAAW,UAAU,QAAQ,aAAa,SAAS,CAAC,GAEnF,YAAY,MAAM,YAAY,IAAI;GAEpC;EACF;EACA,IAAI,IAAI,SAAS,QAAQ,GAAG;GAE1B,YAAY,MADK,QAAgB,WAAW,UAAU,QAAQ,aAAa,SAAS,CAAC,CAC5D;GACzB;EACF;EACA,YAAY,MAAM,YAAY,EAAE;CAClC;CAEA,OAAO;AACT"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
import { collectFormValues, getHoverClass, isDisabled, isInternalNode, normalizeType, parseNumber, toBoolean } from "./helpers.mjs";
|
|
10
2
|
import { ensureButtonStyle } from "./style.mjs";
|
|
11
3
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["#ensureStructure","#applyState","#bindEvents","#clearHoverTimers","#observer","#button","#content","#text","#loading","#handleClickCapture","#handleClick","#handlePressStart","#handlePressEnd","#lastTouchTime","#hoverTimer","#hoverRemoveTimer"],"sources":["../../../src/runtime/button/index.ts"],"sourcesContent":["import {\n collectFormValues,\n DEFAULT_HOVER_START,\n DEFAULT_HOVER_STAY,\n getHoverClass,\n isDisabled,\n isInternalNode,\n normalizeType,\n parseNumber,\n toBoolean,\n} from './helpers'\nimport { ensureButtonStyle } from './style'\n\ninterface ButtonFormConfig {\n preventDefault?: boolean\n}\n\nconst DEFAULT_FORM_CONFIG: Required<ButtonFormConfig> = {\n preventDefault: true,\n}\n\nconst NAV_BUTTON_TAG = 'weapp-button'\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nlet formConfig: Required<ButtonFormConfig> = { ...DEFAULT_FORM_CONFIG }\n\nclass WeappButton extends BaseElement {\n static observedAttributes = [\n 'type',\n 'plain',\n 'size',\n 'loading',\n 'disabled',\n 'hover-class',\n 'hover-start-time',\n 'hover-stay-time',\n 'form-type',\n 'open-type',\n ]\n\n #button?: HTMLButtonElement\n #content?: HTMLSpanElement\n #text?: HTMLSpanElement\n #loading?: HTMLSpanElement\n #hoverTimer?: ReturnType<typeof globalThis.setTimeout>\n #hoverRemoveTimer?: ReturnType<typeof globalThis.setTimeout>\n #lastTouchTime = 0\n #observer?: MutationObserver\n\n connectedCallback() {\n const root = this.getRootNode()\n if (root instanceof ShadowRoot) {\n ensureButtonStyle(root)\n }\n else {\n ensureButtonStyle()\n }\n this.#ensureStructure()\n this.#applyState()\n this.#bindEvents()\n }\n\n disconnectedCallback() {\n this.#clearHoverTimers()\n this.#observer?.disconnect()\n this.#observer = undefined\n }\n\n attributeChangedCallback() {\n this.#applyState()\n }\n\n #ensureStructure() {\n if (this.#button) {\n return\n }\n const button = document.createElement('button')\n button.type = 'button'\n button.className = 'weapp-btn'\n button.dataset.weappInternal = 'true'\n const content = document.createElement('span')\n content.className = 'weapp-btn__content'\n content.dataset.weappInternal = 'true'\n const loading = document.createElement('span')\n loading.className = 'weapp-btn__loading'\n loading.dataset.weappInternal = 'true'\n loading.setAttribute('hidden', '')\n const text = document.createElement('span')\n text.className = 'weapp-btn__text'\n text.dataset.weappInternal = 'true'\n content.append(loading, text)\n button.append(content)\n\n const existing = [...this.childNodes].filter(node => !isInternalNode(node))\n for (const node of existing) {\n text.appendChild(node)\n }\n this.appendChild(button)\n\n this.#button = button\n this.#content = content\n this.#text = text\n this.#loading = loading\n\n if (typeof MutationObserver !== 'undefined') {\n this.#observer = new MutationObserver((records) => {\n if (!this.#text) {\n return\n }\n for (const record of records) {\n for (const node of [...record.addedNodes]) {\n if (isInternalNode(node)) {\n continue\n }\n if (node === this.#button) {\n continue\n }\n this.#text.appendChild(node)\n }\n }\n })\n this.#observer.observe(this, { childList: true })\n }\n }\n\n #applyState() {\n if (!this.#button || !this.#loading) {\n return\n }\n const type = normalizeType(this.getAttribute('type'))\n const plain = toBoolean(this.getAttribute('plain'))\n const size = (this.getAttribute('size') ?? 'default').toLowerCase()\n const loading = toBoolean(this.getAttribute('loading'))\n const disabled = toBoolean(this.getAttribute('disabled'))\n const openType = this.getAttribute('open-type')\n\n this.classList.toggle('weapp-btn--primary', type === 'primary')\n this.classList.toggle('weapp-btn--warn', type === 'warn')\n this.classList.toggle('weapp-btn--default', type === 'default')\n this.classList.toggle('weapp-btn--plain', plain)\n this.classList.toggle('weapp-btn--mini', size === 'mini')\n this.classList.toggle('weapp-btn--loading', loading)\n this.classList.toggle('weapp-btn--disabled', disabled)\n\n if (openType) {\n const openTypeClass = `weapp-btn--open-type-${openType}`\n for (const className of [...this.classList]) {\n if (className.startsWith('weapp-btn--open-type-') && className !== openTypeClass) {\n this.classList.remove(className)\n }\n }\n this.classList.add(openTypeClass)\n }\n else {\n for (const className of [...this.classList]) {\n if (className.startsWith('weapp-btn--open-type-')) {\n this.classList.remove(className)\n }\n }\n }\n\n const locked = disabled || loading\n this.#button.disabled = locked\n if (locked) {\n this.#button.setAttribute('aria-disabled', 'true')\n }\n else {\n this.#button.removeAttribute('aria-disabled')\n }\n this.#loading.toggleAttribute('hidden', !loading)\n }\n\n #bindEvents() {\n if ((this as any).__weappButtonBound) {\n return\n }\n ;(this as any).__weappButtonBound = true\n this.addEventListener('click', this.#handleClickCapture, true)\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('touchstart', this.#handlePressStart, { passive: true })\n this.addEventListener('mousedown', this.#handlePressStart)\n this.addEventListener('touchend', this.#handlePressEnd)\n this.addEventListener('touchcancel', this.#handlePressEnd)\n this.addEventListener('mouseup', this.#handlePressEnd)\n this.addEventListener('mouseleave', this.#handlePressEnd)\n }\n\n #handleClickCapture = (event: Event) => {\n if (isDisabled(this)) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n }\n\n #handleClick = (event: Event) => {\n if (isDisabled(this)) {\n return\n }\n const formType = this.getAttribute('form-type')\n if (!formType) {\n return\n }\n const form = this.closest('form') as HTMLFormElement | null\n if (!form) {\n return\n }\n if (formType === 'submit') {\n const detail = { value: collectFormValues(form) }\n const submitEvent = new CustomEvent('submit', {\n detail,\n bubbles: true,\n cancelable: true,\n })\n const shouldSubmit = form.dispatchEvent(submitEvent)\n if (shouldSubmit && !formConfig.preventDefault) {\n form.submit()\n }\n event.preventDefault()\n return\n }\n if (formType === 'reset') {\n form.reset()\n event.preventDefault()\n }\n }\n\n #handlePressStart = (event: Event) => {\n if (isDisabled(this)) {\n return\n }\n const hoverClass = getHoverClass(this)\n if (!hoverClass) {\n return\n }\n if (event.type === 'touchstart') {\n this.#lastTouchTime = Date.now()\n }\n if (event.type === 'mousedown' && Date.now() - this.#lastTouchTime < 400) {\n return\n }\n const startTime = parseNumber(this.getAttribute('hover-start-time'), DEFAULT_HOVER_START)\n this.#clearHoverTimers()\n this.#hoverTimer = globalThis.setTimeout(() => {\n this.classList.add(hoverClass)\n }, startTime)\n }\n\n #handlePressEnd = (event: Event) => {\n const hoverClass = getHoverClass(this)\n if (!hoverClass) {\n return\n }\n if (event.type === 'mouseup' && Date.now() - this.#lastTouchTime < 400) {\n return\n }\n const stayTime = parseNumber(this.getAttribute('hover-stay-time'), DEFAULT_HOVER_STAY)\n if (this.#hoverTimer) {\n clearTimeout(this.#hoverTimer)\n this.#hoverTimer = undefined\n }\n if (this.classList.contains(hoverClass)) {\n this.#hoverRemoveTimer = globalThis.setTimeout(() => {\n this.classList.remove(hoverClass)\n }, stayTime)\n }\n }\n\n #clearHoverTimers() {\n if (this.#hoverTimer) {\n clearTimeout(this.#hoverTimer)\n this.#hoverTimer = undefined\n }\n if (this.#hoverRemoveTimer) {\n clearTimeout(this.#hoverRemoveTimer)\n this.#hoverRemoveTimer = undefined\n }\n }\n}\n\nexport function ensureButtonDefined(): void {\n if (typeof customElements === 'undefined') {\n return\n }\n if (!customElements.get(NAV_BUTTON_TAG)) {\n customElements.define(NAV_BUTTON_TAG, WeappButton)\n }\n}\n\nexport function setButtonFormConfig(next: ButtonFormConfig): void {\n formConfig = {\n ...formConfig,\n ...next,\n }\n}\n\nexport type { ButtonFormConfig }\n"],"mappings":";;;;;;;;;;;;AAiBA,MAAM,sBAAkD,EACtD,gBAAgB,KAClB;AAEA,MAAM,iBAAiB;AACvB,MAAM,cAAe,WAAW,eAAe,MAAM,CAAC;AAEtD,IAAI,aAAyC,EAAE,GAAG,oBAAoB;AAEtE,IAAM,cAAN,cAA0B,YAAY;CACpC,OAAO,qBAAqB;EAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA;CACA;CACA;CACA;CACA;CACA;CACA,iBAAiB;CACjB;CAEA,oBAAoB;EAClB,MAAM,OAAO,KAAK,YAAY;EAC9B,IAAI,gBAAgB,YAClB,kBAAkB,IAAI;OAGtB,kBAAkB;EAEpB,KAAKA,iBAAiB;EACtB,KAAKC,YAAY;EACjB,KAAKC,YAAY;CACnB;CAEA,uBAAuB;EACrB,KAAKC,kBAAkB;EACvB,KAAKC,WAAW,WAAW;EAC3B,KAAKA,YAAY;CACnB;CAEA,2BAA2B;EACzB,KAAKH,YAAY;CACnB;CAEA,mBAAmB;EACjB,IAAI,KAAKI,SACP;EAEF,MAAM,SAAS,SAAS,cAAc,QAAQ;EAC9C,OAAO,OAAO;EACd,OAAO,YAAY;EACnB,OAAO,QAAQ,gBAAgB;EAC/B,MAAM,UAAU,SAAS,cAAc,MAAM;EAC7C,QAAQ,YAAY;EACpB,QAAQ,QAAQ,gBAAgB;EAChC,MAAM,UAAU,SAAS,cAAc,MAAM;EAC7C,QAAQ,YAAY;EACpB,QAAQ,QAAQ,gBAAgB;EAChC,QAAQ,aAAa,UAAU,EAAE;EACjC,MAAM,OAAO,SAAS,cAAc,MAAM;EAC1C,KAAK,YAAY;EACjB,KAAK,QAAQ,gBAAgB;EAC7B,QAAQ,OAAO,SAAS,IAAI;EAC5B,OAAO,OAAO,OAAO;EAErB,MAAM,WAAW,CAAC,GAAG,KAAK,UAAU,EAAE,QAAO,SAAQ,CAAC,eAAe,IAAI,CAAC;EAC1E,KAAK,MAAM,QAAQ,UACjB,KAAK,YAAY,IAAI;EAEvB,KAAK,YAAY,MAAM;EAEvB,KAAKA,UAAU;EACf,KAAKC,WAAW;EAChB,KAAKC,QAAQ;EACb,KAAKC,WAAW;EAEhB,IAAI,OAAO,qBAAqB,aAAa;GAC3C,KAAKJ,YAAY,IAAI,kBAAkB,YAAY;IACjD,IAAI,CAAC,KAAKG,OACR;IAEF,KAAK,MAAM,UAAU,SACnB,KAAK,MAAM,QAAQ,CAAC,GAAG,OAAO,UAAU,GAAG;KACzC,IAAI,eAAe,IAAI,GACrB;KAEF,IAAI,SAAS,KAAKF,SAChB;KAEF,KAAKE,MAAM,YAAY,IAAI;IAC7B;GAEJ,CAAC;GACD,KAAKH,UAAU,QAAQ,MAAM,EAAE,WAAW,KAAK,CAAC;EAClD;CACF;CAEA,cAAc;EACZ,IAAI,CAAC,KAAKC,WAAW,CAAC,KAAKG,UACzB;EAEF,MAAM,OAAO,cAAc,KAAK,aAAa,MAAM,CAAC;EACpD,MAAM,QAAQ,UAAU,KAAK,aAAa,OAAO,CAAC;EAClD,MAAM,QAAQ,KAAK,aAAa,MAAM,KAAK,WAAW,YAAY;EAClE,MAAM,UAAU,UAAU,KAAK,aAAa,SAAS,CAAC;EACtD,MAAM,WAAW,UAAU,KAAK,aAAa,UAAU,CAAC;EACxD,MAAM,WAAW,KAAK,aAAa,WAAW;EAE9C,KAAK,UAAU,OAAO,sBAAsB,SAAS,SAAS;EAC9D,KAAK,UAAU,OAAO,mBAAmB,SAAS,MAAM;EACxD,KAAK,UAAU,OAAO,sBAAsB,SAAS,SAAS;EAC9D,KAAK,UAAU,OAAO,oBAAoB,KAAK;EAC/C,KAAK,UAAU,OAAO,mBAAmB,SAAS,MAAM;EACxD,KAAK,UAAU,OAAO,sBAAsB,OAAO;EACnD,KAAK,UAAU,OAAO,uBAAuB,QAAQ;EAErD,IAAI,UAAU;GACZ,MAAM,gBAAgB,wBAAwB;GAC9C,KAAK,MAAM,aAAa,CAAC,GAAG,KAAK,SAAS,GACxC,IAAI,UAAU,WAAW,uBAAuB,KAAK,cAAc,eACjE,KAAK,UAAU,OAAO,SAAS;GAGnC,KAAK,UAAU,IAAI,aAAa;EAClC,OAEE,KAAK,MAAM,aAAa,CAAC,GAAG,KAAK,SAAS,GACxC,IAAI,UAAU,WAAW,uBAAuB,GAC9C,KAAK,UAAU,OAAO,SAAS;EAKrC,MAAM,SAAS,YAAY;EAC3B,KAAKH,QAAQ,WAAW;EACxB,IAAI,QACF,KAAKA,QAAQ,aAAa,iBAAiB,MAAM;OAGjD,KAAKA,QAAQ,gBAAgB,eAAe;EAE9C,KAAKG,SAAS,gBAAgB,UAAU,CAAC,OAAO;CAClD;CAEA,cAAc;EACZ,IAAK,KAAa,oBAChB;EAED,AAAC,KAAa,qBAAqB;EACpC,KAAK,iBAAiB,SAAS,KAAKC,qBAAqB,IAAI;EAC7D,KAAK,iBAAiB,SAAS,KAAKC,YAAY;EAChD,KAAK,iBAAiB,cAAc,KAAKC,mBAAmB,EAAE,SAAS,KAAK,CAAC;EAC7E,KAAK,iBAAiB,aAAa,KAAKA,iBAAiB;EACzD,KAAK,iBAAiB,YAAY,KAAKC,eAAe;EACtD,KAAK,iBAAiB,eAAe,KAAKA,eAAe;EACzD,KAAK,iBAAiB,WAAW,KAAKA,eAAe;EACrD,KAAK,iBAAiB,cAAc,KAAKA,eAAe;CAC1D;CAEA,uBAAuB,UAAiB;EACtC,IAAI,WAAW,IAAI,GAAG;GACpB,MAAM,eAAe;GACrB,MAAM,yBAAyB;EACjC;CACF;CAEA,gBAAgB,UAAiB;EAC/B,IAAI,WAAW,IAAI,GACjB;EAEF,MAAM,WAAW,KAAK,aAAa,WAAW;EAC9C,IAAI,CAAC,UACH;EAEF,MAAM,OAAO,KAAK,QAAQ,MAAM;EAChC,IAAI,CAAC,MACH;EAEF,IAAI,aAAa,UAAU;GACzB,MAAM,SAAS,EAAE,OAAO,kBAAkB,IAAI,EAAE;GAChD,MAAM,cAAc,IAAI,YAAY,UAAU;IAC5C;IACA,SAAS;IACT,YAAY;GACd,CAAC;GAED,IADqB,KAAK,cAAc,WACzB,KAAK,CAAC,WAAW,gBAC9B,KAAK,OAAO;GAEd,MAAM,eAAe;GACrB;EACF;EACA,IAAI,aAAa,SAAS;GACxB,KAAK,MAAM;GACX,MAAM,eAAe;EACvB;CACF;CAEA,qBAAqB,UAAiB;EACpC,IAAI,WAAW,IAAI,GACjB;EAEF,MAAM,aAAa,cAAc,IAAI;EACrC,IAAI,CAAC,YACH;EAEF,IAAI,MAAM,SAAS,cACjB,KAAKC,iBAAiB,KAAK,IAAI;EAEjC,IAAI,MAAM,SAAS,eAAe,KAAK,IAAI,IAAI,KAAKA,iBAAiB,KACnE;EAEF,MAAM,YAAY,YAAY,KAAK,aAAa,kBAAkB,KAAsB;EACxF,KAAKV,kBAAkB;EACvB,KAAKW,cAAc,WAAW,iBAAiB;GAC7C,KAAK,UAAU,IAAI,UAAU;EAC/B,GAAG,SAAS;CACd;CAEA,mBAAmB,UAAiB;EAClC,MAAM,aAAa,cAAc,IAAI;EACrC,IAAI,CAAC,YACH;EAEF,IAAI,MAAM,SAAS,aAAa,KAAK,IAAI,IAAI,KAAKD,iBAAiB,KACjE;EAEF,MAAM,WAAW,YAAY,KAAK,aAAa,iBAAiB,KAAqB;EACrF,IAAI,KAAKC,aAAa;GACpB,aAAa,KAAKA,WAAW;GAC7B,KAAKA,cAAc;EACrB;EACA,IAAI,KAAK,UAAU,SAAS,UAAU,GACpC,KAAKC,oBAAoB,WAAW,iBAAiB;GACnD,KAAK,UAAU,OAAO,UAAU;EAClC,GAAG,QAAQ;CAEf;CAEA,oBAAoB;EAClB,IAAI,KAAKD,aAAa;GACpB,aAAa,KAAKA,WAAW;GAC7B,KAAKA,cAAc;EACrB;EACA,IAAI,KAAKC,mBAAmB;GAC1B,aAAa,KAAKA,iBAAiB;GACnC,KAAKA,oBAAoB;EAC3B;CACF;AACF;AAEA,SAAgB,sBAA4B;CAC1C,IAAI,OAAO,mBAAmB,aAC5B;CAEF,IAAI,CAAC,eAAe,IAAI,cAAc,GACpC,eAAe,OAAO,gBAAgB,WAAW;AAErD;AAEA,SAAgB,oBAAoB,MAA8B;CAChE,aAAa;EACX,GAAG;EACH,GAAG;CACL;AACF"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#ensureStructure","#applyState","#bindEvents","#clearHoverTimers","#observer","#button","#content","#text","#loading","#handleClickCapture","#handleClick","#handlePressStart","#handlePressEnd","#lastTouchTime","#hoverTimer","#hoverRemoveTimer"],"sources":["../../../src/runtime/button/index.ts"],"sourcesContent":["import {\n collectFormValues,\n DEFAULT_HOVER_START,\n DEFAULT_HOVER_STAY,\n getHoverClass,\n isDisabled,\n isInternalNode,\n normalizeType,\n parseNumber,\n toBoolean,\n} from './helpers'\nimport { ensureButtonStyle } from './style'\n\ninterface ButtonFormConfig {\n preventDefault?: boolean\n}\n\nconst DEFAULT_FORM_CONFIG: Required<ButtonFormConfig> = {\n preventDefault: true,\n}\n\nconst NAV_BUTTON_TAG = 'weapp-button'\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nlet formConfig: Required<ButtonFormConfig> = { ...DEFAULT_FORM_CONFIG }\n\nclass WeappButton extends BaseElement {\n static observedAttributes = [\n 'type',\n 'plain',\n 'size',\n 'loading',\n 'disabled',\n 'hover-class',\n 'hover-start-time',\n 'hover-stay-time',\n 'form-type',\n 'open-type',\n ]\n\n #button?: HTMLButtonElement\n #content?: HTMLSpanElement\n #text?: HTMLSpanElement\n #loading?: HTMLSpanElement\n #hoverTimer?: ReturnType<typeof globalThis.setTimeout>\n #hoverRemoveTimer?: ReturnType<typeof globalThis.setTimeout>\n #lastTouchTime = 0\n #observer?: MutationObserver\n\n connectedCallback() {\n const root = this.getRootNode()\n if (root instanceof ShadowRoot) {\n ensureButtonStyle(root)\n }\n else {\n ensureButtonStyle()\n }\n this.#ensureStructure()\n this.#applyState()\n this.#bindEvents()\n }\n\n disconnectedCallback() {\n this.#clearHoverTimers()\n this.#observer?.disconnect()\n this.#observer = undefined\n }\n\n attributeChangedCallback() {\n this.#applyState()\n }\n\n #ensureStructure() {\n if (this.#button) {\n return\n }\n const button = document.createElement('button')\n button.type = 'button'\n button.className = 'weapp-btn'\n button.dataset.weappInternal = 'true'\n const content = document.createElement('span')\n content.className = 'weapp-btn__content'\n content.dataset.weappInternal = 'true'\n const loading = document.createElement('span')\n loading.className = 'weapp-btn__loading'\n loading.dataset.weappInternal = 'true'\n loading.setAttribute('hidden', '')\n const text = document.createElement('span')\n text.className = 'weapp-btn__text'\n text.dataset.weappInternal = 'true'\n content.append(loading, text)\n button.append(content)\n\n const existing = [...this.childNodes].filter(node => !isInternalNode(node))\n for (const node of existing) {\n text.appendChild(node)\n }\n this.appendChild(button)\n\n this.#button = button\n this.#content = content\n this.#text = text\n this.#loading = loading\n\n if (typeof MutationObserver !== 'undefined') {\n this.#observer = new MutationObserver((records) => {\n if (!this.#text) {\n return\n }\n for (const record of records) {\n for (const node of [...record.addedNodes]) {\n if (isInternalNode(node)) {\n continue\n }\n if (node === this.#button) {\n continue\n }\n this.#text.appendChild(node)\n }\n }\n })\n this.#observer.observe(this, { childList: true })\n }\n }\n\n #applyState() {\n if (!this.#button || !this.#loading) {\n return\n }\n const type = normalizeType(this.getAttribute('type'))\n const plain = toBoolean(this.getAttribute('plain'))\n const size = (this.getAttribute('size') ?? 'default').toLowerCase()\n const loading = toBoolean(this.getAttribute('loading'))\n const disabled = toBoolean(this.getAttribute('disabled'))\n const openType = this.getAttribute('open-type')\n\n this.classList.toggle('weapp-btn--primary', type === 'primary')\n this.classList.toggle('weapp-btn--warn', type === 'warn')\n this.classList.toggle('weapp-btn--default', type === 'default')\n this.classList.toggle('weapp-btn--plain', plain)\n this.classList.toggle('weapp-btn--mini', size === 'mini')\n this.classList.toggle('weapp-btn--loading', loading)\n this.classList.toggle('weapp-btn--disabled', disabled)\n\n if (openType) {\n const openTypeClass = `weapp-btn--open-type-${openType}`\n for (const className of [...this.classList]) {\n if (className.startsWith('weapp-btn--open-type-') && className !== openTypeClass) {\n this.classList.remove(className)\n }\n }\n this.classList.add(openTypeClass)\n }\n else {\n for (const className of [...this.classList]) {\n if (className.startsWith('weapp-btn--open-type-')) {\n this.classList.remove(className)\n }\n }\n }\n\n const locked = disabled || loading\n this.#button.disabled = locked\n if (locked) {\n this.#button.setAttribute('aria-disabled', 'true')\n }\n else {\n this.#button.removeAttribute('aria-disabled')\n }\n this.#loading.toggleAttribute('hidden', !loading)\n }\n\n #bindEvents() {\n if ((this as any).__weappButtonBound) {\n return\n }\n ;(this as any).__weappButtonBound = true\n this.addEventListener('click', this.#handleClickCapture, true)\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('touchstart', this.#handlePressStart, { passive: true })\n this.addEventListener('mousedown', this.#handlePressStart)\n this.addEventListener('touchend', this.#handlePressEnd)\n this.addEventListener('touchcancel', this.#handlePressEnd)\n this.addEventListener('mouseup', this.#handlePressEnd)\n this.addEventListener('mouseleave', this.#handlePressEnd)\n }\n\n #handleClickCapture = (event: Event) => {\n if (isDisabled(this)) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n }\n\n #handleClick = (event: Event) => {\n if (isDisabled(this)) {\n return\n }\n const formType = this.getAttribute('form-type')\n if (!formType) {\n return\n }\n const form = this.closest('form') as HTMLFormElement | null\n if (!form) {\n return\n }\n if (formType === 'submit') {\n const detail = { value: collectFormValues(form) }\n const submitEvent = new CustomEvent('submit', {\n detail,\n bubbles: true,\n cancelable: true,\n })\n const shouldSubmit = form.dispatchEvent(submitEvent)\n if (shouldSubmit && !formConfig.preventDefault) {\n form.submit()\n }\n event.preventDefault()\n return\n }\n if (formType === 'reset') {\n form.reset()\n event.preventDefault()\n }\n }\n\n #handlePressStart = (event: Event) => {\n if (isDisabled(this)) {\n return\n }\n const hoverClass = getHoverClass(this)\n if (!hoverClass) {\n return\n }\n if (event.type === 'touchstart') {\n this.#lastTouchTime = Date.now()\n }\n if (event.type === 'mousedown' && Date.now() - this.#lastTouchTime < 400) {\n return\n }\n const startTime = parseNumber(this.getAttribute('hover-start-time'), DEFAULT_HOVER_START)\n this.#clearHoverTimers()\n this.#hoverTimer = globalThis.setTimeout(() => {\n this.classList.add(hoverClass)\n }, startTime)\n }\n\n #handlePressEnd = (event: Event) => {\n const hoverClass = getHoverClass(this)\n if (!hoverClass) {\n return\n }\n if (event.type === 'mouseup' && Date.now() - this.#lastTouchTime < 400) {\n return\n }\n const stayTime = parseNumber(this.getAttribute('hover-stay-time'), DEFAULT_HOVER_STAY)\n if (this.#hoverTimer) {\n clearTimeout(this.#hoverTimer)\n this.#hoverTimer = undefined\n }\n if (this.classList.contains(hoverClass)) {\n this.#hoverRemoveTimer = globalThis.setTimeout(() => {\n this.classList.remove(hoverClass)\n }, stayTime)\n }\n }\n\n #clearHoverTimers() {\n if (this.#hoverTimer) {\n clearTimeout(this.#hoverTimer)\n this.#hoverTimer = undefined\n }\n if (this.#hoverRemoveTimer) {\n clearTimeout(this.#hoverRemoveTimer)\n this.#hoverRemoveTimer = undefined\n }\n }\n}\n\nexport function ensureButtonDefined(): void {\n if (typeof customElements === 'undefined') {\n return\n }\n if (!customElements.get(NAV_BUTTON_TAG)) {\n customElements.define(NAV_BUTTON_TAG, WeappButton)\n }\n}\n\nexport function setButtonFormConfig(next: ButtonFormConfig): void {\n formConfig = {\n ...formConfig,\n ...next,\n }\n}\n\nexport type { ButtonFormConfig }\n"],"mappings":"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"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
import { injectStyle } from "../style.mjs";
|
|
10
2
|
|
|
11
3
|
//#region src/runtime/button/style.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/runtime/button/style.ts"],"sourcesContent":["import { injectStyle } from '../style'\n\nconst BUTTON_STYLE_ID = 'weapp-web-button-style'\nconst styleTargets = new WeakSet<ParentNode>()\nlet sharedSheet: CSSStyleSheet | undefined\n\nconst BUTTON_STYLE = `\nweapp-button {\n display: block;\n width: 100%;\n box-sizing: border-box;\n}\n\nweapp-button.weapp-btn--mini {\n display: inline-block;\n width: auto;\n}\n\nweapp-button .weapp-btn {\n appearance: none;\n -webkit-appearance: none;\n box-sizing: border-box;\n width: 100%;\n border-radius: 5px;\n border: 1px solid #d9d9d9;\n padding: 0 16px;\n height: 44px;\n line-height: 44px;\n font-size: 17px;\n font-weight: 400;\n background-color: #f8f8f8;\n color: #000000;\n cursor: pointer;\n outline: none;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n}\n\nweapp-button.weapp-btn--primary .weapp-btn {\n background-color: #07c160;\n border-color: #07c160;\n color: #ffffff;\n}\n\nweapp-button.weapp-btn--warn .weapp-btn {\n background-color: #e64340;\n border-color: #e64340;\n color: #ffffff;\n}\n\nweapp-button.weapp-btn--plain .weapp-btn {\n background-color: transparent;\n}\n\nweapp-button.weapp-btn--plain.weapp-btn--default .weapp-btn {\n border-color: #b2b2b2;\n color: #353535;\n}\n\nweapp-button.weapp-btn--plain.weapp-btn--primary .weapp-btn {\n border-color: #07c160;\n color: #07c160;\n}\n\nweapp-button.weapp-btn--plain.weapp-btn--warn .weapp-btn {\n border-color: #e64340;\n color: #e64340;\n}\n\nweapp-button.weapp-btn--loading .weapp-btn,\nweapp-button.weapp-btn--disabled .weapp-btn {\n background-color: #f7f7f7;\n border-color: #d9d9d9;\n color: #9b9b9b;\n cursor: not-allowed;\n}\n\nweapp-button.button-hover .weapp-btn {\n background-color: #ededed;\n border-color: #d2d2d2;\n}\n\nweapp-button.button-hover.weapp-btn--primary .weapp-btn {\n background-color: #06ad56;\n border-color: #06ad56;\n}\n\nweapp-button.button-hover.weapp-btn--warn .weapp-btn {\n background-color: #d93c37;\n border-color: #d93c37;\n}\n\nweapp-button.button-hover.weapp-btn--plain .weapp-btn {\n background-color: rgba(0, 0, 0, 0.06);\n}\n\nweapp-button.weapp-btn--mini .weapp-btn {\n height: 32px;\n line-height: 32px;\n font-size: 13px;\n padding: 0 12px;\n border-radius: 4px;\n}\n\nweapp-button .weapp-btn__content {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n width: 100%;\n}\n\nweapp-button .weapp-btn__loading {\n width: 14px;\n height: 14px;\n border-radius: 50%;\n border: 2px solid currentColor;\n border-top-color: transparent;\n animation: weapp-btn-spin 0.8s linear infinite;\n}\n\nweapp-button .weapp-btn__loading[hidden] {\n display: none;\n}\n\n@keyframes weapp-btn-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n`\n\nfunction resolveAdoptedStyleSheets(root: ShadowRoot) {\n const doc = root.ownerDocument ?? document\n if (!doc || typeof doc.createElement !== 'function') {\n return undefined\n }\n if (!('adoptedStyleSheets' in doc)) {\n return undefined\n }\n if (!sharedSheet && 'replaceSync' in CSSStyleSheet.prototype) {\n const sheet = new CSSStyleSheet()\n sheet.replaceSync(BUTTON_STYLE)\n sharedSheet = sheet\n }\n return sharedSheet\n}\n\nexport function ensureButtonStyle(root?: ShadowRoot) {\n if (typeof document === 'undefined') {\n return\n }\n if (root && styleTargets.has(root)) {\n return\n }\n if (!root) {\n const target = document.head\n if (!target || styleTargets.has(target)) {\n return\n }\n injectStyle(BUTTON_STYLE, BUTTON_STYLE_ID)\n styleTargets.add(target)\n return\n }\n const sheet = resolveAdoptedStyleSheets(root)\n if (sheet) {\n const existing = root.adoptedStyleSheets ?? []\n if (!existing.includes(sheet)) {\n root.adoptedStyleSheets = [...existing, sheet]\n }\n styleTargets.add(root)\n return\n }\n const style = document.createElement('style')\n style.id = BUTTON_STYLE_ID\n style.textContent = BUTTON_STYLE\n root.appendChild(style)\n styleTargets.add(root)\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/runtime/button/style.ts"],"sourcesContent":["import { injectStyle } from '../style'\n\nconst BUTTON_STYLE_ID = 'weapp-web-button-style'\nconst styleTargets = new WeakSet<ParentNode>()\nlet sharedSheet: CSSStyleSheet | undefined\n\nconst BUTTON_STYLE = `\nweapp-button {\n display: block;\n width: 100%;\n box-sizing: border-box;\n}\n\nweapp-button.weapp-btn--mini {\n display: inline-block;\n width: auto;\n}\n\nweapp-button .weapp-btn {\n appearance: none;\n -webkit-appearance: none;\n box-sizing: border-box;\n width: 100%;\n border-radius: 5px;\n border: 1px solid #d9d9d9;\n padding: 0 16px;\n height: 44px;\n line-height: 44px;\n font-size: 17px;\n font-weight: 400;\n background-color: #f8f8f8;\n color: #000000;\n cursor: pointer;\n outline: none;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n}\n\nweapp-button.weapp-btn--primary .weapp-btn {\n background-color: #07c160;\n border-color: #07c160;\n color: #ffffff;\n}\n\nweapp-button.weapp-btn--warn .weapp-btn {\n background-color: #e64340;\n border-color: #e64340;\n color: #ffffff;\n}\n\nweapp-button.weapp-btn--plain .weapp-btn {\n background-color: transparent;\n}\n\nweapp-button.weapp-btn--plain.weapp-btn--default .weapp-btn {\n border-color: #b2b2b2;\n color: #353535;\n}\n\nweapp-button.weapp-btn--plain.weapp-btn--primary .weapp-btn {\n border-color: #07c160;\n color: #07c160;\n}\n\nweapp-button.weapp-btn--plain.weapp-btn--warn .weapp-btn {\n border-color: #e64340;\n color: #e64340;\n}\n\nweapp-button.weapp-btn--loading .weapp-btn,\nweapp-button.weapp-btn--disabled .weapp-btn {\n background-color: #f7f7f7;\n border-color: #d9d9d9;\n color: #9b9b9b;\n cursor: not-allowed;\n}\n\nweapp-button.button-hover .weapp-btn {\n background-color: #ededed;\n border-color: #d2d2d2;\n}\n\nweapp-button.button-hover.weapp-btn--primary .weapp-btn {\n background-color: #06ad56;\n border-color: #06ad56;\n}\n\nweapp-button.button-hover.weapp-btn--warn .weapp-btn {\n background-color: #d93c37;\n border-color: #d93c37;\n}\n\nweapp-button.button-hover.weapp-btn--plain .weapp-btn {\n background-color: rgba(0, 0, 0, 0.06);\n}\n\nweapp-button.weapp-btn--mini .weapp-btn {\n height: 32px;\n line-height: 32px;\n font-size: 13px;\n padding: 0 12px;\n border-radius: 4px;\n}\n\nweapp-button .weapp-btn__content {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n width: 100%;\n}\n\nweapp-button .weapp-btn__loading {\n width: 14px;\n height: 14px;\n border-radius: 50%;\n border: 2px solid currentColor;\n border-top-color: transparent;\n animation: weapp-btn-spin 0.8s linear infinite;\n}\n\nweapp-button .weapp-btn__loading[hidden] {\n display: none;\n}\n\n@keyframes weapp-btn-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n`\n\nfunction resolveAdoptedStyleSheets(root: ShadowRoot) {\n const doc = root.ownerDocument ?? document\n if (!doc || typeof doc.createElement !== 'function') {\n return undefined\n }\n if (!('adoptedStyleSheets' in doc)) {\n return undefined\n }\n if (!sharedSheet && 'replaceSync' in CSSStyleSheet.prototype) {\n const sheet = new CSSStyleSheet()\n sheet.replaceSync(BUTTON_STYLE)\n sharedSheet = sheet\n }\n return sharedSheet\n}\n\nexport function ensureButtonStyle(root?: ShadowRoot) {\n if (typeof document === 'undefined') {\n return\n }\n if (root && styleTargets.has(root)) {\n return\n }\n if (!root) {\n const target = document.head\n if (!target || styleTargets.has(target)) {\n return\n }\n injectStyle(BUTTON_STYLE, BUTTON_STYLE_ID)\n styleTargets.add(target)\n return\n }\n const sheet = resolveAdoptedStyleSheets(root)\n if (sheet) {\n const existing = root.adoptedStyleSheets ?? []\n if (!existing.includes(sheet)) {\n root.adoptedStyleSheets = [...existing, sheet]\n }\n styleTargets.add(root)\n return\n }\n const style = document.createElement('style')\n style.id = BUTTON_STYLE_ID\n style.textContent = BUTTON_STYLE\n root.appendChild(style)\n styleTargets.add(root)\n}\n"],"mappings":";;;AAEA,MAAM,kBAAkB;AACxB,MAAM,+BAAe,IAAI,QAAoB;AAC7C,IAAI;AAEJ,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6HrB,SAAS,0BAA0B,MAAkB;CACnD,MAAM,MAAM,KAAK,iBAAiB;CAClC,IAAI,CAAC,OAAO,OAAO,IAAI,kBAAkB,YACvC;CAEF,IAAI,EAAE,wBAAwB,MAC5B;CAEF,IAAI,CAAC,eAAe,iBAAiB,cAAc,WAAW;EAC5D,MAAM,QAAQ,IAAI,cAAc;EAChC,MAAM,YAAY,YAAY;EAC9B,cAAc;CAChB;CACA,OAAO;AACT;AAEA,SAAgB,kBAAkB,MAAmB;CACnD,IAAI,OAAO,aAAa,aACtB;CAEF,IAAI,QAAQ,aAAa,IAAI,IAAI,GAC/B;CAEF,IAAI,CAAC,MAAM;EACT,MAAM,SAAS,SAAS;EACxB,IAAI,CAAC,UAAU,aAAa,IAAI,MAAM,GACpC;EAEF,YAAY,cAAc,eAAe;EACzC,aAAa,IAAI,MAAM;EACvB;CACF;CACA,MAAM,QAAQ,0BAA0B,IAAI;CAC5C,IAAI,OAAO;EACT,MAAM,WAAW,KAAK,sBAAsB,CAAC;EAC7C,IAAI,CAAC,SAAS,SAAS,KAAK,GAC1B,KAAK,qBAAqB,CAAC,GAAG,UAAU,KAAK;EAE/C,aAAa,IAAI,IAAI;EACrB;CACF;CACA,MAAM,QAAQ,SAAS,cAAc,OAAO;CAC5C,MAAM,KAAK;CACX,MAAM,cAAc;CACpB,KAAK,YAAY,KAAK;CACtB,aAAa,IAAI,IAAI;AACvB"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
//#region src/runtime/component/behavior.ts
|
|
10
2
|
function isPlainObject(value) {
|
|
11
3
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior.mjs","names":[],"sources":["../../../src/runtime/component/behavior.ts"],"sourcesContent":["import type {\n ComponentOptions,\n ComponentPublicInstance,\n DataRecord,\n LifeTimeHooks,\n PageLifeTimeHooks,\n} from './types'\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction mergeLifetimes(target: LifeTimeHooks, source?: LifeTimeHooks) {\n if (!source) {\n return\n }\n const keys: Array<keyof LifeTimeHooks> = ['created', 'attached', 'ready', 'detached']\n for (const key of keys) {\n const next = source[key]\n if (!next) {\n continue\n }\n const current = target[key]\n target[key] = current\n ? function merged(this: ComponentPublicInstance) {\n current.call(this)\n next.call(this)\n }\n : next\n }\n}\n\nfunction mergePageLifetimes(target: PageLifeTimeHooks, source?: PageLifeTimeHooks) {\n if (!source) {\n return\n }\n const keys: Array<keyof PageLifeTimeHooks> = ['show', 'hide', 'resize']\n for (const key of keys) {\n const next = source[key]\n if (!next) {\n continue\n }\n const current = target[key]\n target[key] = current\n ? function merged(this: ComponentPublicInstance) {\n current.call(this)\n next.call(this)\n }\n : next\n }\n}\n\nexport function normalizeBehaviors(component: ComponentOptions | undefined) {\n if (!component) {\n return { component: undefined, warnings: [] as string[] }\n }\n const warnings: string[] = []\n const visited = new Set<ComponentOptions>()\n const merged: ComponentOptions = {}\n\n const mergeComponent = (source: ComponentOptions) => {\n if (source.properties) {\n merged.properties = { ...(merged.properties ?? {}), ...source.properties }\n }\n if (source.data) {\n const nextData = typeof source.data === 'function'\n ? source.data()\n : source.data\n if (isPlainObject(nextData)) {\n merged.data = { ...((merged.data as DataRecord) ?? {}), ...nextData }\n }\n }\n if (source.methods) {\n merged.methods = { ...(merged.methods ?? {}), ...source.methods }\n }\n if (source.lifetimes) {\n merged.lifetimes = merged.lifetimes ?? {}\n mergeLifetimes(merged.lifetimes, source.lifetimes)\n }\n if (source.pageLifetimes) {\n merged.pageLifetimes = merged.pageLifetimes ?? {}\n mergePageLifetimes(merged.pageLifetimes, source.pageLifetimes)\n }\n }\n\n const walk = (source: ComponentOptions) => {\n if (visited.has(source)) {\n warnings.push('[@weapp-vite/web] behaviors 存在循环引用,已跳过。')\n return\n }\n visited.add(source)\n const behaviors = source.behaviors ?? []\n if (Array.isArray(behaviors)) {\n for (const behavior of behaviors) {\n if (!behavior || !isPlainObject(behavior)) {\n warnings.push('[@weapp-vite/web] behaviors 仅支持对象,已忽略非对象条目。')\n continue\n }\n walk(behavior as ComponentOptions)\n mergeComponent(behavior as ComponentOptions)\n }\n }\n else if (behaviors) {\n warnings.push('[@weapp-vite/web] behaviors 仅支持数组,已忽略。')\n }\n }\n\n walk(component)\n mergeComponent(component)\n\n return {\n component: merged,\n warnings,\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"behavior.mjs","names":[],"sources":["../../../src/runtime/component/behavior.ts"],"sourcesContent":["import type {\n ComponentOptions,\n ComponentPublicInstance,\n DataRecord,\n LifeTimeHooks,\n PageLifeTimeHooks,\n} from './types'\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction mergeLifetimes(target: LifeTimeHooks, source?: LifeTimeHooks) {\n if (!source) {\n return\n }\n const keys: Array<keyof LifeTimeHooks> = ['created', 'attached', 'ready', 'detached']\n for (const key of keys) {\n const next = source[key]\n if (!next) {\n continue\n }\n const current = target[key]\n target[key] = current\n ? function merged(this: ComponentPublicInstance) {\n current.call(this)\n next.call(this)\n }\n : next\n }\n}\n\nfunction mergePageLifetimes(target: PageLifeTimeHooks, source?: PageLifeTimeHooks) {\n if (!source) {\n return\n }\n const keys: Array<keyof PageLifeTimeHooks> = ['show', 'hide', 'resize']\n for (const key of keys) {\n const next = source[key]\n if (!next) {\n continue\n }\n const current = target[key]\n target[key] = current\n ? function merged(this: ComponentPublicInstance) {\n current.call(this)\n next.call(this)\n }\n : next\n }\n}\n\nexport function normalizeBehaviors(component: ComponentOptions | undefined) {\n if (!component) {\n return { component: undefined, warnings: [] as string[] }\n }\n const warnings: string[] = []\n const visited = new Set<ComponentOptions>()\n const merged: ComponentOptions = {}\n\n const mergeComponent = (source: ComponentOptions) => {\n if (source.properties) {\n merged.properties = { ...(merged.properties ?? {}), ...source.properties }\n }\n if (source.data) {\n const nextData = typeof source.data === 'function'\n ? source.data()\n : source.data\n if (isPlainObject(nextData)) {\n merged.data = { ...((merged.data as DataRecord) ?? {}), ...nextData }\n }\n }\n if (source.methods) {\n merged.methods = { ...(merged.methods ?? {}), ...source.methods }\n }\n if (source.lifetimes) {\n merged.lifetimes = merged.lifetimes ?? {}\n mergeLifetimes(merged.lifetimes, source.lifetimes)\n }\n if (source.pageLifetimes) {\n merged.pageLifetimes = merged.pageLifetimes ?? {}\n mergePageLifetimes(merged.pageLifetimes, source.pageLifetimes)\n }\n }\n\n const walk = (source: ComponentOptions) => {\n if (visited.has(source)) {\n warnings.push('[@weapp-vite/web] behaviors 存在循环引用,已跳过。')\n return\n }\n visited.add(source)\n const behaviors = source.behaviors ?? []\n if (Array.isArray(behaviors)) {\n for (const behavior of behaviors) {\n if (!behavior || !isPlainObject(behavior)) {\n warnings.push('[@weapp-vite/web] behaviors 仅支持对象,已忽略非对象条目。')\n continue\n }\n walk(behavior as ComponentOptions)\n mergeComponent(behavior as ComponentOptions)\n }\n }\n else if (behaviors) {\n warnings.push('[@weapp-vite/web] behaviors 仅支持数组,已忽略。')\n }\n }\n\n walk(component)\n mergeComponent(component)\n\n return {\n component: merged,\n warnings,\n }\n}\n"],"mappings":";AAQA,SAAS,cAAc,OAA8C;CACnE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,eAAe,QAAuB,QAAwB;CACrE,IAAI,CAAC,QACH;CAGF,KAAK,MAAM,OAAO;EADwB;EAAW;EAAY;EAAS;CACrD,GAAG;EACtB,MAAM,OAAO,OAAO;EACpB,IAAI,CAAC,MACH;EAEF,MAAM,UAAU,OAAO;EACvB,OAAO,OAAO,UACV,SAAS,SAAsC;GAC/C,QAAQ,KAAK,IAAI;GACjB,KAAK,KAAK,IAAI;EAChB,IACE;CACN;AACF;AAEA,SAAS,mBAAmB,QAA2B,QAA4B;CACjF,IAAI,CAAC,QACH;CAGF,KAAK,MAAM,OAAO;EAD4B;EAAQ;EAAQ;CACzC,GAAG;EACtB,MAAM,OAAO,OAAO;EACpB,IAAI,CAAC,MACH;EAEF,MAAM,UAAU,OAAO;EACvB,OAAO,OAAO,UACV,SAAS,SAAsC;GAC/C,QAAQ,KAAK,IAAI;GACjB,KAAK,KAAK,IAAI;EAChB,IACE;CACN;AACF;AAEA,SAAgB,mBAAmB,WAAyC;CAC1E,IAAI,CAAC,WACH,OAAO;EAAE,WAAW;EAAW,UAAU,CAAC;CAAc;CAE1D,MAAM,WAAqB,CAAC;CAC5B,MAAM,0BAAU,IAAI,IAAsB;CAC1C,MAAM,SAA2B,CAAC;CAElC,MAAM,kBAAkB,WAA6B;EACnD,IAAI,OAAO,YACT,OAAO,aAAa;GAAE,GAAI,OAAO,cAAc,CAAC;GAAI,GAAG,OAAO;EAAW;EAE3E,IAAI,OAAO,MAAM;GACf,MAAM,WAAW,OAAO,OAAO,SAAS,aACpC,OAAO,KAAK,IACZ,OAAO;GACX,IAAI,cAAc,QAAQ,GACxB,OAAO,OAAO;IAAE,GAAK,OAAO,QAAuB,CAAC;IAAI,GAAG;GAAS;EAExE;EACA,IAAI,OAAO,SACT,OAAO,UAAU;GAAE,GAAI,OAAO,WAAW,CAAC;GAAI,GAAG,OAAO;EAAQ;EAElE,IAAI,OAAO,WAAW;GACpB,OAAO,YAAY,OAAO,aAAa,CAAC;GACxC,eAAe,OAAO,WAAW,OAAO,SAAS;EACnD;EACA,IAAI,OAAO,eAAe;GACxB,OAAO,gBAAgB,OAAO,iBAAiB,CAAC;GAChD,mBAAmB,OAAO,eAAe,OAAO,aAAa;EAC/D;CACF;CAEA,MAAM,QAAQ,WAA6B;EACzC,IAAI,QAAQ,IAAI,MAAM,GAAG;GACvB,SAAS,KAAK,yCAAyC;GACvD;EACF;EACA,QAAQ,IAAI,MAAM;EAClB,MAAM,YAAY,OAAO,aAAa,CAAC;EACvC,IAAI,MAAM,QAAQ,SAAS,GACzB,KAAK,MAAM,YAAY,WAAW;GAChC,IAAI,CAAC,YAAY,CAAC,cAAc,QAAQ,GAAG;IACzC,SAAS,KAAK,6CAA6C;IAC3D;GACF;GACA,KAAK,QAA4B;GACjC,eAAe,QAA4B;EAC7C;OAEG,IAAI,WACP,SAAS,KAAK,wCAAwC;CAE1D;CAEA,KAAK,SAAS;CACd,eAAe,SAAS;CAExB,OAAO;EACL,WAAW;EACX;CACF;AACF"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
//#region src/runtime/component/constants.ts
|
|
10
2
|
const supportsLit = typeof document !== "undefined" && typeof document.createComment === "function" && typeof document.createTreeWalker === "function";
|
|
11
3
|
const FallbackElement = class {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.mjs","names":[],"sources":["../../../src/runtime/component/constants.ts"],"sourcesContent":["export const supportsLit = typeof document !== 'undefined'\n && typeof document.createComment === 'function'\n && typeof document.createTreeWalker === 'function'\n\nexport const FallbackElement = class {}\n\nexport const MINI_PROGRAM_EVENT_ATTRIBUTE_PREFIX = 'data-mp-on-'\nexport const MINI_PROGRAM_EVENT_FLAG_ATTRIBUTE_PREFIX = 'data-mp-on-flags-'\n\nexport const WECHAT_LEGACY_EVENT_ATTRIBUTE_PREFIX = 'data-wx-on-'\nexport const WECHAT_LEGACY_EVENT_FLAG_ATTRIBUTE_PREFIX = 'data-wx-on-flags-'\n\nexport const LEGACY_EVENT_ATTRIBUTE_PREFIX = WECHAT_LEGACY_EVENT_ATTRIBUTE_PREFIX\nexport const LEGACY_EVENT_FLAG_ATTRIBUTE_PREFIX = WECHAT_LEGACY_EVENT_FLAG_ATTRIBUTE_PREFIX\n\nexport const EVENT_ATTRIBUTE_PREFIXES = [\n MINI_PROGRAM_EVENT_ATTRIBUTE_PREFIX,\n WECHAT_LEGACY_EVENT_ATTRIBUTE_PREFIX,\n] as const\n\nexport const EVENT_FLAG_ATTRIBUTE_PREFIXES = [\n MINI_PROGRAM_EVENT_FLAG_ATTRIBUTE_PREFIX,\n WECHAT_LEGACY_EVENT_FLAG_ATTRIBUTE_PREFIX,\n] as const\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.mjs","names":[],"sources":["../../../src/runtime/component/constants.ts"],"sourcesContent":["export const supportsLit = typeof document !== 'undefined'\n && typeof document.createComment === 'function'\n && typeof document.createTreeWalker === 'function'\n\nexport const FallbackElement = class {}\n\nexport const MINI_PROGRAM_EVENT_ATTRIBUTE_PREFIX = 'data-mp-on-'\nexport const MINI_PROGRAM_EVENT_FLAG_ATTRIBUTE_PREFIX = 'data-mp-on-flags-'\n\nexport const WECHAT_LEGACY_EVENT_ATTRIBUTE_PREFIX = 'data-wx-on-'\nexport const WECHAT_LEGACY_EVENT_FLAG_ATTRIBUTE_PREFIX = 'data-wx-on-flags-'\n\nexport const LEGACY_EVENT_ATTRIBUTE_PREFIX = WECHAT_LEGACY_EVENT_ATTRIBUTE_PREFIX\nexport const LEGACY_EVENT_FLAG_ATTRIBUTE_PREFIX = WECHAT_LEGACY_EVENT_FLAG_ATTRIBUTE_PREFIX\n\nexport const EVENT_ATTRIBUTE_PREFIXES = [\n MINI_PROGRAM_EVENT_ATTRIBUTE_PREFIX,\n WECHAT_LEGACY_EVENT_ATTRIBUTE_PREFIX,\n] as const\n\nexport const EVENT_FLAG_ATTRIBUTE_PREFIXES = [\n MINI_PROGRAM_EVENT_FLAG_ATTRIBUTE_PREFIX,\n WECHAT_LEGACY_EVENT_FLAG_ATTRIBUTE_PREFIX,\n] as const\n"],"mappings":";AAAA,MAAa,cAAc,OAAO,aAAa,eAC1C,OAAO,SAAS,kBAAkB,cAClC,OAAO,SAAS,qBAAqB;AAE1C,MAAa,kBAAkB,MAAM,CAAC;AAEtC,MAAa,sCAAsC;AACnD,MAAa,2CAA2C;AAExD,MAAa,uCAAuC;AACpD,MAAa,4CAA4C;AAKzD,MAAa,2BAA2B,CACtC,qCACA,oCACF;AAEA,MAAa,gCAAgC,CAC3C,0CACA,yCACF"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import __tsdown_shims_path from 'node:path'
|
|
4
|
-
import __tsdown_shims_url from 'node:url'
|
|
5
|
-
|
|
6
|
-
const __TSDOWN_SHIM_FILENAME__ = /* @__PURE__ */ __tsdown_shims_url.fileURLToPath(import.meta.url)
|
|
7
|
-
const __TSDOWN_SHIM_DIRNAME__ = /* @__PURE__ */ __tsdown_shims_path.dirname(__TSDOWN_SHIM_FILENAME__)
|
|
8
|
-
|
|
9
1
|
import { getMiniProgramRuntimeGlobalKeys } from "@weapp-core/shared";
|
|
10
2
|
|
|
11
3
|
//#region src/runtime/component/dom.ts
|