tapflow 0.0.1 → 0.1.0-alpha.2

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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +186 -0
  3. package/bin/tapflow.js +2 -1
  4. package/dist/commands/agent-start.d.ts +7 -0
  5. package/dist/commands/agent-start.d.ts.map +1 -0
  6. package/dist/commands/agent-start.js +78 -0
  7. package/dist/commands/agent-start.js.map +1 -0
  8. package/dist/commands/boot.d.ts +2 -0
  9. package/dist/commands/boot.d.ts.map +1 -0
  10. package/dist/commands/boot.js +47 -0
  11. package/dist/commands/boot.js.map +1 -0
  12. package/dist/commands/devices.d.ts +2 -0
  13. package/dist/commands/devices.d.ts.map +1 -0
  14. package/dist/commands/devices.js +85 -0
  15. package/dist/commands/devices.js.map +1 -0
  16. package/dist/commands/doctor.d.ts +2 -0
  17. package/dist/commands/doctor.d.ts.map +1 -0
  18. package/dist/commands/doctor.js +41 -0
  19. package/dist/commands/doctor.js.map +1 -0
  20. package/dist/commands/init.d.ts +5 -0
  21. package/dist/commands/init.d.ts.map +1 -0
  22. package/dist/commands/init.js +64 -0
  23. package/dist/commands/init.js.map +1 -0
  24. package/dist/commands/logs.d.ts +5 -0
  25. package/dist/commands/logs.d.ts.map +1 -0
  26. package/dist/commands/logs.js +22 -0
  27. package/dist/commands/logs.js.map +1 -0
  28. package/dist/commands/relay-start.d.ts +5 -0
  29. package/dist/commands/relay-start.d.ts.map +1 -0
  30. package/dist/commands/relay-start.js +24 -0
  31. package/dist/commands/relay-start.js.map +1 -0
  32. package/dist/commands/reset.d.ts +2 -0
  33. package/dist/commands/reset.d.ts.map +1 -0
  34. package/dist/commands/reset.js +49 -0
  35. package/dist/commands/reset.js.map +1 -0
  36. package/dist/commands/start.d.ts +6 -0
  37. package/dist/commands/start.d.ts.map +1 -0
  38. package/dist/commands/start.js +77 -0
  39. package/dist/commands/start.js.map +1 -0
  40. package/dist/commands/status.d.ts +4 -0
  41. package/dist/commands/status.d.ts.map +1 -0
  42. package/dist/commands/status.js +56 -0
  43. package/dist/commands/status.js.map +1 -0
  44. package/dist/index.d.ts +2 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +56 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/lib/doctor.d.ts +12 -0
  49. package/dist/lib/doctor.d.ts.map +1 -0
  50. package/dist/lib/doctor.js +118 -0
  51. package/dist/lib/doctor.js.map +1 -0
  52. package/dist/lib/ios-boot.d.ts +3 -0
  53. package/dist/lib/ios-boot.d.ts.map +1 -0
  54. package/dist/lib/ios-boot.js +44 -0
  55. package/dist/lib/ios-boot.js.map +1 -0
  56. package/dist/lib/platform.d.ts +2 -0
  57. package/dist/lib/platform.d.ts.map +1 -0
  58. package/dist/lib/platform.js +10 -0
  59. package/dist/lib/platform.js.map +1 -0
  60. package/dist/lib/print.d.ts +13 -0
  61. package/dist/lib/print.d.ts.map +1 -0
  62. package/dist/lib/print.js +55 -0
  63. package/dist/lib/print.js.map +1 -0
  64. package/dist/lib/tapflow-dir.d.ts +3 -0
  65. package/dist/lib/tapflow-dir.d.ts.map +1 -0
  66. package/dist/lib/tapflow-dir.js +8 -0
  67. package/dist/lib/tapflow-dir.js.map +1 -0
  68. package/package.json +58 -5
