nautogui 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.
Files changed (101) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +212 -0
  3. package/README.zh-CN.md +212 -0
  4. package/bin/mouseinfo.mjs +8 -0
  5. package/dist/backend.d.ts +59 -0
  6. package/dist/backend.d.ts.map +1 -0
  7. package/dist/backend.js +210 -0
  8. package/dist/backend.js.map +1 -0
  9. package/dist/config.d.ts +38 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +60 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/constants.d.ts +16 -0
  14. package/dist/constants.d.ts.map +1 -0
  15. package/dist/constants.js +209 -0
  16. package/dist/constants.js.map +1 -0
  17. package/dist/coords.d.ts +12 -0
  18. package/dist/coords.d.ts.map +1 -0
  19. package/dist/coords.js +46 -0
  20. package/dist/coords.js.map +1 -0
  21. package/dist/display-mouse.d.ts +3 -0
  22. package/dist/display-mouse.d.ts.map +1 -0
  23. package/dist/display-mouse.js +25 -0
  24. package/dist/display-mouse.js.map +1 -0
  25. package/dist/easing-all.d.ts +77 -0
  26. package/dist/easing-all.d.ts.map +1 -0
  27. package/dist/easing-all.js +231 -0
  28. package/dist/easing-all.js.map +1 -0
  29. package/dist/easing-base.d.ts +8 -0
  30. package/dist/easing-base.d.ts.map +1 -0
  31. package/dist/easing-base.js +3 -0
  32. package/dist/easing-base.js.map +1 -0
  33. package/dist/easing.d.ts +9 -0
  34. package/dist/easing.d.ts.map +1 -0
  35. package/dist/easing.js +15 -0
  36. package/dist/easing.js.map +1 -0
  37. package/dist/exceptions.d.ts +18 -0
  38. package/dist/exceptions.d.ts.map +1 -0
  39. package/dist/exceptions.js +30 -0
  40. package/dist/exceptions.js.map +1 -0
  41. package/dist/hold-context.d.ts +10 -0
  42. package/dist/hold-context.d.ts.map +1 -0
  43. package/dist/hold-context.js +31 -0
  44. package/dist/hold-context.js.map +1 -0
  45. package/dist/index.d.ts +104 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +362 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/keyboard-utils.d.ts +7 -0
  50. package/dist/keyboard-utils.d.ts.map +1 -0
  51. package/dist/keyboard-utils.js +33 -0
  52. package/dist/keyboard-utils.js.map +1 -0
  53. package/dist/locate-haystack.d.ts +14 -0
  54. package/dist/locate-haystack.d.ts.map +1 -0
  55. package/dist/locate-haystack.js +90 -0
  56. package/dist/locate-haystack.js.map +1 -0
  57. package/dist/locate-window.d.ts +12 -0
  58. package/dist/locate-window.d.ts.map +1 -0
  59. package/dist/locate-window.js +78 -0
  60. package/dist/locate-window.js.map +1 -0
  61. package/dist/log-screenshots.d.ts +3 -0
  62. package/dist/log-screenshots.d.ts.map +1 -0
  63. package/dist/log-screenshots.js +32 -0
  64. package/dist/log-screenshots.js.map +1 -0
  65. package/dist/mouseinfo.d.ts +8 -0
  66. package/dist/mouseinfo.d.ts.map +1 -0
  67. package/dist/mouseinfo.js +83 -0
  68. package/dist/mouseinfo.js.map +1 -0
  69. package/dist/msgbox.d.ts +17 -0
  70. package/dist/msgbox.d.ts.map +1 -0
  71. package/dist/msgbox.js +77 -0
  72. package/dist/msgbox.js.map +1 -0
  73. package/dist/native-msgbox.d.ts +13 -0
  74. package/dist/native-msgbox.d.ts.map +1 -0
  75. package/dist/native-msgbox.js +222 -0
  76. package/dist/native-msgbox.js.map +1 -0
  77. package/dist/native-utils.d.ts +8 -0
  78. package/dist/native-utils.d.ts.map +1 -0
  79. package/dist/native-utils.js +24 -0
  80. package/dist/native-utils.js.map +1 -0
  81. package/dist/pixel.d.ts +9 -0
  82. package/dist/pixel.d.ts.map +1 -0
  83. package/dist/pixel.js +14 -0
  84. package/dist/pixel.js.map +1 -0
  85. package/dist/region.d.ts +14 -0
  86. package/dist/region.d.ts.map +1 -0
  87. package/dist/region.js +13 -0
  88. package/dist/region.js.map +1 -0
  89. package/dist/run.d.ts +9 -0
  90. package/dist/run.d.ts.map +1 -0
  91. package/dist/run.js +189 -0
  92. package/dist/run.js.map +1 -0
  93. package/dist/runtime.d.ts +12 -0
  94. package/dist/runtime.d.ts.map +1 -0
  95. package/dist/runtime.js +53 -0
  96. package/dist/runtime.js.map +1 -0
  97. package/dist/windows.d.ts +30 -0
  98. package/dist/windows.d.ts.map +1 -0
  99. package/dist/windows.js +62 -0
  100. package/dist/windows.js.map +1 -0
  101. package/package.json +63 -0
