ms-vite-plugin 1.4.51 → 1.4.53
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/build.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var L=Object.create;var D=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var N=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of J(e))!z.call(t,i)&&i!==n&&D(t,i,{get:()=>e[i],enumerable:!(s=x(e,i))||s.enumerable});return t};var q=(t,e,n)=>(n=t!=null?L($(t)):{},N(e||!t||!t.__esModule?D(n,"default",{value:t,enumerable:!0}):n,t));var C=exports&&exports.__createBinding||(Object.create?(function(t,e,n,s){s===void 0&&(s=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,s,i)}):(function(t,e,n,s){s===void 0&&(s=n),t[s]=e[n]})),W=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),O=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(n){var s=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(s[s.length]=i);return s},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var s=t(e),i=0;i<s.length;i++)s[i]!=="default"&&C(n,e,s[i]);return W(n,e),n}})(),E=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildAll=void 0;const A=E(require("archiver")),S=require("child_process"),r=O(require("fs-extra")),M=O(require("os")),o=O(require("path")),K=require("./stopGuardPlugin"),T=E(require("vite-plugin-bundle-obfuscator"));async function G(t,e){const n=(0,A.default)("zip",{zlib:{level:9}}),s=r.createWriteStream(e);return new Promise((i,c)=>{n.directory(t,!1).on("error",a=>c(a)).pipe(s),s.on("close",()=>i()),n.finalize()})}async function B(t,e){const n=[];async function s(i){const c=await r.readdir(i,{withFileTypes:!0});for(const a of c){const f=o.resolve(i,a.name);a.isDirectory()?await s(f):a.isFile()&&(/^main\.(js|ts)$/.test(a.name)||/_thread\.(js|ts)$/.test(a.name))&&n.push(o.relative(e,f))}}return await s(t),n}function R(){const t=[{cmd:o.join(M.homedir(),".KuaiJSDevloper","python","python.exe"),args:["--version"]},{cmd:o.join(M.homedir(),".KuaiJSDevloper","python","bin","python"),args:["--version"]},{cmd:"python",args:["--version"]},{cmd:"python3",args:["--version"]},{cmd:"python3.14",args:["--version"]}];for(const e of t)try{const n=(0,S.spawnSync)(e.cmd,e.args,{encoding:"utf8"}),s=(n.stdout||n.stderr||"").trim();if(s&&/Python\s+3\.14(\.\d+)?/i.test(s))return{ok:!0,path:e.cmd,version:s}}catch{}return{ok:!1}}async function H(t){async function e(n){const s=await r.readdir(n,{withFileTypes:!0});for(const i of s){const c=o.join(n,i.name);if(i.isDirectory())if(i.name==="__pycache__"){const a=await r.readdir(c,{withFileTypes:!0});for(const f of a){const _=o.join(c,f.name);if(f.isFile()&&f.name.endsWith(".cpython-314.pyc")){const v=o.dirname(c),m=f.name.replace(/\.cpython-314\.pyc$/,".pyc"),w=o.join(v,m);await r.move(_,w,{overwrite:!0})}}try{await r.remove(c)}catch{}}else await e(c);else if(i.isFile())if(i.name.endsWith(".cpython-314.pyc")){const a=c.replace(".cpython-314.pyc",".pyc");await r.move(c,a,{overwrite:!0})}else i.name.endsWith(".py")&&await r.remove(c)}}await e(t)}const I=["Minify","Weak","Medium","Strong"];async function Q(t){const e=o.join(t,"obfuscator.json");if(!await r.pathExists(e))return{enabled:!0,preset:"Medium"};try{const n=await r.readJSON(e),s=n?.enabled!==!1,i=U(n?.preset);return{enabled:s,preset:i}}catch(n){return console.error("\u274C \u65E0\u6CD5\u8BFB\u53D6 obfuscator.json"),console.error(n instanceof Error?n.message:String(n)),process.exit(1),{enabled:!0,preset:"Medium"}}}function U(t){if(typeof t!="string")return"Medium";const e=I.find(n=>n.toLowerCase()===t.trim().toLowerCase());return e||(console.warn(`\u26A0\uFE0F obfuscator.json \u7684 preset \u65E0\u6548: ${t}\uFF0C\u5DF2\u6539\u7528 Medium`),"Medium")}function V(t){return[o.join(t,"node_modules/@gamely/prometheus-cli/bin/cli.js"),o.join(t,"node_modules/ms-vite-plugin/node_modules/@gamely/prometheus-cli/bin/cli.js"),o.resolve(process.cwd(),"node_modules/@gamely/prometheus-cli/bin/cli.js")].find(n=>r.pathExistsSync(n))}const X=async(t=!0,e)=>{const n=o.join(e,"scripts"),s=await r.pathExists(o.join(n,"main.js"))||await r.pathExists(o.join(n,"main.ts")),i=await r.pathExists(o.join(n,"main.py")),c=await r.pathExists(o.join(n,"main.lua"));if(s){console.log("\u{1F680} \u5F00\u59CB\u6784\u5EFAJavaScript\u9879\u76EE...");const{build:l}=await import("vite"),u=o.join(e,"obfuscator.json");await r.pathExists(u)||(console.error("\u274C \u9519\u8BEF: \u5F53\u524D\u76EE\u5F55\u4E0D\u662F\u6709\u6548\u7684 \u5FEB\u70B9JS \u9879\u76EE"),console.error("\u8BF7\u786E\u4FDD\u76EE\u5F55\u5305\u542B\u4EE5\u4E0B\u6587\u4EF6:"),console.error(" - obfuscator.json"),process.exit(1));const h=await r.readJSON(u),b=o.join(e,t?"dist":"msbundle"),j=await B(n,n);await r.remove(b);for(const d of j)await l({root:e,build:{lib:{entry:{[o.basename(d,o.extname(d))]:`./scripts/${d}`},fileName:()=>d.replace(/\.ts$/,".js"),formats:["iife"],name:"KuaiJS"},outDir:t?"dist/scripts":"msbundle/scripts",emptyOutDir:!1,sourcemap:t,minify:!t,target:"safari15"},plugins:[(0,K.createStopGuardPlugin)(),...t?[]:[h.enabled?(0,T.default)({autoExcludeNodeModules:!0,threadPool:!0,options:{...h,target:"browser",debugProtection:!1,disableConsoleOutput:!1,domainLock:[],selfDefending:!1,renameGlobals:!1,renameProperties:!1}}):[]]]})}if(t)return;const a=o.join(e,"msbundle");if(await r.ensureDir(a),(i||c)&&await r.copy(o.join(e,"scripts"),o.join(a,"scripts")),i){const l=R();if(l.ok){console.log(`\u2705 \u68C0\u6D4B\u5230 ${l.version} (${l.path})`);const u=(0,S.spawnSync)(l.path,["-m","compileall","scripts"],{encoding:"utf8",cwd:a});u.status===0?(console.log("\u2705 \u6210\u529F\u7F16\u8BD1\u6240\u6709 Python \u6587\u4EF6"),await H(o.join(a,"scripts"))):(console.error("\u274C \u7F16\u8BD1 Python \u6587\u4EF6\u5931\u8D25"),console.error(u.stderr),process.exit(1))}else console.warn("\u26A0\uFE0F \u672A\u68C0\u6D4B\u5230 Python 3.14\uFF0C\u8BF7\u786E\u4FDD\u5728\u76EE\u6807\u8FD0\u884C\u73AF\u5883\u5B89\u88C5 Python 3.14")}else if(c){const l=await Q(e);if(!l.enabled)console.log("\u2139\uFE0F \u5DF2\u5173\u95ED Lua \u6DF7\u6DC6\uFF08obfuscator.json enabled=false\uFF09");else{const u=o.join(a,"scripts"),h=[],b=async d=>{const y=await r.readdir(d,{withFileTypes:!0});for(const p of y){const g=o.join(d,p.name);p.isDirectory()?await b(g):p.isFile()&&p.name.endsWith(".lua")&&h.push(g)}};await b(u);const j=V(e);j||(console.error("\u274C \u672A\u627E\u5230 @gamely/prometheus-cli\uFF0C\u65E0\u6CD5\u6DF7\u6DC6 Lua"),process.exit(1));for(const d of h){const y=o.relative(u,d);console.log(`\u{1F6E0}\uFE0F \u6DF7\u6DC6 Lua: ${y} (preset=${l.preset})`);const p=(0,S.spawnSync)(process.execPath,[j,y,"--preset",l.preset],{cwd:u,encoding:"utf8"});p.status!==0&&(console.error("\u274C \u6DF7\u6DC6 Lua \u5931\u8D25:",y),console.error(p.stderr||p.stdout||""),process.exit(1));const g=y.replace(/\.lua$/,".obfuscated.lua"),P=o.join(u,g);await r.pathExists(P)&&(await r.remove(d),await r.move(P,d,{overwrite:!0}))}console.log("\u2705 Lua \u6DF7\u6DC6\u5B8C\u6210")}}await r.copy(o.join(e,"res"),o.join(a,"res")),await r.copy(o.join(e,"ui"),o.join(a,"ui"));for(const l of["logo.jpg","logo.png"]){const u=o.join(e,l);await r.pathExists(u)&&await r.copy(u,o.join(a,l))}const f=o.join(e,"dist"),_=o.join(e,"package.json"),v=o.join(a,"package.json"),m=await r.readJSON(_);delete m.scripts,delete m.devDependencies,delete m.dependencies,await r.writeJSON(v,m,{spaces:2}),await r.emptyDir(f);const w=o.join(f,"ms.zip"),F=o.join(f,"ms.msbundle");await G(a,w),await r.rename(w,F),await r.remove(a)};exports.buildAll=X;
|
package/docs/apilua/node.md
CHANGED
|
@@ -5,13 +5,16 @@
|
|
|
5
5
|
**注意**
|
|
6
6
|
|
|
7
7
|
- 仅支持快点 Agent 模式
|
|
8
|
-
-
|
|
8
|
+
- 用完应释放选择器,两种写法自行选择:
|
|
9
|
+
- **自动**:`local selector <close> = node.createNodeSelector()`,离开当前作用域释放
|
|
10
|
+
- **手动**:`selector:releaseNode()`,找完节点即可释放,不必等点击结束
|
|
11
|
+
- 普通 `local selector = ...` 若既不用 `<close>` 也不调 `releaseNode()`,不会立刻释放
|
|
9
12
|
|
|
10
13
|
**基本流程**
|
|
11
14
|
|
|
12
15
|
```text
|
|
13
16
|
createNodeSelector → 设置筛选条件 → getOneNodeInfo / getNodeInfo
|
|
14
|
-
→ 点击 / 输入 / 设值等 → releaseNode
|
|
17
|
+
→ 点击 / 输入 / 设值等 → 自动 <close> 或手动 releaseNode
|
|
15
18
|
```
|
|
16
19
|
|
|
17
20
|
---
|
|
@@ -30,7 +33,9 @@ function node.createNodeSelector(params) end
|
|
|
30
33
|
| `mode` | `1` | 抓取模式,可选 `1` / `2` / `3`,默认 `1` |
|
|
31
34
|
|
|
32
35
|
```lua
|
|
33
|
-
|
|
36
|
+
-- 自动释放:离开作用域时释放
|
|
37
|
+
local selector <close> = node.createNodeSelector()
|
|
38
|
+
-- 手动释放:用完后自己调 releaseNode
|
|
34
39
|
local shallow = node.createNodeSelector({ maxDepth = 15 })
|
|
35
40
|
local listPage = node.createNodeSelector({ mode = 2 })
|
|
36
41
|
```
|
|
@@ -88,7 +93,7 @@ local listPage = node.createNodeSelector({ mode = 2 })
|
|
|
88
93
|
|
|
89
94
|
| 方法 | 说明 |
|
|
90
95
|
| --- | --- |
|
|
91
|
-
| `releaseNode()` |
|
|
96
|
+
| `releaseNode()` | 立刻释放选择器;与 `<close>` 二选一即可,重复调用安全 |
|
|
92
97
|
| `loadNode(timeout?)` | 重新加载界面节点,默认超时 5000ms |
|
|
93
98
|
| `clearSelector()` | 清除已设置的筛选条件 |
|
|
94
99
|
| `xml(timeout?)` | 获取界面 XML,失败返回 `nil` |
|
|
@@ -102,7 +107,10 @@ local selector = node.createNodeSelector()
|
|
|
102
107
|
local nodes = selector:label("确定"):getNodeInfo(5000)
|
|
103
108
|
local one = selector:getOneNodeInfo(3000)
|
|
104
109
|
local xml = selector:xml()
|
|
105
|
-
selector:releaseNode()
|
|
110
|
+
selector:releaseNode() -- 手动释放
|
|
111
|
+
|
|
112
|
+
-- 或自动释放:
|
|
113
|
+
-- local selector <close> = node.createNodeSelector()
|
|
106
114
|
```
|
|
107
115
|
|
|
108
116
|
### 筛选条件
|
|
@@ -168,7 +176,7 @@ selector
|
|
|
168
176
|
|
|
169
177
|
```lua
|
|
170
178
|
local node = require("node")
|
|
171
|
-
local selector = node.createNodeSelector()
|
|
179
|
+
local selector <close> = node.createNodeSelector()
|
|
172
180
|
local btn = selector:label("确定"):type("XCUIElementTypeButton"):getOneNodeInfo(3000)
|
|
173
181
|
|
|
174
182
|
if btn then
|
|
@@ -199,7 +207,7 @@ end
|
|
|
199
207
|
```lua
|
|
200
208
|
local node = require("node")
|
|
201
209
|
local ime = require("ime")
|
|
202
|
-
local selector = node.createNodeSelector()
|
|
210
|
+
local selector <close> = node.createNodeSelector()
|
|
203
211
|
|
|
204
212
|
local user = selector:type("XCUIElementTypeTextField"):getOneNodeInfo(5000)
|
|
205
213
|
if user then
|
|
@@ -232,7 +240,7 @@ end
|
|
|
232
240
|
|
|
233
241
|
```lua
|
|
234
242
|
local node = require("node")
|
|
235
|
-
local selector = node.createNodeSelector({ mode = 2 })
|
|
243
|
+
local selector <close> = node.createNodeSelector({ mode = 2 })
|
|
236
244
|
local item = selector:label("第 30 项"):getOneNodeInfo(5000)
|
|
237
245
|
if item then
|
|
238
246
|
item:clickCenter()
|
|
@@ -262,3 +270,6 @@ selector:releaseNode()
|
|
|
262
270
|
|
|
263
271
|
**输入叠在旧文字后面**
|
|
264
272
|
节点没有输入方法,请先 `ime.clearText()` 再 `ime.input()`。
|
|
273
|
+
|
|
274
|
+
**要不要释放**
|
|
275
|
+
要。用 `<close>` 自动释放,或用完调 `releaseNode()`,两种都行。
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
├─ .npmrc ← npm 配置文件
|
|
38
38
|
├─ .prettierignore ← 代码格式化忽略文件(仅js项目)
|
|
39
39
|
├─ .prettierrc.yaml ← 代码格式化配置(需安装 Prettier 插件,仅js项目)
|
|
40
|
-
├─ obfuscator.json ← 代码混淆配置(javascript-obfuscator
|
|
40
|
+
├─ obfuscator.json ← 代码混淆配置(JS:javascript-obfuscator;Lua:Prometheus,可开关和选档位)
|
|
41
41
|
├─ package.json ← 项目依赖配置文件
|
|
42
42
|
└─ tsconfig.json ← TypeScript 配置文件(用于js提示和网页提示)
|
|
43
43
|
```
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
- 打开主脚本 `main.js | main.py | main.lua`,右键编辑器,选择 `快点JS` -> `打包应用`
|
|
11
11
|
- 输入在开发者后台->网络验证管理->软件列表 中获取的 `AppId` 字段
|
|
12
|
+
- JS / Lua 项目可编辑根目录 `obfuscator.json` 决定打包时是否混淆、用哪档强度;Python 打包编译为 `.pyc`,没有该混淆配置
|
|
12
13
|
- 注意:上传到快点JS热更新服务后,可通过开发者后台->网络验证管理->软件列表的软件编号进行分发
|
|
13
14
|
- 注意:快点JS上可通过软件面板,输入软件编号进行搜索加载应用
|
|
14
15
|
|