@gkd-kit/inspect 0.0.1719554981776 → 0.0.1719809477737

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.
Files changed (63) hide show
  1. package/dist/assets/{ActionCard.vue_vue_type_script_setup_true_lang-osiRFbW-.js → ActionCard.vue_vue_type_script_setup_true_lang-DgjceEKQ.js} +2 -2
  2. package/dist/assets/{ActionCard.vue_vue_type_script_setup_true_lang-osiRFbW-.js.map → ActionCard.vue_vue_type_script_setup_true_lang-DgjceEKQ.js.map} +1 -1
  3. package/dist/assets/DevicePage-BCFULpTW.js +49 -0
  4. package/dist/assets/DevicePage-BCFULpTW.js.map +1 -0
  5. package/dist/assets/{HomePage-e_VAOXhM.js → HomePage-BOJ7AWRK.js} +11 -11
  6. package/dist/assets/{HomePage-e_VAOXhM.js.map → HomePage-BOJ7AWRK.js.map} +1 -1
  7. package/dist/assets/ImportPage-ECg81H0f.js +2 -0
  8. package/dist/assets/{ImportPage-CHjeYLZq.js.map → ImportPage-ECg81H0f.js.map} +1 -1
  9. package/dist/assets/PreviewSharePage-DsMC2Kvy.js +2 -0
  10. package/dist/assets/{PreviewSharePage-BhIamd8L.js.map → PreviewSharePage-DsMC2Kvy.js.map} +1 -1
  11. package/dist/assets/SnapshotPage-7pjh0kaY.js +276 -0
  12. package/dist/assets/SnapshotPage-7pjh0kaY.js.map +1 -0
  13. package/dist/assets/TrackGraph-B7kpqlUB.js +670 -0
  14. package/dist/assets/TrackGraph-B7kpqlUB.js.map +1 -0
  15. package/dist/assets/{_404Page-CZ0CByXf.js → _404Page-CgpMnAhm.js} +2 -2
  16. package/dist/assets/{_404Page-CZ0CByXf.js.map → _404Page-CgpMnAhm.js.map} +1 -1
  17. package/dist/assets/dayjs.min-BqNkeEPL.js +362 -0
  18. package/dist/assets/{dayjs.min-uKVeuXWf.js.map → dayjs.min-BqNkeEPL.js.map} +1 -1
  19. package/dist/assets/error-FVVi9B_k.js +2 -0
  20. package/dist/assets/error-FVVi9B_k.js.map +1 -0
  21. package/dist/assets/{export-C0OLZkuw.js → export-DGrWqYFo.js} +3 -3
  22. package/dist/assets/export-DGrWqYFo.js.map +1 -0
  23. package/dist/assets/fetch-C_hNy3_z.js +332 -0
  24. package/dist/assets/fetch-C_hNy3_z.js.map +1 -0
  25. package/dist/assets/{import-DideFhmR.js → import-AT6hHH71.js} +2 -2
  26. package/dist/assets/{import-DideFhmR.js.map → import-AT6hHH71.js.map} +1 -1
  27. package/dist/assets/index-CN4MFbvb.js +579 -0
  28. package/dist/assets/index-CN4MFbvb.js.map +1 -0
  29. package/dist/assets/index-Dt1fnF8L.js +2 -0
  30. package/dist/assets/index-Dt1fnF8L.js.map +1 -0
  31. package/dist/assets/index-JWFVa-I-.js +2 -0
  32. package/dist/assets/index-JWFVa-I-.js.map +1 -0
  33. package/dist/assets/index-bjp6bkMr.css +1 -0
  34. package/dist/assets/{index-Xf3Ut-IQ.js → index-cauuWky0.js} +16 -16
  35. package/dist/assets/index-cauuWky0.js.map +1 -0
  36. package/dist/assets/polyfills-B0jv7P3V.js +1 -0
  37. package/dist/assets/{table-CA4K56iX.js → table-D46ImQL9.js} +13 -13
  38. package/dist/assets/{table-CA4K56iX.js.map → table-D46ImQL9.js.map} +1 -1
  39. package/dist/index.html +3 -3
  40. package/package.json +24 -24
  41. package/dist/assets/DevicePage-Cv3SCQIP.js +0 -49
  42. package/dist/assets/DevicePage-Cv3SCQIP.js.map +0 -1
  43. package/dist/assets/ImportPage-CHjeYLZq.js +0 -2
  44. package/dist/assets/PreviewSharePage-BhIamd8L.js +0 -2
  45. package/dist/assets/SnapshotPage-CO6Z0AlC.js +0 -272
  46. package/dist/assets/SnapshotPage-CO6Z0AlC.js.map +0 -1
  47. package/dist/assets/TrackGraph-CEp76OOj.js +0 -670
  48. package/dist/assets/TrackGraph-CEp76OOj.js.map +0 -1
  49. package/dist/assets/dayjs.min-uKVeuXWf.js +0 -362
  50. package/dist/assets/export-C0OLZkuw.js.map +0 -1
  51. package/dist/assets/fetch-CpTiefX8.js +0 -332
  52. package/dist/assets/fetch-CpTiefX8.js.map +0 -1
  53. package/dist/assets/index-BK1Q2G8Y.js +0 -2
  54. package/dist/assets/index-BK1Q2G8Y.js.map +0 -1
  55. package/dist/assets/index-DEdjUr5q.js +0 -585
  56. package/dist/assets/index-DEdjUr5q.js.map +0 -1
  57. package/dist/assets/index-RwQljgyW.js +0 -2
  58. package/dist/assets/index-RwQljgyW.js.map +0 -1
  59. package/dist/assets/index-TfJ1MK62.css +0 -1
  60. package/dist/assets/index-Xf3Ut-IQ.js.map +0 -1
  61. package/dist/assets/polyfills-Bzj3sCUp.js +0 -1
  62. package/dist/assets/selector-BAtGYIJN.js +0 -6
  63. package/dist/assets/selector-BAtGYIJN.js.map +0 -1
package/dist/index.html CHANGED
@@ -1,7 +1,7 @@
1
1
  <!doctype html>
2
2
  <html lang="zh">
3
3
  <head>
4
- <script type="module" crossorigin src="https://registry.npmmirror.com/@gkd-kit/inspect/0.0.1719554981776/files/dist/assets/polyfills-Bzj3sCUp.js"></script>
4
+ <script type="module" crossorigin src="https://registry.npmmirror.com/@gkd-kit/inspect/0.0.1719809477737/files/dist/assets/polyfills-B0jv7P3V.js"></script>
5
5
 
6
6
  <meta charset="UTF-8" />
7
7
  <link
@@ -12,8 +12,8 @@
12
12
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
13
13
  <meta name="referrer" content="no-referrer" />
14
14
  <title>GKD</title>
15
- <script type="module" crossorigin src="https://registry.npmmirror.com/@gkd-kit/inspect/0.0.1719554981776/files/dist/assets/index-DEdjUr5q.js"></script>
16
- <link rel="stylesheet" crossorigin href="https://registry.npmmirror.com/@gkd-kit/inspect/0.0.1719554981776/files/dist/assets/index-TfJ1MK62.css">
15
+ <script type="module" crossorigin src="https://registry.npmmirror.com/@gkd-kit/inspect/0.0.1719809477737/files/dist/assets/index-CN4MFbvb.js"></script>
16
+ <link rel="stylesheet" crossorigin href="https://registry.npmmirror.com/@gkd-kit/inspect/0.0.1719809477737/files/dist/assets/index-bjp6bkMr.css">
17
17
  </head>
18
18
 
19
19
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gkd-kit/inspect",
3
- "version": "0.0.1719554981776",
3
+ "version": "0.0.1719809477737",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -11,56 +11,56 @@
11
11
  ],
