Skip to content

Commit bd401a1

Browse files
authored
Merge pull request #842 from cmu-delphi/release-v2.0.0
Release v2.0.0
2 parents c6dd84f + 0570547 commit bd401a1

File tree

134 files changed

+14081
-15694
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

134 files changed

+14081
-15694
lines changed

.husky/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
_

.husky/pre-commit

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/sh
2+
. "$(dirname "$0")/_/husky.sh"
3+
4+
npx lint-staged

.prettierignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
.browserslistrc
55
.gitattributes
66
.prettierignore
7-
/old_maps
7+
/.husky
88
*.ico
99
*.png
1010
*.svg

package-lock.json

Lines changed: 9597 additions & 12216 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 46 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@
2323
"clean": "rimraf \"*.zip\" \"*.tgz\" public",
2424
"gen": "node ./scripts/generateDescriptions.js",
2525
"gen:check": "npm run gen -- --check",
26+
"gen:local": "npm run gen -- --localOnly",
2627
"gen:fallback": "npm run gen -- --fallback",
2728
"process-geo": "node ./src/maps/process.js",
28-
"start": "npm run gen:fallback && cross-env NODE_ENV=development webpack-dev-server -d --open",
29+
"start": "npm run gen:fallback && cross-env NODE_ENV=development webpack serve --mode development --hot --devtool eval-cheap-module-source-map",
2930
"prebuild": "npm run clean",
30-
"build": "npm run gen:fallback && cross-env NODE_ENV=production webpack -p",
31+
"build": "npm run gen:fallback && cross-env NODE_ENV=production webpack --mode production",
3132
"watch": "cross-env NODE_ENV=development webpack --mode development -w",
32-
"deploy": "npm run build; gh-pages -d public",
3333
"zip": "cd public && bestzip ../release.zip *",
3434
"prettier": "prettier --write \"**/*\"",
3535
"lint": "npm run gen:check && eslint src --ext .js,.svelte && prettier --check \"**/*\"",
@@ -44,34 +44,35 @@
4444
"prepack": "npm run build"
4545
},
4646
"devDependencies": {
47-
"@babel/core": "^7.12.10",
48-
"@babel/preset-env": "^7.12.11",
49-
"@fortawesome/fontawesome-free": "^5.15.1",
50-
"@octokit/request": "^5.4.12",
51-
"@popperjs/core": "^2.6.0",
52-
"@testing-library/cypress": "^7.0.3",
53-
"@testing-library/jest-dom": "^5.11.8",
47+
"@babel/core": "^7.13.10",
48+
"@babel/preset-env": "^7.13.10",
49+
"@fortawesome/fontawesome-free": "^5.15.3",
50+
"@octokit/request": "^5.4.14",
51+
"@popperjs/core": "^2.9.1",
52+
"@testing-library/cypress": "^7.0.4",
53+
"@testing-library/jest-dom": "^5.11.9",
5454
"@testing-library/svelte": "^3.0.3",
55-
"@turf/bbox": "^6.0.1",
56-
"@turf/boolean-disjoint": "^6.0.2",
57-
"@turf/center-of-mass": "^6.0.1",
55+
"@turf/bbox": "^6.3.0",
56+
"@turf/boolean-disjoint": "^6.3.0",
57+
"@turf/center-of-mass": "^6.3.0",
5858
"@turf/combine": "^6.3.0",
5959
"@turf/dissolve": "^6.3.0",
60-
"@turf/intersect": "^6.1.3",
61-
"@turf/meta": "^6.0.2",
60+
"@turf/intersect": "^6.3.0",
61+
"@turf/meta": "^6.3.0",
6262
"@types/lodash-es": "^4.17.4",
6363
"babel-jest": "^26.6.3",
6464
"babel-loader": "^8.2.2",
6565
"bestzip": "^2.1.7",
6666
"clean-webpack-plugin": "^3.0.0",
6767
"compute-logspace": "^1.0.0",
68-
"concurrently": "^5.3.0",
69-
"copy-webpack-plugin": "^7.0.0",
70-
"core-js": "^3.8.1",
68+
"concurrently": "^6.0.0",
69+
"copy-webpack-plugin": "^8.0.0",
70+
"core-js": "^3.9.1",
7171
"cross-env": "^7.0.3",
72-
"css-loader": "^5.0.1",
73-
"cypress": "^6.2.0",
74-
"cypress-image-snapshot": "^4.0.0",
72+
"css-loader": "^5.1.3",
73+
"css-minimizer-webpack-plugin": "^1.3.0",
74+
"cypress": "^6.6.0",
75+
"cypress-image-snapshot": "^4.0.1",
7576
"d3-color": "^2.0.0",
7677
"d3-dsv": "^2.0.0",
7778
"d3-format": "^2.0.0",
@@ -81,61 +82,52 @@
8182
"d3-time": "^2.0.0",
8283
"d3-time-format": "^3.0.0",
8384
"dirty-reprojectors": "0.0.2",
84-
"eslint": "^7.16.0",
85+
"eslint": "^7.22.0",
8586
"eslint-plugin-cypress": "^2.11.2",
86-
"eslint-plugin-svelte3": "^3.0.0",
87+
"eslint-plugin-svelte3": "^3.1.2",
8788
"file-loader": "^6.2.0",
8889
"geo-albers-usa-territories": "^0.1.0",
89-
"gh-pages": "^3.1.0",
90-
"html-webpack-harddisk-plugin": "^1.0.2",
91-
"html-webpack-plugin": "^4.5.0",
90+
"html-webpack-harddisk-plugin": "^2.0.0",
91+
"html-webpack-plugin": "^5.3.1",
9292
"http-server": "^0.12.3",
93-
"husky": "^4.3.6",
93+
"husky": "^5.1.3",
9494
"identity-obj-proxy": "^3.0.0",
9595
"jest": "^26.6.3",
9696
"js-cookie": "^2.2.1",
97-
"js-yaml": "^3.14.1",
98-
"lint-staged": "^10.5.3",
99-
"lodash-es": "^4.17.20",
97+
"js-yaml": "^4.0.0",
98+
"lint-staged": "^10.5.4",
99+
"lodash-es": "^4.17.21",
100100
"mapbox-gl": "^1.13.0",
101-
"marked": "^2.0.0",
102-
"mini-css-extract-plugin": "^1.3.3",
101+
"marked": "^2.0.1",
102+
"mini-css-extract-plugin": "^1.3.9",
103103
"node-fetch": "^2.6.1",
104-
"nouislider": "^14.6.3",
105-
"optimize-css-assets-webpack-plugin": "^5.0.4",
104+
"nouislider": "^14.6.4",
106105
"prettier": "^2.2.1",
107-
"prettier-plugin-svelte": "^1.4.2",
106+
"prettier-plugin-svelte": "^2.2.0",
108107
"raw-loader": "^4.0.2",
109108
"regenerator-runtime": "^0.13.7",
110-
"release-it": "^14.2.2",
109+
"release-it": "^14.4.1",
111110
"resize-observer-polyfill": "^1.5.1",
112-
"sass": "^1.32.0",
113-
"sass-loader": "^10.1.0",
111+
"sass": "^1.32.8",
112+
"sass-loader": "^11.0.1",
114113
"seedrandom": "^3.0.5",
115114
"style-loader": "^2.0.0",
116-
"svelte": "^3.31.0",
115+
"svelte": "^3.35.0",
117116
"svelte-icons": "^2.1.0",
118117
"svelte-jester": "^1.3.0",
119-
"svelte-loader": "^2.13.6",
120-
"svelte-loader-hot": "^0.3.1",
121-
"terser-webpack-plugin": "^4.2.3",
118+
"svelte-loader": "^3.0.0",
122119
"topojson-client": "^3.1.0",
123120
"topojson-server": "^3.0.1",
124121
"url-loader": "^4.1.1",
125-
"vega": "^5.19.1",
126-
"vega-embed": "^6.15.1",
127-
"vega-lite": "^4.17.0",
128-
"webpack": "^4.44.2",
129-
"webpack-cli": "^3.3.12",
130-
"webpack-dev-server": "^3.11.1"
122+
"vega": "^5.20.0",
123+
"vega-embed": "^6.16.0",
124+
"vega-lite": "^5.0.0",
125+
"webpack": "^5.26.3",
126+
"webpack-cli": "^4.5.0",
127+
"webpack-dev-server": "^3.11.2"
131128
},
132129
"dependencies": {
133-
"uikit": "^3.6.5"
134-
},
135-
"husky": {
136-
"hooks": {
137-
"pre-commit": "npx lint-staged"
138-
}
130+
"uikit": "^3.6.18"
139131
},
140132
"lint-staged": {
141133
"*.{js,svelte}": "eslint --cache --fix",

scripts/generateDescriptions.js

Lines changed: 57 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const marked = require('marked');
99

1010
const isCheckMode = process.argv.includes('--check');
1111
const isFallBackMode = process.argv.includes('--fallback');
12+
const isLocalOnlyMode = process.argv.includes('--localOnly');
1213

1314
// has to be publicly viewable
1415
const DOC_URL =
@@ -32,7 +33,7 @@ async function loadDoc(url) {
3233
const start = text.indexOf('---');
3334
let code = text.slice(start).trim();
3435
// replace * in links
35-
code = code.replace(/^[*] (.*)$/gm, ' - link: "$1"');
36+
code = code.replace(/^[*] (.*)$/gm, ' - "$1"');
3637
// console.log(code);
3738
// unify line endings
3839
return code.replace(/\r?\n/g, '\n');
@@ -59,11 +60,11 @@ function compare(current, fileName) {
5960
}
6061

6162
async function handleFile(docUrl, fileName, converter) {
62-
const code = (await Promise.all(docUrl.split(',').map(loadDoc))).join('\n\n');
63+
const code = isLocalOnlyMode ? null : (await Promise.all(docUrl.split(',').map(loadDoc))).join('\n\n');
6364
if (isCheckMode) {
6465
return compare(code, fileName);
6566
}
66-
if (!code && isFallBackMode && fs.existsSync(fileName)) {
67+
if (!code && (isFallBackMode || isLocalOnlyMode) && fs.existsSync(fileName)) {
6768
converter(fs.readFileSync(fileName).toString());
6869
return;
6970
}
@@ -75,32 +76,44 @@ async function handleFile(docUrl, fileName, converter) {
7576
converter(code);
7677
}
7778

79+
function parseObject(obj, processors = {}) {
80+
const r = {};
81+
Object.entries(obj).map(([key, value]) => {
82+
const formattedKey = key[0].toLowerCase() + key.slice(1);
83+
if (typeof processors[formattedKey] === 'function') {
84+
value = processors[formattedKey](value, formattedKey, processors);
85+
}
86+
r[formattedKey] = value;
87+
});
88+
return r;
89+
}
90+
91+
function parseMarkdown(value) {
92+
return marked.parse(value.trim());
93+
}
94+
function parseMarkdownInline(value) {
95+
return marked.parseInline(value.trim());
96+
}
97+
function parseNestedOrString(value, _key, processors) {
98+
if (typeof value === 'string') {
99+
return value;
100+
}
101+
return parseObject(value, processors);
102+
}
103+
function parseArray(value, _key, processors) {
104+
return value.map((v) => parseObject(v, processors));
105+
}
106+
78107
function convertDescriptions(code) {
79-
const entries = [];
80-
yaml.safeLoadAll(code, (doc) => {
81-
const r = {};
82-
Object.entries(doc).map(([key, value]) => {
83-
const formattedKey = key[0].toLowerCase() + key.slice(1);
84-
if (formattedKey === 'description' || formattedKey === 'credits') {
85-
value = marked.parseInline(value.trim());
86-
} else if (formattedKey === 'links') {
87-
// expect an array with an link property
88-
value = value.map((value) => marked.parseInline(value.link.trim()));
89-
} else if (
90-
formattedKey === 'casesOrDeathSignals' ||
91-
(formattedKey === 'mapTitleText' && typeof value !== 'string') ||
92-
(formattedKey === 'yAxis' && typeof value !== 'string')
93-
) {
94-
// also format nested object
95-
const sub = {};
96-
Object.entries(value).forEach(([k, v]) => {
97-
sub[k[0].toLowerCase() + k.slice(1)] = v;
98-
});
99-
value = sub;
100-
}
101-
r[formattedKey] = value;
108+
const entries = yaml.loadAll(code).map((doc) => {
109+
return parseObject(doc, {
110+
description: parseMarkdownInline,
111+
credits: parseMarkdownInline,
112+
links: (v) => v.map((d) => parseMarkdownInline(d)),
113+
yAxis: parseNestedOrString,
114+
casesOrDeathSignals: parseNestedOrString,
115+
mapTitleText: parseNestedOrString,
102116
});
103-
entries.push(r);
104117
});
105118
fs.writeFileSync('./src/stores/descriptions.generated.json', JSON.stringify(entries, null, 2));
106119
}
@@ -115,31 +128,27 @@ function convertSurveyDescriptions(code) {
115128
questions: [],
116129
};
117130

118-
let first = true;
119-
120-
yaml.safeLoadAll(code, (doc) => {
121-
const r = {};
122-
Object.entries(doc).map(([key, value]) => {
123-
const formattedKey = key[0].toLowerCase() + key.slice(1);
124-
if (formattedKey === 'overview') {
125-
value = marked.parse(value.trim());
126-
} else if (formattedKey === 'description' || formattedKey === 'question') {
127-
value = marked.parseInline(value.trim());
128-
}
129-
r[formattedKey] = value;
131+
const [overview, ...rest] = yaml.loadAll(code);
132+
133+
function parseDoc(doc) {
134+
return parseObject(doc, {
135+
overview: parseMarkdown,
136+
description: parseMarkdownInline,
137+
question: parseMarkdownInline,
138+
oldRevisions: parseArray,
139+
change: parseMarkdownInline,
140+
links: (v) => v.map((d) => parseMarkdownInline(d)),
130141
});
131-
if (first) {
132-
Object.assign(parsed, r);
133-
first = false;
134-
} else {
135-
parsed.questions.push(r);
136-
}
137-
});
138-
fs.writeFileSync('./src/modes/survey/descriptions.generated.json', JSON.stringify(parsed, null, 2));
142+
}
143+
Object.assign(parsed, parseDoc(overview));
144+
for (const doc of rest) {
145+
parsed.questions.push(parseDoc(doc));
146+
}
147+
fs.writeFileSync('./src/stores/questions.generated.json', JSON.stringify(parsed, null, 2));
139148
}
140149

141150
function generateSurveyDescriptions() {
142-
return handleFile(SURVEY_DOC_URL, './src/modes/survey/descriptions.raw.txt', convertSurveyDescriptions);
151+
return handleFile(SURVEY_DOC_URL, './src/stores/questions.raw.txt', convertSurveyDescriptions);
143152
}
144153

145154
if (require.main === module) {

src/App.svelte

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,6 @@
1818
$: currentComponent = $currentMode.component();
1919
</script>
2020

21-
<style>
22-
.loader {
23-
flex-grow: 1;
24-
}
25-
</style>
26-
2721
{#await currentComponent}
2822
<div class="loader loading" />
2923
{:then value}
@@ -36,3 +30,9 @@
3630
{/await}
3731
<Disclaimer />
3832
<InfoDialog />
33+
34+
<style>
35+
.loader {
36+
flex-grow: 1;
37+
}
38+
</style>

0 commit comments

Comments
 (0)