@weapp-vite/web 1.3.15 → 1.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.mjs +18 -0
- package/dist/compiler/wxml/attributes.mjs +93 -0
- package/dist/compiler/wxml/attributes.mjs.map +1 -0
- package/dist/compiler/wxml/compile.mjs +158 -0
- package/dist/compiler/wxml/compile.mjs.map +1 -0
- package/dist/compiler/wxml/dependency.mjs +31 -0
- package/dist/compiler/wxml/dependency.mjs.map +1 -0
- package/dist/compiler/wxml/interpolation.mjs +142 -0
- package/dist/compiler/wxml/interpolation.mjs.map +1 -0
- package/dist/compiler/wxml/navigation.mjs +85 -0
- package/dist/compiler/wxml/navigation.mjs.map +1 -0
- package/dist/compiler/wxml/parser.mjs +41 -0
- package/dist/compiler/wxml/parser.mjs.map +1 -0
- package/dist/compiler/wxml/renderer.mjs +114 -0
- package/dist/compiler/wxml/renderer.mjs.map +1 -0
- package/dist/compiler/wxml/specialNodes.mjs +84 -0
- package/dist/compiler/wxml/specialNodes.mjs.map +1 -0
- package/dist/compiler/wxs.mjs +83 -0
- package/dist/compiler/wxs.mjs.map +1 -0
- package/dist/css/wxss.d.mts +25 -0
- package/dist/css/wxss.mjs +17 -0
- package/dist/css/wxss.mjs.map +1 -0
- package/dist/index.d.mts +18 -2
- package/dist/index.mjs +18 -3
- package/dist/plugin/constants.mjs +43 -0
- package/dist/plugin/constants.mjs.map +1 -0
- package/dist/plugin/entry.mjs +29 -0
- package/dist/plugin/entry.mjs.map +1 -0
- package/dist/plugin/files.mjs +58 -0
- package/dist/plugin/files.mjs.map +1 -0
- package/dist/plugin/index.d.mts +33 -0
- package/dist/plugin/index.mjs +188 -0
- package/dist/plugin/index.mjs.map +1 -0
- package/dist/plugin/navigation.mjs +20 -0
- package/dist/plugin/navigation.mjs.map +1 -0
- package/dist/plugin/path.mjs +85 -0
- package/dist/plugin/path.mjs.map +1 -0
- package/dist/plugin/register.mjs +83 -0
- package/dist/plugin/register.mjs.map +1 -0
- package/dist/plugin/scan.mjs +195 -0
- package/dist/plugin/scan.mjs.map +1 -0
- package/dist/plugin/scanConfig.mjs +45 -0
- package/dist/plugin/scanConfig.mjs.map +1 -0
- package/dist/plugin/state.mjs +22 -0
- package/dist/plugin/state.mjs.map +1 -0
- package/dist/plugin/types.d.mts +46 -0
- package/dist/plugin.d.mts +3 -2
- package/dist/plugin.mjs +3 -2
- package/dist/runtime/button/helpers.mjs +92 -0
- package/dist/runtime/button/helpers.mjs.map +1 -0
- package/dist/runtime/button/index.d.mts +9 -0
- package/dist/runtime/button/index.mjs +198 -0
- package/dist/runtime/button/index.mjs.map +1 -0
- package/dist/runtime/button/style.mjs +168 -0
- package/dist/runtime/button/style.mjs.map +1 -0
- package/dist/runtime/component/behavior.mjs +98 -0
- package/dist/runtime/component/behavior.mjs.map +1 -0
- package/dist/runtime/component/constants.mjs +8 -0
- package/dist/runtime/component/constants.mjs.map +1 -0
- package/dist/runtime/component/dom.mjs +26 -0
- package/dist/runtime/component/dom.mjs.map +1 -0
- package/dist/runtime/component/element.mjs +208 -0
- package/dist/runtime/component/element.mjs.map +1 -0
- package/dist/runtime/component/events.mjs +48 -0
- package/dist/runtime/component/events.mjs.map +1 -0
- package/dist/runtime/component/index.d.mts +7 -0
- package/dist/runtime/component/index.mjs +44 -0
- package/dist/runtime/component/index.mjs.map +1 -0
- package/dist/runtime/component/state.mjs +63 -0
- package/dist/runtime/component/state.mjs.map +1 -0
- package/dist/runtime/component/types.d.mts +49 -0
- package/dist/runtime/component/utils.mjs +39 -0
- package/dist/runtime/component/utils.mjs.map +1 -0
- package/dist/runtime/execution.d.mts +7 -0
- package/dist/runtime/execution.mjs +37 -0
- package/dist/runtime/execution.mjs.map +1 -0
- package/dist/runtime/index.d.mts +16 -2
- package/dist/runtime/index.mjs +16 -2
- package/dist/runtime/legacyTemplate/dom.mjs +131 -0
- package/dist/runtime/legacyTemplate/dom.mjs.map +1 -0
- package/dist/runtime/legacyTemplate/expression.mjs +113 -0
- package/dist/runtime/legacyTemplate/expression.mjs.map +1 -0
- package/dist/runtime/legacyTemplate/index.d.mts +9 -0
- package/dist/runtime/legacyTemplate/index.mjs +131 -0
- package/dist/runtime/legacyTemplate/index.mjs.map +1 -0
- package/dist/runtime/legacyTemplate/types.d.mts +6 -0
- package/dist/runtime/navigationBar/index.d.mts +10 -0
- package/dist/runtime/navigationBar/index.mjs +162 -0
- package/dist/runtime/navigationBar/index.mjs.map +1 -0
- package/dist/runtime/navigationBar/style.mjs +108 -0
- package/dist/runtime/navigationBar/style.mjs.map +1 -0
- package/dist/runtime/polyfill/ad.mjs +150 -0
- package/dist/runtime/polyfill/ad.mjs.map +1 -0
- package/dist/runtime/polyfill/appState.mjs +31 -0
- package/dist/runtime/polyfill/appState.mjs.map +1 -0
- package/dist/runtime/polyfill/async.mjs +31 -0
- package/dist/runtime/polyfill/async.mjs.map +1 -0
- package/dist/runtime/polyfill/auth.mjs +120 -0
- package/dist/runtime/polyfill/auth.mjs.map +1 -0
- package/dist/runtime/polyfill/authApi.mjs +101 -0
- package/dist/runtime/polyfill/authApi.mjs.map +1 -0
- package/dist/runtime/polyfill/background.mjs +31 -0
- package/dist/runtime/polyfill/background.mjs.map +1 -0
- package/dist/runtime/polyfill/canvasContext.mjs +115 -0
- package/dist/runtime/polyfill/canvasContext.mjs.map +1 -0
- package/dist/runtime/polyfill/capability.mjs +17 -0
- package/dist/runtime/polyfill/capability.mjs.map +1 -0
- package/dist/runtime/polyfill/cloud.mjs +39 -0
- package/dist/runtime/polyfill/cloud.mjs.map +1 -0
- package/dist/runtime/polyfill/device.mjs +44 -0
- package/dist/runtime/polyfill/device.mjs.map +1 -0
- package/dist/runtime/polyfill/deviceApi.mjs +31 -0
- package/dist/runtime/polyfill/deviceApi.mjs.map +1 -0
- package/dist/runtime/polyfill/deviceAuthSystemApi.d.mts +102 -0
- package/dist/runtime/polyfill/deviceAuthSystemApi.mjs +144 -0
- package/dist/runtime/polyfill/deviceAuthSystemApi.mjs.map +1 -0
- package/dist/runtime/polyfill/filePicker.mjs +158 -0
- package/dist/runtime/polyfill/filePicker.mjs.map +1 -0
- package/dist/runtime/polyfill/fileSystemManager.mjs +45 -0
- package/dist/runtime/polyfill/fileSystemManager.mjs.map +1 -0
- package/dist/runtime/polyfill/files.mjs +118 -0
- package/dist/runtime/polyfill/files.mjs.map +1 -0
- package/dist/runtime/polyfill/index.d.mts +40 -0
- package/dist/runtime/polyfill/index.mjs +99 -0
- package/dist/runtime/polyfill/index.mjs.map +1 -0
- package/dist/runtime/polyfill/interaction.mjs +38 -0
- package/dist/runtime/polyfill/interaction.mjs.map +1 -0
- package/dist/runtime/polyfill/interactionApi.mjs +54 -0
- package/dist/runtime/polyfill/interactionApi.mjs.map +1 -0
- package/dist/runtime/polyfill/location.mjs +106 -0
- package/dist/runtime/polyfill/location.mjs.map +1 -0
- package/dist/runtime/polyfill/locationApi.mjs +120 -0
- package/dist/runtime/polyfill/locationApi.mjs.map +1 -0
- package/dist/runtime/polyfill/mediaActions.mjs +52 -0
- package/dist/runtime/polyfill/mediaActions.mjs.map +1 -0
- package/dist/runtime/polyfill/mediaApi/file.mjs +63 -0
- package/dist/runtime/polyfill/mediaApi/file.mjs.map +1 -0
- package/dist/runtime/polyfill/mediaApi/info.mjs +59 -0
- package/dist/runtime/polyfill/mediaApi/info.mjs.map +1 -0
- package/dist/runtime/polyfill/mediaApi/picker.mjs +82 -0
- package/dist/runtime/polyfill/mediaApi/picker.mjs.map +1 -0
- package/dist/runtime/polyfill/mediaApi/preview.mjs +39 -0
- package/dist/runtime/polyfill/mediaApi/preview.mjs.map +1 -0
- package/dist/runtime/polyfill/mediaApi/process.mjs +46 -0
- package/dist/runtime/polyfill/mediaApi/process.mjs.map +1 -0
- package/dist/runtime/polyfill/mediaInfo.mjs +136 -0
- package/dist/runtime/polyfill/mediaInfo.mjs.map +1 -0
- package/dist/runtime/polyfill/mediaPicker.mjs +213 -0
- package/dist/runtime/polyfill/mediaPicker.mjs.map +1 -0
- package/dist/runtime/polyfill/mediaProcess.mjs +65 -0
- package/dist/runtime/polyfill/mediaProcess.mjs.map +1 -0
- package/dist/runtime/polyfill/menuApi.mjs +70 -0
- package/dist/runtime/polyfill/menuApi.mjs.map +1 -0
- package/dist/runtime/polyfill/navigationBarRuntime.mjs +65 -0
- package/dist/runtime/polyfill/navigationBarRuntime.mjs.map +1 -0
- package/dist/runtime/polyfill/network/request.mjs +162 -0
- package/dist/runtime/polyfill/network/request.mjs.map +1 -0
- package/dist/runtime/polyfill/network/requestBridge.mjs +49 -0
- package/dist/runtime/polyfill/network/requestBridge.mjs.map +1 -0
- package/dist/runtime/polyfill/network/status.mjs +55 -0
- package/dist/runtime/polyfill/network/status.mjs.map +1 -0
- package/dist/runtime/polyfill/platformApi.mjs +33 -0
- package/dist/runtime/polyfill/platformApi.mjs.map +1 -0
- package/dist/runtime/polyfill/platformRuntime.mjs +120 -0
- package/dist/runtime/polyfill/platformRuntime.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime/dom.mjs +36 -0
- package/dist/runtime/polyfill/routeRuntime/dom.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs +83 -0
- package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime/options.d.mts +33 -0
- package/dist/runtime/polyfill/routeRuntime/options.mjs +76 -0
- package/dist/runtime/polyfill/routeRuntime/options.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime/url.mjs +35 -0
- package/dist/runtime/polyfill/routeRuntime/url.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime.d.mts +43 -0
- package/dist/runtime/polyfill/routeRuntime.mjs +202 -0
- package/dist/runtime/polyfill/routeRuntime.mjs.map +1 -0
- package/dist/runtime/polyfill/runtimeCapabilityApi.mjs +26 -0
- package/dist/runtime/polyfill/runtimeCapabilityApi.mjs.map +1 -0
- package/dist/runtime/polyfill/runtimeDataApi.d.mts +79 -0
- package/dist/runtime/polyfill/runtimeDataApi.mjs +134 -0
- package/dist/runtime/polyfill/runtimeDataApi.mjs.map +1 -0
- package/dist/runtime/polyfill/runtimeInfra.mjs +40 -0
- package/dist/runtime/polyfill/runtimeInfra.mjs.map +1 -0
- package/dist/runtime/polyfill/runtimeOps.mjs +62 -0
- package/dist/runtime/polyfill/runtimeOps.mjs.map +1 -0
- package/dist/runtime/polyfill/selectorQuery.mjs +204 -0
- package/dist/runtime/polyfill/selectorQuery.mjs.map +1 -0
- package/dist/runtime/polyfill/storage.mjs +103 -0
- package/dist/runtime/polyfill/storage.mjs.map +1 -0
- package/dist/runtime/polyfill/storageAsync.mjs +62 -0
- package/dist/runtime/polyfill/storageAsync.mjs.map +1 -0
- package/dist/runtime/polyfill/subscribe.mjs +30 -0
- package/dist/runtime/polyfill/subscribe.mjs.map +1 -0
- package/dist/runtime/polyfill/system.mjs +111 -0
- package/dist/runtime/polyfill/system.mjs.map +1 -0
- package/dist/runtime/polyfill/systemApi.mjs +65 -0
- package/dist/runtime/polyfill/systemApi.mjs.map +1 -0
- package/dist/runtime/polyfill/types/base.d.mts +12 -0
- package/dist/runtime/polyfill/types/common.d.mts +126 -0
- package/dist/runtime/polyfill/types/locationRuntime.d.mts +151 -0
- package/dist/runtime/polyfill/types/mediaAuth.d.mts +152 -0
- package/dist/runtime/polyfill/types/platformRuntime.d.mts +141 -0
- package/dist/runtime/polyfill/types/systemAuth.d.mts +122 -0
- package/dist/runtime/polyfill/ui.mjs +135 -0
- package/dist/runtime/polyfill/ui.mjs.map +1 -0
- package/dist/runtime/polyfill/uiFeedback.mjs +35 -0
- package/dist/runtime/polyfill/uiFeedback.mjs.map +1 -0
- package/dist/runtime/polyfill/uiMediaApi.d.mts +172 -0
- package/dist/runtime/polyfill/uiMediaApi.mjs +162 -0
- package/dist/runtime/polyfill/uiMediaApi.mjs.map +1 -0
- package/dist/runtime/polyfill/videoContext.mjs +56 -0
- package/dist/runtime/polyfill/videoContext.mjs.map +1 -0
- package/dist/runtime/polyfill/vkSession.mjs +58 -0
- package/dist/runtime/polyfill/vkSession.mjs.map +1 -0
- package/dist/runtime/polyfill/windowResize.mjs +39 -0
- package/dist/runtime/polyfill/windowResize.mjs.map +1 -0
- package/dist/runtime/polyfill/worker.mjs +77 -0
- package/dist/runtime/polyfill/worker.mjs.map +1 -0
- package/dist/runtime/polyfill.d.mts +5 -0
- package/dist/runtime/renderContext.d.mts +21 -0
- package/dist/runtime/renderContext.mjs +147 -0
- package/dist/runtime/renderContext.mjs.map +1 -0
- package/dist/runtime/rpx.d.mts +9 -0
- package/dist/runtime/rpx.mjs +27 -0
- package/dist/runtime/rpx.mjs.map +1 -0
- package/dist/runtime/style.d.mts +6 -0
- package/dist/runtime/style.mjs +37 -0
- package/dist/runtime/style.mjs.map +1 -0
- package/dist/runtime/template.d.mts +10 -0
- package/dist/runtime/warning.d.mts +10 -0
- package/dist/runtime/warning.mjs +43 -0
- package/dist/runtime/warning.mjs.map +1 -0
- package/dist/{slugify-B4l45KNs.mjs → shared/slugify.mjs} +3 -1
- package/dist/shared/slugify.mjs.map +1 -0
- package/dist/shared/wxml.mjs +64 -0
- package/dist/shared/wxml.mjs.map +1 -0
- package/package.json +1 -1
- package/dist/index-w9xxIH-l.d.mts +0 -1229
- package/dist/plugin-BARxSPO8.mjs +0 -1567
- package/dist/plugin-DP2iPVmw.d.mts +0 -96
- package/dist/runtime-D6j2_x_N.mjs +0 -6251
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/runtime/polyfill/appState.ts
|
|
2
|
+
function resolveCurrentPages(navigationHistory) {
|
|
3
|
+
return navigationHistory.map((entry) => entry.instance).filter((instance) => Boolean(instance));
|
|
4
|
+
}
|
|
5
|
+
function cloneLaunchOptions(options) {
|
|
6
|
+
return {
|
|
7
|
+
path: options.path,
|
|
8
|
+
scene: options.scene,
|
|
9
|
+
query: { ...options.query },
|
|
10
|
+
referrerInfo: { ...options.referrerInfo }
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function resolveFallbackLaunchOptions(navigationHistory) {
|
|
14
|
+
const entry = navigationHistory[navigationHistory.length - 1] ?? navigationHistory[0];
|
|
15
|
+
if (!entry) return {
|
|
16
|
+
path: "",
|
|
17
|
+
scene: 0,
|
|
18
|
+
query: {},
|
|
19
|
+
referrerInfo: {}
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
path: entry.id,
|
|
23
|
+
scene: 0,
|
|
24
|
+
query: { ...entry.query },
|
|
25
|
+
referrerInfo: {}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { cloneLaunchOptions, resolveCurrentPages, resolveFallbackLaunchOptions };
|
|
31
|
+
//# sourceMappingURL=appState.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appState.mjs","names":[],"sources":["../../../src/runtime/polyfill/appState.ts"],"sourcesContent":["import type { AppLaunchOptions } from './routeRuntime/options'\n\nexport function resolveCurrentPages<T>(navigationHistory: Array<{ instance?: T }>) {\n return navigationHistory\n .map(entry => entry.instance)\n .filter((instance): instance is T => Boolean(instance))\n}\n\nexport function cloneLaunchOptions(options: AppLaunchOptions): AppLaunchOptions {\n return {\n path: options.path,\n scene: options.scene,\n query: { ...options.query },\n referrerInfo: { ...options.referrerInfo },\n }\n}\n\nexport function resolveFallbackLaunchOptions(\n navigationHistory: Array<{ id: string, query: Record<string, string> }>,\n): AppLaunchOptions {\n const entry = navigationHistory[navigationHistory.length - 1] ?? navigationHistory[0]\n if (!entry) {\n return {\n path: '',\n scene: 0,\n query: {},\n referrerInfo: {},\n }\n }\n return {\n path: entry.id,\n scene: 0,\n query: { ...entry.query },\n referrerInfo: {},\n }\n}\n"],"mappings":";AAEA,SAAgB,oBAAuB,mBAA4C;AACjF,QAAO,kBACJ,KAAI,UAAS,MAAM,SAAS,CAC5B,QAAQ,aAA4B,QAAQ,SAAS,CAAC;;AAG3D,SAAgB,mBAAmB,SAA6C;AAC9E,QAAO;EACL,MAAM,QAAQ;EACd,OAAO,QAAQ;EACf,OAAO,EAAE,GAAG,QAAQ,OAAO;EAC3B,cAAc,EAAE,GAAG,QAAQ,cAAc;EAC1C;;AAGH,SAAgB,6BACd,mBACkB;CAClB,MAAM,QAAQ,kBAAkB,kBAAkB,SAAS,MAAM,kBAAkB;AACnF,KAAI,CAAC,MACH,QAAO;EACL,MAAM;EACN,OAAO;EACP,OAAO,EAAE;EACT,cAAc,EAAE;EACjB;AAEH,QAAO;EACL,MAAM,MAAM;EACZ,OAAO;EACP,OAAO,EAAE,GAAG,MAAM,OAAO;EACzB,cAAc,EAAE;EACjB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/runtime/polyfill/async.ts
|
|
2
|
+
function callWxAsyncSuccess(options, result) {
|
|
3
|
+
options?.success?.(result);
|
|
4
|
+
options?.complete?.(result);
|
|
5
|
+
return result;
|
|
6
|
+
}
|
|
7
|
+
function callWxAsyncFailure(options, errMsg) {
|
|
8
|
+
const result = { errMsg };
|
|
9
|
+
options?.fail?.(result);
|
|
10
|
+
options?.complete?.(result);
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
function normalizeDuration(duration, fallback) {
|
|
14
|
+
if (typeof duration !== "number" || Number.isNaN(duration)) return fallback;
|
|
15
|
+
return Math.max(0, duration);
|
|
16
|
+
}
|
|
17
|
+
function scheduleMicrotask(task) {
|
|
18
|
+
if (typeof queueMicrotask === "function") {
|
|
19
|
+
queueMicrotask(task);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
Promise.resolve().then(task).catch((error) => {
|
|
23
|
+
setTimeout(() => {
|
|
24
|
+
throw error;
|
|
25
|
+
}, 0);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { callWxAsyncFailure, callWxAsyncSuccess, normalizeDuration, scheduleMicrotask };
|
|
31
|
+
//# sourceMappingURL=async.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.mjs","names":[],"sources":["../../../src/runtime/polyfill/async.ts"],"sourcesContent":["interface WxBaseResultLike {\n errMsg: string\n}\n\ninterface WxAsyncOptionsLike<SuccessResult extends WxBaseResultLike> {\n success?: (result: SuccessResult) => void\n fail?: (result: WxBaseResultLike) => void\n complete?: (result: SuccessResult | WxBaseResultLike) => void\n}\n\nexport function callWxAsyncSuccess<SuccessResult extends WxBaseResultLike>(\n options: WxAsyncOptionsLike<SuccessResult> | undefined,\n result: SuccessResult,\n) {\n options?.success?.(result)\n options?.complete?.(result)\n return result\n}\n\nexport function callWxAsyncFailure<SuccessResult extends WxBaseResultLike>(\n options: WxAsyncOptionsLike<SuccessResult> | undefined,\n errMsg: string,\n) {\n const result: WxBaseResultLike = { errMsg }\n options?.fail?.(result)\n options?.complete?.(result)\n return result\n}\n\nexport function normalizeDuration(duration: number | undefined, fallback: number) {\n if (typeof duration !== 'number' || Number.isNaN(duration)) {\n return fallback\n }\n return Math.max(0, duration)\n}\n\nexport function scheduleMicrotask(task: () => void) {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(task)\n return\n }\n Promise.resolve()\n .then(task)\n .catch((error) => {\n setTimeout(() => {\n throw error\n }, 0)\n })\n}\n"],"mappings":";AAUA,SAAgB,mBACd,SACA,QACA;AACA,UAAS,UAAU,OAAO;AAC1B,UAAS,WAAW,OAAO;AAC3B,QAAO;;AAGT,SAAgB,mBACd,SACA,QACA;CACA,MAAM,SAA2B,EAAE,QAAQ;AAC3C,UAAS,OAAO,OAAO;AACvB,UAAS,WAAW,OAAO;AAC3B,QAAO;;AAGT,SAAgB,kBAAkB,UAA8B,UAAkB;AAChF,KAAI,OAAO,aAAa,YAAY,OAAO,MAAM,SAAS,CACxD,QAAO;AAET,QAAO,KAAK,IAAI,GAAG,SAAS;;AAG9B,SAAgB,kBAAkB,MAAkB;AAClD,KAAI,OAAO,mBAAmB,YAAY;AACxC,iBAAe,KAAK;AACpB;;AAEF,SAAQ,SAAS,CACd,KAAK,KAAK,CACV,OAAO,UAAU;AAChB,mBAAiB;AACf,SAAM;KACL,EAAE;GACL"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { WEAPP_VITE_WEB_AUTHORIZE_DECISION_KEY, WEAPP_VITE_WEB_CHECK_SESSION_KEY, WEAPP_VITE_WEB_GET_USER_PROFILE_DECISION_KEY, WEAPP_VITE_WEB_OPEN_APP_AUTHORIZE_SETTING_KEY, WEAPP_VITE_WEB_OPEN_SETTING_AUTH_KEY, WEAPP_VITE_WEB_USER_INFO_KEY, WEAPP_VITE_WEB_USER_PROFILE_KEY } from "@weapp-core/constants";
|
|
2
|
+
|
|
3
|
+
//#region src/runtime/polyfill/auth.ts
|
|
4
|
+
function normalizeAuthScope(scope) {
|
|
5
|
+
if (typeof scope !== "string") return "";
|
|
6
|
+
return scope.trim();
|
|
7
|
+
}
|
|
8
|
+
function buildAuthSettingSnapshot(authorizeState) {
|
|
9
|
+
const authSetting = {};
|
|
10
|
+
for (const [scope, status] of authorizeState.entries()) authSetting[scope] = status === "authorized";
|
|
11
|
+
return authSetting;
|
|
12
|
+
}
|
|
13
|
+
function normalizeAuthorizeDecision(decision) {
|
|
14
|
+
if (decision === true) return "authorized";
|
|
15
|
+
if (decision === false) return "denied";
|
|
16
|
+
if (decision === "authorized" || decision === "denied" || decision === "not determined") return decision;
|
|
17
|
+
return "authorized";
|
|
18
|
+
}
|
|
19
|
+
function resolveAuthorizeDecision(scope) {
|
|
20
|
+
const decisionSource = globalThis[WEAPP_VITE_WEB_AUTHORIZE_DECISION_KEY];
|
|
21
|
+
if (typeof decisionSource === "function") try {
|
|
22
|
+
return normalizeAuthorizeDecision(decisionSource(scope));
|
|
23
|
+
} catch {
|
|
24
|
+
return "authorized";
|
|
25
|
+
}
|
|
26
|
+
if (decisionSource && typeof decisionSource === "object") return normalizeAuthorizeDecision(decisionSource[scope]);
|
|
27
|
+
return "authorized";
|
|
28
|
+
}
|
|
29
|
+
function syncOpenSettingPreset(authorizeState, supportedAuthScopes) {
|
|
30
|
+
const preset = globalThis[WEAPP_VITE_WEB_OPEN_SETTING_AUTH_KEY];
|
|
31
|
+
if (!preset || typeof preset !== "object") return;
|
|
32
|
+
for (const [scope, value] of Object.entries(preset)) {
|
|
33
|
+
if (!supportedAuthScopes.has(scope)) continue;
|
|
34
|
+
authorizeState.set(scope, value ? "authorized" : "denied");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function normalizeAppAuthorizeStatus(value) {
|
|
38
|
+
if (value === true) return "authorized";
|
|
39
|
+
if (value === false) return "denied";
|
|
40
|
+
if (value === "authorized" || value === "denied" || value === "not determined") return value;
|
|
41
|
+
return "not determined";
|
|
42
|
+
}
|
|
43
|
+
function syncOpenAppAuthorizeSettingPreset(authorizeState, scopeMap) {
|
|
44
|
+
const preset = globalThis[WEAPP_VITE_WEB_OPEN_APP_AUTHORIZE_SETTING_KEY];
|
|
45
|
+
if (!preset || typeof preset !== "object") return;
|
|
46
|
+
for (const [key, scope] of Object.entries(scopeMap)) {
|
|
47
|
+
if (!scope) continue;
|
|
48
|
+
const status = normalizeAppAuthorizeStatus(preset[key]);
|
|
49
|
+
authorizeState.set(scope, status);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function generateLoginCode() {
|
|
53
|
+
return `web_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
|
|
54
|
+
}
|
|
55
|
+
function normalizeUserLanguage(value) {
|
|
56
|
+
if (value === "en" || value === "zh_CN" || value === "zh_TW") return value;
|
|
57
|
+
const language = (typeof navigator !== "undefined" ? navigator : void 0)?.language?.toLowerCase() ?? "";
|
|
58
|
+
if (language.startsWith("zh-tw") || language.startsWith("zh-hk")) return "zh_TW";
|
|
59
|
+
if (language.startsWith("zh")) return "zh_CN";
|
|
60
|
+
return "en";
|
|
61
|
+
}
|
|
62
|
+
function normalizeUserGender(value) {
|
|
63
|
+
if (value === 1 || value === 2) return value;
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
function normalizeUserInfoValue(value, lang) {
|
|
67
|
+
if (!value || typeof value !== "object") return null;
|
|
68
|
+
const info = value;
|
|
69
|
+
return {
|
|
70
|
+
nickName: typeof info.nickName === "string" && info.nickName.trim() ? info.nickName : "Web User",
|
|
71
|
+
avatarUrl: typeof info.avatarUrl === "string" ? info.avatarUrl : "",
|
|
72
|
+
gender: normalizeUserGender(info.gender),
|
|
73
|
+
country: typeof info.country === "string" ? info.country : "",
|
|
74
|
+
province: typeof info.province === "string" ? info.province : "",
|
|
75
|
+
city: typeof info.city === "string" ? info.city : "",
|
|
76
|
+
language: normalizeUserLanguage(info.language ?? lang)
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function resolveUserInfoPreset(source, lang) {
|
|
80
|
+
const preset = globalThis[source];
|
|
81
|
+
if (typeof preset === "function") return normalizeUserInfoValue(preset(), lang);
|
|
82
|
+
return normalizeUserInfoValue(preset, lang);
|
|
83
|
+
}
|
|
84
|
+
function buildUserProfilePayload(errMsg, optionsLang) {
|
|
85
|
+
const language = normalizeUserLanguage(optionsLang);
|
|
86
|
+
const userInfo = resolveUserInfoPreset(WEAPP_VITE_WEB_USER_PROFILE_KEY, language) ?? resolveUserInfoPreset(WEAPP_VITE_WEB_USER_INFO_KEY, language) ?? {
|
|
87
|
+
nickName: "Web User",
|
|
88
|
+
avatarUrl: "",
|
|
89
|
+
gender: 0,
|
|
90
|
+
country: "",
|
|
91
|
+
province: "",
|
|
92
|
+
city: "",
|
|
93
|
+
language
|
|
94
|
+
};
|
|
95
|
+
const rawData = JSON.stringify(userInfo);
|
|
96
|
+
return {
|
|
97
|
+
errMsg,
|
|
98
|
+
userInfo,
|
|
99
|
+
rawData,
|
|
100
|
+
signature: `web-signature-${rawData.length}`,
|
|
101
|
+
encryptedData: "",
|
|
102
|
+
iv: ""
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function resolveCheckSessionState() {
|
|
106
|
+
const preset = globalThis[WEAPP_VITE_WEB_CHECK_SESSION_KEY];
|
|
107
|
+
if (typeof preset === "boolean") return preset;
|
|
108
|
+
if (typeof preset === "string") return preset.trim() !== "fail";
|
|
109
|
+
if (preset && typeof preset === "object" && "valid" in preset) return Boolean(preset.valid);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
function resolveUserProfileDecision() {
|
|
113
|
+
const preset = globalThis[WEAPP_VITE_WEB_GET_USER_PROFILE_DECISION_KEY];
|
|
114
|
+
if (typeof preset === "function") return normalizeAuthorizeDecision(preset());
|
|
115
|
+
return normalizeAuthorizeDecision(preset);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
//#endregion
|
|
119
|
+
export { buildAuthSettingSnapshot, buildUserProfilePayload, generateLoginCode, normalizeAuthScope, resolveAuthorizeDecision, resolveCheckSessionState, resolveUserProfileDecision, syncOpenAppAuthorizeSettingPreset, syncOpenSettingPreset };
|
|
120
|
+
//# sourceMappingURL=auth.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.mjs","names":[],"sources":["../../../src/runtime/polyfill/auth.ts"],"sourcesContent":["import {\n WEAPP_VITE_WEB_AUTHORIZE_DECISION_KEY,\n WEAPP_VITE_WEB_CHECK_SESSION_KEY,\n WEAPP_VITE_WEB_GET_USER_PROFILE_DECISION_KEY,\n WEAPP_VITE_WEB_OPEN_APP_AUTHORIZE_SETTING_KEY,\n WEAPP_VITE_WEB_OPEN_SETTING_AUTH_KEY,\n WEAPP_VITE_WEB_USER_INFO_KEY,\n WEAPP_VITE_WEB_USER_PROFILE_KEY,\n} from '@weapp-core/constants'\n\nexport type AppAuthorizeStatusLike = 'authorized' | 'denied' | 'not determined'\n\ntype UserLanguageLike = 'en' | 'zh_CN' | 'zh_TW'\n\ninterface UserInfoLike {\n nickName: string\n avatarUrl: string\n gender: 0 | 1 | 2\n country: string\n province: string\n city: string\n language: UserLanguageLike\n}\n\nexport function normalizeAuthScope(scope: unknown) {\n if (typeof scope !== 'string') {\n return ''\n }\n return scope.trim()\n}\n\nexport function buildAuthSettingSnapshot(authorizeState: Map<string, AppAuthorizeStatusLike>) {\n const authSetting: Record<string, boolean> = {}\n for (const [scope, status] of authorizeState.entries()) {\n authSetting[scope] = status === 'authorized'\n }\n return authSetting\n}\n\nexport function normalizeAuthorizeDecision(decision: unknown): AppAuthorizeStatusLike {\n if (decision === true) {\n return 'authorized'\n }\n if (decision === false) {\n return 'denied'\n }\n if (decision === 'authorized' || decision === 'denied' || decision === 'not determined') {\n return decision\n }\n return 'authorized'\n}\n\nexport function resolveAuthorizeDecision(scope: string): AppAuthorizeStatusLike {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const decisionSource = runtimeGlobal[WEAPP_VITE_WEB_AUTHORIZE_DECISION_KEY]\n if (typeof decisionSource === 'function') {\n try {\n return normalizeAuthorizeDecision((decisionSource as (value: string) => unknown)(scope))\n }\n catch {\n return 'authorized'\n }\n }\n if (decisionSource && typeof decisionSource === 'object') {\n return normalizeAuthorizeDecision((decisionSource as Record<string, unknown>)[scope])\n }\n return 'authorized'\n}\n\nexport function syncOpenSettingPreset(\n authorizeState: Map<string, AppAuthorizeStatusLike>,\n supportedAuthScopes: Set<string>,\n) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_OPEN_SETTING_AUTH_KEY]\n if (!preset || typeof preset !== 'object') {\n return\n }\n for (const [scope, value] of Object.entries(preset as Record<string, unknown>)) {\n if (!supportedAuthScopes.has(scope)) {\n continue\n }\n authorizeState.set(scope, value ? 'authorized' : 'denied')\n }\n}\n\nexport function normalizeAppAuthorizeStatus(value: unknown): AppAuthorizeStatusLike {\n if (value === true) {\n return 'authorized'\n }\n if (value === false) {\n return 'denied'\n }\n if (value === 'authorized' || value === 'denied' || value === 'not determined') {\n return value\n }\n return 'not determined'\n}\n\nexport function syncOpenAppAuthorizeSettingPreset(\n authorizeState: Map<string, AppAuthorizeStatusLike>,\n scopeMap: Partial<Record<string, string>>,\n) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_OPEN_APP_AUTHORIZE_SETTING_KEY]\n if (!preset || typeof preset !== 'object') {\n return\n }\n for (const [key, scope] of Object.entries(scopeMap)) {\n if (!scope) {\n continue\n }\n const status = normalizeAppAuthorizeStatus((preset as Record<string, unknown>)[key])\n authorizeState.set(scope, status)\n }\n}\n\nexport function generateLoginCode() {\n const now = Date.now().toString(36)\n const random = Math.random().toString(36).slice(2, 10)\n return `web_${now}_${random}`\n}\n\nexport function normalizeUserLanguage(value: unknown): UserLanguageLike {\n if (value === 'en' || value === 'zh_CN' || value === 'zh_TW') {\n return value\n }\n const runtimeNavigator = typeof navigator !== 'undefined' ? navigator : undefined\n const language = runtimeNavigator?.language?.toLowerCase() ?? ''\n if (language.startsWith('zh-tw') || language.startsWith('zh-hk')) {\n return 'zh_TW'\n }\n if (language.startsWith('zh')) {\n return 'zh_CN'\n }\n return 'en'\n}\n\nfunction normalizeUserGender(value: unknown): UserInfoLike['gender'] {\n if (value === 1 || value === 2) {\n return value\n }\n return 0\n}\n\nfunction normalizeUserInfoValue(value: unknown, lang: UserLanguageLike) {\n if (!value || typeof value !== 'object') {\n return null\n }\n const info = value as Record<string, unknown>\n return {\n nickName: typeof info.nickName === 'string' && info.nickName.trim() ? info.nickName : 'Web User',\n avatarUrl: typeof info.avatarUrl === 'string' ? info.avatarUrl : '',\n gender: normalizeUserGender(info.gender),\n country: typeof info.country === 'string' ? info.country : '',\n province: typeof info.province === 'string' ? info.province : '',\n city: typeof info.city === 'string' ? info.city : '',\n language: normalizeUserLanguage(info.language ?? lang),\n } satisfies UserInfoLike\n}\n\nfunction resolveUserInfoPreset(\n source: typeof WEAPP_VITE_WEB_USER_INFO_KEY | typeof WEAPP_VITE_WEB_USER_PROFILE_KEY,\n lang: UserLanguageLike,\n) {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[source]\n if (typeof preset === 'function') {\n return normalizeUserInfoValue((preset as () => unknown)(), lang)\n }\n return normalizeUserInfoValue(preset, lang)\n}\n\nexport function buildUserProfilePayload(errMsg: 'getUserInfo:ok' | 'getUserProfile:ok', optionsLang?: unknown) {\n const language = normalizeUserLanguage(optionsLang)\n const userInfo = resolveUserInfoPreset(WEAPP_VITE_WEB_USER_PROFILE_KEY, language)\n ?? resolveUserInfoPreset(WEAPP_VITE_WEB_USER_INFO_KEY, language)\n ?? {\n nickName: 'Web User',\n avatarUrl: '',\n gender: 0 as const,\n country: '',\n province: '',\n city: '',\n language,\n }\n const rawData = JSON.stringify(userInfo)\n return {\n errMsg,\n userInfo,\n rawData,\n signature: `web-signature-${rawData.length}`,\n encryptedData: '',\n iv: '',\n }\n}\n\nexport function resolveCheckSessionState() {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_CHECK_SESSION_KEY]\n if (typeof preset === 'boolean') {\n return preset\n }\n if (typeof preset === 'string') {\n return preset.trim() !== 'fail'\n }\n if (preset && typeof preset === 'object' && 'valid' in preset) {\n return Boolean((preset as { valid?: unknown }).valid)\n }\n return true\n}\n\nexport function resolveUserProfileDecision(): AppAuthorizeStatusLike {\n const runtimeGlobal = globalThis as Record<string, unknown>\n const preset = runtimeGlobal[WEAPP_VITE_WEB_GET_USER_PROFILE_DECISION_KEY]\n if (typeof preset === 'function') {\n return normalizeAuthorizeDecision((preset as () => unknown)())\n }\n return normalizeAuthorizeDecision(preset)\n}\n"],"mappings":";;;AAwBA,SAAgB,mBAAmB,OAAgB;AACjD,KAAI,OAAO,UAAU,SACnB,QAAO;AAET,QAAO,MAAM,MAAM;;AAGrB,SAAgB,yBAAyB,gBAAqD;CAC5F,MAAM,cAAuC,EAAE;AAC/C,MAAK,MAAM,CAAC,OAAO,WAAW,eAAe,SAAS,CACpD,aAAY,SAAS,WAAW;AAElC,QAAO;;AAGT,SAAgB,2BAA2B,UAA2C;AACpF,KAAI,aAAa,KACf,QAAO;AAET,KAAI,aAAa,MACf,QAAO;AAET,KAAI,aAAa,gBAAgB,aAAa,YAAY,aAAa,iBACrE,QAAO;AAET,QAAO;;AAGT,SAAgB,yBAAyB,OAAuC;CAE9E,MAAM,iBADgB,WACe;AACrC,KAAI,OAAO,mBAAmB,WAC5B,KAAI;AACF,SAAO,2BAA4B,eAA8C,MAAM,CAAC;SAEpF;AACJ,SAAO;;AAGX,KAAI,kBAAkB,OAAO,mBAAmB,SAC9C,QAAO,2BAA4B,eAA2C,OAAO;AAEvF,QAAO;;AAGT,SAAgB,sBACd,gBACA,qBACA;CAEA,MAAM,SADgB,WACO;AAC7B,KAAI,CAAC,UAAU,OAAO,WAAW,SAC/B;AAEF,MAAK,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,OAAkC,EAAE;AAC9E,MAAI,CAAC,oBAAoB,IAAI,MAAM,CACjC;AAEF,iBAAe,IAAI,OAAO,QAAQ,eAAe,SAAS;;;AAI9D,SAAgB,4BAA4B,OAAwC;AAClF,KAAI,UAAU,KACZ,QAAO;AAET,KAAI,UAAU,MACZ,QAAO;AAET,KAAI,UAAU,gBAAgB,UAAU,YAAY,UAAU,iBAC5D,QAAO;AAET,QAAO;;AAGT,SAAgB,kCACd,gBACA,UACA;CAEA,MAAM,SADgB,WACO;AAC7B,KAAI,CAAC,UAAU,OAAO,WAAW,SAC/B;AAEF,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,SAAS,EAAE;AACnD,MAAI,CAAC,MACH;EAEF,MAAM,SAAS,4BAA6B,OAAmC,KAAK;AACpF,iBAAe,IAAI,OAAO,OAAO;;;AAIrC,SAAgB,oBAAoB;AAGlC,QAAO,OAFK,KAAK,KAAK,CAAC,SAAS,GAAG,CAEjB,GADH,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,GAAG;;AAIxD,SAAgB,sBAAsB,OAAkC;AACtE,KAAI,UAAU,QAAQ,UAAU,WAAW,UAAU,QACnD,QAAO;CAGT,MAAM,YADmB,OAAO,cAAc,cAAc,YAAY,SACrC,UAAU,aAAa,IAAI;AAC9D,KAAI,SAAS,WAAW,QAAQ,IAAI,SAAS,WAAW,QAAQ,CAC9D,QAAO;AAET,KAAI,SAAS,WAAW,KAAK,CAC3B,QAAO;AAET,QAAO;;AAGT,SAAS,oBAAoB,OAAwC;AACnE,KAAI,UAAU,KAAK,UAAU,EAC3B,QAAO;AAET,QAAO;;AAGT,SAAS,uBAAuB,OAAgB,MAAwB;AACtE,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;CAET,MAAM,OAAO;AACb,QAAO;EACL,UAAU,OAAO,KAAK,aAAa,YAAY,KAAK,SAAS,MAAM,GAAG,KAAK,WAAW;EACtF,WAAW,OAAO,KAAK,cAAc,WAAW,KAAK,YAAY;EACjE,QAAQ,oBAAoB,KAAK,OAAO;EACxC,SAAS,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;EAC3D,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;EAC9D,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;EAClD,UAAU,sBAAsB,KAAK,YAAY,KAAK;EACvD;;AAGH,SAAS,sBACP,QACA,MACA;CAEA,MAAM,SADgB,WACO;AAC7B,KAAI,OAAO,WAAW,WACpB,QAAO,uBAAwB,QAA0B,EAAE,KAAK;AAElE,QAAO,uBAAuB,QAAQ,KAAK;;AAG7C,SAAgB,wBAAwB,QAAgD,aAAuB;CAC7G,MAAM,WAAW,sBAAsB,YAAY;CACnD,MAAM,WAAW,sBAAsB,iCAAiC,SAAS,IAC5E,sBAAsB,8BAA8B,SAAS,IAC7D;EACD,UAAU;EACV,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,MAAM;EACN;EACD;CACH,MAAM,UAAU,KAAK,UAAU,SAAS;AACxC,QAAO;EACL;EACA;EACA;EACA,WAAW,iBAAiB,QAAQ;EACpC,eAAe;EACf,IAAI;EACL;;AAGH,SAAgB,2BAA2B;CAEzC,MAAM,SADgB,WACO;AAC7B,KAAI,OAAO,WAAW,UACpB,QAAO;AAET,KAAI,OAAO,WAAW,SACpB,QAAO,OAAO,MAAM,KAAK;AAE3B,KAAI,UAAU,OAAO,WAAW,YAAY,WAAW,OACrD,QAAO,QAAS,OAA+B,MAAM;AAEvD,QAAO;;AAGT,SAAgB,6BAAqD;CAEnE,MAAM,SADgB,WACO;AAC7B,KAAI,OAAO,WAAW,WACpB,QAAO,2BAA4B,QAA0B,CAAC;AAEhE,QAAO,2BAA2B,OAAO"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { callWxAsyncFailure, callWxAsyncSuccess } from "./async.mjs";
|
|
2
|
+
import { buildAuthSettingSnapshot, buildUserProfilePayload, generateLoginCode, normalizeAuthScope, resolveAuthorizeDecision, resolveCheckSessionState, resolveUserProfileDecision, syncOpenAppAuthorizeSettingPreset, syncOpenSettingPreset } from "./auth.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/runtime/polyfill/authApi.ts
|
|
5
|
+
function getSettingBridge(options, authState) {
|
|
6
|
+
return Promise.resolve(callWxAsyncSuccess(options, {
|
|
7
|
+
errMsg: "getSetting:ok",
|
|
8
|
+
authSetting: buildAuthSettingSnapshot(authState)
|
|
9
|
+
}));
|
|
10
|
+
}
|
|
11
|
+
function authorizeBridge(options, authState, supportedScopes) {
|
|
12
|
+
const scope = normalizeAuthScope(options?.scope);
|
|
13
|
+
if (!scope) {
|
|
14
|
+
const failure = callWxAsyncFailure(options, "authorize:fail invalid scope");
|
|
15
|
+
return Promise.reject(failure);
|
|
16
|
+
}
|
|
17
|
+
if (!supportedScopes.has(scope)) {
|
|
18
|
+
const failure = callWxAsyncFailure(options, "authorize:fail unsupported scope");
|
|
19
|
+
return Promise.reject(failure);
|
|
20
|
+
}
|
|
21
|
+
const decision = resolveAuthorizeDecision(scope);
|
|
22
|
+
authState.set(scope, decision);
|
|
23
|
+
if (decision !== "authorized") {
|
|
24
|
+
const failure = callWxAsyncFailure(options, `authorize:fail ${decision === "denied" ? "auth deny" : "auth canceled"}`);
|
|
25
|
+
return Promise.reject(failure);
|
|
26
|
+
}
|
|
27
|
+
return Promise.resolve(callWxAsyncSuccess(options, { errMsg: "authorize:ok" }));
|
|
28
|
+
}
|
|
29
|
+
function openSettingBridge(options, authState, supportedScopes) {
|
|
30
|
+
syncOpenSettingPreset(authState, supportedScopes);
|
|
31
|
+
return Promise.resolve(callWxAsyncSuccess(options, {
|
|
32
|
+
errMsg: "openSetting:ok",
|
|
33
|
+
authSetting: buildAuthSettingSnapshot(authState)
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
function openAppAuthorizeSettingBridge(options, authState, scopeMap, resolveAppAuthorizeSetting) {
|
|
37
|
+
syncOpenAppAuthorizeSettingPreset(authState, scopeMap);
|
|
38
|
+
return Promise.resolve(callWxAsyncSuccess(options, {
|
|
39
|
+
errMsg: "openAppAuthorizeSetting:ok",
|
|
40
|
+
...resolveAppAuthorizeSetting()
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
function getSystemSettingBridge(authState, resolveOrientation) {
|
|
44
|
+
return {
|
|
45
|
+
bluetoothEnabled: false,
|
|
46
|
+
wifiEnabled: true,
|
|
47
|
+
locationEnabled: authState.get("scope.userLocation") === "authorized",
|
|
48
|
+
locationReducedAccuracy: false,
|
|
49
|
+
deviceOrientation: resolveOrientation()
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function getAppAuthorizeSettingBridge(authState) {
|
|
53
|
+
const resolveStatus = (scope) => authState.get(scope) ?? "not determined";
|
|
54
|
+
return {
|
|
55
|
+
albumAuthorized: resolveStatus("scope.writePhotosAlbum"),
|
|
56
|
+
bluetoothAuthorized: "not determined",
|
|
57
|
+
cameraAuthorized: resolveStatus("scope.camera"),
|
|
58
|
+
locationAuthorized: resolveStatus("scope.userLocation"),
|
|
59
|
+
microphoneAuthorized: resolveStatus("scope.record"),
|
|
60
|
+
notificationAuthorized: "not determined",
|
|
61
|
+
phoneCalendarAuthorized: "not determined"
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function loginBridge(options) {
|
|
65
|
+
return Promise.resolve(callWxAsyncSuccess(options, {
|
|
66
|
+
errMsg: "login:ok",
|
|
67
|
+
code: generateLoginCode()
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
function checkSessionBridge(options) {
|
|
71
|
+
if (!resolveCheckSessionState()) {
|
|
72
|
+
const failure = callWxAsyncFailure(options, "checkSession:fail session expired");
|
|
73
|
+
return Promise.reject(failure);
|
|
74
|
+
}
|
|
75
|
+
return Promise.resolve(callWxAsyncSuccess(options, { errMsg: "checkSession:ok" }));
|
|
76
|
+
}
|
|
77
|
+
function getUserInfoBridge(options, authState) {
|
|
78
|
+
if (authState.get("scope.userInfo") === "denied") {
|
|
79
|
+
const failure = callWxAsyncFailure(options, "getUserInfo:fail auth deny");
|
|
80
|
+
return Promise.reject(failure);
|
|
81
|
+
}
|
|
82
|
+
authState.set("scope.userInfo", "authorized");
|
|
83
|
+
return Promise.resolve(callWxAsyncSuccess(options, buildUserProfilePayload("getUserInfo:ok", options?.lang)));
|
|
84
|
+
}
|
|
85
|
+
function getUserProfileBridge(options, authState) {
|
|
86
|
+
if (!(typeof options?.desc === "string" ? options.desc.trim() : "")) {
|
|
87
|
+
const failure = callWxAsyncFailure(options, "getUserProfile:fail invalid desc");
|
|
88
|
+
return Promise.reject(failure);
|
|
89
|
+
}
|
|
90
|
+
const decision = resolveUserProfileDecision();
|
|
91
|
+
authState.set("scope.userInfo", decision);
|
|
92
|
+
if (decision !== "authorized") {
|
|
93
|
+
const failure = callWxAsyncFailure(options, `getUserProfile:fail ${decision === "denied" ? "auth deny" : "auth canceled"}`);
|
|
94
|
+
return Promise.reject(failure);
|
|
95
|
+
}
|
|
96
|
+
return Promise.resolve(callWxAsyncSuccess(options, buildUserProfilePayload("getUserProfile:ok", options?.lang)));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
//#endregion
|
|
100
|
+
export { authorizeBridge, checkSessionBridge, getAppAuthorizeSettingBridge, getSettingBridge, getSystemSettingBridge, getUserInfoBridge, getUserProfileBridge, loginBridge, openAppAuthorizeSettingBridge, openSettingBridge };
|
|
101
|
+
//# sourceMappingURL=authApi.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authApi.mjs","names":[],"sources":["../../../src/runtime/polyfill/authApi.ts"],"sourcesContent":["import type { AppAuthorizeStatusLike } from './auth'\nimport {\n callWxAsyncFailure,\n callWxAsyncSuccess,\n} from './async'\nimport {\n buildAuthSettingSnapshot,\n buildUserProfilePayload,\n generateLoginCode,\n normalizeAuthScope,\n resolveAuthorizeDecision,\n resolveCheckSessionState,\n resolveUserProfileDecision,\n syncOpenAppAuthorizeSettingPreset,\n syncOpenSettingPreset,\n} from './auth'\n\ntype AuthState = Map<string, AppAuthorizeStatusLike>\n\nexport function getSettingBridge(options: any, authState: AuthState) {\n return Promise.resolve(callWxAsyncSuccess(options, {\n errMsg: 'getSetting:ok',\n authSetting: buildAuthSettingSnapshot(authState),\n }))\n}\n\nexport function authorizeBridge(options: any, authState: AuthState, supportedScopes: Set<string>) {\n const scope = normalizeAuthScope(options?.scope)\n if (!scope) {\n const failure = callWxAsyncFailure(options, 'authorize:fail invalid scope')\n return Promise.reject(failure)\n }\n if (!supportedScopes.has(scope)) {\n const failure = callWxAsyncFailure(options, 'authorize:fail unsupported scope')\n return Promise.reject(failure)\n }\n const decision = resolveAuthorizeDecision(scope)\n authState.set(scope, decision)\n if (decision !== 'authorized') {\n const reason = decision === 'denied' ? 'auth deny' : 'auth canceled'\n const failure = callWxAsyncFailure(options, `authorize:fail ${reason}`)\n return Promise.reject(failure)\n }\n return Promise.resolve(callWxAsyncSuccess(options, { errMsg: 'authorize:ok' }))\n}\n\nexport function openSettingBridge(options: any, authState: AuthState, supportedScopes: Set<string>) {\n syncOpenSettingPreset(authState, supportedScopes)\n return Promise.resolve(callWxAsyncSuccess(options, {\n errMsg: 'openSetting:ok',\n authSetting: buildAuthSettingSnapshot(authState),\n }))\n}\n\nexport function openAppAuthorizeSettingBridge(\n options: any,\n authState: AuthState,\n scopeMap: Record<string, string>,\n resolveAppAuthorizeSetting: () => object,\n) {\n syncOpenAppAuthorizeSettingPreset(authState, scopeMap)\n return Promise.resolve(callWxAsyncSuccess(options, {\n errMsg: 'openAppAuthorizeSetting:ok',\n ...resolveAppAuthorizeSetting(),\n }))\n}\n\nexport function getSystemSettingBridge(authState: AuthState, resolveOrientation: () => 'portrait' | 'landscape') {\n const locationAuthorized = authState.get('scope.userLocation') === 'authorized'\n return {\n bluetoothEnabled: false,\n wifiEnabled: true,\n locationEnabled: locationAuthorized,\n locationReducedAccuracy: false,\n deviceOrientation: resolveOrientation(),\n }\n}\n\nexport function getAppAuthorizeSettingBridge(authState: AuthState) {\n const resolveStatus = (scope: string) => authState.get(scope) ?? 'not determined'\n return {\n albumAuthorized: resolveStatus('scope.writePhotosAlbum'),\n bluetoothAuthorized: 'not determined',\n cameraAuthorized: resolveStatus('scope.camera'),\n locationAuthorized: resolveStatus('scope.userLocation'),\n microphoneAuthorized: resolveStatus('scope.record'),\n notificationAuthorized: 'not determined',\n phoneCalendarAuthorized: 'not determined',\n }\n}\n\nexport function loginBridge(options: any) {\n return Promise.resolve(callWxAsyncSuccess(options, {\n errMsg: 'login:ok',\n code: generateLoginCode(),\n }))\n}\n\nexport function checkSessionBridge(options: any) {\n if (!resolveCheckSessionState()) {\n const failure = callWxAsyncFailure(options, 'checkSession:fail session expired')\n return Promise.reject(failure)\n }\n return Promise.resolve(callWxAsyncSuccess(options, { errMsg: 'checkSession:ok' }))\n}\n\nexport function getUserInfoBridge(options: any, authState: AuthState) {\n if (authState.get('scope.userInfo') === 'denied') {\n const failure = callWxAsyncFailure(options, 'getUserInfo:fail auth deny')\n return Promise.reject(failure)\n }\n authState.set('scope.userInfo', 'authorized')\n return Promise.resolve(callWxAsyncSuccess(options, buildUserProfilePayload('getUserInfo:ok', options?.lang)))\n}\n\nexport function getUserProfileBridge(options: any, authState: AuthState) {\n const desc = typeof options?.desc === 'string' ? options.desc.trim() : ''\n if (!desc) {\n const failure = callWxAsyncFailure(options, 'getUserProfile:fail invalid desc')\n return Promise.reject(failure)\n }\n const decision = resolveUserProfileDecision()\n authState.set('scope.userInfo', decision)\n if (decision !== 'authorized') {\n const reason = decision === 'denied' ? 'auth deny' : 'auth canceled'\n const failure = callWxAsyncFailure(options, `getUserProfile:fail ${reason}`)\n return Promise.reject(failure)\n }\n return Promise.resolve(callWxAsyncSuccess(options, buildUserProfilePayload('getUserProfile:ok', options?.lang)))\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { callWxAsyncFailure, callWxAsyncSuccess } from "./async.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/runtime/polyfill/background.ts
|
|
4
|
+
function normalizeBackgroundColorValue(color) {
|
|
5
|
+
if (typeof color !== "string") return "";
|
|
6
|
+
return color.trim();
|
|
7
|
+
}
|
|
8
|
+
function setBackgroundColorBridge(options) {
|
|
9
|
+
const backgroundColor = normalizeBackgroundColorValue(options?.backgroundColor);
|
|
10
|
+
const backgroundColorTop = normalizeBackgroundColorValue(options?.backgroundColorTop);
|
|
11
|
+
const backgroundColorBottom = normalizeBackgroundColorValue(options?.backgroundColorBottom);
|
|
12
|
+
const runtimeDocument = typeof document !== "undefined" ? document : void 0;
|
|
13
|
+
const rootElement = runtimeDocument?.documentElement;
|
|
14
|
+
const body = runtimeDocument?.body;
|
|
15
|
+
if (body && backgroundColor) body.style.backgroundColor = backgroundColor;
|
|
16
|
+
if (rootElement && backgroundColorTop && backgroundColorBottom) rootElement.style.setProperty("--weapp-web-background-gradient", `linear-gradient(${backgroundColorTop}, ${backgroundColorBottom})`);
|
|
17
|
+
return Promise.resolve(callWxAsyncSuccess(options, { errMsg: "setBackgroundColor:ok" }));
|
|
18
|
+
}
|
|
19
|
+
function setBackgroundTextStyleBridge(options) {
|
|
20
|
+
const textStyle = options?.textStyle;
|
|
21
|
+
if (textStyle !== void 0 && textStyle !== "dark" && textStyle !== "light") {
|
|
22
|
+
const failure = callWxAsyncFailure(options, "setBackgroundTextStyle:fail invalid textStyle");
|
|
23
|
+
return Promise.reject(failure);
|
|
24
|
+
}
|
|
25
|
+
if (typeof document !== "undefined" && document.documentElement && textStyle) document.documentElement.setAttribute("data-weapp-background-text-style", textStyle);
|
|
26
|
+
return Promise.resolve(callWxAsyncSuccess(options, { errMsg: "setBackgroundTextStyle:ok" }));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { setBackgroundColorBridge, setBackgroundTextStyleBridge };
|
|
31
|
+
//# sourceMappingURL=background.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.mjs","names":[],"sources":["../../../src/runtime/polyfill/background.ts"],"sourcesContent":["import type { SetBackgroundColorOptions, SetBackgroundTextStyleOptions } from './types/locationRuntime'\nimport {\n callWxAsyncFailure,\n callWxAsyncSuccess,\n} from './async'\n\nfunction normalizeBackgroundColorValue(color: unknown) {\n if (typeof color !== 'string') {\n return ''\n }\n return color.trim()\n}\n\nexport function setBackgroundColorBridge(options?: SetBackgroundColorOptions) {\n const backgroundColor = normalizeBackgroundColorValue(options?.backgroundColor)\n const backgroundColorTop = normalizeBackgroundColorValue(options?.backgroundColorTop)\n const backgroundColorBottom = normalizeBackgroundColorValue(options?.backgroundColorBottom)\n const runtimeDocument = typeof document !== 'undefined' ? document : undefined\n const rootElement = runtimeDocument?.documentElement\n const body = runtimeDocument?.body\n\n if (body && backgroundColor) {\n body.style.backgroundColor = backgroundColor\n }\n if (rootElement && backgroundColorTop && backgroundColorBottom) {\n rootElement.style.setProperty(\n '--weapp-web-background-gradient',\n `linear-gradient(${backgroundColorTop}, ${backgroundColorBottom})`,\n )\n }\n return Promise.resolve(callWxAsyncSuccess(options, { errMsg: 'setBackgroundColor:ok' }))\n}\n\nexport function setBackgroundTextStyleBridge(options?: SetBackgroundTextStyleOptions) {\n const textStyle = options?.textStyle\n if (textStyle !== undefined && textStyle !== 'dark' && textStyle !== 'light') {\n const failure = callWxAsyncFailure(options, 'setBackgroundTextStyle:fail invalid textStyle')\n return Promise.reject(failure)\n }\n if (typeof document !== 'undefined' && document.documentElement && textStyle) {\n document.documentElement.setAttribute('data-weapp-background-text-style', textStyle)\n }\n return Promise.resolve(callWxAsyncSuccess(options, { errMsg: 'setBackgroundTextStyle:ok' }))\n}\n"],"mappings":";;;AAMA,SAAS,8BAA8B,OAAgB;AACrD,KAAI,OAAO,UAAU,SACnB,QAAO;AAET,QAAO,MAAM,MAAM;;AAGrB,SAAgB,yBAAyB,SAAqC;CAC5E,MAAM,kBAAkB,8BAA8B,SAAS,gBAAgB;CAC/E,MAAM,qBAAqB,8BAA8B,SAAS,mBAAmB;CACrF,MAAM,wBAAwB,8BAA8B,SAAS,sBAAsB;CAC3F,MAAM,kBAAkB,OAAO,aAAa,cAAc,WAAW;CACrE,MAAM,cAAc,iBAAiB;CACrC,MAAM,OAAO,iBAAiB;AAE9B,KAAI,QAAQ,gBACV,MAAK,MAAM,kBAAkB;AAE/B,KAAI,eAAe,sBAAsB,sBACvC,aAAY,MAAM,YAChB,mCACA,mBAAmB,mBAAmB,IAAI,sBAAsB,GACjE;AAEH,QAAO,QAAQ,QAAQ,mBAAmB,SAAS,EAAE,QAAQ,yBAAyB,CAAC,CAAC;;AAG1F,SAAgB,6BAA6B,SAAyC;CACpF,MAAM,YAAY,SAAS;AAC3B,KAAI,cAAc,UAAa,cAAc,UAAU,cAAc,SAAS;EAC5E,MAAM,UAAU,mBAAmB,SAAS,gDAAgD;AAC5F,SAAO,QAAQ,OAAO,QAAQ;;AAEhC,KAAI,OAAO,aAAa,eAAe,SAAS,mBAAmB,UACjE,UAAS,gBAAgB,aAAa,oCAAoC,UAAU;AAEtF,QAAO,QAAQ,QAAQ,mBAAmB,SAAS,EAAE,QAAQ,6BAA6B,CAAC,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
//#region src/runtime/polyfill/canvasContext.ts
|
|
2
|
+
function normalizeCanvasNumber(value) {
|
|
3
|
+
if (typeof value !== "number" || Number.isNaN(value)) return 0;
|
|
4
|
+
return value;
|
|
5
|
+
}
|
|
6
|
+
function resolveCanvasById(canvasId) {
|
|
7
|
+
if (typeof document === "undefined") return;
|
|
8
|
+
const runtimeDocument = document;
|
|
9
|
+
const normalized = canvasId.trim();
|
|
10
|
+
if (!normalized) return;
|
|
11
|
+
const canvasList = runtimeDocument.querySelectorAll?.("canvas") ?? runtimeDocument.body?.querySelectorAll?.("canvas") ?? [];
|
|
12
|
+
for (const candidate of Array.from(canvasList)) {
|
|
13
|
+
const canvas = candidate;
|
|
14
|
+
if (!canvas) continue;
|
|
15
|
+
if (canvas.id === normalized) return canvas;
|
|
16
|
+
if (typeof canvas.getAttribute === "function" && canvas.getAttribute("canvas-id") === normalized) return canvas;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function createCanvasCommandQueue(canvasId) {
|
|
20
|
+
const commands = [];
|
|
21
|
+
const pushCommand = (command) => {
|
|
22
|
+
commands.push(command);
|
|
23
|
+
};
|
|
24
|
+
const draw = (reserveOrCallback, callback) => {
|
|
25
|
+
const reserve = typeof reserveOrCallback === "boolean" ? reserveOrCallback : false;
|
|
26
|
+
const done = typeof reserveOrCallback === "function" ? reserveOrCallback : callback;
|
|
27
|
+
const canvas = resolveCanvasById(canvasId);
|
|
28
|
+
const context = canvas?.getContext?.("2d");
|
|
29
|
+
if (!context) {
|
|
30
|
+
commands.length = 0;
|
|
31
|
+
done?.();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (!reserve) context.clearRect(0, 0, normalizeCanvasNumber(canvas?.width), normalizeCanvasNumber(canvas?.height));
|
|
35
|
+
for (const command of commands) command(context);
|
|
36
|
+
commands.length = 0;
|
|
37
|
+
done?.();
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
setFillStyle(color) {
|
|
41
|
+
pushCommand((ctx) => {
|
|
42
|
+
ctx.fillStyle = color;
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
setStrokeStyle(color) {
|
|
46
|
+
pushCommand((ctx) => {
|
|
47
|
+
ctx.strokeStyle = color;
|
|
48
|
+
});
|
|
49
|
+
},
|
|
50
|
+
setLineWidth(width) {
|
|
51
|
+
pushCommand((ctx) => {
|
|
52
|
+
ctx.lineWidth = normalizeCanvasNumber(width);
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
setFontSize(size) {
|
|
56
|
+
pushCommand((ctx) => {
|
|
57
|
+
ctx.font = `${Math.max(1, normalizeCanvasNumber(size))}px sans-serif`;
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
fillRect(x, y, width, height) {
|
|
61
|
+
pushCommand((ctx) => {
|
|
62
|
+
ctx.fillRect(normalizeCanvasNumber(x), normalizeCanvasNumber(y), normalizeCanvasNumber(width), normalizeCanvasNumber(height));
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
strokeRect(x, y, width, height) {
|
|
66
|
+
pushCommand((ctx) => {
|
|
67
|
+
ctx.strokeRect(normalizeCanvasNumber(x), normalizeCanvasNumber(y), normalizeCanvasNumber(width), normalizeCanvasNumber(height));
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
clearRect(x, y, width, height) {
|
|
71
|
+
pushCommand((ctx) => {
|
|
72
|
+
ctx.clearRect(normalizeCanvasNumber(x), normalizeCanvasNumber(y), normalizeCanvasNumber(width), normalizeCanvasNumber(height));
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
fillText(text, x, y, maxWidth) {
|
|
76
|
+
pushCommand((ctx) => {
|
|
77
|
+
const normalizedText = String(text ?? "");
|
|
78
|
+
const normalizedX = normalizeCanvasNumber(x);
|
|
79
|
+
const normalizedY = normalizeCanvasNumber(y);
|
|
80
|
+
if (typeof maxWidth === "number" && Number.isFinite(maxWidth)) {
|
|
81
|
+
ctx.fillText(normalizedText, normalizedX, normalizedY, normalizeCanvasNumber(maxWidth));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
ctx.fillText(normalizedText, normalizedX, normalizedY);
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
|
+
beginPath() {
|
|
88
|
+
pushCommand((ctx) => ctx.beginPath());
|
|
89
|
+
},
|
|
90
|
+
closePath() {
|
|
91
|
+
pushCommand((ctx) => ctx.closePath());
|
|
92
|
+
},
|
|
93
|
+
moveTo(x, y) {
|
|
94
|
+
pushCommand((ctx) => {
|
|
95
|
+
ctx.moveTo(normalizeCanvasNumber(x), normalizeCanvasNumber(y));
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
lineTo(x, y) {
|
|
99
|
+
pushCommand((ctx) => {
|
|
100
|
+
ctx.lineTo(normalizeCanvasNumber(x), normalizeCanvasNumber(y));
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
stroke() {
|
|
104
|
+
pushCommand((ctx) => ctx.stroke());
|
|
105
|
+
},
|
|
106
|
+
draw
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function createCanvasContextBridge(canvasId) {
|
|
110
|
+
return createCanvasCommandQueue(String(canvasId ?? ""));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
//#endregion
|
|
114
|
+
export { createCanvasContextBridge };
|
|
115
|
+
//# sourceMappingURL=canvasContext.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasContext.mjs","names":[],"sources":["../../../src/runtime/polyfill/canvasContext.ts"],"sourcesContent":["import type { CanvasContext } from './types/platformRuntime'\n\nfunction normalizeCanvasNumber(value: unknown) {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return 0\n }\n return value\n}\n\nfunction resolveCanvasById(canvasId: string) {\n if (typeof document === 'undefined') {\n return undefined\n }\n const runtimeDocument = document as Document & {\n querySelectorAll?: (selector: string) => ArrayLike<Element>\n body?: {\n querySelectorAll?: (selector: string) => ArrayLike<Element>\n }\n }\n const normalized = canvasId.trim()\n if (!normalized) {\n return undefined\n }\n const canvasList = runtimeDocument.querySelectorAll?.('canvas')\n ?? runtimeDocument.body?.querySelectorAll?.('canvas')\n ?? []\n for (const candidate of Array.from(canvasList)) {\n const canvas = candidate as HTMLCanvasElement\n if (!canvas) {\n continue\n }\n if ((canvas as { id?: string }).id === normalized) {\n return canvas\n }\n if (typeof canvas.getAttribute === 'function' && canvas.getAttribute('canvas-id') === normalized) {\n return canvas\n }\n }\n return undefined\n}\n\nfunction createCanvasCommandQueue(canvasId: string) {\n const commands: Array<(ctx: CanvasRenderingContext2D) => void> = []\n\n const pushCommand = (command: (ctx: CanvasRenderingContext2D) => void) => {\n commands.push(command)\n }\n\n const draw: CanvasContext['draw'] = (reserveOrCallback?: boolean | (() => void), callback?: () => void) => {\n const reserve = typeof reserveOrCallback === 'boolean' ? reserveOrCallback : false\n const done = typeof reserveOrCallback === 'function' ? reserveOrCallback : callback\n const canvas = resolveCanvasById(canvasId)\n const context = canvas?.getContext?.('2d') as CanvasRenderingContext2D | null | undefined\n if (!context) {\n commands.length = 0\n done?.()\n return\n }\n if (!reserve) {\n context.clearRect(0, 0, normalizeCanvasNumber(canvas?.width), normalizeCanvasNumber(canvas?.height))\n }\n for (const command of commands) {\n command(context)\n }\n commands.length = 0\n done?.()\n }\n\n const api: CanvasContext = {\n setFillStyle(color: string) {\n pushCommand((ctx) => {\n ctx.fillStyle = color\n })\n },\n setStrokeStyle(color: string) {\n pushCommand((ctx) => {\n ctx.strokeStyle = color\n })\n },\n setLineWidth(width: number) {\n pushCommand((ctx) => {\n ctx.lineWidth = normalizeCanvasNumber(width)\n })\n },\n setFontSize(size: number) {\n pushCommand((ctx) => {\n const normalized = Math.max(1, normalizeCanvasNumber(size))\n ctx.font = `${normalized}px sans-serif`\n })\n },\n fillRect(x: number, y: number, width: number, height: number) {\n pushCommand((ctx) => {\n ctx.fillRect(\n normalizeCanvasNumber(x),\n normalizeCanvasNumber(y),\n normalizeCanvasNumber(width),\n normalizeCanvasNumber(height),\n )\n })\n },\n strokeRect(x: number, y: number, width: number, height: number) {\n pushCommand((ctx) => {\n ctx.strokeRect(\n normalizeCanvasNumber(x),\n normalizeCanvasNumber(y),\n normalizeCanvasNumber(width),\n normalizeCanvasNumber(height),\n )\n })\n },\n clearRect(x: number, y: number, width: number, height: number) {\n pushCommand((ctx) => {\n ctx.clearRect(\n normalizeCanvasNumber(x),\n normalizeCanvasNumber(y),\n normalizeCanvasNumber(width),\n normalizeCanvasNumber(height),\n )\n })\n },\n fillText(text: string, x: number, y: number, maxWidth?: number) {\n pushCommand((ctx) => {\n const normalizedText = String(text ?? '')\n const normalizedX = normalizeCanvasNumber(x)\n const normalizedY = normalizeCanvasNumber(y)\n if (typeof maxWidth === 'number' && Number.isFinite(maxWidth)) {\n ctx.fillText(normalizedText, normalizedX, normalizedY, normalizeCanvasNumber(maxWidth))\n return\n }\n ctx.fillText(normalizedText, normalizedX, normalizedY)\n })\n },\n beginPath() {\n pushCommand(ctx => ctx.beginPath())\n },\n closePath() {\n pushCommand(ctx => ctx.closePath())\n },\n moveTo(x: number, y: number) {\n pushCommand((ctx) => {\n ctx.moveTo(normalizeCanvasNumber(x), normalizeCanvasNumber(y))\n })\n },\n lineTo(x: number, y: number) {\n pushCommand((ctx) => {\n ctx.lineTo(normalizeCanvasNumber(x), normalizeCanvasNumber(y))\n })\n },\n stroke() {\n pushCommand(ctx => ctx.stroke())\n },\n draw,\n }\n return api\n}\n\nexport function createCanvasContextBridge(canvasId: string) {\n return createCanvasCommandQueue(String(canvasId ?? ''))\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/runtime/polyfill/capability.ts
|
|
2
|
+
function checkRuntimeCapability(wxBridge, schema) {
|
|
3
|
+
const normalized = String(schema ?? "").trim().replace(/^wx\./, "");
|
|
4
|
+
if (!normalized) return false;
|
|
5
|
+
const path = normalized.split(/[.[\]]/g).filter(Boolean);
|
|
6
|
+
if (!path.length) return false;
|
|
7
|
+
let cursor = wxBridge;
|
|
8
|
+
for (const segment of path) {
|
|
9
|
+
if (!cursor || typeof cursor !== "object") return false;
|
|
10
|
+
cursor = cursor[segment];
|
|
11
|
+
}
|
|
12
|
+
return typeof cursor === "function" || typeof cursor === "object" && cursor !== null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
export { checkRuntimeCapability };
|
|
17
|
+
//# sourceMappingURL=capability.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.mjs","names":[],"sources":["../../../src/runtime/polyfill/capability.ts"],"sourcesContent":["export function checkRuntimeCapability(\n wxBridge: Record<string, unknown> | undefined,\n schema: string,\n) {\n const normalized = String(schema ?? '').trim().replace(/^wx\\./, '')\n if (!normalized) {\n return false\n }\n const path = normalized.split(/[.[\\]]/g).filter(Boolean)\n if (!path.length) {\n return false\n }\n let cursor: unknown = wxBridge\n for (const segment of path) {\n if (!cursor || typeof cursor !== 'object') {\n return false\n }\n cursor = (cursor as Record<string, unknown>)[segment]\n }\n return typeof cursor === 'function' || (typeof cursor === 'object' && cursor !== null)\n}\n"],"mappings":";AAAA,SAAgB,uBACd,UACA,QACA;CACA,MAAM,aAAa,OAAO,UAAU,GAAG,CAAC,MAAM,CAAC,QAAQ,SAAS,GAAG;AACnE,KAAI,CAAC,WACH,QAAO;CAET,MAAM,OAAO,WAAW,MAAM,UAAU,CAAC,OAAO,QAAQ;AACxD,KAAI,CAAC,KAAK,OACR,QAAO;CAET,IAAI,SAAkB;AACtB,MAAK,MAAM,WAAW,MAAM;AAC1B,MAAI,CAAC,UAAU,OAAO,WAAW,SAC/B,QAAO;AAET,WAAU,OAAmC;;AAE/C,QAAO,OAAO,WAAW,cAAe,OAAO,WAAW,YAAY,WAAW"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//#region src/runtime/polyfill/cloud.ts
|
|
2
|
+
function createCloudRequestId() {
|
|
3
|
+
return `web_cloud_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
|
|
4
|
+
}
|
|
5
|
+
function createCloudBridge(callWxAsyncSuccess, callWxAsyncFailure) {
|
|
6
|
+
const cloudRuntimeState = {
|
|
7
|
+
env: "",
|
|
8
|
+
traceUser: false
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
init(options) {
|
|
12
|
+
cloudRuntimeState.env = typeof options?.env === "string" ? options.env : "";
|
|
13
|
+
cloudRuntimeState.traceUser = Boolean(options?.traceUser);
|
|
14
|
+
},
|
|
15
|
+
callFunction(options) {
|
|
16
|
+
const name = typeof options?.name === "string" ? options.name.trim() : "";
|
|
17
|
+
if (!name) {
|
|
18
|
+
const failure = callWxAsyncFailure(options, "cloud.callFunction:fail invalid function name");
|
|
19
|
+
return Promise.reject(failure);
|
|
20
|
+
}
|
|
21
|
+
const result = callWxAsyncSuccess(options, {
|
|
22
|
+
errMsg: "cloud.callFunction:ok",
|
|
23
|
+
result: {
|
|
24
|
+
name,
|
|
25
|
+
data: { ...options?.data ?? {} },
|
|
26
|
+
env: cloudRuntimeState.env,
|
|
27
|
+
traceUser: cloudRuntimeState.traceUser,
|
|
28
|
+
mock: true
|
|
29
|
+
},
|
|
30
|
+
requestID: createCloudRequestId()
|
|
31
|
+
});
|
|
32
|
+
return Promise.resolve(result);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
export { createCloudBridge };
|
|
39
|
+
//# sourceMappingURL=cloud.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud.mjs","names":[],"sources":["../../../src/runtime/polyfill/cloud.ts"],"sourcesContent":["interface WxBaseResult {\n errMsg: string\n}\n\ninterface CloudInitOptions {\n env?: string\n traceUser?: boolean\n}\n\ninterface CloudCallFunctionOptions {\n name?: string\n data?: Record<string, unknown>\n}\n\ninterface CloudBridge {\n init: (options?: CloudInitOptions) => void\n callFunction: (options?: CloudCallFunctionOptions) => Promise<unknown>\n}\n\ntype CallWxAsyncSuccess = (options: unknown, result: Record<string, unknown> & WxBaseResult) => unknown\ntype CallWxAsyncFailure = (options: unknown, errMsg: string) => WxBaseResult\n\nfunction createCloudRequestId() {\n return `web_cloud_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`\n}\n\nexport function createCloudBridge(\n callWxAsyncSuccess: CallWxAsyncSuccess,\n callWxAsyncFailure: CallWxAsyncFailure,\n): CloudBridge {\n const cloudRuntimeState = {\n env: '',\n traceUser: false,\n }\n return {\n init(options?: CloudInitOptions) {\n cloudRuntimeState.env = typeof options?.env === 'string' ? options.env : ''\n cloudRuntimeState.traceUser = Boolean(options?.traceUser)\n },\n callFunction(options?: CloudCallFunctionOptions) {\n const name = typeof options?.name === 'string' ? options.name.trim() : ''\n if (!name) {\n const failure = callWxAsyncFailure(options, 'cloud.callFunction:fail invalid function name')\n return Promise.reject(failure)\n }\n const result = callWxAsyncSuccess(options, {\n errMsg: 'cloud.callFunction:ok',\n result: {\n name,\n data: { ...(options?.data ?? {}) },\n env: cloudRuntimeState.env,\n traceUser: cloudRuntimeState.traceUser,\n mock: true,\n },\n requestID: createCloudRequestId(),\n })\n return Promise.resolve(result)\n },\n }\n}\n"],"mappings":";AAsBA,SAAS,uBAAuB;AAC9B,QAAO,aAAa,KAAK,KAAK,CAAC,SAAS,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,GAAG;;AAGxF,SAAgB,kBACd,oBACA,oBACa;CACb,MAAM,oBAAoB;EACxB,KAAK;EACL,WAAW;EACZ;AACD,QAAO;EACL,KAAK,SAA4B;AAC/B,qBAAkB,MAAM,OAAO,SAAS,QAAQ,WAAW,QAAQ,MAAM;AACzE,qBAAkB,YAAY,QAAQ,SAAS,UAAU;;EAE3D,aAAa,SAAoC;GAC/C,MAAM,OAAO,OAAO,SAAS,SAAS,WAAW,QAAQ,KAAK,MAAM,GAAG;AACvE,OAAI,CAAC,MAAM;IACT,MAAM,UAAU,mBAAmB,SAAS,gDAAgD;AAC5F,WAAO,QAAQ,OAAO,QAAQ;;GAEhC,MAAM,SAAS,mBAAmB,SAAS;IACzC,QAAQ;IACR,QAAQ;KACN;KACA,MAAM,EAAE,GAAI,SAAS,QAAQ,EAAE,EAAG;KAClC,KAAK,kBAAkB;KACvB,WAAW,kBAAkB;KAC7B,MAAM;KACP;IACD,WAAW,sBAAsB;IAClC,CAAC;AACF,UAAO,QAAQ,QAAQ,OAAO;;EAEjC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
//#region src/runtime/polyfill/device.ts
|
|
2
|
+
function resolveVibrateDuration(type) {
|
|
3
|
+
if (type === "heavy") return 30;
|
|
4
|
+
if (type === "medium") return 20;
|
|
5
|
+
return 15;
|
|
6
|
+
}
|
|
7
|
+
function vibrateDevice(type) {
|
|
8
|
+
const runtimeNavigator = typeof navigator !== "undefined" ? navigator : void 0;
|
|
9
|
+
if (!runtimeNavigator || typeof runtimeNavigator.vibrate !== "function") throw new Error("vibrate is unavailable");
|
|
10
|
+
runtimeNavigator.vibrate(resolveVibrateDuration(type));
|
|
11
|
+
}
|
|
12
|
+
function normalizeBatteryLevel(level) {
|
|
13
|
+
if (typeof level !== "number" || Number.isNaN(level)) return 100;
|
|
14
|
+
const value = Math.round(level * 100);
|
|
15
|
+
return Math.min(100, Math.max(0, value));
|
|
16
|
+
}
|
|
17
|
+
let cachedBatteryInfo = {
|
|
18
|
+
level: 100,
|
|
19
|
+
isCharging: false
|
|
20
|
+
};
|
|
21
|
+
async function readRuntimeBatteryInfoInternal() {
|
|
22
|
+
const runtimeNavigator = typeof navigator !== "undefined" ? navigator : void 0;
|
|
23
|
+
if (runtimeNavigator && typeof runtimeNavigator.getBattery === "function") {
|
|
24
|
+
const battery = await runtimeNavigator.getBattery();
|
|
25
|
+
const nextInfo = {
|
|
26
|
+
level: normalizeBatteryLevel(battery?.level),
|
|
27
|
+
isCharging: Boolean(battery?.charging)
|
|
28
|
+
};
|
|
29
|
+
cachedBatteryInfo = nextInfo;
|
|
30
|
+
return nextInfo;
|
|
31
|
+
}
|
|
32
|
+
return cachedBatteryInfo;
|
|
33
|
+
}
|
|
34
|
+
function readBatteryInfoSyncSnapshot() {
|
|
35
|
+
readRuntimeBatteryInfoInternal().catch(() => {});
|
|
36
|
+
return { ...cachedBatteryInfo };
|
|
37
|
+
}
|
|
38
|
+
function readBatteryInfoSnapshot() {
|
|
39
|
+
return readRuntimeBatteryInfoInternal();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
export { readBatteryInfoSnapshot, readBatteryInfoSyncSnapshot, vibrateDevice };
|
|
44
|
+
//# sourceMappingURL=device.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.mjs","names":[],"sources":["../../../src/runtime/polyfill/device.ts"],"sourcesContent":["type VibrateType = 'heavy' | 'medium' | 'light' | undefined\n\ninterface BatterySnapshot {\n level: number\n isCharging: boolean\n}\n\nfunction resolveVibrateDuration(type: VibrateType) {\n if (type === 'heavy') {\n return 30\n }\n if (type === 'medium') {\n return 20\n }\n return 15\n}\n\nexport function vibrateDevice(type: VibrateType) {\n const runtimeNavigator = (typeof navigator !== 'undefined' ? navigator : undefined) as (Navigator & {\n vibrate?: (pattern: number | number[]) => boolean\n }) | undefined\n if (!runtimeNavigator || typeof runtimeNavigator.vibrate !== 'function') {\n throw new Error('vibrate is unavailable')\n }\n runtimeNavigator.vibrate(resolveVibrateDuration(type))\n}\n\nfunction normalizeBatteryLevel(level: unknown) {\n if (typeof level !== 'number' || Number.isNaN(level)) {\n return 100\n }\n const value = Math.round(level * 100)\n return Math.min(100, Math.max(0, value))\n}\n\nlet cachedBatteryInfo: BatterySnapshot = {\n level: 100,\n isCharging: false,\n}\n\nasync function readRuntimeBatteryInfoInternal() {\n const runtimeNavigator = (typeof navigator !== 'undefined' ? navigator : undefined) as (Navigator & {\n getBattery?: () => Promise<{ charging?: boolean, level?: number }>\n }) | undefined\n if (runtimeNavigator && typeof runtimeNavigator.getBattery === 'function') {\n const battery = await runtimeNavigator.getBattery()\n const nextInfo: BatterySnapshot = {\n level: normalizeBatteryLevel(battery?.level),\n isCharging: Boolean(battery?.charging),\n }\n cachedBatteryInfo = nextInfo\n return nextInfo\n }\n return cachedBatteryInfo\n}\n\nexport function readBatteryInfoSyncSnapshot() {\n void readRuntimeBatteryInfoInternal().catch(() => {})\n return {\n ...cachedBatteryInfo,\n }\n}\n\nexport function readBatteryInfoSnapshot() {\n return readRuntimeBatteryInfoInternal()\n}\n"],"mappings":";AAOA,SAAS,uBAAuB,MAAmB;AACjD,KAAI,SAAS,QACX,QAAO;AAET,KAAI,SAAS,SACX,QAAO;AAET,QAAO;;AAGT,SAAgB,cAAc,MAAmB;CAC/C,MAAM,mBAAoB,OAAO,cAAc,cAAc,YAAY;AAGzE,KAAI,CAAC,oBAAoB,OAAO,iBAAiB,YAAY,WAC3D,OAAM,IAAI,MAAM,yBAAyB;AAE3C,kBAAiB,QAAQ,uBAAuB,KAAK,CAAC;;AAGxD,SAAS,sBAAsB,OAAgB;AAC7C,KAAI,OAAO,UAAU,YAAY,OAAO,MAAM,MAAM,CAClD,QAAO;CAET,MAAM,QAAQ,KAAK,MAAM,QAAQ,IAAI;AACrC,QAAO,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,MAAM,CAAC;;AAG1C,IAAI,oBAAqC;CACvC,OAAO;CACP,YAAY;CACb;AAED,eAAe,iCAAiC;CAC9C,MAAM,mBAAoB,OAAO,cAAc,cAAc,YAAY;AAGzE,KAAI,oBAAoB,OAAO,iBAAiB,eAAe,YAAY;EACzE,MAAM,UAAU,MAAM,iBAAiB,YAAY;EACnD,MAAM,WAA4B;GAChC,OAAO,sBAAsB,SAAS,MAAM;GAC5C,YAAY,QAAQ,SAAS,SAAS;GACvC;AACD,sBAAoB;AACpB,SAAO;;AAET,QAAO;;AAGT,SAAgB,8BAA8B;AAC5C,CAAK,gCAAgC,CAAC,YAAY,GAAG;AACrD,QAAO,EACL,GAAG,mBACJ;;AAGH,SAAgB,0BAA0B;AACxC,QAAO,gCAAgC"}
|