@weapp-vite/devtools-runtime 0.2.3 → 0.3.1
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/index.d.ts +2 -18
- package/dist/index.js +2 -1
- package/dist/mcp.d.ts +70 -0
- package/dist/mcp.js +62 -0
- package/package.json +6 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,26 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AutomatorElement, AutomatorMiniProgram, AutomatorPage, DevtoolsConnectionInput, DevtoolsContext, DevtoolsElementSnapshot, DevtoolsPageSnapshot, DevtoolsRuntimeHooks, DevtoolsRuntimeSessionOptions, DevtoolsToolResult, MiniProgramElementLike, readDevtoolsElementSnapshot, resolveDevtoolsProjectPath, resolveDevtoolsWorkspacePath, toDevtoolsSerializableValue } from "./mcp.js";
|
|
2
2
|
|
|
3
3
|
//#region src/index.d.ts
|
|
4
4
|
interface MiniProgramEventMap {
|
|
5
5
|
console: (payload: unknown) => void;
|
|
6
6
|
exception: (payload: unknown) => void;
|
|
7
7
|
}
|
|
8
|
-
type AutomatorMiniProgram = InstanceType<typeof MiniProgram>;
|
|
9
|
-
type AutomatorPage = InstanceType<typeof Page>;
|
|
10
|
-
type AutomatorElement = InstanceType<typeof Element> & {
|
|
11
|
-
input?: (value: string) => Promise<void>;
|
|
12
|
-
};
|
|
13
|
-
interface DevtoolsRuntimeSessionOptions {
|
|
14
|
-
miniProgram?: AutomatorMiniProgram;
|
|
15
|
-
preferOpenedSession?: boolean;
|
|
16
|
-
projectPath: string;
|
|
17
|
-
sharedSession?: boolean;
|
|
18
|
-
timeout?: number;
|
|
19
|
-
}
|
|
20
|
-
interface DevtoolsRuntimeHooks {
|
|
21
|
-
connectMiniProgram: (options: DevtoolsRuntimeSessionOptions) => Promise<AutomatorMiniProgram>;
|
|
22
|
-
normalizeConnectionError?: (error: unknown) => unknown;
|
|
23
|
-
}
|
|
24
8
|
/**
|
|
25
9
|
* @description 获取指定项目的共享 automator 会话;若不存在则自动创建。
|
|
26
10
|
*/
|
|
@@ -42,4 +26,4 @@ declare function getSharedMiniProgramSessionCount(): number;
|
|
|
42
26
|
*/
|
|
43
27
|
declare function withMiniProgram<T>(hooks: DevtoolsRuntimeHooks, options: DevtoolsRuntimeSessionOptions, runner: (miniProgram: AutomatorMiniProgram) => Promise<T>): Promise<T>;
|
|
44
28
|
//#endregion
|
|
45
|
-
export { AutomatorElement, AutomatorMiniProgram, AutomatorPage, DevtoolsRuntimeHooks, DevtoolsRuntimeSessionOptions, MiniProgramEventMap, acquireSharedMiniProgram, closeSharedMiniProgram, getSharedMiniProgramSessionCount, releaseSharedMiniProgram, withMiniProgram };
|
|
29
|
+
export { type AutomatorElement, type AutomatorMiniProgram, type AutomatorPage, type DevtoolsConnectionInput, type DevtoolsContext, type DevtoolsElementSnapshot, type DevtoolsPageSnapshot, type DevtoolsRuntimeHooks, type DevtoolsRuntimeSessionOptions, type DevtoolsToolResult, type MiniProgramElementLike, MiniProgramEventMap, acquireSharedMiniProgram, closeSharedMiniProgram, getSharedMiniProgramSessionCount, readDevtoolsElementSnapshot, releaseSharedMiniProgram, resolveDevtoolsProjectPath, resolveDevtoolsWorkspacePath, toDevtoolsSerializableValue, withMiniProgram };
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { readDevtoolsElementSnapshot, resolveDevtoolsProjectPath, resolveDevtoolsWorkspacePath, toDevtoolsSerializableValue } from "./mcp.js";
|
|
1
2
|
//#region src/index.ts
|
|
2
3
|
const sharedMiniProgramSessions = /* @__PURE__ */ new Map();
|
|
3
4
|
function normalizeError(hooks, error) {
|
|
@@ -76,4 +77,4 @@ async function withMiniProgram(hooks, options, runner) {
|
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
79
|
//#endregion
|
|
79
|
-
export { acquireSharedMiniProgram, closeSharedMiniProgram, getSharedMiniProgramSessionCount, releaseSharedMiniProgram, withMiniProgram };
|
|
80
|
+
export { acquireSharedMiniProgram, closeSharedMiniProgram, getSharedMiniProgramSessionCount, readDevtoolsElementSnapshot, releaseSharedMiniProgram, resolveDevtoolsProjectPath, resolveDevtoolsWorkspacePath, toDevtoolsSerializableValue, withMiniProgram };
|
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Element, MiniProgram, Page } from "@weapp-vite/miniprogram-automator";
|
|
2
|
+
|
|
3
|
+
//#region src/mcp.d.ts
|
|
4
|
+
type AutomatorMiniProgram = InstanceType<typeof MiniProgram>;
|
|
5
|
+
type AutomatorPage = InstanceType<typeof Page>;
|
|
6
|
+
type AutomatorElement = InstanceType<typeof Element> & {
|
|
7
|
+
input?: (value: string) => Promise<void>;
|
|
8
|
+
};
|
|
9
|
+
interface DevtoolsRuntimeSessionOptions {
|
|
10
|
+
miniProgram?: AutomatorMiniProgram;
|
|
11
|
+
preferOpenedSession?: boolean;
|
|
12
|
+
projectPath: string;
|
|
13
|
+
sharedSession?: boolean;
|
|
14
|
+
timeout?: number;
|
|
15
|
+
}
|
|
16
|
+
interface DevtoolsRuntimeHooks {
|
|
17
|
+
connectMiniProgram: (options: DevtoolsRuntimeSessionOptions) => Promise<AutomatorMiniProgram>;
|
|
18
|
+
normalizeConnectionError?: (error: unknown) => unknown;
|
|
19
|
+
}
|
|
20
|
+
interface DevtoolsConnectionInput {
|
|
21
|
+
projectPath: string;
|
|
22
|
+
timeout?: number;
|
|
23
|
+
preferOpenedSession?: boolean;
|
|
24
|
+
}
|
|
25
|
+
interface DevtoolsElementSnapshot {
|
|
26
|
+
selector: string;
|
|
27
|
+
tagName: string;
|
|
28
|
+
text: string | null;
|
|
29
|
+
value: unknown;
|
|
30
|
+
attributes: Record<string, unknown>;
|
|
31
|
+
styles: Record<string, unknown>;
|
|
32
|
+
offset: unknown;
|
|
33
|
+
size: unknown;
|
|
34
|
+
wxml: string | null;
|
|
35
|
+
outerWxml: string | null;
|
|
36
|
+
}
|
|
37
|
+
interface DevtoolsPageSnapshot {
|
|
38
|
+
path: string;
|
|
39
|
+
query: unknown;
|
|
40
|
+
size: unknown;
|
|
41
|
+
scrollTop: unknown;
|
|
42
|
+
data: unknown;
|
|
43
|
+
}
|
|
44
|
+
interface DevtoolsContext {
|
|
45
|
+
miniProgram: AutomatorMiniProgram;
|
|
46
|
+
page: AutomatorPage;
|
|
47
|
+
}
|
|
48
|
+
interface DevtoolsToolResult<T> {
|
|
49
|
+
result: T;
|
|
50
|
+
}
|
|
51
|
+
interface MiniProgramElementLike {
|
|
52
|
+
tagName?: string;
|
|
53
|
+
$?: (selector: string) => Promise<MiniProgramElementLike | null>;
|
|
54
|
+
$$?: (selector: string) => Promise<MiniProgramElementLike[]>;
|
|
55
|
+
attribute?: (name: string) => Promise<unknown>;
|
|
56
|
+
offset?: () => Promise<unknown>;
|
|
57
|
+
outerWxml?: () => Promise<unknown>;
|
|
58
|
+
size?: () => Promise<unknown>;
|
|
59
|
+
style?: (name: string) => Promise<unknown>;
|
|
60
|
+
tap: () => Promise<void>;
|
|
61
|
+
text?: () => Promise<unknown>;
|
|
62
|
+
value?: () => Promise<unknown>;
|
|
63
|
+
wxml?: () => Promise<unknown>;
|
|
64
|
+
}
|
|
65
|
+
declare function resolveDevtoolsProjectPath(workspaceRoot: string, projectPath: string): string;
|
|
66
|
+
declare function resolveDevtoolsWorkspacePath(workspaceRoot: string, filePath: string): string;
|
|
67
|
+
declare function toDevtoolsSerializableValue(value: unknown): unknown;
|
|
68
|
+
declare function readDevtoolsElementSnapshot(element: MiniProgramElementLike, selector: string, attributeNames?: readonly string[], styleNames?: readonly string[]): Promise<DevtoolsElementSnapshot>;
|
|
69
|
+
//#endregion
|
|
70
|
+
export { AutomatorElement, AutomatorMiniProgram, AutomatorPage, DevtoolsConnectionInput, DevtoolsContext, DevtoolsElementSnapshot, DevtoolsPageSnapshot, DevtoolsRuntimeHooks, DevtoolsRuntimeSessionOptions, DevtoolsToolResult, MiniProgramElementLike, readDevtoolsElementSnapshot, resolveDevtoolsProjectPath, resolveDevtoolsWorkspacePath, toDevtoolsSerializableValue };
|
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
//#region src/mcp.ts
|
|
4
|
+
function resolveDevtoolsProjectPath(workspaceRoot, projectPath) {
|
|
5
|
+
return path.isAbsolute(projectPath) ? path.normalize(projectPath) : path.resolve(workspaceRoot, projectPath);
|
|
6
|
+
}
|
|
7
|
+
function resolveDevtoolsWorkspacePath(workspaceRoot, filePath) {
|
|
8
|
+
return path.isAbsolute(filePath) ? path.normalize(filePath) : path.resolve(workspaceRoot, filePath);
|
|
9
|
+
}
|
|
10
|
+
function toDevtoolsSerializableValue(value) {
|
|
11
|
+
if (value == null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") return value;
|
|
12
|
+
if (value instanceof Error) return {
|
|
13
|
+
message: value.message,
|
|
14
|
+
name: value.name,
|
|
15
|
+
stack: value.stack
|
|
16
|
+
};
|
|
17
|
+
if (typeof value === "bigint") return value.toString();
|
|
18
|
+
if (value instanceof Date) return value.toISOString();
|
|
19
|
+
if (Buffer.isBuffer(value)) return value.toString("base64");
|
|
20
|
+
if (Array.isArray(value)) return value.map((item) => toDevtoolsSerializableValue(item));
|
|
21
|
+
if (typeof value === "object") return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, toDevtoolsSerializableValue(item)]));
|
|
22
|
+
return String(value);
|
|
23
|
+
}
|
|
24
|
+
async function callOptionalElementMethod(element, methodName, fallback, ...args) {
|
|
25
|
+
const method = Reflect.get(element, methodName);
|
|
26
|
+
if (typeof method !== "function") return fallback;
|
|
27
|
+
try {
|
|
28
|
+
return await method.apply(element, args);
|
|
29
|
+
} catch {
|
|
30
|
+
return fallback;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function readDevtoolsElementSnapshot(element, selector, attributeNames = [], styleNames = []) {
|
|
34
|
+
const [text, value, offset, size, wxml, outerWxml] = await Promise.all([
|
|
35
|
+
callOptionalElementMethod(element, "text", null),
|
|
36
|
+
callOptionalElementMethod(element, "value", void 0),
|
|
37
|
+
callOptionalElementMethod(element, "offset", null),
|
|
38
|
+
callOptionalElementMethod(element, "size", null),
|
|
39
|
+
callOptionalElementMethod(element, "wxml", null),
|
|
40
|
+
callOptionalElementMethod(element, "outerWxml", null)
|
|
41
|
+
]);
|
|
42
|
+
const attributes = Object.fromEntries(await Promise.all(attributeNames.map(async (name) => {
|
|
43
|
+
return [name, await callOptionalElementMethod(element, "attribute", null, name)];
|
|
44
|
+
})));
|
|
45
|
+
const styles = Object.fromEntries(await Promise.all(styleNames.map(async (name) => {
|
|
46
|
+
return [name, await callOptionalElementMethod(element, "style", null, name)];
|
|
47
|
+
})));
|
|
48
|
+
return {
|
|
49
|
+
selector,
|
|
50
|
+
tagName: element.tagName ?? "",
|
|
51
|
+
text: typeof text === "string" ? text : null,
|
|
52
|
+
value: toDevtoolsSerializableValue(value),
|
|
53
|
+
attributes,
|
|
54
|
+
styles,
|
|
55
|
+
offset: toDevtoolsSerializableValue(offset),
|
|
56
|
+
size: toDevtoolsSerializableValue(size),
|
|
57
|
+
wxml: typeof wxml === "string" ? wxml : null,
|
|
58
|
+
outerWxml: typeof outerWxml === "string" ? outerWxml : null
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { readDevtoolsElementSnapshot, resolveDevtoolsProjectPath, resolveDevtoolsWorkspacePath, toDevtoolsSerializableValue };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weapp-vite/devtools-runtime",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.1",
|
|
5
5
|
"description": "Shared WeChat DevTools runtime automation helpers for weapp-vite packages",
|
|
6
6
|
"author": "ice breaker <1324318532@qq.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -18,6 +18,10 @@
|
|
|
18
18
|
".": {
|
|
19
19
|
"types": "./dist/index.d.ts",
|
|
20
20
|
"import": "./dist/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./mcp": {
|
|
23
|
+
"types": "./dist/mcp.d.ts",
|
|
24
|
+
"import": "./dist/mcp.js"
|
|
21
25
|
}
|
|
22
26
|
},
|
|
23
27
|
"main": "./dist/index.js",
|
|
@@ -34,7 +38,7 @@
|
|
|
34
38
|
"registry": "https://registry.npmjs.org/"
|
|
35
39
|
},
|
|
36
40
|
"dependencies": {
|
|
37
|
-
"@weapp-vite/miniprogram-automator": "1.1.
|
|
41
|
+
"@weapp-vite/miniprogram-automator": "1.1.2"
|
|
38
42
|
},
|
|
39
43
|
"scripts": {
|
|
40
44
|
"dev": "tsdown -w --sourcemap",
|