agent-device 0.11.16 → 0.12.0
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/README.md +2 -2
- package/dist/src/155.js +34 -34
- package/dist/src/818.js +1 -1
- package/dist/src/974.js +2 -2
- package/dist/src/bin.js +30 -31
- package/dist/src/daemon.js +15 -15
- package/dist/src/index.d.ts +9 -168
- package/dist/src/index.js +3 -3
- package/dist/src/metro.js +1 -1
- package/package.json +1 -17
- package/skills/agent-device/SKILL.md +1 -1
- package/skills/agent-device/references/exploration.md +19 -5
- package/skills/agent-device/references/macos-desktop.md +1 -0
- package/dist/src/164.js +0 -1
- package/dist/src/556.js +0 -1
- package/dist/src/940.js +0 -1
- package/dist/src/artifacts.d.ts +0 -3
- package/dist/src/artifacts.js +0 -1
- package/dist/src/finders.d.ts +0 -75
- package/dist/src/finders.js +0 -1
- package/dist/src/install-source.d.ts +0 -40
- package/dist/src/install-source.js +0 -1
- package/dist/src/selectors.d.ts +0 -110
- package/dist/src/selectors.js +0 -1
package/dist/src/artifacts.d.ts
DELETED
package/dist/src/artifacts.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
let t;import e from"node:fs/promises";import r from"node:path";import{TextDecoder as n}from"node:util";import{runCmd as a}from"./818.js";import{resolveAndroidSdkRoots as i}from"./164.js";let f=new n("utf-16le");async function o(t){for(let r of["AndroidManifest.xml","base/manifest/AndroidManifest.xml"]){var e;let n=await u(t,r);if(!n)continue;let a=(e=n).subarray(0,Math.min(e.length,128)).toString("utf8").trimStart().startsWith("<")?function(t){let e=t.match(/<manifest\b[^>]*\bpackage\s*=\s*["']([^"']+)["']/i);return e?.[1]}(e.toString("utf8")):function(t){let e;if(!(t.length<8)&&3===t.readUInt16LE(0))for(let r=t.readUInt16LE(2);r+8<=t.length;){let n=t.readUInt16LE(r),a=t.readUInt16LE(r+2),i=t.readUInt32LE(r+4);if(i<=0||r+i>t.length)break;if(1===n)e=function(t){if(t.length<28)return[];let e=t.readUInt32LE(8),r=t.readUInt32LE(16),n=t.readUInt32LE(20),a=(256&r)!=0,i=[];for(let r=0;r<e;r+=1){let e=28+4*r;if(e+4>t.length)break;let o=n+t.readUInt32LE(e);i.push(a?function(t,e){let[,r]=l(t,e),[n,a]=l(t,e+r),i=e+r+a;return t.subarray(i,i+n).toString("utf8")}(t,o):function(t,e){let[r,n]=function(t,e){let r=t.readUInt16LE(e);return(32768&r)==0?[r,2]:[(32767&r)<<16|t.readUInt16LE(e+2),4]}(t,e),a=e+n;return f.decode(t.subarray(a,a+2*r))}(t,o))}return i}(t.subarray(r,r+i));else if(258===n&&e){let n=function(t,e,r,n){if(r<36||e+r>t.length||"manifest"!==n[t.readUInt32LE(e+20)])return;let a=t.readUInt16LE(e+24),i=t.readUInt16LE(e+26),f=t.readUInt16LE(e+28),o=e+a;for(let e=0;e<f;e+=1){let r=o+e*i;if(r+20>t.length)break;if("package"!==n[t.readUInt32LE(r+4)])continue;let a=t.readUInt32LE(r+8);if(0xffffffff!==a)return n[a];let f=t.readUInt8(r+15),u=t.readUInt32LE(r+16);if(3===f)return n[u];break}}(t,r,a,e);if(n)return n}r+=i}}(e);if(a)return a}return await d(t)}async function u(t,e){try{let r=await a("unzip",["-p",t,e],{allowFailure:!0,binaryStdout:!0});if(0!==r.exitCode||!r.stdoutBuffer||0===r.stdoutBuffer.length)return;return r.stdoutBuffer}catch{return}}function l(t,e){let r=t.readUInt8(e);return(128&r)==0?[r,1]:[(127&r)<<8|t.readUInt8(e+1),2]}async function d(t){let e=await c();if(!e)return;let r=await a(e,["dump","badging",t],{allowFailure:!0});if(0!==r.exitCode)return;let n=r.stdout.match(/package:\s+name='([^']+)'/);return n?.[1]}async function c(){if(void 0!==t)return t??void 0;try{for(let n of i()){let a=r.join(n,"build-tools");try{for(let n of(await e.readdir(a)).sort((t,e)=>e.localeCompare(t,void 0,{numeric:!0}))){let i=r.join(a,n,"aapt");try{return await e.access(i),t=i,i}catch{}}}catch{}}}catch{}t=null}export{o as resolveAndroidArchivePackageName};
|
package/dist/src/finders.d.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
declare type FindAction = {
|
|
2
|
-
kind: 'click';
|
|
3
|
-
} | {
|
|
4
|
-
kind: 'focus';
|
|
5
|
-
} | {
|
|
6
|
-
kind: 'fill';
|
|
7
|
-
value: string;
|
|
8
|
-
} | {
|
|
9
|
-
kind: 'type';
|
|
10
|
-
value: string;
|
|
11
|
-
} | {
|
|
12
|
-
kind: 'get_text';
|
|
13
|
-
} | {
|
|
14
|
-
kind: 'get_attrs';
|
|
15
|
-
} | {
|
|
16
|
-
kind: 'exists';
|
|
17
|
-
} | {
|
|
18
|
-
kind: 'wait';
|
|
19
|
-
timeoutMs?: number;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export declare function findBestMatchesByLocator(nodes: SnapshotNode[], locator: FindLocator, query: string, requireRect?: boolean): {
|
|
23
|
-
matches: SnapshotNode[];
|
|
24
|
-
score: number;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export declare type FindLocator = 'any' | 'text' | 'label' | 'value' | 'role' | 'id';
|
|
28
|
-
|
|
29
|
-
export declare function normalizeRole(value: string): string;
|
|
30
|
-
|
|
31
|
-
export declare function normalizeText(value: string): string;
|
|
32
|
-
|
|
33
|
-
export declare function parseFindArgs(args: string[]): {
|
|
34
|
-
locator: FindLocator;
|
|
35
|
-
query: string;
|
|
36
|
-
action: FindAction['kind'];
|
|
37
|
-
value?: string;
|
|
38
|
-
timeoutMs?: number;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
declare type RawSnapshotNode = {
|
|
42
|
-
index: number;
|
|
43
|
-
type?: string;
|
|
44
|
-
role?: string;
|
|
45
|
-
subrole?: string;
|
|
46
|
-
label?: string;
|
|
47
|
-
value?: string;
|
|
48
|
-
identifier?: string;
|
|
49
|
-
rect?: Rect;
|
|
50
|
-
enabled?: boolean;
|
|
51
|
-
selected?: boolean;
|
|
52
|
-
hittable?: boolean;
|
|
53
|
-
depth?: number;
|
|
54
|
-
parentIndex?: number;
|
|
55
|
-
pid?: number;
|
|
56
|
-
bundleId?: string;
|
|
57
|
-
appName?: string;
|
|
58
|
-
windowTitle?: string;
|
|
59
|
-
surface?: string;
|
|
60
|
-
hiddenContentAbove?: boolean;
|
|
61
|
-
hiddenContentBelow?: boolean;
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
declare type Rect = {
|
|
65
|
-
x: number;
|
|
66
|
-
y: number;
|
|
67
|
-
width: number;
|
|
68
|
-
height: number;
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
declare type SnapshotNode = RawSnapshotNode & {
|
|
72
|
-
ref: string;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export { }
|
package/dist/src/finders.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{findBestMatchesByLocator as o}from"./556.js";function r(r,e,t,_){return o(r,e,t,{requireRect:_})}export{normalizeRole,normalizeText,parseFindArgs}from"./556.js";export{r as findBestMatchesByLocator};
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
export declare const ARCHIVE_EXTENSIONS: readonly [".zip", ".tar", ".tar.gz", ".tgz"];
|
|
2
|
-
|
|
3
|
-
export declare function isBlockedIpAddress(address: string): boolean;
|
|
4
|
-
|
|
5
|
-
export declare function isBlockedSourceHostname(hostname: string): boolean;
|
|
6
|
-
|
|
7
|
-
export declare function isTrustedInstallSourceUrl(sourceUrl: string | URL): boolean;
|
|
8
|
-
|
|
9
|
-
export declare type MaterializedInstallable = {
|
|
10
|
-
archivePath?: string;
|
|
11
|
-
installablePath: string;
|
|
12
|
-
cleanup: () => Promise<void>;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
declare type MaterializeInstallableOptions = {
|
|
16
|
-
source: MaterializeInstallSource;
|
|
17
|
-
isInstallablePath: (candidatePath: string, stat: {
|
|
18
|
-
isFile(): boolean;
|
|
19
|
-
isDirectory(): boolean;
|
|
20
|
-
}) => boolean;
|
|
21
|
-
installableLabel: string;
|
|
22
|
-
allowArchiveExtraction?: boolean;
|
|
23
|
-
signal?: AbortSignal;
|
|
24
|
-
downloadTimeoutMs?: number;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export declare function materializeInstallablePath(options: MaterializeInstallableOptions): Promise<MaterializedInstallable>;
|
|
28
|
-
|
|
29
|
-
export declare type MaterializeInstallSource = {
|
|
30
|
-
kind: 'url';
|
|
31
|
-
url: string;
|
|
32
|
-
headers?: Record<string, string>;
|
|
33
|
-
} | {
|
|
34
|
-
kind: 'path';
|
|
35
|
-
path: string;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export declare function validateDownloadSourceUrl(parsedUrl: URL): Promise<void>;
|
|
39
|
-
|
|
40
|
-
export { }
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import t from"node:dns/promises";import e from"node:net";import{promises as a}from"node:fs";import r from"node:os";import o from"node:path";import{AppError as i}from"./152.js";import{runCmd as n}from"./818.js";import{expandUserHomePath as s}from"./267.js";let l=[".zip",".tar",".tar.gz",".tgz"],c=Object.freeze([...l]),h=function(t){if(!t)return 12e4;let e=Number(t);return Number.isFinite(e)?Math.max(1e3,Math.floor(e)):12e4}(process.env.AGENT_DEVICE_SOURCE_DOWNLOAD_TIMEOUT_MS),u=["1","true","yes","on"];async function d(t){let e=[];try{let a=await w(t.source,{signal:t.signal,downloadTimeoutMs:t.downloadTimeoutMs});e.push(a.cleanup);let r=await _(a.localPath,{archivePath:void 0,isInstallablePath:t.isInstallablePath,installableLabel:t.installableLabel,allowArchiveExtraction:!1!==t.allowArchiveExtraction,registerCleanup:t=>{e.push(t)}});return{archivePath:r.archivePath,installablePath:r.installablePath,cleanup:async()=>{await E(e)}}}catch(t){throw await E(e),t}}async function w(t,e){if("path"===t.kind)return{localPath:s(t.path),cleanup:async()=>{}};let i=await a.mkdtemp(o.join(r.tmpdir(),"agent-device-source-"));try{return{localPath:await p(i,t.url,t.headers,e),cleanup:async()=>{await a.rm(i,{recursive:!0,force:!0})}}}catch(t){throw await a.rm(i,{recursive:!0,force:!0}),t}}async function p(t,e,r,n){let s;try{s=new URL(e)}catch{throw new i("INVALID_ARGS",`Invalid source URL: ${e}`)}await f(s);let l=n?.signal;if(l?.aborted)throw new i("COMMAND_FAILED","request canceled",{reason:"request_canceled"});let c=new AbortController,u=()=>{c.abort(l?.reason)};l?.addEventListener("abort",u,{once:!0});let d=n?.downloadTimeoutMs??h,w=setTimeout(()=>{c.abort(Error("download timeout"))},d);try{let e=await fetch(s,{headers:r,redirect:"follow",signal:c.signal});if(!e.ok)throw new i("COMMAND_FAILED",`Failed to download app source: ${e.status} ${e.statusText}`,{status:e.status,statusText:e.statusText,url:s.toString()});let n=function(t,e){let a=t.headers.get("content-disposition"),r=a?.match(/filename\*?=(?:UTF-8'')?"?([^";]+)"?/i),i=r?.[1]?.trim();if(i)return o.basename(i);let n=o.basename(e.pathname);return n||"downloaded-artifact.bin"}(e,s),l=o.join(t,n),h=e.body;if(!h)throw new i("COMMAND_FAILED","Download response body was empty",{url:s.toString()});let u=await a.open(l,"w");try{for await(let t of h)await u.write(t)}finally{await u.close()}return l}catch(t){if(l?.aborted)throw new i("COMMAND_FAILED","request canceled",{reason:"request_canceled"},t);if(c.signal.aborted)throw new i("COMMAND_FAILED",`App source download timed out after ${d}ms`,{timeoutMs:d,url:s.toString()},t);throw t}finally{l?.removeEventListener("abort",u),clearTimeout(w)}}async function f(e){if("http:"!==e.protocol&&"https:"!==e.protocol)throw new i("INVALID_ARGS",`Unsupported source URL protocol: ${e.protocol}`);if(!u.includes((process.env.AGENT_DEVICE_ALLOW_PRIVATE_SOURCE_URLS??"").toLowerCase())){if(A(e.hostname.toLowerCase()))throw new i("INVALID_ARGS",`Source URL host is not allowed: ${e.hostname}`,{hint:"Use a public artifact URL, or set AGENT_DEVICE_ALLOW_PRIVATE_SOURCE_URLS=1 for trusted private-network daemons."});if((await t.lookup(e.hostname,{all:!0,verbatim:!0}).catch(()=>[])).some(t=>L(t.address)))throw new i("INVALID_ARGS",`Source URL host resolved to a private or loopback address: ${e.hostname}`,{hint:"Use a public artifact URL, or set AGENT_DEVICE_ALLOW_PRIVATE_SOURCE_URLS=1 for trusted private-network daemons."})}}function m(t){var e,a,r,o;let i=t instanceof URL?t:new URL(t),n=i.hostname.toLowerCase();if(!n)return!1;let s=i.pathname;return e=n,a=s,("api.github.com"===e?/^\/repos\/[^/]+\/[^/]+\/actions\/artifacts\/\d+\/zip$/i.test(a):"github.com"===e&&/^\/[^/]+\/[^/]+\/(?:actions\/runs\/\d+\/artifacts\/\d+|suites\/\d+\/artifacts\/\d+)$/i.test(a))||(r=n,o=s,("expo.dev"===r||!!r.endsWith(".expo.dev"))&&/^\/(?:artifacts\/eas\/|accounts\/[^/]+\/projects\/[^/]+\/builds\/)/i.test(o))}function A(t){return!!(!t||"localhost"===t||t.endsWith(".localhost"))||L(t)}function L(t){let a,r=e.isIP(t);return 4===r?function(t){let e=t.split(".").map(t=>Number.parseInt(t,10));if(4!==e.length||e.some(t=>Number.isNaN(t)||t<0||t>255))return!1;let[a,r]=e;return 10===a||127===a||169===a&&254===r||172===a&&!!(r>=16)&&!!(r<=31)||192===a&&168===r}(t):6===r&&!!("::1"===(a=t.toLowerCase())||a.startsWith("fc")||a.startsWith("fd")||a.startsWith("fe80:"))}async function _(t,e){let r=await a.stat(t).catch(()=>null);if(!r)throw new i("INVALID_ARGS",`App source not found: ${t}`);if(e.isInstallablePath(t,r))return{archivePath:e.archivePath,installablePath:t};if(r.isFile()&&v(t)){if(!e.allowArchiveExtraction)throw new i("INVALID_ARGS",`URL sources must point directly to a ${e.installableLabel}; archive extraction is not allowed`,{path:t});let a=await I(t);return e.registerCleanup(a.cleanup),await _(a.outputPath,{...e,archivePath:e.archivePath??t})}if(r.isDirectory()){let a=await b(t,e.isInstallablePath);if(1===a.length)return{archivePath:e.archivePath,installablePath:a[0]};if(a.length>1)throw new i("INVALID_ARGS",`Found multiple ${e.installableLabel} candidates under ${t}`,{matches:a});let r=await b(t,(t,e)=>e.isFile()&&v(t));if(1===r.length){if(!e.allowArchiveExtraction)throw new i("INVALID_ARGS",`URL sources must point directly to a ${e.installableLabel}; nested archives are not allowed`,{path:r[0]});let t=await I(r[0]);return e.registerCleanup(t.cleanup),await _(t.outputPath,{...e,archivePath:e.archivePath??r[0]})}if(r.length>1)throw new i("INVALID_ARGS",`Found multiple nested archives under ${t}; expected one ${e.installableLabel} source`,{matches:r})}throw new i("INVALID_ARGS",`Expected ${e.installableLabel} source, but got ${t}`)}async function b(t,e){let r=[],i=[{path:t,depth:0}];for(;i.length>0;){let t=i.shift();if(!t)continue;let n=await a.readdir(t.path,{withFileTypes:!0});for(let a of(n.sort((t,e)=>t.name.localeCompare(e.name)),n)){let n=o.join(t.path,a.name);if(e(n,a)){r.push(n);continue}a.isDirectory()&&t.depth<5&&i.push({path:n,depth:t.depth+1})}}return r}async function I(t){let e=await a.mkdtemp(o.join(r.tmpdir(),"agent-device-archive-"));try{return t.toLowerCase().endsWith(".zip")?await n("ditto",["-x","-k",t,e]):t.toLowerCase().endsWith(".tar.gz")||t.toLowerCase().endsWith(".tgz")?await n("tar",["-xzf",t,"-C",e]):await n("tar",["-xf",t,"-C",e]),{outputPath:e,cleanup:async()=>{await a.rm(e,{recursive:!0,force:!0})}}}catch(t){throw await a.rm(e,{recursive:!0,force:!0}),t}}function v(t){let e=t.toLowerCase();return l.some(t=>e.endsWith(t))}async function E(t){for(let e=t.length-1;e>=0;e-=1)await t[e]()}export{c as ARCHIVE_EXTENSIONS,L as isBlockedIpAddress,A as isBlockedSourceHostname,m as isTrustedInstallSourceUrl,d as materializeInstallablePath,f as validateDownloadSourceUrl};
|
package/dist/src/selectors.d.ts
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
declare type ApplePlatform = 'ios' | 'macos';
|
|
2
|
-
|
|
3
|
-
export declare function findSelectorChainMatch(nodes: SnapshotState['nodes'], chain: SelectorChain, options: {
|
|
4
|
-
platform: Platform;
|
|
5
|
-
requireRect?: boolean;
|
|
6
|
-
}): {
|
|
7
|
-
selectorIndex: number;
|
|
8
|
-
selector: Selector;
|
|
9
|
-
matches: number;
|
|
10
|
-
diagnostics: SelectorDiagnostics[];
|
|
11
|
-
} | null;
|
|
12
|
-
|
|
13
|
-
export declare function formatSelectorFailure(chain: SelectorChain, diagnostics: SelectorDiagnostics[], options: {
|
|
14
|
-
unique?: boolean;
|
|
15
|
-
}): string;
|
|
16
|
-
|
|
17
|
-
export declare function isNodeEditable(node: SnapshotNode, platform: Platform): boolean;
|
|
18
|
-
|
|
19
|
-
export declare function isNodeVisible(node: SnapshotNode): boolean;
|
|
20
|
-
|
|
21
|
-
export declare function isSelectorToken(token: string): boolean;
|
|
22
|
-
|
|
23
|
-
export declare function parseSelectorChain(expression: string): SelectorChain;
|
|
24
|
-
|
|
25
|
-
declare type Platform = ApplePlatform | 'android' | 'linux';
|
|
26
|
-
|
|
27
|
-
declare type RawSnapshotNode = {
|
|
28
|
-
index: number;
|
|
29
|
-
type?: string;
|
|
30
|
-
role?: string;
|
|
31
|
-
subrole?: string;
|
|
32
|
-
label?: string;
|
|
33
|
-
value?: string;
|
|
34
|
-
identifier?: string;
|
|
35
|
-
rect?: Rect;
|
|
36
|
-
enabled?: boolean;
|
|
37
|
-
selected?: boolean;
|
|
38
|
-
hittable?: boolean;
|
|
39
|
-
depth?: number;
|
|
40
|
-
parentIndex?: number;
|
|
41
|
-
pid?: number;
|
|
42
|
-
bundleId?: string;
|
|
43
|
-
appName?: string;
|
|
44
|
-
windowTitle?: string;
|
|
45
|
-
surface?: string;
|
|
46
|
-
hiddenContentAbove?: boolean;
|
|
47
|
-
hiddenContentBelow?: boolean;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
declare type Rect = {
|
|
51
|
-
x: number;
|
|
52
|
-
y: number;
|
|
53
|
-
width: number;
|
|
54
|
-
height: number;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
export declare function resolveSelectorChain(nodes: SnapshotState['nodes'], chain: SelectorChain, options: {
|
|
58
|
-
platform: Platform;
|
|
59
|
-
requireRect?: boolean;
|
|
60
|
-
requireUnique?: boolean;
|
|
61
|
-
disambiguateAmbiguous?: boolean;
|
|
62
|
-
}): SelectorResolution | null;
|
|
63
|
-
|
|
64
|
-
export declare type Selector = {
|
|
65
|
-
raw: string;
|
|
66
|
-
terms: SelectorTerm[];
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
export declare type SelectorChain = {
|
|
70
|
-
raw: string;
|
|
71
|
-
selectors: Selector[];
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
export declare type SelectorDiagnostics = {
|
|
75
|
-
selector: string;
|
|
76
|
-
matches: number;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
declare type SelectorKey = 'id' | 'role' | 'text' | 'label' | 'value' | 'appname' | 'windowtitle' | 'visible' | 'hidden' | 'editable' | 'selected' | 'enabled' | 'hittable';
|
|
80
|
-
|
|
81
|
-
export declare type SelectorResolution = {
|
|
82
|
-
node: SnapshotNode;
|
|
83
|
-
selector: Selector;
|
|
84
|
-
selectorIndex: number;
|
|
85
|
-
matches: number;
|
|
86
|
-
diagnostics: SelectorDiagnostics[];
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
declare type SelectorTerm = {
|
|
90
|
-
key: SelectorKey;
|
|
91
|
-
value: string | boolean;
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
declare type SnapshotBackend = 'xctest' | 'android' | 'macos-helper' | 'linux-atspi';
|
|
95
|
-
|
|
96
|
-
declare type SnapshotNode = RawSnapshotNode & {
|
|
97
|
-
ref: string;
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
declare type SnapshotState = {
|
|
101
|
-
nodes: SnapshotNode[];
|
|
102
|
-
createdAt: number;
|
|
103
|
-
truncated?: boolean;
|
|
104
|
-
backend?: SnapshotBackend;
|
|
105
|
-
comparisonSafe?: boolean;
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
export declare function tryParseSelectorChain(expression: string): SelectorChain | null;
|
|
109
|
-
|
|
110
|
-
export { }
|
package/dist/src/selectors.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{findSelectorChainMatch,formatSelectorFailure,isNodeEditable,isNodeVisible,isSelectorToken,parseSelectorChain,resolveSelectorChain,tryParseSelectorChain}from"./940.js";
|