diff --git a/README.md b/README.md
index e9702db..0e9874f 100644
--- a/README.md
+++ b/README.md
@@ -12,13 +12,16 @@ $ npm start
### Time Travel
Time travel displays past versions of the repo based on merged pull requests.
-The build script in `time-travel` folder fetchs each merged pull request's `docs` folder content (except for `docs/time-travel/`) and store them in `docs/time-travel/history`, then writes data to `docs/time-travel/index.json` for later use. Currently this process has to be done manually.
+The build script in `time-travel` folder fetchs each merged pull request's `docs` folder content (except for `docs/time-travel/`) and store them in `docs/time-travel/history`, then writes data to `docs/time-travel/index.json` for later use. Currently this process has to be done manually. The script will only build missing PR history. To do a full rebuild of the all PRs pass the environment variable `FULL_REBUILD=true`.
**Note**: Create a `.env` with your github's access token in order to fetch data from Github API.
```shell
# update build
$ npm run build-timetravel
+
+# full history rebuild
+$ FULL_REBUILD=true npm run build-timetravel
```
The page for time-travel is intentionally kept separated from `docs/` (not reusing `docs/css/style.css`) so it's easier to maintain.
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/css/style.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/css/style.css
new file mode 100644
index 0000000..c36f875
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/css/style.css
@@ -0,0 +1,410 @@
+@charset "UTF-8";
+:root {
+ /* color defaults */
+ --brand-blue: #05a6f0;
+ --brand-yellow: #ffba08;
+ --brand-red: #f35325;
+ --brand-green: #81bc06;
+ --white: #ffffff;
+ --off-white: #bbb;
+ --dark-grey: #121212;
+ /* typeface defaults */
+ --primary-typeface: Segoe UI, SegoeUI, Segoe WP, Helvetica Neue, Helvetica,
+ Tahoma, Arial, sans-serif;
+ --title-font-size: 1.3rem;
+ --base-font-size: 20px;
+ --base-font-line-height: 28px;
+ --small-font-size: 12px;
+ --small-font-line-height: 14px;
+ /* animations */
+ --root-gradient-animation: 4s both root-gradient linear infinite;
+ --move-in-offset: 20px;
+ --move-in-animation: 1s both move-in;
+ --move-in-base-delay: 100ms;
+ --logo-tiles-in-animation: 1s both logo-tiles-in;
+ --logo-tiles-in-delay: 100ms;
+ /* spacing */
+ --small-space: 1em;
+ --large-space: 2em;
+ --text-block-spacing: 0.5em;
+}
+
+@keyframes move-in {
+ from {
+ transform: translateY(var(--move-in-offset));
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+@keyframes logo-tiles-in {
+ 0% {
+ opacity: 0;
+ filter: grayscale(1) hue-rotate(100deg);
+ }
+ 25% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 1;
+ }
+ 55% {
+ opacity: 0;
+ }
+ 60% {
+ opacity: 1;
+ filter: grayscale(1) hue-rotate(100deg);
+ }
+ 100% {
+ opacity: 1;
+ filter: grayscale(0) hue-rotate(0deg);
+ }
+}
+
+@keyframes logo-tiles-hover {
+ from {
+ filter: hue-rotate(0deg);
+ }
+ to {
+ filter: hue-rotate(360deg);
+ }
+}
+
+@keyframes root-gradient {
+ 0% {
+ opacity: 0;
+ }
+ 40% {
+ opacity: 1;
+ }
+ 60% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes text-gradient-ltr {
+ to {
+ background-position: -600% center;
+ }
+}
+
+@keyframes text-gradient-rtl {
+ to {
+ background-position: 600% center;
+ }
+}
+
+/* Common */
+
+html {
+ position: relative;
+ font-size: var(--base-font-size);
+ font-family: var(--primary-typeface);
+ line-height: var(--base-font-line-height);
+ background-color: var(--dark-grey);
+}
+
+html[data-loaded] {
+ background: linear-gradient(
+ to bottom,
+ var(--brand-blue) 33%,
+ var(--brand-yellow) 67%
+ );
+}
+
+html:before {
+ content: "";
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ z-index: -1;
+ background: unquote(
+ "-moz-linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)"
+ );
+ background: unquote(
+ "linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)"
+ );
+ background: linear-gradient(
+ to bottom,
+ var(--brand-yellow) 33%,
+ var(--brand-blue) 67%
+ );
+ animation: var(--root-gradient-animation);
+}
+
+body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ min-height: calc(100vh - 10px);
+ margin: 5px;
+ padding: 0 var(--small-space);
+ color: var(--off-white);
+ background-color: var(--dark-grey);
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+::-moz-selection {
+ color: var(--white);
+ background-color: var(--brand-blue);
+}
+
+::selection {
+ color: var(--white);
+ background: #05a6f0;
+ /* Edge could not work with custom property here */
+ background-color: var(--brand-blue);
+}
+
+a {
+ color: var(--brand-yellow);
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ background-image: linear-gradient(
+ to right,
+ var(--brand-yellow) 25%,
+ var(--brand-green) 50%,
+ var(--brand-blue) 75%,
+ var(--brand-yellow) 100%
+ );
+ background-size: 600% auto;
+ -webkit-text-fill-color: transparent;
+ -webkit-background-clip: text;
+ background-clip: text;
+}
+
+html[dir="ltr"] a:not(.logo-link):hover,
+html[dir="ltr"] a:not(.logo-link):focus {
+ animation: text-gradient-ltr 6.5s linear infinite;
+}
+
+html[dir="rtl"] a:not(.logo-link):hover,
+html[dir="rtl"] a:not(.logo-link):focus {
+ animation: text-gradient-rtl 6.5s linear infinite;
+}
+
+p,
+h1 {
+ margin: 0;
+ padding: var(--text-block-spacing) 0;
+}
+
+/* Container */
+
+.container {
+ max-width: 31rem;
+ margin: 0 auto auto;
+}
+
+@media only screen and (max-width: 40em) {
+ .container {
+ max-width: 80vw;
+ }
+ .container p {
+ font-size: 1.125rem;
+ }
+}
+
+main p:nth-child(2) {
+ animation-delay: calc(var(--move-in-base-delay) * 6);
+}
+
+main p:nth-child(3) {
+ animation-delay: calc(var(--move-in-base-delay) * 7);
+}
+
+main p:nth-child(4) {
+ animation-delay: calc(var(--move-in-base-delay) * 8);
+}
+
+/* Logo */
+
+.logo-link {
+ display: block;
+ width: 4rem;
+ height: 4rem;
+ margin: var(--large-space) auto;
+}
+
+.logo-image {
+ display: block;
+ width: 100%;
+ height: auto;
+}
+
+.logo {
+ display: flex;
+ flex-wrap: wrap;
+ height: 100%;
+ width: 100%;
+ margin: 0;
+}
+
+.logo-tile {
+ display: block;
+ width: 45%;
+ height: 45%;
+ margin: 2.5%;
+ outline: 1px solid transparent;
+ animation: var(--logo-tiles-in-animation);
+}
+
+.winner {
+ display: block;
+ margin: auto;
+ text-align: center;
+}
+
+.logo-tile--red {
+ background-color: var(--brand-red);
+ transition: 150ms;
+}
+
+.logo-tile--largered {
+ background-color: var(--brand-red);
+ transform: scale(1.2) translateY(-3px);
+ transition: 150ms;
+}
+
+.logo-tile--red:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--green {
+ background-color: var(--brand-green);
+ animation-delay: var(--logo-tiles-in-delay);
+ transition: 150ms;
+}
+
+.logo-tile--largegreen {
+ background-color: var(--brand-green);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: var(--logo-tiles-in-delay);
+ transition: 150ms;
+}
+
+.logo-tile--green:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--blue {
+ background-color: var(--brand-blue);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 2);
+ transition: 150ms;
+}
+
+.logo-tile--largeblue {
+ background-color: var(--brand-blue);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 2);
+ transition: 150ms;
+}
+
+.logo-tile--blue:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--yellow {
+ background-color: var(--brand-yellow);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 3);
+ transition: 150ms;
+}
+
+.logo-tile--largeyellow {
+ background-color: var(--brand-yellow);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 3);
+ transition: 150ms;
+}
+
+.logo-tile--yellow:active {
+ transform: scale(0.8);
+}
+
+/* Main */
+
+main h1 {
+ animation: var(--move-in-animation);
+ animation-delay: calc(var(--move-in-base-delay) * 4);
+ font-size: var(--title-font-size);
+ font-weight: bold;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+ margin-bottom: var(--small-space);
+ padding-bottom: var(--small-space);
+}
+
+main p {
+ animation: var(--move-in-animation);
+}
+main p:nth-of-type(1) {
+ animation-delay: calc(var(--move-in-base-delay) * 5);
+}
+main p:nth-of-type(2) {
+ animation-delay: calc(var(--move-in-base-delay) * 6);
+}
+main p:nth-of-type(3) {
+ animation-delay: calc(var(--move-in-base-delay) * 7);
+}
+main p:nth-of-type(4) {
+ animation-delay: calc(var(--move-in-base-delay) * 8);
+}
+
+/* Footer */
+
+.footer {
+ font-size: var(--small-font-size);
+ line-height: var(--small-font-line-height);
+ text-align: center;
+ margin: var(--small-space) 0 0;
+ padding: var(--small-space) 0;
+ overflow: hidden;
+}
+
+@media only screen and (max-width: 40em) {
+ footer {
+ font-size: 1rem;
+ margin: 0 auto;
+ max-width: 80vw;
+ }
+}
+
+footer p {
+ animation: var(--move-in-animation);
+ animation-delay: calc(var(--move-in-base-delay) * 11);
+}
+
+footer [href*="github"]:hover,
+footer [href*="github"]:focus {
+ color: var(--brand-green);
+}
+
+.footer-piece--separate {
+ display: block;
+}
+
+@media only screen and (max-width: 40em) {
+ .footer-piece {
+ display: block;
+ }
+}
+
+.time-travel {
+ text-align: center;
+}
+
+.time-travel a {
+ cursor: pointer;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/images/microsoft-og-image.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/images/microsoft-og-image.png
new file mode 100644
index 0000000..2f0eee7
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/images/microsoft-og-image.png differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/index.html b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/index.html
new file mode 100644
index 0000000..77d4956
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/index.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+ Join Microsoft Developer Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ š Simon says...A winner is you! š
+
+
+
+ Microsoft is looking for designers who code to help create the most compelling developer tools & services on
+ the planet.
+
+
+ We have open positions for technical product designers & design leaders in San Francisco, Seattle, and elsewhere.
+
+
+ We use PCs, Macs, Figma, Sketch, GitHub, JavaScript, ZEIT, and other modern tools to design, prototype, and build the future
+ of software development.
+
+
+ We believe in diversity, openness, and building delightful tools that empower every person and organization to achieve more.
+
+
+ Interested? Send a PR with any improvement to
+ microsoft/join-dev-design or
+ email us .
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/scripts/ls.helper.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/scripts/ls.helper.js
new file mode 100644
index 0000000..983b950
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/scripts/ls.helper.js
@@ -0,0 +1,52 @@
+let debug = false;
+
+const setDebug = function(val) {
+ debug = val;
+ console.log("LS DEBUG: ", val);
+};
+
+const setItem = function(key, item) {
+ if (window.localStorage) {
+ localStorage.setItem(key, item);
+ if (debug) {
+ console.log("ls.setItem", item);
+ }
+ }
+};
+
+const getItem = function(key) {
+ if (window.localStorage) {
+ const item = localStorage.getItem(key);
+ if (debug) {
+ console.log("ls.getItem", item);
+ }
+ return item;
+ }
+ return undefined;
+};
+
+const clear = function(key) {
+ if (window.localStorage) {
+ localStorage.clear(key);
+ if (debug) {
+ console.log("ls.getItem", item);
+ }
+ }
+};
+
+const removeItem = function(key) {
+ if (window.localStorage) {
+ localStorage.removeItem(key);
+ if (debug) {
+ console.log("ls.removeItem", key);
+ }
+ }
+};
+
+window.ls = {
+ setItem,
+ getItem,
+ clear,
+ removeItem,
+ setDebug
+};
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/simon.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/simon.js
new file mode 100644
index 0000000..dd38e82
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/simon.js
@@ -0,0 +1,147 @@
+new Vue({
+ el: "#app",
+ data: {
+ colors: ["red", "green", "yellow", "blue"],
+ currentSequence: [],
+ colorStatus: {
+ red: false,
+ green: false,
+ yellow: false,
+ blue: false
+ },
+ colorSymbols: {
+ red: "ā¤ļø",
+ green: "š",
+ yellow: "š",
+ blue: "š"
+ },
+ userClicks: [],
+ currentScore: 0,
+ difficulty: 1000
+ },
+ created() {
+ this.generateSequence();
+ },
+ watch: {
+ winner: function(isWinner) {
+ if (isWinner) {
+ this.changeTheme();
+ }
+ }
+ },
+ computed: {
+ logoTitleRed: function() {
+ return this.colorStatus.red ? "logo-tile--largered" : "logo-tile--red";
+ },
+ logoTitleGreen: function() {
+ return this.colorStatus.green
+ ? "logo-tile--largegreen"
+ : "logo-tile--green";
+ },
+ logoTitleYellow: function() {
+ return this.colorStatus.yellow
+ ? "logo-tile--largeyellow"
+ : "logo-tile--yellow";
+ },
+ logoTitleBlue: function() {
+ return this.colorStatus.blue ? "logo-tile--largeblue" : "logo-tile--blue";
+ },
+ winner: function() {
+ return this.currentScore >= 10 ? true : false;
+ }
+ },
+ methods: {
+ generateSequence: function() {
+ this.currentSequence.push(
+ this.colors[this.getRandomInt(this.colors.length)]
+ );
+ if (this.currentScore > 0) {
+ this.play();
+ } else {
+ console.log(
+ `šµļøāāļøšµļøāāļø PSSST! There is a game inside this webpage...\nClick the ${
+ this.colorSymbols[this.currentSequence[0]]
+ } tile on the Microsoft logo to play!`
+ );
+ }
+ },
+ clickColor: function(color) {
+ this.userClicks.push(color);
+ if (this.checkCorrect()) {
+ this.userClicks = [];
+ if (this.difficulty > 100) {
+ this.difficulty -= 100;
+ }
+ this.currentScore++;
+ console.log(
+ `Simon says..."correct!" š Your score is`,
+ this.currentScore
+ );
+ this.lightUp();
+ this.generateSequence();
+ }
+ },
+ getRandomInt: function(max) {
+ return Math.floor(Math.random() * Math.floor(max));
+ },
+ timer: function(ms) {
+ return new Promise(res => setTimeout(res, ms));
+ },
+ checkCorrect: function() {
+ let matching = true;
+ let sequence =
+ this.userClicks[this.userClicks.length - 1] ===
+ this.currentSequence[this.userClicks.length - 1];
+ if (!sequence) {
+ this.reset();
+ }
+ for (let i = 0; i < this.currentSequence.length; i++) {
+ if (this.userClicks[i] !== this.currentSequence[i]) {
+ matching = false;
+ break;
+ }
+ }
+ return matching;
+ },
+ reset: function() {
+ console.log(`š¢ Game Over! Refresh to play again.`);
+ this.currentSequence = [];
+ this.userClicks = [];
+ this.currentScore = 0;
+ this.difficulty = 1000;
+ this.generateSequence();
+ },
+ play: async function() {
+ await this.timer(2000);
+ for (var i = 0; i < this.currentSequence.length; i++) {
+ this.colorStatus[this.currentSequence[i]] = true;
+ await this.timer(this.difficulty);
+ this.colorStatus[this.currentSequence[i]] = false;
+ await this.timer(this.difficulty / 2);
+ }
+ },
+ lightUp: async function() {
+ let t = 150;
+ this.colorStatus.red = true;
+ await this.timer(t);
+ this.colorStatus.red = false;
+ this.colorStatus.green = true;
+ await this.timer(t);
+ this.colorStatus.green = false;
+ this.colorStatus.yellow = true;
+ await this.timer(t);
+ this.colorStatus.yellow = false;
+ this.colorStatus.blue = true;
+ await this.timer(t);
+ this.colorStatus.blue = false;
+ this.colorStatus.red = true;
+ await this.timer(t);
+ this.colorStatus.red = false;
+ },
+ changeTheme: function() {
+ if (theme && theme.changeTo) {
+ theme.changeTo("msdos");
+ }
+ }
+ }
+});
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosblibbet.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosblibbet.png
new file mode 100644
index 0000000..1184e99
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosblibbet.png differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff
new file mode 100644
index 0000000..de7b9b2
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff2 b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff2
new file mode 100644
index 0000000..a8161d7
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdosmoreperfectdosvga.woff2 differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdostheme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdostheme.css
new file mode 100644
index 0000000..8100c3a
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/msdostheme.css
@@ -0,0 +1,122 @@
+@font-face {
+ font-family: "vga";
+ src: url("moreperfectdosvga.woff2") format("woff2"),
+ url("moreperfectdosvga.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+}
+
+/* MSDOS Font: 'More Perfect DOS VGA' by Adam Moore http://laemeur.sdf.org/fonts/ */
+
+body.js-theme-msdos {
+ color: #4bffff;
+ background: #0000ab;
+ font-family: "vga", "Courier New", Courier, monospace;
+ margin: 0;
+}
+
+.js-theme-msdos:before {
+ content: "";
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ right: 10px;
+ bottom: 10px;
+ border: 6px double #4bffff;
+}
+
+.js-theme-msdos:after {
+ content: "C:\\";
+ position: absolute;
+ top: 4px;
+ padding: 0 6px;
+ color: #0000ab;
+ background: #4bffff;
+ line-height: 0.9;
+ font-size: 1.2rem;
+}
+
+.js-theme-msdos .logo-link {
+ animation: none;
+}
+
+.js-theme-msdos .logo {
+ position: relative;
+}
+
+.js-theme-msdos .logo > span {
+ display: none;
+}
+
+.js-theme-msdos .logo:before {
+ content: "";
+ position: absolute;
+ top: 66%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 226px;
+ height: 32px;
+ z-index: 100;
+ background: url("blibbet.png") center/cover no-repeat;
+}
+
+.js-theme-msdos main h1 {
+ border-bottom: 2px solid #4bffff;
+}
+
+.js-theme-msdos a:not(.logo-link) {
+ color: #ffff44;
+ animation: none;
+}
+
+.js-theme-msdos a:not(.logo-link):hover,
+.js-theme-msdos a:not(.logo-link):focus {
+ color: #0e0e0e;
+ -webkit-text-fill-color: #000 !important;
+ padding: 0.2rem;
+ background: #ffff44;
+ position: relative;
+}
+
+.js-theme-msdos a:not(.logo-link):hover:after,
+.js-theme-msdos a:not(.logo-link):focus:after {
+ content: "";
+ position: absolute;
+ top: 6px;
+ left: 6px;
+ width: 100%;
+ height: 100%;
+ background: #000;
+ z-index: -1;
+}
+
+.js-theme-msdos .theme {
+ opacity: 1;
+}
+
+.js-theme-msdos .theme__item + .theme__item {
+ margin-left: 0.5rem;
+}
+
+.js-theme-msdos .theme__button:before {
+ content: "Theme";
+ padding-right: 5px;
+}
+
+.js-theme-msdos .theme__button {
+ text-indent: 0;
+ width: auto;
+ height: 1rem;
+ font-size: 0.8rem;
+ padding-right: 10px;
+ font-family: "vga", "Courier New", Courier, monospace;
+ background: #00a8a8;
+ border-radius: 0;
+ color: #0e0e0e;
+}
+
+.js-theme-msdos .theme__button:hover,
+.js-theme-msdos .theme__button:focus {
+ background: #ffff44;
+ color: #0e0e0e;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.css
new file mode 100644
index 0000000..e1192f2
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.css
@@ -0,0 +1,129 @@
+@keyframes fade-in {
+ from {
+ opacity: 0;
+ }
+ to {
+ transform: none;
+ opacity: 1;
+ }
+}
+
+/* UI Styling */
+
+.theme {
+ cursor: pointer;
+ display: inline-block;
+ position: relative;
+ margin: auto auto;
+ padding: 0.5rem 0.5rem;
+ font-size: 0;
+ text-align: center;
+ z-index: 1;
+ transition: opacity 0.3s ease;
+ pointer-events: all;
+}
+
+.theme__list,
+.theme__button {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+.theme__list {
+ list-style: none;
+ animation: 1s both fade-in;
+ animation-delay: calc(var(--move-in-base-delay) * 9);
+}
+
+.theme__item {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.theme__item + .theme__item {
+ margin-left: 0.5rem;
+ transition: margin-left 0.3s ease;
+}
+
+.theme__button {
+ display: block;
+ position: relative;
+ text-indent: -9999px;
+ width: 1.2rem;
+ height: 1.2rem;
+ background: blue;
+ border: 0px solid #444;
+ border-radius: 0.6rem;
+ cursor: pointer;
+ z-index: 100;
+}
+
+button.theme__button:focus {
+ text-decoration: none;
+ outline: none;
+ box-shadow: none;
+}
+
+.theme__button[value="dark"] {
+ background: black;
+}
+
+.theme__button[value="light"] {
+ background: white;
+}
+
+@media only screen and (min-width: 640px) {
+ .theme {
+ opacity: 0.5;
+ }
+ .theme:hover {
+ opacity: 1;
+ }
+ .theme__item + .theme__item {
+ margin-left: -0.8rem;
+ }
+ .theme:hover .theme__item + .theme__item {
+ margin-left: 0.5rem;
+ }
+}
+
+/* Theme Setting */
+
+body {
+ transition: background-color 0.3s ease;
+}
+
+body.js-theme-light {
+ color: #222;
+ background-color: #fdfdfd;
+}
+
+.js-theme-light main h1 {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+}
+
+.js-theme-light a {
+ color: var(--brand-blue);
+}
+
+.js-theme-light a:hover {
+ background-image: linear-gradient(
+ to right,
+ var(--brand-blue) 25%,
+ var(--brand-green) 50%,
+ var(--brand-yellow) 75%,
+ var(--brand-blue) 100%
+ );
+}
+
+.js-theme-dark .theme__button[value="dark"] {
+ z-index: 95;
+ border: 3px solid #828282;
+}
+
+.js-theme-light .theme__button[value="light"] {
+ z-index: 95;
+ border: 3px solid #dedede;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.js
new file mode 100644
index 0000000..14fcba8
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx/docs/theme/theme.js
@@ -0,0 +1,44 @@
+const USER_THEME = "ms-tt-user-theme";
+const storedTheme = window.ls.getItem(USER_THEME);
+
+var theme = {
+ activeTheme: "dark",
+ load: function(theme, cb) {
+ var id = "theme-" + theme;
+ if (!document.getElementById(id)) {
+ var $head = document.getElementsByTagName("head")[0];
+ var $link = document.createElement("link");
+ $link.id = id;
+ $link.rel = "stylesheet";
+ $link.type = "text/css";
+ $link.href = "./theme/" + theme + "/theme.css";
+ $head.appendChild($link);
+
+ $link.onload = function() {
+ if (!!cb) cb();
+ };
+ $link.onerror = function() {
+ console.warn("loading " + theme + " theme failed.");
+ };
+ }
+ },
+ changeTo: function(theme) {
+ if (["light", "dark"].indexOf(theme) === -1) {
+ this.load(theme);
+ } else {
+ window.ls.setItem(USER_THEME, theme);
+ }
+ document.body.classList.remove("js-theme-" + this.activeTheme);
+ this.activeTheme = theme;
+ document.body.classList.add("js-theme-" + this.activeTheme);
+ }
+};
+
+document.querySelector(".theme").onclick = function(e) {
+ var nextTheme = theme.activeTheme === "dark" ? "light" : "dark";
+ theme.changeTo(nextTheme);
+};
+
+if (storedTheme) {
+ theme.changeTo(storedTheme);
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/css/style.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/css/style.css
new file mode 100644
index 0000000..c36f875
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/css/style.css
@@ -0,0 +1,410 @@
+@charset "UTF-8";
+:root {
+ /* color defaults */
+ --brand-blue: #05a6f0;
+ --brand-yellow: #ffba08;
+ --brand-red: #f35325;
+ --brand-green: #81bc06;
+ --white: #ffffff;
+ --off-white: #bbb;
+ --dark-grey: #121212;
+ /* typeface defaults */
+ --primary-typeface: Segoe UI, SegoeUI, Segoe WP, Helvetica Neue, Helvetica,
+ Tahoma, Arial, sans-serif;
+ --title-font-size: 1.3rem;
+ --base-font-size: 20px;
+ --base-font-line-height: 28px;
+ --small-font-size: 12px;
+ --small-font-line-height: 14px;
+ /* animations */
+ --root-gradient-animation: 4s both root-gradient linear infinite;
+ --move-in-offset: 20px;
+ --move-in-animation: 1s both move-in;
+ --move-in-base-delay: 100ms;
+ --logo-tiles-in-animation: 1s both logo-tiles-in;
+ --logo-tiles-in-delay: 100ms;
+ /* spacing */
+ --small-space: 1em;
+ --large-space: 2em;
+ --text-block-spacing: 0.5em;
+}
+
+@keyframes move-in {
+ from {
+ transform: translateY(var(--move-in-offset));
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+@keyframes logo-tiles-in {
+ 0% {
+ opacity: 0;
+ filter: grayscale(1) hue-rotate(100deg);
+ }
+ 25% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 1;
+ }
+ 55% {
+ opacity: 0;
+ }
+ 60% {
+ opacity: 1;
+ filter: grayscale(1) hue-rotate(100deg);
+ }
+ 100% {
+ opacity: 1;
+ filter: grayscale(0) hue-rotate(0deg);
+ }
+}
+
+@keyframes logo-tiles-hover {
+ from {
+ filter: hue-rotate(0deg);
+ }
+ to {
+ filter: hue-rotate(360deg);
+ }
+}
+
+@keyframes root-gradient {
+ 0% {
+ opacity: 0;
+ }
+ 40% {
+ opacity: 1;
+ }
+ 60% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes text-gradient-ltr {
+ to {
+ background-position: -600% center;
+ }
+}
+
+@keyframes text-gradient-rtl {
+ to {
+ background-position: 600% center;
+ }
+}
+
+/* Common */
+
+html {
+ position: relative;
+ font-size: var(--base-font-size);
+ font-family: var(--primary-typeface);
+ line-height: var(--base-font-line-height);
+ background-color: var(--dark-grey);
+}
+
+html[data-loaded] {
+ background: linear-gradient(
+ to bottom,
+ var(--brand-blue) 33%,
+ var(--brand-yellow) 67%
+ );
+}
+
+html:before {
+ content: "";
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ z-index: -1;
+ background: unquote(
+ "-moz-linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)"
+ );
+ background: unquote(
+ "linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)"
+ );
+ background: linear-gradient(
+ to bottom,
+ var(--brand-yellow) 33%,
+ var(--brand-blue) 67%
+ );
+ animation: var(--root-gradient-animation);
+}
+
+body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ min-height: calc(100vh - 10px);
+ margin: 5px;
+ padding: 0 var(--small-space);
+ color: var(--off-white);
+ background-color: var(--dark-grey);
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+::-moz-selection {
+ color: var(--white);
+ background-color: var(--brand-blue);
+}
+
+::selection {
+ color: var(--white);
+ background: #05a6f0;
+ /* Edge could not work with custom property here */
+ background-color: var(--brand-blue);
+}
+
+a {
+ color: var(--brand-yellow);
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ background-image: linear-gradient(
+ to right,
+ var(--brand-yellow) 25%,
+ var(--brand-green) 50%,
+ var(--brand-blue) 75%,
+ var(--brand-yellow) 100%
+ );
+ background-size: 600% auto;
+ -webkit-text-fill-color: transparent;
+ -webkit-background-clip: text;
+ background-clip: text;
+}
+
+html[dir="ltr"] a:not(.logo-link):hover,
+html[dir="ltr"] a:not(.logo-link):focus {
+ animation: text-gradient-ltr 6.5s linear infinite;
+}
+
+html[dir="rtl"] a:not(.logo-link):hover,
+html[dir="rtl"] a:not(.logo-link):focus {
+ animation: text-gradient-rtl 6.5s linear infinite;
+}
+
+p,
+h1 {
+ margin: 0;
+ padding: var(--text-block-spacing) 0;
+}
+
+/* Container */
+
+.container {
+ max-width: 31rem;
+ margin: 0 auto auto;
+}
+
+@media only screen and (max-width: 40em) {
+ .container {
+ max-width: 80vw;
+ }
+ .container p {
+ font-size: 1.125rem;
+ }
+}
+
+main p:nth-child(2) {
+ animation-delay: calc(var(--move-in-base-delay) * 6);
+}
+
+main p:nth-child(3) {
+ animation-delay: calc(var(--move-in-base-delay) * 7);
+}
+
+main p:nth-child(4) {
+ animation-delay: calc(var(--move-in-base-delay) * 8);
+}
+
+/* Logo */
+
+.logo-link {
+ display: block;
+ width: 4rem;
+ height: 4rem;
+ margin: var(--large-space) auto;
+}
+
+.logo-image {
+ display: block;
+ width: 100%;
+ height: auto;
+}
+
+.logo {
+ display: flex;
+ flex-wrap: wrap;
+ height: 100%;
+ width: 100%;
+ margin: 0;
+}
+
+.logo-tile {
+ display: block;
+ width: 45%;
+ height: 45%;
+ margin: 2.5%;
+ outline: 1px solid transparent;
+ animation: var(--logo-tiles-in-animation);
+}
+
+.winner {
+ display: block;
+ margin: auto;
+ text-align: center;
+}
+
+.logo-tile--red {
+ background-color: var(--brand-red);
+ transition: 150ms;
+}
+
+.logo-tile--largered {
+ background-color: var(--brand-red);
+ transform: scale(1.2) translateY(-3px);
+ transition: 150ms;
+}
+
+.logo-tile--red:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--green {
+ background-color: var(--brand-green);
+ animation-delay: var(--logo-tiles-in-delay);
+ transition: 150ms;
+}
+
+.logo-tile--largegreen {
+ background-color: var(--brand-green);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: var(--logo-tiles-in-delay);
+ transition: 150ms;
+}
+
+.logo-tile--green:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--blue {
+ background-color: var(--brand-blue);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 2);
+ transition: 150ms;
+}
+
+.logo-tile--largeblue {
+ background-color: var(--brand-blue);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 2);
+ transition: 150ms;
+}
+
+.logo-tile--blue:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--yellow {
+ background-color: var(--brand-yellow);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 3);
+ transition: 150ms;
+}
+
+.logo-tile--largeyellow {
+ background-color: var(--brand-yellow);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 3);
+ transition: 150ms;
+}
+
+.logo-tile--yellow:active {
+ transform: scale(0.8);
+}
+
+/* Main */
+
+main h1 {
+ animation: var(--move-in-animation);
+ animation-delay: calc(var(--move-in-base-delay) * 4);
+ font-size: var(--title-font-size);
+ font-weight: bold;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+ margin-bottom: var(--small-space);
+ padding-bottom: var(--small-space);
+}
+
+main p {
+ animation: var(--move-in-animation);
+}
+main p:nth-of-type(1) {
+ animation-delay: calc(var(--move-in-base-delay) * 5);
+}
+main p:nth-of-type(2) {
+ animation-delay: calc(var(--move-in-base-delay) * 6);
+}
+main p:nth-of-type(3) {
+ animation-delay: calc(var(--move-in-base-delay) * 7);
+}
+main p:nth-of-type(4) {
+ animation-delay: calc(var(--move-in-base-delay) * 8);
+}
+
+/* Footer */
+
+.footer {
+ font-size: var(--small-font-size);
+ line-height: var(--small-font-line-height);
+ text-align: center;
+ margin: var(--small-space) 0 0;
+ padding: var(--small-space) 0;
+ overflow: hidden;
+}
+
+@media only screen and (max-width: 40em) {
+ footer {
+ font-size: 1rem;
+ margin: 0 auto;
+ max-width: 80vw;
+ }
+}
+
+footer p {
+ animation: var(--move-in-animation);
+ animation-delay: calc(var(--move-in-base-delay) * 11);
+}
+
+footer [href*="github"]:hover,
+footer [href*="github"]:focus {
+ color: var(--brand-green);
+}
+
+.footer-piece--separate {
+ display: block;
+}
+
+@media only screen and (max-width: 40em) {
+ .footer-piece {
+ display: block;
+ }
+}
+
+.time-travel {
+ text-align: center;
+}
+
+.time-travel a {
+ cursor: pointer;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/images/microsoft-og-image.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/images/microsoft-og-image.png
new file mode 100644
index 0000000..2f0eee7
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/images/microsoft-og-image.png differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/index.html b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/index.html
new file mode 100644
index 0000000..166c4aa
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/index.html
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+ Join Microsoft Developer Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ š Simon says...A winner is you! š
+
+
+
+ Microsoft is looking for designers who code to help create the most compelling developer tools & services on
+ the planet.
+
+
+ We have open positions for technical product designers & design leaders in San Francisco, Seattle, and elsewhere.
+
+
+ We use PCs, Macs, Figma, Sketch, GitHub, JavaScript, ZEIT, and other modern tools to design, prototype, and build the future
+ of software development.
+
+
+ We believe in diversity, openness, and building delightful tools that empower every person and organization to achieve more.
+
+
+ Interested? Send a PR with any improvement to
+ microsoft/join-dev-design or
+ email us .
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/simon.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/simon.js
new file mode 100644
index 0000000..dd38e82
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/simon.js
@@ -0,0 +1,147 @@
+new Vue({
+ el: "#app",
+ data: {
+ colors: ["red", "green", "yellow", "blue"],
+ currentSequence: [],
+ colorStatus: {
+ red: false,
+ green: false,
+ yellow: false,
+ blue: false
+ },
+ colorSymbols: {
+ red: "ā¤ļø",
+ green: "š",
+ yellow: "š",
+ blue: "š"
+ },
+ userClicks: [],
+ currentScore: 0,
+ difficulty: 1000
+ },
+ created() {
+ this.generateSequence();
+ },
+ watch: {
+ winner: function(isWinner) {
+ if (isWinner) {
+ this.changeTheme();
+ }
+ }
+ },
+ computed: {
+ logoTitleRed: function() {
+ return this.colorStatus.red ? "logo-tile--largered" : "logo-tile--red";
+ },
+ logoTitleGreen: function() {
+ return this.colorStatus.green
+ ? "logo-tile--largegreen"
+ : "logo-tile--green";
+ },
+ logoTitleYellow: function() {
+ return this.colorStatus.yellow
+ ? "logo-tile--largeyellow"
+ : "logo-tile--yellow";
+ },
+ logoTitleBlue: function() {
+ return this.colorStatus.blue ? "logo-tile--largeblue" : "logo-tile--blue";
+ },
+ winner: function() {
+ return this.currentScore >= 10 ? true : false;
+ }
+ },
+ methods: {
+ generateSequence: function() {
+ this.currentSequence.push(
+ this.colors[this.getRandomInt(this.colors.length)]
+ );
+ if (this.currentScore > 0) {
+ this.play();
+ } else {
+ console.log(
+ `šµļøāāļøšµļøāāļø PSSST! There is a game inside this webpage...\nClick the ${
+ this.colorSymbols[this.currentSequence[0]]
+ } tile on the Microsoft logo to play!`
+ );
+ }
+ },
+ clickColor: function(color) {
+ this.userClicks.push(color);
+ if (this.checkCorrect()) {
+ this.userClicks = [];
+ if (this.difficulty > 100) {
+ this.difficulty -= 100;
+ }
+ this.currentScore++;
+ console.log(
+ `Simon says..."correct!" š Your score is`,
+ this.currentScore
+ );
+ this.lightUp();
+ this.generateSequence();
+ }
+ },
+ getRandomInt: function(max) {
+ return Math.floor(Math.random() * Math.floor(max));
+ },
+ timer: function(ms) {
+ return new Promise(res => setTimeout(res, ms));
+ },
+ checkCorrect: function() {
+ let matching = true;
+ let sequence =
+ this.userClicks[this.userClicks.length - 1] ===
+ this.currentSequence[this.userClicks.length - 1];
+ if (!sequence) {
+ this.reset();
+ }
+ for (let i = 0; i < this.currentSequence.length; i++) {
+ if (this.userClicks[i] !== this.currentSequence[i]) {
+ matching = false;
+ break;
+ }
+ }
+ return matching;
+ },
+ reset: function() {
+ console.log(`š¢ Game Over! Refresh to play again.`);
+ this.currentSequence = [];
+ this.userClicks = [];
+ this.currentScore = 0;
+ this.difficulty = 1000;
+ this.generateSequence();
+ },
+ play: async function() {
+ await this.timer(2000);
+ for (var i = 0; i < this.currentSequence.length; i++) {
+ this.colorStatus[this.currentSequence[i]] = true;
+ await this.timer(this.difficulty);
+ this.colorStatus[this.currentSequence[i]] = false;
+ await this.timer(this.difficulty / 2);
+ }
+ },
+ lightUp: async function() {
+ let t = 150;
+ this.colorStatus.red = true;
+ await this.timer(t);
+ this.colorStatus.red = false;
+ this.colorStatus.green = true;
+ await this.timer(t);
+ this.colorStatus.green = false;
+ this.colorStatus.yellow = true;
+ await this.timer(t);
+ this.colorStatus.yellow = false;
+ this.colorStatus.blue = true;
+ await this.timer(t);
+ this.colorStatus.blue = false;
+ this.colorStatus.red = true;
+ await this.timer(t);
+ this.colorStatus.red = false;
+ },
+ changeTheme: function() {
+ if (theme && theme.changeTo) {
+ theme.changeTo("msdos");
+ }
+ }
+ }
+});
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosblibbet.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosblibbet.png
new file mode 100644
index 0000000..1184e99
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosblibbet.png differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff
new file mode 100644
index 0000000..de7b9b2
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff2 b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff2
new file mode 100644
index 0000000..a8161d7
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdosmoreperfectdosvga.woff2 differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdostheme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdostheme.css
new file mode 100644
index 0000000..8100c3a
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/msdostheme.css
@@ -0,0 +1,122 @@
+@font-face {
+ font-family: "vga";
+ src: url("moreperfectdosvga.woff2") format("woff2"),
+ url("moreperfectdosvga.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+}
+
+/* MSDOS Font: 'More Perfect DOS VGA' by Adam Moore http://laemeur.sdf.org/fonts/ */
+
+body.js-theme-msdos {
+ color: #4bffff;
+ background: #0000ab;
+ font-family: "vga", "Courier New", Courier, monospace;
+ margin: 0;
+}
+
+.js-theme-msdos:before {
+ content: "";
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ right: 10px;
+ bottom: 10px;
+ border: 6px double #4bffff;
+}
+
+.js-theme-msdos:after {
+ content: "C:\\";
+ position: absolute;
+ top: 4px;
+ padding: 0 6px;
+ color: #0000ab;
+ background: #4bffff;
+ line-height: 0.9;
+ font-size: 1.2rem;
+}
+
+.js-theme-msdos .logo-link {
+ animation: none;
+}
+
+.js-theme-msdos .logo {
+ position: relative;
+}
+
+.js-theme-msdos .logo > span {
+ display: none;
+}
+
+.js-theme-msdos .logo:before {
+ content: "";
+ position: absolute;
+ top: 66%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 226px;
+ height: 32px;
+ z-index: 100;
+ background: url("blibbet.png") center/cover no-repeat;
+}
+
+.js-theme-msdos main h1 {
+ border-bottom: 2px solid #4bffff;
+}
+
+.js-theme-msdos a:not(.logo-link) {
+ color: #ffff44;
+ animation: none;
+}
+
+.js-theme-msdos a:not(.logo-link):hover,
+.js-theme-msdos a:not(.logo-link):focus {
+ color: #0e0e0e;
+ -webkit-text-fill-color: #000 !important;
+ padding: 0.2rem;
+ background: #ffff44;
+ position: relative;
+}
+
+.js-theme-msdos a:not(.logo-link):hover:after,
+.js-theme-msdos a:not(.logo-link):focus:after {
+ content: "";
+ position: absolute;
+ top: 6px;
+ left: 6px;
+ width: 100%;
+ height: 100%;
+ background: #000;
+ z-index: -1;
+}
+
+.js-theme-msdos .theme {
+ opacity: 1;
+}
+
+.js-theme-msdos .theme__item + .theme__item {
+ margin-left: 0.5rem;
+}
+
+.js-theme-msdos .theme__button:before {
+ content: "Theme";
+ padding-right: 5px;
+}
+
+.js-theme-msdos .theme__button {
+ text-indent: 0;
+ width: auto;
+ height: 1rem;
+ font-size: 0.8rem;
+ padding-right: 10px;
+ font-family: "vga", "Courier New", Courier, monospace;
+ background: #00a8a8;
+ border-radius: 0;
+ color: #0e0e0e;
+}
+
+.js-theme-msdos .theme__button:hover,
+.js-theme-msdos .theme__button:focus {
+ background: #ffff44;
+ color: #0e0e0e;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.css
new file mode 100644
index 0000000..e1192f2
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.css
@@ -0,0 +1,129 @@
+@keyframes fade-in {
+ from {
+ opacity: 0;
+ }
+ to {
+ transform: none;
+ opacity: 1;
+ }
+}
+
+/* UI Styling */
+
+.theme {
+ cursor: pointer;
+ display: inline-block;
+ position: relative;
+ margin: auto auto;
+ padding: 0.5rem 0.5rem;
+ font-size: 0;
+ text-align: center;
+ z-index: 1;
+ transition: opacity 0.3s ease;
+ pointer-events: all;
+}
+
+.theme__list,
+.theme__button {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+.theme__list {
+ list-style: none;
+ animation: 1s both fade-in;
+ animation-delay: calc(var(--move-in-base-delay) * 9);
+}
+
+.theme__item {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.theme__item + .theme__item {
+ margin-left: 0.5rem;
+ transition: margin-left 0.3s ease;
+}
+
+.theme__button {
+ display: block;
+ position: relative;
+ text-indent: -9999px;
+ width: 1.2rem;
+ height: 1.2rem;
+ background: blue;
+ border: 0px solid #444;
+ border-radius: 0.6rem;
+ cursor: pointer;
+ z-index: 100;
+}
+
+button.theme__button:focus {
+ text-decoration: none;
+ outline: none;
+ box-shadow: none;
+}
+
+.theme__button[value="dark"] {
+ background: black;
+}
+
+.theme__button[value="light"] {
+ background: white;
+}
+
+@media only screen and (min-width: 640px) {
+ .theme {
+ opacity: 0.5;
+ }
+ .theme:hover {
+ opacity: 1;
+ }
+ .theme__item + .theme__item {
+ margin-left: -0.8rem;
+ }
+ .theme:hover .theme__item + .theme__item {
+ margin-left: 0.5rem;
+ }
+}
+
+/* Theme Setting */
+
+body {
+ transition: background-color 0.3s ease;
+}
+
+body.js-theme-light {
+ color: #222;
+ background-color: #fdfdfd;
+}
+
+.js-theme-light main h1 {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+}
+
+.js-theme-light a {
+ color: var(--brand-blue);
+}
+
+.js-theme-light a:hover {
+ background-image: linear-gradient(
+ to right,
+ var(--brand-blue) 25%,
+ var(--brand-green) 50%,
+ var(--brand-yellow) 75%,
+ var(--brand-blue) 100%
+ );
+}
+
+.js-theme-dark .theme__button[value="dark"] {
+ z-index: 95;
+ border: 3px solid #828282;
+}
+
+.js-theme-light .theme__button[value="light"] {
+ z-index: 95;
+ border: 3px solid #dedede;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.js
new file mode 100644
index 0000000..ef31863
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4/docs/theme/theme.js
@@ -0,0 +1,34 @@
+var theme = {
+ activeTheme: "dark",
+ load: function(theme, cb) {
+ var id = "theme-" + theme;
+ if (!document.getElementById(id)) {
+ var $head = document.getElementsByTagName("head")[0];
+ var $link = document.createElement("link");
+ $link.id = id;
+ $link.rel = "stylesheet";
+ $link.type = "text/css";
+ $link.href = "./theme/" + theme + "/theme.css";
+ $head.appendChild($link);
+
+ $link.onload = function() {
+ if (!!cb) cb();
+ };
+ $link.onerror = function() {
+ console.warn("loading " + theme + " theme failed.");
+ };
+ }
+ },
+ changeTo: function(theme) {
+ if (["light", "dark"].indexOf(theme) === -1) this.load(theme);
+
+ document.body.classList.remove("js-theme-" + this.activeTheme);
+ this.activeTheme = theme;
+ document.body.classList.add("js-theme-" + this.activeTheme);
+ }
+};
+
+document.querySelector(".theme").onclick = function(e) {
+ var nextTheme = theme.activeTheme === "dark" ? "light" : "dark";
+ theme.changeTo(nextTheme);
+};
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/css/style.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/css/style.css
new file mode 100644
index 0000000..c36f875
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/css/style.css
@@ -0,0 +1,410 @@
+@charset "UTF-8";
+:root {
+ /* color defaults */
+ --brand-blue: #05a6f0;
+ --brand-yellow: #ffba08;
+ --brand-red: #f35325;
+ --brand-green: #81bc06;
+ --white: #ffffff;
+ --off-white: #bbb;
+ --dark-grey: #121212;
+ /* typeface defaults */
+ --primary-typeface: Segoe UI, SegoeUI, Segoe WP, Helvetica Neue, Helvetica,
+ Tahoma, Arial, sans-serif;
+ --title-font-size: 1.3rem;
+ --base-font-size: 20px;
+ --base-font-line-height: 28px;
+ --small-font-size: 12px;
+ --small-font-line-height: 14px;
+ /* animations */
+ --root-gradient-animation: 4s both root-gradient linear infinite;
+ --move-in-offset: 20px;
+ --move-in-animation: 1s both move-in;
+ --move-in-base-delay: 100ms;
+ --logo-tiles-in-animation: 1s both logo-tiles-in;
+ --logo-tiles-in-delay: 100ms;
+ /* spacing */
+ --small-space: 1em;
+ --large-space: 2em;
+ --text-block-spacing: 0.5em;
+}
+
+@keyframes move-in {
+ from {
+ transform: translateY(var(--move-in-offset));
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+@keyframes logo-tiles-in {
+ 0% {
+ opacity: 0;
+ filter: grayscale(1) hue-rotate(100deg);
+ }
+ 25% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 1;
+ }
+ 55% {
+ opacity: 0;
+ }
+ 60% {
+ opacity: 1;
+ filter: grayscale(1) hue-rotate(100deg);
+ }
+ 100% {
+ opacity: 1;
+ filter: grayscale(0) hue-rotate(0deg);
+ }
+}
+
+@keyframes logo-tiles-hover {
+ from {
+ filter: hue-rotate(0deg);
+ }
+ to {
+ filter: hue-rotate(360deg);
+ }
+}
+
+@keyframes root-gradient {
+ 0% {
+ opacity: 0;
+ }
+ 40% {
+ opacity: 1;
+ }
+ 60% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes text-gradient-ltr {
+ to {
+ background-position: -600% center;
+ }
+}
+
+@keyframes text-gradient-rtl {
+ to {
+ background-position: 600% center;
+ }
+}
+
+/* Common */
+
+html {
+ position: relative;
+ font-size: var(--base-font-size);
+ font-family: var(--primary-typeface);
+ line-height: var(--base-font-line-height);
+ background-color: var(--dark-grey);
+}
+
+html[data-loaded] {
+ background: linear-gradient(
+ to bottom,
+ var(--brand-blue) 33%,
+ var(--brand-yellow) 67%
+ );
+}
+
+html:before {
+ content: "";
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ z-index: -1;
+ background: unquote(
+ "-moz-linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)"
+ );
+ background: unquote(
+ "linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)"
+ );
+ background: linear-gradient(
+ to bottom,
+ var(--brand-yellow) 33%,
+ var(--brand-blue) 67%
+ );
+ animation: var(--root-gradient-animation);
+}
+
+body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ min-height: calc(100vh - 10px);
+ margin: 5px;
+ padding: 0 var(--small-space);
+ color: var(--off-white);
+ background-color: var(--dark-grey);
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+::-moz-selection {
+ color: var(--white);
+ background-color: var(--brand-blue);
+}
+
+::selection {
+ color: var(--white);
+ background: #05a6f0;
+ /* Edge could not work with custom property here */
+ background-color: var(--brand-blue);
+}
+
+a {
+ color: var(--brand-yellow);
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ background-image: linear-gradient(
+ to right,
+ var(--brand-yellow) 25%,
+ var(--brand-green) 50%,
+ var(--brand-blue) 75%,
+ var(--brand-yellow) 100%
+ );
+ background-size: 600% auto;
+ -webkit-text-fill-color: transparent;
+ -webkit-background-clip: text;
+ background-clip: text;
+}
+
+html[dir="ltr"] a:not(.logo-link):hover,
+html[dir="ltr"] a:not(.logo-link):focus {
+ animation: text-gradient-ltr 6.5s linear infinite;
+}
+
+html[dir="rtl"] a:not(.logo-link):hover,
+html[dir="rtl"] a:not(.logo-link):focus {
+ animation: text-gradient-rtl 6.5s linear infinite;
+}
+
+p,
+h1 {
+ margin: 0;
+ padding: var(--text-block-spacing) 0;
+}
+
+/* Container */
+
+.container {
+ max-width: 31rem;
+ margin: 0 auto auto;
+}
+
+@media only screen and (max-width: 40em) {
+ .container {
+ max-width: 80vw;
+ }
+ .container p {
+ font-size: 1.125rem;
+ }
+}
+
+main p:nth-child(2) {
+ animation-delay: calc(var(--move-in-base-delay) * 6);
+}
+
+main p:nth-child(3) {
+ animation-delay: calc(var(--move-in-base-delay) * 7);
+}
+
+main p:nth-child(4) {
+ animation-delay: calc(var(--move-in-base-delay) * 8);
+}
+
+/* Logo */
+
+.logo-link {
+ display: block;
+ width: 4rem;
+ height: 4rem;
+ margin: var(--large-space) auto;
+}
+
+.logo-image {
+ display: block;
+ width: 100%;
+ height: auto;
+}
+
+.logo {
+ display: flex;
+ flex-wrap: wrap;
+ height: 100%;
+ width: 100%;
+ margin: 0;
+}
+
+.logo-tile {
+ display: block;
+ width: 45%;
+ height: 45%;
+ margin: 2.5%;
+ outline: 1px solid transparent;
+ animation: var(--logo-tiles-in-animation);
+}
+
+.winner {
+ display: block;
+ margin: auto;
+ text-align: center;
+}
+
+.logo-tile--red {
+ background-color: var(--brand-red);
+ transition: 150ms;
+}
+
+.logo-tile--largered {
+ background-color: var(--brand-red);
+ transform: scale(1.2) translateY(-3px);
+ transition: 150ms;
+}
+
+.logo-tile--red:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--green {
+ background-color: var(--brand-green);
+ animation-delay: var(--logo-tiles-in-delay);
+ transition: 150ms;
+}
+
+.logo-tile--largegreen {
+ background-color: var(--brand-green);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: var(--logo-tiles-in-delay);
+ transition: 150ms;
+}
+
+.logo-tile--green:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--blue {
+ background-color: var(--brand-blue);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 2);
+ transition: 150ms;
+}
+
+.logo-tile--largeblue {
+ background-color: var(--brand-blue);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 2);
+ transition: 150ms;
+}
+
+.logo-tile--blue:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--yellow {
+ background-color: var(--brand-yellow);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 3);
+ transition: 150ms;
+}
+
+.logo-tile--largeyellow {
+ background-color: var(--brand-yellow);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 3);
+ transition: 150ms;
+}
+
+.logo-tile--yellow:active {
+ transform: scale(0.8);
+}
+
+/* Main */
+
+main h1 {
+ animation: var(--move-in-animation);
+ animation-delay: calc(var(--move-in-base-delay) * 4);
+ font-size: var(--title-font-size);
+ font-weight: bold;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+ margin-bottom: var(--small-space);
+ padding-bottom: var(--small-space);
+}
+
+main p {
+ animation: var(--move-in-animation);
+}
+main p:nth-of-type(1) {
+ animation-delay: calc(var(--move-in-base-delay) * 5);
+}
+main p:nth-of-type(2) {
+ animation-delay: calc(var(--move-in-base-delay) * 6);
+}
+main p:nth-of-type(3) {
+ animation-delay: calc(var(--move-in-base-delay) * 7);
+}
+main p:nth-of-type(4) {
+ animation-delay: calc(var(--move-in-base-delay) * 8);
+}
+
+/* Footer */
+
+.footer {
+ font-size: var(--small-font-size);
+ line-height: var(--small-font-line-height);
+ text-align: center;
+ margin: var(--small-space) 0 0;
+ padding: var(--small-space) 0;
+ overflow: hidden;
+}
+
+@media only screen and (max-width: 40em) {
+ footer {
+ font-size: 1rem;
+ margin: 0 auto;
+ max-width: 80vw;
+ }
+}
+
+footer p {
+ animation: var(--move-in-animation);
+ animation-delay: calc(var(--move-in-base-delay) * 11);
+}
+
+footer [href*="github"]:hover,
+footer [href*="github"]:focus {
+ color: var(--brand-green);
+}
+
+.footer-piece--separate {
+ display: block;
+}
+
+@media only screen and (max-width: 40em) {
+ .footer-piece {
+ display: block;
+ }
+}
+
+.time-travel {
+ text-align: center;
+}
+
+.time-travel a {
+ cursor: pointer;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/images/microsoft-og-image.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/images/microsoft-og-image.png
new file mode 100644
index 0000000..2f0eee7
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/images/microsoft-og-image.png differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/index.html b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/index.html
new file mode 100644
index 0000000..9ca80de
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/index.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+ Join Microsoft Developer Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ š Simon says...A winner is you! š
+
+
+
+ Microsoft is looking for designers who code to help create the most compelling developer tools & services on
+ the planet.
+
+
+ We have open positions for technical product designers & design leaders in San Francisco, Seattle, and elsewhere.
+
+
+ We use PCs, Macs, Figma, Sketch, GitHub, JavaScript, ZEIT, and other modern tools to design, prototype, and build the future
+ of software development.
+
+
+ We believe in diversity, openness, and building delightful tools that empower every person and organization to achieve more.
+
+
+ Interested? Send a PR with any improvement to
+ microsoft/join-dev-design or
+ email us .
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/simon.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/simon.js
new file mode 100644
index 0000000..76cf75d
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/simon.js
@@ -0,0 +1,156 @@
+new Vue({
+ el: "#app",
+ data: {
+ colors: ["red", "green", "yellow", "blue"],
+ currentSequence: [],
+ colorStatus: {
+ red: false,
+ green: false,
+ yellow: false,
+ blue: false
+ },
+ colorSymbols: {
+ red: "ā¤ļø",
+ green: "š",
+ yellow: "š",
+ blue: "š"
+ },
+ userClicks: [],
+ currentScore: 0,
+ difficulty: 1000
+ },
+ created() {
+ this.generateSequence();
+ },
+ watch: {
+ winner: function(isWinner) {
+ if (isWinner) {
+ this.changeTheme();
+ }
+ }
+ },
+ computed: {
+ logoTitleRed: function() {
+ return this.colorStatus.red ? "logo-tile--largered" : "logo-tile--red";
+ },
+ logoTitleGreen: function() {
+ return this.colorStatus.green
+ ? "logo-tile--largegreen"
+ : "logo-tile--green";
+ },
+ logoTitleYellow: function() {
+ return this.colorStatus.yellow
+ ? "logo-tile--largeyellow"
+ : "logo-tile--yellow";
+ },
+ logoTitleBlue: function() {
+ return this.colorStatus.blue ? "logo-tile--largeblue" : "logo-tile--blue";
+ },
+ winner: function() {
+ return this.currentScore >= 10 ? true : false;
+ }
+ },
+ methods: {
+ generateSequence: function() {
+ this.currentSequence.push(
+ this.colors[this.getRandomInt(this.colors.length)]
+ );
+ if (this.currentScore > 0) {
+ this.play();
+ } else {
+ console.log(
+ `šµļøāāļø šµļøāāļø HEY! \n\n\n *whispers* \n\n\nThere is a game inside this webpage... \ntry clicking on the ${
+ this.colorSymbols[this.currentSequence[0]]
+ } tile on the Microsoft logo to get started!`
+ );
+ console.log("\n\n\nšØ Reload the page to reset the game š\n\n\n");
+ }
+ },
+ clickColor: function(color) {
+ this.userClicks.push(color);
+ if (this.checkCorrect()) {
+ this.userClicks = [];
+ if (this.difficulty > 100) {
+ this.difficulty -= 100;
+ }
+ this.currentScore++;
+ console.log(
+ `Simon says..."correct!" š Your score is`,
+ this.currentScore
+ );
+ this.lightUp();
+ this.generateSequence();
+ }
+ },
+ getRandomInt: function(max) {
+ return Math.floor(Math.random() * Math.floor(max));
+ },
+ timer: function(ms) {
+ return new Promise(res => setTimeout(res, ms));
+ },
+ checkCorrect: function() {
+ let matching = true;
+ let sequence =
+ this.userClicks[this.userClicks.length - 1] ===
+ this.currentSequence[this.userClicks.length - 1];
+ console.log(
+ `${this.userClicks[this.userClicks.length - 1]} ${
+ sequence === true ? "š" : "š"
+ }`
+ );
+ if (!sequence) {
+ this.reset();
+ }
+ for (let i = 0; i < this.currentSequence.length; i++) {
+ if (this.userClicks[i] !== this.currentSequence[i]) {
+ matching = false;
+ break;
+ }
+ }
+ return matching;
+ },
+ reset: function() {
+ console.log(`
+ š¢
+ Oh no! Game Over! Your score was ${this.currentScore}
+ `);
+ this.currentSequence = [];
+ this.userClicks = [];
+ this.currentScore = 0;
+ this.difficulty = 1000;
+ this.generateSequence();
+ },
+ play: async function() {
+ await this.timer(2000);
+ for (var i = 0; i < this.currentSequence.length; i++) {
+ this.colorStatus[this.currentSequence[i]] = true;
+ await this.timer(this.difficulty);
+ this.colorStatus[this.currentSequence[i]] = false;
+ await this.timer(this.difficulty / 2);
+ }
+ },
+ lightUp: async function() {
+ let t = 150;
+ this.colorStatus.red = true;
+ await this.timer(t);
+ this.colorStatus.red = false;
+ this.colorStatus.green = true;
+ await this.timer(t);
+ this.colorStatus.green = false;
+ this.colorStatus.yellow = true;
+ await this.timer(t);
+ this.colorStatus.yellow = false;
+ this.colorStatus.blue = true;
+ await this.timer(t);
+ this.colorStatus.blue = false;
+ this.colorStatus.red = true;
+ await this.timer(t);
+ this.colorStatus.red = false;
+ },
+ changeTheme: function() {
+ if (theme && theme.changeTo) {
+ theme.changeTo("msdos");
+ }
+ }
+ }
+});
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosblibbet.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosblibbet.png
new file mode 100644
index 0000000..1184e99
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosblibbet.png differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff
new file mode 100644
index 0000000..de7b9b2
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff2 b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff2
new file mode 100644
index 0000000..a8161d7
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdosmoreperfectdosvga.woff2 differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdostheme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdostheme.css
new file mode 100644
index 0000000..8100c3a
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/msdostheme.css
@@ -0,0 +1,122 @@
+@font-face {
+ font-family: "vga";
+ src: url("moreperfectdosvga.woff2") format("woff2"),
+ url("moreperfectdosvga.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+}
+
+/* MSDOS Font: 'More Perfect DOS VGA' by Adam Moore http://laemeur.sdf.org/fonts/ */
+
+body.js-theme-msdos {
+ color: #4bffff;
+ background: #0000ab;
+ font-family: "vga", "Courier New", Courier, monospace;
+ margin: 0;
+}
+
+.js-theme-msdos:before {
+ content: "";
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ right: 10px;
+ bottom: 10px;
+ border: 6px double #4bffff;
+}
+
+.js-theme-msdos:after {
+ content: "C:\\";
+ position: absolute;
+ top: 4px;
+ padding: 0 6px;
+ color: #0000ab;
+ background: #4bffff;
+ line-height: 0.9;
+ font-size: 1.2rem;
+}
+
+.js-theme-msdos .logo-link {
+ animation: none;
+}
+
+.js-theme-msdos .logo {
+ position: relative;
+}
+
+.js-theme-msdos .logo > span {
+ display: none;
+}
+
+.js-theme-msdos .logo:before {
+ content: "";
+ position: absolute;
+ top: 66%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 226px;
+ height: 32px;
+ z-index: 100;
+ background: url("blibbet.png") center/cover no-repeat;
+}
+
+.js-theme-msdos main h1 {
+ border-bottom: 2px solid #4bffff;
+}
+
+.js-theme-msdos a:not(.logo-link) {
+ color: #ffff44;
+ animation: none;
+}
+
+.js-theme-msdos a:not(.logo-link):hover,
+.js-theme-msdos a:not(.logo-link):focus {
+ color: #0e0e0e;
+ -webkit-text-fill-color: #000 !important;
+ padding: 0.2rem;
+ background: #ffff44;
+ position: relative;
+}
+
+.js-theme-msdos a:not(.logo-link):hover:after,
+.js-theme-msdos a:not(.logo-link):focus:after {
+ content: "";
+ position: absolute;
+ top: 6px;
+ left: 6px;
+ width: 100%;
+ height: 100%;
+ background: #000;
+ z-index: -1;
+}
+
+.js-theme-msdos .theme {
+ opacity: 1;
+}
+
+.js-theme-msdos .theme__item + .theme__item {
+ margin-left: 0.5rem;
+}
+
+.js-theme-msdos .theme__button:before {
+ content: "Theme";
+ padding-right: 5px;
+}
+
+.js-theme-msdos .theme__button {
+ text-indent: 0;
+ width: auto;
+ height: 1rem;
+ font-size: 0.8rem;
+ padding-right: 10px;
+ font-family: "vga", "Courier New", Courier, monospace;
+ background: #00a8a8;
+ border-radius: 0;
+ color: #0e0e0e;
+}
+
+.js-theme-msdos .theme__button:hover,
+.js-theme-msdos .theme__button:focus {
+ background: #ffff44;
+ color: #0e0e0e;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.css
new file mode 100644
index 0000000..e1192f2
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.css
@@ -0,0 +1,129 @@
+@keyframes fade-in {
+ from {
+ opacity: 0;
+ }
+ to {
+ transform: none;
+ opacity: 1;
+ }
+}
+
+/* UI Styling */
+
+.theme {
+ cursor: pointer;
+ display: inline-block;
+ position: relative;
+ margin: auto auto;
+ padding: 0.5rem 0.5rem;
+ font-size: 0;
+ text-align: center;
+ z-index: 1;
+ transition: opacity 0.3s ease;
+ pointer-events: all;
+}
+
+.theme__list,
+.theme__button {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+.theme__list {
+ list-style: none;
+ animation: 1s both fade-in;
+ animation-delay: calc(var(--move-in-base-delay) * 9);
+}
+
+.theme__item {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.theme__item + .theme__item {
+ margin-left: 0.5rem;
+ transition: margin-left 0.3s ease;
+}
+
+.theme__button {
+ display: block;
+ position: relative;
+ text-indent: -9999px;
+ width: 1.2rem;
+ height: 1.2rem;
+ background: blue;
+ border: 0px solid #444;
+ border-radius: 0.6rem;
+ cursor: pointer;
+ z-index: 100;
+}
+
+button.theme__button:focus {
+ text-decoration: none;
+ outline: none;
+ box-shadow: none;
+}
+
+.theme__button[value="dark"] {
+ background: black;
+}
+
+.theme__button[value="light"] {
+ background: white;
+}
+
+@media only screen and (min-width: 640px) {
+ .theme {
+ opacity: 0.5;
+ }
+ .theme:hover {
+ opacity: 1;
+ }
+ .theme__item + .theme__item {
+ margin-left: -0.8rem;
+ }
+ .theme:hover .theme__item + .theme__item {
+ margin-left: 0.5rem;
+ }
+}
+
+/* Theme Setting */
+
+body {
+ transition: background-color 0.3s ease;
+}
+
+body.js-theme-light {
+ color: #222;
+ background-color: #fdfdfd;
+}
+
+.js-theme-light main h1 {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+}
+
+.js-theme-light a {
+ color: var(--brand-blue);
+}
+
+.js-theme-light a:hover {
+ background-image: linear-gradient(
+ to right,
+ var(--brand-blue) 25%,
+ var(--brand-green) 50%,
+ var(--brand-yellow) 75%,
+ var(--brand-blue) 100%
+ );
+}
+
+.js-theme-dark .theme__button[value="dark"] {
+ z-index: 95;
+ border: 3px solid #828282;
+}
+
+.js-theme-light .theme__button[value="light"] {
+ z-index: 95;
+ border: 3px solid #dedede;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.js
new file mode 100644
index 0000000..f5f9899
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1/docs/theme/theme.js
@@ -0,0 +1,34 @@
+var theme = {
+ activeTheme: "dark",
+ load: function(theme, cb) {
+ var id = "theme-" + theme;
+ if (!document.getElementById(id)) {
+ var $head = document.getElementsByTagName("head")[0];
+ var $link = document.createElement("link");
+ $link.id = id;
+ $link.rel = "stylesheet";
+ $link.type = "text/css";
+ $link.href = "/theme/" + theme + "/theme.css";
+ $head.appendChild($link);
+
+ $link.onload = function() {
+ if (!!cb) cb();
+ };
+ $link.onerror = function() {
+ console.warn("loading " + theme + " theme failed.");
+ };
+ }
+ },
+ changeTo: function(theme) {
+ if (["light", "dark"].indexOf(theme) === -1) this.load(theme);
+
+ document.body.classList.remove("js-theme-" + this.activeTheme);
+ this.activeTheme = theme;
+ document.body.classList.add("js-theme-" + this.activeTheme);
+ }
+};
+
+document.querySelector(".theme").onclick = function(e) {
+ var nextTheme = theme.activeTheme === "dark" ? "light" : "dark";
+ theme.changeTo(nextTheme);
+};
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/css/style.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/css/style.css
new file mode 100644
index 0000000..c36f875
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/css/style.css
@@ -0,0 +1,410 @@
+@charset "UTF-8";
+:root {
+ /* color defaults */
+ --brand-blue: #05a6f0;
+ --brand-yellow: #ffba08;
+ --brand-red: #f35325;
+ --brand-green: #81bc06;
+ --white: #ffffff;
+ --off-white: #bbb;
+ --dark-grey: #121212;
+ /* typeface defaults */
+ --primary-typeface: Segoe UI, SegoeUI, Segoe WP, Helvetica Neue, Helvetica,
+ Tahoma, Arial, sans-serif;
+ --title-font-size: 1.3rem;
+ --base-font-size: 20px;
+ --base-font-line-height: 28px;
+ --small-font-size: 12px;
+ --small-font-line-height: 14px;
+ /* animations */
+ --root-gradient-animation: 4s both root-gradient linear infinite;
+ --move-in-offset: 20px;
+ --move-in-animation: 1s both move-in;
+ --move-in-base-delay: 100ms;
+ --logo-tiles-in-animation: 1s both logo-tiles-in;
+ --logo-tiles-in-delay: 100ms;
+ /* spacing */
+ --small-space: 1em;
+ --large-space: 2em;
+ --text-block-spacing: 0.5em;
+}
+
+@keyframes move-in {
+ from {
+ transform: translateY(var(--move-in-offset));
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+@keyframes logo-tiles-in {
+ 0% {
+ opacity: 0;
+ filter: grayscale(1) hue-rotate(100deg);
+ }
+ 25% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 1;
+ }
+ 55% {
+ opacity: 0;
+ }
+ 60% {
+ opacity: 1;
+ filter: grayscale(1) hue-rotate(100deg);
+ }
+ 100% {
+ opacity: 1;
+ filter: grayscale(0) hue-rotate(0deg);
+ }
+}
+
+@keyframes logo-tiles-hover {
+ from {
+ filter: hue-rotate(0deg);
+ }
+ to {
+ filter: hue-rotate(360deg);
+ }
+}
+
+@keyframes root-gradient {
+ 0% {
+ opacity: 0;
+ }
+ 40% {
+ opacity: 1;
+ }
+ 60% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes text-gradient-ltr {
+ to {
+ background-position: -600% center;
+ }
+}
+
+@keyframes text-gradient-rtl {
+ to {
+ background-position: 600% center;
+ }
+}
+
+/* Common */
+
+html {
+ position: relative;
+ font-size: var(--base-font-size);
+ font-family: var(--primary-typeface);
+ line-height: var(--base-font-line-height);
+ background-color: var(--dark-grey);
+}
+
+html[data-loaded] {
+ background: linear-gradient(
+ to bottom,
+ var(--brand-blue) 33%,
+ var(--brand-yellow) 67%
+ );
+}
+
+html:before {
+ content: "";
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ z-index: -1;
+ background: unquote(
+ "-moz-linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)"
+ );
+ background: unquote(
+ "linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)"
+ );
+ background: linear-gradient(
+ to bottom,
+ var(--brand-yellow) 33%,
+ var(--brand-blue) 67%
+ );
+ animation: var(--root-gradient-animation);
+}
+
+body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ min-height: calc(100vh - 10px);
+ margin: 5px;
+ padding: 0 var(--small-space);
+ color: var(--off-white);
+ background-color: var(--dark-grey);
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+::-moz-selection {
+ color: var(--white);
+ background-color: var(--brand-blue);
+}
+
+::selection {
+ color: var(--white);
+ background: #05a6f0;
+ /* Edge could not work with custom property here */
+ background-color: var(--brand-blue);
+}
+
+a {
+ color: var(--brand-yellow);
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ background-image: linear-gradient(
+ to right,
+ var(--brand-yellow) 25%,
+ var(--brand-green) 50%,
+ var(--brand-blue) 75%,
+ var(--brand-yellow) 100%
+ );
+ background-size: 600% auto;
+ -webkit-text-fill-color: transparent;
+ -webkit-background-clip: text;
+ background-clip: text;
+}
+
+html[dir="ltr"] a:not(.logo-link):hover,
+html[dir="ltr"] a:not(.logo-link):focus {
+ animation: text-gradient-ltr 6.5s linear infinite;
+}
+
+html[dir="rtl"] a:not(.logo-link):hover,
+html[dir="rtl"] a:not(.logo-link):focus {
+ animation: text-gradient-rtl 6.5s linear infinite;
+}
+
+p,
+h1 {
+ margin: 0;
+ padding: var(--text-block-spacing) 0;
+}
+
+/* Container */
+
+.container {
+ max-width: 31rem;
+ margin: 0 auto auto;
+}
+
+@media only screen and (max-width: 40em) {
+ .container {
+ max-width: 80vw;
+ }
+ .container p {
+ font-size: 1.125rem;
+ }
+}
+
+main p:nth-child(2) {
+ animation-delay: calc(var(--move-in-base-delay) * 6);
+}
+
+main p:nth-child(3) {
+ animation-delay: calc(var(--move-in-base-delay) * 7);
+}
+
+main p:nth-child(4) {
+ animation-delay: calc(var(--move-in-base-delay) * 8);
+}
+
+/* Logo */
+
+.logo-link {
+ display: block;
+ width: 4rem;
+ height: 4rem;
+ margin: var(--large-space) auto;
+}
+
+.logo-image {
+ display: block;
+ width: 100%;
+ height: auto;
+}
+
+.logo {
+ display: flex;
+ flex-wrap: wrap;
+ height: 100%;
+ width: 100%;
+ margin: 0;
+}
+
+.logo-tile {
+ display: block;
+ width: 45%;
+ height: 45%;
+ margin: 2.5%;
+ outline: 1px solid transparent;
+ animation: var(--logo-tiles-in-animation);
+}
+
+.winner {
+ display: block;
+ margin: auto;
+ text-align: center;
+}
+
+.logo-tile--red {
+ background-color: var(--brand-red);
+ transition: 150ms;
+}
+
+.logo-tile--largered {
+ background-color: var(--brand-red);
+ transform: scale(1.2) translateY(-3px);
+ transition: 150ms;
+}
+
+.logo-tile--red:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--green {
+ background-color: var(--brand-green);
+ animation-delay: var(--logo-tiles-in-delay);
+ transition: 150ms;
+}
+
+.logo-tile--largegreen {
+ background-color: var(--brand-green);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: var(--logo-tiles-in-delay);
+ transition: 150ms;
+}
+
+.logo-tile--green:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--blue {
+ background-color: var(--brand-blue);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 2);
+ transition: 150ms;
+}
+
+.logo-tile--largeblue {
+ background-color: var(--brand-blue);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 2);
+ transition: 150ms;
+}
+
+.logo-tile--blue:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--yellow {
+ background-color: var(--brand-yellow);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 3);
+ transition: 150ms;
+}
+
+.logo-tile--largeyellow {
+ background-color: var(--brand-yellow);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 3);
+ transition: 150ms;
+}
+
+.logo-tile--yellow:active {
+ transform: scale(0.8);
+}
+
+/* Main */
+
+main h1 {
+ animation: var(--move-in-animation);
+ animation-delay: calc(var(--move-in-base-delay) * 4);
+ font-size: var(--title-font-size);
+ font-weight: bold;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+ margin-bottom: var(--small-space);
+ padding-bottom: var(--small-space);
+}
+
+main p {
+ animation: var(--move-in-animation);
+}
+main p:nth-of-type(1) {
+ animation-delay: calc(var(--move-in-base-delay) * 5);
+}
+main p:nth-of-type(2) {
+ animation-delay: calc(var(--move-in-base-delay) * 6);
+}
+main p:nth-of-type(3) {
+ animation-delay: calc(var(--move-in-base-delay) * 7);
+}
+main p:nth-of-type(4) {
+ animation-delay: calc(var(--move-in-base-delay) * 8);
+}
+
+/* Footer */
+
+.footer {
+ font-size: var(--small-font-size);
+ line-height: var(--small-font-line-height);
+ text-align: center;
+ margin: var(--small-space) 0 0;
+ padding: var(--small-space) 0;
+ overflow: hidden;
+}
+
+@media only screen and (max-width: 40em) {
+ footer {
+ font-size: 1rem;
+ margin: 0 auto;
+ max-width: 80vw;
+ }
+}
+
+footer p {
+ animation: var(--move-in-animation);
+ animation-delay: calc(var(--move-in-base-delay) * 11);
+}
+
+footer [href*="github"]:hover,
+footer [href*="github"]:focus {
+ color: var(--brand-green);
+}
+
+.footer-piece--separate {
+ display: block;
+}
+
+@media only screen and (max-width: 40em) {
+ .footer-piece {
+ display: block;
+ }
+}
+
+.time-travel {
+ text-align: center;
+}
+
+.time-travel a {
+ cursor: pointer;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/images/microsoft-og-image.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/images/microsoft-og-image.png
new file mode 100644
index 0000000..2f0eee7
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/images/microsoft-og-image.png differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/index.html b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/index.html
new file mode 100644
index 0000000..e8f4b84
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/index.html
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+ Join Microsoft Developer Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ š Simon says...A winner is you! š
+
+
+
+ Microsoft is looking for designers who code to help create the most compelling developer tools & services on
+ the planet.
+
+
+ We have open positions for technical product designers & design leaders in San Francisco, Seattle, and elsewhere.
+
+
+ We use PCs, Macs, Figma, Sketch, GitHub, JavaScript, ZEIT, and other modern tools to design, prototype, and build the future
+ of software development.
+
+
+ We believe in diversity, openness, and building delightful tools that empower every person and organization to achieve more.
+
+
+ Interested? Send a PR with any improvement to
+ microsoft/join-dev-design or
+ email us .
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/simon.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/simon.js
new file mode 100644
index 0000000..dd38e82
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/simon.js
@@ -0,0 +1,147 @@
+new Vue({
+ el: "#app",
+ data: {
+ colors: ["red", "green", "yellow", "blue"],
+ currentSequence: [],
+ colorStatus: {
+ red: false,
+ green: false,
+ yellow: false,
+ blue: false
+ },
+ colorSymbols: {
+ red: "ā¤ļø",
+ green: "š",
+ yellow: "š",
+ blue: "š"
+ },
+ userClicks: [],
+ currentScore: 0,
+ difficulty: 1000
+ },
+ created() {
+ this.generateSequence();
+ },
+ watch: {
+ winner: function(isWinner) {
+ if (isWinner) {
+ this.changeTheme();
+ }
+ }
+ },
+ computed: {
+ logoTitleRed: function() {
+ return this.colorStatus.red ? "logo-tile--largered" : "logo-tile--red";
+ },
+ logoTitleGreen: function() {
+ return this.colorStatus.green
+ ? "logo-tile--largegreen"
+ : "logo-tile--green";
+ },
+ logoTitleYellow: function() {
+ return this.colorStatus.yellow
+ ? "logo-tile--largeyellow"
+ : "logo-tile--yellow";
+ },
+ logoTitleBlue: function() {
+ return this.colorStatus.blue ? "logo-tile--largeblue" : "logo-tile--blue";
+ },
+ winner: function() {
+ return this.currentScore >= 10 ? true : false;
+ }
+ },
+ methods: {
+ generateSequence: function() {
+ this.currentSequence.push(
+ this.colors[this.getRandomInt(this.colors.length)]
+ );
+ if (this.currentScore > 0) {
+ this.play();
+ } else {
+ console.log(
+ `šµļøāāļøšµļøāāļø PSSST! There is a game inside this webpage...\nClick the ${
+ this.colorSymbols[this.currentSequence[0]]
+ } tile on the Microsoft logo to play!`
+ );
+ }
+ },
+ clickColor: function(color) {
+ this.userClicks.push(color);
+ if (this.checkCorrect()) {
+ this.userClicks = [];
+ if (this.difficulty > 100) {
+ this.difficulty -= 100;
+ }
+ this.currentScore++;
+ console.log(
+ `Simon says..."correct!" š Your score is`,
+ this.currentScore
+ );
+ this.lightUp();
+ this.generateSequence();
+ }
+ },
+ getRandomInt: function(max) {
+ return Math.floor(Math.random() * Math.floor(max));
+ },
+ timer: function(ms) {
+ return new Promise(res => setTimeout(res, ms));
+ },
+ checkCorrect: function() {
+ let matching = true;
+ let sequence =
+ this.userClicks[this.userClicks.length - 1] ===
+ this.currentSequence[this.userClicks.length - 1];
+ if (!sequence) {
+ this.reset();
+ }
+ for (let i = 0; i < this.currentSequence.length; i++) {
+ if (this.userClicks[i] !== this.currentSequence[i]) {
+ matching = false;
+ break;
+ }
+ }
+ return matching;
+ },
+ reset: function() {
+ console.log(`š¢ Game Over! Refresh to play again.`);
+ this.currentSequence = [];
+ this.userClicks = [];
+ this.currentScore = 0;
+ this.difficulty = 1000;
+ this.generateSequence();
+ },
+ play: async function() {
+ await this.timer(2000);
+ for (var i = 0; i < this.currentSequence.length; i++) {
+ this.colorStatus[this.currentSequence[i]] = true;
+ await this.timer(this.difficulty);
+ this.colorStatus[this.currentSequence[i]] = false;
+ await this.timer(this.difficulty / 2);
+ }
+ },
+ lightUp: async function() {
+ let t = 150;
+ this.colorStatus.red = true;
+ await this.timer(t);
+ this.colorStatus.red = false;
+ this.colorStatus.green = true;
+ await this.timer(t);
+ this.colorStatus.green = false;
+ this.colorStatus.yellow = true;
+ await this.timer(t);
+ this.colorStatus.yellow = false;
+ this.colorStatus.blue = true;
+ await this.timer(t);
+ this.colorStatus.blue = false;
+ this.colorStatus.red = true;
+ await this.timer(t);
+ this.colorStatus.red = false;
+ },
+ changeTheme: function() {
+ if (theme && theme.changeTo) {
+ theme.changeTo("msdos");
+ }
+ }
+ }
+});
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosblibbet.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosblibbet.png
new file mode 100644
index 0000000..1184e99
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosblibbet.png differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff
new file mode 100644
index 0000000..de7b9b2
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff2 b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff2
new file mode 100644
index 0000000..a8161d7
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdosmoreperfectdosvga.woff2 differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdostheme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdostheme.css
new file mode 100644
index 0000000..8100c3a
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/msdostheme.css
@@ -0,0 +1,122 @@
+@font-face {
+ font-family: "vga";
+ src: url("moreperfectdosvga.woff2") format("woff2"),
+ url("moreperfectdosvga.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+}
+
+/* MSDOS Font: 'More Perfect DOS VGA' by Adam Moore http://laemeur.sdf.org/fonts/ */
+
+body.js-theme-msdos {
+ color: #4bffff;
+ background: #0000ab;
+ font-family: "vga", "Courier New", Courier, monospace;
+ margin: 0;
+}
+
+.js-theme-msdos:before {
+ content: "";
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ right: 10px;
+ bottom: 10px;
+ border: 6px double #4bffff;
+}
+
+.js-theme-msdos:after {
+ content: "C:\\";
+ position: absolute;
+ top: 4px;
+ padding: 0 6px;
+ color: #0000ab;
+ background: #4bffff;
+ line-height: 0.9;
+ font-size: 1.2rem;
+}
+
+.js-theme-msdos .logo-link {
+ animation: none;
+}
+
+.js-theme-msdos .logo {
+ position: relative;
+}
+
+.js-theme-msdos .logo > span {
+ display: none;
+}
+
+.js-theme-msdos .logo:before {
+ content: "";
+ position: absolute;
+ top: 66%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 226px;
+ height: 32px;
+ z-index: 100;
+ background: url("blibbet.png") center/cover no-repeat;
+}
+
+.js-theme-msdos main h1 {
+ border-bottom: 2px solid #4bffff;
+}
+
+.js-theme-msdos a:not(.logo-link) {
+ color: #ffff44;
+ animation: none;
+}
+
+.js-theme-msdos a:not(.logo-link):hover,
+.js-theme-msdos a:not(.logo-link):focus {
+ color: #0e0e0e;
+ -webkit-text-fill-color: #000 !important;
+ padding: 0.2rem;
+ background: #ffff44;
+ position: relative;
+}
+
+.js-theme-msdos a:not(.logo-link):hover:after,
+.js-theme-msdos a:not(.logo-link):focus:after {
+ content: "";
+ position: absolute;
+ top: 6px;
+ left: 6px;
+ width: 100%;
+ height: 100%;
+ background: #000;
+ z-index: -1;
+}
+
+.js-theme-msdos .theme {
+ opacity: 1;
+}
+
+.js-theme-msdos .theme__item + .theme__item {
+ margin-left: 0.5rem;
+}
+
+.js-theme-msdos .theme__button:before {
+ content: "Theme";
+ padding-right: 5px;
+}
+
+.js-theme-msdos .theme__button {
+ text-indent: 0;
+ width: auto;
+ height: 1rem;
+ font-size: 0.8rem;
+ padding-right: 10px;
+ font-family: "vga", "Courier New", Courier, monospace;
+ background: #00a8a8;
+ border-radius: 0;
+ color: #0e0e0e;
+}
+
+.js-theme-msdos .theme__button:hover,
+.js-theme-msdos .theme__button:focus {
+ background: #ffff44;
+ color: #0e0e0e;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.css
new file mode 100644
index 0000000..e1192f2
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.css
@@ -0,0 +1,129 @@
+@keyframes fade-in {
+ from {
+ opacity: 0;
+ }
+ to {
+ transform: none;
+ opacity: 1;
+ }
+}
+
+/* UI Styling */
+
+.theme {
+ cursor: pointer;
+ display: inline-block;
+ position: relative;
+ margin: auto auto;
+ padding: 0.5rem 0.5rem;
+ font-size: 0;
+ text-align: center;
+ z-index: 1;
+ transition: opacity 0.3s ease;
+ pointer-events: all;
+}
+
+.theme__list,
+.theme__button {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+.theme__list {
+ list-style: none;
+ animation: 1s both fade-in;
+ animation-delay: calc(var(--move-in-base-delay) * 9);
+}
+
+.theme__item {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.theme__item + .theme__item {
+ margin-left: 0.5rem;
+ transition: margin-left 0.3s ease;
+}
+
+.theme__button {
+ display: block;
+ position: relative;
+ text-indent: -9999px;
+ width: 1.2rem;
+ height: 1.2rem;
+ background: blue;
+ border: 0px solid #444;
+ border-radius: 0.6rem;
+ cursor: pointer;
+ z-index: 100;
+}
+
+button.theme__button:focus {
+ text-decoration: none;
+ outline: none;
+ box-shadow: none;
+}
+
+.theme__button[value="dark"] {
+ background: black;
+}
+
+.theme__button[value="light"] {
+ background: white;
+}
+
+@media only screen and (min-width: 640px) {
+ .theme {
+ opacity: 0.5;
+ }
+ .theme:hover {
+ opacity: 1;
+ }
+ .theme__item + .theme__item {
+ margin-left: -0.8rem;
+ }
+ .theme:hover .theme__item + .theme__item {
+ margin-left: 0.5rem;
+ }
+}
+
+/* Theme Setting */
+
+body {
+ transition: background-color 0.3s ease;
+}
+
+body.js-theme-light {
+ color: #222;
+ background-color: #fdfdfd;
+}
+
+.js-theme-light main h1 {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+}
+
+.js-theme-light a {
+ color: var(--brand-blue);
+}
+
+.js-theme-light a:hover {
+ background-image: linear-gradient(
+ to right,
+ var(--brand-blue) 25%,
+ var(--brand-green) 50%,
+ var(--brand-yellow) 75%,
+ var(--brand-blue) 100%
+ );
+}
+
+.js-theme-dark .theme__button[value="dark"] {
+ z-index: 95;
+ border: 3px solid #828282;
+}
+
+.js-theme-light .theme__button[value="light"] {
+ z-index: 95;
+ border: 3px solid #dedede;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.js
new file mode 100644
index 0000000..ef31863
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0/docs/theme/theme.js
@@ -0,0 +1,34 @@
+var theme = {
+ activeTheme: "dark",
+ load: function(theme, cb) {
+ var id = "theme-" + theme;
+ if (!document.getElementById(id)) {
+ var $head = document.getElementsByTagName("head")[0];
+ var $link = document.createElement("link");
+ $link.id = id;
+ $link.rel = "stylesheet";
+ $link.type = "text/css";
+ $link.href = "./theme/" + theme + "/theme.css";
+ $head.appendChild($link);
+
+ $link.onload = function() {
+ if (!!cb) cb();
+ };
+ $link.onerror = function() {
+ console.warn("loading " + theme + " theme failed.");
+ };
+ }
+ },
+ changeTo: function(theme) {
+ if (["light", "dark"].indexOf(theme) === -1) this.load(theme);
+
+ document.body.classList.remove("js-theme-" + this.activeTheme);
+ this.activeTheme = theme;
+ document.body.classList.add("js-theme-" + this.activeTheme);
+ }
+};
+
+document.querySelector(".theme").onclick = function(e) {
+ var nextTheme = theme.activeTheme === "dark" ? "light" : "dark";
+ theme.changeTo(nextTheme);
+};
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/css/style.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/css/style.css
new file mode 100644
index 0000000..c36f875
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/css/style.css
@@ -0,0 +1,410 @@
+@charset "UTF-8";
+:root {
+ /* color defaults */
+ --brand-blue: #05a6f0;
+ --brand-yellow: #ffba08;
+ --brand-red: #f35325;
+ --brand-green: #81bc06;
+ --white: #ffffff;
+ --off-white: #bbb;
+ --dark-grey: #121212;
+ /* typeface defaults */
+ --primary-typeface: Segoe UI, SegoeUI, Segoe WP, Helvetica Neue, Helvetica,
+ Tahoma, Arial, sans-serif;
+ --title-font-size: 1.3rem;
+ --base-font-size: 20px;
+ --base-font-line-height: 28px;
+ --small-font-size: 12px;
+ --small-font-line-height: 14px;
+ /* animations */
+ --root-gradient-animation: 4s both root-gradient linear infinite;
+ --move-in-offset: 20px;
+ --move-in-animation: 1s both move-in;
+ --move-in-base-delay: 100ms;
+ --logo-tiles-in-animation: 1s both logo-tiles-in;
+ --logo-tiles-in-delay: 100ms;
+ /* spacing */
+ --small-space: 1em;
+ --large-space: 2em;
+ --text-block-spacing: 0.5em;
+}
+
+@keyframes move-in {
+ from {
+ transform: translateY(var(--move-in-offset));
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+@keyframes logo-tiles-in {
+ 0% {
+ opacity: 0;
+ filter: grayscale(1) hue-rotate(100deg);
+ }
+ 25% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 1;
+ }
+ 55% {
+ opacity: 0;
+ }
+ 60% {
+ opacity: 1;
+ filter: grayscale(1) hue-rotate(100deg);
+ }
+ 100% {
+ opacity: 1;
+ filter: grayscale(0) hue-rotate(0deg);
+ }
+}
+
+@keyframes logo-tiles-hover {
+ from {
+ filter: hue-rotate(0deg);
+ }
+ to {
+ filter: hue-rotate(360deg);
+ }
+}
+
+@keyframes root-gradient {
+ 0% {
+ opacity: 0;
+ }
+ 40% {
+ opacity: 1;
+ }
+ 60% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes text-gradient-ltr {
+ to {
+ background-position: -600% center;
+ }
+}
+
+@keyframes text-gradient-rtl {
+ to {
+ background-position: 600% center;
+ }
+}
+
+/* Common */
+
+html {
+ position: relative;
+ font-size: var(--base-font-size);
+ font-family: var(--primary-typeface);
+ line-height: var(--base-font-line-height);
+ background-color: var(--dark-grey);
+}
+
+html[data-loaded] {
+ background: linear-gradient(
+ to bottom,
+ var(--brand-blue) 33%,
+ var(--brand-yellow) 67%
+ );
+}
+
+html:before {
+ content: "";
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ z-index: -1;
+ background: unquote(
+ "-moz-linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)"
+ );
+ background: unquote(
+ "linear-gradient(center bottom, var(--brand-yellow) 33%, var(--brand-blue) 67%)"
+ );
+ background: linear-gradient(
+ to bottom,
+ var(--brand-yellow) 33%,
+ var(--brand-blue) 67%
+ );
+ animation: var(--root-gradient-animation);
+}
+
+body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ min-height: calc(100vh - 10px);
+ margin: 5px;
+ padding: 0 var(--small-space);
+ color: var(--off-white);
+ background-color: var(--dark-grey);
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+::-moz-selection {
+ color: var(--white);
+ background-color: var(--brand-blue);
+}
+
+::selection {
+ color: var(--white);
+ background: #05a6f0;
+ /* Edge could not work with custom property here */
+ background-color: var(--brand-blue);
+}
+
+a {
+ color: var(--brand-yellow);
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ background-image: linear-gradient(
+ to right,
+ var(--brand-yellow) 25%,
+ var(--brand-green) 50%,
+ var(--brand-blue) 75%,
+ var(--brand-yellow) 100%
+ );
+ background-size: 600% auto;
+ -webkit-text-fill-color: transparent;
+ -webkit-background-clip: text;
+ background-clip: text;
+}
+
+html[dir="ltr"] a:not(.logo-link):hover,
+html[dir="ltr"] a:not(.logo-link):focus {
+ animation: text-gradient-ltr 6.5s linear infinite;
+}
+
+html[dir="rtl"] a:not(.logo-link):hover,
+html[dir="rtl"] a:not(.logo-link):focus {
+ animation: text-gradient-rtl 6.5s linear infinite;
+}
+
+p,
+h1 {
+ margin: 0;
+ padding: var(--text-block-spacing) 0;
+}
+
+/* Container */
+
+.container {
+ max-width: 31rem;
+ margin: 0 auto auto;
+}
+
+@media only screen and (max-width: 40em) {
+ .container {
+ max-width: 80vw;
+ }
+ .container p {
+ font-size: 1.125rem;
+ }
+}
+
+main p:nth-child(2) {
+ animation-delay: calc(var(--move-in-base-delay) * 6);
+}
+
+main p:nth-child(3) {
+ animation-delay: calc(var(--move-in-base-delay) * 7);
+}
+
+main p:nth-child(4) {
+ animation-delay: calc(var(--move-in-base-delay) * 8);
+}
+
+/* Logo */
+
+.logo-link {
+ display: block;
+ width: 4rem;
+ height: 4rem;
+ margin: var(--large-space) auto;
+}
+
+.logo-image {
+ display: block;
+ width: 100%;
+ height: auto;
+}
+
+.logo {
+ display: flex;
+ flex-wrap: wrap;
+ height: 100%;
+ width: 100%;
+ margin: 0;
+}
+
+.logo-tile {
+ display: block;
+ width: 45%;
+ height: 45%;
+ margin: 2.5%;
+ outline: 1px solid transparent;
+ animation: var(--logo-tiles-in-animation);
+}
+
+.winner {
+ display: block;
+ margin: auto;
+ text-align: center;
+}
+
+.logo-tile--red {
+ background-color: var(--brand-red);
+ transition: 150ms;
+}
+
+.logo-tile--largered {
+ background-color: var(--brand-red);
+ transform: scale(1.2) translateY(-3px);
+ transition: 150ms;
+}
+
+.logo-tile--red:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--green {
+ background-color: var(--brand-green);
+ animation-delay: var(--logo-tiles-in-delay);
+ transition: 150ms;
+}
+
+.logo-tile--largegreen {
+ background-color: var(--brand-green);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: var(--logo-tiles-in-delay);
+ transition: 150ms;
+}
+
+.logo-tile--green:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--blue {
+ background-color: var(--brand-blue);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 2);
+ transition: 150ms;
+}
+
+.logo-tile--largeblue {
+ background-color: var(--brand-blue);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 2);
+ transition: 150ms;
+}
+
+.logo-tile--blue:active {
+ transform: scale(0.8);
+}
+
+.logo-tile--yellow {
+ background-color: var(--brand-yellow);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 3);
+ transition: 150ms;
+}
+
+.logo-tile--largeyellow {
+ background-color: var(--brand-yellow);
+ transform: scale(1.2) translateY(-3px);
+ animation-delay: calc(var(--logo-tiles-in-delay) * 3);
+ transition: 150ms;
+}
+
+.logo-tile--yellow:active {
+ transform: scale(0.8);
+}
+
+/* Main */
+
+main h1 {
+ animation: var(--move-in-animation);
+ animation-delay: calc(var(--move-in-base-delay) * 4);
+ font-size: var(--title-font-size);
+ font-weight: bold;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+ margin-bottom: var(--small-space);
+ padding-bottom: var(--small-space);
+}
+
+main p {
+ animation: var(--move-in-animation);
+}
+main p:nth-of-type(1) {
+ animation-delay: calc(var(--move-in-base-delay) * 5);
+}
+main p:nth-of-type(2) {
+ animation-delay: calc(var(--move-in-base-delay) * 6);
+}
+main p:nth-of-type(3) {
+ animation-delay: calc(var(--move-in-base-delay) * 7);
+}
+main p:nth-of-type(4) {
+ animation-delay: calc(var(--move-in-base-delay) * 8);
+}
+
+/* Footer */
+
+.footer {
+ font-size: var(--small-font-size);
+ line-height: var(--small-font-line-height);
+ text-align: center;
+ margin: var(--small-space) 0 0;
+ padding: var(--small-space) 0;
+ overflow: hidden;
+}
+
+@media only screen and (max-width: 40em) {
+ footer {
+ font-size: 1rem;
+ margin: 0 auto;
+ max-width: 80vw;
+ }
+}
+
+footer p {
+ animation: var(--move-in-animation);
+ animation-delay: calc(var(--move-in-base-delay) * 11);
+}
+
+footer [href*="github"]:hover,
+footer [href*="github"]:focus {
+ color: var(--brand-green);
+}
+
+.footer-piece--separate {
+ display: block;
+}
+
+@media only screen and (max-width: 40em) {
+ .footer-piece {
+ display: block;
+ }
+}
+
+.time-travel {
+ text-align: center;
+}
+
+.time-travel a {
+ cursor: pointer;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/images/microsoft-og-image.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/images/microsoft-og-image.png
new file mode 100644
index 0000000..2f0eee7
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/images/microsoft-og-image.png differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/index.html b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/index.html
new file mode 100644
index 0000000..77d4956
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/index.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+ Join Microsoft Developer Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ š Simon says...A winner is you! š
+
+
+
+ Microsoft is looking for designers who code to help create the most compelling developer tools & services on
+ the planet.
+
+
+ We have open positions for technical product designers & design leaders in San Francisco, Seattle, and elsewhere.
+
+
+ We use PCs, Macs, Figma, Sketch, GitHub, JavaScript, ZEIT, and other modern tools to design, prototype, and build the future
+ of software development.
+
+
+ We believe in diversity, openness, and building delightful tools that empower every person and organization to achieve more.
+
+
+ Interested? Send a PR with any improvement to
+ microsoft/join-dev-design or
+ email us .
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/scripts/ls.helper.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/scripts/ls.helper.js
new file mode 100644
index 0000000..983b950
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/scripts/ls.helper.js
@@ -0,0 +1,52 @@
+let debug = false;
+
+const setDebug = function(val) {
+ debug = val;
+ console.log("LS DEBUG: ", val);
+};
+
+const setItem = function(key, item) {
+ if (window.localStorage) {
+ localStorage.setItem(key, item);
+ if (debug) {
+ console.log("ls.setItem", item);
+ }
+ }
+};
+
+const getItem = function(key) {
+ if (window.localStorage) {
+ const item = localStorage.getItem(key);
+ if (debug) {
+ console.log("ls.getItem", item);
+ }
+ return item;
+ }
+ return undefined;
+};
+
+const clear = function(key) {
+ if (window.localStorage) {
+ localStorage.clear(key);
+ if (debug) {
+ console.log("ls.getItem", item);
+ }
+ }
+};
+
+const removeItem = function(key) {
+ if (window.localStorage) {
+ localStorage.removeItem(key);
+ if (debug) {
+ console.log("ls.removeItem", key);
+ }
+ }
+};
+
+window.ls = {
+ setItem,
+ getItem,
+ clear,
+ removeItem,
+ setDebug
+};
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/simon.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/simon.js
new file mode 100644
index 0000000..dd38e82
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/simon.js
@@ -0,0 +1,147 @@
+new Vue({
+ el: "#app",
+ data: {
+ colors: ["red", "green", "yellow", "blue"],
+ currentSequence: [],
+ colorStatus: {
+ red: false,
+ green: false,
+ yellow: false,
+ blue: false
+ },
+ colorSymbols: {
+ red: "ā¤ļø",
+ green: "š",
+ yellow: "š",
+ blue: "š"
+ },
+ userClicks: [],
+ currentScore: 0,
+ difficulty: 1000
+ },
+ created() {
+ this.generateSequence();
+ },
+ watch: {
+ winner: function(isWinner) {
+ if (isWinner) {
+ this.changeTheme();
+ }
+ }
+ },
+ computed: {
+ logoTitleRed: function() {
+ return this.colorStatus.red ? "logo-tile--largered" : "logo-tile--red";
+ },
+ logoTitleGreen: function() {
+ return this.colorStatus.green
+ ? "logo-tile--largegreen"
+ : "logo-tile--green";
+ },
+ logoTitleYellow: function() {
+ return this.colorStatus.yellow
+ ? "logo-tile--largeyellow"
+ : "logo-tile--yellow";
+ },
+ logoTitleBlue: function() {
+ return this.colorStatus.blue ? "logo-tile--largeblue" : "logo-tile--blue";
+ },
+ winner: function() {
+ return this.currentScore >= 10 ? true : false;
+ }
+ },
+ methods: {
+ generateSequence: function() {
+ this.currentSequence.push(
+ this.colors[this.getRandomInt(this.colors.length)]
+ );
+ if (this.currentScore > 0) {
+ this.play();
+ } else {
+ console.log(
+ `šµļøāāļøšµļøāāļø PSSST! There is a game inside this webpage...\nClick the ${
+ this.colorSymbols[this.currentSequence[0]]
+ } tile on the Microsoft logo to play!`
+ );
+ }
+ },
+ clickColor: function(color) {
+ this.userClicks.push(color);
+ if (this.checkCorrect()) {
+ this.userClicks = [];
+ if (this.difficulty > 100) {
+ this.difficulty -= 100;
+ }
+ this.currentScore++;
+ console.log(
+ `Simon says..."correct!" š Your score is`,
+ this.currentScore
+ );
+ this.lightUp();
+ this.generateSequence();
+ }
+ },
+ getRandomInt: function(max) {
+ return Math.floor(Math.random() * Math.floor(max));
+ },
+ timer: function(ms) {
+ return new Promise(res => setTimeout(res, ms));
+ },
+ checkCorrect: function() {
+ let matching = true;
+ let sequence =
+ this.userClicks[this.userClicks.length - 1] ===
+ this.currentSequence[this.userClicks.length - 1];
+ if (!sequence) {
+ this.reset();
+ }
+ for (let i = 0; i < this.currentSequence.length; i++) {
+ if (this.userClicks[i] !== this.currentSequence[i]) {
+ matching = false;
+ break;
+ }
+ }
+ return matching;
+ },
+ reset: function() {
+ console.log(`š¢ Game Over! Refresh to play again.`);
+ this.currentSequence = [];
+ this.userClicks = [];
+ this.currentScore = 0;
+ this.difficulty = 1000;
+ this.generateSequence();
+ },
+ play: async function() {
+ await this.timer(2000);
+ for (var i = 0; i < this.currentSequence.length; i++) {
+ this.colorStatus[this.currentSequence[i]] = true;
+ await this.timer(this.difficulty);
+ this.colorStatus[this.currentSequence[i]] = false;
+ await this.timer(this.difficulty / 2);
+ }
+ },
+ lightUp: async function() {
+ let t = 150;
+ this.colorStatus.red = true;
+ await this.timer(t);
+ this.colorStatus.red = false;
+ this.colorStatus.green = true;
+ await this.timer(t);
+ this.colorStatus.green = false;
+ this.colorStatus.yellow = true;
+ await this.timer(t);
+ this.colorStatus.yellow = false;
+ this.colorStatus.blue = true;
+ await this.timer(t);
+ this.colorStatus.blue = false;
+ this.colorStatus.red = true;
+ await this.timer(t);
+ this.colorStatus.red = false;
+ },
+ changeTheme: function() {
+ if (theme && theme.changeTo) {
+ theme.changeTo("msdos");
+ }
+ }
+ }
+});
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosblibbet.png b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosblibbet.png
new file mode 100644
index 0000000..1184e99
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosblibbet.png differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff
new file mode 100644
index 0000000..de7b9b2
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff2 b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff2
new file mode 100644
index 0000000..a8161d7
Binary files /dev/null and b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdosmoreperfectdosvga.woff2 differ
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdostheme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdostheme.css
new file mode 100644
index 0000000..8100c3a
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/msdostheme.css
@@ -0,0 +1,122 @@
+@font-face {
+ font-family: "vga";
+ src: url("moreperfectdosvga.woff2") format("woff2"),
+ url("moreperfectdosvga.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+}
+
+/* MSDOS Font: 'More Perfect DOS VGA' by Adam Moore http://laemeur.sdf.org/fonts/ */
+
+body.js-theme-msdos {
+ color: #4bffff;
+ background: #0000ab;
+ font-family: "vga", "Courier New", Courier, monospace;
+ margin: 0;
+}
+
+.js-theme-msdos:before {
+ content: "";
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ right: 10px;
+ bottom: 10px;
+ border: 6px double #4bffff;
+}
+
+.js-theme-msdos:after {
+ content: "C:\\";
+ position: absolute;
+ top: 4px;
+ padding: 0 6px;
+ color: #0000ab;
+ background: #4bffff;
+ line-height: 0.9;
+ font-size: 1.2rem;
+}
+
+.js-theme-msdos .logo-link {
+ animation: none;
+}
+
+.js-theme-msdos .logo {
+ position: relative;
+}
+
+.js-theme-msdos .logo > span {
+ display: none;
+}
+
+.js-theme-msdos .logo:before {
+ content: "";
+ position: absolute;
+ top: 66%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 226px;
+ height: 32px;
+ z-index: 100;
+ background: url("blibbet.png") center/cover no-repeat;
+}
+
+.js-theme-msdos main h1 {
+ border-bottom: 2px solid #4bffff;
+}
+
+.js-theme-msdos a:not(.logo-link) {
+ color: #ffff44;
+ animation: none;
+}
+
+.js-theme-msdos a:not(.logo-link):hover,
+.js-theme-msdos a:not(.logo-link):focus {
+ color: #0e0e0e;
+ -webkit-text-fill-color: #000 !important;
+ padding: 0.2rem;
+ background: #ffff44;
+ position: relative;
+}
+
+.js-theme-msdos a:not(.logo-link):hover:after,
+.js-theme-msdos a:not(.logo-link):focus:after {
+ content: "";
+ position: absolute;
+ top: 6px;
+ left: 6px;
+ width: 100%;
+ height: 100%;
+ background: #000;
+ z-index: -1;
+}
+
+.js-theme-msdos .theme {
+ opacity: 1;
+}
+
+.js-theme-msdos .theme__item + .theme__item {
+ margin-left: 0.5rem;
+}
+
+.js-theme-msdos .theme__button:before {
+ content: "Theme";
+ padding-right: 5px;
+}
+
+.js-theme-msdos .theme__button {
+ text-indent: 0;
+ width: auto;
+ height: 1rem;
+ font-size: 0.8rem;
+ padding-right: 10px;
+ font-family: "vga", "Courier New", Courier, monospace;
+ background: #00a8a8;
+ border-radius: 0;
+ color: #0e0e0e;
+}
+
+.js-theme-msdos .theme__button:hover,
+.js-theme-msdos .theme__button:focus {
+ background: #ffff44;
+ color: #0e0e0e;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.css b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.css
new file mode 100644
index 0000000..e1192f2
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.css
@@ -0,0 +1,129 @@
+@keyframes fade-in {
+ from {
+ opacity: 0;
+ }
+ to {
+ transform: none;
+ opacity: 1;
+ }
+}
+
+/* UI Styling */
+
+.theme {
+ cursor: pointer;
+ display: inline-block;
+ position: relative;
+ margin: auto auto;
+ padding: 0.5rem 0.5rem;
+ font-size: 0;
+ text-align: center;
+ z-index: 1;
+ transition: opacity 0.3s ease;
+ pointer-events: all;
+}
+
+.theme__list,
+.theme__button {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+.theme__list {
+ list-style: none;
+ animation: 1s both fade-in;
+ animation-delay: calc(var(--move-in-base-delay) * 9);
+}
+
+.theme__item {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.theme__item + .theme__item {
+ margin-left: 0.5rem;
+ transition: margin-left 0.3s ease;
+}
+
+.theme__button {
+ display: block;
+ position: relative;
+ text-indent: -9999px;
+ width: 1.2rem;
+ height: 1.2rem;
+ background: blue;
+ border: 0px solid #444;
+ border-radius: 0.6rem;
+ cursor: pointer;
+ z-index: 100;
+}
+
+button.theme__button:focus {
+ text-decoration: none;
+ outline: none;
+ box-shadow: none;
+}
+
+.theme__button[value="dark"] {
+ background: black;
+}
+
+.theme__button[value="light"] {
+ background: white;
+}
+
+@media only screen and (min-width: 640px) {
+ .theme {
+ opacity: 0.5;
+ }
+ .theme:hover {
+ opacity: 1;
+ }
+ .theme__item + .theme__item {
+ margin-left: -0.8rem;
+ }
+ .theme:hover .theme__item + .theme__item {
+ margin-left: 0.5rem;
+ }
+}
+
+/* Theme Setting */
+
+body {
+ transition: background-color 0.3s ease;
+}
+
+body.js-theme-light {
+ color: #222;
+ background-color: #fdfdfd;
+}
+
+.js-theme-light main h1 {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+}
+
+.js-theme-light a {
+ color: var(--brand-blue);
+}
+
+.js-theme-light a:hover {
+ background-image: linear-gradient(
+ to right,
+ var(--brand-blue) 25%,
+ var(--brand-green) 50%,
+ var(--brand-yellow) 75%,
+ var(--brand-blue) 100%
+ );
+}
+
+.js-theme-dark .theme__button[value="dark"] {
+ z-index: 95;
+ border: 3px solid #828282;
+}
+
+.js-theme-light .theme__button[value="light"] {
+ z-index: 95;
+ border: 3px solid #dedede;
+}
diff --git a/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.js b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.js
new file mode 100644
index 0000000..14fcba8
--- /dev/null
+++ b/docs/time-travel/history/MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5/docs/theme/theme.js
@@ -0,0 +1,44 @@
+const USER_THEME = "ms-tt-user-theme";
+const storedTheme = window.ls.getItem(USER_THEME);
+
+var theme = {
+ activeTheme: "dark",
+ load: function(theme, cb) {
+ var id = "theme-" + theme;
+ if (!document.getElementById(id)) {
+ var $head = document.getElementsByTagName("head")[0];
+ var $link = document.createElement("link");
+ $link.id = id;
+ $link.rel = "stylesheet";
+ $link.type = "text/css";
+ $link.href = "./theme/" + theme + "/theme.css";
+ $head.appendChild($link);
+
+ $link.onload = function() {
+ if (!!cb) cb();
+ };
+ $link.onerror = function() {
+ console.warn("loading " + theme + " theme failed.");
+ };
+ }
+ },
+ changeTo: function(theme) {
+ if (["light", "dark"].indexOf(theme) === -1) {
+ this.load(theme);
+ } else {
+ window.ls.setItem(USER_THEME, theme);
+ }
+ document.body.classList.remove("js-theme-" + this.activeTheme);
+ this.activeTheme = theme;
+ document.body.classList.add("js-theme-" + this.activeTheme);
+ }
+};
+
+document.querySelector(".theme").onclick = function(e) {
+ var nextTheme = theme.activeTheme === "dark" ? "light" : "dark";
+ theme.changeTo(nextTheme);
+};
+
+if (storedTheme) {
+ theme.changeTo(storedTheme);
+}
diff --git a/docs/time-travel/index.json b/docs/time-travel/index.json
index acff622..da62759 100644
--- a/docs/time-travel/index.json
+++ b/docs/time-travel/index.json
@@ -499,6 +499,27 @@
}
}
},
+ {
+ "node": {
+ "id": "MDExOlB1bGxSZXF1ZXN0MjAyNzU2NzA1",
+ "title": "Added a simon game",
+ "url": "https://github.com/Microsoft/join-dev-design/pull/41",
+ "mergedAt": "2018-08-07T01:51:41Z",
+ "author": {
+ "login": "makeupsomething",
+ "avatarUrl":
+ "https://avatars1.githubusercontent.com/u/7676733?v=4"
+ },
+ "editor": null,
+ "mergeCommit": {
+ "committedDate": "2018-08-07T01:51:41Z",
+ "id":
+ "MDY6Q29tbWl0MTQxNTAzNjgzOjlhYmVlN2YzOTYyZGFkMmU2ZmY3OTRiNmI2ZGE1OTI5YWVmMDhhODk=",
+ "tarballUrl":
+ "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/9abee7f3962dad2e6ff794b6b6da5929aef08a89"
+ }
+ }
+ },
{
"node": {
"id": "MDExOlB1bGxSZXF1ZXN0MjAyNzU3MjE0",
@@ -1529,6 +1550,27 @@
}
}
},
+ {
+ "node": {
+ "id": "MDExOlB1bGxSZXF1ZXN0MjA0NDk3OTYx",
+ "title": "Disable time travel button in time travel mode",
+ "url": "https://github.com/Microsoft/join-dev-design/pull/136",
+ "mergedAt": "2018-10-10T18:00:42Z",
+ "author": {
+ "login": "d4rekanguok",
+ "avatarUrl":
+ "https://avatars2.githubusercontent.com/u/3383539?v=4"
+ },
+ "editor": null,
+ "mergeCommit": {
+ "committedDate": "2018-10-10T18:00:41Z",
+ "id":
+ "MDY6Q29tbWl0MTQxNTAzNjgzOmI3ZDM3MzMwYWUxZGI5NGE5N2Q4NTNlMThmMTdhY2RhZmI4NTUyMzA=",
+ "tarballUrl":
+ "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/b7d37330ae1db94a97d853e18f17acdafb855230"
+ }
+ }
+ },
{
"node": {
"id": "MDExOlB1bGxSZXF1ZXN0MjA1OTA3ODAz",
@@ -1549,6 +1591,69 @@
"https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/41382c7b876b2615b76bdc74354dd7b3194a0217"
}
}
+ },
+ {
+ "node": {
+ "id": "MDExOlB1bGxSZXF1ZXN0MjA2NzExMDU4",
+ "title": "fix absolute link in theme.js",
+ "url": "https://github.com/Microsoft/join-dev-design/pull/149",
+ "mergedAt": "2018-08-07T14:48:33Z",
+ "author": {
+ "login": "d4rekanguok",
+ "avatarUrl":
+ "https://avatars2.githubusercontent.com/u/3383539?v=4"
+ },
+ "editor": null,
+ "mergeCommit": {
+ "committedDate": "2018-08-07T14:48:33Z",
+ "id":
+ "MDY6Q29tbWl0MTQxNTAzNjgzOjRmZmZiZWY5NGY2NWQ3ZThlMjdiNWE5MmRiZjllNThlZTZkMDViZmE=",
+ "tarballUrl":
+ "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/4fffbef94f65d7e8e27b5a92dbf9e58ee6d05bfa"
+ }
+ }
+ },
+ {
+ "node": {
+ "id": "MDExOlB1bGxSZXF1ZXN0MjE3MTQ0MDk0",
+ "title": "Updated contact info",
+ "url": "https://github.com/Microsoft/join-dev-design/pull/157",
+ "mergedAt": "2018-09-21T02:00:54Z",
+ "author": {
+ "login": "adrianmg",
+ "avatarUrl":
+ "https://avatars0.githubusercontent.com/u/589285?v=4"
+ },
+ "editor": null,
+ "mergeCommit": {
+ "committedDate": "2018-09-21T02:00:54Z",
+ "id":
+ "MDY6Q29tbWl0MTQxNTAzNjgzOjI4ZWEwMGFjYzVmNmJlYTExM2RkNmQyODhiZGZhNGM0YzgyNzI1NjQ=",
+ "tarballUrl":
+ "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/28ea00acc5f6bea113dd6d288bdfa4c4c8272564"
+ }
+ }
+ },
+ {
+ "node": {
+ "id": "MDExOlB1bGxSZXF1ZXN0MjE5NTQ5Mzg5",
+ "title": "Remember last theme selection.",
+ "url": "https://github.com/Microsoft/join-dev-design/pull/163",
+ "mergedAt": "2018-10-09T22:36:02Z",
+ "author": {
+ "login": "aamay001",
+ "avatarUrl":
+ "https://avatars0.githubusercontent.com/u/28788253?v=4"
+ },
+ "editor": null,
+ "mergeCommit": {
+ "committedDate": "2018-10-09T22:36:01Z",
+ "id":
+ "MDY6Q29tbWl0MTQxNTAzNjgzOmFkN2ExMjIzNGQ4YTJhYzExMjQ1MzMzZWE1YTcyYTkyZTQ5YWRlOTQ=",
+ "tarballUrl":
+ "https://codeload.github.com/Microsoft/join-dev-design/legacy.tar.gz/ad7a12234d8a2ac11245333ea5a72a92e49ade94"
+ }
+ }
}
]
}
diff --git a/package-lock.json b/package-lock.json
index c7428b1..4950a33 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,21 +4,46 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "@zeit/schemas": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.1.1.tgz",
+ "integrity": "sha512-7uBms9Uwzq1GnLK7ar4FvhUONW5PuuASBomeMJ5rREMYxWdm2R0/5iXH2gUm8uqVT1x8U51CGuoaF40Tc0xoJA==",
+ "dev": true
+ },
"accepts": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
"integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
- "dev": true,
"requires": {
"mime-types": "~2.1.18",
"negotiator": "0.6.1"
}
},
+ "ajv": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
+ "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.1"
+ }
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.0.0"
+ }
+ },
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
"requires": {
"color-convert": "^1.9.0"
}
@@ -27,7 +52,6 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
"integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
- "dev": true,
"requires": {
"micromatch": "^2.1.5",
"normalize-path": "^2.0.0"
@@ -37,7 +61,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.1.tgz",
"integrity": "sha1-1vxyqm0n2ZyVqU/RiNcx7v/6Zjw=",
- "dev": true,
"requires": {
"unix-crypt-td-js": "^1.0.0"
}
@@ -45,14 +68,24 @@
"apache-md5": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.2.tgz",
- "integrity": "sha1-7klza2ObTxCLbp5ibG2pkwa0FpI=",
+ "integrity": "sha1-7klza2ObTxCLbp5ibG2pkwa0FpI="
+ },
+ "arch": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz",
+ "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==",
+ "dev": true
+ },
+ "arg": {
+ "version": "2.0.0",
+ "resolved": "http://registry.npmjs.org/arg/-/arg-2.0.0.tgz",
+ "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==",
"dev": true
},
"arr-diff": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
"integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
"requires": {
"arr-flatten": "^1.0.1"
}
@@ -60,32 +93,27 @@
"arr-flatten": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
},
"array-unique": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
},
"async-each": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
- "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
- "dev": true
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"basic-auth": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz",
"integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=",
- "dev": true,
"requires": {
"safe-buffer": "5.1.1"
},
@@ -93,32 +121,25 @@
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
- "dev": true
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
}
}
},
"batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
- "dev": true
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
},
"bcryptjs": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
- "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=",
- "dev": true
- },
- "big-integer": {
- "version": "1.6.32",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.32.tgz",
- "integrity": "sha512-ljKJdR3wk9thHfLj4DtrNiOSTxvGFaMjWrG4pW75juXC4j7+XuKJVFdg4kgFMYp85PVkO05dFMj2dk2xVsH4xw=="
+ "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms="
},
"binary": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
"integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
+ "dev": true,
"requires": {
"buffers": "~0.1.1",
"chainsaw": "~0.1.0"
@@ -127,22 +148,7 @@
"binary-extensions": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
- "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
- "dev": true
- },
- "bl": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
- "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
- "requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- }
- },
- "bluebird": {
- "version": "3.4.7",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
- "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
+ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU="
},
"boxen": {
"version": "1.3.0",
@@ -163,7 +169,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -173,54 +178,17 @@
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
"integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
"requires": {
"expand-range": "^1.8.1",
"preserve": "^0.2.0",
"repeat-element": "^1.1.2"
}
},
- "browserify-zlib": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
- "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
- "requires": {
- "pako": "~0.2.0"
- }
- },
- "buffer-alloc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
- "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
- "requires": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
- }
- },
- "buffer-alloc-unsafe": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
- },
- "buffer-fill": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
- },
- "buffer-from": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
- "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ=="
- },
- "buffer-indexof-polyfill": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz",
- "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8="
- },
"buffers": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
- "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s="
+ "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
+ "dev": true
},
"bytes": {
"version": "3.0.0",
@@ -238,6 +206,7 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
"integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
+ "dev": true,
"requires": {
"traverse": ">=0.3.0 <0.4"
}
@@ -246,7 +215,6 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
"integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -257,7 +225,6 @@
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
"integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
- "dev": true,
"requires": {
"anymatch": "^1.3.0",
"async-each": "^1.0.0",
@@ -277,14 +244,28 @@
"ci-info": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz",
- "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==",
+ "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg=="
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
"dev": true
},
+ "clipboardy": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz",
+ "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==",
+ "dev": true,
+ "requires": {
+ "arch": "^2.1.0",
+ "execa": "^0.8.0"
+ }
+ },
"color-convert": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
"integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
- "dev": true,
"requires": {
"color-name": "1.1.1"
}
@@ -292,26 +273,22 @@
"color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
- "dev": true
+ "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok="
},
"colors": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz",
- "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==",
- "dev": true
+ "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw=="
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"connect": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/connect/-/connect-3.5.1.tgz",
"integrity": "sha1-bTDXpjx/FwhXprOqazY9lz3KWI4=",
- "dev": true,
"requires": {
"debug": "~2.2.0",
"finalhandler": "0.5.1",
@@ -319,17 +296,21 @@
"utils-merge": "1.0.0"
}
},
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+ "dev": true
+ },
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cors": {
"version": "2.8.4",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz",
"integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=",
- "dev": true,
"requires": {
"object-assign": "^4",
"vary": "^1"
@@ -339,7 +320,6 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
"requires": {
"lru-cache": "^4.0.1",
"shebang-command": "^1.2.0",
@@ -350,22 +330,25 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
"integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
- "dev": true,
"requires": {
"ms": "0.7.1"
}
},
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true
+ },
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "dev": true
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"dotenv": {
"version": "6.0.0",
@@ -375,71 +358,37 @@
"duplexer": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
- "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
- "dev": true
- },
- "duplexer2": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
- "requires": {
- "readable-stream": "^2.0.2"
- }
- },
- "duplexify": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
- "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "requires": {
- "once": "^1.4.0"
- }
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
- "dev": true
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "dev": true
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"event-stream": {
"version": "3.3.4",
"resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
"integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
- "dev": true,
"requires": {
"duplexer": "~0.1.1",
"from": "~0",
@@ -454,7 +403,6 @@
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
"integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
- "dev": true,
"requires": {
"cross-spawn": "^5.0.1",
"get-stream": "^3.0.0",
@@ -469,7 +417,6 @@
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
"integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
"requires": {
"is-posix-bracket": "^0.1.0"
}
@@ -478,7 +425,6 @@
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
"integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
- "dev": true,
"requires": {
"fill-range": "^2.1.0"
}
@@ -487,16 +433,43 @@
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
"integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
"requires": {
"is-extglob": "^1.0.0"
}
},
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-url-parser": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz",
+ "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=",
+ "dev": true,
+ "requires": {
+ "punycode": "^1.3.2"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
"faye-websocket": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
"integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
- "dev": true,
"requires": {
"websocket-driver": ">=0.5.1"
}
@@ -504,14 +477,12 @@
"filename-regex": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
- "dev": true
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
},
"fill-range": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
"integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
- "dev": true,
"requires": {
"is-number": "^2.1.0",
"isobject": "^2.0.0",
@@ -524,7 +495,6 @@
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.1.tgz",
"integrity": "sha1-LEANjUUwk1vCMlScX6OF7Afeb80=",
- "dev": true,
"requires": {
"debug": "~2.2.0",
"escape-html": "~1.0.3",
@@ -537,7 +507,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
"requires": {
"locate-path": "^2.0.0"
}
@@ -545,14 +514,12 @@
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
},
"for-own": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
"integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
- "dev": true,
"requires": {
"for-in": "^1.0.1"
}
@@ -560,19 +527,12 @@
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"from": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
- "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
- "dev": true
- },
- "fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4="
},
"fs-extra": {
"version": "7.0.0",
@@ -595,469 +555,8 @@
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
- "optional": true,
- "requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "bundled": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.5.1",
- "bundled": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.21",
- "bundled": true,
- "optional": true,
- "requires": {
- "safer-buffer": "^2.1.0"
- }
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true
- },
- "minipass": {
- "version": "2.2.4",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.1.0",
- "bundled": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true,
- "optional": true
- },
- "needle": {
- "version": "2.2.0",
- "bundled": true,
- "optional": true,
- "requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.10.0",
- "bundled": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.0",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.1.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.3",
- "bundled": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.1.10",
- "bundled": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.7",
- "bundled": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "glob": "^7.0.5"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "bundled": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "optional": true
- },
- "semver": {
- "version": "5.5.0",
- "bundled": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.2"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true
- },
- "yallist": {
- "version": "3.0.2",
- "bundled": true
- }
- }
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
},
"fstream": {
"version": "0.1.31",
@@ -1085,13 +584,13 @@
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -1105,7 +604,6 @@
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
"integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
"requires": {
"glob-parent": "^2.0.0",
"is-glob": "^2.0.0"
@@ -1115,41 +613,41 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
"integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
"requires": {
"is-glob": "^2.0.0"
}
},
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "glob-slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz",
+ "integrity": "sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U=",
"dev": true
},
- "gunzip-maybe": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.1.tgz",
- "integrity": "sha512-qtutIKMthNJJgeHQS7kZ9FqDq59/Wn0G2HYCRNjpup7yKfVI6/eqwpmroyZGFoCYaG+sW6psNVb4zoLADHpp2g==",
+ "glob-slasher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz",
+ "integrity": "sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44=",
+ "dev": true,
"requires": {
- "browserify-zlib": "^0.1.4",
- "is-deflate": "^1.0.0",
- "is-gzip": "^1.0.0",
- "peek-stream": "^1.1.0",
- "pumpify": "^1.3.3",
- "through2": "^2.0.3"
+ "glob-slash": "^1.0.0",
+ "lodash.isobject": "^2.4.1",
+ "toxic": "^1.0.0"
}
},
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"http-auth": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz",
"integrity": "sha1-lFz63WZSHq+PfISRPTd9exXyTjE=",
- "dev": true,
"requires": {
"apache-crypt": "^1.1.2",
"apache-md5": "^1.0.6",
@@ -1161,7 +659,6 @@
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "dev": true,
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
@@ -1172,22 +669,19 @@
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "dev": true
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
}
}
},
"http-parser-js": {
"version": "0.4.13",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz",
- "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=",
- "dev": true
+ "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc="
},
"husky": {
"version": "0.14.3",
"resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz",
"integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==",
- "dev": true,
"requires": {
"is-ci": "^1.0.10",
"normalize-path": "^1.0.0",
@@ -1197,21 +691,20 @@
"normalize-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz",
- "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
- "dev": true
+ "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k="
}
}
},
"ignore": {
"version": "3.3.10",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
- "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
- "dev": true
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug=="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -1220,14 +713,18 @@
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
},
"is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
- "dev": true,
"requires": {
"binary-extensions": "^1.0.0"
}
@@ -1235,34 +732,25 @@
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
"is-ci": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz",
"integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==",
- "dev": true,
"requires": {
"ci-info": "^1.0.0"
}
},
- "is-deflate": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz",
- "integrity": "sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ="
- },
"is-dotfile": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE="
},
"is-equal-shallow": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
"integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
- "dev": true,
"requires": {
"is-primitive": "^2.0.0"
}
@@ -1270,34 +758,25 @@
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
},
"is-extglob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
},
"is-glob": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
"requires": {
"is-extglob": "^1.0.0"
}
},
- "is-gzip": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
- "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM="
- },
"is-number": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
"integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
- "dev": true,
"requires": {
"kind-of": "^3.0.2"
}
@@ -1305,44 +784,37 @@
"is-posix-bracket": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
- "dev": true
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q="
},
"is-primitive": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
- "dev": true
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
},
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
"is-wsl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
"isobject": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
"requires": {
"isarray": "1.0.0"
}
@@ -1365,21 +837,14 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
},
- "listenercount": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
- "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
- },
"live-server": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.0.tgz",
"integrity": "sha1-RJhkS7+Bpm8Y3Y3/3vYcTBw3TKM=",
- "dev": true,
"requires": {
"chokidar": "^1.6.0",
"colors": "^1.3.0",
@@ -1400,17 +865,36 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
"requires": {
"p-locate": "^2.0.0",
"path-exists": "^3.0.0"
}
},
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "lodash._objecttypes": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
+ "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=",
+ "dev": true
+ },
+ "lodash.isobject": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
+ "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
+ "dev": true,
+ "requires": {
+ "lodash._objecttypes": "~2.4.1"
+ }
+ },
"lru-cache": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
"integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
- "dev": true,
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
@@ -1419,8 +903,7 @@
"map-stream": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
- "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
- "dev": true
+ "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ="
},
"match-stream": {
"version": "0.0.2",
@@ -1461,14 +944,12 @@
"math-random": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
- "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
- "dev": true
+ "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w="
},
"micromatch": {
"version": "2.3.11",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
"integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
"requires": {
"arr-diff": "^2.0.0",
"array-unique": "^0.2.1",
@@ -1488,20 +969,17 @@
"mime": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
- "dev": true
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
},
"mime-db": {
"version": "1.35.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
- "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
- "dev": true
+ "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg=="
},
"mime-types": {
"version": "2.1.19",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
"integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
- "dev": true,
"requires": {
"mime-db": "~1.35.0"
}
@@ -1510,7 +988,6 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -1564,7 +1041,6 @@
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz",
"integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=",
- "dev": true,
"requires": {
"basic-auth": "~2.0.0",
"debug": "2.6.9",
@@ -1577,7 +1053,6 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
"requires": {
"ms": "2.0.0"
}
@@ -1585,22 +1060,19 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
"mri": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/mri/-/mri-1.1.1.tgz",
- "integrity": "sha1-haom09ru7t+A3FmEr5XMXKXK2fE=",
- "dev": true
+ "integrity": "sha1-haom09ru7t+A3FmEr5XMXKXK2fE="
},
"ms": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
- "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
- "dev": true
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
},
"natives": {
"version": "1.1.4",
@@ -1611,14 +1083,17 @@
"negotiator": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
- "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
- "dev": true
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ },
+ "node-fetch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.0.tgz",
+ "integrity": "sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA=="
},
"normalize-path": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
"requires": {
"remove-trailing-separator": "^1.0.1"
}
@@ -1627,7 +1102,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
"integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "dev": true,
"requires": {
"path-key": "^2.0.0"
}
@@ -1635,14 +1109,12 @@
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object.omit": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
"integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
- "dev": true,
"requires": {
"for-own": "^0.1.4",
"is-extendable": "^0.1.1"
@@ -1652,7 +1124,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
"requires": {
"ee-first": "1.1.1"
}
@@ -1660,13 +1131,13 @@
"on-headers": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
- "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
- "dev": true
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
"requires": {
"wrappy": "1"
}
@@ -1675,7 +1146,6 @@
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
"integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
- "dev": true,
"requires": {
"is-wsl": "^1.1.0"
}
@@ -1689,14 +1159,12 @@
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
},
"p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
"requires": {
"p-try": "^1.0.0"
}
@@ -1705,7 +1173,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
"requires": {
"p-limit": "^1.1.0"
}
@@ -1713,19 +1180,12 @@
"p-try": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "pako": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU="
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
},
"parse-glob": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
"integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
- "dev": true,
"requires": {
"glob-base": "^0.3.0",
"is-dotfile": "^1.0.0",
@@ -1736,63 +1196,57 @@
"parseurl": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
- "dev": true
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
"dev": true
},
"path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "path-to-regexp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz",
+ "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==",
"dev": true
},
"pause-stream": {
"version": "0.0.11",
"resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
"integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
- "dev": true,
"requires": {
"through": "~2.3"
}
},
- "peek-stream": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
- "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==",
- "requires": {
- "buffer-from": "^1.0.0",
- "duplexify": "^3.5.0",
- "through2": "^2.0.3"
- }
- },
"preserve": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
- "dev": true
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
},
"prettier": {
"version": "1.13.7",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz",
- "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==",
- "dev": true
+ "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w=="
},
"pretty-quick": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-1.6.0.tgz",
"integrity": "sha512-bnCmsPy98ERD7VWBO+0y1OGWLfx/DPUjNFN2ZRVyxuGBiic1BXAGgjHsTKgBIbPISdqpP6KBEmRV0Lir4xu/BA==",
- "dev": true,
"requires": {
"chalk": "^2.3.0",
"execa": "^0.8.0",
@@ -1804,14 +1258,12 @@
"process-nextick-args": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
- "dev": true
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
},
"proxy-middleware": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz",
- "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=",
- "dev": true
+ "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY="
},
"pseudomap": {
"version": "1.0.2",
@@ -1856,25 +1308,6 @@
}
}
},
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -1885,7 +1318,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
"integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
- "dev": true,
"requires": {
"is-number": "^4.0.0",
"kind-of": "^6.0.0",
@@ -1895,28 +1327,36 @@
"is-number": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
},
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
}
}
},
"range-parser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
- "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
- "dev": true
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
},
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -1931,7 +1371,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
"integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
- "dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"minimatch": "^3.0.2",
@@ -1943,33 +1382,49 @@
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
"integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
- "dev": true,
"requires": {
"is-equal-shallow": "^0.1.3"
}
},
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+ "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "dev": true,
+ "requires": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "dev": true,
+ "requires": {
+ "rc": "^1.0.1"
+ }
+ },
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
},
"repeat-element": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
- "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
- "dev": true
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
},
"repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
},
"rimraf": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
"requires": {
"glob": "^7.0.5"
}
@@ -1977,14 +1432,12 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"send": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
"integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
- "dev": true,
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
@@ -2005,7 +1458,6 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
"requires": {
"ms": "2.0.0"
}
@@ -2013,14 +1465,62 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"statuses": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+ }
+ }
+ },
+ "serve": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/serve/-/serve-9.6.0.tgz",
+ "integrity": "sha512-E5wtMirS9ADD+bs99GofXsLUxwW8EJWc2zQA+x4FwgVGAVnJdzTWIJeFtbVFLaheBewCfN849RwZU2tyAUTIZg==",
+ "dev": true,
+ "requires": {
+ "@zeit/schemas": "2.1.1",
+ "ajv": "6.5.2",
+ "arg": "2.0.0",
+ "boxen": "1.3.0",
+ "chalk": "2.4.1",
+ "clipboardy": "1.2.3",
+ "serve-handler": "4.0.0",
+ "update-check": "1.5.2"
+ }
+ },
+ "serve-handler": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-4.0.0.tgz",
+ "integrity": "sha512-zCRfTTfE7Fit2k4JQC/EoKhDyPqMv3FTIQZ/Pvg0ec4d22LdWeqArPCpQmrnnSXlHMbcgFJ/3r7bCuhvrkwFbg==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "content-disposition": "0.5.2",
+ "fast-url-parser": "1.1.3",
+ "glob-slasher": "1.0.1",
+ "mime-types": "2.1.18",
+ "minimatch": "3.0.4",
+ "path-is-inside": "1.0.2",
+ "path-to-regexp": "2.2.1",
+ "range-parser": "1.2.0"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "http://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
"dev": true
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "resolved": "http://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.33.0"
+ }
}
}
},
@@ -2028,7 +1528,6 @@
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
"integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
- "dev": true,
"requires": {
"accepts": "~1.3.4",
"batch": "0.6.1",
@@ -2043,7 +1542,6 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
"requires": {
"ms": "2.0.0"
}
@@ -2051,33 +1549,30 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
"set-immediate-shim": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
- "dev": true
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
},
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
},
"setprototypeof": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
},
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
"requires": {
"shebang-regex": "^1.0.0"
}
@@ -2085,14 +1580,12 @@
"shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
},
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
- "dev": true
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
"slice-stream": {
"version": "1.0.0",
@@ -2133,7 +1626,6 @@
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
"integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
- "dev": true,
"requires": {
"through": "2"
}
@@ -2141,8 +1633,7 @@
"statuses": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
- "dev": true
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
},
"stream-combiner": {
"version": "0.0.4",
@@ -2152,25 +1643,16 @@
"duplexer": "~0.1.1"
}
},
- "stream-shift": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
- "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
- },
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "duplexer": "~0.1.1"
- }
+ "dev": true
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
@@ -2178,13 +1660,17 @@
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
},
"strip-indent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g="
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true
},
"supports-color": {
@@ -2216,48 +1702,16 @@
}
}
},
- "tar-stream": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz",
- "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==",
- "requires": {
- "bl": "^1.0.0",
- "buffer-alloc": "^1.1.0",
- "end-of-stream": "^1.0.0",
- "fs-constants": "^1.0.0",
- "readable-stream": "^2.3.0",
- "to-buffer": "^1.1.0",
- "xtend": "^4.0.0"
- }
- },
"term-size": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
"integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
+ "dev": true
},
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- },
- "to-buffer": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
- "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"toxic": {
"version": "1.0.1",
@@ -2271,7 +1725,8 @@
"traverse": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
- "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk="
+ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
+ "dev": true
},
"universalify": {
"version": "0.1.2",
@@ -2281,14 +1736,12 @@
"unix-crypt-td-js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.0.0.tgz",
- "integrity": "sha1-HAgkFQSBvHoB1J6Y8exmjYJBLzs=",
- "dev": true
+ "integrity": "sha1-HAgkFQSBvHoB1J6Y8exmjYJBLzs="
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "dev": true
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"unzip": {
"version": "0.1.11",
@@ -2330,34 +1783,6 @@
}
}
},
- "unzipper": {
- "version": "github:ZJONSSON/node-unzipper#ac36814b711c807057d1484300f2f2ec52d058b7",
- "from": "github:ZJONSSON/node-unzipper#bad-zip-working",
- "requires": {
- "big-integer": "^1.6.17",
- "binary": "~0.3.0",
- "bluebird": "~3.4.1",
- "buffer-indexof-polyfill": "~1.0.0",
- "duplexer2": "~0.1.4",
- "fstream": "~1.0.10",
- "listenercount": "~1.0.1",
- "readable-stream": "~2.3.6",
- "setimmediate": "~1.0.4"
- },
- "dependencies": {
- "fstream": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- }
- }
- }
- },
"update-check": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.2.tgz",
@@ -2380,32 +1805,27 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"utils-merge": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
- "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=",
- "dev": true
+ "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
},
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "dev": true
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
- "dev": true
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"websocket-driver": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
"integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
- "dev": true,
"requires": {
"http-parser-js": ">=0.4.0",
"websocket-extensions": ">=0.1.1"
@@ -2414,33 +1834,35 @@
"websocket-extensions": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
- "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
- "dev": true
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg=="
},
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
+ "widest-line": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
+ "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1"
+ }
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
}
}
}
diff --git a/package.json b/package.json
index 09cd933..cd40be8 100644
--- a/package.json
+++ b/package.json
@@ -29,14 +29,11 @@
"dependencies": {
"dotenv": "^6.0.0",
"fs-extra": "^7.0.0",
- "gunzip-maybe": "^1.4.1",
"husky": "^0.14.3",
"live-server": "^1.2.0",
"node-fetch": "^2.1.2",
"prettier": "^1.13.7",
"pretty-quick": "^1.6.0",
- "tar": "^4.4.4",
- "tar-stream": "^1.6.1",
- "unzipper": "github:ZJONSSON/node-unzipper#bad-zip-working"
+ "tar": "^4.4.4"
}
}
diff --git a/time-travel/build.js b/time-travel/build.js
index 4f6e2d3..415c9f4 100644
--- a/time-travel/build.js
+++ b/time-travel/build.js
@@ -1,162 +1,173 @@
-require("dotenv").config();
-
-const fs = require("fs-extra");
-const path = require("path");
-const fetch = require("node-fetch");
-// const unzip = require("unzipper");
-// const extract = require('tar-stream').extract();
-const tar = require("tar");
-// const gunzip = require('gunzip-maybe');
-
-const accessToken = process.env.ACCESS_TOKEN;
-const query = `
-{
- repository(owner:"Microsoft", name:"join-dev-design"){
- pullRequests(first: 100, states: MERGED) {
- edges {
- node {
- id
- title
- url
- mergedAt
- author {
- login
- avatarUrl
- }
- editor {
- login
- avatarUrl
- }
- mergeCommit {
- committedDate
- id
- tarballUrl
- }
- id
- }
- }
- }
- }
-}`;
-
-const historyFolderPath = path.resolve(
- __dirname,
- `../docs/time-travel/history`
-);
-
-/**
- * - Flush `.docs/time-travel/history` folder.
- */
-const flushFolders = async data => {
- try {
- await fs.remove(historyFolderPath);
- await fs.ensureDir(historyFolderPath);
- console.log("`docs/time-travel/history` is flushed.");
- return data;
- } catch (err) {
- console.error(err);
- }
-};
-
-/**
- * getData from github
- * @return {Promise} A Promise that resolves to response
- */
-const getDataFromGithub = () =>
- fetch("https://api.github.com/graphql", {
- method: "POST",
- body: JSON.stringify({ query }),
- headers: {
- "Content-Type": "application/json",
- Authorization: `Bearer ${accessToken}`
- }
- })
- .then(res => res.json())
- .catch(console.error);
-
-/**
- * Write github response to a json so the front end can use it later.
- * @param {Object} data
- * @return {Object} same data object
- */
-const writeJSONToDocs = data => {
- return fs
- .writeFile(
- path.resolve(__dirname, `../docs/time-travel/index.json`),
- JSON.stringify(data)
- )
- .then(() => data)
- .catch(console.error);
-};
-
-/**
- * Parse tar, keep 'docs/', remove 'docs/time-travel' and everything else
- * @param {String} options.url tarball url
- * @param {String} oprions.id id of merged pull request
- */
-const parseTarball = async options => {
- const { url, id } = options;
- const tarball = await fetch(url);
- const tarballStream = tarball.body;
- const unzipPath = path.join(historyFolderPath, id);
- const parse = new tar.Parse();
-
- tarballStream
- .on("error", console.error)
- .pipe(parse)
- .on("entry", async function(entry) {
- const type = entry.type;
- const tpath = entry.path;
- const [root, subDir1, subDir2, ...rest] = tpath.split(path.sep);
- console.log(type, tpath);
-
- if (subDir1 === "docs" && subDir2 !== "time-travel" && type === "File") {
- const docsPath = path.join(unzipPath, subDir1, subDir2, rest.join(""));
-
- try {
- await fs.ensureFile(docsPath);
- } catch (err) {
- console.error(err);
- }
-
- entry.pipe(fs.createWriteStream(docsPath));
- } else {
- entry.resume();
- }
-
- // entry.on('end', () => { console.log(`${tpath} is written`) });
- entry.on("error", console.error);
- })
- .on("error", console.error);
-
- return new Promise(function(resolve, reject) {
- tarballStream.on("finish", () => {
- resolve(unzipPath);
- });
- tarballStream.on("error", reject);
- });
-};
-
-getDataFromGithub()
- .then(flushFolders)
- .then(writeJSONToDocs)
- .then(res => {
- const tarPromises = res.data.repository.pullRequests.edges.map(edge => {
- const url = edge.node.mergeCommit.tarballUrl;
- const id = edge.node.id;
-
- return parseTarball({
- id,
- url
- });
- });
-
- return Promise.all(tarPromises);
- })
- .then(paths => {
- console.log(
- `build complete. ${
- paths.length
- } folders has been written to ${historyFolderPath}.`
- );
- });
+require("dotenv").config();
+
+const fs = require("fs-extra");
+const path = require("path");
+const fetch = require("node-fetch");
+const tar = require("tar");
+
+const accessToken = process.env.ACCESS_TOKEN;
+const query = `
+{
+ repository(owner:"Microsoft", name:"join-dev-design"){
+ pullRequests(first: 100, states: MERGED) {
+ edges {
+ node {
+ id
+ title
+ url
+ mergedAt
+ author {
+ login
+ avatarUrl
+ }
+ editor {
+ login
+ avatarUrl
+ }
+ mergeCommit {
+ committedDate
+ id
+ tarballUrl
+ }
+ id
+ }
+ }
+ }
+ }
+}`;
+
+const historyFolderPath = path.resolve(
+ __dirname,
+ "../docs/time-travel/history"
+);
+
+/**
+ * - Flush `.docs/time-travel/history` folder.
+ */
+const flushFolders = async data => {
+ try {
+ if (process.env.FULL_REBUILD) {
+ await fs.remove(historyFolderPath);
+ await fs.ensureDir(historyFolderPath);
+ console.log("`docs/time-travel/history` is flushed.");
+ } else {
+ console.log(
+ "Skipping flush. Set env FULL_REBUILD=true to fully rebuild history"
+ );
+ }
+
+ return data;
+ } catch (err) {
+ console.error(err);
+ }
+};
+
+/**
+ * getData from github
+ * @return {Promise} A Promise that resolves to response
+ */
+const getDataFromGithub = () =>
+ fetch("https://api.github.com/graphql", {
+ method: "POST",
+ body: JSON.stringify({ query }),
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${accessToken}`
+ }
+ })
+ .then(res => res.json())
+ .catch(console.error);
+
+/**
+ * Write github response to a json so the front end can use it later.
+ * @param {Object} data
+ * @return {Object} same data object
+ */
+const writeJSONToDocs = data => {
+ return fs
+ .writeFile(
+ path.resolve(__dirname, `../docs/time-travel/index.json`),
+ JSON.stringify(data, null, 2)
+ )
+ .then(() => data)
+ .catch(console.error);
+};
+
+/**
+ * Parse tar, keep 'docs/', remove 'docs/time-travel' and everything else
+ * @param {String} options.url tarball url
+ * @param {String} options.id id of merged pull request
+ */
+const parseTarball = async options => {
+ const { url, id } = options;
+ const tarball = await fetch(url);
+ const tarballStream = tarball.body;
+ const unzipPath = path.join(historyFolderPath, id);
+ const parse = new tar.Parse();
+
+ tarballStream
+ .on("error", console.error)
+ .pipe(parse)
+ .on("entry", async function(entry) {
+ const type = entry.type;
+ const tpath = entry.path;
+ const [root, subDir1, subDir2, ...rest] = tpath.split(path.sep);
+ console.log(type, tpath);
+
+ if (subDir1 === "docs" && subDir2 !== "time-travel" && type === "File") {
+ const docsPath = path.join(unzipPath, subDir1, subDir2, rest.join(""));
+
+ try {
+ await fs.ensureFile(docsPath);
+ } catch (err) {
+ console.error(err);
+ }
+
+ entry.pipe(fs.createWriteStream(docsPath));
+ } else {
+ entry.resume();
+ }
+
+ // entry.on('end', () => { console.log(`${tpath} is written`) });
+ entry.on("error", console.error);
+ })
+ .on("error", console.error);
+
+ return new Promise(function(resolve, reject) {
+ tarballStream.on("finish", () => {
+ resolve(unzipPath);
+ });
+ tarballStream.on("error", reject);
+ });
+};
+
+getDataFromGithub()
+ .then(flushFolders)
+ .then(writeJSONToDocs)
+ .then(async res => {
+ const existingHistory = await fs.readdir(historyFolderPath);
+ const pullRequestsToProcess = res.data.repository.pullRequests.edges.filter(
+ edge => {
+ return !existingHistory.includes(edge.node.id);
+ }
+ );
+
+ const tarPromises = pullRequestsToProcess.map(edge => {
+ const url = edge.node.mergeCommit.tarballUrl;
+ const id = edge.node.id;
+
+ return parseTarball({
+ id,
+ url
+ });
+ });
+
+ return Promise.all(tarPromises);
+ })
+ .then(paths => {
+ console.log(
+ `build complete. ${
+ paths.length
+ } folders have been written to ${historyFolderPath}.`
+ );
+ });