diff --git a/.github/ISSUE_TEMPLATE/content.md b/.github/ISSUE_TEMPLATE/content.md new file mode 100644 index 00000000..9168a8e1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/content.md @@ -0,0 +1,18 @@ +--- +name: "\U0001F680 Content Suggestion" +about: "I have a content suggestion for the website" +title: "" +labels: content +assignees: "" +--- + + diff --git a/frontend/.gitignore b/frontend/.gitignore index ac6dc444..2c04f216 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -55,10 +55,6 @@ typings/ # dotenv environment variable files .env* -# gatsby files -.cache/ -public - # Mac files .DS_Store diff --git a/frontend/components/CreateContent.tsx b/frontend/components/CreateContent.tsx new file mode 100644 index 00000000..0950aeec --- /dev/null +++ b/frontend/components/CreateContent.tsx @@ -0,0 +1,29 @@ +import React, { ReactElement } from "react" + +function CreateContent(): ReactElement { + return ( + <> +
+
+

+ Created or seen other CDK related content? +
+ Share it with the community +

+
+
+ + Create Pull Request + +
+
+
+
+ + ) +} + +export default CreateContent diff --git a/frontend/components/Footer.tsx b/frontend/components/Footer.tsx index 48df2bf2..256d4bb8 100644 --- a/frontend/components/Footer.tsx +++ b/frontend/components/Footer.tsx @@ -3,51 +3,98 @@ import Link from "next/link" function Footer(): ReactElement { return ( - + ) } diff --git a/frontend/components/Hero.tsx b/frontend/components/Hero.tsx new file mode 100644 index 00000000..ab188418 --- /dev/null +++ b/frontend/components/Hero.tsx @@ -0,0 +1,277 @@ +import React, { ReactElement } from "react" +import Link from "next/link" +import { useState } from "react" +import { Transition } from "@tailwindui/react" + +export interface NavProps { + title?: string +} + +function HeroPattern(): ReactElement { + return ( +
+
+ + + + + + + + + + + + + + + + +
+
+ ) +} + +function Nav({ title }: NavProps): ReactElement { + const pageTitle = title || "" + const [isOpen, setIsOpen] = useState(false) + + return ( + <> +
+ +
+
+ +
+ + + {(ref) => ( +
+
+
+
+
+ cdk.dev +
+
+ +
+
+ +
+
+
+ )} +
+
+
+

+ Welcome to cdk + .dev +

+

+ The community driven hub around the Cloud Development Kit (CDK) + ecosystem. This site brings together all the latest blogs, + videos, and educational content. Connect with the community of + AWS CDK, CDK for Kubernetes (cdk8s) and CDK for Terraform + (cdktf). +

+ + +
+
+
+
+ + ) +} + +export default Nav diff --git a/frontend/components/Layout.tsx b/frontend/components/Layout.tsx index e0c851f0..7b798931 100644 --- a/frontend/components/Layout.tsx +++ b/frontend/components/Layout.tsx @@ -1,11 +1,38 @@ import React, { ReactElement } from "react" -import Footer from './Footer' +import Footer from "./Footer" +import Head from "next/head" export default ({ children }): ReactElement => ( <> -
- { children } + + cdk.dev + + + + + + + + + + +
+ {children}
-) \ No newline at end of file +) diff --git a/frontend/components/Logos.tsx b/frontend/components/Logos.tsx new file mode 100644 index 00000000..60196096 --- /dev/null +++ b/frontend/components/Logos.tsx @@ -0,0 +1,46 @@ +import React, { ReactElement } from "react" +import Link from "next/link" + +function Logos(): ReactElement { + return ( + <> +
+
+
+
+
+
+
+
+ + + +
+
+ + + +
+ +
+ + + +
+
+
+
+
+
+
+ + ) +} + +export default Logos diff --git a/frontend/components/Nav.tsx b/frontend/components/Nav.tsx index 3ba2bbdb..8abd6a5a 100644 --- a/frontend/components/Nav.tsx +++ b/frontend/components/Nav.tsx @@ -1,5 +1,7 @@ import React, { ReactElement } from "react" -import Link from "next/link" +import NavLink from "./NavLink" +import { useState } from "react" +import { Transition } from "@tailwindui/react" export interface NavProps { title?: string @@ -7,41 +9,186 @@ export interface NavProps { function Nav({ title }: NavProps): ReactElement { const pageTitle = title || "" + const [isOpen, setIsOpen] = useState(false) return ( -
-
-
- cdk.dev + <> + - {pageTitle && ( - <> -
/
-
{pageTitle}
- + + {(ref) => ( +
+
+
+
+
+ cdk.dev +
+
+ +
+
+ +
+
+
)} -
- - -
+ + ) } diff --git a/frontend/components/NavLink.tsx b/frontend/components/NavLink.tsx new file mode 100644 index 00000000..6bfdeede --- /dev/null +++ b/frontend/components/NavLink.tsx @@ -0,0 +1,26 @@ +import { useRouter } from "next/router" +import Link from "next/link" + +type Props = { + href: string + linkName: string +} + +const NavLink = ({ href, linkName }: Props) => { + const activeClassName = "border-indigo-500", + inactiveClassName = "border-transparent" + + const router = useRouter() + + const linkClasses = `inline-flex items-center px-1 pt-1 border-b-2 ${ + router.pathname === href ? activeClassName : inactiveClassName + } text-sm font-medium leading-5 text-gray-900 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out` + + return ( + + {linkName} + + ) +} + +export default NavLink diff --git a/frontend/components/Post.tsx b/frontend/components/Post.tsx new file mode 100644 index 00000000..c6b15c54 --- /dev/null +++ b/frontend/components/Post.tsx @@ -0,0 +1,69 @@ +import { ReactElement } from "react" +import dayjs from "dayjs" +import utc from "dayjs/plugin/utc" +import timezone from "dayjs/plugin/timezone" +import relativeTime from "dayjs/plugin/relativeTime" + +dayjs.extend(relativeTime) // For fromNow() +dayjs.extend(utc) // From Timezone +dayjs.extend(timezone) + +function Post({ post }): ReactElement { + return ( +
+
+ foo +
+
+
+ +

+ {post.title} +

+

+ {post.excerpt} +

+
+
+
+ {post.categories.map((category) => ( + + {category} + + ))} +
+
+
+ + + +
+
+

+ + {post.author.name} + +

+
+ added  + + · + {post.hostname} +
+
+
+
+
+ ) +} + +export default Post diff --git a/frontend/components/logos/aws.svg b/frontend/components/logos/aws.svg new file mode 100644 index 00000000..f6c9b36e --- /dev/null +++ b/frontend/components/logos/aws.svg @@ -0,0 +1,120 @@ + +image/svg+xml \ No newline at end of file diff --git a/frontend/components/logos/kubernetes.svg b/frontend/components/logos/kubernetes.svg new file mode 100644 index 00000000..3940b20f --- /dev/null +++ b/frontend/components/logos/kubernetes.svg @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/frontend/components/logos/terraform.svg b/frontend/components/logos/terraform.svg new file mode 100644 index 00000000..61fc804d --- /dev/null +++ b/frontend/components/logos/terraform.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/content/posts/async-serverless-apis-with-appsync/appsync.jpg b/frontend/content/posts/async-serverless-apis-with-appsync/appsync.jpg new file mode 100644 index 00000000..b8093465 Binary files /dev/null and b/frontend/content/posts/async-serverless-apis-with-appsync/appsync.jpg differ diff --git a/frontend/content/posts/async-serverless-apis-with-appsync/index.yml b/frontend/content/posts/async-serverless-apis-with-appsync/index.yml new file mode 100644 index 00000000..eda67088 --- /dev/null +++ b/frontend/content/posts/async-serverless-apis-with-appsync/index.yml @@ -0,0 +1,11 @@ +title: Building Scalable GraphQL APIs on AWS with CDK, TypeScript, AWS AppSync, Amazon DynamoDB, and AWS Lambda +excerpt: "In this post, we’ll be building an AWS AppSync API from scratch using CDK. The post will focus on how to use CDK to deploy AppSync APIs that leverage a variety of AWS services including Amazon DynamoDB and AWS Lambda." +banner: appsync.jpg +authorIds: + - nader-dabit +url: https://aws.amazon.com/blogs/mobile/building-scalable-graphql-apis-on-aws-with-cdk-and-aws-appsync +createdAt: "2020-09-27 14:00" +categories: + - API (GraphQL) + - AWS-CDK + - Typescript diff --git a/frontend/content/posts/aws-community-nordics-2020/index.yml b/frontend/content/posts/aws-community-nordics-2020/index.yml new file mode 100644 index 00000000..c3d3b468 --- /dev/null +++ b/frontend/content/posts/aws-community-nordics-2020/index.yml @@ -0,0 +1,10 @@ +title: "AWS Community Nordics 2020 Virtual Event: CDK Special" +excerpt: "I got the chance to speak about my current favourite subject (CDK) in detail! The event was a 2 hour intense deep dive (with demos) into what CDK is all about, why & how we use it at Alma Media, important concepts and finally some considerations for complex projects" +banner: share.png +authorIds: + - ari-palo +url: https://aripalo.com/speaking/2020/aws-community-nordics-cdk-special +createdAt: "2020-09-27 18:00" +categories: + - AWS-CDK + - Video diff --git a/frontend/content/posts/aws-community-nordics-2020/share.png b/frontend/content/posts/aws-community-nordics-2020/share.png new file mode 100644 index 00000000..3188a443 Binary files /dev/null and b/frontend/content/posts/aws-community-nordics-2020/share.png differ diff --git a/frontend/content/posts/cdk-pipelines-continuous-delivery/index.yml b/frontend/content/posts/cdk-pipelines-continuous-delivery/index.yml new file mode 100644 index 00000000..df2b37ca --- /dev/null +++ b/frontend/content/posts/cdk-pipelines-continuous-delivery/index.yml @@ -0,0 +1,9 @@ +title: "CDK Pipelines: Continuous delivery for AWS CDK applications" +excerpt: "Blogpost with step-by-step tutorial to create a pipeline in the AWS CDK" +authorIds: + - rico-huijbers +url: https://aws.amazon.com/blogs/developer/cdk-pipelines-continuous-delivery-for-aws-cdk-applications +createdAt: "2020-09-18 19:00" +categories: + - AWS-CDK + - Pipelines diff --git a/frontend/content/posts/contribute-to-the-aws-cdk/index.yml b/frontend/content/posts/contribute-to-the-aws-cdk/index.yml new file mode 100644 index 00000000..beffb018 --- /dev/null +++ b/frontend/content/posts/contribute-to-the-aws-cdk/index.yml @@ -0,0 +1,9 @@ +title: "Contribute to the AWS CDK" +excerpt: "Ever wondering how to create a pull request for AWS CDK? In this video, we'll walk you through all the primary steps to submit your first AWS CDK pull request" +authorIds: + - pahud-hsieh +url: https://youtu.be/OXQSSibrt-A +createdAt: "2020-09-18 19:00" +categories: + - AWS-CDK + - Video diff --git a/frontend/content/posts/enhanced-cicd-aws-cdk/index.yml b/frontend/content/posts/enhanced-cicd-aws-cdk/index.yml new file mode 100644 index 00000000..89d78f91 --- /dev/null +++ b/frontend/content/posts/enhanced-cicd-aws-cdk/index.yml @@ -0,0 +1,11 @@ +title: "Enhanced CI/CD with AWS CDK" +excerpt: "AWS Online Tech Talk about CI/CD pipelines in AWS CDK with live demo and example code repo" +authorIds: + - christian-weber +url: https://youtu.be/1ps0Wh19MHQ +createdAt: "2020-09-18 19:00" +categories: + - AWS-CDK + - Video + - Python + - CI/CD diff --git a/frontend/content/posts/generating-thumbnails-via-s3-events-using-aws-cdk/banner.png b/frontend/content/posts/generating-thumbnails-via-s3-events-using-aws-cdk/banner.png new file mode 100644 index 00000000..3db6aa73 Binary files /dev/null and b/frontend/content/posts/generating-thumbnails-via-s3-events-using-aws-cdk/banner.png differ diff --git a/frontend/content/posts/generating-thumbnails-via-s3-events-using-aws-cdk/index.yml b/frontend/content/posts/generating-thumbnails-via-s3-events-using-aws-cdk/index.yml new file mode 100644 index 00000000..9159f93f --- /dev/null +++ b/frontend/content/posts/generating-thumbnails-via-s3-events-using-aws-cdk/index.yml @@ -0,0 +1,11 @@ +title: "Generating thumbnails via S3 events using aws-cdk" +excerpt: "Let's see something today that we have all done manually in the past, creating thumbnails for images for profile pic uploads in S3." +banner: banner.png +authorIds: + - ryan-dsouza +url: https://dev.to/ryands17/generating-thumbnails-via-s3-events-using-aws-cdk-typescript-l1i +createdAt: "2020-09-27 19:00" +categories: + - AWS-CDK + - Typescript + - Example diff --git a/frontend/content/posts/how-to-create-cdk-constructs/index.yml b/frontend/content/posts/how-to-create-cdk-constructs/index.yml new file mode 100644 index 00000000..f9198521 --- /dev/null +++ b/frontend/content/posts/how-to-create-cdk-constructs/index.yml @@ -0,0 +1,9 @@ +title: "How to Create CDK Constructs" +excerpt: "Learn to create a JSII module, build and publish it. Create a secure S3 bucket and publish it to multiple languages" +authorIds: + - matthew-bonig +url: https://www.matthewbonig.com/2020/01/11/creating-constructs/ +createdAt: "2020-09-18 19:00" +categories: + - AWS-CDK + - jsii diff --git a/frontend/content/posts/lets-checkout-cdk-pipelines/index.yml b/frontend/content/posts/lets-checkout-cdk-pipelines/index.yml new file mode 100644 index 00000000..ab0cae6a --- /dev/null +++ b/frontend/content/posts/lets-checkout-cdk-pipelines/index.yml @@ -0,0 +1,10 @@ +title: "Let's Check out CDK Pipelines" +excerpt: "Live coding a CDK CI/CD pipeline" +authorIds: + - darko-mesaros +url: https://www.twitch.tv/videos/737014680 +createdAt: "2020-09-18 19:00" +categories: + - AWS-CDK + - CDK Pipelines + - Video diff --git a/frontend/content/posts/supercharging-ecs-apps/index.yml b/frontend/content/posts/supercharging-ecs-apps/index.yml new file mode 100644 index 00000000..da81de3b --- /dev/null +++ b/frontend/content/posts/supercharging-ecs-apps/index.yml @@ -0,0 +1,11 @@ +title: "Supercharging Your ECS Applications with the AWS CDK" +excerpt: "AWS Online Tech Talk: Learn how to deploy your containerized applications to ECS using the AWS CDK" +authorIds: + - adam-keller +url: https://youtu.be/NkI5yeMFRK8 +createdAt: "2020-09-18 19:00" +categories: + - AWS-CDK + - Video + - Python + - ECS diff --git a/frontend/content/resources/awesome-cdk/index.yml b/frontend/content/resources/awesome-cdk/index.yml new file mode 100644 index 00000000..5a306d0d --- /dev/null +++ b/frontend/content/resources/awesome-cdk/index.yml @@ -0,0 +1,8 @@ +title: Awesome CDK +teaser: Awesome collection of useful links for the AWS-CDK +url: "https://github.com/kolomied/awesome-cdk" +createdAt: "2020-09-17 19:00" +categories: + - Awesome + - Examples + - AWS CDK diff --git a/frontend/content/resources/aws-cdk-examples/index.yml b/frontend/content/resources/aws-cdk-examples/index.yml new file mode 100644 index 00000000..ce6cc0e3 --- /dev/null +++ b/frontend/content/resources/aws-cdk-examples/index.yml @@ -0,0 +1,7 @@ +title: AWS CDK Examples +teaser: Collection of code templates and example projects for the AWS CDK +url: "https://github.com/aws-samples/aws-cdk-examples" +createdAt: "2020-09-17 20:00" +categories: + - Examples + - AWS CDK diff --git a/frontend/content/resources/aws-cdk-patterns/index.yml b/frontend/content/resources/aws-cdk-patterns/index.yml new file mode 100644 index 00000000..d8bf7a20 --- /dev/null +++ b/frontend/content/resources/aws-cdk-patterns/index.yml @@ -0,0 +1,8 @@ +title: CDK Patterns +teaser: Collection of AWS CDK Patterns focused on serverless solutions and created with the Well Architected Framework in mind +url: "https://cdkpatterns.com" +createdAt: "2020-09-17 21:00" +categories: + - Examples + - AWS CDK + - Patterns diff --git a/frontend/content/resources/aws-cdk-workshop/index.yml b/frontend/content/resources/aws-cdk-workshop/index.yml new file mode 100644 index 00000000..94c91d6f --- /dev/null +++ b/frontend/content/resources/aws-cdk-workshop/index.yml @@ -0,0 +1,11 @@ +title: AWS CDK Workshop +teaser: Beginner AWS CDK workshop that build a serverless solution step-by-step. Supports all languages +url: "https://cdkworkshop.com" +createdAt: "2020-09-17 18:00" +categories: + - AWS CDK + - Workshop + - Typescript + - Python + - Java + - C# diff --git a/frontend/content/resources/bump-cdk-github-action/index.yml b/frontend/content/resources/bump-cdk-github-action/index.yml new file mode 100644 index 00000000..f0da9ce5 --- /dev/null +++ b/frontend/content/resources/bump-cdk-github-action/index.yml @@ -0,0 +1,9 @@ +title: Bump CDK (Github Action) +teaser: GitHub Action for automating cdk version management +url: https://github.com/cdk-dev/bump-cdk-action" +createdAt: "2020-09-17 20:05" +categories: + - Tools + - Typescript + - AWS CDK + - Github Action diff --git a/frontend/content/resources/bump-cdk/index.yml b/frontend/content/resources/bump-cdk/index.yml new file mode 100644 index 00000000..42d14c03 --- /dev/null +++ b/frontend/content/resources/bump-cdk/index.yml @@ -0,0 +1,8 @@ +title: Bump CDK +teaser: Easily manage AWS CDK Dependencies +url: https://github.com/cdk-dev/bump-cdk" +createdAt: "2020-09-17 20:06" +categories: + - Tools + - Typescript + - AWS CDK diff --git a/frontend/content/resources/create-cdk-app/index.yml b/frontend/content/resources/create-cdk-app/index.yml new file mode 100644 index 00000000..c6df0601 --- /dev/null +++ b/frontend/content/resources/create-cdk-app/index.yml @@ -0,0 +1,8 @@ +title: Create CDK App +teaser: Create CDK apps from templates +url: https://github.com/cdk-dev/create-cdk-app" +createdAt: "2020-09-17 20:04" +categories: + - Tools + - Typescript + - AWS CDK diff --git a/frontend/content/resources/jsii-publish/index.yml b/frontend/content/resources/jsii-publish/index.yml new file mode 100644 index 00000000..a6c3ea9e --- /dev/null +++ b/frontend/content/resources/jsii-publish/index.yml @@ -0,0 +1,11 @@ +title: jsii Publish +teaser: Dockerfile and GitHub action for publishing JSII packages. Package building and publishing to npm, PyPI, NuGet and Maven (GitHub) +url: "https://github.com/udondan/jsii-publish" +createdAt: "2020-09-17 20:02" +categories: + - jsii + - Tools + - Typescript + - Python + - Java + - C# diff --git a/frontend/content/resources/projen/index.yml b/frontend/content/resources/projen/index.yml new file mode 100644 index 00000000..f2fb8432 --- /dev/null +++ b/frontend/content/resources/projen/index.yml @@ -0,0 +1,8 @@ +title: projen +teaser: Define and maintain complex project configuration through code +url: "https://github.com/eladb/projen" +createdAt: "2020-09-17 20:03" +categories: + - jsii + - Tools + - Typescript diff --git a/frontend/content/resources/rocket-cdk/index.yml b/frontend/content/resources/rocket-cdk/index.yml new file mode 100644 index 00000000..4af0322a --- /dev/null +++ b/frontend/content/resources/rocket-cdk/index.yml @@ -0,0 +1,9 @@ +title: RocketCDK +teaser: Update versions of your packages and CDK version in one command. Works with TS and Python +url: "https://www.npmjs.com/package/rocketcdk" +createdAt: "2020-09-17 20:01" +categories: + - AWS CDK + - Tools + - Typescript + - Python diff --git a/frontend/content/users/adam-keller/avatar.png b/frontend/content/users/adam-keller/avatar.png new file mode 100644 index 00000000..7bee52ad Binary files /dev/null and b/frontend/content/users/adam-keller/avatar.png differ diff --git a/frontend/content/users/adam-keller/index.yml b/frontend/content/users/adam-keller/index.yml new file mode 100644 index 00000000..84acda22 --- /dev/null +++ b/frontend/content/users/adam-keller/index.yml @@ -0,0 +1,4 @@ +name: Adam Keller +avatar: avatar.png +twitter: realadamjkeller +createdAt: "2020-09-17 18:00" diff --git a/frontend/content/users/ari-palo/avatar.jpg b/frontend/content/users/ari-palo/avatar.jpg new file mode 100644 index 00000000..cdbb1b32 Binary files /dev/null and b/frontend/content/users/ari-palo/avatar.jpg differ diff --git a/frontend/content/users/ari-palo/index.yml b/frontend/content/users/ari-palo/index.yml new file mode 100644 index 00000000..6cb5f449 --- /dev/null +++ b/frontend/content/users/ari-palo/index.yml @@ -0,0 +1,4 @@ +name: Ari Palo +avatar: avatar.jpg +twitter: aripalo +createdAt: "2020-09-27 18:00" diff --git a/frontend/content/users/christian-weber/avatar.jpg b/frontend/content/users/christian-weber/avatar.jpg new file mode 100644 index 00000000..68dd4eb6 Binary files /dev/null and b/frontend/content/users/christian-weber/avatar.jpg differ diff --git a/frontend/content/users/christian-weber/index.yml b/frontend/content/users/christian-weber/index.yml new file mode 100644 index 00000000..19b1a271 --- /dev/null +++ b/frontend/content/users/christian-weber/index.yml @@ -0,0 +1,4 @@ +name: Christian Weber +avatar: avatar.jpg +twitter: classicwebdog +createdAt: "2020-09-17 18:00" diff --git a/frontend/content/users/darko-mesaros/avatar.jpg b/frontend/content/users/darko-mesaros/avatar.jpg new file mode 100644 index 00000000..a368fefb Binary files /dev/null and b/frontend/content/users/darko-mesaros/avatar.jpg differ diff --git a/frontend/content/users/darko-mesaros/index.yml b/frontend/content/users/darko-mesaros/index.yml new file mode 100644 index 00000000..87cec47c --- /dev/null +++ b/frontend/content/users/darko-mesaros/index.yml @@ -0,0 +1,4 @@ +name: Darko Mesaroš +avatar: avatar.jpg +twitter: darkosubotica +createdAt: "2020-09-17 18:00" diff --git a/frontend/content/users/matthew-bonig/avatar.jpg b/frontend/content/users/matthew-bonig/avatar.jpg new file mode 100644 index 00000000..b619632b Binary files /dev/null and b/frontend/content/users/matthew-bonig/avatar.jpg differ diff --git a/frontend/content/users/matthew-bonig/index.yml b/frontend/content/users/matthew-bonig/index.yml new file mode 100644 index 00000000..2c25ae66 --- /dev/null +++ b/frontend/content/users/matthew-bonig/index.yml @@ -0,0 +1,4 @@ +name: Matthew Bonig +avatar: avatar.jpg +twitter: mattbonig +createdAt: "2020-09-17 18:00" diff --git a/frontend/content/users/nader-dabit/avatar.jpg b/frontend/content/users/nader-dabit/avatar.jpg new file mode 100644 index 00000000..ed62bd70 Binary files /dev/null and b/frontend/content/users/nader-dabit/avatar.jpg differ diff --git a/frontend/content/users/nader-dabit/index.yml b/frontend/content/users/nader-dabit/index.yml new file mode 100644 index 00000000..8041f7b6 --- /dev/null +++ b/frontend/content/users/nader-dabit/index.yml @@ -0,0 +1,4 @@ +name: Nader Dabit +avatar: avatar.jpg +twitter: dabit3 +createdAt: "2020-09-27 14:00" diff --git a/frontend/content/users/pahud-hsieh/avatar.jpg b/frontend/content/users/pahud-hsieh/avatar.jpg new file mode 100644 index 00000000..b1e7fafc Binary files /dev/null and b/frontend/content/users/pahud-hsieh/avatar.jpg differ diff --git a/frontend/content/users/pahud-hsieh/index.yml b/frontend/content/users/pahud-hsieh/index.yml new file mode 100644 index 00000000..32f566df --- /dev/null +++ b/frontend/content/users/pahud-hsieh/index.yml @@ -0,0 +1,4 @@ +name: Pahud Hsieh +avatar: avatar.jpg +twitter: pahudnet +createdAt: "2020-09-17 18:00" diff --git a/frontend/content/users/rico-huijbers/avatar.jpeg b/frontend/content/users/rico-huijbers/avatar.jpeg new file mode 100644 index 00000000..e48abca8 Binary files /dev/null and b/frontend/content/users/rico-huijbers/avatar.jpeg differ diff --git a/frontend/content/users/rico-huijbers/index.yml b/frontend/content/users/rico-huijbers/index.yml new file mode 100644 index 00000000..e1ef74bd --- /dev/null +++ b/frontend/content/users/rico-huijbers/index.yml @@ -0,0 +1,4 @@ +name: Rico Huijbers +avatar: avatar.jpeg +twitter: rix0rrr +createdAt: "2020-09-17 18:00" diff --git a/frontend/content/users/ryan-dsouza/avatar.png b/frontend/content/users/ryan-dsouza/avatar.png new file mode 100644 index 00000000..544d7bce Binary files /dev/null and b/frontend/content/users/ryan-dsouza/avatar.png differ diff --git a/frontend/content/users/ryan-dsouza/index.yml b/frontend/content/users/ryan-dsouza/index.yml new file mode 100644 index 00000000..5da41fed --- /dev/null +++ b/frontend/content/users/ryan-dsouza/index.yml @@ -0,0 +1,4 @@ +name: Ryan Dsouza +avatar: avatar.png +twitter: ryands1701 +createdAt: "2020-09-27 19:00" diff --git a/frontend/graphql/data.ts b/frontend/graphql/data.ts new file mode 100644 index 00000000..b2251217 --- /dev/null +++ b/frontend/graphql/data.ts @@ -0,0 +1,72 @@ +import fg from "fast-glob" +import * as fs from "fs" +import * as path from "path" +import yaml from "js-yaml" +import GeoPattern from "geopattern" + +const postFiles = fg.sync(["content/posts/**/index.yml"], { absolute: true }) +const authorFiles = fg.sync(["content/users/**/index.yml"], { + absolute: true, +}) +const resourceFiles = fg.sync(["content/resources/**/index.yml"], { + absolute: true, +}) + +export const posts = postFiles.map((filePath) => { + const post = yaml.safeLoad(fs.readFileSync(filePath)) + const folder = path.parse(filePath) + + if (post.banner) { + // This can't be a fully dynamic require, since the optimize image plugin (webpack, to be specific) + // can't handle it for some reason. See https://github.com/cyrilwanner/next-optimized-images/issues/16#issuecomment-416066832 + post.image = require(`../content/posts/${path.basename(folder.dir)}/${ + post.banner + }`) + } else { + const pattern = GeoPattern.generate(post.title) + post.image = pattern.toDataUri() + } + + post.hostname = new URL(post.url).hostname + post.createdAt = new Date(post.createdAt).toISOString() + + return post +}) + +export const users = authorFiles.map((filePath) => { + const user = yaml.safeLoad(fs.readFileSync(filePath)) + const folder = path.parse(filePath) + + user.id = path.basename(folder.dir) + + // This can't be a fully dynamic require, since the optimize image plugin (webpack, to be specific) + // can't handle it for some reason. See https://github.com/cyrilwanner/next-optimized-images/issues/16#issuecomment-416066832 + user.avatar = require(`../content/users/${user.id}/${user.avatar}`) + + user.createdAt = new Date(user.createdAt).toISOString() + + return user +}) + +export const resources = resourceFiles.map((filePath) => { + const resource = yaml.safeLoad(fs.readFileSync(filePath)) + const folder = path.parse(filePath) + + resource.id = path.basename(folder.dir) + + if (resource.image) { + // This can't be a fully dynamic require, since the optimize image plugin (webpack, to be specific) + // can't handle it for some reason. See https://github.com/cyrilwanner/next-optimized-images/issues/16#issuecomment-416066832 + resource.image = require(`../content/resources/${path.basename( + folder.dir + )}/${resource.banner}`) + } else { + const pattern = GeoPattern.generate(resource.title) + resource.image = pattern.toDataUri() + } + + resource.hostname = new URL(resource.url).hostname + resource.createdAt = new Date(resource.createdAt).toISOString() + + return resource +}) diff --git a/frontend/graphql/index.ts b/frontend/graphql/index.ts new file mode 100644 index 00000000..af12b667 --- /dev/null +++ b/frontend/graphql/index.ts @@ -0,0 +1,8 @@ +import { graphql } from "graphql" + +import { schema } from "./schema" + +export default async function queryGraphql(query, variableValues = {}) { + const { data } = await graphql({ schema, source: query, variableValues }) + return data || {} +} diff --git a/frontend/graphql/schema.ts b/frontend/graphql/schema.ts new file mode 100644 index 00000000..3db4f2af --- /dev/null +++ b/frontend/graphql/schema.ts @@ -0,0 +1,73 @@ +import { gql, makeExecutableSchema } from "apollo-server-micro" +import { posts, users, resources } from "./data" + +const typeDefs = gql` + type Query { + posts: [Post!]! + recentPosts(limit: Int = 3): [Post!]! + resources: [Resource!]! + users: [User!]! + } + + type User { + id: ID! + name: String + avatar: String + } + + type Post { + title: String! + excerpt: String! + url: String! + hostname: String! + author: User! + image: String + categories: [String!] + createdAt: String! + } + + type Resource { + id: ID! + title: String! + teaser: String! + url: String! + hostname: String! + image: String + categories: [String!] + createdAt: String! + } +` + +const resolvers = { + Query: { + posts() { + return posts.sort((a, b) => { + return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime() + }) + }, + + recentPosts(_parent, args) { + const orderedPosts = posts.sort((a, b) => { + return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime() + }) + return orderedPosts.slice(0, args.limit) + }, + + resources() { + return resources + }, + + users() { + return users + }, + }, + + Post: { + author(parent) { + const authorId = parent.authorIds[0] + return users.find((user) => user.id === authorId) + }, + }, +} + +export const schema = makeExecutableSchema({ typeDefs, resolvers }) diff --git a/frontend/next-env.d.ts b/frontend/next-env.d.ts index 7b7aa2c7..2daabc07 100644 --- a/frontend/next-env.d.ts +++ b/frontend/next-env.d.ts @@ -1,2 +1,3 @@ /// /// +/// \ No newline at end of file diff --git a/frontend/next.config.js b/frontend/next.config.js new file mode 100644 index 00000000..942bbff5 --- /dev/null +++ b/frontend/next.config.js @@ -0,0 +1,2 @@ +const withOptimizedImages = require("next-optimized-images") +module.exports = withOptimizedImages() diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 00000000..2729af2a --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,1421 @@ +{ + "name": "cdk-dev-website", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "@types/node": { + "version": "14.6.2", + "dev": true + }, + "ajv": { + "version": "6.12.5", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", + "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "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==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "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=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" + } + }, + "file-type": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "imagemin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", + "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", + "requires": { + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" + } + }, + "img-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.2.tgz", + "integrity": "sha512-rSriLKgvi85Km7ppSF+AEAM3nU4fxpvCkaXtC/IoCEU7jfks55bEANFs0bB9YXYkxY9JurZQIZFtXh5Gue3upw==", + "requires": { + "loader-utils": "^1.1.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "next-optimized-images": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/next-optimized-images/-/next-optimized-images-2.6.2.tgz", + "integrity": "sha512-yH/f3eLmoQ/TxvWRiSuM6AuF3tR1s4nePdHPTm9gl4lAaGEKxTGaSuUL+ZxE5j/c/ITrnHVHibQzOz1Jl8euQw==", + "requires": { + "chalk": "^2.4.2", + "figures": "^3.0.0", + "file-loader": "^3.0.1", + "imagemin": "^6.1.0", + "img-loader": "^3.0.1", + "raw-loader": "^2.0.0", + "url-loader": "^1.1.2" + } + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "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=" + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "raw-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-2.0.0.tgz", + "integrity": "sha512-kZnO5MoIyrojfrPWqrhFNLZemIAX8edMOCp++yC5RKxzFB3m92DqKNhKlU6+FvpOhWtvyh3jOaD7J6/9tpdIKg==", + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url-loader": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", + "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "requires": { + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + } +} diff --git a/frontend/package.json b/frontend/package.json index 9b821316..0d35d445 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,16 +14,29 @@ "author": "", "license": "Apache-2.0", "dependencies": { + "@tailwindcss/ui": "^0.6.2", + "@tailwindui/react": "^0.1.1", + "apollo-server-micro": "^2.18.1", "cssnano": "^4.1.10", + "dayjs": "^1.8.36", + "fast-glob": "^3.2.4", + "geopattern": "^1.2.3", + "graphql": "^15.3.0", + "imagemin-mozjpeg": "^9.0.0", + "imagemin-optipng": "^8.0.0", + "imagemin-svgo": "^8.0.0", + "js-yaml": "^3.14.0", "next": "^9.5.2", + "next-optimized-images": "^2.6.2", "react": "^16.13.1", - "react-dom": "^16.13.1" + "react-dom": "^16.13.1", + "tailwindcss": "^1.8.10" }, "devDependencies": { "@types/node": "^14.6.2", "@types/react": "^16.9.48", + "next-images": "^1.5.0", "postcss-preset-env": "^6.7.0", - "tailwindcss": "^1.7.6", "typescript": "^4.0.2" } } diff --git a/frontend/pages/index.tsx b/frontend/pages/index.tsx index 060c7a8d..351d6b11 100644 --- a/frontend/pages/index.tsx +++ b/frontend/pages/index.tsx @@ -1,37 +1,58 @@ -import Nav from "../components/Nav" +import Hero from "../components/Hero" +import Logos from "../components/Logos" import Layout from "../components/Layout" +import queryGraphql from "../graphql" +import CreateContent from "../components/CreateContent" +import Post from "../components/Post" -export default () => ( +export default ({ posts }) => ( -
-
+
+
+
+
+
+
+

+ Recent Community Blog Posts +

+

+ What's been talked about in the CDK ecosytem +

+
+
+ {posts.map((post) => ( + + ))} +
+
+
+ +
) + +export async function getStaticProps() { + const { recentPosts } = await queryGraphql(` + query { + recentPosts(limit: 3) { + title + excerpt + url + image + categories + hostname + createdAt + author { + id + name + avatar + } + } + } + `) + return { props: { posts: recentPosts } } +} diff --git a/frontend/pages/posts.tsx b/frontend/pages/posts.tsx new file mode 100644 index 00000000..9df76602 --- /dev/null +++ b/frontend/pages/posts.tsx @@ -0,0 +1,67 @@ +import React, { ReactElement } from "react" + +import Nav from "../components/Nav" +import Layout from "../components/Layout" +import queryGraphql from "../graphql" +import Post from "../components/Post" +import CreateContent from "../components/CreateContent" + +function Posts({ posts }): ReactElement { + return ( + +