diff --git a/index.js b/index.js
index 0d4cccd..6e4986e 100644
--- a/index.js
+++ b/index.js
@@ -1,6 +1,20 @@
const fs = require('fs')
+const path = require('path')
const Handlebars = require('handlebars')
+const extname = '.hbs'
+const partialsDir = path.join(__dirname, 'partials')
+
+fs.readdirSync(partialsDir)
+ .filter(filename => path.extname(filename) === extname)
+ .map(filename => [
+ filename,
+ fs.readFileSync(path.join(partialsDir, filename), 'utf8'),
+ ])
+ .forEach(([filename, template]) =>
+ Handlebars.registerPartial(path.basename(filename, extname), template),
+ )
+
Handlebars.registerHelper('formatDate', dateString =>
new Date(dateString).toLocaleDateString('en', {
month: 'short',
@@ -13,8 +27,8 @@ Handlebars.registerHelper('join', (arr, separator) =>
)
exports.render = resume => {
- const template = fs.readFileSync(`${__dirname}/resume.hbs`, 'utf-8')
- const css = fs.readFileSync(`${__dirname}/style.css`, 'utf-8')
+ const template = fs.readFileSync(path.join(__dirname, 'resume.hbs'), 'utf-8')
+ const css = fs.readFileSync(path.join(__dirname, 'style.css'), 'utf-8')
return Handlebars.compile(template)({ css, resume })
}
diff --git a/package-lock.json b/package-lock.json
index e61c382..014edd9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -124,6 +124,19 @@
"to-fast-properties": "^2.0.0"
}
},
+ "@sidvind/better-ajv-errors": {
+ "version": "0.6.10",
+ "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-0.6.10.tgz",
+ "integrity": "sha512-vPv8ks6J1KQW1LPYgxmANxcHniE6LFuekxNpcoUUkotJ2srxP4qXZ+y9qpo5LAXhnLoNP0AH8cninimK68gS6A==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "chalk": "^2.4.1",
+ "json-to-ast": "^2.0.3",
+ "jsonpointer": "^4.0.1",
+ "leven": "^3.1.0"
+ }
+ },
"@types/color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
@@ -148,6 +161,12 @@
"integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
"dev": true
},
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true
+ },
"aggregate-error": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
@@ -248,6 +267,12 @@
"sprintf-js": "~1.0.2"
}
},
+ "array-filter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
+ "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
+ "dev": true
+ },
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
@@ -284,6 +309,15 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
+ "available-typed-arrays": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz",
+ "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==",
+ "dev": true,
+ "requires": {
+ "array-filter": "^1.0.0"
+ }
+ },
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -408,6 +442,12 @@
"supports-color": "^5.3.0"
}
},
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
"chokidar": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz",
@@ -537,6 +577,12 @@
}
}
},
+ "cli-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
+ "dev": true
+ },
"cliui": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
@@ -548,6 +594,12 @@
"wrap-ansi": "^2.0.0"
}
},
+ "code-error-fragment": {
+ "version": "0.0.230",
+ "resolved": "https://registry.npmjs.org/code-error-fragment/-/code-error-fragment-0.0.230.tgz",
+ "integrity": "sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==",
+ "dev": true
+ },
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
@@ -741,12 +793,40 @@
"integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
"dev": true
},
+ "deep-equal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.3.tgz",
+ "integrity": "sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA==",
+ "dev": true,
+ "requires": {
+ "es-abstract": "^1.17.5",
+ "es-get-iterator": "^1.1.0",
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.2",
+ "is-regex": "^1.0.5",
+ "isarray": "^2.0.5",
+ "object-is": "^1.1.2",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "regexp.prototype.flags": "^1.3.0",
+ "side-channel": "^1.0.2",
+ "which-boxed-primitive": "^1.0.1",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.2"
+ }
+ },
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true
+ },
"default-require-extensions": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz",
@@ -756,6 +836,15 @@
"strip-bom": "^3.0.0"
}
},
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -826,6 +915,51 @@
"is-arrayish": "^0.2.1"
}
},
+ "es-abstract": {
+ "version": "1.17.6",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
+ "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.0",
+ "is-regex": "^1.1.0",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ }
+ },
+ "es-get-iterator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz",
+ "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==",
+ "dev": true,
+ "requires": {
+ "es-abstract": "^1.17.4",
+ "has-symbols": "^1.0.1",
+ "is-arguments": "^1.0.4",
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-string": "^1.0.5",
+ "isarray": "^2.0.5"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
"es6-error": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
@@ -1151,6 +1285,17 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
+ "external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
@@ -1282,6 +1427,12 @@
"vlq": "^0.2.1"
}
},
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
"foreground-child": {
"version": "1.5.6",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz",
@@ -1328,6 +1479,12 @@
"dev": true,
"optional": true
},
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
"function-loop": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz",
@@ -1405,6 +1562,12 @@
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
"dev": true
},
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
"handlebars": {
"version": "4.7.6",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
@@ -1433,12 +1596,27 @@
"har-schema": "^2.0.0"
}
},
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
"hasha": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz",
@@ -1460,6 +1638,78 @@
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
+ "html-validate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-3.0.0.tgz",
+ "integrity": "sha512-4yipnAN9O33nW7K5qncSHXuP08mqROIvJVlgjLykgRVdx2/ufTe/t/td/8+48iuQMfiu0sgTd8lHJO5o45QByQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@sidvind/better-ajv-errors": "^0.6.9",
+ "acorn-walk": "^7.0.0",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "deepmerge": "^4.0.0",
+ "eslint": "^7.0.0",
+ "espree": "^7.0.0",
+ "glob": "^7.1.3",
+ "inquirer": "^7.0.0",
+ "json-merge-patch": "^1.0.0",
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "dev": true,
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -1590,6 +1840,15 @@
}
}
},
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -1634,12 +1893,141 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "inquirer": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.1.tgz",
+ "integrity": "sha512-/+vOpHQHhoh90Znev8BXiuw1TDQ7IDxWsQnFafUEoK5+4uN5Eoz1p+3GqOj/NtzEi9VzWKQcV9Bm+i8moxedsA==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.16",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.6.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "dev": true,
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.19",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
+ "dev": true
+ },
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true
},
+ "is-bigint": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.0.tgz",
+ "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==",
+ "dev": true
+ },
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -1649,6 +2037,24 @@
"binary-extensions": "^2.0.0"
}
},
+ "is-boolean-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz",
+ "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
+ "dev": true
+ },
+ "is-date-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
+ "dev": true
+ },
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -1670,36 +2076,108 @@
"is-extglob": "^2.1.1"
}
},
+ "is-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz",
+ "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==",
+ "dev": true
+ },
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
+ "is-number-object": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz",
+ "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==",
+ "dev": true
+ },
"is-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
"dev": true
},
+ "is-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
"is-regexp": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
"integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
"dev": true
},
+ "is-set": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz",
+ "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==",
+ "dev": true
+ },
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
+ "is-string": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
+ "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-typed-array": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz",
+ "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.0",
+ "es-abstract": "^1.17.4",
+ "foreach": "^2.0.5",
+ "has-symbols": "^1.0.1"
+ }
+ },
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
+ "is-weakmap": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
+ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
+ "dev": true
+ },
+ "is-weakset": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz",
+ "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -1868,6 +2346,15 @@
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true
},
+ "json-merge-patch": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-1.0.0.tgz",
+ "integrity": "sha512-pG2/EXnf8UvFuST3lNnhBaA0UROQPzrp/5hlK0FHCu7ha8RDKy9AhKlBjTXugY/xgWxeCThRmUHD8QxEKOw1Iw==",
+ "dev": true,
+ "requires": {
+ "deep-equal": "^2.0.3"
+ }
+ },
"json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@@ -1898,6 +2385,22 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
+ "json-to-ast": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/json-to-ast/-/json-to-ast-2.1.0.tgz",
+ "integrity": "sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==",
+ "dev": true,
+ "requires": {
+ "code-error-fragment": "0.0.230",
+ "grapheme-splitter": "^1.0.4"
+ }
+ },
+ "jsonpointer": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz",
+ "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==",
+ "dev": true
+ },
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@@ -1916,6 +2419,12 @@
"integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=",
"dev": true
},
+ "leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true
+ },
"levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -2422,6 +2931,12 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
+ "mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "dev": true
+ },
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -2537,6 +3052,40 @@
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true
},
+ "object-inspect": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
+ "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -2587,6 +3136,12 @@
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true
},
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
"own-or": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz",
@@ -2862,6 +3417,16 @@
"picomatch": "^2.2.1"
}
},
+ "regexp.prototype.flags": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
+ "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ }
+ },
"regexpp": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
@@ -2951,6 +3516,12 @@
"glob": "^7.1.3"
}
},
+ "run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "dev": true
+ },
"rxjs": {
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz",
@@ -3011,6 +3582,16 @@
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
+ "side-channel": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz",
+ "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==",
+ "dev": true,
+ "requires": {
+ "es-abstract": "^1.17.0-next.1",
+ "object-inspect": "^1.7.0"
+ }
+ },
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
@@ -3151,6 +3732,26 @@
"strip-ansi": "^4.0.0"
}
},
+ "string.prototype.trimend": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
"stringify-object": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
@@ -4399,6 +5000,15 @@
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
},
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -4588,6 +5198,31 @@
"isexe": "^2.0.0"
}
},
+ "which-boxed-primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz",
+ "integrity": "sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==",
+ "dev": true,
+ "requires": {
+ "is-bigint": "^1.0.0",
+ "is-boolean-object": "^1.0.0",
+ "is-number-object": "^1.0.3",
+ "is-string": "^1.0.4",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "which-collection": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
+ "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+ "dev": true,
+ "requires": {
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-weakmap": "^2.0.1",
+ "is-weakset": "^2.0.1"
+ }
+ },
"which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
@@ -4600,6 +5235,20 @@
"integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
"dev": true
},
+ "which-typed-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz",
+ "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.2",
+ "es-abstract": "^1.17.5",
+ "foreach": "^2.0.5",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.1",
+ "is-typed-array": "^1.1.3"
+ }
+ },
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
diff --git a/package.json b/package.json
index 57c55f5..3f0d035 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
"files": [
"index.js",
"resume.hbs",
+ "partials/*.hbs",
"style.css"
],
"scripts": {
@@ -28,6 +29,7 @@
},
"devDependencies": {
"eslint": "7.4.0",
+ "html-validate": "3.0.0",
"husky": "4.2.5",
"lint-staged": "10.2.11",
"prettier": "2.0.5",
diff --git a/partials/about.hbs b/partials/about.hbs
new file mode 100644
index 0000000..ec2f569
--- /dev/null
+++ b/partials/about.hbs
@@ -0,0 +1,8 @@
+{{#summary}}
+
+{{/summary}}
diff --git a/partials/awards.hbs b/partials/awards.hbs
new file mode 100644
index 0000000..7766aad
--- /dev/null
+++ b/partials/awards.hbs
@@ -0,0 +1,27 @@
+{{#if resume.awards.length}}
+
+ Awards
+
+ {{#each resume.awards}}
+
+
+
{{title}}
+ {{#date}}
+ {{formatDate .}}
+ {{/date}}
+
+
+ {{#awarder}}
+
+ Awarded by {{.}}
+
+ {{/awarder}}
+
+ {{#summary}}
+
{{.}}
+ {{/summary}}
+
+ {{/each}}
+
+
+{{/if}}
diff --git a/partials/contact.hbs b/partials/contact.hbs
new file mode 100644
index 0000000..adc5f97
--- /dev/null
+++ b/partials/contact.hbs
@@ -0,0 +1,23 @@
+
diff --git a/partials/education.hbs b/partials/education.hbs
new file mode 100644
index 0000000..8123d88
--- /dev/null
+++ b/partials/education.hbs
@@ -0,0 +1,37 @@
+{{#if resume.education.length}}
+
+ Education
+
+ {{#each resume.education}}
+
+
+
{{institution}}
+
+ {{formatDate startDate}} –
+ {{#if endDate}}{{formatDate endDate}} {{else}}Present{{/if}}
+
+
+
+ {{#area}}
+
{{.}}
+ {{/area}}
+ {{#url}}
+
{{.}}
+ {{/url}}
+
+ {{#studyType}}
+
{{.}}
+ {{/studyType}}
+ {{#if courses.length}}
+
Courses
+
+ {{#courses}}
+ {{.}}
+ {{/courses}}
+
+ {{/if}}
+
+ {{/each}}
+
+
+{{/if}}
diff --git a/partials/header.hbs b/partials/header.hbs
new file mode 100644
index 0000000..72f6d1c
--- /dev/null
+++ b/partials/header.hbs
@@ -0,0 +1,8 @@
+
+ {{#name}}
+ {{.}}
+ {{/name}}
+ {{#label}}
+ {{.}}
+ {{/label}}
+
diff --git a/partials/interests.hbs b/partials/interests.hbs
new file mode 100644
index 0000000..47a7c53
--- /dev/null
+++ b/partials/interests.hbs
@@ -0,0 +1,21 @@
+{{#if resume.interests.length}}
+
+ Interests
+
+ {{#each resume.interests}}
+
+ {{#name}}
+
{{.}}
+ {{/name}}
+ {{#if keywords.length}}
+
+ {{#keywords}}
+ {{.}}
+ {{/keywords}}
+
+ {{/if}}
+
+ {{/each}}
+
+
+{{/if}}
diff --git a/partials/languages.hbs b/partials/languages.hbs
new file mode 100644
index 0000000..969348c
--- /dev/null
+++ b/partials/languages.hbs
@@ -0,0 +1,15 @@
+{{#if resume.languages.length}}
+
+ Languages
+
+ {{#each resume.languages}}
+
+ {{#language}}
+
{{.}}
+ {{/language}}
+ {{fluency}}
+
+ {{/each}}
+
+
+{{/if}}
diff --git a/partials/profiles.hbs b/partials/profiles.hbs
new file mode 100644
index 0000000..fd3cd43
--- /dev/null
+++ b/partials/profiles.hbs
@@ -0,0 +1,25 @@
+{{#if profiles.length}}
+
+ Profiles
+
+ {{#profiles}}
+
+ {{#network}}
+
{{.}}
+ {{/network}}
+ {{#if username}}
+ {{#if url}}
+
{{username}}
+ {{else}}
+ {{username}}
+ {{/if}}
+ {{else}}
+ {{#if url}}
+
{{url}}
+ {{/if}}
+ {{/if}}
+
+ {{/profiles}}
+
+
+{{/if}}
diff --git a/partials/projects.hbs b/partials/projects.hbs
new file mode 100644
index 0000000..9e695a1
--- /dev/null
+++ b/partials/projects.hbs
@@ -0,0 +1,40 @@
+{{#if resume.projects.length}}
+
+ Projects
+
+ {{#each resume.projects}}
+
+
+
{{name}}
+
+ {{formatDate startDate}} –
+ {{#if endDate}}{{formatDate endDate}} {{else}}Present{{/if}}
+
+
+
+
+ {{join roles}}
+ {{#entity}}
+ at {{.}}
+ {{/entity}}
+
+ {{#url}}
+
{{.}}
+ {{/url}}
+
+ {{#description}}
+
{{.}}
+ {{/description}}
+ {{#if highlights.length}}
+
Highlights
+
+ {{#highlights}}
+ {{.}}
+ {{/highlights}}
+
+ {{/if}}
+
+ {{/each}}
+
+
+{{/if}}
diff --git a/partials/publications.hbs b/partials/publications.hbs
new file mode 100644
index 0000000..d4fad82
--- /dev/null
+++ b/partials/publications.hbs
@@ -0,0 +1,30 @@
+{{#if resume.publications.length}}
+
+ Publications
+
+ {{#each resume.publications}}
+
+
+
{{name}}
+ {{#releaseDate}}
+ {{formatDate .}}
+ {{/releaseDate}}
+
+
+ {{#publisher}}
+
+ Published by {{.}}
+
+ {{/publisher}}
+ {{#url}}
+
{{.}}
+ {{/url}}
+
+ {{#summary}}
+
{{.}}
+ {{/summary}}
+
+ {{/each}}
+
+
+{{/if}}
diff --git a/partials/references.hbs b/partials/references.hbs
new file mode 100644
index 0000000..eb043a3
--- /dev/null
+++ b/partials/references.hbs
@@ -0,0 +1,19 @@
+{{#if resume.references.length}}
+
+ References
+
+ {{#each resume.references}}
+ {{#if reference}}
+
+ {{reference}}
+ {{#name}}
+
+ {{.}}
+
+ {{/name}}
+
+ {{/if}}
+ {{/each}}
+
+
+{{/if}}
diff --git a/partials/skills.hbs b/partials/skills.hbs
new file mode 100644
index 0000000..8efab71
--- /dev/null
+++ b/partials/skills.hbs
@@ -0,0 +1,21 @@
+{{#if resume.skills.length}}
+
+ Skills
+
+ {{#each resume.skills}}
+
+ {{#name}}
+
{{.}}
+ {{/name}}
+ {{#if keywords.length}}
+
+ {{#keywords}}
+ {{.}}
+ {{/keywords}}
+
+ {{/if}}
+
+ {{/each}}
+
+
+{{/if}}
diff --git a/partials/volunteer.hbs b/partials/volunteer.hbs
new file mode 100644
index 0000000..609fb24
--- /dev/null
+++ b/partials/volunteer.hbs
@@ -0,0 +1,37 @@
+{{#if resume.volunteer.length}}
+
+ Volunteer
+
+ {{#each resume.volunteer}}
+
+
+
{{organization}}
+
+ {{formatDate startDate}} –
+ {{#if endDate}}{{formatDate endDate}} {{else}}Present{{/if}}
+
+
+
+ {{#position}}
+
{{.}}
+ {{/position}}
+ {{#url}}
+
{{.}}
+ {{/url}}
+
+ {{#summary}}
+
{{.}}
+ {{/summary}}
+ {{#if highlights.length}}
+
Highlights
+
+ {{#highlights}}
+ {{.}}
+ {{/highlights}}
+
+ {{/if}}
+
+ {{/each}}
+
+
+{{/if}}
diff --git a/partials/work.hbs b/partials/work.hbs
new file mode 100644
index 0000000..851dfe3
--- /dev/null
+++ b/partials/work.hbs
@@ -0,0 +1,37 @@
+{{#if resume.work.length}}
+
+ Work
+
+ {{#each resume.work}}
+
+
+
{{name}}
+
+ {{formatDate startDate}} –
+ {{#if endDate}}{{formatDate endDate}} {{else}}Present{{/if}}
+
+
+
+ {{#position}}
+
{{.}}
+ {{/position}}
+ {{#url}}
+
{{.}}
+ {{/url}}
+
+ {{#summary}}
+
{{.}}
+ {{/summary}}
+ {{#if highlights.length}}
+
Highlights
+
+ {{#highlights}}
+ {{.}}
+ {{/highlights}}
+
+ {{/if}}
+
+ {{/each}}
+
+
+{{/if}}
diff --git a/resume.hbs b/resume.hbs
index e4fab93..fc76b8f 100644
--- a/resume.hbs
+++ b/resume.hbs
@@ -2,474 +2,29 @@
- {{#resume.basics}}{{name}}{{/resume.basics}}
-
+ {{resume.basics.name}}
+
-
-
+
-
+ {{#resume.basics}}
+ {{> header}}
+ {{> contact}}
+ {{> about}}
+ {{> profiles}}
+ {{/resume.basics}}
-
- {{#resume.basics}}
-
- {{#summary}}
-
- {{/summary}}
- {{#if profiles.length}}
-
-
-
-
- {{#profiles}}
-
- {{#network}}
-
{{.}}
- {{/network}}
- {{#if username}}
-
- {{#if url}}
-
- {{else}}
- {{username}}
- {{/if}}
-
- {{else}}
- {{#if url}}
-
- {{/if}}
- {{/if}}
-
- {{/profiles}}
-
-
-
- {{/if}}
- {{/resume.basics}}
-
- {{#if resume.work.length}}
-
-
-
-
- {{#each resume.work}}
-
-
- {{name}}
-
- {{formatDate startDate}} — {{#if endDate}}{{formatDate endDate}}{{else}}Present{{/if}}
-
-
- {{#url}}
-
- {{/url}}
- {{#position}}
-
- {{.}}
-
- {{/position}}
- {{#summary}}
-
- {{/summary}}
- {{#if highlights.length}}
-
Highlights
-
- {{#highlights}}
- {{.}}
- {{/highlights}}
-
- {{/if}}
-
- {{/each}}
-
-
-
- {{/if}}
-
- {{#if resume.volunteer.length}}
-
-
-
-
- {{#each resume.volunteer}}
-
-
- {{organization}}
-
- {{formatDate startDate}} — {{#if endDate}}{{formatDate endDate}}{{else}}Present{{/if}}
-
-
- {{#url}}
-
- {{/url}}
- {{#position}}
-
- {{.}}
-
- {{/position}}
- {{#summary}}
-
- {{/summary}}
- {{#if highlights.length}}
-
Highlights
-
- {{#highlights}}
- {{.}}
- {{/highlights}}
-
- {{/if}}
-
- {{/each}}
-
-
-
- {{/if}}
-
- {{#if resume.education.length}}
-
-
-
-
- {{#each resume.education}}
-
-
- {{institution}}
-
- {{formatDate startDate}} — {{#if endDate}}{{formatDate endDate}}{{else}}Present{{/if}}
-
-
- {{#url}}
-
- {{/url}}
- {{#area}}
-
- {{.}}
-
- {{/area}}
- {{#studyType}}
-
- {{.}}
-
- {{/studyType}}
- {{#if courses.length}}
-
Courses
-
- {{#courses}}
- {{.}}
- {{/courses}}
-
- {{/if}}
-
- {{/each}}
-
-
-
- {{/if}}
-
- {{#if resume.projects.length}}
-
-
-
-
- {{#each resume.projects}}
-
-
- {{name}}
-
- {{formatDate startDate}} — {{#if endDate}}{{formatDate endDate}}{{else}}Present{{/if}}
-
-
- {{#url}}
-
- {{/url}}
-
- {{join roles}}
- {{#entity}}
- at
- {{.}}
- {{/entity}}
-
- {{#description}}
-
- {{/description}}
- {{#if highlights.length}}
-
Highlights
-
- {{#highlights}}
- {{.}}
- {{/highlights}}
-
- {{/if}}
-
- {{/each}}
-
-
-
- {{/if}}
-
- {{#if resume.awards.length}}
-
-
-
-
- {{#each resume.awards}}
-
-
- {{title}}
-
- {{#date}}
-
- Awarded
- {{formatDate .}}
-
- {{/date}}
- {{#awarder}}
-
- by
- {{.}}
-
- {{/awarder}}
- {{#summary}}
-
- {{.}}
-
- {{/summary}}
-
- {{/each}}
-
-
-
- {{/if}}
-
- {{#if resume.publications.length}}
-
-
-
-
- {{#each resume.publications}}
-
-
- {{name}}
-
- {{releaseDate}}
-
-
- {{#url}}
-
- {{/url}}
- {{#publisher}}
-
- Published by
- {{.}}
-
- {{/publisher}}
- {{#summary}}
-
- {{/summary}}
-
- {{/each}}
-
-
-
- {{/if}}
-
- {{#if resume.skills.length}}
-
-
-
-
- {{#each resume.skills}}
-
- {{#name}}
-
-
{{.}}
-
- {{/name}}
- {{#if keywords.length}}
-
- {{#keywords}}{{.}} {{/keywords}}
-
- {{/if}}
-
- {{/each}}
-
-
-
- {{/if}}
-
- {{#if resume.languages.length}}
-
-
-
-
- {{#each resume.languages}}
-
- {{#language}}
-
- {{.}}
-
- {{/language}}
- {{#fluency}}
-
- {{.}}
-
- {{/fluency}}
-
- {{/each}}
-
-
-
- {{/if}}
-
- {{#if resume.interests.length}}
-
-
-
-
- {{#each resume.interests}}
-
- {{#name}}
-
-
{{.}}
-
- {{/name}}
- {{#if keywords.length}}
-
- {{#keywords}}{{.}} {{/keywords}}
-
- {{/if}}
-
- {{/each}}
-
-
-
- {{/if}}
-
- {{#if resume.references.length}}
-
-
-
-
- {{#each resume.references}}
-
- {{#if reference}}
-
- {{reference}}
- {{#name}}
-
- — {{.}}
-
- {{/name}}
-
- {{/if}}
-
- {{/each}}
-
-
-
- {{/if}}
-
+ {{> work}}
+ {{> volunteer}}
+ {{> education}}
+ {{> projects}}
+ {{> awards}}
+ {{> publications}}
+ {{> skills}}
+ {{> languages}}
+ {{> interests}}
+ {{> references}}
diff --git a/style.css b/style.css
index 4775e5b..62adff0 100644
--- a/style.css
+++ b/style.css
@@ -1,181 +1,209 @@
-@font-face {
- font-family: 'Octicons';
- font-style: normal;
- font-weight: normal;
- src: url('data:font/woff;base64,d09GRgABAAAAAAWgAAsAAAAABVQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIMrGNtYXAAAAFoAAAAXAAAAFzxE/EEZ2FzcAAAAcQAAAAIAAAACAAAABBnbHlmAAABzAAAAXwAAAF8tFkZ3GhlYWQAAANIAAAANgAAADYYMkpraGhlYQAAA4AAAAAkAAAAJAfBA8dobXR4AAADpAAAABgAAAAYDAAAAWxvY2EAAAO8AAAADgAAAA4A5gBgbWF4cAAAA8wAAAAgAAAAIAAKAFBuYW1lAAAD7AAAAZIAAAGSxxxndHBvc3QAAAWAAAAAIAAAACAAAwAAAAMCqwGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NcDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEAEAAAAAMAAgAAgAEAAEAIPBS8Nf//f//AAAAAAAg8FLw1//9//8AAf/jD7IPLgADAAEAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAwAIAAsAAGwAAEzQ3PgE3NjMyFx4BFxYVFAcOAQcGIyInLgEnJgAUFEYvLjU1Li9GFBQUFEYvLjU1Li9GFBQBwDUuL0YUFBQURi8uNTUuL0YUFBQURi8uAAMAAQCZA/8DDgAzAEEATQAAAQcFHgEVFAYHBQYiJyUVHgEVFAYHHgEdARQiPQE0NjcuATU0Njc1Jy4BNTQ2NyUyNjMyFgEXIxYyPwEVFAYjIiY1ExQWMzI2NTQmIyIGAgcBAekHCQkH/hcDBwP+xw4SBQQEBYAFBAQFEg5vBwkJBwHpAgMCAQT++vUBBgwF9ZZqapbBJhobJSUbGiYDDQGZAgwHCAwCmAEBYl0IHRIJEAcHEAmlGhqlCRAHBxAJER4IcSQCCwgICwKZAQH+s0wCAkygMDAwMAFADRMTDQ0TEwAAAAEAAAABAADtMnsXXw889QALBAAAAAAA2oqDMAAAAADaioMwAAAAAAP/Aw4AAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA/8AAQAAAAAAAAAAAAAAAAAAAAYEAAAAAAAAAAAAAAACAAAAAgAAAAQAAAEAAAAAAAoAFAAeAEwAvgAAAAEAAAAGAE4AAwAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBvY3RpY29ucwBvAGMAdABpAGMAbwBuAHNWZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBvY3RpY29ucwBvAGMAdABpAGMAbwBuAHNvY3RpY29ucwBvAGMAdABpAGMAbwBuAHNSZWd1bGFyAFIAZQBnAHUAbABhAHJvY3RpY29ucwBvAGMAdABpAGMAbwBuAHNGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
- format('woff');
+:root {
+ /* Colors */
+ --primaryColor: #212529;
+ --secondaryColor: #95a5a6;
+ --accentColor: #f1c40f;
+ --linkColor: #2ecc71;
+ --mutedColor: #f4f6f6;
+
+ /* Typography */
+ --ratio: 1.25;
+ --scale0: 1rem;
+ --scale1: calc(var(--scale0) * var(--ratio));
+ --scale2: calc(var(--scale1) * var(--ratio));
+ --scale3: calc(var(--scale2) * var(--ratio));
+ --scale4: calc(var(--scale3) * var(--ratio));
+ --scale5: calc(var(--scale4) * var(--ratio));
}
+
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
html {
font-size: 14px;
}
+
body {
- background: #fff;
- font-family: Lato, sans-serif;
- margin: 0 0 6rem;
-}
-a {
- color: #2ecc71;
-}
-a:focus,
-a:hover {
- color: #f1c40f;
- text-decoration: none;
-}
-section {
- margin-top: 2rem;
-}
-li {
- line-height: 1.8;
- list-style: none;
-}
-li:before {
- content: '\f052';
- float: left;
- font: 13px Octicons;
- margin-top: 6px;
- margin-left: -20px;
- opacity: 0.1;
- position: absolute;
-}
-blockquote {
- border-left: 5px solid #e7e9ec;
- font-size: 1rem;
- padding-left: 1rem;
-}
-em {
- color: #95a5a6;
- font-weight: normal;
- font-style: normal;
-}
-h4 span:first-child {
- font-weight: bold;
-}
-.container {
- max-width: 750px;
- padding: 0 2rem;
-}
-.col-sm-6 {
- margin-bottom: 10px;
-}
-.col-sm-12 h4 {
- margin-top: 1rem;
-}
-.col-sm-12 + .col-sm-12 {
- margin-top: 2rem;
-}
-.keywords {
- padding: 0;
-}
-.keywords > li {
- display: inline-block;
- background: #f4f6f6;
- margin: 0 4px 4px 0;
- padding: 2px 8px;
-}
-.keywords > li:before {
- content: none;
-}
-#header {
- background: #f4f6f6;
- padding: 4rem 0;
- margin-bottom: 4rem;
-}
-#header h2 {
- color: #95a5a6;
-}
-#content h3 {
- color: #f1c40f;
-}
-#content aside {
- text-align: right;
- padding-right: 2rem;
-}
-#work .position,
-#volunteer .position {
- font-weight: bold;
- margin-bottom: 8px;
-}
-#education .area {
- font-weight: bold;
-}
-#education .area:before {
- content: '\f0d7';
- font: 16px Octicons;
- margin-right: 6px;
- vertical-align: bottom;
-}
-#education .studyType {
- margin-left: 25px;
-}
-#awards .summary,
-#publications .summary,
-#projects .description {
- margin-top: 8px;
-}
-#publications .website a:before {
- content: attr(href);
-}
-#interests .row,
-#skills .row {
- display: block;
-}
-#interests .col-sm-6,
-#skills .col-sm-6 {
- float: left;
+ color: var(--primaryColor);
+ display: grid;
+ font: 1em/1.5 Lato, sans-serif;
+ gap: 2em;
+ grid-template-columns:
+ [full-start]
+ 1fr
+ [main-start side-start]
+ minmax(min-content, 12em)
+ [side-end content-start]
+ minmax(min-content, 36em)
+ [main-end content-end]
+ 1fr
+ [full-end];
+ grid-template-rows: auto [content] 0;
+ margin-bottom: 4em;
}
-@media (min-width: 480px) {
- .strike-through {
- border-top: 1px solid #f4f6f6;
- height: 20px;
- margin-top: 12px;
- margin-bottom: -2px;
- position: relative;
+body::before {
+ content: '';
+ grid-column: full;
+ grid-row: content;
+}
+
+ol,
+ul {
+ padding-left: 1em;
+}
+
+li + li {
+ margin-top: 0.2em;
+}
+
+li::marker {
+ color: var(--mutedColor);
+}
+
+a {
+ color: var(--linkColor);
+ text-decoration: none;
+ transition: color 0.2s;
+}
+
+a:focus,
+a:hover {
+ color: var(--accentColor);
+}
+
+h1,
+h2,
+h3,
+h5 {
+ font-weight: normal;
+}
+
+h1,
+h2,
+h3 {
+ line-height: 1.2;
+}
+
+h1 {
+ font-size: var(--scale5);
+}
+
+h2 {
+ color: var(--secondaryColor);
+ font-size: var(--scale4);
+}
+
+h3 {
+ color: var(--accentColor);
+ font-size: var(--scale3);
+ grid-column: side;
+ margin-bottom: 1rem;
+}
+
+h4 {
+ font-size: var(--scale2);
+}
+
+h5 {
+ font-size: var(--scale1);
+}
+
+h6 {
+ font-size: var(--scale0);
+}
+
+p:not(:first-child) {
+ margin-top: 1em;
+}
+
+p:not(:last-child) {
+ margin-bottom: 1em;
+}
+
+blockquote {
+ border-left: 0.2em solid var(--mutedColor);
+ padding-left: 1em;
+}
+
+cite {
+ color: var(--secondaryColor);
+ font-style: inherit;
+}
+
+cite::before {
+ content: '— ';
+}
+
+header {
+ background: var(--mutedColor);
+ display: inherit;
+ gap: inherit;
+ grid-column: full;
+ grid-template-columns: inherit;
+ padding: 4em 0;
+ row-gap: 0;
+}
+
+header > *,
+section {
+ grid-column: main;
+}
+
+.grid-list {
+ display: grid;
+ gap: 1em;
+}
+
+.spaced-list {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+.spaced-list:first-child::before {
+ border-bottom: 1px solid var(--mutedColor);
+ content: '';
+ flex-grow: 1;
+ margin: 0 1em;
+ order: 1;
+}
+
+.spaced-list > :nth-child(2) {
+ order: 2;
+}
+
+.tag-list {
+ display: flex;
+ list-style: none;
+ padding: 0;
+}
+
+.tag-list > li {
+ background: var(--mutedColor);
+ margin: 0 0.2em 0.2em 0;
+ padding: 0.2em 0.6em;
+}
+
+@media (min-width: 48em) {
+ h3 {
+ text-align: right;
+ margin-bottom: inherit;
}
- .strike-through span,
- .strike-through a {
- background: #fff;
- position: absolute;
+
+ header > *,
+ section {
+ grid-column: content;
}
- .strike-through span:first-child {
- padding-right: 20px;
- margin-top: -12px;
+
+ section {
+ display: contents;
}
- .strike-through span + span {
- font-size: 1rem;
- margin-top: -10px;
- padding-left: 20px;
- right: 0;
- }
-}
-@media (max-width: 768px) {
- .col-sm-6:last-child {
- margin-bottom: 0;
- }
- #content aside {
- margin-bottom: 20px;
- padding-right: 0;
- text-align: left;
- }
- #publications .website a:before {
- content: 'View publication';
- }
-}
-@media (max-width: 480px) {
- .date {
- font-size: 1rem;
- }
- .strike-through span:first-child {
- margin-bottom: 7px;
- }
- .strike-through span {
- display: block;
- }
- #header {
- margin-bottom: 10px;
- padding: 40px 0;
- }
- #actions {
- display: none;
+
+ .grid-list {
+ grid-template-columns: 1fr 1fr;
}
}
diff --git a/tap-snapshots/test-render.js-TAP.test.js b/tap-snapshots/test-render.js-TAP.test.js
index 6141ed2..2d8b9c7 100644
--- a/tap-snapshots/test-render.js-TAP.test.js
+++ b/tap-snapshots/test-render.js-TAP.test.js
@@ -14,529 +14,447 @@ exports[`test/render.js TAP renders a resume > must match snapshot 1`] = `
-
-
+ header > *,
+ section {
+ grid-column: content;
+ }
+
+ section {
+ display: contents;
+ }
+
+ .grid-list {
+ grid-template-columns: 1fr 1fr;
+ }
+}
+
-
-
-