@yume-chan/android-bin 0.0.20 → 0.0.22

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 (76) hide show
  1. package/CHANGELOG.json +54 -0
  2. package/CHANGELOG.md +25 -1
  3. package/LICENSE +21 -0
  4. package/README.md +40 -14
  5. package/esm/am.d.ts +17 -0
  6. package/esm/am.d.ts.map +1 -0
  7. package/esm/am.js +42 -0
  8. package/esm/am.js.map +1 -0
  9. package/esm/bu.d.ts +20 -7
  10. package/esm/bu.d.ts.map +1 -1
  11. package/esm/bu.js +47 -8
  12. package/esm/bu.js.map +1 -1
  13. package/esm/bug-report.d.ts +82 -21
  14. package/esm/bug-report.d.ts.map +1 -1
  15. package/esm/bug-report.js +187 -53
  16. package/esm/bug-report.js.map +1 -1
  17. package/esm/cmd.d.ts +4 -6
  18. package/esm/cmd.d.ts.map +1 -1
  19. package/esm/cmd.js +36 -21
  20. package/esm/cmd.js.map +1 -1
  21. package/esm/demo-mode.d.ts +3 -3
  22. package/esm/demo-mode.d.ts.map +1 -1
  23. package/esm/demo-mode.js +14 -15
  24. package/esm/demo-mode.js.map +1 -1
  25. package/esm/dumpsys.d.ts +39 -0
  26. package/esm/dumpsys.d.ts.map +1 -1
  27. package/esm/dumpsys.js +111 -0
  28. package/esm/dumpsys.js.map +1 -1
  29. package/esm/index.d.ts +6 -0
  30. package/esm/index.d.ts.map +1 -1
  31. package/esm/index.js +6 -0
  32. package/esm/index.js.map +1 -1
  33. package/esm/intent.d.ts +10 -0
  34. package/esm/intent.d.ts.map +1 -0
  35. package/esm/intent.js +51 -0
  36. package/esm/intent.js.map +1 -0
  37. package/esm/logcat.d.ts +1 -0
  38. package/esm/logcat.d.ts.map +1 -1
  39. package/esm/logcat.js +20 -18
  40. package/esm/logcat.js.map +1 -1
  41. package/esm/overlay-display.d.ts +20 -3
  42. package/esm/overlay-display.d.ts.map +1 -1
  43. package/esm/overlay-display.js +34 -61
  44. package/esm/overlay-display.js.map +1 -1
  45. package/esm/pm.d.ts +42 -5
  46. package/esm/pm.d.ts.map +1 -1
  47. package/esm/pm.js +164 -46
  48. package/esm/pm.js.map +1 -1
  49. package/esm/settings.d.ts +22 -8
  50. package/esm/settings.d.ts.map +1 -1
  51. package/esm/settings.js +50 -25
  52. package/esm/settings.js.map +1 -1
  53. package/esm/string-format.d.ts +40 -0
  54. package/esm/string-format.d.ts.map +1 -0
  55. package/esm/string-format.js +153 -0
  56. package/esm/string-format.js.map +1 -0
  57. package/esm/utils.d.ts +4 -0
  58. package/esm/utils.d.ts.map +1 -0
  59. package/esm/utils.js +23 -0
  60. package/esm/utils.js.map +1 -0
  61. package/package.json +13 -8
  62. package/src/am.ts +69 -0
  63. package/src/bu.ts +68 -14
  64. package/src/bug-report.ts +234 -68
  65. package/src/cmd.ts +64 -30
  66. package/src/demo-mode.ts +47 -43
  67. package/src/dumpsys.ts +129 -0
  68. package/src/index.ts +6 -0
  69. package/src/intent.ts +63 -0
  70. package/src/logcat.ts +45 -42
  71. package/src/overlay-display.ts +82 -85
  72. package/src/pm.ts +274 -61
  73. package/src/settings.ts +94 -43
  74. package/src/string-format.ts +199 -0
  75. package/src/utils.ts +29 -0
  76. package/tsconfig.build.tsbuildinfo +1 -1
package/esm/pm.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import type { Adb } from "@yume-chan/adb";
2
2
  import { AdbCommandBase } from "@yume-chan/adb";
3
3
  import type { Consumable, ReadableStream } from "@yume-chan/stream-extra";
