UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 10.1 kB
import*as Common from"../common/common.js";import{CSSModel}from"./CSSModel.js";import{MultitargetNetworkManager}from"./NetworkManager.js";import{Events,OverlayModel}from"./OverlayModel.js";import{Capability}from"./Target.js";import{SDKModel}from"./SDKModel.js";export class EmulationModel extends SDKModel{#e;#t;#i;#a;#n;#o;#s;#r;#l;#d;constructor(e){super(e),this.#e=e.emulationAgent(),this.#t=e.deviceOrientationAgent(),this.#i=e.model(CSSModel),this.#a=e.model(OverlayModel),this.#a&&this.#a.addEventListener(Events.InspectModeWillBeToggled,(()=>{this.updateTouch()}),this);const t=Common.Settings.Settings.instance().moduleSetting("javaScriptDisabled");t.addChangeListener((async()=>await this.#e.invoke_setScriptExecutionDisabled({value:t.get()}))),t.get()&&this.#e.invoke_setScriptExecutionDisabled({value:!0});const i=Common.Settings.Settings.instance().moduleSetting("emulation.touch");i.addChangeListener((()=>{const e=i.get();this.overrideEmulateTouch("force"===e)}));const a=Common.Settings.Settings.instance().moduleSetting("emulation.idleDetection");a.addChangeListener((async()=>{const e=a.get();if("none"===e)return void await this.clearIdleOverride();const t=JSON.parse(e);await this.setIdleOverride(t)}));const n=Common.Settings.Settings.instance().moduleSetting("emulatedCSSMedia"),o=Common.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeatureColorGamut"),s=Common.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersColorScheme"),r=Common.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeatureForcedColors"),l=Common.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersContrast"),d=Common.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersReducedData"),u=Common.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersReducedTransparency"),c=Common.Settings.Settings.instance().moduleSetting("emulatedCSSMediaFeaturePrefersReducedMotion");this.#n=new Map([["type",n.get()],["color-gamut",o.get()],["prefers-color-scheme",s.get()],["forced-colors",r.get()],["prefers-contrast",l.get()],["prefers-reduced-data",d.get()],["prefers-reduced-motion",c.get()],["prefers-reduced-transparency",u.get()]]),n.addChangeListener((()=>{this.#n.set("type",n.get()),this.updateCssMedia()})),o.addChangeListener((()=>{this.#n.set("color-gamut",o.get()),this.updateCssMedia()})),s.addChangeListener((()=>{this.#n.set("prefers-color-scheme",s.get()),this.updateCssMedia()})),r.addChangeListener((()=>{this.#n.set("forced-colors",r.get()),this.updateCssMedia()})),l.addChangeListener((()=>{this.#n.set("prefers-contrast",l.get()),this.updateCssMedia()})),d.addChangeListener((()=>{this.#n.set("prefers-reduced-data",d.get()),this.updateCssMedia()})),c.addChangeListener((()=>{this.#n.set("prefers-reduced-motion",c.get()),this.updateCssMedia()})),u.addChangeListener((()=>{this.#n.set("prefers-reduced-transparency",u.get()),this.updateCssMedia()})),this.updateCssMedia();const m=Common.Settings.Settings.instance().moduleSetting("emulateAutoDarkMode");m.addChangeListener((()=>{const e=m.get();s.setDisabled(e),s.set(e?"dark":""),this.emulateAutoDarkMode(e)})),m.get()&&(s.setDisabled(!0),s.set("dark"),this.emulateAutoDarkMode(!0));const g=Common.Settings.Settings.instance().moduleSetting("emulatedVisionDeficiency");g.addChangeListener((()=>this.emulateVisionDeficiency(g.get()))),g.get()&&this.emulateVisionDeficiency(g.get());const h=Common.Settings.Settings.instance().moduleSetting("localFontsDisabled");h.addChangeListener((()=>this.setLocalFontsDisabled(h.get()))),h.get()&&this.setLocalFontsDisabled(h.get());const v=Common.Settings.Settings.instance().moduleSetting("avifFormatDisabled"),p=Common.Settings.Settings.instance().moduleSetting("webpFormatDisabled"),C=()=>{const e=[];v.get()&&e.push("avif"),p.get()&&e.push("webp"),this.setDisabledImageTypes(e)};v.addChangeListener(C),p.addChangeListener(C),(v.get()||p.get())&&C(),this.#r=!0,this.#o=!1,this.#s=!1,this.#l=!1,this.#d={enabled:!1,configuration:"mobile"}}setTouchEmulationAllowed(e){this.#r=e}supportsDeviceEmulation(){return this.target().hasAllCapabilities(Capability.DeviceEmulation)}async resetPageScaleFactor(){await this.#e.invoke_resetPageScaleFactor()}async emulateDevice(e){e?await this.#e.invoke_setDeviceMetricsOverride(e):await this.#e.invoke_clearDeviceMetricsOverride()}overlayModel(){return this.#a}async emulateLocation(e){if(!e||e.error)await Promise.all([this.#e.invoke_clearGeolocationOverride(),this.#e.invoke_setTimezoneOverride({timezoneId:""}),this.#e.invoke_setLocaleOverride({locale:""}),this.#e.invoke_setUserAgentOverride({userAgent:MultitargetNetworkManager.instance().currentUserAgent()})]);else{function t(e,t){const i=t.getError();return i?Promise.reject({type:e,message:i}):Promise.resolve()}await Promise.all([this.#e.invoke_setGeolocationOverride({latitude:e.latitude,longitude:e.longitude,accuracy:Location.defaultGeoMockAccuracy}).then((e=>t("emulation-set-location",e))),this.#e.invoke_setTimezoneOverride({timezoneId:e.timezoneId}).then((e=>t("emulation-set-timezone",e))),this.#e.invoke_setLocaleOverride({locale:e.locale}).then((e=>t("emulation-set-locale",e))),this.#e.invoke_setUserAgentOverride({userAgent:MultitargetNetworkManager.instance().currentUserAgent(),acceptLanguage:e.locale}).then((e=>t("emulation-set-user-agent",e)))])}}async emulateDeviceOrientation(e){e?await this.#t.invoke_setDeviceOrientationOverride({alpha:e.alpha,beta:e.beta,gamma:e.gamma}):await this.#t.invoke_clearDeviceOrientationOverride()}async setIdleOverride(e){await this.#e.invoke_setIdleOverride(e)}async clearIdleOverride(){await this.#e.invoke_clearIdleOverride()}async emulateCSSMedia(e,t){await this.#e.invoke_setEmulatedMedia({media:e,features:t}),this.#i&&this.#i.mediaQueryResultChanged()}async emulateAutoDarkMode(e){e&&(this.#n.set("prefers-color-scheme","dark"),await this.updateCssMedia()),await this.#e.invoke_setAutoDarkModeOverride({enabled:e||void 0})}async emulateVisionDeficiency(e){await this.#e.invoke_setEmulatedVisionDeficiency({type:e})}setLocalFontsDisabled(e){this.#i&&this.#i.setLocalFontsEnabled(!e)}setDisabledImageTypes(e){this.#e.invoke_setDisabledImageTypes({imageTypes:e})}async setCPUThrottlingRate(e){await this.#e.invoke_setCPUThrottlingRate({rate:e})}async setHardwareConcurrency(e){if(e<1)throw new Error("hardwareConcurrency must be a positive value");await this.#e.invoke_setHardwareConcurrencyOverride({hardwareConcurrency:e})}async emulateTouch(e,t){this.#o=e&&this.#r,this.#s=t&&this.#r,await this.updateTouch()}async overrideEmulateTouch(e){this.#l=e&&this.#r,await this.updateTouch()}async updateTouch(){let e={enabled:this.#o,configuration:this.#s?"mobile":"desktop"};this.#l&&(e={enabled:!0,configuration:"mobile"}),this.#a&&this.#a.inspectModeEnabled()&&(e={enabled:!1,configuration:"mobile"}),(this.#d.enabled||e.enabled)&&(this.#d.enabled&&e.enabled&&this.#d.configuration===e.configuration||(this.#d=e,await this.#e.invoke_setTouchEmulationEnabled({enabled:e.enabled,maxTouchPoints:1}),await this.#e.invoke_setEmitTouchEventsForMouse({enabled:e.enabled,configuration:e.configuration})))}async updateCssMedia(){const e=this.#n.get("type")??"",t=[{name:"color-gamut",value:this.#n.get("color-gamut")??""},{name:"prefers-color-scheme",value:this.#n.get("prefers-color-scheme")??""},{name:"forced-colors",value:this.#n.get("forced-colors")??""},{name:"prefers-contrast",value:this.#n.get("prefers-contrast")??""},{name:"prefers-reduced-data",value:this.#n.get("prefers-reduced-data")??""},{name:"prefers-reduced-motion",value:this.#n.get("prefers-reduced-motion")??""},{name:"prefers-reduced-transparency",value:this.#n.get("prefers-reduced-transparency")??""}];return this.emulateCSSMedia(e,t)}}export class Location{latitude;longitude;timezoneId;locale;error;constructor(e,t,i,a,n){this.latitude=e,this.longitude=t,this.timezoneId=i,this.locale=a,this.error=n}static parseSetting(e){if(e){const[t,i,a,n]=e.split(":"),[o,s]=t.split("@");return new Location(parseFloat(o),parseFloat(s),i,a,Boolean(n))}return new Location(0,0,"","",!1)}static parseUserInput(e,t,i,a){if(!e&&!t)return null;const{valid:n}=Location.latitudeValidator(e),{valid:o}=Location.longitudeValidator(t);if(!n&&!o)return null;const s=n?parseFloat(e):-1,r=o?parseFloat(t):-1;return new Location(s,r,i,a,!1)}static latitudeValidator(e){const t=parseFloat(e);return{valid:/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(e)&&t>=-90&&t<=90,errorMessage:void 0}}static longitudeValidator(e){const t=parseFloat(e);return{valid:/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(e)&&t>=-180&&t<=180,errorMessage:void 0}}static timezoneIdValidator(e){return{valid:""===e||/[a-zA-Z]/.test(e),errorMessage:void 0}}static localeValidator(e){return{valid:""===e||/[a-zA-Z]{2}/.test(e),errorMessage:void 0}}toSetting(){return`${this.latitude}@${this.longitude}:${this.timezoneId}:${this.locale}:${this.error||""}`}static defaultGeoMockAccuracy=150}export class DeviceOrientation{alpha;beta;gamma;constructor(e,t,i){this.alpha=e,this.beta=t,this.gamma=i}static parseSetting(e){if(e){const t=JSON.parse(e);return new DeviceOrientation(t.alpha,t.beta,t.gamma)}return new DeviceOrientation(0,0,0)}static parseUserInput(e,t,i){if(!e&&!t&&!i)return null;const{valid:a}=DeviceOrientation.alphaAngleValidator(e),{valid:n}=DeviceOrientation.betaAngleValidator(t),{valid:o}=DeviceOrientation.gammaAngleValidator(i);if(!a&&!n&&!o)return null;const s=a?parseFloat(e):-1,r=n?parseFloat(t):-1,l=o?parseFloat(i):-1;return new DeviceOrientation(s,r,l)}static angleRangeValidator(e,t){const i=parseFloat(e);return{valid:/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(e)&&i>=t.minimum&&i<t.maximum,errorMessage:void 0}}static alphaAngleValidator(e){return DeviceOrientation.angleRangeValidator(e,{minimum:-180,maximum:180})}static betaAngleValidator(e){return DeviceOrientation.angleRangeValidator(e,{minimum:-180,maximum:180})}static gammaAngleValidator(e){return DeviceOrientation.angleRangeValidator(e,{minimum:-90,maximum:90})}toSetting(){return JSON.stringify(this)}}SDKModel.register(EmulationModel,{capabilities:Capability.Emulation,autostart:!0});