@@ -4,15 +4,47 @@ import { startServer } from "./server.ts";
4
4
export interface SnapParams {
5
5
imageSavePath : string ;
6
6
content : string ;
7
- viewport ?: { width : number , height : number , deviceScaleFactor ?: number } ,
7
+ viewport ?: { width : number , height : number , deviceScaleFactor ?: number } , // TODO get scaleFactor out, make w/h optional
8
+ }
9
+
10
+ export interface SnapOptions {
11
+ snapServerUrl ?: string ;
12
+ theme ?: ThemeColors ;
13
+ puppeteerLaunchOptions ?: PuppeteerLaunchOptions ;
14
+ verbose ?: boolean ;
15
+ }
16
+
17
+ export interface ThemeColors {
18
+ foreground ?: string ;
19
+ background ?: string ;
20
+ black ?: string ;
21
+ brightBlack ?: string ;
22
+ red ?: string ;
23
+ brightRed ?: string ;
24
+ green ?: string ;
25
+ brightGreen ?: string ;
26
+ yellow ?: string ;
27
+ brightYellow ?: string ;
28
+ blue ?: string ;
29
+ brightBlue ?: string ;
30
+ magenta ?: string ;
31
+ brightMagenta ?: string ;
32
+ cyan ?: string ;
33
+ brightCyan ?: string ;
34
+ white ?: string ;
35
+ brightWhite ?: string ;
8
36
}
9
37
10
38
// TODO Deno puppeteer types
11
39
export type PuppeteerLaunchOptions = any ;
12
40
13
- export async function snap ( snaps : SnapParams [ ] , options ?: { snapServerUrl ?: string , theme ?: any , puppeteerLaunchOptions ?: PuppeteerLaunchOptions } ) {
41
+ export async function snap ( snaps : SnapParams [ ] , options ?: SnapOptions ) {
42
+ const log = createLog ( options ) ;
43
+ log ( '\x1b[42m \x1b[1m\x1b[37mSnapper\x1b[39m\x1b[22m 📷 \x1b[49m' ) ;
44
+ log ( '\nStarting server...' ) ;
14
45
const { listen, abort} = startServer ( ) ;
15
46
47
+ log ( 'Launching puppeteer...' ) ;
16
48
const browser = await puppeteer . launch ( options ?. puppeteerLaunchOptions || {
17
49
env : { PUPPETEER_PRODUCT : 'chrome' } ,
18
50
defaultViewport : { width : 1080 , height : 30 } ,
@@ -21,7 +53,7 @@ export async function snap(snaps: SnapParams[], options?: {snapServerUrl?: strin
21
53
} ) ;
22
54
23
55
const page = await browser . newPage ( ) ;
24
-
56
+ log ( '\nSnapping pictures: ' ) ;
25
57
for ( let textCase of snaps ) {
26
58
const viewPort = { deviceScaleFactor : 3 , width : 1080 , height : 30 , ...textCase . viewport } ;
27
59
// TODO handle headless looking different
@@ -55,12 +87,21 @@ export async function snap(snaps: SnapParams[], options?: {snapServerUrl?: strin
55
87
await page . goto ( options ?. snapServerUrl || `http://localhost:7777` ) ;
56
88
await page . waitForSelector ( '#done' ) ;
57
89
// TODO checkexists imageSavePath
90
+ log ( `\t- ${ textCase . imageSavePath } ` ) ;
58
91
await page . screenshot ( { path : textCase . imageSavePath , fullPage : ! textCase . viewport } ) ;
59
92
}
60
93
61
94
await browser . close ( ) ;
62
95
63
96
abort ( ) ;
64
97
await listen ;
98
+ log ( '\nPuppeteer, server closed.\n\x1b[42m \x1b[1m\x1b[37mSnapping done \x1b[39m\x1b[22m\x1b[49m' ) ;
99
+ }
100
+
101
+ export function createLog ( options ?: SnapOptions ) {
102
+ if ( options ?. verbose ) {
103
+ return ( ...text : any [ ] ) => console . log ( ...text ) ;
104
+ }
105
+ return ( ...text : any [ ] ) => { }
65
106
}
66
107
0 commit comments