4
+ import type { IntentBuilder } from "./intent.js";
5
+ import type { SingleUserOrAll } from "./utils.js";
4
6
  export declare enum PackageManagerInstallLocation {
5
7
  Auto = 0,
6
8
  InternalOnly = 1,
@@ -81,7 +83,7 @@ export interface PackageManagerInstallOptions {
81
83
  /**
82
84
  * `--user`
83
85
  */
84
- userId: number;
86
+ user: SingleUserOrAll;
85
87
  /**
86
88
  * `--install-location`
87
89
  */
@@ -128,12 +130,47 @@ export interface PackageManagerInstallOptions {
128
130
  bypassLowTargetSdkBlock: boolean;
129
131
  }
130
132
  export declare const PACKAGE_MANAGER_INSTALL_OPTIONS_MAP: Record<keyof PackageManagerInstallOptions, string>;
133
+ export interface PackageManagerListPackagesOptions {
134
+ listDisabled: boolean;
135
+ listEnabled: boolean;
136
+ showSourceDir: boolean;
137
+ showInstaller: boolean;
138
+ listSystem: boolean;
139
+ showUid: boolean;
140
+ listThirdParty: boolean;
141
+ showVersionCode: boolean;
142
+ listApexOnly: boolean;
143
+ user: SingleUserOrAll;
144
+ uid: number;
145
+ filter: string;
146
+ }
147
+ export declare const PACKAGE_MANAGER_LIST_PACKAGES_OPTIONS_MAP: Record<keyof PackageManagerListPackagesOptions, string>;
148
+ export interface PackageManagerListPackagesResult {
149
+ packageName: string;
150
+ sourceDir?: string | undefined;
151
+ versionCode?: number | undefined;
152
+ installer?: string | undefined;
153
+ uid?: number | undefined;
154
+ }
155
+ export interface PackageManagerUninstallOptions {
156
+ keepData: boolean;
157
+ user: SingleUserOrAll;
158
+ versionCode: number;
159
+ splitNames: string[];
160
+ }
161
+ export interface PackageManagerResolveActivityOptions {
162
+ user?: SingleUserOrAll;
163
+ intent: IntentBuilder;
164
+ }
131
165
  export declare class PackageManager extends AdbCommandBase {
132
- private _cmd;
166
+ #private;
133
167
  constructor(adb: Adb);
134
- private buildInstallArgs;
135
168
  install(apks: string[], options?: Partial<PackageManagerInstallOptions>): Promise<string>;
136
- pushAndInstallStream(stream: ReadableStream<Consumable<Uint8Array>>, options?: Partial<PackageManagerInstallOptions>): Promise<ReadableStream<string>>;
137
- installStream(size: number, stream: ReadableStream<Consumable<Uint8Array>>, options?: Partial<PackageManagerInstallOptions>): Promise<ReadableStream<string>>;
169
+ pushAndInstallStream(stream: ReadableStream<Consumable<Uint8Array>>, options?: Partial<PackageManagerInstallOptions>): Promise<void>;
170
+ installStream(size: number, stream: ReadableStream<Consumable<Uint8Array>>, options?: Partial<PackageManagerInstallOptions>): Promise<void>;
171
+ static parsePackageListItem(line: string): PackageManagerListPackagesResult;
172
+ listPackages(options?: Partial<PackageManagerListPackagesOptions>): AsyncGenerator<PackageManagerListPackagesResult, void, void>;
173
+ uninstall(packageName: string, options?: Partial<PackageManagerUninstallOptions>): Promise<void>;
174
+ resolveActivity(options: PackageManagerResolveActivityOptions): Promise<string | undefined>;
138
175
  }
139
176
  //# sourceMappingURL=pm.d.ts.map
package/esm/pm.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pm.d.ts","sourceRoot":"","sources":["../src/pm.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACH,cAAc,EAGjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAK1E,oBAAY,6BAA6B;IACrC,IAAI,IAAA;IACJ,YAAY,IAAA;IACZ,cAAc,IAAA;CACjB;AAED,oBAAY,2BAA2B;IACnC,OAAO,IAAA;IACP,WAAW,IAAA;IACX,aAAa,IAAA;IACb,WAAW,IAAA;IACX,WAAW,IAAA;CACd;AAGD,MAAM,WAAW,4BAA4B;IACzC;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,uBAAuB,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,mBAAmB,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,eAAe,EAAE,6BAA6B,CAAC;IAC/C;;OAEG;IACH,aAAa,EAAE,2BAA2B,CAAC;IAC3C;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,uBAAuB,EAAE,OAAO,CAAC;CACpC;AAED,eAAO,MAAM,mCAAmC,EAAE,MAAM,CACpD,MAAM,4BAA4B,EAClC,MAAM,CA8BT,CAAC;AAEF,qBAAa,cAAe,SAAQ,cAAc;IAC9C,OAAO,CAAC,IAAI,CAAM;gBAEC,GAAG,EAAE,GAAG;IAK3B,OAAO,CAAC,gBAAgB;IA4BX,OAAO,CAChB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,OAAO,CAAC,4BAA4B,CAAC,GAChD,OAAO,CAAC,MAAM,CAAC;IAOL,oBAAoB,CAC7B,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAC9C,OAAO,CAAC,EAAE,OAAO,CAAC,4BAA4B,CAAC,GAChD,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IA6BrB,aAAa,CACtB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAC9C,OAAO,CAAC,EAAE,OAAO,CAAC,4BAA4B,CAAC,GAChD,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;CAmBrC"}
1
+ {"version":3,"file":"pm.d.ts","sourceRoot":"","sources":["../src/pm.ts"],"names":[],"mappings":"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"}
package/esm/pm.js CHANGED
@@ -1,15 +1,17 @@
1
1
  // cspell:ignore dont
2
2
  // cspell:ignore instantapp
3
3
  // cspell:ignore apks
4
+ // cspell:ignore versioncode
4
5
  import { AdbCommandBase, AdbSubprocessNoneProtocol, escapeArg, } from "@yume-chan/adb";
5
- import { DecodeUtf8Stream, WrapReadableStream } from "@yume-chan/stream-extra";
6
+ import { ConcatStringStream, DecodeUtf8Stream, SplitStringStream, } from "@yume-chan/stream-extra";
6
7
  import { Cmd } from "./cmd.js";
8
+ import { buildArguments } from "./utils.js";
7
9
  export var PackageManagerInstallLocation;
8
10
  (function (PackageManagerInstallLocation) {
9
11
  PackageManagerInstallLocation[PackageManagerInstallLocation["Auto"] = 0] = "Auto";
10
12
  PackageManagerInstallLocation[PackageManagerInstallLocation["InternalOnly"] = 1] = "InternalOnly";
11
13
  PackageManagerInstallLocation[PackageManagerInstallLocation["PreferExternal"] = 2] = "PreferExternal";
12
- })(PackageManagerInstallLocation = PackageManagerInstallLocation || (PackageManagerInstallLocation = {}));
14
+ })(PackageManagerInstallLocation || (PackageManagerInstallLocation = {}));
13
15
  export var PackageManagerInstallReason;
