wotd - include date in data

This commit is contained in:
gome 2022-05-05 18:59:37 -05:00
parent 9652ff1a26
commit a472733f03
1 changed files with 15 additions and 26 deletions

View File

@ -1,5 +1,5 @@
import { readCSV } from 'https://deno.land/x/csv/mod.ts';
import { datetime } from 'https://deno.land/x/ptera/mod.ts';
import { DateTime, datetime } from 'https://deno.land/x/ptera/mod.ts';
import { EOL } from 'https://deno.land/std/fs/eol.ts';
import { brightCyan, yellow, gray } from 'https://deno.land/std@0.117.0/fmt/colors.ts';
@ -13,17 +13,14 @@ if (!Deno.args.length) {
}
}
const date = parseDate(Deno.args[1]);
let skip: number;
skip = Number.parseInt(Deno.args[2] ?? '0', 10);
skip = Number.parseInt(Deno.args[1] ?? '0', 10);
if (isNaN(skip)) {
console.error(`Invalid skip argument "${Deno.args[2]}".`);
Deno.exit(-1);
}
const file = await Deno.open(Deno.args[0], { read: true, write: false });
let dateOffset = 0;
// really starts at one because it's incremented right away in loop
let rowIndex = 0;
@ -31,9 +28,16 @@ for await (const row of readCSV(file, { lineSeparator: Deno.build.os === 'window
rowIndex++;
let entry: WotdEntry|undefined;
let word: string|undefined = undefined;
let date: DateTime|undefined;
for await (const cell of row) {
if (!cell || rowIndex <= skip) {
continue;
break;
} else if (!date) {
date = parseDate(cell);
if (!date) {
console.error(`Parsing error! Invalid date "${cell}" in row ${rowIndex}.`);
break;
}
} else if (!word) {
word = cell;
} else if (!entry) {
@ -49,11 +53,10 @@ for await (const row of readCSV(file, { lineSeparator: Deno.build.os === 'window
}
}
}
if (entry) {
const filename = date.add({ day: dateOffset }).format('YYYY.MM.dd');
if (entry && date) {
const filename = date.format('YYYY.MM.dd');
await Deno.writeTextFile(filename + '.json', JSON.stringify(entry));
console.info(`Wrote ${brightCyan(entry.word)} to ${yellow(filename) + gray('.json')}`);
dateOffset++;
}
}
@ -78,23 +81,9 @@ async function doesFileExist(filename: string): Promise<true|string> {
}
}
function parseDate(date?: string) {
if (!date || date === '-') {
return datetime();
} else {
const parsed = datetime().parse(
date.length === 5
// if it's short, add the year
? date + '-' + datetime().year
: date, 'MM-dd-YYYY'
);
if (parsed.isValid()) {
return parsed;
} else {
console.error(`Invalid date argument "${date}".`);
Deno.exit(-1);
}
}
function parseDate(date: string) {
const parsed = datetime().parse(date, 'M/d/YYYY');
return parsed.isValid() ? parsed : undefined;
}
type WotdEntry = {