From 0762d89aa5dc2389b21c68644de11de7857e70e0 Mon Sep 17 00:00:00 2001 From: Carsten Milling Date: Fri, 23 Oct 2020 11:57:10 +0200 Subject: [PATCH] add normalizedYear and numberOfCharacters to generated JSON resolves #11 --- .gitignore | 1 + package.json | 2 +- src/components/Details.tsx | 2 +- src/components/Table.tsx | 7 ++----- src/{plays.ts => utils.ts} | 18 ++++-------------- yml2json.ts | 20 ++++++++++++++++++++ 6 files changed, 29 insertions(+), 21 deletions(-) rename src/{plays.ts => utils.ts} (59%) create mode 100644 yml2json.ts diff --git a/.gitignore b/.gitignore index a462155..85522c3 100644 --- a/.gitignore +++ b/.gitignore @@ -22,5 +22,6 @@ npm-debug.log* yarn-debug.log* yarn-error.log* +data.json src/data.json public/data.json diff --git a/package.json b/package.json index 6fedb8b..c583489 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "typescript": "~3.7.2" }, "scripts": { - "json": "js-yaml ./data.yaml > ./src/data.json && js-yaml ./data.yaml > ./public/data.json", + "json": "ts-node -O '{\"isolatedModules\":false,\"module\":\"CommonJS\"}' yml2json.ts && cp ./data.json ./src/ && cp ./data.json ./public/", "start": "yarn json && react-scripts start", "build": "yarn json && react-scripts build", "test": "yarn json && react-scripts test", diff --git a/src/components/Details.tsx b/src/components/Details.tsx index 3629cc7..3dcba6b 100644 --- a/src/components/Details.tsx +++ b/src/components/Details.tsx @@ -6,7 +6,7 @@ import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; import Authors from './Authors'; import Years from './Years'; import {CastMember, Play} from '../types'; -import data from '../plays'; +import data from '../data.json'; const groupIcon = ; diff --git a/src/components/Table.tsx b/src/components/Table.tsx index f836ac1..213bc03 100644 --- a/src/components/Table.tsx +++ b/src/components/Table.tsx @@ -5,10 +5,7 @@ import {Link} from 'react-router-dom'; import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; import Authors from './Authors'; import {Play} from '../types'; -import data from '../plays'; - -const dataURI = 'data:text/json;base64,' + - btoa(unescape(encodeURIComponent(JSON.stringify(data)))); +import data from '../data.json'; function formatAuthor (_: string, play: Play) { return ; @@ -106,7 +103,7 @@ function Table () { Database currently containing {data.length} one-act plays {' '} - + diff --git a/src/plays.ts b/src/utils.ts similarity index 59% rename from src/plays.ts rename to src/utils.ts index 6189332..23b6d3c 100644 --- a/src/plays.ts +++ b/src/utils.ts @@ -1,7 +1,6 @@ import {Play} from './types'; -import data from './data.json'; -function normalizeYear (play: Play) { +export function normalizeYear (play: Play) { const {premiered: p, printed, created} = play; const premiered: number = parseInt(p as string); const published = (premiered && printed) @@ -16,22 +15,13 @@ function normalizeYear (play: Play) { } return year; -} +}; -function countCharacters(play: Play) { +export function countCharacters (play: Play) { const {cast} = play; if (!cast) return undefined; return cast.reduce((num, item) => { const n = item.group ? item.group.length : 1; return num + n; }, 0) -} - -const plays = data.map((p: Play) => { - const normalizedYear = normalizeYear(p); - const numberOfCharacters = countCharacters(p); - const authors = p.author ? [p.author] : p.authors || []; - return {...p, authors, normalizedYear, numberOfCharacters} -}); - -export default plays; +}; diff --git a/yml2json.ts b/yml2json.ts new file mode 100644 index 0000000..3fd80f2 --- /dev/null +++ b/yml2json.ts @@ -0,0 +1,20 @@ +import {safeLoadAll} from 'js-yaml'; +import {readFileSync, writeFileSync} from 'fs'; +import {Play} from './src/types'; +import {normalizeYear, countCharacters} from './src/utils'; + +let data: Play[] = []; +try { + data = safeLoadAll(readFileSync('./data.yaml', 'utf8')); +} catch (error) { + console.log(error); +} + +const plays = data.map((p: Play) => { + const normalizedYear = normalizeYear(p); + const numberOfCharacters = countCharacters(p); + const authors = p.author ? [p.author] : p.authors || []; + return {...p, authors, normalizedYear, numberOfCharacters} +}); + +writeFileSync('./data.json', JSON.stringify(plays));