Skip to content

Commit 5ca1979

Browse files
authored
Merge pull request #5 from littletof/feat/theme
feat: Export types, add verbose option, change default theme colors
2 parents 53342a4 + 20113f5 commit 5ca1979

File tree

3 files changed

+65
-23
lines changed

3 files changed

+65
-23
lines changed

mod.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export { snap } from "./snapper.ts";
2+
export type { SnapParams, SnapOptions, ThemeColors} from "./snapper.ts";
23

34
export {buildServer as buildSnapperServer, startServer as startSnapperServer} from "./server.ts";

server.ts

+20-20
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Application, Router, send } from "https://deno.land/x/oak@v9.0.1/mod.ts";
22
import {template} from './template.ts';
33
import {xterm} from './static/xterm/packed.ts';
4+
import { ThemeColors } from "./snapper.ts";
45

56
export function buildServer(): Application {
67
const router = new Router();
@@ -42,24 +43,23 @@ export function startServer(opts?: {port?: number}) {
4243
};
4344
}
4445

45-
export const defaultTheme = {
46-
"foreground": "#cccccc",
47-
"background": "#1e1e1e",
48-
"cursorColor": "#cccccc",
49-
"black": "#000000",
50-
"red": "#c62f37",
51-
"green": "#37be78",
52-
"yellow": "#e2e822",
53-
"blue": "#396ec7",
54-
"purple": "#b835bc",
55-
"cyan": "#3ba7cc",
56-
"white": "#e5e5e5",
57-
"brightBlack": "#666666",
58-
"brightRed": "#e94a51",
59-
"brightGreen": "#45d38a",
60-
"brightYellow": "#f2f84a",
61-
"brightBlue": "#4e8ae9",
62-
"brightPurple": "#d26ad6",
63-
"brightCyan": "#49b7da",
64-
"brightWhite": "#e5e5e5"
46+
export const defaultTheme: ThemeColors = {
47+
foreground: "#cccccc",
48+
background: "#1e1e1e",
49+
black: "#000000",
50+
brightBlack: "#666666",
51+
red: "#CD3131",
52+
brightRed: "#F14C4C",
53+
green: "#0DBC79",
54+
brightGreen: "#23D18B",
55+
yellow: "#E5E510",
56+
brightYellow: "#F5F543",
57+
blue: "#2472C8",
58+
brightBlue: "#3B8EEA",
59+
magenta: "#BC3FBC",
60+
brightMagenta: "#D670D6",
61+
cyan: "#11A8CD",
62+
brightCyan: "#29B8DB",
63+
white: "#E5E5E5",
64+
brightWhite: "#E5E5E5"
6565
};

snapper.ts

+44-3
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,47 @@ import { startServer } from "./server.ts";
44
export interface SnapParams {
55
imageSavePath: string;
66
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;
836
}
937

1038
// TODO Deno puppeteer types
1139
export type PuppeteerLaunchOptions = any;
1240

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...');
1445
const {listen, abort} = startServer();
1546

47+
log('Launching puppeteer...');
1648
const browser = await puppeteer.launch(options?.puppeteerLaunchOptions || {
1749
env: { PUPPETEER_PRODUCT: 'chrome' },
1850
defaultViewport: {width: 1080, height: 30},
@@ -21,7 +53,7 @@ export async function snap(snaps: SnapParams[], options?: {snapServerUrl?: strin
2153
});
2254

2355
const page = await browser.newPage();
24-
56+
log('\nSnapping pictures: ');
2557
for(let textCase of snaps) {
2658
const viewPort = {deviceScaleFactor: 3, width: 1080, height: 30, ...textCase.viewport};
2759
// TODO handle headless looking different
@@ -55,12 +87,21 @@ export async function snap(snaps: SnapParams[], options?: {snapServerUrl?: strin
5587
await page.goto(options?.snapServerUrl || `http://localhost:7777`);
5688
await page.waitForSelector('#done');
5789
// TODO checkexists imageSavePath
90+
log(`\t- ${textCase.imageSavePath}`);
5891
await page.screenshot({ path: textCase.imageSavePath, fullPage: !textCase.viewport });
5992
}
6093

6194
await browser.close();
6295

6396
abort();
6497
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[]) => {}
65106
}
66107

0 commit comments

Comments
 (0)