-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate.ts
44 lines (40 loc) · 1.16 KB
/
generate.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { parse } from './deps.ts';
import { object2css } from './mod.ts';
function displayHelp() {
console.log(`Usage : ${import.meta.url.split('/').slice(-1)} [INPUT] [OUTPUT] [OPTIONS]`);
console.log('Generate CSS from Object\n');
console.log(' --help\tShow help');
console.log(' --watch\tUpdate on change');
}
async function outputCss(input: string, output: string) {
const mod = await import(`${input}?${Math.random()}.ts`);
if (output === '') {
console.log(object2css(mod.default));
} else {
Deno.writeTextFileSync(output, object2css(mod.default));
}
}
async function main(args: string[]) {
const arg = parse(args);
if (arg._.length === 0 || arg.help) {
return displayHelp();
}
const [inputCmd, outputCmd] = arg._;
const input = Deno.realPathSync(inputCmd.toString());
let output = '';
if (outputCmd) {
output = Deno.realPathSync(outputCmd.toString());
}
await outputCss(input, output);
if (arg.watch) {
const watcher = Deno.watchFs(input);
for await (const event of watcher) {
if (event.kind === 'access') {
await outputCss(input, output);
}
}
}
}
if (import.meta.main) {
main(Deno.args);
}