tuimon 0.2.0 → 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 (45) hide show
  1. package/README.md +191 -181
  2. package/dist/browser.d.ts.map +1 -1
  3. package/dist/browser.js +4 -1
  4. package/dist/browser.js.map +1 -1
  5. package/dist/cli.js +67 -2
  6. package/dist/cli.js.map +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +22 -6
  9. package/dist/index.js.map +1 -1
  10. package/dist/quick/presets/coverage.d.ts +3 -0
  11. package/dist/quick/presets/coverage.d.ts.map +1 -0
  12. package/dist/quick/presets/coverage.js +362 -0
  13. package/dist/quick/presets/coverage.js.map +1 -0
  14. package/dist/quick/presets/deps.d.ts +3 -0
  15. package/dist/quick/presets/deps.d.ts.map +1 -0
  16. package/dist/quick/presets/deps.js +194 -0
  17. package/dist/quick/presets/deps.js.map +1 -0
  18. package/dist/quick/presets/docker.d.ts +3 -0
  19. package/dist/quick/presets/docker.d.ts.map +1 -0
  20. package/dist/quick/presets/docker.js +100 -0
  21. package/dist/quick/presets/docker.js.map +1 -0
  22. package/dist/quick/presets/git.d.ts +3 -0
  23. package/dist/quick/presets/git.d.ts.map +1 -0
  24. package/dist/quick/presets/git.js +116 -0
  25. package/dist/quick/presets/git.js.map +1 -0
  26. package/dist/quick/presets/ps.d.ts +3 -0
  27. package/dist/quick/presets/ps.d.ts.map +1 -0
  28. package/dist/quick/presets/ps.js +168 -0
  29. package/dist/quick/presets/ps.js.map +1 -0
  30. package/dist/quick/presets/runner.d.ts +3 -0
  31. package/dist/quick/presets/runner.d.ts.map +1 -0
  32. package/dist/quick/presets/runner.js +20 -0
  33. package/dist/quick/presets/runner.js.map +1 -0
  34. package/dist/quick/presets/types.d.ts +7 -0
  35. package/dist/quick/presets/types.d.ts.map +1 -0
  36. package/dist/quick/presets/types.js +2 -0
  37. package/dist/quick/presets/types.js.map +1 -0
  38. package/dist/types.d.ts +1 -1
  39. package/dist/types.d.ts.map +1 -1
  40. package/examples/preset-deps.png +0 -0
  41. package/examples/preset-docker.png +0 -0
  42. package/examples/preset-git.png +0 -0
  43. package/examples/preset-ps.png +0 -0
  44. package/examples/test-presets.ts +91 -0
  45. package/package.json +2 -1
