@weapp-vite/web 1.3.30 → 1.3.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/compiler/wxml/attributes.mjs.map +1 -1
- package/dist/compiler/wxml/compile.mjs.map +1 -1
- package/dist/compiler/wxml/interpolation.mjs.map +1 -1
- package/dist/compiler/wxml/navigation.mjs.map +1 -1
- package/dist/compiler/wxml/parser.mjs.map +1 -1
- package/dist/compiler/wxml/renderer.mjs.map +1 -1
- package/dist/compiler/wxml/specialNodes.mjs.map +1 -1
- package/dist/compiler/wxs.mjs.map +1 -1
- package/dist/plugin/entry.mjs.map +1 -1
- package/dist/plugin/files.mjs.map +1 -1
- package/dist/plugin/index.mjs.map +1 -1
- package/dist/plugin/path.mjs.map +1 -1
- package/dist/plugin/register.mjs.map +1 -1
- package/dist/plugin/scan.mjs.map +1 -1
- package/dist/plugin/scanConfig.mjs.map +1 -1
- package/dist/runtime/button/helpers.mjs.map +1 -1
- package/dist/runtime/button/index.mjs.map +1 -1
- package/dist/runtime/component/dom.mjs.map +1 -1
- package/dist/runtime/component/events.mjs.map +1 -1
- package/dist/runtime/legacyTemplate/dom.mjs.map +1 -1
- package/dist/runtime/legacyTemplate/expression.mjs.map +1 -1
- package/dist/runtime/legacyTemplate/index.mjs.map +1 -1
- package/dist/runtime/navigationBar/index.mjs.map +1 -1
- package/dist/runtime/polyfill/ad.mjs.map +1 -1
- package/dist/runtime/polyfill/appState.mjs.map +1 -1
- package/dist/runtime/polyfill/async.mjs.map +1 -1
- package/dist/runtime/polyfill/auth.mjs.map +1 -1
- package/dist/runtime/polyfill/capability.mjs.map +1 -1
- package/dist/runtime/polyfill/cloud.mjs.map +1 -1
- package/dist/runtime/polyfill/device.mjs.map +1 -1
- package/dist/runtime/polyfill/filePicker.mjs.map +1 -1
- package/dist/runtime/polyfill/files.mjs.map +1 -1
- package/dist/runtime/polyfill/location.mjs.map +1 -1
- package/dist/runtime/polyfill/locationApi.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaActions.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaApi/info.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaApi/picker.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaApi/preview.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaProcess.mjs.map +1 -1
- package/dist/runtime/polyfill/network/request.mjs.map +1 -1
- package/dist/runtime/polyfill/network/status.mjs.map +1 -1
- package/dist/runtime/polyfill/platformRuntime.mjs.map +1 -1
- package/dist/runtime/polyfill/subscribe.mjs.map +1 -1
- package/dist/runtime/polyfill/system.mjs.map +1 -1
- package/dist/runtime/polyfill/ui.mjs.map +1 -1
- package/dist/runtime/polyfill/videoContext.mjs.map +1 -1
- package/dist/runtime/polyfill/windowResize.mjs.map +1 -1
- package/dist/runtime/polyfill/worker.mjs.map +1 -1
- package/dist/runtime/renderContext.mjs.map +1 -1
- package/dist/runtime/style.mjs.map +1 -1
- package/dist/shared/slugify.mjs.map +1 -1
- package/dist/shared/wxml.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.mjs","names":[],"sources":["../../../src/runtime/polyfill/files.ts"],"sourcesContent":["export const WEB_USER_DATA_PATH = '/__weapp_vite_web_user_data__'\n\ninterface MemoryFileRecord {\n kind: 'text' | 'binary'\n text?: string\n bytes?: ArrayBuffer\n}\n\nconst memoryFileStorage = new Map<string, MemoryFileRecord>()\n\nexport function normalizeFilePath(filePath: unknown) {\n if (typeof filePath !== 'string') {\n return ''\n }\n return filePath.trim()\n}\n\nfunction normalizeFileEncoding(encoding?: string) {\n if (typeof encoding !== 'string') {\n return ''\n }\n return encoding.trim().toLowerCase()\n}\n\nfunction cloneArrayBuffer(buffer: ArrayBuffer) {\n return buffer.slice(0)\n}\n\nfunction toArrayBuffer(data: ArrayBuffer | ArrayBufferView) {\n if (data instanceof ArrayBuffer) {\n return cloneArrayBuffer(data)\n }\n const view = data as ArrayBufferView\n return new Uint8Array(view.buffer, view.byteOffset, view.byteLength).slice().buffer\n}\n\nfunction decodeArrayBufferToText(buffer: ArrayBuffer, encoding?: string) {\n if (typeof TextDecoder === 'function') {\n try {\n return new TextDecoder(encoding || 'utf-8').decode(new Uint8Array(buffer))\n }\n catch {\n return new TextDecoder().decode(new Uint8Array(buffer))\n }\n }\n return Array.from(new Uint8Array(buffer))\n .map(byte => String.fromCharCode(byte))\n .join('')\n}\n\nexport function writeFileSyncInternal(\n filePath: string,\n data: string | ArrayBuffer | ArrayBufferView,\n) {\n const normalizedPath = normalizeFilePath(filePath)\n if (!normalizedPath) {\n throw new TypeError('writeFileSync:fail invalid filePath')\n }\n if (typeof data === 'string') {\n memoryFileStorage.set(normalizedPath, {\n kind: 'text',\n text: data,\n })\n return\n }\n memoryFileStorage.set(normalizedPath, {\n kind: 'binary',\n bytes: toArrayBuffer(data),\n })\n}\n\nexport function readFileSyncInternal(filePath: string, encoding?: string) {\n const normalizedPath = normalizeFilePath(filePath)\n if (!normalizedPath) {\n throw new TypeError('readFileSync:fail invalid filePath')\n }\n const record = memoryFileStorage.get(normalizedPath)\n if (!record) {\n throw new TypeError(`readFileSync:fail no such file ${normalizedPath}`)\n }\n const normalizedEncoding = normalizeFileEncoding(encoding)\n if (record.kind === 'text') {\n return record.text ?? ''\n }\n const bytes = record.bytes ? cloneArrayBuffer(record.bytes) : new ArrayBuffer(0)\n if (normalizedEncoding) {\n return decodeArrayBufferToText(bytes, normalizedEncoding)\n }\n return bytes\n}\n\nexport function resolveUploadFileName(filePath: string) {\n const normalized = filePath.split(/[?#]/)[0] ?? ''\n const segments = normalized.split('/')\n return segments[segments.length - 1] || 'file'\n}\n\nexport async function resolveUploadFileBlob(\n filePath: string,\n runtimeFetch: typeof fetch | undefined,\n) {\n const record = memoryFileStorage.get(filePath)\n if (record) {\n if (record.kind === 'text') {\n return new Blob([record.text ?? ''], { type: 'text/plain;charset=utf-8' })\n }\n return new Blob([record.bytes ?? new ArrayBuffer(0)])\n }\n if (/^(?:https?:|blob:|data:)/i.test(filePath) && runtimeFetch) {\n try {\n const response = await runtimeFetch(filePath, { method: 'GET' })\n return await response.blob()\n }\n catch {\n // fallback to plain text payload\n }\n }\n return new Blob([filePath], { type: 'text/plain;charset=utf-8' })\n}\n\nfunction cloneMemoryFileRecord(record: MemoryFileRecord): MemoryFileRecord {\n if (record.kind === 'text') {\n return {\n kind: 'text',\n text: record.text ?? '',\n }\n }\n return {\n kind: 'binary',\n bytes: record.bytes ? cloneArrayBuffer(record.bytes) : new ArrayBuffer(0),\n }\n}\n\nexport function resolveSaveFilePath(tempFilePath: string, customPath?: string) {\n const targetPath = typeof customPath === 'string' ? customPath.trim() : ''\n if (targetPath) {\n return targetPath\n }\n return `${WEB_USER_DATA_PATH}/${resolveUploadFileName(tempFilePath)}`\n}\n\nexport function saveMemoryFile(tempFilePath: string, savedFilePath: string) {\n const sourceRecord = memoryFileStorage.get(tempFilePath)\n if (sourceRecord) {\n memoryFileStorage.set(savedFilePath, cloneMemoryFileRecord(sourceRecord))\n return\n }\n memoryFileStorage.set(savedFilePath, {\n kind: 'text',\n text: tempFilePath,\n })\n}\n\nexport function resolveOpenDocumentUrl(filePath: string) {\n const record = memoryFileStorage.get(filePath)\n const runtimeUrl = (globalThis as {\n URL?: {\n createObjectURL?: (value: unknown) => string\n }\n }).URL\n\n if (record) {\n if (record.kind === 'text') {\n const text = record.text ?? ''\n if (typeof Blob === 'function' && runtimeUrl?.createObjectURL) {\n return runtimeUrl.createObjectURL(new Blob([text], { type: 'text/plain;charset=utf-8' }))\n }\n return `data:text/plain;charset=utf-8,${encodeURIComponent(text)}`\n }\n const bytes = record.bytes ?? new ArrayBuffer(0)\n if (typeof Blob === 'function' && runtimeUrl?.createObjectURL) {\n return runtimeUrl.createObjectURL(new Blob([bytes]))\n }\n return ''\n }\n\n if (/^(?:https?:|blob:|data:)/i.test(filePath)) {\n return filePath\n }\n try {\n const runtimeLocation = (typeof location !== 'undefined' ? location : undefined) as { href?: string } | undefined\n if (runtimeLocation?.href) {\n return new URL(filePath, runtimeLocation.href).toString()\n }\n }\n catch {\n // fallback to raw filePath\n }\n return filePath\n}\n"],"mappings":";AAAA,MAAa,qBAAqB;AAQlC,MAAM,oCAAoB,IAAI,IAA8B;AAE5D,SAAgB,kBAAkB,UAAmB;CACnD,IAAI,OAAO,aAAa,UACtB,OAAO;CAET,OAAO,SAAS,KAAK;AACvB;AAEA,SAAS,sBAAsB,UAAmB;CAChD,IAAI,OAAO,aAAa,UACtB,OAAO;CAET,OAAO,SAAS,KAAK,
|
|
1
|
+
{"version":3,"file":"files.mjs","names":[],"sources":["../../../src/runtime/polyfill/files.ts"],"sourcesContent":["export const WEB_USER_DATA_PATH = '/__weapp_vite_web_user_data__'\n\ninterface MemoryFileRecord {\n kind: 'text' | 'binary'\n text?: string\n bytes?: ArrayBuffer\n}\n\nconst memoryFileStorage = new Map<string, MemoryFileRecord>()\n\nexport function normalizeFilePath(filePath: unknown) {\n if (typeof filePath !== 'string') {\n return ''\n }\n return filePath.trim()\n}\n\nfunction normalizeFileEncoding(encoding?: string) {\n if (typeof encoding !== 'string') {\n return ''\n }\n return encoding.trim().toLowerCase()\n}\n\nfunction cloneArrayBuffer(buffer: ArrayBuffer) {\n return buffer.slice(0)\n}\n\nfunction toArrayBuffer(data: ArrayBuffer | ArrayBufferView) {\n if (data instanceof ArrayBuffer) {\n return cloneArrayBuffer(data)\n }\n const view = data as ArrayBufferView\n return new Uint8Array(view.buffer, view.byteOffset, view.byteLength).slice().buffer\n}\n\nfunction decodeArrayBufferToText(buffer: ArrayBuffer, encoding?: string) {\n if (typeof TextDecoder === 'function') {\n try {\n return new TextDecoder(encoding || 'utf-8').decode(new Uint8Array(buffer))\n }\n catch {\n return new TextDecoder().decode(new Uint8Array(buffer))\n }\n }\n return Array.from(new Uint8Array(buffer))\n .map(byte => String.fromCharCode(byte))\n .join('')\n}\n\nexport function writeFileSyncInternal(\n filePath: string,\n data: string | ArrayBuffer | ArrayBufferView,\n) {\n const normalizedPath = normalizeFilePath(filePath)\n if (!normalizedPath) {\n throw new TypeError('writeFileSync:fail invalid filePath')\n }\n if (typeof data === 'string') {\n memoryFileStorage.set(normalizedPath, {\n kind: 'text',\n text: data,\n })\n return\n }\n memoryFileStorage.set(normalizedPath, {\n kind: 'binary',\n bytes: toArrayBuffer(data),\n })\n}\n\nexport function readFileSyncInternal(filePath: string, encoding?: string) {\n const normalizedPath = normalizeFilePath(filePath)\n if (!normalizedPath) {\n throw new TypeError('readFileSync:fail invalid filePath')\n }\n const record = memoryFileStorage.get(normalizedPath)\n if (!record) {\n throw new TypeError(`readFileSync:fail no such file ${normalizedPath}`)\n }\n const normalizedEncoding = normalizeFileEncoding(encoding)\n if (record.kind === 'text') {\n return record.text ?? ''\n }\n const bytes = record.bytes ? cloneArrayBuffer(record.bytes) : new ArrayBuffer(0)\n if (normalizedEncoding) {\n return decodeArrayBufferToText(bytes, normalizedEncoding)\n }\n return bytes\n}\n\nexport function resolveUploadFileName(filePath: string) {\n const normalized = filePath.split(/[?#]/)[0] ?? ''\n const segments = normalized.split('/')\n return segments[segments.length - 1] || 'file'\n}\n\nexport async function resolveUploadFileBlob(\n filePath: string,\n runtimeFetch: typeof fetch | undefined,\n) {\n const record = memoryFileStorage.get(filePath)\n if (record) {\n if (record.kind === 'text') {\n return new Blob([record.text ?? ''], { type: 'text/plain;charset=utf-8' })\n }\n return new Blob([record.bytes ?? new ArrayBuffer(0)])\n }\n if (/^(?:https?:|blob:|data:)/i.test(filePath) && runtimeFetch) {\n try {\n const response = await runtimeFetch(filePath, { method: 'GET' })\n return await response.blob()\n }\n catch {\n // fallback to plain text payload\n }\n }\n return new Blob([filePath], { type: 'text/plain;charset=utf-8' })\n}\n\nfunction cloneMemoryFileRecord(record: MemoryFileRecord): MemoryFileRecord {\n if (record.kind === 'text') {\n return {\n kind: 'text',\n text: record.text ?? '',\n }\n }\n return {\n kind: 'binary',\n bytes: record.bytes ? cloneArrayBuffer(record.bytes) : new ArrayBuffer(0),\n }\n}\n\nexport function resolveSaveFilePath(tempFilePath: string, customPath?: string) {\n const targetPath = typeof customPath === 'string' ? customPath.trim() : ''\n if (targetPath) {\n return targetPath\n }\n return `${WEB_USER_DATA_PATH}/${resolveUploadFileName(tempFilePath)}`\n}\n\nexport function saveMemoryFile(tempFilePath: string, savedFilePath: string) {\n const sourceRecord = memoryFileStorage.get(tempFilePath)\n if (sourceRecord) {\n memoryFileStorage.set(savedFilePath, cloneMemoryFileRecord(sourceRecord))\n return\n }\n memoryFileStorage.set(savedFilePath, {\n kind: 'text',\n text: tempFilePath,\n })\n}\n\nexport function resolveOpenDocumentUrl(filePath: string) {\n const record = memoryFileStorage.get(filePath)\n const runtimeUrl = (globalThis as {\n URL?: {\n createObjectURL?: (value: unknown) => string\n }\n }).URL\n\n if (record) {\n if (record.kind === 'text') {\n const text = record.text ?? ''\n if (typeof Blob === 'function' && runtimeUrl?.createObjectURL) {\n return runtimeUrl.createObjectURL(new Blob([text], { type: 'text/plain;charset=utf-8' }))\n }\n return `data:text/plain;charset=utf-8,${encodeURIComponent(text)}`\n }\n const bytes = record.bytes ?? new ArrayBuffer(0)\n if (typeof Blob === 'function' && runtimeUrl?.createObjectURL) {\n return runtimeUrl.createObjectURL(new Blob([bytes]))\n }\n return ''\n }\n\n if (/^(?:https?:|blob:|data:)/i.test(filePath)) {\n return filePath\n }\n try {\n const runtimeLocation = (typeof location !== 'undefined' ? location : undefined) as { href?: string } | undefined\n if (runtimeLocation?.href) {\n return new URL(filePath, runtimeLocation.href).toString()\n }\n }\n catch {\n // fallback to raw filePath\n }\n return filePath\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location.mjs","names":["runtimeGlobal"],"sources":["../../../src/runtime/polyfill/location.ts"],"sourcesContent":["import {\n WEAPP_VITE_WEB_CHOOSE_ADDRESS_KEY,\n WEAPP_VITE_WEB_CHOOSE_LOCATION_KEY,\n WEAPP_VITE_WEB_FUZZY_LOCATION_KEY,\n} from '@weapp-core/constants'\n\nconst ADDRESS_PROMPT_SPLIT_RE = /[,,]/\n\nexport function normalizeGeoNumber(value: unknown, fallback = 0) {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return fallback\n }\n return value\n}\n\ninterface ReadCurrentLocationOptions {\n isHighAccuracy?: boolean\n altitude?: boolean\n highAccuracyExpireTime?: number\n}\n\ninterface LocationCoordinatesSnapshot {\n latitude: number\n longitude: number\n speed: number\n accuracy: number\n altitude: number\n verticalAccuracy: number\n horizontalAccuracy: number\n}\n\nexport function readCurrentLocation(options?: ReadCurrentLocationOptions) {\n const runtimeNavigator = (typeof navigator !== 'undefined' ? navigator : undefined) as (Navigator & {\n geolocation?: {\n getCurrentPosition?: (\n success: (position: {\n coords: {\n latitude?: number\n longitude?: number\n speed?: number | null\n accuracy?: number\n altitude?: number | null\n altitudeAccuracy?: number | null\n }\n }) => void,\n error?: (err: { message?: string }) => void,\n opts?: {\n enableHighAccuracy?: boolean\n timeout?: number\n },\n ) => void\n }\n }) | undefined\n const geolocation = runtimeNavigator?.geolocation\n if (!geolocation || typeof geolocation.getCurrentPosition !== 'function') {\n throw new Error('geolocation is unavailable')\n }\n const timeout = typeof options?.highAccuracyExpireTime === 'number' && options.highAccuracyExpireTime > 0\n ? options.highAccuracyExpireTime\n : undefined\n return new Promise<LocationCoordinatesSnapshot>((resolve, reject) => {\n geolocation.getCurrentPosition(\n (position) => {\n const coords = position.coords ?? {}\n const accuracy = normalizeGeoNumber(coords.accuracy, 0)\n resolve({\n latitude: normalizeGeoNumber(coords.latitude, 0),\n longitude: normalizeGeoNumber(coords.longitude, 0),\n speed: normalizeGeoNumber(coords.speed, -1),\n accuracy,\n altitude: normalizeGeoNumber(coords.altitude, 0),\n verticalAccuracy: normalizeGeoNumber(coords.altitudeAccuracy, 0),\n horizontalAccuracy: accuracy,\n })\n },\n (error) => {\n reject(new Error(error?.message ?? 'unknown error'))\n },\n {\n enableHighAccuracy: Boolean(options?.isHighAccuracy || options?.altitude),\n timeout,\n },\n )\n })\n}\n\nexport function normalizeFuzzyCoordinate(value: number) {\n return Number(value.toFixed(2))\n}\n\nexport function readPresetFuzzyLocation() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_FUZZY_LOCATION_KEY]\n if (!preset || typeof preset !== 'object') {\n return null\n }\n const value = preset as Record<string, unknown>\n const latitude = Number(value.latitude)\n const longitude = Number(value.longitude)\n if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) {\n return null\n }\n return {\n latitude: normalizeFuzzyCoordinate(latitude),\n longitude: normalizeFuzzyCoordinate(longitude),\n accuracy: Math.max(1000, normalizeGeoNumber(value.accuracy, 1000)),\n }\n}\n\nexport function readPresetChooseLocation() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_CHOOSE_LOCATION_KEY]\n if (!preset || typeof preset !== 'object') {\n return null\n }\n const value = preset as Record<string, unknown>\n const latitude = Number(value.latitude)\n const longitude = Number(value.longitude)\n if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) {\n return null\n }\n return {\n name: typeof value.name === 'string' ? value.name : '',\n address: typeof value.address === 'string' ? value.address : '',\n latitude,\n longitude,\n }\n}\n\nexport function readPresetChooseAddress() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_CHOOSE_ADDRESS_KEY]\n if (!preset || typeof preset !== 'object') {\n return null\n }\n const value = preset as Record<string, unknown>\n return {\n userName: typeof value.userName === 'string' ? value.userName : '',\n postalCode: typeof value.postalCode === 'string' ? value.postalCode : '',\n provinceName: typeof value.provinceName === 'string' ? value.provinceName : '',\n cityName: typeof value.cityName === 'string' ? value.cityName : '',\n countyName: typeof value.countyName === 'string' ? value.countyName : '',\n detailInfo: typeof value.detailInfo === 'string' ? value.detailInfo : '',\n nationalCode: typeof value.nationalCode === 'string' ? value.nationalCode : '',\n telNumber: typeof value.telNumber === 'string' ? value.telNumber : '',\n }\n}\n\nexport function parseChooseAddressPromptInput(input: unknown) {\n const [provinceName = '', cityName = '', countyName = '', detailInfo = '', userName = '', telNumber = '']\n = String(input).split(ADDRESS_PROMPT_SPLIT_RE).map(item => item.trim())\n if (!provinceName || !cityName || !countyName || !detailInfo) {\n return null\n }\n return {\n userName,\n postalCode: '',\n provinceName,\n cityName,\n countyName,\n detailInfo,\n nationalCode: '',\n telNumber,\n }\n}\n\nexport function parseChooseLocationPromptInput(input: unknown) {\n const [latText = '', lonText = ''] = String(input).split(',').map(item => item.trim())\n const latitude = Number(latText)\n const longitude = Number(lonText)\n if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) {\n return null\n }\n return {\n latitude,\n longitude,\n }\n}\n"],"mappings":";;;AAMA,MAAM,0BAA0B;AAEhC,SAAgB,mBAAmB,OAAgB,WAAW,GAAG;CAC/D,IAAI,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,GACjD,OAAO;CAET,OAAO;AACT;AAkBA,SAAgB,oBAAoB,SAAsC;CAsBxE,MAAM,eArBoB,OAAO,cAAc,cAAc,YAAY,
|
|
1
|
+
{"version":3,"file":"location.mjs","names":["runtimeGlobal"],"sources":["../../../src/runtime/polyfill/location.ts"],"sourcesContent":["import {\n WEAPP_VITE_WEB_CHOOSE_ADDRESS_KEY,\n WEAPP_VITE_WEB_CHOOSE_LOCATION_KEY,\n WEAPP_VITE_WEB_FUZZY_LOCATION_KEY,\n} from '@weapp-core/constants'\n\nconst ADDRESS_PROMPT_SPLIT_RE = /[,,]/\n\nexport function normalizeGeoNumber(value: unknown, fallback = 0) {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return fallback\n }\n return value\n}\n\ninterface ReadCurrentLocationOptions {\n isHighAccuracy?: boolean\n altitude?: boolean\n highAccuracyExpireTime?: number\n}\n\ninterface LocationCoordinatesSnapshot {\n latitude: number\n longitude: number\n speed: number\n accuracy: number\n altitude: number\n verticalAccuracy: number\n horizontalAccuracy: number\n}\n\nexport function readCurrentLocation(options?: ReadCurrentLocationOptions) {\n const runtimeNavigator = (typeof navigator !== 'undefined' ? navigator : undefined) as (Navigator & {\n geolocation?: {\n getCurrentPosition?: (\n success: (position: {\n coords: {\n latitude?: number\n longitude?: number\n speed?: number | null\n accuracy?: number\n altitude?: number | null\n altitudeAccuracy?: number | null\n }\n }) => void,\n error?: (err: { message?: string }) => void,\n opts?: {\n enableHighAccuracy?: boolean\n timeout?: number\n },\n ) => void\n }\n }) | undefined\n const geolocation = runtimeNavigator?.geolocation\n if (!geolocation || typeof geolocation.getCurrentPosition !== 'function') {\n throw new Error('geolocation is unavailable')\n }\n const timeout = typeof options?.highAccuracyExpireTime === 'number' && options.highAccuracyExpireTime > 0\n ? options.highAccuracyExpireTime\n : undefined\n return new Promise<LocationCoordinatesSnapshot>((resolve, reject) => {\n geolocation.getCurrentPosition(\n (position) => {\n const coords = position.coords ?? {}\n const accuracy = normalizeGeoNumber(coords.accuracy, 0)\n resolve({\n latitude: normalizeGeoNumber(coords.latitude, 0),\n longitude: normalizeGeoNumber(coords.longitude, 0),\n speed: normalizeGeoNumber(coords.speed, -1),\n accuracy,\n altitude: normalizeGeoNumber(coords.altitude, 0),\n verticalAccuracy: normalizeGeoNumber(coords.altitudeAccuracy, 0),\n horizontalAccuracy: accuracy,\n })\n },\n (error) => {\n reject(new Error(error?.message ?? 'unknown error'))\n },\n {\n enableHighAccuracy: Boolean(options?.isHighAccuracy || options?.altitude),\n timeout,\n },\n )\n })\n}\n\nexport function normalizeFuzzyCoordinate(value: number) {\n return Number(value.toFixed(2))\n}\n\nexport function readPresetFuzzyLocation() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_FUZZY_LOCATION_KEY]\n if (!preset || typeof preset !== 'object') {\n return null\n }\n const value = preset as Record<string, unknown>\n const latitude = Number(value.latitude)\n const longitude = Number(value.longitude)\n if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) {\n return null\n }\n return {\n latitude: normalizeFuzzyCoordinate(latitude),\n longitude: normalizeFuzzyCoordinate(longitude),\n accuracy: Math.max(1000, normalizeGeoNumber(value.accuracy, 1000)),\n }\n}\n\nexport function readPresetChooseLocation() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_CHOOSE_LOCATION_KEY]\n if (!preset || typeof preset !== 'object') {\n return null\n }\n const value = preset as Record<string, unknown>\n const latitude = Number(value.latitude)\n const longitude = Number(value.longitude)\n if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) {\n return null\n }\n return {\n name: typeof value.name === 'string' ? value.name : '',\n address: typeof value.address === 'string' ? value.address : '',\n latitude,\n longitude,\n }\n}\n\nexport function readPresetChooseAddress() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_CHOOSE_ADDRESS_KEY]\n if (!preset || typeof preset !== 'object') {\n return null\n }\n const value = preset as Record<string, unknown>\n return {\n userName: typeof value.userName === 'string' ? value.userName : '',\n postalCode: typeof value.postalCode === 'string' ? value.postalCode : '',\n provinceName: typeof value.provinceName === 'string' ? value.provinceName : '',\n cityName: typeof value.cityName === 'string' ? value.cityName : '',\n countyName: typeof value.countyName === 'string' ? value.countyName : '',\n detailInfo: typeof value.detailInfo === 'string' ? value.detailInfo : '',\n nationalCode: typeof value.nationalCode === 'string' ? value.nationalCode : '',\n telNumber: typeof value.telNumber === 'string' ? value.telNumber : '',\n }\n}\n\nexport function parseChooseAddressPromptInput(input: unknown) {\n const [provinceName = '', cityName = '', countyName = '', detailInfo = '', userName = '', telNumber = '']\n = String(input).split(ADDRESS_PROMPT_SPLIT_RE).map(item => item.trim())\n if (!provinceName || !cityName || !countyName || !detailInfo) {\n return null\n }\n return {\n userName,\n postalCode: '',\n provinceName,\n cityName,\n countyName,\n detailInfo,\n nationalCode: '',\n telNumber,\n }\n}\n\nexport function parseChooseLocationPromptInput(input: unknown) {\n const [latText = '', lonText = ''] = String(input).split(',').map(item => item.trim())\n const latitude = Number(latText)\n const longitude = Number(lonText)\n if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) {\n return null\n }\n return {\n latitude,\n longitude,\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locationApi.mjs","names":[],"sources":["../../../src/runtime/polyfill/locationApi.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from './async'\nimport {\n normalizeFuzzyCoordinate,\n normalizeGeoNumber,\n parseChooseAddressPromptInput,\n parseChooseLocationPromptInput,\n readCurrentLocation,\n readPresetChooseAddress,\n readPresetChooseLocation,\n readPresetFuzzyLocation,\n} from './location'\nimport { openTargetInNewWindow } from './mediaActions'\nimport { getGlobalDialogHandlers } from './ui'\n\nexport function makePhoneCallBridge(options?: any) {\n const phoneNumber = typeof options?.phoneNumber === 'string' ? options.phoneNumber.trim() : ''\n if (!phoneNumber) {\n const failure = callMiniProgramAsyncFailure(options, 'makePhoneCall:fail invalid phoneNumber')\n return Promise.reject(failure)\n }\n if (typeof window !== 'undefined' && typeof window.open === 'function') {\n try {\n window.open(`tel:${encodeURIComponent(phoneNumber)}`, '_self')\n }\n catch {\n // ignore browser restrictions and keep API-level success semantics\n }\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'makePhoneCall:ok' }))\n}\n\nexport function chooseAddressBridge(options?: any) {\n const preset = readPresetChooseAddress()\n if (preset) {\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseAddress:ok',\n ...preset,\n }))\n }\n const { prompt } = getGlobalDialogHandlers()\n if (typeof prompt === 'function') {\n const input = prompt('请输入地址(格式:省,市,区,详细地址,姓名,电话)', '')\n if (input == null) {\n const failure = callMiniProgramAsyncFailure(options, 'chooseAddress:fail cancel')\n return Promise.reject(failure)\n }\n const parsed = parseChooseAddressPromptInput(input)\n if (!parsed) {\n const failure = callMiniProgramAsyncFailure(options, 'chooseAddress:fail invalid input')\n return Promise.reject(failure)\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseAddress:ok',\n ...parsed,\n }))\n }\n const failure = callMiniProgramAsyncFailure(options, 'chooseAddress:fail address picker is unavailable')\n return Promise.reject(failure)\n}\n\nexport function chooseLocationBridge(options?: any) {\n const preset = readPresetChooseLocation()\n if (preset) {\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseLocation:ok',\n ...preset,\n }))\n }\n const { prompt } = getGlobalDialogHandlers()\n if (typeof prompt === 'function') {\n const input = prompt('请输入坐标(格式:latitude,longitude)', '')\n if (input == null) {\n const failure = callMiniProgramAsyncFailure(options, 'chooseLocation:fail cancel')\n return Promise.reject(failure)\n }\n const parsed = parseChooseLocationPromptInput(input)\n if (!parsed) {\n const failure = callMiniProgramAsyncFailure(options, 'chooseLocation:fail invalid latitude/longitude')\n return Promise.reject(failure)\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseLocation:ok',\n name: '',\n address: '',\n latitude: parsed.latitude,\n longitude: parsed.longitude,\n }))\n }\n const failure = callMiniProgramAsyncFailure(options, 'chooseLocation:fail location picker is unavailable')\n return Promise.reject(failure)\n}\n\nexport function openLocationBridge(options?: any) {\n const latitude = options?.latitude\n const longitude = options?.longitude\n if (typeof latitude !== 'number' || Number.isNaN(latitude) || typeof longitude !== 'number' || Number.isNaN(longitude)) {\n const failure = callMiniProgramAsyncFailure(options, 'openLocation:fail invalid latitude/longitude')\n return Promise.reject(failure)\n }\n const query = `${latitude},${longitude}`\n const target = `https://maps.google.com/?q=${encodeURIComponent(query)}`\n openTargetInNewWindow(target)\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'openLocation:ok' }))\n}\n\nexport function getLocationBridge(options?: any) {\n try {\n return readCurrentLocation(options)\n .then(location => callMiniProgramAsyncSuccess(options, {\n errMsg: 'getLocation:ok',\n ...location,\n }))\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getLocation:fail ${message}`)\n return Promise.reject(failure)\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getLocation:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport async function getFuzzyLocationBridge(options?: any) {\n const preset = readPresetFuzzyLocation()\n if (preset) {\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'getFuzzyLocation:ok',\n ...preset,\n })\n }\n try {\n const location = await getLocationBridge()\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'getFuzzyLocation:ok',\n latitude: normalizeFuzzyCoordinate(location.latitude),\n longitude: normalizeFuzzyCoordinate(location.longitude),\n accuracy: Math.max(1000, normalizeGeoNumber(location.accuracy, 1000)),\n })\n }\n catch (error) {\n const message = typeof (error as { errMsg?: unknown })?.errMsg === 'string'\n ? (error as { errMsg: string }).errMsg\n : error instanceof Error\n ? error.message\n : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getFuzzyLocation:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n"],"mappings":";;;;;;AAiBA,SAAgB,oBAAoB,SAAe;CACjD,MAAM,cAAc,OAAO,SAAS,gBAAgB,WAAW,QAAQ,YAAY,KAAK,IAAI;CAC5F,IAAI,CAAC,aAAa;EAChB,MAAM,UAAU,4BAA4B,SAAS,wCAAwC;EAC7F,OAAO,QAAQ,OAAO,OAAO;CAC/B;CACA,IAAI,OAAO,WAAW,eAAe,OAAO,OAAO,SAAS,YAC1D,IAAI;EACF,OAAO,KAAK,OAAO,mBAAmB,WAAW,KAAK,OAAO;CAC/D,QACM,CAEN;CAEF,OAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,mBAAmB,CAAC,CAAC;AAC7F;AAEA,SAAgB,oBAAoB,SAAe;CACjD,MAAM,SAAS,wBAAwB;CACvC,IAAI,QACF,OAAO,QAAQ,QAAQ,4BAA4B,SAAS;EAC1D,QAAQ;EACR,GAAG;CACL,CAAC,CAAC;CAEJ,MAAM,EAAE,WAAW,wBAAwB;CAC3C,IAAI,OAAO,WAAW,YAAY;EAChC,MAAM,QAAQ,OAAO,8BAA8B,EAAE;EACrD,IAAI,SAAS,MAAM;GACjB,MAAM,UAAU,4BAA4B,SAAS,2BAA2B;GAChF,OAAO,QAAQ,OAAO,OAAO;EAC/B;EACA,MAAM,SAAS,8BAA8B,KAAK;EAClD,IAAI,CAAC,QAAQ;GACX,MAAM,UAAU,4BAA4B,SAAS,kCAAkC;GACvF,OAAO,QAAQ,OAAO,OAAO;EAC/B;EACA,OAAO,QAAQ,QAAQ,4BAA4B,SAAS;GAC1D,QAAQ;GACR,GAAG;EACL,CAAC,CAAC;CACJ;CACA,MAAM,UAAU,4BAA4B,SAAS,kDAAkD;CACvG,OAAO,QAAQ,OAAO,OAAO;AAC/B;AAEA,SAAgB,qBAAqB,SAAe;CAClD,MAAM,SAAS,yBAAyB;CACxC,IAAI,QACF,OAAO,QAAQ,QAAQ,4BAA4B,SAAS;EAC1D,QAAQ;EACR,GAAG;CACL,CAAC,CAAC;CAEJ,MAAM,EAAE,WAAW,wBAAwB;CAC3C,IAAI,OAAO,WAAW,YAAY;EAChC,MAAM,QAAQ,OAAO,gCAAgC,EAAE;EACvD,IAAI,SAAS,MAAM;GACjB,MAAM,UAAU,4BAA4B,SAAS,4BAA4B;GACjF,OAAO,QAAQ,OAAO,OAAO;EAC/B;EACA,MAAM,SAAS,+BAA+B,KAAK;EACnD,IAAI,CAAC,QAAQ;GACX,MAAM,UAAU,4BAA4B,SAAS,gDAAgD;GACrG,OAAO,QAAQ,OAAO,OAAO;EAC/B;EACA,OAAO,QAAQ,QAAQ,4BAA4B,SAAS;GAC1D,QAAQ;GACR,MAAM;GACN,SAAS;GACT,UAAU,OAAO;GACjB,WAAW,OAAO;EACpB,CAAC,CAAC;CACJ;CACA,MAAM,UAAU,4BAA4B,SAAS,oDAAoD;CACzG,OAAO,QAAQ,OAAO,OAAO;AAC/B;AAEA,SAAgB,mBAAmB,SAAe;CAChD,MAAM,WAAW,SAAS;CAC1B,MAAM,YAAY,SAAS;CAC3B,IAAI,OAAO,aAAa,YAAY,OAAO,MAAM,QAAQ,KAAK,OAAO,cAAc,YAAY,OAAO,MAAM,SAAS,GAAG;EACtH,MAAM,UAAU,4BAA4B,SAAS,8CAA8C;EACnG,OAAO,QAAQ,OAAO,OAAO;CAC/B;CACA,MAAM,QAAQ,GAAG,SAAS,GAAG;CAE7B,sBAAsB,8BADuB,mBAAmB,KAAK,GACzC;CAC5B,OAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,kBAAkB,CAAC,CAAC;AAC5F;AAEA,SAAgB,kBAAkB,SAAe;CAC/C,IAAI;EACF,OAAO,oBAAoB,OAAO,
|
|
1
|
+
{"version":3,"file":"locationApi.mjs","names":[],"sources":["../../../src/runtime/polyfill/locationApi.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from './async'\nimport {\n normalizeFuzzyCoordinate,\n normalizeGeoNumber,\n parseChooseAddressPromptInput,\n parseChooseLocationPromptInput,\n readCurrentLocation,\n readPresetChooseAddress,\n readPresetChooseLocation,\n readPresetFuzzyLocation,\n} from './location'\nimport { openTargetInNewWindow } from './mediaActions'\nimport { getGlobalDialogHandlers } from './ui'\n\nexport function makePhoneCallBridge(options?: any) {\n const phoneNumber = typeof options?.phoneNumber === 'string' ? options.phoneNumber.trim() : ''\n if (!phoneNumber) {\n const failure = callMiniProgramAsyncFailure(options, 'makePhoneCall:fail invalid phoneNumber')\n return Promise.reject(failure)\n }\n if (typeof window !== 'undefined' && typeof window.open === 'function') {\n try {\n window.open(`tel:${encodeURIComponent(phoneNumber)}`, '_self')\n }\n catch {\n // ignore browser restrictions and keep API-level success semantics\n }\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'makePhoneCall:ok' }))\n}\n\nexport function chooseAddressBridge(options?: any) {\n const preset = readPresetChooseAddress()\n if (preset) {\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseAddress:ok',\n ...preset,\n }))\n }\n const { prompt } = getGlobalDialogHandlers()\n if (typeof prompt === 'function') {\n const input = prompt('请输入地址(格式:省,市,区,详细地址,姓名,电话)', '')\n if (input == null) {\n const failure = callMiniProgramAsyncFailure(options, 'chooseAddress:fail cancel')\n return Promise.reject(failure)\n }\n const parsed = parseChooseAddressPromptInput(input)\n if (!parsed) {\n const failure = callMiniProgramAsyncFailure(options, 'chooseAddress:fail invalid input')\n return Promise.reject(failure)\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseAddress:ok',\n ...parsed,\n }))\n }\n const failure = callMiniProgramAsyncFailure(options, 'chooseAddress:fail address picker is unavailable')\n return Promise.reject(failure)\n}\n\nexport function chooseLocationBridge(options?: any) {\n const preset = readPresetChooseLocation()\n if (preset) {\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseLocation:ok',\n ...preset,\n }))\n }\n const { prompt } = getGlobalDialogHandlers()\n if (typeof prompt === 'function') {\n const input = prompt('请输入坐标(格式:latitude,longitude)', '')\n if (input == null) {\n const failure = callMiniProgramAsyncFailure(options, 'chooseLocation:fail cancel')\n return Promise.reject(failure)\n }\n const parsed = parseChooseLocationPromptInput(input)\n if (!parsed) {\n const failure = callMiniProgramAsyncFailure(options, 'chooseLocation:fail invalid latitude/longitude')\n return Promise.reject(failure)\n }\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseLocation:ok',\n name: '',\n address: '',\n latitude: parsed.latitude,\n longitude: parsed.longitude,\n }))\n }\n const failure = callMiniProgramAsyncFailure(options, 'chooseLocation:fail location picker is unavailable')\n return Promise.reject(failure)\n}\n\nexport function openLocationBridge(options?: any) {\n const latitude = options?.latitude\n const longitude = options?.longitude\n if (typeof latitude !== 'number' || Number.isNaN(latitude) || typeof longitude !== 'number' || Number.isNaN(longitude)) {\n const failure = callMiniProgramAsyncFailure(options, 'openLocation:fail invalid latitude/longitude')\n return Promise.reject(failure)\n }\n const query = `${latitude},${longitude}`\n const target = `https://maps.google.com/?q=${encodeURIComponent(query)}`\n openTargetInNewWindow(target)\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'openLocation:ok' }))\n}\n\nexport function getLocationBridge(options?: any) {\n try {\n return readCurrentLocation(options)\n .then(location => callMiniProgramAsyncSuccess(options, {\n errMsg: 'getLocation:ok',\n ...location,\n }))\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getLocation:fail ${message}`)\n return Promise.reject(failure)\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getLocation:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport async function getFuzzyLocationBridge(options?: any) {\n const preset = readPresetFuzzyLocation()\n if (preset) {\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'getFuzzyLocation:ok',\n ...preset,\n })\n }\n try {\n const location = await getLocationBridge()\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'getFuzzyLocation:ok',\n latitude: normalizeFuzzyCoordinate(location.latitude),\n longitude: normalizeFuzzyCoordinate(location.longitude),\n accuracy: Math.max(1000, normalizeGeoNumber(location.accuracy, 1000)),\n })\n }\n catch (error) {\n const message = typeof (error as { errMsg?: unknown })?.errMsg === 'string'\n ? (error as { errMsg: string }).errMsg\n : error instanceof Error\n ? error.message\n : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getFuzzyLocation:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaActions.mjs","names":["runtimeGlobal"],"sources":["../../../src/runtime/polyfill/mediaActions.ts"],"sourcesContent":["import { WEAPP_VITE_WEB_OPEN_VIDEO_EDITOR_KEY } from '@weapp-core/constants'\n\ninterface PreviewMediaSourceRecord {\n url: string\n type: 'image' | 'video'\n poster: string\n}\n\nexport function openTargetInNewWindow(target: string) {\n if (typeof window === 'undefined' || typeof window.open !== 'function') {\n return\n }\n try {\n window.open(target, '_blank', 'noopener,noreferrer')\n }\n catch {\n // ignore browser popup restrictions and keep API-level success semantics\n }\n}\n\nexport function normalizePreviewMediaSources(sources: unknown): PreviewMediaSourceRecord[] {\n if (!Array.isArray(sources)) {\n return []\n }\n return sources\n .map((source) => {\n if (!source || typeof source !== 'object') {\n return null\n }\n const sourceRecord = source as Record<string, unknown>\n const url = typeof sourceRecord.url === 'string' ? sourceRecord.url.trim() : ''\n if (!url) {\n return null\n }\n return {\n url,\n type: sourceRecord.type === 'video' ? 'video' : 'image',\n poster: typeof sourceRecord.poster === 'string' ? sourceRecord.poster : '',\n }\n })\n .filter((item): item is PreviewMediaSourceRecord => Boolean(item))\n}\n\nexport function readOpenVideoEditorPreset(src: string) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_OPEN_VIDEO_EDITOR_KEY]\n if (typeof preset === 'function') {\n const value = (preset as (value: string) => unknown)(src)\n return typeof value === 'string' && value.trim() ? value.trim() : ''\n }\n if (typeof preset === 'string' && preset.trim()) {\n return preset.trim()\n }\n if (preset && typeof preset === 'object') {\n const value = (preset as Record<string, unknown>)[src]\n return typeof value === 'string' && value.trim() ? value.trim() : ''\n }\n return ''\n}\n\nexport function triggerDownload(filePath: string, fileName = '') {\n if (typeof document === 'undefined' || !document.body) {\n return\n }\n try {\n const link = document.createElement('a')\n link.setAttribute('href', filePath)\n link.setAttribute('download', fileName)\n link.setAttribute('style', 'display:none')\n document.body.append(link)\n link.click?.()\n if (link.parentNode) {\n link.parentNode.removeChild(link)\n }\n }\n catch {\n // keep API-level success semantics for browser restrictions\n }\n}\n"],"mappings":";;;AAQA,SAAgB,sBAAsB,QAAgB;CACpD,IAAI,OAAO,WAAW,eAAe,OAAO,OAAO,SAAS,YAC1D;CAEF,IAAI;EACF,OAAO,KAAK,QAAQ,UAAU,qBAAqB;CACrD,QACM,CAEN;AACF;AAEA,SAAgB,6BAA6B,SAA8C;CACzF,IAAI,CAAC,MAAM,QAAQ,OAAO,GACxB,OAAO,CAAC;CAEV,OAAO,QACJ,KAAK,WAAW;EACf,IAAI,CAAC,UAAU,OAAO,WAAW,UAC/B,OAAO;EAET,MAAM,eAAe;EACrB,MAAM,MAAM,OAAO,aAAa,QAAQ,WAAW,aAAa,IAAI,KAAK,IAAI;EAC7E,IAAI,CAAC,KACH,OAAO;EAET,OAAO;GACL;GACA,MAAM,aAAa,SAAS,UAAU,UAAU;GAChD,QAAQ,OAAO,aAAa,WAAW,WAAW,aAAa,SAAS;EAC1E;CACF,CAAC,
|
|
1
|
+
{"version":3,"file":"mediaActions.mjs","names":["runtimeGlobal"],"sources":["../../../src/runtime/polyfill/mediaActions.ts"],"sourcesContent":["import { WEAPP_VITE_WEB_OPEN_VIDEO_EDITOR_KEY } from '@weapp-core/constants'\n\ninterface PreviewMediaSourceRecord {\n url: string\n type: 'image' | 'video'\n poster: string\n}\n\nexport function openTargetInNewWindow(target: string) {\n if (typeof window === 'undefined' || typeof window.open !== 'function') {\n return\n }\n try {\n window.open(target, '_blank', 'noopener,noreferrer')\n }\n catch {\n // ignore browser popup restrictions and keep API-level success semantics\n }\n}\n\nexport function normalizePreviewMediaSources(sources: unknown): PreviewMediaSourceRecord[] {\n if (!Array.isArray(sources)) {\n return []\n }\n return sources\n .map((source) => {\n if (!source || typeof source !== 'object') {\n return null\n }\n const sourceRecord = source as Record<string, unknown>\n const url = typeof sourceRecord.url === 'string' ? sourceRecord.url.trim() : ''\n if (!url) {\n return null\n }\n return {\n url,\n type: sourceRecord.type === 'video' ? 'video' : 'image',\n poster: typeof sourceRecord.poster === 'string' ? sourceRecord.poster : '',\n }\n })\n .filter((item): item is PreviewMediaSourceRecord => Boolean(item))\n}\n\nexport function readOpenVideoEditorPreset(src: string) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_OPEN_VIDEO_EDITOR_KEY]\n if (typeof preset === 'function') {\n const value = (preset as (value: string) => unknown)(src)\n return typeof value === 'string' && value.trim() ? value.trim() : ''\n }\n if (typeof preset === 'string' && preset.trim()) {\n return preset.trim()\n }\n if (preset && typeof preset === 'object') {\n const value = (preset as Record<string, unknown>)[src]\n return typeof value === 'string' && value.trim() ? value.trim() : ''\n }\n return ''\n}\n\nexport function triggerDownload(filePath: string, fileName = '') {\n if (typeof document === 'undefined' || !document.body) {\n return\n }\n try {\n const link = document.createElement('a')\n link.setAttribute('href', filePath)\n link.setAttribute('download', fileName)\n link.setAttribute('style', 'display:none')\n document.body.append(link)\n link.click?.()\n if (link.parentNode) {\n link.parentNode.removeChild(link)\n }\n }\n catch {\n // keep API-level success semantics for browser restrictions\n }\n}\n"],"mappings":";;;AAQA,SAAgB,sBAAsB,QAAgB;CACpD,IAAI,OAAO,WAAW,eAAe,OAAO,OAAO,SAAS,YAC1D;CAEF,IAAI;EACF,OAAO,KAAK,QAAQ,UAAU,qBAAqB;CACrD,QACM,CAEN;AACF;AAEA,SAAgB,6BAA6B,SAA8C;CACzF,IAAI,CAAC,MAAM,QAAQ,OAAO,GACxB,OAAO,CAAC;CAEV,OAAO,QACJ,KAAK,WAAW;EACf,IAAI,CAAC,UAAU,OAAO,WAAW,UAC/B,OAAO;EAET,MAAM,eAAe;EACrB,MAAM,MAAM,OAAO,aAAa,QAAQ,WAAW,aAAa,IAAI,KAAK,IAAI;EAC7E,IAAI,CAAC,KACH,OAAO;EAET,OAAO;GACL;GACA,MAAM,aAAa,SAAS,UAAU,UAAU;GAChD,QAAQ,OAAO,aAAa,WAAW,WAAW,aAAa,SAAS;EAC1E;CACF,CAAC,CAAC,CACD,QAAQ,SAA2C,QAAQ,IAAI,CAAC;AACrE;AAEA,SAAgB,0BAA0B,KAAa;CAErD,MAAM,SAASA,WAAc;CAC7B,IAAI,OAAO,WAAW,YAAY;EAChC,MAAM,QAAS,OAAsC,GAAG;EACxD,OAAO,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;CACpE;CACA,IAAI,OAAO,WAAW,YAAY,OAAO,KAAK,GAC5C,OAAO,OAAO,KAAK;CAErB,IAAI,UAAU,OAAO,WAAW,UAAU;EACxC,MAAM,QAAS,OAAmC;EAClD,OAAO,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;CACpE;CACA,OAAO;AACT;AAEA,SAAgB,gBAAgB,UAAkB,WAAW,IAAI;CAC/D,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,MAC/C;CAEF,IAAI;EACF,MAAM,OAAO,SAAS,cAAc,GAAG;EACvC,KAAK,aAAa,QAAQ,QAAQ;EAClC,KAAK,aAAa,YAAY,QAAQ;EACtC,KAAK,aAAa,SAAS,cAAc;EACzC,SAAS,KAAK,OAAO,IAAI;EACzB,KAAK,QAAQ;EACb,IAAI,KAAK,YACP,KAAK,WAAW,YAAY,IAAI;CAEpC,QACM,CAEN;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.mjs","names":[],"sources":["../../../../src/runtime/polyfill/mediaApi/info.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from '../async'\nimport {\n inferImageTypeFromPath,\n inferVideoTypeFromPath,\n normalizeVideoInfoNumber,\n readImageInfoFromSource,\n readPresetVideoInfo,\n readVideoInfoFromSource,\n} from '../mediaInfo'\n\nexport function getImageInfoBridge(options?: any) {\n const src = typeof options?.src === 'string' ? options.src.trim() : ''\n if (!src) {\n const failure = callMiniProgramAsyncFailure(options, 'getImageInfo:fail invalid src')\n return Promise.reject(failure)\n }\n return readImageInfoFromSource(src)\n .then(({ width, height }) => callMiniProgramAsyncSuccess(options, {\n errMsg: 'getImageInfo:ok',\n width,\n height,\n path: src,\n type: inferImageTypeFromPath(src),\n orientation: 'up',\n }))\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getImageInfo:fail ${message}`)\n return Promise.reject(failure)\n })\n}\n\nexport function getVideoInfoBridge(options?: any) {\n const src = typeof options?.src === 'string' ? options.src.trim() : ''\n if (!src) {\n const failure = callMiniProgramAsyncFailure(options, 'getVideoInfo:fail invalid src')\n return Promise.reject(failure)\n }\n const preset = readPresetVideoInfo(src)\n const resolveResult = async () => {\n if (preset) {\n return preset\n }\n return readVideoInfoFromSource(src)\n }\n return resolveResult()\n .then((result) => {\n const duration = normalizeVideoInfoNumber(result.duration)\n const width = normalizeVideoInfoNumber(result.width)\n const height = normalizeVideoInfoNumber(result.height)\n const bitrate = normalizeVideoInfoNumber((result as Record<string, unknown>).bitrate)\n const fps = normalizeVideoInfoNumber((result as Record<string, unknown>).fps)\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'getVideoInfo:ok',\n orientation: 'up',\n type: inferVideoTypeFromPath(src),\n duration,\n size: normalizeVideoInfoNumber((result as Record<string, unknown>).size),\n width,\n height,\n bitrate,\n fps,\n })\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getVideoInfo:fail ${message}`)\n return Promise.reject(failure)\n })\n}\n"],"mappings":";;;;AAaA,SAAgB,mBAAmB,SAAe;CAChD,MAAM,MAAM,OAAO,SAAS,QAAQ,WAAW,QAAQ,IAAI,KAAK,IAAI;CACpE,IAAI,CAAC,KAAK;EACR,MAAM,UAAU,4BAA4B,SAAS,+BAA+B;EACpF,OAAO,QAAQ,OAAO,OAAO;CAC/B;CACA,OAAO,wBAAwB,GAAG,
|
|
1
|
+
{"version":3,"file":"info.mjs","names":[],"sources":["../../../../src/runtime/polyfill/mediaApi/info.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from '../async'\nimport {\n inferImageTypeFromPath,\n inferVideoTypeFromPath,\n normalizeVideoInfoNumber,\n readImageInfoFromSource,\n readPresetVideoInfo,\n readVideoInfoFromSource,\n} from '../mediaInfo'\n\nexport function getImageInfoBridge(options?: any) {\n const src = typeof options?.src === 'string' ? options.src.trim() : ''\n if (!src) {\n const failure = callMiniProgramAsyncFailure(options, 'getImageInfo:fail invalid src')\n return Promise.reject(failure)\n }\n return readImageInfoFromSource(src)\n .then(({ width, height }) => callMiniProgramAsyncSuccess(options, {\n errMsg: 'getImageInfo:ok',\n width,\n height,\n path: src,\n type: inferImageTypeFromPath(src),\n orientation: 'up',\n }))\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getImageInfo:fail ${message}`)\n return Promise.reject(failure)\n })\n}\n\nexport function getVideoInfoBridge(options?: any) {\n const src = typeof options?.src === 'string' ? options.src.trim() : ''\n if (!src) {\n const failure = callMiniProgramAsyncFailure(options, 'getVideoInfo:fail invalid src')\n return Promise.reject(failure)\n }\n const preset = readPresetVideoInfo(src)\n const resolveResult = async () => {\n if (preset) {\n return preset\n }\n return readVideoInfoFromSource(src)\n }\n return resolveResult()\n .then((result) => {\n const duration = normalizeVideoInfoNumber(result.duration)\n const width = normalizeVideoInfoNumber(result.width)\n const height = normalizeVideoInfoNumber(result.height)\n const bitrate = normalizeVideoInfoNumber((result as Record<string, unknown>).bitrate)\n const fps = normalizeVideoInfoNumber((result as Record<string, unknown>).fps)\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'getVideoInfo:ok',\n orientation: 'up',\n type: inferVideoTypeFromPath(src),\n duration,\n size: normalizeVideoInfoNumber((result as Record<string, unknown>).size),\n width,\n height,\n bitrate,\n fps,\n })\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `getVideoInfo:fail ${message}`)\n return Promise.reject(failure)\n })\n}\n"],"mappings":";;;;AAaA,SAAgB,mBAAmB,SAAe;CAChD,MAAM,MAAM,OAAO,SAAS,QAAQ,WAAW,QAAQ,IAAI,KAAK,IAAI;CACpE,IAAI,CAAC,KAAK;EACR,MAAM,UAAU,4BAA4B,SAAS,+BAA+B;EACpF,OAAO,QAAQ,OAAO,OAAO;CAC/B;CACA,OAAO,wBAAwB,GAAG,CAAC,CAChC,MAAM,EAAE,OAAO,aAAa,4BAA4B,SAAS;EAChE,QAAQ;EACR;EACA;EACA,MAAM;EACN,MAAM,uBAAuB,GAAG;EAChC,aAAa;CACf,CAAC,CAAC,CAAC,CACF,OAAO,UAAU;EAEhB,MAAM,UAAU,4BAA4B,SAAS,qBADrC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACc;EACnF,OAAO,QAAQ,OAAO,OAAO;CAC/B,CAAC;AACL;AAEA,SAAgB,mBAAmB,SAAe;CAChD,MAAM,MAAM,OAAO,SAAS,QAAQ,WAAW,QAAQ,IAAI,KAAK,IAAI;CACpE,IAAI,CAAC,KAAK;EACR,MAAM,UAAU,4BAA4B,SAAS,+BAA+B;EACpF,OAAO,QAAQ,OAAO,OAAO;CAC/B;CACA,MAAM,SAAS,oBAAoB,GAAG;CACtC,MAAM,gBAAgB,YAAY;EAChC,IAAI,QACF,OAAO;EAET,OAAO,wBAAwB,GAAG;CACpC;CACA,OAAO,cAAc,CAAC,CACnB,MAAM,WAAW;EAChB,MAAM,WAAW,yBAAyB,OAAO,QAAQ;EACzD,MAAM,QAAQ,yBAAyB,OAAO,KAAK;EACnD,MAAM,SAAS,yBAAyB,OAAO,MAAM;EACrD,MAAM,UAAU,yBAA0B,OAAmC,OAAO;EACpF,MAAM,MAAM,yBAA0B,OAAmC,GAAG;EAC5E,OAAO,4BAA4B,SAAS;GAC1C,QAAQ;GACR,aAAa;GACb,MAAM,uBAAuB,GAAG;GAChC;GACA,MAAM,yBAA0B,OAAmC,IAAI;GACvE;GACA;GACA;GACA;EACF,CAAC;CACH,CAAC,CAAC,CACD,OAAO,UAAU;EAEhB,MAAM,UAAU,4BAA4B,SAAS,qBADrC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACc;EACnF,OAAO,QAAQ,OAAO,OAAO;CAC/B,CAAC;AACL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker.mjs","names":[],"sources":["../../../../src/runtime/polyfill/mediaApi/picker.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from '../async'\nimport {\n normalizeChooseFileExtensions,\n normalizeChooseMessageFile,\n normalizeChooseMessageFileCount,\n normalizeChooseMessageFileType,\n pickChooseFileFiles,\n pickChooseMessageFiles,\n} from '../filePicker'\nimport {\n normalizeChooseImageCount,\n normalizeChooseImageFile,\n normalizeChooseMediaCount,\n normalizeChooseMediaFile,\n normalizeChooseMediaTypes,\n pickChooseImageFiles,\n pickChooseMediaFiles,\n} from '../mediaPicker'\nimport {\n normalizeChooseVideoFile,\n pickChooseVideoFile,\n} from '../mediaProcess'\n\nexport async function chooseImageBridge(options?: any) {\n const count = normalizeChooseImageCount(options?.count)\n try {\n const files = await pickChooseImageFiles(count)\n const tempFiles = files.map(file => normalizeChooseImageFile(file))\n const tempFilePaths = tempFiles.map(item => item.path)\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseImage:ok',\n tempFilePaths,\n tempFiles,\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `chooseImage:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport async function chooseMediaBridge(options?: any) {\n const count = normalizeChooseMediaCount(options?.count)\n const types = normalizeChooseMediaTypes(options?.mediaType)\n try {\n const files = await pickChooseMediaFiles(count, types)\n const tempFiles = files.map(file => normalizeChooseMediaFile(file))\n const defaultType = types.has('video') && !types.has('image') ? 'video' : 'image'\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseMedia:ok',\n type: tempFiles[0]?.fileType ?? defaultType,\n tempFiles,\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `chooseMedia:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport async function chooseVideoBridge(options?: any) {\n try {\n const file = await pickChooseVideoFile()\n if (!file) {\n throw new TypeError('no file selected')\n }\n const normalized = normalizeChooseVideoFile(file)\n if (!normalized) {\n throw new TypeError('selected file is not a video')\n }\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseVideo:ok',\n ...normalized,\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `chooseVideo:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport async function chooseMessageFileBridge(options?: any) {\n const count = normalizeChooseMessageFileCount(options?.count)\n const type = normalizeChooseMessageFileType(options?.type)\n try {\n const files = await pickChooseMessageFiles(count, type)\n const tempFiles = files.map(file => normalizeChooseMessageFile(file))\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseMessageFile:ok',\n tempFiles,\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `chooseMessageFile:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport async function chooseFileBridge(options?: any) {\n const count = normalizeChooseMessageFileCount(options?.count)\n const type = normalizeChooseMessageFileType(options?.type)\n const extensions = normalizeChooseFileExtensions(options?.extension)\n try {\n const files = await pickChooseFileFiles(count, type, extensions)\n const tempFiles = files.map(file => normalizeChooseMessageFile(file))\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseFile:ok',\n tempFiles,\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `chooseFile:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n"],"mappings":";;;;;;AA0BA,eAAsB,kBAAkB,SAAe;CACrD,MAAM,QAAQ,0BAA0B,SAAS,KAAK;CACtD,IAAI;EAEF,MAAM,aAAY,MADE,qBAAqB,KAAK,
|
|
1
|
+
{"version":3,"file":"picker.mjs","names":[],"sources":["../../../../src/runtime/polyfill/mediaApi/picker.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from '../async'\nimport {\n normalizeChooseFileExtensions,\n normalizeChooseMessageFile,\n normalizeChooseMessageFileCount,\n normalizeChooseMessageFileType,\n pickChooseFileFiles,\n pickChooseMessageFiles,\n} from '../filePicker'\nimport {\n normalizeChooseImageCount,\n normalizeChooseImageFile,\n normalizeChooseMediaCount,\n normalizeChooseMediaFile,\n normalizeChooseMediaTypes,\n pickChooseImageFiles,\n pickChooseMediaFiles,\n} from '../mediaPicker'\nimport {\n normalizeChooseVideoFile,\n pickChooseVideoFile,\n} from '../mediaProcess'\n\nexport async function chooseImageBridge(options?: any) {\n const count = normalizeChooseImageCount(options?.count)\n try {\n const files = await pickChooseImageFiles(count)\n const tempFiles = files.map(file => normalizeChooseImageFile(file))\n const tempFilePaths = tempFiles.map(item => item.path)\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseImage:ok',\n tempFilePaths,\n tempFiles,\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `chooseImage:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport async function chooseMediaBridge(options?: any) {\n const count = normalizeChooseMediaCount(options?.count)\n const types = normalizeChooseMediaTypes(options?.mediaType)\n try {\n const files = await pickChooseMediaFiles(count, types)\n const tempFiles = files.map(file => normalizeChooseMediaFile(file))\n const defaultType = types.has('video') && !types.has('image') ? 'video' : 'image'\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseMedia:ok',\n type: tempFiles[0]?.fileType ?? defaultType,\n tempFiles,\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `chooseMedia:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport async function chooseVideoBridge(options?: any) {\n try {\n const file = await pickChooseVideoFile()\n if (!file) {\n throw new TypeError('no file selected')\n }\n const normalized = normalizeChooseVideoFile(file)\n if (!normalized) {\n throw new TypeError('selected file is not a video')\n }\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseVideo:ok',\n ...normalized,\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `chooseVideo:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport async function chooseMessageFileBridge(options?: any) {\n const count = normalizeChooseMessageFileCount(options?.count)\n const type = normalizeChooseMessageFileType(options?.type)\n try {\n const files = await pickChooseMessageFiles(count, type)\n const tempFiles = files.map(file => normalizeChooseMessageFile(file))\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseMessageFile:ok',\n tempFiles,\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `chooseMessageFile:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n\nexport async function chooseFileBridge(options?: any) {\n const count = normalizeChooseMessageFileCount(options?.count)\n const type = normalizeChooseMessageFileType(options?.type)\n const extensions = normalizeChooseFileExtensions(options?.extension)\n try {\n const files = await pickChooseFileFiles(count, type, extensions)\n const tempFiles = files.map(file => normalizeChooseMessageFile(file))\n return callMiniProgramAsyncSuccess(options, {\n errMsg: 'chooseFile:ok',\n tempFiles,\n })\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const failure = callMiniProgramAsyncFailure(options, `chooseFile:fail ${message}`)\n return Promise.reject(failure)\n }\n}\n"],"mappings":";;;;;;AA0BA,eAAsB,kBAAkB,SAAe;CACrD,MAAM,QAAQ,0BAA0B,SAAS,KAAK;CACtD,IAAI;EAEF,MAAM,aAAY,MADE,qBAAqB,KAAK,EACvB,CAAC,KAAI,SAAQ,yBAAyB,IAAI,CAAC;EAElE,OAAO,4BAA4B,SAAS;GAC1C,QAAQ;GACR,eAHoB,UAAU,KAAI,SAAQ,KAAK,IAGnC;GACZ;EACF,CAAC;CACH,SACO,OAAO;EAEZ,MAAM,UAAU,4BAA4B,SAAS,oBADrC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACa;EAClF,OAAO,QAAQ,OAAO,OAAO;CAC/B;AACF;AAEA,eAAsB,kBAAkB,SAAe;CACrD,MAAM,QAAQ,0BAA0B,SAAS,KAAK;CACtD,MAAM,QAAQ,0BAA0B,SAAS,SAAS;CAC1D,IAAI;EAEF,MAAM,aAAY,MADE,qBAAqB,OAAO,KAAK,EAC9B,CAAC,KAAI,SAAQ,yBAAyB,IAAI,CAAC;EAClE,MAAM,cAAc,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,IAAI,OAAO,IAAI,UAAU;EAC1E,OAAO,4BAA4B,SAAS;GAC1C,QAAQ;GACR,MAAM,UAAU,EAAE,EAAE,YAAY;GAChC;EACF,CAAC;CACH,SACO,OAAO;EAEZ,MAAM,UAAU,4BAA4B,SAAS,oBADrC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACa;EAClF,OAAO,QAAQ,OAAO,OAAO;CAC/B;AACF;AAEA,eAAsB,kBAAkB,SAAe;CACrD,IAAI;EACF,MAAM,OAAO,MAAM,oBAAoB;EACvC,IAAI,CAAC,MACH,MAAM,IAAI,UAAU,kBAAkB;EAExC,MAAM,aAAa,yBAAyB,IAAI;EAChD,IAAI,CAAC,YACH,MAAM,IAAI,UAAU,8BAA8B;EAEpD,OAAO,4BAA4B,SAAS;GAC1C,QAAQ;GACR,GAAG;EACL,CAAC;CACH,SACO,OAAO;EAEZ,MAAM,UAAU,4BAA4B,SAAS,oBADrC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACa;EAClF,OAAO,QAAQ,OAAO,OAAO;CAC/B;AACF;AAEA,eAAsB,wBAAwB,SAAe;CAC3D,MAAM,QAAQ,gCAAgC,SAAS,KAAK;CAC5D,MAAM,OAAO,+BAA+B,SAAS,IAAI;CACzD,IAAI;EAGF,OAAO,4BAA4B,SAAS;GAC1C,QAAQ;GACR,YAHgB,MADE,uBAAuB,OAAO,IAAI,EAC/B,CAAC,KAAI,SAAQ,2BAA2B,IAAI,CAGzD;EACV,CAAC;CACH,SACO,OAAO;EAEZ,MAAM,UAAU,4BAA4B,SAAS,0BADrC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACmB;EACxF,OAAO,QAAQ,OAAO,OAAO;CAC/B;AACF;AAEA,eAAsB,iBAAiB,SAAe;CACpD,MAAM,QAAQ,gCAAgC,SAAS,KAAK;CAC5D,MAAM,OAAO,+BAA+B,SAAS,IAAI;CACzD,MAAM,aAAa,8BAA8B,SAAS,SAAS;CACnE,IAAI;EAGF,OAAO,4BAA4B,SAAS;GAC1C,QAAQ;GACR,YAHgB,MADE,oBAAoB,OAAO,MAAM,UAAU,EACxC,CAAC,KAAI,SAAQ,2BAA2B,IAAI,CAGzD;EACV,CAAC;CACH,SACO,OAAO;EAEZ,MAAM,UAAU,4BAA4B,SAAS,mBADrC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACY;EACjF,OAAO,QAAQ,OAAO,OAAO;CAC/B;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.mjs","names":[],"sources":["../../../../src/runtime/polyfill/mediaApi/preview.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from '../async'\nimport {\n normalizePreviewMediaSources,\n openTargetInNewWindow,\n readOpenVideoEditorPreset,\n} from '../mediaActions'\n\nexport function previewImageBridge(options?: any) {\n const urls = Array.isArray(options?.urls)\n ? options.urls.map((url: unknown) => String(url).trim()).filter(Boolean)\n : []\n if (!urls.length) {\n const failure = callMiniProgramAsyncFailure(options, 'previewImage:fail invalid urls')\n return Promise.reject(failure)\n }\n const current = typeof options?.current === 'string' && options.current.trim()\n ? options.current.trim()\n : urls[0]\n const target = urls.includes(current) ? current : urls[0]\n openTargetInNewWindow(target)\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'previewImage:ok' }))\n}\n\nexport function previewMediaBridge(options?: any) {\n const sources = normalizePreviewMediaSources(options?.sources)\n if (!sources.length) {\n const failure = callMiniProgramAsyncFailure(options, 'previewMedia:fail invalid sources')\n return Promise.reject(failure)\n }\n const current = typeof options?.current === 'number' && Number.isFinite(options.current)\n ? Math.max(0, Math.floor(options.current))\n : 0\n const target = sources[current]?.url ?? sources[0].url\n openTargetInNewWindow(target)\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'previewMedia:ok' }))\n}\n\nexport function openVideoEditorBridge(options?: any) {\n const src = typeof options?.src === 'string' ? options.src.trim() : ''\n if (!src) {\n const failure = callMiniProgramAsyncFailure(options, 'openVideoEditor:fail invalid src')\n return Promise.reject(failure)\n }\n const tempFilePath = readOpenVideoEditorPreset(src) || src\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'openVideoEditor:ok',\n tempFilePath,\n }))\n}\n"],"mappings":";;;;AAUA,SAAgB,mBAAmB,SAAe;CAChD,MAAM,OAAO,MAAM,QAAQ,SAAS,IAAI,IACpC,QAAQ,KAAK,KAAK,QAAiB,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"preview.mjs","names":[],"sources":["../../../../src/runtime/polyfill/mediaApi/preview.ts"],"sourcesContent":["import {\n callMiniProgramAsyncFailure,\n callMiniProgramAsyncSuccess,\n} from '../async'\nimport {\n normalizePreviewMediaSources,\n openTargetInNewWindow,\n readOpenVideoEditorPreset,\n} from '../mediaActions'\n\nexport function previewImageBridge(options?: any) {\n const urls = Array.isArray(options?.urls)\n ? options.urls.map((url: unknown) => String(url).trim()).filter(Boolean)\n : []\n if (!urls.length) {\n const failure = callMiniProgramAsyncFailure(options, 'previewImage:fail invalid urls')\n return Promise.reject(failure)\n }\n const current = typeof options?.current === 'string' && options.current.trim()\n ? options.current.trim()\n : urls[0]\n const target = urls.includes(current) ? current : urls[0]\n openTargetInNewWindow(target)\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'previewImage:ok' }))\n}\n\nexport function previewMediaBridge(options?: any) {\n const sources = normalizePreviewMediaSources(options?.sources)\n if (!sources.length) {\n const failure = callMiniProgramAsyncFailure(options, 'previewMedia:fail invalid sources')\n return Promise.reject(failure)\n }\n const current = typeof options?.current === 'number' && Number.isFinite(options.current)\n ? Math.max(0, Math.floor(options.current))\n : 0\n const target = sources[current]?.url ?? sources[0].url\n openTargetInNewWindow(target)\n return Promise.resolve(callMiniProgramAsyncSuccess(options, { errMsg: 'previewMedia:ok' }))\n}\n\nexport function openVideoEditorBridge(options?: any) {\n const src = typeof options?.src === 'string' ? options.src.trim() : ''\n if (!src) {\n const failure = callMiniProgramAsyncFailure(options, 'openVideoEditor:fail invalid src')\n return Promise.reject(failure)\n }\n const tempFilePath = readOpenVideoEditorPreset(src) || src\n return Promise.resolve(callMiniProgramAsyncSuccess(options, {\n errMsg: 'openVideoEditor:ok',\n tempFilePath,\n }))\n}\n"],"mappings":";;;;AAUA,SAAgB,mBAAmB,SAAe;CAChD,MAAM,OAAO,MAAM,QAAQ,SAAS,IAAI,IACpC,QAAQ,KAAK,KAAK,QAAiB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,OAAO,IACrE,CAAC;CACL,IAAI,CAAC,KAAK,QAAQ;EAChB,MAAM,UAAU,4BAA4B,SAAS,gCAAgC;EACrF,OAAO,QAAQ,OAAO,OAAO;CAC/B;CACA,MAAM,UAAU,OAAO,SAAS,YAAY,YAAY,QAAQ,QAAQ,KAAK,IACzE,QAAQ,QAAQ,KAAK,IACrB,KAAK;CAET,sBADe,KAAK,SAAS,OAAO,IAAI,UAAU,KAAK,EAC3B;CAC5B,OAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,kBAAkB,CAAC,CAAC;AAC5F;AAEA,SAAgB,mBAAmB,SAAe;CAChD,MAAM,UAAU,6BAA6B,SAAS,OAAO;CAC7D,IAAI,CAAC,QAAQ,QAAQ;EACnB,MAAM,UAAU,4BAA4B,SAAS,mCAAmC;EACxF,OAAO,QAAQ,OAAO,OAAO;CAC/B;CAKA,sBADe,QAHC,OAAO,SAAS,YAAY,YAAY,OAAO,SAAS,QAAQ,OAAO,IACnF,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,OAAO,CAAC,IACvC,EAC2B,EAAE,OAAO,QAAQ,EAAE,CAAC,GACvB;CAC5B,OAAO,QAAQ,QAAQ,4BAA4B,SAAS,EAAE,QAAQ,kBAAkB,CAAC,CAAC;AAC5F;AAEA,SAAgB,sBAAsB,SAAe;CACnD,MAAM,MAAM,OAAO,SAAS,QAAQ,WAAW,QAAQ,IAAI,KAAK,IAAI;CACpE,IAAI,CAAC,KAAK;EACR,MAAM,UAAU,4BAA4B,SAAS,kCAAkC;EACvF,OAAO,QAAQ,OAAO,OAAO;CAC/B;CACA,MAAM,eAAe,0BAA0B,GAAG,KAAK;CACvD,OAAO,QAAQ,QAAQ,4BAA4B,SAAS;EAC1D,QAAQ;EACR;CACF,CAAC,CAAC;AACJ"}
|
|
@@ -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;CACzE,IAAI,OAAO,YAAY,YAAY,OAAO,MAAM,OAAO,GACrD,OAAO;CAET,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,OAAO,CAAC,CAAC;AACvD;AAEA,SAAS,6BAA6B,KAAa;CACjD,MAAM,QAAQ,IAAI,YAAY;CAC9B,IAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,GAClD,OAAO;CAET,IAAI,MAAM,SAAS,OAAO,GACxB,OAAO;CAET,OAAO;AACT;AAEA,eAAsB,sBAAsB,KAAa,SAAiB;CACxE,IAAI,OAAO,aAAa,eAAe,OAAO,SAAS,kBAAkB,YACvE,OAAO;CAET,MAAM,YAAa,WAAwC;CAC3D,IAAI,OAAO,cAAc,YACvB,OAAO;CAET,MAAM,SAAS,SAAS,cAAc,QAAQ;CAC9C,IAAI,CAAC,UAAU,OAAO,OAAO,eAAe,YAC1C,OAAO;CAET,OAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,QAAQ,IAAI,UAAU;EAC5B,MAAM,eAAe;GACnB,IAAI;IACF,MAAM,QAAQ,OAAQ,MAAoC,gBAAgB,MAAM,SAAS,CAAC;IAC1F,MAAM,SAAS,OAAQ,MAAqC,iBAAiB,MAAM,UAAU,CAAC;IAC9F,MAAM,UAAU,OAAO,WAAW,IAAI;IACtC,IAAI,CAAC,WAAW,OAAO,QAAQ,cAAc,cAAc,SAAS,KAAK,UAAU,GAAG;KACpF,QAAQ,GAAG;KACX;IACF;IACA,OAAO,QAAQ;IACf,OAAO,SAAS;IAChB,QAAQ,UAAU,OAAO,GAAG,GAAG,OAAO,MAAM;IAC5C,IAAI,OAAO,OAAO,cAAc,YAAY;KAC1C,QAAQ,GAAG;KACX;IACF;IAEA,QADgB,OAAO,UAAU,6BAA6B,GAAG,GAAG,UAAU,GAChE,KAAK,GAAG;GACxB,SACO,OAAO;IACZ,OAAO,KAAK;GACd;EACF;EACA,MAAM,gBAAgB;GACpB,uBAAO,IAAI,MAAM,kBAAkB,CAAC;EACtC;EACA,MAAM,MAAM;CACd,CAAC;AACH;AAEA,SAAgB,yBAAyB,MAItC;CACD,IAAI,yBAAyB,IAAI,MAAM,SACrC,OAAO;CAET,OAAO;EACL,cAAc,mBAAmB,IAAI;EACrC,UAAU;EACV,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;EAClD,QAAQ;EACR,OAAO;CACT;AACF;AAEA,eAAsB,sBAAsB;CAE1C,QAAO,MADa,qBAAqB,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,
|
|
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;CACzE,IAAI,OAAO,YAAY,YAAY,OAAO,MAAM,OAAO,GACrD,OAAO;CAET,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,OAAO,CAAC,CAAC;AACvD;AAEA,SAAS,6BAA6B,KAAa;CACjD,MAAM,QAAQ,IAAI,YAAY;CAC9B,IAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,GAClD,OAAO;CAET,IAAI,MAAM,SAAS,OAAO,GACxB,OAAO;CAET,OAAO;AACT;AAEA,eAAsB,sBAAsB,KAAa,SAAiB;CACxE,IAAI,OAAO,aAAa,eAAe,OAAO,SAAS,kBAAkB,YACvE,OAAO;CAET,MAAM,YAAa,WAAwC;CAC3D,IAAI,OAAO,cAAc,YACvB,OAAO;CAET,MAAM,SAAS,SAAS,cAAc,QAAQ;CAC9C,IAAI,CAAC,UAAU,OAAO,OAAO,eAAe,YAC1C,OAAO;CAET,OAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,QAAQ,IAAI,UAAU;EAC5B,MAAM,eAAe;GACnB,IAAI;IACF,MAAM,QAAQ,OAAQ,MAAoC,gBAAgB,MAAM,SAAS,CAAC;IAC1F,MAAM,SAAS,OAAQ,MAAqC,iBAAiB,MAAM,UAAU,CAAC;IAC9F,MAAM,UAAU,OAAO,WAAW,IAAI;IACtC,IAAI,CAAC,WAAW,OAAO,QAAQ,cAAc,cAAc,SAAS,KAAK,UAAU,GAAG;KACpF,QAAQ,GAAG;KACX;IACF;IACA,OAAO,QAAQ;IACf,OAAO,SAAS;IAChB,QAAQ,UAAU,OAAO,GAAG,GAAG,OAAO,MAAM;IAC5C,IAAI,OAAO,OAAO,cAAc,YAAY;KAC1C,QAAQ,GAAG;KACX;IACF;IAEA,QADgB,OAAO,UAAU,6BAA6B,GAAG,GAAG,UAAU,GAChE,KAAK,GAAG;GACxB,SACO,OAAO;IACZ,OAAO,KAAK;GACd;EACF;EACA,MAAM,gBAAgB;GACpB,uBAAO,IAAI,MAAM,kBAAkB,CAAC;EACtC;EACA,MAAM,MAAM;CACd,CAAC;AACH;AAEA,SAAgB,yBAAyB,MAItC;CACD,IAAI,yBAAyB,IAAI,MAAM,SACrC,OAAO;CAET,OAAO;EACL,cAAc,mBAAmB,IAAI;EACrC,UAAU;EACV,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;EAClD,QAAQ;EACR,OAAO;CACT;AACF;AAEA,eAAsB,sBAAsB;CAE1C,QAAO,MADa,qBAAqB,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAClD,CAAC,MAAM;AACrB"}
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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;CAKzE,OAAO,kBAAkB,cAAc,kBAAkB,iBAAiB,kBAAkB;AAC9F;AAEA,SAAS,mBAAmB,YAA6C,aAAmC;CAC1G,IAAI,CAAC,aACH,OAAO;CAET,MAAM,OAAO,OAAO,YAAY,SAAS,WAAW,WAAW,KAAK,YAAY,IAAI;CACpF,MAAM,gBAAgB,OAAO,YAAY,kBAAkB,WACvD,WAAW,cAAc,YAAY,IACrC;CACJ,IAAI,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,UAAU,GACnD,OAAO;CAET,IAAI,cAAc,SAAS,IAAI,GAC7B,OAAO;CAET,IAAI,cAAc,SAAS,IAAI,GAC7B,OAAO;CAET,IAAI,cAAc,SAAS,IAAI,GAC7B,OAAO;CAET,IAAI,cAAc,SAAS,IAAI,KAAK,cAAc,SAAS,SAAS,GAClE,OAAO;CAET,IAAI,KAAK,SAAS,UAAU,GAC1B,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,4BAAmD;CACjE,MAAM,mBAAmB,OAAO,cAAc,cAAc,YAAY;CACxE,MAAM,cAAc,OAAO,kBAAkB,WAAW,YAAY,iBAAiB,SAAS;CAE9F,OAAO;EACL;EACA,aAAa,mBAHI,uBAGwB,GAAG,WAAW;CACzD;AACF;AAEA,MAAM,yCAAyB,IAAI,IAA6C;AAChF,IAAI,2BAA2B;AAE/B,SAAS,4BAA4B;CACnC,IAAI,uBAAuB,SAAS,GAClC;CAEF,MAAM,SAAS,0BAA0B;CACzC,KAAK,MAAM,YAAY,wBACrB,SAAS,MAAM;AAEnB;AAEA,SAAS,0BAA0B;CACjC,IAAI,0BACF;CAEF,2BAA2B;CAC3B,MAAM,gBAAgB;CAGtB,cAAc,mBAAmB,UAAU,yBAAyB;CACpE,cAAc,mBAAmB,WAAW,yBAAyB;CAErE,AADmB,uBACV,
|
|
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;CAKzE,OAAO,kBAAkB,cAAc,kBAAkB,iBAAiB,kBAAkB;AAC9F;AAEA,SAAS,mBAAmB,YAA6C,aAAmC;CAC1G,IAAI,CAAC,aACH,OAAO;CAET,MAAM,OAAO,OAAO,YAAY,SAAS,WAAW,WAAW,KAAK,YAAY,IAAI;CACpF,MAAM,gBAAgB,OAAO,YAAY,kBAAkB,WACvD,WAAW,cAAc,YAAY,IACrC;CACJ,IAAI,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,UAAU,GACnD,OAAO;CAET,IAAI,cAAc,SAAS,IAAI,GAC7B,OAAO;CAET,IAAI,cAAc,SAAS,IAAI,GAC7B,OAAO;CAET,IAAI,cAAc,SAAS,IAAI,GAC7B,OAAO;CAET,IAAI,cAAc,SAAS,IAAI,KAAK,cAAc,SAAS,SAAS,GAClE,OAAO;CAET,IAAI,KAAK,SAAS,UAAU,GAC1B,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,4BAAmD;CACjE,MAAM,mBAAmB,OAAO,cAAc,cAAc,YAAY;CACxE,MAAM,cAAc,OAAO,kBAAkB,WAAW,YAAY,iBAAiB,SAAS;CAE9F,OAAO;EACL;EACA,aAAa,mBAHI,uBAGwB,GAAG,WAAW;CACzD;AACF;AAEA,MAAM,yCAAyB,IAAI,IAA6C;AAChF,IAAI,2BAA2B;AAE/B,SAAS,4BAA4B;CACnC,IAAI,uBAAuB,SAAS,GAClC;CAEF,MAAM,SAAS,0BAA0B;CACzC,KAAK,MAAM,YAAY,wBACrB,SAAS,MAAM;AAEnB;AAEA,SAAS,0BAA0B;CACjC,IAAI,0BACF;CAEF,2BAA2B;CAC3B,MAAM,gBAAgB;CAGtB,cAAc,mBAAmB,UAAU,yBAAyB;CACpE,cAAc,mBAAmB,WAAW,yBAAyB;CAErE,AADmB,uBACV,CAAC,EAAE,mBAAmB,UAAU,yBAAyB;AACpE;AAEA,SAAgB,yBAAyB,UAAmD;CAC1F,wBAAwB;CACxB,uBAAuB,IAAI,QAAQ;AACrC;AAEA,SAAgB,4BAA4B,UAAoD;CAC9F,IAAI,OAAO,aAAa,YAAY;EAClC,uBAAuB,MAAM;EAC7B;CACF;CACA,uBAAuB,OAAO,QAAQ;AACxC"}
|
|
@@ -1 +1 @@
|
|
|
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;CAC/C,IAAI,OAAO,UAAU,UACnB,OAAO;CAET,OAAO,MAAM,KAAK;AACpB;AAEA,SAAgB,sBAAsB,SAA8C;CAClF,OAAO,wBAAwB,SAAS,IAAI,KAAK,wBAAwB,SAAS,IAAI;AACxF;AAEA,SAAS,6BAA6B,OAAsC;CAC1E,IAAI,OAAO,UAAU,WACnB,OAAO;EACL,WAAW;EACX,OAAO;EACP,QAAQ;CACV;CAEF,IAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,aAAa,MAAM,KAAK,
|
|
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;CAC/C,IAAI,OAAO,UAAU,UACnB,OAAO;CAET,OAAO,MAAM,KAAK;AACpB;AAEA,SAAgB,sBAAsB,SAA8C;CAClF,OAAO,wBAAwB,SAAS,IAAI,KAAK,wBAAwB,SAAS,IAAI;AACxF;AAEA,SAAS,6BAA6B,OAAsC;CAC1E,IAAI,OAAO,UAAU,WACnB,OAAO;EACL,WAAW;EACX,OAAO;EACP,QAAQ;CACV;CAEF,IAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,aAAa,MAAM,KAAK,CAAC,CAAC,YAAY;EAC5C,IAAI,CAAC,cAAc,eAAe,UAAU,eAAe,SACzD,OAAO;GACL,WAAW;GACX,OAAO;GACP,QAAQ;EACV;EAEF,IAAI,eAAe,UAAU,eAAe,YAAY,eAAe,SACrE,OAAO;GACL,WAAW;GACX,OAAO;GACP,QAAQ;EACV;EAEF,OAAO;GACL,WAAW;GACX,OAAO;GACP,QAAQ;EACV;CACF;CACA,IAAI,SAAS,OAAO,UAAU,UAAU;EACtC,MAAM,UAAU;EAOhB,MAAM,SAAS,QAAQ,QAAQ,UAAU,QAAQ,IAAI;EACrD,MAAM,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,WAAW;EAC3E,MAAM,YAAY,QAAQ,aAAa,OAAQ,SAAS,SAAU,QAAQ,QAAQ,SAAS;EAC3F,OAAO;GACL;GACA,OAAO,aAAa;GACpB,QAAQ,aAAa;EACvB;CACF;CACA,OAAO;EACL,WAAW;EACX,OAAO;EACP,QAAQ;CACV;AACF;AAEA,SAAgB,6BAA6B;CAE3C,MAAM,SAASA,WAAc;CAC7B,IAAI,OAAO,WAAW,YACpB,OAAO,6BAA8B,OAAyB,CAAC;CAEjE,OAAO,6BAA6B,MAAM;AAC5C;AAEA,SAAgB,qBAAqB;CAEnC,OAAOA,WAAc;AACvB;AAEA,SAAgB,qBAAqB;CAEnC,MAAM,QAAQA,WAAc;CAC5B,IAAI,SAAS,OAAO,UAAU,UAC5B,OAAO,EAAE,GAAI,MAAkC;CAEjD,OAAO,CAAC;AACV;AAEA,SAAgB,0BACd,4BACA,mBACA;CACA,OAAO;EACL,cAAc,CAAC;EACf,iBAAiB,UAAkE;GACjF,IAAI,OAAO,aAAa,YACtB;GAEF,MAAM,SAAS,2BAA2B;GAC1C,wBAAwB,SAAS,EAAE,WAAW,OAAO,UAAU,CAAC,CAAC;EACnE;EACA,cAAc,UAAoC;GAChD,IAAI,OAAO,aAAa,YACtB;GAEF,MAAM,SAAS,2BAA2B;GAC1C,IAAI,CAAC,OAAO,aAAa,CAAC,OAAO,OAC/B;GAEF,wBAAwB,SAAS,CAAC;EACpC;EACA,eAAe,UAAoC;GACjD,IAAI,OAAO,aAAa,YACtB;GAEF,MAAM,SAAS,2BAA2B;GAC1C,IAAI,CAAC,OAAO,aAAa,CAAC,OAAO,QAC/B;GAEF,wBAAwB,SAAS,CAAC;EACpC;CACF;AACF;AAEA,SAAgB,uBAAuB,OAAc,gBAAgD;CACnG,MAAM,iBAAiB,QAA2C,SAAoB;EACpF,MAAM,UAAU,iBAAiB;EACjC,IAAI,OAAO,YAAY,YACrB,QAAQ,MAAM,gBAAgB,IAAI;CAEtC;CACA,OAAO;EACL,MAAM,GAAG,MAAiB;GACxB,IAAI,QAAQ,GACV;GAEF,cAAc,SAAS,IAAI;EAC7B;EACA,KAAK,GAAG,MAAiB;GACvB,cAAc,QAAQ,IAAI;EAC5B;EACA,IAAI,GAAG,MAAiB;GACtB,cAAc,OAAO,IAAI;EAC3B;EACA,KAAK,GAAG,MAAiB;GACvB,cAAc,QAAQ,IAAI;EAC5B;CACF;AACF;AAEA,SAAgB,qBAAqB,WAAmB,MAAgC;CACtF,MAAM,gBAAgB;CAOtB,cAAc,yCAAyC,CAAC;CACxD,cAAc,oCAAoC,CAAC,KAAK;EACtD,WAAW,OAAO,aAAa,EAAE;EACjC,MAAM,EAAE,GAAI,QAAQ,CAAC,EAAG;EACxB,WAAW,KAAK,IAAI;CACtB,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
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;CACnF,IAAI,UAAU,YAAY,UAAU,YAAY,UAAU,SAAS,UAAU,UAC3E,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,8BAA8B,OAAgB;CAC5D,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB,OAAO,CAAC;CAEV,OAAO,MACJ,QAAQ,SAAyB,OAAO,SAAS,QAAQ,
|
|
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;CACnF,IAAI,UAAU,YAAY,UAAU,YAAY,UAAU,SAAS,UAAU,UAC3E,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,8BAA8B,OAAgB;CAC5D,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB,OAAO,CAAC;CAEV,OAAO,MACJ,QAAQ,SAAyB,OAAO,SAAS,QAAQ,CAAC,CAC1D,KAAI,SAAQ,KAAK,KAAK,CAAC,CAAC,CACxB,OAAO,OAAO;AACnB;AAEA,SAAgB,4BAA4B,SAAmB;CAE7D,MAAM,SAASA,WAAc;CAC7B,MAAM,cAAc,OAAO,WAAW,aACjC,OAAsC,OAAO,IAC9C;CACJ,IAAI,eAAe,OAAO,gBAAgB,UAAU;EAClD,MAAM,SAAmD,CAAC;EAC1D,MAAM,SAAS;EACf,KAAK,MAAM,UAAU,SACnB,OAAO,UAAU,2BAA2B,OAAO,OAAO;EAE5D,OAAO;CACT;CACA,MAAM,iBAAiB,2BAA2B,WAAW;CAC7D,OAAO,QAAQ,QAAkD,QAAQ,WAAW;EAClF,OAAO,UAAU;EACjB,OAAO;CACT,GAAG,CAAC,CAAC;AACP"}
|
|
@@ -1 +1 @@
|
|
|
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":";AAAA,SAAgB,kBAAkB,WAAmB;CACnD,IAAI,WAAW,KAAK,SAAS,GAC3B,OAAO;CAET,IAAI,oBAAoB,KAAK,SAAS,GACpC,OAAO;CAET,IAAI,WAAW,KAAK,SAAS,GAC3B,OAAO;CAET,IAAI,YAAY,KAAK,SAAS,GAC5B,OAAO;CAET,IAAI,SAAS,KAAK,SAAS,GACzB,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,oBACd,WACA,kBACA;CAOA,MAAM,cAHMA,kBAAqB,eAAe,YAC3C,kBAAkB,YAClB,kBAAkB,SAAS,
|
|
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":"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;CACtB,OAAO;EACL,SAAS,cAAc;EACvB,OAAO,cAAc;EACrB,QAAQ,cAAc;CACxB;AACF;AAEA,SAAgB,kBAAkB;CAChC,IAAI,OAAO,aAAa,aACtB;CAEF,MAAM,WAAW,SAAS,cAAc,cAAc;CACtD,IAAI,UACF,OAAO;CAET,MAAM,QAAQ,SAAS,cAAc,KAAK;CAC1C,MAAM,aAAa,MAAM,QAAQ;CACjC,MAAM,aAAa,wBAAwB,MAAM;CACjD,MAAM,aAAa,UAAU,MAAM;CACnC,MAAM,aAAa,QAAQ,QAAQ;CACnC,MAAM,aAAa,aAAa,QAAQ;CACxC,IAAI,CAAC,SAAS,MACZ;CAEF,SAAS,KAAK,OAAO,KAAK;CAC1B,OAAO;AACT;AAEA,SAAgB,gBAAgB,OAAoB,SAAkB;CACpE,IAAI,SACF,MAAM,gBAAgB,QAAQ;MAG9B,MAAM,aAAa,UAAU,MAAM;CAErC,MAAM,aAAa,SAAS;EAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAY,UAAU,MAAM;CAC9B,
|
|
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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"videoContext.mjs","names":[],"sources":["../../../src/runtime/polyfill/videoContext.ts"],"sourcesContent":["import type { VideoContext } from './types/platformRuntime'\n\nfunction resolveVideoElementById(videoId: string) {\n if (typeof document === 'undefined') {\n return undefined\n }\n const normalized = String(videoId ?? '').trim()\n if (!normalized) {\n return undefined\n }\n const fromId = document.getElementById(normalized)\n if (fromId && 'play' in fromId && 'pause' in fromId) {\n return fromId as unknown as HTMLVideoElement\n }\n const escaped = typeof CSS !== 'undefined' && typeof CSS.escape === 'function'\n ? CSS.escape(normalized)\n : normalized.replace(/\"/g, '\\\\\"')\n const fromQuery = document.querySelector(`video#${escaped}`)\n if (fromQuery && 'play' in fromQuery && 'pause' in fromQuery) {\n return fromQuery as HTMLVideoElement\n }\n return undefined\n}\n\nexport function createVideoContextBridge(videoId: string): VideoContext {\n const getVideo = () => resolveVideoElementById(videoId)\n return {\n play() {\n getVideo()?.play?.()\n },\n pause() {\n getVideo()?.pause?.()\n },\n stop() {\n const video = getVideo()\n if (!video) {\n return\n }\n video.pause?.()\n try {\n video.currentTime = 0\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n seek(position: number) {\n if (!Number.isFinite(position)) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.currentTime = Math.max(0, position)\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n playbackRate(rate: number) {\n if (!Number.isFinite(rate) || rate <= 0) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.playbackRate = rate\n }\n catch {\n // ignore unsupported playbackRate mutation\n }\n },\n requestFullScreen() {\n const video = getVideo() as (HTMLVideoElement & { requestFullscreen?: () => Promise<void> | void }) | undefined\n video?.requestFullscreen?.()\n },\n exitFullScreen() {\n const runtimeDocument = document as { exitFullscreen?: () => Promise<void> | void }\n runtimeDocument.exitFullscreen?.()\n },\n }\n}\n"],"mappings":";AAEA,SAAS,wBAAwB,SAAiB;CAChD,IAAI,OAAO,aAAa,aACtB;CAEF,MAAM,aAAa,OAAO,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"videoContext.mjs","names":[],"sources":["../../../src/runtime/polyfill/videoContext.ts"],"sourcesContent":["import type { VideoContext } from './types/platformRuntime'\n\nfunction resolveVideoElementById(videoId: string) {\n if (typeof document === 'undefined') {\n return undefined\n }\n const normalized = String(videoId ?? '').trim()\n if (!normalized) {\n return undefined\n }\n const fromId = document.getElementById(normalized)\n if (fromId && 'play' in fromId && 'pause' in fromId) {\n return fromId as unknown as HTMLVideoElement\n }\n const escaped = typeof CSS !== 'undefined' && typeof CSS.escape === 'function'\n ? CSS.escape(normalized)\n : normalized.replace(/\"/g, '\\\\\"')\n const fromQuery = document.querySelector(`video#${escaped}`)\n if (fromQuery && 'play' in fromQuery && 'pause' in fromQuery) {\n return fromQuery as HTMLVideoElement\n }\n return undefined\n}\n\nexport function createVideoContextBridge(videoId: string): VideoContext {\n const getVideo = () => resolveVideoElementById(videoId)\n return {\n play() {\n getVideo()?.play?.()\n },\n pause() {\n getVideo()?.pause?.()\n },\n stop() {\n const video = getVideo()\n if (!video) {\n return\n }\n video.pause?.()\n try {\n video.currentTime = 0\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n seek(position: number) {\n if (!Number.isFinite(position)) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.currentTime = Math.max(0, position)\n }\n catch {\n // ignore browsers that block currentTime mutation\n }\n },\n playbackRate(rate: number) {\n if (!Number.isFinite(rate) || rate <= 0) {\n return\n }\n const video = getVideo()\n if (!video) {\n return\n }\n try {\n video.playbackRate = rate\n }\n catch {\n // ignore unsupported playbackRate mutation\n }\n },\n requestFullScreen() {\n const video = getVideo() as (HTMLVideoElement & { requestFullscreen?: () => Promise<void> | void }) | undefined\n video?.requestFullscreen?.()\n },\n exitFullScreen() {\n const runtimeDocument = document as { exitFullscreen?: () => Promise<void> | void }\n runtimeDocument.exitFullscreen?.()\n },\n }\n}\n"],"mappings":";AAEA,SAAS,wBAAwB,SAAiB;CAChD,IAAI,OAAO,aAAa,aACtB;CAEF,MAAM,aAAa,OAAO,WAAW,EAAE,CAAC,CAAC,KAAK;CAC9C,IAAI,CAAC,YACH;CAEF,MAAM,SAAS,SAAS,eAAe,UAAU;CACjD,IAAI,UAAU,UAAU,UAAU,WAAW,QAC3C,OAAO;CAET,MAAM,UAAU,OAAO,QAAQ,eAAe,OAAO,IAAI,WAAW,aAChE,IAAI,OAAO,UAAU,IACrB,WAAW,QAAQ,MAAM,MAAK;CAClC,MAAM,YAAY,SAAS,cAAc,SAAS,SAAS;CAC3D,IAAI,aAAa,UAAU,aAAa,WAAW,WACjD,OAAO;AAGX;AAEA,SAAgB,yBAAyB,SAA+B;CACtE,MAAM,iBAAiB,wBAAwB,OAAO;CACtD,OAAO;EACL,OAAO;GACL,SAAS,CAAC,EAAE,OAAO;EACrB;EACA,QAAQ;GACN,SAAS,CAAC,EAAE,QAAQ;EACtB;EACA,OAAO;GACL,MAAM,QAAQ,SAAS;GACvB,IAAI,CAAC,OACH;GAEF,MAAM,QAAQ;GACd,IAAI;IACF,MAAM,cAAc;GACtB,QACM,CAEN;EACF;EACA,KAAK,UAAkB;GACrB,IAAI,CAAC,OAAO,SAAS,QAAQ,GAC3B;GAEF,MAAM,QAAQ,SAAS;GACvB,IAAI,CAAC,OACH;GAEF,IAAI;IACF,MAAM,cAAc,KAAK,IAAI,GAAG,QAAQ;GAC1C,QACM,CAEN;EACF;EACA,aAAa,MAAc;GACzB,IAAI,CAAC,OAAO,SAAS,IAAI,KAAK,QAAQ,GACpC;GAEF,MAAM,QAAQ,SAAS;GACvB,IAAI,CAAC,OACH;GAEF,IAAI;IACF,MAAM,eAAe;GACvB,QACM,CAEN;EACF;EACA,oBAAoB;GAElB,AADc,SACV,CAAC,EAAE,oBAAoB;EAC7B;EACA,iBAAiB;GAEf,SAAgB,iBAAiB;EACnC;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windowResize.mjs","names":[],"sources":["../../../src/runtime/polyfill/windowResize.ts"],"sourcesContent":["interface WindowResizeSnapshot {\n size: {\n windowWidth: number\n windowHeight: number\n }\n windowWidth: number\n windowHeight: number\n}\n\nconst windowResizeCallbacks = new Set<(result: WindowResizeSnapshot) => void>()\nlet windowResizeBridgeBound = false\n\nfunction readWindowResizeResult(getWindowInfo: () => { windowWidth: number, windowHeight: number }) {\n const windowInfo = getWindowInfo()\n return {\n size: {\n windowWidth: windowInfo.windowWidth,\n windowHeight: windowInfo.windowHeight,\n },\n windowWidth: windowInfo.windowWidth,\n windowHeight: windowInfo.windowHeight,\n }\n}\n\nfunction notifyWindowResize(getWindowInfo: () => { windowWidth: number, windowHeight: number }) {\n if (windowResizeCallbacks.size === 0) {\n return\n }\n const result = readWindowResizeResult(getWindowInfo)\n for (const callback of windowResizeCallbacks) {\n callback(result)\n }\n}\n\nfunction bindWindowResizeBridge(getWindowInfo: () => { windowWidth: number, windowHeight: number }) {\n if (windowResizeBridgeBound) {\n return\n }\n windowResizeBridgeBound = true\n const runtimeTarget = (typeof window !== 'undefined'\n ? window\n : globalThis) as {\n addEventListener?: (type: string, listener: () => void) => void\n }\n runtimeTarget.addEventListener?.('resize', () => notifyWindowResize(getWindowInfo))\n}\n\nexport function addWindowResizeCallback(\n callback: (result: WindowResizeSnapshot) => void,\n getWindowInfo: () => { windowWidth: number, windowHeight: number },\n) {\n bindWindowResizeBridge(getWindowInfo)\n windowResizeCallbacks.add(callback)\n}\n\nexport function removeWindowResizeCallback(callback?: (result: WindowResizeSnapshot) => void) {\n if (typeof callback !== 'function') {\n windowResizeCallbacks.clear()\n return\n }\n windowResizeCallbacks.delete(callback)\n}\n"],"mappings":";AASA,MAAM,wCAAwB,IAAI,IAA4C;AAC9E,IAAI,0BAA0B;AAE9B,SAAS,uBAAuB,eAAoE;CAClG,MAAM,aAAa,cAAc;CACjC,OAAO;EACL,MAAM;GACJ,aAAa,WAAW;GACxB,cAAc,WAAW;EAC3B;EACA,aAAa,WAAW;EACxB,cAAc,WAAW;CAC3B;AACF;AAEA,SAAS,mBAAmB,eAAoE;CAC9F,IAAI,sBAAsB,SAAS,GACjC;CAEF,MAAM,SAAS,uBAAuB,aAAa;CACnD,KAAK,MAAM,YAAY,uBACrB,SAAS,MAAM;AAEnB;AAEA,SAAS,uBAAuB,eAAoE;CAClG,IAAI,yBACF;CAEF,0BAA0B;CAM1B,CALuB,OAAO,WAAW,cACrC,SACA,
|
|
1
|
+
{"version":3,"file":"windowResize.mjs","names":[],"sources":["../../../src/runtime/polyfill/windowResize.ts"],"sourcesContent":["interface WindowResizeSnapshot {\n size: {\n windowWidth: number\n windowHeight: number\n }\n windowWidth: number\n windowHeight: number\n}\n\nconst windowResizeCallbacks = new Set<(result: WindowResizeSnapshot) => void>()\nlet windowResizeBridgeBound = false\n\nfunction readWindowResizeResult(getWindowInfo: () => { windowWidth: number, windowHeight: number }) {\n const windowInfo = getWindowInfo()\n return {\n size: {\n windowWidth: windowInfo.windowWidth,\n windowHeight: windowInfo.windowHeight,\n },\n windowWidth: windowInfo.windowWidth,\n windowHeight: windowInfo.windowHeight,\n }\n}\n\nfunction notifyWindowResize(getWindowInfo: () => { windowWidth: number, windowHeight: number }) {\n if (windowResizeCallbacks.size === 0) {\n return\n }\n const result = readWindowResizeResult(getWindowInfo)\n for (const callback of windowResizeCallbacks) {\n callback(result)\n }\n}\n\nfunction bindWindowResizeBridge(getWindowInfo: () => { windowWidth: number, windowHeight: number }) {\n if (windowResizeBridgeBound) {\n return\n }\n windowResizeBridgeBound = true\n const runtimeTarget = (typeof window !== 'undefined'\n ? window\n : globalThis) as {\n addEventListener?: (type: string, listener: () => void) => void\n }\n runtimeTarget.addEventListener?.('resize', () => notifyWindowResize(getWindowInfo))\n}\n\nexport function addWindowResizeCallback(\n callback: (result: WindowResizeSnapshot) => void,\n getWindowInfo: () => { windowWidth: number, windowHeight: number },\n) {\n bindWindowResizeBridge(getWindowInfo)\n windowResizeCallbacks.add(callback)\n}\n\nexport function removeWindowResizeCallback(callback?: (result: WindowResizeSnapshot) => void) {\n if (typeof callback !== 'function') {\n windowResizeCallbacks.clear()\n return\n }\n windowResizeCallbacks.delete(callback)\n}\n"],"mappings":";AASA,MAAM,wCAAwB,IAAI,IAA4C;AAC9E,IAAI,0BAA0B;AAE9B,SAAS,uBAAuB,eAAoE;CAClG,MAAM,aAAa,cAAc;CACjC,OAAO;EACL,MAAM;GACJ,aAAa,WAAW;GACxB,cAAc,WAAW;EAC3B;EACA,aAAa,WAAW;EACxB,cAAc,WAAW;CAC3B;AACF;AAEA,SAAS,mBAAmB,eAAoE;CAC9F,IAAI,sBAAsB,SAAS,GACjC;CAEF,MAAM,SAAS,uBAAuB,aAAa;CACnD,KAAK,MAAM,YAAY,uBACrB,SAAS,MAAM;AAEnB;AAEA,SAAS,uBAAuB,eAAoE;CAClG,IAAI,yBACF;CAEF,0BAA0B;CAM1B,CALuB,OAAO,WAAW,cACrC,SACA,WAGS,CAAC,mBAAmB,gBAAgB,mBAAmB,aAAa,CAAC;AACpF;AAEA,SAAgB,wBACd,UACA,eACA;CACA,uBAAuB,aAAa;CACpC,sBAAsB,IAAI,QAAQ;AACpC;AAEA,SAAgB,2BAA2B,UAAmD;CAC5F,IAAI,OAAO,aAAa,YAAY;EAClC,sBAAsB,MAAM;EAC5B;CACF;CACA,sBAAsB,OAAO,QAAQ;AACvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.mjs","names":[],"sources":["../../../src/runtime/polyfill/worker.ts"],"sourcesContent":["type WorkerMessageCallback = (result: { data: unknown }) => void\ntype WorkerErrorCallback = (error: {\n message: string\n filename?: string\n lineno?: number\n colno?: number\n}) => void\n\nfunction resolveWorkerPath(path: unknown) {\n const normalized = typeof path === 'string' ? path.trim() : ''\n if (!normalized) {\n throw new TypeError('createWorker:fail invalid scriptPath')\n }\n try {\n const runtimeLocation = (typeof location !== 'undefined' ? location : undefined) as { href?: string } | undefined\n const base = runtimeLocation?.href\n if (base) {\n return new URL(normalized, base).toString()\n }\n }\n catch {\n // fallback to raw path\n }\n return normalized\n}\n\nexport function createWorkerBridge(path: string) {\n const WorkerCtor = (globalThis as { Worker?: typeof Worker }).Worker\n if (typeof WorkerCtor !== 'function') {\n throw new TypeError('createWorker:fail Worker is unavailable')\n }\n const scriptPath = resolveWorkerPath(path)\n\n let nativeWorker: Worker\n try {\n nativeWorker = new WorkerCtor(scriptPath)\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new TypeError(`createWorker:fail ${message}`)\n }\n\n const messageCallbacks = new Set<WorkerMessageCallback>()\n const errorCallbacks = new Set<WorkerErrorCallback>()\n\n const handleMessage = (event: MessageEvent<unknown>) => {\n for (const callback of messageCallbacks) {\n callback({ data: event?.data })\n }\n }\n const handleError = (event: ErrorEvent) => {\n const payload = {\n message: event?.message ?? 'unknown error',\n filename: event?.filename,\n lineno: event?.lineno,\n colno: event?.colno,\n }\n for (const callback of errorCallbacks) {\n callback(payload)\n }\n }\n\n if (typeof nativeWorker.addEventListener === 'function') {\n nativeWorker.addEventListener('message', handleMessage as EventListener)\n nativeWorker.addEventListener('error', handleError as EventListener)\n }\n else {\n nativeWorker.onmessage = handleMessage as ((this: AbstractWorker, ev: MessageEvent) => any)\n nativeWorker.onerror = handleError as ((this: AbstractWorker, ev: ErrorEvent) => any)\n }\n\n return {\n postMessage(data: unknown) {\n nativeWorker.postMessage(data)\n },\n terminate() {\n nativeWorker.terminate()\n messageCallbacks.clear()\n errorCallbacks.clear()\n },\n onMessage(callback: WorkerMessageCallback) {\n if (typeof callback === 'function') {\n messageCallbacks.add(callback)\n }\n },\n offMessage(callback?: WorkerMessageCallback) {\n if (typeof callback !== 'function') {\n messageCallbacks.clear()\n return\n }\n messageCallbacks.delete(callback)\n },\n onError(callback: WorkerErrorCallback) {\n if (typeof callback === 'function') {\n errorCallbacks.add(callback)\n }\n },\n offError(callback?: WorkerErrorCallback) {\n if (typeof callback !== 'function') {\n errorCallbacks.clear()\n return\n }\n errorCallbacks.delete(callback)\n },\n }\n}\n"],"mappings":";AAQA,SAAS,kBAAkB,MAAe;CACxC,MAAM,aAAa,OAAO,SAAS,WAAW,KAAK,KAAK,IAAI;CAC5D,IAAI,CAAC,YACH,MAAM,IAAI,UAAU,sCAAsC;CAE5D,IAAI;EAEF,MAAM,QADmB,OAAO,aAAa,cAAc,WAAW,
|
|
1
|
+
{"version":3,"file":"worker.mjs","names":[],"sources":["../../../src/runtime/polyfill/worker.ts"],"sourcesContent":["type WorkerMessageCallback = (result: { data: unknown }) => void\ntype WorkerErrorCallback = (error: {\n message: string\n filename?: string\n lineno?: number\n colno?: number\n}) => void\n\nfunction resolveWorkerPath(path: unknown) {\n const normalized = typeof path === 'string' ? path.trim() : ''\n if (!normalized) {\n throw new TypeError('createWorker:fail invalid scriptPath')\n }\n try {\n const runtimeLocation = (typeof location !== 'undefined' ? location : undefined) as { href?: string } | undefined\n const base = runtimeLocation?.href\n if (base) {\n return new URL(normalized, base).toString()\n }\n }\n catch {\n // fallback to raw path\n }\n return normalized\n}\n\nexport function createWorkerBridge(path: string) {\n const WorkerCtor = (globalThis as { Worker?: typeof Worker }).Worker\n if (typeof WorkerCtor !== 'function') {\n throw new TypeError('createWorker:fail Worker is unavailable')\n }\n const scriptPath = resolveWorkerPath(path)\n\n let nativeWorker: Worker\n try {\n nativeWorker = new WorkerCtor(scriptPath)\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new TypeError(`createWorker:fail ${message}`)\n }\n\n const messageCallbacks = new Set<WorkerMessageCallback>()\n const errorCallbacks = new Set<WorkerErrorCallback>()\n\n const handleMessage = (event: MessageEvent<unknown>) => {\n for (const callback of messageCallbacks) {\n callback({ data: event?.data })\n }\n }\n const handleError = (event: ErrorEvent) => {\n const payload = {\n message: event?.message ?? 'unknown error',\n filename: event?.filename,\n lineno: event?.lineno,\n colno: event?.colno,\n }\n for (const callback of errorCallbacks) {\n callback(payload)\n }\n }\n\n if (typeof nativeWorker.addEventListener === 'function') {\n nativeWorker.addEventListener('message', handleMessage as EventListener)\n nativeWorker.addEventListener('error', handleError as EventListener)\n }\n else {\n nativeWorker.onmessage = handleMessage as ((this: AbstractWorker, ev: MessageEvent) => any)\n nativeWorker.onerror = handleError as ((this: AbstractWorker, ev: ErrorEvent) => any)\n }\n\n return {\n postMessage(data: unknown) {\n nativeWorker.postMessage(data)\n },\n terminate() {\n nativeWorker.terminate()\n messageCallbacks.clear()\n errorCallbacks.clear()\n },\n onMessage(callback: WorkerMessageCallback) {\n if (typeof callback === 'function') {\n messageCallbacks.add(callback)\n }\n },\n offMessage(callback?: WorkerMessageCallback) {\n if (typeof callback !== 'function') {\n messageCallbacks.clear()\n return\n }\n messageCallbacks.delete(callback)\n },\n onError(callback: WorkerErrorCallback) {\n if (typeof callback === 'function') {\n errorCallbacks.add(callback)\n }\n },\n offError(callback?: WorkerErrorCallback) {\n if (typeof callback !== 'function') {\n errorCallbacks.clear()\n return\n }\n errorCallbacks.delete(callback)\n },\n }\n}\n"],"mappings":";AAQA,SAAS,kBAAkB,MAAe;CACxC,MAAM,aAAa,OAAO,SAAS,WAAW,KAAK,KAAK,IAAI;CAC5D,IAAI,CAAC,YACH,MAAM,IAAI,UAAU,sCAAsC;CAE5D,IAAI;EAEF,MAAM,QADmB,OAAO,aAAa,cAAc,WAAW,OAC1C,EAAE;EAC9B,IAAI,MACF,OAAO,IAAI,IAAI,YAAY,IAAI,CAAC,CAAC,SAAS;CAE9C,QACM,CAEN;CACA,OAAO;AACT;AAEA,SAAgB,mBAAmB,MAAc;CAC/C,MAAM,aAAc,WAA0C;CAC9D,IAAI,OAAO,eAAe,YACxB,MAAM,IAAI,UAAU,yCAAyC;CAE/D,MAAM,aAAa,kBAAkB,IAAI;CAEzC,IAAI;CACJ,IAAI;EACF,eAAe,IAAI,WAAW,UAAU;CAC1C,SACO,OAAO;EACZ,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EACrE,MAAM,IAAI,UAAU,qBAAqB,SAAS;CACpD;CAEA,MAAM,mCAAmB,IAAI,IAA2B;CACxD,MAAM,iCAAiB,IAAI,IAAyB;CAEpD,MAAM,iBAAiB,UAAiC;EACtD,KAAK,MAAM,YAAY,kBACrB,SAAS,EAAE,MAAM,OAAO,KAAK,CAAC;CAElC;CACA,MAAM,eAAe,UAAsB;EACzC,MAAM,UAAU;GACd,SAAS,OAAO,WAAW;GAC3B,UAAU,OAAO;GACjB,QAAQ,OAAO;GACf,OAAO,OAAO;EAChB;EACA,KAAK,MAAM,YAAY,gBACrB,SAAS,OAAO;CAEpB;CAEA,IAAI,OAAO,aAAa,qBAAqB,YAAY;EACvD,aAAa,iBAAiB,WAAW,aAA8B;EACvE,aAAa,iBAAiB,SAAS,WAA4B;CACrE,OACK;EACH,aAAa,YAAY;EACzB,aAAa,UAAU;CACzB;CAEA,OAAO;EACL,YAAY,MAAe;GACzB,aAAa,YAAY,IAAI;EAC/B;EACA,YAAY;GACV,aAAa,UAAU;GACvB,iBAAiB,MAAM;GACvB,eAAe,MAAM;EACvB;EACA,UAAU,UAAiC;GACzC,IAAI,OAAO,aAAa,YACtB,iBAAiB,IAAI,QAAQ;EAEjC;EACA,WAAW,UAAkC;GAC3C,IAAI,OAAO,aAAa,YAAY;IAClC,iBAAiB,MAAM;IACvB;GACF;GACA,iBAAiB,OAAO,QAAQ;EAClC;EACA,QAAQ,UAA+B;GACrC,IAAI,OAAO,aAAa,YACtB,eAAe,IAAI,QAAQ;EAE/B;EACA,SAAS,UAAgC;GACvC,IAAI,OAAO,aAAa,YAAY;IAClC,eAAe,MAAM;IACrB;GACF;GACA,eAAe,OAAO,QAAQ;EAChC;CACF;AACF"}
|