@@ -0,0 +1,55 @@
1
+ export const R = '\x1b[0m';
2
+ export const BOLD = '\x1b[1m';
3
+ export const DIM = '\x1b[2m';
4
+ export const GREEN = '\x1b[32m';
5
+ export const RED = '\x1b[31m';
6
+ export const YELLOW = '\x1b[33m';
7
+ const MAX_WIDTH = 72;
8
+ function wrap(line, maxWidth) {
9
+ if (line.length <= maxWidth)
10
+ return [line];
11
+ const chunks = [];
12
+ for (let i = 0; i < line.length; i += maxWidth) {
13
+ chunks.push(line.slice(i, i + maxWidth));
14
+ }
15
+ return chunks;
16
+ }
17
+ export function banner(type, title, lines = []) {
18
+ const color = type === 'success' ? GREEN : RED;
19
+ const icon = type === 'success' ? '✓' : '✗';
20
+ const wrappedLines = lines.flatMap((l) => wrap(l, MAX_WIDTH));
21
+ const contentWidth = Math.min(MAX_WIDTH, Math.max(title.length + 5, ...wrappedLines.map((l) => l.length + 2), 40));
22
+ const bar = '─'.repeat(contentWidth);
23
+ console.log();
24
+ console.log(`${color}${BOLD} ┌${bar}┐${R}`);
25
+ console.log(`${color}${BOLD} │ ${icon} ${title.padEnd(contentWidth - 5)}│${R}`);
26
+ console.log(`${color}${BOLD} └${bar}┘${R}`);
27
+ for (const line of wrappedLines) {
28
+ console.log(`${DIM} ${line}${R}`);
29
+ }
30
+ console.log();
31
+ }
32
+ const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
33
+ export function createSpinner(msg) {
34
+ let frame = 0;
35
+ let id = null;
36
+ return {
37
+ start() {
38
+ process.stdout.write(`\n ${SPINNER_FRAMES[0]} ${msg}`);
39
+ id = setInterval(() => {
40
+ frame = (frame + 1) % SPINNER_FRAMES.length;
41
+ process.stdout.write(`\r ${SPINNER_FRAMES[frame]} ${msg}`);
42
+ }, 80);
43
+ },
44
+ stop(ok) {
45
+ if (id)
46
+ clearInterval(id);
47
+ const icon = ok ? `${GREEN}✓${R}` : `${RED}✗${R}`;
48
+ process.stdout.write(`\r ${icon} ${msg}\n`);
49
+ },
50
+ };
51
+ }
52
+ export function step(msg) {
53
+ console.log(` ${DIM}→${R} ${msg}`);
54
+ }
55
+ //# sourceMappingURL=print.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../../src/lib/print.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const TAPFLOW_DIR: string;
2
+ export declare function ensureTapflowDir(): void;
3
+ //# sourceMappingURL=tapflow-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tapflow-dir.d.ts","sourceRoot":"","sources":["../../src/lib/tapflow-dir.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,QAA8B,CAAA;AAEtD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,8 @@
1
+ import { mkdirSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ export const TAPFLOW_DIR = join(homedir(), '.tapflow');
5
+ export function ensureTapflowDir() {
6
+ mkdirSync(TAPFLOW_DIR, { recursive: true });
7
+ }
8
+ //# sourceMappingURL=tapflow-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tapflow-dir.js","sourceRoot":"","sources":["../../src/lib/tapflow-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;AAEtD,MAAM,UAAU,gBAAgB;IAC9B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AAC7C,CAAC"}
package/package.json CHANGED
@@ -1,15 +1,68 @@
1
1
  {
2
2
  "name": "tapflow",
3
- "version": "0.0.1",
4
- "description": "Self-hosted QA device streaming and remote control toolkit.",
3
+ "version": "0.1.0-alpha.2",
4
+ "description": "Self-hosted iOS/Android simulator streaming for QA teams",
5
+ "keywords": [
6
+ "ios",
7
+ "android",
8
+ "simulator",
9
+ "emulator",
10
+ "qa",
11
+ "testing",
12
+ "streaming",
13
+ "self-hosted"
14
+ ],
15
+ "homepage": "https://github.com/jo-duchan/tapflow",
16
+ "bugs": "https://github.com/jo-duchan/tapflow/issues",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/jo-duchan/tapflow.git"
20
+ },
5
21
  "license": "MIT",
6
- "private": false,
7
22
  "bin": {
8
23
  "tapflow": "./bin/tapflow.js"
9
24
  },
25
+ "type": "module",
26
+ "main": "dist/index.js",
27
+ "types": "dist/index.d.ts",
10
28
  "files": [
11
29
  "bin",
30
+ "dist",
12
31
  "README.md",
13
32
  "LICENSE"
14
- ]
15
- }
33
+ ],
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "exports": {
38
+ ".": {
39
+ "source": "./src/index.ts",
40
+ "tsx": "./src/index.ts",
41
+ "import": "./dist/index.js",
42
+ "default": "./dist/index.js"
43
+ }
44
+ },
45
+ "dependencies": {
46
+ "cac": "^6.7.14",
47
+ "ws": "^8.0.0",
48
+ "zod": "^4.4.3",
49
+ "@tapflowio/agent-core": "0.1.0-alpha.2",
50
+ "@tapflowio/android-agent": "0.1.0-alpha.2",
51
+ "@tapflowio/ios-agent": "0.1.0-alpha.2",
52
+ "@tapflowio/relay": "0.1.0-alpha.2"
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "^20.0.0",
56
+ "@types/ws": "^8.0.0",
57
+ "tsx": "^4.0.0",
58
+ "typescript": "^5.0.0",
59
+ "vitest": "^2.0.0"
60
+ },
61
+ "scripts": {
62
+ "build": "tsc",
63
+ "typecheck": "tsc --noEmit",
64
+ "dev": "tsx src/index.ts",
65
+ "test": "vitest run",
66
+ "lint": "eslint src"
67
+ }
68
+ }