12
12
  "dependencies": {
13
13
  "@antv/g6": "4.8.24",
14
- "@gkd-kit/selector": "0.0.25",
14
+ "@gkd-kit/selector": "0.2.1",
15
15
  "@gkd-kit/wasm_matches": "0.0.1",
16
16
  "@rushstack/eslint-patch": "1.10.2",
17
17
  "@tsconfig/node20": "20.1.4",
18
18
  "@types/file-saver": "2.0.7",
19
19
  "@types/fs-extra": "11.0.4",
20
- "@types/node": "20.12.7",
20
+ "@types/node": "20.12.14",
21
21
  "@types/qrcode": "1.5.5",
22
- "@vitejs/plugin-legacy": "5.3.2",
22
+ "@vitejs/plugin-legacy": "5.4.1",
23
23
  "@vitejs/plugin-vue": "5.0.4",
24
- "@vitejs/plugin-vue-jsx": "3.1.0",
24
+ "@vitejs/plugin-vue-jsx": "4.0.0",
25
25
  "@vue/eslint-config-prettier": "9.0.0",
26
26
  "@vue/eslint-config-typescript": "13.0.0",
27
27
  "@vue/tsconfig": "0.5.1",
28
- "@vueuse/components": "10.9.0",
29
- "@vueuse/core": "10.9.0",
28
+ "@vueuse/components": "10.11.0",
29
+ "@vueuse/core": "10.11.0",
30
30
  "browser-fs-access": "0.35.0",
31
31
  "compressorjs": "1.2.1",
32
32
  "cross-env": "7.0.3",
33
- "dayjs": "1.11.10",
33
+ "dayjs": "1.11.11",
34
34
  "eslint": "8.57.0",
35
35
  "eslint-define-config": "2.1.0",
36
- "eslint-plugin-unused-imports": "3.1.0",
36
+ "eslint-plugin-unused-imports": "3.2.0",
37
37
  "eslint-plugin-vue": "9.25.0",
38
38
  "file-saver": "2.0.5",
39
39
  "fs-extra": "11.2.0",
40
40
  "json5": "2.2.3",
41
41
  "jszip": "3.10.1",
42
- "lint-staged": "15.2.2",
42
+ "lint-staged": "15.2.7",
43
43
  "localforage": "1.10.0",
44
- "naive-ui": "2.38.1",
44
+ "naive-ui": "2.38.2",
45
45
  "normalize.css": "8.0.1",
46
46
  "p-limit": "5.0.0",
47
47
  "pinia": "2.1.7",
48
- "prettier": "3.2.5",
48
+ "prettier": "3.3.2",
49
49
  "qrcode": "1.5.3",
50
- "sass": "1.75.0",
51
- "simple-git": "3.24.0",
50
+ "sass": "1.77.6",
51
+ "simple-git": "3.25.0",
52
52
  "simple-git-hooks": "2.11.1",
53
- "tsx": "4.7.2",
54
- "typescript": "5.4.5",
53
+ "tsx": "4.16.0",
54
+ "typescript": "5.5.2",
55
55
  "universal-base64url": "1.1.0",
56
- "unocss": "0.59.3",
57
- "user-attachments": "1.1.1",
58
- "vite": "5.2.9",
59
- "vite-plugin-monkey": "3.5.2",
60
- "vue": "3.4.23",
61
- "vue-i18n": "9.12.1",
62
- "vue-router": "4.3.0",
63
- "vue-tsc": "2.0.13"
56
+ "unocss": "0.61.0",
57
+ "user-attachments": "1.1.2",
58
+ "vite": "5.3.2",
59
+ "vite-plugin-monkey": "4.0.4",
60
+ "vue": "3.4.31",
61
+ "vue-i18n": "9.13.1",
62
+ "vue-router": "4.4.0",
63
+ "vue-tsc": "2.0.24"
64
64
  },