@@ -0,0 +1,3 @@
1
+ import type { PresetResult } from './types.js';
2
+ export declare function runPreset(preset: PresetResult): Promise<void>;
3
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG9C,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBnE"}
@@ -0,0 +1,20 @@
1
+ import tuimon from '../../index.js';
2
+ export async function runPreset(preset) {
3
+ const dash = await tuimon.start({
4
+ pages: {
5
+ main: {
6
+ html: '',
7
+ default: true,
8
+ layout: preset.layout,
9
+ keys: {
10
+ F5: { label: 'Refresh', action: async () => { await dash.render(await Promise.resolve(preset.data())); } },
11
+ F10: { label: 'Quit', action: () => process.exit(0) },
12
+ },
13
+ },
14
+ },
15
+ refresh: preset.refresh,
16
+ data: preset.data,
17
+ renderDelay: 0,
18
+ });
19
+ }
20
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/quick/presets/runner.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,gBAAgB,CAAA;AAEnC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAoB;IAClD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAC9B,KAAK,EAAE;YACL,IAAI,EAAE;gBACJ,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE;oBACzG,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;iBACtD;aACF;SACF;QACD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,CAAC;KACf,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { LayoutConfig } from '../../layout/types.js';
2
+ export interface PresetResult {
3
+ layout: LayoutConfig;
4
+ data: () => Record<string, unknown> | Promise<Record<string, unknown>>;
5
+ refresh?: number | undefined;
6
+ }
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACtE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/quick/presets/types.ts"],"names":[],"mappings":""}
package/dist/types.d.ts CHANGED
@@ -44,7 +44,7 @@ export interface TuiMonOptions {
44
44
  * Auto-render interval in ms. Requires data to be set.
45
45
  * Default: no auto-render — developer calls dash.render() manually.
46
46
  */
47
- refresh?: number;
47
+ refresh?: number | undefined;
48
48
  /** Delay in ms after pushData() before screenshotting. Default: 50 */
49
49
  renderDelay?: number;
50
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env npx tsx
2
+
3
+ /**
4
+ * Test presets by generating screenshots via Playwright.
5
+ * No terminal graphics needed - just verify the HTML renders correctly.
6
+ */
7
+
8
+ import { writeFileSync, mkdirSync } from 'node:fs'
9
+ import path from 'node:path'
10
+ import { tmpdir } from 'node:os'
11
+ import { chromium } from 'playwright'
12
+ import { generateDashboardHtml } from '../src/layout/generator.js'
13
+
14
+ // Import presets
15
+ import { gitPreset } from '../src/quick/presets/git.js'
16
+ import { psPreset } from '../src/quick/presets/ps.js'
17
+ import { depsPreset } from '../src/quick/presets/deps.js'
18
+
19
+ async function screenshotPreset(name: string, layout: import('../src/layout/types.js').LayoutConfig, data: Record<string, unknown>) {
20
+ const html = generateDashboardHtml(layout)
21
+ const tmpDir = path.join(tmpdir(), `tuimon-preset-test-${Date.now()}`)
22
+ mkdirSync(tmpDir, { recursive: true })
23
+ const htmlPath = path.join(tmpDir, 'dashboard.html')
24
+ writeFileSync(htmlPath, html, 'utf-8')
25
+
26
+ const browser = await chromium.launch({ headless: true })
27
+ const page = await browser.newPage()
28
+ await page.setViewportSize({ width: 1600, height: 900 })
29
+ await page.goto(`file://${htmlPath}`, { waitUntil: 'domcontentloaded' })
30
+
31
+ // Push data
32
+ await page.evaluate((d: Record<string, unknown>) => {
33
+ const win = globalThis as Record<string, unknown>
34
+ if (typeof win['__tuimon_update__'] === 'function') {
35
+ ;(win['__tuimon_update__'] as (d: Record<string, unknown>) => void)(d)
36
+ }
37
+ }, data)
38
+
39
+ await new Promise((r) => setTimeout(r, 500))
40
+
41
+ const outPath = path.resolve(`examples/preset-${name}.png`)
42
+ const buf = await page.screenshot({ type: 'png' })
43
+ writeFileSync(outPath, buf)
44
+ await browser.close()
45
+ console.log(` ${name}: ${outPath}`)
46
+ }
47
+
48
+ async function main() {
49
+ console.log('Testing presets via Playwright screenshots...\n')
50
+
51
+ // Git preset
52
+ try {
53
+ const git = gitPreset()
54
+ const gitData = await Promise.resolve(git.data())
55
+ await screenshotPreset('git', git.layout, gitData)
56
+ } catch (err) {
57
+ console.log(` git: SKIP - ${err instanceof Error ? err.message : err}`)
58
+ }
59
+
60
+ // PS preset
61
+ try {
62
+ const ps = psPreset()
63
+ const psData = await Promise.resolve(ps.data())
64
+ await screenshotPreset('ps', ps.layout, psData)
65
+ } catch (err) {
66
+ console.log(` ps: SKIP - ${err instanceof Error ? err.message : err}`)
67
+ }
68
+
69
+ // Deps preset
70
+ try {
71
+ const deps = depsPreset(path.resolve('package-lock.json'))
72
+ const depsData = await Promise.resolve(deps.data())
73
+ await screenshotPreset('deps', deps.layout, depsData)
74
+ } catch (err) {
75
+ console.log(` deps: SKIP - ${err instanceof Error ? err.message : err}`)
76
+ }
77
+
78
+ // Docker preset - only if docker is running
79
+ try {
80
+ const { dockerPreset } = await import('../src/quick/presets/docker.js')
81
+ const docker = dockerPreset()
82
+ const dockerData = await Promise.resolve(docker.data())
83
+ await screenshotPreset('docker', docker.layout, dockerData)
84
+ } catch (err) {
85
+ console.log(` docker: SKIP - ${err instanceof Error ? err.message : err}`)
86
+ }
87
+
88
+ console.log('\nDone. Open the PNG files to verify.')
89
+ }
90
+
91
+ main().catch(console.error)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tuimon",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "Render beautiful HTML dashboards directly in your terminal.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,6 +27,7 @@
27
27
  "lint": "eslint src --ext .ts",
28
28
  "format": "prettier --write src",
29
29
  "typecheck": "tsc --noEmit",
30
+ "postinstall": "npx playwright install chromium 2>/dev/null || true",
30
31
  "prepublishOnly": "npm run typecheck && npm run test && npm run build"
31
32
  },
32
33
  "dependencies": {