@weapp-vite/web 1.3.17 → 1.3.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/compiler/wxml/compile.mjs.map +1 -1
  2. package/dist/compiler/wxml/interpolation.mjs.map +1 -1
  3. package/dist/compiler/wxml/parser.mjs.map +1 -1
  4. package/dist/compiler/wxml/renderer.mjs.map +1 -1
  5. package/dist/compiler/wxml/specialNodes.mjs.map +1 -1
  6. package/dist/compiler/wxs.mjs.map +1 -1
  7. package/dist/css/wxss.mjs.map +1 -1
  8. package/dist/plugin/entry.mjs.map +1 -1
  9. package/dist/plugin/files.mjs.map +1 -1
  10. package/dist/plugin/index.mjs.map +1 -1
  11. package/dist/plugin/path.mjs.map +1 -1
  12. package/dist/plugin/scan.mjs.map +1 -1
  13. package/dist/plugin/scanConfig.mjs.map +1 -1
  14. package/dist/runtime/button/helpers.mjs.map +1 -1
  15. package/dist/runtime/button/index.mjs.map +1 -1
  16. package/dist/runtime/component/behavior.mjs.map +1 -1
  17. package/dist/runtime/component/state.mjs.map +1 -1
  18. package/dist/runtime/legacyTemplate/expression.mjs.map +1 -1
  19. package/dist/runtime/legacyTemplate/index.mjs.map +1 -1
  20. package/dist/runtime/polyfill/auth.mjs.map +1 -1
  21. package/dist/runtime/polyfill/canvasContext.mjs.map +1 -1
  22. package/dist/runtime/polyfill/deviceApi.mjs.map +1 -1
  23. package/dist/runtime/polyfill/filePicker.mjs.map +1 -1
  24. package/dist/runtime/polyfill/fileSystemManager.mjs.map +1 -1
  25. package/dist/runtime/polyfill/files.mjs.map +1 -1
  26. package/dist/runtime/polyfill/interaction.mjs.map +1 -1
  27. package/dist/runtime/polyfill/interactionApi.mjs.map +1 -1
  28. package/dist/runtime/polyfill/location.mjs.map +1 -1
  29. package/dist/runtime/polyfill/locationApi.mjs.map +1 -1
  30. package/dist/runtime/polyfill/mediaActions.mjs.map +1 -1
  31. package/dist/runtime/polyfill/mediaApi/picker.mjs.map +1 -1
  32. package/dist/runtime/polyfill/mediaApi/process.mjs.map +1 -1
  33. package/dist/runtime/polyfill/mediaInfo.mjs.map +1 -1
  34. package/dist/runtime/polyfill/mediaPicker.mjs.map +1 -1
  35. package/dist/runtime/polyfill/mediaProcess.mjs.map +1 -1
  36. package/dist/runtime/polyfill/network/request.mjs.map +1 -1
  37. package/dist/runtime/polyfill/network/status.mjs.map +1 -1
  38. package/dist/runtime/polyfill/platformRuntime.mjs.map +1 -1
  39. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs.map +1 -1
  40. package/dist/runtime/polyfill/routeRuntime/options.mjs.map +1 -1
  41. package/dist/runtime/polyfill/routeRuntime/url.mjs.map +1 -1
  42. package/dist/runtime/polyfill/runtimeOps.mjs.map +1 -1
  43. package/dist/runtime/polyfill/storage.mjs.map +1 -1
  44. package/dist/runtime/polyfill/subscribe.mjs.map +1 -1
  45. package/dist/runtime/polyfill/system.mjs.map +1 -1
  46. package/dist/runtime/polyfill/systemApi.mjs.map +1 -1
  47. package/dist/runtime/polyfill/ui.mjs.map +1 -1
  48. package/dist/runtime/polyfill/videoContext.mjs.map +1 -1
  49. package/dist/runtime/renderContext.mjs.map +1 -1
  50. package/dist/shared/slugify.mjs.map +1 -1
  51. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"mediaInfo.mjs","names":[],"sources":["../../../src/runtime/polyfill/mediaInfo.ts"],"sourcesContent":["import {\n WEAPP_VITE_WEB_COMPRESS_VIDEO_KEY,\n WEAPP_VITE_WEB_VIDEO_INFO_KEY,\n} from '@weapp-core/constants'\n\nexport function inferImageTypeFromPath(path: string) {\n const lower = path.toLowerCase()\n if (lower.includes('.png')) {\n return 'png'\n }\n if (lower.includes('.jpg') || lower.includes('.jpeg')) {\n return 'jpg'\n }\n if (lower.includes('.gif')) {\n return 'gif'\n }\n if (lower.includes('.webp')) {\n return 'webp'\n }\n if (lower.includes('.bmp')) {\n return 'bmp'\n }\n if (lower.includes('.svg')) {\n return 'svg'\n }\n if (lower.includes('.avif')) {\n return 'avif'\n }\n return 'unknown'\n}\n\nexport function inferVideoTypeFromPath(path: string) {\n const lower = path.toLowerCase()\n if (lower.includes('.mp4')) {\n return 'mp4'\n }\n if (lower.includes('.mov')) {\n return 'mov'\n }\n if (lower.includes('.m4v')) {\n return 'm4v'\n }\n if (lower.includes('.webm')) {\n return 'webm'\n }\n if (lower.includes('.avi')) {\n return 'avi'\n }\n if (lower.includes('.mkv')) {\n return 'mkv'\n }\n return 'unknown'\n}\n\nexport function normalizeVideoInfoNumber(value: unknown) {\n if (typeof value !== 'number' || Number.isNaN(value) || value < 0) {\n return 0\n }\n return value\n}\n\nfunction normalizeVideoInfoPreset(value: unknown, src: string) {\n if (!value || typeof value !== 'object') {\n return null\n }\n const info = value as Record<string, unknown>\n return {\n size: normalizeVideoInfoNumber(info.size),\n duration: normalizeVideoInfoNumber(info.duration),\n width: normalizeVideoInfoNumber(info.width),\n height: normalizeVideoInfoNumber(info.height),\n fps: normalizeVideoInfoNumber(info.fps),\n bitrate: normalizeVideoInfoNumber(info.bitrate),\n type: typeof info.type === 'string' ? info.type : inferVideoTypeFromPath(src),\n orientation: 'up' as const,\n }\n}\n\nexport function readPresetVideoInfo(src: string) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_VIDEO_INFO_KEY]\n if (typeof preset === 'function') {\n return normalizeVideoInfoPreset((preset as (value: string) => unknown)(src), src)\n }\n if (preset && typeof preset === 'object') {\n const sourcePreset = (preset as Record<string, unknown>)[src]\n if (sourcePreset && typeof sourcePreset === 'object') {\n return normalizeVideoInfoPreset(sourcePreset, src)\n }\n return normalizeVideoInfoPreset(preset, src)\n }\n return null\n}\n\nfunction normalizeCompressVideoResult(value: unknown, src: string) {\n if (!value || typeof value !== 'object') {\n return null\n }\n const info = value as Record<string, unknown>\n const tempFilePath = typeof info.tempFilePath === 'string' && info.tempFilePath.trim()\n ? info.tempFilePath.trim()\n : src\n return {\n tempFilePath,\n size: normalizeVideoInfoNumber(info.size),\n duration: normalizeVideoInfoNumber(info.duration),\n width: normalizeVideoInfoNumber(info.width),\n height: normalizeVideoInfoNumber(info.height),\n bitrate: normalizeVideoInfoNumber(info.bitrate),\n fps: normalizeVideoInfoNumber(info.fps),\n }\n}\n\nexport function readPresetCompressVideo(src: string) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_COMPRESS_VIDEO_KEY]\n if (typeof preset === 'function') {\n return normalizeCompressVideoResult((preset as (value: string) => unknown)(src), src)\n }\n if (preset && typeof preset === 'object') {\n const sourcePreset = (preset as Record<string, unknown>)[src]\n if (sourcePreset && typeof sourcePreset === 'object') {\n return normalizeCompressVideoResult(sourcePreset, src)\n }\n return normalizeCompressVideoResult(preset, src)\n }\n if (typeof preset === 'string' && preset.trim()) {\n return {\n tempFilePath: preset.trim(),\n size: 0,\n duration: 0,\n width: 0,\n height: 0,\n bitrate: 0,\n fps: 0,\n }\n }\n return null\n}\n\nexport async function readImageInfoFromSource(src: string) {\n const ImageCtor = (globalThis as { Image?: typeof Image }).Image\n if (typeof ImageCtor !== 'function') {\n throw new TypeError('Image is unavailable')\n }\n return new Promise<{ width: number, height: number }>((resolve, reject) => {\n const image = new ImageCtor()\n image.onload = () => {\n const width = Number((image as { naturalWidth?: number }).naturalWidth ?? image.width ?? 0)\n const height = Number((image as { naturalHeight?: number }).naturalHeight ?? image.height ?? 0)\n resolve({\n width: Number.isFinite(width) ? width : 0,\n height: Number.isFinite(height) ? height : 0,\n })\n }\n image.onerror = () => {\n reject(new Error('image load error'))\n }\n image.src = src\n })\n}\n\nexport async function readVideoInfoFromSource(src: string) {\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\n throw new TypeError('video element is unavailable')\n }\n const video = document.createElement('video') as HTMLVideoElement\n if (!video || typeof video.addEventListener !== 'function') {\n throw new Error('video element is unavailable')\n }\n return new Promise<{ duration: number, width: number, height: number }>((resolve, reject) => {\n const cleanup = () => {\n if (typeof video.removeEventListener === 'function') {\n // eslint-disable-next-line ts/no-use-before-define\n video.removeEventListener('loadedmetadata', onLoadedMetadata)\n // eslint-disable-next-line ts/no-use-before-define\n video.removeEventListener('error', onError)\n }\n }\n const onLoadedMetadata = () => {\n cleanup()\n resolve({\n duration: normalizeVideoInfoNumber(video.duration),\n width: normalizeVideoInfoNumber((video as { videoWidth?: number }).videoWidth),\n height: normalizeVideoInfoNumber((video as { videoHeight?: number }).videoHeight),\n })\n }\n const onError = () => {\n cleanup()\n reject(new Error('video load error'))\n }\n video.addEventListener('loadedmetadata', onLoadedMetadata, { once: true })\n video.addEventListener('error', onError, { once: true })\n video.src = src\n video.load?.()\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mediaInfo.mjs","names":["runtimeGlobal"],"sources":["../../../src/runtime/polyfill/mediaInfo.ts"],"sourcesContent":["import {\n WEAPP_VITE_WEB_COMPRESS_VIDEO_KEY,\n WEAPP_VITE_WEB_VIDEO_INFO_KEY,\n} from '@weapp-core/constants'\n\nexport function inferImageTypeFromPath(path: string) {\n const lower = path.toLowerCase()\n if (lower.includes('.png')) {\n return 'png'\n }\n if (lower.includes('.jpg') || lower.includes('.jpeg')) {\n return 'jpg'\n }\n if (lower.includes('.gif')) {\n return 'gif'\n }\n if (lower.includes('.webp')) {\n return 'webp'\n }\n if (lower.includes('.bmp')) {\n return 'bmp'\n }\n if (lower.includes('.svg')) {\n return 'svg'\n }\n if (lower.includes('.avif')) {\n return 'avif'\n }\n return 'unknown'\n}\n\nexport function inferVideoTypeFromPath(path: string) {\n const lower = path.toLowerCase()\n if (lower.includes('.mp4')) {\n return 'mp4'\n }\n if (lower.includes('.mov')) {\n return 'mov'\n }\n if (lower.includes('.m4v')) {\n return 'm4v'\n }\n if (lower.includes('.webm')) {\n return 'webm'\n }\n if (lower.includes('.avi')) {\n return 'avi'\n }\n if (lower.includes('.mkv')) {\n return 'mkv'\n }\n return 'unknown'\n}\n\nexport function normalizeVideoInfoNumber(value: unknown) {\n if (typeof value !== 'number' || Number.isNaN(value) || value < 0) {\n return 0\n }\n return value\n}\n\nfunction normalizeVideoInfoPreset(value: unknown, src: string) {\n if (!value || typeof value !== 'object') {\n return null\n }\n const info = value as Record<string, unknown>\n return {\n size: normalizeVideoInfoNumber(info.size),\n duration: normalizeVideoInfoNumber(info.duration),\n width: normalizeVideoInfoNumber(info.width),\n height: normalizeVideoInfoNumber(info.height),\n fps: normalizeVideoInfoNumber(info.fps),\n bitrate: normalizeVideoInfoNumber(info.bitrate),\n type: typeof info.type === 'string' ? info.type : inferVideoTypeFromPath(src),\n orientation: 'up' as const,\n }\n}\n\nexport function readPresetVideoInfo(src: string) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_VIDEO_INFO_KEY]\n if (typeof preset === 'function') {\n return normalizeVideoInfoPreset((preset as (value: string) => unknown)(src), src)\n }\n if (preset && typeof preset === 'object') {\n const sourcePreset = (preset as Record<string, unknown>)[src]\n if (sourcePreset && typeof sourcePreset === 'object') {\n return normalizeVideoInfoPreset(sourcePreset, src)\n }\n return normalizeVideoInfoPreset(preset, src)\n }\n return null\n}\n\nfunction normalizeCompressVideoResult(value: unknown, src: string) {\n if (!value || typeof value !== 'object') {\n return null\n }\n const info = value as Record<string, unknown>\n const tempFilePath = typeof info.tempFilePath === 'string' && info.tempFilePath.trim()\n ? info.tempFilePath.trim()\n : src\n return {\n tempFilePath,\n size: normalizeVideoInfoNumber(info.size),\n duration: normalizeVideoInfoNumber(info.duration),\n width: normalizeVideoInfoNumber(info.width),\n height: normalizeVideoInfoNumber(info.height),\n bitrate: normalizeVideoInfoNumber(info.bitrate),\n fps: normalizeVideoInfoNumber(info.fps),\n }\n}\n\nexport function readPresetCompressVideo(src: string) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_COMPRESS_VIDEO_KEY]\n if (typeof preset === 'function') {\n return normalizeCompressVideoResult((preset as (value: string) => unknown)(src), src)\n }\n if (preset && typeof preset === 'object') {\n const sourcePreset = (preset as Record<string, unknown>)[src]\n if (sourcePreset && typeof sourcePreset === 'object') {\n return normalizeCompressVideoResult(sourcePreset, src)\n }\n return normalizeCompressVideoResult(preset, src)\n }\n if (typeof preset === 'string' && preset.trim()) {\n return {\n tempFilePath: preset.trim(),\n size: 0,\n duration: 0,\n width: 0,\n height: 0,\n bitrate: 0,\n fps: 0,\n }\n }\n return null\n}\n\nexport async function readImageInfoFromSource(src: string) {\n const ImageCtor = (globalThis as { Image?: typeof Image }).Image\n if (typeof ImageCtor !== 'function') {\n throw new TypeError('Image is unavailable')\n }\n return new Promise<{ width: number, height: number }>((resolve, reject) => {\n const image = new ImageCtor()\n image.onload = () => {\n const width = Number((image as { naturalWidth?: number }).naturalWidth ?? image.width ?? 0)\n const height = Number((image as { naturalHeight?: number }).naturalHeight ?? image.height ?? 0)\n resolve({\n width: Number.isFinite(width) ? width : 0,\n height: Number.isFinite(height) ? height : 0,\n })\n }\n image.onerror = () => {\n reject(new Error('image load error'))\n }\n image.src = src\n })\n}\n\nexport async function readVideoInfoFromSource(src: string) {\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\n throw new TypeError('video element is unavailable')\n }\n const video = document.createElement('video') as HTMLVideoElement\n if (!video || typeof video.addEventListener !== 'function') {\n throw new Error('video element is unavailable')\n }\n return new Promise<{ duration: number, width: number, height: number }>((resolve, reject) => {\n const cleanup = () => {\n if (typeof video.removeEventListener === 'function') {\n // eslint-disable-next-line ts/no-use-before-define\n video.removeEventListener('loadedmetadata', onLoadedMetadata)\n // eslint-disable-next-line ts/no-use-before-define\n video.removeEventListener('error', onError)\n }\n }\n const onLoadedMetadata = () => {\n cleanup()\n resolve({\n duration: normalizeVideoInfoNumber(video.duration),\n width: normalizeVideoInfoNumber((video as { videoWidth?: number }).videoWidth),\n height: normalizeVideoInfoNumber((video as { videoHeight?: number }).videoHeight),\n })\n }\n const onError = () => {\n cleanup()\n reject(new Error('video load error'))\n }\n video.addEventListener('loadedmetadata', onLoadedMetadata, { once: true })\n video.addEventListener('error', onError, { once: true })\n video.src = src\n video.load?.()\n })\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mediaPicker.mjs","names":[],"sources":["../../../src/runtime/polyfill/mediaPicker.ts"],"sourcesContent":["type ChooseMediaType = 'image' | 'video'\n\ntype RawChooseMediaType = ChooseMediaType | 'mix'\n\nexport function normalizeChooseImageCount(count: number | undefined) {\n if (typeof count !== 'number' || Number.isNaN(count)) {\n return 9\n }\n return Math.max(1, Math.floor(count))\n}\n\nexport function createTempFilePath(file: { name?: string }) {\n const runtimeUrl = (globalThis as {\n URL?: {\n createObjectURL?: (value: unknown) => string\n }\n }).URL\n if (runtimeUrl && typeof runtimeUrl.createObjectURL === 'function') {\n const result = runtimeUrl.createObjectURL(file)\n if (result) {\n return result\n }\n }\n return file.name ?? ''\n}\n\nexport function normalizeChooseImageFile(file: {\n size?: number\n type?: string\n name?: string\n}) {\n return {\n path: createTempFilePath(file),\n size: typeof file.size === 'number' ? file.size : 0,\n type: typeof file.type === 'string' ? file.type : '',\n name: typeof file.name === 'string' ? file.name : '',\n }\n}\n\nasync function pickImageFilesByOpenPicker(count: number) {\n const picker = (globalThis as {\n showOpenFilePicker?: (options: {\n multiple?: boolean\n types?: Array<{\n description?: string\n accept?: Record<string, string[]>\n }>\n }) => Promise<Array<{ getFile?: () => Promise<any> }>>\n }).showOpenFilePicker\n if (typeof picker !== 'function') {\n return null\n }\n const handles = await picker({\n multiple: count > 1,\n types: [{\n description: 'Images',\n accept: {\n 'image/*': ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.svg', '.avif'],\n },\n }],\n })\n const files: any[] = []\n for (const handle of handles ?? []) {\n const file = await handle?.getFile?.()\n if (file) {\n files.push(file)\n }\n if (files.length >= count) {\n break\n }\n }\n return files\n}\n\nasync function pickImageFilesByInput(count: number) {\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\n return null\n }\n const input = document.createElement('input') as HTMLInputElement\n if (!input || typeof input !== 'object') {\n return null\n }\n input.setAttribute('type', 'file')\n input.setAttribute('accept', 'image/*')\n if (count > 1) {\n input.setAttribute('multiple', 'true')\n }\n input.setAttribute('style', 'position: fixed; left: -9999px; top: -9999px; opacity: 0;')\n if (document.body) {\n document.body.append(input)\n }\n try {\n const files = await new Promise<any[]>((resolve, reject) => {\n const onChange = () => {\n const selected = input.files ? Array.from(input.files) : []\n if (selected.length) {\n resolve(selected.slice(0, count))\n return\n }\n reject(new Error('no file selected'))\n }\n input.addEventListener('change', onChange, { once: true })\n if (typeof input.click === 'function') {\n input.click()\n return\n }\n reject(new Error('file input click is unavailable'))\n })\n return files\n }\n finally {\n if (input.parentNode) {\n input.parentNode.removeChild(input)\n }\n }\n}\n\nexport async function pickChooseImageFiles(count: number) {\n const viaPicker = await pickImageFilesByOpenPicker(count)\n if (Array.isArray(viaPicker)) {\n return viaPicker\n }\n const viaInput = await pickImageFilesByInput(count)\n if (Array.isArray(viaInput)) {\n return viaInput\n }\n throw new TypeError('Image picker is unavailable in current environment.')\n}\n\nexport function normalizeChooseMediaCount(count: number | undefined) {\n if (typeof count !== 'number' || Number.isNaN(count)) {\n return 1\n }\n return Math.max(1, Math.floor(count))\n}\n\nexport function normalizeChooseMediaTypes(mediaType: RawChooseMediaType[] | undefined) {\n const normalized = new Set<ChooseMediaType>()\n for (const item of mediaType ?? []) {\n if (item === 'image') {\n normalized.add('image')\n continue\n }\n if (item === 'video') {\n normalized.add('video')\n continue\n }\n if (item === 'mix') {\n normalized.add('image')\n normalized.add('video')\n }\n }\n if (normalized.size === 0) {\n normalized.add('image')\n normalized.add('video')\n }\n return normalized\n}\n\nfunction buildChooseMediaOpenPickerAccept(types: Set<ChooseMediaType>) {\n const accept: Record<string, string[]> = {}\n if (types.has('image')) {\n accept['image/*'] = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.svg', '.avif']\n }\n if (types.has('video')) {\n accept['video/*'] = ['.mp4', '.mov', '.m4v', '.webm']\n }\n return accept\n}\n\nfunction buildChooseMediaInputAccept(types: Set<ChooseMediaType>) {\n if (types.size === 2) {\n return 'image/*,video/*'\n }\n return types.has('video') ? 'video/*' : 'image/*'\n}\n\nexport function inferChooseMediaFileType(file: { type?: string, name?: string }): ChooseMediaType {\n const mimeType = typeof file.type === 'string' ? file.type.toLowerCase() : ''\n if (mimeType.startsWith('video/')) {\n return 'video'\n }\n if (mimeType.startsWith('image/')) {\n return 'image'\n }\n const fileName = typeof file.name === 'string' ? file.name.toLowerCase() : ''\n if (/\\.(?:mp4|mov|m4v|webm)$/i.test(fileName)) {\n return 'video'\n }\n return 'image'\n}\n\nexport function normalizeChooseMediaFile(file: {\n size?: number\n type?: string\n name?: string\n}) {\n const fileType = inferChooseMediaFileType(file)\n return {\n tempFilePath: createTempFilePath(file),\n size: typeof file.size === 'number' ? file.size : 0,\n fileType,\n width: 0,\n height: 0,\n duration: 0,\n }\n}\n\nasync function pickMediaFilesByOpenPicker(count: number, types: Set<ChooseMediaType>) {\n const picker = (globalThis as {\n showOpenFilePicker?: (options: {\n multiple?: boolean\n types?: Array<{\n description?: string\n accept?: Record<string, string[]>\n }>\n }) => Promise<Array<{ getFile?: () => Promise<any> }>>\n }).showOpenFilePicker\n if (typeof picker !== 'function') {\n return null\n }\n const handles = await picker({\n multiple: count > 1,\n types: [{\n description: 'Media',\n accept: buildChooseMediaOpenPickerAccept(types),\n }],\n })\n const files: any[] = []\n for (const handle of handles ?? []) {\n const file = await handle?.getFile?.()\n if (file) {\n files.push(file)\n }\n if (files.length >= count) {\n break\n }\n }\n return files\n}\n\nasync function pickMediaFilesByInput(count: number, types: Set<ChooseMediaType>) {\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\n return null\n }\n const input = document.createElement('input') as HTMLInputElement\n if (!input || typeof input !== 'object') {\n return null\n }\n input.setAttribute('type', 'file')\n input.setAttribute('accept', buildChooseMediaInputAccept(types))\n if (count > 1) {\n input.setAttribute('multiple', 'true')\n }\n input.setAttribute('style', 'position: fixed; left: -9999px; top: -9999px; opacity: 0;')\n if (document.body) {\n document.body.append(input)\n }\n try {\n const files = await new Promise<any[]>((resolve, reject) => {\n const onChange = () => {\n const selected = input.files ? Array.from(input.files) : []\n if (selected.length) {\n resolve(selected.slice(0, count))\n return\n }\n reject(new Error('no file selected'))\n }\n input.addEventListener('change', onChange, { once: true })\n if (typeof input.click === 'function') {\n input.click()\n return\n }\n reject(new Error('file input click is unavailable'))\n })\n return files\n }\n finally {\n if (input.parentNode) {\n input.parentNode.removeChild(input)\n }\n }\n}\n\nexport async function pickChooseMediaFiles(count: number, types: Set<ChooseMediaType>) {\n const viaPicker = await pickMediaFilesByOpenPicker(count, types)\n if (Array.isArray(viaPicker)) {\n return viaPicker\n }\n const viaInput = await pickMediaFilesByInput(count, types)\n if (Array.isArray(viaInput)) {\n return viaInput\n }\n throw new TypeError('Media picker is unavailable in current environment.')\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mediaPicker.mjs","names":[],"sources":["../../../src/runtime/polyfill/mediaPicker.ts"],"sourcesContent":["type ChooseMediaType = 'image' | 'video'\n\ntype RawChooseMediaType = ChooseMediaType | 'mix'\n\nexport function normalizeChooseImageCount(count: number | undefined) {\n if (typeof count !== 'number' || Number.isNaN(count)) {\n return 9\n }\n return Math.max(1, Math.floor(count))\n}\n\nexport function createTempFilePath(file: { name?: string }) {\n const runtimeUrl = (globalThis as {\n URL?: {\n createObjectURL?: (value: unknown) => string\n }\n }).URL\n if (runtimeUrl && typeof runtimeUrl.createObjectURL === 'function') {\n const result = runtimeUrl.createObjectURL(file)\n if (result) {\n return result\n }\n }\n return file.name ?? ''\n}\n\nexport function normalizeChooseImageFile(file: {\n size?: number\n type?: string\n name?: string\n}) {\n return {\n path: createTempFilePath(file),\n size: typeof file.size === 'number' ? file.size : 0,\n type: typeof file.type === 'string' ? file.type : '',\n name: typeof file.name === 'string' ? file.name : '',\n }\n}\n\nasync function pickImageFilesByOpenPicker(count: number) {\n const picker = (globalThis as {\n showOpenFilePicker?: (options: {\n multiple?: boolean\n types?: Array<{\n description?: string\n accept?: Record<string, string[]>\n }>\n }) => Promise<Array<{ getFile?: () => Promise<any> }>>\n }).showOpenFilePicker\n if (typeof picker !== 'function') {\n return null\n }\n const handles = await picker({\n multiple: count > 1,\n types: [{\n description: 'Images',\n accept: {\n 'image/*': ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.svg', '.avif'],\n },\n }],\n })\n const files: any[] = []\n for (const handle of handles ?? []) {\n const file = await handle?.getFile?.()\n if (file) {\n files.push(file)\n }\n if (files.length >= count) {\n break\n }\n }\n return files\n}\n\nasync function pickImageFilesByInput(count: number) {\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\n return null\n }\n const input = document.createElement('input') as HTMLInputElement\n if (!input || typeof input !== 'object') {\n return null\n }\n input.setAttribute('type', 'file')\n input.setAttribute('accept', 'image/*')\n if (count > 1) {\n input.setAttribute('multiple', 'true')\n }\n input.setAttribute('style', 'position: fixed; left: -9999px; top: -9999px; opacity: 0;')\n if (document.body) {\n document.body.append(input)\n }\n try {\n const files = await new Promise<any[]>((resolve, reject) => {\n const onChange = () => {\n const selected = input.files ? Array.from(input.files) : []\n if (selected.length) {\n resolve(selected.slice(0, count))\n return\n }\n reject(new Error('no file selected'))\n }\n input.addEventListener('change', onChange, { once: true })\n if (typeof input.click === 'function') {\n input.click()\n return\n }\n reject(new Error('file input click is unavailable'))\n })\n return files\n }\n finally {\n if (input.parentNode) {\n input.parentNode.removeChild(input)\n }\n }\n}\n\nexport async function pickChooseImageFiles(count: number) {\n const viaPicker = await pickImageFilesByOpenPicker(count)\n if (Array.isArray(viaPicker)) {\n return viaPicker\n }\n const viaInput = await pickImageFilesByInput(count)\n if (Array.isArray(viaInput)) {\n return viaInput\n }\n throw new TypeError('Image picker is unavailable in current environment.')\n}\n\nexport function normalizeChooseMediaCount(count: number | undefined) {\n if (typeof count !== 'number' || Number.isNaN(count)) {\n return 1\n }\n return Math.max(1, Math.floor(count))\n}\n\nexport function normalizeChooseMediaTypes(mediaType: RawChooseMediaType[] | undefined) {\n const normalized = new Set<ChooseMediaType>()\n for (const item of mediaType ?? []) {\n if (item === 'image') {\n normalized.add('image')\n continue\n }\n if (item === 'video') {\n normalized.add('video')\n continue\n }\n if (item === 'mix') {\n normalized.add('image')\n normalized.add('video')\n }\n }\n if (normalized.size === 0) {\n normalized.add('image')\n normalized.add('video')\n }\n return normalized\n}\n\nfunction buildChooseMediaOpenPickerAccept(types: Set<ChooseMediaType>) {\n const accept: Record<string, string[]> = {}\n if (types.has('image')) {\n accept['image/*'] = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.svg', '.avif']\n }\n if (types.has('video')) {\n accept['video/*'] = ['.mp4', '.mov', '.m4v', '.webm']\n }\n return accept\n}\n\nfunction buildChooseMediaInputAccept(types: Set<ChooseMediaType>) {\n if (types.size === 2) {\n return 'image/*,video/*'\n }\n return types.has('video') ? 'video/*' : 'image/*'\n}\n\nexport function inferChooseMediaFileType(file: { type?: string, name?: string }): ChooseMediaType {\n const mimeType = typeof file.type === 'string' ? file.type.toLowerCase() : ''\n if (mimeType.startsWith('video/')) {\n return 'video'\n }\n if (mimeType.startsWith('image/')) {\n return 'image'\n }\n const fileName = typeof file.name === 'string' ? file.name.toLowerCase() : ''\n if (/\\.(?:mp4|mov|m4v|webm)$/i.test(fileName)) {\n return 'video'\n }\n return 'image'\n}\n\nexport function normalizeChooseMediaFile(file: {\n size?: number\n type?: string\n name?: string\n}) {\n const fileType = inferChooseMediaFileType(file)\n return {\n tempFilePath: createTempFilePath(file),\n size: typeof file.size === 'number' ? file.size : 0,\n fileType,\n width: 0,\n height: 0,\n duration: 0,\n }\n}\n\nasync function pickMediaFilesByOpenPicker(count: number, types: Set<ChooseMediaType>) {\n const picker = (globalThis as {\n showOpenFilePicker?: (options: {\n multiple?: boolean\n types?: Array<{\n description?: string\n accept?: Record<string, string[]>\n }>\n }) => Promise<Array<{ getFile?: () => Promise<any> }>>\n }).showOpenFilePicker\n if (typeof picker !== 'function') {\n return null\n }\n const handles = await picker({\n multiple: count > 1,\n types: [{\n description: 'Media',\n accept: buildChooseMediaOpenPickerAccept(types),\n }],\n })\n const files: any[] = []\n for (const handle of handles ?? []) {\n const file = await handle?.getFile?.()\n if (file) {\n files.push(file)\n }\n if (files.length >= count) {\n break\n }\n }\n return files\n}\n\nasync function pickMediaFilesByInput(count: number, types: Set<ChooseMediaType>) {\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\n return null\n }\n const input = document.createElement('input') as HTMLInputElement\n if (!input || typeof input !== 'object') {\n return null\n }\n input.setAttribute('type', 'file')\n input.setAttribute('accept', buildChooseMediaInputAccept(types))\n if (count > 1) {\n input.setAttribute('multiple', 'true')\n }\n input.setAttribute('style', 'position: fixed; left: -9999px; top: -9999px; opacity: 0;')\n if (document.body) {\n document.body.append(input)\n }\n try {\n const files = await new Promise<any[]>((resolve, reject) => {\n const onChange = () => {\n const selected = input.files ? Array.from(input.files) : []\n if (selected.length) {\n resolve(selected.slice(0, count))\n return\n }\n reject(new Error('no file selected'))\n }\n input.addEventListener('change', onChange, { once: true })\n if (typeof input.click === 'function') {\n input.click()\n return\n }\n reject(new Error('file input click is unavailable'))\n })\n return files\n }\n finally {\n if (input.parentNode) {\n input.parentNode.removeChild(input)\n }\n }\n}\n\nexport async function pickChooseMediaFiles(count: number, types: Set<ChooseMediaType>) {\n const viaPicker = await pickMediaFilesByOpenPicker(count, types)\n if (Array.isArray(viaPicker)) {\n return viaPicker\n }\n const viaInput = await pickMediaFilesByInput(count, types)\n if (Array.isArray(viaInput)) {\n return viaInput\n }\n throw new TypeError('Media picker is unavailable in current environment.')\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mediaProcess.mjs","names":[],"sources":["../../../src/runtime/polyfill/mediaProcess.ts"],"sourcesContent":["import {\n createTempFilePath,\n inferChooseMediaFileType,\n pickChooseMediaFiles,\n} from './mediaPicker'\n\nexport function normalizeCompressImageQuality(quality: number | undefined) {\n if (typeof quality !== 'number' || Number.isNaN(quality)) {\n return 80\n }\n return Math.max(0, Math.min(100, Math.round(quality)))\n}\n\nfunction resolveCompressImageMimeType(src: string) {\n const lower = src.toLowerCase()\n if (lower.includes('.jpg') || lower.includes('.jpeg')) {\n return 'image/jpeg'\n }\n if (lower.includes('.webp')) {\n return 'image/webp'\n }\n return 'image/png'\n}\n\nexport async function compressImageByCanvas(src: string, quality: number) {\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\n return src\n }\n const ImageCtor = (globalThis as { Image?: typeof Image }).Image\n if (typeof ImageCtor !== 'function') {\n return src\n }\n const canvas = document.createElement('canvas') as HTMLCanvasElement\n if (!canvas || typeof canvas.getContext !== 'function') {\n return src\n }\n return new Promise<string>((resolve, reject) => {\n const image = new ImageCtor()\n image.onload = () => {\n try {\n const width = Number((image as { naturalWidth?: number }).naturalWidth ?? image.width ?? 0)\n const height = Number((image as { naturalHeight?: number }).naturalHeight ?? image.height ?? 0)\n const context = canvas.getContext('2d')\n if (!context || typeof context.drawImage !== 'function' || width <= 0 || height <= 0) {\n resolve(src)\n return\n }\n canvas.width = width\n canvas.height = height\n context.drawImage(image, 0, 0, width, height)\n if (typeof canvas.toDataURL !== 'function') {\n resolve(src)\n return\n }\n const dataUrl = canvas.toDataURL(resolveCompressImageMimeType(src), quality / 100)\n resolve(dataUrl || src)\n }\n catch (error) {\n reject(error)\n }\n }\n image.onerror = () => {\n reject(new Error('image load error'))\n }\n image.src = src\n })\n}\n\nexport function normalizeChooseVideoFile(file: {\n size?: number\n type?: string\n name?: string\n}) {\n if (inferChooseMediaFileType(file) !== 'video') {\n return null\n }\n return {\n tempFilePath: createTempFilePath(file),\n duration: 0,\n size: typeof file.size === 'number' ? file.size : 0,\n height: 0,\n width: 0,\n }\n}\n\nexport async function pickChooseVideoFile() {\n const files = await pickChooseMediaFiles(1, new Set(['video']))\n return files[0] ?? null\n}\n"],"mappings":";;;AAMA,SAAgB,8BAA8B,SAA6B;AACzE,KAAI,OAAO,YAAY,YAAY,OAAO,MAAM,QAAQ,CACtD,QAAO;AAET,QAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,QAAQ,CAAC,CAAC;;AAGxD,SAAS,6BAA6B,KAAa;CACjD,MAAM,QAAQ,IAAI,aAAa;AAC/B,KAAI,MAAM,SAAS,OAAO,IAAI,MAAM,SAAS,QAAQ,CACnD,QAAO;AAET,KAAI,MAAM,SAAS,QAAQ,CACzB,QAAO;AAET,QAAO;;AAGT,eAAsB,sBAAsB,KAAa,SAAiB;AACxE,KAAI,OAAO,aAAa,eAAe,OAAO,SAAS,kBAAkB,WACvE,QAAO;CAET,MAAM,YAAa,WAAwC;AAC3D,KAAI,OAAO,cAAc,WACvB,QAAO;CAET,MAAM,SAAS,SAAS,cAAc,SAAS;AAC/C,KAAI,CAAC,UAAU,OAAO,OAAO,eAAe,WAC1C,QAAO;AAET,QAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,QAAQ,IAAI,WAAW;AAC7B,QAAM,eAAe;AACnB,OAAI;IACF,MAAM,QAAQ,OAAQ,MAAoC,gBAAgB,MAAM,SAAS,EAAE;IAC3F,MAAM,SAAS,OAAQ,MAAqC,iBAAiB,MAAM,UAAU,EAAE;IAC/F,MAAM,UAAU,OAAO,WAAW,KAAK;AACvC,QAAI,CAAC,WAAW,OAAO,QAAQ,cAAc,cAAc,SAAS,KAAK,UAAU,GAAG;AACpF,aAAQ,IAAI;AACZ;;AAEF,WAAO,QAAQ;AACf,WAAO,SAAS;AAChB,YAAQ,UAAU,OAAO,GAAG,GAAG,OAAO,OAAO;AAC7C,QAAI,OAAO,OAAO,cAAc,YAAY;AAC1C,aAAQ,IAAI;AACZ;;AAGF,YADgB,OAAO,UAAU,6BAA6B,IAAI,EAAE,UAAU,IAAI,IAC/D,IAAI;YAElB,OAAO;AACZ,WAAO,MAAM;;;AAGjB,QAAM,gBAAgB;AACpB,0BAAO,IAAI,MAAM,mBAAmB,CAAC;;AAEvC,QAAM,MAAM;GACZ;;AAGJ,SAAgB,yBAAyB,MAItC;AACD,KAAI,yBAAyB,KAAK,KAAK,QACrC,QAAO;AAET,QAAO;EACL,cAAc,mBAAmB,KAAK;EACtC,UAAU;EACV,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;EAClD,QAAQ;EACR,OAAO;EACR;;AAGH,eAAsB,sBAAsB;AAE1C,SADc,MAAM,qBAAqB,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EAClD,MAAM"}
1
+ {"version":3,"file":"mediaProcess.mjs","names":[],"sources":["../../../src/runtime/polyfill/mediaProcess.ts"],"sourcesContent":["import {\n createTempFilePath,\n inferChooseMediaFileType,\n pickChooseMediaFiles,\n} from './mediaPicker'\n\nexport function normalizeCompressImageQuality(quality: number | undefined) {\n if (typeof quality !== 'number' || Number.isNaN(quality)) {\n return 80\n }\n return Math.max(0, Math.min(100, Math.round(quality)))\n}\n\nfunction resolveCompressImageMimeType(src: string) {\n const lower = src.toLowerCase()\n if (lower.includes('.jpg') || lower.includes('.jpeg')) {\n return 'image/jpeg'\n }\n if (lower.includes('.webp')) {\n return 'image/webp'\n }\n return 'image/png'\n}\n\nexport async function compressImageByCanvas(src: string, quality: number) {\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\n return src\n }\n const ImageCtor = (globalThis as { Image?: typeof Image }).Image\n if (typeof ImageCtor !== 'function') {\n return src\n }\n const canvas = document.createElement('canvas') as HTMLCanvasElement\n if (!canvas || typeof canvas.getContext !== 'function') {\n return src\n }\n return new Promise<string>((resolve, reject) => {\n const image = new ImageCtor()\n image.onload = () => {\n try {\n const width = Number((image as { naturalWidth?: number }).naturalWidth ?? image.width ?? 0)\n const height = Number((image as { naturalHeight?: number }).naturalHeight ?? image.height ?? 0)\n const context = canvas.getContext('2d')\n if (!context || typeof context.drawImage !== 'function' || width <= 0 || height <= 0) {\n resolve(src)\n return\n }\n canvas.width = width\n canvas.height = height\n context.drawImage(image, 0, 0, width, height)\n if (typeof canvas.toDataURL !== 'function') {\n resolve(src)\n return\n }\n const dataUrl = canvas.toDataURL(resolveCompressImageMimeType(src), quality / 100)\n resolve(dataUrl || src)\n }\n catch (error) {\n reject(error)\n }\n }\n image.onerror = () => {\n reject(new Error('image load error'))\n }\n image.src = src\n })\n}\n\nexport function normalizeChooseVideoFile(file: {\n size?: number\n type?: string\n name?: string\n}) {\n if (inferChooseMediaFileType(file) !== 'video') {\n return null\n }\n return {\n tempFilePath: createTempFilePath(file),\n duration: 0,\n size: typeof file.size === 'number' ? file.size : 0,\n height: 0,\n width: 0,\n }\n}\n\nexport async function pickChooseVideoFile() {\n const files = await pickChooseMediaFiles(1, new Set(['video']))\n return files[0] ?? null\n}\n"],"mappings":";;;AAMA,SAAgB,8BAA8B,SAA6B;AACzE,KAAI,OAAO,YAAY,YAAY,OAAO,MAAM,QAAQ,CACtD,QAAO;AAET,QAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,QAAQ,CAAC,CAAC;;AAGxD,SAAS,6BAA6B,KAAa;CACjD,MAAM,QAAQ,IAAI,aAAa;AAC/B,KAAI,MAAM,SAAS,OAAO,IAAI,MAAM,SAAS,QAAQ,CACnD,QAAO;AAET,KAAI,MAAM,SAAS,QAAQ,CACzB,QAAO;AAET,QAAO;;AAGT,eAAsB,sBAAsB,KAAa,SAAiB;AACxE,KAAI,OAAO,aAAa,eAAe,OAAO,SAAS,kBAAkB,WACvE,QAAO;CAET,MAAM,YAAa,WAAwC;AAC3D,KAAI,OAAO,cAAc,WACvB,QAAO;CAET,MAAM,SAAS,SAAS,cAAc,SAAS;AAC/C,KAAI,CAAC,UAAU,OAAO,OAAO,eAAe,WAC1C,QAAO;AAET,QAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,QAAQ,IAAI,WAAW;AAC7B,QAAM,eAAe;AACnB,OAAI;IACF,MAAM,QAAQ,OAAQ,MAAoC,gBAAgB,MAAM,SAAS,EAAE;IAC3F,MAAM,SAAS,OAAQ,MAAqC,iBAAiB,MAAM,UAAU,EAAE;IAC/F,MAAM,UAAU,OAAO,WAAW,KAAK;AACvC,QAAI,CAAC,WAAW,OAAO,QAAQ,cAAc,cAAc,SAAS,KAAK,UAAU,GAAG;AACpF,aAAQ,IAAI;AACZ;;AAEF,WAAO,QAAQ;AACf,WAAO,SAAS;AAChB,YAAQ,UAAU,OAAO,GAAG,GAAG,OAAO,OAAO;AAC7C,QAAI,OAAO,OAAO,cAAc,YAAY;AAC1C,aAAQ,IAAI;AACZ;;AAGF,YADgB,OAAO,UAAU,6BAA6B,IAAI,EAAE,UAAU,IAC/D,IAAI,IAAI;YAElB,OAAO;AACZ,WAAO,MAAM;;;AAGjB,QAAM,gBAAgB;AACpB,0BAAO,IAAI,MAAM,mBAAmB,CAAC;;AAEvC,QAAM,MAAM;GACZ;;AAGJ,SAAgB,yBAAyB,MAItC;AACD,KAAI,yBAAyB,KAAK,KAAK,QACrC,QAAO;AAET,QAAO;EACL,cAAc,mBAAmB,KAAK;EACtC,UAAU;EACV,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;EAClD,QAAQ;EACR,OAAO;EACR;;AAGH,eAAsB,sBAAsB;AAE1C,SAAO,MADa,qBAAqB,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EAClD,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"request.mjs","names":[],"sources":["../../../../src/runtime/polyfill/network/request.ts"],"sourcesContent":["import {\n normalizeFilePath,\n resolveUploadFileBlob,\n resolveUploadFileName,\n} from '../files'\n\ninterface RequestParseOptions {\n responseType?: 'text' | 'arraybuffer'\n dataType?: 'json' | 'text'\n}\n\ninterface RequestLikeOptions extends RequestParseOptions {\n url?: string\n method?: string\n header?: Record<string, string>\n data?: unknown\n timeout?: number\n}\n\ninterface DownloadLikeOptions {\n url?: string\n header?: Record<string, string>\n timeout?: number\n}\n\ninterface UploadLikeOptions {\n url?: string\n filePath?: string\n header?: Record<string, string>\n formData?: Record<string, unknown>\n name?: string\n timeout?: number\n}\n\nfunction resolveTimeoutSignal(timeout: number) {\n const controller = typeof AbortController === 'function' ? new AbortController() : undefined\n let timeoutTimer: ReturnType<typeof setTimeout> | undefined\n if (timeout > 0 && controller) {\n timeoutTimer = setTimeout(() => controller.abort(), timeout)\n }\n return {\n signal: controller?.signal,\n clear: () => {\n if (timeoutTimer) {\n clearTimeout(timeoutTimer)\n }\n },\n }\n}\n\nexport function getRuntimeFetch() {\n const runtime = globalThis as Record<string, unknown>\n const maybeFetch = runtime.fetch\n if (typeof maybeFetch === 'function') {\n return maybeFetch as typeof fetch\n }\n return undefined\n}\n\nexport function normalizeRequestMethod(method?: string) {\n return (method || 'GET').toUpperCase()\n}\n\nexport function normalizeRequestHeaders(header?: Record<string, string>) {\n if (!header) {\n return {}\n }\n return { ...header }\n}\n\nexport function buildRequestUrl(url: string, method: string, data: unknown) {\n if (method !== 'GET' || data == null) {\n return url\n }\n if (typeof data === 'string') {\n if (!data) {\n return url\n }\n return `${url}${url.includes('?') ? '&' : '?'}${data}`\n }\n if (typeof URLSearchParams !== 'undefined' && data instanceof URLSearchParams) {\n const query = data.toString()\n if (!query) {\n return url\n }\n return `${url}${url.includes('?') ? '&' : '?'}${query}`\n }\n if (typeof data === 'object') {\n const query = new URLSearchParams()\n for (const [key, value] of Object.entries(data as Record<string, unknown>)) {\n query.append(key, value == null ? '' : String(value))\n }\n const queryText = query.toString()\n if (!queryText) {\n return url\n }\n return `${url}${url.includes('?') ? '&' : '?'}${queryText}`\n }\n return url\n}\n\nexport function buildRequestBody(\n method: string,\n data: unknown,\n headers: Record<string, string>,\n) {\n if (method === 'GET' || data == null) {\n return undefined\n }\n if (typeof data === 'string') {\n return data\n }\n if (typeof URLSearchParams !== 'undefined' && data instanceof URLSearchParams) {\n return data\n }\n if (typeof FormData !== 'undefined' && data instanceof FormData) {\n return data\n }\n const contentTypeKey = Object.keys(headers).find(key => key.toLowerCase() === 'content-type')\n const contentType = contentTypeKey ? headers[contentTypeKey] : ''\n if (contentType && !contentType.includes('application/json')) {\n return String(data)\n }\n if (!contentTypeKey) {\n headers['content-type'] = 'application/json'\n }\n return JSON.stringify(data)\n}\n\nexport async function parseRequestResponseData(\n response: Response,\n options?: RequestParseOptions,\n) {\n if (options?.responseType === 'arraybuffer') {\n return response.arrayBuffer()\n }\n const contentType = response.headers.get('content-type') ?? ''\n if (options?.dataType === 'text') {\n return response.text()\n }\n if (options?.dataType === 'json' || contentType.includes('application/json')) {\n return response.json()\n }\n return response.text()\n}\n\nexport function createBlobObjectUrl(blob: Blob) {\n const runtimeUrl = (globalThis as {\n URL?: {\n createObjectURL?: (value: Blob) => string\n }\n }).URL\n if (runtimeUrl && typeof runtimeUrl.createObjectURL === 'function') {\n return runtimeUrl.createObjectURL(blob)\n }\n return ''\n}\n\nexport function collectResponseHeaders(response: {\n headers: {\n forEach: (callback: (value: string, key: string) => void) => void\n }\n}) {\n const headers: Record<string, string> = {}\n response.headers.forEach((value, key) => {\n headers[key] = value\n })\n return headers\n}\n\nexport function stripUploadContentType(headers: Record<string, string>) {\n const normalized = { ...headers }\n for (const key of Object.keys(normalized)) {\n if (key.toLowerCase() === 'content-type') {\n delete normalized[key]\n }\n }\n return normalized\n}\n\nexport async function performRequestByFetch(options?: RequestLikeOptions) {\n const url = options?.url?.trim() ?? ''\n if (!url) {\n throw new TypeError('invalid url')\n }\n const runtimeFetch = getRuntimeFetch()\n if (!runtimeFetch) {\n throw new TypeError('fetch is unavailable')\n }\n const method = normalizeRequestMethod(options?.method)\n const headers = normalizeRequestHeaders(options?.header)\n const requestUrl = buildRequestUrl(url, method, options?.data)\n const body = buildRequestBody(method, options?.data, headers)\n const timeout = typeof options?.timeout === 'number' && options.timeout > 0 ? options.timeout : 0\n const timeoutControl = resolveTimeoutSignal(timeout)\n\n try {\n const response = await runtimeFetch(requestUrl, {\n method,\n headers,\n body,\n signal: timeoutControl.signal,\n })\n const responseData = await parseRequestResponseData(response, options)\n return {\n data: responseData,\n statusCode: response.status,\n header: collectResponseHeaders(response),\n }\n }\n finally {\n timeoutControl.clear()\n }\n}\n\nexport async function performDownloadByFetch(options?: DownloadLikeOptions) {\n const url = options?.url?.trim() ?? ''\n if (!url) {\n throw new TypeError('invalid url')\n }\n const runtimeFetch = getRuntimeFetch()\n if (!runtimeFetch) {\n throw new TypeError('fetch is unavailable')\n }\n const headers = normalizeRequestHeaders(options?.header)\n const timeout = typeof options?.timeout === 'number' && options.timeout > 0 ? options.timeout : 0\n const timeoutControl = resolveTimeoutSignal(timeout)\n\n try {\n const response = await runtimeFetch(url, {\n method: 'GET',\n headers,\n signal: timeoutControl.signal,\n })\n const blob = await response.blob()\n return {\n tempFilePath: createBlobObjectUrl(blob) || url,\n statusCode: response.status,\n }\n }\n finally {\n timeoutControl.clear()\n }\n}\n\nexport async function performUploadByFetch(options?: UploadLikeOptions) {\n const url = options?.url?.trim() ?? ''\n if (!url) {\n throw new TypeError('invalid url')\n }\n const filePath = normalizeFilePath(options?.filePath)\n if (!filePath) {\n throw new TypeError('invalid filePath')\n }\n const runtimeFetch = getRuntimeFetch()\n if (!runtimeFetch) {\n throw new TypeError('fetch is unavailable')\n }\n const FormDataCtor = (globalThis as { FormData?: typeof FormData }).FormData\n if (typeof FormDataCtor !== 'function') {\n throw new TypeError('FormData is unavailable')\n }\n\n const headers = stripUploadContentType(normalizeRequestHeaders(options?.header))\n const formData = new FormDataCtor()\n for (const [key, value] of Object.entries(options?.formData ?? {})) {\n formData.append(key, value == null ? '' : String(value))\n }\n const blob = await resolveUploadFileBlob(filePath, runtimeFetch)\n formData.append(options?.name?.trim() || 'file', blob, resolveUploadFileName(filePath))\n\n const timeout = typeof options?.timeout === 'number' && options.timeout > 0 ? options.timeout : 0\n const timeoutControl = resolveTimeoutSignal(timeout)\n\n try {\n const response = await runtimeFetch(url, {\n method: 'POST',\n headers,\n body: formData,\n signal: timeoutControl.signal,\n })\n const data = await response.text()\n return {\n data,\n statusCode: response.status,\n header: collectResponseHeaders(response),\n }\n }\n finally {\n timeoutControl.clear()\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"request.mjs","names":["runtime"],"sources":["../../../../src/runtime/polyfill/network/request.ts"],"sourcesContent":["import {\n normalizeFilePath,\n resolveUploadFileBlob,\n resolveUploadFileName,\n} from '../files'\n\ninterface RequestParseOptions {\n responseType?: 'text' | 'arraybuffer'\n dataType?: 'json' | 'text'\n}\n\ninterface RequestLikeOptions extends RequestParseOptions {\n url?: string\n method?: string\n header?: Record<string, string>\n data?: unknown\n timeout?: number\n}\n\ninterface DownloadLikeOptions {\n url?: string\n header?: Record<string, string>\n timeout?: number\n}\n\ninterface UploadLikeOptions {\n url?: string\n filePath?: string\n header?: Record<string, string>\n formData?: Record<string, unknown>\n name?: string\n timeout?: number\n}\n\nfunction resolveTimeoutSignal(timeout: number) {\n const controller = typeof AbortController === 'function' ? new AbortController() : undefined\n let timeoutTimer: ReturnType<typeof setTimeout> | undefined\n if (timeout > 0 && controller) {\n timeoutTimer = setTimeout(() => controller.abort(), timeout)\n }\n return {\n signal: controller?.signal,\n clear: () => {\n if (timeoutTimer) {\n clearTimeout(timeoutTimer)\n }\n },\n }\n}\n\nexport function getRuntimeFetch() {\n const runtime = globalThis as Record<string, unknown>\n const maybeFetch = runtime.fetch\n if (typeof maybeFetch === 'function') {\n return maybeFetch as typeof fetch\n }\n return undefined\n}\n\nexport function normalizeRequestMethod(method?: string) {\n return (method || 'GET').toUpperCase()\n}\n\nexport function normalizeRequestHeaders(header?: Record<string, string>) {\n if (!header) {\n return {}\n }\n return { ...header }\n}\n\nexport function buildRequestUrl(url: string, method: string, data: unknown) {\n if (method !== 'GET' || data == null) {\n return url\n }\n if (typeof data === 'string') {\n if (!data) {\n return url\n }\n return `${url}${url.includes('?') ? '&' : '?'}${data}`\n }\n if (typeof URLSearchParams !== 'undefined' && data instanceof URLSearchParams) {\n const query = data.toString()\n if (!query) {\n return url\n }\n return `${url}${url.includes('?') ? '&' : '?'}${query}`\n }\n if (typeof data === 'object') {\n const query = new URLSearchParams()\n for (const [key, value] of Object.entries(data as Record<string, unknown>)) {\n query.append(key, value == null ? '' : String(value))\n }\n const queryText = query.toString()\n if (!queryText) {\n return url\n }\n return `${url}${url.includes('?') ? '&' : '?'}${queryText}`\n }\n return url\n}\n\nexport function buildRequestBody(\n method: string,\n data: unknown,\n headers: Record<string, string>,\n) {\n if (method === 'GET' || data == null) {\n return undefined\n }\n if (typeof data === 'string') {\n return data\n }\n if (typeof URLSearchParams !== 'undefined' && data instanceof URLSearchParams) {\n return data\n }\n if (typeof FormData !== 'undefined' && data instanceof FormData) {\n return data\n }\n const contentTypeKey = Object.keys(headers).find(key => key.toLowerCase() === 'content-type')\n const contentType = contentTypeKey ? headers[contentTypeKey] : ''\n if (contentType && !contentType.includes('application/json')) {\n return String(data)\n }\n if (!contentTypeKey) {\n headers['content-type'] = 'application/json'\n }\n return JSON.stringify(data)\n}\n\nexport async function parseRequestResponseData(\n response: Response,\n options?: RequestParseOptions,\n) {\n if (options?.responseType === 'arraybuffer') {\n return response.arrayBuffer()\n }\n const contentType = response.headers.get('content-type') ?? ''\n if (options?.dataType === 'text') {\n return response.text()\n }\n if (options?.dataType === 'json' || contentType.includes('application/json')) {\n return response.json()\n }\n return response.text()\n}\n\nexport function createBlobObjectUrl(blob: Blob) {\n const runtimeUrl = (globalThis as {\n URL?: {\n createObjectURL?: (value: Blob) => string\n }\n }).URL\n if (runtimeUrl && typeof runtimeUrl.createObjectURL === 'function') {\n return runtimeUrl.createObjectURL(blob)\n }\n return ''\n}\n\nexport function collectResponseHeaders(response: {\n headers: {\n forEach: (callback: (value: string, key: string) => void) => void\n }\n}) {\n const headers: Record<string, string> = {}\n response.headers.forEach((value, key) => {\n headers[key] = value\n })\n return headers\n}\n\nexport function stripUploadContentType(headers: Record<string, string>) {\n const normalized = { ...headers }\n for (const key of Object.keys(normalized)) {\n if (key.toLowerCase() === 'content-type') {\n delete normalized[key]\n }\n }\n return normalized\n}\n\nexport async function performRequestByFetch(options?: RequestLikeOptions) {\n const url = options?.url?.trim() ?? ''\n if (!url) {\n throw new TypeError('invalid url')\n }\n const runtimeFetch = getRuntimeFetch()\n if (!runtimeFetch) {\n throw new TypeError('fetch is unavailable')\n }\n const method = normalizeRequestMethod(options?.method)\n const headers = normalizeRequestHeaders(options?.header)\n const requestUrl = buildRequestUrl(url, method, options?.data)\n const body = buildRequestBody(method, options?.data, headers)\n const timeout = typeof options?.timeout === 'number' && options.timeout > 0 ? options.timeout : 0\n const timeoutControl = resolveTimeoutSignal(timeout)\n\n try {\n const response = await runtimeFetch(requestUrl, {\n method,\n headers,\n body,\n signal: timeoutControl.signal,\n })\n const responseData = await parseRequestResponseData(response, options)\n return {\n data: responseData,\n statusCode: response.status,\n header: collectResponseHeaders(response),\n }\n }\n finally {\n timeoutControl.clear()\n }\n}\n\nexport async function performDownloadByFetch(options?: DownloadLikeOptions) {\n const url = options?.url?.trim() ?? ''\n if (!url) {\n throw new TypeError('invalid url')\n }\n const runtimeFetch = getRuntimeFetch()\n if (!runtimeFetch) {\n throw new TypeError('fetch is unavailable')\n }\n const headers = normalizeRequestHeaders(options?.header)\n const timeout = typeof options?.timeout === 'number' && options.timeout > 0 ? options.timeout : 0\n const timeoutControl = resolveTimeoutSignal(timeout)\n\n try {\n const response = await runtimeFetch(url, {\n method: 'GET',\n headers,\n signal: timeoutControl.signal,\n })\n const blob = await response.blob()\n return {\n tempFilePath: createBlobObjectUrl(blob) || url,\n statusCode: response.status,\n }\n }\n finally {\n timeoutControl.clear()\n }\n}\n\nexport async function performUploadByFetch(options?: UploadLikeOptions) {\n const url = options?.url?.trim() ?? ''\n if (!url) {\n throw new TypeError('invalid url')\n }\n const filePath = normalizeFilePath(options?.filePath)\n if (!filePath) {\n throw new TypeError('invalid filePath')\n }\n const runtimeFetch = getRuntimeFetch()\n if (!runtimeFetch) {\n throw new TypeError('fetch is unavailable')\n }\n const FormDataCtor = (globalThis as { FormData?: typeof FormData }).FormData\n if (typeof FormDataCtor !== 'function') {\n throw new TypeError('FormData is unavailable')\n }\n\n const headers = stripUploadContentType(normalizeRequestHeaders(options?.header))\n const formData = new FormDataCtor()\n for (const [key, value] of Object.entries(options?.formData ?? {})) {\n formData.append(key, value == null ? '' : String(value))\n }\n const blob = await resolveUploadFileBlob(filePath, runtimeFetch)\n formData.append(options?.name?.trim() || 'file', blob, resolveUploadFileName(filePath))\n\n const timeout = typeof options?.timeout === 'number' && options.timeout > 0 ? options.timeout : 0\n const timeoutControl = resolveTimeoutSignal(timeout)\n\n try {\n const response = await runtimeFetch(url, {\n method: 'POST',\n headers,\n body: formData,\n signal: timeoutControl.signal,\n })\n const data = await response.text()\n return {\n data,\n statusCode: response.status,\n header: collectResponseHeaders(response),\n }\n }\n finally {\n timeoutControl.clear()\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.mjs","names":[],"sources":["../../../../src/runtime/polyfill/network/status.ts"],"sourcesContent":["type NetworkType = 'wifi' | '2g' | '3g' | '4g' | '5g' | 'unknown' | 'none'\n\ninterface NetworkStatusSnapshot {\n isConnected: boolean\n networkType: NetworkType\n}\n\ninterface NavigatorConnection {\n type?: string\n effectiveType?: string\n addEventListener?: (type: string, listener: () => void) => void\n}\n\nexport function getNavigatorConnection() {\n const runtimeNavigator = (typeof navigator !== 'undefined' ? navigator : undefined) as (Navigator & {\n connection?: NavigatorConnection\n mozConnection?: NavigatorConnection\n webkitConnection?: NavigatorConnection\n }) | undefined\n return runtimeNavigator?.connection ?? runtimeNavigator?.mozConnection ?? runtimeNavigator?.webkitConnection\n}\n\nfunction resolveNetworkType(connection: NavigatorConnection | undefined, isConnected: boolean): NetworkType {\n if (!isConnected) {\n return 'none'\n }\n const type = typeof connection?.type === 'string' ? connection.type.toLowerCase() : ''\n const effectiveType = typeof connection?.effectiveType === 'string'\n ? connection.effectiveType.toLowerCase()\n : ''\n if (type.includes('wifi') || type.includes('ethernet')) {\n return 'wifi'\n }\n if (effectiveType.includes('5g')) {\n return '5g'\n }\n if (effectiveType.includes('4g')) {\n return '4g'\n }\n if (effectiveType.includes('3g')) {\n return '3g'\n }\n if (effectiveType.includes('2g') || effectiveType.includes('slow-2g')) {\n return '2g'\n }\n if (type.includes('cellular')) {\n return 'unknown'\n }\n return 'unknown'\n}\n\nexport function readNetworkStatusSnapshot(): NetworkStatusSnapshot {\n const runtimeNavigator = typeof navigator !== 'undefined' ? navigator : undefined\n const isConnected = typeof runtimeNavigator?.onLine === 'boolean' ? runtimeNavigator.onLine : true\n const connection = getNavigatorConnection()\n return {\n isConnected,\n networkType: resolveNetworkType(connection, isConnected),\n }\n}\n\nconst networkStatusCallbacks = new Set<(result: NetworkStatusSnapshot) => void>()\nlet networkStatusBridgeBound = false\n\nfunction notifyNetworkStatusChange() {\n if (networkStatusCallbacks.size === 0) {\n return\n }\n const status = readNetworkStatusSnapshot()\n for (const callback of networkStatusCallbacks) {\n callback(status)\n }\n}\n\nfunction bindNetworkStatusBridge() {\n if (networkStatusBridgeBound) {\n return\n }\n networkStatusBridgeBound = true\n const runtimeTarget = globalThis as {\n addEventListener?: (type: string, listener: () => void) => void\n }\n runtimeTarget.addEventListener?.('online', notifyNetworkStatusChange)\n runtimeTarget.addEventListener?.('offline', notifyNetworkStatusChange)\n const connection = getNavigatorConnection()\n connection?.addEventListener?.('change', notifyNetworkStatusChange)\n}\n\nexport function addNetworkStatusCallback(callback: (result: NetworkStatusSnapshot) => void) {\n bindNetworkStatusBridge()\n networkStatusCallbacks.add(callback)\n}\n\nexport function removeNetworkStatusCallback(callback?: (result: NetworkStatusSnapshot) => void) {\n if (typeof callback !== 'function') {\n networkStatusCallbacks.clear()\n return\n }\n networkStatusCallbacks.delete(callback)\n}\n"],"mappings":";AAaA,SAAgB,yBAAyB;CACvC,MAAM,mBAAoB,OAAO,cAAc,cAAc,YAAY;AAKzE,QAAO,kBAAkB,cAAc,kBAAkB,iBAAiB,kBAAkB;;AAG9F,SAAS,mBAAmB,YAA6C,aAAmC;AAC1G,KAAI,CAAC,YACH,QAAO;CAET,MAAM,OAAO,OAAO,YAAY,SAAS,WAAW,WAAW,KAAK,aAAa,GAAG;CACpF,MAAM,gBAAgB,OAAO,YAAY,kBAAkB,WACvD,WAAW,cAAc,aAAa,GACtC;AACJ,KAAI,KAAK,SAAS,OAAO,IAAI,KAAK,SAAS,WAAW,CACpD,QAAO;AAET,KAAI,cAAc,SAAS,KAAK,CAC9B,QAAO;AAET,KAAI,cAAc,SAAS,KAAK,CAC9B,QAAO;AAET,KAAI,cAAc,SAAS,KAAK,CAC9B,QAAO;AAET,KAAI,cAAc,SAAS,KAAK,IAAI,cAAc,SAAS,UAAU,CACnE,QAAO;AAET,KAAI,KAAK,SAAS,WAAW,CAC3B,QAAO;AAET,QAAO;;AAGT,SAAgB,4BAAmD;CACjE,MAAM,mBAAmB,OAAO,cAAc,cAAc,YAAY;CACxE,MAAM,cAAc,OAAO,kBAAkB,WAAW,YAAY,iBAAiB,SAAS;AAE9F,QAAO;EACL;EACA,aAAa,mBAHI,wBAAwB,EAGG,YAAY;EACzD;;AAGH,MAAM,yCAAyB,IAAI,KAA8C;AACjF,IAAI,2BAA2B;AAE/B,SAAS,4BAA4B;AACnC,KAAI,uBAAuB,SAAS,EAClC;CAEF,MAAM,SAAS,2BAA2B;AAC1C,MAAK,MAAM,YAAY,uBACrB,UAAS,OAAO;;AAIpB,SAAS,0BAA0B;AACjC,KAAI,yBACF;AAEF,4BAA2B;CAC3B,MAAM,gBAAgB;AAGtB,eAAc,mBAAmB,UAAU,0BAA0B;AACrE,eAAc,mBAAmB,WAAW,0BAA0B;AAEtE,CADmB,wBAAwB,EAC/B,mBAAmB,UAAU,0BAA0B;;AAGrE,SAAgB,yBAAyB,UAAmD;AAC1F,0BAAyB;AACzB,wBAAuB,IAAI,SAAS;;AAGtC,SAAgB,4BAA4B,UAAoD;AAC9F,KAAI,OAAO,aAAa,YAAY;AAClC,yBAAuB,OAAO;AAC9B;;AAEF,wBAAuB,OAAO,SAAS"}
1
+ {"version":3,"file":"status.mjs","names":[],"sources":["../../../../src/runtime/polyfill/network/status.ts"],"sourcesContent":["type NetworkType = 'wifi' | '2g' | '3g' | '4g' | '5g' | 'unknown' | 'none'\n\ninterface NetworkStatusSnapshot {\n isConnected: boolean\n networkType: NetworkType\n}\n\ninterface NavigatorConnection {\n type?: string\n effectiveType?: string\n addEventListener?: (type: string, listener: () => void) => void\n}\n\nexport function getNavigatorConnection() {\n const runtimeNavigator = (typeof navigator !== 'undefined' ? navigator : undefined) as (Navigator & {\n connection?: NavigatorConnection\n mozConnection?: NavigatorConnection\n webkitConnection?: NavigatorConnection\n }) | undefined\n return runtimeNavigator?.connection ?? runtimeNavigator?.mozConnection ?? runtimeNavigator?.webkitConnection\n}\n\nfunction resolveNetworkType(connection: NavigatorConnection | undefined, isConnected: boolean): NetworkType {\n if (!isConnected) {\n return 'none'\n }\n const type = typeof connection?.type === 'string' ? connection.type.toLowerCase() : ''\n const effectiveType = typeof connection?.effectiveType === 'string'\n ? connection.effectiveType.toLowerCase()\n : ''\n if (type.includes('wifi') || type.includes('ethernet')) {\n return 'wifi'\n }\n if (effectiveType.includes('5g')) {\n return '5g'\n }\n if (effectiveType.includes('4g')) {\n return '4g'\n }\n if (effectiveType.includes('3g')) {\n return '3g'\n }\n if (effectiveType.includes('2g') || effectiveType.includes('slow-2g')) {\n return '2g'\n }\n if (type.includes('cellular')) {\n return 'unknown'\n }\n return 'unknown'\n}\n\nexport function readNetworkStatusSnapshot(): NetworkStatusSnapshot {\n const runtimeNavigator = typeof navigator !== 'undefined' ? navigator : undefined\n const isConnected = typeof runtimeNavigator?.onLine === 'boolean' ? runtimeNavigator.onLine : true\n const connection = getNavigatorConnection()\n return {\n isConnected,\n networkType: resolveNetworkType(connection, isConnected),\n }\n}\n\nconst networkStatusCallbacks = new Set<(result: NetworkStatusSnapshot) => void>()\nlet networkStatusBridgeBound = false\n\nfunction notifyNetworkStatusChange() {\n if (networkStatusCallbacks.size === 0) {\n return\n }\n const status = readNetworkStatusSnapshot()\n for (const callback of networkStatusCallbacks) {\n callback(status)\n }\n}\n\nfunction bindNetworkStatusBridge() {\n if (networkStatusBridgeBound) {\n return\n }\n networkStatusBridgeBound = true\n const runtimeTarget = globalThis as {\n addEventListener?: (type: string, listener: () => void) => void\n }\n runtimeTarget.addEventListener?.('online', notifyNetworkStatusChange)\n runtimeTarget.addEventListener?.('offline', notifyNetworkStatusChange)\n const connection = getNavigatorConnection()\n connection?.addEventListener?.('change', notifyNetworkStatusChange)\n}\n\nexport function addNetworkStatusCallback(callback: (result: NetworkStatusSnapshot) => void) {\n bindNetworkStatusBridge()\n networkStatusCallbacks.add(callback)\n}\n\nexport function removeNetworkStatusCallback(callback?: (result: NetworkStatusSnapshot) => void) {\n if (typeof callback !== 'function') {\n networkStatusCallbacks.clear()\n return\n }\n networkStatusCallbacks.delete(callback)\n}\n"],"mappings":";AAaA,SAAgB,yBAAyB;CACvC,MAAM,mBAAoB,OAAO,cAAc,cAAc,YAAY;AAKzE,QAAO,kBAAkB,cAAc,kBAAkB,iBAAiB,kBAAkB;;AAG9F,SAAS,mBAAmB,YAA6C,aAAmC;AAC1G,KAAI,CAAC,YACH,QAAO;CAET,MAAM,OAAO,OAAO,YAAY,SAAS,WAAW,WAAW,KAAK,aAAa,GAAG;CACpF,MAAM,gBAAgB,OAAO,YAAY,kBAAkB,WACvD,WAAW,cAAc,aAAa,GACtC;AACJ,KAAI,KAAK,SAAS,OAAO,IAAI,KAAK,SAAS,WAAW,CACpD,QAAO;AAET,KAAI,cAAc,SAAS,KAAK,CAC9B,QAAO;AAET,KAAI,cAAc,SAAS,KAAK,CAC9B,QAAO;AAET,KAAI,cAAc,SAAS,KAAK,CAC9B,QAAO;AAET,KAAI,cAAc,SAAS,KAAK,IAAI,cAAc,SAAS,UAAU,CACnE,QAAO;AAET,KAAI,KAAK,SAAS,WAAW,CAC3B,QAAO;AAET,QAAO;;AAGT,SAAgB,4BAAmD;CACjE,MAAM,mBAAmB,OAAO,cAAc,cAAc,YAAY;CACxE,MAAM,cAAc,OAAO,kBAAkB,WAAW,YAAY,iBAAiB,SAAS;AAE9F,QAAO;EACL;EACA,aAAa,mBAHI,wBAGyB,EAAE,YAAY;EACzD;;AAGH,MAAM,yCAAyB,IAAI,KAA8C;AACjF,IAAI,2BAA2B;AAE/B,SAAS,4BAA4B;AACnC,KAAI,uBAAuB,SAAS,EAClC;CAEF,MAAM,SAAS,2BAA2B;AAC1C,MAAK,MAAM,YAAY,uBACrB,UAAS,OAAO;;AAIpB,SAAS,0BAA0B;AACjC,KAAI,yBACF;AAEF,4BAA2B;CAC3B,MAAM,gBAAgB;AAGtB,eAAc,mBAAmB,UAAU,0BAA0B;AACrE,eAAc,mBAAmB,WAAW,0BAA0B;AAEtE,CADmB,wBACT,EAAE,mBAAmB,UAAU,0BAA0B;;AAGrE,SAAgB,yBAAyB,UAAmD;AAC1F,0BAAyB;AACzB,wBAAuB,IAAI,SAAS;;AAGtC,SAAgB,4BAA4B,UAAoD;AAC9F,KAAI,OAAO,aAAa,YAAY;AAClC,yBAAuB,OAAO;AAC9B;;AAEF,wBAAuB,OAAO,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"platformRuntime.mjs","names":[],"sources":["../../../src/runtime/polyfill/platformRuntime.ts"],"sourcesContent":["import {\n WEAPP_VITE_WEB_ANALYTICS_EVENTS_KEY,\n WEAPP_VITE_WEB_EXT_CONFIG_KEY,\n WEAPP_VITE_WEB_UPDATE_MANAGER_KEY,\n} from '@weapp-core/constants'\n\ninterface UpdatePresetSnapshot {\n hasUpdate: boolean\n ready: boolean\n failed: boolean\n}\n\ninterface RuntimeConsoleLike {\n debug?: (...args: unknown[]) => void\n info?: (...args: unknown[]) => void\n log?: (...args: unknown[]) => void\n warn?: (...args: unknown[]) => void\n}\n\nfunction normalizeSubPackageName(value: unknown) {\n if (typeof value !== 'string') {\n return ''\n }\n return value.trim()\n}\n\nexport function resolveSubPackageName(options?: { name?: unknown, root?: unknown }) {\n return normalizeSubPackageName(options?.name) || normalizeSubPackageName(options?.root)\n}\n\nfunction normalizeUpdateManagerPreset(value: unknown): UpdatePresetSnapshot {\n if (typeof value === 'boolean') {\n return {\n hasUpdate: value,\n ready: value,\n failed: false,\n }\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase()\n if (!normalized || normalized === 'none' || normalized === 'false') {\n return {\n hasUpdate: false,\n ready: false,\n failed: false,\n }\n }\n if (normalized === 'fail' || normalized === 'failed' || normalized === 'error') {\n return {\n hasUpdate: true,\n ready: false,\n failed: true,\n }\n }\n return {\n hasUpdate: true,\n ready: true,\n failed: false,\n }\n }\n if (value && typeof value === 'object') {\n const payload = value as {\n hasUpdate?: unknown\n ready?: unknown\n updateReady?: unknown\n failed?: unknown\n fail?: unknown\n }\n const failed = Boolean(payload.failed ?? payload.fail)\n const ready = failed ? false : Boolean(payload.ready ?? payload.updateReady)\n const hasUpdate = payload.hasUpdate == null ? (ready || failed) : Boolean(payload.hasUpdate)\n return {\n hasUpdate,\n ready: hasUpdate && ready,\n failed: hasUpdate && failed,\n }\n }\n return {\n hasUpdate: false,\n ready: false,\n failed: false,\n }\n}\n\nexport function resolveUpdateManagerPreset() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_UPDATE_MANAGER_KEY]\n if (typeof preset === 'function') {\n return normalizeUpdateManagerPreset((preset as () => unknown)())\n }\n return normalizeUpdateManagerPreset(preset)\n}\n\nexport function readRuntimeConsole() {\n const runtimeGlobal = globalThis as { console?: Console }\n return runtimeGlobal.console\n}\n\nexport function readExtConfigValue() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const value = runtimeGlobal[WEAPP_VITE_WEB_EXT_CONFIG_KEY]\n if (value && typeof value === 'object') {\n return { ...(value as Record<string, unknown>) }\n }\n return {}\n}\n\nexport function createUpdateManagerBridge(\n resolveUpdateManagerPreset: () => UpdatePresetSnapshot,\n scheduleMicrotask: (callback: () => void) => void,\n) {\n return {\n applyUpdate() {},\n onCheckForUpdate(callback: ((result: { hasUpdate: boolean }) => void) | undefined) {\n if (typeof callback !== 'function') {\n return\n }\n const preset = resolveUpdateManagerPreset()\n scheduleMicrotask(() => callback({ hasUpdate: preset.hasUpdate }))\n },\n onUpdateReady(callback: (() => void) | undefined) {\n if (typeof callback !== 'function') {\n return\n }\n const preset = resolveUpdateManagerPreset()\n if (!preset.hasUpdate || !preset.ready) {\n return\n }\n scheduleMicrotask(() => callback())\n },\n onUpdateFailed(callback: (() => void) | undefined) {\n if (typeof callback !== 'function') {\n return\n }\n const preset = resolveUpdateManagerPreset()\n if (!preset.hasUpdate || !preset.failed) {\n return\n }\n scheduleMicrotask(() => callback())\n },\n }\n}\n\nexport function createLogManagerBridge(level: 0 | 1, runtimeConsole: RuntimeConsoleLike | undefined) {\n const invokeConsole = (method: 'debug' | 'info' | 'log' | 'warn', args: unknown[]) => {\n const handler = runtimeConsole?.[method]\n if (typeof handler === 'function') {\n handler.apply(runtimeConsole, args)\n }\n }\n return {\n debug(...args: unknown[]) {\n if (level > 0) {\n return\n }\n invokeConsole('debug', args)\n },\n info(...args: unknown[]) {\n invokeConsole('info', args)\n },\n log(...args: unknown[]) {\n invokeConsole('log', args)\n },\n warn(...args: unknown[]) {\n invokeConsole('warn', args)\n },\n }\n}\n\nexport function reportAnalyticsEvent(eventName: string, data?: Record<string, unknown>) {\n const runtimeGlobal = globalThis as {\n [WEAPP_VITE_WEB_ANALYTICS_EVENTS_KEY]?: Array<{\n eventName: string\n data: Record<string, unknown>\n timestamp: number\n }>\n }\n runtimeGlobal[WEAPP_VITE_WEB_ANALYTICS_EVENTS_KEY] ??= []\n runtimeGlobal[WEAPP_VITE_WEB_ANALYTICS_EVENTS_KEY].push({\n eventName: String(eventName ?? ''),\n data: { ...(data ?? {}) },\n timestamp: Date.now(),\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"platformRuntime.mjs","names":["runtimeGlobal"],"sources":["../../../src/runtime/polyfill/platformRuntime.ts"],"sourcesContent":["import {\n WEAPP_VITE_WEB_ANALYTICS_EVENTS_KEY,\n WEAPP_VITE_WEB_EXT_CONFIG_KEY,\n WEAPP_VITE_WEB_UPDATE_MANAGER_KEY,\n} from '@weapp-core/constants'\n\ninterface UpdatePresetSnapshot {\n hasUpdate: boolean\n ready: boolean\n failed: boolean\n}\n\ninterface RuntimeConsoleLike {\n debug?: (...args: unknown[]) => void\n info?: (...args: unknown[]) => void\n log?: (...args: unknown[]) => void\n warn?: (...args: unknown[]) => void\n}\n\nfunction normalizeSubPackageName(value: unknown) {\n if (typeof value !== 'string') {\n return ''\n }\n return value.trim()\n}\n\nexport function resolveSubPackageName(options?: { name?: unknown, root?: unknown }) {\n return normalizeSubPackageName(options?.name) || normalizeSubPackageName(options?.root)\n}\n\nfunction normalizeUpdateManagerPreset(value: unknown): UpdatePresetSnapshot {\n if (typeof value === 'boolean') {\n return {\n hasUpdate: value,\n ready: value,\n failed: false,\n }\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase()\n if (!normalized || normalized === 'none' || normalized === 'false') {\n return {\n hasUpdate: false,\n ready: false,\n failed: false,\n }\n }\n if (normalized === 'fail' || normalized === 'failed' || normalized === 'error') {\n return {\n hasUpdate: true,\n ready: false,\n failed: true,\n }\n }\n return {\n hasUpdate: true,\n ready: true,\n failed: false,\n }\n }\n if (value && typeof value === 'object') {\n const payload = value as {\n hasUpdate?: unknown\n ready?: unknown\n updateReady?: unknown\n failed?: unknown\n fail?: unknown\n }\n const failed = Boolean(payload.failed ?? payload.fail)\n const ready = failed ? false : Boolean(payload.ready ?? payload.updateReady)\n const hasUpdate = payload.hasUpdate == null ? (ready || failed) : Boolean(payload.hasUpdate)\n return {\n hasUpdate,\n ready: hasUpdate && ready,\n failed: hasUpdate && failed,\n }\n }\n return {\n hasUpdate: false,\n ready: false,\n failed: false,\n }\n}\n\nexport function resolveUpdateManagerPreset() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_UPDATE_MANAGER_KEY]\n if (typeof preset === 'function') {\n return normalizeUpdateManagerPreset((preset as () => unknown)())\n }\n return normalizeUpdateManagerPreset(preset)\n}\n\nexport function readRuntimeConsole() {\n const runtimeGlobal = globalThis as { console?: Console }\n return runtimeGlobal.console\n}\n\nexport function readExtConfigValue() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const value = runtimeGlobal[WEAPP_VITE_WEB_EXT_CONFIG_KEY]\n if (value && typeof value === 'object') {\n return { ...(value as Record<string, unknown>) }\n }\n return {}\n}\n\nexport function createUpdateManagerBridge(\n resolveUpdateManagerPreset: () => UpdatePresetSnapshot,\n scheduleMicrotask: (callback: () => void) => void,\n) {\n return {\n applyUpdate() {},\n onCheckForUpdate(callback: ((result: { hasUpdate: boolean }) => void) | undefined) {\n if (typeof callback !== 'function') {\n return\n }\n const preset = resolveUpdateManagerPreset()\n scheduleMicrotask(() => callback({ hasUpdate: preset.hasUpdate }))\n },\n onUpdateReady(callback: (() => void) | undefined) {\n if (typeof callback !== 'function') {\n return\n }\n const preset = resolveUpdateManagerPreset()\n if (!preset.hasUpdate || !preset.ready) {\n return\n }\n scheduleMicrotask(() => callback())\n },\n onUpdateFailed(callback: (() => void) | undefined) {\n if (typeof callback !== 'function') {\n return\n }\n const preset = resolveUpdateManagerPreset()\n if (!preset.hasUpdate || !preset.failed) {\n return\n }\n scheduleMicrotask(() => callback())\n },\n }\n}\n\nexport function createLogManagerBridge(level: 0 | 1, runtimeConsole: RuntimeConsoleLike | undefined) {\n const invokeConsole = (method: 'debug' | 'info' | 'log' | 'warn', args: unknown[]) => {\n const handler = runtimeConsole?.[method]\n if (typeof handler === 'function') {\n handler.apply(runtimeConsole, args)\n }\n }\n return {\n debug(...args: unknown[]) {\n if (level > 0) {\n return\n }\n invokeConsole('debug', args)\n },\n info(...args: unknown[]) {\n invokeConsole('info', args)\n },\n log(...args: unknown[]) {\n invokeConsole('log', args)\n },\n warn(...args: unknown[]) {\n invokeConsole('warn', args)\n },\n }\n}\n\nexport function reportAnalyticsEvent(eventName: string, data?: Record<string, unknown>) {\n const runtimeGlobal = globalThis as {\n [WEAPP_VITE_WEB_ANALYTICS_EVENTS_KEY]?: Array<{\n eventName: string\n data: Record<string, unknown>\n timestamp: number\n }>\n }\n runtimeGlobal[WEAPP_VITE_WEB_ANALYTICS_EVENTS_KEY] ??= []\n runtimeGlobal[WEAPP_VITE_WEB_ANALYTICS_EVENTS_KEY].push({\n eventName: String(eventName ?? ''),\n data: { ...(data ?? {}) },\n timestamp: Date.now(),\n })\n}\n"],"mappings":";;;AAmBA,SAAS,wBAAwB,OAAgB;AAC/C,KAAI,OAAO,UAAU,SACnB,QAAO;AAET,QAAO,MAAM,MAAM;;AAGrB,SAAgB,sBAAsB,SAA8C;AAClF,QAAO,wBAAwB,SAAS,KAAK,IAAI,wBAAwB,SAAS,KAAK;;AAGzF,SAAS,6BAA6B,OAAsC;AAC1E,KAAI,OAAO,UAAU,UACnB,QAAO;EACL,WAAW;EACX,OAAO;EACP,QAAQ;EACT;AAEH,KAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,aAAa,MAAM,MAAM,CAAC,aAAa;AAC7C,MAAI,CAAC,cAAc,eAAe,UAAU,eAAe,QACzD,QAAO;GACL,WAAW;GACX,OAAO;GACP,QAAQ;GACT;AAEH,MAAI,eAAe,UAAU,eAAe,YAAY,eAAe,QACrE,QAAO;GACL,WAAW;GACX,OAAO;GACP,QAAQ;GACT;AAEH,SAAO;GACL,WAAW;GACX,OAAO;GACP,QAAQ;GACT;;AAEH,KAAI,SAAS,OAAO,UAAU,UAAU;EACtC,MAAM,UAAU;EAOhB,MAAM,SAAS,QAAQ,QAAQ,UAAU,QAAQ,KAAK;EACtD,MAAM,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,YAAY;EAC5E,MAAM,YAAY,QAAQ,aAAa,OAAQ,SAAS,SAAU,QAAQ,QAAQ,UAAU;AAC5F,SAAO;GACL;GACA,OAAO,aAAa;GACpB,QAAQ,aAAa;GACtB;;AAEH,QAAO;EACL,WAAW;EACX,OAAO;EACP,QAAQ;EACT;;AAGH,SAAgB,6BAA6B;CAE3C,MAAM,SAASA,WAAc;AAC7B,KAAI,OAAO,WAAW,WACpB,QAAO,6BAA8B,QAA0B,CAAC;AAElE,QAAO,6BAA6B,OAAO;;AAG7C,SAAgB,qBAAqB;AAEnC,QAAOA,WAAc;;AAGvB,SAAgB,qBAAqB;CAEnC,MAAM,QAAQA,WAAc;AAC5B,KAAI,SAAS,OAAO,UAAU,SAC5B,QAAO,EAAE,GAAI,OAAmC;AAElD,QAAO,EAAE;;AAGX,SAAgB,0BACd,4BACA,mBACA;AACA,QAAO;EACL,cAAc;EACd,iBAAiB,UAAkE;AACjF,OAAI,OAAO,aAAa,WACtB;GAEF,MAAM,SAAS,4BAA4B;AAC3C,2BAAwB,SAAS,EAAE,WAAW,OAAO,WAAW,CAAC,CAAC;;EAEpE,cAAc,UAAoC;AAChD,OAAI,OAAO,aAAa,WACtB;GAEF,MAAM,SAAS,4BAA4B;AAC3C,OAAI,CAAC,OAAO,aAAa,CAAC,OAAO,MAC/B;AAEF,2BAAwB,UAAU,CAAC;;EAErC,eAAe,UAAoC;AACjD,OAAI,OAAO,aAAa,WACtB;GAEF,MAAM,SAAS,4BAA4B;AAC3C,OAAI,CAAC,OAAO,aAAa,CAAC,OAAO,OAC/B;AAEF,2BAAwB,UAAU,CAAC;;EAEtC;;AAGH,SAAgB,uBAAuB,OAAc,gBAAgD;CACnG,MAAM,iBAAiB,QAA2C,SAAoB;EACpF,MAAM,UAAU,iBAAiB;AACjC,MAAI,OAAO,YAAY,WACrB,SAAQ,MAAM,gBAAgB,KAAK;;AAGvC,QAAO;EACL,MAAM,GAAG,MAAiB;AACxB,OAAI,QAAQ,EACV;AAEF,iBAAc,SAAS,KAAK;;EAE9B,KAAK,GAAG,MAAiB;AACvB,iBAAc,QAAQ,KAAK;;EAE7B,IAAI,GAAG,MAAiB;AACtB,iBAAc,OAAO,KAAK;;EAE5B,KAAK,GAAG,MAAiB;AACvB,iBAAc,QAAQ,KAAK;;EAE9B;;AAGH,SAAgB,qBAAqB,WAAmB,MAAgC;CACtF,MAAM,gBAAgB;AAOtB,eAAc,yCAAyC,EAAE;AACzD,eAAc,qCAAqC,KAAK;EACtD,WAAW,OAAO,aAAa,GAAG;EAClC,MAAM,EAAE,GAAI,QAAQ,EAAE,EAAG;EACzB,WAAW,KAAK,KAAK;EACtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/lifecycle.ts"],"sourcesContent":["import type { ComponentOptions, ComponentPublicInstance } from '../../component'\nimport type { PageRecord, RouteMeta } from './options'\n\nconst ROUTE_META_SYMBOL = Symbol('@weapp-vite/web:route-meta')\nconst PAGE_STATE_SYMBOL = Symbol('@weapp-vite/web:page-state')\n\ninterface RouteMetaCarrier {\n [ROUTE_META_SYMBOL]?: RouteMeta\n}\n\ninterface PageInstanceState {\n loaded: boolean\n}\n\ninterface PageStateCarrier {\n [PAGE_STATE_SYMBOL]?: PageInstanceState\n}\n\ntype ComponentPageLifetimeType = 'show' | 'hide' | 'resize'\n\ninterface PageLifetimeAwareComponent extends HTMLElement {\n __weappInvokePageLifetime?: (type: ComponentPageLifetimeType) => void\n renderRoot?: ShadowRoot | HTMLElement\n}\n\nfunction getRouteMeta(instance: ComponentPublicInstance): RouteMeta | undefined {\n return (instance as RouteMetaCarrier)[ROUTE_META_SYMBOL]\n}\n\nfunction getPageState(instance: ComponentPublicInstance): PageInstanceState {\n const target = instance as PageStateCarrier\n target[PAGE_STATE_SYMBOL] ??= { loaded: false }\n return target[PAGE_STATE_SYMBOL]!\n}\n\nfunction walkElementsDeep(root: ParentNode, collector: Set<HTMLElement>) {\n const nodes = Array.from((root as ParentNode & { childNodes?: ArrayLike<unknown> }).childNodes ?? [])\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) {\n continue\n }\n collector.add(node)\n walkElementsDeep(node, collector)\n if (node.shadowRoot) {\n walkElementsDeep(node.shadowRoot, collector)\n }\n }\n}\n\nexport function dispatchPageLifetimeToComponents(\n page: ComponentPublicInstance,\n type: ComponentPageLifetimeType,\n) {\n const host = page as ComponentPublicInstance & {\n renderRoot?: ShadowRoot | HTMLElement\n shadowRoot?: ShadowRoot | null\n }\n const root = host.renderRoot ?? host.shadowRoot ?? host\n if (!root || typeof root.querySelectorAll !== 'function') {\n return\n }\n const elements = new Set<HTMLElement>()\n walkElementsDeep(root, elements)\n for (const element of elements) {\n const component = element as PageLifetimeAwareComponent\n if (typeof component.__weappInvokePageLifetime === 'function') {\n component.__weappInvokePageLifetime(type)\n }\n }\n}\n\nexport function attachRouteMeta(\n element: HTMLElement & ComponentPublicInstance,\n meta: RouteMeta,\n) {\n (element as RouteMetaCarrier)[ROUTE_META_SYMBOL] = meta\n}\n\nexport function augmentPageComponentOptions(component: ComponentOptions, record: PageRecord) {\n const lifetimes = component.lifetimes ?? {}\n const originalCreated = lifetimes?.created\n const originalAttached = lifetimes?.attached\n const originalReady = lifetimes?.ready\n const originalDetached = lifetimes?.detached\n\n const enhanced: ComponentOptions = {\n ...component,\n lifetimes: {\n ...lifetimes,\n created(this: ComponentPublicInstance) {\n originalCreated?.call(this)\n getPageState(this)\n record.instances.add(this)\n },\n attached(this: ComponentPublicInstance) {\n originalAttached?.call(this)\n const meta = getRouteMeta(this)\n if (meta?.entry) {\n meta.entry.instance = this\n }\n const state = getPageState(this)\n if (!state.loaded) {\n record.hooks.onLoad?.call(this, meta?.query ?? {})\n state.loaded = true\n }\n record.hooks.onShow?.call(this)\n },\n ready(this: ComponentPublicInstance) {\n originalReady?.call(this)\n record.hooks.onReady?.call(this)\n dispatchPageLifetimeToComponents(this, 'show')\n },\n detached(this: ComponentPublicInstance) {\n originalDetached?.call(this)\n const meta = getRouteMeta(this)\n if (meta?.entry) {\n meta.entry.instance = undefined\n }\n dispatchPageLifetimeToComponents(this, 'hide')\n record.hooks.onHide?.call(this)\n record.hooks.onUnload?.call(this)\n const state = getPageState(this)\n state.loaded = false\n record.instances.delete(this)\n },\n },\n }\n\n return enhanced\n}\n"],"mappings":";AAGA,MAAM,oBAAoB,OAAO,6BAA6B;AAC9D,MAAM,oBAAoB,OAAO,6BAA6B;AAqB9D,SAAS,aAAa,UAA0D;AAC9E,QAAQ,SAA8B;;AAGxC,SAAS,aAAa,UAAsD;CAC1E,MAAM,SAAS;AACf,QAAO,uBAAuB,EAAE,QAAQ,OAAO;AAC/C,QAAO,OAAO;;AAGhB,SAAS,iBAAiB,MAAkB,WAA6B;CACvE,MAAM,QAAQ,MAAM,KAAM,KAA0D,cAAc,EAAE,CAAC;AACrG,MAAK,MAAM,QAAQ,OAAO;AACxB,MAAI,EAAE,gBAAgB,aACpB;AAEF,YAAU,IAAI,KAAK;AACnB,mBAAiB,MAAM,UAAU;AACjC,MAAI,KAAK,WACP,kBAAiB,KAAK,YAAY,UAAU;;;AAKlD,SAAgB,iCACd,MACA,MACA;CACA,MAAM,OAAO;CAIb,MAAM,OAAO,KAAK,cAAc,KAAK,cAAc;AACnD,KAAI,CAAC,QAAQ,OAAO,KAAK,qBAAqB,WAC5C;CAEF,MAAM,2BAAW,IAAI,KAAkB;AACvC,kBAAiB,MAAM,SAAS;AAChC,MAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,YAAY;AAClB,MAAI,OAAO,UAAU,8BAA8B,WACjD,WAAU,0BAA0B,KAAK;;;AAK/C,SAAgB,gBACd,SACA,MACA;AACA,CAAC,QAA6B,qBAAqB;;AAGrD,SAAgB,4BAA4B,WAA6B,QAAoB;CAC3F,MAAM,YAAY,UAAU,aAAa,EAAE;CAC3C,MAAM,kBAAkB,WAAW;CACnC,MAAM,mBAAmB,WAAW;CACpC,MAAM,gBAAgB,WAAW;CACjC,MAAM,mBAAmB,WAAW;AA6CpC,QA3CmC;EACjC,GAAG;EACH,WAAW;GACT,GAAG;GACH,UAAuC;AACrC,qBAAiB,KAAK,KAAK;AAC3B,iBAAa,KAAK;AAClB,WAAO,UAAU,IAAI,KAAK;;GAE5B,WAAwC;AACtC,sBAAkB,KAAK,KAAK;IAC5B,MAAM,OAAO,aAAa,KAAK;AAC/B,QAAI,MAAM,MACR,MAAK,MAAM,WAAW;IAExB,MAAM,QAAQ,aAAa,KAAK;AAChC,QAAI,CAAC,MAAM,QAAQ;AACjB,YAAO,MAAM,QAAQ,KAAK,MAAM,MAAM,SAAS,EAAE,CAAC;AAClD,WAAM,SAAS;;AAEjB,WAAO,MAAM,QAAQ,KAAK,KAAK;;GAEjC,QAAqC;AACnC,mBAAe,KAAK,KAAK;AACzB,WAAO,MAAM,SAAS,KAAK,KAAK;AAChC,qCAAiC,MAAM,OAAO;;GAEhD,WAAwC;AACtC,sBAAkB,KAAK,KAAK;IAC5B,MAAM,OAAO,aAAa,KAAK;AAC/B,QAAI,MAAM,MACR,MAAK,MAAM,WAAW;AAExB,qCAAiC,MAAM,OAAO;AAC9C,WAAO,MAAM,QAAQ,KAAK,KAAK;AAC/B,WAAO,MAAM,UAAU,KAAK,KAAK;IACjC,MAAM,QAAQ,aAAa,KAAK;AAChC,UAAM,SAAS;AACf,WAAO,UAAU,OAAO,KAAK;;GAEhC;EACF"}
1
+ {"version":3,"file":"lifecycle.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/lifecycle.ts"],"sourcesContent":["import type { ComponentOptions, ComponentPublicInstance } from '../../component'\nimport type { PageRecord, RouteMeta } from './options'\n\nconst ROUTE_META_SYMBOL = Symbol('@weapp-vite/web:route-meta')\nconst PAGE_STATE_SYMBOL = Symbol('@weapp-vite/web:page-state')\n\ninterface RouteMetaCarrier {\n [ROUTE_META_SYMBOL]?: RouteMeta\n}\n\ninterface PageInstanceState {\n loaded: boolean\n}\n\ninterface PageStateCarrier {\n [PAGE_STATE_SYMBOL]?: PageInstanceState\n}\n\ntype ComponentPageLifetimeType = 'show' | 'hide' | 'resize'\n\ninterface PageLifetimeAwareComponent extends HTMLElement {\n __weappInvokePageLifetime?: (type: ComponentPageLifetimeType) => void\n renderRoot?: ShadowRoot | HTMLElement\n}\n\nfunction getRouteMeta(instance: ComponentPublicInstance): RouteMeta | undefined {\n return (instance as RouteMetaCarrier)[ROUTE_META_SYMBOL]\n}\n\nfunction getPageState(instance: ComponentPublicInstance): PageInstanceState {\n const target = instance as PageStateCarrier\n target[PAGE_STATE_SYMBOL] ??= { loaded: false }\n return target[PAGE_STATE_SYMBOL]!\n}\n\nfunction walkElementsDeep(root: ParentNode, collector: Set<HTMLElement>) {\n const nodes = Array.from((root as ParentNode & { childNodes?: ArrayLike<unknown> }).childNodes ?? [])\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) {\n continue\n }\n collector.add(node)\n walkElementsDeep(node, collector)\n if (node.shadowRoot) {\n walkElementsDeep(node.shadowRoot, collector)\n }\n }\n}\n\nexport function dispatchPageLifetimeToComponents(\n page: ComponentPublicInstance,\n type: ComponentPageLifetimeType,\n) {\n const host = page as ComponentPublicInstance & {\n renderRoot?: ShadowRoot | HTMLElement\n shadowRoot?: ShadowRoot | null\n }\n const root = host.renderRoot ?? host.shadowRoot ?? host\n if (!root || typeof root.querySelectorAll !== 'function') {\n return\n }\n const elements = new Set<HTMLElement>()\n walkElementsDeep(root, elements)\n for (const element of elements) {\n const component = element as PageLifetimeAwareComponent\n if (typeof component.__weappInvokePageLifetime === 'function') {\n component.__weappInvokePageLifetime(type)\n }\n }\n}\n\nexport function attachRouteMeta(\n element: HTMLElement & ComponentPublicInstance,\n meta: RouteMeta,\n) {\n (element as RouteMetaCarrier)[ROUTE_META_SYMBOL] = meta\n}\n\nexport function augmentPageComponentOptions(component: ComponentOptions, record: PageRecord) {\n const lifetimes = component.lifetimes ?? {}\n const originalCreated = lifetimes?.created\n const originalAttached = lifetimes?.attached\n const originalReady = lifetimes?.ready\n const originalDetached = lifetimes?.detached\n\n const enhanced: ComponentOptions = {\n ...component,\n lifetimes: {\n ...lifetimes,\n created(this: ComponentPublicInstance) {\n originalCreated?.call(this)\n getPageState(this)\n record.instances.add(this)\n },\n attached(this: ComponentPublicInstance) {\n originalAttached?.call(this)\n const meta = getRouteMeta(this)\n if (meta?.entry) {\n meta.entry.instance = this\n }\n const state = getPageState(this)\n if (!state.loaded) {\n record.hooks.onLoad?.call(this, meta?.query ?? {})\n state.loaded = true\n }\n record.hooks.onShow?.call(this)\n },\n ready(this: ComponentPublicInstance) {\n originalReady?.call(this)\n record.hooks.onReady?.call(this)\n dispatchPageLifetimeToComponents(this, 'show')\n },\n detached(this: ComponentPublicInstance) {\n originalDetached?.call(this)\n const meta = getRouteMeta(this)\n if (meta?.entry) {\n meta.entry.instance = undefined\n }\n dispatchPageLifetimeToComponents(this, 'hide')\n record.hooks.onHide?.call(this)\n record.hooks.onUnload?.call(this)\n const state = getPageState(this)\n state.loaded = false\n record.instances.delete(this)\n },\n },\n }\n\n return enhanced\n}\n"],"mappings":";AAGA,MAAM,oBAAoB,OAAO,6BAA6B;AAC9D,MAAM,oBAAoB,OAAO,6BAA6B;AAqB9D,SAAS,aAAa,UAA0D;AAC9E,QAAQ,SAA8B;;AAGxC,SAAS,aAAa,UAAsD;CAC1E,MAAM,SAAS;AACf,QAAO,uBAAuB,EAAE,QAAQ,OAAO;AAC/C,QAAO,OAAO;;AAGhB,SAAS,iBAAiB,MAAkB,WAA6B;CACvE,MAAM,QAAQ,MAAM,KAAM,KAA0D,cAAc,EAAE,CAAC;AACrG,MAAK,MAAM,QAAQ,OAAO;AACxB,MAAI,EAAE,gBAAgB,aACpB;AAEF,YAAU,IAAI,KAAK;AACnB,mBAAiB,MAAM,UAAU;AACjC,MAAI,KAAK,WACP,kBAAiB,KAAK,YAAY,UAAU;;;AAKlD,SAAgB,iCACd,MACA,MACA;CACA,MAAM,OAAO;CAIb,MAAM,OAAO,KAAK,cAAc,KAAK,cAAc;AACnD,KAAI,CAAC,QAAQ,OAAO,KAAK,qBAAqB,WAC5C;CAEF,MAAM,2BAAW,IAAI,KAAkB;AACvC,kBAAiB,MAAM,SAAS;AAChC,MAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,YAAY;AAClB,MAAI,OAAO,UAAU,8BAA8B,WACjD,WAAU,0BAA0B,KAAK;;;AAK/C,SAAgB,gBACd,SACA,MACA;AACA,CAAC,QAA6B,qBAAqB;;AAGrD,SAAgB,4BAA4B,WAA6B,QAAoB;CAC3F,MAAM,YAAY,UAAU,aAAa,EAAE;CAC3C,MAAM,kBAAkB,WAAW;CACnC,MAAM,mBAAmB,WAAW;CACpC,MAAM,gBAAgB,WAAW;CACjC,MAAM,mBAAmB,WAAW;AA6CpC,QAAO;EA1CL,GAAG;EACH,WAAW;GACT,GAAG;GACH,UAAuC;AACrC,qBAAiB,KAAK,KAAK;AAC3B,iBAAa,KAAK;AAClB,WAAO,UAAU,IAAI,KAAK;;GAE5B,WAAwC;AACtC,sBAAkB,KAAK,KAAK;IAC5B,MAAM,OAAO,aAAa,KAAK;AAC/B,QAAI,MAAM,MACR,MAAK,MAAM,WAAW;IAExB,MAAM,QAAQ,aAAa,KAAK;AAChC,QAAI,CAAC,MAAM,QAAQ;AACjB,YAAO,MAAM,QAAQ,KAAK,MAAM,MAAM,SAAS,EAAE,CAAC;AAClD,WAAM,SAAS;;AAEjB,WAAO,MAAM,QAAQ,KAAK,KAAK;;GAEjC,QAAqC;AACnC,mBAAe,KAAK,KAAK;AACzB,WAAO,MAAM,SAAS,KAAK,KAAK;AAChC,qCAAiC,MAAM,OAAO;;GAEhD,WAAwC;AACtC,sBAAkB,KAAK,KAAK;IAC5B,MAAM,OAAO,aAAa,KAAK;AAC/B,QAAI,MAAM,MACR,MAAK,MAAM,WAAW;AAExB,qCAAiC,MAAM,OAAO;AAC9C,WAAO,MAAM,QAAQ,KAAK,KAAK;AAC/B,WAAO,MAAM,UAAU,KAAK,KAAK;IACjC,MAAM,QAAQ,aAAa,KAAK;AAChC,UAAM,SAAS;AACf,WAAO,UAAU,OAAO,KAAK;;GAEhC;EAGY"}
@@ -1 +1 @@
1
- {"version":3,"file":"options.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/options.ts"],"sourcesContent":["import type { ComponentOptions, ComponentPublicInstance } from '../../component'\nimport type { TemplateRenderer } from '../../template'\n\nexport interface RegisterMeta {\n id: string\n template?: TemplateRenderer\n style?: string\n}\n\nexport interface PageHooks {\n onLoad?: (this: ComponentPublicInstance, query: Record<string, string>) => void\n onReady?: (this: ComponentPublicInstance) => void\n onShow?: (this: ComponentPublicInstance) => void\n onHide?: (this: ComponentPublicInstance) => void\n onUnload?: (this: ComponentPublicInstance) => void\n}\n\nexport interface PageRecord {\n tag: string\n hooks: PageHooks\n instances: Set<ComponentPublicInstance>\n}\n\nexport interface ComponentRecord {\n tag: string\n}\n\nexport interface PageStackEntry {\n id: string\n query: Record<string, string>\n instance?: ComponentPublicInstance\n}\n\nexport interface RouteMeta {\n id: string\n query: Record<string, string>\n entry: PageStackEntry\n}\n\ninterface AppLifecycleHooks {\n onLaunch?: (this: AppRuntime, options: AppLaunchOptions) => void\n onShow?: (this: AppRuntime, options: AppLaunchOptions) => void\n}\n\nexport type AppRuntime = Record<string, unknown> & Partial<AppLifecycleHooks> & {\n globalData?: Record<string, unknown>\n}\n\nexport interface AppLaunchOptions {\n path: string\n scene: number\n query: Record<string, string>\n referrerInfo: Record<string, unknown>\n}\n\ntype MethodHandler = (this: ComponentPublicInstance, ...args: unknown[]) => unknown\n\nexport type PageRawOptions = ComponentOptions & PageHooks & Record<string, unknown>\nexport type ComponentRawOptions = ComponentOptions & Record<string, unknown>\n\nconst PAGE_LIFECYCLE_KEYS = new Set(['onLoad', 'onReady', 'onShow', 'onHide', 'onUnload'])\nconst RESERVED_PAGE_METHOD_KEYS = new Set([\n 'data',\n 'methods',\n 'lifetimes',\n 'properties',\n 'behaviors',\n 'options',\n 'observers',\n 'mixins',\n ...PAGE_LIFECYCLE_KEYS,\n])\nconst RESERVED_COMPONENT_METHOD_KEYS = new Set([\n 'data',\n 'methods',\n 'lifetimes',\n 'pageLifetimes',\n 'properties',\n 'behaviors',\n 'options',\n 'observers',\n 'mixins',\n])\n\nfunction cloneLifetimes(source?: ComponentOptions['lifetimes']): ComponentOptions['lifetimes'] {\n if (!source) {\n return undefined\n }\n return {\n ...source,\n }\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nfunction isMethodHandler(value: unknown): value is MethodHandler {\n return typeof value === 'function'\n}\n\nfunction normalizeMethodBag(\n source: Record<string, unknown> | undefined,\n reserved: Set<string>,\n) {\n const methods: Record<string, MethodHandler> = {}\n const sourceMethods = isRecord(source?.methods) ? source?.methods : undefined\n\n if (sourceMethods) {\n for (const [key, value] of Object.entries(sourceMethods)) {\n if (isMethodHandler(value)) {\n methods[key] = value\n }\n }\n }\n\n if (source) {\n for (const [key, value] of Object.entries(source)) {\n if (reserved.has(key)) {\n continue\n }\n if (isMethodHandler(value) && methods[key] === undefined) {\n methods[key] = value\n }\n }\n }\n return methods\n}\n\nexport function normalizePageOptions(raw: PageRawOptions | undefined): { component: ComponentOptions, hooks: PageHooks } {\n const component = { ...(raw ?? {}) } as ComponentOptions\n component.methods = normalizeMethodBag(raw as Record<string, unknown> | undefined, RESERVED_PAGE_METHOD_KEYS) as ComponentOptions['methods']\n if (raw?.lifetimes) {\n component.lifetimes = cloneLifetimes(raw.lifetimes)\n }\n const hooks: PageHooks = {}\n if (typeof raw?.onLoad === 'function') {\n hooks.onLoad = raw.onLoad as PageHooks['onLoad']\n }\n if (typeof raw?.onReady === 'function') {\n hooks.onReady = raw.onReady as PageHooks['onReady']\n }\n if (typeof raw?.onShow === 'function') {\n hooks.onShow = raw.onShow as PageHooks['onShow']\n }\n if (typeof raw?.onHide === 'function') {\n hooks.onHide = raw.onHide as PageHooks['onHide']\n }\n if (typeof raw?.onUnload === 'function') {\n hooks.onUnload = raw.onUnload as PageHooks['onUnload']\n }\n return { component, hooks }\n}\n\nexport function normalizeComponentOptions(raw: ComponentRawOptions | undefined): ComponentOptions {\n const component = { ...(raw ?? {}) } as ComponentOptions\n component.methods = normalizeMethodBag(raw as Record<string, unknown> | undefined, RESERVED_COMPONENT_METHOD_KEYS) as ComponentOptions['methods']\n if (raw?.lifetimes) {\n component.lifetimes = cloneLifetimes(raw.lifetimes)\n }\n return component\n}\n"],"mappings":";AA6DA,MAAM,4BAA4B,IAAI,IAAI;CACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAV0B,IAAI,IAAI;EAAC;EAAU;EAAW;EAAU;EAAU;EAAW,CAAC;CAWzF,CAAC;AACF,MAAM,iCAAiC,IAAI,IAAI;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,eAAe,QAAuE;AAC7F,KAAI,CAAC,OACH;AAEF,QAAO,EACL,GAAG,QACJ;;AAGH,SAAgB,SAAS,OAAkD;AACzE,QAAO,OAAO,UAAU,YAAY,UAAU;;AAGhD,SAAS,gBAAgB,OAAwC;AAC/D,QAAO,OAAO,UAAU;;AAG1B,SAAS,mBACP,QACA,UACA;CACA,MAAM,UAAyC,EAAE;CACjD,MAAM,gBAAgB,SAAS,QAAQ,QAAQ,GAAG,QAAQ,UAAU;AAEpE,KAAI,eACF;OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,cAAc,CACtD,KAAI,gBAAgB,MAAM,CACxB,SAAQ,OAAO;;AAKrB,KAAI,OACF,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;AACjD,MAAI,SAAS,IAAI,IAAI,CACnB;AAEF,MAAI,gBAAgB,MAAM,IAAI,QAAQ,SAAS,OAC7C,SAAQ,OAAO;;AAIrB,QAAO;;AAGT,SAAgB,qBAAqB,KAAoF;CACvH,MAAM,YAAY,EAAE,GAAI,OAAO,EAAE,EAAG;AACpC,WAAU,UAAU,mBAAmB,KAA4C,0BAA0B;AAC7G,KAAI,KAAK,UACP,WAAU,YAAY,eAAe,IAAI,UAAU;CAErD,MAAM,QAAmB,EAAE;AAC3B,KAAI,OAAO,KAAK,WAAW,WACzB,OAAM,SAAS,IAAI;AAErB,KAAI,OAAO,KAAK,YAAY,WAC1B,OAAM,UAAU,IAAI;AAEtB,KAAI,OAAO,KAAK,WAAW,WACzB,OAAM,SAAS,IAAI;AAErB,KAAI,OAAO,KAAK,WAAW,WACzB,OAAM,SAAS,IAAI;AAErB,KAAI,OAAO,KAAK,aAAa,WAC3B,OAAM,WAAW,IAAI;AAEvB,QAAO;EAAE;EAAW;EAAO;;AAG7B,SAAgB,0BAA0B,KAAwD;CAChG,MAAM,YAAY,EAAE,GAAI,OAAO,EAAE,EAAG;AACpC,WAAU,UAAU,mBAAmB,KAA4C,+BAA+B;AAClH,KAAI,KAAK,UACP,WAAU,YAAY,eAAe,IAAI,UAAU;AAErD,QAAO"}
1
+ {"version":3,"file":"options.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/options.ts"],"sourcesContent":["import type { ComponentOptions, ComponentPublicInstance } from '../../component'\nimport type { TemplateRenderer } from '../../template'\n\nexport interface RegisterMeta {\n id: string\n template?: TemplateRenderer\n style?: string\n}\n\nexport interface PageHooks {\n onLoad?: (this: ComponentPublicInstance, query: Record<string, string>) => void\n onReady?: (this: ComponentPublicInstance) => void\n onShow?: (this: ComponentPublicInstance) => void\n onHide?: (this: ComponentPublicInstance) => void\n onUnload?: (this: ComponentPublicInstance) => void\n}\n\nexport interface PageRecord {\n tag: string\n hooks: PageHooks\n instances: Set<ComponentPublicInstance>\n}\n\nexport interface ComponentRecord {\n tag: string\n}\n\nexport interface PageStackEntry {\n id: string\n query: Record<string, string>\n instance?: ComponentPublicInstance\n}\n\nexport interface RouteMeta {\n id: string\n query: Record<string, string>\n entry: PageStackEntry\n}\n\ninterface AppLifecycleHooks {\n onLaunch?: (this: AppRuntime, options: AppLaunchOptions) => void\n onShow?: (this: AppRuntime, options: AppLaunchOptions) => void\n}\n\nexport type AppRuntime = Record<string, unknown> & Partial<AppLifecycleHooks> & {\n globalData?: Record<string, unknown>\n}\n\nexport interface AppLaunchOptions {\n path: string\n scene: number\n query: Record<string, string>\n referrerInfo: Record<string, unknown>\n}\n\ntype MethodHandler = (this: ComponentPublicInstance, ...args: unknown[]) => unknown\n\nexport type PageRawOptions = ComponentOptions & PageHooks & Record<string, unknown>\nexport type ComponentRawOptions = ComponentOptions & Record<string, unknown>\n\nconst PAGE_LIFECYCLE_KEYS = new Set(['onLoad', 'onReady', 'onShow', 'onHide', 'onUnload'])\nconst RESERVED_PAGE_METHOD_KEYS = new Set([\n 'data',\n 'methods',\n 'lifetimes',\n 'properties',\n 'behaviors',\n 'options',\n 'observers',\n 'mixins',\n ...PAGE_LIFECYCLE_KEYS,\n])\nconst RESERVED_COMPONENT_METHOD_KEYS = new Set([\n 'data',\n 'methods',\n 'lifetimes',\n 'pageLifetimes',\n 'properties',\n 'behaviors',\n 'options',\n 'observers',\n 'mixins',\n])\n\nfunction cloneLifetimes(source?: ComponentOptions['lifetimes']): ComponentOptions['lifetimes'] {\n if (!source) {\n return undefined\n }\n return {\n ...source,\n }\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nfunction isMethodHandler(value: unknown): value is MethodHandler {\n return typeof value === 'function'\n}\n\nfunction normalizeMethodBag(\n source: Record<string, unknown> | undefined,\n reserved: Set<string>,\n) {\n const methods: Record<string, MethodHandler> = {}\n const sourceMethods = isRecord(source?.methods) ? source?.methods : undefined\n\n if (sourceMethods) {\n for (const [key, value] of Object.entries(sourceMethods)) {\n if (isMethodHandler(value)) {\n methods[key] = value\n }\n }\n }\n\n if (source) {\n for (const [key, value] of Object.entries(source)) {\n if (reserved.has(key)) {\n continue\n }\n if (isMethodHandler(value) && methods[key] === undefined) {\n methods[key] = value\n }\n }\n }\n return methods\n}\n\nexport function normalizePageOptions(raw: PageRawOptions | undefined): { component: ComponentOptions, hooks: PageHooks } {\n const component = { ...(raw ?? {}) } as ComponentOptions\n component.methods = normalizeMethodBag(raw as Record<string, unknown> | undefined, RESERVED_PAGE_METHOD_KEYS) as ComponentOptions['methods']\n if (raw?.lifetimes) {\n component.lifetimes = cloneLifetimes(raw.lifetimes)\n }\n const hooks: PageHooks = {}\n if (typeof raw?.onLoad === 'function') {\n hooks.onLoad = raw.onLoad as PageHooks['onLoad']\n }\n if (typeof raw?.onReady === 'function') {\n hooks.onReady = raw.onReady as PageHooks['onReady']\n }\n if (typeof raw?.onShow === 'function') {\n hooks.onShow = raw.onShow as PageHooks['onShow']\n }\n if (typeof raw?.onHide === 'function') {\n hooks.onHide = raw.onHide as PageHooks['onHide']\n }\n if (typeof raw?.onUnload === 'function') {\n hooks.onUnload = raw.onUnload as PageHooks['onUnload']\n }\n return { component, hooks }\n}\n\nexport function normalizeComponentOptions(raw: ComponentRawOptions | undefined): ComponentOptions {\n const component = { ...(raw ?? {}) } as ComponentOptions\n component.methods = normalizeMethodBag(raw as Record<string, unknown> | undefined, RESERVED_COMPONENT_METHOD_KEYS) as ComponentOptions['methods']\n if (raw?.lifetimes) {\n component.lifetimes = cloneLifetimes(raw.lifetimes)\n }\n return component\n}\n"],"mappings":";AA6DA,MAAM,4BAA4B,IAAI,IAAI;CACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAAG,IAV2B,IAAI;EAAC;EAAU;EAAW;EAAU;EAAU;EAAW,CAUjE;CACvB,CAAC;AACF,MAAM,iCAAiC,IAAI,IAAI;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,eAAe,QAAuE;AAC7F,KAAI,CAAC,OACH;AAEF,QAAO,EACL,GAAG,QACJ;;AAGH,SAAgB,SAAS,OAAkD;AACzE,QAAO,OAAO,UAAU,YAAY,UAAU;;AAGhD,SAAS,gBAAgB,OAAwC;AAC/D,QAAO,OAAO,UAAU;;AAG1B,SAAS,mBACP,QACA,UACA;CACA,MAAM,UAAyC,EAAE;CACjD,MAAM,gBAAgB,SAAS,QAAQ,QAAQ,GAAG,QAAQ,UAAU;AAEpE,KAAI,eACF;OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,cAAc,CACtD,KAAI,gBAAgB,MAAM,CACxB,SAAQ,OAAO;;AAKrB,KAAI,OACF,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;AACjD,MAAI,SAAS,IAAI,IAAI,CACnB;AAEF,MAAI,gBAAgB,MAAM,IAAI,QAAQ,SAAS,OAC7C,SAAQ,OAAO;;AAIrB,QAAO;;AAGT,SAAgB,qBAAqB,KAAoF;CACvH,MAAM,YAAY,EAAE,GAAI,OAAO,EAAE,EAAG;AACpC,WAAU,UAAU,mBAAmB,KAA4C,0BAA0B;AAC7G,KAAI,KAAK,UACP,WAAU,YAAY,eAAe,IAAI,UAAU;CAErD,MAAM,QAAmB,EAAE;AAC3B,KAAI,OAAO,KAAK,WAAW,WACzB,OAAM,SAAS,IAAI;AAErB,KAAI,OAAO,KAAK,YAAY,WAC1B,OAAM,UAAU,IAAI;AAEtB,KAAI,OAAO,KAAK,WAAW,WACzB,OAAM,SAAS,IAAI;AAErB,KAAI,OAAO,KAAK,WAAW,WACzB,OAAM,SAAS,IAAI;AAErB,KAAI,OAAO,KAAK,aAAa,WAC3B,OAAM,WAAW,IAAI;AAEvB,QAAO;EAAE;EAAW;EAAO;;AAG7B,SAAgB,0BAA0B,KAAwD;CAChG,MAAM,YAAY,EAAE,GAAI,OAAO,EAAE,EAAG;AACpC,WAAU,UAAU,mBAAmB,KAA4C,+BAA+B;AAClH,KAAI,KAAK,UACP,WAAU,YAAY,eAAe,IAAI,UAAU;AAErD,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"url.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/url.ts"],"sourcesContent":["import type { PageStackEntry } from './options'\n\nconst PAGE_TEMPLATE_EXTENSIONS = ['.wxml', '.axml', '.swan', '.ttml', '.qml', '.ksml', '.xhsml', '.html']\n\nfunction stripTemplateExtension(id: string) {\n const lowered = id.toLowerCase()\n for (const ext of PAGE_TEMPLATE_EXTENSIONS) {\n if (lowered.endsWith(ext)) {\n return id.slice(0, -ext.length)\n }\n }\n return id\n}\n\nfunction parsePageId(raw: string) {\n const normalized = raw.replace(/^\\//, '')\n return stripTemplateExtension(normalized)\n}\n\nexport function parsePageUrl(url: string): Pick<PageStackEntry, 'id' | 'query'> {\n const [path, search = ''] = url.split('?')\n const query: Record<string, string> = {}\n if (search) {\n const params = new URLSearchParams(search)\n for (const [key, value] of params.entries()) {\n query[key] = value\n }\n }\n return {\n id: parsePageId(path || ''),\n query,\n }\n}\n"],"mappings":";AAEA,MAAM,2BAA2B;CAAC;CAAS;CAAS;CAAS;CAAS;CAAQ;CAAS;CAAU;CAAQ;AAEzG,SAAS,uBAAuB,IAAY;CAC1C,MAAM,UAAU,GAAG,aAAa;AAChC,MAAK,MAAM,OAAO,yBAChB,KAAI,QAAQ,SAAS,IAAI,CACvB,QAAO,GAAG,MAAM,GAAG,CAAC,IAAI,OAAO;AAGnC,QAAO;;AAGT,SAAS,YAAY,KAAa;AAEhC,QAAO,uBADY,IAAI,QAAQ,OAAO,GAAG,CACA;;AAG3C,SAAgB,aAAa,KAAmD;CAC9E,MAAM,CAAC,MAAM,SAAS,MAAM,IAAI,MAAM,IAAI;CAC1C,MAAM,QAAgC,EAAE;AACxC,KAAI,QAAQ;EACV,MAAM,SAAS,IAAI,gBAAgB,OAAO;AAC1C,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,SAAS,CACzC,OAAM,OAAO;;AAGjB,QAAO;EACL,IAAI,YAAY,QAAQ,GAAG;EAC3B;EACD"}
1
+ {"version":3,"file":"url.mjs","names":[],"sources":["../../../../src/runtime/polyfill/routeRuntime/url.ts"],"sourcesContent":["import type { PageStackEntry } from './options'\n\nconst PAGE_TEMPLATE_EXTENSIONS = ['.wxml', '.axml', '.swan', '.ttml', '.qml', '.ksml', '.xhsml', '.html']\n\nfunction stripTemplateExtension(id: string) {\n const lowered = id.toLowerCase()\n for (const ext of PAGE_TEMPLATE_EXTENSIONS) {\n if (lowered.endsWith(ext)) {\n return id.slice(0, -ext.length)\n }\n }\n return id\n}\n\nfunction parsePageId(raw: string) {\n const normalized = raw.replace(/^\\//, '')\n return stripTemplateExtension(normalized)\n}\n\nexport function parsePageUrl(url: string): Pick<PageStackEntry, 'id' | 'query'> {\n const [path, search = ''] = url.split('?')\n const query: Record<string, string> = {}\n if (search) {\n const params = new URLSearchParams(search)\n for (const [key, value] of params.entries()) {\n query[key] = value\n }\n }\n return {\n id: parsePageId(path || ''),\n query,\n }\n}\n"],"mappings":";AAEA,MAAM,2BAA2B;CAAC;CAAS;CAAS;CAAS;CAAS;CAAQ;CAAS;CAAU;CAAQ;AAEzG,SAAS,uBAAuB,IAAY;CAC1C,MAAM,UAAU,GAAG,aAAa;AAChC,MAAK,MAAM,OAAO,yBAChB,KAAI,QAAQ,SAAS,IAAI,CACvB,QAAO,GAAG,MAAM,GAAG,CAAC,IAAI,OAAO;AAGnC,QAAO;;AAGT,SAAS,YAAY,KAAa;AAEhC,QAAO,uBADY,IAAI,QAAQ,OAAO,GACE,CAAC;;AAG3C,SAAgB,aAAa,KAAmD;CAC9E,MAAM,CAAC,MAAM,SAAS,MAAM,IAAI,MAAM,IAAI;CAC1C,MAAM,QAAgC,EAAE;AACxC,KAAI,QAAQ;EACV,MAAM,SAAS,IAAI,gBAAgB,OAAO;AAC1C,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,SAAS,CACzC,OAAM,OAAO;;AAGjB,QAAO;EACL,IAAI,YAAY,QAAQ,GAAG;EAC3B;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeOps.mjs","names":[],"sources":["../../../src/runtime/polyfill/runtimeOps.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n normalizeDuration,\n scheduleMicrotask,\n} from './async'\nimport { resolveSubPackageName } from './platformRuntime'\n\nfunction resolveScrollTop(value: unknown) {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return 0\n }\n return Math.max(0, value)\n}\n\nfunction setWindowScrollTop(top: number) {\n if (typeof window === 'undefined') {\n return\n }\n const runtimeWindow = window as Window & {\n scrollTo?: (x: number, y: number) => void\n }\n if (typeof runtimeWindow.scrollTo !== 'function') {\n return\n }\n runtimeWindow.scrollTo(0, top)\n}\n\nexport function nextTickBridge(callback?: () => void) {\n if (typeof callback !== 'function') {\n return\n }\n scheduleMicrotask(() => callback())\n}\n\nexport function startPullDownRefreshBridge(options?: any) {\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'startPullDownRefresh:ok' }))\n}\n\nexport function stopPullDownRefreshBridge(options?: any) {\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'stopPullDownRefresh:ok' }))\n}\n\nexport function hideKeyboardBridge(options?: any) {\n const activeElement = (typeof document !== 'undefined'\n ? (document as { activeElement?: { blur?: () => void } }).activeElement\n : undefined)\n if (activeElement && typeof activeElement.blur === 'function') {\n activeElement.blur()\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'hideKeyboard:ok' }))\n}\n\nexport function loadSubPackageBridge(options?: any) {\n const name = resolveSubPackageName(options)\n if (!name) {\n const failure = callMiniProgramAsyncFailure(options, 'loadSubPackage:fail invalid name')\n return Promise.reject(failure)\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'loadSubPackage:ok' }))\n}\n\nexport function preloadSubpackageBridge(options?: any) {\n const name = resolveSubPackageName(options)\n if (!name) {\n const failure = callMiniProgramAsyncFailure(options, 'preloadSubpackage:fail invalid name')\n return Promise.reject(failure)\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'preloadSubpackage:ok' }))\n}\n\nexport function pageScrollToBridge(options?: any) {\n const targetTop = resolveScrollTop(options?.scrollTop)\n const duration = normalizeDuration(options?.duration, 300)\n const run = () => setWindowScrollTop(targetTop)\n\n if (duration <= 0) {\n run()\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'pageScrollTo:ok' }))\n }\n\n return new Promise((resolve) => {\n setTimeout(() => {\n run()\n resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'pageScrollTo:ok' }))\n }, duration)\n })\n}\n"],"mappings":";;;;AAQA,SAAS,iBAAiB,OAAgB;AACxC,KAAI,OAAO,UAAU,YAAY,OAAO,MAAM,MAAM,CAClD,QAAO;AAET,QAAO,KAAK,IAAI,GAAG,MAAM;;AAG3B,SAAS,mBAAmB,KAAa;AACvC,KAAI,OAAO,WAAW,YACpB;CAEF,MAAM,gBAAgB;AAGtB,KAAI,OAAO,cAAc,aAAa,WACpC;AAEF,eAAc,SAAS,GAAG,IAAI;;AAGhC,SAAgB,eAAe,UAAuB;AACpD,KAAI,OAAO,aAAa,WACtB;AAEF,yBAAwB,UAAU,CAAC;;AAGrC,SAAgB,2BAA2B,SAAe;AACxD,QAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,2BAA2B,CAAC,CAAC;;AAGrG,SAAgB,0BAA0B,SAAe;AACvD,QAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,0BAA0B,CAAC,CAAC;;AAGpG,SAAgB,mBAAmB,SAAe;CAChD,MAAM,gBAAiB,OAAO,aAAa,cACtC,SAAuD,gBACxD;AACJ,KAAI,iBAAiB,OAAO,cAAc,SAAS,WACjD,eAAc,MAAM;AAEtB,QAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,mBAAmB,CAAC,CAAC;;AAG7F,SAAgB,qBAAqB,SAAe;AAElD,KAAI,CADS,sBAAsB,QAAQ,EAChC;EACT,MAAM,UAAU,4BAA4B,SAAS,mCAAmC;AACxF,SAAO,QAAQ,OAAO,QAAQ;;AAEhC,QAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,qBAAqB,CAAC,CAAC;;AAG/F,SAAgB,wBAAwB,SAAe;AAErD,KAAI,CADS,sBAAsB,QAAQ,EAChC;EACT,MAAM,UAAU,4BAA4B,SAAS,sCAAsC;AAC3F,SAAO,QAAQ,OAAO,QAAQ;;AAEhC,QAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,wBAAwB,CAAC,CAAC;;AAGlG,SAAgB,mBAAmB,SAAe;CAChD,MAAM,YAAY,iBAAiB,SAAS,UAAU;CACtD,MAAM,WAAW,kBAAkB,SAAS,UAAU,IAAI;CAC1D,MAAM,YAAY,mBAAmB,UAAU;AAE/C,KAAI,YAAY,GAAG;AACjB,OAAK;AACL,SAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,mBAAmB,CAAC,CAAC;;AAG7F,QAAO,IAAI,SAAS,YAAY;AAC9B,mBAAiB;AACf,QAAK;AACL,WAAQ,4BAA4B,SAAS,EAAE,QAAQ,mBAAmB,CAAC,CAAC;KAC3E,SAAS;GACZ"}
1
+ {"version":3,"file":"runtimeOps.mjs","names":[],"sources":["../../../src/runtime/polyfill/runtimeOps.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n normalizeDuration,\n scheduleMicrotask,\n} from './async'\nimport { resolveSubPackageName } from './platformRuntime'\n\nfunction resolveScrollTop(value: unknown) {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return 0\n }\n return Math.max(0, value)\n}\n\nfunction setWindowScrollTop(top: number) {\n if (typeof window === 'undefined') {\n return\n }\n const runtimeWindow = window as Window & {\n scrollTo?: (x: number, y: number) => void\n }\n if (typeof runtimeWindow.scrollTo !== 'function') {\n return\n }\n runtimeWindow.scrollTo(0, top)\n}\n\nexport function nextTickBridge(callback?: () => void) {\n if (typeof callback !== 'function') {\n return\n }\n scheduleMicrotask(() => callback())\n}\n\nexport function startPullDownRefreshBridge(options?: any) {\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'startPullDownRefresh:ok' }))\n}\n\nexport function stopPullDownRefreshBridge(options?: any) {\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'stopPullDownRefresh:ok' }))\n}\n\nexport function hideKeyboardBridge(options?: any) {\n const activeElement = (typeof document !== 'undefined'\n ? (document as { activeElement?: { blur?: () => void } }).activeElement\n : undefined)\n if (activeElement && typeof activeElement.blur === 'function') {\n activeElement.blur()\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'hideKeyboard:ok' }))\n}\n\nexport function loadSubPackageBridge(options?: any) {\n const name = resolveSubPackageName(options)\n if (!name) {\n const failure = callMiniProgramAsyncFailure(options, 'loadSubPackage:fail invalid name')\n return Promise.reject(failure)\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'loadSubPackage:ok' }))\n}\n\nexport function preloadSubpackageBridge(options?: any) {\n const name = resolveSubPackageName(options)\n if (!name) {\n const failure = callMiniProgramAsyncFailure(options, 'preloadSubpackage:fail invalid name')\n return Promise.reject(failure)\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'preloadSubpackage:ok' }))\n}\n\nexport function pageScrollToBridge(options?: any) {\n const targetTop = resolveScrollTop(options?.scrollTop)\n const duration = normalizeDuration(options?.duration, 300)\n const run = () => setWindowScrollTop(targetTop)\n\n if (duration <= 0) {\n run()\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'pageScrollTo:ok' }))\n }\n\n return new Promise((resolve) => {\n setTimeout(() => {\n run()\n resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'pageScrollTo:ok' }))\n }, duration)\n })\n}\n"],"mappings":";;;;AAQA,SAAS,iBAAiB,OAAgB;AACxC,KAAI,OAAO,UAAU,YAAY,OAAO,MAAM,MAAM,CAClD,QAAO;AAET,QAAO,KAAK,IAAI,GAAG,MAAM;;AAG3B,SAAS,mBAAmB,KAAa;AACvC,KAAI,OAAO,WAAW,YACpB;CAEF,MAAM,gBAAgB;AAGtB,KAAI,OAAO,cAAc,aAAa,WACpC;AAEF,eAAc,SAAS,GAAG,IAAI;;AAGhC,SAAgB,eAAe,UAAuB;AACpD,KAAI,OAAO,aAAa,WACtB;AAEF,yBAAwB,UAAU,CAAC;;AAGrC,SAAgB,2BAA2B,SAAe;AACxD,QAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,2BAA2B,CAAC,CAAC;;AAGrG,SAAgB,0BAA0B,SAAe;AACvD,QAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,0BAA0B,CAAC,CAAC;;AAGpG,SAAgB,mBAAmB,SAAe;CAChD,MAAM,gBAAiB,OAAO,aAAa,cACtC,SAAuD,gBACxD;AACJ,KAAI,iBAAiB,OAAO,cAAc,SAAS,WACjD,eAAc,MAAM;AAEtB,QAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,mBAAmB,CAAC,CAAC;;AAG7F,SAAgB,qBAAqB,SAAe;AAElD,KAAI,CADS,sBAAsB,QAC1B,EAAE;EACT,MAAM,UAAU,4BAA4B,SAAS,mCAAmC;AACxF,SAAO,QAAQ,OAAO,QAAQ;;AAEhC,QAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,qBAAqB,CAAC,CAAC;;AAG/F,SAAgB,wBAAwB,SAAe;AAErD,KAAI,CADS,sBAAsB,QAC1B,EAAE;EACT,MAAM,UAAU,4BAA4B,SAAS,sCAAsC;AAC3F,SAAO,QAAQ,OAAO,QAAQ;;AAEhC,QAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,wBAAwB,CAAC,CAAC;;AAGlG,SAAgB,mBAAmB,SAAe;CAChD,MAAM,YAAY,iBAAiB,SAAS,UAAU;CACtD,MAAM,WAAW,kBAAkB,SAAS,UAAU,IAAI;CAC1D,MAAM,YAAY,mBAAmB,UAAU;AAE/C,KAAI,YAAY,GAAG;AACjB,OAAK;AACL,SAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,mBAAmB,CAAC,CAAC;;AAG7F,QAAO,IAAI,SAAS,YAAY;AAC9B,mBAAiB;AACf,QAAK;AACL,WAAQ,4BAA4B,SAAS,EAAE,QAAQ,mBAAmB,CAAC,CAAC;KAC3E,SAAS;GACZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"storage.mjs","names":[],"sources":["../../../src/runtime/polyfill/storage.ts"],"sourcesContent":["const WEB_STORAGE_PREFIX = '__weapp_vite_web_storage__:'\nconst WEB_STORAGE_LIMIT_SIZE_KB = 10240\nconst memoryStorage = new Map<string, any>()\n\nfunction isRuntimeStorageLike(value: unknown): value is Storage {\n return !!value\n && typeof value === 'object'\n && typeof (value as Storage).getItem === 'function'\n && typeof (value as Storage).setItem === 'function'\n && typeof (value as Storage).removeItem === 'function'\n && typeof (value as Storage).key === 'function'\n}\n\nfunction getRuntimeStorage() {\n if (typeof localStorage === 'undefined' || !isRuntimeStorageLike(localStorage)) {\n return undefined\n }\n return localStorage\n}\n\nfunction storageKeyWithPrefix(key: string) {\n return `${WEB_STORAGE_PREFIX}${key}`\n}\n\nfunction encodeStorageValue(value: any) {\n if (value === undefined) {\n return JSON.stringify({ type: 'undefined' })\n }\n return JSON.stringify({ type: 'json', value })\n}\n\nfunction decodeStorageValue(value: string) {\n try {\n const parsed = JSON.parse(value) as { type?: string, value?: any }\n if (parsed?.type === 'undefined') {\n return undefined\n }\n if (parsed?.type === 'json') {\n return parsed.value\n }\n return parsed\n }\n catch {\n return value\n }\n}\n\nexport function normalizeStorageKey(key: unknown) {\n if (typeof key !== 'string') {\n return ''\n }\n return key.trim()\n}\n\nexport function hasStorageKey(key: string) {\n if (memoryStorage.has(key)) {\n return true\n }\n const storage = getRuntimeStorage()\n if (!storage) {\n return false\n }\n return storage.getItem(storageKeyWithPrefix(key)) !== null\n}\n\nfunction listStorageKeys() {\n const keySet = new Set<string>(memoryStorage.keys())\n const storage = getRuntimeStorage()\n if (!storage) {\n return Array.from(keySet)\n }\n for (let index = 0; index < storage.length; index += 1) {\n const key = storage.key(index)\n if (key?.startsWith(WEB_STORAGE_PREFIX)) {\n keySet.add(key.slice(WEB_STORAGE_PREFIX.length))\n }\n }\n return Array.from(keySet)\n}\n\nexport function setStorageSyncInternal(key: string, data: any) {\n memoryStorage.set(key, data)\n const storage = getRuntimeStorage()\n if (storage) {\n storage.setItem(storageKeyWithPrefix(key), encodeStorageValue(data))\n }\n}\n\nexport function getStorageSyncInternal(key: string) {\n if (memoryStorage.has(key)) {\n return memoryStorage.get(key)\n }\n const storage = getRuntimeStorage()\n if (!storage) {\n return ''\n }\n const raw = storage.getItem(storageKeyWithPrefix(key))\n if (raw == null) {\n return ''\n }\n const decoded = decodeStorageValue(raw)\n memoryStorage.set(key, decoded)\n return decoded\n}\n\nexport function removeStorageSyncInternal(key: string) {\n memoryStorage.delete(key)\n const storage = getRuntimeStorage()\n if (storage) {\n storage.removeItem(storageKeyWithPrefix(key))\n }\n}\n\nexport function clearStorageSyncInternal() {\n memoryStorage.clear()\n const storage = getRuntimeStorage()\n if (!storage) {\n return\n }\n const removeKeys: string[] = []\n for (let index = 0; index < storage.length; index += 1) {\n const key = storage.key(index)\n if (key?.startsWith(WEB_STORAGE_PREFIX)) {\n removeKeys.push(key)\n }\n }\n for (const key of removeKeys) {\n storage.removeItem(key)\n }\n}\n\nfunction calculateStorageCurrentSize(keys: string[]) {\n let bytes = 0\n for (const key of keys) {\n const value = getStorageSyncInternal(key)\n const encoded = encodeStorageValue(value)\n bytes += encoded.length\n }\n return Math.ceil(bytes / 1024)\n}\n\nexport function getStorageInfoSyncInternal() {\n const keys = listStorageKeys()\n return {\n errMsg: 'getStorageInfoSync:ok',\n keys,\n currentSize: calculateStorageCurrentSize(keys),\n limitSize: WEB_STORAGE_LIMIT_SIZE_KB,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"storage.mjs","names":[],"sources":["../../../src/runtime/polyfill/storage.ts"],"sourcesContent":["const WEB_STORAGE_PREFIX = '__weapp_vite_web_storage__:'\nconst WEB_STORAGE_LIMIT_SIZE_KB = 10240\nconst memoryStorage = new Map<string, any>()\n\nfunction isRuntimeStorageLike(value: unknown): value is Storage {\n return !!value\n && typeof value === 'object'\n && typeof (value as Storage).getItem === 'function'\n && typeof (value as Storage).setItem === 'function'\n && typeof (value as Storage).removeItem === 'function'\n && typeof (value as Storage).key === 'function'\n}\n\nfunction getRuntimeStorage() {\n if (typeof localStorage === 'undefined' || !isRuntimeStorageLike(localStorage)) {\n return undefined\n }\n return localStorage\n}\n\nfunction storageKeyWithPrefix(key: string) {\n return `${WEB_STORAGE_PREFIX}${key}`\n}\n\nfunction encodeStorageValue(value: any) {\n if (value === undefined) {\n return JSON.stringify({ type: 'undefined' })\n }\n return JSON.stringify({ type: 'json', value })\n}\n\nfunction decodeStorageValue(value: string) {\n try {\n const parsed = JSON.parse(value) as { type?: string, value?: any }\n if (parsed?.type === 'undefined') {\n return undefined\n }\n if (parsed?.type === 'json') {\n return parsed.value\n }\n return parsed\n }\n catch {\n return value\n }\n}\n\nexport function normalizeStorageKey(key: unknown) {\n if (typeof key !== 'string') {\n return ''\n }\n return key.trim()\n}\n\nexport function hasStorageKey(key: string) {\n if (memoryStorage.has(key)) {\n return true\n }\n const storage = getRuntimeStorage()\n if (!storage) {\n return false\n }\n return storage.getItem(storageKeyWithPrefix(key)) !== null\n}\n\nfunction listStorageKeys() {\n const keySet = new Set<string>(memoryStorage.keys())\n const storage = getRuntimeStorage()\n if (!storage) {\n return Array.from(keySet)\n }\n for (let index = 0; index < storage.length; index += 1) {\n const key = storage.key(index)\n if (key?.startsWith(WEB_STORAGE_PREFIX)) {\n keySet.add(key.slice(WEB_STORAGE_PREFIX.length))\n }\n }\n return Array.from(keySet)\n}\n\nexport function setStorageSyncInternal(key: string, data: any) {\n memoryStorage.set(key, data)\n const storage = getRuntimeStorage()\n if (storage) {\n storage.setItem(storageKeyWithPrefix(key), encodeStorageValue(data))\n }\n}\n\nexport function getStorageSyncInternal(key: string) {\n if (memoryStorage.has(key)) {\n return memoryStorage.get(key)\n }\n const storage = getRuntimeStorage()\n if (!storage) {\n return ''\n }\n const raw = storage.getItem(storageKeyWithPrefix(key))\n if (raw == null) {\n return ''\n }\n const decoded = decodeStorageValue(raw)\n memoryStorage.set(key, decoded)\n return decoded\n}\n\nexport function removeStorageSyncInternal(key: string) {\n memoryStorage.delete(key)\n const storage = getRuntimeStorage()\n if (storage) {\n storage.removeItem(storageKeyWithPrefix(key))\n }\n}\n\nexport function clearStorageSyncInternal() {\n memoryStorage.clear()\n const storage = getRuntimeStorage()\n if (!storage) {\n return\n }\n const removeKeys: string[] = []\n for (let index = 0; index < storage.length; index += 1) {\n const key = storage.key(index)\n if (key?.startsWith(WEB_STORAGE_PREFIX)) {\n removeKeys.push(key)\n }\n }\n for (const key of removeKeys) {\n storage.removeItem(key)\n }\n}\n\nfunction calculateStorageCurrentSize(keys: string[]) {\n let bytes = 0\n for (const key of keys) {\n const value = getStorageSyncInternal(key)\n const encoded = encodeStorageValue(value)\n bytes += encoded.length\n }\n return Math.ceil(bytes / 1024)\n}\n\nexport function getStorageInfoSyncInternal() {\n const keys = listStorageKeys()\n return {\n errMsg: 'getStorageInfoSync:ok',\n keys,\n currentSize: calculateStorageCurrentSize(keys),\n limitSize: WEB_STORAGE_LIMIT_SIZE_KB,\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"subscribe.mjs","names":[],"sources":["../../../src/runtime/polyfill/subscribe.ts"],"sourcesContent":["import { WEAPP_VITE_WEB_REQUEST_SUBSCRIBE_MESSAGE_KEY } from '@weapp-core/constants'\n\nexport type SubscribeMessageDecision = 'accept' | 'reject' | 'ban' | 'filter'\n\nexport function normalizeSubscribeDecision(value: unknown): SubscribeMessageDecision {\n if (value === 'accept' || value === 'reject' || value === 'ban' || value === 'filter') {\n return value\n }\n return 'accept'\n}\n\nexport function normalizeSubscribeTemplateIds(value: unknown) {\n if (!Array.isArray(value)) {\n return []\n }\n return value\n .filter((item): item is string => typeof item === 'string')\n .map(item => item.trim())\n .filter(Boolean)\n}\n\nexport function resolveSubscribeDecisionMap(tmplIds: string[]) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_REQUEST_SUBSCRIBE_MESSAGE_KEY]\n const presetValue = typeof preset === 'function'\n ? (preset as (ids: string[]) => unknown)(tmplIds)\n : preset\n if (presetValue && typeof presetValue === 'object') {\n const output: Record<string, SubscribeMessageDecision> = {}\n const source = presetValue as Record<string, unknown>\n for (const tmplId of tmplIds) {\n output[tmplId] = normalizeSubscribeDecision(source[tmplId])\n }\n return output\n }\n const sharedDecision = normalizeSubscribeDecision(presetValue)\n return tmplIds.reduce<Record<string, SubscribeMessageDecision>>((result, tmplId) => {\n result[tmplId] = sharedDecision\n return result\n }, {})\n}\n"],"mappings":";;;AAIA,SAAgB,2BAA2B,OAA0C;AACnF,KAAI,UAAU,YAAY,UAAU,YAAY,UAAU,SAAS,UAAU,SAC3E,QAAO;AAET,QAAO;;AAGT,SAAgB,8BAA8B,OAAgB;AAC5D,KAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,QAAO,EAAE;AAEX,QAAO,MACJ,QAAQ,SAAyB,OAAO,SAAS,SAAS,CAC1D,KAAI,SAAQ,KAAK,MAAM,CAAC,CACxB,OAAO,QAAQ;;AAGpB,SAAgB,4BAA4B,SAAmB;CAE7D,MAAM,SADgB,WACO;CAC7B,MAAM,cAAc,OAAO,WAAW,aACjC,OAAsC,QAAQ,GAC/C;AACJ,KAAI,eAAe,OAAO,gBAAgB,UAAU;EAClD,MAAM,SAAmD,EAAE;EAC3D,MAAM,SAAS;AACf,OAAK,MAAM,UAAU,QACnB,QAAO,UAAU,2BAA2B,OAAO,QAAQ;AAE7D,SAAO;;CAET,MAAM,iBAAiB,2BAA2B,YAAY;AAC9D,QAAO,QAAQ,QAAkD,QAAQ,WAAW;AAClF,SAAO,UAAU;AACjB,SAAO;IACN,EAAE,CAAC"}
1
+ {"version":3,"file":"subscribe.mjs","names":["runtimeGlobal"],"sources":["../../../src/runtime/polyfill/subscribe.ts"],"sourcesContent":["import { WEAPP_VITE_WEB_REQUEST_SUBSCRIBE_MESSAGE_KEY } from '@weapp-core/constants'\n\nexport type SubscribeMessageDecision = 'accept' | 'reject' | 'ban' | 'filter'\n\nexport function normalizeSubscribeDecision(value: unknown): SubscribeMessageDecision {\n if (value === 'accept' || value === 'reject' || value === 'ban' || value === 'filter') {\n return value\n }\n return 'accept'\n}\n\nexport function normalizeSubscribeTemplateIds(value: unknown) {\n if (!Array.isArray(value)) {\n return []\n }\n return value\n .filter((item): item is string => typeof item === 'string')\n .map(item => item.trim())\n .filter(Boolean)\n}\n\nexport function resolveSubscribeDecisionMap(tmplIds: string[]) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_REQUEST_SUBSCRIBE_MESSAGE_KEY]\n const presetValue = typeof preset === 'function'\n ? (preset as (ids: string[]) => unknown)(tmplIds)\n : preset\n if (presetValue && typeof presetValue === 'object') {\n const output: Record<string, SubscribeMessageDecision> = {}\n const source = presetValue as Record<string, unknown>\n for (const tmplId of tmplIds) {\n output[tmplId] = normalizeSubscribeDecision(source[tmplId])\n }\n return output\n }\n const sharedDecision = normalizeSubscribeDecision(presetValue)\n return tmplIds.reduce<Record<string, SubscribeMessageDecision>>((result, tmplId) => {\n result[tmplId] = sharedDecision\n return result\n }, {})\n}\n"],"mappings":";;;AAIA,SAAgB,2BAA2B,OAA0C;AACnF,KAAI,UAAU,YAAY,UAAU,YAAY,UAAU,SAAS,UAAU,SAC3E,QAAO;AAET,QAAO;;AAGT,SAAgB,8BAA8B,OAAgB;AAC5D,KAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,QAAO,EAAE;AAEX,QAAO,MACJ,QAAQ,SAAyB,OAAO,SAAS,SAAS,CAC1D,KAAI,SAAQ,KAAK,MAAM,CAAC,CACxB,OAAO,QAAQ;;AAGpB,SAAgB,4BAA4B,SAAmB;CAE7D,MAAM,SAASA,WAAc;CAC7B,MAAM,cAAc,OAAO,WAAW,aACjC,OAAsC,QAAQ,GAC/C;AACJ,KAAI,eAAe,OAAO,gBAAgB,UAAU;EAClD,MAAM,SAAmD,EAAE;EAC3D,MAAM,SAAS;AACf,OAAK,MAAM,UAAU,QACnB,QAAO,UAAU,2BAA2B,OAAO,QAAQ;AAE7D,SAAO;;CAET,MAAM,iBAAiB,2BAA2B,YAAY;AAC9D,QAAO,QAAQ,QAAkD,QAAQ,WAAW;AAClF,SAAO,UAAU;AACjB,SAAO;IACN,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"system.mjs","names":[],"sources":["../../../src/runtime/polyfill/system.ts"],"sourcesContent":["export function resolveSystemName(userAgent: string) {\n if (/android/i.test(userAgent)) {\n return 'Android'\n }\n if (/iphone|ipad|ipod/i.test(userAgent)) {\n return 'iOS'\n }\n if (/windows/i.test(userAgent)) {\n return 'Windows'\n }\n if (/mac os x/i.test(userAgent)) {\n return 'macOS'\n }\n if (/linux/i.test(userAgent)) {\n return 'Linux'\n }\n return 'Unknown'\n}\n\nexport function resolvePlatformName(\n userAgent: string,\n runtimeNavigator: Navigator | undefined,\n) {\n const navigatorWithUAData = runtimeNavigator as Navigator & {\n userAgentData?: { platform?: string }\n }\n const raw = navigatorWithUAData?.userAgentData?.platform\n ?? runtimeNavigator?.platform\n ?? resolveSystemName(userAgent)\n const normalized = raw.toLowerCase()\n if (normalized.includes('android')) {\n return 'android'\n }\n if (normalized.includes('iphone') || normalized.includes('ipad') || normalized.includes('ios')) {\n return 'ios'\n }\n if (normalized.includes('win')) {\n return 'windows'\n }\n if (normalized.includes('mac')) {\n return 'mac'\n }\n if (normalized.includes('linux')) {\n return 'linux'\n }\n return normalized || 'web'\n}\n\nexport function normalizePositiveNumber(value: number | undefined, fallback: number) {\n if (typeof value !== 'number' || Number.isNaN(value) || value <= 0) {\n return fallback\n }\n return value\n}\n\nexport function resolveDeviceOrientation(): 'portrait' | 'landscape' {\n const runtimeWindow = (typeof window !== 'undefined'\n ? window\n : globalThis) as {\n innerWidth?: number\n innerHeight?: number\n }\n const width = normalizePositiveNumber(runtimeWindow.innerWidth, 0)\n const height = normalizePositiveNumber(runtimeWindow.innerHeight, 0)\n if (width > 0 && height > 0 && width > height) {\n return 'landscape'\n }\n return 'portrait'\n}\n\nexport function normalizeMemorySize(memory: unknown) {\n if (typeof memory !== 'number' || Number.isNaN(memory) || memory <= 0) {\n return 0\n }\n return Math.round(memory * 1024)\n}\n\nexport function resolveRuntimeTheme(): 'light' | 'dark' {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return 'light'\n }\n try {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n }\n catch {\n return 'light'\n }\n}\n\nexport function readSystemInfoSnapshot() {\n const runtimeWindow = (typeof window !== 'undefined'\n ? window\n : globalThis) as {\n innerWidth?: number\n innerHeight?: number\n devicePixelRatio?: number\n }\n const runtimeScreen = (typeof screen !== 'undefined'\n ? screen\n : globalThis) as {\n width?: number\n height?: number\n }\n const runtimeNavigator = typeof navigator !== 'undefined' ? navigator : undefined\n const userAgent = runtimeNavigator?.userAgent ?? ''\n const windowWidth = normalizePositiveNumber(\n runtimeWindow.innerWidth,\n normalizePositiveNumber(runtimeScreen.width, 0),\n )\n const windowHeight = normalizePositiveNumber(\n runtimeWindow.innerHeight,\n normalizePositiveNumber(runtimeScreen.height, 0),\n )\n const screenWidth = normalizePositiveNumber(runtimeScreen.width, windowWidth)\n const screenHeight = normalizePositiveNumber(runtimeScreen.height, windowHeight)\n\n return {\n brand: 'web',\n model: runtimeNavigator?.platform ?? 'web',\n pixelRatio: normalizePositiveNumber(runtimeWindow.devicePixelRatio, 1),\n screenWidth,\n screenHeight,\n windowWidth,\n windowHeight,\n statusBarHeight: 0,\n language: runtimeNavigator?.language ?? 'en',\n version: runtimeNavigator?.appVersion ?? userAgent,\n system: resolveSystemName(userAgent),\n platform: resolvePlatformName(userAgent, runtimeNavigator),\n }\n}\n\nexport function buildWindowInfoSnapshot(systemInfo: {\n pixelRatio: number\n screenWidth: number\n screenHeight: number\n windowWidth: number\n windowHeight: number\n statusBarHeight: number\n}) {\n const safeArea = {\n left: 0,\n right: systemInfo.windowWidth,\n top: systemInfo.statusBarHeight,\n bottom: systemInfo.windowHeight,\n width: systemInfo.windowWidth,\n height: Math.max(0, systemInfo.windowHeight - systemInfo.statusBarHeight),\n }\n return {\n pixelRatio: systemInfo.pixelRatio,\n screenWidth: systemInfo.screenWidth,\n screenHeight: systemInfo.screenHeight,\n windowWidth: systemInfo.windowWidth,\n windowHeight: systemInfo.windowHeight,\n statusBarHeight: systemInfo.statusBarHeight,\n screenTop: systemInfo.statusBarHeight,\n safeArea,\n }\n}\n\nexport function readDeviceMemorySize() {\n const runtimeNavigator = (typeof navigator !== 'undefined' ? navigator : undefined) as (Navigator & {\n deviceMemory?: number\n }) | undefined\n return normalizeMemorySize(runtimeNavigator?.deviceMemory)\n}\n\nexport function resolveAccountAppId() {\n const runtimeLocation = (typeof location !== 'undefined' ? location : undefined) as {\n hostname?: string\n } | undefined\n const host = runtimeLocation?.hostname?.trim()\n return host ? `web:${host}` : 'web'\n}\n\nexport function buildMenuButtonRect(windowWidth: number, statusBarHeight: number) {\n const width = 88\n const height = 32\n const right = Math.max(width, windowWidth - 8)\n const top = Math.max(0, statusBarHeight + (44 - height) / 2)\n const left = Math.max(0, right - width)\n return {\n width,\n height,\n top,\n right,\n bottom: top + height,\n left,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"system.mjs","names":["navigatorWithUAData"],"sources":["../../../src/runtime/polyfill/system.ts"],"sourcesContent":["export function resolveSystemName(userAgent: string) {\n if (/android/i.test(userAgent)) {\n return 'Android'\n }\n if (/iphone|ipad|ipod/i.test(userAgent)) {\n return 'iOS'\n }\n if (/windows/i.test(userAgent)) {\n return 'Windows'\n }\n if (/mac os x/i.test(userAgent)) {\n return 'macOS'\n }\n if (/linux/i.test(userAgent)) {\n return 'Linux'\n }\n return 'Unknown'\n}\n\nexport function resolvePlatformName(\n userAgent: string,\n runtimeNavigator: Navigator | undefined,\n) {\n const navigatorWithUAData = runtimeNavigator as Navigator & {\n userAgentData?: { platform?: string }\n }\n const raw = navigatorWithUAData?.userAgentData?.platform\n ?? runtimeNavigator?.platform\n ?? resolveSystemName(userAgent)\n const normalized = raw.toLowerCase()\n if (normalized.includes('android')) {\n return 'android'\n }\n if (normalized.includes('iphone') || normalized.includes('ipad') || normalized.includes('ios')) {\n return 'ios'\n }\n if (normalized.includes('win')) {\n return 'windows'\n }\n if (normalized.includes('mac')) {\n return 'mac'\n }\n if (normalized.includes('linux')) {\n return 'linux'\n }\n return normalized || 'web'\n}\n\nexport function normalizePositiveNumber(value: number | undefined, fallback: number) {\n if (typeof value !== 'number' || Number.isNaN(value) || value <= 0) {\n return fallback\n }\n return value\n}\n\nexport function resolveDeviceOrientation(): 'portrait' | 'landscape' {\n const runtimeWindow = (typeof window !== 'undefined'\n ? window\n : globalThis) as {\n innerWidth?: number\n innerHeight?: number\n }\n const width = normalizePositiveNumber(runtimeWindow.innerWidth, 0)\n const height = normalizePositiveNumber(runtimeWindow.innerHeight, 0)\n if (width > 0 && height > 0 && width > height) {\n return 'landscape'\n }\n return 'portrait'\n}\n\nexport function normalizeMemorySize(memory: unknown) {\n if (typeof memory !== 'number' || Number.isNaN(memory) || memory <= 0) {\n return 0\n }\n return Math.round(memory * 1024)\n}\n\nexport function resolveRuntimeTheme(): 'light' | 'dark' {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return 'light'\n }\n try {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n }\n catch {\n return 'light'\n }\n}\n\nexport function readSystemInfoSnapshot() {\n const runtimeWindow = (typeof window !== 'undefined'\n ? window\n : globalThis) as {\n innerWidth?: number\n innerHeight?: number\n devicePixelRatio?: number\n }\n const runtimeScreen = (typeof screen !== 'undefined'\n ? screen\n : globalThis) as {\n width?: number\n height?: number\n }\n const runtimeNavigator = typeof navigator !== 'undefined' ? navigator : undefined\n const userAgent = runtimeNavigator?.userAgent ?? ''\n const windowWidth = normalizePositiveNumber(\n runtimeWindow.innerWidth,\n normalizePositiveNumber(runtimeScreen.width, 0),\n )\n const windowHeight = normalizePositiveNumber(\n runtimeWindow.innerHeight,\n normalizePositiveNumber(runtimeScreen.height, 0),\n )\n const screenWidth = normalizePositiveNumber(runtimeScreen.width, windowWidth)\n const screenHeight = normalizePositiveNumber(runtimeScreen.height, windowHeight)\n\n return {\n brand: 'web',\n model: runtimeNavigator?.platform ?? 'web',\n pixelRatio: normalizePositiveNumber(runtimeWindow.devicePixelRatio, 1),\n screenWidth,\n screenHeight,\n windowWidth,\n windowHeight,\n statusBarHeight: 0,\n language: runtimeNavigator?.language ?? 'en',\n version: runtimeNavigator?.appVersion ?? userAgent,\n system: resolveSystemName(userAgent),\n platform: resolvePlatformName(userAgent, runtimeNavigator),\n }\n}\n\nexport function buildWindowInfoSnapshot(systemInfo: {\n pixelRatio: number\n screenWidth: number\n screenHeight: number\n windowWidth: number\n windowHeight: number\n statusBarHeight: number\n}) {\n const safeArea = {\n left: 0,\n right: systemInfo.windowWidth,\n top: systemInfo.statusBarHeight,\n bottom: systemInfo.windowHeight,\n width: systemInfo.windowWidth,\n height: Math.max(0, systemInfo.windowHeight - systemInfo.statusBarHeight),\n }\n return {\n pixelRatio: systemInfo.pixelRatio,\n screenWidth: systemInfo.screenWidth,\n screenHeight: systemInfo.screenHeight,\n windowWidth: systemInfo.windowWidth,\n windowHeight: systemInfo.windowHeight,\n statusBarHeight: systemInfo.statusBarHeight,\n screenTop: systemInfo.statusBarHeight,\n safeArea,\n }\n}\n\nexport function readDeviceMemorySize() {\n const runtimeNavigator = (typeof navigator !== 'undefined' ? navigator : undefined) as (Navigator & {\n deviceMemory?: number\n }) | undefined\n return normalizeMemorySize(runtimeNavigator?.deviceMemory)\n}\n\nexport function resolveAccountAppId() {\n const runtimeLocation = (typeof location !== 'undefined' ? location : undefined) as {\n hostname?: string\n } | undefined\n const host = runtimeLocation?.hostname?.trim()\n return host ? `web:${host}` : 'web'\n}\n\nexport function buildMenuButtonRect(windowWidth: number, statusBarHeight: number) {\n const width = 88\n const height = 32\n const right = Math.max(width, windowWidth - 8)\n const top = Math.max(0, statusBarHeight + (44 - height) / 2)\n const left = Math.max(0, right - width)\n return {\n width,\n height,\n top,\n right,\n bottom: top + height,\n left,\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"systemApi.mjs","names":[],"sources":["../../../src/runtime/polyfill/systemApi.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from './async'\nimport {\n buildMenuButtonRect,\n buildWindowInfoSnapshot,\n readDeviceMemorySize,\n readSystemInfoSnapshot,\n resolveAccountAppId,\n resolveDeviceOrientation,\n resolveRuntimeTheme,\n} from './system'\n\nexport function getSystemInfoSyncBridge() {\n return readSystemInfoSnapshot()\n}\n\nexport function getSystemInfoBridge(options?: any): Promise<any> {\n try {\n const info = getSystemInfoSyncBridge()\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'getSystemInfo:ok',\n ...info,\n }))\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getSystemInfo:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport function getWindowInfoBridge() {\n return buildWindowInfoSnapshot(getSystemInfoSyncBridge())\n}\n\nexport function getDeviceInfoBridge() {\n const systemInfo = getSystemInfoSyncBridge()\n return {\n brand: systemInfo.brand,\n model: systemInfo.model,\n system: systemInfo.system,\n platform: systemInfo.platform,\n memorySize: readDeviceMemorySize(),\n benchmarkLevel: -1,\n abi: 'web',\n deviceOrientation: resolveDeviceOrientation(),\n }\n}\n\nexport function getAccountInfoSyncBridge() {\n const appId = resolveAccountAppId()\n return {\n miniProgram: {\n appId,\n envVersion: 'develop',\n version: '0.0.0-web',\n },\n plugin: {},\n }\n}\n\nexport function getAppBaseInfoBridge() {\n const systemInfo = getSystemInfoSyncBridge()\n const runtimeNavigator = typeof navigator !== 'undefined' ? navigator : undefined\n return {\n SDKVersion: 'web',\n language: runtimeNavigator?.language ?? 'en',\n version: runtimeNavigator?.appVersion ?? runtimeNavigator?.userAgent ?? 'web',\n platform: systemInfo.platform,\n enableDebug: false,\n theme: resolveRuntimeTheme(),\n }\n}\n\nexport function getMenuButtonBoundingClientRectBridge() {\n const { windowWidth, statusBarHeight } = getSystemInfoSyncBridge()\n return buildMenuButtonRect(windowWidth, statusBarHeight)\n}\n"],"mappings":";;;;AAcA,SAAgB,0BAA0B;AACxC,QAAO,wBAAwB;;AAGjC,SAAgB,oBAAoB,SAA6B;AAC/D,KAAI;EACF,MAAM,OAAO,yBAAyB;AACtC,SAAO,QAAQ,QAAQ,4BAA4B,SAAS;GAC1D,QAAQ;GACR,GAAG;GACJ,CAAC,CAAC;UAEE,OAAO;EAEZ,MAAM,UAAU,4BAA4B,SAAS,sBADrC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GACe;AACrF,SAAO,QAAQ,OAAO,QAAQ;;;AAIlC,SAAgB,sBAAsB;AACpC,QAAO,wBAAwB,yBAAyB,CAAC;;AAG3D,SAAgB,sBAAsB;CACpC,MAAM,aAAa,yBAAyB;AAC5C,QAAO;EACL,OAAO,WAAW;EAClB,OAAO,WAAW;EAClB,QAAQ,WAAW;EACnB,UAAU,WAAW;EACrB,YAAY,sBAAsB;EAClC,gBAAgB;EAChB,KAAK;EACL,mBAAmB,0BAA0B;EAC9C;;AAGH,SAAgB,2BAA2B;AAEzC,QAAO;EACL,aAAa;GACX,OAHU,qBAAqB;GAI/B,YAAY;GACZ,SAAS;GACV;EACD,QAAQ,EAAE;EACX;;AAGH,SAAgB,uBAAuB;CACrC,MAAM,aAAa,yBAAyB;CAC5C,MAAM,mBAAmB,OAAO,cAAc,cAAc,YAAY;AACxE,QAAO;EACL,YAAY;EACZ,UAAU,kBAAkB,YAAY;EACxC,SAAS,kBAAkB,cAAc,kBAAkB,aAAa;EACxE,UAAU,WAAW;EACrB,aAAa;EACb,OAAO,qBAAqB;EAC7B;;AAGH,SAAgB,wCAAwC;CACtD,MAAM,EAAE,aAAa,oBAAoB,yBAAyB;AAClE,QAAO,oBAAoB,aAAa,gBAAgB"}
1
+ {"version":3,"file":"systemApi.mjs","names":[],"sources":["../../../src/runtime/polyfill/systemApi.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from './async'\nimport {\n buildMenuButtonRect,\n buildWindowInfoSnapshot,\n readDeviceMemorySize,\n readSystemInfoSnapshot,\n resolveAccountAppId,\n resolveDeviceOrientation,\n resolveRuntimeTheme,\n} from './system'\n\nexport function getSystemInfoSyncBridge() {\n return readSystemInfoSnapshot()\n}\n\nexport function getSystemInfoBridge(options?: any): Promise<any> {\n try {\n const info = getSystemInfoSyncBridge()\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'getSystemInfo:ok',\n ...info,\n }))\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getSystemInfo:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport function getWindowInfoBridge() {\n return buildWindowInfoSnapshot(getSystemInfoSyncBridge())\n}\n\nexport function getDeviceInfoBridge() {\n const systemInfo = getSystemInfoSyncBridge()\n return {\n brand: systemInfo.brand,\n model: systemInfo.model,\n system: systemInfo.system,\n platform: systemInfo.platform,\n memorySize: readDeviceMemorySize(),\n benchmarkLevel: -1,\n abi: 'web',\n deviceOrientation: resolveDeviceOrientation(),\n }\n}\n\nexport function getAccountInfoSyncBridge() {\n const appId = resolveAccountAppId()\n return {\n miniProgram: {\n appId,\n envVersion: 'develop',\n version: '0.0.0-web',\n },\n plugin: {},\n }\n}\n\nexport function getAppBaseInfoBridge() {\n const systemInfo = getSystemInfoSyncBridge()\n const runtimeNavigator = typeof navigator !== 'undefined' ? navigator : undefined\n return {\n SDKVersion: 'web',\n language: runtimeNavigator?.language ?? 'en',\n version: runtimeNavigator?.appVersion ?? runtimeNavigator?.userAgent ?? 'web',\n platform: systemInfo.platform,\n enableDebug: false,\n theme: resolveRuntimeTheme(),\n }\n}\n\nexport function getMenuButtonBoundingClientRectBridge() {\n const { windowWidth, statusBarHeight } = getSystemInfoSyncBridge()\n return buildMenuButtonRect(windowWidth, statusBarHeight)\n}\n"],"mappings":";;;;AAcA,SAAgB,0BAA0B;AACxC,QAAO,wBAAwB;;AAGjC,SAAgB,oBAAoB,SAA6B;AAC/D,KAAI;EACF,MAAM,OAAO,yBAAyB;AACtC,SAAO,QAAQ,QAAQ,4BAA4B,SAAS;GAC1D,QAAQ;GACR,GAAG;GACJ,CAAC,CAAC;UAEE,OAAO;EAEZ,MAAM,UAAU,4BAA4B,SAAS,sBADrC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GACe;AACrF,SAAO,QAAQ,OAAO,QAAQ;;;AAIlC,SAAgB,sBAAsB;AACpC,QAAO,wBAAwB,yBAAyB,CAAC;;AAG3D,SAAgB,sBAAsB;CACpC,MAAM,aAAa,yBAAyB;AAC5C,QAAO;EACL,OAAO,WAAW;EAClB,OAAO,WAAW;EAClB,QAAQ,WAAW;EACnB,UAAU,WAAW;EACrB,YAAY,sBAAsB;EAClC,gBAAgB;EAChB,KAAK;EACL,mBAAmB,0BAA0B;EAC9C;;AAGH,SAAgB,2BAA2B;AAEzC,QAAO;EACL,aAAa;GACX,OAHU,qBAGL;GACL,YAAY;GACZ,SAAS;GACV;EACD,QAAQ,EAAE;EACX;;AAGH,SAAgB,uBAAuB;CACrC,MAAM,aAAa,yBAAyB;CAC5C,MAAM,mBAAmB,OAAO,cAAc,cAAc,YAAY;AACxE,QAAO;EACL,YAAY;EACZ,UAAU,kBAAkB,YAAY;EACxC,SAAS,kBAAkB,cAAc,kBAAkB,aAAa;EACxE,UAAU,WAAW;EACrB,aAAa;EACb,OAAO,qBAAqB;EAC7B;;AAGH,SAAgB,wCAAwC;CACtD,MAAM,EAAE,aAAa,oBAAoB,yBAAyB;AAClE,QAAO,oBAAoB,aAAa,gBAAgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ui.mjs","names":[],"sources":["../../../src/runtime/polyfill/ui.ts"],"sourcesContent":["import { WEAPP_VITE_WEB_ACTION_SHEET_SELECT_INDEX_KEY } from '@weapp-core/constants'\n\nconst TOAST_ID = '__weapp_vite_web_toast__'\nconst TOAST_SELECTOR = `#${TOAST_ID}`\nconst LOADING_ID = '__weapp_vite_web_loading__'\nconst LOADING_SELECTOR = `#${LOADING_ID}`\n\nexport function getGlobalDialogHandlers() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n return {\n confirm: runtimeGlobal.confirm as ((message?: string) => boolean) | undefined,\n alert: runtimeGlobal.alert as ((message?: string) => void) | undefined,\n prompt: runtimeGlobal.prompt as ((message?: string, defaultValue?: string) => string | null) | undefined,\n }\n}\n\nexport function getToastElement() {\n if (typeof document === 'undefined') {\n return undefined\n }\n const existing = document.querySelector(TOAST_SELECTOR) as HTMLElement | null\n if (existing) {\n return existing\n }\n const toast = document.createElement('div')\n toast.setAttribute('id', TOAST_ID)\n toast.setAttribute('data-weapp-web-toast', 'true')\n toast.setAttribute('hidden', 'true')\n toast.setAttribute('role', 'status')\n toast.setAttribute('aria-live', 'polite')\n if (!document.body) {\n return undefined\n }\n document.body.append(toast)\n return toast\n}\n\nexport function setToastVisible(toast: HTMLElement, visible: boolean) {\n if (visible) {\n toast.removeAttribute('hidden')\n }\n else {\n toast.setAttribute('hidden', 'true')\n }\n toast.setAttribute('style', [\n 'position: fixed',\n 'left: 50%',\n 'top: 15%',\n 'transform: translate(-50%, 0)',\n 'max-width: min(560px, 90vw)',\n 'padding: 10px 14px',\n 'border-radius: 8px',\n 'background: rgba(17, 24, 39, 0.9)',\n 'color: #ffffff',\n 'font-size: 14px',\n 'line-height: 1.5',\n 'text-align: center',\n 'pointer-events: none',\n 'z-index: 2147483646',\n `opacity: ${visible ? '1' : '0'}`,\n ].join(';'))\n}\n\nexport function hideToastElement() {\n const toast = getToastElement()\n if (!toast) {\n return\n }\n setToastVisible(toast, false)\n}\n\nexport function resolveToastPrefix(icon: 'success' | 'error' | 'none' | undefined) {\n if (icon === 'none') {\n return ''\n }\n if (icon === 'error') {\n return '[error] '\n }\n return '[ok] '\n}\n\nexport function getLoadingElement() {\n if (typeof document === 'undefined') {\n return undefined\n }\n const existing = document.querySelector(LOADING_SELECTOR) as HTMLElement | null\n if (existing) {\n return existing\n }\n if (!document.body) {\n return undefined\n }\n const loading = document.createElement('div')\n loading.setAttribute('id', LOADING_ID)\n loading.setAttribute('data-weapp-web-loading', 'true')\n loading.setAttribute('hidden', 'true')\n loading.setAttribute('role', 'status')\n loading.setAttribute('aria-live', 'polite')\n document.body.append(loading)\n return loading\n}\n\nexport function setLoadingVisible(\n loading: HTMLElement,\n visible: boolean,\n title: string,\n mask: boolean,\n) {\n if (visible) {\n loading.removeAttribute('hidden')\n }\n else {\n loading.setAttribute('hidden', 'true')\n }\n loading.textContent = title\n loading.setAttribute('style', [\n 'position: fixed',\n 'left: 50%',\n 'top: 45%',\n 'transform: translate(-50%, -50%)',\n 'min-width: 120px',\n 'max-width: min(560px, 90vw)',\n 'padding: 14px 18px',\n 'border-radius: 10px',\n 'background: rgba(17, 24, 39, 0.92)',\n 'color: #ffffff',\n 'font-size: 14px',\n 'line-height: 1.5',\n 'text-align: center',\n `pointer-events: ${mask ? 'auto' : 'none'}`,\n 'z-index: 2147483647',\n `opacity: ${visible ? '1' : '0'}`,\n `box-shadow: ${mask ? '0 0 0 99999px rgba(0, 0, 0, 0.28)' : 'none'}`,\n ].join(';'))\n}\n\nexport function resolveActionSheetSelection(itemList: string[]) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_ACTION_SHEET_SELECT_INDEX_KEY]\n if (typeof preset === 'function') {\n const result = preset(itemList)\n if (Number.isInteger(result) && result >= 0 && result < itemList.length) {\n return result\n }\n }\n if (Number.isInteger(preset) && (preset as number) >= 0 && (preset as number) < itemList.length) {\n return preset as number\n }\n const { prompt } = getGlobalDialogHandlers()\n if (typeof prompt === 'function') {\n const lines = itemList.map((item, index) => `[${index}] ${item}`)\n const input = prompt(['请选择操作:', ...lines].join('\\n'), '0')\n if (input === null) {\n return null\n }\n const parsed = Number.parseInt(String(input), 10)\n if (Number.isInteger(parsed) && parsed >= 0 && parsed < itemList.length) {\n return parsed\n }\n }\n return 0\n}\n\nexport function resolveModalSelection(options?: {\n title?: string\n content?: string\n showCancel?: boolean\n}) {\n const title = options?.title?.trim() ?? ''\n const content = options?.content?.trim() ?? ''\n const message = [title, content].filter(Boolean).join('\\n\\n') || ' '\n const showCancel = options?.showCancel !== false\n const { confirm, alert } = getGlobalDialogHandlers()\n\n let confirmed = true\n if (showCancel) {\n if (typeof confirm === 'function') {\n confirmed = confirm(message)\n }\n }\n else if (typeof alert === 'function') {\n alert(message)\n }\n\n return {\n confirm: confirmed,\n cancel: !confirmed,\n }\n}\n\nexport function normalizeActionSheetItems(itemList: unknown) {\n if (!Array.isArray(itemList)) {\n return []\n }\n return itemList.map(item => String(item ?? '').trim()).filter(Boolean)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ui.mjs","names":["runtimeGlobal"],"sources":["../../../src/runtime/polyfill/ui.ts"],"sourcesContent":["import { WEAPP_VITE_WEB_ACTION_SHEET_SELECT_INDEX_KEY } from '@weapp-core/constants'\n\nconst TOAST_ID = '__weapp_vite_web_toast__'\nconst TOAST_SELECTOR = `#${TOAST_ID}`\nconst LOADING_ID = '__weapp_vite_web_loading__'\nconst LOADING_SELECTOR = `#${LOADING_ID}`\n\nexport function getGlobalDialogHandlers() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n return {\n confirm: runtimeGlobal.confirm as ((message?: string) => boolean) | undefined,\n alert: runtimeGlobal.alert as ((message?: string) => void) | undefined,\n prompt: runtimeGlobal.prompt as ((message?: string, defaultValue?: string) => string | null) | undefined,\n }\n}\n\nexport function getToastElement() {\n if (typeof document === 'undefined') {\n return undefined\n }\n const existing = document.querySelector(TOAST_SELECTOR) as HTMLElement | null\n if (existing) {\n return existing\n }\n const toast = document.createElement('div')\n toast.setAttribute('id', TOAST_ID)\n toast.setAttribute('data-weapp-web-toast', 'true')\n toast.setAttribute('hidden', 'true')\n toast.setAttribute('role', 'status')\n toast.setAttribute('aria-live', 'polite')\n if (!document.body) {\n return undefined\n }\n document.body.append(toast)\n return toast\n}\n\nexport function setToastVisible(toast: HTMLElement, visible: boolean) {\n if (visible) {\n toast.removeAttribute('hidden')\n }\n else {\n toast.setAttribute('hidden', 'true')\n }\n toast.setAttribute('style', [\n 'position: fixed',\n 'left: 50%',\n 'top: 15%',\n 'transform: translate(-50%, 0)',\n 'max-width: min(560px, 90vw)',\n 'padding: 10px 14px',\n 'border-radius: 8px',\n 'background: rgba(17, 24, 39, 0.9)',\n 'color: #ffffff',\n 'font-size: 14px',\n 'line-height: 1.5',\n 'text-align: center',\n 'pointer-events: none',\n 'z-index: 2147483646',\n `opacity: ${visible ? '1' : '0'}`,\n ].join(';'))\n}\n\nexport function hideToastElement() {\n const toast = getToastElement()\n if (!toast) {\n return\n }\n setToastVisible(toast, false)\n}\n\nexport function resolveToastPrefix(icon: 'success' | 'error' | 'none' | undefined) {\n if (icon === 'none') {\n return ''\n }\n if (icon === 'error') {\n return '[error] '\n }\n return '[ok] '\n}\n\nexport function getLoadingElement() {\n if (typeof document === 'undefined') {\n return undefined\n }\n const existing = document.querySelector(LOADING_SELECTOR) as HTMLElement | null\n if (existing) {\n return existing\n }\n if (!document.body) {\n return undefined\n }\n const loading = document.createElement('div')\n loading.setAttribute('id', LOADING_ID)\n loading.setAttribute('data-weapp-web-loading', 'true')\n loading.setAttribute('hidden', 'true')\n loading.setAttribute('role', 'status')\n loading.setAttribute('aria-live', 'polite')\n document.body.append(loading)\n return loading\n}\n\nexport function setLoadingVisible(\n loading: HTMLElement,\n visible: boolean,\n title: string,\n mask: boolean,\n) {\n if (visible) {\n loading.removeAttribute('hidden')\n }\n else {\n loading.setAttribute('hidden', 'true')\n }\n loading.textContent = title\n loading.setAttribute('style', [\n 'position: fixed',\n 'left: 50%',\n 'top: 45%',\n 'transform: translate(-50%, -50%)',\n 'min-width: 120px',\n 'max-width: min(560px, 90vw)',\n 'padding: 14px 18px',\n 'border-radius: 10px',\n 'background: rgba(17, 24, 39, 0.92)',\n 'color: #ffffff',\n 'font-size: 14px',\n 'line-height: 1.5',\n 'text-align: center',\n `pointer-events: ${mask ? 'auto' : 'none'}`,\n 'z-index: 2147483647',\n `opacity: ${visible ? '1' : '0'}`,\n `box-shadow: ${mask ? '0 0 0 99999px rgba(0, 0, 0, 0.28)' : 'none'}`,\n ].join(';'))\n}\n\nexport function resolveActionSheetSelection(itemList: string[]) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_ACTION_SHEET_SELECT_INDEX_KEY]\n if (typeof preset === 'function') {\n const result = preset(itemList)\n if (Number.isInteger(result) && result >= 0 && result < itemList.length) {\n return result\n }\n }\n if (Number.isInteger(preset) && (preset as number) >= 0 && (preset as number) < itemList.length) {\n return preset as number\n }\n const { prompt } = getGlobalDialogHandlers()\n if (typeof prompt === 'function') {\n const lines = itemList.map((item, index) => `[${index}] ${item}`)\n const input = prompt(['请选择操作:', ...lines].join('\\n'), '0')\n if (input === null) {\n return null\n }\n const parsed = Number.parseInt(String(input), 10)\n if (Number.isInteger(parsed) && parsed >= 0 && parsed < itemList.length) {\n return parsed\n }\n }\n return 0\n}\n\nexport function resolveModalSelection(options?: {\n title?: string\n content?: string\n showCancel?: boolean\n}) {\n const title = options?.title?.trim() ?? ''\n const content = options?.content?.trim() ?? ''\n const message = [title, content].filter(Boolean).join('\\n\\n') || ' '\n const showCancel = options?.showCancel !== false\n const { confirm, alert } = getGlobalDialogHandlers()\n\n let confirmed = true\n if (showCancel) {\n if (typeof confirm === 'function') {\n confirmed = confirm(message)\n }\n }\n else if (typeof alert === 'function') {\n alert(message)\n }\n\n return {\n confirm: confirmed,\n cancel: !confirmed,\n }\n}\n\nexport function normalizeActionSheetItems(itemList: unknown) {\n if (!Array.isArray(itemList)) {\n return []\n }\n return itemList.map(item => String(item ?? '').trim()).filter(Boolean)\n}\n"],"mappings":";;;AAEA,MAAM,WAAW;AACjB,MAAM,iBAAiB,IAAI;AAC3B,MAAM,aAAa;AACnB,MAAM,mBAAmB,IAAI;AAE7B,SAAgB,0BAA0B;CACxC,MAAM,gBAAgB;AACtB,QAAO;EACL,SAAS,cAAc;EACvB,OAAO,cAAc;EACrB,QAAQ,cAAc;EACvB;;AAGH,SAAgB,kBAAkB;AAChC,KAAI,OAAO,aAAa,YACtB;CAEF,MAAM,WAAW,SAAS,cAAc,eAAe;AACvD,KAAI,SACF,QAAO;CAET,MAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,OAAM,aAAa,MAAM,SAAS;AAClC,OAAM,aAAa,wBAAwB,OAAO;AAClD,OAAM,aAAa,UAAU,OAAO;AACpC,OAAM,aAAa,QAAQ,SAAS;AACpC,OAAM,aAAa,aAAa,SAAS;AACzC,KAAI,CAAC,SAAS,KACZ;AAEF,UAAS,KAAK,OAAO,MAAM;AAC3B,QAAO;;AAGT,SAAgB,gBAAgB,OAAoB,SAAkB;AACpE,KAAI,QACF,OAAM,gBAAgB,SAAS;KAG/B,OAAM,aAAa,UAAU,OAAO;AAEtC,OAAM,aAAa,SAAS;EAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAY,UAAU,MAAM;EAC7B,CAAC,KAAK,IAAI,CAAC;;AAGd,SAAgB,mBAAmB;CACjC,MAAM,QAAQ,iBAAiB;AAC/B,KAAI,CAAC,MACH;AAEF,iBAAgB,OAAO,MAAM;;AAG/B,SAAgB,mBAAmB,MAAgD;AACjF,KAAI,SAAS,OACX,QAAO;AAET,KAAI,SAAS,QACX,QAAO;AAET,QAAO;;AAGT,SAAgB,oBAAoB;AAClC,KAAI,OAAO,aAAa,YACtB;CAEF,MAAM,WAAW,SAAS,cAAc,iBAAiB;AACzD,KAAI,SACF,QAAO;AAET,KAAI,CAAC,SAAS,KACZ;CAEF,MAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,SAAQ,aAAa,MAAM,WAAW;AACtC,SAAQ,aAAa,0BAA0B,OAAO;AACtD,SAAQ,aAAa,UAAU,OAAO;AACtC,SAAQ,aAAa,QAAQ,SAAS;AACtC,SAAQ,aAAa,aAAa,SAAS;AAC3C,UAAS,KAAK,OAAO,QAAQ;AAC7B,QAAO;;AAGT,SAAgB,kBACd,SACA,SACA,OACA,MACA;AACA,KAAI,QACF,SAAQ,gBAAgB,SAAS;KAGjC,SAAQ,aAAa,UAAU,OAAO;AAExC,SAAQ,cAAc;AACtB,SAAQ,aAAa,SAAS;EAC5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,mBAAmB,OAAO,SAAS;EACnC;EACA,YAAY,UAAU,MAAM;EAC5B,eAAe,OAAO,sCAAsC;EAC7D,CAAC,KAAK,IAAI,CAAC;;AAGd,SAAgB,4BAA4B,UAAoB;CAE9D,MAAM,SAASA,WAAc;AAC7B,KAAI,OAAO,WAAW,YAAY;EAChC,MAAM,SAAS,OAAO,SAAS;AAC/B,MAAI,OAAO,UAAU,OAAO,IAAI,UAAU,KAAK,SAAS,SAAS,OAC/D,QAAO;;AAGX,KAAI,OAAO,UAAU,OAAO,IAAK,UAAqB,KAAM,SAAoB,SAAS,OACvF,QAAO;CAET,MAAM,EAAE,WAAW,yBAAyB;AAC5C,KAAI,OAAO,WAAW,YAAY;EAEhC,MAAM,QAAQ,OAAO,CAAC,UAAU,GADlB,SAAS,KAAK,MAAM,UAAU,IAAI,MAAM,IAAI,OAClB,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI;AAC1D,MAAI,UAAU,KACZ,QAAO;EAET,MAAM,SAAS,OAAO,SAAS,OAAO,MAAM,EAAE,GAAG;AACjD,MAAI,OAAO,UAAU,OAAO,IAAI,UAAU,KAAK,SAAS,SAAS,OAC/D,QAAO;;AAGX,QAAO;;AAGT,SAAgB,sBAAsB,SAInC;CAGD,MAAM,UAAU,CAFF,SAAS,OAAO,MAAM,IAAI,IACxB,SAAS,SAAS,MAAM,IAAI,GACZ,CAAC,OAAO,QAAQ,CAAC,KAAK,OAAO,IAAI;CACjE,MAAM,aAAa,SAAS,eAAe;CAC3C,MAAM,EAAE,SAAS,UAAU,yBAAyB;CAEpD,IAAI,YAAY;AAChB,KAAI,YACF;MAAI,OAAO,YAAY,WACrB,aAAY,QAAQ,QAAQ;YAGvB,OAAO,UAAU,WACxB,OAAM,QAAQ;AAGhB,QAAO;EACL,SAAS;EACT,QAAQ,CAAC;EACV;;AAGH,SAAgB,0BAA0B,UAAmB;AAC3D,KAAI,CAAC,MAAM,QAAQ,SAAS,CAC1B,QAAO,EAAE;AAEX,QAAO,SAAS,KAAI,SAAQ,OAAO,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"videoContext.mjs","names":[],"sources":["../../../src/runtime/polyfill/videoContext.ts"],"sourcesContent":["import type { VideoContext } from './types/platformRuntime'\n\nfunction resolveVideoElementById(videoId: string) {\n if (typeof document === 'undefined') {\n return undefined\n }\n const normalized = String(videoId ?? '').trim()\n if (!normalized) {\n return undefined\n }\n const fromId = document.getElementById(normalized)\n if (fromId && 'play' in fromId && 'pause' in fromId) {\n return fromId as unknown as HTMLVideoElement\n }\n const escaped = typeof CSS !== 'undefined' && typeof CSS.escape === 'function'\n ? CSS.escape(normalized)\n : normalized.replace(/\"/g, '\\\\\"')\n const fromQuery = document.querySelector(`video#${escaped}`)\n if (fromQuery && 'play' in fromQuery && 'pause' in fromQuery) {\n return fromQuery as HTMLVideoElement\n }\n return undefined\n}\n\nexport function createVideoContextBridge(videoId: string): VideoContext {\n const getVideo = () => resolveVideoElementById(videoId)\n return {\n play() {\n getVideo()?.play?.()\n },\n pause() {\n getVideo()?.pause?.()\n },\n stop() {\n const video = getVideo()\n if (!video) {\n return\n }\n video.pause?.()\n try {\n video.currentTime = 0\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n seek(position: number) {\n if (!Number.isFinite(position)) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.currentTime = Math.max(0, position)\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n playbackRate(rate: number) {\n if (!Number.isFinite(rate) || rate <= 0) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.playbackRate = rate\n }\n catch {\n // ignore unsupported playbackRate mutation\n }\n },\n requestFullScreen() {\n const video = getVideo() as (HTMLVideoElement & { requestFullscreen?: () => Promise<void> | void }) | undefined\n video?.requestFullscreen?.()\n },\n exitFullScreen() {\n const runtimeDocument = document as { exitFullscreen?: () => Promise<void> | void }\n runtimeDocument.exitFullscreen?.()\n },\n }\n}\n"],"mappings":";AAEA,SAAS,wBAAwB,SAAiB;AAChD,KAAI,OAAO,aAAa,YACtB;CAEF,MAAM,aAAa,OAAO,WAAW,GAAG,CAAC,MAAM;AAC/C,KAAI,CAAC,WACH;CAEF,MAAM,SAAS,SAAS,eAAe,WAAW;AAClD,KAAI,UAAU,UAAU,UAAU,WAAW,OAC3C,QAAO;CAET,MAAM,UAAU,OAAO,QAAQ,eAAe,OAAO,IAAI,WAAW,aAChE,IAAI,OAAO,WAAW,GACtB,WAAW,QAAQ,MAAM,OAAM;CACnC,MAAM,YAAY,SAAS,cAAc,SAAS,UAAU;AAC5D,KAAI,aAAa,UAAU,aAAa,WAAW,UACjD,QAAO;;AAKX,SAAgB,yBAAyB,SAA+B;CACtE,MAAM,iBAAiB,wBAAwB,QAAQ;AACvD,QAAO;EACL,OAAO;AACL,aAAU,EAAE,QAAQ;;EAEtB,QAAQ;AACN,aAAU,EAAE,SAAS;;EAEvB,OAAO;GACL,MAAM,QAAQ,UAAU;AACxB,OAAI,CAAC,MACH;AAEF,SAAM,SAAS;AACf,OAAI;AACF,UAAM,cAAc;WAEhB;;EAIR,KAAK,UAAkB;AACrB,OAAI,CAAC,OAAO,SAAS,SAAS,CAC5B;GAEF,MAAM,QAAQ,UAAU;AACxB,OAAI,CAAC,MACH;AAEF,OAAI;AACF,UAAM,cAAc,KAAK,IAAI,GAAG,SAAS;WAErC;;EAIR,aAAa,MAAc;AACzB,OAAI,CAAC,OAAO,SAAS,KAAK,IAAI,QAAQ,EACpC;GAEF,MAAM,QAAQ,UAAU;AACxB,OAAI,CAAC,MACH;AAEF,OAAI;AACF,UAAM,eAAe;WAEjB;;EAIR,oBAAoB;AAElB,GADc,UAAU,EACjB,qBAAqB;;EAE9B,iBAAiB;AAEf,GADwB,SACR,kBAAkB;;EAErC"}
1
+ {"version":3,"file":"videoContext.mjs","names":[],"sources":["../../../src/runtime/polyfill/videoContext.ts"],"sourcesContent":["import type { VideoContext } from './types/platformRuntime'\n\nfunction resolveVideoElementById(videoId: string) {\n if (typeof document === 'undefined') {\n return undefined\n }\n const normalized = String(videoId ?? '').trim()\n if (!normalized) {\n return undefined\n }\n const fromId = document.getElementById(normalized)\n if (fromId && 'play' in fromId && 'pause' in fromId) {\n return fromId as unknown as HTMLVideoElement\n }\n const escaped = typeof CSS !== 'undefined' && typeof CSS.escape === 'function'\n ? CSS.escape(normalized)\n : normalized.replace(/\"/g, '\\\\\"')\n const fromQuery = document.querySelector(`video#${escaped}`)\n if (fromQuery && 'play' in fromQuery && 'pause' in fromQuery) {\n return fromQuery as HTMLVideoElement\n }\n return undefined\n}\n\nexport function createVideoContextBridge(videoId: string): VideoContext {\n const getVideo = () => resolveVideoElementById(videoId)\n return {\n play() {\n getVideo()?.play?.()\n },\n pause() {\n getVideo()?.pause?.()\n },\n stop() {\n const video = getVideo()\n if (!video) {\n return\n }\n video.pause?.()\n try {\n video.currentTime = 0\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n seek(position: number) {\n if (!Number.isFinite(position)) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.currentTime = Math.max(0, position)\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n playbackRate(rate: number) {\n if (!Number.isFinite(rate) || rate <= 0) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.playbackRate = rate\n }\n catch {\n // ignore unsupported playbackRate mutation\n }\n },\n requestFullScreen() {\n const video = getVideo() as (HTMLVideoElement & { requestFullscreen?: () => Promise<void> | void }) | undefined\n video?.requestFullscreen?.()\n },\n exitFullScreen() {\n const runtimeDocument = document as { exitFullscreen?: () => Promise<void> | void }\n runtimeDocument.exitFullscreen?.()\n },\n }\n}\n"],"mappings":";AAEA,SAAS,wBAAwB,SAAiB;AAChD,KAAI,OAAO,aAAa,YACtB;CAEF,MAAM,aAAa,OAAO,WAAW,GAAG,CAAC,MAAM;AAC/C,KAAI,CAAC,WACH;CAEF,MAAM,SAAS,SAAS,eAAe,WAAW;AAClD,KAAI,UAAU,UAAU,UAAU,WAAW,OAC3C,QAAO;CAET,MAAM,UAAU,OAAO,QAAQ,eAAe,OAAO,IAAI,WAAW,aAChE,IAAI,OAAO,WAAW,GACtB,WAAW,QAAQ,MAAM,OAAM;CACnC,MAAM,YAAY,SAAS,cAAc,SAAS,UAAU;AAC5D,KAAI,aAAa,UAAU,aAAa,WAAW,UACjD,QAAO;;AAKX,SAAgB,yBAAyB,SAA+B;CACtE,MAAM,iBAAiB,wBAAwB,QAAQ;AACvD,QAAO;EACL,OAAO;AACL,aAAU,EAAE,QAAQ;;EAEtB,QAAQ;AACN,aAAU,EAAE,SAAS;;EAEvB,OAAO;GACL,MAAM,QAAQ,UAAU;AACxB,OAAI,CAAC,MACH;AAEF,SAAM,SAAS;AACf,OAAI;AACF,UAAM,cAAc;WAEhB;;EAIR,KAAK,UAAkB;AACrB,OAAI,CAAC,OAAO,SAAS,SAAS,CAC5B;GAEF,MAAM,QAAQ,UAAU;AACxB,OAAI,CAAC,MACH;AAEF,OAAI;AACF,UAAM,cAAc,KAAK,IAAI,GAAG,SAAS;WAErC;;EAIR,aAAa,MAAc;AACzB,OAAI,CAAC,OAAO,SAAS,KAAK,IAAI,QAAQ,EACpC;GAEF,MAAM,QAAQ,UAAU;AACxB,OAAI,CAAC,MACH;AAEF,OAAI;AACF,UAAM,eAAe;WAEjB;;EAIR,oBAAoB;AAElB,GADc,UACT,EAAE,qBAAqB;;EAE9B,iBAAiB;AAEf,YAAgB,kBAAkB;;EAErC"}