Initial commit

This commit is contained in:
jiapengyu
2026-07-27 13:37:48 +08:00
commit ecba71e2a5
39123 changed files with 5989154 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
"use strict";var t=require("./index.js");const n=new t.Automator;let s,i=!1;try{s=require("jest-environment-node")}catch(t){s=require(require.resolve("jest-environment-node",{paths:[process.cwd()]}))}s&&s.TestEnvironment&&(i=!0,s=s.TestEnvironment);module.exports=class extends s{constructor(t,n){var s,o;super(i?{projectConfig:t}:t,n),process.env.UNI_AUTOMATOR_CONFIG?this.launchOptions=require(process.env.UNI_AUTOMATOR_CONFIG):this.launchOptions=t.testEnvironmentOptions?t.testEnvironmentOptions:t.projectConfig.testEnvironmentOptions,(null===(s=this.launchOptions)||void 0===s?void 0:s.web)&&Object.assign(this.launchOptions,{h5:this.launchOptions.web}),(null===(o=this.launchOptions)||void 0===o?void 0:o.app)&&Object.assign(this.launchOptions,{"app-plus":this.launchOptions.app})}async setup(){await super.setup();const s=global;if(s.__init__){if(!s.program)throw Error("Program init failed")}else s.__init__=!0,this.launchOptions.platform=this.launchOptions.platform||process.env.UNI_PLATFORM,s.program=await n.launch(this.launchOptions),this.launchOptions.devtools&&this.launchOptions.devtools.remote&&await s.program.remote(!0);this.global.program=s.program,this.global.uni=t.initUni(s.program)}async teardown(){await super.teardown()}};
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";module.exports=async function(){const o=global.program;o&&o.teardown(),await new Promise((o=>{setTimeout((()=>{o(void 0)}),3e3)}))};
+35
View File
@@ -0,0 +1,35 @@
<script>
let firstBackTime = 0
export default {
onLaunch: function () {
console.log('App Launch')
},
onShow: function () {
console.log('App Show')
},
onHide: function () {
console.log('App Hide')
},
// #ifdef APP-ANDROID
onLastPageBackPress: function () {
console.log('App LastPageBackPress')
if (firstBackTime == 0) {
uni.showToast({
title: '再按一次退出应用',
position: 'bottom',
})
firstBackTime = Date.now()
setTimeout(() => {
firstBackTime = 0
}, 2000)
} else if (Date.now() - firstBackTime < 2000) {
firstBackTime = Date.now()
uni.exit()
}
},
// #endif
onExit: function () {
console.log('App Exit')
},
}
</script>
@@ -0,0 +1,9 @@
import App from './App.uvue'
import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
@@ -0,0 +1,8 @@
{
"name" : "NAME",
"appid" : "APPID",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"uni-app-x" : {}
}
@@ -0,0 +1,14 @@
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "uni-app x"
}
}
],
"globalStyle": {
"navigationStyle": "custom",
"pageOrientation": "auto"
}
}
@@ -0,0 +1,115 @@
<template>
<view style="flex: 1;">
<!-- #ifdef APP-ANDROID -->
<view :style="{ height: `${statusBarHeight}px` }"></view>
<!-- #endif -->
<web-view
ref="webview"
id="webview"
style="flex: 1;"
:webview-styles="webviewStyles"
:src="src"
@message="message"
@error="error"
/>
</view>
</template>
<script lang='uts'>
export default {
data() {
return {
src: process.env.UNI_AUTOMATOR_APP_WEBVIEW_SRC,
webviewElement: null as UniWebViewElement | null,
webviewContext: null as WebviewContext | null,
webviewStyles: {
progress: false
},
statusBarHeight: 0,
safeAreaTop: 0
}
},
onReady() {
const windowInfo = uni.getWindowInfo()
this.statusBarHeight = windowInfo.statusBarHeight
this.safeAreaTop = windowInfo.safeAreaInsets.top
this.webviewElement = this.$refs['webview'] as UniWebViewElement
this.webviewContext = uni.createWebviewContext('webview', this)
},
methods: {
initAutomator() {
const options = {
wsEndpoint: process.env.UNI_AUTOMATOR_WS_ENDPOINT
}
this.webviewContext!.evalJS(`initRuntimeAutomator(${JSON.stringify(options)})`)
console.log('initRuntimeAutomator...')
},
message(msg: UniWebViewMessageEvent) {
// #ifdef APP-ANDROID
// data 由 对象变更成数组
const data = msg.detail.data[0];
const id = data.get("id") as number
const type = data.get("type") as string
const dataObj = data.get("data") as UTSJSONObject
const action = dataObj.getString("action")!
const args = dataObj.get("args")
// #endif
// #ifndef APP-ANDROID
const data = msg.detail.data.length ? msg.detail.data[0].data : msg.detail.data
const id = data["id"] as number
const type = data["type"] as string
const dataObj = data["data"]
const action = dataObj["action"]!
const args = dataObj["args"]
// #endif
if (type != 'automator') {
return;
}
if (action == 'ready') {
this.initAutomator()
} else {
console.log(id, action, args)
if (action == 'captureScreenshot') {
// 调用截图
this.$viewToTempFilePath({
id: 'webview',
// #ifdef APP-ANDROID
offsetY: `44`,
// #endif
// #ifndef APP-ANDROID
offsetY: `${this.safeAreaTop + 44}`,
// #endif
overwrite: true,
wholeContent: true,
success: (res) => {
const fileManager = uni.getFileSystemManager()
fileManager.readFile({
encoding: 'base64',
filePath: res.tempFilePath,
success: (readFileRes) => {
this.callback(id, { data: readFileRes.data }, '')
},
fail: (error) => {
this.callback(id, '', error.errMsg)
},
} as ReadFileOptions)
},
fail: (res) => {
this.callback(id, '', res.errMsg)
}
})
}
}
},
error(event : WebViewErrorEvent) {
console.log('webview load error', JSON.stringify(event.detail));
},
callback(id : number, res : any | null, error : string) {
this.webviewContext!.evalJS(`onPostMessageFromUniXWebView(${id},${JSON.stringify(res)},${JSON.stringify(error)})`)
}
}
}
</script>
+63
View File
@@ -0,0 +1,63 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
exports.default = [
(0, uni_cli_shared_1.defineUniMainJsPlugin)((opts) => {
return {
name: 'uni:automator',
enforce: 'pre',
configResolved() {
if (!process.env.UNI_AUTOMATOR_WS_ENDPOINT) {
return;
}
const pkg = JSON.parse(fs_extra_1.default.readFileSync(path_1.default.resolve(__dirname, '../package.json'), 'utf8'));
const automatorJson = JSON.stringify({
version: pkg.version,
wsEndpoint: process.env.UNI_AUTOMATOR_WS_ENDPOINT,
});
fs_extra_1.default.outputFileSync(path_1.default.resolve(process.env.UNI_OUTPUT_DIR, '../.automator/' + (0, uni_cli_shared_1.getPlatformDir)() + '/.automator.json'), automatorJson);
},
transform(code, id) {
if (!process.env.UNI_AUTOMATOR_WS_ENDPOINT) {
return null;
}
if (opts.filter(id)) {
const platform = process.env.UNI_PLATFORM;
// 仅 app-android
if (platform === 'app' && process.env.UNI_APP_X === 'true') {
// app-webview,不增加 initAutomator
if (process.env.UNI_AUTOMATOR_APP_WEBVIEW === 'true') {
return null;
}
if (process.env.UNI_UTS_PLATFORM === 'app-android') {
const automatorPath = (0, uni_cli_shared_1.normalizePath)((0, uni_cli_shared_1.resolveBuiltIn)(`@dcloudio/uni-app-uts/lib/automator/android/index.uts`));
return {
code:
// 增加个换行,避免最后是注释且无换行
code + `;\nimport { initAutomator } from '${automatorPath}';`,
map: null,
};
}
else if (process.env.UNI_UTS_PLATFORM === 'app-ios') {
const automatorPath = (0, uni_cli_shared_1.normalizePath)((0, uni_cli_shared_1.resolveBuiltIn)(`@dcloudio/uni-app-uts/lib/automator/ios/automator.js`));
return {
code: code + `;\nimport '${automatorPath}';`,
map: null,
};
}
}
const automatorPath = (0, uni_cli_shared_1.normalizePath)((0, uni_cli_shared_1.resolveBuiltIn)(`@dcloudio/uni-${platform === 'app' ? 'app-plus' : platform}/lib/automator.js`));
return {
code: code + `;\nimport '${automatorPath}';`,
map: null,
};
}
},
};
}),
];
+52
View File
@@ -0,0 +1,52 @@
{
"name": "@dcloudio/uni-automator",
"version": "3.0.0-4020420240722001",
"description": "@dcloudio/uni-automator",
"main": "dist/index.js",
"files": [
"dist",
"lib"
],
"sideEffects": false,
"repository": {
"type": "git",
"url": "git+https://github.com/dcloudio/uni-app.git",
"directory": "packages/uni-automator"
},
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/dcloudio/uni-app/issues"
},
"uni-app": {
"name": "uniAutomator",
"apply": [
"app",
"h5",
"mp-weixin"
],
"uvue": true
},
"gitHead": "33e807d66e1fe47e2ee08ad9c59247e37b8884da",
"dependencies": {
"@dcloudio/uni-cli-shared": "3.0.0-4020420240722001",
"address": "^1.1.2",
"cross-env": "^7.0.3",
"debug": "^4.3.3",
"default-gateway": "^6.0.3",
"fs-extra": "^10.0.0",
"jsonc-parser": "^3.2.0",
"licia": "^1.29.0",
"merge": "^2.1.1",
"qrcode-reader": "^1.0.4",
"qrcode-terminal": "^0.12.0",
"ws": "^8.4.2"
},
"devDependencies": {
"@types/debug": "^4.1.7",
"@types/fs-extra": "^9.0.13"
},
"peerDependencies": {
"jest": "27.0.4",
"jest-environment-node": "27.5.1"
}
}