14
16
  (function (PackageManagerInstallReason) {
15
17
  PackageManagerInstallReason[PackageManagerInstallReason["Unknown"] = 0] = "Unknown";
@@ -17,7 +19,7 @@ export var PackageManagerInstallReason;
17
19
  PackageManagerInstallReason[PackageManagerInstallReason["DeviceRestore"] = 2] = "DeviceRestore";
18
20
  PackageManagerInstallReason[PackageManagerInstallReason["DeviceSetup"] = 3] = "DeviceSetup";
19
21
  PackageManagerInstallReason[PackageManagerInstallReason["UserRequest"] = 4] = "UserRequest";
20
- })(PackageManagerInstallReason = PackageManagerInstallReason || (PackageManagerInstallReason = {}));
22
+ })(PackageManagerInstallReason || (PackageManagerInstallReason = {}));
21
23
  export const PACKAGE_MANAGER_INSTALL_OPTIONS_MAP = {
22
24
  skipExisting: "-R",
23
25
  installerPackageName: "-i",
@@ -35,7 +37,7 @@ export const PACKAGE_MANAGER_INSTALL_OPTIONS_MAP = {
35
37
  instantApp: "--instant",
36
38
  full: "--full",
37
39
  preload: "--preload",
38
- userId: "--user",
40
+ user: "--user",
39
41
  installLocation: "--install-location",
40
42
  installReason: "--install-reason",
41
43
  forceUuid: "--force-uuid",
@@ -48,36 +50,40 @@ export const PACKAGE_MANAGER_INSTALL_OPTIONS_MAP = {
48
50
  skipVerification: "--skip-verification",
49
51
  bypassLowTargetSdkBlock: "--bypass-low-target-sdk-block",
50
52
  };
53
+ export const PACKAGE_MANAGER_LIST_PACKAGES_OPTIONS_MAP = {
54
+ listDisabled: "-d",
55
+ listEnabled: "-e",
56
+ showSourceDir: "-f",
57
+ showInstaller: "-i",
58
+ listSystem: "-s",
59
+ showUid: "-U",
60
+ listThirdParty: "-3",
61
+ showVersionCode: "--show-versioncode",
62
+ listApexOnly: "--apex-only",
63
+ user: "--user",
64
+ uid: "--uid",
65
+ filter: "",
66
+ };
67
+ const PACKAGE_MANAGER_UNINSTALL_OPTIONS_MAP = {
68
+ keepData: "-k",
69
+ user: "--user",
70
+ versionCode: "--versionCode",
71
+ splitNames: "",
72
+ };
73
+ const PACKAGE_MANAGER_RESOLVE_ACTIVITY_OPTIONS_MAP = {
74
+ user: "--user",
75
+ };
51
76
  export class PackageManager extends AdbCommandBase {
52
- _cmd;
77
+ #cmd;
53
78
  constructor(adb) {
54
79
  super(adb);
55
- this._cmd = new Cmd(adb);
80
+ this.#cmd = new Cmd(adb);
56
81
  }
57
- buildInstallArgs(options) {
58
- const args = ["pm", "install"];
59
- if (options) {
60
- for (const [key, value] of Object.entries(options)) {
61
- if (value) {
62
- const option = PACKAGE_MANAGER_INSTALL_OPTIONS_MAP[key];
63
- if (option) {
64
- args.push(option);
65
- switch (typeof value) {
66
- case "number":
67
- args.push(value.toString());
68
- break;
69
- case "string":
70
- args.push(value);
71
- break;
72
- }
73
- }
74
- }
75
- }
76
- }
77
- return args;
82
+ #buildInstallArguments(options) {
83
+ return buildArguments(["pm", "install"], options, PACKAGE_MANAGER_INSTALL_OPTIONS_MAP);
78
84
  }
79
85
  async install(apks, options) {
80
- const args = this.buildInstallArgs(options);
86
+ const args = this.#buildInstallArguments(options);
81
87
  // WIP: old version of pm doesn't support multiple apks
82
88
  args.push(...apks);
83
89
  return await this.adb.subprocess.spawnAndWaitLegacy(args);
@@ -95,31 +101,143 @@ export class PackageManager extends AdbCommandBase {
95
101
  finally {
96
102
  await sync.dispose();
97
103
  }
98
- const args = this.buildInstallArgs(options);
104
+ // Starting from Android 7, `pm` is only a wrapper for `cmd package`,
105
+ // and `cmd package` launches faster than `pm`.
106
+ // But `cmd package` can't read `/data/local/tmp` folder due to SELinux policy,
107
+ // so installing a file must use `pm`.
108
+ const args = this.#buildInstallArguments(options);
99
109
  args.push(filePath);
100
- const process = await AdbSubprocessNoneProtocol.raw(this.adb, args.map(escapeArg).join(" "));
101
- return new WrapReadableStream({
102
- start: () => process.stdout.pipeThrough(new DecodeUtf8Stream()),
103
- close: async () => {
104
- await this.adb.rm(filePath);
105
- },
110
+ const process = await this.adb.subprocess.spawn(args.map(escapeArg), {
111
+ protocols: [AdbSubprocessNoneProtocol],
106
112
  });
113
+ const output = await process.stdout
114
+ .pipeThrough(new DecodeUtf8Stream())
115
+ .pipeThrough(new ConcatStringStream())
116
+ .then((output) => output.trim());
117
+ await this.adb.rm(filePath);
118
+ if (output !== "Success") {
119
+ throw new Error(output);
120
+ }
107
121
  }
108
122
  async installStream(size, stream, options) {
109
- if (!this._cmd.supportsCmd) {
110
- return this.pushAndInstallStream(stream, options);
123
+ // Android 7 added both `cmd` command and streaming install support,
124
+ // we can't detect whether `pm` supports streaming install,
125
+ // so we detect `cmd` command support instead.
126
+ if (!this.#cmd.supportsCmd) {
127
+ await this.pushAndInstallStream(stream, options);
128
+ return;
111
129
  }
112
- // Android 7 added `cmd package` and piping apk to stdin,
113
- // the source code suggests using `cmd package` over `pm`, but didn't say why.
114
- // However, `cmd package install` can't read `/data/local/tmp` folder due to SELinux policy,
115
- // so even ADB today is still using `pm install` for non-streaming installs.
116
- const args = this.buildInstallArgs(options);
117
- // Remove `pm` from args, final command will be `cmd package install`
130
+ const args = this.#buildInstallArguments(options);
131
+ // Remove `pm` from args, final command will starts with `cmd package install`
118
132
  args.shift();
119
133
  args.push("-S", size.toString());
120
- const process = await this._cmd.spawn(false, "package", ...args);
121
- await stream.pipeTo(process.stdin);
122
- return process.stdout.pipeThrough(new DecodeUtf8Stream());
134
+ const process = await this.#cmd.spawn(false, "package", ...args);
135
+ const output = process.stdout
136
+ .pipeThrough(new DecodeUtf8Stream())
137
+ .pipeThrough(new ConcatStringStream())
138
+ .then((output) => output.trim());
139
+ await Promise.all([
140
+ stream.pipeTo(process.stdin),
141
+ output.then((output) => {
142
+ if (output !== "Success") {
143
+ throw new Error(output);
144
+ }
145
+ }),
146
+ ]);
147
+ }
148
+ // TODO: install: support split apk formats (`adb install-multiple`)
149
+ static parsePackageListItem(line) {
150
+ line = line.substring("package:".length);
151
+ let packageName;
152
+ let sourceDir;
153
+ let versionCode;
154
+ let installer;
155
+ let uid;
156
+ // Parse backwards
157
+ let index = line.indexOf(" uid:");
158
+ if (index !== -1) {
159
+ uid = Number.parseInt(line.substring(index + " uid:".length), 10);
160
+ line = line.substring(0, index);
161
+ }
162
+ index = line.indexOf(" installer=");
163
+ if (index !== -1) {
164
+ installer = line.substring(index + " installer=".length);
165
+ line = line.substring(0, index);
166
+ }
167
+ index = line.indexOf(" versionCode:");
168
+ if (index !== -1) {
169
+ versionCode = Number.parseInt(line.substring(index + " versionCode:".length), 10);
170
+ line = line.substring(0, index);
171
+ }
172
+ // `sourceDir` may contain `=` so use `lastIndexOf`
173
+ index = line.lastIndexOf("=");
174
+ if (index !== -1) {
175
+ sourceDir = line.substring(0, index);
176
+ packageName = line.substring(index + "=".length);
177
+ }
178
+ else {
179
+ packageName = line;
180
+ }
181
+ return {
182
+ packageName,
183
+ sourceDir,
184
+ versionCode,
185
+ installer,
186
+ uid,
187
+ };
188
+ }
189
+ async #cmdOrSubprocess(args) {
190
+ if (this.#cmd.supportsCmd) {
191
+ args.shift();
192
+ return await this.#cmd.spawn(false, "package", ...args);
193
+ }
194
+ return this.adb.subprocess.spawn(args);
195
+ }
196
+ async *listPackages(options) {
197
+ const args = buildArguments(["pm", "list", "packages"], options, PACKAGE_MANAGER_LIST_PACKAGES_OPTIONS_MAP);
198
+ if (options?.filter) {
199
+ args.push(options.filter);
200
+ }
201
+ const process = await this.#cmdOrSubprocess(args);
202
+ const reader = process.stdout
203
+ .pipeThrough(new DecodeUtf8Stream())
204
+ .pipeThrough(new SplitStringStream("\n"))
205
+ .getReader();
206
+ while (true) {
207
+ const { done, value } = await reader.read();
208
+ if (done) {
209
+ break;
210
+ }
211
+ yield PackageManager.parsePackageListItem(value);
212
+ }
213
+ }
214
+ async uninstall(packageName, options) {
215
+ const args = buildArguments(["pm", "uninstall"], options, PACKAGE_MANAGER_UNINSTALL_OPTIONS_MAP);
216
+ args.push(packageName);
217
+ if (options?.splitNames) {
218
+ args.push(...options.splitNames);
219
+ }
220
+ const process = await this.#cmdOrSubprocess(args);
221
+ const output = await process.stdout
222
+ .pipeThrough(new DecodeUtf8Stream())
223
+ .pipeThrough(new ConcatStringStream())
224
+ .then((output) => output.trim());
225
+ if (output !== "Success") {
226
+ throw new Error(output);
227
+ }
228
+ }
229
+ async resolveActivity(options) {
230
+ let args = buildArguments(["pm", "resolve-activity", "--components"], options, PACKAGE_MANAGER_RESOLVE_ACTIVITY_OPTIONS_MAP);
231
+ args = args.concat(options.intent.build());
232
+ const process = await this.#cmdOrSubprocess(args);
233
+ const output = await process.stdout
234
+ .pipeThrough(new DecodeUtf8Stream())
235
+ .pipeThrough(new ConcatStringStream())
236
+ .then((output) => output.trim());
237
+ if (output === "No activity found") {
238
+ return undefined;
239
+ }
240
+ return output;
123
241
  }
124
242
  }
125
243
  //# sourceMappingURL=pm.js.map
package/esm/pm.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pm.js","sourceRoot":"","sources":["../src/pm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pm.js","sourceRoot":"","sources":["../src/pm.ts"],"names":[],"mappings":"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"}
package/esm/settings.d.ts CHANGED
@@ -1,13 +1,27 @@
1
+ import type { Adb } from "@yume-chan/adb";
1
2
  import { AdbCommandBase } from "@yume-chan/adb";
3
+ import type { SingleUser } from "./utils.js";
2
4
  export type SettingsNamespace = "system" | "secure" | "global";
3
- export type SettingsResetMode = "untrusted_defaults" | "untrusted_clear" | "trusted_defaults";
5
+ export declare enum SettingsResetMode {
6
+ UntrustedDefaults = "untrusted_defaults",
7
+ UntrustedClear = "untrusted_clear",
8
+ TrustedDefaults = "trusted_defaults"
9
+ }
10
+ export interface SettingsOptions {
11
+ user?: SingleUser;
12
+ }
13
+ export interface SettingsPutOptions extends SettingsOptions {
14
+ tag?: string;
15
+ makeDefault?: boolean;
16
+ }
4
17
  export declare class Settings extends AdbCommandBase {
5
- base(command: string, namespace: SettingsNamespace, ...args: string[]): Promise<string>;
6
- get(namespace: SettingsNamespace, key: string): Promise<string>;
7
- delete(namespace: SettingsNamespace, key: string): Promise<string>;
8
- put(namespace: SettingsNamespace, key: string, value: string, tag?: string, makeDefault?: boolean): Promise<string>;
9
- reset(namespace: SettingsNamespace, mode: SettingsResetMode): Promise<string>;
10
- reset(namespace: SettingsNamespace, packageName: string, tag?: string): Promise<string>;
11
- list(namespace: SettingsNamespace): Promise<string[]>;
18
+ #private;
19
+ constructor(adb: Adb);
20
+ base(verb: string, namespace: SettingsNamespace, options: SettingsOptions | undefined, ...args: string[]): Promise<string>;
21
+ get(namespace: SettingsNamespace, key: string, options?: SettingsOptions): Promise<string>;
22
+ delete(namespace: SettingsNamespace, key: string, options?: SettingsOptions): Promise<void>;
23
+ put(namespace: SettingsNamespace, key: string, value: string, options?: SettingsPutOptions): Promise<void>;
24
+ reset(namespace: SettingsNamespace, mode: SettingsResetMode, options?: SettingsOptions): Promise<void>;
25
+ reset(namespace: SettingsNamespace, packageName: string, tag?: string, options?: SettingsOptions): Promise<void>;
12
26
  }
13
27
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GACvB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,CAAC;AAGzB,qBAAa,QAAS,SAAQ,cAAc;IAGjC,IAAI,CACP,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,iBAAiB,EAC5B,GAAG,IAAI,EAAE,MAAM,EAAE;IAUd,GAAG,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM;IAI7C,MAAM,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM;IAIhD,GAAG,CACN,SAAS,EAAE,iBAAiB,EAC5B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,OAAO;IAYlB,KAAK,CACR,SAAS,EAAE,iBAAiB,EAC5B,IAAI,EAAE,iBAAiB,GACxB,OAAO,CAAC,MAAM,CAAC;IACX,KAAK,CACR,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAaL,IAAI,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAIrE"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAA2B,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/D,oBAAY,iBAAiB;IACzB,iBAAiB,uBAAuB;IACxC,cAAc,oBAAoB;IAClC,eAAe,qBAAqB;CACvC;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAGD,qBAAa,QAAS,SAAQ,cAAc;;gBAG5B,GAAG,EAAE,GAAG;IAKd,IAAI,CACN,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,eAAe,GAAG,SAAS,EACpC,GAAG,IAAI,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC;IA2BZ,GAAG,CACL,SAAS,EAAE,iBAAiB,EAC5B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe;IAOvB,MAAM,CACR,SAAS,EAAE,iBAAiB,EAC5B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe,GAC1B,OAAO,CAAC,IAAI,CAAC;IAIV,GAAG,CACL,SAAS,EAAE,iBAAiB,EAC5B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,kBAAkB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAWhB,KAAK,CACD,SAAS,EAAE,iBAAiB,EAC5B,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,eAAe,GAC1B,OAAO,CAAC,IAAI,CAAC;IAChB,KAAK,CACD,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,GAC1B,OAAO,CAAC,IAAI,CAAC;CAmBnB"}
package/esm/settings.js CHANGED
@@ -1,41 +1,66 @@
1
1
  import { AdbCommandBase } from "@yume-chan/adb";
2
+ import { Cmd } from "./cmd.js";
3
+ export var SettingsResetMode;
4
+ (function (SettingsResetMode) {
5
+ SettingsResetMode["UntrustedDefaults"] = "untrusted_defaults";
6
+ SettingsResetMode["UntrustedClear"] = "untrusted_clear";
7
+ SettingsResetMode["TrustedDefaults"] = "trusted_defaults";
8
+ })(SettingsResetMode || (SettingsResetMode = {}));
2
9
  // frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsService.java
3
10
  export class Settings extends AdbCommandBase {
4
- // TODO: `--user <user>` argument
5
- base(command, namespace, ...args) {
6
- return this.adb.subprocess.spawnAndWaitLegacy([
7
- "settings",
8
- command,
9
- namespace,
10
- ...args,
11
- ]);
11
+ #cmd;
12
+ constructor(adb) {
13
+ super(adb);
14
+ this.#cmd = new Cmd(adb);
12
15
  }
13
- get(namespace, key) {
14
- return this.base("get", namespace, key);
16
+ async base(verb, namespace, options, ...args) {
17
+ let command = ["settings"];
18
+ if (options?.user !== undefined) {
19
+ command.push("--user", options.user.toString());
20
+ }
21
+ command.push(verb, namespace);
22
+ command = command.concat(args);
23
+ let output;
24
+ if (this.#cmd.supportsCmd) {
25
+ output = await this.#cmd.spawnAndWait(command[0], ...command.slice(1));
26
+ }
27
+ else {
28
+ output = await this.adb.subprocess.spawnAndWait(command);
29
+ }
30
+ if (output.stderr) {
31
+ throw new Error(output.stderr);
32
+ }
33
+ return output.stdout;
15
34
  }
16
- delete(namespace, key) {
17
- return this.base("delete", namespace, key);
35
+ async get(namespace, key, options) {
36
+ const output = await this.base("get", namespace, options, key);
37
+ // Remove last \n
38
+ return output.substring(0, output.length - 1);
18
39
  }
19
- put(namespace, key, value, tag, makeDefault) {
40
+ async delete(namespace, key, options) {
41
+ await this.base("delete", namespace, options, key);
42
+ }
43
+ async put(namespace, key, value, options) {
20
44
  const args = [key, value];
21
- if (tag) {
22
- args.push(tag);
45
+ if (options?.tag) {
46
+ args.push(options.tag);
23
47
  }
24
- if (makeDefault) {
48
+ if (options?.makeDefault) {
25
49
  args.push("default");
26
50
  }
27
- return this.base("put", namespace, ...args);
51
+ await this.base("put", namespace, options, ...args);
28
52
  }
29
- reset(namespace, modeOrPackageName, tag) {
53
+ async reset(namespace, modeOrPackageName, tagOrOptions, options) {
30
54
  const args = [modeOrPackageName];
31
- if (tag) {
32
- args.push(tag);
55
+ if (modeOrPackageName === SettingsResetMode.UntrustedDefaults ||
56
+ modeOrPackageName === SettingsResetMode.UntrustedClear ||
57
+ modeOrPackageName === SettingsResetMode.TrustedDefaults) {
58
+ options = tagOrOptions;
33
59
  }
34
- return this.base("reset", namespace, ...args);
35
- }
36
- async list(namespace) {
37
- const output = await this.base("list", namespace);
38
- return output.split("\n");
60
+ else if (typeof tagOrOptions === "string") {
61
+ args.push(tagOrOptions);
62
+ }
63
+ await this.base("reset", namespace, options, ...args);
39
64
  }
40
65
  }
41
66
  //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAShD,oGAAoG;AACpG,MAAM,OAAO,QAAS,SAAQ,cAAc;IACxC,iCAAiC;IAE1B,IAAI,CACP,OAAe,EACf,SAA4B,EAC5B,GAAG,IAAc;QAEjB,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAC1C,UAAU;YACV,OAAO;YACP,SAAS;YACT,GAAG,IAAI;SACV,CAAC,CAAC;IACP,CAAC;IAEM,GAAG,CAAC,SAA4B,EAAE,GAAW;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAEM,MAAM,CAAC,SAA4B,EAAE,GAAW;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IAEM,GAAG,CACN,SAA4B,EAC5B,GAAW,EACX,KAAa,EACb,GAAY,EACZ,WAAqB;QAErB,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;QACD,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxB;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAWM,KAAK,CACR,SAA4B,EAC5B,iBAAyB,EACzB,GAAY;QAEZ,MAAM,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACjC,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,SAA4B;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACJ"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export declare class ParseError extends Error {
2
+ #private;
3
+ get expected(): string[];
4
+ constructor(expected: string[]);
5
+ }
6
+ export interface Reader {
7
+ value: string;
8
+ position: number;
9
+ }
10
+ export interface Format<T> {
11
+ parse(reader: Reader): T;
12
+ stringify(value: T): string;
13
+ }
14
+ type UnionResult<T extends readonly Format<unknown>[]> = Exclude<{
15
+ [K in keyof T]: T[K] extends Format<infer F> ? F : never;
16
+ }[number], undefined>;
17
+ type SequenceResult<T extends readonly (Format<unknown> | {
18
+ name: string;
19
+ format: Format<unknown>;
20
+ })[]> = {
21
+ [K in keyof T as K extends `${number}` ? T[K] extends {
22
+ name: infer N extends string;
23
+ } ? N : never : never]: T[K] extends {
24
+ format: Format<infer F>;
25
+ } ? F : never;
26
+ } extends infer R extends Record<string, unknown> ? R : never;
27
+ export declare const p: {
28
+ literal: <T extends string>(value: T) => Format<T>;
29
+ digits: () => Format<number>;
30
+ union: <const T_1 extends readonly Format<unknown>[]>(...args: T_1) => Format<Exclude<{ [K in keyof T_1]: T_1[K] extends Format<infer F> ? F : never; }[number], undefined>>;
31
+ separated: <T_2>(separator: string, format: Format<T_2>, min?: number, max?: number) => Format<T_2[]>;
32
+ repeated: <T_3>(format: Format<T_3>) => Format<T_3[]>;
33
+ sequence: <const T_4 extends readonly (Format<unknown> | {
34
+ name: string;
35
+ format: Format<unknown>;
36
+ })[]>(...args: T_4) => Format<SequenceResult<T_4>>;
37
+ map: <T_5, R>(format: Format<T_5>, map: (value: T_5) => R, reverse: (value: R) => T_5) => Format<R>;
38
+ };
39
+ export {};
40
+ //# sourceMappingURL=string-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-format.d.ts","sourceRoot":"","sources":["../src/string-format.ts"],"names":[],"mappings":"AACA,qBAAa,UAAW,SAAQ,KAAK;;IAGjC,IAAI,QAAQ,IAAI,MAAM,EAAE,CAEvB;gBAEW,QAAQ,EAAE,MAAM,EAAE;CAIjC;AAED,MAAM,WAAW,MAAM;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,MAAM,CAAC,CAAC;IACrB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;IACzB,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;CAC/B;AAED,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,CAC5D;KACK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAC3D,CAAC,MAAM,CAAC,EACT,SAAS,CACZ,CAAC;AAEF,KAAK,cAAc,CACf,CAAC,SAAS,SAAS,CACb,MAAM,CAAC,OAAO,CAAC,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;CAAE,CAC9C,EAAE,IACH;KACC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,GAChC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;KAAE,GACzC,CAAC,GACD,KAAK,GACT,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,KAAK;CACrE,SAAS,MAAM,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3C,CAAC,GACD,KAAK,CAAC;AAEZ,eAAO,MAAM,CAAC;;kBAaE,OAAO,MAAM,CAAC;;gCA6CX,MAAM;;;cAsDH,MAAM;gBAAU,OAAO,OAAO,CAAC;;;CAwCU,CAAC"}