@@ -0,0 +1,9 @@
1
+ /** pixelMatchesColor */
2
+ export type PixelColorInput = {
3
+ r: number;
4
+ g: number;
5
+ b: number;
6
+ a?: number;
7
+ } | [number, number, number] | [number, number, number, number];
8
+ export declare function pixelMatchesColor(x: number, y: number, expected: PixelColorInput, tolerance?: number): Promise<boolean>;
9
+ //# sourceMappingURL=pixel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixel.d.ts","sourceRoot":"","sources":["../src/pixel.ts"],"names":[],"mappings":"AAAA,wBAAwB;AAExB,MAAM,MAAM,eAAe,GACvB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACxB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAErC,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,eAAe,EACzB,SAAS,SAAI,GACZ,OAAO,CAAC,OAAO,CAAC,CAalB"}
package/dist/pixel.js ADDED
@@ -0,0 +1,14 @@
1
+ /** pixelMatchesColor */
2
+ export async function pixelMatchesColor(x, y, expected, tolerance = 0) {
3
+ const { pixelColorAt } = await import("./backend.js");
4
+ const actual = await pixelColorAt(x, y);
5
+ const exp = Array.isArray(expected)
6
+ ? { r: expected[0], g: expected[1], b: expected[2], a: expected[3] ?? 255 }
7
+ : expected;
8
+ const ea = exp.a ?? 255;
9
+ return (Math.abs(actual.r - exp.r) <= tolerance &&
10
+ Math.abs(actual.g - exp.g) <= tolerance &&
11
+ Math.abs(actual.b - exp.b) <= tolerance &&
12
+ Math.abs(actual.a - ea) <= tolerance);
13
+ }
14
+ //# sourceMappingURL=pixel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixel.js","sourceRoot":"","sources":["../src/pixel.ts"],"names":[],"mappings":"AAAA,wBAAwB;AAOxB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,CAAS,EACT,CAAS,EACT,QAAyB,EACzB,SAAS,GAAG,CAAC;IAEb,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QACjC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;QAC3E,CAAC,CAAC,QAAQ,CAAC;IACb,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;IACxB,OAAO,CACL,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS;QACvC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS;QACvC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS;QACvC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,SAAS,CACrC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** Screen region box (left, top, width, height). */
2
+ export type Box = {
3
+ left: number;
4
+ top: number;
5
+ width: number;
6
+ height: number;
7
+ };
8
+ /** Center point of a box (center). */
9
+ export declare function center(box: Box): {
10
+ x: number;
11
+ y: number;
12
+ };
13
+ export declare function isImagePath(target: string): boolean;
14
+ //# sourceMappingURL=region.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region.d.ts","sourceRoot":"","sources":["../src/region.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,MAAM,MAAM,GAAG,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,sCAAsC;AACtC,wBAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAKzD;AAID,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD"}
package/dist/region.js ADDED
@@ -0,0 +1,13 @@
1
+ /** Screen region box (left, top, width, height). */
2
+ /** Center point of a box (center). */
3
+ export function center(box) {
4
+ return {
5
+ x: Math.round(box.left + box.width / 2),
6
+ y: Math.round(box.top + box.height / 2),
7
+ };
8
+ }
9
+ const IMAGE_EXT = /\.(png|jpe?g|bmp|gif|webp)$/i;
10
+ export function isImagePath(target) {
11
+ return IMAGE_EXT.test(target.trim());
12
+ }
13
+ //# sourceMappingURL=region.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region.js","sourceRoot":"","sources":["../src/region.ts"],"names":[],"mappings":"AAAA,oDAAoD;AASpD,sCAAsC;AACtC,MAAM,UAAU,MAAM,CAAC,GAAQ;IAC7B,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;QACvC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,8BAA8B,CAAC;AAEjD,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC"}
package/dist/run.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `run()` mini-language interpreter.
3
+ */
4
+ declare function tokenize(commandStr: string): string[];
5
+ /** Tokenizer for run() — exported for tests. */
6
+ export { tokenize as tokenizeRunCommand };
7
+ /** run(commandStr) */
8
+ export declare function run(commandStr: string): Promise<void>;
9
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,iBAAS,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAyE9C;AA0FD,gDAAgD;AAChD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,CAAC;AAE1C,sBAAsB;AACtB,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3D"}
package/dist/run.js ADDED
@@ -0,0 +1,189 @@
1
+ /**
2
+ * `run()` mini-language interpreter.
3
+ */
4
+ import { PRIMARY } from "./constants.js";
5
+ import { configureNautogui, PAUSE_SEC } from "./config.js";
6
+ let ssCount = 0;
7
+ function tokenize(commandStr) {
8
+ const tokens = [];
9
+ let i = 0;
10
+ const s = commandStr.replace(/\s+/g, "");
11
+ while (i < s.length) {
12
+ if (s[i] === "'") {
13
+ const end = s.indexOf("'", i + 1);
14
+ if (end < 0)
15
+ throw new Error("Unclosed quote in run() command");
16
+ tokens.push(s.slice(i, end + 1));
17
+ i = end + 1;
18
+ continue;
19
+ }
20
+ const two = s.slice(i, i + 2);
21
+ if (two === "su" || two === "sd" || two === "ss") {
22
+ tokens.push(two);
23
+ i += 2;
24
+ continue;
25
+ }
26
+ const ch = s[i];
27
+ if (ch === "g" || ch === "d") {
28
+ tokens.push(ch);
29
+ i++;
30
+ const numMatch = /^([+\-]?\d+)/.exec(s.slice(i));
31
+ if (!numMatch)
32
+ throw new Error(`Expected number after ${ch}`);
33
+ tokens.push(numMatch[1]);
34
+ i += numMatch[1].length;
35
+ if (s[i] === ",")
36
+ i++;
37
+ const num2 = /^([+\-]?\d+)/.exec(s.slice(i));
38
+ if (!num2)
39
+ throw new Error(`Expected second number after ${ch}`);
40
+ tokens.push(num2[1]);
41
+ i += num2[1].length;
42
+ continue;
43
+ }
44
+ if (ch === "f") {
45
+ tokens.push("f");
46
+ i++;
47
+ const num = /^(\d+)/.exec(s.slice(i));
48
+ if (!num)
49
+ throw new Error("Expected repeat count after f");
50
+ tokens.push(num[1]);
51
+ i += num[1].length;
52
+ if (s[i] !== "(")
53
+ throw new Error("Expected ( after fN");
54
+ let depth = 0;
55
+ let start = i;
56
+ do {
57
+ if (s[i] === "(")
58
+ depth++;
59
+ if (s[i] === ")")
60
+ depth--;
61
+ i++;
62
+ } while (i < s.length && depth > 0);
63
+ tokens.push(s.slice(start, i));
64
+ continue;
65
+ }
66
+ if (ch === "s" || ch === "p") {
67
+ tokens.push(ch);
68
+ i++;
69
+ const num = /^(\d+(?:\.\d+)?)/.exec(s.slice(i));
70
+ if (!num)
71
+ throw new Error(`Expected number after ${ch}`);
72
+ tokens.push(num[1]);
73
+ i += num[1].length;
74
+ continue;
75
+ }
76
+ if ("clmra".includes(ch)) {
77
+ tokens.push(ch);
78
+ i++;
79
+ continue;
80
+ }
81
+ if (ch === "k" || ch === "w" || ch === "h") {
82
+ tokens.push(ch);
83
+ i++;
84
+ continue;
85
+ }
86
+ throw new Error(`Invalid run() token at: ${s.slice(i)}`);
87
+ }
88
+ return tokens;
89
+ }
90
+ async function runList(commandList) {
91
+ const api = await import("./index.js");
92
+ let i = 0;
93
+ while (i < commandList.length) {
94
+ const command = commandList[i];
95
+ switch (command) {
96
+ case "c":
97
+ await api.click(undefined, undefined, { button: PRIMARY });
98
+ break;
99
+ case "l":
100
+ await api.click(undefined, undefined, { button: "left" });
101
+ break;
102
+ case "m":
103
+ await api.click(undefined, undefined, { button: "middle" });
104
+ break;
105
+ case "r":
106
+ await api.click(undefined, undefined, { button: "right" });
107
+ break;
108
+ case "su":
109
+ await api.scroll(1);
110
+ break;
111
+ case "sd":
112
+ await api.scroll(-1);
113
+ break;
114
+ case "ss": {
115
+ ssCount += 1;
116
+ await api.screenshot(`screenshot${ssCount}.png`);
117
+ break;
118
+ }
119
+ case "s":
120
+ await api.sleep(parseFloat(commandList[++i]));
121
+ break;
122
+ case "p": {
123
+ configureNautogui({ pauseSec: parseFloat(commandList[++i]) });
124
+ break;
125
+ }
126
+ case "g": {
127
+ const a = commandList[++i];
128
+ const b = commandList[++i];
129
+ if (a.startsWith("+") || a.startsWith("-")) {
130
+ await api.move(parseInt(a, 10), parseInt(b, 10));
131
+ }
132
+ else {
133
+ await api.moveTo(parseInt(a, 10), parseInt(b, 10));
134
+ }
135
+ break;
136
+ }
137
+ case "d": {
138
+ const a = commandList[++i];
139
+ const b = commandList[++i];
140
+ if (a.startsWith("+") || a.startsWith("-")) {
141
+ await api.drag(parseInt(a, 10), parseInt(b, 10));
142
+ }
143
+ else {
144
+ await api.dragTo(parseInt(a, 10), parseInt(b, 10));
145
+ }
146
+ break;
147
+ }
148
+ case "k":
149
+ await api.press(commandList[++i].slice(1, -1));
150
+ break;
151
+ case "w":
152
+ await api.write(commandList[++i].slice(1, -1));
153
+ break;
154
+ case "h":
155
+ await api.hotkey(...commandList[++i]
156
+ .slice(1, -1)
157
+ .replace(/\s/g, "")
158
+ .split(","));
159
+ break;
160
+ case "a":
161
+ await api.alert(commandList[++i].slice(1, -1));
162
+ break;
163
+ case "f": {
164
+ const n = parseInt(commandList[++i], 10);
165
+ const inner = commandList[++i].slice(1, -1);
166
+ for (let j = 0; j < n; j++) {
167
+ await run(inner);
168
+ }
169
+ break;
170
+ }
171
+ default:
172
+ throw new Error(`Unknown run() command: ${command}`);
173
+ }
174
+ i++;
175
+ }
176
+ }
177
+ /** Tokenizer for run() — exported for tests. */
178
+ export { tokenize as tokenizeRunCommand };
179
+ /** run(commandStr) */
180
+ export async function run(commandStr) {
181
+ const originalPause = PAUSE_SEC;
182
+ try {
183
+ await runList(tokenize(commandStr));
184
+ }
185
+ finally {
186
+ configureNautogui({ pauseSec: originalPause });
187
+ }
188
+ }
189
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** sleep, countdown, failSafeCheck, getInfo, printInfo */
2
+ /** sleep */
3
+ export declare function sleep(seconds: number): Promise<void>;
4
+ /** countdown */
5
+ export declare function countdown(seconds: number): Promise<void>;
6
+ /** failSafeCheck */
7
+ export declare function failSafeCheck(): Promise<void>;
8
+ /** getInfo */
9
+ export declare function getInfo(): Promise<Record<string, unknown>>;
10
+ /** printInfo */
11
+ export declare function printInfo(dontPrint?: boolean): Promise<string>;
12
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAY1D,YAAY;AACZ,wBAAsB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,gBAAgB;AAChB,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9D;AAED,oBAAoB;AACpB,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CASnD;AAED,cAAc;AACd,wBAAsB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWhE;AAED,gBAAgB;AAChB,wBAAsB,SAAS,CAAC,SAAS,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAOlE"}
@@ -0,0 +1,53 @@
1
+ /** sleep, countdown, failSafeCheck, getInfo, printInfo */
2
+ import { FAILSAFE, FAILSAFE_POINTS, PAUSE_SEC, refreshFailSafePoints, } from "./config.js";
3
+ import { FailSafeException } from "./exceptions.js";
4
+ import { mousePosition, sleepMs } from "./backend.js";
5
+ import { VERSION } from "./constants.js";
6
+ /** sleep */
7
+ export async function sleep(seconds) {
8
+ await sleepMs(Math.max(0, seconds) * 1000);
9
+ }
10
+ /** countdown */
11
+ export async function countdown(seconds) {
12
+ for (let i = Math.floor(seconds); i > 0; i--) {
13
+ process.stdout.write(`${i} `);
14
+ await sleep(1);
15
+ }
16
+ process.stdout.write("\n");
17
+ }
18
+ /** failSafeCheck */
19
+ export async function failSafeCheck() {
20
+ if (!FAILSAFE)
21
+ return;
22
+ await refreshFailSafePoints();
23
+ const { x, y } = await mousePosition();
24
+ for (const p of FAILSAFE_POINTS) {
25
+ if (x === p.x && y === p.y) {
26
+ throw new FailSafeException();
27
+ }
28
+ }
29
+ }
30
+ /** getInfo */
31
+ export async function getInfo() {
32
+ const { screenSize } = await import("./backend.js");
33
+ const size = await screenSize();
34
+ return {
35
+ version: VERSION,
36
+ pause: PAUSE_SEC,
37
+ failsafe: FAILSAFE,
38
+ screenWidth: size.width,
39
+ screenHeight: size.height,
40
+ platform: process.platform,
41
+ };
42
+ }
43
+ /** printInfo */
44
+ export async function printInfo(dontPrint = false) {
45
+ const info = await getInfo();
46
+ const text = Object.entries(info)
47
+ .map(([k, v]) => `${k}: ${v}`)
48
+ .join("\n");
49
+ if (!dontPrint)
50
+ console.log(text);
51
+ return text;
52
+ }
53
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,EACL,QAAQ,EACR,eAAe,EACf,SAAS,EACT,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,YAAY;AACZ,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAe;IACzC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,oBAAoB;AACpB,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,MAAM,qBAAqB,EAAE,CAAC;IAC9B,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,aAAa,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,iBAAiB,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC;AAED,cAAc;AACd,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,UAAU,EAAE,CAAC;IAChC,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,IAAI,CAAC,KAAK;QACvB,YAAY,EAAE,IAAI,CAAC,MAAM;QACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,SAAS,GAAG,KAAK;IAC/C,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,30 @@
1
+ /** pygetwindow-style APIs via @nut-tree/nut-js (cross-platform). */
2
+ export type WindowInfo = {
3
+ title: string;
4
+ region: {
5
+ left: number;
6
+ top: number;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ focus: () => Promise<boolean>;
11
+ minimize: () => Promise<boolean>;
12
+ restore: () => Promise<boolean>;
13
+ };
14
+ /** getActiveWindow */
15
+ export declare function getActiveWindow(): Promise<WindowInfo>;
16
+ /** getAllWindows */
17
+ export declare function getAllWindows(): Promise<WindowInfo[]>;
18
+ /** getAllTitles */
19
+ export declare function getAllTitles(): Promise<string[]>;
20
+ /** getWindowsWithTitle */
21
+ export declare function getWindowsWithTitle(title: string): Promise<WindowInfo[]>;
22
+ /** getActiveWindowTitle */
23
+ export declare function getActiveWindowTitle(): Promise<string>;
24
+ /** getWindowsAt(x, y) — best-effort via region hit test. */
25
+ export declare function getWindowsAt(x: number, y: number): Promise<WindowInfo[]>;
26
+ /** Placeholder — pygetwindow.Window not fully mirrored. */
27
+ export declare class Window {
28
+ constructor();
29
+ }
30
+ //# sourceMappingURL=windows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../src/windows.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAKpE,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAuBF,sBAAsB;AACtB,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,CAG3D;AAED,oBAAoB;AACpB,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAI3D;AAED,mBAAmB;AACnB,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGtD;AAED,0BAA0B;AAC1B,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAG9E;AAED,2BAA2B;AAC3B,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED,4DAA4D;AAC5D,wBAAsB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAM9E;AAED,2DAA2D;AAC3D,qBAAa,MAAM;;CAMlB"}
@@ -0,0 +1,62 @@
1
+ /** pygetwindow-style APIs via @nut-tree/nut-js (cross-platform). */
2
+ import { getNut } from "./backend.js";
3
+ import { NautoguiException } from "./exceptions.js";
4
+ async function wrapWindow(w) {
5
+ const region = await w.region;
6
+ return {
7
+ title: await w.title,
8
+ region: {
9
+ left: region.left,
10
+ top: region.top,
11
+ width: region.width,
12
+ height: region.height,
13
+ },
14
+ focus: () => w.focus(),
15
+ minimize: () => w.minimize(),
16
+ restore: () => w.restore(),
17
+ };
18
+ }
19
+ async function nutWindows() {
20
+ const n = await getNut();
21
+ return n;
22
+ }
23
+ /** getActiveWindow */
24
+ export async function getActiveWindow() {
25
+ const n = await nutWindows();
26
+ return wrapWindow(await n.getActiveWindow());
27
+ }
28
+ /** getAllWindows */
29
+ export async function getAllWindows() {
30
+ const n = await nutWindows();
31
+ const wins = await n.getWindows();
32
+ return Promise.all(wins.map(wrapWindow));
33
+ }
34
+ /** getAllTitles */
35
+ export async function getAllTitles() {
36
+ const wins = await getAllWindows();
37
+ return wins.map((w) => w.title);
38
+ }
39
+ /** getWindowsWithTitle */
40
+ export async function getWindowsWithTitle(title) {
41
+ const wins = await getAllWindows();
42
+ return wins.filter((w) => w.title.includes(title));
43
+ }
44
+ /** getActiveWindowTitle */
45
+ export async function getActiveWindowTitle() {
46
+ return (await getActiveWindow()).title;
47
+ }
48
+ /** getWindowsAt(x, y) — best-effort via region hit test. */
49
+ export async function getWindowsAt(x, y) {
50
+ const wins = await getAllWindows();
51
+ return wins.filter((w) => {
52
+ const r = w.region;
53
+ return x >= r.left && x < r.left + r.width && y >= r.top && y < r.top + r.height;
54
+ });
55
+ }
56
+ /** Placeholder — pygetwindow.Window not fully mirrored. */
57
+ export class Window {
58
+ constructor() {
59
+ throw new NautoguiException("Use getActiveWindow() / getAllWindows() instead of Window constructor");
60
+ }
61
+ }
62
+ //# sourceMappingURL=windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.js","sourceRoot":"","sources":["../src/windows.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAUpD,KAAK,UAAU,UAAU,CAAC,CAAoC;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,CAAC,KAAK;QACpB,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE;QACtB,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;KAC3B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,CAAC,GAAG,MAAM,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,sBAAsB;AACtB,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;IAC7B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,oBAAoB;AACpB,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;IAClC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,mBAAmB;AACnB,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,0BAA0B;AAC1B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAa;IACrD,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,2BAA2B;AAC3B,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,OAAO,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC;AACzC,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,CAAS,EAAE,CAAS;IACrD,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,2DAA2D;AAC3D,MAAM,OAAO,MAAM;IACjB;QACE,MAAM,IAAI,iBAAiB,CACzB,uEAAuE,CACxE,CAAC;IACJ,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "nautogui",
3
+ "version": "0.3.1",
4
+ "description": "Cross-platform GUI automation — OS mouse, keyboard, screenshot, image template locate",
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "bin": {
8
+ "nautogui-mouseinfo": "./bin/mouseinfo.mjs"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js",
16
+ "default": "./dist/index.js"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist",
21
+ "bin",
22
+ "LICENSE",
23
+ "README.md",
24
+ "README.zh-CN.md"
25
+ ],
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/appolloqin/nautogui.git"
32
+ },
33
+ "homepage": "https://github.com/appolloqin/nautogui#readme",
34
+ "bugs": {
35
+ "url": "https://github.com/appolloqin/nautogui/issues"
36
+ },
37
+ "scripts": {
38
+ "build": "tsc",
39
+ "prepack": "npm run build",
40
+ "prepublishOnly": "npm run test",
41
+ "fixtures": "node scripts/generate-fixtures.mjs",
42
+ "test": "npm run build && npm run fixtures && node --test tests/*.test.mjs"
43
+ },
44
+ "keywords": [
45
+ "automation",
46
+ "mouse",
47
+ "keyboard",
48
+ "screenshot",
49
+ "nut-js",
50
+ "computer-use"
51
+ ],
52
+ "engines": {
53
+ "node": ">=20.0.0"
54
+ },
55
+ "dependencies": {
56
+ "@nut-tree/nut-js": "^4.2.0",
57
+ "sharp": "^0.33.5"
58
+ },
59
+ "devDependencies": {
60
+ "@types/node": "^22.0.0",
61
+ "typescript": "^5.7.0"
62
+ }
63
+ }