65
65
  "volta": {
66
66
  "node": "20.12.2"
@@ -1,49 +0,0 @@
1
- import{A as y,h as ne,Q as ie,V as le,B as re,R as G,T as q,C as J,D as n,E as l,F as a,K as v,G as K,H as ce,W as T,aH as N,L as w,M as k,aS as ue,I as $,J as H,_ as pe,aT as de,Y as he,O as fe,P as ve}from"./index-DEdjUr5q.js";import{h as me,m as c,a as ge}from"./fetch-CpTiefX8.js";import{e as W,c as we}from"./selector-BAtGYIJN.js";import{u as ke,a as ye,N as Se}from"./table-CA4K56iX.js";import{u as R,t as be,b as j,N as Ce}from"./dayjs.min-uKVeuXWf.js";import{a as xe,b as _e}from"./index-BK1Q2G8Y.js";import{u as Ne,N as F,a as Re,l as Ie}from"./index-Xf3Ut-IQ.js";import{p as Pe}from"./index-RwQljgyW.js";const Ve=M=>{const S=y(M),b=async(s,h={})=>{var I;if(!S.value)throw new Error("origin must exist");const x=new URL("/api/"+s,S.value);Object.entries(h.query||{}).forEach(([g,P])=>{P!==void 0&&x.searchParams.set(g,String(P))});const u=await me(x,h.init).catch(g=>{throw c.error("网络错误:/"+s),g});if(!u.ok)throw c.error("接口错误:/"+s+":"+u.status),u;if((I=u.headers.get("Content-Type"))!=null&&I.includes("application/json")){const g=await u.clone().json();if(g.__error)throw c.error(g.message),u}return u},o=async(...s)=>await(await b(...s)).json(),C=async(...s)=>await(await b(...s)).blob(),d=async(...s)=>await(await b(...s)).arrayBuffer();return{origin:S,api:{device:async()=>o("device"),snapshot:async s=>o("snapshot",{query:s}),screenshot:async s=>d("screenshot",{query:s}),captureSnapshot:async()=>o("captureSnapshot"),snapshots:async()=>o("snapshots"),updateSubsApps:async s=>C("updateSubsApps",{init:{method:"POST",body:JSON.stringify(s),headers:{"Content-Type":"application/json"}}}),updateSubscription:async s=>C("updateSubscription",{init:{method:"POST",body:JSON.stringify({...s,id:-1,name:"内存订阅",version:0}),headers:{"Content-Type":"application/json"}}}),execSelector:async s=>o("execSelector",{init:{method:"POST",body:JSON.stringify({...s,value:s.selector}),headers:{"Content-Type":"application/json"}}})}}},Te=v("div",{"h-15px":""},null,-1),Be=v("a",{href:"https://gkd.li/api/interfaces/RawCommonProps.html#quickfind",target:"_blank",rel:"noopener noreferrer"}," 查找说明 ",-1),ze=v("div",{"h-10px":""},null,-1),Ue={flex:"","gap-10px":"","flex-items-center":""},Ae=v("a",{href:"https://gkd.li/api/interfaces/RawRuleProps#action",target:"_blank",rel:"noopener noreferrer"}," 操作说明 ",-1),Le={flex:"","flex-col":"","p-10px":"","gap-10px":"","h-full":""},Oe=v("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},[v("path",{d:"M16.612 2.214a1.01 1.01 0 0 0-1.242 0L1 13.419l1.243 1.572L4 13.621V26a2.004 2.004 0 0 0 2 2h20a2.004 2.004 0 0 0 2-2V13.63L29.757 15L31 13.428zM18 26h-4v-8h4zm2 0v-8a2.002 2.002 0 0 0-2-2h-4a2.002 2.002 0 0 0-2 2v8H6V12.062l10-7.79l10 7.8V26z",fill:"currentColor"})],-1),je={class:"h-full",flex:"","flex-items-center":""},$e=ne({__name:"DevicePage",setup(M){const S=ce(),b=xe("新设备"),{api:o,origin:C}=Ve(),d=_e("device_link",""),m=y(),s=R(async()=>{d.value&&(C.value=W(()=>new URL(d.value.trim()),()=>"非法设备地址").origin,d.value=C.value,m.value=await o.device())});ie(async()=>{await ge(500),le(d.value)&&s.invoke()});const h=y([]);re(async()=>{if(!m.value)return;b.value="已连接 "+m.value.manufacturer,m.value.release;const e=await o.snapshots();e.sort((t,f)=>f.id-t.id),h.value=e,V.value=""});const x=R(async()=>{const e=await o.captureSnapshot(),t=await o.screenshot({id:e.id});await T.setItem(e.id,e),await N.setItem(e.id,t),c.success("保存快照成功");const f=await o.snapshots();f.sort((i,O)=>O.id-i.id),h.value=f}),u=R(async()=>{const e=(await o.snapshots()).map(p=>p.id),t=new Set((await N.keys()).map(p=>parseInt(p))),f=e.filter(p=>!t.has(p));if(f.length==0){c.success("没有新记录可导入");return}let i=0;const O=Pe(3);await Promise.all(f.map(p=>O(async()=>{const[E,oe]=await Promise.all([o.snapshot({id:p}),o.screenshot({id:p})]);E.nodes&&(await Promise.all([T.setItem(p,E),N.setItem(p,oe)]),i++)}))),c.success(`导入${i}条新记录`)}),{activityIdCol:I,appIdCol:g,appNameCol:P,ctimeCol:B,appVersionCodeCol:Q,appVersionNameCol:X,resetColWidth:Y}=ke(),Z=e=>{e.columnKey==B.key&&(B.sortOrder=e.order)},D=be(async e=>{if(await T.hasItem(e.id)||await T.setItem(e.id,await o.snapshot({id:e.id})),!await N.hasItem(e.id)){const t=await o.screenshot({id:e.id});await N.setItem(e.id,t)}window.open(S.resolve({name:"snapshot",params:{snapshotId:e.id}}).href)},e=>e.id),ee=[B,P,g,Q,X,I,{key:"actions",title:"操作",fixed:"right",width:"120px",render(e){return n(j,{size:"small"},{default:()=>[n(w,{size:"small",loading:D.loading[e.id],onClick:()=>D.invoke(e)},{default:()=>[k("查看")]})]})}}],_=G({page:1,pageSize:50,showSizePicker:!0,pageSizes:[50,100],onChange:e=>{_.page=e},onUpdatePageSize:e=>{_.pageSize=e,_.page=1}});q(_,Y);const z=y(!1),V=y(""),U=R(async()=>{const e=W(()=>Ie.parse(V.value.trim()));if(e){if(e.categories||e.globalGroups||e.apps)await o.updateSubscription(e);else if(typeof e.id=="string")await o.updateSubscription({apps:[e]});else if(Array.isArray(e)&&typeof e[0].id=="string")await o.updateSubscription({apps:e});else if(typeof e.key=="number")await o.updateSubscription({globalGroups:[e]});else if(Array.isArray(e)&&typeof e[0].key=="number")await o.updateSubscription({globalGroups:e});else{c.error("无法识别的订阅文本");return}c.success("修改成功")}}),A=y(!1),ae=[{label:"仅查询",value:void 0},{value:"click",label:"click"},{value:"clickNode",label:"clickNode"},{value:"clickCenter",label:"clickCenter"},{value:"back",label:"back"},{value:"longClick",label:"longClick"},{value:"longClickNode",label:"longClickNode"},{value:"longClickCenter",label:"longClickCenter"}],r=G({selector:"",selectorValid:!1,action:"click",quickFind:!1}),te=Ne(()=>{r.selectorValid=we(r.selector)},500);q(()=>r.selector.trim(),te);const L=R(async()=>{const e=await o.execSelector({...r});if(e.message){c.success("操作成功:"+e.message);return}e.action?c.success((e.result?"操作成功:":"操作失败")+e.action):!e.action&&e.result&&c.success("查询成功")}),se=`
2
- 请输入订阅文本(JSON5语法):
3
- 示例1-更新单个应用的规则:
4
- {
5
- id: 'appId',
6
- groups: []
7
- }
8
-
9
- 示例2-更新多个应用的规则:
10
- [
11
- {
12
- id: 'appId1',
13
- groups: []
14
- },
15
- {
16
- id: 'appId2',
17
- groups: []
18
- }
19
- ]
20
-
21
- 示例3-更新全局规则(1.7.0):
22
- {
23
- name: '全局规则-1',
24
- key: 0,
25
- rules: []
26
- }
27
-
28
- 示例3-更新多个全局规则(1.7.0):
29
- [
30
- {
31
- name: '全局规则-1',
32
- key: 0,
33
- rules: []
34
- },
35
- {
36
- name: '全局规则-2',
37
- key: 1,
38
- rules: []
39
- }
40
- ]
41
-
42
- 示例4-更新整个订阅(1.7.0):
43
- {
44
- apps: [],
45
- globalGroups: [],
46
- categories: [],
47
- }
48
- `.trim();return(e,t)=>{const f=ue("RouterLink");return $(),J(K,null,[n(a(H),{show:z.value,"onUpdate:show":t[1]||(t[1]=i=>z.value=i),preset:"dialog",style:{width:"800px"},title:"修改内存订阅","positive-text":"确认",positiveButtonProps:{loading:a(U).loading,onClick(){a(U).invoke()}}},{default:l(()=>[n(a(F),{value:V.value,"onUpdate:value":t[0]||(t[0]=i=>V.value=i),disabled:a(U).loading,type:"textarea",class:"gkd_code",autosize:{minRows:20,maxRows:25},placeholder:a(se)},null,8,["value","disabled","placeholder"])]),_:1},8,["show","positiveButtonProps"]),n(a(H),{show:A.value,"onUpdate:show":t[5]||(t[5]=i=>A.value=i),preset:"dialog",style:{width:"800px"},title:"执行选择器","positive-text":"确认",positiveButtonProps:{loading:a(L).loading,disabled:!a(r).selectorValid,onClick(){a(L).invoke()}}},{default:l(()=>[n(a(F),{value:a(r).selector,"onUpdate:value":t[2]||(t[2]=i=>a(r).selector=i),disabled:a(L).loading,type:"textarea",class:"gkd_code",autosize:{minRows:4,maxRows:10},placeholder:"请输入合法的选择器"},null,8,["value","disabled"]),Te,n(a(j),null,{default:l(()=>[n(a(pe),{checked:a(r).quickFind,"onUpdate:checked":t[3]||(t[3]=i=>a(r).quickFind=i)},{default:l(()=>[k(" 快速查找 ")]),_:1},8,["checked"]),Be]),_:1}),ze,v("div",Ue,[n(a(ye),{value:a(r).action,"onUpdate:value":t[4]||(t[4]=i=>a(r).action=i),options:ae,class:"w-150px"},null,8,["value"]),Ae])]),_:1},8,["show","positiveButtonProps"]),v("div",Le,[n(a(j),null,{default:l(()=>[n(f,{to:"/"},{default:l(()=>[n(a(w),null,{icon:l(()=>[n(a(Re),null,{default:l(()=>[Oe]),_:1})]),_:1})]),_:1}),n(a(Ce),null,{default:l(()=>[n(a(F),{value:a(d),"onUpdate:value":t[6]||(t[6]=i=>de(d)?d.value=i:null),placeholder:"请输入设备地址",style:{minWidth:"250px"},onKeyup:he(a(s).invoke,["enter"])},null,8,["value","onKeyup"]),n(a(w),{onClick:a(s).invoke,loading:a(s).loading},{default:l(()=>[k(" 刷新连接 ")]),_:1},8,["onClick","loading"])]),_:1}),m.value?($(),J(K,{key:0},[v("div",je,fe(`已连接 ${m.value.manufacturer} Android ${m.value.release}`),1),n(a(w),{onClick:a(x).invoke,loading:a(x).loading},{default:l(()=>[k(" 快照 ")]),_:1},8,["onClick","loading"]),n(a(w),{onClick:a(u).invoke,loading:a(u).loading},{default:l(()=>[k(" 下载设备所有快照 ")]),_:1},8,["onClick","loading"]),n(a(w),{onClick:t[7]||(t[7]=i=>z.value=!0)},{default:l(()=>[k(" 修改内存订阅 ")]),_:1}),n(a(w),{onClick:t[8]||(t[8]=i=>A.value=!0)},{default:l(()=>[k(" 执行选择器 ")]),_:1})],64)):ve("",!0)]),_:1}),n(a(Se),{striped:"",flexHeight:"",data:h.value,columns:ee,pagination:a(_),"onUpdate:sorter":Z,size:"small",class:"flex-1",scrollX:1200},null,8,["data","pagination"])])],64)}}});export{$e as default};
49
- //# sourceMappingURL=DevicePage-Cv3SCQIP.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DevicePage-Cv3SCQIP.js","sources":["../../src/utils/api.ts","../../src/views/DevicePage.vue"],"sourcesContent":["import { shallowRef } from 'vue';\nimport { message } from './discrete';\nimport { enhanceFetch } from './fetch';\nimport type { Device, RpcError, Snapshot } from './types';\n\ntype RpcOptions = {\n query?: Record<string, unknown>;\n init?: RequestInit;\n};\n\nexport const useDeviceApi = (initOrigin?: string) => {\n const origin = shallowRef(initOrigin);\n const rpc = async (rpcName: string, options: RpcOptions = {}) => {\n if (!origin.value) {\n throw new Error(`origin must exist`);\n }\n const u = new URL(`/api/` + rpcName, origin.value);\n Object.entries(options.query || {}).forEach(([key, value]) => {\n if (value === undefined) return;\n u.searchParams.set(key, String(value));\n });\n const response = await enhanceFetch(u, options.init).catch((e) => {\n message.error(`网络错误:/` + rpcName);\n throw e;\n });\n if (!response.ok) {\n message.error(`接口错误:/` + rpcName + `:` + response.status);\n throw response;\n }\n if (response.headers.get(`Content-Type`)?.includes(`application/json`)) {\n const error = (await response.clone().json()) as RpcError;\n if (error.__error) {\n message.error(error.message);\n throw response;\n }\n }\n return response;\n };\n const jsonRpc = async <T>(...args: Parameters<typeof rpc>) => {\n const response = await rpc(...args);\n return (await response.json()) as T;\n };\n const blobRpc = async (...args: Parameters<typeof rpc>) => {\n const response = await rpc(...args);\n return await response.blob();\n };\n const arrayBufferRpc = async (...args: Parameters<typeof rpc>) => {\n const response = await rpc(...args);\n return await response.arrayBuffer();\n };\n const api = {\n device: async () => jsonRpc<Device>(`device`),\n snapshot: async (query?: { id?: string | number }) => {\n return jsonRpc<Snapshot>(`snapshot`, { query });\n },\n screenshot: async (query: { id: string | number }) => {\n return arrayBufferRpc(`screenshot`, { query });\n },\n captureSnapshot: async () => {\n return jsonRpc<Snapshot>(`captureSnapshot`);\n },\n snapshots: async () => {\n return jsonRpc<Snapshot[]>(`snapshots`);\n },\n updateSubsApps: async (data: unknown[]) => {\n return blobRpc(`updateSubsApps`, {\n init: {\n method: 'POST',\n body: JSON.stringify(data),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n });\n },\n updateSubscription: async (data: any) => {\n return blobRpc(`updateSubscription`, {\n init: {\n method: 'POST',\n body: JSON.stringify({\n ...data,\n id: -1,\n name: '内存订阅',\n version: 0,\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n });\n },\n execSelector: async (data: {\n selector: string;\n action?: string;\n quickFind?: boolean;\n }) => {\n return jsonRpc<{ message: string; action: string; result: boolean }>(\n `execSelector`,\n {\n init: {\n method: 'POST',\n // value 是旧版本的选择器\n body: JSON.stringify({ ...data, value: data.selector }),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n },\n );\n },\n };\n return { origin, api };\n};\n","<script setup lang=\"tsx\">\nimport { useDeviceApi } from '@/utils/api';\nimport { toValidURL } from '@/utils/check';\nimport { message } from '@/utils/discrete';\nimport { errorWrap } from '@/utils/error';\nimport { delay } from '@/utils/others';\nimport { checkSelector } from '@/utils/selector';\nimport { screenshotStorage, snapshotStorage } from '@/utils/storage';\nimport { useSnapshotColumns } from '@/utils/table';\nimport { useBatchTask, useTask } from '@/utils/task';\nimport type { Device, Snapshot } from '@/utils/types';\nimport { useDebounceFn, useStorage, useTitle } from '@vueuse/core';\nimport JSON5 from 'json5';\nimport {\n NButton,\n NCheckbox,\n NDataTable,\n NIcon,\n NInput,\n NInputGroup,\n NModal,\n NSelect,\n NSpace,\n type DataTableColumns,\n type PaginationProps,\n} from 'naive-ui';\nimport type { SortState } from 'naive-ui/es/data-table/src/interface';\nimport pLimit from 'p-limit';\nimport {\n onMounted,\n shallowReactive,\n shallowRef,\n watch,\n watchEffect,\n} from 'vue';\nimport { useRouter } from 'vue-router';\n\nconst router = useRouter();\nconst title = useTitle(`新设备`);\nconst { api, origin } = useDeviceApi();\nconst link = useStorage(`device_link`, ``);\nconst device = shallowRef<Device>();\nconst connect = useTask(async () => {\n if (!link.value) return;\n origin.value = errorWrap(\n () => new URL(link.value.trim()),\n () => `非法设备地址`,\n ).origin;\n link.value = origin.value;\n device.value = await api.device();\n});\nonMounted(async () => {\n await delay(500);\n if (toValidURL(link.value)) {\n connect.invoke();\n }\n});\n\nconst snapshots = shallowRef<Snapshot[]>([]);\nwatchEffect(async () => {\n if (!device.value) return;\n title.value = `已连接 ` + device.value.manufacturer;\n device.value.release;\n const result = await api.snapshots();\n result.sort((a, b) => b.id - a.id);\n snapshots.value = result;\n subsText.value = '';\n});\n\nconst captureSnapshot = useTask(async () => {\n const snapshot = await api.captureSnapshot();\n const screenshot = await api.screenshot({ id: snapshot.id });\n await snapshotStorage.setItem(snapshot.id, snapshot);\n await screenshotStorage.setItem(snapshot.id, screenshot);\n message.success(`保存快照成功`);\n const result = await api.snapshots();\n result.sort((a, b) => b.id - a.id);\n snapshots.value = result;\n});\nconst downloadAllSnapshot = useTask(async () => {\n const snapshotIds = (await api.snapshots()).map((s) => s.id);\n const existSnapshotIds = new Set(\n (await screenshotStorage.keys()).map((s) => parseInt(s)),\n );\n const unimportSnapshotIds = snapshotIds.filter(\n (k) => !existSnapshotIds.has(k),\n );\n if (unimportSnapshotIds.length == 0) {\n message.success(`没有新记录可导入`);\n return;\n }\n let r = 0;\n const limit = pLimit(3);\n await Promise.all(\n unimportSnapshotIds.map((snapshotId) =>\n limit(async () => {\n const [newSnapshot, newScreenshot] = await Promise.all([\n api.snapshot({ id: snapshotId }),\n api.screenshot({ id: snapshotId }),\n ] as const);\n if (!newSnapshot.nodes) return;\n await Promise.all([\n snapshotStorage.setItem(snapshotId, newSnapshot),\n screenshotStorage.setItem(snapshotId, newScreenshot),\n ]);\n r++;\n }),\n ),\n );\n message.success(`导入${r}条新记录`);\n});\n\nconst {\n activityIdCol,\n appIdCol,\n appNameCol,\n ctimeCol,\n appVersionCodeCol,\n appVersionNameCol,\n resetColWidth,\n} = useSnapshotColumns();\nconst handleSorterChange = (sorter: SortState) => {\n if (sorter.columnKey == ctimeCol.key) {\n ctimeCol.sortOrder = sorter.order;\n }\n};\nconst previewSnapshot = useBatchTask(\n async (row: Snapshot) => {\n if (!(await snapshotStorage.hasItem(row.id))) {\n await snapshotStorage.setItem(row.id, await api.snapshot({ id: row.id }));\n }\n if (!(await screenshotStorage.hasItem(row.id))) {\n const bf = await api.screenshot({ id: row.id });\n await screenshotStorage.setItem(row.id, bf);\n }\n window.open(\n router.resolve({\n name: 'snapshot',\n params: { snapshotId: row.id },\n }).href,\n );\n },\n (r) => r.id,\n);\n\nconst columns: DataTableColumns<Snapshot> = [\n ctimeCol,\n appNameCol,\n appIdCol,\n appVersionCodeCol,\n appVersionNameCol,\n activityIdCol,\n {\n key: `actions`,\n title: `操作`,\n fixed: 'right',\n width: `120px`,\n render(row) {\n return (\n <NSpace size=\"small\">\n <NButton\n size=\"small\"\n loading={previewSnapshot.loading[row.id]}\n onClick={() => previewSnapshot.invoke(row)}\n >\n 查看\n </NButton>\n </NSpace>\n );\n },\n },\n];\n\nconst pagination = shallowReactive<PaginationProps>({\n page: 1,\n pageSize: 50,\n showSizePicker: true,\n pageSizes: [50, 100],\n onChange: (page: number) => {\n pagination.page = page;\n },\n onUpdatePageSize: (pageSize: number) => {\n pagination.pageSize = pageSize;\n pagination.page = 1;\n },\n});\nwatch(pagination, resetColWidth);\n\nconst showSubsModel = shallowRef(false);\nconst subsText = shallowRef(``);\nconst updateSubs = useTask(async () => {\n const data = errorWrap(() => JSON5.parse(subsText.value.trim()));\n if (!data) return;\n if (data.categories || data.globalGroups || data.apps) {\n await api.updateSubscription(data);\n } else if (typeof data.id == 'string') {\n await api.updateSubscription({\n apps: [data],\n });\n } else if (Array.isArray(data) && typeof data[0].id == 'string') {\n await api.updateSubscription({\n apps: data,\n });\n } else if (typeof data.key == 'number') {\n await api.updateSubscription({\n globalGroups: [data],\n });\n } else if (Array.isArray(data) && typeof data[0].key == 'number') {\n await api.updateSubscription({\n globalGroups: data,\n });\n } else {\n message.error(`无法识别的订阅文本`);\n return;\n }\n message.success(`修改成功`);\n});\n\nconst showSelectorModel = shallowRef(false);\n\nconst actionOptions: {\n value?: string;\n label: string;\n}[] = [\n {\n label: '仅查询',\n value: undefined,\n },\n {\n value: 'click',\n label: 'click',\n },\n {\n value: 'clickNode',\n label: 'clickNode',\n },\n {\n value: 'clickCenter',\n label: 'clickCenter',\n },\n {\n value: 'back',\n label: 'back',\n },\n {\n value: 'longClick',\n label: 'longClick',\n },\n {\n value: 'longClickNode',\n label: 'longClickNode',\n },\n {\n value: 'longClickCenter',\n label: 'longClickCenter',\n },\n];\nconst clickAction = shallowReactive({\n selector: ``,\n selectorValid: false,\n action: 'click',\n quickFind: false,\n});\nconst checkSelectorValid = useDebounceFn(() => {\n clickAction.selectorValid = checkSelector(clickAction.selector);\n}, 500);\nwatch(() => clickAction.selector.trim(), checkSelectorValid);\nconst execSelector = useTask(async () => {\n const result = await api.execSelector({ ...clickAction });\n if (result.message) {\n message.success(`操作成功:` + result.message);\n return;\n }\n if (result.action) {\n message.success((result.result ? `操作成功:` : `操作失败`) + result.action);\n } else if (!result.action && result.result) {\n message.success(`查询成功`);\n }\n});\n\nconst placeholder = `\n请输入订阅文本(JSON5语法):\n示例1-更新单个应用的规则:\n{\n id: 'appId',\n groups: []\n}\n\n示例2-更新多个应用的规则:\n[\n {\n id: 'appId1',\n groups: []\n },\n {\n id: 'appId2',\n groups: []\n }\n]\n\n示例3-更新全局规则(1.7.0):\n{\n name: '全局规则-1',\n key: 0,\n rules: []\n}\n\n示例3-更新多个全局规则(1.7.0):\n[\n {\n name: '全局规则-1',\n key: 0,\n rules: []\n },\n {\n name: '全局规则-2',\n key: 1,\n rules: []\n }\n]\n\n示例4-更新整个订阅(1.7.0):\n{\n apps: [],\n globalGroups: [],\n categories: [],\n}\n`.trim();\n</script>\n<template>\n <NModal\n v-model:show=\"showSubsModel\"\n preset=\"dialog\"\n style=\"width: 800px\"\n title=\"修改内存订阅\"\n positive-text=\"确认\"\n :positiveButtonProps=\"{\n loading: updateSubs.loading,\n onClick() {\n updateSubs.invoke();\n },\n }\"\n >\n <NInput\n v-model:value=\"subsText\"\n :disabled=\"updateSubs.loading\"\n type=\"textarea\"\n class=\"gkd_code\"\n :autosize=\"{\n minRows: 20,\n maxRows: 25,\n }\"\n :placeholder=\"placeholder\"\n />\n </NModal>\n <NModal\n v-model:show=\"showSelectorModel\"\n preset=\"dialog\"\n style=\"width: 800px\"\n title=\"执行选择器\"\n positive-text=\"确认\"\n :positiveButtonProps=\"{\n loading: execSelector.loading,\n disabled: !clickAction.selectorValid,\n onClick() {\n execSelector.invoke();\n },\n }\"\n >\n <NInput\n v-model:value=\"clickAction.selector\"\n :disabled=\"execSelector.loading\"\n type=\"textarea\"\n class=\"gkd_code\"\n :autosize=\"{\n minRows: 4,\n maxRows: 10,\n }\"\n placeholder=\"请输入合法的选择器\"\n />\n <div h-15px></div>\n <NSpace>\n <NCheckbox v-model:checked=\"clickAction.quickFind\"> 快速查找 </NCheckbox>\n <a\n href=\"https://gkd.li/api/interfaces/RawCommonProps.html#quickfind\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n 查找说明\n </a>\n </NSpace>\n <div h-10px></div>\n <div flex gap-10px flex-items-center>\n <NSelect\n v-model:value=\"clickAction.action\"\n :options=\"actionOptions\"\n class=\"w-150px\"\n />\n <a\n href=\"https://gkd.li/api/interfaces/RawRuleProps#action\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n 操作说明\n </a>\n </div>\n </NModal>\n <div flex flex-col p-10px gap-10px h-full>\n <NSpace>\n <RouterLink to=\"/\">\n <NButton>\n <template #icon>\n <NIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 32 32\"\n >\n <path\n d=\"M16.612 2.214a1.01 1.01 0 0 0-1.242 0L1 13.419l1.243 1.572L4 13.621V26a2.004 2.004 0 0 0 2 2h20a2.004 2.004 0 0 0 2-2V13.63L29.757 15L31 13.428zM18 26h-4v-8h4zm2 0v-8a2.002 2.002 0 0 0-2-2h-4a2.002 2.002 0 0 0-2 2v8H6V12.062l10-7.79l10 7.8V26z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n </NIcon>\n </template>\n </NButton>\n </RouterLink>\n <NInputGroup>\n <NInput\n v-model:value=\"link\"\n placeholder=\"请输入设备地址\"\n :style=\"{ minWidth: `250px` }\"\n @keyup.enter=\"connect.invoke\"\n ></NInput>\n <NButton @click=\"connect.invoke\" :loading=\"connect.loading\">\n 刷新连接\n </NButton>\n </NInputGroup>\n <template v-if=\"device\">\n <div class=\"h-full\" flex flex-items-center>\n {{ `已连接 ${device.manufacturer} Android ${device.release}` }}\n </div>\n <NButton\n @click=\"captureSnapshot.invoke\"\n :loading=\"captureSnapshot.loading\"\n >\n 快照\n </NButton>\n <NButton\n @click=\"downloadAllSnapshot.invoke\"\n :loading=\"downloadAllSnapshot.loading\"\n >\n 下载设备所有快照\n </NButton>\n <NButton @click=\"showSubsModel = true\"> 修改内存订阅 </NButton>\n <NButton @click=\"showSelectorModel = true\"> 执行选择器 </NButton>\n </template>\n </NSpace>\n <NDataTable\n striped\n flexHeight\n :data=\"snapshots\"\n :columns=\"columns\"\n :pagination=\"pagination\"\n @update:sorter=\"handleSorterChange\"\n size=\"small\"\n class=\"flex-1\"\n :scrollX=\"1200\"\n />\n </div>\n</template>\n"],"names":["useDeviceApi","initOrigin","origin","shallowRef","rpc","rpcName","options","u","key","value","response","enhanceFetch","e","message","_a","error","jsonRpc","args","blobRpc","arrayBufferRpc","query","data","router","useRouter","title","useTitle","api","link","useStorage","device","connect","useTask","errorWrap","URL","trim","onMounted","delay","toValidURL","invoke","snapshots","watchEffect","manufacturer","release","result","sort","a","b","id","subsText","captureSnapshot","snapshot","screenshot","snapshotStorage","setItem","screenshotStorage","success","downloadAllSnapshot","snapshotIds","map","s","existSnapshotIds","Set","keys","parseInt","unimportSnapshotIds","filter","k","has","length","r","limit","pLimit","Promise","all","snapshotId","newSnapshot","newScreenshot","nodes","activityIdCol","appIdCol","appNameCol","ctimeCol","appVersionCodeCol","appVersionNameCol","resetColWidth","useSnapshotColumns","handleSorterChange","sorter","columnKey","sortOrder","order","previewSnapshot","useBatchTask","row","hasItem","bf","window","open","resolve","name","params","href","columns","fixed","width","render","_createVNode2","NSpace","default","NButton","loading","onClick","_createTextVNode2","pagination","shallowReactive","page","pageSize","showSizePicker","pageSizes","onChange","onUpdatePageSize","watch","showSubsModel","updateSubs","JSON5","parse","categories","globalGroups","apps","updateSubscription","Array","isArray","showSelectorModel","actionOptions","label","undefined","clickAction","selector","selectorValid","action","quickFind","checkSelectorValid","useDebounceFn","checkSelector","execSelector","placeholder"],"mappings":"smBAUa,MAAAA,GAAgBC,GAAwB,CAC7C,MAAAC,EAASC,EAAWF,CAAU,EAC9BG,EAAM,MAAOC,EAAiBC,EAAsB,CAAA,IAAO,OAC3D,GAAA,CAACJ,EAAO,MACJ,MAAA,IAAI,MAAM,mBAAmB,EAErC,MAAMK,EAAI,IAAI,IAAI,QAAUF,EAASH,EAAO,KAAK,EAC1C,OAAA,QAAQI,EAAQ,OAAS,CAAA,CAAE,EAAE,QAAQ,CAAC,CAACE,EAAKC,CAAK,IAAM,CACxDA,IAAU,QACdF,EAAE,aAAa,IAAIC,EAAK,OAAOC,CAAK,CAAC,CAAA,CACtC,EACK,MAAAC,EAAW,MAAMC,GAAaJ,EAAGD,EAAQ,IAAI,EAAE,MAAOM,GAAM,CACxD,MAAAC,EAAA,MAAM,SAAWR,CAAO,EAC1BO,CAAA,CACP,EACG,GAAA,CAACF,EAAS,GACZ,MAAAG,EAAQ,MAAM,SAAWR,EAAU,IAAMK,EAAS,MAAM,EAClDA,EAER,IAAII,EAAAJ,EAAS,QAAQ,IAAI,cAAc,IAAnC,MAAAI,EAAsC,SAAS,oBAAqB,CACtE,MAAMC,EAAS,MAAML,EAAS,QAAQ,KAAK,EAC3C,GAAIK,EAAM,QACA,MAAAF,EAAA,MAAME,EAAM,OAAO,EACrBL,CAEV,CACO,OAAAA,CAAA,EAEHM,EAAU,SAAaC,IAEnB,MADS,MAAMb,EAAI,GAAGa,CAAI,GACX,OAEnBC,EAAU,SAAUD,IAEjB,MADU,MAAMb,EAAI,GAAGa,CAAI,GACZ,OAElBE,EAAiB,SAAUF,IAExB,MADU,MAAMb,EAAI,GAAGa,CAAI,GACZ,cA+DjB,MAAA,CAAE,OAAAf,EAAQ,IA7DL,CACV,OAAQ,SAAYc,EAAgB,QAAQ,EAC5C,SAAU,MAAOI,GACRJ,EAAkB,WAAY,CAAE,MAAAI,CAAO,CAAA,EAEhD,WAAY,MAAOA,GACVD,EAAe,aAAc,CAAE,MAAAC,CAAO,CAAA,EAE/C,gBAAiB,SACRJ,EAAkB,iBAAiB,EAE5C,UAAW,SACFA,EAAoB,WAAW,EAExC,eAAgB,MAAOK,GACdH,EAAQ,iBAAkB,CAC/B,KAAM,CACJ,OAAQ,OACR,KAAM,KAAK,UAAUG,CAAI,EACzB,QAAS,CACP,eAAgB,kBAClB,CACF,CAAA,CACD,EAEH,mBAAoB,MAAOA,GAClBH,EAAQ,qBAAsB,CACnC,KAAM,CACJ,OAAQ,OACR,KAAM,KAAK,UAAU,CACnB,GAAGG,EACH,GAAI,GACJ,KAAM,OACN,QAAS,CAAA,CACV,EACD,QAAS,CACP,eAAgB,kBAClB,CACF,CAAA,CACD,EAEH,aAAc,MAAOA,GAKZL,EACL,eACA,CACE,KAAM,CACJ,OAAQ,OAER,KAAM,KAAK,UAAU,CAAE,GAAGK,EAAM,MAAOA,EAAK,SAAU,EACtD,QAAS,CACP,eAAgB,kBAClB,CACF,CACF,CAAA,CAEJ,EAGJ,+5BC3EA,MAAMC,EAASC,KACTC,EAAQC,GAAU,KAAI,EACtB,CAAEC,IAAAA,EAAKxB,OAAAA,CAAQ,EAAGF,GAAY,EAC9B2B,EAAOC,GAAY,cAAe,EAAC,EACnCC,EAAS1B,IACT2B,EAAUC,EAAQ,SAAY,CAC7BJ,EAAKlB,QACVP,EAAOO,MAAQuB,EACb,IAAM,IAAIC,IAAIN,EAAKlB,MAAMyB,KAAM,CAAA,EAC/B,IAAO,QACT,EAAEhC,OACFyB,EAAKlB,MAAQP,EAAOO,MACpBoB,EAAOpB,MAAQ,MAAMiB,EAAIG,OAAM,EACjC,CAAC,EACDM,GAAU,SAAY,CACpB,MAAMC,GAAM,GAAG,EACXC,GAAWV,EAAKlB,KAAK,GACvBqB,EAAQQ,OAAM,CAElB,CAAC,EAED,MAAMC,EAAYpC,EAAuB,CAAA,CAAE,EAC3CqC,GAAY,SAAY,CACtB,GAAI,CAACX,EAAOpB,MAAO,OACnBe,EAAMf,MAAS,OAAQoB,EAAOpB,MAAMgC,aACpCZ,EAAOpB,MAAMiC,QACb,MAAMC,EAAS,MAAMjB,EAAIa,YACzBI,EAAOC,KAAK,CAACC,EAAGC,IAAMA,EAAEC,GAAKF,EAAEE,EAAE,EACjCR,EAAU9B,MAAQkC,EAClBK,EAASvC,MAAQ,EACnB,CAAC,EAED,MAAMwC,EAAkBlB,EAAQ,SAAY,CAC1C,MAAMmB,EAAW,MAAMxB,EAAIuB,kBACrBE,EAAa,MAAMzB,EAAIyB,WAAW,CAAEJ,GAAIG,EAASH,EAAG,CAAC,EAC3D,MAAMK,EAAgBC,QAAQH,EAASH,GAAIG,CAAQ,EACnD,MAAMI,EAAkBD,QAAQH,EAASH,GAAII,CAAU,EACvDtC,EAAQ0C,QAAS,QAAO,EACxB,MAAMZ,EAAS,MAAMjB,EAAIa,YACzBI,EAAOC,KAAK,CAACC,EAAGC,IAAMA,EAAEC,GAAKF,EAAEE,EAAE,EACjCR,EAAU9B,MAAQkC,CACpB,CAAC,EACKa,EAAsBzB,EAAQ,SAAY,CAC9C,MAAM0B,GAAe,MAAM/B,EAAIa,UAAS,GAAImB,IAAKC,GAAMA,EAAEZ,EAAE,EACrDa,EAAmB,IAAIC,KAC1B,MAAMP,EAAkBQ,QAAQJ,IAAKC,GAAMI,SAASJ,CAAC,CAAC,CACzD,EACMK,EAAsBP,EAAYQ,OACrCC,GAAM,CAACN,EAAiBO,IAAID,CAAC,CAChC,EACA,GAAIF,EAAoBI,QAAU,EAAG,CACnCvD,EAAQ0C,QAAS,UAAS,EAC1B,MACF,CACA,IAAIc,EAAI,EACR,MAAMC,EAAQC,GAAO,CAAC,EACtB,MAAMC,QAAQC,IACZT,EAAoBN,IAAKgB,GACvBJ,EAAM,SAAY,CAChB,KAAM,CAACK,EAAaC,EAAa,EAAI,MAAMJ,QAAQC,IAAI,CACrD/C,EAAIwB,SAAS,CAAEH,GAAI2B,CAAW,CAAC,EAC/BhD,EAAIyB,WAAW,CAAEJ,GAAI2B,CAAY,CAAA,CAAC,CAC1B,EACLC,EAAYE,QACjB,MAAML,QAAQC,IAAI,CAChBrB,EAAgBC,QAAQqB,EAAYC,CAAW,EAC/CrB,EAAkBD,QAAQqB,EAAYE,EAAa,CAAC,CACrD,EACDP,IACD,CAAA,CACH,CACF,EACAxD,EAAQ0C,QAAS,KAAIc,CAAE,MAAK,CAC9B,CAAC,EAEK,CACJS,cAAAA,EACAC,SAAAA,EACAC,WAAAA,EACAC,SAAAA,EACAC,kBAAAA,EACAC,kBAAAA,EACAC,cAAAA,CACD,EAAGC,GAAkB,EAChBC,EAAsBC,GAAsB,CAC5CA,EAAOC,WAAaP,EAASzE,MAC/ByE,EAASQ,UAAYF,EAAOG,QAG1BC,EAAkBC,GACtB,MAAOC,GAAkB,CAIvB,GAHM,MAAMzC,EAAgB0C,QAAQD,EAAI9C,EAAE,GACxC,MAAMK,EAAgBC,QAAQwC,EAAI9C,GAAI,MAAMrB,EAAIwB,SAAS,CAAEH,GAAI8C,EAAI9C,EAAI,CAAA,CAAC,EAEtE,CAAE,MAAMO,EAAkBwC,QAAQD,EAAI9C,EAAE,EAAI,CAC9C,MAAMgD,EAAK,MAAMrE,EAAIyB,WAAW,CAAEJ,GAAI8C,EAAI9C,EAAG,CAAC,EAC9C,MAAMO,EAAkBD,QAAQwC,EAAI9C,GAAIgD,CAAE,CAC5C,CACAC,OAAOC,KACL3E,EAAO4E,QAAQ,CACbC,KAAM,WACNC,OAAQ,CAAE1B,WAAYmB,EAAI9C,EAAG,EAC9B,EAAEsD,IACL,CACF,EACChC,GAAMA,EAAEtB,EACX,EAEMuD,GAAsC,CAC1CrB,EACAD,EACAD,EACAG,EACAC,EACAL,EACA,CACEtE,IAAM,UACNgB,MAAQ,KACR+E,MAAO,QACPC,MAAQ,QACRC,OAAOZ,EAAK,CACV,OAAAa,EAAAC,EAAA,CAAA,KAAA,OAAA,EAAA,CAAAC,QAAAA,IAAAF,CAAAA,EAAAG,EAAA,CAAA,KAAA,QAAA,QAIelB,EAAgBmB,QAAQjB,EAAI9C,EAAE,EAAC,QAC/BgE,IAAMpB,EAAgBrD,OAAOuD,CAAG,CAAC,EAAA,CAAAe,QAAAA,IAAA,CAAAI,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAMlD,CACF,CAAC,EAGGC,EAAaC,EAAiC,CAClDC,KAAM,EACNC,SAAU,GACVC,eAAgB,GAChBC,UAAW,CAAC,GAAI,GAAG,EACnBC,SAAWJ,GAAiB,CAC1BF,EAAWE,KAAOA,CACnB,EACDK,iBAAmBJ,GAAqB,CACtCH,EAAWG,SAAWA,EACtBH,EAAWE,KAAO,CACpB,CACF,CAAC,EACDM,EAAMR,EAAY7B,CAAa,EAE/B,MAAMsC,EAAgBvH,EAAW,EAAK,EAChC6C,EAAW7C,EAAY,EAAC,EACxBwH,EAAa5F,EAAQ,SAAY,CACrC,MAAMV,EAAOW,EAAU,IAAM4F,GAAMC,MAAM7E,EAASvC,MAAMyB,KAAM,CAAA,CAAC,EAC/D,GAAKb,EACL,IAAIA,EAAKyG,YAAczG,EAAK0G,cAAgB1G,EAAK2G,KAC/C,MAAMtG,EAAIuG,mBAAmB5G,CAAI,UACxB,OAAOA,EAAK0B,IAAM,SAC3B,MAAMrB,EAAIuG,mBAAmB,CAC3BD,KAAM,CAAC3G,CAAI,CACb,CAAC,UACQ6G,MAAMC,QAAQ9G,CAAI,GAAK,OAAOA,EAAK,CAAC,EAAE0B,IAAM,SACrD,MAAMrB,EAAIuG,mBAAmB,CAC3BD,KAAM3G,CACR,CAAC,UACQ,OAAOA,EAAKb,KAAO,SAC5B,MAAMkB,EAAIuG,mBAAmB,CAC3BF,aAAc,CAAC1G,CAAI,CACrB,CAAC,UACQ6G,MAAMC,QAAQ9G,CAAI,GAAK,OAAOA,EAAK,CAAC,EAAEb,KAAO,SACtD,MAAMkB,EAAIuG,mBAAmB,CAC3BF,aAAc1G,CAChB,CAAC,MACI,CACLR,EAAQE,MAAO,WAAU,EACzB,MACF,CACAF,EAAQ0C,QAAS,MAAK,EACxB,CAAC,EAEK6E,EAAoBjI,EAAW,EAAK,EAEpCkI,GAGA,CACJ,CACEC,MAAO,MACP7H,MAAO8H,MACT,EACA,CACE9H,MAAO,QACP6H,MAAO,OACT,EACA,CACE7H,MAAO,YACP6H,MAAO,WACT,EACA,CACE7H,MAAO,cACP6H,MAAO,aACT,EACA,CACE7H,MAAO,OACP6H,MAAO,MACT,EACA,CACE7H,MAAO,YACP6H,MAAO,WACT,EACA,CACE7H,MAAO,gBACP6H,MAAO,eACT,EACA,CACE7H,MAAO,kBACP6H,MAAO,iBACT,CAAC,EAEGE,EAActB,EAAgB,CAClCuB,SAAW,GACXC,cAAe,GACfC,OAAQ,QACRC,UAAW,EACb,CAAC,EACKC,GAAqBC,GAAc,IAAM,CAC7CN,EAAYE,cAAgBK,GAAcP,EAAYC,QAAQ,CAC/D,EAAE,GAAG,EACNhB,EAAM,IAAMe,EAAYC,SAASvG,KAAM,EAAE2G,EAAkB,EAC3D,MAAMG,EAAejH,EAAQ,SAAY,CACvC,MAAMY,EAAS,MAAMjB,EAAIsH,aAAa,CAAE,GAAGR,CAAY,CAAC,EACxD,GAAI7F,EAAO9B,QAAS,CAClBA,EAAQ0C,QAAS,QAASZ,EAAO9B,OAAO,EACxC,MACF,CACI8B,EAAOgG,OACT9H,EAAQ0C,SAASZ,EAAOA,OAAU,QAAU,QAASA,EAAOgG,MAAM,EACzD,CAAChG,EAAOgG,QAAUhG,EAAOA,QAClC9B,EAAQ0C,QAAS,MAAK,CAE1B,CAAC,EAEK0F,GAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+CnB/G,KAAI"}
@@ -1,2 +0,0 @@
1
- import{h as v,A as m,aJ as x,Q as k,aK as w,aL as n,W as y,aM as I,aA as S,C as d,F as B,M as f,P as N,a7 as R,a8 as V,K as _,O as b,aB as q,H as C,I as h}from"./index-DEdjUr5q.js";import{m as F,a as g,l as i,e as M,g as U}from"./fetch-CpTiefX8.js";import{e as A}from"./export-C0OLZkuw.js";import{a as D}from"./import-DideFhmR.js";import"./index-RwQljgyW.js";const K={class:"h-[calc(100%-10px)]",flex:"","gap-5px":"","pt-40px":"","flex-col":"","flex-items-center":""},L={key:0,"mb-20px":""},O=_("a",{href:"https://github.com/gkd-kit/network-extension",target:"_blank",rel:"noopener noreferrer"}," 油猴脚本 ",-1),W=v({__name:"ImportPage",setup(P){const l=q(),c=C(),p=m(!0),r=m("加载中..."),u=async s=>{c.replace({name:"snapshot",params:{snapshotId:s},query:M(l.query,["str","gkd"])})},o=String(l.query.url||""),e=x(o);return k(async()=>{var s;if(!w(o)){F.error("非法URL参数"),await g(1e3),c.replace({path:"/"});return}if(e){const t=n[e];if(t)if(await y.getItem(t)){u(t);return}else delete n[e]}i.start();try{const[t]=(s=await D(e?I(e):o))!=null?s:[];if(t.status=="fulfilled"){i.finish();const a=t.value;a!=null&&a.id?(e&&(A(e),n[e]=a.id,S[a.id]=e),p.value=!1,await g(500),u(a.id)):r.value="获取资源失败"}else throw t.reason}catch{i.error(),r.value="加载资源失败"}}),(s,t)=>(h(),d("div",K,[B(U)()?N("",!0):(h(),d("div",L,[f(" 建议安装并启用 "),O,f(" 获取更快加载速度 ")])),R(_("div",null,b(r.value),513),[[V,p.value]])]))}});export{W as default};
2
- //# sourceMappingURL=ImportPage-CHjeYLZq.js.map
@@ -1,2 +0,0 @@
1
- import{h as V,m as x,V as b,A as d,B,C as f,K as a,O as g,F as r,D as l,E as n,P as C,aB as E,I as h,M as k,L as v}from"./index-DEdjUr5q.js";import{u as S,t as D,c as R,l as p,h as z}from"./fetch-CpTiefX8.js";import{a as F}from"./index-BK1Q2G8Y.js";import{l as w,a as G,N as K}from"./index-Xf3Ut-IQ.js";const L={key:0,"pt-40px":"","text-center":""},P={key:1,"pt-40px":"","text-center":""},A=a("div",null,"解析失败",-1),H={key:2,"p-20px":"",flex:"","flex-col":"","gap-20px":"","h-full":"",relative:""},I={flex:"","flex-items-center":"","gap-10px":""},M=a("div",{"font-bold":""},"规则预览",-1),U=a("div",{"flex-1":""},null,-1),T={"h-full":"",relative:""},$=a("svg",{viewBox:"0 0 24 24"},[a("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z",fill:"currentColor"})],-1),W=V({__name:"PreviewSharePage",setup(q){const _=E();S(),F("GKD-规则预览");const m=x(()=>{const e=b(String(_.query.url));if(e)return e;const t=String(_.params.github_asset_id);return new URL(`https://github.com/gkd-kit/inspect/files/${t}/file.txt`)}),o=d(),i=d(""),u=x(()=>{var e,t;return(e=o.value)!=null&&e.data?w.stringify((t=o.value)==null?void 0:t.data,null,2):""}),c=d(!0);B(async()=>{var e,t;c.value=!0;try{p.start();const s=await z(m.value.href,void 0,{proxy:!0}).then(N=>N.text());if(s=="Not Found")throw new Error("Not Found");if(o.value=w.parse(s),(e=o.value)!=null&&e.ctime&&((t=o.value)!=null&&t.data))p.finish();else throw new Error(s)}catch(s){p.error(),s instanceof Error?i.value=s.message:i.value=String(s||"unknown error")}c.value=!1});const y=()=>{const e=new URL("gkd://import");e.searchParams.set("url",m.value.href),location.href=e.href};return(e,t)=>c.value?(h(),f("div",L,"加载中...")):i.value?(h(),f("div",P,[A,a("div",null,g(i.value),1)])):o.value&&u.value?(h(),f("div",H,[a("div",I,[M,a("div",null,g(r(D)(o.value.ctime)),1),U,l(r(v),{text:"",tag:"a",href:"https://gkd.li/guide/",target:"_blank",type:"primary"},{default:n(()=>[k(" 下载 GKD ")]),_:1})]),l(r(K),{class:"flex-1 gkd_code",type:"textarea","show-count":"",value:u.value,disabled:""},{suffix:n(()=>[a("div",T,[l(r(v),{class:"absolute right-0 top-10px",size:"small",onClick:t[0]||(t[0]=s=>r(R)(u.value))},{icon:n(()=>[l(r(G),null,{default:n(()=>[$]),_:1})]),_:1})])]),_:1},8,["value"]),l(r(v),{onClick:y},{default:n(()=>[k(" 导入 GKD ")]),_:1})])):C("",!0)}});export{W as default};
2
- //# sourceMappingURL=PreviewSharePage-BhIamd8L.js.map