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.
- package/LICENSE +21 -0
- package/README.md +186 -0
- package/bin/tapflow.js +2 -1
- package/dist/commands/agent-start.d.ts +7 -0
- package/dist/commands/agent-start.d.ts.map +1 -0
- package/dist/commands/agent-start.js +78 -0
- package/dist/commands/agent-start.js.map +1 -0
- package/dist/commands/boot.d.ts +2 -0
- package/dist/commands/boot.d.ts.map +1 -0
- package/dist/commands/boot.js +47 -0
- package/dist/commands/boot.js.map +1 -0
- package/dist/commands/devices.d.ts +2 -0
- package/dist/commands/devices.d.ts.map +1 -0
- package/dist/commands/devices.js +85 -0
- package/dist/commands/devices.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +41 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +64 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/logs.d.ts +5 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +22 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/relay-start.d.ts +5 -0
- package/dist/commands/relay-start.d.ts.map +1 -0
- package/dist/commands/relay-start.js +24 -0
- package/dist/commands/relay-start.js.map +1 -0
- package/dist/commands/reset.d.ts +2 -0
- package/dist/commands/reset.d.ts.map +1 -0
- package/dist/commands/reset.js +49 -0
- package/dist/commands/reset.js.map +1 -0
- package/dist/commands/start.d.ts +6 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +77 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +4 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +56 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/doctor.d.ts +12 -0
- package/dist/lib/doctor.d.ts.map +1 -0
- package/dist/lib/doctor.js +118 -0
- package/dist/lib/doctor.js.map +1 -0
- package/dist/lib/ios-boot.d.ts +3 -0
- package/dist/lib/ios-boot.d.ts.map +1 -0
- package/dist/lib/ios-boot.js +44 -0
- package/dist/lib/ios-boot.js.map +1 -0
- package/dist/lib/platform.d.ts +2 -0
- package/dist/lib/platform.d.ts.map +1 -0
- package/dist/lib/platform.js +10 -0
- package/dist/lib/platform.js.map +1 -0
- package/dist/lib/print.d.ts +13 -0
- package/dist/lib/print.d.ts.map +1 -0
- package/dist/lib/print.js +55 -0
- package/dist/lib/print.js.map +1 -0
- package/dist/lib/tapflow-dir.d.ts +3 -0
- package/dist/lib/tapflow-dir.d.ts.map +1 -0
- package/dist/lib/tapflow-dir.js +8 -0
- package/dist/lib/tapflow-dir.js.map +1 -0
- 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 @@
|
|
|
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.
|
|
4
|
-
"description": "Self-hosted
|
|
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
|
+
}
|