From 82bc9a1985d553218093154787caba385da90cd8 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Sat, 21 Nov 2020 11:09:46 -0500 Subject: [PATCH 1/7] Merge branch 'dev' --- amplify/backend/api/ccd/schema.graphql | 3 + amplify/backend/backend-config.json | 16 +- nextjs/layout/AppMenu.tsx | 145 + nextjs/layout/AppTopbar.tsx | 35 + nextjs/layout/_overrides.scss | 1 + nextjs/layout/_variables.scss | 47 + nextjs/layout/layout.scss | 3 + nextjs/layout/sass/_config.scss | 151 + nextjs/layout/sass/_content.scss | 4 + nextjs/layout/sass/_dashboard.scss | 186 + nextjs/layout/sass/_footer.scss | 13 + nextjs/layout/sass/_layout.scss | 14 + nextjs/layout/sass/_main.scss | 34 + nextjs/layout/sass/_menu.scss | 189 + nextjs/layout/sass/_mixins.scss | 43 + nextjs/layout/sass/_profile.scss | 125 + nextjs/layout/sass/_responsive.scss | 76 + nextjs/layout/sass/_sidebar.scss | 50 + nextjs/layout/sass/_splash.scss | 47 + nextjs/layout/sass/_topbar.scss | 127 + nextjs/layout/sass/_typography.scss | 68 + nextjs/layout/sass/_utils.scss | 11 + nextjs/package-lock.json | 1144 ++- nextjs/package.json | 15 +- nextjs/pages/_app.tsx | 171 +- nextjs/pages/{posts.tsx => blog.tsx} | 16 +- nextjs/pages/blog/[id].tsx | 80 + nextjs/pages/index.tsx | 70 +- nextjs/pages/post/[id].tsx | 59 - nextjs/postcss.config.js | 20 + nextjs/public/assets/layout/images/logo.svg | 37 + .../public/assets/layout/images/preloader.gif | Bin 0 -> 10756 bytes nextjs/public/favicon.ico | Bin 0 -> 1225 bytes nextjs/public/manifest.json | 15 + nextjs/public/nx-logo-white.svg | 17 - nextjs/public/star.svg | 11 - nextjs/src/aws-video-exports.js | 8 + nextjs/src/graphql/schema.json | 6226 +++++++++++++++++ nextjs/styles/Home.module.css | 122 - nextjs/styles/globals.css | 10 + nextjs/styles/styles.css | 128 - nextjs/tailwind.config.js | 134 + 42 files changed, 8998 insertions(+), 673 deletions(-) create mode 100644 nextjs/layout/AppMenu.tsx create mode 100644 nextjs/layout/AppTopbar.tsx create mode 100644 nextjs/layout/_overrides.scss create mode 100644 nextjs/layout/_variables.scss create mode 100644 nextjs/layout/layout.scss create mode 100644 nextjs/layout/sass/_config.scss create mode 100644 nextjs/layout/sass/_content.scss create mode 100644 nextjs/layout/sass/_dashboard.scss create mode 100644 nextjs/layout/sass/_footer.scss create mode 100644 nextjs/layout/sass/_layout.scss create mode 100644 nextjs/layout/sass/_main.scss create mode 100644 nextjs/layout/sass/_menu.scss create mode 100644 nextjs/layout/sass/_mixins.scss create mode 100644 nextjs/layout/sass/_profile.scss create mode 100644 nextjs/layout/sass/_responsive.scss create mode 100644 nextjs/layout/sass/_sidebar.scss create mode 100644 nextjs/layout/sass/_splash.scss create mode 100644 nextjs/layout/sass/_topbar.scss create mode 100644 nextjs/layout/sass/_typography.scss create mode 100644 nextjs/layout/sass/_utils.scss rename nextjs/pages/{posts.tsx => blog.tsx} (77%) create mode 100644 nextjs/pages/blog/[id].tsx delete mode 100644 nextjs/pages/post/[id].tsx create mode 100644 nextjs/postcss.config.js create mode 100644 nextjs/public/assets/layout/images/logo.svg create mode 100644 nextjs/public/assets/layout/images/preloader.gif create mode 100644 nextjs/public/favicon.ico create mode 100644 nextjs/public/manifest.json delete mode 100644 nextjs/public/nx-logo-white.svg delete mode 100644 nextjs/public/star.svg create mode 100644 nextjs/src/aws-video-exports.js create mode 100644 nextjs/src/graphql/schema.json delete mode 100644 nextjs/styles/Home.module.css create mode 100644 nextjs/styles/globals.css delete mode 100644 nextjs/styles/styles.css create mode 100644 nextjs/tailwind.config.js diff --git a/amplify/backend/api/ccd/schema.graphql b/amplify/backend/api/ccd/schema.graphql index 153907a7b..cff05a71f 100644 --- a/amplify/backend/api/ccd/schema.graphql +++ b/amplify/backend/api/ccd/schema.graphql @@ -4,6 +4,7 @@ type Blog @aws_cognito_user_pools @auth( rules: [ + { allow: public, provider: apiKey } { allow: groups groups: ["Admin"] @@ -29,6 +30,7 @@ type Post @searchable @auth( rules: [ + { allow: public, provider: apiKey } { allow: groups groups: ["Admin"] @@ -54,6 +56,7 @@ type Post comment_status: Boolean ping_status: Boolean comment_count: Int + post_featured_image: String blog: Blog @connection(name: "BlogPosts") comments: [Comment] @connection(name: "PostComments") category: [Category] @connection(name: "PostCategories") diff --git a/amplify/backend/backend-config.json b/amplify/backend/backend-config.json index c69083c0c..0ec20cd41 100644 --- a/amplify/backend/backend-config.json +++ b/amplify/backend/backend-config.json @@ -30,12 +30,20 @@ "output": { "authConfig": { "defaultAuthentication": { - "authenticationType": "AMAZON_COGNITO_USER_POOLS", - "userPoolConfig": { - "userPoolId": "authccdb1bcb9cf" + "authenticationType": "API_KEY", + "apiKeyConfig": { + "apiKeyExpirationDays": 365, + "description": "ccdapikey" } }, - "additionalAuthenticationProviders": [] + "additionalAuthenticationProviders": [ + { + "authenticationType": "AMAZON_COGNITO_USER_POOLS", + "userPoolConfig": { + "userPoolId": "authccdb1bcb9cf" + } + } + ] } }, "dependsOn": [ diff --git a/nextjs/layout/AppMenu.tsx b/nextjs/layout/AppMenu.tsx new file mode 100644 index 000000000..50abc4c9f --- /dev/null +++ b/nextjs/layout/AppMenu.tsx @@ -0,0 +1,145 @@ +import React, { useState } from "react"; +import Link from "next/link"; +import { CSSTransition } from "react-transition-group"; +import classNames from "classnames"; + +const AppSubmenu = (props) => { + const [activeIndex, setActiveIndex] = useState(null); + + const onMenuItemClick = (event, item, index) => { + //avoid processing disabled items + if (item.disabled) { + event.preventDefault(); + return true; + } + + //execute command + if (item.command) { + item.command({ originalEvent: event, item: item }); + } + + if (index === activeIndex) setActiveIndex(null); + else setActiveIndex(index); + + if (props.onMenuItemClick) { + props.onMenuItemClick({ + originalEvent: event, + item: item, + }); + } + }; + + const renderLinkContent = (item) => { + let submenuIcon = item.items && ( + + ); + let badge = item.badge && ( + {item.badge} + ); + + return ( + + + {item.label} + {submenuIcon} + {badge} + + ); + }; + + const renderLink = (item, i) => { + let content = renderLinkContent(item); + + if (item.to) { + return ( + + {content} + + ); + } else { + return ( + onMenuItemClick(e, item, i)} + target={item.target} + > + {content} + + ); + } + }; + + let items = + props.items && + props.items.map((item, i) => { + let active = activeIndex === i; + let styleClass = classNames(item.badgeStyleClass, { + "active-menuitem": active && !item.to, + }); + + return ( +
  • + {item.items && props.root === true &&
    } + {renderLink(item, i)} + + + +
  • + ); + }); + + return items ? : null; +}; + +const menu = [ + { label: "Blog", icon: "pi pi-fw pi-home", to: "/blog/" }, + { + label: "UI Kit", + icon: "pi pi-fw pi-sitemap", + items: [ + { + label: "Form Layout", + icon: "pi pi-fw pi-id-card", + to: "/formlayout", + }, + { label: "Input", icon: "pi pi-fw pi-check-square", to: "/input" }, + { + label: "Float Label", + icon: "pi pi-fw pi-bookmark", + to: "/floatlabel", + }, + { label: "Button", icon: "pi pi-fw pi-mobile", to: "/button" }, + { label: "Table", icon: "pi pi-fw pi-table", to: "/table" }, + { label: "List", icon: "pi pi-fw pi-list", to: "/list" }, + { label: "Tree", icon: "pi pi-fw pi-share-alt", to: "/tree" }, + { label: "Panel", icon: "pi pi-fw pi-tablet", to: "/panel" }, + { label: "Overlay", icon: "pi pi-fw pi-clone", to: "/overlay" }, + { label: "Menu", icon: "pi pi-fw pi-bars", to: "/menu" }, + { label: "Message", icon: "pi pi-fw pi-comment", to: "/messages" }, + { label: "File", icon: "pi pi-fw pi-file", to: "/file" }, + { label: "Chart", icon: "pi pi-fw pi-chart-bar", to: "/chart" }, + { label: "Misc", icon: "pi pi-fw pi-circle-off", to: "/misc" }, + ], + }, +]; + +export const AppMenu = (props) => { + return ( +
    + +
    + ); +}; diff --git a/nextjs/layout/AppTopbar.tsx b/nextjs/layout/AppTopbar.tsx new file mode 100644 index 000000000..1e6255609 --- /dev/null +++ b/nextjs/layout/AppTopbar.tsx @@ -0,0 +1,35 @@ +import React from "react"; +import { InputText } from "primereact/inputtext"; + +export const AppTopbar = (props) => { + return ( +
    + +
    + + + + + + + +
    +
    + ); +}; diff --git a/nextjs/layout/_overrides.scss b/nextjs/layout/_overrides.scss new file mode 100644 index 000000000..850b92b17 --- /dev/null +++ b/nextjs/layout/_overrides.scss @@ -0,0 +1 @@ +//Suggested location to add your overrides so that migration would be easy by just updating the SASS folder in the future \ No newline at end of file diff --git a/nextjs/layout/_variables.scss b/nextjs/layout/_variables.scss new file mode 100644 index 000000000..3077e0d4a --- /dev/null +++ b/nextjs/layout/_variables.scss @@ -0,0 +1,47 @@ +/* General */ +$fontSize: 14px; +$bodyBgColor: #edf0f5; +$textColor: #333333; +$textSecondaryColor: #707070; +$borderRadius: 3px; +$dividerColor: #e3e3e3; +$transitionDuration: 0.2s; +$maskBgColor: #424242; +$focusShadowColor: #8dcdff; + +/* Menu Common */ +$menuitemBadgeBgColor: #007be5; +$menuitemBadgeColor: #ffffff; +$submenuFontSize: 13px; +$menuitemActiveRouteColor: #1fa1fc; + +/* Menu Light */ +$menuBgColorFirst: #f3f4f9; +$menuBgColorLast: #d7dbe8; +$menuitemColor: #232428; +$menuitemHoverColor: #5e1286; +$menuitemActiveColor: #5e1286; +$menuitemActiveBgColor: #ffffff; +$menuitemBorderColor: rgba(207, 211, 224, 0.6); + +/* Menu Dark */ +$menuDarkBgColorFirst: #4d505b; +$menuDarkBgColorLast: #3b3e47; +$menuitemDarkColor: #ffffff; +$menuitemDarkHoverColor: #5e1286; +$menuitemDarkActiveColor: #5e1286; +$menuitemDarkActiveBgColor: #2e3035; +$menuitemDarkBorderColor: rgba(52, 56, 65, 0.6); + +/* Topbar */ +$topbarLeftBgColor: #5e1286; +$topbarRightBgColor: #5e1286; +$topbarItemBadgeBgColor: #ef6262; +$topbarItemBadgeColor: #ffffff; +$topbarItemColor: #ffffff; +$topbarItemHoverColor: #c3e8fb; +$topbarSearchInputBorderBottomColor: #ffffff; +$topbarSearchInputColor: #ffffff; + +/* Footer */ +$footerBgColor: #ffffff; diff --git a/nextjs/layout/layout.scss b/nextjs/layout/layout.scss new file mode 100644 index 000000000..5980a6378 --- /dev/null +++ b/nextjs/layout/layout.scss @@ -0,0 +1,3 @@ +@import "./_variables"; +@import "./sass/_layout"; +@import "./_overrides"; \ No newline at end of file diff --git a/nextjs/layout/sass/_config.scss b/nextjs/layout/sass/_config.scss new file mode 100644 index 000000000..c9175f2dc --- /dev/null +++ b/nextjs/layout/sass/_config.scss @@ -0,0 +1,151 @@ +.layout-config { + position: fixed; + top: 50px; + padding: 0; + right: 0; + display: block; + width: 20em; + z-index: 998; + height: calc(100% - 50px); + transform: translate3d(20em, 0px, 0px); + transition: transform $transitionDuration; + backface-visibility: hidden; + box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.24); + color: $textColor; + background-color: #ffffff; + + &.layout-config-active { + transform: translate3d(0px, 0px, 0px); + + .layout-config-content { + .layout-config-button { + i { + transform: rotate(360deg); + } + } + } + } + + .layout-config-button { + display: block; + position: absolute; + width: 52px; + height: 52px; + line-height: 52px; + background-color: $menuitemBadgeBgColor; + text-align: center; + color: $menuitemBadgeColor; + top: 230px; + left: -52px; + z-index: -1; + overflow: hidden; + cursor: pointer; + transition: background-color $transitionDuration; + box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.24); + + i { + font-size: 32px; + line-height: inherit; + cursor: pointer; + transform: rotate(0deg); + transition: color $transitionDuration, transform 1s; + } + } + + .layout-config-close { + position: absolute; + width: 20px; + height: 20px; + line-height: 20px; + text-align: center; + right: 20px; + top: 10px; + z-index: 1; + background-color: #e54a51; + transition: background-color $transitionDuration; + border-radius: 50%; + + i { + color: #ffffff; + line-height: inherit; + font-size: 12px; + } + + &:hover { + background-color: #ea6e73; + } + } + + .layout-config-content { + position: relative; + overflow: auto; + height: 100%; + padding: 1em; + padding-bottom: 100px; + + .layout-themes { + display: flex; + flex-wrap: wrap; + + > div { + padding: .25rem; + } + + + a { + width: 2rem; + height: 2rem; + border-radius: 50%; + display: block; + position: relative; + align-items: center; + justify-content: center; + transition: transform $transitionDuration; + box-shadow: 0 .125rem .25rem rgba(0,0,0,.075); + + i { + font-size: 1rem; + position: absolute; + color: $menuitemBadgeColor; + top: 50%; + left: 50%; + margin-left: -.5rem; + margin-top: -.5rem; + } + + &:hover { + transform: scale(1.1); + } + } + } + } + + .p-col { + text-align: center; + } + + p { + line-height: 1.5; + margin-top: 0; + color: $textSecondaryColor; + } +} + +.blocked-scroll-config{ + overflow: hidden; +} + +@media screen and (max-width: 1024px) { + .layout-config { + top: 50px; + transform: translate3d(100%, 0px, 0px); + + &.layout-config-active { + transform: translate3d(0px, 0px, 0px); + } + + .layout-config-close { + right: 10px; + } + } +} diff --git a/nextjs/layout/sass/_content.scss b/nextjs/layout/sass/_content.scss new file mode 100644 index 000000000..d198f6fe2 --- /dev/null +++ b/nextjs/layout/sass/_content.scss @@ -0,0 +1,4 @@ +.layout-main { + transition: margin-left $transitionDuration; + padding: 70px 2rem 2rem 2rem; +} diff --git a/nextjs/layout/sass/_dashboard.scss b/nextjs/layout/sass/_dashboard.scss new file mode 100644 index 000000000..7203f60d7 --- /dev/null +++ b/nextjs/layout/sass/_dashboard.scss @@ -0,0 +1,186 @@ +/* Dashboard */ +.dashboard { + + .summary { + position: relative; + + .title { + font-size: 20px; + } + + .detail { + color: $textSecondaryColor; + display: block; + margin-top: 10px; + } + + .count { + color: #ffffff; + position: absolute; + top: 10px; + right: 10px; + font-size: 24px; + padding: 7px 14px; + border-radius: $borderRadius; + + &.visitors { + background-color: #20d077; + } + + &.purchases { + background-color: #f9c851; + } + + &.revenue { + background-color: #007be5; + } + } + } + + .highlight-box { + height: 100px; + display: flex; + @include clearfix(); + + .initials { + height: 100%; + width: 50%; + text-align: center; + padding: 1em; + + > span { + font-size: 48px; + } + } + + .highlight-details { + height: 100%; + background-color: #ffffff; + width: 50%; + padding: 1em; + + i { + font-size: 18px; + vertical-align: middle; + margin-right: .5em; + } + + .count { + color: $textSecondaryColor; + font-size: 36px; + margin-top: 4px; + display: block; + } + } + } + + .task-list { + list-style-type: none; + margin: 0; + padding: 0; + + li { + padding: .5em .25em; + border-bottom: 1px solid $dividerColor; + @include clearfix(); + } + + .p-checkbox { + vertical-align: middle; + margin-right: .5em; + } + + .task-name { + vertical-align: middle; + } + + i { + float: right; + font-size: 24px; + color: $textSecondaryColor; + } + + .p-panel-content { + min-height: 256px; + } + } + + .contact-form { + .p-panel-content { + min-height: 256px; + } + } + + .contacts { + + ul { + list-style-type: none; + padding: 0; + margin: 0; + + li { + border-bottom: 1px solid $dividerColor; + + button { + padding: 9px; + width: 100%; + box-sizing: border-box; + text-decoration: none; + position: relative; + display: block; + border-radius: 2px; + transition: background-color .2s; + + .name { + position: absolute; + right: 10px; + top: 10px; + font-size: 18px; + } + + .email { + position: absolute; + right: 10px; + top: 30px; + font-size: 14px; + color: $textSecondaryColor; + } + + &:hover { + cursor: pointer; + background-color: #eeeeee; + } + } + + &:last-child { + border: 0; + } + } + } + + .p-panel-content { + min-height: 256px; + } + } + + .activity-list { + list-style-type: none; + padding: 0; + margin: 0; + + li { + border-bottom: 1px solid $dividerColor; + padding: 16px 8px; + + .count { + font-size: 24px; + color: #ffffff; + background-color: #007be5; + font-weight: 700; + padding: .25em .5em; + display: inline-block; + border-radius: $borderRadius; + } + } + } +} diff --git a/nextjs/layout/sass/_footer.scss b/nextjs/layout/sass/_footer.scss new file mode 100644 index 000000000..f0cb0fe4d --- /dev/null +++ b/nextjs/layout/sass/_footer.scss @@ -0,0 +1,13 @@ +.layout-footer { + transition: margin-left $transitionDuration; + background-color: $footerBgColor; + padding: 1em 2em; + + img { + vertical-align: middle; + } + + .footer-text { + vertical-align: middle; + } +} diff --git a/nextjs/layout/sass/_layout.scss b/nextjs/layout/sass/_layout.scss new file mode 100644 index 000000000..f6bdf6501 --- /dev/null +++ b/nextjs/layout/sass/_layout.scss @@ -0,0 +1,14 @@ +@import "./_mixins"; +@import "./_splash"; +@import "./_main"; +@import "./_topbar"; +@import "./_sidebar"; +@import "./_profile"; +@import "./_menu"; +@import "./_config"; +@import "./_content"; +@import "./_footer"; +@import "./_responsive"; +@import "./_utils"; +@import "./_typography"; +@import "./_dashboard"; diff --git a/nextjs/layout/sass/_main.scss b/nextjs/layout/sass/_main.scss new file mode 100644 index 000000000..391bfff5d --- /dev/null +++ b/nextjs/layout/sass/_main.scss @@ -0,0 +1,34 @@ +* { + box-sizing: border-box; +} + +html { + height: 100%; + font-size: $fontSize; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, + Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: $fontSize; + color: $textColor; + background-color: $bodyBgColor; + margin: 0; + padding: 0; + min-height: 100%; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + text-decoration: none; + color: $menuitemHoverColor; +} + +.layout-wrapper { + padding: 0; + display: flex; + flex-direction: column; + justify-content: space-between; + min-height: 100vh; +} diff --git a/nextjs/layout/sass/_menu.scss b/nextjs/layout/sass/_menu.scss new file mode 100644 index 000000000..4391e9712 --- /dev/null +++ b/nextjs/layout/sass/_menu.scss @@ -0,0 +1,189 @@ +.layout-menu-container { + padding-bottom: 120px; +} + +.layout-menu { + list-style-type: none; + margin: 0; + padding: 0; + + li { + a { + cursor: pointer; + position: relative; + text-decoration: none; + display: flex; + align-items: center; + transition: color $transitionDuration; + + i { + font-size: 16px; + } + + span { + margin-left: .5em; + } + + .menuitem-toggle-icon { + margin-left: auto; + } + + &:focus { + @include focused-inset(); + } + } + + &.active-menuitem { + > a { + .menuitem-toggle-icon { + @include icon-override("\e933"); + } + } + } + } + + > li { + > a { + padding: 1em; + + span { + font-size: $fontSize; + } + } + + &:last-child { + > a { + border-bottom: 1px solid $menuitemBorderColor; + } + } + + ul { + list-style-type: none; + margin: 0; + padding: 0; + padding-left: 1.5em; + + li { + a { + cursor: pointer; + padding: .75em 1em; + border-top: 0 none; + + span { + font-size: $submenuFontSize; + } + } + + &:last-child { + padding-bottom: 1em; + } + } + + &.layout-submenu-wrapper-enter, + &.layout-submenu-wrapper-leave-to { + max-height: 0; + } + + &.layout-submenu-wrapper-enter-to, + &.layout-submenu-wrapper-leave { + max-height: 1000px; + } + + &.layout-submenu-wrapper-leave-active { + overflow: hidden; + transition: max-height 0.45s cubic-bezier(0, 1, 0, 1); + } + + &.layout-submenu-wrapper-enter-active { + overflow: hidden; + transition: max-height 1s ease-in-out; + } + } + } +} + +.layout-sidebar-light { + @include linear-gradient($menuBgColorFirst, $menuBgColorLast); + + .layout-menu { + > li { + > a { + border-top: 1px solid $menuitemBorderColor; + } + + &:last-child { + > a { + border-bottom: 1px solid $menuitemBorderColor; + } + } + + ul { + background-color: $menuitemActiveBgColor; + } + } + + li { + a { + color: $menuitemColor; + + &.active-route { + color: $menuitemActiveRouteColor; + } + + &:hover { + color: $menuitemHoverColor; + } + } + + &.active-menuitem { + > a { + background-color: $menuitemActiveBgColor; + color: $menuitemActiveColor; + } + } + } + } +} + +.layout-sidebar-dark { + @include linear-gradient($menuDarkBgColorFirst, $menuDarkBgColorLast); + + .layout-menu { + > li { + > a { + border-top: 1px solid $menuitemDarkBorderColor; + } + + &:last-child { + > a { + border-bottom: 1px solid $menuitemDarkBorderColor; + } + } + + ul { + background-color: $menuitemDarkActiveBgColor; + } + } + + li { + a { + color: $menuitemDarkColor; + + &.active-route { + color: $menuitemActiveRouteColor; + } + + &:hover { + color: $menuitemDarkHoverColor; + } + } + + &.active-menuitem { + > a { + background-color: $menuitemDarkActiveBgColor; + color: $menuitemDarkActiveColor; + } + } + } + } +} diff --git a/nextjs/layout/sass/_mixins.scss b/nextjs/layout/sass/_mixins.scss new file mode 100644 index 000000000..e1a5fe01e --- /dev/null +++ b/nextjs/layout/sass/_mixins.scss @@ -0,0 +1,43 @@ +@mixin icon-override($icon) { + &:before { + content: $icon; + } +} + +@mixin linear-gradient($top, $bottom){ + background: $top; /* Old browsers */ + background: linear-gradient(to bottom, $top 0%,$bottom 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#000000',GradientType=0 ); /* IE6-9 */ +} + +@mixin linear-gradient-left($left, $right){ + background: $left; /* Old browsers */ + background: linear-gradient(to right, $left 0%,$right 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=$left, endColorstr=$right,GradientType=1 ); /* IE6-9 */ +} + +@mixin opacity($opacity) { + opacity: $opacity; + $opacity-ie: $opacity * 100; + filter: alpha(opacity=$opacity-ie); +} + +@mixin focused() { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2em $focusShadowColor; +} + +@mixin focused-inset() { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2em $focusShadowColor; +} + +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} diff --git a/nextjs/layout/sass/_profile.scss b/nextjs/layout/sass/_profile.scss new file mode 100644 index 000000000..6ada87730 --- /dev/null +++ b/nextjs/layout/sass/_profile.scss @@ -0,0 +1,125 @@ +.layout-profile { + text-align: center; + padding: 20px 0; + + img { + width: 56px; + margin: 10px; + } + + .layout-profile-link { + cursor: pointer; + display: inline-block; + margin-bottom: .75em; + transition: color $transitionDuration; + + i { + display: inline-block; + font-size: 16px; + vertical-align: middle; + margin-left: .5em; + } + } + + ul { + list-style-type: none; + padding: 0; + margin: 0; + + li { + button { + width: 100%; + padding: 1em; + border: 0 none; + border-radius: 0; + cursor: pointer; + transition: color $transitionDuration; + + &:hover { + color: $menuitemHoverColor; + } + + span { + margin-left: .25em; + vertical-align: middle; + } + + i { + vertical-align: middle; + } + } + } + + &.layout-submenu-wrapper-enter, + &.layout-submenu-wrapper-leave-to { + max-height: 0; + } + + &.layout-submenu-wrapper-enter-to, + &.layout-submenu-wrapper-leave { + max-height: 1000px; + } + + &.layout-submenu-wrapper-leave-active { + overflow: hidden; + transition: max-height 0.45s cubic-bezier(0, 1, 0, 1); + } + + &.layout-submenu-wrapper-enter-active { + overflow: hidden; + transition: max-height 1s ease-in-out; + } + } +} + +.layout-sidebar-light { + .layout-profile { + .layout-profile-link { + color: $menuitemColor; + + &:hover { + color: $menuitemHoverColor; + } + } + + ul { + background-color: $menuitemActiveBgColor; + + li { + button { + color: $menuitemColor; + + &:hover { + color: $menuitemHoverColor; + } + } + } + } + } +} + +.layout-sidebar-dark { + .layout-profile { + .layout-profile-link { + color: $menuitemDarkColor; + + &:hover { + color: $menuitemDarkHoverColor; + } + } + + ul { + background-color: $menuitemDarkActiveBgColor; + + li { + button { + color: $menuitemDarkColor; + + &:hover { + color: $menuitemDarkHoverColor; + } + } + } + } + } +} diff --git a/nextjs/layout/sass/_responsive.scss b/nextjs/layout/sass/_responsive.scss new file mode 100644 index 000000000..c7d841478 --- /dev/null +++ b/nextjs/layout/sass/_responsive.scss @@ -0,0 +1,76 @@ +@media (min-width: 1025px) { + .layout-wrapper { + &.layout-overlay { + .layout-topbar { + left: 0; + } + + .layout-main, .layout-footer { + margin-left: 0; + } + + &.layout-overlay-sidebar-active { + .layout-sidebar { + left: 0; + } + + .layout-topbar { + left: 250px; + } + } + + &.layout-mobile-sidebar-active { + .layout-sidebar { + left: 0; + } + + .layout-topbar { + left: 250px; + } + } + } + + &.layout-static { + .layout-topbar { + left: 250px; + } + + .layout-main, .layout-footer { + margin-left: 250px; + } + + &.layout-static-sidebar-inactive { + .layout-topbar { + left: 0; + } + + .layout-main, .layout-footer { + margin-left: 0; + } + } + } + } +} + +@media (max-width: 1024px) { + .layout-wrapper { + .layout-topbar { + left: 0; + } + + .layout-main, .layout-footer { + margin-left: 0; + } + + .layout-sidebar { + transition: left $transitionDuration; + left: -250px; + margin-top: 50px; + } + + } + + .body-overflow-hidden { + overflow: hidden; + } +} diff --git a/nextjs/layout/sass/_sidebar.scss b/nextjs/layout/sass/_sidebar.scss new file mode 100644 index 000000000..73a474089 --- /dev/null +++ b/nextjs/layout/sass/_sidebar.scss @@ -0,0 +1,50 @@ +.layout-sidebar { + position: fixed; + width: 250px; + height: 100%; + z-index: 999; + overflow-y: auto; + user-select: none; + box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.16); + + &.layout-sidebar-enter { + transform: translateX(-100%); + } + + &.layout-sidebar-enter-active { + transform: translateX(0%); + transition: transform $transitionDuration; + } + + &.layout-sidebar-enter-done { + transform: none; + } + + &.layout-sidebar-exit { + transform: translateX(0%); + } + + &.layout-sidebar-exit-active { + transform: translateX(-100%); + transition: transform $transitionDuration; + } + + .layout-logo { + text-align: center; + margin-top: 24px; + cursor: pointer; + } + + .menuitem-badge { + display: inline-block; + margin-left: 4px; + font-size: 10px; + width: 16px; + height: 16px; + line-height: 16px; + text-align: center; + color: $menuitemBadgeColor; + background-color: $menuitemBadgeBgColor; + border-radius: 50%; + } +} diff --git a/nextjs/layout/sass/_splash.scss b/nextjs/layout/sass/_splash.scss new file mode 100644 index 000000000..df8f1b0c6 --- /dev/null +++ b/nextjs/layout/sass/_splash.scss @@ -0,0 +1,47 @@ +.splash-screen { + width: 100%; + height: 100%; + position: fixed; + @include linear-gradient-left($topbarLeftBgColor, $topbarRightBgColor); + + .splash-container { + width: 40px; + height: 40px; + margin: 0px auto; + position: absolute; + left: 50%; + top: 50%; + margin-left: -20px; + margin-top: -20px; + + } + + .splash-double-bounce1, .splash-double-bounce2 { + width: 100%; + height: 100%; + border-radius: 50%; + background-color: $topbarItemColor; + opacity: 0.6; + position: absolute; + top: 0; + left: 0; + animation: splash-bounce 2.0s infinite ease-in-out; + } + + .splash-double-bounce2 { + animation-delay: -1.0s; + } + + @-webkit-keyframes splash-bounce { + 0%, 100% { -webkit-transform: scale(0.0) } + 50% { -webkit-transform: scale(1.0) } + } + + @keyframes splash-bounce { + 0%, 100% { + transform: scale(0.0); + } 50% { + transform: scale(1.0); + } + } +} diff --git a/nextjs/layout/sass/_topbar.scss b/nextjs/layout/sass/_topbar.scss new file mode 100644 index 000000000..a1f392c2e --- /dev/null +++ b/nextjs/layout/sass/_topbar.scss @@ -0,0 +1,127 @@ +.layout-topbar { + position: fixed; + height: 50px; + padding: 1em 2em 0em 2em; + color: #ffffff; + z-index: 999; + right: 0; + @include clearfix(); + @include linear-gradient-left($topbarLeftBgColor,$topbarRightBgColor); + transition: left $transitionDuration; + + .layout-topbar-icons { + float: right; + display: block; + animation-duration: .5s; + + button { + position: relative; + color: $topbarItemColor; + margin-left: 20px; + display: inline-block; + text-decoration: none; + transition: color $transitionDuration; + + &:hover { + color: $topbarItemHoverColor; + } + + &:focus { + @include focused(); + } + + span { + &.layout-topbar-icon { + font-size: 1.5em; + } + + &.layout-topbar-item-text { + font-size: 20px; + display: none; + } + + &.layout-topbar-badge { + position: absolute; + font-size: 10px; + right: -5px; + top: -5px; + width: 16px; + height: 16px; + text-align: center; + line-height: 16px; + color: $topbarItemBadgeColor; + background-color: $topbarItemBadgeBgColor; + border-radius: 50%; + } + } + } + + .layout-topbar-search { + padding: 0; + position: relative; + display: inline-block; + top: -4px; + + input { + display: inline-block; + border: 0 none; + font-size: $fontSize; + background: transparent; + border-bottom: 2px solid $topbarSearchInputBorderBottomColor; + outline: 0 none; + box-shadow: none; + color: $topbarSearchInputColor; + width: 100px; + padding: 1px 20px 1px 1px; + margin: 0px; + border-radius: 2px; + + &::-webkit-input-placeholder { color:$topbarSearchInputColor; opacity: .7; transition: opacity $transitionDuration;} + &:-moz-placeholder { color:$topbarSearchInputColor; opacity: .7; transition: opacity $transitionDuration;} + &::-moz-placeholder { color:$topbarSearchInputColor; opacity: .7; transition: opacity $transitionDuration;} + &:-ms-input-placeholder { color:$topbarSearchInputColor; opacity: .7; transition: opacity $transitionDuration;} + } + + .layout-topbar-search-icon { + font-size: 18px; + position: absolute; + top: -1px; + right: 0px; + } + + &:hover { + input { + border-bottom-color: $topbarItemHoverColor; + &::-webkit-input-placeholder { opacity: 1 } + &:-moz-placeholder {opacity: 1} + &::-moz-placeholder {opacity: 1} + &:-ms-input-placeholder {opacity: 1} + } + + .layout-topbar-search-icon { + color: $topbarItemHoverColor; + } + } + } + } + + .layout-menu-button { + cursor: pointer; + display: inline-block; + text-decoration: none; + color: $topbarItemColor; + transition: color $transitionDuration; + + span { + font-size: 1.5em; + } + + &:hover { + color: $topbarItemHoverColor; + } + } + + button { + cursor: pointer; + } +} diff --git a/nextjs/layout/sass/_typography.scss b/nextjs/layout/sass/_typography.scss new file mode 100644 index 000000000..856c15da6 --- /dev/null +++ b/nextjs/layout/sass/_typography.scss @@ -0,0 +1,68 @@ +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 1.5rem 0 1rem 0; + font-family: nunito; + font-weight: normal; + line-height: 1.2; + color: inherit; + + &:first-child { + margin-top: 0; + } +} + +h1 { + font-size: 2.5rem; +} + +h2 { + font-size: 2rem; +} + +h3 { + font-size: 1.75rem; +} + +h4 { + font-size: 1.5rem; +} + +h5 { + font-size: 1.25rem; +} + +h6 { + font-size: 1rem; +} + +mark { + background: #fff8e1; + padding: 0.25rem 0.4rem; + border-radius: $borderRadius; + font-family: monospace; +} + +blockquote { + margin: 1rem 0; + padding: 0 2rem; + border-left: 4px solid #90a4ae; +} + +hr { + border-top: solid $dividerColor; + border-width: 1px 0 0 0; + margin: 1rem 0; +} + +p { + margin: 0 0 1rem 0; + line-height: 1.5; + + &:last-child { + margin-bottom: 0; + } +} diff --git a/nextjs/layout/sass/_utils.scss b/nextjs/layout/sass/_utils.scss new file mode 100644 index 000000000..ee858b297 --- /dev/null +++ b/nextjs/layout/sass/_utils.scss @@ -0,0 +1,11 @@ +/* Typography */ +.card { + background-color: #ffffff; + padding: 1em; + margin-bottom: 16px; + border-radius: $borderRadius; + + &.card-w-title { + padding-bottom: 2em; + } +} diff --git a/nextjs/package-lock.json b/nextjs/package-lock.json index 70a86b71e..b0b26437c 100644 --- a/nextjs/package-lock.json +++ b/nextjs/package-lock.json @@ -71,6 +71,14 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -96,12 +104,12 @@ } }, "@aws-amplify/analytics": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@aws-amplify/analytics/-/analytics-3.3.11.tgz", - "integrity": "sha512-NruWHuW+cb1L8eslbHTuqY+Rorcap1yDutDbf9Dmfj4zkZAFc02sYKLKnpZEMA+I5hlyqYrSSh4MRIw1OSD3PA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/analytics/-/analytics-4.0.0.tgz", + "integrity": "sha512-uc+tvwR6UTrrfOPIoE0MonLC0of/Xch6/X1rf9UaAaVheh92fSzaEk0Xy34bGGrC0h8a5MizcTx3efotSswjlw==", "requires": { - "@aws-amplify/cache": "3.1.36", - "@aws-amplify/core": "3.8.3", + "@aws-amplify/cache": "3.1.37", + "@aws-amplify/core": "3.8.4", "@aws-sdk/client-firehose": "1.0.0-gamma.8", "@aws-sdk/client-kinesis": "1.0.0-gamma.8", "@aws-sdk/client-personalize-events": "1.0.0-gamma.8", @@ -112,61 +120,61 @@ } }, "@aws-amplify/api": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/@aws-amplify/api/-/api-3.2.11.tgz", - "integrity": "sha512-3mcdrBNb+54pZC66VWTMZX4HIaejFmWzepBLzoJnTHpQ1tP4BLmwvnaT2IjpDqZyfbRQIzaE0peSKq2x75Z35g==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/@aws-amplify/api/-/api-3.2.12.tgz", + "integrity": "sha512-iGyi/3X0/PEqEhwIFbasepSVt/uRsASFGhu0mrC1ux7qYjrswQzmOKleNpo1PkUSW1qdIWYlzgFP7+KPRL4CVg==", "requires": { - "@aws-amplify/api-graphql": "1.2.11", - "@aws-amplify/api-rest": "1.2.11" + "@aws-amplify/api-graphql": "1.2.12", + "@aws-amplify/api-rest": "1.2.12" } }, "@aws-amplify/api-graphql": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@aws-amplify/api-graphql/-/api-graphql-1.2.11.tgz", - "integrity": "sha512-cFOgg2LmnlykKsuTS2w0izZrUJogA0KpDZXH/6jxNJcZpUylzKAgmdrzZ3qWg8K/oPoaymC0jG2ZTpbhrOpiig==", - "requires": { - "@aws-amplify/api-rest": "1.2.11", - "@aws-amplify/auth": "3.4.11", - "@aws-amplify/cache": "3.1.36", - "@aws-amplify/core": "3.8.3", - "@aws-amplify/pubsub": "3.2.9", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@aws-amplify/api-graphql/-/api-graphql-1.2.12.tgz", + "integrity": "sha512-fbd1tno1NNzPGY6o6o/s/4N535/vJP7ZdDmcfFuB1G8jbNEZ3xJjUuJzeqnsbusQn2WyGFr3PD4U76wttC2OBA==", + "requires": { + "@aws-amplify/api-rest": "1.2.12", + "@aws-amplify/auth": "3.4.12", + "@aws-amplify/cache": "3.1.37", + "@aws-amplify/core": "3.8.4", + "@aws-amplify/pubsub": "3.2.10", "graphql": "14.0.0", "uuid": "^3.2.1", "zen-observable-ts": "0.8.19" } }, "@aws-amplify/api-rest": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@aws-amplify/api-rest/-/api-rest-1.2.11.tgz", - "integrity": "sha512-Oi8I/4WRj01OAJKh2V2qtLuUHGJdmK5pfNq57PjsP+6aY9e6ch0Lt5X2spbG2tlBshHOj+S2zMlcfn9yKzDpiA==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@aws-amplify/api-rest/-/api-rest-1.2.12.tgz", + "integrity": "sha512-rY03vw3NjYfq+hpHzI/4lOHPo4QeoQD/6wXDzEENvegB1vWsU2x/R9FAiWwJN9pLxxWUH6iBGgAK6s1p3K9qNQ==", "requires": { - "@aws-amplify/core": "3.8.3", + "@aws-amplify/core": "3.8.4", "axios": "0.19.0" } }, "@aws-amplify/auth": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@aws-amplify/auth/-/auth-3.4.11.tgz", - "integrity": "sha512-csCf6w9TAsBLE9LVKltDNxu2fZq9xmSkz9wj6R8yQhK/dxdgGQ/48VzSDeovkHJ3595HQBiAe/U0jRgihGZKxw==", + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/@aws-amplify/auth/-/auth-3.4.12.tgz", + "integrity": "sha512-t7jidReLcSUl1dQsjDfa8sP+fQCcGejLOjKrn7KXRTKAraTUABtmz8f40QfionPMiU8jbsa0bh3XmWKfV+9EpA==", "requires": { - "@aws-amplify/cache": "3.1.36", - "@aws-amplify/core": "3.8.3", - "amazon-cognito-identity-js": "4.5.4", + "@aws-amplify/cache": "3.1.37", + "@aws-amplify/core": "3.8.4", + "amazon-cognito-identity-js": "4.5.5", "crypto-js": "^3.3.0" } }, "@aws-amplify/cache": { - "version": "3.1.36", - "resolved": "https://registry.npmjs.org/@aws-amplify/cache/-/cache-3.1.36.tgz", - "integrity": "sha512-fDMvR52CwrBJ1fvky7BsNiru2TtfFbph8/zproZ0hb0UZJsZb1FLJ3oXO3Z429EGIcwgIkN0/gqbeZEfI/UXjA==", + "version": "3.1.37", + "resolved": "https://registry.npmjs.org/@aws-amplify/cache/-/cache-3.1.37.tgz", + "integrity": "sha512-XnUWD5Ov63CEsUxQef9SSl9yHhnBUhtYcObvqgQzumq/hafEpgh88RFUJsEHwRdPJ5Xsd/tLntC7aDShYagBUA==", "requires": { - "@aws-amplify/core": "3.8.3" + "@aws-amplify/core": "3.8.4" } }, "@aws-amplify/core": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-3.8.3.tgz", - "integrity": "sha512-fbwa//UZEMEzdV76MPwnBANCD/scU1xxIe/nq85s4auZt6Em2uXPYEHqvhRdn6Qe3NFOV4+toLFtCXINrbIR5w==", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-3.8.4.tgz", + "integrity": "sha512-DD27FLGiDfuilYvBy+34ehKk8qPsEq2r8nsQtUQsQwQyhDZ8L1gBt1Grk8SZBhZ8o2hfSuVlKVJAIA/zDanFew==", "requires": { "@aws-crypto/sha256-js": "1.0.0-alpha.0", "@aws-sdk/client-cognito-identity": "1.0.0-gamma.8", @@ -181,13 +189,13 @@ } }, "@aws-amplify/datastore": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@aws-amplify/datastore/-/datastore-2.7.3.tgz", - "integrity": "sha512-ZC0S34GLcxxtOwGC4XXYPP9jc0MH0KhtqC+JPdkUNtcq46WvQ8Vivco6r9JJRGdPY1ck8ZZUZbN18PdUk3E6fQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/datastore/-/datastore-2.8.0.tgz", + "integrity": "sha512-cJa3x+0TcfsmtRhWJbgXa/grlwQCHcWfl28kMmf35rUYGXTmAFcG26vAvUURRex6kQbTkPqGqD/eIh99bLAzVw==", "requires": { - "@aws-amplify/api": "3.2.11", - "@aws-amplify/core": "3.8.3", - "@aws-amplify/pubsub": "3.2.9", + "@aws-amplify/api": "3.2.12", + "@aws-amplify/core": "3.8.4", + "@aws-amplify/pubsub": "3.2.10", "idb": "5.0.6", "immer": "6.0.1", "ulid": "2.3.0", @@ -204,21 +212,21 @@ } }, "@aws-amplify/interactions": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@aws-amplify/interactions/-/interactions-3.3.11.tgz", - "integrity": "sha512-PpErtN9Ns8ajMFUTteHyBKkF3/JKGTHhkBca3EucKopb3lcnIxIQEXz/01At78QA851gqN3ynfYmdUqzozmSbw==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/@aws-amplify/interactions/-/interactions-3.3.12.tgz", + "integrity": "sha512-yhXQWZQ+5z7ZuLnjDHld6XQvOgvcUVtSna54Kp4aETc9fpWvO6zdr5DAmqinospx2d8W5v6dbn+gpZbx9iI0fg==", "requires": { - "@aws-amplify/core": "3.8.3", + "@aws-amplify/core": "3.8.4", "@aws-sdk/client-lex-runtime-service": "1.0.0-gamma.8" } }, "@aws-amplify/predictions": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/@aws-amplify/predictions/-/predictions-3.2.11.tgz", - "integrity": "sha512-FGLbHcpgs6Uosi/Y8eV7wunUe8RTd74vxhIpWuJ8mIzVXTZdqsTflBO19PfXepX0mN0mkYeJoDC9fHxCCE9Kfw==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/@aws-amplify/predictions/-/predictions-3.2.12.tgz", + "integrity": "sha512-0R2QEz8cZXeV1OZ7YJ9cK7b8dA7eg+tygAjdAXqZXS2KsKcf/B98yiDvlfbebI7teQkqozcI380b+VOGxSlT3g==", "requires": { - "@aws-amplify/core": "3.8.3", - "@aws-amplify/storage": "3.3.11", + "@aws-amplify/core": "3.8.4", + "@aws-amplify/storage": "3.3.12", "@aws-sdk/client-comprehend": "1.0.0-gamma.8", "@aws-sdk/client-polly": "1.0.0-gamma.8", "@aws-sdk/client-rekognition": "1.0.0-gamma.8", @@ -230,13 +238,13 @@ } }, "@aws-amplify/pubsub": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@aws-amplify/pubsub/-/pubsub-3.2.9.tgz", - "integrity": "sha512-Cd5vrHkkSP5aPSfDqQV7oGn9qizfmku3v1/BWHoRHFU5z2Es7XHGc2opZ4lq7uzvJIzOFJHi68sNZ/OaK7CEHA==", + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/@aws-amplify/pubsub/-/pubsub-3.2.10.tgz", + "integrity": "sha512-CkyNWRI6584xt8OqDgoj2hMSTH2iMZL/CdjNJpPWh0Q0+XZV2mP2tCC87UfYyAhqmKCTXxjRfX9//v/nfA4Xtg==", "requires": { - "@aws-amplify/auth": "3.4.11", - "@aws-amplify/cache": "3.1.36", - "@aws-amplify/core": "3.8.3", + "@aws-amplify/auth": "3.4.12", + "@aws-amplify/cache": "3.1.37", + "@aws-amplify/core": "3.8.4", "graphql": "14.0.0", "paho-mqtt": "^1.1.0", "uuid": "^3.2.1", @@ -244,11 +252,11 @@ } }, "@aws-amplify/storage": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@aws-amplify/storage/-/storage-3.3.11.tgz", - "integrity": "sha512-98zZaYAhYLOssYoYUcraJmSdPNu2YtvCeXxjDN7lD6C2TJdHZQ7zYvBSu4b2BC7wG0v6jf8Puqu9SkEPW+yTew==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/@aws-amplify/storage/-/storage-3.3.12.tgz", + "integrity": "sha512-ekww6wYUCvcyF5dBB2rXUaD+SSwx/C3QT4iS8w/cUrbcQR4k1QeJ/32pI2bkMYcB+FFyEyO6bX+ITVe791gxcw==", "requires": { - "@aws-amplify/core": "3.8.3", + "@aws-amplify/core": "3.8.4", "@aws-sdk/client-s3": "1.0.0-gamma.8", "@aws-sdk/s3-request-presigner": "1.0.0-gamma.7", "@aws-sdk/util-create-request": "1.0.0-gamma.7", @@ -264,11 +272,11 @@ "integrity": "sha512-OLdZmUCVK29+JV8PrkgVPjg+GIFtBnNjhC0JSRgrps+ynOFkibMQQPKeFXlTYtlukuCuepCelPSkjxvhcLq2ZA==" }, "@aws-amplify/xr": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/@aws-amplify/xr/-/xr-2.2.11.tgz", - "integrity": "sha512-r13wD74xd5kQqAaLXhukv70axzyVssHrm66KJeUHEc4YE1NVRIetEuarwVqtnxDQ/BzlwvHy6F+cvvNlePcWqw==", + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@aws-amplify/xr/-/xr-2.2.12.tgz", + "integrity": "sha512-C8JYsc5HEEXGo5dCqKsC/e4kIiTp2iai/SfKhlcAyzP9T+vQpf4vwTz80TviQfChPLlJXjCYu63U3vYFNe9Ezg==", "requires": { - "@aws-amplify/core": "3.8.3" + "@aws-amplify/core": "3.8.4" } }, "@aws-crypto/crc32": { @@ -1592,6 +1600,38 @@ "to-fast-properties": "^2.0.0" } }, + "@fullhuman/postcss-purgecss": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.0.0.tgz", + "integrity": "sha512-cvuOgMwIVlfgWcUMqg5p33NbGUxLwMrKtDKkm3QRfOo4PRVNR6+y/xd9OyXTVZiB1bIpKNJ0ZObYPWD3DRQDtw==", + "dev": true, + "requires": { + "postcss": "7.0.32", + "purgecss": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "@hapi/accept": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.1.tgz", @@ -1666,6 +1706,11 @@ "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1764,13 +1809,21 @@ "dev": true }, "@types/react": { - "version": "16.9.56", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.56.tgz", - "integrity": "sha512-gIkl4J44G/qxbuC6r2Xh+D3CGZpJ+NdWTItAPmZbR5mUS+JQ8Zvzpl0ea5qT/ZT3ZNTUcDKUVqV3xBE8wv/DyQ==", + "version": "16.14.1", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.1.tgz", + "integrity": "sha512-32mxrbX62m5b+lMTSzucFKNIr8Eq4T6T3rDVxYzKqyRwyfnPcwZppWW0YXUlPNPUE+r6phBtHXYRgr8ad/Zl9A==", "dev": true, "requires": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "@types/prop-types": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.0.tgz", + "integrity": "sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w==", + "dev": true, + "requires": { + "@types/react": "*" } }, "@types/zen-observable": { @@ -1966,6 +2019,31 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, "adjust-sourcemap-loader": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", @@ -1981,6 +2059,21 @@ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "ajv": { @@ -2014,27 +2107,15 @@ } }, "amazon-cognito-identity-js": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-4.5.4.tgz", - "integrity": "sha512-6hSdurLaOwDsmpax5Q2a8/n7sUB8A3z0I9BzwmzAOXKEx7OMMFZYUOiP0M3zxPQzu96S67a8JsYB9GdO/w52tg==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-4.5.5.tgz", + "integrity": "sha512-8Sy74oOGzfs/ZivH1kzeCvbYHQh81etSGD8wheSxfNEmD5xav015Cj/V0F9tTw8cI7jiilZcbCcS73j4UbMEXA==", "requires": { "buffer": "4.9.1", "crypto-js": "^3.3.0", "fast-base64-decode": "^1.0.0", "isomorphic-unfetch": "^3.0.0", "js-cookie": "^2.2.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - } } }, "anser": { @@ -2367,28 +2448,63 @@ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "optional": true }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, + "autoprefixer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.0.2.tgz", + "integrity": "sha512-okBmu9OMdt6DNEcZmnl0IYVv8Xl/xYWRSnc2OJ9UJEOt1u30opG1B8aLsViqKryBaYv1SKB4f85fOGZs5zYxHQ==", + "dev": true, + "requires": { + "browserslist": "^4.14.7", + "caniuse-lite": "^1.0.30001157", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "browserslist": { + "version": "4.14.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", + "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001157", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.591", + "escalade": "^3.1.1", + "node-releases": "^1.1.66" + } + } + } + }, "aws-amplify": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/aws-amplify/-/aws-amplify-3.3.8.tgz", - "integrity": "sha512-sUqBVjAFBA6htBidUOKkMLRlVP5f64uzdxH5ReuteVoxFTy2OBobpGYz4YFGgZtR0dQIfyJNzNlC7DhOstoNdA==", - "requires": { - "@aws-amplify/analytics": "3.3.11", - "@aws-amplify/api": "3.2.11", - "@aws-amplify/auth": "3.4.11", - "@aws-amplify/cache": "3.1.36", - "@aws-amplify/core": "3.8.3", - "@aws-amplify/datastore": "2.7.3", - "@aws-amplify/interactions": "3.3.11", - "@aws-amplify/predictions": "3.2.11", - "@aws-amplify/pubsub": "3.2.9", - "@aws-amplify/storage": "3.3.11", + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/aws-amplify/-/aws-amplify-3.3.9.tgz", + "integrity": "sha512-pttU0h2gG6WwWHHygZSSgvSvHKFTNAbLvbPsxqaScW7P5D2S9JGtSSPyRcRrN0mk4KFjFUaOIX9NyU+ha49Hyg==", + "requires": { + "@aws-amplify/analytics": "4.0.0", + "@aws-amplify/api": "3.2.12", + "@aws-amplify/auth": "3.4.12", + "@aws-amplify/cache": "3.1.37", + "@aws-amplify/core": "3.8.4", + "@aws-amplify/datastore": "2.8.0", + "@aws-amplify/interactions": "3.3.12", + "@aws-amplify/predictions": "3.2.12", + "@aws-amplify/pubsub": "3.2.10", + "@aws-amplify/storage": "3.3.12", "@aws-amplify/ui": "2.0.2", - "@aws-amplify/xr": "2.2.11" + "@aws-amplify/xr": "2.2.12" } }, "aws-appsync": { @@ -2435,11 +2551,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.4.tgz", "integrity": "sha512-eaDsM/PY8D/X5mYQhecVc5/9xvSHED7yPON+ffQroBeTuqUVm7dfphMkK8NksXuImqZlVRoKtrNfMIVCYIqaUQ==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -2460,11 +2571,6 @@ "requires": { "ms": "2.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -2489,11 +2595,6 @@ "requires": { "ms": "2.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -2513,16 +2614,6 @@ "xml2js": "0.4.19" }, "dependencies": { - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", @@ -2533,11 +2624,6 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, "url": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", @@ -2561,13 +2647,6 @@ "requires": { "follow-redirects": "1.5.10", "is-buffer": "^2.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - } } }, "babel-plugin-syntax-jsx": { @@ -2682,6 +2761,18 @@ "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "optional": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } } }, "bluebird": { @@ -2795,12 +2886,13 @@ } }, "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -2888,6 +2980,12 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, "caniuse-lite": { "version": "1.0.30001159", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz", @@ -2901,16 +2999,6 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "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" - } - } } }, "chokidar": { @@ -3000,7 +3088,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "optional": true, "requires": { "color-convert": "^1.9.1", "color-string": "^1.5.4" @@ -3012,25 +3099,17 @@ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { "color-name": "1.1.3" - }, - "dependencies": { - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - } } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "optional": true, "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -3286,9 +3365,23 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, + "css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", + "dev": true + }, "css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -3317,6 +3410,14 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -3347,14 +3448,21 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, "csstype": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz", - "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==", - "dev": true + "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==" }, "cyclist": { "version": "1.0.1", @@ -3379,11 +3487,11 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "ms": "2.1.2" + "ms": "2.0.0" } }, "decode-uri-component": { @@ -3448,6 +3556,12 @@ } } }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -3474,6 +3588,23 @@ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "optional": true }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "didyoumean": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz", + "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=", + "dev": true + }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -3496,6 +3627,15 @@ } } }, + "dom-helpers": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", + "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "dom-serializer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.0.1.tgz", @@ -3819,11 +3959,6 @@ "requires": { "is-extendable": "^0.1.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -4028,21 +4163,6 @@ "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "requires": { "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } } }, "for-in": { @@ -4102,6 +4222,18 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "optional": true }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -4153,6 +4285,12 @@ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "optional": true }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -4236,6 +4374,15 @@ "iterall": "^1.2.2" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -4273,6 +4420,11 @@ "kind-of": "^4.0.0" }, "dependencies": { + "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-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -4335,6 +4487,12 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, "htmlparser2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", @@ -4370,6 +4528,21 @@ "requires": { "agent-base": "6", "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "iconv-lite": { @@ -4397,6 +4570,14 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -4468,6 +4649,11 @@ "kind-of": "^3.0.2" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -4481,8 +4667,7 @@ "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "optional": true + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-binary-path": { "version": "2.1.0", @@ -4493,9 +4678,18 @@ } }, "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "is-core-module": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", + "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } }, "is-data-descriptor": { "version": "0.1.4", @@ -4505,6 +4699,11 @@ "kind-of": "^3.0.2" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -4623,6 +4822,16 @@ "requires": { "merge-stream": "^2.0.0", "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jmespath": { @@ -4656,11 +4865,29 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "requires": { - "minimist": "^1.2.0" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "just-extend": { @@ -4700,16 +4927,6 @@ "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "requires": { - "minimist": "^1.2.5" - } - } } }, "locate-path": { @@ -4735,6 +4952,12 @@ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "dev": true + }, "lolex": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", @@ -4905,6 +5128,11 @@ } } }, + "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-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -5034,6 +5262,12 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "optional": true }, + "modern-normalize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.0.0.tgz", + "integrity": "sha512-1lM+BMLGuDfsdwf3rsgBSrxJwAZHFIrQ8YR61xIqdHo0uNKI9M52wNpHSrliZATJp51On6JD0AfRxd4YGSU0lw==", + "dev": true + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -5048,9 +5282,9 @@ } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "nan": { "version": "2.14.2", @@ -5059,9 +5293,9 @@ "optional": true }, "nanoid": { - "version": "3.1.17", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.17.tgz", - "integrity": "sha512-5mmlQz73ohlISpARejqTwgYzh92wwBccatETsLOI+VKkY6Lx/Dj3wvG7tCoKjX+eEaZWn0gB7Xkfl5JatHQTeA==" + "version": "3.1.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.18.tgz", + "integrity": "sha512-rndlDjbbHbcV3xi+R2fpJ+PbGMdfBxz5v1fATIQFq0DP64FsicQdwnKLy47K4kZHdRpmQXtz24eGsxQqamzYTA==" }, "nanomatch": { "version": "1.2.13", @@ -5150,6 +5384,28 @@ "watchpack": "2.0.0-beta.13", "webpack": "4.44.1", "webpack-sources": "1.4.3" + }, + "dependencies": { + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "postcss": { + "version": "8.1.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.7.tgz", + "integrity": "sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ==", + "requires": { + "colorette": "^1.2.1", + "line-column": "^1.0.2", + "nanoid": "^3.1.16", + "source-map": "^0.6.1" + } + } } }, "next-tick": { @@ -5202,6 +5458,15 @@ "integrity": "sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg==", "optional": true }, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "dev": true, + "requires": { + "lodash.toarray": "^4.4.0" + } + }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -5245,26 +5510,11 @@ "vm-browserify": "^1.0.1" }, "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, "path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -5326,6 +5576,12 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -5338,6 +5594,12 @@ "set-blocking": "~2.0.0" } }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -5367,6 +5629,11 @@ "is-descriptor": "^0.1.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -5377,6 +5644,12 @@ } } }, + "object-hash": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", + "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -5536,6 +5809,12 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, "path-to-regexp": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", @@ -5600,9 +5879,10 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "8.1.7", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.7.tgz", - "integrity": "sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ==", + "version": "8.1.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.8.tgz", + "integrity": "sha512-hO6jFWBy0QnBBRaw+s0F4hVPKGDICec/nLNEG1D4qqw9/LBzWMkTjckqqELXAo0J42jN8GFZXtgQfezEaoG9gQ==", + "dev": true, "requires": { "colorette": "^1.2.1", "line-column": "^1.0.2", @@ -5610,6 +5890,47 @@ "source-map": "^0.6.1" } }, + "postcss-functions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", + "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", + "dev": true, + "requires": { + "glob": "^7.1.2", + "object-assign": "^4.1.1", + "postcss": "^6.0.9", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-js": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", + "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1", + "postcss": "^8.1.6" + } + }, "postcss-modules-extract-imports": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", @@ -5627,6 +5948,14 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -5650,6 +5979,14 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -5671,6 +6008,14 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -5692,9 +6037,26 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, + "postcss-nested": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.1.tgz", + "integrity": "sha512-ZHNSAoHrMtbEzjq+Qs4R0gHijpXc6F1YUv4TGmGaz7rtfMvVJBbu5hMOH+CrhEaljQpEmx5N/P8i1pXTkbVAmg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, "postcss-safe-parser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", @@ -5712,6 +6074,14 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -5767,6 +6137,27 @@ } } }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "primeflex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-2.0.0.tgz", + "integrity": "sha512-t6AG3iRI1rh04uI+9nC4JSlbKfA8PnpRDFtjyqi3rDSLRgdfOuhIiunJbjVQ4alnnCfuQAAbVyde1AKN9QxT/w==" + }, + "primeicons": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-4.1.0.tgz", + "integrity": "sha512-uEv2pSPk1zQCfaB2VgnUfnUxxlGryYi+5rbdxmZBBt5v9S/pscIQYS5YDLxsQZ7D9jn5c76+Tx5wX/2J1nK6sA==" + }, + "primereact": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/primereact/-/primereact-5.0.1.tgz", + "integrity": "sha512-sBEx0KiS2PaSIT10Y9+3/frKbH4VKDk8fJch/kLoKMdPH+X6smKEj4BYzjjPYDi3W3bMpWIX6ANAzOL8ibvg8w==" + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -5848,9 +6239,49 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "purgecss": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-3.0.0.tgz", + "integrity": "sha512-t3FGCwyX9XWV3ffvnAXTw6Y3Z9kNlcgm14VImNK66xKi5sdqxSA2I0SFYxtmZbAKuIZVckPdazw5iKL/oY/2TA==", + "dev": true, + "requires": { + "commander": "^6.0.0", + "glob": "^7.0.0", + "postcss": "7.0.32", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "dev": true + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, "querystring": { "version": "0.2.0", @@ -5939,6 +6370,17 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" }, + "react-transition-group": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -5957,6 +6399,24 @@ "picomatch": "^2.2.1" } }, + "reduce-css-calc": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz", + "integrity": "sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, "redux": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", @@ -6018,6 +6478,16 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -6050,6 +6520,14 @@ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, + "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" + } + }, "loader-utils": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", @@ -6069,6 +6547,14 @@ "source-map": "^0.6.1", "supports-color": "^6.1.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -6141,6 +6627,14 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sass": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.29.0.tgz", + "integrity": "sha512-ZpwAUFgnvAUCdkjwPREny+17BpUj8nh5Yr6zKPGtLNTLrmtoRYIjm7njP24COhjJldjwW1dcv52Lpf4tNZVVRA==", + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, "sass-loader": { "version": "10.0.5", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.5.tgz", @@ -6314,7 +6808,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "optional": true, "requires": { "is-arrayish": "^0.3.1" } @@ -6331,16 +6824,6 @@ "lolex": "^4.2.0", "nise": "^1.5.2", "supports-color": "^5.5.0" - }, - "dependencies": { - "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" - } - } } }, "snapdragon": { @@ -6382,11 +6865,6 @@ "is-extendable": "^0.1.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -6453,6 +6931,11 @@ "kind-of": "^3.2.0" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -6695,6 +7178,14 @@ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, + "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" + } + }, "loader-utils": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", @@ -6723,9 +7214,9 @@ "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "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" } @@ -6735,6 +7226,100 @@ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, + "tailwindcss": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.0.1.tgz", + "integrity": "sha512-57G3jdcVBWTPkHCNSAfDAo1Qp2Nkr4H6WnLD0luNFh1td+KwQp9FOVcqj0SYBH6qwVQJawzT+0/zLxzKmyznGw==", + "dev": true, + "requires": { + "@fullhuman/postcss-purgecss": "^3.0.0", + "bytes": "^3.0.0", + "chalk": "^4.1.0", + "color": "^3.1.3", + "detective": "^5.2.0", + "didyoumean": "^1.2.1", + "fs-extra": "^9.0.1", + "html-tags": "^3.1.0", + "lodash": "^4.17.20", + "modern-normalize": "^1.0.0", + "node-emoji": "^1.8.1", + "object-hash": "^2.0.3", + "postcss-functions": "^3", + "postcss-js": "^3.0.3", + "postcss-nested": "^5.0.1", + "postcss-selector-parser": "^6.0.4", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "reduce-css-calc": "^2.1.6", + "resolve": "^1.19.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "tailwindcss-animatecss": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animatecss/-/tailwindcss-animatecss-1.0.7.tgz", + "integrity": "sha512-PSGZDYSOqRNm+C/hJTMfw1pj4nprPQfbNh/wrYDC4G0R9dqtepPncIlKAFNSl7nTUFxH9ynhvBwcIul093ceXw==", + "dev": true + }, + "tailwindcss-transforms": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tailwindcss-transforms/-/tailwindcss-transforms-2.2.0.tgz", + "integrity": "sha512-0HPzE1QgGi94lNOgsIKA0AWaQern+JR0XNJkRmpyjFybpSLtQ5HkupF/caAmUW+pTt4cguDzd5gw09uw1oaG3A==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -6939,6 +7524,11 @@ "kind-of": "^3.0.2" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -6979,6 +7569,13 @@ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "requires": { "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } } }, "traverse": { @@ -7038,6 +7635,11 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "typeface-nunito-sans": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/typeface-nunito-sans/-/typeface-nunito-sans-1.1.13.tgz", + "integrity": "sha512-wpRTCwHdHcq4CKBBGzTDNAjck64O1prpCjKiUJyMFHn+E9k1aELJuSVeMBsgScdR1b5u7HFP1Px7Gi2OUMu33w==" + }, "typescript": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", @@ -7095,6 +7697,12 @@ "cookie": "^0.4.0" } }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -7153,6 +7761,13 @@ "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "requires": { "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } } }, "urix": { @@ -7167,13 +7782,6 @@ "requires": { "punycode": "1.3.2", "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } } }, "use": { @@ -7363,6 +7971,12 @@ "binary-extensions": "^1.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "optional": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -7475,6 +8089,14 @@ "webpack-sources": "^1.4.1" }, "dependencies": { + "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" + } + }, "loader-utils": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", diff --git a/nextjs/package.json b/nextjs/package.json index 2c4cf859d..6bc08c5c9 100644 --- a/nextjs/package.json +++ b/nextjs/package.json @@ -11,12 +11,25 @@ "aws-amplify": "^3.3.8", "aws-appsync": "^4.0.1", "next": "10.0.2", + "primeflex": "^2.0.0", + "primeicons": "^4.1.0", + "primereact": "^5.0.1", "react": "17.0.1", - "react-dom": "17.0.1" + "react-dom": "17.0.1", + "react-transition-group": "^4.4.1", + "sass": "^1.29.0", + "typeface-nunito-sans": "^1.1.13" }, "devDependencies": { + "@fullhuman/postcss-purgecss": "^3.0.0", "@types/node": "^14.14.9", "@types/react": "^16.9.56", + "@types/react-transition-group": "^4.4.0", + "autoprefixer": "^10.0.2", + "postcss": "^8.1.8", + "tailwindcss": "^2.0.1", + "tailwindcss-animatecss": "^1.0.7", + "tailwindcss-transforms": "^2.2.0", "typescript": "^4.1.2" } } diff --git a/nextjs/pages/_app.tsx b/nextjs/pages/_app.tsx index 4bba0e032..acfb1dd1f 100644 --- a/nextjs/pages/_app.tsx +++ b/nextjs/pages/_app.tsx @@ -1,19 +1,164 @@ -import '../styles/styles.css'; -import '../configureAmplify'; -import Link from 'next/link'; +import React, { useState, useEffect, useRef } from "react"; +import classNames from "classnames"; +import { CSSTransition } from "react-transition-group"; +import Link from "next/link"; + +import "../configureAmplify"; +import "primereact/resources/themes/vela-purple/theme.css"; +import "primereact/resources/primereact.min.css"; +import "primeicons/primeicons.css"; +import "primeflex/primeflex.css"; +import "../layout/layout.scss"; +import "../styles/globals.css"; + +import { AppTopbar } from "../layout/AppTopbar"; +import { AppMenu } from "../layout/AppMenu"; function MyApp({ Component, pageProps }) { + const [layoutMode, setLayoutMode] = useState("static"); + const [layoutColorMode, setLayoutColorMode] = useState("dark"); + const [staticMenuInactive, setStaticMenuInactive] = useState(false); + const [overlayMenuActive, setOverlayMenuActive] = useState(false); + const [mobileMenuActive, setMobileMenuActive] = useState(false); + const [inputStyle, setInputStyle] = useState("outlined"); + const [ripple, setRipple] = useState(false); + const sidebar = useRef(); + let menuClick = false; + + useEffect(() => { + if (mobileMenuActive) { + addClass(document.body, "body-overflow-hidden"); + } else { + removeClass(document.body, "body-overflow-hidden"); + } + }, [mobileMenuActive]); + + const onInputStyleChange = (inputStyle) => { + setInputStyle(inputStyle); + }; + + const onLayoutModeChange = (mode) => { + setLayoutMode(mode); + }; + + const onColorModeChange = (mode) => { + setLayoutColorMode(mode); + }; + + const onWrapperClick = (event) => { + if (!menuClick) { + setOverlayMenuActive(false); + setMobileMenuActive(false); + } + menuClick = false; + }; + + const onToggleMenu = (event) => { + menuClick = true; + + if (isDesktop()) { + if (layoutMode === "overlay") { + setOverlayMenuActive((prevState) => !prevState); + } else if (layoutMode === "static") { + setStaticMenuInactive((prevState) => !prevState); + } + } else { + setMobileMenuActive((prevState) => !prevState); + } + event.preventDefault(); + }; + + const onSidebarClick = () => { + menuClick = true; + }; + + const onMenuItemClick = (event) => { + if (!event.item.items) { + setOverlayMenuActive(false); + setMobileMenuActive(false); + } + }; + + const addClass = (element, className) => { + if (element.classList) element.classList.add(className); + else element.className += " " + className; + }; + + const removeClass = (element, className) => { + if (element.classList) element.classList.remove(className); + else + element.className = element.className.replace( + new RegExp( + "(^|\\b)" + className.split(" ").join("|") + "(\\b|$)", + "gi" + ), + " " + ); + }; + + const isDesktop = () => { + return typeof window !== "undefined" ? window.innerWidth > 1024 : false; + }; + + const isSidebarVisible = () => { + if (isDesktop()) { + if (layoutMode === "static") return !staticMenuInactive; + else if (layoutMode === "overlay") return overlayMenuActive; + else return true; + } + + return true; + }; + + const logo = + layoutColorMode === "dark" + ? "/assets/layout/images/logo.svg" + : "/assets/layout/images/logo.svg"; + + const wrapperClass = classNames("layout-wrapper", { + "layout-overlay": layoutMode === "overlay", + "layout-static": layoutMode === "static", + "layout-static-sidebar-inactive": + staticMenuInactive && layoutMode === "static", + "layout-overlay-sidebar-active": + overlayMenuActive && layoutMode === "overlay", + "layout-mobile-sidebar-active": mobileMenuActive, + "p-input-filled": inputStyle === "filled", + "p-ripple-disabled": ripple === false, + }); + + const sidebarClassName = classNames("layout-sidebar", { + "layout-sidebar-dark": layoutColorMode === "dark", + "layout-sidebar-light": layoutColorMode === "light", + }); + return ( -
    - - +
    + + + +
    +
    + + Logo + +
    + +
    +
    + +
    + +
    ); } diff --git a/nextjs/pages/posts.tsx b/nextjs/pages/blog.tsx similarity index 77% rename from nextjs/pages/posts.tsx rename to nextjs/pages/blog.tsx index f4479f9f0..680a8cd87 100644 --- a/nextjs/pages/posts.tsx +++ b/nextjs/pages/blog.tsx @@ -8,9 +8,11 @@ import AWSAppSyncClient, { AUTH_TYPE } from "aws-appsync"; const listPosts = gql` query listPosts { listPosts { - id - title - content + items { + post_title + id + post_content + } } } `; @@ -34,8 +36,8 @@ export default function Posts() { const postData: any = await client.query({ query: listPosts, }); - - setPosts(postData.data.listPosts); + // console.log(postData.data.listPosts.items); + setPosts(postData.data.listPosts.items); } }, []); @@ -43,8 +45,8 @@ export default function Posts() {

    Posts

    {posts.map((post) => ( - - {post.title} + + {post.post_title} ))}
    diff --git a/nextjs/pages/blog/[id].tsx b/nextjs/pages/blog/[id].tsx new file mode 100644 index 000000000..2f245c357 --- /dev/null +++ b/nextjs/pages/blog/[id].tsx @@ -0,0 +1,80 @@ +import { API } from "aws-amplify"; +import { useRouter } from "next/router"; +import config from "../../configureAmplify"; +import gql from "graphql-tag"; +import AWSAppSyncClient, { AUTH_TYPE } from "aws-appsync"; + +const getPost = gql` + query getPost($id: ID!) { + getPost(id: $id) { + id + post_title + post_content + } + } +`; + +const listPosts = gql` + query listPosts { + listPosts { + items { + post_title + id + post_content + } + } + } +`; +const client = new AWSAppSyncClient({ + url: config.aws_appsync_graphqlEndpoint, + region: config.aws_appsync_region, + auth: { + type: AUTH_TYPE.API_KEY, + apiKey: config.aws_appsync_apiKey, + }, + disableOffline: true, + offlineConfig: { + keyPrefix: "public", + }, +}); + +export default function Post({ post }) { + const router = useRouter(); + if (router.isFallback) { + return

    Loading ...

    ; + } + return ( +
    +

    Post

    +

    {post.post_title}

    +

    {post.post_content}

    +
    + ); +} + +export async function getStaticPaths() { + const postData: any = await client.query({ + query: listPosts, + }); + console.log(postData); + const paths: any = postData.data.listPosts.items.map((post) => ({ + params: { id: post.id }, + })); + return { + paths, + fallback: true, + }; +} + +export async function getStaticProps({ params }) { + const { id } = params; + const postData: any = await client.query({ + query: getPost, + variables: { id: id }, + }); + return { + props: { + post: postData.data.getPost, + }, + }; +} diff --git a/nextjs/pages/index.tsx b/nextjs/pages/index.tsx index d5745bc67..7deecb6b0 100644 --- a/nextjs/pages/index.tsx +++ b/nextjs/pages/index.tsx @@ -1,65 +1,35 @@ -import Head from 'next/head'; -import styles from '../styles/Home.module.css'; +import Head from "next/head"; export default function Home() { return ( -
    +
    Create Next App -
    -

    - Welcome to Next.js! -

    - -

    - Get started by editing{' '} - pages/index.js -

    - - ); } diff --git a/nextjs/pages/post/[id].tsx b/nextjs/pages/post/[id].tsx deleted file mode 100644 index 356a7be38..000000000 --- a/nextjs/pages/post/[id].tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { API } from 'aws-amplify'; -import { useRouter } from 'next/router'; -import '../../configureAmplify'; - -const getPost = ` - query getPostById($postId: String!) { - getPostById(postId: $postId) { - id title content - } - } -`; - -const listPosts = ` - query listPosts { - listPosts { - id title content - } - } -`; - -export default function Post({ post }) { - const router = useRouter(); - if (router.isFallback) { - return

    Loading ...

    ; - } - return ( -
    -

    Post

    -

    {post.title}

    -

    {post.content}

    -
    - ); -} - -export async function getStaticPaths() { - const postData: any = await API.graphql({ - query: listPosts, - }); - const paths: any = postData.data.listPosts.map((post) => ({ - params: { id: post.id }, - })); - return { - paths, - fallback: true, - }; -} - -export async function getStaticProps({ params }) { - const { id } = params; - const postData: any = await API.graphql({ - query: getPost, - variables: { postId: id }, - }); - return { - props: { - post: postData.data.getPostById, - }, - }; -} diff --git a/nextjs/postcss.config.js b/nextjs/postcss.config.js new file mode 100644 index 000000000..ea5b83829 --- /dev/null +++ b/nextjs/postcss.config.js @@ -0,0 +1,20 @@ +module.exports = { + plugins: [ + "tailwindcss", + [ + "@fullhuman/postcss-purgecss", + process.env.NODE_ENV === "production" + ? { + // the paths to all template files + content: [ + "./pages/**/*.{js,jsx,ts,tsx}", + "./components/**/*.{js,jsx,ts,tsx}", + ], + // function used to extract class names from the templates + defaultExtractor: (content) => + content.match(/[\w-/:]+(? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nextjs/public/assets/layout/images/preloader.gif b/nextjs/public/assets/layout/images/preloader.gif new file mode 100644 index 0000000000000000000000000000000000000000..510a13228c0605c97bf3f8c112fd53d8d6d76023 GIT binary patch literal 10756 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 literal 0 HcmV?d00001 diff --git a/nextjs/public/favicon.ico b/nextjs/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a614a31e44745fac24459b113a11e079c0e19cbe GIT binary patch literal 1225 zcmV;)1UCDLP)aQP;ly#o`xZBfi3gI0H}O=_D^^b?dL&#e0&x_%X?gYdegcmgL3H zF*+mn*(Ha2@okx3Am+dIqmy9#nzI%rZ-hHedH+ zeUcX!m08-C#DNQtVS01%h+8qak*js_T{}*}FBpJUAh5h?P-baaX6YmN7I!uya24Jz zv-B{WkQXQ6X8c~U0#D!%oQS`0at8u%BW6c316Y{k#l}`h*TExM`hK)~HAZhuO`u0G zs&NR9V{F{{y!d_qWqj^!*!Kz@HCf2>=okffKH98AO`yNteBFkdF*V6Ux{hS&05)~l z;iyQK(C??j=a(A3+PkO5=Z)tZ1SK7u^jTzeOKnjN;iZjCJ->H2!{~1tBzZAWXwzp0 z36xn1bFd=Gi_uA5TqA_@KSA8g%=mLPmX=xiCyh2Nvvf<67aN3AZkkXew?FMbmW_}SW^U5Xds9_)^KzeLFCl(>V{Ip}TAjwa*yG8*4R7Ddj0iy#XuE0YEBfoCVJwUg9J9< zrg$kCL{zKA*j4dve7#B#mv-#Lj7Z`Da;z(}bXy18>G))jK$)dmu|-g;F>S`{T1;$( zqO32YeU1%lAzWxK!;XpvacL`rdJsuoj7sw20h}X<)iGh85qGyI$%}6UMFSN*EoR|+ zT#ok~d*>S)N%dkvE3{!x#eyU+rbnAz;jXzISJ!usPM6ZU-OUiRAH!ctkB4}SevWaiklzEst%;C=7csvIP8S}@(v>6eJ7NNn z!~;t}!fGvW00000NkvXXu0mjf2cAs0 literal 0 HcmV?d00001 diff --git a/nextjs/public/manifest.json b/nextjs/public/manifest.json new file mode 100644 index 000000000..ef19ec243 --- /dev/null +++ b/nextjs/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": "./index.html", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/nextjs/public/nx-logo-white.svg b/nextjs/public/nx-logo-white.svg deleted file mode 100644 index 577944247..000000000 --- a/nextjs/public/nx-logo-white.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/nextjs/public/star.svg b/nextjs/public/star.svg deleted file mode 100644 index 901053d38..000000000 --- a/nextjs/public/star.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/nextjs/src/aws-video-exports.js b/nextjs/src/aws-video-exports.js new file mode 100644 index 000000000..4e1a2e27e --- /dev/null +++ b/nextjs/src/aws-video-exports.js @@ -0,0 +1,8 @@ +// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten. + +const awsvideoconfig = { + "awsInputVideo": "ccdvod-dev-input-xzkln6vc", + "awsOutputVideo": "d3lbx3hw011qkz.cloudfront.net" +}; + +export default awsvideoconfig; \ No newline at end of file diff --git a/nextjs/src/graphql/schema.json b/nextjs/src/graphql/schema.json new file mode 100644 index 000000000..eabe31a1b --- /dev/null +++ b/nextjs/src/graphql/schema.json @@ -0,0 +1,6226 @@ +{ + "data" : { + "__schema" : { + "queryType" : { + "name" : "Query" + }, + "mutationType" : { + "name" : "Mutation" + }, + "subscriptionType" : { + "name" : "Subscription" + }, + "types" : [ { + "kind" : "OBJECT", + "name" : "Query", + "description" : null, + "fields" : [ { + "name" : "searchPosts", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "sort", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostSortInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "from", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "SearchablePostConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getBlog", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listBlogs", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelBlogConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getPost", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listPosts", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelPostConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getComment", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listComments", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelCommentConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getCategory", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listCategorys", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelCategoryConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getVodAsset", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listVodAssets", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelvodAssetConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listVideoObjects", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelvideoObjectConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getVideoObject", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "SearchablePostConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "total", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Post", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_type", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_title", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_tags", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_content", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_excerpt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_status", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "comment_status", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ping_status", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "comment_count", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_featured_image", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "blog", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "comments", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "sortDirection", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelSortDirection", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelCommentConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "category", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "sortDirection", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelSortDirection", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelCategoryConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "ID", + "description" : "Built-in ID", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "String", + "description" : "Built-in String", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "Boolean", + "description" : "Built-in Boolean", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "Int", + "description" : "Built-in Int", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Blog", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "title", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "posts", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "sortDirection", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelSortDirection", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelPostConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelPostConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_type", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_name", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_tags", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_content", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_excerpt", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ping_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_count", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIntInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_featured_image", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "le", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ge", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "contains", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "notContains", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "between", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "beginsWith", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "size", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelSizeInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "description" : null, + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "binary", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "binarySet", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "bool", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "list", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "map", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "number", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "numberSet", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "string", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "stringSet", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "_null", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelSizeInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "le", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ge", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "between", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "le", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ge", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "contains", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "notContains", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "between", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "beginsWith", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "size", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelSizeInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelIntInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "le", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ge", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "between", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "ModelSortDirection", + "description" : null, + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "ASC", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "DESC", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "description" : "The `AWSDateTime` scalar type provided by AWS AppSync, represents a valid ***extended*** [ISO 8601 DateTime](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) string. In other words, this scalar type accepts datetime strings of the form `YYYY-MM-DDThh:mm:ss.SSSZ`. The scalar can also accept \"negative years\" of the form `-YYYY` which correspond to years before `0000`. For example, \"**-2017-01-01T00:00Z**\" and \"**-9999-01-01T00:00Z**\" are both valid datetime strings. The field after the two digit seconds field is a nanoseconds field. It can accept between 1 and 9 digits. So, for example, \"**1970-01-01T12:00:00.2Z**\", \"**1970-01-01T12:00:00.277Z**\" and \"**1970-01-01T12:00:00.123456789Z**\" are all valid datetime strings. The seconds and nanoseconds fields are optional (the seconds field must be specified if the nanoseconds field is to be used). The [time zone offset](https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators) is compulsory for this scalar. The time zone offset must either be `Z` (representing the UTC time zone) or be in the format `±hh:mm:ss`. The seconds field in the timezone offset will be considered valid even though it is not part of the ISO 8601 standard.", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelCommentConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Comment", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "content", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "owner", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "content", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelCategoryConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Category", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "name", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableIDFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_type", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_name", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_tags", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_content", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_excerpt", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableBooleanFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableBooleanFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ping_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableBooleanFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_count", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableIntFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_featured_image", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchableIDFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "match", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "matchPhrase", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "matchPhrasePrefix", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "multiMatch", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "exists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "wildcard", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "regexp", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "range", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "match", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "matchPhrase", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "matchPhrasePrefix", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "multiMatch", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "exists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "wildcard", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "regexp", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "range", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchableBooleanFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchableIntFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "range", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostSortInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "field", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "SearchablePostSortableFields", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "direction", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "SearchableSortDirection", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "SearchablePostSortableFields", + "description" : null, + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "id", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_type", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_title", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_name", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_tags", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_content", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_excerpt", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_status", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "comment_status", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ping_status", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "comment_count", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_featured_image", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "SearchableSortDirection", + "description" : null, + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "asc", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "desc", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelBlogConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "vodAsset", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "title", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "video", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "videoObject", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "token", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelvodAssetConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "description", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelvideoObjectConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "token", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Mutation", + "description" : null, + "fields" : [ { + "name" : "createBlog", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreateBlogInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updateBlog", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdateBlogInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deleteBlog", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeleteBlogInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createPost", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreatePostInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatePost", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdatePostInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deletePost", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeletePostInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createComment", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreateCommentInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updateComment", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdateCommentInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deleteComment", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeleteCommentInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createCategory", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreateCategoryInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updateCategory", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdateCategoryInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deleteCategory", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeleteCategoryInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createVodAsset", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreateVodAssetInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updateVodAsset", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdateVodAssetInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deleteVodAsset", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeleteVodAssetInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createVideoObject", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreateVideoObjectInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updateVideoObject", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdateVideoObjectInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deleteVideoObject", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeleteVideoObjectInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreateBlogInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdateBlogInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeleteBlogInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreatePostInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_type", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "post_title", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "post_name", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "post_tags", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + } + }, + "defaultValue" : null + }, { + "name" : "post_content", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_excerpt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ping_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_count", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_featured_image", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "postBlogId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "post_type", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_name", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_tags", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_content", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_excerpt", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ping_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_count", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIntInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_featured_image", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdatePostInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "post_type", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_title", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_name", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_tags", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + } + }, + "defaultValue" : null + }, { + "name" : "post_content", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_excerpt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ping_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_count", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_featured_image", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "postBlogId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeletePostInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreateCommentInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "content", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "commentPostId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "content", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdateCommentInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "content", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "commentPostId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeleteCommentInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreateCategoryInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "name", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "categoryPostId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "name", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdateCategoryInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "name", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "categoryPostId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeleteCategoryInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreateVodAssetInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "description", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "vodAssetVideoId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "description", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdateVodAssetInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "description", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "vodAssetVideoId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeleteVodAssetInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreateVideoObjectInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "token", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "token", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdateVideoObjectInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "token", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeleteVideoObjectInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Subscription", + "description" : null, + "fields" : [ { + "name" : "onCreateVodAsset", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onUpdateVodAsset", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onDeleteVodAsset", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onCreateComment", + "description" : null, + "args" : [ { + "name" : "owner", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onUpdateComment", + "description" : null, + "args" : [ { + "name" : "owner", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onDeleteComment", + "description" : null, + "args" : [ { + "name" : "owner", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onCreateCategory", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onUpdateCategory", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onDeleteCategory", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onCreateVideoObject", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onUpdateVideoObject", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onDeleteVideoObject", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchableFloatFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "range", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "Float", + "description" : "Built-in Float", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelFloatInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "le", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ge", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "between", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__Schema", + "description" : "A GraphQL Introspection defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, the entry points for query, mutation, and subscription operations.", + "fields" : [ { + "name" : "types", + "description" : "A list of all types supported by this server.", + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "queryType", + "description" : "The type that query operations will be rooted at.", + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "mutationType", + "description" : "If this server supports mutation, the type that mutation operations will be rooted at.", + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "directives", + "description" : "'A list of all directives supported by this server.", + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Directive", + "ofType" : null + } + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "subscriptionType", + "description" : "'If this server support subscription, the type that subscription operations will be rooted at.", + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__Type", + "description" : null, + "fields" : [ { + "name" : "kind", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "ENUM", + "name" : "__TypeKind", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "fields", + "description" : null, + "args" : [ { + "name" : "includeDeprecated", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : "false" + } ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Field", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "interfaces", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "possibleTypes", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "enumValues", + "description" : null, + "args" : [ { + "name" : "includeDeprecated", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : "false" + } ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__EnumValue", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "inputFields", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__InputValue", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ofType", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "__TypeKind", + "description" : "An enum describing what kind of type a given __Type is", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "SCALAR", + "description" : "Indicates this type is a scalar.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "OBJECT", + "description" : "Indicates this type is an object. `fields` and `interfaces` are valid fields.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INTERFACE", + "description" : "Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "UNION", + "description" : "Indicates this type is a union. `possibleTypes` is a valid field.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ENUM", + "description" : "Indicates this type is an enum. `enumValues` is a valid field.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INPUT_OBJECT", + "description" : "Indicates this type is an input object. `inputFields` is a valid field.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "LIST", + "description" : "Indicates this type is a list. `ofType` is a valid field.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "NON_NULL", + "description" : "Indicates this type is a non-null. `ofType` is a valid field.", + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__Field", + "description" : null, + "fields" : [ { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "args", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__InputValue", + "ofType" : null + } + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "type", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "isDeprecated", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deprecationReason", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__InputValue", + "description" : null, + "fields" : [ { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "type", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "defaultValue", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__EnumValue", + "description" : null, + "fields" : [ { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "isDeprecated", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deprecationReason", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__Directive", + "description" : null, + "fields" : [ { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "locations", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "ENUM", + "name" : "__DirectiveLocation", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "args", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__InputValue", + "ofType" : null + } + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onOperation", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : true, + "deprecationReason" : "Use `locations`." + }, { + "name" : "onFragment", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : true, + "deprecationReason" : "Use `locations`." + }, { + "name" : "onField", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : true, + "deprecationReason" : "Use `locations`." + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "__DirectiveLocation", + "description" : "An enum describing valid locations where a directive can be placed", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "QUERY", + "description" : "Indicates the directive is valid on queries.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "MUTATION", + "description" : "Indicates the directive is valid on mutations.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "FIELD", + "description" : "Indicates the directive is valid on fields.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "FRAGMENT_DEFINITION", + "description" : "Indicates the directive is valid on fragment definitions.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "FRAGMENT_SPREAD", + "description" : "Indicates the directive is valid on fragment spreads.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INLINE_FRAGMENT", + "description" : "Indicates the directive is valid on inline fragments.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "SCHEMA", + "description" : "Indicates the directive is valid on a schema SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "SCALAR", + "description" : "Indicates the directive is valid on a scalar SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "OBJECT", + "description" : "Indicates the directive is valid on an object SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "FIELD_DEFINITION", + "description" : "Indicates the directive is valid on a field SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ARGUMENT_DEFINITION", + "description" : "Indicates the directive is valid on a field argument SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INTERFACE", + "description" : "Indicates the directive is valid on an interface SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "UNION", + "description" : "Indicates the directive is valid on an union SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ENUM", + "description" : "Indicates the directive is valid on an enum SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ENUM_VALUE", + "description" : "Indicates the directive is valid on an enum value SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INPUT_OBJECT", + "description" : "Indicates the directive is valid on an input object SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INPUT_FIELD_DEFINITION", + "description" : "Indicates the directive is valid on an input object field SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + } ], + "directives" : [ { + "name" : "include", + "description" : "Directs the executor to include this field or fragment only when the `if` argument is true", + "locations" : [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], + "args" : [ { + "name" : "if", + "description" : "Included when true.", + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : true, + "onField" : true + }, { + "name" : "skip", + "description" : "Directs the executor to skip this field or fragment when the `if`'argument is true.", + "locations" : [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], + "args" : [ { + "name" : "if", + "description" : "Skipped when true.", + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : true, + "onField" : true + }, { + "name" : "defer", + "description" : "This directive allows results to be deferred during execution", + "locations" : [ "FIELD" ], + "args" : [ ], + "onOperation" : false, + "onFragment" : false, + "onField" : true + }, { + "name" : "aws_subscribe", + "description" : "Tells the service which mutation triggers this subscription.", + "locations" : [ "FIELD_DEFINITION" ], + "args" : [ { + "name" : "mutations", + "description" : "List of mutations which will trigger this subscription when they are called.", + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_publish", + "description" : "Tells the service which subscriptions will be published to when this mutation is called. This directive is deprecated use @aws_susbscribe directive instead.", + "locations" : [ "FIELD_DEFINITION" ], + "args" : [ { + "name" : "subscriptions", + "description" : "List of subscriptions which will be published to when this mutation is called.", + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_iam", + "description" : "Tells the service this field/object has access authorized by sigv4 signing.", + "locations" : [ "OBJECT", "FIELD_DEFINITION" ], + "args" : [ ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_oidc", + "description" : "Tells the service this field/object has access authorized by an OIDC token.", + "locations" : [ "OBJECT", "FIELD_DEFINITION" ], + "args" : [ ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_api_key", + "description" : "Tells the service this field/object has access authorized by an API key.", + "locations" : [ "OBJECT", "FIELD_DEFINITION" ], + "args" : [ ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_auth", + "description" : "Directs the schema to enforce authorization on a field", + "locations" : [ "FIELD_DEFINITION" ], + "args" : [ { + "name" : "cognito_groups", + "description" : "List of cognito user pool groups which have access on this field", + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "deprecated", + "description" : null, + "locations" : [ "FIELD_DEFINITION", "ENUM_VALUE" ], + "args" : [ { + "name" : "reason", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : "\"No longer supported\"" + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_cognito_user_pools", + "description" : "Tells the service this field/object has access authorized by a Cognito User Pools token.", + "locations" : [ "OBJECT", "FIELD_DEFINITION" ], + "args" : [ { + "name" : "cognito_groups", + "description" : "List of cognito user pool groups which have access on this field", + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + } ] + } + } +} \ No newline at end of file diff --git a/nextjs/styles/Home.module.css b/nextjs/styles/Home.module.css deleted file mode 100644 index 42e7e6009..000000000 --- a/nextjs/styles/Home.module.css +++ /dev/null @@ -1,122 +0,0 @@ -.container { - min-height: 100vh; - padding: 0 0.5rem; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.main { - padding: 5rem 0; - flex: 1; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.footer { - width: 100%; - height: 100px; - border-top: 1px solid #eaeaea; - display: flex; - justify-content: center; - align-items: center; -} - -.footer img { - margin-left: 0.5rem; -} - -.footer a { - display: flex; - justify-content: center; - align-items: center; -} - -.title a { - color: #0070f3; - text-decoration: none; -} - -.title a:hover, -.title a:focus, -.title a:active { - text-decoration: underline; -} - -.title { - margin: 0; - line-height: 1.15; - font-size: 4rem; -} - -.title, -.description { - text-align: center; -} - -.description { - line-height: 1.5; - font-size: 1.5rem; -} - -.code { - background: #fafafa; - border-radius: 5px; - padding: 0.75rem; - font-size: 1.1rem; - font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, - Bitstream Vera Sans Mono, Courier New, monospace; -} - -.grid { - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - max-width: 800px; - margin-top: 3rem; -} - -.card { - margin: 1rem; - flex-basis: 45%; - padding: 1.5rem; - text-align: left; - color: inherit; - text-decoration: none; - border: 1px solid #eaeaea; - border-radius: 10px; - transition: color 0.15s ease, border-color 0.15s ease; -} - -.card:hover, -.card:focus, -.card:active { - color: #0070f3; - border-color: #0070f3; -} - -.card h3 { - margin: 0 0 1rem 0; - font-size: 1.5rem; -} - -.card p { - margin: 0; - font-size: 1.25rem; - line-height: 1.5; -} - -.logo { - height: 1em; -} - -@media (max-width: 600px) { - .grid { - width: 100%; - flex-direction: column; - } -} diff --git a/nextjs/styles/globals.css b/nextjs/styles/globals.css new file mode 100644 index 000000000..962045c44 --- /dev/null +++ b/nextjs/styles/globals.css @@ -0,0 +1,10 @@ +/* purgecss start ignore */ +@tailwind base; +@tailwind components; +/* purgecss end ignore */ +@tailwind utilities; + +@font-face { + font-family: nunito; + src: url(../node_modules/typeface-nunito-sans/files/nunito-sans-latin-600.woff); +} diff --git a/nextjs/styles/styles.css b/nextjs/styles/styles.css deleted file mode 100644 index 5d5777c1c..000000000 --- a/nextjs/styles/styles.css +++ /dev/null @@ -1,128 +0,0 @@ -.app { - font-family: sans-serif; - min-width: 300px; - max-width: 600px; - margin: 50px auto; -} - -.app .gutter-left { - margin-left: 9px; -} - -.app .col-span-2 { - grid-column: span 2; -} - -.app .flex { - display: flex; - align-items: center; - justify-content: center; -} - -.app header { - background-color: #143055; - color: white; - padding: 5px; - border-radius: 3px; -} - -.app main { - padding: 0 36px; -} - -.app p { - text-align: center; -} - -.app h1 { - text-align: center; - margin-left: 18px; - font-size: 24px; -} - -.app h2 { - text-align: center; - font-size: 20px; - margin: 40px 0 10px 0; -} - -.app .resources { - text-align: center; - list-style: none; - padding: 0; - display: grid; - grid-gap: 9px; - grid-template-columns: 1fr 1fr; -} - -.app .resource { - color: #0094ba; - height: 36px; - background-color: rgba(0, 0, 0, 0); - border: 1px solid rgba(0, 0, 0, 0.12); - border-radius: 4px; - padding: 3px 9px; - text-decoration: none; -} - -.app .resource:hover { - background-color: rgba(68, 138, 255, 0.04); -} - -.app pre { - padding: 9px; - border-radius: 4px; - background-color: black; - color: #eee; -} - -.app details { - border-radius: 4px; - color: #333; - background-color: rgba(0, 0, 0, 0); - border: 1px solid rgba(0, 0, 0, 0.12); - padding: 3px 9px; - margin-bottom: 9px; -} - -.app summary { - outline: none; - height: 36px; - line-height: 36px; -} - -.app .github-star-container { - margin-top: 12px; - line-height: 20px; -} - -.app .github-star-container a { - display: flex; - align-items: center; - text-decoration: none; - color: #333; -} - -.app .github-star-badge { - color: #24292e; - display: flex; - align-items: center; - font-size: 12px; - padding: 3px 10px; - border: 1px solid rgba(27, 31, 35, 0.2); - border-radius: 3px; - background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%); - margin-left: 4px; - font-weight: 600; -} - -.app .github-star-badge:hover { - background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%); - border-color: rgba(27, 31, 35, 0.35); - background-position: -0.5em; -} -.app .github-star-badge .material-icons { - height: 16px; - width: 16px; - margin-right: 4px; -} diff --git a/nextjs/tailwind.config.js b/nextjs/tailwind.config.js new file mode 100644 index 000000000..5d3610b32 --- /dev/null +++ b/nextjs/tailwind.config.js @@ -0,0 +1,134 @@ +module.exports = { + purge: [], + darkMode: false, // or 'media' or 'class' + theme: { + fontFamily: { + sans: ["nunito"], + serif: ["nunito"], + mono: ["nunito"], + }, + extend: { + colors: { + "ccd-primary": { + "050": "#EFE4F4", + 100: "#D7BCE3", + 200: "#BD8FD1", + 300: "#A362BE", + 400: "#8F41B0", + 500: "#7B1FA2", + 600: "#731B9A", + 700: "#681790", + 800: "#5E1286", + 900: "#4B0A75", + }, + "ccd-secondary": { + "050": "#FFEBEC", + 100: "#FFCDCF", + 200: "#FFACAF", + 300: "#FF8B8F", + 400: "#FF7277", + 500: "#FF595F", + 600: "#FF5157", + 700: "#FF484D", + 800: "#FF3E43", + 900: "#FF2E32", + }, + "ccd-social": { + twitter: "#1da1f1", + discord: "#7289da", + github: "#23292d", + youtube: "#ff0000", + slack: "#e01e5a", + linkedin: "#1173b0", + facebook: "#4166b2", + instagram: "#f00574", + hackernews: "#ff6500", + reddit: "#ff4500", + }, + }, + }, + transform: { + // defaults to this value + none: "none", + }, + transformOrigin: { + // defaults to these values + t: "top", + tr: "top right", + r: "right", + br: "bottom right", + b: "bottom", + bl: "bottom left", + l: "left", + tl: "top left", + }, + translate: { + // defaults to {} + "1/2": "50%", + full: "100%", + "right-up": ["100%", "-100%"], + "3d": ["40px", "-60px", "-130px"], + }, + scale: { + // defaults to {} + 90: "0.9", + 100: "1", + 110: "1.1", + "-100": "-1", + "stretched-x": ["2", "0.5"], + "stretched-y": ["0.5", "2"], + "3d": ["0.5", "1", "2"], + }, + rotate: { + // defaults to {} + 90: "90deg", + 180: "180deg", + 270: "270deg", + "3d": ["0", "1", "0.5", "45deg"], + }, + skew: { + // defaults to {} + "-5": "-5deg", + 5: "5deg", + }, + perspective: { + // defaults to {} + none: "none", + 250: "250px", + 500: "500px", + 750: "750px", + 1000: "1000px", + }, + perspectiveOrigin: { + // defaults to these values + t: "top", + tr: "top right", + r: "right", + br: "bottom right", + b: "bottom", + bl: "bottom left", + l: "left", + tl: "top left", + }, + }, + variants: { + // all the following default to ['responsive'] + transform: ["responsive"], + transformOrigin: ["responsive"], + translate: ["responsive"], + scale: ["responsive"], + rotate: ["responsive"], + skew: ["responsive"], + perspective: ["responsive"], + perspectiveOrigin: ["responsive"], + transformStyle: ["responsive"], + backfaceVisibility: ["responsive"], + transformBox: ["responsive"], + }, + plugins: [ + require("tailwindcss-transforms")({ + "3d": false, // defaults to false + }), + require("tailwindcss-animatecss"), + ], +}; From 1c681133e06f6b21018d6e9401b5176f64abcdfb Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Sat, 21 Nov 2020 11:58:51 -0500 Subject: [PATCH 2/7] Squashed commit of the following: commit 21714a1451e5b52f6c5c3aa1e20df226ad137cb2 Author: Alex Patterson Date: Sat Nov 21 11:57:58 2020 -0500 allow for regen commit 935610aebba43e1fd6da0a19eca93cee77c18748 Author: Alex Patterson Date: Sat Nov 21 11:56:48 2020 -0500 allow exports commit 08a52b5be97826a77cb5fbb5d754c22cd26c233c Author: Alex Patterson Date: Sat Nov 21 11:28:14 2020 -0500 add updated src location commit f442bfd04f97b35cfbc6067c3b3baac43870f7d5 Author: Alex Patterson Date: Sat Nov 21 11:06:36 2020 -0500 remove TopPosts commit 4c2695e97943a8a854de4a9d6cf777e144f4b9d7 Author: Alex Patterson Date: Sat Nov 21 10:28:00 2020 -0500 update font/colors commit effecb3faa79b9ce72bb0a9cc12eca1eae776460 Author: Alex Patterson Date: Sat Nov 21 10:27:44 2020 -0500 change to ccd commit 56cb832573ce8ed342a9085a2ff2f2a5eb5758e3 Merge: 57785b1 7208c36 Author: Alex Patterson Date: Sat Nov 21 10:02:53 2020 -0500 Merge branch 'feature/tailwind' into dev commit 57785b1b7e19d3a91e6c14746626397513c24f51 Author: Alex Patterson Date: Sat Nov 21 10:02:45 2020 -0500 add nunito commit 7208c36c37720e4c60e3967178c9fa48fd4e33d8 Author: Alex Patterson Date: Sat Nov 21 09:59:25 2020 -0500 added tailwind commit 628e4f29183de1cc4a2bb3155a5c5d124ea8c210 Author: Alex Patterson Date: Sat Nov 21 09:38:15 2020 -0500 functioning header commit f821ff43695f220f949e50c5b8cd8aa7a95725de Author: Alex Patterson Date: Sat Nov 21 07:45:13 2020 -0500 initial topbar working commit 67b155147fdd541d91a15b37dfc24eae09edf1f1 Author: Alex Patterson Date: Fri Nov 20 20:17:47 2020 -0500 vela commit 10ae5b24c0eed5216616ed8b7a8f19b7cdbab570 Author: Alex Patterson Date: Fri Nov 20 20:16:34 2020 -0500 add prime react styles commit 6ebf249cd7eaa806c303ac81d1558ada33a6097b Author: Alex Patterson Date: Fri Nov 20 20:16:26 2020 -0500 remove console commit b5ffecd128866c4e5b9d4259ce460c12fee01e61 Author: Alex Patterson Date: Fri Nov 20 20:01:39 2020 -0500 working example using API KEY --- .gitignore | 5 +- .graphqlconfig.yml | 8 +- amplify/.config/project-config.json | 2 +- nextjs/configureAmplify.ts | 2 +- nextjs/pages/blog/[id].tsx | 4 + {src => nextjs/src}/graphql/mutations.js | 60 +- {src => nextjs/src}/graphql/queries.js | 140 +- nextjs/src/graphql/schema.json | 98 +- {src => nextjs/src}/graphql/subscriptions.js | 132 +- src/aws-video-exports.js | 8 - src/graphql/schema.json | 6165 ------------------ 11 files changed, 240 insertions(+), 6384 deletions(-) rename {src => nextjs/src}/graphql/mutations.js (97%) rename {src => nextjs/src}/graphql/queries.js (96%) rename {src => nextjs/src}/graphql/subscriptions.js (96%) delete mode 100644 src/aws-video-exports.js delete mode 100644 src/graphql/schema.json diff --git a/.gitignore b/.gitignore index 74cb94d6a..7d7436db0 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,6 @@ amplify/backend/awscloudformation build/ dist/ node_modules/ -aws-exports.js awsconfiguration.json amplifyconfiguration.json amplify-build-config.json @@ -15,5 +14,5 @@ amplify-gradle-config.json amplifytools.xcconfig amplify/team-provider-info.json -# cdk -src/cdk-exports.json \ No newline at end of file +#PUT THIS BACK FOR PUBLIC REPO +aws-exports.js \ No newline at end of file diff --git a/.graphqlconfig.yml b/.graphqlconfig.yml index 09853c4cb..0984f7932 100644 --- a/.graphqlconfig.yml +++ b/.graphqlconfig.yml @@ -1,15 +1,15 @@ projects: ccd: - schemaPath: src/graphql/schema.json + schemaPath: nextjs/src/graphql/schema.json includes: - - src/graphql/**/*.js + - nextjs/src/graphql/**/*.js excludes: - ./amplify/** extensions: amplify: codeGenTarget: javascript - generatedFileName: '' - docsFilePath: src/graphql + generatedFileName: "" + docsFilePath: nextjs/src/graphql extensions: amplify: version: 3 diff --git a/amplify/.config/project-config.json b/amplify/.config/project-config.json index 1acbd1280..47002b79b 100644 --- a/amplify/.config/project-config.json +++ b/amplify/.config/project-config.json @@ -5,7 +5,7 @@ "javascript": { "framework": "react", "config": { - "SourceDir": "src", + "SourceDir": "nextjs/src", "DistributionDir": "build", "BuildCommand": "npm run-script build", "StartCommand": "npm run-script start" diff --git a/nextjs/configureAmplify.ts b/nextjs/configureAmplify.ts index 26e01db1f..717e4f2e2 100644 --- a/nextjs/configureAmplify.ts +++ b/nextjs/configureAmplify.ts @@ -1,5 +1,5 @@ import Amplify from "aws-amplify"; -import config from "../src/aws-exports.js"; +import config from "./src/aws-exports.js"; // import CdkBackendStack from "../src/cdk-exports.json"; diff --git a/nextjs/pages/blog/[id].tsx b/nextjs/pages/blog/[id].tsx index 2f245c357..ee26d4054 100644 --- a/nextjs/pages/blog/[id].tsx +++ b/nextjs/pages/blog/[id].tsx @@ -76,5 +76,9 @@ export async function getStaticProps({ params }) { props: { post: postData.data.getPost, }, + // Next.js will attempt to re-generate the page: + // - When a request comes in + // - At most once every second + revalidate: 1, // In seconds }; } diff --git a/src/graphql/mutations.js b/nextjs/src/graphql/mutations.js similarity index 97% rename from src/graphql/mutations.js rename to nextjs/src/graphql/mutations.js index a2a5cf355..ad07e0ab1 100644 --- a/src/graphql/mutations.js +++ b/nextjs/src/graphql/mutations.js @@ -22,6 +22,7 @@ export const createBlog = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image createdAt updatedAt } @@ -53,6 +54,7 @@ export const updateBlog = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image createdAt updatedAt } @@ -84,6 +86,7 @@ export const deleteBlog = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image createdAt updatedAt } @@ -111,6 +114,7 @@ export const createPost = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title @@ -120,6 +124,8 @@ export const createPost = /* GraphQL */ ` createdAt updatedAt } + createdAt + updatedAt comments { items { id @@ -139,8 +145,6 @@ export const createPost = /* GraphQL */ ` } nextToken } - createdAt - updatedAt } } `; @@ -161,6 +165,7 @@ export const updatePost = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title @@ -170,6 +175,8 @@ export const updatePost = /* GraphQL */ ` createdAt updatedAt } + createdAt + updatedAt comments { items { id @@ -189,8 +196,6 @@ export const updatePost = /* GraphQL */ ` } nextToken } - createdAt - updatedAt } } `; @@ -211,6 +216,7 @@ export const deletePost = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title @@ -220,6 +226,8 @@ export const deletePost = /* GraphQL */ ` createdAt updatedAt } + createdAt + updatedAt comments { items { id @@ -239,8 +247,6 @@ export const deletePost = /* GraphQL */ ` } nextToken } - createdAt - updatedAt } } `; @@ -264,20 +270,21 @@ export const createComment = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -305,20 +312,21 @@ export const updateComment = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -346,20 +354,21 @@ export const deleteComment = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -387,20 +396,21 @@ export const createCategory = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -427,20 +437,21 @@ export const updateCategory = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -467,20 +478,21 @@ export const deleteCategory = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -496,14 +508,14 @@ export const createVodAsset = /* GraphQL */ ` id title description + createdAt + updatedAt video { id token createdAt updatedAt } - createdAt - updatedAt } } `; @@ -516,14 +528,14 @@ export const updateVodAsset = /* GraphQL */ ` id title description + createdAt + updatedAt video { id token createdAt updatedAt } - createdAt - updatedAt } } `; @@ -536,14 +548,14 @@ export const deleteVodAsset = /* GraphQL */ ` id title description + createdAt + updatedAt video { id token createdAt updatedAt } - createdAt - updatedAt } } `; diff --git a/src/graphql/queries.js b/nextjs/src/graphql/queries.js similarity index 96% rename from src/graphql/queries.js rename to nextjs/src/graphql/queries.js index 3671b93ea..115712800 100644 --- a/src/graphql/queries.js +++ b/nextjs/src/graphql/queries.js @@ -1,6 +1,54 @@ /* eslint-disable */ // this is an auto generated file. This will be overwritten +export const searchPosts = /* GraphQL */ ` + query SearchPosts( + $filter: SearchablePostFilterInput + $sort: SearchablePostSortInput + $limit: Int + $nextToken: String + $from: Int + ) { + searchPosts( + filter: $filter + sort: $sort + limit: $limit + nextToken: $nextToken + from: $from + ) { + items { + id + post_type + post_title + post_name + post_tags + post_content + post_excerpt + post_status + comment_status + ping_status + comment_count + post_featured_image + blog { + id + title + createdAt + updatedAt + } + createdAt + updatedAt + comments { + nextToken + } + category { + nextToken + } + } + nextToken + total + } + } +`; export const getBlog = /* GraphQL */ ` query GetBlog($id: ID!) { getBlog(id: $id) { @@ -19,6 +67,7 @@ export const getBlog = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image createdAt updatedAt } @@ -63,6 +112,7 @@ export const getPost = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title @@ -72,6 +122,8 @@ export const getPost = /* GraphQL */ ` createdAt updatedAt } + createdAt + updatedAt comments { items { id @@ -91,8 +143,6 @@ export const getPost = /* GraphQL */ ` } nextToken } - createdAt - updatedAt } } `; @@ -115,20 +165,21 @@ export const listPosts = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } nextToken } @@ -151,20 +202,21 @@ export const getComment = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -194,6 +246,7 @@ export const listComments = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image createdAt updatedAt } @@ -222,20 +275,21 @@ export const getCategory = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -264,6 +318,7 @@ export const listCategorys = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image createdAt updatedAt } @@ -280,14 +335,14 @@ export const getVodAsset = /* GraphQL */ ` id title description + createdAt + updatedAt video { id token createdAt updatedAt } - createdAt - updatedAt } } `; @@ -302,29 +357,19 @@ export const listVodAssets = /* GraphQL */ ` id title description + createdAt + updatedAt video { id token createdAt updatedAt } - createdAt - updatedAt } nextToken } } `; -export const getVideoObject = /* GraphQL */ ` - query GetVideoObject($id: ID!) { - getVideoObject(id: $id) { - id - token - createdAt - updatedAt - } - } -`; export const listVideoObjects = /* GraphQL */ ` query ListVideoObjects( $filter: ModelvideoObjectFilterInput @@ -342,50 +387,13 @@ export const listVideoObjects = /* GraphQL */ ` } } `; -export const searchPosts = /* GraphQL */ ` - query SearchPosts( - $filter: SearchablePostFilterInput - $sort: SearchablePostSortInput - $limit: Int - $nextToken: String - $from: Int - ) { - searchPosts( - filter: $filter - sort: $sort - limit: $limit - nextToken: $nextToken - from: $from - ) { - items { - id - post_type - post_title - post_name - post_tags - post_content - post_excerpt - post_status - comment_status - ping_status - comment_count - blog { - id - title - createdAt - updatedAt - } - comments { - nextToken - } - category { - nextToken - } - createdAt - updatedAt - } - nextToken - total +export const getVideoObject = /* GraphQL */ ` + query GetVideoObject($id: ID!) { + getVideoObject(id: $id) { + id + token + createdAt + updatedAt } } `; diff --git a/nextjs/src/graphql/schema.json b/nextjs/src/graphql/schema.json index eabe31a1b..531523d1c 100644 --- a/nextjs/src/graphql/schema.json +++ b/nextjs/src/graphql/schema.json @@ -5135,7 +5135,7 @@ "possibleTypes" : null }, { "kind" : "INPUT_OBJECT", - "name" : "SearchableFloatFilterInput", + "name" : "ModelFloatInput", "description" : null, "fields" : null, "inputFields" : [ { @@ -5148,7 +5148,7 @@ }, "defaultValue" : null }, { - "name" : "gt", + "name" : "eq", "description" : null, "type" : { "kind" : "SCALAR", @@ -5157,7 +5157,7 @@ }, "defaultValue" : null }, { - "name" : "lt", + "name" : "le", "description" : null, "type" : { "kind" : "SCALAR", @@ -5166,7 +5166,7 @@ }, "defaultValue" : null }, { - "name" : "gte", + "name" : "lt", "description" : null, "type" : { "kind" : "SCALAR", @@ -5175,7 +5175,7 @@ }, "defaultValue" : null }, { - "name" : "lte", + "name" : "ge", "description" : null, "type" : { "kind" : "SCALAR", @@ -5184,7 +5184,7 @@ }, "defaultValue" : null }, { - "name" : "eq", + "name" : "gt", "description" : null, "type" : { "kind" : "SCALAR", @@ -5193,7 +5193,7 @@ }, "defaultValue" : null }, { - "name" : "range", + "name" : "between", "description" : null, "type" : { "kind" : "LIST", @@ -5205,6 +5205,24 @@ } }, "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null } ], "interfaces" : null, "enumValues" : null, @@ -5220,7 +5238,7 @@ "possibleTypes" : null }, { "kind" : "INPUT_OBJECT", - "name" : "ModelFloatInput", + "name" : "SearchableFloatFilterInput", "description" : null, "fields" : null, "inputFields" : [ { @@ -5233,7 +5251,7 @@ }, "defaultValue" : null }, { - "name" : "eq", + "name" : "gt", "description" : null, "type" : { "kind" : "SCALAR", @@ -5242,7 +5260,7 @@ }, "defaultValue" : null }, { - "name" : "le", + "name" : "lt", "description" : null, "type" : { "kind" : "SCALAR", @@ -5251,7 +5269,7 @@ }, "defaultValue" : null }, { - "name" : "lt", + "name" : "gte", "description" : null, "type" : { "kind" : "SCALAR", @@ -5260,7 +5278,7 @@ }, "defaultValue" : null }, { - "name" : "ge", + "name" : "lte", "description" : null, "type" : { "kind" : "SCALAR", @@ -5269,7 +5287,7 @@ }, "defaultValue" : null }, { - "name" : "gt", + "name" : "eq", "description" : null, "type" : { "kind" : "SCALAR", @@ -5278,7 +5296,7 @@ }, "defaultValue" : null }, { - "name" : "between", + "name" : "range", "description" : null, "type" : { "kind" : "LIST", @@ -5290,24 +5308,6 @@ } }, "defaultValue" : null - }, { - "name" : "attributeExists", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "attributeType", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "ModelAttributeTypes", - "ofType" : null - }, - "defaultValue" : null } ], "interfaces" : null, "enumValues" : null, @@ -6137,6 +6137,23 @@ "onOperation" : false, "onFragment" : false, "onField" : false + }, { + "name" : "deprecated", + "description" : null, + "locations" : [ "FIELD_DEFINITION", "ENUM_VALUE" ], + "args" : [ { + "name" : "reason", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : "\"No longer supported\"" + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false }, { "name" : "aws_iam", "description" : "Tells the service this field/object has access authorized by sigv4 signing.", @@ -6182,23 +6199,6 @@ "onOperation" : false, "onFragment" : false, "onField" : false - }, { - "name" : "deprecated", - "description" : null, - "locations" : [ "FIELD_DEFINITION", "ENUM_VALUE" ], - "args" : [ { - "name" : "reason", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : "\"No longer supported\"" - } ], - "onOperation" : false, - "onFragment" : false, - "onField" : false }, { "name" : "aws_cognito_user_pools", "description" : "Tells the service this field/object has access authorized by a Cognito User Pools token.", diff --git a/src/graphql/subscriptions.js b/nextjs/src/graphql/subscriptions.js similarity index 96% rename from src/graphql/subscriptions.js rename to nextjs/src/graphql/subscriptions.js index cc4eca5f4..8fc5dad70 100644 --- a/src/graphql/subscriptions.js +++ b/nextjs/src/graphql/subscriptions.js @@ -1,6 +1,57 @@ /* eslint-disable */ // this is an auto generated file. This will be overwritten +export const onCreateVodAsset = /* GraphQL */ ` + subscription OnCreateVodAsset { + onCreateVodAsset { + id + title + description + createdAt + updatedAt + video { + id + token + createdAt + updatedAt + } + } + } +`; +export const onUpdateVodAsset = /* GraphQL */ ` + subscription OnUpdateVodAsset { + onUpdateVodAsset { + id + title + description + createdAt + updatedAt + video { + id + token + createdAt + updatedAt + } + } + } +`; +export const onDeleteVodAsset = /* GraphQL */ ` + subscription OnDeleteVodAsset { + onDeleteVodAsset { + id + title + description + createdAt + updatedAt + video { + id + token + createdAt + updatedAt + } + } + } +`; export const onCreateComment = /* GraphQL */ ` subscription OnCreateComment($owner: String!) { onCreateComment(owner: $owner) { @@ -18,20 +69,21 @@ export const onCreateComment = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -56,20 +108,21 @@ export const onUpdateComment = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -94,20 +147,21 @@ export const onDeleteComment = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -132,20 +186,21 @@ export const onCreateCategory = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -169,20 +224,21 @@ export const onUpdateCategory = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt } createdAt updatedAt @@ -206,71 +262,21 @@ export const onDeleteCategory = /* GraphQL */ ` comment_status ping_status comment_count + post_featured_image blog { id title createdAt updatedAt } + createdAt + updatedAt comments { nextToken } category { nextToken } - createdAt - updatedAt - } - createdAt - updatedAt - } - } -`; -export const onCreateVodAsset = /* GraphQL */ ` - subscription OnCreateVodAsset { - onCreateVodAsset { - id - title - description - video { - id - token - createdAt - updatedAt - } - createdAt - updatedAt - } - } -`; -export const onUpdateVodAsset = /* GraphQL */ ` - subscription OnUpdateVodAsset { - onUpdateVodAsset { - id - title - description - video { - id - token - createdAt - updatedAt - } - createdAt - updatedAt - } - } -`; -export const onDeleteVodAsset = /* GraphQL */ ` - subscription OnDeleteVodAsset { - onDeleteVodAsset { - id - title - description - video { - id - token - createdAt - updatedAt } createdAt updatedAt diff --git a/src/aws-video-exports.js b/src/aws-video-exports.js deleted file mode 100644 index 4e1a2e27e..000000000 --- a/src/aws-video-exports.js +++ /dev/null @@ -1,8 +0,0 @@ -// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten. - -const awsvideoconfig = { - "awsInputVideo": "ccdvod-dev-input-xzkln6vc", - "awsOutputVideo": "d3lbx3hw011qkz.cloudfront.net" -}; - -export default awsvideoconfig; \ No newline at end of file diff --git a/src/graphql/schema.json b/src/graphql/schema.json deleted file mode 100644 index 86308cb42..000000000 --- a/src/graphql/schema.json +++ /dev/null @@ -1,6165 +0,0 @@ -{ - "data" : { - "__schema" : { - "queryType" : { - "name" : "Query" - }, - "mutationType" : { - "name" : "Mutation" - }, - "subscriptionType" : { - "name" : "Subscription" - }, - "types" : [ { - "kind" : "OBJECT", - "name" : "Query", - "description" : null, - "fields" : [ { - "name" : "getBlog", - "description" : null, - "args" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Blog", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "listBlogs", - "description" : null, - "args" : [ { - "name" : "filter", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "limit", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "nextToken", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "ModelBlogConnection", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "getPost", - "description" : null, - "args" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Post", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "listPosts", - "description" : null, - "args" : [ { - "name" : "filter", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "limit", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "nextToken", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "ModelPostConnection", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "getComment", - "description" : null, - "args" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Comment", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "listComments", - "description" : null, - "args" : [ { - "name" : "filter", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "limit", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "nextToken", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "ModelCommentConnection", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "getCategory", - "description" : null, - "args" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Category", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "listCategorys", - "description" : null, - "args" : [ { - "name" : "filter", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "limit", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "nextToken", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "ModelCategoryConnection", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "getVodAsset", - "description" : null, - "args" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "vodAsset", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "listVodAssets", - "description" : null, - "args" : [ { - "name" : "filter", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "limit", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "nextToken", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "ModelvodAssetConnection", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "getVideoObject", - "description" : null, - "args" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "videoObject", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "listVideoObjects", - "description" : null, - "args" : [ { - "name" : "filter", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "limit", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "nextToken", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "ModelvideoObjectConnection", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "searchPosts", - "description" : null, - "args" : [ { - "name" : "filter", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchablePostFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "sort", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchablePostSortInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "limit", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "nextToken", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "from", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "SearchablePostConnection", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "Blog", - "description" : null, - "fields" : [ { - "name" : "id", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "title", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "posts", - "description" : null, - "args" : [ { - "name" : "filter", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "sortDirection", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "ModelSortDirection", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "limit", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "nextToken", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "ModelPostConnection", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createdAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updatedAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "SCALAR", - "name" : "ID", - "description" : "Built-in ID", - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "SCALAR", - "name" : "String", - "description" : "Built-in String", - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "ModelPostConnection", - "description" : null, - "fields" : [ { - "name" : "items", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "Post", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "nextToken", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "Post", - "description" : null, - "fields" : [ { - "name" : "id", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_type", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_title", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_name", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_tags", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_content", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_excerpt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_status", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "comment_status", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "ping_status", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "comment_count", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "blog", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "Blog", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "comments", - "description" : null, - "args" : [ { - "name" : "filter", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "sortDirection", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "ModelSortDirection", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "limit", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "nextToken", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "ModelCommentConnection", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "category", - "description" : null, - "args" : [ { - "name" : "filter", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "sortDirection", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "ModelSortDirection", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "limit", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "nextToken", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "ModelCategoryConnection", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createdAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updatedAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "SCALAR", - "name" : "Boolean", - "description" : "Built-in Boolean", - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "SCALAR", - "name" : "Int", - "description" : "Built-in Int", - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "ModelCommentConnection", - "description" : null, - "fields" : [ { - "name" : "items", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "Comment", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "nextToken", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "Comment", - "description" : null, - "fields" : [ { - "name" : "id", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "content", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "Post", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createdAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updatedAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "owner", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "description" : "The `AWSDateTime` scalar type provided by AWS AppSync, represents a valid ***extended*** [ISO 8601 DateTime](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) string. In other words, this scalar type accepts datetime strings of the form `YYYY-MM-DDThh:mm:ss.SSSZ`. The scalar can also accept \"negative years\" of the form `-YYYY` which correspond to years before `0000`. For example, \"**-2017-01-01T00:00Z**\" and \"**-9999-01-01T00:00Z**\" are both valid datetime strings. The field after the two digit seconds field is a nanoseconds field. It can accept between 1 and 9 digits. So, for example, \"**1970-01-01T12:00:00.2Z**\", \"**1970-01-01T12:00:00.277Z**\" and \"**1970-01-01T12:00:00.123456789Z**\" are all valid datetime strings. The seconds and nanoseconds fields are optional (the seconds field must be specified if the nanoseconds field is to be used). The [time zone offset](https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators) is compulsory for this scalar. The time zone offset must either be `Z` (representing the UTC time zone) or be in the format `±hh:mm:ss`. The seconds field in the timezone offset will be considered valid even though it is not part of the ISO 8601 standard.", - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelIDInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "content", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentFilterInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelIDInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "le", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ge", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "contains", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "notContains", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "between", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "beginsWith", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "attributeExists", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "attributeType", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "ModelAttributeTypes", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "size", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelSizeInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "ENUM", - "name" : "ModelAttributeTypes", - "description" : null, - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : [ { - "name" : "binary", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "binarySet", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "bool", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "list", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "map", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "number", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "numberSet", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "string", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "stringSet", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "_null", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelSizeInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "le", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ge", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "between", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "le", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ge", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "contains", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "notContains", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "between", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "beginsWith", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "attributeExists", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "attributeType", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "ModelAttributeTypes", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "size", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelSizeInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "ENUM", - "name" : "ModelSortDirection", - "description" : null, - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : [ { - "name" : "ASC", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "DESC", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "ModelCategoryConnection", - "description" : null, - "fields" : [ { - "name" : "items", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "Category", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "nextToken", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "Category", - "description" : null, - "fields" : [ { - "name" : "id", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "name", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "Post", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createdAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updatedAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelIDInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "name", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryFilterInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelIDInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_type", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_title", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_name", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_tags", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_content", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_excerpt", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_status", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBooleanInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "comment_status", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBooleanInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ping_status", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBooleanInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "comment_count", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelIntInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostFilterInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelBooleanInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "attributeExists", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "attributeType", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "ModelAttributeTypes", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelIntInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "le", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ge", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "between", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "attributeExists", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "attributeType", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "ModelAttributeTypes", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "ModelBlogConnection", - "description" : null, - "fields" : [ { - "name" : "items", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "Blog", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "nextToken", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelIDInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "title", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogFilterInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "vodAsset", - "description" : null, - "fields" : [ { - "name" : "id", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "title", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "description", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "video", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "videoObject", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createdAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updatedAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "videoObject", - "description" : null, - "fields" : [ { - "name" : "id", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "token", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createdAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updatedAt", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "AWSDateTime", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "ModelvodAssetConnection", - "description" : null, - "fields" : [ { - "name" : "items", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "vodAsset", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "nextToken", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelIDInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "title", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "description", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetFilterInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "ModelvideoObjectConnection", - "description" : null, - "fields" : [ { - "name" : "items", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "videoObject", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "nextToken", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelIDInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "token", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectFilterInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "SearchablePostConnection", - "description" : null, - "fields" : [ { - "name" : "items", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "Post", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "nextToken", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "total", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "SearchablePostFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableIDFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_type", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableStringFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_title", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableStringFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_name", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableStringFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_tags", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableStringFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_content", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableStringFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_excerpt", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableStringFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_status", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableBooleanFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "comment_status", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableBooleanFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ping_status", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableBooleanFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "comment_count", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchableIntFilterInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchablePostFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchablePostFilterInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "SearchablePostFilterInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "SearchableIDFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gte", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lte", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "match", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "matchPhrase", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "matchPhrasePrefix", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "multiMatch", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "exists", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "wildcard", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "regexp", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "range", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "SearchableStringFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gte", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lte", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "match", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "matchPhrase", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "matchPhrasePrefix", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "multiMatch", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "exists", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "wildcard", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "regexp", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "range", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "SearchableBooleanFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "SearchableIntFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gte", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lte", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "range", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "SearchablePostSortInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "field", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "SearchablePostSortableFields", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "direction", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "SearchableSortDirection", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "ENUM", - "name" : "SearchablePostSortableFields", - "description" : null, - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : [ { - "name" : "id", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_type", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_title", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_name", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_tags", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_content", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_excerpt", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "post_status", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "comment_status", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "ping_status", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "comment_count", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "possibleTypes" : null - }, { - "kind" : "ENUM", - "name" : "SearchableSortDirection", - "description" : null, - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : [ { - "name" : "asc", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "desc", - "description" : null, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "Mutation", - "description" : null, - "fields" : [ { - "name" : "createBlog", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "CreateBlogInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Blog", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updateBlog", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "UpdateBlogInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Blog", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "deleteBlog", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "DeleteBlogInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Blog", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createPost", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "CreatePostInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Post", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updatePost", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "UpdatePostInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Post", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "deletePost", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "DeletePostInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Post", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createComment", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "CreateCommentInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Comment", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updateComment", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "UpdateCommentInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Comment", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "deleteComment", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "DeleteCommentInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Comment", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createCategory", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "CreateCategoryInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Category", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updateCategory", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "UpdateCategoryInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Category", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "deleteCategory", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "DeleteCategoryInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Category", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createVodAsset", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "CreateVodAssetInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "vodAsset", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updateVodAsset", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "UpdateVodAssetInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "vodAsset", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "deleteVodAsset", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "DeleteVodAssetInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "vodAsset", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "createVideoObject", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "CreateVideoObjectInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "videoObject", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "updateVideoObject", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "UpdateVideoObjectInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "videoObject", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "deleteVideoObject", - "description" : null, - "args" : [ { - "name" : "input", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "DeleteVideoObjectInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "condition", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "videoObject", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "CreateBlogInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "title", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogConditionInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "title", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBlogConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "UpdateBlogInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "title", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "DeleteBlogInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "CreatePostInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_type", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "post_title", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "post_name", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "post_tags", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - } - }, - "defaultValue" : null - }, { - "name" : "post_content", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_excerpt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_status", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "comment_status", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ping_status", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "comment_count", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "postBlogId", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostConditionInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "post_type", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_title", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_name", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_tags", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_content", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_excerpt", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_status", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBooleanInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "comment_status", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBooleanInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ping_status", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelBooleanInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "comment_count", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelIntInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelPostConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "UpdatePostInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "post_type", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_title", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_name", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_tags", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - } - }, - "defaultValue" : null - }, { - "name" : "post_content", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_excerpt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "post_status", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "comment_status", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ping_status", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "comment_count", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Int", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "postBlogId", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "DeletePostInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "CreateCommentInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "content", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "commentPostId", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentConditionInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "content", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCommentConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "UpdateCommentInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "content", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "commentPostId", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "DeleteCommentInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "CreateCategoryInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "name", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "categoryPostId", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryConditionInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "name", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelCategoryConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "UpdateCategoryInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "name", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "categoryPostId", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "DeleteCategoryInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "CreateVodAssetInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "title", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "description", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "vodAssetVideoId", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetConditionInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "title", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "description", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvodAssetConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "UpdateVodAssetInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "title", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "description", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "vodAssetVideoId", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "DeleteVodAssetInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "CreateVideoObjectInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "token", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectConditionInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "token", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelStringInput", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "and", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "or", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectConditionInput", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "not", - "description" : null, - "type" : { - "kind" : "INPUT_OBJECT", - "name" : "ModelvideoObjectConditionInput", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "UpdateVideoObjectInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "token", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "DeleteVideoObjectInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "id", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "ID", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "Subscription", - "description" : null, - "fields" : [ { - "name" : "onCreateComment", - "description" : null, - "args" : [ { - "name" : "owner", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Comment", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onUpdateComment", - "description" : null, - "args" : [ { - "name" : "owner", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Comment", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onDeleteComment", - "description" : null, - "args" : [ { - "name" : "owner", - "description" : null, - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "type" : { - "kind" : "OBJECT", - "name" : "Comment", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onCreateCategory", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "Category", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onUpdateCategory", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "Category", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onDeleteCategory", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "Category", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onCreateVodAsset", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "vodAsset", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onUpdateVodAsset", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "vodAsset", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onDeleteVodAsset", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "vodAsset", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onCreateVideoObject", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "videoObject", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onUpdateVideoObject", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "videoObject", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onDeleteVideoObject", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "videoObject", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "ModelFloatInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "le", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "ge", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "between", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - } - }, - "defaultValue" : null - }, { - "name" : "attributeExists", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "attributeType", - "description" : null, - "type" : { - "kind" : "ENUM", - "name" : "ModelAttributeTypes", - "ofType" : null - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "SCALAR", - "name" : "Float", - "description" : "Built-in Float", - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "INPUT_OBJECT", - "name" : "SearchableFloatFilterInput", - "description" : null, - "fields" : null, - "inputFields" : [ { - "name" : "ne", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lt", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "gte", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "lte", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "eq", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - }, - "defaultValue" : null - }, { - "name" : "range", - "description" : null, - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "Float", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "interfaces" : null, - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "__Schema", - "description" : "A GraphQL Introspection defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, the entry points for query, mutation, and subscription operations.", - "fields" : [ { - "name" : "types", - "description" : "A list of all types supported by this server.", - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__Type", - "ofType" : null - } - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "queryType", - "description" : "The type that query operations will be rooted at.", - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__Type", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "mutationType", - "description" : "If this server supports mutation, the type that mutation operations will be rooted at.", - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "__Type", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "directives", - "description" : "'A list of all directives supported by this server.", - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__Directive", - "ofType" : null - } - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "subscriptionType", - "description" : "'If this server support subscription, the type that subscription operations will be rooted at.", - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "__Type", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "__Type", - "description" : null, - "fields" : [ { - "name" : "kind", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "ENUM", - "name" : "__TypeKind", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "name", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "description", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "fields", - "description" : null, - "args" : [ { - "name" : "includeDeprecated", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : "false" - } ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__Field", - "ofType" : null - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "interfaces", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__Type", - "ofType" : null - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "possibleTypes", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__Type", - "ofType" : null - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "enumValues", - "description" : null, - "args" : [ { - "name" : "includeDeprecated", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "defaultValue" : "false" - } ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__EnumValue", - "ofType" : null - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "inputFields", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__InputValue", - "ofType" : null - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "ofType", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "OBJECT", - "name" : "__Type", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "ENUM", - "name" : "__TypeKind", - "description" : "An enum describing what kind of type a given __Type is", - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : [ { - "name" : "SCALAR", - "description" : "Indicates this type is a scalar.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "OBJECT", - "description" : "Indicates this type is an object. `fields` and `interfaces` are valid fields.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "INTERFACE", - "description" : "Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "UNION", - "description" : "Indicates this type is a union. `possibleTypes` is a valid field.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "ENUM", - "description" : "Indicates this type is an enum. `enumValues` is a valid field.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "INPUT_OBJECT", - "description" : "Indicates this type is an input object. `inputFields` is a valid field.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "LIST", - "description" : "Indicates this type is a list. `ofType` is a valid field.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "NON_NULL", - "description" : "Indicates this type is a non-null. `ofType` is a valid field.", - "isDeprecated" : false, - "deprecationReason" : null - } ], - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "__Field", - "description" : null, - "fields" : [ { - "name" : "name", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "description", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "args", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__InputValue", - "ofType" : null - } - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "type", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__Type", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "isDeprecated", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "deprecationReason", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "__InputValue", - "description" : null, - "fields" : [ { - "name" : "name", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "description", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "type", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__Type", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "defaultValue", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "__EnumValue", - "description" : null, - "fields" : [ { - "name" : "name", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "description", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "isDeprecated", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "deprecationReason", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "OBJECT", - "name" : "__Directive", - "description" : null, - "fields" : [ { - "name" : "name", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "description", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "locations", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "ENUM", - "name" : "__DirectiveLocation", - "ofType" : null - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "args", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "OBJECT", - "name" : "__InputValue", - "ofType" : null - } - } - } - }, - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "onOperation", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "isDeprecated" : true, - "deprecationReason" : "Use `locations`." - }, { - "name" : "onFragment", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "isDeprecated" : true, - "deprecationReason" : "Use `locations`." - }, { - "name" : "onField", - "description" : null, - "args" : [ ], - "type" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - }, - "isDeprecated" : true, - "deprecationReason" : "Use `locations`." - } ], - "inputFields" : null, - "interfaces" : [ ], - "enumValues" : null, - "possibleTypes" : null - }, { - "kind" : "ENUM", - "name" : "__DirectiveLocation", - "description" : "An enum describing valid locations where a directive can be placed", - "fields" : null, - "inputFields" : null, - "interfaces" : null, - "enumValues" : [ { - "name" : "QUERY", - "description" : "Indicates the directive is valid on queries.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "MUTATION", - "description" : "Indicates the directive is valid on mutations.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "FIELD", - "description" : "Indicates the directive is valid on fields.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "FRAGMENT_DEFINITION", - "description" : "Indicates the directive is valid on fragment definitions.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "FRAGMENT_SPREAD", - "description" : "Indicates the directive is valid on fragment spreads.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "INLINE_FRAGMENT", - "description" : "Indicates the directive is valid on inline fragments.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "SCHEMA", - "description" : "Indicates the directive is valid on a schema SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "SCALAR", - "description" : "Indicates the directive is valid on a scalar SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "OBJECT", - "description" : "Indicates the directive is valid on an object SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "FIELD_DEFINITION", - "description" : "Indicates the directive is valid on a field SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "ARGUMENT_DEFINITION", - "description" : "Indicates the directive is valid on a field argument SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "INTERFACE", - "description" : "Indicates the directive is valid on an interface SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "UNION", - "description" : "Indicates the directive is valid on an union SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "ENUM", - "description" : "Indicates the directive is valid on an enum SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "ENUM_VALUE", - "description" : "Indicates the directive is valid on an enum value SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "INPUT_OBJECT", - "description" : "Indicates the directive is valid on an input object SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - }, { - "name" : "INPUT_FIELD_DEFINITION", - "description" : "Indicates the directive is valid on an input object field SDL definition.", - "isDeprecated" : false, - "deprecationReason" : null - } ], - "possibleTypes" : null - } ], - "directives" : [ { - "name" : "include", - "description" : "Directs the executor to include this field or fragment only when the `if` argument is true", - "locations" : [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], - "args" : [ { - "name" : "if", - "description" : "Included when true.", - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "onOperation" : false, - "onFragment" : true, - "onField" : true - }, { - "name" : "skip", - "description" : "Directs the executor to skip this field or fragment when the `if`'argument is true.", - "locations" : [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], - "args" : [ { - "name" : "if", - "description" : "Skipped when true.", - "type" : { - "kind" : "NON_NULL", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "Boolean", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "onOperation" : false, - "onFragment" : true, - "onField" : true - }, { - "name" : "defer", - "description" : "This directive allows results to be deferred during execution", - "locations" : [ "FIELD" ], - "args" : [ ], - "onOperation" : false, - "onFragment" : false, - "onField" : true - }, { - "name" : "aws_subscribe", - "description" : "Tells the service which mutation triggers this subscription.", - "locations" : [ "FIELD_DEFINITION" ], - "args" : [ { - "name" : "mutations", - "description" : "List of mutations which will trigger this subscription when they are called.", - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "onOperation" : false, - "onFragment" : false, - "onField" : false - }, { - "name" : "aws_publish", - "description" : "Tells the service which subscriptions will be published to when this mutation is called. This directive is deprecated use @aws_susbscribe directive instead.", - "locations" : [ "FIELD_DEFINITION" ], - "args" : [ { - "name" : "subscriptions", - "description" : "List of subscriptions which will be published to when this mutation is called.", - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "onOperation" : false, - "onFragment" : false, - "onField" : false - }, { - "name" : "deprecated", - "description" : null, - "locations" : [ "FIELD_DEFINITION", "ENUM_VALUE" ], - "args" : [ { - "name" : "reason", - "description" : null, - "type" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - }, - "defaultValue" : "\"No longer supported\"" - } ], - "onOperation" : false, - "onFragment" : false, - "onField" : false - }, { - "name" : "aws_iam", - "description" : "Tells the service this field/object has access authorized by sigv4 signing.", - "locations" : [ "OBJECT", "FIELD_DEFINITION" ], - "args" : [ ], - "onOperation" : false, - "onFragment" : false, - "onField" : false - }, { - "name" : "aws_oidc", - "description" : "Tells the service this field/object has access authorized by an OIDC token.", - "locations" : [ "OBJECT", "FIELD_DEFINITION" ], - "args" : [ ], - "onOperation" : false, - "onFragment" : false, - "onField" : false - }, { - "name" : "aws_api_key", - "description" : "Tells the service this field/object has access authorized by an API key.", - "locations" : [ "OBJECT", "FIELD_DEFINITION" ], - "args" : [ ], - "onOperation" : false, - "onFragment" : false, - "onField" : false - }, { - "name" : "aws_auth", - "description" : "Directs the schema to enforce authorization on a field", - "locations" : [ "FIELD_DEFINITION" ], - "args" : [ { - "name" : "cognito_groups", - "description" : "List of cognito user pool groups which have access on this field", - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "onOperation" : false, - "onFragment" : false, - "onField" : false - }, { - "name" : "aws_cognito_user_pools", - "description" : "Tells the service this field/object has access authorized by a Cognito User Pools token.", - "locations" : [ "OBJECT", "FIELD_DEFINITION" ], - "args" : [ { - "name" : "cognito_groups", - "description" : "List of cognito user pool groups which have access on this field", - "type" : { - "kind" : "LIST", - "name" : null, - "ofType" : { - "kind" : "SCALAR", - "name" : "String", - "ofType" : null - } - }, - "defaultValue" : null - } ], - "onOperation" : false, - "onFragment" : false, - "onField" : false - } ] - } - } -} \ No newline at end of file From 7bbd11c6c230ffaeab35f4fcab5c8e15eb96cc10 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Sat, 21 Nov 2020 11:59:08 -0500 Subject: [PATCH 3/7] merge --- nextjs/src/graphql/schema.json~HEAD | 6226 +++++++++++++++++++++++++++ 1 file changed, 6226 insertions(+) create mode 100644 nextjs/src/graphql/schema.json~HEAD diff --git a/nextjs/src/graphql/schema.json~HEAD b/nextjs/src/graphql/schema.json~HEAD new file mode 100644 index 000000000..eabe31a1b --- /dev/null +++ b/nextjs/src/graphql/schema.json~HEAD @@ -0,0 +1,6226 @@ +{ + "data" : { + "__schema" : { + "queryType" : { + "name" : "Query" + }, + "mutationType" : { + "name" : "Mutation" + }, + "subscriptionType" : { + "name" : "Subscription" + }, + "types" : [ { + "kind" : "OBJECT", + "name" : "Query", + "description" : null, + "fields" : [ { + "name" : "searchPosts", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "sort", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostSortInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "from", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "SearchablePostConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getBlog", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listBlogs", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelBlogConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getPost", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listPosts", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelPostConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getComment", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listComments", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelCommentConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getCategory", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listCategorys", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelCategoryConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getVodAsset", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listVodAssets", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelvodAssetConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "listVideoObjects", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelvideoObjectConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "getVideoObject", + "description" : null, + "args" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "SearchablePostConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "total", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Post", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_type", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_title", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_tags", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_content", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_excerpt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_status", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "comment_status", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ping_status", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "comment_count", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_featured_image", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "blog", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "comments", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "sortDirection", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelSortDirection", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelCommentConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "category", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "sortDirection", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelSortDirection", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelCategoryConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "ID", + "description" : "Built-in ID", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "String", + "description" : "Built-in String", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "Boolean", + "description" : "Built-in Boolean", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "Int", + "description" : "Built-in Int", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Blog", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "title", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "posts", + "description" : null, + "args" : [ { + "name" : "filter", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "sortDirection", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelSortDirection", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "limit", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "nextToken", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "ModelPostConnection", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelPostConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_type", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_name", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_tags", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_content", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_excerpt", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ping_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_count", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIntInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_featured_image", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "le", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ge", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "contains", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "notContains", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "between", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "beginsWith", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "size", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelSizeInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "description" : null, + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "binary", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "binarySet", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "bool", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "list", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "map", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "number", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "numberSet", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "string", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "stringSet", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "_null", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelSizeInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "le", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ge", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "between", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "le", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ge", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "contains", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "notContains", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "between", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "beginsWith", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "size", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelSizeInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelIntInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "le", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ge", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "between", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "ModelSortDirection", + "description" : null, + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "ASC", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "DESC", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "description" : "The `AWSDateTime` scalar type provided by AWS AppSync, represents a valid ***extended*** [ISO 8601 DateTime](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) string. In other words, this scalar type accepts datetime strings of the form `YYYY-MM-DDThh:mm:ss.SSSZ`. The scalar can also accept \"negative years\" of the form `-YYYY` which correspond to years before `0000`. For example, \"**-2017-01-01T00:00Z**\" and \"**-9999-01-01T00:00Z**\" are both valid datetime strings. The field after the two digit seconds field is a nanoseconds field. It can accept between 1 and 9 digits. So, for example, \"**1970-01-01T12:00:00.2Z**\", \"**1970-01-01T12:00:00.277Z**\" and \"**1970-01-01T12:00:00.123456789Z**\" are all valid datetime strings. The seconds and nanoseconds fields are optional (the seconds field must be specified if the nanoseconds field is to be used). The [time zone offset](https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators) is compulsory for this scalar. The time zone offset must either be `Z` (representing the UTC time zone) or be in the format `±hh:mm:ss`. The seconds field in the timezone offset will be considered valid even though it is not part of the ISO 8601 standard.", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelCommentConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Comment", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "content", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "owner", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "content", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelCategoryConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Category", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "name", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableIDFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_type", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_name", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_tags", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_content", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_excerpt", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableBooleanFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableBooleanFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ping_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableBooleanFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_count", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableIntFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_featured_image", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchableIDFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "match", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "matchPhrase", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "matchPhrasePrefix", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "multiMatch", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "exists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "wildcard", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "regexp", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "range", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchableStringFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "match", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "matchPhrase", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "matchPhrasePrefix", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "multiMatch", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "exists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "wildcard", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "regexp", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "range", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchableBooleanFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchableIntFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "range", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchablePostSortInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "field", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "SearchablePostSortableFields", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "direction", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "SearchableSortDirection", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "SearchablePostSortableFields", + "description" : null, + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "id", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_type", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_title", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_name", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_tags", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_content", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_excerpt", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_status", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "comment_status", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ping_status", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "comment_count", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "post_featured_image", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "SearchableSortDirection", + "description" : null, + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "asc", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "desc", + "description" : null, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelBlogConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "vodAsset", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "title", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "video", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "videoObject", + "description" : null, + "fields" : [ { + "name" : "id", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "token", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createdAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatedAt", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "AWSDateTime", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelvodAssetConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "description", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "ModelvideoObjectConnection", + "description" : null, + "fields" : [ { + "name" : "items", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "nextToken", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIDInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "token", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectFilterInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectFilterInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Mutation", + "description" : null, + "fields" : [ { + "name" : "createBlog", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreateBlogInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updateBlog", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdateBlogInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deleteBlog", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeleteBlogInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Blog", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createPost", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreatePostInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updatePost", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdatePostInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deletePost", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeletePostInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Post", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createComment", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreateCommentInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updateComment", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdateCommentInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deleteComment", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeleteCommentInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createCategory", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreateCategoryInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updateCategory", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdateCategoryInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deleteCategory", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeleteCategoryInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createVodAsset", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreateVodAssetInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updateVodAsset", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdateVodAssetInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deleteVodAsset", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeleteVodAssetInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "createVideoObject", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "CreateVideoObjectInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "updateVideoObject", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "UpdateVideoObjectInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deleteVideoObject", + "description" : null, + "args" : [ { + "name" : "input", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "DeleteVideoObjectInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "condition", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreateBlogInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBlogConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdateBlogInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeleteBlogInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreatePostInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_type", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "post_title", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "post_name", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "post_tags", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + } + }, + "defaultValue" : null + }, { + "name" : "post_content", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_excerpt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ping_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_count", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_featured_image", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "postBlogId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "post_type", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_name", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_tags", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_content", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_excerpt", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ping_status", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelBooleanInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_count", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelIntInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_featured_image", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelPostConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdatePostInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "post_type", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_title", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_name", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_tags", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + } + }, + "defaultValue" : null + }, { + "name" : "post_content", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_excerpt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ping_status", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "comment_count", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Int", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "post_featured_image", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "postBlogId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeletePostInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreateCommentInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "content", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "commentPostId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "content", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCommentConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdateCommentInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "content", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "commentPostId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeleteCommentInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreateCategoryInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "name", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "categoryPostId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "name", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelCategoryConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdateCategoryInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "name", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "categoryPostId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeleteCategoryInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreateVodAssetInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "description", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "vodAssetVideoId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "title", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "description", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvodAssetConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdateVodAssetInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "title", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "description", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "vodAssetVideoId", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeleteVodAssetInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "CreateVideoObjectInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "token", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "token", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelStringInput", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "and", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "or", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "not", + "description" : null, + "type" : { + "kind" : "INPUT_OBJECT", + "name" : "ModelvideoObjectConditionInput", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "UpdateVideoObjectInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "token", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "DeleteVideoObjectInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "id", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "ID", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "Subscription", + "description" : null, + "fields" : [ { + "name" : "onCreateVodAsset", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onUpdateVodAsset", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onDeleteVodAsset", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "vodAsset", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onCreateComment", + "description" : null, + "args" : [ { + "name" : "owner", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onUpdateComment", + "description" : null, + "args" : [ { + "name" : "owner", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onDeleteComment", + "description" : null, + "args" : [ { + "name" : "owner", + "description" : null, + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "type" : { + "kind" : "OBJECT", + "name" : "Comment", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onCreateCategory", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onUpdateCategory", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onDeleteCategory", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "Category", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onCreateVideoObject", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onUpdateVideoObject", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onDeleteVideoObject", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "videoObject", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "SearchableFloatFilterInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lte", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "range", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "SCALAR", + "name" : "Float", + "description" : "Built-in Float", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "INPUT_OBJECT", + "name" : "ModelFloatInput", + "description" : null, + "fields" : null, + "inputFields" : [ { + "name" : "ne", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "eq", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "le", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "lt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "ge", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "gt", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "between", + "description" : null, + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Float", + "ofType" : null + } + }, + "defaultValue" : null + }, { + "name" : "attributeExists", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : null + }, { + "name" : "attributeType", + "description" : null, + "type" : { + "kind" : "ENUM", + "name" : "ModelAttributeTypes", + "ofType" : null + }, + "defaultValue" : null + } ], + "interfaces" : null, + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__Schema", + "description" : "A GraphQL Introspection defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, the entry points for query, mutation, and subscription operations.", + "fields" : [ { + "name" : "types", + "description" : "A list of all types supported by this server.", + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "queryType", + "description" : "The type that query operations will be rooted at.", + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "mutationType", + "description" : "If this server supports mutation, the type that mutation operations will be rooted at.", + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "directives", + "description" : "'A list of all directives supported by this server.", + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Directive", + "ofType" : null + } + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "subscriptionType", + "description" : "'If this server support subscription, the type that subscription operations will be rooted at.", + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__Type", + "description" : null, + "fields" : [ { + "name" : "kind", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "ENUM", + "name" : "__TypeKind", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "fields", + "description" : null, + "args" : [ { + "name" : "includeDeprecated", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : "false" + } ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Field", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "interfaces", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "possibleTypes", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "enumValues", + "description" : null, + "args" : [ { + "name" : "includeDeprecated", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "defaultValue" : "false" + } ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__EnumValue", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "inputFields", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__InputValue", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ofType", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "__TypeKind", + "description" : "An enum describing what kind of type a given __Type is", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "SCALAR", + "description" : "Indicates this type is a scalar.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "OBJECT", + "description" : "Indicates this type is an object. `fields` and `interfaces` are valid fields.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INTERFACE", + "description" : "Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "UNION", + "description" : "Indicates this type is a union. `possibleTypes` is a valid field.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ENUM", + "description" : "Indicates this type is an enum. `enumValues` is a valid field.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INPUT_OBJECT", + "description" : "Indicates this type is an input object. `inputFields` is a valid field.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "LIST", + "description" : "Indicates this type is a list. `ofType` is a valid field.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "NON_NULL", + "description" : "Indicates this type is a non-null. `ofType` is a valid field.", + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__Field", + "description" : null, + "fields" : [ { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "args", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__InputValue", + "ofType" : null + } + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "type", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "isDeprecated", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deprecationReason", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__InputValue", + "description" : null, + "fields" : [ { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "type", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__Type", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "defaultValue", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__EnumValue", + "description" : null, + "fields" : [ { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "isDeprecated", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "deprecationReason", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "OBJECT", + "name" : "__Directive", + "description" : null, + "fields" : [ { + "name" : "name", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "description", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "locations", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "ENUM", + "name" : "__DirectiveLocation", + "ofType" : null + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "args", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "OBJECT", + "name" : "__InputValue", + "ofType" : null + } + } + } + }, + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "onOperation", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : true, + "deprecationReason" : "Use `locations`." + }, { + "name" : "onFragment", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : true, + "deprecationReason" : "Use `locations`." + }, { + "name" : "onField", + "description" : null, + "args" : [ ], + "type" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + }, + "isDeprecated" : true, + "deprecationReason" : "Use `locations`." + } ], + "inputFields" : null, + "interfaces" : [ ], + "enumValues" : null, + "possibleTypes" : null + }, { + "kind" : "ENUM", + "name" : "__DirectiveLocation", + "description" : "An enum describing valid locations where a directive can be placed", + "fields" : null, + "inputFields" : null, + "interfaces" : null, + "enumValues" : [ { + "name" : "QUERY", + "description" : "Indicates the directive is valid on queries.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "MUTATION", + "description" : "Indicates the directive is valid on mutations.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "FIELD", + "description" : "Indicates the directive is valid on fields.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "FRAGMENT_DEFINITION", + "description" : "Indicates the directive is valid on fragment definitions.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "FRAGMENT_SPREAD", + "description" : "Indicates the directive is valid on fragment spreads.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INLINE_FRAGMENT", + "description" : "Indicates the directive is valid on inline fragments.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "SCHEMA", + "description" : "Indicates the directive is valid on a schema SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "SCALAR", + "description" : "Indicates the directive is valid on a scalar SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "OBJECT", + "description" : "Indicates the directive is valid on an object SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "FIELD_DEFINITION", + "description" : "Indicates the directive is valid on a field SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ARGUMENT_DEFINITION", + "description" : "Indicates the directive is valid on a field argument SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INTERFACE", + "description" : "Indicates the directive is valid on an interface SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "UNION", + "description" : "Indicates the directive is valid on an union SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ENUM", + "description" : "Indicates the directive is valid on an enum SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "ENUM_VALUE", + "description" : "Indicates the directive is valid on an enum value SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INPUT_OBJECT", + "description" : "Indicates the directive is valid on an input object SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + }, { + "name" : "INPUT_FIELD_DEFINITION", + "description" : "Indicates the directive is valid on an input object field SDL definition.", + "isDeprecated" : false, + "deprecationReason" : null + } ], + "possibleTypes" : null + } ], + "directives" : [ { + "name" : "include", + "description" : "Directs the executor to include this field or fragment only when the `if` argument is true", + "locations" : [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], + "args" : [ { + "name" : "if", + "description" : "Included when true.", + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : true, + "onField" : true + }, { + "name" : "skip", + "description" : "Directs the executor to skip this field or fragment when the `if`'argument is true.", + "locations" : [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], + "args" : [ { + "name" : "if", + "description" : "Skipped when true.", + "type" : { + "kind" : "NON_NULL", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "Boolean", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : true, + "onField" : true + }, { + "name" : "defer", + "description" : "This directive allows results to be deferred during execution", + "locations" : [ "FIELD" ], + "args" : [ ], + "onOperation" : false, + "onFragment" : false, + "onField" : true + }, { + "name" : "aws_subscribe", + "description" : "Tells the service which mutation triggers this subscription.", + "locations" : [ "FIELD_DEFINITION" ], + "args" : [ { + "name" : "mutations", + "description" : "List of mutations which will trigger this subscription when they are called.", + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_publish", + "description" : "Tells the service which subscriptions will be published to when this mutation is called. This directive is deprecated use @aws_susbscribe directive instead.", + "locations" : [ "FIELD_DEFINITION" ], + "args" : [ { + "name" : "subscriptions", + "description" : "List of subscriptions which will be published to when this mutation is called.", + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_iam", + "description" : "Tells the service this field/object has access authorized by sigv4 signing.", + "locations" : [ "OBJECT", "FIELD_DEFINITION" ], + "args" : [ ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_oidc", + "description" : "Tells the service this field/object has access authorized by an OIDC token.", + "locations" : [ "OBJECT", "FIELD_DEFINITION" ], + "args" : [ ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_api_key", + "description" : "Tells the service this field/object has access authorized by an API key.", + "locations" : [ "OBJECT", "FIELD_DEFINITION" ], + "args" : [ ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_auth", + "description" : "Directs the schema to enforce authorization on a field", + "locations" : [ "FIELD_DEFINITION" ], + "args" : [ { + "name" : "cognito_groups", + "description" : "List of cognito user pool groups which have access on this field", + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "deprecated", + "description" : null, + "locations" : [ "FIELD_DEFINITION", "ENUM_VALUE" ], + "args" : [ { + "name" : "reason", + "description" : null, + "type" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + }, + "defaultValue" : "\"No longer supported\"" + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + }, { + "name" : "aws_cognito_user_pools", + "description" : "Tells the service this field/object has access authorized by a Cognito User Pools token.", + "locations" : [ "OBJECT", "FIELD_DEFINITION" ], + "args" : [ { + "name" : "cognito_groups", + "description" : "List of cognito user pool groups which have access on this field", + "type" : { + "kind" : "LIST", + "name" : null, + "ofType" : { + "kind" : "SCALAR", + "name" : "String", + "ofType" : null + } + }, + "defaultValue" : null + } ], + "onOperation" : false, + "onFragment" : false, + "onField" : false + } ] + } + } +} \ No newline at end of file From c948d60865d6955b4d4ad931d8d46dfb6a24d110 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Wed, 2 Dec 2020 13:21:19 -0500 Subject: [PATCH 4/7] Feature/bdesigned (#2) Initial redesign based on @brittneypostma's amazing work! --- .firebaserc | 5 + .gitignore | 87 +- .graphqlconfig.yml | 15 - .stylelintrc | 13 + .vscode/launch.json | 27 + .vscode/settings.json | 6 +- amplify/.config/project-config.json | 17 - amplify/backend/api/ccd/parameters.json | 11 - amplify/backend/api/ccd/schema.graphql | 131 - .../api/ccd/stacks/CustomResources.json | 58 - amplify/backend/api/ccd/transform.conf.json | 4 - .../ccdb1bcb9cf-cloudformation-template.yml | 370 - .../backend/auth/ccdb1bcb9cf/parameters.json | 52 - .../auth/userPoolGroups/parameters.json | 14 - .../backend/auth/userPoolGroups/template.json | 331 - .../user-pool-group-precedence.json | 25 - amplify/backend/backend-config.json | 65 - amplify/backend/tags.json | 10 - .../video/ccdvod/mediaconvert-job-temp.json | 563 - amplify/backend/video/ccdvod/parameters.json | 17 - amplify/backend/video/ccdvod/props.json | 42 - amplify/cli.json | 9 - amplify/keys/.gitignore | 1 - amplify/keys/README.md | 5 - backend-cdk/.gitignore | 14 - backend-cdk/.npmignore | 6 - backend-cdk/README.md | 14 - backend-cdk/bin/backend.ts | 7 - backend-cdk/cdk.json | 9 - backend-cdk/graphql/schema.graphql | 28 - backend-cdk/jest.config.js | 7 - backend-cdk/lambdas/Post.ts | 7 - backend-cdk/lambdas/createPost.ts | 18 - backend-cdk/lambdas/db.ts | 7 - backend-cdk/lambdas/deletePost.ts | 15 - backend-cdk/lambdas/getPostById.ts | 14 - backend-cdk/lambdas/index.ts | 33 - backend-cdk/lambdas/listPosts.ts | 13 - backend-cdk/lambdas/package-lock.json | 26 - backend-cdk/lambdas/updatePost.ts | 26 - backend-cdk/lib/backend-stack.ts | 113 - backend-cdk/package-lock.json | 7780 --------- backend-cdk/package.json | 32 - backend-cdk/test/backend.test.ts | 13 - backend-cdk/tsconfig.json | 23 - data/.gitignore | 1 + data/classic-editor-remember.md | 59 + data/courses.json | 215 + data/firebase/postsUpload.js | 77 + data/lessons.json | 460 + data/markdown/.DS_Store | Bin 0 -> 10244 bytes data/markdown/lessons/_lessons.json | 170 + data/markdown/lessons/ajs-coding-tools.md | 39 + ...rial-dynamic-navigation-using-firestore.md | 639 + .../angular-material-forms-from-firestore.md | 502 + ...aterial-reactive-forms-update-firestore.md | 198 + .../angular-material-router-awareness.md | 182 + .../lessons/angular-material-router-outlet.md | 562 + .../lessons/angular-material-theming.md | 457 + ...rebase-authentication-and-authorization.md | 78 + .../lessons/firebase-project-hosting.md | 111 + data/markdown/lessons/firestore-modeling.md | 328 + .../lessons/how-to-sign-in-on-codingcatdev.md | 6 + data/markdown/lessons/html-basics.md | 94 + data/markdown/lessons/html-table.md | 294 + data/markdown/lessons/intro.md | 59 + data/markdown/lessons/materialui.md | 348 + data/markdown/lessons/microbit-intro.md | 72 + data/markdown/lessons/project-hosting.md | 167 + data/markdown/lessons/setup.md | 168 + data/markdown/lessons/ssr-part-1.md | 132 + data/markdown/lessons/ssr-part-2.md | 92 + data/markdown/lessons/what-you-will-learn.md | 6 + .../podcasts/0-0-the-purrfect-beginning.md | 39 + .../podcasts/0-1-purrfect-origin-story.md | 18 + .../podcasts/0-10-amplify-with-nader-dabit.md | 57 + .../0-2-purrfect-program-management.md | 45 + .../podcasts/0-3-cloudinary-community.md | 75 + data/markdown/podcasts/0-4-sanity-io.md | 55 + .../podcasts/0-5-agile-methodology.md | 54 + .../0-6-nextjs-with-guillermo-rauch.md | 73 + .../podcasts/0-7-scully-with-aaron-frost.md | 71 + .../0-8-cloudinary-with-tessa-mero.md | 56 + .../0-9-jeff-delaney-of-fireship-io.md | 79 + data/markdown/podcasts/_podcasts.json | 98 + .../infrastructure-as-code-with-pulumi.md | 111 + data/markdown/posts/_posts.json | 298 + ...-angular-components-to-your-static-site.md | 235 + .../adding-web-component-for-ionic-modals.md | 88 + .../posts/aj-is-loving-sticker-mule.md | 21 + data/markdown/posts/ajonp-rebranded.md | 38 + .../posts/ajs-week-in-web-december-04-2019.md | 56 + .../posts/ajs-week-in-web-december-11-2019.md | 36 + .../posts/ajs-week-in-web-december-18-2019.md | 28 + .../posts/ajs-week-in-web-january-08-2020.md | 68 + .../posts/ajs-week-in-web-january-15-2020.md | 49 + .../posts/ajs-week-in-web-january-22-2020.md | 61 + .../posts/ajs-week-in-web-november-06-2019.md | 28 + .../posts/ajs-week-in-web-november-13-2019.md | 40 + .../posts/ajs-week-in-web-november-20-2019.md | 28 + .../anchor-links-from-sanity-in-gatsby.md | 180 + .../posts/aws-amplify-vs-aws-cdk-2020.md | 157 + .../better-performance-through-analysis.md | 71 + ...un-app-with-ionic-studio-and-cloudinary.md | 169 + .../posts/cloud-function-github-update.md | 41 + .../cloudinary-in-jamstacks-using-webp.md | 95 + .../debug-angular-9-in-chrome-console.md | 49 + .../firebase-hosting-version-settings.md | 52 + .../front-end-web-development-podcasts.md | 264 + .../posts/gatsby-cloud-with-sanity-cms.md | 58 + data/markdown/posts/google-cloud-reference.md | 365 + .../increasing-productivity-with-notion.md | 57 + data/markdown/posts/ionic-icons.md | 1441 ++ .../jamstackgr-1-sanity-io-as-a-backend.md | 76 + ...ur-build-system-right-vs-deploying-fast.md | 11 + ...ackgr-3-getting-started-with-serverless.md | 128 + ...scully-an-angular-static-site-generator.md | 56 + ...catdevs-lms-dream-after-3-others-failed.md | 103 + data/markdown/posts/moving-to-wordpress.md | 60 + ...scully-io-anguler-static-site-generator.md | 100 + ...sendinblue-codingcatdevs-email-solution.md | 66 + .../slack-workspace-theme-customization.md | 22 + data/markdown/posts/updating-ajonps-brand.md | 18 + .../posts/vscode-extension-peacock.md | 18 + data/markdown/tutorials/_tutorials.json | 146 + data/markdown/tutorials/abap-hello-world.md | 12 + .../tutorials/abap-types-and-subroutines.md | 20 + .../tutorials/ajonp-hugo-ionic-template.md | 212 + .../tutorials/angular-cli-deploying.md | 743 + ...e-play-store-using-trusted-web-activity.md | 8 + data/markdown/tutorials/aws-amplify-video.md | 308 + .../backup-sanity-with-cloud-firestore.md | 122 + .../design-systems-with-web-components.md | 265 + .../tutorials/firebase-multisite-hosting.md | 229 + .../tutorials/git-your-build-system-right.md | 562 + .../google-cloud-repositories-ci-cd.md | 275 + .../markdown/tutorials/hugo-ionic-template.md | 409 + .../markdown/tutorials/npm-tips-and-tricks.md | 92 + ...g-firebase-firestore-and-authentication.md | 287 + ...g-firebase-firestore-and-authentication.md | 252 + .../send-gcp-build-status-to-discord.md | 365 + .../slap-someone-with-slack-commands.md | 151 + .../use-firestore-to-build-hugo-content.md | 495 + data/package-lock.json | 1736 ++ {backend-cdk/lambdas => data}/package.json | 9 +- data/posts/podcasts.json | 276 + data/posts/podcastsPutAll.js | 82 + data/posts/posts.json | 977 ++ data/posts/postsDeleteAll.js | 76 + data/posts/postsPutAll.js | 82 + data/posts/tutorials.json | 489 + data/posts/tutorialsPutAll.js | 82 + data/tutorials.json | 489 + database.rules.json | 6 + firebase.json | 41 + firestore.indexes.json | 4 + firestore.rules | 47 + functions/.eslintrc.js | 71 + functions/.gitignore | 12 + functions/package-lock.json | 3391 ++++ functions/package.json | 29 + functions/src/index.ts | 9 + functions/tsconfig.json | 15 + nextjs/.eslintrc.json | 25 + nextjs/.prettierrc | 4 + nextjs/configureAmplify.ts | 22 - nextjs/layout/AppMenu.tsx | 145 - nextjs/layout/AppTopbar.tsx | 35 - nextjs/layout/_overrides.scss | 1 - nextjs/layout/_variables.scss | 47 - nextjs/layout/layout.scss | 3 - nextjs/layout/sass/_config.scss | 151 - nextjs/layout/sass/_content.scss | 4 - nextjs/layout/sass/_dashboard.scss | 186 - nextjs/layout/sass/_footer.scss | 13 - nextjs/layout/sass/_layout.scss | 14 - nextjs/layout/sass/_main.scss | 34 - nextjs/layout/sass/_menu.scss | 189 - nextjs/layout/sass/_mixins.scss | 43 - nextjs/layout/sass/_profile.scss | 125 - nextjs/layout/sass/_responsive.scss | 76 - nextjs/layout/sass/_sidebar.scss | 50 - nextjs/layout/sass/_splash.scss | 47 - nextjs/layout/sass/_topbar.scss | 127 - nextjs/layout/sass/_typography.scss | 68 - nextjs/layout/sass/_utils.scss | 11 - nextjs/next.config.js | 9 + nextjs/package-lock.json | 14370 ++++++++++------ nextjs/package.json | 46 +- nextjs/pages/_app.tsx | 166 - nextjs/pages/blog.tsx | 54 - nextjs/pages/blog/[id].tsx | 84 - nextjs/pages/index.tsx | 35 - nextjs/postcss.config.js | 5 +- nextjs/public/assets/layout/images/logo.svg | 37 - .../public/assets/layout/images/preloader.gif | Bin 10756 -> 0 bytes nextjs/public/browserconfig.xml | 2 + nextjs/public/favicon.ico | Bin 1225 -> 1150 bytes nextjs/public/manifest.json | 59 +- .../static/icons/android-icon-144x144.png | Bin 0 -> 8632 bytes .../static/icons/android-icon-192x192.png | Bin 0 -> 10797 bytes .../static/icons/android-icon-36x36.png | Bin 0 -> 1882 bytes .../static/icons/android-icon-48x48.png | Bin 0 -> 2503 bytes .../static/icons/android-icon-72x72.png | Bin 0 -> 3819 bytes .../static/icons/android-icon-96x96.png | Bin 0 -> 5306 bytes .../static/icons/apple-icon-114x114.png | Bin 0 -> 6406 bytes .../static/icons/apple-icon-120x120.png | Bin 0 -> 6844 bytes .../static/icons/apple-icon-144x144.png | Bin 0 -> 8632 bytes .../static/icons/apple-icon-152x152.png | Bin 0 -> 9185 bytes .../static/icons/apple-icon-180x180.png | Bin 0 -> 11425 bytes .../public/static/icons/apple-icon-57x57.png | Bin 0 -> 2945 bytes .../public/static/icons/apple-icon-60x60.png | Bin 0 -> 3101 bytes .../public/static/icons/apple-icon-72x72.png | Bin 0 -> 3819 bytes .../public/static/icons/apple-icon-76x76.png | Bin 0 -> 4051 bytes .../static/icons/apple-icon-precomposed.png | Bin 0 -> 11373 bytes nextjs/public/static/icons/apple-icon.png | Bin 0 -> 11373 bytes nextjs/public/static/icons/favicon-16x16.png | Bin 0 -> 1502 bytes nextjs/public/static/icons/favicon-32x32.png | Bin 0 -> 2346 bytes nextjs/public/static/icons/favicon-96x96.png | Bin 0 -> 7514 bytes nextjs/public/static/icons/maskable_icon.png | Bin 0 -> 8887 bytes .../public/static/icons/ms-icon-144x144.png | Bin 0 -> 8632 bytes .../public/static/icons/ms-icon-150x150.png | Bin 0 -> 8994 bytes .../public/static/icons/ms-icon-310x310.png | Bin 0 -> 25055 bytes nextjs/public/static/icons/ms-icon-70x70.png | Bin 0 -> 3713 bytes nextjs/src/aws-exports.js | 18 - nextjs/src/aws-video-exports.js | 8 - .../keys => nextjs/src/components}/.gitkeep | 0 nextjs/src/components/ActiveLink.tsx | 22 + nextjs/src/components/Admin/AdminMenu.tsx | 270 + nextjs/src/components/Admin/AdminTopBar.tsx | 60 + nextjs/src/components/Admin/EditPost.tsx | 93 + nextjs/src/components/Admin/EditPosts.tsx | 62 + nextjs/src/components/FirebaseAuth.tsx | 76 + nextjs/src/components/Home/Intro.tsx | 23 + nextjs/src/components/OutsideClick.tsx | 43 + nextjs/src/components/PostsCards.tsx | 56 + nextjs/src/components/RecentPostsCards.tsx | 102 + nextjs/src/components/RecentPostsList.tsx | 26 + nextjs/src/components/User/ProfileCard.tsx | 36 + nextjs/src/components/UserSignin.tsx | 150 + nextjs/src/components/global/icons/AJLogo.tsx | 141 + .../components/global/icons/AJLogoLeft.tsx | 139 + nextjs/src/components/global/icons/Blog.tsx | 194 + .../src/components/global/icons/Community.tsx | 46 + .../src/components/global/icons/Courses.tsx | 46 + nextjs/src/components/global/icons/Drip.tsx | 10 + .../src/components/global/icons/Podcasts.tsx | 356 + .../src/components/global/icons/Tutorials.tsx | 46 + .../components/global/logos/SloganNunito.tsx | 13 + .../src/components/global/logos/TitleLogo.tsx | 35 + .../components/global/logos/TitleNunito.tsx | 17 + .../global/logos/TitleSloganLogo.tsx | 40 + nextjs/src/config/firebase.ts | 23 + nextjs/src/fonts/HennyPenny-Regular.ttf | Bin 0 -> 80500 bytes nextjs/src/graphql/mutations.js | 637 +- nextjs/src/graphql/queries.js | 437 +- nextjs/src/graphql/schema.json | 3021 ++-- nextjs/src/graphql/subscriptions.js | 306 +- nextjs/src/layout/AppMenu.tsx | 112 + nextjs/src/layout/AppTopbar.tsx | 280 + nextjs/src/pages/[...permalink].tsx | 130 + nextjs/src/pages/_app.tsx | 80 + nextjs/src/pages/_document.tsx | 137 + nextjs/src/pages/admin/[type].tsx | 57 + nextjs/src/pages/admin/[type]/[id].tsx | 40 + nextjs/src/pages/admin/index.tsx | 64 + nextjs/{ => src}/pages/api/.gitkeep | 0 nextjs/src/pages/blog.tsx | 43 + nextjs/src/pages/community.tsx | 17 + nextjs/src/pages/courses.tsx | 17 + nextjs/src/pages/design/atoms.tsx | 116 + nextjs/src/pages/design/components.tsx | 40 + nextjs/src/pages/design/index.tsx | 25 + nextjs/src/pages/index.tsx | 50 + nextjs/src/pages/podcasts.tsx | 42 + nextjs/src/pages/signin.tsx | 24 + nextjs/src/pages/tutorials.tsx | 42 + nextjs/src/pages/user/profile.tsx | 25 + nextjs/src/services/api.ts | 57 + nextjs/src/styles/globals.css | 42 + nextjs/src/utils/auth/firebaseAdmin.ts | 24 + nextjs/src/utils/auth/mapUserData.ts | 9 + nextjs/src/utils/auth/useUser.tsx | 65 + nextjs/src/utils/auth/userCookies.ts | 19 + nextjs/src/utils/firebaseAdmin.ts | 13 + nextjs/src/utils/initFirebase.ts | 19 + nextjs/styles/globals.css | 10 - nextjs/tailwind.config.js | 236 +- nextjs/tsconfig.json | 28 +- package-lock.json | 12 + remoteconfig.template.json | 0 storage.rules | 8 + 292 files changed, 39612 insertions(+), 19147 deletions(-) create mode 100644 .firebaserc delete mode 100644 .graphqlconfig.yml create mode 100644 .stylelintrc create mode 100644 .vscode/launch.json delete mode 100644 amplify/.config/project-config.json delete mode 100644 amplify/backend/api/ccd/parameters.json delete mode 100644 amplify/backend/api/ccd/schema.graphql delete mode 100644 amplify/backend/api/ccd/stacks/CustomResources.json delete mode 100644 amplify/backend/api/ccd/transform.conf.json delete mode 100644 amplify/backend/auth/ccdb1bcb9cf/ccdb1bcb9cf-cloudformation-template.yml delete mode 100644 amplify/backend/auth/ccdb1bcb9cf/parameters.json delete mode 100644 amplify/backend/auth/userPoolGroups/parameters.json delete mode 100644 amplify/backend/auth/userPoolGroups/template.json delete mode 100644 amplify/backend/auth/userPoolGroups/user-pool-group-precedence.json delete mode 100644 amplify/backend/backend-config.json delete mode 100644 amplify/backend/tags.json delete mode 100644 amplify/backend/video/ccdvod/mediaconvert-job-temp.json delete mode 100644 amplify/backend/video/ccdvod/parameters.json delete mode 100644 amplify/backend/video/ccdvod/props.json delete mode 100644 amplify/cli.json delete mode 100644 amplify/keys/.gitignore delete mode 100644 amplify/keys/README.md delete mode 100644 backend-cdk/.gitignore delete mode 100644 backend-cdk/.npmignore delete mode 100644 backend-cdk/README.md delete mode 100644 backend-cdk/bin/backend.ts delete mode 100644 backend-cdk/cdk.json delete mode 100644 backend-cdk/graphql/schema.graphql delete mode 100644 backend-cdk/jest.config.js delete mode 100644 backend-cdk/lambdas/Post.ts delete mode 100644 backend-cdk/lambdas/createPost.ts delete mode 100644 backend-cdk/lambdas/db.ts delete mode 100644 backend-cdk/lambdas/deletePost.ts delete mode 100644 backend-cdk/lambdas/getPostById.ts delete mode 100644 backend-cdk/lambdas/index.ts delete mode 100644 backend-cdk/lambdas/listPosts.ts delete mode 100644 backend-cdk/lambdas/package-lock.json delete mode 100644 backend-cdk/lambdas/updatePost.ts delete mode 100644 backend-cdk/lib/backend-stack.ts delete mode 100644 backend-cdk/package-lock.json delete mode 100644 backend-cdk/package.json delete mode 100644 backend-cdk/test/backend.test.ts delete mode 100644 backend-cdk/tsconfig.json create mode 100644 data/.gitignore create mode 100644 data/classic-editor-remember.md create mode 100644 data/courses.json create mode 100644 data/firebase/postsUpload.js create mode 100644 data/lessons.json create mode 100644 data/markdown/.DS_Store create mode 100644 data/markdown/lessons/_lessons.json create mode 100644 data/markdown/lessons/ajs-coding-tools.md create mode 100644 data/markdown/lessons/angular-material-dynamic-navigation-using-firestore.md create mode 100644 data/markdown/lessons/angular-material-forms-from-firestore.md create mode 100644 data/markdown/lessons/angular-material-reactive-forms-update-firestore.md create mode 100644 data/markdown/lessons/angular-material-router-awareness.md create mode 100644 data/markdown/lessons/angular-material-router-outlet.md create mode 100644 data/markdown/lessons/angular-material-theming.md create mode 100644 data/markdown/lessons/firebase-authentication-and-authorization.md create mode 100644 data/markdown/lessons/firebase-project-hosting.md create mode 100644 data/markdown/lessons/firestore-modeling.md create mode 100644 data/markdown/lessons/how-to-sign-in-on-codingcatdev.md create mode 100644 data/markdown/lessons/html-basics.md create mode 100644 data/markdown/lessons/html-table.md create mode 100644 data/markdown/lessons/intro.md create mode 100644 data/markdown/lessons/materialui.md create mode 100644 data/markdown/lessons/microbit-intro.md create mode 100644 data/markdown/lessons/project-hosting.md create mode 100644 data/markdown/lessons/setup.md create mode 100644 data/markdown/lessons/ssr-part-1.md create mode 100644 data/markdown/lessons/ssr-part-2.md create mode 100644 data/markdown/lessons/what-you-will-learn.md create mode 100644 data/markdown/podcasts/0-0-the-purrfect-beginning.md create mode 100644 data/markdown/podcasts/0-1-purrfect-origin-story.md create mode 100644 data/markdown/podcasts/0-10-amplify-with-nader-dabit.md create mode 100644 data/markdown/podcasts/0-2-purrfect-program-management.md create mode 100644 data/markdown/podcasts/0-3-cloudinary-community.md create mode 100644 data/markdown/podcasts/0-4-sanity-io.md create mode 100644 data/markdown/podcasts/0-5-agile-methodology.md create mode 100644 data/markdown/podcasts/0-6-nextjs-with-guillermo-rauch.md create mode 100644 data/markdown/podcasts/0-7-scully-with-aaron-frost.md create mode 100644 data/markdown/podcasts/0-8-cloudinary-with-tessa-mero.md create mode 100644 data/markdown/podcasts/0-9-jeff-delaney-of-fireship-io.md create mode 100644 data/markdown/podcasts/_podcasts.json create mode 100644 data/markdown/podcasts/infrastructure-as-code-with-pulumi.md create mode 100644 data/markdown/posts/_posts.json create mode 100644 data/markdown/posts/adding-angular-components-to-your-static-site.md create mode 100644 data/markdown/posts/adding-web-component-for-ionic-modals.md create mode 100644 data/markdown/posts/aj-is-loving-sticker-mule.md create mode 100644 data/markdown/posts/ajonp-rebranded.md create mode 100644 data/markdown/posts/ajs-week-in-web-december-04-2019.md create mode 100644 data/markdown/posts/ajs-week-in-web-december-11-2019.md create mode 100644 data/markdown/posts/ajs-week-in-web-december-18-2019.md create mode 100644 data/markdown/posts/ajs-week-in-web-january-08-2020.md create mode 100644 data/markdown/posts/ajs-week-in-web-january-15-2020.md create mode 100644 data/markdown/posts/ajs-week-in-web-january-22-2020.md create mode 100644 data/markdown/posts/ajs-week-in-web-november-06-2019.md create mode 100644 data/markdown/posts/ajs-week-in-web-november-13-2019.md create mode 100644 data/markdown/posts/ajs-week-in-web-november-20-2019.md create mode 100644 data/markdown/posts/anchor-links-from-sanity-in-gatsby.md create mode 100644 data/markdown/posts/aws-amplify-vs-aws-cdk-2020.md create mode 100644 data/markdown/posts/better-performance-through-analysis.md create mode 100644 data/markdown/posts/building-a-fun-app-with-ionic-studio-and-cloudinary.md create mode 100644 data/markdown/posts/cloud-function-github-update.md create mode 100644 data/markdown/posts/cloudinary-in-jamstacks-using-webp.md create mode 100644 data/markdown/posts/debug-angular-9-in-chrome-console.md create mode 100644 data/markdown/posts/firebase-hosting-version-settings.md create mode 100644 data/markdown/posts/front-end-web-development-podcasts.md create mode 100644 data/markdown/posts/gatsby-cloud-with-sanity-cms.md create mode 100644 data/markdown/posts/google-cloud-reference.md create mode 100644 data/markdown/posts/increasing-productivity-with-notion.md create mode 100644 data/markdown/posts/ionic-icons.md create mode 100644 data/markdown/posts/jamstackgr-1-sanity-io-as-a-backend.md create mode 100644 data/markdown/posts/jamstackgr-2-git-your-build-system-right-vs-deploying-fast.md create mode 100644 data/markdown/posts/jamstackgr-3-getting-started-with-serverless.md create mode 100644 data/markdown/posts/jamstackgr-4-scully-an-angular-static-site-generator.md create mode 100644 data/markdown/posts/kinsta-saved-codingcatdevs-lms-dream-after-3-others-failed.md create mode 100644 data/markdown/posts/moving-to-wordpress.md create mode 100644 data/markdown/posts/scully-io-anguler-static-site-generator.md create mode 100644 data/markdown/posts/sendinblue-codingcatdevs-email-solution.md create mode 100644 data/markdown/posts/slack-workspace-theme-customization.md create mode 100644 data/markdown/posts/updating-ajonps-brand.md create mode 100644 data/markdown/posts/vscode-extension-peacock.md create mode 100644 data/markdown/tutorials/_tutorials.json create mode 100644 data/markdown/tutorials/abap-hello-world.md create mode 100644 data/markdown/tutorials/abap-types-and-subroutines.md create mode 100644 data/markdown/tutorials/ajonp-hugo-ionic-template.md create mode 100644 data/markdown/tutorials/angular-cli-deploying.md create mode 100644 data/markdown/tutorials/angular-pwa-to-google-play-store-using-trusted-web-activity.md create mode 100644 data/markdown/tutorials/aws-amplify-video.md create mode 100644 data/markdown/tutorials/backup-sanity-with-cloud-firestore.md create mode 100644 data/markdown/tutorials/design-systems-with-web-components.md create mode 100644 data/markdown/tutorials/firebase-multisite-hosting.md create mode 100644 data/markdown/tutorials/git-your-build-system-right.md create mode 100644 data/markdown/tutorials/google-cloud-repositories-ci-cd.md create mode 100644 data/markdown/tutorials/hugo-ionic-template.md create mode 100644 data/markdown/tutorials/npm-tips-and-tricks.md create mode 100644 data/markdown/tutorials/rxfire-in-reactjs-using-firebase-firestore-and-authentication.md create mode 100644 data/markdown/tutorials/rxfire-in-svelte-3-using-firebase-firestore-and-authentication.md create mode 100644 data/markdown/tutorials/send-gcp-build-status-to-discord.md create mode 100644 data/markdown/tutorials/slap-someone-with-slack-commands.md create mode 100644 data/markdown/tutorials/use-firestore-to-build-hugo-content.md create mode 100644 data/package-lock.json rename {backend-cdk/lambdas => data}/package.json (60%) create mode 100644 data/posts/podcasts.json create mode 100644 data/posts/podcastsPutAll.js create mode 100644 data/posts/posts.json create mode 100644 data/posts/postsDeleteAll.js create mode 100644 data/posts/postsPutAll.js create mode 100644 data/posts/tutorials.json create mode 100644 data/posts/tutorialsPutAll.js create mode 100644 data/tutorials.json create mode 100644 database.rules.json create mode 100644 firebase.json create mode 100644 firestore.indexes.json create mode 100644 firestore.rules create mode 100644 functions/.eslintrc.js create mode 100644 functions/.gitignore create mode 100644 functions/package-lock.json create mode 100644 functions/package.json create mode 100644 functions/src/index.ts create mode 100644 functions/tsconfig.json create mode 100644 nextjs/.eslintrc.json create mode 100644 nextjs/.prettierrc delete mode 100644 nextjs/configureAmplify.ts delete mode 100644 nextjs/layout/AppMenu.tsx delete mode 100644 nextjs/layout/AppTopbar.tsx delete mode 100644 nextjs/layout/_overrides.scss delete mode 100644 nextjs/layout/_variables.scss delete mode 100644 nextjs/layout/layout.scss delete mode 100644 nextjs/layout/sass/_config.scss delete mode 100644 nextjs/layout/sass/_content.scss delete mode 100644 nextjs/layout/sass/_dashboard.scss delete mode 100644 nextjs/layout/sass/_footer.scss delete mode 100644 nextjs/layout/sass/_layout.scss delete mode 100644 nextjs/layout/sass/_main.scss delete mode 100644 nextjs/layout/sass/_menu.scss delete mode 100644 nextjs/layout/sass/_mixins.scss delete mode 100644 nextjs/layout/sass/_profile.scss delete mode 100644 nextjs/layout/sass/_responsive.scss delete mode 100644 nextjs/layout/sass/_sidebar.scss delete mode 100644 nextjs/layout/sass/_splash.scss delete mode 100644 nextjs/layout/sass/_topbar.scss delete mode 100644 nextjs/layout/sass/_typography.scss delete mode 100644 nextjs/layout/sass/_utils.scss create mode 100644 nextjs/next.config.js delete mode 100644 nextjs/pages/_app.tsx delete mode 100644 nextjs/pages/blog.tsx delete mode 100644 nextjs/pages/blog/[id].tsx delete mode 100644 nextjs/pages/index.tsx delete mode 100644 nextjs/public/assets/layout/images/logo.svg delete mode 100644 nextjs/public/assets/layout/images/preloader.gif create mode 100644 nextjs/public/browserconfig.xml create mode 100644 nextjs/public/static/icons/android-icon-144x144.png create mode 100644 nextjs/public/static/icons/android-icon-192x192.png create mode 100644 nextjs/public/static/icons/android-icon-36x36.png create mode 100644 nextjs/public/static/icons/android-icon-48x48.png create mode 100644 nextjs/public/static/icons/android-icon-72x72.png create mode 100644 nextjs/public/static/icons/android-icon-96x96.png create mode 100644 nextjs/public/static/icons/apple-icon-114x114.png create mode 100644 nextjs/public/static/icons/apple-icon-120x120.png create mode 100644 nextjs/public/static/icons/apple-icon-144x144.png create mode 100644 nextjs/public/static/icons/apple-icon-152x152.png create mode 100644 nextjs/public/static/icons/apple-icon-180x180.png create mode 100644 nextjs/public/static/icons/apple-icon-57x57.png create mode 100644 nextjs/public/static/icons/apple-icon-60x60.png create mode 100644 nextjs/public/static/icons/apple-icon-72x72.png create mode 100644 nextjs/public/static/icons/apple-icon-76x76.png create mode 100644 nextjs/public/static/icons/apple-icon-precomposed.png create mode 100644 nextjs/public/static/icons/apple-icon.png create mode 100644 nextjs/public/static/icons/favicon-16x16.png create mode 100644 nextjs/public/static/icons/favicon-32x32.png create mode 100644 nextjs/public/static/icons/favicon-96x96.png create mode 100644 nextjs/public/static/icons/maskable_icon.png create mode 100644 nextjs/public/static/icons/ms-icon-144x144.png create mode 100644 nextjs/public/static/icons/ms-icon-150x150.png create mode 100644 nextjs/public/static/icons/ms-icon-310x310.png create mode 100644 nextjs/public/static/icons/ms-icon-70x70.png delete mode 100644 nextjs/src/aws-exports.js delete mode 100644 nextjs/src/aws-video-exports.js rename {amplify/keys => nextjs/src/components}/.gitkeep (100%) create mode 100644 nextjs/src/components/ActiveLink.tsx create mode 100644 nextjs/src/components/Admin/AdminMenu.tsx create mode 100644 nextjs/src/components/Admin/AdminTopBar.tsx create mode 100644 nextjs/src/components/Admin/EditPost.tsx create mode 100644 nextjs/src/components/Admin/EditPosts.tsx create mode 100644 nextjs/src/components/FirebaseAuth.tsx create mode 100644 nextjs/src/components/Home/Intro.tsx create mode 100644 nextjs/src/components/OutsideClick.tsx create mode 100644 nextjs/src/components/PostsCards.tsx create mode 100644 nextjs/src/components/RecentPostsCards.tsx create mode 100644 nextjs/src/components/RecentPostsList.tsx create mode 100644 nextjs/src/components/User/ProfileCard.tsx create mode 100644 nextjs/src/components/UserSignin.tsx create mode 100644 nextjs/src/components/global/icons/AJLogo.tsx create mode 100644 nextjs/src/components/global/icons/AJLogoLeft.tsx create mode 100644 nextjs/src/components/global/icons/Blog.tsx create mode 100644 nextjs/src/components/global/icons/Community.tsx create mode 100644 nextjs/src/components/global/icons/Courses.tsx create mode 100644 nextjs/src/components/global/icons/Drip.tsx create mode 100644 nextjs/src/components/global/icons/Podcasts.tsx create mode 100644 nextjs/src/components/global/icons/Tutorials.tsx create mode 100644 nextjs/src/components/global/logos/SloganNunito.tsx create mode 100644 nextjs/src/components/global/logos/TitleLogo.tsx create mode 100644 nextjs/src/components/global/logos/TitleNunito.tsx create mode 100644 nextjs/src/components/global/logos/TitleSloganLogo.tsx create mode 100644 nextjs/src/config/firebase.ts create mode 100644 nextjs/src/fonts/HennyPenny-Regular.ttf create mode 100644 nextjs/src/layout/AppMenu.tsx create mode 100644 nextjs/src/layout/AppTopbar.tsx create mode 100644 nextjs/src/pages/[...permalink].tsx create mode 100644 nextjs/src/pages/_app.tsx create mode 100644 nextjs/src/pages/_document.tsx create mode 100644 nextjs/src/pages/admin/[type].tsx create mode 100644 nextjs/src/pages/admin/[type]/[id].tsx create mode 100644 nextjs/src/pages/admin/index.tsx rename nextjs/{ => src}/pages/api/.gitkeep (100%) create mode 100644 nextjs/src/pages/blog.tsx create mode 100644 nextjs/src/pages/community.tsx create mode 100644 nextjs/src/pages/courses.tsx create mode 100644 nextjs/src/pages/design/atoms.tsx create mode 100644 nextjs/src/pages/design/components.tsx create mode 100644 nextjs/src/pages/design/index.tsx create mode 100644 nextjs/src/pages/index.tsx create mode 100644 nextjs/src/pages/podcasts.tsx create mode 100644 nextjs/src/pages/signin.tsx create mode 100644 nextjs/src/pages/tutorials.tsx create mode 100644 nextjs/src/pages/user/profile.tsx create mode 100644 nextjs/src/services/api.ts create mode 100644 nextjs/src/styles/globals.css create mode 100644 nextjs/src/utils/auth/firebaseAdmin.ts create mode 100644 nextjs/src/utils/auth/mapUserData.ts create mode 100644 nextjs/src/utils/auth/useUser.tsx create mode 100644 nextjs/src/utils/auth/userCookies.ts create mode 100644 nextjs/src/utils/firebaseAdmin.ts create mode 100644 nextjs/src/utils/initFirebase.ts delete mode 100644 nextjs/styles/globals.css create mode 100644 package-lock.json create mode 100644 remoteconfig.template.json create mode 100644 storage.rules diff --git a/.firebaserc b/.firebaserc new file mode 100644 index 000000000..2b7a2b981 --- /dev/null +++ b/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "dev-codingcat-dev" + } +} diff --git a/.gitignore b/.gitignore index b02958e44..8bb034196 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,71 @@ -#amplify -amplify/\#current-cloud-backend -amplify/.config/local-* -amplify/mock-data -amplify/backend/amplify-meta.json -amplify/backend/awscloudformation -build/ -dist/ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +firebase-debug.log* +firebase-debug.*.log* + +# Firebase cache +.firebase/ + +# Firebase config + +# Uncomment this if you'd like others to create their own Firebase project. +# For a team working on the same Firebase project(s), it is recommended to leave +# it commented so all members can deploy to the same project(s) in .firebaserc. +# .firebaserc + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories node_modules/ -awsconfiguration.json -amplifyconfiguration.json -amplify-build-config.json -amplify-gradle-config.json -amplifytools.xcconfig -amplify/team-provider-info.json - -#PUT THIS BACK FOR PUBLIC REPO -# aws-exports.js + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# firebase secrets +serviceAccountKey.json + +.DS_Store diff --git a/.graphqlconfig.yml b/.graphqlconfig.yml deleted file mode 100644 index 0984f7932..000000000 --- a/.graphqlconfig.yml +++ /dev/null @@ -1,15 +0,0 @@ -projects: - ccd: - schemaPath: nextjs/src/graphql/schema.json - includes: - - nextjs/src/graphql/**/*.js - excludes: - - ./amplify/** - extensions: - amplify: - codeGenTarget: javascript - generatedFileName: "" - docsFilePath: nextjs/src/graphql -extensions: - amplify: - version: 3 diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 000000000..3725b346b --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,13 @@ +{ + "extends": "stylelint-config-recommended", + "rules": { + "at-rule-no-unknown": [ true, { + "ignoreAtRules": [ + "extends", + "tailwind" + ] + }], + "block-no-empty": null, + "unit-whitelist": ["em", "rem", "s"] + } +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..46cadb129 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,27 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Program", + "program": "${workspaceFolder}/data/posts/postsPutAll.js", + "request": "launch", + "skipFiles": ["/**"], + "type": "pwa-node", + "console": "integratedTerminal" + }, + + { + "type": "node", + "request": "attach", + "name": "Next.js Debug", + "skipFiles": ["/**"], + "port": 9229, + "sourceMapPathOverrides": { + "webpack:///./*": "${workspaceRoot}/nextjs/*" + } + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 148755950..4f5ec977d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,5 +8,7 @@ "amplify/backend/amplify-meta.json": true, "amplify/backend/awscloudformation": true }, - "editor.formatOnSave": true -} \ No newline at end of file + "editor.formatOnSave": true, + "css.validate": false, + "stylelint.enable": true +} diff --git a/amplify/.config/project-config.json b/amplify/.config/project-config.json deleted file mode 100644 index 47002b79b..000000000 --- a/amplify/.config/project-config.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "projectName": "ccd", - "version": "3.0", - "frontend": "javascript", - "javascript": { - "framework": "react", - "config": { - "SourceDir": "nextjs/src", - "DistributionDir": "build", - "BuildCommand": "npm run-script build", - "StartCommand": "npm run-script start" - } - }, - "providers": [ - "awscloudformation" - ] -} \ No newline at end of file diff --git a/amplify/backend/api/ccd/parameters.json b/amplify/backend/api/ccd/parameters.json deleted file mode 100644 index 41c423c91..000000000 --- a/amplify/backend/api/ccd/parameters.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "AppSyncApiName": "ccd", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "AuthCognitoUserPoolId": { - "Fn::GetAtt": [ - "authccdb1bcb9cf", - "Outputs.UserPoolId" - ] - } -} \ No newline at end of file diff --git a/amplify/backend/api/ccd/schema.graphql b/amplify/backend/api/ccd/schema.graphql deleted file mode 100644 index cff05a71f..000000000 --- a/amplify/backend/api/ccd/schema.graphql +++ /dev/null @@ -1,131 +0,0 @@ -type Blog - @model(subscriptions: null) - @aws_api_key - @aws_cognito_user_pools - @auth( - rules: [ - { allow: public, provider: apiKey } - { - allow: groups - groups: ["Admin"] - queries: null - mutations: [create, update, delete] - } - { - allow: groups - groups: ["Subscriber"] - queries: [get, list] - mutations: null - } - ] - ) { - id: ID! - title: String! - posts: [Post] @connection(name: "BlogPosts") -} -type Post - @model(subscriptions: null) - @aws_api_key - @aws_cognito_user_pools - @searchable - @auth( - rules: [ - { allow: public, provider: apiKey } - { - allow: groups - groups: ["Admin"] - queries: null - mutations: [create, update, delete] - } - { - allow: groups - groups: ["Subscriber"] - queries: [get, list] - mutations: null - } - ] - ) { - id: ID! - post_type: String! - post_title: String! - post_name: String! - post_tags: [String!] - post_content: String - post_excerpt: String - post_status: Boolean - comment_status: Boolean - ping_status: Boolean - comment_count: Int - post_featured_image: String - blog: Blog @connection(name: "BlogPosts") - comments: [Comment] @connection(name: "PostComments") - category: [Category] @connection(name: "PostCategories") -} -type Comment - @aws_api_key - @aws_cognito_user_pools - @model - @auth( - rules: [ - { allow: owner } - { - allow: groups - groups: ["Admin"] - queries: null - mutations: [create, update, delete] - } - { - allow: groups - groups: ["Subscriber"] - queries: [get, list] - mutations: null - } - ] - ) { - id: ID! - content: String - post: Post @connection(name: "PostComments") -} -type Category @model @auth(rules: [{ allow: groups, groups: ["Admin"] }]) { - id: ID! - name: String! - post: Post @connection(name: "PostCategories") -} - -type vodAsset - @model(subscriptions: { level: public }) - @auth( - rules: [ - { - allow: groups - groups: ["Admin"] - operations: [create, update, delete, read] - } - { allow: private, operations: [read] } - ] - ) { - id: ID! - title: String! - description: String! - - #DO NOT EDIT - video: videoObject @connection -} - -#DO NOT EDIT -type videoObject - @model - @auth( - rules: [ - { - allow: groups - groups: ["Admin"] - operations: [create, update, delete, read] - } - { allow: private, operations: [read] } - ] - ) { - id: ID! - - token: String @function(name: "ccdvod-{env}-tokenGen") -} diff --git a/amplify/backend/api/ccd/stacks/CustomResources.json b/amplify/backend/api/ccd/stacks/CustomResources.json deleted file mode 100644 index f95feea37..000000000 --- a/amplify/backend/api/ccd/stacks/CustomResources.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "AWSTemplateFormatVersion": "2010-09-09", - "Description": "An auto-generated nested stack.", - "Metadata": {}, - "Parameters": { - "AppSyncApiId": { - "Type": "String", - "Description": "The id of the AppSync API associated with this project." - }, - "AppSyncApiName": { - "Type": "String", - "Description": "The name of the AppSync API", - "Default": "AppSyncSimpleTransform" - }, - "env": { - "Type": "String", - "Description": "The environment name. e.g. Dev, Test, or Production", - "Default": "NONE" - }, - "S3DeploymentBucket": { - "Type": "String", - "Description": "The S3 bucket containing all deployment assets for the project." - }, - "S3DeploymentRootKey": { - "Type": "String", - "Description": "An S3 key relative to the S3DeploymentBucket that points to the root\nof the deployment directory." - } - }, - "Resources": { - "EmptyResource": { - "Type": "Custom::EmptyResource", - "Condition": "AlwaysFalse" - } - }, - "Conditions": { - "HasEnvironmentParameter": { - "Fn::Not": [ - { - "Fn::Equals": [ - { - "Ref": "env" - }, - "NONE" - ] - } - ] - }, - "AlwaysFalse": { - "Fn::Equals": ["true", "false"] - } - }, - "Outputs": { - "EmptyOutput": { - "Description": "An empty output. You may delete this if you have at least one resource above.", - "Value": "" - } - } -} diff --git a/amplify/backend/api/ccd/transform.conf.json b/amplify/backend/api/ccd/transform.conf.json deleted file mode 100644 index 98e1e19f0..000000000 --- a/amplify/backend/api/ccd/transform.conf.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "Version": 5, - "ElasticsearchWarning": true -} \ No newline at end of file diff --git a/amplify/backend/auth/ccdb1bcb9cf/ccdb1bcb9cf-cloudformation-template.yml b/amplify/backend/auth/ccdb1bcb9cf/ccdb1bcb9cf-cloudformation-template.yml deleted file mode 100644 index b53815fcb..000000000 --- a/amplify/backend/auth/ccdb1bcb9cf/ccdb1bcb9cf-cloudformation-template.yml +++ /dev/null @@ -1,370 +0,0 @@ -AWSTemplateFormatVersion: 2010-09-09 - -Parameters: - env: - Type: String - authRoleArn: - Type: String - unauthRoleArn: - Type: String - - - - - identityPoolName: - Type: String - - allowUnauthenticatedIdentities: - Type: String - - resourceNameTruncated: - Type: String - - userPoolName: - Type: String - - autoVerifiedAttributes: - Type: CommaDelimitedList - - mfaConfiguration: - Type: String - - mfaTypes: - Type: CommaDelimitedList - - smsAuthenticationMessage: - Type: String - - smsVerificationMessage: - Type: String - - emailVerificationSubject: - Type: String - - emailVerificationMessage: - Type: String - - defaultPasswordPolicy: - Type: String - - passwordPolicyMinLength: - Type: Number - - passwordPolicyCharacters: - Type: CommaDelimitedList - - requiredAttributes: - Type: CommaDelimitedList - - userpoolClientGenerateSecret: - Type: String - - userpoolClientRefreshTokenValidity: - Type: Number - - userpoolClientWriteAttributes: - Type: CommaDelimitedList - - userpoolClientReadAttributes: - Type: CommaDelimitedList - - userpoolClientLambdaRole: - Type: String - - userpoolClientSetAttributes: - Type: String - - sharedId: - Type: String - - resourceName: - Type: String - - authSelections: - Type: String - - useDefault: - Type: String - - userPoolGroupList: - Type: CommaDelimitedList - - serviceName: - Type: String - - dependsOn: - Type: CommaDelimitedList - -Conditions: - ShouldNotCreateEnvResources: !Equals [ !Ref env, NONE ] - -Resources: - - - # BEGIN SNS ROLE RESOURCE - SNSRole: - # Created to allow the UserPool SMS Config to publish via the Simple Notification Service during MFA Process - Type: AWS::IAM::Role - Properties: - RoleName: !If [ShouldNotCreateEnvResources, 'ccdb1bcb9cf_sns-role', !Join ['',[ 'sns', 'b1bcb9cf', !Select [3, !Split ['-', !Ref 'AWS::StackName']], '-', !Ref env]]] - AssumeRolePolicyDocument: - Version: "2012-10-17" - Statement: - - Sid: "" - Effect: "Allow" - Principal: - Service: "cognito-idp.amazonaws.com" - Action: - - "sts:AssumeRole" - Condition: - StringEquals: - sts:ExternalId: ccdb1bcb9cf_role_external_id - Policies: - - - PolicyName: ccdb1bcb9cf-sns-policy - PolicyDocument: - Version: "2012-10-17" - Statement: - - - Effect: "Allow" - Action: - - "sns:Publish" - Resource: "*" - # BEGIN USER POOL RESOURCES - UserPool: - # Created upon user selection - # Depends on SNS Role for Arn if MFA is enabled - Type: AWS::Cognito::UserPool - UpdateReplacePolicy: Retain - Properties: - UserPoolName: !If [ShouldNotCreateEnvResources, !Ref userPoolName, !Join ['',[!Ref userPoolName, '-', !Ref env]]] - - Schema: - - - - Name: email - Required: true - Mutable: true - - - - - AutoVerifiedAttributes: !Ref autoVerifiedAttributes - - - EmailVerificationMessage: !Ref emailVerificationMessage - EmailVerificationSubject: !Ref emailVerificationSubject - - Policies: - PasswordPolicy: - MinimumLength: !Ref passwordPolicyMinLength - RequireLowercase: false - RequireNumbers: false - RequireSymbols: false - RequireUppercase: false - - MfaConfiguration: !Ref mfaConfiguration - SmsVerificationMessage: !Ref smsVerificationMessage - SmsConfiguration: - SnsCallerArn: !GetAtt SNSRole.Arn - ExternalId: ccdb1bcb9cf_role_external_id - - - UserPoolClientWeb: - # Created provide application access to user pool - # Depends on UserPool for ID reference - Type: "AWS::Cognito::UserPoolClient" - Properties: - ClientName: ccdb1bcb9cf_app_clientWeb - - RefreshTokenValidity: !Ref userpoolClientRefreshTokenValidity - UserPoolId: !Ref UserPool - DependsOn: UserPool - UserPoolClient: - # Created provide application access to user pool - # Depends on UserPool for ID reference - Type: "AWS::Cognito::UserPoolClient" - Properties: - ClientName: ccdb1bcb9cf_app_client - - GenerateSecret: !Ref userpoolClientGenerateSecret - RefreshTokenValidity: !Ref userpoolClientRefreshTokenValidity - UserPoolId: !Ref UserPool - DependsOn: UserPool - # BEGIN USER POOL LAMBDA RESOURCES - UserPoolClientRole: - # Created to execute Lambda which gets userpool app client config values - Type: 'AWS::IAM::Role' - Properties: - RoleName: !If [ShouldNotCreateEnvResources, !Ref userpoolClientLambdaRole, !Join ['',['upClientLambdaRole', 'b1bcb9cf', !Select [3, !Split ['-', !Ref 'AWS::StackName']], '-', !Ref env]]] - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: - - lambda.amazonaws.com - Action: - - 'sts:AssumeRole' - DependsOn: UserPoolClient - UserPoolClientLambda: - # Lambda which gets userpool app client config values - # Depends on UserPool for id - # Depends on UserPoolClientRole for role ARN - Type: 'AWS::Lambda::Function' - Properties: - Code: - ZipFile: !Join - - |+ - - - 'const response = require(''cfn-response'');' - - 'const aws = require(''aws-sdk'');' - - 'const identity = new aws.CognitoIdentityServiceProvider();' - - 'exports.handler = (event, context, callback) => {' - - ' if (event.RequestType == ''Delete'') { ' - - ' response.send(event, context, response.SUCCESS, {})' - - ' }' - - ' if (event.RequestType == ''Update'' || event.RequestType == ''Create'') {' - - ' const params = {' - - ' ClientId: event.ResourceProperties.clientId,' - - ' UserPoolId: event.ResourceProperties.userpoolId' - - ' };' - - ' identity.describeUserPoolClient(params).promise()' - - ' .then((res) => {' - - ' response.send(event, context, response.SUCCESS, {''appSecret'': res.UserPoolClient.ClientSecret});' - - ' })' - - ' .catch((err) => {' - - ' response.send(event, context, response.FAILED, {err});' - - ' });' - - ' }' - - '};' - Handler: index.handler - Runtime: nodejs10.x - Timeout: '300' - Role: !GetAtt - - UserPoolClientRole - - Arn - DependsOn: UserPoolClientRole - UserPoolClientLambdaPolicy: - # Sets userpool policy for the role that executes the Userpool Client Lambda - # Depends on UserPool for Arn - # Marked as depending on UserPoolClientRole for easier to understand CFN sequencing - Type: 'AWS::IAM::Policy' - Properties: - PolicyName: ccdb1bcb9cf_userpoolclient_lambda_iam_policy - Roles: - - !Ref UserPoolClientRole - PolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: - - 'cognito-idp:DescribeUserPoolClient' - Resource: !GetAtt UserPool.Arn - DependsOn: UserPoolClientLambda - UserPoolClientLogPolicy: - # Sets log policy for the role that executes the Userpool Client Lambda - # Depends on UserPool for Arn - # Marked as depending on UserPoolClientLambdaPolicy for easier to understand CFN sequencing - Type: 'AWS::IAM::Policy' - Properties: - PolicyName: ccdb1bcb9cf_userpoolclient_lambda_log_policy - Roles: - - !Ref UserPoolClientRole - PolicyDocument: - Version: 2012-10-17 - Statement: - - Effect: Allow - Action: - - 'logs:CreateLogGroup' - - 'logs:CreateLogStream' - - 'logs:PutLogEvents' - Resource: !Sub - - arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:* - - { region: !Ref "AWS::Region", account: !Ref "AWS::AccountId", lambda: !Ref UserPoolClientLambda} - DependsOn: UserPoolClientLambdaPolicy - UserPoolClientInputs: - # Values passed to Userpool client Lambda - # Depends on UserPool for Id - # Depends on UserPoolClient for Id - # Marked as depending on UserPoolClientLambdaPolicy for easier to understand CFN sequencing - Type: 'Custom::LambdaCallout' - Properties: - ServiceToken: !GetAtt UserPoolClientLambda.Arn - clientId: !Ref UserPoolClient - userpoolId: !Ref UserPool - DependsOn: UserPoolClientLogPolicy - - - - - - - - # BEGIN IDENTITY POOL RESOURCES - - - IdentityPool: - # Always created - Type: AWS::Cognito::IdentityPool - Properties: - IdentityPoolName: !If [ShouldNotCreateEnvResources, 'ccdb1bcb9cf_identitypool_b1bcb9cf', !Join ['',['ccdb1bcb9cf_identitypool_b1bcb9cf', '__', !Ref env]]] - - CognitoIdentityProviders: - - ClientId: !Ref UserPoolClient - ProviderName: !Sub - - cognito-idp.${region}.amazonaws.com/${client} - - { region: !Ref "AWS::Region", client: !Ref UserPool} - - ClientId: !Ref UserPoolClientWeb - ProviderName: !Sub - - cognito-idp.${region}.amazonaws.com/${client} - - { region: !Ref "AWS::Region", client: !Ref UserPool} - - AllowUnauthenticatedIdentities: !Ref allowUnauthenticatedIdentities - - - DependsOn: UserPoolClientInputs - - - IdentityPoolRoleMap: - # Created to map Auth and Unauth roles to the identity pool - # Depends on Identity Pool for ID ref - Type: AWS::Cognito::IdentityPoolRoleAttachment - Properties: - IdentityPoolId: !Ref IdentityPool - Roles: - unauthenticated: !Ref unauthRoleArn - authenticated: !Ref authRoleArn - DependsOn: IdentityPool - - -Outputs : - - IdentityPoolId: - Value: !Ref 'IdentityPool' - Description: Id for the identity pool - IdentityPoolName: - Value: !GetAtt IdentityPool.Name - - - - - UserPoolId: - Value: !Ref 'UserPool' - Description: Id for the user pool - UserPoolName: - Value: !Ref userPoolName - AppClientIDWeb: - Value: !Ref 'UserPoolClientWeb' - Description: The user pool app client id for web - AppClientID: - Value: !Ref 'UserPoolClient' - Description: The user pool app client id - AppClientSecret: - Value: !GetAtt UserPoolClientInputs.appSecret - - - - - - - diff --git a/amplify/backend/auth/ccdb1bcb9cf/parameters.json b/amplify/backend/auth/ccdb1bcb9cf/parameters.json deleted file mode 100644 index 9b0dc3f5e..000000000 --- a/amplify/backend/auth/ccdb1bcb9cf/parameters.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "identityPoolName": "ccdb1bcb9cf_identitypool_b1bcb9cf", - "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "ccdb1bcb9cf", - "userPoolName": "ccdb1bcb9cf_userpool_b1bcb9cf", - "autoVerifiedAttributes": [ - "email" - ], - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS Text Message" - ], - "smsAuthenticationMessage": "Your authentication code is {####}", - "smsVerificationMessage": "Your verification code is {####}", - "emailVerificationSubject": "Your verification code", - "emailVerificationMessage": "Your verification code is {####}", - "defaultPasswordPolicy": false, - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [], - "requiredAttributes": [ - "email" - ], - "userpoolClientGenerateSecret": true, - "userpoolClientRefreshTokenValidity": 30, - "userpoolClientWriteAttributes": [ - "email" - ], - "userpoolClientReadAttributes": [ - "email" - ], - "userpoolClientLambdaRole": "ccdb1bb1bcb9cf_userpoolclient_lambda_role", - "userpoolClientSetAttributes": false, - "sharedId": "b1bcb9cf", - "resourceName": "ccdb1bcb9cf", - "authSelections": "identityPoolAndUserPool", - "authRoleArn": { - "Fn::GetAtt": [ - "AuthRole", - "Arn" - ] - }, - "unauthRoleArn": { - "Fn::GetAtt": [ - "UnauthRole", - "Arn" - ] - }, - "useDefault": "default", - "userPoolGroupList": [], - "serviceName": "Cognito", - "dependsOn": [] -} \ No newline at end of file diff --git a/amplify/backend/auth/userPoolGroups/parameters.json b/amplify/backend/auth/userPoolGroups/parameters.json deleted file mode 100644 index baa5c1d91..000000000 --- a/amplify/backend/auth/userPoolGroups/parameters.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "AuthRoleArn": { - "Fn::GetAtt": [ - "AuthRole", - "Arn" - ] - }, - "UnauthRoleArn": { - "Fn::GetAtt": [ - "UnauthRole", - "Arn" - ] - } -} \ No newline at end of file diff --git a/amplify/backend/auth/userPoolGroups/template.json b/amplify/backend/auth/userPoolGroups/template.json deleted file mode 100644 index 319426a80..000000000 --- a/amplify/backend/auth/userPoolGroups/template.json +++ /dev/null @@ -1,331 +0,0 @@ -{ - "AWSTemplateFormatVersion": "2010-09-09", - "Parameters": { - "authccdb1bcb9cfUserPoolId": { - "Type": "String", - "Default": "authccdb1bcb9cfUserPoolId" - }, - - "authccdb1bcb9cfIdentityPoolId": { - "Type": "String", - "Default": "authccdb1bcb9cfIdentityPoolId" - }, - - "authccdb1bcb9cfAppClientID": { - "Type": "String", - "Default": "authccdb1bcb9cfAppClientID" - }, - "authccdb1bcb9cfAppClientIDWeb": { - "Type": "String", - "Default": "authccdb1bcb9cfAppClientIDWeb" - }, - "AuthRoleArn": { - "Type": "String" - }, - "UnauthRoleArn": { - "Type": "String" - }, - "env": { - "Type": "String" - } - }, - "Conditions": { - "ShouldNotCreateEnvResources": { - "Fn::Equals": [ - { - "Ref": "env" - }, - "NONE" - ] - } - }, - "Resources": { - - "AdminGroup": { - "Type" : "AWS::Cognito::UserPoolGroup", - "Properties" : { - "GroupName" : "Admin", - "Precedence" : 1, - - "RoleArn" : { - "Fn::GetAtt": [ - "AdminGroupRole", - "Arn" - ] - }, - - "UserPoolId" : { - "Ref": "authccdb1bcb9cfUserPoolId" - } - } - }, - - "AdminGroupRole": { - "Type": "AWS::IAM::Role", - "Properties": { - "RoleName":{ - "Fn::Join": [ - "", - [ - { - "Ref": "authccdb1bcb9cfUserPoolId" - }, - "-AdminGroupRole" - ] - ] - }, - "AssumeRolePolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "", - "Effect": "Allow", - "Principal": { - "Federated": "cognito-identity.amazonaws.com" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringEquals": {"cognito-identity.amazonaws.com:aud": {"Ref":"authccdb1bcb9cfIdentityPoolId"}}, - "ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "authenticated"} - } - } - ] - }, - "Policies": [ - { - "PolicyName": "ccdb1bcb9cf-admin-group-policy", - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "VisualEditor0", - "Effect": "Allow", - "Action": [ - "s3:PutObject", - "s3:DeleteObject" - ], - "Resource": "arn:aws:s3:::ccdvod-dev-input-xzkln6vc/*" - } - ] - } - } -] - - } - }, - - - - "LambdaExecutionRole": { - "Type": "AWS::IAM::Role", - "Properties": { - "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - - }, - { - - "Fn::Join": [ - "", - [ - - "ccdb1bcb9cf", - "-ExecutionRole-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "AssumeRolePolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Service": [ - "lambda.amazonaws.com" - ] - }, - "Action": [ - "sts:AssumeRole" - ] - } - ] - }, - "Policies": [ - { - "PolicyName": "UserGroupLogPolicy", - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": [ - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents" - ], - "Resource": "arn:aws:logs:*:*:*" - } - ] - } - }, - { - "PolicyName": "UserGroupExecutionPolicy", - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": [ - "cognito-identity:SetIdentityPoolRoles", - "cognito-identity:ListIdentityPools", - "cognito-identity:describeIdentityPool" - - ], - "Resource": "*" - } - ] - } - }, - { - "PolicyName": "UserGroupPassRolePolicy", - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": [ - "iam:PassRole" - ], - "Resource": "*" - } - ] - } - } - ] - } - }, - "RoleMapFunction": { - "Type": "AWS::Lambda::Function", - "DependsOn": ["LambdaExecutionRole"], - "Properties": { - "Code": { - "ZipFile": { - "Fn::Join": [ - "\n", - [ - "const response = require('cfn-response');", - "const AWS = require('aws-sdk');", - "exports.handler = (event, context) => {", - "if (event.RequestType == 'Delete') {", - " response.send(event, context, response.SUCCESS, {message: 'Request type delete'})", - "};", - "if (event.RequestType == 'Create' || event.RequestType == 'Update') {", - " let { identityPoolId, appClientID, appClientIDWeb, userPoolId, region } = event.ResourceProperties;", - " try {", - " const cognitoidentity = new AWS.CognitoIdentity();", - " let params = {", - " IdentityPoolId: identityPoolId,", - " Roles: {", - " 'authenticated': event.ResourceProperties.AuthRoleArn,", - " 'unauthenticated': event.ResourceProperties.UnauthRoleArn,", - " },", - " RoleMappings: {}", - " };", - " if (appClientIDWeb) {", - " params.RoleMappings[`cognito-idp.${region}.amazonaws.com/${userPoolId}:${appClientIDWeb}`] = {", - " Type: 'Token',", - " AmbiguousRoleResolution: 'AuthenticatedRole',", - " }", - " }", - " if (appClientID) {", - " params.RoleMappings[`cognito-idp.${region}.amazonaws.com/${userPoolId}:${appClientID}`] = {", - " Type: 'Token',", - " AmbiguousRoleResolution: 'AuthenticatedRole',", - " }", - " }", - " cognitoidentity.setIdentityPoolRoles(params).promise();", - " response.send(event, context, response.SUCCESS, {message: 'Successfully updated identity pool.'})", - " } catch(err) {", - - " response.send(event, context, response.FAILED, {message: 'Error updating identity pool'});", - " }", - " };", - "};" - - ] - ] - } - }, - "Handler": "index.handler", - "Runtime": "nodejs10.x", - "Timeout": "300", - "Role": { - "Fn::GetAtt": [ - "LambdaExecutionRole", - "Arn" - ] - } - } - }, - "RoleMapFunctionInput": { - "Type": "Custom::LambdaCallout", - "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "RoleMapFunction", - "Arn" - ] - }, - "AuthRoleArn": { - "Ref": "AuthRoleArn" - }, - "UnauthRoleArn": { - "Ref": "UnauthRoleArn" - }, - "identityPoolId": { - "Ref": "authccdb1bcb9cfIdentityPoolId" - }, - "userPoolId": { - "Ref": "authccdb1bcb9cfUserPoolId" - }, - "appClientIDWeb": { - "Ref": "authccdb1bcb9cfAppClientIDWeb" - }, - "appClientID": { - "Ref": "authccdb1bcb9cfAppClientID" - }, - "region": { - "Ref": "AWS::Region" - }, - "env": { - "Ref": "env" - } - }, - "DependsOn": ["RoleMapFunction"] - } - - }, - - "Outputs": { - - "AdminGroupRole": { - "Value": { - "Fn::GetAtt": [ - "AdminGroupRole", - "Arn" - ] - } - - } - - - } - -} diff --git a/amplify/backend/auth/userPoolGroups/user-pool-group-precedence.json b/amplify/backend/auth/userPoolGroups/user-pool-group-precedence.json deleted file mode 100644 index 90fdbbe29..000000000 --- a/amplify/backend/auth/userPoolGroups/user-pool-group-precedence.json +++ /dev/null @@ -1,25 +0,0 @@ -[ - { - "groupName": "Admin", - "precedence": 1, - "customPolicies": [ - { - "PolicyName": "ccdb1bcb9cf-admin-group-policy", - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "VisualEditor0", - "Effect": "Allow", - "Action": [ - "s3:PutObject", - "s3:DeleteObject" - ], - "Resource": "arn:aws:s3:::ccdvod-dev-input-xzkln6vc/*" - } - ] - } - } - ] - } -] \ No newline at end of file diff --git a/amplify/backend/backend-config.json b/amplify/backend/backend-config.json deleted file mode 100644 index 0ec20cd41..000000000 --- a/amplify/backend/backend-config.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "auth": { - "ccdb1bcb9cf": { - "service": "Cognito", - "providerPlugin": "awscloudformation", - "dependsOn": [], - "customAuth": false - }, - "userPoolGroups": { - "service": "Cognito-UserPool-Groups", - "providerPlugin": "awscloudformation", - "dependsOn": [ - { - "category": "auth", - "resourceName": "ccdb1bcb9cf", - "attributes": [ - "UserPoolId", - "AppClientIDWeb", - "AppClientID", - "IdentityPoolId" - ] - } - ] - } - }, - "api": { - "ccd": { - "service": "AppSync", - "providerPlugin": "awscloudformation", - "output": { - "authConfig": { - "defaultAuthentication": { - "authenticationType": "API_KEY", - "apiKeyConfig": { - "apiKeyExpirationDays": 365, - "description": "ccdapikey" - } - }, - "additionalAuthenticationProviders": [ - { - "authenticationType": "AMAZON_COGNITO_USER_POOLS", - "userPoolConfig": { - "userPoolId": "authccdb1bcb9cf" - } - } - ] - } - }, - "dependsOn": [ - { - "category": "video", - "resourceName": "ccdvod", - "attributes": [] - } - ] - } - }, - "video": { - "ccdvod": { - "service": "video", - "serviceType": "video-on-demand", - "providerPlugin": "awscloudformation" - } - } -} \ No newline at end of file diff --git a/amplify/backend/tags.json b/amplify/backend/tags.json deleted file mode 100644 index b9321d71b..000000000 --- a/amplify/backend/tags.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - { - "Key": "user:Stack", - "Value": "{project-env}" - }, - { - "Key": "user:Application", - "Value": "{project-name}" - } -] \ No newline at end of file diff --git a/amplify/backend/video/ccdvod/mediaconvert-job-temp.json b/amplify/backend/video/ccdvod/mediaconvert-job-temp.json deleted file mode 100644 index dd9ee06ee..000000000 --- a/amplify/backend/video/ccdvod/mediaconvert-job-temp.json +++ /dev/null @@ -1,563 +0,0 @@ -{ - "Description": "Default HLS Adaptive Bitrate", - "Category": "Amplify-Video", - "Name": "Amplify_Video_HLS", - "Settings": { - "OutputGroups": [ - { - "Name": "Apple HLS", - "Outputs": [ - { - "ContainerSettings": { - "Container": "M3U8", - "M3u8Settings": { - "AudioFramesPerPes": 4, - "PcrControl": "PCR_EVERY_PES_PACKET", - "PmtPid": 480, - "PrivateMetadataPid": 503, - "ProgramNumber": 1, - "PatInterval": 0, - "PmtInterval": 0, - "Scte35Source": "NONE", - "NielsenId3": "NONE", - "TimedMetadata": "NONE", - "VideoPid": 481, - "AudioPids": [ - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492 - ] - } - }, - "VideoDescription": { - "ScalingBehavior": "DEFAULT", - "TimecodeInsertion": "DISABLED", - "AntiAlias": "ENABLED", - "Sharpness": 50, - "CodecSettings": { - "Codec": "H_264", - "H264Settings": { - "InterlaceMode": "PROGRESSIVE", - "NumberReferenceFrames": 3, - "Syntax": "DEFAULT", - "Softness": 0, - "FramerateDenominator": 1, - "GopClosedCadence": 1, - "GopSize": 90, - "Slices": 1, - "GopBReference": "DISABLED", - "HrdBufferSize": 4500000, - "MaxBitrate": 3000000, - "SlowPal": "DISABLED", - "SpatialAdaptiveQuantization": "ENABLED", - "TemporalAdaptiveQuantization": "ENABLED", - "FlickerAdaptiveQuantization": "DISABLED", - "EntropyEncoding": "CABAC", - "FramerateControl": "SPECIFIED", - "RateControlMode": "QVBR", - "QvbrSettings": { - "QvbrQualityLevel": 9, - "QvbrQualityLevelFineTune": 0 - }, - "CodecProfile": "MAIN", - "Telecine": "NONE", - "FramerateNumerator": 30, - "MinIInterval": 0, - "AdaptiveQuantization": "HIGH", - "CodecLevel": "AUTO", - "FieldEncoding": "PAFF", - "SceneChangeDetect": "ENABLED", - "QualityTuningLevel": "SINGLE_PASS", - "FramerateConversionAlgorithm": "DUPLICATE_DROP", - "UnregisteredSeiTimecode": "DISABLED", - "GopSizeUnits": "FRAMES", - "ParControl": "INITIALIZE_FROM_SOURCE", - "NumberBFramesBetweenReferenceFrames": 1, - "RepeatPps": "DISABLED", - "DynamicSubGop": "STATIC" - } - }, - "AfdSignaling": "NONE", - "DropFrameTimecode": "ENABLED", - "RespondToAfd": "NONE", - "ColorMetadata": "INSERT" - }, - "AudioDescriptions": [ - { - "AudioTypeControl": "FOLLOW_INPUT", - "AudioSourceName": "Audio Selector 1", - "CodecSettings": { - "Codec": "AAC", - "AacSettings": { - "AudioDescriptionBroadcasterMix": "NORMAL", - "Bitrate": 96000, - "RateControlMode": "CBR", - "CodecProfile": "LC", - "CodingMode": "CODING_MODE_2_0", - "RawFormat": "NONE", - "SampleRate": 48000, - "Specification": "MPEG4" - } - }, - "LanguageCodeControl": "FOLLOW_INPUT" - } - ], - "OutputSettings": { - "HlsSettings": { - "AudioGroupId": "program_audio", - "AudioOnlyContainer": "AUTOMATIC", - "IFrameOnlyManifest": "EXCLUDE", - "SegmentModifier": "$dt$" - } - }, - "NameModifier": "_3000" - }, - { - "ContainerSettings": { - "Container": "M3U8", - "M3u8Settings": { - "AudioFramesPerPes": 4, - "PcrControl": "PCR_EVERY_PES_PACKET", - "PmtPid": 480, - "PrivateMetadataPid": 503, - "ProgramNumber": 1, - "PatInterval": 0, - "PmtInterval": 0, - "Scte35Source": "NONE", - "NielsenId3": "NONE", - "TimedMetadata": "NONE", - "TimedMetadataPid": 502, - "VideoPid": 481, - "AudioPids": [ - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492 - ] - } - }, - "VideoDescription": { - "Width": 960, - "ScalingBehavior": "DEFAULT", - "Height": 540, - "TimecodeInsertion": "DISABLED", - "AntiAlias": "ENABLED", - "Sharpness": 50, - "CodecSettings": { - "Codec": "H_264", - "H264Settings": { - "InterlaceMode": "PROGRESSIVE", - "NumberReferenceFrames": 3, - "Syntax": "DEFAULT", - "Softness": 0, - "FramerateDenominator": 1, - "GopClosedCadence": 1, - "GopSize": 90, - "Slices": 1, - "GopBReference": "DISABLED", - "HrdBufferSize": 2250000, - "MaxBitrate": 1500000, - "SlowPal": "DISABLED", - "SpatialAdaptiveQuantization": "ENABLED", - "TemporalAdaptiveQuantization": "ENABLED", - "FlickerAdaptiveQuantization": "DISABLED", - "EntropyEncoding": "CABAC", - "FramerateControl": "SPECIFIED", - "RateControlMode": "QVBR", - "QvbrSettings": { - "QvbrQualityLevel": 8, - "QvbrQualityLevelFineTune": 0 - }, - "CodecProfile": "MAIN", - "Telecine": "NONE", - "FramerateNumerator": 30, - "MinIInterval": 0, - "AdaptiveQuantization": "HIGH", - "CodecLevel": "AUTO", - "FieldEncoding": "PAFF", - "SceneChangeDetect": "ENABLED", - "QualityTuningLevel": "SINGLE_PASS", - "FramerateConversionAlgorithm": "DUPLICATE_DROP", - "UnregisteredSeiTimecode": "DISABLED", - "GopSizeUnits": "FRAMES", - "ParControl": "INITIALIZE_FROM_SOURCE", - "NumberBFramesBetweenReferenceFrames": 1, - "RepeatPps": "DISABLED", - "DynamicSubGop": "STATIC" - } - }, - "AfdSignaling": "NONE", - "DropFrameTimecode": "ENABLED", - "RespondToAfd": "NONE", - "ColorMetadata": "INSERT" - }, - "AudioDescriptions": [ - { - "AudioTypeControl": "FOLLOW_INPUT", - "AudioSourceName": "Audio Selector 1", - "CodecSettings": { - "Codec": "AAC", - "AacSettings": { - "AudioDescriptionBroadcasterMix": "NORMAL", - "Bitrate": 96000, - "RateControlMode": "CBR", - "CodecProfile": "LC", - "CodingMode": "CODING_MODE_2_0", - "RawFormat": "NONE", - "SampleRate": 48000, - "Specification": "MPEG4" - } - }, - "LanguageCodeControl": "FOLLOW_INPUT" - } - ], - "OutputSettings": { - "HlsSettings": { - "AudioGroupId": "program_audio", - "AudioOnlyContainer": "AUTOMATIC", - "IFrameOnlyManifest": "EXCLUDE", - "SegmentModifier": "$dt$" - } - }, - "NameModifier": "_1500" - }, - { - "ContainerSettings": { - "Container": "M3U8", - "M3u8Settings": { - "AudioFramesPerPes": 4, - "PcrControl": "PCR_EVERY_PES_PACKET", - "PmtPid": 480, - "PrivateMetadataPid": 503, - "ProgramNumber": 1, - "PatInterval": 0, - "PmtInterval": 0, - "Scte35Source": "NONE", - "NielsenId3": "NONE", - "TimedMetadata": "NONE", - "TimedMetadataPid": 502, - "VideoPid": 481, - "AudioPids": [ - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492 - ] - } - }, - "VideoDescription": { - "Width": 768, - "ScalingBehavior": "DEFAULT", - "Height": 432, - "TimecodeInsertion": "DISABLED", - "AntiAlias": "ENABLED", - "Sharpness": 50, - "CodecSettings": { - "Codec": "H_264", - "H264Settings": { - "InterlaceMode": "PROGRESSIVE", - "NumberReferenceFrames": 3, - "Syntax": "DEFAULT", - "Softness": 0, - "FramerateDenominator": 1, - "GopClosedCadence": 1, - "GopSize": 90, - "Slices": 1, - "GopBReference": "DISABLED", - "HrdBufferSize": 1250000, - "MaxBitrate": 750000, - "SlowPal": "DISABLED", - "SpatialAdaptiveQuantization": "ENABLED", - "TemporalAdaptiveQuantization": "ENABLED", - "FlickerAdaptiveQuantization": "DISABLED", - "EntropyEncoding": "CABAC", - "FramerateControl": "SPECIFIED", - "RateControlMode": "QVBR", - "QvbrSettings": { - "QvbrQualityLevel": 7, - "QvbrQualityLevelFineTune": 0 - }, - "CodecProfile": "MAIN", - "Telecine": "NONE", - "FramerateNumerator": 30, - "MinIInterval": 0, - "AdaptiveQuantization": "HIGH", - "CodecLevel": "AUTO", - "FieldEncoding": "PAFF", - "SceneChangeDetect": "ENABLED", - "QualityTuningLevel": "SINGLE_PASS", - "FramerateConversionAlgorithm": "DUPLICATE_DROP", - "UnregisteredSeiTimecode": "DISABLED", - "GopSizeUnits": "FRAMES", - "ParControl": "INITIALIZE_FROM_SOURCE", - "NumberBFramesBetweenReferenceFrames": 2, - "RepeatPps": "DISABLED", - "DynamicSubGop": "STATIC" - } - }, - "AfdSignaling": "NONE", - "DropFrameTimecode": "ENABLED", - "RespondToAfd": "NONE", - "ColorMetadata": "INSERT" - }, - "AudioDescriptions": [ - { - "AudioTypeControl": "FOLLOW_INPUT", - "AudioSourceName": "Audio Selector 1", - "CodecSettings": { - "Codec": "AAC", - "AacSettings": { - "AudioDescriptionBroadcasterMix": "NORMAL", - "Bitrate": 96000, - "RateControlMode": "CBR", - "CodecProfile": "LC", - "CodingMode": "CODING_MODE_2_0", - "RawFormat": "NONE", - "SampleRate": 48000, - "Specification": "MPEG4" - } - }, - "LanguageCodeControl": "FOLLOW_INPUT" - } - ], - "OutputSettings": { - "HlsSettings": { - "AudioGroupId": "program_audio", - "AudioOnlyContainer": "AUTOMATIC", - "IFrameOnlyManifest": "EXCLUDE", - "SegmentModifier": "$dt$" - } - }, - "NameModifier": "_750" - }, - { - "ContainerSettings": { - "Container": "M3U8", - "M3u8Settings": { - "AudioFramesPerPes": 4, - "PcrControl": "PCR_EVERY_PES_PACKET", - "PmtPid": 480, - "PrivateMetadataPid": 503, - "ProgramNumber": 1, - "PatInterval": 0, - "PmtInterval": 0, - "Scte35Source": "NONE", - "NielsenId3": "NONE", - "TimedMetadata": "NONE", - "VideoPid": 481, - "AudioPids": [ - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492 - ] - } - }, - "VideoDescription": { - "Width": 640, - "ScalingBehavior": "DEFAULT", - "Height": 360, - "TimecodeInsertion": "DISABLED", - "AntiAlias": "ENABLED", - "Sharpness": 50, - "CodecSettings": { - "Codec": "H_264", - "H264Settings": { - "InterlaceMode": "PROGRESSIVE", - "NumberReferenceFrames": 3, - "Syntax": "DEFAULT", - "Softness": 0, - "FramerateDenominator": 1, - "GopClosedCadence": 1, - "GopSize": 90, - "Slices": 1, - "GopBReference": "DISABLED", - "HrdBufferSize": 450000, - "MaxBitrate": 325000, - "SlowPal": "DISABLED", - "SpatialAdaptiveQuantization": "ENABLED", - "TemporalAdaptiveQuantization": "ENABLED", - "FlickerAdaptiveQuantization": "DISABLED", - "EntropyEncoding": "CABAC", - "FramerateControl": "SPECIFIED", - "RateControlMode": "QVBR", - "QvbrSettings": { - "QvbrQualityLevel": 6, - "QvbrQualityLevelFineTune": 0 - }, - "CodecProfile": "MAIN", - "Telecine": "NONE", - "FramerateNumerator": 30, - "MinIInterval": 0, - "AdaptiveQuantization": "HIGH", - "CodecLevel": "AUTO", - "FieldEncoding": "PAFF", - "SceneChangeDetect": "ENABLED", - "QualityTuningLevel": "SINGLE_PASS", - "FramerateConversionAlgorithm": "DUPLICATE_DROP", - "UnregisteredSeiTimecode": "DISABLED", - "GopSizeUnits": "FRAMES", - "ParControl": "INITIALIZE_FROM_SOURCE", - "NumberBFramesBetweenReferenceFrames": 2, - "RepeatPps": "DISABLED", - "DynamicSubGop": "STATIC" - } - }, - "AfdSignaling": "NONE", - "DropFrameTimecode": "ENABLED", - "RespondToAfd": "NONE", - "ColorMetadata": "INSERT" - }, - "AudioDescriptions": [ - { - "AudioTypeControl": "FOLLOW_INPUT", - "AudioSourceName": "Audio Selector 1", - "CodecSettings": { - "Codec": "AAC", - "AacSettings": { - "AudioDescriptionBroadcasterMix": "NORMAL", - "Bitrate": 96000, - "RateControlMode": "CBR", - "CodecProfile": "LC", - "CodingMode": "CODING_MODE_2_0", - "RawFormat": "NONE", - "SampleRate": 48000, - "Specification": "MPEG4" - } - }, - "LanguageCodeControl": "FOLLOW_INPUT" - } - ], - "OutputSettings": { - "HlsSettings": { - "AudioGroupId": "program_audio", - "AudioOnlyContainer": "AUTOMATIC", - "IFrameOnlyManifest": "EXCLUDE", - "SegmentModifier": "$dt$" - } - }, - "NameModifier": "_325" - }, - { - "ContainerSettings": { - "Container": "M3U8", - "M3u8Settings": { - "AudioFramesPerPes": 4, - "PcrControl": "PCR_EVERY_PES_PACKET", - "PmtPid": 480, - "PrivateMetadataPid": 503, - "ProgramNumber": 1, - "PatInterval": 0, - "PmtInterval": 0, - "Scte35Source": "NONE", - "NielsenId3": "NONE", - "TimedMetadata": "NONE", - "TimedMetadataPid": 502, - "VideoPid": 481, - "AudioPids": [ - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492 - ] - } - }, - "AudioDescriptions": [ - { - "AudioTypeControl": "FOLLOW_INPUT", - "AudioSourceName": "Audio Selector 1", - "CodecSettings": { - "Codec": "AAC", - "AacSettings": { - "AudioDescriptionBroadcasterMix": "NORMAL", - "Bitrate": 96000, - "RateControlMode": "CBR", - "CodecProfile": "LC", - "CodingMode": "CODING_MODE_2_0", - "RawFormat": "NONE", - "SampleRate": 48000, - "Specification": "MPEG4" - } - }, - "LanguageCodeControl": "FOLLOW_INPUT" - } - ], - "OutputSettings": { - "HlsSettings": { - "AudioGroupId": "program_audio", - "AudioOnlyContainer": "AUTOMATIC", - "IFrameOnlyManifest": "EXCLUDE", - "SegmentModifier": "$dt$" - } - }, - "NameModifier": "_audio" - } - ], - "OutputGroupSettings": { - "Type": "HLS_GROUP_SETTINGS", - "HlsGroupSettings": { - "ManifestDurationFormat": "INTEGER", - "SegmentLength": 10, - "TimedMetadataId3Period": 10, - "CaptionLanguageSetting": "OMIT", - "TimedMetadataId3Frame": "PRIV", - "CodecSpecification": "RFC_4281", - "OutputSelection": "MANIFESTS_AND_SEGMENTS", - "ProgramDateTimePeriod": 600, - "MinSegmentLength": 0, - "MinFinalSegmentLength": 0, - "DirectoryStructure": "SINGLE_DIRECTORY", - "ProgramDateTime": "EXCLUDE", - "SegmentControl": "SEGMENTED_FILES", - "ManifestCompression": "NONE", - "ClientCache": "ENABLED", - "StreamInfResolution": "INCLUDE" - } - } - } - ], - "AdAvailOffset": 0 - }, - "AccelerationSettings": { - "Mode": "DISABLED" - }, - "StatusUpdateInterval": "SECONDS_60", - "Priority": 0, - "HopDestinations": [] -} \ No newline at end of file diff --git a/amplify/backend/video/ccdvod/parameters.json b/amplify/backend/video/ccdvod/parameters.json deleted file mode 100644 index c2d46da1e..000000000 --- a/amplify/backend/video/ccdvod/parameters.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "authRoleName": { - "Ref": "AuthRoleName" - }, - "GraphQLAPIId": { - "Fn::GetAtt": [ - "apiccd", - "Outputs.GraphQLAPIIdOutput" - ] - }, - "GraphQLEndpoint": { - "Fn::GetAtt": [ - "apiccd", - "Outputs.GraphQLAPIEndpointOutput" - ] - } -} \ No newline at end of file diff --git a/amplify/backend/video/ccdvod/props.json b/amplify/backend/video/ccdvod/props.json deleted file mode 100644 index 097c0d358..000000000 --- a/amplify/backend/video/ccdvod/props.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "shared": { - "resourceName": "ccdvod" - }, - "template": { - "name": "Amplify_Video_HLS.json" - }, - "contentDeliveryNetwork": { - "signedKey": true, - "pemID": "APKAIN2M3OJGYL2NH3ZA", - "secretPem": "ccdvod-pem", - "secretPemArn": "arn:aws:secretsmanager:us-east-1:981218755060:secret:ccdvod-pem-DxUmDI", - "functionName": "ccdvod-dev-tokenGen", - "enableDistribution": true - }, - "permissions": { - "permissionSchema": [ - "admin" - ] - }, - "cms": { - "overrideSchema": true, - "editAPI": true - }, - "parameters": { - "authRoleName": { - "Ref": "AuthRoleName" - }, - "GraphQLAPIId": { - "Fn::GetAtt": [ - "apiccd", - "Outputs.GraphQLAPIIdOutput" - ] - }, - "GraphQLEndpoint": { - "Fn::GetAtt": [ - "apiccd", - "Outputs.GraphQLAPIEndpointOutput" - ] - } - } -} \ No newline at end of file diff --git a/amplify/cli.json b/amplify/cli.json deleted file mode 100644 index 1200256e0..000000000 --- a/amplify/cli.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "features": { - "graphqltransformer": { - "addmissingownerfields": true, - "validatetypenamereservedwords": true, - "useexperimentalpipelinedtransformer": false - } - } -} \ No newline at end of file diff --git a/amplify/keys/.gitignore b/amplify/keys/.gitignore deleted file mode 100644 index cfaad7611..000000000 --- a/amplify/keys/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.pem diff --git a/amplify/keys/README.md b/amplify/keys/README.md deleted file mode 100644 index b7c91a3b1..000000000 --- a/amplify/keys/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Keys - -You can download these from https://console.aws.amazon.com/iam/home?region=us-east-1#/security_credentials - -You should place them in this directory and then reference them when using `amplify video add`. diff --git a/backend-cdk/.gitignore b/backend-cdk/.gitignore deleted file mode 100644 index 2dd5d8307..000000000 --- a/backend-cdk/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -*.js -!jest.config.js -*.d.ts -node_modules - -# CDK asset staging directory -.cdk.staging -cdk.out - -# Parcel default cache directory -.parcel-cache - -# API KEY -cdk-exports.json \ No newline at end of file diff --git a/backend-cdk/.npmignore b/backend-cdk/.npmignore deleted file mode 100644 index c1d6d45dc..000000000 --- a/backend-cdk/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -*.ts -!*.d.ts - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/backend-cdk/README.md b/backend-cdk/README.md deleted file mode 100644 index 324766518..000000000 --- a/backend-cdk/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Welcome to your CDK TypeScript project! - -This is a blank project for TypeScript development with CDK. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -## Useful commands - - * `npm run build` compile typescript to js - * `npm run watch` watch for changes and compile - * `npm run test` perform the jest unit tests - * `cdk deploy` deploy this stack to your default AWS account/region - * `cdk diff` compare deployed stack with current state - * `cdk synth` emits the synthesized CloudFormation template diff --git a/backend-cdk/bin/backend.ts b/backend-cdk/bin/backend.ts deleted file mode 100644 index 31e0a50fb..000000000 --- a/backend-cdk/bin/backend.ts +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -import 'source-map-support/register'; -import * as cdk from '@aws-cdk/core'; -import { BackendStack } from '../lib/backend-stack'; - -const app = new cdk.App(); -new BackendStack(app, 'BackendStack'); diff --git a/backend-cdk/cdk.json b/backend-cdk/cdk.json deleted file mode 100644 index 09a2db9a6..000000000 --- a/backend-cdk/cdk.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "app": "npx ts-node bin/backend.ts", - "context": { - "@aws-cdk/core:enableStackNameDuplicates": "true", - "aws-cdk:enableDiffNoFail": "true", - "@aws-cdk/core:stackRelativeExports": "true", - "@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true - } -} diff --git a/backend-cdk/graphql/schema.graphql b/backend-cdk/graphql/schema.graphql deleted file mode 100644 index 9b96f57c1..000000000 --- a/backend-cdk/graphql/schema.graphql +++ /dev/null @@ -1,28 +0,0 @@ -type Post @aws_cognito_user_pools @aws_api_key { - id: String! - title: String! - content: String! -} - -input CreatePostInput { - id: String - title: String! - content: String! -} - -input UpdatePostInput { - id: String! - title: String - content: String -} - -type Query { - listPosts: [Post] @aws_cognito_user_pools @aws_api_key - getPostById(postId: String!): Post @aws_cognito_user_pools @aws_api_key -} - -type Mutation { - createPost(post: CreatePostInput!): Post @aws_cognito_user_pools - deletePost(postId: String!): String @aws_cognito_user_pools - updatePost(post: UpdatePostInput!): Post @aws_cognito_user_pools -} diff --git a/backend-cdk/jest.config.js b/backend-cdk/jest.config.js deleted file mode 100644 index 772f97490..000000000 --- a/backend-cdk/jest.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - roots: ['/test'], - testMatch: ['**/*.test.ts'], - transform: { - '^.+\\.tsx?$': 'ts-jest' - } -}; diff --git a/backend-cdk/lambdas/Post.ts b/backend-cdk/lambdas/Post.ts deleted file mode 100644 index e970f2fc2..000000000 --- a/backend-cdk/lambdas/Post.ts +++ /dev/null @@ -1,7 +0,0 @@ -type Post = { - id: string; - title: string; - content: string; -}; - -export default Post; diff --git a/backend-cdk/lambdas/createPost.ts b/backend-cdk/lambdas/createPost.ts deleted file mode 100644 index bb8daeeed..000000000 --- a/backend-cdk/lambdas/createPost.ts +++ /dev/null @@ -1,18 +0,0 @@ -import Post from './Post'; -import db from './db'; -const { v4: uuid } = require('uuid'); - -async function createPost(post: Post) { - if (!post.id) post.id = uuid(); - const { id, title, content } = post; - try { - const query = `INSERT INTO posts (id,title,content) VALUES(:id,:title,:content)`; - await db.query(query, { id, title, content }); - return post; - } catch (err) { - console.log('Postgres error: ', err); - return null; - } -} - -export default createPost; diff --git a/backend-cdk/lambdas/db.ts b/backend-cdk/lambdas/db.ts deleted file mode 100644 index 4b5583ce6..000000000 --- a/backend-cdk/lambdas/db.ts +++ /dev/null @@ -1,7 +0,0 @@ -const db = require('data-api-client')({ - secretArn: process.env.SECRET_ARN, - resourceArn: process.env.CLUSTER_ARN, - database: process.env.DB_NAME, -}); - -export default db; diff --git a/backend-cdk/lambdas/deletePost.ts b/backend-cdk/lambdas/deletePost.ts deleted file mode 100644 index 41bcad985..000000000 --- a/backend-cdk/lambdas/deletePost.ts +++ /dev/null @@ -1,15 +0,0 @@ -import db from './db'; - -async function deletePost(postId: string) { - try { - const query = `DELETE FROM posts WHERE id = :postId`; - const result = await db.query(query, { postId }); - if (result.numberOfRecordsUpdated === 1) return postId; - return null; - } catch (err) { - console.log('Postgres error: ', err); - return null; - } -} - -export default deletePost; diff --git a/backend-cdk/lambdas/getPostById.ts b/backend-cdk/lambdas/getPostById.ts deleted file mode 100644 index 69bb6a6c7..000000000 --- a/backend-cdk/lambdas/getPostById.ts +++ /dev/null @@ -1,14 +0,0 @@ -import db from './db'; - -async function getPostById(postId: string) { - try { - const query = `SELECT * FROM posts WHERE id = :postId`; - const results = await db.query(query, { postId }); - return results.records[0]; - } catch (err) { - console.log('Postgres error: ', err); - return null; - } -} - -export default getPostById; diff --git a/backend-cdk/lambdas/index.ts b/backend-cdk/lambdas/index.ts deleted file mode 100644 index 4f7ec6ef3..000000000 --- a/backend-cdk/lambdas/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import createPost from './createPost'; -import listPosts from './listPosts'; -import updatePost from './updatePost'; -import deletePost from './deletePost'; -import getPostById from './getPostById'; -import Post from './Post'; - -type AppSyncEvent = { - info: { - fieldName: string; - }; - arguments: { - post: Post; - postId: string; - }; -}; - -exports.handler = async (event: AppSyncEvent) => { - switch (event.info.fieldName) { - case 'createPost': - return await createPost(event.arguments.post); - case 'listPosts': - return await listPosts(); - case 'updatePost': - return await updatePost(event.arguments.post); - case 'deletePost': - return await deletePost(event.arguments.postId); - case 'getPostById': - return await getPostById(event.arguments.postId); - default: - return null; - } -}; diff --git a/backend-cdk/lambdas/listPosts.ts b/backend-cdk/lambdas/listPosts.ts deleted file mode 100644 index c0ca2adb8..000000000 --- a/backend-cdk/lambdas/listPosts.ts +++ /dev/null @@ -1,13 +0,0 @@ -import db from './db'; - -async function listPosts() { - try { - const result = await db.query(`SELECT * FROM posts`); - return result.records; - } catch (err) { - console.log('Postgres error: ', err); - return null; - } -} - -export default listPosts; diff --git a/backend-cdk/lambdas/package-lock.json b/backend-cdk/lambdas/package-lock.json deleted file mode 100644 index 8eb204133..000000000 --- a/backend-cdk/lambdas/package-lock.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "lambdas", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "data-api-client": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-api-client/-/data-api-client-1.1.0.tgz", - "integrity": "sha512-ZO6i4g55afRYbDwpVuF3pa6KI0pNee5VcAGAIQRHhCFAJytFCwazzSQ3iwZU8ONcRumXoHDKTp/dyIQOub1ysg==", - "requires": { - "sqlstring": "^2.3.1" - } - }, - "sqlstring": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", - "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==" - }, - "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" - } - } -} diff --git a/backend-cdk/lambdas/updatePost.ts b/backend-cdk/lambdas/updatePost.ts deleted file mode 100644 index b91718a4b..000000000 --- a/backend-cdk/lambdas/updatePost.ts +++ /dev/null @@ -1,26 +0,0 @@ -import Post from './Post'; -import db from './db'; - -async function updatePost(post: Post) { - if (Object.entries(post).length === 1) return; - let query = `UPDATE posts SET`; - const updateVariables: { [key: string]: string } = { id: post.id }; - Object.entries(post).forEach((item) => { - if (item[0] === 'id') return; - updateVariables[item[0]] = item[1]; - if (Object.keys(updateVariables).length > 2) { - query = `${query},`; - } - query = `${query} ${item[0]} = :${item[0]} `; - }); - query = query + 'where id = :id'; - try { - await db.query(query, updateVariables); - return post; - } catch (err) { - console.log('Postgres error: ', err); - return null; - } -} - -export default updatePost; diff --git a/backend-cdk/lib/backend-stack.ts b/backend-cdk/lib/backend-stack.ts deleted file mode 100644 index e6478a388..000000000 --- a/backend-cdk/lib/backend-stack.ts +++ /dev/null @@ -1,113 +0,0 @@ -import * as cdk from "@aws-cdk/core"; -import * as ec2 from "@aws-cdk/aws-ec2"; -import * as lambda from "@aws-cdk/aws-lambda"; -import * as rds from "@aws-cdk/aws-rds"; -import * as appsync from "@aws-cdk/aws-appsync"; -import * as cognito from "@aws-cdk/aws-cognito"; - -export class BackendStack extends cdk.Stack { - constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { - super(scope, id, props); - - // const userPool = cognito.UserPool.fromUserPoolId( - // this, - // "amplify-user-pool", - // "us-east-1_p0bw5lOuR" - // ); - - // // Create the AppSync API - // const api = new appsync.GraphqlApi(this, "Api", { - // name: "ccd-api", - // schema: appsync.Schema.fromAsset("graphql/schema.graphql"), - // authorizationConfig: { - // defaultAuthorization: { - // authorizationType: appsync.AuthorizationType.API_KEY, - // apiKeyConfig: { - // expires: cdk.Expiration.after(cdk.Duration.days(365)), - // }, - // }, - // additionalAuthorizationModes: [ - // { - // authorizationType: appsync.AuthorizationType.USER_POOL, - // userPoolConfig: { - // userPool, - // }, - // }, - // ], - // }, - // xrayEnabled: true, - // }); - - // // Create the VPC needed for the Aurora Serverless DB cluster - // const vpc = new ec2.Vpc(this, "CcdVPC"); - // // Create the Serverless Aurora DB cluster; set the engine to Postgres - // const cluster = new rds.ServerlessCluster(this, "AuroraBlogCluster", { - // engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL, - // parameterGroup: rds.ParameterGroup.fromParameterGroupName( - // this, - // "ParameterGroup", - // "default.aurora-postgresql10" - // ), - // defaultDatabaseName: "CcdDB", - // vpc, - // scaling: { autoPause: cdk.Duration.seconds(0) }, // Optional. If not set, then instance will pause after 5 minutes - // }); - - // // Create the Lambda function that will map GraphQL operations into Postgres - // const postFn = new lambda.Function(this, "CcdAuroraHandler", { - // runtime: lambda.Runtime.NODEJS_10_X, - // code: new lambda.AssetCode("lambdas"), - // handler: "index.handler", - // memorySize: 1024, - // environment: { - // CLUSTER_ARN: cluster.clusterArn, - // SECRET_ARN: cluster.secret?.secretArn || "", - // DB_NAME: "CcdDB", - // AWS_NODEJS_CONNECTION_REUSE_ENABLED: "1", - // }, - // }); - // // Grant access to the cluster from the Lambda function - // cluster.grantDataApiAccess(postFn); - // // Set the new Lambda function as a data source for the AppSync API - // const lambdaDatasource = api.addLambdaDataSource( - // "ccdAuroraDatasource", - // postFn - // ); - - // // Define resolvers to map GraphQL operations to the Lambda function - // lambdaDatasource.createResolver({ - // typeName: "Query", - // fieldName: "listPosts", - // }); - // lambdaDatasource.createResolver({ - // typeName: "Query", - // fieldName: "getPostById", - // }); - // lambdaDatasource.createResolver({ - // typeName: "Mutation", - // fieldName: "createPost", - // }); - // lambdaDatasource.createResolver({ - // typeName: "Mutation", - // fieldName: "updatePost", - // }); - // lambdaDatasource.createResolver({ - // typeName: "Mutation", - // fieldName: "deletePost", - // }); - - // // CFN Outputs - // new cdk.CfnOutput(this, "aws_appsync_graphqlEndpoint", { - // value: api.graphqlUrl, - // }); - // new cdk.CfnOutput(this, "aws_appsync_apiKey", { - // value: api.apiKey || "", - // }); - // new cdk.CfnOutput(this, "aws_appsync_authenticationType", { - // value: "API_KEY", - // }); - // new cdk.CfnOutput(this, "graphql_endpoint_iam_region", { - // value: this.region, - // }); - } -} diff --git a/backend-cdk/package-lock.json b/backend-cdk/package-lock.json deleted file mode 100644 index 48c4e1972..000000000 --- a/backend-cdk/package-lock.json +++ /dev/null @@ -1,7780 +0,0 @@ -{ - "name": "backend", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@aws-cdk/assert": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.74.0.tgz", - "integrity": "sha512-5M3M4lcSS2dGPgVANhv5GjqC6nNBy9bL1XECAJj3lg7q+6zJ00+0wq4bB0wyvm/mE+S0axkGZ4LVHF5QA2gCfQ==", - "dev": true, - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/cloudformation-diff": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/assets": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.74.0.tgz", - "integrity": "sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ==", - "requires": { - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-applicationautoscaling": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz", - "integrity": "sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-appsync": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appsync/-/aws-appsync-1.74.0.tgz", - "integrity": "sha512-hJzQbtn6KVvoqeK8ojlnKO582tY/+FteRvcLIgVyL0pH4qqWQTxUZ8h9DNyoVN7Te/Vjj0M0vudailjWSJIkqg==", - "requires": { - "@aws-cdk/aws-cognito": "1.74.0", - "@aws-cdk/aws-dynamodb": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-rds": "1.74.0", - "@aws-cdk/aws-s3-assets": "1.74.0", - "@aws-cdk/aws-secretsmanager": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-autoscaling-common": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz", - "integrity": "sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-certificatemanager": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz", - "integrity": "sha512-Ve1SYM6qpUysHLD5bzHiE4kXBeo7VAEQlUti0cjkkjkuPh+dKHti/TqYhA0tkfUIMjZylnvkogBzMYdIUBTNxg==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-route53": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-cloudformation": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz", - "integrity": "sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-cloudwatch": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz", - "integrity": "sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-codeguruprofiler": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz", - "integrity": "sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-cognito": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.74.0.tgz", - "integrity": "sha512-t8XZbWQd8gMgn6FfYlPBmb3HDBVFHZI3tEODgc4mu/qRZAn2GH+pka4l1kdsgfzsBekvBLsOQosp7xJ6XaABsA==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/custom-resources": "1.74.0", - "constructs": "^3.2.0", - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "bundled": true - } - } - }, - "@aws-cdk/aws-dynamodb": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz", - "integrity": "sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/custom-resources": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-ec2": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz", - "integrity": "sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/aws-s3-assets": "1.74.0", - "@aws-cdk/aws-ssm": "1.74.0", - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "@aws-cdk/region-info": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-efs": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz", - "integrity": "sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA==", - "requires": { - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-events": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz", - "integrity": "sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-iam": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz", - "integrity": "sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA==", - "requires": { - "@aws-cdk/core": "1.74.0", - "@aws-cdk/region-info": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-kms": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz", - "integrity": "sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-lambda": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz", - "integrity": "sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-codeguruprofiler": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-efs": "1.74.0", - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/aws-s3-assets": "1.74.0", - "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-logs": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz", - "integrity": "sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-s3-assets": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-rds": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-rds/-/aws-rds-1.74.0.tgz", - "integrity": "sha512-IXvs2+j32PdDQoi9nZDpqO4zFtxDINMMGd4CLkQZ0OgIkdQUn8q0i9Q+iZgDJnl193qpQzNAuu2f4CnIkkOdcA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/aws-secretsmanager": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-route53": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz", - "integrity": "sha512-TYnAByXLc6B/uAG03bYLV0kPi1TU8G95kW6wNhfiqvPCSwfizbsg5rztbUoydJpBocbOs9qbtCM7v6gbDsB2bQ==", - "requires": { - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-s3": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz", - "integrity": "sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q==", - "requires": { - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-s3-assets": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz", - "integrity": "sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg==", - "requires": { - "@aws-cdk/assets": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-sam": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.74.0.tgz", - "integrity": "sha512-5OBgN8QyhJmcpby35bEDseWvL9+vJGiryAiU9nSMt/wISt5Rc4XM8SPK0XvZfxP6zT/MDpsptuS5tLuW++OkyQ==", - "requires": { - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-secretsmanager": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.74.0.tgz", - "integrity": "sha512-FlUY6LFrIf04pcUyJ+7bn3B+UM+hzZUHFhjr+jQzFROECTs2/HBTGKMJssuTl7UBR+QizFXfNdZQ1vvj69aKvA==", - "requires": { - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-sam": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-sns": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz", - "integrity": "sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-sqs": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz", - "integrity": "sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-ssm": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz", - "integrity": "sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/cfnspec": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz", - "integrity": "sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w==", - "dev": true, - "requires": { - "md5": "^2.3.0" - } - }, - "@aws-cdk/cloud-assembly-schema": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz", - "integrity": "sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw==", - "requires": { - "jsonschema": "^1.4.0", - "semver": "^7.3.2" - }, - "dependencies": { - "jsonschema": { - "version": "1.4.0", - "bundled": true - }, - "semver": { - "version": "7.3.2", - "bundled": true - } - } - }, - "@aws-cdk/cloudformation-diff": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz", - "integrity": "sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg==", - "dev": true, - "requires": { - "@aws-cdk/cfnspec": "1.74.0", - "colors": "^1.4.0", - "diff": "^5.0.0", - "fast-deep-equal": "^3.1.3", - "string-width": "^4.2.0", - "table": "^6.0.3" - } - }, - "@aws-cdk/core": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.74.0.tgz", - "integrity": "sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "@aws-cdk/region-info": "1.74.0", - "@balena/dockerignore": "^1.0.2", - "constructs": "^3.2.0", - "fs-extra": "^9.0.1", - "ignore": "^5.1.8", - "minimatch": "^3.0.4" - }, - "dependencies": { - "@balena/dockerignore": { - "version": "1.0.2", - "bundled": true - }, - "at-least-node": { - "version": "1.0.0", - "bundled": true - }, - "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" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "fs-extra": { - "version": "9.0.1", - "bundled": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "bundled": true - }, - "ignore": { - "version": "5.1.8", - "bundled": true - }, - "jsonfile": { - "version": "6.0.1", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "universalify": { - "version": "1.0.0", - "bundled": true - } - } - }, - "@aws-cdk/custom-resources": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz", - "integrity": "sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg==", - "requires": { - "@aws-cdk/aws-cloudformation": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/core": "1.74.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/cx-api": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz", - "integrity": "sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "bundled": true - } - } - }, - "@aws-cdk/region-info": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.74.0.tgz", - "integrity": "sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA==" - }, - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "dev": true, - "requires": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "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" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.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==", - "dev": true, - "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=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true - }, - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - } - }, - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - } - }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - } - }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - } - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", - "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "26.0.15", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.15.tgz", - "integrity": "sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog==", - "dev": true, - "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "@types/node": { - "version": "10.17.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.27.tgz", - "integrity": "sha512-J0oqm9ZfAXaPdwNXMMgAhylw5fhmXkToJd06vuDUSAgEDZ/n/69/69UmyBZbc+zT34UnShuDSBqvim3SPnozJg==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/prettier": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", - "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "@types/yargs": { - "version": "15.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.10.tgz", - "integrity": "sha512-z8PNtlhrj7eJNLmrAivM7rjBESG6JwC5xP3RVk12i/8HVP7Xnx/sEmERnRImyEuUaJfO942X0qMOYsoupaJbZQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - } - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "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 - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-cdk": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.74.0.tgz", - "integrity": "sha512-D4LKNlmvLHv+CWI/35Esaoij4v5VSqKyc+Gvnjhj1K3I4lG/AAxEy1CmRBhN/w1LJt70U9jnBpIsb6hGUlrV8A==", - "dev": true, - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/cloudformation-diff": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "@aws-cdk/region-info": "1.74.0", - "@aws-cdk/yaml-cfn": "1.74.0", - "archiver": "^5.0.2", - "aws-sdk": "^2.792.0", - "camelcase": "^6.2.0", - "cdk-assets": "1.74.0", - "colors": "^1.4.0", - "decamelize": "^4.0.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "json-diff": "^0.5.4", - "minimatch": ">=3.0", - "promptly": "^3.2.0", - "proxy-agent": "^4.0.0", - "semver": "^7.3.2", - "source-map-support": "^0.5.19", - "table": "^6.0.3", - "uuid": "^8.3.1", - "wrap-ansi": "^7.0.0", - "yargs": "^16.1.1" - }, - "dependencies": { - "@aws-cdk/cfnspec": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz", - "integrity": "sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w==", - "dev": true, - "requires": { - "md5": "^2.3.0" - } - }, - "@aws-cdk/cloud-assembly-schema": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz", - "integrity": "sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw==", - "dev": true, - "requires": { - "jsonschema": "^1.4.0", - "semver": "^7.3.2" - } - }, - "@aws-cdk/cloudformation-diff": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz", - "integrity": "sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg==", - "dev": true, - "requires": { - "@aws-cdk/cfnspec": "1.74.0", - "colors": "^1.4.0", - "diff": "^5.0.0", - "fast-deep-equal": "^3.1.3", - "string-width": "^4.2.0", - "table": "^6.0.3" - } - }, - "@aws-cdk/cx-api": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz", - "integrity": "sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ==", - "dev": true, - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "semver": "^7.3.2" - } - }, - "@aws-cdk/region-info": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.74.0.tgz", - "integrity": "sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA==", - "dev": true - }, - "@aws-cdk/yaml-cfn": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/yaml-cfn/-/yaml-cfn-1.74.0.tgz", - "integrity": "sha512-fJyS9apCC6lk3MHramd8Kjz4UwGWqM5gDRBci68Vs/nfXcpXY2ekHGjUMUfcel7VPobNKWszxWAMxXttAHa1zg==", - "dev": true, - "requires": { - "yaml": "1.10.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.5", - "resolved": "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da", - "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", - "dev": true, - "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" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "archiver": { - "version": "5.0.2", - "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-5.0.2.tgz#b2c435823499b1f46eb07aa18e7bcb332f6ca3fc", - "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.1.4", - "zip-stream": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - } - }, - "ast-types": { - "version": "0.13.4", - "resolved": "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "aws-sdk": { - "version": "2.792.0", - "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.792.0.tgz#d124a6074244a4675e0416887734e8f6934bdd30", - "integrity": "sha512-h7oSlrCDtZkW5qNw/idKmMjjNJaaPlXFY+NbqtaTjejpCyVuIonUmFvm8GW16V58Avj/hujJfhpX9q0BMCg+VQ==", - "dev": true, - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "cdk-assets": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.74.0.tgz", - "integrity": "sha512-YF3nE1zAJU4dlWVnY30a4ALNzHhSTMMoAMv4bYkwXTLqzu+QB2v3MQdPpCLdGTGUYDaeRZy/Z/4R4MqM+/KPAA==", - "dev": true, - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "archiver": "^5.0.2", - "aws-sdk": "^2.792.0", - "glob": "^7.1.6", - "yargs": "^16.1.1" - }, - "dependencies": { - "@aws-cdk/cloud-assembly-schema": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz", - "integrity": "sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw==", - "dev": true, - "requires": { - "jsonschema": "^1.4.0", - "semver": "^7.3.2" - } - }, - "@aws-cdk/cx-api": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz", - "integrity": "sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ==", - "dev": true, - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "semver": "^7.3.2" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "archiver": { - "version": "5.0.2", - "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-5.0.2.tgz#b2c435823499b1f46eb07aa18e7bcb332f6ca3fc", - "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.1.4", - "zip-stream": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - } - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "aws-sdk": { - "version": "2.792.0", - "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.792.0.tgz#d124a6074244a4675e0416887734e8f6934bdd30", - "integrity": "sha512-h7oSlrCDtZkW5qNw/idKmMjjNJaaPlXFY+NbqtaTjejpCyVuIonUmFvm8GW16V58Avj/hujJfhpX9q0BMCg+VQ==", - "dev": true, - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "cliui": { - "version": "7.0.3", - "resolved": "https://registry.yarnpkg.com/cliui/-/cliui-7.0.3.tgz#ef180f26c8d9bff3927ee52428bfec2090427981", - "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "compress-commons": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.0.1.tgz#c5fa908a791a0c71329fba211d73cd2a32005ea8", - "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.0", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.0.tgz#05b7ca047d831e98c215538666f372b756d91893", - "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": 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" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", - "dev": true - }, - "jsonschema": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2", - "integrity": "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": 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" - } - }, - "readdir-glob": { - "version": "1.1.0", - "resolved": "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.0.tgz#a3def6f7b61343e8a1274dbb872b9a2ad055d086", - "integrity": "sha512-KgT0oXPIDQRRRYFf+06AUaodICTep2Q5635BORLzTEzp7rEqcR14a47j3Vzm3ix7FeI1lp8mYyG7r8lTB06Pyg==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - }, - "dependencies": { - "sax": { - "version": "1.2.4", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - } - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true - }, - "y18n": { - "version": "5.0.5", - "resolved": "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", - "dev": true - }, - "yargs": { - "version": "16.1.1", - "resolved": "https://registry.yarnpkg.com/yargs/-/yargs-16.1.1.tgz#5a4a095bd1ca806b0a50d0c03611d38034d219a1", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.3", - "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26", - "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==", - "dev": true - }, - "zip-stream": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.2.tgz#3a20f1bd7729c2b59fd4efa04df5eb7a5a217d2e", - "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - } - } - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "cli-color": { - "version": "0.1.7", - "resolved": "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347", - "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=", - "dev": true, - "requires": { - "es5-ext": "0.8.x" - } - }, - "cliui": { - "version": "7.0.3", - "resolved": "https://registry.yarnpkg.com/cliui/-/cliui-7.0.3.tgz#ef180f26c8d9bff3927ee52428bfec2090427981", - "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "compress-commons": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.0.1.tgz#c5fa908a791a0c71329fba211d73cd2a32005ea8", - "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.0", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.0.tgz#05b7ca047d831e98c215538666f372b756d91893", - "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "dev": true - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "degenerator": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254", - "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", - "dev": true, - "requires": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "difflib": { - "version": "0.2.4", - "resolved": "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e", - "integrity": "sha1-teMDYabbAjF21WKJLbhZQKcY9H4=", - "dev": true, - "requires": { - "heap": ">= 0.2.0" - } - }, - "dreamopt": { - "version": "0.6.0", - "resolved": "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b", - "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=", - "dev": true, - "requires": { - "wordwrap": ">=0.0.2" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "es5-ext": { - "version": "0.8.2", - "resolved": "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab", - "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dev": true, - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-uri": { - "version": "3.0.2", - "resolved": "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": 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" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "heap": { - "version": "0.2.6", - "resolved": "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=", - "dev": true - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", - "dev": true - }, - "json-diff": { - "version": "0.5.4", - "resolved": "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a", - "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==", - "dev": true, - "requires": { - "cli-color": "~0.1.6", - "difflib": "~0.2.1", - "dreamopt": "~0.6.0" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "jsonschema": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2", - "integrity": "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "pac-proxy-agent": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb", - "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^4.1.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" - } - }, - "pac-resolver": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.1.0.tgz#4b12e7d096b255a3b84e53f6831f32e9c7e5fe95", - "integrity": "sha512-d6lf2IrZJJ7ooVHr7BfwSjRO1yKSJMaiiWYSHcrxSIUtZrCa4KKGwcztdkZ/E9LFleJfjoi1yl+XLR7AX24nbQ==", - "dev": true, - "requires": { - "degenerator": "^2.2.0", - "ip": "^1.1.5", - "netmask": "^1.0.6" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promptly": { - "version": "3.2.0", - "resolved": "https://registry.yarnpkg.com/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8", - "integrity": "sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug==", - "dev": true, - "requires": { - "read": "^1.0.4" - } - }, - "proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.0.tgz#a92976af3fbc7d846f2e850e2ac5ac6ca3fb74c7", - "integrity": "sha512-8P0Y2SkwvKjiGU1IkEfYuTteioMIDFxPL4/j49zzt5Mz3pG1KO+mIrDG1qH0PQUHTTczjwGcYl+EzfXiFj5vUQ==", - "dev": true, - "requires": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^4.1.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": 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" - } - }, - "readdir-glob": { - "version": "1.1.0", - "resolved": "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.0.tgz#a3def6f7b61343e8a1274dbb872b9a2ad055d086", - "integrity": "sha512-KgT0oXPIDQRRRYFf+06AUaodICTep2Q5635BORLzTEzp7rEqcR14a47j3Vzm3ix7FeI1lp8mYyG7r8lTB06Pyg==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", - "dev": true - }, - "socks": { - "version": "2.4.4", - "resolved": "https://registry.yarnpkg.com/socks/-/socks-2.4.4.tgz#f1a3382e7814ae28c97bb82a38bc1ac24b21cca2", - "integrity": "sha512-7LmHN4IHj1Vpd/k8D872VGCHJ6yIVyeFkfIBExRmGPYQ/kdUkpdg9eKh9oOzYYYKQhuxavayJHTnmBG+EzluUA==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60", - "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4", - "socks": "^2.3.3" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "table": { - "version": "6.0.3", - "resolved": "https://registry.yarnpkg.com/table/-/table-6.0.3.tgz#e5b8a834e37e27ad06de2e0fda42b55cfd8a0123", - "integrity": "sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "lodash": "^4.17.20", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" - } - }, - "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tslib": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "8.3.1", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - }, - "dependencies": { - "sax": { - "version": "1.2.4", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - } - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "dev": true - }, - "y18n": { - "version": "5.0.5", - "resolved": "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "dev": true - }, - "yargs": { - "version": "16.1.1", - "resolved": "https://registry.yarnpkg.com/yargs/-/yargs-16.1.1.tgz#5a4a095bd1ca806b0a50d0c03611d38034d219a1", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.3", - "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26", - "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==", - "dev": true - }, - "zip-stream": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.2.tgz#3a20f1bd7729c2b59fd4efa04df5eb7a5a217d2e", - "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", - "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "brace-expansion": { - "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" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "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" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "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==", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "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==", - "dev": true - }, - "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 - }, - "constructs": { - "version": "3.2.36", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.2.36.tgz", - "integrity": "sha512-9j7UNYVIpirS9AgCBNrhgAB7Sa2HZ1/Ykyt9C22ZPoeCUEohNoERLwEPORMgykayR2YJyRuxXwNsPCBTu/chQQ==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "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 - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, - "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=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "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 - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "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": { - "debug": { - "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" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "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=", - "dev": true - }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": 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" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "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" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-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 - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "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=", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true - } - } - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true, - "optional": true - }, - "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 - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-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==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "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==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "dependencies": { - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - } - } - }, - "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - } - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - } - }, - "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - } - }, - "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - } - }, - "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - } - }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true - }, - "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - } - }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - } - }, - "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - } - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.2.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", - "domexception": "^2.0.1", - "escodegen": "^1.14.1", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", - "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "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==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.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==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "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" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "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" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", - "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "optional": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "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" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "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=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "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=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "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 - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "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 - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "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 - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "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" - } - }, - "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" - } - }, - "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=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "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==", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "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" - } - }, - "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 - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "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": { - "debug": { - "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" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "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==", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "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==", - "dev": true, - "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-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.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=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "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 - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.3.tgz", - "integrity": "sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "lodash": "^4.17.20", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "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=", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "ts-jest": { - "version": "26.4.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", - "integrity": "sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==", - "dev": true, - "requires": { - "@types/jest": "26.x", - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^26.1.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "mkdirp": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } - } - }, - "ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", - "dev": true - }, - "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==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true - } - } - }, - "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==", - "dev": true, - "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=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", - "dev": true, - "optional": true - }, - "v8-to-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", - "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - } - }, - "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" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", - "dev": true - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/backend-cdk/package.json b/backend-cdk/package.json deleted file mode 100644 index 8e81238e7..000000000 --- a/backend-cdk/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "backend", - "version": "0.1.0", - "bin": { - "backend": "bin/backend.js" - }, - "scripts": { - "build": "tsc", - "watch": "tsc -w", - "test": "jest", - "cdk": "cdk" - }, - "devDependencies": { - "@aws-cdk/assert": "1.74.0", - "@types/jest": "^26.0.10", - "@types/node": "10.17.27", - "jest": "^26.4.2", - "ts-jest": "^26.2.0", - "aws-cdk": "1.74.0", - "ts-node": "^8.1.0", - "typescript": "~3.9.7" - }, - "dependencies": { - "@aws-cdk/aws-appsync": "^1.74.0", - "@aws-cdk/aws-cognito": "^1.74.0", - "@aws-cdk/aws-ec2": "^1.74.0", - "@aws-cdk/aws-lambda": "^1.74.0", - "@aws-cdk/aws-rds": "^1.74.0", - "@aws-cdk/core": "1.74.0", - "source-map-support": "^0.5.16" - } -} diff --git a/backend-cdk/test/backend.test.ts b/backend-cdk/test/backend.test.ts deleted file mode 100644 index d2d05da93..000000000 --- a/backend-cdk/test/backend.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { expect as expectCDK, matchTemplate, MatchStyle } from '@aws-cdk/assert'; -import * as cdk from '@aws-cdk/core'; -import * as Backend from '../lib/backend-stack'; - -test('Empty Stack', () => { - const app = new cdk.App(); - // WHEN - const stack = new Backend.BackendStack(app, 'MyTestStack'); - // THEN - expectCDK(stack).to(matchTemplate({ - "Resources": {} - }, MatchStyle.EXACT)) -}); diff --git a/backend-cdk/tsconfig.json b/backend-cdk/tsconfig.json deleted file mode 100644 index ec75123ce..000000000 --- a/backend-cdk/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2018", - "module": "commonjs", - "lib": ["es2018"], - "declaration": true, - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "alwaysStrict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": false, - "inlineSourceMap": true, - "inlineSources": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false, - "typeRoots": ["./node_modules/@types"] - }, - "exclude": ["cdk.out"] -} diff --git a/data/.gitignore b/data/.gitignore new file mode 100644 index 000000000..49be01d02 --- /dev/null +++ b/data/.gitignore @@ -0,0 +1 @@ +serviceAccountKey.json \ No newline at end of file diff --git a/data/classic-editor-remember.md b/data/classic-editor-remember.md new file mode 100644 index 000000000..2a1ff2392 --- /dev/null +++ b/data/classic-editor-remember.md @@ -0,0 +1,59 @@ +classic-editor-remember +rank_math_rich_snippet +rank_math_snippet_location +rank_math_snippet_article_type +rank_math_snippet_book_rating +rank_math_snippet_book_rating_min +rank_math_snippet_book_rating_max +rank_math_snippet_book_editions +rank_math_snippet_course_provider_type +rank_math_snippet_course_rating +rank_math_snippet_course_rating_min +rank_math_snippet_course_rating_max +rank_math_snippet_event_type +rank_math_snippet_event_attendance_mode +rank_math_snippet_event_performer_type +rank_math_snippet_event_price +rank_math_snippet_event_inventory +rank_math_snippet_event_rating +rank_math_snippet_event_rating_min +rank_math_snippet_event_rating_max +rank_math_snippet_jobposting_unpublish +rank_math_snippet_music_type +rank_math_snippet_product_price +rank_math_snippet_product_instock +rank_math_snippet_product_rating +rank_math_snippet_product_rating_min +rank_math_snippet_product_rating_max +rank_math_snippet_recipe_rating +rank_math_snippet_recipe_rating_min +rank_math_snippet_recipe_rating_max +rank_math_snippet_recipe_instruction_type +rank_math_snippet_review_worst_rating +rank_math_snippet_review_best_rating +rank_math_snippet_review_location +rank_math_snippet_software_price +rank_math_snippet_software_rating +rank_math_snippet_software_rating_min +rank_math_snippet_software_rating_max +rank_math_schema_Article +rank_math_focus_keyword +rank_math_robots +rank_math_internal_links_processed +rank_math_analytic_object_id +rank_math_internal_links_processed +rank_math_primary_category +rank_math_seo_score +rank_math_robots +rank_math_advanced_robots +rank_math_facebook_enable_image_overlay +rank_math_facebook_image_overlay +rank_math_twitter_use_facebook +rank_math_twitter_card_type +rank_math_twitter_enable_image_overlay +rank_math_twitter_image_overlay +rank_math_permalink +cybocfi_hide_featured_image +rank_math_focus_keyword +rank_math_analytic_object_id +cloudinary_transformations_terms diff --git a/data/courses.json b/data/courses.json new file mode 100644 index 000000000..e931dd15b --- /dev/null +++ b/data/courses.json @@ -0,0 +1,215 @@ +{ + "nextjs9": { + "title": "Next.js 9", + "date": "2019-08-28T17:21:59+00:00", + "status": "publish", + "permalink": "/courses/nextjs9", + "author": "Alex Patterson", + "excerpt": "Introduction to building Next.js - Version 9 with MaterialUI and Firebase.", + "type": "courses", + "id": 80, + "thumbnail": "../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1600704424/ccd-cloudinary/Nextjs9/Nextjs9-150x150.png", + "category": [ + "Web" + ], + "tag": [ + "next.js" + ], + "ld_course_category": [ + "Firebase", + "MaterialUI", + "NextJS" + ], + "ld_course_tag": [], + "course_sections": [ + "[{\"order\":0,\"ID\":1600276649670,\"post_title\":\"Intro\",\"url\":\"\",\"edit_link\":\"\",\"tree\":[],\"expanded\":false,\"type\":\"section-heading\"},{\"order\":3,\"ID\":1600276658712,\"post_title\":\"MaterialUI\",\"url\":\"\",\"edit_link\":\"\",\"tree\":[],\"expanded\":false,\"type\":\"section-heading\"},{\"order\":5,\"ID\":1600276677424,\"post_title\":\"Firebase\",\"url\":\"\",\"edit_link\":\"\",\"tree\":[],\"expanded\":false,\"type\":\"section-heading\"},{\"order\":8,\"ID\":1600276684571,\"post_title\":\"SSR\",\"url\":\"\",\"edit_link\":\"\",\"tree\":[],\"expanded\":false,\"type\":\"section-heading\"}]" + ], + "learndash_group_enrolled_411": [ + "1600976744" + ], + "is_ratings_enabled": [ + "yes" + ], + "learndash_group_enrolled_1936": [ + "1605749658" + ], + "preview": "
    In this course you will walk through how to setup a site using Next.js version 9, utilizing MaterialUI and Firebase. You can find the entire video from our live walkthrough above. I will add this on the top of each lesson as well.", + "iso8601Date": "2019-08-28T13:21:59-04:00", + "basename": "nextjs9" + }, + "microbit-for-a-10-year-old": { + "title": "micro:bit for a 10 Year Old", + "date": "2020-05-17T21:21:20+00:00", + "status": "publish", + "permalink": "/courses/microbit-for-a-10-year-old", + "author": "Alex Patterson", + "excerpt": "", + "type": "courses", + "id": 635, + "thumbnail": "../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1600704450/ccd-cloudinary/ForA10YearOldMicroBit/ForA10YearOldMicroBit-150x150.png", + "category": [], + "tag": [ + "beginner", + "block programming" + ], + "ld_course_category": [], + "ld_course_tag": [], + "course_sections": [ + "[{\"order\":0,\"ID\":1600377778055,\"post_title\":\"Intro\",\"type\":\"section-heading\",\"url\":\"\",\"edit_link\":\"\",\"tree\":[],\"expanded\":false}]" + ], + "ld_course_steps": [ + "a:4:{s:1:\"h\";a:3:{s:12:\"sfwd-lessons\";a:1:{i:637;a:2:{s:10:\"sfwd-topic\";a:0:{}s:9:\"sfwd-quiz\";a:0:{}}}s:9:\"sfwd-quiz\";a:0:{}s:15:\"section-heading\";a:1:{i:1600377778055;a:0:{}}}s:1:\"t\";a:4:{s:12:\"sfwd-lessons\";a:1:{i:0;i:637;}s:10:\"sfwd-topic\";a:0:{}s:9:\"sfwd-quiz\";a:0:{}s:15:\"section-heading\";a:1:{i:0;i:1600377778055;}}s:1:\"r\";a:2:{s:16:\"sfwd-lessons:637\";a:0:{}s:29:\"section-heading:1600377778055\";a:0:{}}s:1:\"l\";a:2:{i:0;s:16:\"sfwd-lessons:637\";i:1;s:29:\"section-heading:1600377778055\";}}" + ], + "learndash_group_enrolled_411": [ + "1600976744" + ], + "is_ratings_enabled": [ + "yes" + ], + "learndash_group_enrolled_1936": [ + "1605749658" + ], + "preview": "\n\n", + "iso8601Date": "2020-05-17T17:21:20-04:00", + "basename": "microbit-for-a-10-year-old" + }, + "html-for-a-10-year-old": { + "title": "HTML for a 10 Year Old", + "date": "2020-02-01T20:41:13+00:00", + "status": "publish", + "permalink": "/courses/html-for-a-10-year-old", + "author": "Alex Patterson", + "excerpt": "", + "type": "courses", + "id": 616, + "thumbnail": "../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1600704452/ccd-cloudinary/ForA10YearOldHTML/ForA10YearOldHTML-150x150.png", + "category": [], + "tag": [ + "beginner" + ], + "ld_course_category": [], + "ld_course_tag": [], + "course_sections": [ + "[{\"order\":0,\"ID\":1600375221541,\"post_title\":\"Setup\",\"url\":\"\",\"edit_link\":\"\",\"tree\":[],\"expanded\":false,\"type\":\"section-heading\"},{\"order\":2,\"ID\":1600375226430,\"post_title\":\"Basics\",\"url\":\"\",\"edit_link\":\"\",\"tree\":[],\"expanded\":false,\"type\":\"section-heading\"}]" + ], + "learndash_group_enrolled_411": [ + "1600976744" + ], + "is_ratings_enabled": [ + "yes" + ], + "learndash_group_enrolled_1936": [ + "1605749658" + ], + "preview": "\n\n", + "iso8601Date": "2020-02-01T15:41:13-05:00", + "basename": "html-for-a-10-year-old" + }, + "angularmaterial": { + "title": "Angular Material", + "date": "2018-11-26T15:41:45+00:00", + "status": "publish", + "permalink": "/courses/angularmaterial", + "author": "Alex Patterson", + "excerpt": "
    A walk through of how to use Angular Material with Firebase.\n\n
    ", + "type": "courses", + "id": 51, + "thumbnail": "../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1567280312/ajonp-ajonp-com/courses/angularmaterial/Angular_Material/Angular_Material-150x150.png", + "category": [ + "Uncategorized" + ], + "tag": [ + "angular", + "angular material", + "firebase" + ], + "ld_course_category": [ + "Angular", + "Firebase" + ], + "ld_course_tag": [], + "course_sections": [ + "[]" + ], + "learndash_group_enrolled_411": [ + "1600976744" + ], + "rank_math_primary_ld_course_category": [ + "0" + ], + "course_price_billing_p3": [ + "" + ], + "course_price_billing_t3": [ + "D" + ], + "is_ratings_enabled": [ + "yes" + ], + "learndash_group_enrolled_1936": [ + "1605749658" + ], + "preview": "A walk through of how to use Angular Material with Firebase.", + "content": "\nA walk through of how to use Angular Material with Firebase.", + "iso8601Date": "2018-11-26T10:41:45-05:00", + "basename": "angularmaterial" + }, + "angularfire-master-course": { + "title": "AngularFire Master Course", + "date": "2020-09-25T00:00:55+00:00", + "status": "private", + "permalink": "/courses/angularfire-master-course", + "author": "Alex Patterson", + "excerpt": "", + "type": "courses", + "id": 111, + "thumbnail": "../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1600704415/ccd-cloudinary/Firebase-Master-Course-Title/Firebase-Master-Course-Title-150x150.png", + "category": [], + "tag": [ + "angular", + "firebase" + ], + "ld_course_category": [ + "Angular", + "Firebase" + ], + "ld_course_tag": [], + "learndash_group_enrolled_411": [ + "1600297084" + ], + "course_sections": [ + "[{\"order\":0,\"ID\":1600297232631,\"post_title\":\"Setup\",\"type\":\"section-heading\",\"url\":\"\",\"edit_link\":\"\",\"tree\":[],\"expanded\":false}]" + ], + "rank_math_primary_ld_course_category": [ + "0" + ], + "is_ratings_enabled": [ + "yes" + ], + "reviews_position": [ + "after" + ], + "wdm_rating_review_setting": [ + "0" + ], + "wdm_course_feedback_setting": [ + "0" + ], + "course_price_billing_p3": [ + "" + ], + "course_price_billing_t3": [ + "D" + ], + "learndash_group_enrolled_1936": [ + "1605749658" + ], + "preview": "
    ", + "iso8601Date": "2020-09-24T20:00:55-04:00", + "basename": "angularfire-master-course" + } +} diff --git a/data/firebase/postsUpload.js b/data/firebase/postsUpload.js new file mode 100644 index 000000000..d67f33945 --- /dev/null +++ b/data/firebase/postsUpload.js @@ -0,0 +1,77 @@ +const admin = require("firebase-admin"); +// serviceAccountKey.json can be generated in Firebase Console. +const serviceAccountKey = require("../../serviceAccountKey.json"); +const seed = require("firestore-seed"); +var uuid = require("uuid"); +var path = require("path"); +var fs = require("fs"); + +// Initialize firebase-admin. +admin.initializeApp({ + credential: admin.credential.cert(serviceAccountKey), + databaseURL: "https://dev-codingcat-dev.firebaseio.com", + storageBucket: "dev-codingcat-dev.appspot.com", +}); + +["posts", "tutorials", "podcasts"].forEach((postType) => { + var posts = JSON.parse( + fs.readFileSync(path.join(__dirname, `../posts/${postType}.json`), "utf8") + ); + var postsMd = JSON.parse( + fs.readFileSync( + path.join(__dirname, `../markdown/${postType}/_${postType}.json`), + "utf8" + ) + ); + + const postDocs = []; + for (const [key, post] of Object.entries(posts)) { + let postMd; + for (const [mdKey, md] of Object.entries(postsMd)) { + if (key === mdKey) { + postMd = md; + break; + } + } + if (postMd == undefined) { + break; + } + + postDocs.push( + seed.doc(uuid.v4(), { + createdAt: post.date, + updatedAt: post.date, + post_publish_datetime: post.date, + post_title: post.title, + post_status: post.status, + post_permalink: post.permalink, + post_author: post.author, + post_excerpt: post.excerpt, + post_type: post.type, + post_thumbnail: post.thumbnail, + post_categories: post.category, + post_tags: post.tag, + post_formats: post.post_format, + post_preview: post.preview, + post_content: postMd.content, + ping_status: false, + comment_count: 0, + post_iso8601Date: post.iso8601Date, + post_basename: post.basename, + post_featured_image: post.thumbnail, + }) + ); + } + + // Import seeds. + const postCollection = seed.collection(`${postType}`, postDocs); + + postCollection + .importDocuments(admin) + .then(() => { + console.log("Successfully imported documents."); + }) + .catch((e) => { + console.log("Failed to import documents: " + e); + }); +}); diff --git a/data/lessons.json b/data/lessons.json new file mode 100644 index 000000000..0077e5366 --- /dev/null +++ b/data/lessons.json @@ -0,0 +1,460 @@ +{ + "ssr-part-2": { + "title": "SSR Part 2", + "date": "2020-09-16T17:19:25+00:00", + "status": "publish", + "permalink": "/courses/nextjs9/lessons/ssr-part-2", + "author": "Alex Patterson", + "excerpt": "", + "type": "lessons", + "id": 96, + "ld_lesson_category": [], + "ld_lesson_tag": [], + "course_id": [ + "80" + ], + "ld_course_80": [ + "80" + ], + "preview": "
    > You must have [Node](https://nodejs.org/en/download/) installed so you can leverage npm. \n> This module is part of a series if you would like to start from here please execute\n\n```\n
    ```\ngit clone https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs.git && cd ajonp-ajsbooks-nextjs && git checkout 07-Book-Navigation && npm i && code .\n```\n```\n\n> If you notice any issues please submit a [pull request](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/pulls).\n\nBook Page – SSR #2\n==================\n\n> I fully admit that this is an *ADVANCED* course, but I would love any suggestions or pull requests to make it easier!\n\nUpdate firebase.json[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#update-firebasejson)\n---------------------------------------------------------------------------------------------------------------------------------\n\nIt is very important to understand what is happening in this file. You are telling Firebase Hosting how to direct traffic:\n\n- `/book/**` path -> towards a Cloud Function called `book`.\n- `/books` path -> towards a Cloud Function called `books`.\n\n- `**/**` Notice how we have removed the full glob path.\n\nThese cloud functions will be found in our `dist/functions` directory.[/firebase.json](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/07-Book-Navigation/firebase.json)### Full code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#full-code)\n\n```\n
    ```\n{ \"firestore\": { \"rules\": \"firestore.rules\", \"indexes\": \"firestore.indexes.json\" }, \"functions\": { \"source\": \"dist/functions\" }, \"hosting\": [ { \"public\": \"dist/public\", \"target\": \"ajsbooks-nextjs\", \"ignore\": [\"firebase.json\", \"**/.*\", \"**/node_modules/**\"], \"rewrites\": [ { \"source\": \"/books\", \"function\": \"books\" }, { \"source\": \"/book{,/**}\", \"function\": \"book\" } ] } ], \"storage\": { \"rules\": \"storage.rules\" } } \n```\n```\n\nFirebase Functions index.ts[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#firebase-functions-indexts)\n-----------------------------------------------------------------------------------------------------------------------------------------------\n\nThere are three cloud functions referenced from the main file 1. api – This allows access to our Firebase backend to read book data 2. books – Lambda for list of books from `pages/books.tsx`. 3. book – Lamba for book details from `pages/book.tsx`. Main Firebase Cloud Function[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#main-firebase-cloud-function)\n--------------------------------------------------------------------------------------------------------------------------------------------------\n\nThis allows you to tell Firebase where all of the exports are coming from to build the cloud functions from. ### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#full-code)\n\n[/functions/src/index.ts](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/08-Book-Page/functions/src/index.ts)```\n
    ```\nimport * as functions from 'firebase-functions'; import * as app from './api'; const onRequest = functions.https.onRequest; // These relative paths will exist after compiling everything // const index = require('./_next/serverless/pages/index'); //Removed as Next 9 only pushes static const books = require('./_next/serverless/pages/books'); const book = require('./_next/serverless/pages/book'); // These named exports will map to Firebase Function names // exports.index = onRequest((req, res) => index.render(req, res)); //Removed as Next 9 only pushes static exports.books = onRequest((req, res) => books.render(req, res)); exports.book = onRequest((req, res) => book.render(req, res)); // API exports.api = app.listener; \n```\n```\n\nAdd api[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#add-api)\n--------------------------------------------------------------------------------------------------------\n\n### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#full-code)\n\n[/functions/src/api/index.ts](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/08-Book-Page/functions/src/api/index.ts)```\n
    ```\nimport * as cors from 'cors'; import * as express from 'express'; import * as admin from 'firebase-admin'; import * as functions from 'firebase-functions'; import BookModel from '../../../models/BookModel'; // Initialize Firebase Admin admin.initializeApp(); // Create Express App const app = express(); // Use cors middleware app.use(cors({ origin: true })); app.get('/book', async (req, res) => { const id = req.query.id; if (id) { console.log(`Fetching ${id}`); try { const bookRef = await admin .firestore() .collection('books') .doc(id) .get(); res.json(bookRef.data()); } catch (e) { console.log(e); return; } } else { res.status(403).send('Missing id'); return; } }); app.get('/books', async (req, res) => { try { const booksSnapshot = await admin .firestore() .collection('books') .get(); const books: BookModel[] = []; booksSnapshot.forEach(doc => { books.push(doc.data()); }); res.json(books); } catch (e) { console.log(e); return; } }); app.get('/chapter', async (req, res) => { const id = req.query.id; const chapterId = req.query.chapterId; if (id) { console.log(`Fetching ${id}`); try { const bookRef = await admin .firestore() .collection(`books/${id}/chapters`) .doc(chapterId) .get(); res.json(bookRef.data()); } catch (e) { console.log(e); return; } } else { res.status(403).send('Missing id'); return; } }); app.get('/page', async (req, res) => { const id = req.query.id; const chapterId = req.query.chapterId; const pageId = req.query.pageId; if (id) { console.log(`Fetching ${id}`); try { const bookRef = await admin .firestore() .collection(`books/${id}/chapters/${chapterId}/pages`) .doc(pageId) .get(); res.json(bookRef.data()); } catch (e) { console.log(e); return; } } else { res.status(403).send('Missing id'); return; } }); export const listener = functions.https.onRequest(app); \n```\n```\n\nAdd BookDetail[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#add-bookdetail)\n----------------------------------------------------------------------------------------------------------------------\n\n### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#full-code)\n\n[/components/BookDetail.tsx](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/08-Book-Page/components/BookDetail.tsx)```\n
    ```\nimport { Avatar, Card, CardContent, List, ListItem, ListItemAvatar, ListItemText } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import NextLink from 'next/link'; import React from 'react'; import Book from '../models/BookModel'; import Chapter from '../models/ChapterModel'; const useStyles = makeStyles(theme => ({ card: { width: '100%', maxWidth: 400, margin: 5, display: 'flex', flexDirection: 'column' }, list: { width: '100%', backgroundColor: theme.palette.background.paper } })); const BookDetail = (prop: { book: Book }) => { const classes = useStyles(); let listItems: any[] = []; if (prop.book && prop.book.chapters) { prop.book.chapters.map((chapter: Chapter) => { listItems.push(         ); }); } return (    {prop.book.title}   {listItems.map(item => { return item; })}    ); }; export default BookDetail; \n```\n```\n\nAdd Chapter Detail[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#add-chapter-detail)\n------------------------------------------------------------------------------------------------------------------------------\n\n### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#full-code)\n\n[/components/ChapterDetail.tsx](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/08-Book-Page/components/ChapterDetail.tsx)```\n
    ```\nimport { Button, Card, CardContent } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import NextLink from 'next/link'; import React from 'react'; import BookModel from '../models/BookModel'; import Chapter from '../models/ChapterModel'; import PageModel from '../models/PageModel'; const useStyles = makeStyles(() => ({ card: { width: '100%', maxWidth: 400, margin: 5, display: 'flex', flexDirection: 'column' }, button: { margin: 2 } })); const ChapterDetail = (prop: { book: BookModel; chapter: Chapter }) => { const classes = useStyles(); let listItems: any[] = []; if (prop.chapter && prop.chapter.pages) { prop.chapter.pages.map((page: PageModel) => { listItems.push(    ); }); } return (    {prop.chapter.title} Pages:  {listItems.map(item => { return item; })}   ); }; export default ChapterDetail; \n```\n```\n\nAdd Book Page[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#add-book-page)\n--------------------------------------------------------------------------------------------------------------------\n\n### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-2#full-code)\n\n[/components/BookPage.tsx](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/08-Book-Page/components/BookPage.tsx)```\n
    ```\nimport Paper from '@material-ui/core/Paper'; import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import React from 'react'; import PageModel from '../models/PageModel'; const useStyles = makeStyles(theme => ({ root: { width: '100%', maxWidth: 400, margin: 5, display: 'flex', flexDirection: 'column', padding: theme.spacing(3, 2) } })); const BookPage = (prop: { page: PageModel }) => { const classes = useStyles(); let page; if (prop.page && prop.page.text) { page = {prop.page.text}; } else { page = Please select a Chapter; } return ( 
    {page}
    ); }; export default BookPage; \n```\n```", + "iso8601Date": "2020-09-16T13:19:25-04:00", + "basename": "ssr-part-2" + }, + "ssr-part-1": { + "title": "SSR Part 1", + "date": "2020-09-16T17:19:16+00:00", + "status": "publish", + "permalink": "/courses/nextjs9/lessons/ssr-part-1", + "author": "Alex Patterson", + "excerpt": "", + "type": "lessons", + "id": 94, + "thumbnail": "../../../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1600704456/ccd-cloudinary/SSRPart1/SSRPart1-150x150.png", + "ld_lesson_category": [], + "ld_lesson_tag": [], + "course_id": [ + "80" + ], + "ld_course_80": [ + "80" + ], + "preview": "
    > You must have [Node](https://nodejs.org/en/download/) installed so you can leverage npm. \n> This module is part of a series if you would like to start from here please execute\n\n```\n
    ```\ngit clone https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs.git && cd ajonp-ajsbooks-nextjs && git checkout 06-Firebase-Project && npm i && code .\n```\n```\n\n> If you notice any issues please submit a [pull request](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/pulls).\n\nBook Navigation – SSR #1\n------------------------\n\n> I fully admit that this is an *ADVANCED* course, but I would love any suggestions or pull requests to make it easier!\n\nServer Side Rendering(SSR) is a popular technique for rendering a normally client-side only single page app (SPA) on the server and then sending a fully rendered page to the client. – From [alligator.io](https://alligator.io/react/server-side-rendering/)SSR is not to be confused with Static Site Generators (SSG) like [Hugo](https://gohugo.io/) or [Gatsby](https://www.gatsbyjs.org/) where it generates all of your sites pages in a build step (not dynamically on the server).Typically a React application is run only on the client side, this is where Next.js comes into play.[Next.js SSR Benefits](https://nextjs.org/features/server-side-rendering#benefits) include:\n\n- Superior Performance\n- Optimized for Discovery\n- Lightning Fast Delivery\n\nSo in this module you will start to create the correct framework required to continuously build a Next.js SSR site, then in the next module we will add several additional SSR features. Update next.config.js[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#update-nextconfigjs)\n----------------------------------------------------------------------------------------------------------------------------------\n\nYou will setup this project to use [Next.js Serverless Deployment](https://nextjs.org/docs#serverless-deployment). This will allow us to create [lambdas](https://zeit.co/docs/v2/advanced/concepts/lambdas/) or in the Firebase world fully baked [Cloud Functions](https://firebase.google.com/docs/functions/get-started). ### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#full-code)\n\n[next.config.js](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/07-Book-Navigation/next.config.js)```\n
    ```\nmodule.exports = { target: 'serverless', distDir: './dist/functions/_next' }; \n```\n```\n\nUpdate firebase.json[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#update-firebasejson)\n---------------------------------------------------------------------------------------------------------------------------------\n\nIt is very important to understand what is happening in this file. You are telling Firebase Hosting how to direct traffic: - `/book/**` path -> towards a static html file called `book`.\n- `/books` path -> towards a static html file called `books`.\n- `**/**` path -> covers every other call. It will push these calls towards our static files.\n\nThese cloud functions will be found in our `dist/functions` directory.[/firebase.json](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/07-Book-Navigation/firebase.json)### Full code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#full-code)\n\n```\n
    ```\n{ \"firestore\": { \"rules\": \"firestore.rules\", \"indexes\": \"firestore.indexes.json\" }, \"functions\": { \"source\": \"dist/functions\" }, \"hosting\": [ { \"public\": \"dist/public\", \"target\": \"ajsbooks-nextjs\", \"ignore\": [\"firebase.json\", \"**/.*\", \"**/node_modules/**\"], \"rewrites\": [ { \"source\": \"/book/**\", \"function\": \"book\" }, { \"source\": \"/books\", \"function\": \"books\" }, { \"source\": \"**/**\", \"function\": \"index\" } ] } ], \"storage\": { \"rules\": \"storage.rules\" } } \n```\n```\n\nUpdate Firebase functions[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#update-firebase-functions)\n--------------------------------------------------------------------------------------------------------------------------------------------\n\n[/functions/src/index.ts](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/07-Book-Navigation/functions/src/index.ts)Update package.json[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#update-packagejson)\n-------------------------------------------------------------------------------------------------------------------------------\n\nThis file has gotten a little crazy in the scripts area, so let me try and break down the steps: firebase:serve > Starts the build process firebase:build -> - clean -> Cleans out our build folders\n- build -> calls `next build` which outputs to `.next`\n- build:functions ->\n  - build:functions:lint -> moves into the `functions` directory, lints then builds (this build is self contained) and outputs to `functions/lib`\n  - cpx -> copies all the `functions/lib/` over to `dist/functions`\n- build:public ->\n  - cpx -> copies all `static/` files to `dist/public/static`, `dist/functions/_next/static/` files to `dist/public/_next/static`\n- copy:deps -> copies `package.json,package-lock.json` to dist/functions, moves into directory and then runs `npm install`\n\n1. \n\nfirebase serve -> you can run everything locally to test 1. \n\nfirebase:deploy is the same as firebase:serve but actaully deploys all of your code.If nothing else you can copy and paste and all should work ????. ### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#full-code)\n\n[package.json](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/07-Book-Navigation/package.json)```\n
    ```\n{ \"name\": \"ajonp-ajsbooks-nextjs\", \"version\": \"0.0.1\", \"description\": \"Next.js Example using Firestore, Firebase Hosting\", \"main\": \"index.js\", \"repository\": { \"type\": \"git\", \"url\": \"git+https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs.git\" }, \"keywords\": [ \"nextjs\", \"firestore\", \"firebase\", \"materialui\" ], \"author\": \"Alex Patterson  (https://ajonp.com/)\", \"license\": \"MIT\", \"bugs\": { \"url\": \"https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/issues\" }, \"homepage\": \"https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs#readme\", \"dependencies\": { \"@material-ui/core\": \"^4.3.0\", \"@material-ui/icons\": \"^4.2.1\", \"@material-ui/styles\": \"^4.3.0\", \"firebase\": \"^6.3.4\", \"firebase-admin\": \"^8.4.0\", \"firebase-functions\": \"^3.2.0\", \"next\": \"^9.0.3\", \"react\": \"^16.8.6\", \"react-dom\": \"^16.8.6\", \"rxfire\": \"^3.6.9\", \"rxjs\": \"^6.5.2\" }, \"engines\": { \"node\": \"8\" }, \"scripts\": { \"dev\": \"npm run clean && next\", \"build\": \"next build\", \"start\": \"next start\", \"export\": \"next export\", \"analyze\": \"cross-env BUNDLE_ANALYZE=both next build\", \"analyze:server\": \"cross-env BUNDLE_ANALYZE=server next build\", \"analyze:browser\": \"cross-env BUNDLE_ANALYZE=browser next build\", \"build:functions\": \"npm run build:functions:lint && cpx \\\"functions/lib/**/*.*\\\" dist/functions\", \"build:functions:lint\": \"cd functions && npm install && npm run lint && npm run build\", \"build:public\": \"cpx \\\"static/**/*.*\\\" dist/public/static && cpx \\\"dist/functions/_next/static/**/*.*\\\" dist/public/_next/static && cpx \\\"dist/functions/_next/serverless/pages/**/*.*\\\" dist/public/\", \"clean\": \"rimraf dist && rimraf functions/lib && rimraf .next\", \"copy:deps\": \"cpx \\\"*{package.json,package-lock.json}\\\" dist/functions && cd dist/functions && npm install\", \"firebase:build\": \"npm run clean && npm run build:functions && npm run build && npm run build:public && npm run copy:deps\", \"firebase:serve\": \"npm run firebase:build && firebase serve\", \"firebase:deploy\": \"npm run firebase:build && firebase deploy\" }, \"devDependencies\": { \"cpx\": \"^1.5.0\", \"cross-env\": \"^5.2.0\", \"typescript\": \"^3.5.3\" } } \n```\n```\n\nWatch Next.js Build Output[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#watch-nextjs-build-output)\n---------------------------------------------------------------------------------------------------------------------------------------------\n\nLook carefully in the terminal output when you are building, right now we are only setting up the next step on our journey. Next.js is still just outputting static html files, not lambdas. 
    ![Static Only](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/7-book-nav-ssr1/Screen_Shot_2019-09-03_at_3.39.46_PM.png)
    Update Book Card[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#update-book-card)\n--------------------------------------------------------------------------------------------------------------------------\n\nMain change here is just in the TypeScript updates. ### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#full-code)\n\n[/components/BookCard.tsx](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/07-Book-Navigation/components/BookCard.tsx)```\n
    ```\nimport { CardActionArea } from '@material-ui/core'; import Card from '@material-ui/core/Card'; import CardActions from '@material-ui/core/CardActions'; import CardContent from '@material-ui/core/CardContent'; import CardMedia from '@material-ui/core/CardMedia'; import Collapse from '@material-ui/core/Collapse'; import IconButton from '@material-ui/core/IconButton'; import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import clsx from 'clsx'; import NextLink from 'next/link'; import React from 'react'; import Book from '../models/Book'; const useStyles = makeStyles(theme => ({ card: { width: 400, margin: 5, display: 'flex', flexDirection: 'column' }, cardContent: { display: 'flex', flex: '1 0 auto', flexDirection: 'column', width: '375px', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', '& h1': { fontSize: '1.4rem', textTransform: 'uppercase' } }, cardMedia: { height: 0, paddingTop: '65%', backgroundRepeat: 'no-repeat', backgroundSize: 'auto', cursor: 'pointer' }, cardDescription: { width: 368, height: 190, overflow: 'auto', whiteSpace: 'normal' }, cardActions: { display: 'flex', alignItems: 'center', justifyContent: 'space-between' }, expand: { transform: 'rotate(0deg)', marginLeft: 'auto', transition: theme.transitions.create('transform', { duration: theme.transitions.duration.shortest }) }, expandOpen: { transform: 'rotate(180deg)' } })); const BookCard = ({ book }: { book: Book }) => { const classes = useStyles(); const [expanded, setExpanded] = React.useState(false); const handleExpandClick = () => { setExpanded(!expanded); }; return (      {book.title}  Author: {` ${book.authorDisplayName}`}      Summary:   {' '}     {book.description}     ); }; export default BookCard; \n```\n```\n\nPrevent Duplicate Firebase Instances[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#prevent-duplicate-firebase-instances)\n------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThe biggest change here is just an `if` statement `if (!firebase.apps.length)`, that doesn’t allow another initialization to occur. ### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#full-code)\n\n[/lib/firebase.ts](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/blob/07-Book-Navigation/lib/firebase.ts)```\n
    ```\nconst firebaseConfig = { apiKey: 'AIzaSyCXLldoMUB_AxaLpvG4pQ9Pzg9bEqpMgTA', authDomain: 'ajonp-ajs-books.firebaseapp.com', databaseURL: 'https://ajonp-ajs-books.firebaseio.com', projectId: 'ajonp-ajs-books', storageBucket: 'ajonp-ajs-books.appspot.com', messagingSenderId: '936263241017', appId: '1:936263241017:web:5faee456c1ed2da8' }; export default async function loadFirebase() { const firebase = await import('firebase/app'); await import('firebase/firestore'); try { if (!firebase.apps.length) { const app = firebase.initializeApp(firebaseConfig); firebase.firestore(app); } } catch (err) { // we skip the \"already exists\" message which is // not an actual error when we're hot-reloading console.log(err); if (!/already exists/.test(err.message)) { console.error('Firebase initialization error', err.stack); } } return firebase; } \n```\n```\n\nWrap Up[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1#wrap-up)\n--------------------------------------------------------------------------------------------------------\n\nYou can now build a static site for all of the components and you are ready to convert them into lambdas. Navigate to `books` when selecting one it will open a template. ```\n
    ```\nnpm run firebase:serve \n```\n```\n\n> If you get to the end and something is broken just grab the full branch\n\n```\n
    ```\ngit checkout 07-Book-Navigation -f && npm i\n```\n```\n\n[](https://twitter.com/intent/tweet?url=https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1&via=CodingCatDev&hashtags=CodingCatDevShares&text=SSR%20Part%201%0a)[](https://www.linkedin.com/shareArticle?mini=true&url=https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1&title=SSR%20Part%201%0a&summary=%27#CodingCatDevShares'&source='codingcat.dev')[](https://www.facebook.com/sharer.php?u=https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1)[](https://www.reddit.com/submit?url=https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1&title=SSR%20Part%201%0a)[](https://news.ycombinator.com/submitlink?u=https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-ssr-part-1&t=SSR%20Part%201%0a)",
    +    "iso8601Date": "2020-09-16T13:19:16-04:00",
    +    "basename": "ssr-part-1"
    +  },
    +  "setup": {
    +    "title": "Setup",
    +    "date": "2019-08-28T17:18:18+00:00",
    +    "status": "publish",
    +    "permalink": "/courses/nextjs9/lessons/setup",
    +    "author": "Alex Patterson",
    +    "excerpt": "",
    +    "type": "lessons",
    +    "id": 86,
    +    "ld_lesson_category": [],
    +    "ld_lesson_tag": [],
    +    "course_id": [
    +      "80"
    +    ],
    +    "ld_course_80": [
    +      "80"
    +    ],
    +    "preview": "
    > You must have [Node](https://nodejs.org/en/download/) installed so you can leverage npm. \n> This module is part of a series if you would like to start from here please execute\n\n```\n
    ```\ngit clone https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs.git && cd ajonp-ajsbooks-nextjs && git checkout 01-Intro && npm i && code .\n```\n```\n\n> If you notice any issues please submit a [pull request](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/pulls)\n\nNext.js Setup\n=============\n\n> If at any point in time you feel as though the course/module is moving at a pace you are not comfortable, please let me know in your [Slack Channel](http://bit.ly/ajonp-slack-invite).\n\nInitial Setup[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#initial-setup)\n---------------------------------------------------------------------------------------------------------------\n\nI will be using [Visual Studio Code](https://code.visualstudio.com/download) throughout the Course for all of the coding requirements, however you can use the IDE of your choice. My recommendation is to open two tabs, one with the Youtube video, and the other with the lesson page.\n\nCreate Directory[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#create-directory)\n---------------------------------------------------------------------------------------------------------------------\n\n```\n
    ```\nmkdir ajonp-ajsbooks-nextjs && cd ajonp-ajsbooks-nextjs \n```\n```\n\nInitialize NPM[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#initialize-npm)\n-----------------------------------------------------------------------------------------------------------------\n\n```\n
    ```\nnpm init \n```\n```\n\nInstall Initial Dependencies[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#install-initial-dependencies)\n---------------------------------------------------------------------------------------------------------------------------------------------\n\n- [React](https://www.npmjs.com/package/react)\n- [React Dom](https://www.npmjs.com/package/react-dom)\n- [Material UI](https://www.npmjs.com/package/@material-ui/core)\n- [Next.js](https://www.npmjs.com/package/next)\n- [Firebase](https://www.npmjs.com/package/firebase)\n- [RxFire](https://www.npmjs.com/package/rxfire)\n\n```\n
    ```\nnpm i react react-dom next @material-ui/core @material-ui/styles firebase rxfire rxjs \n```\n```\n\nCreate pages Directory[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#create-pages-directory)\n---------------------------------------------------------------------------------------------------------------------------------\n\nPages in Next.js are where the app “lives” ```\n
    ```\nmkdir pages \n```\n```\n\nDevelopment\n===========\n\nAt this time I would recommend using VSCode to follow along with the tutorials. [VSCode](https://code.visualstudio.com/download)Setup NPM scripts for development[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#setup-npm-scripts-for-development)\n-------------------------------------------------------------------------------------------------------------------------------------------------------\n\nBecause next is an npm package, it is easy to use it when running much of your application, for both development and production builds. You are going to add these to `package.json` and use NPM to run each command. Just add the following below dependencies.package.json ```\n
    ```\n \"scripts\": { \"dev\": \"next\", \"build\": \"next build\", \"start\": \"next start\", \"export\": \"next export\" } \n```\n```\n\nStart Next.js server[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#start-nextjs-server)\n----------------------------------------------------------------------------------------------------------------------------\n\nStart the next server. ```\n
    ```\nnpm run dev \n```\n```\n\nAt this time you are just verifying that the server is up and running and you don’t yet have any content. So if you check [http://localhost:3000](http://localhost:3000/), you should see a `404` page which in your case is correct and it tells us that Next.js is being correctly served, but you don’t yet have any pages. 
    ![404](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/svi7pymfttwcheopwtqi.png)
    Hello world[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#hello-world)\n-----------------------------------------------------------------------------------------------------------\n\nNow for the legendary “Hello World” example. In your pages directory you can simple add a new file called `index.js`. If you are new to ReactJS this is considered a Functional Component, which is a very basic component that is only presenting html markup without state.pages/index.js ```\n
    ```\nconst Index = () => ( 

    Hello Next.js

    ) export default Index \n```\n```\n\nNow that you have content make sure that your server is still running or run command `npm run dev` and refresh the browser. Babel Config[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#babel-config)\n-------------------------------------------------------------------------------------------------------------\n\n.babelrc ```\n
    ```\n{ \"presets\": [\"next/babel\"] } \n```\n```\n\nTypescrpt Config[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#typescrpt-config)\n---------------------------------------------------------------------------------------------------------------------\n\nNext.js 9 is now including this for you, no need to change anything. Include Next.js types definition[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#include-nextjs-types-definition)\n----------------------------------------------------------------------------------------------------------------------------------------------------\n\nIf you miss this your application might not break, but VSCode should start to highlight things that have not been included for it to understand where files and modules can be found. Index Change from .js to .tsx[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#index-change-from-js-to-tsx)\n---------------------------------------------------------------------------------------------------------------------------------------------\n\nChange the file extension, or just delete `pages/index.js`.pages/index.tsx ```\n
    ```\nimport * as React from 'react'; const IndexPage: React.FunctionComponent = () => { return 

    Hello Next.js ????

    ; }; export default IndexPage; \n```\n```\n\nTracking changes\n================\n\nNow that you have a solid start to your project lets add tracking from here on out, you will be using [git](https://git-scm.com/)First lets add an ignore file so you don’t pickup your unintended files that you don’t want to track. - `node_modules` this is the folder where your dependencies are held.\n- `.next` contains any of your dynamically build content that the dev server is browsing.\n- `out` contains the final production static build\n\n.gitignore ```\n
    ```\nnode_modules .next out \n```\n```\n\nAfter this is done just run the command. ```\n
    ```\ngit init \n```\n```\n\nTracking remotely (Optional)[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#tracking-remotely-optional)\n-------------------------------------------------------------------------------------------------------------------------------------------\n\nThis is not required to track changes locally but if you want to push your commits out to a remote repository you can do so by first creating your repository. ### Removing remote (Optional)[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#removing-remote-optional)\n\nIf you are using the remote repo from AJONPLLC, you need to first remove this so you can track your changes in your own remote repository. ```\n
    ```\ngit remote remove origin \n```\n```\n\n### Add remote github and push (Optional)[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#add-remote-github-and-push-optional)\n\nAdd the remote repository and then push your changes. ```\n
    ```\ngit remote add origin  git push -u origin master \n```\n```\n\nCheckout Branch Forcibly (Optional)[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-setup#checkout-branch-forcibly-optional)\n---------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThe modules are built one on top of the other, so you can always jump around if you wish by executing `git checkout  -f`. You will not receive any warnings for overwrite but it will set you back to a nice starting point. ```\n
    ```\ngit checkout 01-Intro -f \n```\n```\n\n> If you get to the end and something is broken just grab the full branch\n\n```\n
    ```\ngit checkout 02-Setup -f && npm i\n```\n```",
    +    "iso8601Date": "2019-08-28T13:18:18-04:00",
    +    "basename": "setup"
    +  },
    +  "project-hosting": {
    +    "title": "Project Hosting",
    +    "date": "2020-09-16T17:19:03+00:00",
    +    "status": "publish",
    +    "permalink": "/courses/nextjs9/lessons/project-hosting",
    +    "author": "Alex Patterson",
    +    "excerpt": "",
    +    "type": "lessons",
    +    "id": 92,
    +    "ld_lesson_category": [],
    +    "ld_lesson_tag": [],
    +    "course_id": [
    +      "80"
    +    ],
    +    "ld_course_80": [
    +      "80"
    +    ],
    +    "preview": "
    > You must have [Node](https://nodejs.org/en/download/) installed so you can leverage npm. \n> This module is part of a series if you would like to start from here please execute\n\n```\n
    ```\ngit clone https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs.git && cd ajonp-ajsbooks-nextjs && git checkout 05-Firebase && npm i && code .\n```\n```\n\n> If you notice any issues please submit a [pull request](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/pulls)\n\nFirebase Project\n================\n\nInstalling Firebase[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#installing-firebase)\n-------------------------------------------------------------------------------------------------------------------------------------\n\n> If you are on a Mac, please follow [Quick tips for NPM](https://ajonp.com/lessons/npm-tips-and-tricks). It makes me cringe everytime I see a mac user doing `sudo npm`.\n\nThe complete [firebase cli reference](https://firebase.google.com/docs/cli) has instructions on how to setup firebase-tools successfully.\n\n### NPM Installing[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#npm-installing)\n\nInstall the Firebase CLI using npm by running: ```\n
    ```\nnpm install -g firebase-tools \n```\n```\n\n### Firebase Login (signin)[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#firebase-login-signin)\n\nSign into Firebase using your Google account by running: ```\n
    ```\nfirebase login \n```\n```\n\n### Firebase Signin test[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#firebase-signin-test)\n\nTo test that authentication worked (and to list all of your Firebase projects), run the following command: ```\n
    ```\nfirebase list \n```\n```\n\nThe displayed list should be the same as the Firebase projects listed in the [Firebase console](https://console.firebase.google.com/). Initializing the project[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#initializing-the-project)\n-----------------------------------------------------------------------------------------------------------------------------------------------\n\n> If this is your first time please checkout [AJonP’s Firebase Project Hosting](https://ajonp.com/courses/angularmaterial/firebase-project-hosting) and [AJonP’s Firebase Multisite Hosting](https://ajonp.com/lessons/firebase-multisite-hosting/) for more details.\n\nBegin by running:\n\n```\n
    ```\nfirebase init \n```\n```\n\n### Selecting Products[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#selecting-products)\n\nYou should see a dialog like below 
    ![firebase init](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/6-firebase-project/Screen_Shot_2019-09-03_at_12.14.37_PM.png)
    Make sure that you move up/down using your arrow keys, then select using space bar: - Firestore\n- Functions\n- Hosting\n\nThis might seem a little confusing as we already are using Firestore, but remember you pushed all your content using an admin API ### Project Selection[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#project-selection)\n\nAt this point you should have a project already that we used to populate Firestore. So you will need to select `Use an existing project`, then follow this up by selecting your project. In my case this is `ajonp-ajs-books`.
    ![existing project select](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/6-firebase-project/Screen_Shot_2019-09-03_at_12.25.59_PM.png)
    If you don’t you will want to select
    ![new project](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/6-firebase-project/Screen_Shot_2019-09-03_at_12.21.25_PM.png)
    Once this part is complete just use all of the defaults except for `What language would you like to use to write Cloud Functions?`. For this you will select `TypeScript`.
    ![TypeScript selection](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/6-firebase-project/Screen_Shot_2019-09-03_at_12.27.21_PM.png)
    Then choose - `Yes` for `Do you want to use TSLint to catch probable bugs and enforce style?`\n- `Yes` for `Do you want to install dependencies with npm now?`.\n- `Enter` for default `What do you want to use as your public directory?`.\n- `Yes` for `Configure as a single-page app (rewrite all urls to /index.html)?`\n- `Yes` for `Configure as a single-page app (rewrite all urls to /index.html)?`\n\nReview Firebase Files[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#review-firebase-files)\n-----------------------------------------------------------------------------------------------------------------------------------------\n\n### functions/index/src/index.ts[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#functionsindexsrcindexts)\n\n> Please make sure you update accordingly, or it will most likely fail the build check.\n\nThe functions directory holds all of our [Cloud Functions for Firebase](https://firebase.google.com/docs/functions). In a later module we will utilize this further to create an API for our Static Site Rendering.\n\n```\n
    ```\nimport * as functions from 'firebase-functions'; // Start writing Firebase Functions // https://firebase.google.com/docs/functions/typescript export const helloWorld = functions.https.onRequest((_request, response) => { response.send('Hello from Firebase!'); }); \n```\n```\n\n### public/index.html[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#publicindexhtml)\n\nThis file was automatically created, it is the default that firebase creates.Check it out locally buy running: ```\n
    ```\nfirebase serve --only hosting \n```\n```\n\nThen access your local server . ### .firebaserc[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#firebaserc)\n\nThis file tells the Firebase CLI what project to use. ```\n
    ```\n{ \"projects\": { \"default\": \"ajonp-ajs-books\" } } \n```\n```\n\n### firebase.json[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#firebasejson)\n\nThis file tells the Firebase CLI about: - firestore rules and indexes\n- functions\n- hosting\n\nPay close attention to the hosting and rewrites, as we will configure those in our SSR Modules later. Right now the hosting is setup to direct all traffic (any path) back to our `public/index.html` page. ```\n
    ```\n{ \"firestore\": { \"rules\": \"firestore.rules\", \"indexes\": \"firestore.indexes.json\" }, \"functions\": { \"predeploy\": [ \"npm --prefix \\\"$RESOURCE_DIR\\\" run lint\", \"npm --prefix \\\"$RESOURCE_DIR\\\" run build\" ] }, \"hosting\": { \"public\": \"public\", \"ignore\": [ \"firebase.json\", \"**/.*\", \"**/node_modules/**\" ], \"rewrites\": [ { \"source\": \"**\", \"destination\": \"/index.html\" } ] } } \n```\n```\n\n### firestore.indexes.json[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#firestoreindexesjson)\n\nFor this sample project (right now) there is not a lot of need for indexes, so the rules are fairly blank. You can read more in [Firestore Query Data Indexing](https://firebase.google.com/docs/firestore/query-data/indexing). ```\n
    ```\n{ \"indexes\": [], \"fieldOverrides\": [] } \n```\n```\n\n### firestore.rules[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#firestorerules)\n\nYour Firestore rules should have been brought in by the prior project, if they have not please reference [Firestore Rules](https://ajonp.com/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling/#firestore-rules)Wrap Up[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-project-hosting#wrap-up)\n-------------------------------------------------------------------------------------------------------------\n\nAlthough we have our Firebase project setup we won’t be integrating the Next.js changes until the next Module. You can still run the code locally ```\n
    ```\nnpm run dev \n```\n```\n\nYou will be able to navigate to `books` when selecting one, it will just return you to the `index` or welcome screen. > If you get to the end and something is broken just grab the full branch\n\n```\n
    ```\ngit checkout 06-Firebase-Project -f && npm i\n```\n```",
    +    "iso8601Date": "2020-09-16T13:19:03-04:00",
    +    "basename": "project-hosting"
    +  },
    +  "materialui": {
    +    "title": "MaterialUI",
    +    "date": "2019-08-28T17:18:35+00:00",
    +    "status": "publish",
    +    "permalink": "/courses/nextjs9/lessons/materialui",
    +    "author": "Alex Patterson",
    +    "excerpt": "",
    +    "type": "lessons",
    +    "id": 88,
    +    "ld_lesson_category": [],
    +    "ld_lesson_tag": [],
    +    "course_id": [
    +      "80"
    +    ],
    +    "ld_course_80": [
    +      "80"
    +    ],
    +    "preview": "
    > You must have [Node](https://nodejs.org/en/download/) installed so you can leverage npm. \n> This module is part of a series if you would like to start from here please execute\n\n```\n
    ```\ngit clone https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs.git && cd ajonp-ajsbooks-nextjs && git checkout 02-Setup && npm i && code .\n```\n```\n\n> If you notice any issues please submit a [pull request](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/pulls)\n\nNext.js with Material-UI\n========================\n\nThere are a couple of updates that you will make to your project structure in order to make using Material-UI the most performant within your Next.js project.I used the officially referenced [MaterialUI Example Next.js Project](https://github.com/mui-org/material-ui/tree/master/examples/nextjs). They have been keeping the [repo](https://github.com/mui-org/material-ui/tree/master/examples/nextjs) updated very well with the new updates coming from Next.js.\n\nComponents Directory[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-materialui#components-directory)\n----------------------------------------------------------------------------------------------------------------------------------\n\nYou will create a new folder that will be used for all of your independent components. This includes the main structure for your app in `MenuAppBar.tsx`. Later will will continue to add the rest of your React Components to this directory. ```\n
    ```\nmkdir components \n```\n```\n\nTheme Directory[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-materialui#theme-directory)\n------------------------------------------------------------------------------------------------------------------------\n\nThis is slightly different than the layout of the official example, however I didn’t like have so many folders called source. So you will add the main theme for MaterialUI into a new directory called `themes`. ```\n
    ```\nmkdir themes \n```\n```\n\nThere are multiple ways to theme your entire website, if you are more familiar with other methods then do what is comfortable for you! For me being brand new with [MaterialUI](https://material-ui.com/customization/themes/#themes) I decided to continue with the example repo and use this method.Now you can add a new file to the `themes` directory called `theme.tsx`.themes/theme.tsx ```\n
    ```\nimport red from '@material-ui/core/colors/red'; import { createMuiTheme } from '@material-ui/core/styles'; // Create a theme instance. const theme = createMuiTheme({ palette: { primary: { main: '#556cd6' }, secondary: { main: '#19857b' }, error: { main: red.A400 }, background: { default: '#fff' } } }); export default theme; \n```\n```\n\nCustom \\_app.tsx for MaterialUI[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-materialui#custom-_apptsx-for-materialui)\n------------------------------------------------------------------------------------------------------------------------------------------------------\n\nPer the [Next.js App docs](https://nextjs.org/docs#custom-app). > Next.js uses the App component to initialize pages. You can override it and control the page initialization. Which allows youto do amazing things like: To override, create the `./pages/_app.js`\n\n- Persisting layout between page changes\n- Keeping state when navigating pages\n- Custom error handling using componentDidCatch\n- Inject additional data into pages (for example by processing GraphQL queries)\n\nIt is for persisting the layout that you are going to create the `_app.tsx` file. This will allow things like your theme and `MenuAppBar` to not require rerender. pages/\\_app.tsx\n\n```\n
    ```\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport { ThemeProvider } from '@material-ui/styles';\nimport App, { Container } from 'next/app';\nimport Head from 'next/head'; import React from 'react';\nimport MenuAppBar from '../components/MenuAppBar';\nimport theme from '../themes/theme';\n\nclass MyApp extends App {\n\n    componentDidMount() {\n        // Remove the server-side injected CSS. \n        const jssStyles = document.querySelector('#jss-server-side');\n        if (jssStyles && jssStyles.parentNode) {\n            jssStyles.parentNode.removeChild(jssStyles);\n        }\n    }\n\n    render() {\n        const { Component, pageProps } = this.props;\n        return (\n            \n                AJ' Books  \n                \n                \n                \n                \n                 \n             \n        );\n    }\n}\n\nexport default MyApp; \n```\n```\n\nCustom \\_document.tsx for MaterialUI[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-materialui#custom-_documenttsx-for-materialui)\n----------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nPer the [Next.js Document docs](https://nextjs.org/docs#custom-document). > A custom is commonly used to augment your application’s `` and `` tags. This is necessary because Next.js pages skip the definition of the surrounding document’s markup. This allows you to support Server-Side Rendering for CSS-in-JS libraries like styled-components or emotion. Note, styled-jsx is included in Next.js by default. A custom `` can also include getInitialProps for expressing asynchronous server-rendering data requirements.\n\nThis again works great while using MaterialUI, because it will allow us to pass along the styles for your themes through props, anywhere in your application. pages/\\_document.tsx\n\n```\n
    ```\n/* https://github.com/mui-org/material-ui/blob/master/examples/nextjs/pages/_document.js */\n\nimport React from \"react\";\nimport Document, { Head, Main, NextScript } from \"next/document\";\nimport { ServerStyleSheets } from \"@material-ui/styles\";\nimport theme from \"../themes/theme\";\n\nclass MyDocument extends Document {\n  render() {\n    return (\n      \n        \n          {\" \"}\n          \n          {/* Use minimum-scale=1 to enable GPU rasterization */}\n          \n          {/* PWA primary color */}\n          \n          \n        {\" \"}\n        \n          {\" \"}\n          
    {\" \"}\n {\" \"}\n \n );\n }\n}\nMyDocument.getInitialProps = async ctx => {\n // Resolution order //\n // On the server:\n // 1. app.getInitialProps\n // 2. page.getInitialProps\n // 3. document.getInitialProps\n // 4. app.render\n // 5. page.render\n // 6. document.render //\n // On the server with error:\n // 1. document.getInitialProps\n // 2. app.render\n // 3. page.render\n // 4. document.render //\n // On the client\n // 1. app.getInitialProps\n // 2. page.getInitialProps\n // 3. app.render\n // 4. page.render\n\n // Render app and page and get the context of the page with collected side effects.\n const sheets = new ServerStyleSheets();\n const originalRenderPage = ctx.renderPage;\n ctx.renderPage = () =>\n originalRenderPage({\n enhanceApp: App => props => sheets.collect()\n });\n const initialProps = await Document.getInitialProps(ctx);\n return {\n ...initialProps,\n // Styles fragment is rendered after the app and page rendering finish.\n styles: [\n \n {\" \"}\n {initialProps.styles} {sheets.getStyleElement()}{\" \"}\n \n ]\n };\n};\n\nexport default MyDocument;\n\n\n```\n```\n\nAdd MenuAppBar Component[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-materialui#add-menuappbar-component)\n------------------------------------------------------------------------------------------------------------------------------------------\n\nThe [App Bar Component](https://material-ui.com/components/app-bar/) threw me off at first as I expected it under navigation, but it really does belong in the surfaces section. Because you are making a fairly complex version of an App Bar I broke this out into its own component. Your MenuAppBar component has several dependencies that you are going to use so it made sense to group them.
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_3/v1600704470/ccd-cloudinary/image-51/image-51.png)
    ![Menu App Bar Preview](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/4-navigation/Screen_Shot_2019-08-28_at_4.54.09_PM.png)
    ### Key MaterialUI Components[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-materialui#key-materialui-components)\n\n- App Bar: \n- Button: \n- Icon Button: \n- Menu: \n- MenuItem: \n- Styles: \n- ToolBar: \n- Typography: \n- Icons: \n- MenuIcon: \n\n### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-materialui#full-code)\n\n/components/MenuAppBar.tsx ```\n
    ```\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Button from \"@material-ui/core/Button\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Menu from \"@material-ui/core/Menu\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport Typography from \"@material-ui/core/Typography\";\nimport AccountCircle from \"@material-ui/icons/AccountCircle\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport React from \"react\";\nconst useStyles = makeStyles((theme: Theme) =>\n  createStyles({\n    root: { flexGrow: 1 },\n    menuButton: { marginRight: theme.spacing(2) },\n    title: { flexGrow: 1 }\n  })\n);\nfunction MenuAppBar() {\n  const classes = useStyles();\n  const [auth] = React.useState(false);\n  const [anchorEl, setAnchorEl] =\n    (React.useState < null) | (HTMLElement > null);\n  const open = Boolean(anchorEl);\n  function handleMenu(event: React.MouseEvent) {\n    setAnchorEl(event.currentTarget);\n  }\n  function handleClose() {\n    setAnchorEl(null);\n  }\n  return (\n    
    \n {\" \"}\n \n {\" \"}\n \n {\" \"}\n \n {\" \"}\n {\" \"}\n {\" \"}\n \n {\" \"}\n Photos{\" \"}\n {\" \"}\n {auth && (\n
    \n {\" \"}\n \n {\" \"}\n {\" \"}\n {\" \"}\n \n {\" \"}\n Profile{\" \"}\n My account{\" \"}\n {\" \"}\n
    \n )}{\" \"}\n {!auth && (\n
    \n {\" \"}\n {\" \"}\n
    \n )}{\" \"}\n
    {\" \"}\n
    {\" \"}\n
    \n );\n}\nexport default MenuAppBar;\n\n\n```\n```\n\nUpdate Index Page[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-materialui#update-index-page)\n----------------------------------------------------------------------------------------------------------------------------\n\nYou can see in the below file that you are keeping it very simple for your initial update, you will only us the [Container](https://material-ui.com/components/container/) component.pages/index.tsx ```\n
    ```\nimport Container from \"@material-ui/core/Container\";\nimport React from \"react\";\n\nexport default function App() {\n  return Hello Next.js ????;\n}\n\n\n```\n```\n\nUse React Dev tools[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-materialui#use-react-dev-tools)\n--------------------------------------------------------------------------------------------------------------------------------\n\nIf you are new to ReactJS (like myself), I would recommend installing [React Developer Tools](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en) for Chrome.Here you can inspect the layout of your full application. If you take a look 
    ![React Dev Tools](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/f8mmv34ulizhtxmknbpx.png)
    As you highlight components you can see the Props that are passed through them, highlight `ThemeProvider` this is where much of the theming for MaterialUI will come from in the updates will will continue to make in your app.
    ![MaterialUI ThemeProvider](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/cnhji8alguos2tt3rnzz.png)
    Run Next.js Development server\n==============================\n\n```\n
    ```\nnpm run dev \n```\n```\n\nOpen your browser at [http://localhost:3000](http://localhost:3000/) (your port may differ). 
    ![Next.js Hello](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/oy53wlavfbw3efhdqrpf.png)
    You should also notice the lightning bolt showing the prerender page, showing the dev server running.
    ![Next.js Lightning Bolt](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/ri4rbjbtykjhrysscyw2.png)
    > If you get to the end and something is broken just grab the full branch\n\n```\n
    ```\ngit checkout 03-MaterialUI -f && npm i\n```\n```\n\n",
    +    "iso8601Date": "2019-08-28T13:18:35-04:00",
    +    "basename": "materialui"
    +  },
    +  "intro": {
    +    "title": "Intro",
    +    "date": "2019-08-28T17:18:10+00:00",
    +    "status": "publish",
    +    "permalink": "/courses/nextjs9/lessons/intro",
    +    "author": "Alex Patterson",
    +    "excerpt": "",
    +    "type": "lessons",
    +    "id": 84,
    +    "thumbnail": "../../../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1600704427/ccd-cloudinary/46b0ca8cdfdf6bf8753bf6f1d206e4c097b567e0-1920x1080-1/46b0ca8cdfdf6bf8753bf6f1d206e4c097b567e0-1920x1080-1-150x150.png",
    +    "ld_lesson_category": [],
    +    "ld_lesson_tag": [],
    +    "course_id": [
    +      "80"
    +    ],
    +    "ld_course_80": [
    +      "80"
    +    ],
    +    "preview": "
    > You must have [Node](https://nodejs.org/en/download/) installed so you can leverage npm. \n> If you notice any issues please submit a [pull request](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/pulls).\n\nNext.js Introduction\n====================\n\nThis is a sample application showcasing the power of Next.js. We will be building out a simple book listing site, it could be any type of site really the idea what the technology provides. In reality my son really wants this for [https://oliversbooks.com](https://oliversbooks.com/) so I figured might as well kill two birds with one stone!\n\nKey Components[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-intro#key-components)\n-----------------------------------------------------------------------------------------------------------------\n\n### What is Next.js[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-intro#what-is-nextjs)\n\n[Next.js](https://nextjs.org/) – Production grade React applications that scale.
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_23/v1600704467/ccd-cloudinary/image-46/image-46.png)
    ![NextJS Logo](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/Screen_Shot_2019-08-13_at_8.32.02_AM.png)
    ### React[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-intro#react)\n\n[ReactJs](https://reactjs.org/) – A JavaScript library for building user interfaces
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_15/v1600704465/ccd-cloudinary/image-49/image-49.png)
    ![ReactJS Logo](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/Screen_Shot_2019-08-13_at_8.32.27_AM.png)
    ### What is MaterialUI[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-intro#what-is-materialui)\n\n[MaterialUI](https://material-ui.com/) – React Components that Implement Google’s Material Design.
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_12/v1600704468/ccd-cloudinary/image-48/image-48.png)
    ![MaterialUI Logo](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/Screen_Shot_2019-08-13_at_8.32.35_AM.png)
    ### What is Firebase[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-intro#what-is-firebase)\n\n[Firebase](https://firebase.google.com/) – Firebase is a mobile and web application development platform.Loading image… ### RxJS[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-intro#rxjs)\n\n[RxJS](https://rxjs.dev/) – RxJS is a library for reactive programming using Observables, to make it easier to compose asynchronous or callback-based code.
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_14/v1600704467/ccd-cloudinary/image-50/image-50.png)
    ![RxJS Logo](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/Screen_Shot_2019-08-13_at_8.36.15_AM.png)
    ### What is RxFire[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-intro#what-is-rxfire)\n\n[RxFire](https://firebase.googleblog.com/2018/09/introducing-rxfire-easy-async-firebase.html) – RxFire provides a set of observable creation methods that utilize both Firebase and RxJS.
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_17/v1600704466/ccd-cloudinary/image-47/image-47.png)
    ![RxFire](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1556308985/ajonp-ajonp-com/17-rxfire-react-cats/RxFire_3.png)
    ", + "iso8601Date": "2019-08-28T13:18:10-04:00", + "basename": "intro" + }, + "firestore-modeling": { + "title": "Firestore Modeling", + "date": "2020-09-16T17:18:50+00:00", + "status": "publish", + "permalink": "/courses/nextjs9/lessons/firestore-modeling", + "author": "Alex Patterson", + "excerpt": "", + "type": "lessons", + "id": 90, + "ld_lesson_category": [], + "ld_lesson_tag": [], + "course_id": [ + "80" + ], + "ld_course_80": [ + "80" + ], + "preview": "
    > You must have [Node](https://nodejs.org/en/download/) installed so you can leverage npm. \n> This module is part of a series if you would like to start from here please execute\n\n```\n
    ```\ngit clone https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs.git && cd ajonp-ajsbooks-nextjs && git checkout 04-Navigation && npm i && code .\n```\n```\n\n> If you notice any issues please submit a [pull request](https://github.com/AJONPLLC/ajonp-ajsbooks-nextjs/pulls)\n\nNext.js Firebase Firestore\n==========================\n\nJust a warning up front there is a lot in this module, I would recommend doing it in two parts. I gave a lot of thought into breaking it up into another module but ultimately decided that the material was too tightly coupled to break apart.\n\nFirestore[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#firestore)\n--------------------------------------------------------------------------------------------------------------------\n\nCloud Firestore is a NoSQL, document-oriented database. Unlike a SQL database, there are no tables or rows. Instead, you store data in documents, which are organized into collections. Each document contains a set of key-value pairs. Cloud Firestore is optimized for storing large collections of small documents. All documents must be stored in collections. Documents can contain subcollections and nested objects, both of which can include primitive fields like strings or complex objects like lists. Collections and documents are created implicitly in Cloud Firestore. Simply assign data to a document within a collection. If either the collection or document does not exist, Cloud Firestore creates it.If this is a new concept for you please read through [Cloud Firestore Data model](https://firebase.google.com/docs/firestore/data-model). ### Firestore Data Model[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#firestore-data-model)\n\nThis is how I typically think of the data model, it is very similar (if not the same) as how Firebase’s Firestore guide shows. 
    ![Firestore Model](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Firestore_Model.png)
    ### AJ’s Data Model[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#ajs-data-model)\n\nSpecifically for AJ’s Books application we will have a structure that seems like this (although there are no folders):
    ![AJ's Books Model](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Base-Model.png)
    ### Firestore Example Book[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#firestore-example-book)\n\n
    ![AJ Book Model](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Book-Data-Model.png)
    ### Firestore Example Author[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#firestore-example-author)\n\n
    ![AJ Author Model](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Author-Data-Model.png)
    ### Create Firestore Database[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#create-firestore-database)\n\nOn the side menu under Develop, select Database. You will then be presented with a screen to `Create Database`.
    ![Create Firestore DB](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Screen_Shot_2019-08-29_at_3.23.38_PM.png)
    Please leave your Firestore Database in Locked mode. This prevents any security concerns.
    ![Locked Mode](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Screen_Shot_2019-08-29_at_3.23.46_PM.png)
    ### Firebase Admin SDK Private Key[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#firebase-admin-sdk-private-key)\n\nIn order to use this tool you will need to add your own firebase credentials, you can find this in your project settings under service accounts `https://console.firebase.google.com/project/ajonp-ajs-books/settings/serviceaccounts/adminsdk`.
    ![Firebase SDK Private Key](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Firebase_Private_Key.png)
    You will get a warning, this is fine and why I put in our `.gitignore` the file we are creating `firebase_credentials.json`.
    ![Private Key Generate](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Screen_Shot_2019-08-29_at_3.20.56_PM.png)
    ### Adding Firestore Sample Data[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#adding-firestore-sample-data)\n\nYou are going to create sample data for the books collection in Firestore by using the Firebase Admin API. There is probably more efficent ways to do this but I really like using the [Faker API](https://github.com/Marak/faker.js).Please clone this repo locally and install the dependencies. ```\n
    ```\ngit clone https://github.com/AJONPLLC/ajonp-ajsbooks-db-example.git && cd ajonp-ajsbooks-db-example && npm i \n```\n```\n\nMake sure you rename any file you download to `firebase_credentials.json` then place that file into the root of our project. 
    ![root of project](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Screen_Shot_2019-08-29_at_3.28.51_PM.png)
    If you forget this you will get this error:
    ![Firestore Error](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Screen_Shot_2019-08-29_at_3.49.05_PM.png)
    Now you can run the config script: ```\n
    ```\nnpm run config \n```\n```\n\nThis adds dropdown based data that we will use later. ```\n
    ```\nmodule.exports = { ageCategory: { board: 'Age 0-2', earlyReader: 'Age 6-8', middleGrade: 'Age 9-12', picture: 'Age 3-5', youngAdult: 'Age 13-18' }, fiction: [ 'Classic', 'Comics/Graphic novel', 'Crime/detective', 'Fable', 'Fairy tale', 'Fan fiction', 'Fantasy', 'Folklore', 'Historical Fiction', 'Horror', 'Humor', 'Legend', 'Magical Realism', 'Meta Fiction', 'Mystery', 'Mythology', 'Mythopoeia', 'Picture Book', 'Realistic Fiction', 'Science Fiction', 'Short Story', 'Suspense/thriller', 'Swashbuckler', 'Tall Tale', 'Western' ], nonFiction: [ 'Biography', 'Essay', 'Owners Manual', 'Journalism', 'Lab Report', 'Memoir', 'Narrative', 'Reference Book', 'Self-Help Book', 'Speech', 'Text Book' ], options: { hasAudio: false, hasPhotos: false, hasVideo: false }, status: ['Published', 'Working Copy'] }; \n```\n```\n\nNow (finally), we can add all the important book data. ```\n
    ```\nnpm run start \n```\n```\n\nYou should see an output like: 
    ![book script output](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Screen_Shot_2019-08-29_at_3.44.59_PM.png)
    You can also open your Firebase console and take a look at all the books, with subcollection of chapters, with subcollection of pages. There should be 5 books, with 5 chapters, and 50 pages, each time your run the program. > Okay you made it! We are half way there, go grab a ☕️ or maybe a ????.\n\nAdd Firebase Frontend Config[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#add-firebase-frontend-config)\n----------------------------------------------------------------------------------------------------------------------------------------------------------\n\nIf you are new to Firebase you could be asking yourself right now why is he splashing his keys all over the place?You must remember that this is front end coding and it will be public anyways. So this is where I will mention in order to have a secure app, you must put solid security rules into your database.\n\n### Full code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#full-code)\n\n/lib/firebase.ts ```\n
    ```\nconst firebaseConfig = { apiKey: 'AIzaSyCXLldoMUB_AxaLpvG4pQ9Pzg9bEqpMgTA', authDomain: 'ajonp-ajs-books.firebaseapp.com', databaseURL: 'https://ajonp-ajs-books.firebaseio.com', projectId: 'ajonp-ajs-books', storageBucket: 'ajonp-ajs-books.appspot.com', messagingSenderId: '936263241017', appId: '1:936263241017:web:5faee456c1ed2da8' }; export default async function loadFirebase() { const firebase = await import('firebase/app'); await import('firebase/firestore'); try { const app = firebase.initializeApp(firebaseConfig); firebase.firestore(app); } catch (err) { // we skip the \"already exists\" message which is // not an actual error when we're hot-reloading console.log(err); if (!/already exists/.test(err.message)) { console.error('Firebase initialization error', err.stack); } } return firebase; } \n```\n```\n\nFirestore rules[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#firestore-rules)\n--------------------------------------------------------------------------------------------------------------------------------\n\nFor now we are going to manually update our rules (later we will use the Firebase CLI) to match below: ### Full Code (rules)[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#full-code-rules)\n\n```\n
    ```\nservice cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } // This function allows us to look at AuthZ (Authorization) roles within our database, to see who is allowed for activities. function getRole(role) { return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.roles[role] } // Users match /users/{userId} { allow read: if request.auth.uid != null; allow create: if request.resource.data.roles.keys().hasAny(['admin', 'editor']) == false; allow update: if request.resource.data.roles.keys().hasAny(['admin', 'editor']) == false || resource.data.roles.keys().hasAny(['admin', 'editor']) == true; } match /config/{configId}{ allow read: if true; } match /books/{bookId}{ allow create: if getRole('admin') == true; allow read: if true; allow update: if getRole('editor') == true || getRole('admin') == true; allow delete: if getRole('admin') == true; match /chapters/{chapterId}{ allow create: if getRole('admin') == true; allow read: if true; allow update: if getRole('editor') == true || getRole('admin') == true; allow delete: if getRole('admin') == true; match /pages/{pageId}{ allow create: if getRole('admin') == true; allow read: if true; allow update: if getRole('editor') == true || getRole('admin') == true; allow delete: if getRole('admin') == true; } } } match /authors/{authorId}{ allow create: if getRole('admin') == true; allow read: if true; allow update: if getRole('editor') == true || getRole('admin') == true; allow delete: if getRole('admin') == true; } match /graphicnovels/{gnId}{ allow create: if getRole('admin') == true; allow read: if true; allow update: if getRole('editor') == true || getRole('admin') == true; allow delete: if getRole('admin') == true; } } } \n```\n```\n\n### Staying Locked[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#staying-locked)\n\nThis snippet should always remain, you will see errors in your console that will help you to determine if you should update your rules further. ```\n
    ```\n match /{document=**} { allow read, write: if false; } \n```\n```\n\n### Custom Rule Functions[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#custom-rule-functions)\n\n[Custom Rule Functions](https://firebase.google.com/docs/firestore/security/rules-conditions#custom_functions) help us easily address how secure we want to lock down our app. For now we don’t want anyone but a user who has `admin` rights to create/update/delete our data.The function below returns a boolean value based on the currently signedin user. ```\n
    ```\n // This function allows us to look at AuthZ (Authorization) roles within our database, to see who is allowed for activities. function getRole(role) { return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.roles[role] } \n```\n```\n\nWe can then easily check for this value by calling the function `getRole()`, which will lookup the currently signed in user and see if they have the role `admin` set to true in our roles `map`. You can find all the data types available in [Firestore Data Types](https://firebase.google.com/docs/firestore/manage-data/data-types). ```\n
    ```\nallow create: if getRole('admin') == true; \n```\n```\n\nHere you can see that I have set my `admin@ajonp.com` user to be an `admin`. Note: all users in our application get the role `subscriber`. 
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_17/v1600704463/ccd-cloudinary/image-62/image-62.png)
    ![user admin](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Screen_Shot_2019-09-03_at_12.56.44_PM.png)
    ### Books rules[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#books-rules)\n\nNow if you remember from our [Model Diagram](https://ajonp.com/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling/#aj-s-data-model), we will be adding a `books` main collection with `chapters` subcollection then within `chapters` you will have a `pages` subcollection. ```\n
    ```\n match /books/{bookId}{ allow create: if getRole('admin') == true; allow read: if true; allow update: if getRole('editor') == true || getRole('admin') == true; allow delete: if getRole('admin') == true; match /chapters/{chapterId}{ allow create: if getRole('admin') == true; allow read: if true; allow update: if getRole('editor') == true || getRole('admin') == true; allow delete: if getRole('admin') == true; match /pages/{pageId}{ allow create: if getRole('admin') == true; allow read: if true; allow update: if getRole('editor') == true || getRole('admin') == true; allow delete: if getRole('admin') == true; } } } \n```\n```\n\n### Manual upload[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#manual-upload)\n\nNavigate to the firebase console -> Database -> Rules tab. Then copy and paste all of the code from above, you should then be able to publish. 
    ![Rules Publish](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/6-firebase-project/Screen_Shot_2019-09-03_at_1.05.36_PM.png)
    ### Lazy Loading Modules[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#lazy-loading-modules)\n\nThis example of loading firebase is based on the [Next.js Lazy Loading Modules Tutorial](https://nextjs.org/learn/excel/lazy-loading-modules). This is the best way to add firebase into your project. If you have a requirement to switch between multiple environments, you can check for the Node Env variables and also set this up. Add Models[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#add-models)\n----------------------------------------------------------------------------------------------------------------------\n\nYes models take time to setup and make you fight ever instinct you have to be lazy, this is JS right? Well no you are in TS land now, you need to have well defined objects so that you don’t miss any data, and can also utilize things like creating a new class for data. You will also recognize the file types are typescript, since you are not using JSX at this time only TypeScript. ### AjonpUser Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#ajonpuser-full-code)\n\n/models/AjonpUser.ts ```\n
    ```\nexport default class AjonpUser { aboutYou?: string; created?: number; displayName?: string; email?: string; emailVerified?: boolean; favoriteColor?: string; lastActive?: number; phoneNumber?: string; photoURL?: string; roles?: AjonpRoles; token?: string; uid?: string; untappd?: { access_token?: string; }; website?: string; public constructor(init?: Partial) { Object.assign(this, init); } } export class AjonpRoles { admin?: boolean; editor?: boolean; subscriber?: boolean; } \n```\n```\n\n### Book Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#book-full-code)\n\n/models/Book.ts ```\n
    ```\nimport { Timestamp } from '@firebase/firestore-types'; export default class Book { ageCategory?: string; authorDisplayName?: string; authorId?: string; description?: string; fiction?: boolean; genre?: string; hasAudio?: boolean; hasPhotos?: boolean; hasVideos?: boolean; id?: string; image?: string; publishDate?: Timestamp | Date; rating?: number; status?: string; title?: string; updatedAt?: Timestamp | Date; public constructor(init?: Partial) { Object.assign(this, init); } } \n```\n```\n\n### Author Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#author-full-code)\n\nAuthor is one of those special cases where you want to know all the books that this Author has written. Maybe not the full object but a number of key fields. ```\n
    ```\nimport Book from './Book'; export default class Author { books?: Book[]; displayName?: string; email?: string; id?: string; name?: string; profileImage?: string; social?: Map; summary?: string; uid?: string; website?: string; public constructor(init?: Partial) { Object.assign(this, init); } } \n```\n```\n\n### Chapter Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#chapter-full-code)\n\n/models/Chapter.ts ```\n
    ```\nexport default class Chapter { id?: string; sort?: number; title?: string; numOfSections?: number; public constructor(init?: Partial) { Object.assign(this, init); } } \n```\n```\n\n### ConfigBook Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#configbook-full-code)\n\n/models/ConfigBook.ts ```\n
    ```\nexport default class ConfigBook { ageCategory?: Map; fiction?: Array; nonFiction?: Array; options?: Map; public constructor(init?: Partial) { Object.assign(this, init); } } \n```\n```\n\n### GraphicNovel Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#graphicnovel-full-code)\n\n/models/GraphicNovel.ts ```\n
    ```\nimport { Timestamp } from '@firebase/firestore-types'; export default class GraphicNovel { ageCategory?: string; description?: string; fiction?: boolean; genre?: string; hasAudio?: boolean; hasPhotos?: boolean; hasVideos?: boolean; id?: string; image?: string; publishDate?: Timestamp | Date; rating?: number; status?: string; title?: string; updatedAt?: Timestamp | Date; public constructor(init?: Partial) { Object.assign(this, init); } } \n```\n```\n\n### Page Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#page-full-code)\n\n/models/Page.ts ```\n
    ```\nexport default class Page { draft?: boolean; id?: string; number?: number; numOfWords?: number; version?: number; public constructor(init?: Partial) { Object.assign(this, init); } } \n```\n```\n\n### Section Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#section-full-code)\n\n/models/Section.ts ```\n
    ```\nexport default class Section { description?: string; id?: string; sort?: number; title?: string; numOfPages?: number; public constructor(init?: Partial
    ) { Object.assign(this, init); } } \n```\n```\n\nUpdate BookCard[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#update-bookcard)\n--------------------------------------------------------------------------------------------------------------------------------\n\n### Key MaterialUI Components[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#key-materialui-components)\n\n- CardActionArea: \n- Card: \n- CardActions: \n- CardContent: \n- CardMedia: \n- Collapse: \n\n> Not technically MaterialUI Component but it helps a lot clsx: \n\n### Key Next.js Components[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#key-nextjs-components)\n\n- Link: \n\n> Please note I chose to use the name NextLink, as it was confusing with other link components at the time.\n\n### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#full-code)\n\nThere is a lot of code here to digest, please take the time to click the links above and dive into those components so you know why they are used.\n\n```\n
    ```\nimport { CardActionArea } from '@material-ui/core'; import Card from '@material-ui/core/Card'; import CardActions from '@material-ui/core/CardActions'; import CardContent from '@material-ui/core/CardContent'; import CardMedia from '@material-ui/core/CardMedia'; import Collapse from '@material-ui/core/Collapse'; import IconButton from '@material-ui/core/IconButton'; import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import clsx from 'clsx'; import NextLink from 'next/link'; import React from 'react'; const useStyles = makeStyles(theme => ({ card: { minWidth: 400, margin: 5, display: 'flex', flexDirection: 'column' }, cardContent: { display: 'flex', flex: '1 0 auto', flexDirection: 'column' }, cardMedia: { height: 0, paddingTop: '65%', backgroundRepeat: 'no-repeat', backgroundSize: 'auto', cursor: 'pointer' }, cardDescription: { width: 368, height: 190, overflow: 'auto' }, cardActions: { display: 'flex', alignItems: 'center', justifyContent: 'space-between' }, expand: { transform: 'rotate(0deg)', marginLeft: 'auto', transition: theme.transitions.create('transform', { duration: theme.transitions.duration.shortest }) }, expandOpen: { transform: 'rotate(180deg)' } })); const BookCard = ({ book }: any) => { const classes = useStyles(); const [expanded, setExpanded] = React.useState(false); const handleExpandClick = () => { setExpanded(!expanded); }; return (       {book.title}   Author: {` ${book.authorDisplayName}`}      Summary:   {' '}     {book.description}     );- }; export default BookCard; \n```\n```\n\nNotice how the `` is surrounded by the ``, this makes a very nice clickable section at the top of our Book Card. MaterialUI does a really nice job with subtle touches like this, I am really digging it!! 
    ![Action Area Highlight](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/20-lesson-nextjs/5-Firebase/Screen_Shot_2019-08-29_at_4.05.40_PM.png)
    There are some downsides (mostly from my inexperience), with things like the CardAction and how the Flexbox is working. Notice in this video that when expanded all cards grow, but only the one you select shows text. Update books Page[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#update-books-page)\n------------------------------------------------------------------------------------------------------------------------------------\n\n### What is RxFire[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#what-is-rxfire)\n\n[RxFire Intro Blog](https://firebase.googleblog.com/2018/09/introducing-rxfire-easy-async-firebase.html) I have two demos currently on how you can use this wonderful javascript package to get streams from Firestore. I have heard that their is an RxFire specific to ReactJS that is coming out soon too. 1. [RxFire in Svelte 3](https://ajonp.com/lessons/rxfire-in-svelte-3-using-firebase-firestore-and-authentication/)\n2. [RxFire in ReactJS](https://ajonp.com/lessons/rxfire-in-reactjs-using-firebase-firestore-and-authentication/)\n\n`collectionData` Returns a stream of documents mapped to their data payload, and optionally the document ID. You provide `bookId` so that it does return the ID. Now anytime the books collection in Firestore is updated the observable streams this to our application. ### Key RxFire Components[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#key-rxfire-components)\n\n- collectionDate: \n\n### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#full-code)\n\nYou are going to finally add some “real” logic to one of our pages. The key here is the introduction of Firebase. 1. Use `await loadFirebase();` so that we wait for the firebase package to finish loading.\n2. Then aquire a reference to the collections in Firestore `const booksRef = firebase.firestore().collection('books');`.\n3. Setup an [Observable](https://rxjs-dev.firebaseapp.com/guide/observable) that a [Subscription](https://rxjs-dev.firebaseapp.com/api/index/class/Subscription) can be setup to listen to any changes. This is where the power of RxFire shines. Any time we see an update coming we will simple update the current state with an array of books.\n4. For each of the books we will then use the BookCard Component and populate the data to show on the screen.\n\n```\n
    ```\n {this.state.books.map((book: Book) => { return ; })}  \n```\n```\n\n/pages/books.tsx ```\n
    ```\nimport Grid from '@material-ui/core/Grid'; import React, { Component } from 'react'; import { collectionData } from 'rxfire/firestore'; import BookCard from '../components/BookCard'; import loadFirebase from '../lib/firebase'; import Book from '../models/Book'; export default class Books extends Component { state: { books: Book[] } = { books: [] }; async componentDidMount() { const firebase = await loadFirebase(); const booksRef = firebase.firestore().collection('books'); collectionData(booksRef, 'bookId').subscribe(books => { this.setState({ books }); }); } render() { return (  {this.state.books.map((book: Book) => { return ; })}  ); } } \n```\n```\n\nTheme Update(optional)[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#theme-updateoptional)\n--------------------------------------------------------------------------------------------------------------------------------------------\n\nI decided my eyes were hurting at this point so I switched the theme file to have a dark type and included deepPurple as primary and pink as secondary. Feel free to change as much or as little as you want! I could probably do a full course on [MaterialUI Theming](https://material-ui.com/customization/theming/), and who knows maybe I will ????. ### Full Code[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#full-code)\n\n```\n
    ```\nimport deepPurple from '@material-ui/core/colors/deepPurple'; import pink from '@material-ui/core/colors/pink'; import red from '@material-ui/core/colors/red'; import { createMuiTheme } from '@material-ui/core/styles'; // Create a theme instance. const theme = createMuiTheme({ palette: { type: 'dark', primary: deepPurple, secondary: pink, error: { main: red.A400 } } }); export default theme; \n```\n```\n\n### Analyze Bundle(optional)[](https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling#analyze-bundleoptional)\n\nPlease take the time to checkout why it is important that we load Firebase using an `await import` statement instead of just declaring it as a `const`; > If you get to the end and something is broken just grab the full branch\n\n```\n
    ```\ngit checkout 05-Firebase -f && npm i\n```\n```\n\n[](https://twitter.com/intent/tweet?url=https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling&via=CodingCatDev&hashtags=CodingCatDevShares&text=Firestore%20Modeling%0a)[](https://www.linkedin.com/shareArticle?mini=true&url=https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling&title=Firestore%20Modeling%0a&summary=%27#CodingCatDevShares'&source='codingcat.dev')[](https://www.facebook.com/sharer.php?u=https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling)[](https://www.reddit.com/submit?url=https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling&title=Firestore%20Modeling%0a)[](https://news.ycombinator.com/submitlink?u=https://codingcat.dev/courses/nextjs9/nextjs-using-materialui-and-firebase-firestore-modeling&t=Firestore%20Modeling%0a)",
    +    "iso8601Date": "2020-09-16T13:18:50-04:00",
    +    "basename": "firestore-modeling"
    +  },
    +  "microbit-intro": {
    +    "title": "micro:bit Intro",
    +    "date": "2020-09-17T21:23:00+00:00",
    +    "status": "publish",
    +    "permalink": "/courses/microbit-for-a-10-year-old/lessons/microbit-intro",
    +    "author": "Alex Patterson",
    +    "excerpt": "",
    +    "type": "lessons",
    +    "id": 637,
    +    "ld_lesson_category": [],
    +    "ld_lesson_tag": [],
    +    "course_id": [
    +      "635"
    +    ],
    +    "ld_course_635": [
    +      "635"
    +    ],
    +    "preview": "What is a …",
    +    "content": "\nWhat is a micro:bit[](https://codingcat.dev/courses/microbit-for-a-10-year-old/micro-bit-intro#what-is-a-microbit)\n------------------------------------------------------------------------------------------------------------------\n\nIt is a pocket-sized computer 70 times smaller and 18 times faster than the original BBC Micro computers used in schools.\n\n- It has 25 red LED lights that can flash messages and be used to create games.\n- There are two programmable buttons that can be used to control games or pause and skip songs on a playlist.\n- It has an accelerometer so it can detect motion and knows when you’re on the move.\n- The built-in compass knows which direction you’re heading in and…\n- It can use a low energy Bluetooth connection to interact with other devices and the Internet. You can find more information on the hardware in our guide.\n\n
    https://support.microbit.org/support/solutions/articles/19000013983-what-is-a-micro-bit-
    Where to Purchase[](https://codingcat.dev/courses/microbit-for-a-10-year-old/micro-bit-intro#where-to-purchase)\n---------------------------------------------------------------------------------------------------------------\n\nOne of my favorite places to purchase micro:bit and accessories is adafruit.[](https://www.adafruit.com/category/932)\n\n
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_14/v1600704449/ccd-cloudinary/image-70/image-70.png)
    ![TODO_UPLOAD](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/uploads/ccvlk7fcb9tku967m9jz.png)
    For a full list checkout the micro:bit website, make sure to sort by your country to see what is available.[](https://microbit.org/buy/)\n\n
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_19/v1600704454/ccd-cloudinary/image-71/image-71.png)
    ![TODO_UPLOAD](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/uploads/p5oqxjd06eam4a2l2lyk.png)
    For this unboxing I purchased [micro:bit go kit, Pocket-Sized, programmable Computer with Cable and Battery Pack from Amazon](https://amzn.to/2ya49wq)\n\n
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_19/v1600704455/ccd-cloudinary/image-72/image-72.png)
    ![TODO_UPLOAD](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/uploads/vsoxronkbjkvl49rfgeg.png)
    I would also recommend picking up some some alligator clips for some of the fun tutorials.[Haitronic Unique 2 in 1 Alligator Clip to Dupont Wire 10pin 20cm Male, Crocodile Clip to Jumper Wire 10pin 20cm Female for Test Lead Arduino/Raspberry pi/Orange pi/Makey Makey/BBC Micro: bit](https://amzn.to/2ZaGSFE)\n\n
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_22/v1600704448/ccd-cloudinary/image-73/image-73.png)
    ![TODO_UPLOAD](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/uploads/cz9lagqgom1pkzvfnzka.png)
    Unboxing[](https://codingcat.dev/courses/microbit-for-a-10-year-old/micro-bit-intro#unboxing)\n---------------------------------------------------------------------------------------------\n\nWhen you receive your micro:bit you will be itching to get up and running, it is really a very basic\n\n
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_18/v1600704454/ccd-cloudinary/image-12/image-12.jpeg)
    ![TODO_UPLOAD](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/uploads/gpdkrapyt49n8ynh79zd.png)
    Inside (if you purchased the BBC micro:bit go) you will find a micro:bit, usb cable, and battery pack.\n\nHook micro:bit to Computer[](https://codingcat.dev/courses/microbit-for-a-10-year-old/micro-bit-intro#hook-microbit-to-computer)\n--------------------------------------------------------------------------------------------------------------------------------\n\nAll you need to do is plug a usb A into your computer, then place the micro USB type B into your micro:bit\n\n
    ![micro:bit hookup](https://res.cloudinary.com/ajonp/image/upload/v1589750069/ajonp-ajonp-com/uploads/microbit_hookup.gif)
    Makecode[](https://codingcat.dev/courses/microbit-for-a-10-year-old/micro-bit-intro#makecode)\n---------------------------------------------------------------------------------------------\n\n[](https://microbit.org/) is the main site but there is an area that will take you to [](https://makecode.microbit.org/) which is the main site to start programming your new micro:bit.Start with something basic like the flashing heart, this will provide you with an awesome interactive guide to start learning.\n\n
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_6/v1600704453/ccd-cloudinary/image-74/image-74.png)
    ![TODO_UPLOAD](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/uploads/dd5s7xlhx1hetzw8jju8.png)
    With the latest update you can select which language you would like to learn and start a tutorial, for younger kids I would recommend Blocks. Since we focus a lot on web solutions at CodingCatDev I would recommend using the JavaScript tutorial as well.\n\n
    ![](https://res.cloudinary.com/ajonp/images/w_30,h_11/v1600704453/ccd-cloudinary/image-75/image-75.png)
    ![TODO_UPLOAD](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/uploads/wnbfqzdhc5anpf1w74a0.png)
    ", + "iso8601Date": "2020-09-17T17:23:00-04:00", + "basename": "microbit-intro" + }, + "html-table": { + "title": "HTML Table", + "date": "2020-09-17T20:40:57+00:00", + "status": "publish", + "permalink": "/courses/html-for-a-10-year-old/lessons/html-table", + "author": "Alex Patterson", + "excerpt": "", + "type": "lessons", + "id": 622, + "ld_lesson_category": [], + "ld_lesson_tag": [], + "course_id": [ + "616" + ], + "ld_course_616": [ + "616" + ], + "preview": "
    ![HTML for a 10 Year Old …", + "content": "\n
    ![HTML for a 10 Year Old Tables](https://res.cloudinary.com/ajonp/images/w_1024,h_576,c_scale/v1600704451/ccd-cloudinary/ForA10YearOldHTMLTable/ForA10YearOldHTMLTable-1024x576.png)
    > Please note if you are new to web development do not use tables for laying out pages. This was something that happened 20 years ago but we have come a long way since then 😉\n\nFull Table Example[](https://codingcat.dev/courses/html-for-a-10-year-old/html-table#full-table-example)\n--------------------------------------------------------------------------------------------------------\n\nBelow is an example of the entire table, we will walk through each part and how to create this table.\n\n- <table> Defines a table\n- <th> Defines a header cell in a table\n- <tr> Defines a row in a table\n- <td> Defines a cell in a table\n- <caption> Defines a table caption\n- <colgroup> Specifies a group of one or more columns in a table for formatting\n- <col> Specifies column properties for each column within a <colgroup> element\n- <thead> Groups the header content in a table\n- <tbody> Groups the body content in a table\n- <tfoot> Groups the footer content in a table\n\nBasic Tables[](https://codingcat.dev/courses/html-for-a-10-year-old/html-table#basic-tables)\n--------------------------------------------------------------------------------------------\n\nIn the most basic example of a table you only need the ``, ``, `` to surround each `` tags. ```\n
    ```\n
    ` tags. In this example you have a table with a single row (horizontal) and 6 columns (vertical), to show our peeps in a 1×6 configuration. ```\n
    ```\n\n  \n    \n    \n    \n    \n    \n    \n  \n
    ????????????????????????
    \n```\n```\n\nIf we want a basic table to show our peeps in one column (vertical) with six rows (horizontal) you need to add a `
    `, to show a 6×1 configuration ```\n
    ```\n\n  \n    \n  \n  \n    \n  \n  \n    \n  \n  \n    \n  \n  \n    \n  \n  \n    \n  \n
    ????
    ????
    ????
    ????
    ????
    ????
    \n```\n```\n\nFinally if we need a table with all six columns (vertical) and all six rows (horizontal) it would need to include six `
    ` tags inside of six `
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    ????????????????????????
    ????????????????????????
    ????????????????????????
    ????????????????????????
    ????????????????????????
    ????????????????????????
    \n```\n```\n\nBecause we are using every cell in the table examples above it makes setting them up very easy. There could be times when you have empty cells requirements. Now you might think that would be easy if you just need two blank cells you remove two of the `` tags. However, the issue is that the browser moves every column to the left (or right if you are in RTL), causing you to actually leave a blank, therefore you need to put in an empty <td></td> element to take up a column worth of space with nothing in it. ```\n
    ```\n    \n      \n        \n        \n        \n        \n        \n        \n      \n      \n        \n        \n        \n        \n        \n        \n      \n      \n        \n        \n        \n        \n        \n        \n      \n      \n        \n        \n        \n        \n        \n        \n      \n      \n        \n        \n        \n        \n        \n        \n      \n      \n        \n        \n        \n        \n        \n        \n      \n    
    ????????????????????
    ????????????????????
    ????????????????????
    ????????????????????
    ????????????????????
    ????????????????????
    \n```\n```\n\n### Live Basic Examples[](https://codingcat.dev/courses/html-for-a-10-year-old/html-table#live-basic-examples)\n\nThe Header[](https://codingcat.dev/courses/html-for-a-10-year-old/html-table#the-header)\n----------------------------------------------------------------------------------------\n\nWhen you see tables in action you often have data that needs to be labeled. The best way to make this happen is by adding a `` element to your table and adding header cells `` to the element to help in labeling this data. ```\n
    ```\n\n  \n    \n      \n      \n      \n      \n    \n  \n  \n    \n    \n      \n      \n      \n    \n    \n    \n      \n      \n      \n      \n      \n      \n      \n      \n    \n  \n
    NamePurrfect Peeps
    Nick????
    AJ????????????????????????
    \n```\n```\n\nNow this simple table setup will work great with a single cell for each column in the first row. But if we add the next row and it has 6 purrfect peeps, we really want to show that the header cell “Purrfect Peeps” is meant for all cells that have emojis.Below you can see the difference between the top table without colspan and with colspan in the second table. Without the colspan the “Purrfect Peeps” cell is taken up by only the cat in the second row, and it does not cover the dog, unicorn, bear, zebra, or otter. In the second table we use “colspan” `Purrfect Peeps` to tell the browser that this header should span all 6 columns, notice how all the cells center under the heading. Nested Table[](https://codingcat.dev/courses/html-for-a-10-year-old/html-table#nested-table)\n--------------------------------------------------------------------------------------------\n\nThere is a great deal of power ????that you can add to your tables by nesting an entire table into a cell. I often forget to wrap this with a <table> tag so please don’t just try to add rows <tr> within a <td> tag and think this will work, it needs to be represented by an entire table. As you can see below we have added social links as an entire table within a cell. ```\n
    ```\n \n  \n    \n      \n        \n      \n      \n        \n      \n    
    \n Twitter\n
    \n LinkedIn\n
    \n \n```\n```\n\nBelow you can start to see that the parent header row “Socials” still represents all data in the cell, even the nested table in the second row with a 4×4 table. Column Group[](https://codingcat.dev/courses/html-for-a-10-year-old/html-table#column-group)\n--------------------------------------------------------------------------------------------\n\nThe column group tag `` can be used for styling entire columns at a time, instead of having to update each cell individually. Something that you will often see is a single column highlighted. This provides a valuable tool that is a commun use case for highlighting an entire column. By this simple code snippet we can highlight the socials to include a background of pink. ```\n
    ```\n  \n    \n    \n  \n```\n```\n\nFooter[](https://codingcat.dev/courses/html-for-a-10-year-old/html-table#footer)\n--------------------------------------------------------------------------------\n\nA very commun use case for a footer and the reason for calling it out seperately is to include Totals or Aggregations (fancy math like word for adding stuff). In this example we just add some text with fun phrase. ```\n
    ```\n      \n        \n          \n            AJ's Peep List! This is an example of a unique footer area.\n          \n        \n      \n```\n```\n\n> Pro Tip: by keeping a seperate header and footer tag it allows large table body content to be easily scrolled while the header and footer maintain in place.\n\nCaption[](https://codingcat.dev/courses/html-for-a-10-year-old/html-table#caption)\n----------------------------------------------------------------------------------\n\n> By default, a table caption will be center-aligned above a table. However, the CSS properties [text-align](https://www.w3schools.com/cssref/pr_text_text-align.asp) and [caption-side](https://www.w3schools.com/cssref/pr_tab_caption-side.asp) can be used to align and place the caption. -W3 Schools\n\nI find myself using caption less and less over other methods, but I thought it would be a nice complete example. Adding the below snippet with an attribute text-align=”bottom” will place example text below our table. This could explain some of the figures or label your table.\n\n```\n
    ```\n      \n        This is an example caption for our table.\n      \n```\n```\n\nProblem Solving[](https://codingcat.dev/courses/html-for-a-10-year-old/html-table#problem-solving)\n--------------------------------------------------------------------------------------------------\n\nWe broke down each piece of the table in the original “Full Table” Example. See if you can change that table so that it has a blue background. Take a snapshot and post it on our [discord](https://link.ajonp.com/slack) channel with [@ajonp](https://codingcat.dev/members/ajonp/) and I will hook you up with some free stickers! ",
    +    "iso8601Date": "2020-09-17T16:40:57-04:00",
    +    "basename": "html-table"
    +  },
    +  "html-basics": {
    +    "title": "HTML Basics",
    +    "date": "2020-09-17T20:40:47+00:00",
    +    "status": "publish",
    +    "permalink": "/courses/html-for-a-10-year-old/lessons/html-basics",
    +    "author": "Alex Patterson",
    +    "excerpt": "",
    +    "type": "lessons",
    +    "id": 620,
    +    "ld_lesson_category": [],
    +    "ld_lesson_tag": [],
    +    "course_id": [
    +      "616"
    +    ],
    +    "ld_course_616": [
    +      "616"
    +    ],
    +    "preview": "
    ![](https://res.cloudinary.com/ajonp/images/w_1024,h_576,c_scale/v1600704452/ccd-cloudinary/ForA10YearOldHTMLBasics/ForA10YearOldHTMLBasics-1024x576.png)
    Hey there Purr-fect Peep, so you have decided to start learning Web Development. That is AWESOME! In HTML Basics we will cover some of the history of the Web and many of the basiscs you will need to get started. We are continuously looking for feedback on how to improve the page so please feel free to jump on our [slack workspace](https://link.ajonp.com/slack) for any help or suggestions.\n\nHistory of the Web[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#history-of-the-web)\n--------------------------------------------------------------------------------------------------------\n\nIn the very begining the Web did not require as much interactiveness as it has today. When Tim Berners-Lee created it in 1989 working at CERN it was to help link together several disparate systems that did not \"talk\" with each other. You can still see the original design [here](http://info.cern.ch/Proposal.html).\n\n> By October of 1990, Tim had written the three fundamental technologies that remain the foundation of today’s web:HTML: 1. HyperText Markup Language. The markup (formatting) language for the web. 2. URI: Uniform Resource Identifier. A kind of “address” that is unique and used to identify to each resource on the web. It is also commonly called a URL. 3. HTTP: Hypertext Transfer Protocol. Allows for the retrieval of linked resources from across the web. \n\nEven today you can write web pages with only these 3 basic technologies. Often people will jump right into learning CSS, JavaScript or a large Framework. It is best to know what those technologies do by building up your level of understanding “block by block”!\n\nHTML Documents[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#html-documents)\n------------------------------------------------------------------------------------------------\n\nThere are three key items that make up an HTML Document. 1. All HTML documents must start with a document type declaration: ``.\n2. The HTML document itself begins with `` and ends with ``.\n3. The visible part of the HTML document is between `` and ``.\n\nThe simplest page you can write is the most legendary “Hello World” example. As you can see in this below sample it just has the worlds within the body of a document. ### Syntax[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#syntax)\n\n#### Tags[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#tags)\n\nIn order for the browser to understand and process the markup we need to place what we call opening `<>` and closing `` tags around content. Anything between the two tags will be represented by that markup. So in the case of our “Hello World” example there is no styling the browser just knows it belongs within the body, which belongs to the html. It does not however belong to the head, because as you can see in the code above the head was already closed with ``. #### Element[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#element)\n\nWhen you use a tag with the content in the middle like `

    Hello World

    `, this represents an entire html element. You can also nest elements, for example we would place this h1 tag into our body element. ```\n
    ```\n\n  

    Hello

    \n\n```\n```\n\n#### Attributes[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#attributes)\n\nAnything that exists within the starting tag name is what we call an attribute like `

    Hello

    `. Attributes allow for us to place additional information into and about the tag. There are two types of Some of the most popular global HTML attributes are `id`, `css`, and `style`. In the link section below you will begin to see how we can use id. In our CSS for a 10 year old we will dive further into the css and style attribute. HTML Headings[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#html-headings)\n----------------------------------------------------------------------------------------------\n\nHTML headings are defined with the `

    ` to `

    ` tags.`

    ` defines the most important heading. `

    ` defines the least important heading.In the example below you will notice that the text is between our opening and closing tag which makes the text look differently. Browsers come with predefined styles which allow for the difference visually, otherwise this would only be represented in the markup. HTML Paragraphs[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#html-paragraphs)\n--------------------------------------------------------------------------------------------------\n\nThinking back to the time when Tim created the first version of HTML, he was trying to link up documents between computers. So the paragraph was pretty important and is still one of the most commonly used html tags today. Paragraphs represent a change in the text, but again don’t be fooled each browser can implement the styling differently. HTML Links[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#html-links)\n----------------------------------------------------------------------------------------\n\nThe first example of using a link is something called an anchor tag to reference within themselves. In order to do this we give a `div` and identifier using `id=` this way a link can be used so that the browser can reference the location of that id within the current page. This anchor is used in the a tag’s attribute href by placing a `#` (for you young kids a hashtag) in front of the identifier. See below where we use `Link to Bottom Div` to anchor to the div with id divBtm `
    Bottom Div
    `.You can think of links as the webs version of house addresses. URI (Uniform Resource Identifier) is one of Tim’s best ideas and unbelieveably forward thinking. Instead of just having a set of random numbers like `104.198.14.52` you can specify an address that has meaning like [https://ajonp.com](https://ajonp.com/), this is used in the a tag’s attribute href. The ajonp.com version is called a URL (Uniform Resource Locator) and is more commonly known as a web address. This allows us to say AJ’s house instead of the number. HTML Images[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#html-images)\n------------------------------------------------------------------------------------------\n\nImages make up a large portion of the web and have had significant updates in more modern browsers. Keeping things very simple to start you only need the tag `` and a single attribute `src`. HTML Buttons[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#html-buttons)\n--------------------------------------------------------------------------------------------\n\nButton tags are fairly simple but yet very powerful. They can be combined with forms (something we will cover in another module) which take user input data and then the button will submit this data. This is done through the button attribute `type.` The type attribute will allow the button to represent `button`, `submit`, and `reset`. HTML Lists[](https://codingcat.dev/courses/html-for-a-10-year-old/html-basic#html-lists)\n----------------------------------------------------------------------------------------\n\nWhen you are writing you often will want to use lists of items. HTML5 offers us two different types of lists **u**nordered list `
      ` and **o**rdered list `
        `. You can use many different styles for both of these lists using css. For ordered lists you have an HTML attribute `type` that can be used. For unordered lists you must use styles only to change the look, for example `style=\"list-style-type:circle;\"` will create an item with a circle at the front.For both list types you will have items that exist in that list represented with the tag `
      1. `. This tag will have the actual content for each item in the list. > Please see [https://www.w3schools.com/html/html\\_basic.asp](https://www.w3schools.com/html/html_basic.asp) as I used that as a reference for much of this tutorial.\n\n", + "iso8601Date": "2020-09-17T16:40:47-04:00", + "basename": "html-basics" + }, + "ajs-coding-tools": { + "title": "AJ’s Coding Tools", + "date": "2020-09-17T20:40:29+00:00", + "status": "publish", + "permalink": "/courses/html-for-a-10-year-old/lessons/ajs-coding-tools", + "author": "Alex Patterson", + "excerpt": "", + "type": "lessons", + "id": 618, + "ld_lesson_category": [], + "ld_lesson_tag": [], + "course_id": [ + "616" + ], + "ld_course_616": [ + "616" + ], + "preview": "
        Hey there Purr-fect Peep, so you have decided to start learning Web Development, that is **AWESOME**!! AJ and I will be here to guide you along in this journey. Whether you are ten, twenty or ninety years old, it is never too late to get started ????.\n\nMain Coding Environment[](https://codingcat.dev/courses/html-for-a-10-year-old/html-coding-tools#main-coding-environment)\n-------------------------------------------------------------------------------------------------------------------------\n\nThroughout the tutorials you will see tiny editors like below from CodeSandbox.\n\n<iframe src=\"[https://codesandbox.io/embed/html-for-a-10-year-old-basics-hello-world-vhigc?fontsize=14&hidenavigation=1&theme=dark](https://codesandbox.io/embed/html-for-a-10-year-old-basics-hello-world-vhigc?fontsize=14&hidenavigation=1&theme=dark)\" style=\"width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;\" title=\"html-for-a-10-year-old-basics-hello-world\" allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\" sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n\n> \n\nIf you would like to dive a little deeper you can look at the documentation for CodeSandbox \n[](https://codesandbox.io/docs)\n\nCodeSandbox Login[](https://codingcat.dev/courses/html-for-a-10-year-old/html-coding-tools#codesandbox-login)\n-------------------------------------------------------------------------------------------------------------\n\nCodeSandbox uses an identity provider called [GitHub](https://github.com/). You can signup on GitHub using any email that you choose, just make sure you will have access to it long term. For instance if you are in school now and your email will be shutdown when you finish, consider creating an email address on [Gmail](https://www.google.com/gmail/about/#). Please see the video for reference.\n\n
        ![GitHub Login for CodeSandbox](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/courses/codesandbox/Screen_Shot_2019-12-07_at_3.31.16_PM.png)
        CodeSandbox Fork[](https://codingcat.dev/courses/html-for-a-10-year-old/html-coding-tools#codesandbox-fork)\n-----------------------------------------------------------------------------------------------------------\n\nYou can think of a fork as a copy of my original code, that you can make all your own. When you get started withe the basics it might not make sense to create forks of my sandboxes because you are just learning and playing around. However, when you get into some more advanced courses you will want to start forking your own solutions and even using those in GitHub so that you can show off your work.\n\n> Pro Tip: Employers looking for coders will often look at your GitHub repo to checkout your work. This way you have something to show them.\n\nWhere are all AJonP’s Sandboxes[](https://codingcat.dev/courses/html-for-a-10-year-old/html-coding-tools#where-are-all-ajonps-sandboxes)\n----------------------------------------------------------------------------------------------------------------------------------------\n\nYou can find all of AJonP’s sandboxes at . This is also where you would find a listing of all your sandboxes as well, just replace ajonp with your username.
        ![](https://res.cloudinary.com/ajonp/images/w_30,h_17/v1600704453/ccd-cloudinary/image-69/image-69.png)
        ![Sandboxes](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/courses/codesandbox/Screen_Shot_2019-12-07_at_3.27.24_PM.png)
        ", + "iso8601Date": "2020-09-17T16:40:29-04:00", + "basename": "ajs-coding-tools" + }, + "firebase-project-hosting": { + "title": "Firebase Project Hosting", + "date": "2018-11-26T15:41:16+00:00", + "status": "publish", + "permalink": "/courses/angularmaterial/lessons/firebase-project-hosting", + "author": "Alex Patterson", + "excerpt": "", + "type": "lessons", + "id": 54, + "thumbnail": "../../../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1600704484/ccd-cloudinary/angular_material_firebase_hosting/angular_material_firebase_hosting-150x150.png", + "ld_lesson_category": [], + "ld_lesson_tag": [], + "course_id": [ + "51" + ], + "ld_course_51": [ + "51" + ], + "rank_math_description": [ + "Firebase Project Hosting, how to setup the basics that will be required to host a firebase project." + ], + "rank_math_primary_ld_lesson_category": [ + "0" + ], + "preview": "Firebase Console\n----------------\n\nGo to the [Firebase Console](https://console.firebase.google.com/)If this is your first firebase project you will need to Sign in to Google\n\n
        ![Google Login](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1543272442/ajonp-ajonp-com/1-lesson/Screen_Shot_2018-11-26_at_5.44.44_PM.png)
        Create Project\n--------------\n\nNow you can click the button to add a new Project\n\n
        ![Create Project](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1543272442/ajonp-ajonp-com/1-lesson/Screen_Shot_2018-11-26_at_5.46.16_PM.png)
        Hosting\n-------\n\nAt this point many if the blogs will start talking about setting up the database, but I want to keep this really simple “Hello World” style.You can now navigate over to the hosting area within firebase.\n\n
        ![Firebase Hosting](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1543452867/ajonp-ajonp-com/1-lesson/Screen_Shot_2018-11-28_at_7.49.10_PM.png)
        If you take a look at [Firebase hosting quickstart](https://firebase.google.com/docs/hosting/) it also has a great guide.If you are all new to programming you may not have installed [Node or NPM](https://nodejs.org/en/) yet, just follow this link and install the LTS version.\n\n
        ![NodeJs with NPM](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1543691205/ajonp-ajonp-com/1-lesson/node_download.png)
        Hosting Deploy\n--------------\n\nNow you can select “Get started” to walkthrough the guided tips from Firebase – Hosting.\n\n
        ![Hosting Get Started](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1543691320/ajonp-ajonp-com/1-lesson/Screen_Shot_2018-12-01_at_2.08.17_PM.png)
        ### Install Firebase Tools\n\n ```\n
        ```\nnpm install -g firebase-tools \n```\n```\n\n### Login with firebase\n\n ```\n
        ```\nfirebase login \n```\n```\n\n### Make a new directory\n\n ```\n
        ```\nmkdir ~/Downloads/lesson-1-firebase-project cd ~/Downloads/lesson-1-firebase-project \n```\n```\n\n### Initialize firebase\n\n ```\n
        ```\nfirebase init \n```\n```\n\n#### Selections\n\n1. Up/Down key to move to Hosting\n2. Hit spacebar to make selection\n3. Enter to continue to next setup\n4. Navigate to your newly created firebase project\n5. Hit enter to accept public as location to serve files\n6. Key n, Enter for not making this a single page app.\n7. Firebase initialization complete!\n \n#### Firebase project file\n\n.firebaserc\n\n ```\n
        ```\n{\n  \"projects\": {\n    \"default\": \"ajonp-lesson-1\"\n  }\n}\n\n\n```\n```\n\n#### Firebase hosting file\n\nfirebase.json\n\n ```\n
        ```\n{\n  \"hosting\": {\n    \"public\": \"public\",\n    \"ignore\": [\n      \"firebase.json\",\n      \"**/.*\",\n      \"**/node_modules/**\"\n    ]\n  }\n}\n\n\n```\n```\n\n### Deploy firebase\n\nBecause you are logged into the CLI, the two files above tell firebase the project to use, and how they will be served on nginx. Now you just need to run the deploy command.\n\n ```\n
        ```\nfirebase deploy \n```\n```\n\nNow back inside the firebase console you should see that hosting has now been completed.\n\n 
        ![Firebase Hosting Files](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1543784444/ajonp-ajonp-com/1-lesson/hosting_after_deploy.png)
        ", + "iso8601Date": "2018-11-26T10:41:16-05:00", + "basename": "firebase-project-hosting" + }, + "firebase-authentication-and-authorization": { + "title": "Firebase Authentication and Authorization", + "date": "2019-01-09T17:40:13+00:00", + "status": "publish", + "permalink": "/courses/angularmaterial/lessons/firebase-authentication-and-authorization", + "author": "Alex Patterson", + "excerpt": "", + "type": "lessons", + "id": 510, + "thumbnail": "../../../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1604047169/ccd-cloudinary/FirebaseUIAuthNAuthZ/FirebaseUIAuthNAuthZ-150x150.png", + "ld_lesson_category": [], + "ld_lesson_tag": [], + "course_id": [ + "51" + ], + "ld_course_51": [ + "51" + ], + "rank_math_primary_ld_lesson_category": [ + "0" + ], + "rank_math_facebook_description": [ + "Firebase Authentication and Authorization" + ], + "preview": "
        > ⚠️ Notice: I may need to reshoot this video as FirebaseUI is up to [v4.1.0](https://github.com/firebase/firebaseui-web/releases/tag/v4.1.0) \n> [v4.0.0](https://github.com/firebase/firebaseui-web/releases/tag/v4.0.0) Removed all FirebaseUI underlying dependencies on deprecated and removed APIs in Firebase version 6.0.0. \n> FirebaseUI no longer supports versions older than 6.0.0.\n\nWe will continue building out our app to Authorize users and then add Firestore rules to Authenticate within our Angular application. One of my favorite full time authentication companies is [Auth0](https://auth0.com/). Auth0 has many great articles, the one I refer to when trying to teach others about AuthN vs. AuthZ is [Authentication and Authorization](https://auth0.com/docs/authorization/concepts/authz-and-authn).The biggest takeaway is this:\n\n- `Autentication (AuthN)` Determines whether users are who they claim to be\n- `Authorization (AuthZ)` Determines what users can and cannot access\n\nSetup[](https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization#setup)\n------------------------------------------------------------------------------------------------------\n\nWe can start from the previous lesson and build upon it by adding AuthN and AuthZ. Previous Lesson: [Angular Material Router Awareness](https://github.com/AJONPLLC/lesson14-angular-material-router-awareness)\n\n```\n
        ```\ngit clone https://github.com/AJONPLLC/lesson14-angular-material-router-awareness.git \n```\n```\n\nThis will give us a solid base to start working from, however if you are creating a new firebase project you should change the environment/environment.ts file to match your firebase details. If you have never done this please see [Angular Navigation Firestore](https://ajonp.com/courses/angularmaterial/angular-material-dynamic-navigation-using-firestore) as this will provide more details on how to update.Make sure you update your npm packages\n\n```\n
        ```\nnpm install \n```\n```\n\nFirebase Authentication (AuthN)[](https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization#firebase-authentication-authn)\n--------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThe [Firebase Authentication](https://firebase.google.com/docs/auth/) docs have a great amount of detail on how exactly this works for each of their SDKs that they support. When I originally made this video I don’t believe that [FirebaseUI](https://firebase.google.com/docs/auth/web/firebaseui) was fully supported and added to the documentation, but it is now. You can still find the main [github repo](https://github.com/firebase/firebaseui-web), which has several issues, but Authentication is the baine of my existence!Thankfully Firebase makes this super simple and I am going to show you how.\n\n### FirebaseUI install[](https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization#firebaseui-install)\n\nFirebaseUI was always a seperate project but it gained huge amounts of popularity. It is a simple drop in solution for authentication that was much needed for Web based authentication with Firebase.First we will need to add `firebaseui` to our npm package dependencies.\n\n```\n
        ```\nnpm i firebaseui@3.5.2 \n```\n```\n\n### Create User Module[](https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization#create-user-module)\n\nUsing the [Angular CLI](https://angular.io/cli) to create modules and components. You can find specific details about this schematic in the [ng generate CLI section](https://angular.io/cli/generate).\n\n- `ng g m` is a sort hand for `ng generate module`, more can be found [here](https://angular.io/cli/generate#module)\n- `modules/user` is the directory from `src/app` where the module will be located.\n- `--routing` adds the routing module\n\n```\n
        ```\nng g m modules/user --routing \n```\n```\n\n### Create User Signin Component[](https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization#create-user-signin-component)\n\nUsing the [Angular CLI](https://angular.io/cli) to create modules and components. You can find specific details about this schematic in the [ng generate CLI section](https://angular.io/cli/generate).\n\n- `ng g c` is a sort hand for `ng generate component`, more can be found [here](https://angular.io/cli/generate#component)\n- `modules/user-signin` is the directory from `src/app` where the module will be located, this command will also understand that we want to add this component to the already generated module.\n\n```\n
        ```\nng g c modules/user-signin \n```\n```\n\nYou should see an output similar to below: Loading image…\n\n### Update User Signin Template[](https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization#update-user-signin-template)\n\nWe just need a very simple div so that firebaseUI can locate the ID and then inject itself.[/src/app/modules/user/user-signin/user-signin.component.html](https://github.com/AJONPLLC/lesson15-firebase-AuthZ-AuthN/blob/47f8096c133371ac5d9116c0622abc01d553f100/src/app/modules/user/user-signin/user-signin.component.html#L1)\n\n```\n
        ```\n
        \n```\n```\n\nFirestore Authorization (AuthZ)[](https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization#firestore-authorization-authz)\n--------------------------------------------------------------------------------------------------------------------------------------------------------\n\n> ⏸ Continuing to update…\n\n[](https://twitter.com/intent/tweet?url=https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization&via=CodingCatDev&hashtags=CodingCatDevShares&text=Firebase%20Authentication%20and%20Authorization%0a)[](https://www.linkedin.com/shareArticle?mini=true&url=https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization&title=Firebase%20Authentication%20and%20Authorization%0a&summary=%27#CodingCatDevShares'&source='codingcat.dev')[](https://www.facebook.com/sharer.php?u=https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization)[](https://www.reddit.com/submit?url=https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization&title=Firebase%20Authentication%20and%20Authorization%0a)[](https://news.ycombinator.com/submitlink?u=https://codingcat.dev/courses/angularmaterial/firebase-authentication-and-authorization&t=Firebase%20Authentication%20and%20Authorization%0a)", + "iso8601Date": "2019-01-09T12:40:13-05:00", + "basename": "firebase-authentication-and-authorization" + }, + "angular-material-theming": { + "title": "Angular Material Theming", + "date": "2019-01-22T17:37:01+00:00", + "status": "publish", + "permalink": "/courses/angularmaterial/lessons/angular-material-theming", + "author": "Alex Patterson", + "excerpt": "", + "type": "lessons", + "id": 500, + "thumbnail": "../../../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1604047153/ccd-cloudinary/AngularMaterialTheming/AngularMaterialTheming-150x150.png", + "ld_lesson_category": [], + "ld_lesson_tag": [], + "course_id": [ + "51" + ], + "ld_course_51": [ + "51" + ], + "rank_math_primary_ld_lesson_category": [ + "0" + ], + "preview": "
        Angular Material Theming\n========================\n\n???? Demo: Angular Material is the officially supported components for implementing Google’s Material Design System within Angular. There are 4 pre-built themes that come with Angular Material\n\n- deeppurple-amber\n- indigo-pink\n- pink-bluegrey\n- purple-green We are going to take a look at creating our own theme and including this in with our default style, then using this to provide mixins for each of our components styles.\n\n> Probably the biggest complaint that I hear about Themes in Angular Material is the requirement for building an entire new set of css using the sass function, which bloats your style.css files. Please checkout [Ionic CSS Variables](https://beta.ionicframework.com/docs/theming/color-generator) to see a comparison of how this can be accomplished. As of writing this still remains an [open issue on GitHub](https://github.com/angular/material2/issues/4352)\n\nLesson Steps[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#lesson-steps)\n---------------------------------------------------------------------------------------------------\n\n1. Kitchen Sink Component\n2. Angular Flex-Layout\n3. Angular Material Theme Creation\n4. Theme Selection Angular Service\n5. Sass Mixins\n6. Tools\n\nKitchen Sink Component\n======================\n\nIn English (maybe just USA) we say “Everythign but the kitchen sink”, in programming we often will use the “Kitchensink” to refer to everything we can possible use on a site. For our example we will pull from the [Angular Material Kitchensink](https://github.com/angular/material2/blob/b21cfb73261e5c334280a185762ffcc475348b76/src/universal-app/kitchen-sink/kitchen-sink.ts) so that we can highlight all of the possible components and what the theme does to them.The components can be found on [material.angular.io/components](https://material.angular.io/components/categories) there are a few from the Component Dev Kit (CDK) as well.\n\nClone Repo[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#clone-repo)\n-----------------------------------------------------------------------------------------------\n\nUsually I would offer up a guide to build this entire thing out (and I show this in the video if you want to follow along) but to simplify things I am recommend you just clone the Lesson 10 repo (or fork it and clone yours) and check it out for this walk through.\n\n```\n
        ```\ngit clone https://github.com/AJONPLLC/lesson-10-angular-material-theming \n```\n```\n\nIf you would like to follow along you can snage the Lesson 9 and work with me through the updates.\n\n```\n
        ```\ngit clone https://github.com/AJONPLLC/lesson-9-angular-material-router-outlet \n```\n```\n\nAngular Flex-Layout\n===================\n\nAngular FLex-Layout or fxLayout, offeres a great alternative to creating all the css for a flexlayout by hand. It is very similar to [Bootstrap’s Flex](https://getbootstrap.com/docs/4.2/utilities/flex/) but I feel as though it is even more powerful.This is a great example by tburleson:\n\nToolbar[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#toolbar)\n-----------------------------------------------------------------------------------------\n\nFor our example we used the `nogrow` option in the toolbar so that the material icon would stay shifted off to the right using `fxFlex=\"nogrow\"`.sidenav.component.html\n\n```\n
        ```\n\n  \n    \n      \n        \n          Home\n        
    \n \n \n \n Kitchen Sink\n \n \n \n

    \n Books\n

    \n
    \n \n \n \n \n \n menu\n \n \n {{ title }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n```\n```\n\nKitchensink[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#kitchensink)\n-------------------------------------------------------------------------------------------------\n\nIn our kitchensink example we wrapped every component with a ``, then wrapped the entire component in `
    ` which will allow everything to stay in the center and each of the `fxFlex` items to be within a flexbox. You can see that each span will have the style `flex: 1 1 1e-09px;box-sizing: border-box;` when rendered in the html.\n\nAngular Material Theme Creation\n===============================\n\nYou could use the 4 prebuilt themes that come with the @angular/material package, by just importing them into your style.css`@import \"~@angular/material/prebuilt-themes/indigo-pink.css\";``@import \"~@angular/material/prebuilt-themes/deeppurple-amber.css\";``@import \"~@angular/material/prebuilt-themes/pink-bluegrey.css\";``@import \"~@angular/material/prebuilt-themes/purple-green.css\";`\n\nCustom Theme[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#custom-theme)\n---------------------------------------------------------------------------------------------------\n\nI prefer to add them directly so that you can create your own branding colors. You can’t make a new unique site if you don’t allow for your Brand’s identity to show through (you know what I am talking about Marketing!).The best site I have found for this is [Material Design Palette Generator](http://mcg.mbitson.com/) unlike [Google’s Material Color Tool](https://material.io/tools/color/), the DPG allows you to export direct to sass variables which is exactly what we need when creating an Angular Material Theme.Make sure when you choose download (the down arrow), you then choose ANGULAR JS 2 (MATERIAL 2).\n\n
    ![Download Design Palette Generator](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1547730945/ajonp-ajonp-com/10-lesson-angular-material-theming/Screen_Shot_2019-01-17_at_8.14.48_AM.png)
    Update theme file[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#update-theme-file)\n-------------------------------------------------------------------------------------------------------------\n\nYou can then use all of these custom variables to create new themes. The sass variable should define the full spectrum along with contrast of each color in the palette.Please make sure you include all of the material sass theming functions by adding this to the top of any theme file. You should only have this once in any project, so if this makes more sense in your style file using various `mixins` and `include` features please do this in a way that makes sense for your project.\n\n```\n
    ```\n@import '~@angular/material/theming'; @include mat-core(); \n```\n```\n\n### SASS Variables[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#sass-variables)\n\nangular-material-router-theme.scss\n\n```\n
    ```\n$md-purple: (\n  50: #ffffff,\n  100: #d3cbe7,\n  200: #b2a5d5,\n  300: #8974be,\n  400: #775fb4,\n  500: #674ea7,\n  600: #5a4492,\n  700: #4d3b7d,\n  800: #403168,\n  900: #342754,\n  A100: #f9f7fd,\n  A200: #b7a2ec,\n  A400: #7c5dcb,\n  A700: #7256b9,\n  contrast: (\n    50: #000000,\n    100: #000000,\n    200: #000000,\n    300: #000000,\n    400: #ffffff,\n    500: #ffffff,\n    600: #ffffff,\n    700: #ffffff,\n    800: #ffffff,\n    900: #ffffff,\n    A100: #000000,\n    A200: #000000,\n    A400: #ffffff,\n    A700: #ffffff\n  )\n);\n\n\n```\n```\n\nCreation of the Sass variable for our new palette, here the mat-palette function is returning the color information and mappings and assigning it to `$angular-material-router-app-purple`.\n\n```\n
    ```\n$angular-material-router-app-purple: mat-palette($md-purple); \n```\n```\n\n### New Material Theme[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#new-material-theme)\n\nOnce you have a new palette it is finally time to create a new Sass variable `$angular-material-router-app-theme-purple` that hosts your full theme information.\n\n```\n
    ```\n$angular-material-router-app-theme-purple: mat-dark-theme(\n  $angular-material-router-app-purple,\n  $angular-material-router-app-accent,\n  $angular-material-router-app-warn\n);\n```\n```\n\nPlease note I have used the default accent and warn, but you can make these any color that you would like as well. Then whenever you use `color=\"warn\"` it could be purple or gray instead of red, please aroudnd with switching out the variables in any theme.\n\nStyle Class Update[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#style-class-update)\n---------------------------------------------------------------------------------------------------------------\n\nAt this point we have only created a bunch of Sass variables that are not included in our app anywhere. In order to do this we will include them in a surrounding class, this can be done in the `style.scss` file, this should have been generated by the Angular CLI, or it is already in the `styles` folder if you cloned the repo.\n\n### Import SCSS Theme File[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#import-scss-theme-file)\n\nFirst make sure you are including the new theme file that holds all of our variables, by importing the scss `@import 'angular-material-router-theme.scss';`.You can do this in any component to use the Sass variables.\n\n### Include Theme into class variable[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#include-theme-into-class-variable)\n\nNow we will include inside this class the entire theme (css) for our app.\n\n```\n
    ```\n... \n.angular-material-router-app-theme-purple { \n  $theme: $angular-material-router-app-theme-purple; \n  @include angular-material-theme($theme); \n} \n... \n```\n```\n\nSidenav Color Selector[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#sidenav-color-selector)\n-----------------------------------------------------------------------------------------------------------------------\n\nNow that we have all of our theme colors defined we can update the sidenav button clicks styles to include the correct background color, this assigns each menu item the color and with a `border-radius` of 50% makes it a circle.sidenav.component.scss\n\n```\n
    ```\n.color-swatch {\n  position: relative;\n  width: 36px;\n  height: 36px;\n  margin: 6px;\n  border-radius: 50%;\n  overflow: hidden;\n}\n.color-swatch-primary {\n  background-color: mat-color($angular-material-router-app-primary, 500);\n}\n.color-swatch-primary:hover {\n  background-color: mat-color(\n    $angular-material-router-app-primary,\n    500\n  ) !important;\n}\n.color-swatch-green {\n  background-color: mat-color($angular-material-router-app-green, 500);\n}\n.color-swatch-green:hover {\n  background-color: mat-color(\n    $angular-material-router-app-green,\n    500\n  ) !important;\n}\n.color-swatch-pink {\n  background-color: mat-color($angular-material-router-app-pink, 500);\n}\n.color-swatch-pink:hover {\n  background-color: mat-color(\n    $angular-material-router-app-pink,\n    500\n  ) !important;\n}\n.color-swatch-purple {\n  background-color: mat-color($angular-material-router-app-purple, 500);\n}\n.color-swatch-purple:hover {\n  background-color: mat-color(\n    $angular-material-router-app-purple,\n    500\n  ) !important;\n}\n.color-swatch-yellow {\n  background-color: mat-color($angular-material-router-app-yellow, 500);\n}\n.color-swatch-yellow:hover {\n  background-color: mat-color(\n    $angular-material-router-app-yellow,\n    500\n  ) !important;\n}\n.color-swatch-warn {\n  background-color: mat-color($angular-material-router-app-warn, 500);\n}\n.color-swatch-warn:hover {\n  background-color: mat-color(\n    $angular-material-router-app-warn,\n    500\n  ) !important;\n}\n\n\n```\n```\n\nTheme Selection Angular Service\n===============================\n\nYou can read up on [Angular Services](https://angular.io/tutorial/toh-pt4) and why you should use them.\n\nCreate color-picker Service[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#create-color-picker-service)\n---------------------------------------------------------------------------------------------------------------------------------\n\nI like to create all of my services in a folder called `core`, I will often put other things like models in this folder as well.\n\n```\n
    ```\nng g s core/services/color-picker.service \n```\n```\n\nIn this service we need to have an initial class set for the app in variable `initialClass`, if you follow the lesson video it shows how this works with local storage in the browser. This allows a person to set the theme and not need to select on refresh. So we look there first and if we cannot fild it we just add the initial class, which is what is also set to our `BehaviorSubject`. You will also notice we are updating something called `OverlayContainer`, this comes from the [Material CDK](https://material.angular.io/cdk/overlay/overview) and allows many of the floating panels to have style.color-picker.service.ts\n\n```\n
    ```\nimport { Injectable } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { OverlayContainer } from \"@angular/cdk/overlay\";\n@Injectable({ providedIn: \"root\" })\nexport class ColorPickerService {\n  initialClass = \"angular-material-router-app-theme\";\n  colorClass$: BehaviorSubject = new BehaviorSubject(this.initialClass);\n  constructor(private overlayContainer: OverlayContainer) {\n    const storageClass = localStorage.getItem(\"color-picker\");\n    console.log(storageClass);\n    if (storageClass) {\n      overlayContainer.getContainerElement().classList.add(storageClass);\n      this.colorClass$.next(storageClass);\n    } else {\n      overlayContainer.getContainerElement().classList.add(this.initialClass);\n    }\n  }\n  getColorClass() {\n    return this.colorClass$;\n  }\n  setColorClass(className: string) {\n    this.overlayContainer.getContainerElement().classList.forEach(css => {\n      this.overlayContainer.getContainerElement().classList.remove(css);\n    });\n    this.overlayContainer.getContainerElement().classList.add(className);\n    this.colorClass$.next(className);\n    localStorage.setItem(\"color-picker\", className);\n  }\n}\n\n\n```\n```\n\nUpdate App for Theme Class[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#update-app-for-theme-class)\n-------------------------------------------------------------------------------------------------------------------------------\n\nNow that we have all the underling items taken care of we need to actually update the app’s class on the fly. This is again why I like to create everything in Modules away from the app component, because it makes this part look very clean.You will add the behavior subject to the entire app just by adding `[ngClass]=\"themeClass | async\"`. This will take the last Observable string for the class name and assign in when the service broadcasts.app.component.html\n\n```\n
    ```\n
    \n```\n```\n\nWe of course need to tell our html where this came from by updating our `app.component.ts` file by using dependency injection to add our new `color-service`.app.component.ts\n\n```\n
    ```\nimport { ColorPickerService } from \"./core/services/color-picker.service\";\nimport { Component, OnInit } from \"@angular/core\";\n@Component({\n  selector: \"app-root\",\n  templateUrl: \"./app.component.html\",\n  styleUrls: [\"./app.component.scss\"]\n})\nexport class AppComponent implements OnInit {\n  title = \"angular-material-router-outlet\";\n  themeClass;\n  constructor(private colorPicker: ColorPickerService) {\n    this.themeClass = this.colorPicker.getColorClass();\n  }\n  ngOnInit(): void {}\n}\n\n\n```\n```\n\nSass Mixins\n===========\n\nThe easiest way to create color on those items that dont allow the `color` directive, is to create a mixin based on our current theme’s color. For instance in our kitchensink `mat-grid-list` does not offer color, but we can add it to the background by providing a mixin.\n\nAdd Mixin to Theme[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#add-mixin-to-theme)\n---------------------------------------------------------------------------------------------------------------\n\nangular-material-router-theme.scss\n\n```\n
    ```\n@mixin mat-grid-mixin($theme) {\n  $primary: map-get(\n    $map: $theme,\n    $key: primary\n  );\n  mat-grid-tile {\n    background-color: mat-color($primary, 500);\n    color: mat-contrast($primary, 500);\n  }\n}\n\n\n```\n```\n\nInclude the mixin `@include mat-grid-mixin($theme);` update when each theme class is selected. Now anything with mat-grid-tile will receive the background color of the current primary theme color. You can get any key that you want from the sass function `map-get` and use it in the `mat-color` and `mat-contrast` functions.\n\n```\n
    ```\n.angular-material-router-app-theme-purple {\n  $theme: $angular-material-router-app-theme-purple;\n  @include angular-material-theme($theme);\n  @include mat-grid-mixin($theme);\n}\n```\n```\n\nCreate Mixin outside of Theme[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#create-mixin-outside-of-theme)\n-------------------------------------------------------------------------------------------------------------------------------------\n\nLets say that just in our kitchensink example we want to make all the buttons switch from a standard radius\n\n
    ![normal radius button](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/tools/notRound.png)
    to a more rounded radius\n\n
    ![45px radius](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/tools/round.png)
    We can add a new mixin fileangular-button-large-radius.scss\n\n```\n
    ```\n@mixin angular-button-large-radius {\n  .mat-raised-button,\n  .mat-stroked-button,\n  .mat-flat-button {\n    border-radius: 45px;\n  }\n}\n\n\n```\n```\n\nThen just include this into our kitchensink sass.\n\n```\n
    ```\n@import '../../../styles/angular-button-large-radius.scss'; \n@include angular-button-large-radius; \n```\n```\n\nTools\n=====\n\nTools Used In Lesson[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#tools-used-in-lesson)\n-------------------------------------------------------------------------------------------------------------------\n\n- [Angular Flex-Layout](https://github.com/angular/flex-layout)\n- [Material Design Palette Generator](http://mcg.mbitson.com/)\n- [Sass Guide](https://sass-lang.com/guide)\n- [Angular Material Theming](https://material.angular.io/guide/theming)\n- [Angular Material Kitchensink](https://github.com/angular/material2/blob/b21cfb73261e5c334280a185762ffcc475348b76/src/universal-app/kitchen-sink/kitchen-sink.ts)\n\nAdditional Tools[](https://codingcat.dev/courses/angularmaterial/angular-material-theming#additional-tools)\n-----------------------------------------------------------------------------------------------------------\n\n- [tburleson Layout Demos](https://tburleson-layouts-demos.firebaseapp.com/#/docs)\n- [Material IO](https://material.io/)\n- [SketchApp](https://www.sketchapp.com/)\n- [Material Sketch Plugin](https://material.io/tools/theme-editor/)\n- [Ionic CSS Variables](https://beta.ionicframework.com/docs/theming/color-generator)",
    +    "iso8601Date": "2019-01-22T12:37:01-05:00",
    +    "basename": "angular-material-theming"
    +  },
    +  "angular-material-router-outlet": {
    +    "title": "Angular Material Router Outlet",
    +    "date": "2019-01-09T15:41:29+00:00",
    +    "status": "publish",
    +    "permalink": "/courses/angularmaterial/lessons/angular-material-router-outlet",
    +    "author": "Alex Patterson",
    +    "excerpt": "",
    +    "type": "lessons",
    +    "id": 56,
    +    "thumbnail": "../../../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1604047150/ccd-cloudinary/RouterOutlet/RouterOutlet-150x150.png",
    +    "ld_lesson_category": [],
    +    "ld_lesson_tag": [],
    +    "course_id": [
    +      "51"
    +    ],
    +    "ld_course_51": [
    +      "51"
    +    ],
    +    "rank_math_primary_ld_lesson_category": [
    +      "0"
    +    ],
    +    "preview": "
    Angular Material Router Outlet\n==============================\n\nThis lesson will start from a new Angular Project and walk through how to use Angular Material [Sidenav](https://material.angular.io/components/sidenav/overview) using the Angular [Router](https://angular.io/guide/router) with [Named Outlets](https://angular.io/guide/router#displaying-multiple-routes-in-named-outlets). This will be the begining of building a app for publishing book reviews.???? Demo: \n\nCreate Angular Project\n======================\n\nIf you have never used the [Angular CLI](https://cli.angular.io/) you will want to checkout the main page to get started.\n\n```\n
    ```\nng new angular-material-router-outlet \n```\n```\n\nPlease choose Yes for routing and SCSS.\n\n
    ![NG Choices](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto//v1547496414/ajonp-ajonp-com/9-lesson-angular-material-router-outlet/ukc1dpxppxkumbid4aql.png)
    Add Material to Angular Project[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#add-material-to-angular-project)\n-----------------------------------------------------------------------------------------------------------------------------------------------\n\n> Make sure you have changed to the correct directory `cd angular-material-router-outlet`\n\nWe will now run an Angular schematic command, you can think of this as a workflow to help get your project up and running quicker. There are several schematics available and I would recommend reading [Angular Blog](https://blog.angular.io/schematics-an-introduction-dc1dfbc2a2b2) about schematics and [Angular Console](https://angularconsole.com/).\n\n```\n
    ```\nng add @angular/material \n```\n```\n\nFor the selections please choose custom, as we will add these in our next lesson.\n\n
    ![Angular Material Selections](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto//v1547499455/ajonp-ajonp-com/9-lesson-angular-material-router-outlet/rcbcfajzbwkjlptbhk08.png)
    Open Project[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#open-project)\n---------------------------------------------------------------------------------------------------------\n\nNow you can open your new Angular project, if using VSCode\n\n```\n
    ```\ncd angular-material-router-outlet && code . \n```\n```\n\nYou should see the base angular structure, including a routing module `app-routing.module.ts`\n\n
    ![Structure for Angular Project](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto//v1547499630/ajonp-ajonp-com/9-lesson-angular-material-router-outlet/wds1pzbwihb4p6efpnks.png)
    package.json\n\n```\n
    ```\n{\n  \"name\": \"angular-material-router-outlet\",\n  \"version\": \"0.0.0\",\n  \"scripts\": {\n    \"ng\": \"ng\",\n    \"start\": \"ng serve\",\n    \"build\": \"ng build\",\n    \"test\": \"ng test\",\n    \"lint\": \"ng lint\",\n    \"e2e\": \"ng e2e\"\n  },\n  \"private\": true,\n  \"dependencies\": {\n    \"@angular/animations\": \"~7.1.0\",\n    \"@angular/cdk\": \"~7.2.1\",\n    \"@angular/common\": \"~7.1.0\",\n    \"@angular/compiler\": \"~7.1.0\",\n    \"@angular/core\": \"~7.1.0\",\n    \"@angular/forms\": \"~7.1.0\",\n    \"@angular/material\": \"^7.2.1\",\n    \"@angular/platform-browser\": \"~7.1.0\",\n    \"@angular/platform-browser-dynamic\": \"~7.1.0\",\n    \"@angular/router\": \"~7.1.0\",\n    \"core-js\": \"^2.5.4\",\n    \"hammerjs\": \"^2.0.8\",\n    \"rxjs\": \"~6.3.3\",\n    \"tslib\": \"^1.9.0\",\n    \"zone.js\": \"~0.8.26\"\n  },\n  \"devDependencies\": {\n    \"@angular-devkit/build-angular\": \"~0.11.0\",\n    \"@angular/cli\": \"~7.1.3\",\n    \"@angular/compiler-cli\": \"~7.1.0\",\n    \"@angular/language-service\": \"~7.1.0\",\n    \"@types/node\": \"~8.9.4\",\n    \"@types/jasmine\": \"~2.8.8\",\n    \"@types/jasminewd2\": \"~2.0.3\",\n    \"codelyzer\": \"~4.5.0\",\n    \"jasmine-core\": \"~2.99.1\",\n    \"jasmine-spec-reporter\": \"~4.2.1\",\n    \"karma\": \"~3.1.1\",\n    \"karma-chrome-launcher\": \"~2.2.0\",\n    \"karma-coverage-istanbul-reporter\": \"~2.0.1\",\n    \"karma-jasmine\": \"~1.1.2\",\n    \"karma-jasmine-html-reporter\": \"^0.2.2\",\n    \"protractor\": \"~5.4.0\",\n    \"ts-node\": \"~7.0.0\",\n    \"tslint\": \"~5.11.0\",\n    \"typescript\": \"~3.1.6\"\n  }\n}\n\n\n```\n```\n\nindex.html\n\n```\n
    ```\n    AngularMaterialRouterOutlet           \n```\n```\n\nServe Angular Project\n=====================\n\nIn order to preview this base setup you will need to run the angular serve command.\n\n```\n
    ```\nng serve \n```\n```\n\nNow on [http://localhost:4200](http://localhost:4200/) you will see the default Angular page displayed.\n\n
    ![Angular Base page](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto//v1547499873/ajonp-ajonp-com/9-lesson-angular-material-router-outlet/cq7rdkftk6km9kmtism0.png)
    Angular Modules\n===============\n\nIn general a module is a way of packaging up several Angular based files that logically belong together. Direct from Angular’s [docs](https://angular.io/guide/architecture-modules), “NgModules are containers for a cohesive block of code dedicated to an application domain, a workflow, or a closely related set of capabilities.”We will use both [NgModule](https://angular.io/api/core/NgModule) and [Component](https://angular.io/api/core/Component) extensively through this lesson (and any Angular project).Many tutorials will have you start putting everything into app.component\\*, I like to keep the main app clean and load as much as possible after lazy loading. Creating a modules folder keeps things a little more concise, but do what you prefer most.\n\nAngular Material Sidenav\n========================\n\nThe Sidenav consists of three main html elements ``, ``, and ``. Visually these can be represented like\n\n
    ![Material Sidenav Layout](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto//v1547500528/ajonp-ajonp-com/9-lesson-angular-material-router-outlet/mat-sidenav-content.png)
    Creating Sidenav Module[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#creating-sidenav-module)\n-------------------------------------------------------------------------------------------------------------------------------\n\nTo create a module we can leverage the Angular CLI and run\n\n```\n
    ```\nng g m modules/sidenav \n```\n```\n\nThen we will need a component to display the Angular Material Sidenav.\n\n```\n
    ```\nng g c modules/sidenav \n```\n```\n\nThe output of these commands should give you this structure.\n\n
    ![Sidenav Module Structure](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto//v1547500863/ajonp-ajonp-com/9-lesson-angular-material-router-outlet/dbap7swjuk06qig0jtg2.png)
    You can then replace any contents in `app.component.html` with\n\n```\n
    ```\n \n```\n```\n\nSidenav will be the main entrypoint for the entire application, so it will need to reside directly in app.component. If you are asking yourself where did `app-sidenav` come from, Great question! This is defined in `sidenav.component.ts` in the `@Component` decorator, in the property `selector: app-sidenav`. Now at this point `app.component.ts` still does not now how to find `sidenav.component.ts` so we must export it from `sidenav.module.ts` and import it into `app.module.ts`.sidenav.module.ts\n\n```\n
    ```\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SidenavComponent } from './sidenav.component';\nimport { MatSidenavModule, MatToolbarModule, MatIconModule, MatButtonModule, MatListModule } from '@angular/material';\nimport { RouterModule } from '@angular/router';\n\n@NgModule({\n    declarations: [SidenavComponent],\n    imports: [\n        CommonModule,\n        MatSidenavModule,\n        MatToolbarModule,\n        MatIconModule,\n        MatButtonModule,\n        RouterModule,\n        MatListModule\n    ],\n    exports: [SidenavComponent]\n})\n\nexport class SidenavModule { } \n```\n```\n\napp.module.ts\n\n```\n
    ```\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { SidenavModule } from './modules/sidenav/sidenav.module';\nimport { OverlayContainer } from '@angular/cdk/overlay';\n\n@NgModule({\n    declarations: [AppComponent],\n    imports: [BrowserModule, AppRoutingModule, BrowserAnimationsModule, SidenavModule],\n    providers: [], bootstrap: [AppComponent]\n})\n\nexport class AppModule {\n    constructor(overlayContainer: OverlayContainer) {\n        overlayContainer.getContainerElement().classList.add('angular-material-router-app-theme');\n    }\n} \n```\n```\n\nNow our app can find the Sidenav module and can use it to show any of the exported components. If you open the preview again [http://localhost:4200](http://localhost:4200/), you should now see “sidenav works!”I would recommend committing at this point.\n\n```\n
    ```\ngit add . && git commit -m \"Initial sidenav\" \n```\n```\n\nUpdate sidenav.component\\*[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#update-sidenavcomponent)\n----------------------------------------------------------------------------------------------------------------------------------\n\nNow that we know our component can be seen as plain text lets start using the Angular Material Sidenav component for styling our app. First we will need to tell `sidenav.module.ts` that we need to include this new component, by adding it to our imports from `@angular/material`.\n\n```\n
    ```\nimport { MatSidenavModule} from '@angular/material'; \n\n... \n\nimports: [ CommonModule, MatSidenavModule, ... \n```\n```\n\nNow we can will update sidenav.component.html to include the sidenav elements.\n\n```\n
    ```\n\n    drawer\n    content\n\n```\n```\n\n> If you were to preview the page now you will only see “content” as the drawer is automatically hidden.\n\nUpdate `mat-sidenav` element to have the drawer open and beside content.\n\n```\n
    ```\n ... \n```\n```\n\nNow you can preview again [http://localhost:4200](http://localhost:4200/).\n\nAdd MatToolbar[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#add-mattoolbar)\n-------------------------------------------------------------------------------------------------------------\n\nWe can make our site look like most by adding a toolbar to the top\n\n```\n
    ```\n\n     drawer \n    \n          content\n    \n\n```\n```\n\nBecause we have added three new Angular Material elements `mat-toolbar`, `mat-icon-button` and `mat-icon` to our component, we will need to let `sidenav.component.ts` know where they are defined, so you need to import them in `sidenav.module.ts`.\n\n```\n
    ```\n@NgModule({ declarations: [SidenavComponent], imports: [ CommonModule, MatSidenavModule, MatToolbarModule, MatIconModule, MatButtonModule, \n... \n```\n```\n\nAdd Angular Router Outlet[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#add-angular-router-outlet)\n-----------------------------------------------------------------------------------------------------------------------------------\n\nThe main content of our app needs a place to end up, this is what Angular’s `router-outlet` accompishes. It is a placeholder that takes the markup from another component and places it on the page. For our app this will be the main outlet that other child outlets will nest under.\n\n```\n
    ```\n...    \n```\n```\n\nAlso remember to add RouterModule to `sidenav.module` so that Angular understands the element ``.\n\n```\n
    ```\n@NgModule({ declarations: [SidenavComponent], imports: [ CommonModule, MatSidenavModule, MatToolbarModule, MatIconModule, MatButtonModule, RouterModule, MatListModule ], exports: [SidenavComponent] }) \n```\n```\n\nThis is a visual representation of what is happening in our code so far, mat-sidenav-content->router-outlet is where the reaminder of our app will live.\n\n
    ![Sidenav with Toolbar](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto//v1547502835/ajonp-ajonp-com/9-lesson-angular-material-router-outlet/main-router-outlet.png)
    Lazy Loading Books Feature Module\n=================================\n\nThe first child route that we will setup is a book route. This will require us to create a new module and component. This time we will use an optional parameter `--routing` which will also create a routing module.Create Book Modules\n\n```\n
    ```\nng g m modules/books --routing \n```\n```\n\nCreate Book Component\n\n```\n
    ```\nng g c modules/books \n```\n```\n\nUpdate App routing[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#update-app-routing)\n---------------------------------------------------------------------------------------------------------------------\n\nWe now need to configure the router so that the books feature module can be accessed. So we will go back to `app-routing.module.ts` and add a new route with path `books`. There is a special way to load modules in a lazy fashion, meaning they were not downloaded when first accessing the app but when first accessing the route. You can read more about Lazy Loading Modules in the [Angular Guide](https://angular.io/guide/lazy-loading-ngmodules).\n\n```\n
    ```\nconst routes: Routes = [ { path: 'books', loadChildren: './modules/books/books.module#BooksModule' } ]; \n```\n```\n\nApp Routing Default Route[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#app-routing-default-route)\n-----------------------------------------------------------------------------------------------------------------------------------\n\nIf someone enters the app without a specified path we need to redirect that request over to books so that content will show up correctly.Add to constant routes.\n\n```\n
    ```\n { path: '', redirectTo: '/books', pathMatch: 'full' } \n```\n```\n\nUpdate Books Feature Module Route[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#update-books-feature-module-route)\n---------------------------------------------------------------------------------------------------------------------------------------------------\n\nNow that we have told the app router about a feature module we need to make sure that feature module knows which component it should load, so we will add an empty path.\n\n```\n
    ```\nconst routes: Routes = [ { path: '', component: BooksComponent, } ] \n```\n```\n\nYou should now see in the live preview  a message that says “books works!”.\n\nLazy Loading Welcome Feature Module\n===================================\n\nMany sites will often have a welcome or home module that you will route your traffic to incase there are notifications, logins, or basic info requirements. So we will switch our base path over to this new feature module and leave books on a seperate path. This will be the same setup as our Books Module.Create Welcome Modules\n\n```\n
    ```\nng g m modules/welcome --routing \n```\n```\n\nCreate Welcome Component\n\n```\n
    ```\nng g c modules/welcome \n```\n```\n\nUpdate App routing[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#update-app-routing)\n---------------------------------------------------------------------------------------------------------------------\n\n```\n
    ```\nconst routes: Routes = [ { path: 'welcome', loadChildren: './modules/books/books.module#BooksModule' } ]; \n```\n```\n\nApp Routing Default Route[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#app-routing-default-route)\n-----------------------------------------------------------------------------------------------------------------------------------\n\nChange this redirect from books to Welcome.app-routing.module.ts\n\n```\n
    ```\nconst routes: Routes = [ { path: 'welcome', loadChildren: './modules/welcome/welcome.module#WelcomeModule' }, { path: 'books', loadChildren: './modules/books/books.module#BooksModule' }, { path: '', redirectTo: '/welcome', pathMatch: 'full' } ]; \n```\n```\n\nUpdate Welcome Feature Module Route[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#update-welcome-feature-module-route)\n-------------------------------------------------------------------------------------------------------------------------------------------------------\n\nwelcome-routing.module.ts\n\n```\n
    ```\nconst routes: Routes = [ { path: '', component: WelcomeComponent, } ] \n```\n```\n\nUsing Router Link for Navigation\n================================\n\nIn order for us to navigate the site we need to add some navigational elements. Using an [Angular Material List](https://material.angular.io/components/list/overview#navigation-lists) with a specific `mat-nav-list` element type is just what we need for our sidenav drawer.\n\n```\n
    ```\n... \n\n    \n        \n            

    \n Home

    \n
    \n \n

    Books

    \n
    \n
    \n
    \n...\n\n```\n```\n\nDon’t forget that you will now need to add `RouterModule` and `MatListModule` in your `sidenav.module.ts` imports.sidenav.module.ts\n\n```\n
    ```\n@NgModule({ \n    declarations: [SidenavComponent], \n    imports: [ \n        CommonModule, \n        MatSidenavModule, \n        MatToolbarModule, \n        MatIconModule, \n        MatButtonModule, \n        RouterModule, \n        MatListModule \n    ], \n    ... \n```\n```\n\nIf you now preview [http://localhost:4200](http://localhost:4200/) you will see in the sidenav you can click on Home or Books and the content will change to “welcome works!” and books works!” respectively.\n\nActive Router Link[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#active-router-link)\n---------------------------------------------------------------------------------------------------------------------\n\nYou can style your link to know which link you are currently using by adding the attribute `routerLinkActive` and passing a class. We have already assigned ours to `active-link`.We can then add our style to `sidenav.component.scss` so that the active link changes to a bold blue.\n\n```\n
    ```\n.active-link { color: blue; font-weight: bold !important; border: none; } \n```\n```\n\nBecause we have our home (welcome) route path assigned to ‘/’ if you preview now both Books and Home would be highlighed. By changing our routerlink to `/welcome` this issue will be resolved. In later lessons we will also discuss routerLinkOptions such as `[routerLinkActiveOptions]=\"{exact:true}\"`.\n\nToolbar Updates\n===============\n\nIn our `mat-toolbar` we placed a button that currently calls a function that has not yet been defined. We need to assign a variable called snav by using `#snav` in the element `mat-sidenav`.\n\nSidenav Toggle[](https://codingcat.dev/courses/angularmaterial/angular-material-router-outlet#sidenav-toggle)\n-------------------------------------------------------------------------------------------------------------\n\nsidenav.component.html\n\n```\n
    ```\n \n```\n```\n\nWe can then use this new variable and pass it on the button click output `(click)=\"snavToggle(snav)\"`sidenav.component.html\n\n```\n
    ```\n\n```\n```\n\nUnsubscribing from Subscriptions[](https://codingcat.dev/courses/angularmaterial/angular-material-router-awareness#unsubscribing-from-subscriptions)\n----------------------------------------------------------------------------------------------------------------------------------------------------\n\n> Please note I have since learned an easier way using a seperate Subject and it is used in the next chapter of this course, [here](https://github.com/AJONPLLC/lesson15-firebase-AuthZ-AuthN/blob/master/src/app/modules/books/books.component.ts#L35) is the source.\n\nIf we don’t remove subscription from the Observables, we have the chance of memory leaks in our application. So a bit of refactoring our subscriptions allows us to add them all together in an array of type Subscription.\n\n- `subs: Array = [];` array for subscriptions.\n- `OnDestroy` you must add the implementation for [OnDestroy](https://angular.io/guide/lifecycle-hooks#ondestroy), so we can remove the subscriptions prior to removing the component (aka directive).\n\n/src/app/modules/books/\n\n```\n
    ```\n ngOnDestroy(): void { this.subs.forEach(sub => sub.unsubscribe()); } \n```\n```\n\nRouter Events Subscription[](https://codingcat.dev/courses/angularmaterial/angular-material-router-awareness#router-events-subscription)\n----------------------------------------------------------------------------------------------------------------------------------------\n\nIn our constructor we can now subscribe to events that happen on the Angular Router instance. We actually only care about the [NavigationEnd](https://angular.io/guide/router#router-events), and also make sure that we are at the `/books` level. At this point we can properly add a true value to the `showBooksAdd$` BehaviorSubject and the UI will react accordingly and update to show the button.\n\n/src/app/modules/books/\n\n```\n
    ```\nconstructor(private router: Router) { \n    /* Only add Book Add Fab on /books */ \n    this.subs.push(this.router.events.subscribe(e => { \n        if (e instanceof NavigationEnd && e.urlAfterRedirects === '/books') { \n            this.showBooksAdd$.next(true); \n        } else { \n            this.showBooksAdd$.next(false); \n        } \n    }));\n} \n```\n```\n\n### Hide FAB Button[](https://codingcat.dev/courses/angularmaterial/angular-material-router-awareness#hide-fab-button)\n\nNow that we are correctly passing the boolean (true/false) value to our BehaviorSubject we can observe this within the Angular UI and react. This is as simple as adding the [NgIf](https://angular.io/api/common/NgIf) directive. The easiest way to accomplish this is by usig the [async pipe](https://angular.io/guide/observables-in-angular#async-pipe) which will automatically subscribe and unsubscribe from our `showBooksAdd$` observable.\n\n- `*ngIf=\"(showBooksAdd$ | async)\"` allows for hiding or showing our button determined by the router position.\n\n/src/app/modules/books/\n\n```\n
    ```\n \n```\n```\n\nSummary[](https://codingcat.dev/courses/angularmaterial/angular-material-router-awareness#summary)\n--------------------------------------------------------------------------------------------------\n\nWhen we are on the `/books` path we want to see the button.\n\n
    ![books path](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/14-angular-material-router-awareness/Screen_Shot_2019-02-11_at_12.19.40_PM.png)
    When we are on any other subpath of `/books/*` we want to hide the button, for example the chapter section.\n\n
    ![chapter path](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/14-angular-material-router-awareness/Screen_Shot_2019-02-11_at_12.19.51_PM.png)
    ", + "iso8601Date": "2019-01-22T12:40:00-05:00", + "basename": "angular-material-router-awareness" + }, + "angular-material-reactive-forms-update-firestore": { + "title": "Angular Material Reactive Forms Update Firestore", + "date": "2019-01-22T17:38:02+00:00", + "status": "publish", + "permalink": "/courses/angularmaterial/lessons/angular-material-reactive-forms-update-firestore", + "author": "Alex Patterson", + "excerpt": "", + "type": "lessons", + "id": 506, + "thumbnail": "../../../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1604047162/ccd-cloudinary/ReactiveFormsUpdateFirestore/ReactiveFormsUpdateFirestore-150x150.png", + "ld_lesson_category": [], + "ld_lesson_tag": [], + "course_id": [ + "51" + ], + "ld_course_51": [ + "51" + ], + "rank_math_primary_ld_lesson_category": [ + "0" + ], + "preview": "
    Setup[](https://codingcat.dev/courses/angularmaterial/angular-material-reactive-forms-update-firestore#setup)\n-------------------------------------------------------------------------------------------------------------\n\nWe can start from the previous lesson and build out our reactive forms. Previous Lesson: [Angular Material Forms Firestore](https://github.com/AJONPLLC/lesson12-angular-material-forms-firestore)\n\n```\n
    ```\ngit clone https://github.com/AJONPLLC/lesson12-angular-material-forms-firestore \n```\n```\n\nThis will give us a solid base to start working from, however if you are creating a new firebase project you should change the environment/environment.ts file to match your firebase details. If you have never done this please see [Angular Navigation Firestore](https://ajonp.com/courses/angularmaterial/angular-material-dynamic-navigation-using-firestore) as this will provide more details on how to update.Make sure you update your npm packages\n\n```\n
    ```\nnpm install \n```\n```\n\nUpdate Book Model\n=================\n\nNavigate to src/app/core/models/book.ts so that we can update more details about the books that we will be adding and editing in the tutorial.You will notice a big change instead of using this as an interface which only allows for typing, using the class will allow us to create new objects based on our definition of Book. I really enjoy Todd Moto’s description of this the most in [Classes vs Interfaces in Typescript](https://ultimatecourses.com/blog/classes-vs-interfaces-in-typescript).You can see here that we have also provided a constructor that allows for a Partial Book type to be provided that assigns this as a new book, without requiring a full object. You can read more about Partial [here](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html). The Object assign will copy the values of all of the enumerable own properties from one or more source objects to a target object and returns the target object, which in our case will return a Book object.src/app/core/models/book.ts\n\n```\n
    ```\nimport { Timestamp } from '@firebase/firestore-types'; \n\nexport class Book { \n    ageCategory?: string; \n    description?: string; \n    fiction?: boolean; \n    genre?: string; \n    hasAudio?: boolean; \n    hasPhotos?: boolean; \n    hasVideos?: boolean; \n    id?: string; \n    publishDate?: Timestamp | Date; \n    rating?: number; \n    status?: string; \n    title?: string; \n\n    public constructor(init?: Partial) { \n        Object.assign(this, init); \n    } \n} \n```\n```\n\nFirestore Current Book Value to Form\n====================================\n\nSubscribing to book from Id[](https://codingcat.dev/courses/angularmaterial/angular-material-reactive-forms-update-firestore#subscribing-to-book-from-id)\n---------------------------------------------------------------------------------------------------------------------------------------------------------\n\n> Please note later I have updated the array push method of unsubscribing to a Subject and used `takeUntil(this.unsubscribe$)`.\n\nWhat we are doing here in the first part of the ngOnInit is subscribing to the router and getting our specified `bookId` and setting the global variable to store this off so that we can use this ID to fetch data about the current book.src/app/modules/books/book-edit/book-edit.component.ts\n\n```\n
    ```\nbookId: string; \n... \n\nngOnInit() { \n    // Get bookId for book document selection from Firestore \n    this.subs.push( this.route.paramMap.subscribe(params => { \n        this.bookId = params.get('bookId'); \n        this.rebuildForm(); \n    }));\n}\n```\n```\n\nBuilding (or rebuilding) Angular Form[](https://codingcat.dev/courses/angularmaterial/angular-material-reactive-forms-update-firestore#building-or-rebuilding-angular-form)\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nWe can then use this to call the method `rebuildForm()` which will update any of the required bindings on our Angular Form. If we break down this method we can see that there is a line that sets the blobal `book$` variable Observable. Don’t be confused by the `this.subs.push` you could even leave this out just for sake of the learning exercise (I would leave something to unsubsribe for a production app though).Next we have `this.book$.pipe(map(book` in which we are changing the `book.publishDate` which is a `Timestamp` over to a Javascript DateTime. This is necessary as our Angular Component is expecting this format.src/app/modules/books/book-edit/book-edit.component.ts\n\n```\n
    ```\nbookForm: FormGroup; \nbook$: Observable; \n\n... \n\nrebuildForm() { \n    if (this.bookForm) { \n        this.bookForm.reset(); \n    } \n\n    this.book$ = this.fs.getBook(this.bookId); \n    this.subs.push( \n        this.book$.pipe( \n            map(book => { \n                console.log(book.publishDate); \n                if (book.publishDate) { \n                    const timestamp = book.publishDate as Timestamp; \n                    book.publishDate = timestamp.toDate(); \n                } \n                return book; \n            }) \n        ).subscribe(book => { \n            this.bookForm = this.fb.group({ \n                ageCategory: [book.ageCategory, Validators.required], \n                description: [ book.description, [Validators.required, Validators.maxLength(500)] ], \n                fiction: [book.fiction || false, Validators.required], \n                genre: [book.genre, Validators.required], \n                asAudio: [book.hasAudio], \n                hasPhotos: [book.hasPhotos], \n                hasVideos: [book.hasVideos], \n                id: [book.id], \n                publishDate: [book.publishDate], \n                rating: [book.rating, Validators.required], \n                status: [book.status, Validators.required], \n                title: [book.title, [Validators.required, Validators.maxLength(50)]] \n            }); \n        }) \n    ); \n} \n```\n```\n\n### Form Control using Form Builder[](https://codingcat.dev/courses/angularmaterial/angular-material-reactive-forms-update-firestore#form-control-using-form-builder)\n\nWe also subscribe to the Observable coming from Firestore using `this.book$.subscribe(book` in which we setup the global variable `bookForm` with the values coming from Firestore. We use the dependency injected [Form Builder](https://angular.io/guide/form-validation#adding-to-reactive-forms)`private fb: FormBuilder` or `fb` to create a form group with all of the necessary form controls.In our form we can then reference these controls, for instance `ageCategory: [book.ageCategory, Validators.required],` ageCategory is now a FormControl that has a default value from Firestore of `book.ageCategory` and it is also a required field based on `Validators.required`.You can see here that we then use `formControlName=\"ageCategory\"` in order to link that form control based on the name.\n\n```\n
    ```\n \n```\n```\n\nSome of the more interesting use cases for FormControl validation is with something like `title: [book.title, [Validators.required, Validators.maxLength(50)]]` which says our title cannot be longer than 50. Just a reminder this is all front end based, so someone could maliciously still add a longer book.title, so you need to make sure if this is a hard requirement that you adjust your firestore.rules accordingly.\n\n```\n
    ```\n \n```\n```\n\n### Form Field Errors[](https://codingcat.dev/courses/angularmaterial/angular-material-reactive-forms-update-firestore#form-field-errors)\n\nLike magic (okay programming), if a fields validation is incorrect you will see an error appear.\n\n
    ![Form Field](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/12-angular-material-from-firestore/sr7u3gojyeztganortmm.png)
    This is handled via html with component `mat-error` this must be inside of `mat-form-field` like all of the Angular Material Form components. In our case we are showing two messages for title it is blank we show required, then if it is in error and not currently required we show that max length of 50.\n\n```\n
    ```\n \n     \n     \n        Title has a max length of 50. \n    \n     \n        Title is required \n     \n \n```\n```\n\n### Form Submit Only Pristine[](https://codingcat.dev/courses/angularmaterial/angular-material-reactive-forms-update-firestore#form-submit-only-pristine)\n\nSome of the logic here looks a little backwards but because we are disabling the buttons everything is applied in reverse. For cancel we only care if data was changed so we check for `pristine` (entered data), for the submit button data must be pristine and also valid. Meaning none of the Validators can be false, like required and length.Before Data Entered, we only have option to cancel.\n\n
    ![No Data](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/12-angular-material-from-firestore/u2cngx79xvpu9h1hfybp.png)
    After Data Entered if invalid we can only revert.\n\n
    ![Bad Data](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/12-angular-material-from-firestore/jafwiibebcbqn7digvhe.png)
    Finally good data we can save.\n\n
    ![Good Data](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/ajonp-ajonp-com/12-angular-material-from-firestore/fqqrn4hsnytvcadwag51.png)
    Submit and Save data[](https://codingcat.dev/courses/angularmaterial/angular-material-reactive-forms-update-firestore#submit-and-save-data)\n-------------------------------------------------------------------------------------------------------------------------------------------\n\nOnce all the data is pristine and valid we can then push SAVE.\n\n```\n
    ```\n \n```\n```\n\nThis button is within the form component and has this method being called `(ngSubmit)=\"saveBookChanges()\"`.\n\n```\n
    ```\n
    \n```\n```\n\nWhen this calls the method `saveBookChanges` it will call the firestore updateBook `await this.fs.updateBook(book);` in which it waits before navigating back to the main books list. This is also where you could throw up a saving dialog before the await statement.You will notice the first thing that we did was create the `Book` class, this is where it becomes hugely valuable. We can directly pass the `bookForm.value` and it will create a new `Book` Object to make the update!\n\n```\n
    ```\nasync saveBookChanges() { \n    const book = new Book(this.bookForm.value); \n    await this.fs.updateBook(book); \n    this.router.navigate(['/books', this.bookId]); \n} \n```\n```\n\nVideo\n=====\n\nI think the [video](https://youtu.be/92hYB6jivvQ) for this lesson is the best guide, don’t forget to put those breakpoints in to see what is happening in all the calls, and open up Firestore to watch it auto update.",
    +    "iso8601Date": "2019-01-22T12:38:02-05:00",
    +    "basename": "angular-material-reactive-forms-update-firestore"
    +  },
    +  "angular-material-forms-from-firestore": {
    +    "title": "Angular Material Forms from Firestore",
    +    "date": "2019-01-22T17:37:44+00:00",
    +    "status": "publish",
    +    "permalink": "/courses/angularmaterial/lessons/angular-material-forms-from-firestore",
    +    "author": "Alex Patterson",
    +    "excerpt": "",
    +    "type": "lessons",
    +    "id": 504,
    +    "thumbnail": "../../../../../uploadshttps://res.cloudinary.com/ajonp/images/w_150,h_150,c_fill,g_auto/v1604047159/ccd-cloudinary/MaterialFormsFromFirestore/MaterialFormsFromFirestore-150x150.png",
    +    "ld_lesson_category": [],
    +    "ld_lesson_tag": [],
    +    "course_id": [
    +      "51"
    +    ],
    +    "ld_course_51": [
    +      "51"
    +    ],
    +    "rank_math_primary_ld_lesson_category": [
    +      "0"
    +    ],
    +    "preview": "
    Angular Material Forms from Firestore\n=====================================\n\n???? [Demo](https://ajonp-lesson-12.firebaseapp.com/books/FirstBook/edit)This lesson will cover how to create all of the [Angular Material Form Components](https://material.angular.io/components/categories/forms), the data behind many of them will be coming from [Cloud Firestore](https://firebase.google.com/docs/firestore/).\n\nSetup\n=====\n\nWe will start this lesson from where we left off on [Angular Navigation Firestore](https://ajonp.com/courses/angularmaterial/angular-material-dynamic-navigation-using-firestore)\n\nSource from Prior lesson[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#source-from-prior-lesson)\n----------------------------------------------------------------------------------------------------------------------------------------\n\nClone\n\n```\n
    ```\ngit clone https://github.com/AJONPLLC/lesson11-angular-navigation-firestore.git lesson12-angular-material-forms-firestore \n```\n```\n\nRemove Origin, just always easier up front if you want to add this to your own repo (or again you can fork and just clone.)\n\n```\n
    ```\ngit remote rm origin \n```\n```\n\nInstall Dependencies[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#install-dependencies)\n--------------------------------------------------------------------------------------------------------------------------------\n\nMake sure you are in the correct directory `cd lesson12-angular-material-forms-firestore`.\n\n```\n
    ```\nnpm install \n```\n```\n\nBook Edit Module\n================\n\nCreate[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#create)\n----------------------------------------------------------------------------------------------------\n\nUsing the Angular CLI create the module with routing and corresponding component.\n\n```\n
    ```\nng g m modules/books/book-edit --routing && ng g c modules/books/book-edit \n```\n```\n\nRouter updates\n==============\n\nbooks-routing.module.ts[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#books-routingmodulets)\n------------------------------------------------------------------------------------------------------------------------------------\n\nAdd new lazy loaded path so that our main books-routing knows where to send requests for edit.\n\n```\n
    ```\n... { path: ':bookId/edit', loadChildren: './book-edit/book-edit.module#BookEditModule' } ... \n```\n```\n\nbook-edit-routing.module.ts[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#book-edit-routingmodulets)\n--------------------------------------------------------------------------------------------------------------------------------------------\n\nNow that we are in the book-edit module make sure it has a path to the book-edit Component.\n\n```\n
    ```\n... const routes: Routes = [ { path: '', component: BookEditComponent } ]; ... \n```\n```\n\nServe the edit path[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#serve-the-edit-path)\n------------------------------------------------------------------------------------------------------------------------------\n\nStartup the server\n\n```\n
    ```\nng serve \n```\n```\n\nNow that our router is all setup we should start to see the book-edit.component.html. Because we don’t have a way to navigate to this path yet just type it in the url bar manually `localhost:4200/books/FirstBook/edit`.You should see\n\n### book-edit works![](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#book-edit-works)\n\nUpdate Book Edit\n================\n\nStructure[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#structure)\n----------------------------------------------------------------------------------------------------------\n\nTo give our form some structure we can now add Flex Layout and Material Card centered at 75% to give a nice look to our form.book-edit.component.html\n\n```\n
    ```\n
    \n \n \n \n \n \n \n
    \n```\n```\n\nBecause these are new Elements we need to import them into our Book Edit module. book-edit.module.ts\n\n```\n
    ```\nimport { FlexLayoutModule } from '@angular/flex-layout'; \nimport {MatCardModule} from '@angular/material'; \n\n... \n\n@NgModule({ declarations: [BookEditComponent], imports: [ CommonModule, BookEditRoutingModule, FlexLayoutModule, MatCardModule, ] }) \n\n... \n```\n```\n\nGetting Firestore Data for Book Edit[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#getting-firestore-data-for-book-edit)\n----------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nBecause we are now navigating to an area that uses Angular router and part of the path contains a specified paramter id `:bookId/edit` we can get this `bookId` from the currently Activated Route. In order to do this we need to use dependency injection and provide this in our constructor. To then fetch that data from our `FirestoreService` we can then inject this service as well.\n\n```\n
    ```\nsubs: Subscription[] = []; \nbook$: Observable; \n\nconstructor(private router: ActivatedRoute, private fs: FirestoreService) {} \nngOnInit() { \n    // Get bookId for book document selection from Firestore \n    this.subs.push( \n        this.router.paramMap.subscribe(params => { \n            const bookId = params.get('bookId'); \n            this.book$ = this.fs.getBook(bookId); \n        }) \n    );\n}\n```\n```\n\nBy calling the firestore `getBook` function and passing in the current parameter `bookId` we now have an Observable reference to the Firestore data.firestore.service.ts\n\n```\n
    ```\ngetBook(bookId: string): Observable { \n    // Start Using AngularFirebase Service!! \n    return this.afb.doc$(`books/${bookId}`); \n} \n```\n```\n\n> This is a cool wrapper that Jeff over at [fireship.io](https://angularfirebase.com/lessons/firestore-advanced-usage-angularfire/) created. Feel free to copy this service and use it as a nice wrapper for all of your projects, I won’t include the two calls as we move forward angularfirebase.service.ts\n\n```\n
    ```\n doc$(ref: DocPredicate): Observable { return this.doc(ref) .snapshotChanges() .pipe( map( ( doc: Action< DocumentSnapshotDoesNotExist | DocumentSnapshotExists > ) => { return doc.payload.data() as T; } ) ); } \n```\n```\n\nExample of Book Data in Firestore Console:\n\n
    ![Book Data](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1548959741/ajonp-ajonp-com/11-lesson-angular-navigation-firestore/yep4ngt60x0ki8jocisx.png)
    In the snippet above we are also pushing our RxJs Subscription into an array so that we can then loop through any subscriptions during the destroy method and unsubscribe. This is a pattern I often use when I cannot use `pipe(take(1))` or `| async`.\n\n```\n
    ```\nngOnDestroy() { \n    this.subs.forEach(sub => { \n        sub.unsubscribe(); \n    }); \n} \n```\n```\n\nUsing Firestore Data Inside of Template[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#using-firestore-data-inside-of-template)\n----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nWe can not use our new `book$` Observable in our template to show any of the current data. We can update our card to show only when the book data is available, otherwise show a Material Spinner. You can read more on how the [NgIf](https://angular.io/api/common/NgIf) directive works in the Angular docs if you are unfamiliar.\n\n```\n
    ```\n \n    {{book.title}} \n    ... \n    \n        \n     \n```\n```\n\nCurrent title:\n\n
    ![Title View](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1548960658/ajonp-ajonp-com/11-lesson-angular-navigation-firestore/oclrlecxgwgbhbooidhg.png)
    Adding Form Input[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#adding-form-input)\n--------------------------------------------------------------------------------------------------------------------------\n\n> Just a warning here, if you want to see detailed [Angular Reactive Form](https://angular.io/guide/reactive-forms) usage this will be done in the next lesson.\n\nNow that we know our Observable is working successfully we can now change the card title out and start switching our card into several form inputs.For this we will need to include `FormsModule`, `ReactiveFormsModule`, `MatFormFieldModule`, and `MatInputModule` into our Book Edit Module.book-edit.module.ts\n\n```\n
    ```\n imports: [ CommonModule, BookEditRoutingModule, FlexLayoutModule, MatCardModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, \n```\n```\n\n### Title Input[](https://codingcat.dev/courses/angularmaterial/angular-material-forms-from-firestore#title-input)\n\n
    ![Title Input](https://res.cloudinary.com/ajonp/image/upload/f_auto,q_auto/v1548961254/ajonp-ajonp-com/12-angular-material-from-firestore/bvls9ivndkkacihjr2hp.png)
    The entire Material Card should now look like below, the new div surrounding the card is just to allow each section to flow in its own row of the column. If you have not used [Flex Layout](https://github.com/angular/flex-layout/wiki/fxFlex-API) check out the details.book-edit.component.html\n\n```\n
    ```\n   
    \n```\n```\n\nAbove we have our first two components-[Form Field](https://material.angular.io/components/form-field/overview) which you can think of as a wrapper to all of our components allowing for styling of the other form fields.-[Input](https://material.angular.io/components/input/overview) the key with this is the directive `matInput`, this will allow you to use a native `` or ` + ) : ( +
    +
    + {post ? post.post_content : ''} +
    +
    + )} + + ); +} + +export default EditPost; diff --git a/nextjs/src/components/Admin/EditPosts.tsx b/nextjs/src/components/Admin/EditPosts.tsx new file mode 100644 index 000000000..b5ca4c36c --- /dev/null +++ b/nextjs/src/components/Admin/EditPosts.tsx @@ -0,0 +1,62 @@ +import React, { useState, useEffect } from 'react'; +import { DataTable } from 'primereact/datatable'; +import { Column } from 'primereact/column'; +import Link from 'next/link'; + +import 'primereact/resources/primereact.min.css'; +import 'primeicons/primeicons.css'; +import 'primereact/resources/themes/saga-purple/theme.css'; + +import { useUser } from '@/utils/auth/useUser'; +import { postsObservable } from '@/services/api'; + +function EditPosts({ path }) { + const { user, logout }: { user: any; logout: any } = useUser(); + const [posts, setPosts] = useState([]); + useEffect(() => { + postsObservable( + path.substring(1) === 'blog' ? 'posts' : path.substring(1) + ).subscribe((posts) => setPosts(posts)); + }, [path]); + + function postId(rowData) { + return ( + + {rowData.id} + + ); + } + function postCategories(rowData) { + return {rowData.post_categories.join(',')}; + } + function postStatus(rowData) { + return ( + + {rowData.post_status} + + ); + } + + return ( + <> + + + + + + + + + + ); +} + +export default EditPosts; diff --git a/nextjs/src/components/FirebaseAuth.tsx b/nextjs/src/components/FirebaseAuth.tsx new file mode 100644 index 000000000..b2c45c523 --- /dev/null +++ b/nextjs/src/components/FirebaseAuth.tsx @@ -0,0 +1,76 @@ +import StyledFirebaseAuth from 'react-firebaseui/StyledFirebaseAuth'; +import firebase from 'firebase/app'; +import 'firebase/auth'; +import initFirebase from '@/utils/initFirebase'; +import { setUserCookie } from '@/utils/auth/userCookies'; +import { mapUserData } from '@/utils/auth/mapUserData'; + +// Init the Firebase app. +initFirebase(); +// Auth providers +// https://github.com/firebase/firebaseui-web#configure-oauth-providers +const firebaseAuthConfig = { + signInFlow: 'popup', + signInOptions: [ + firebase.auth.GoogleAuthProvider.PROVIDER_ID, + firebase.auth.TwitterAuthProvider.PROVIDER_ID, + firebase.auth.GithubAuthProvider.PROVIDER_ID, + ], + credentialHelper: 'none', + callbacks: { + signInSuccessWithAuthResult: async ({ user }, redirectUrl) => { + const userData = await mapUserData(user); + setUserCookie(userData); + }, + }, +}; + +const firebaseAuthFull = { + signInFlow: 'popup', + signInOptions: [ + { + provider: firebase.auth.EmailAuthProvider.PROVIDER_ID, + requireDisplayName: false, + }, + firebase.auth.GoogleAuthProvider.PROVIDER_ID, + firebase.auth.FacebookAuthProvider.PROVIDER_ID, + firebase.auth.TwitterAuthProvider.PROVIDER_ID, + firebase.auth.GithubAuthProvider.PROVIDER_ID, + firebase.auth.EmailAuthProvider.PROVIDER_ID, + 'apple.com', + 'microsoft.com', + 'yahoo.com', + ], + // signInSuccessUrl: '/', + credentialHelper: 'none', + callbacks: { + signInSuccessWithAuthResult: async ({ user }, redirectUrl) => { + const userData = await mapUserData(user); + setUserCookie(userData); + }, + }, +}; + +const FirebaseAuth = ({ full = true }) => { + return ( + <> + {full ? ( +
    + +
    + ) : ( +
    + +
    + )} + + ); +}; + +export default FirebaseAuth; diff --git a/nextjs/src/components/Home/Intro.tsx b/nextjs/src/components/Home/Intro.tsx new file mode 100644 index 000000000..1f6a11c7a --- /dev/null +++ b/nextjs/src/components/Home/Intro.tsx @@ -0,0 +1,23 @@ +import dynamic from 'next/dynamic'; + +const UserSignin = dynamic(() => import('@/components/UserSignin'), { + ssr: false, + loading: () => ( + <> +
    +
    + + ), +}); + +export default function dIntro() { + return ( + <> +
    +
    + +
    +
    + + ); +} diff --git a/nextjs/src/components/OutsideClick.tsx b/nextjs/src/components/OutsideClick.tsx new file mode 100644 index 000000000..5eb37cbec --- /dev/null +++ b/nextjs/src/components/OutsideClick.tsx @@ -0,0 +1,43 @@ +import React, { useRef, useEffect } from 'react'; +import PropTypes from 'prop-types'; + +/** + * Hook that alerts clicks outside of the passed ref + */ +function useOutsideClick(ref, toggle, value) { + useEffect(() => { + /** + * Alert if clicked on outside of element + */ + function handleClickOutside(event) { + if (ref.current && !ref.current.contains(event.target)) { + toggle(value); + } + } + // Bind the event listener + document.addEventListener('mousedown', handleClickOutside); + return () => { + // Unbind the event listener on clean up + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [ref]); +} + +/** + * Component that alerts if you click outside of it + */ +function OutsideClick(props) { + const wrapperRef = useRef(null); + const { toggle, value } = props; + useOutsideClick(wrapperRef, toggle, value); + + return
    {props.children}
    ; +} + +OutsideClick.propTypes = { + children: PropTypes.element.isRequired, + toggle: PropTypes.func.isRequired, + value: PropTypes.bool.isRequired, +}; + +export default OutsideClick; diff --git a/nextjs/src/components/PostsCards.tsx b/nextjs/src/components/PostsCards.tsx new file mode 100644 index 000000000..d8b88e4d1 --- /dev/null +++ b/nextjs/src/components/PostsCards.tsx @@ -0,0 +1,56 @@ +import Link from 'next/link'; +import Image from 'next/image'; +import PropTypes from 'prop-types'; +function PostsCards({ posts, post_type }) { + return ( + <> + {posts.map((post) => ( +
    + +
    +

    + + {post.post_title} + +

    +

    + {post.post_excerpt} +

    +
    +
    + ))} + + ); +} +PostsCards.propTypes = { + posts: PropTypes.array.isRequired, +}; + +export default PostsCards; diff --git a/nextjs/src/components/RecentPostsCards.tsx b/nextjs/src/components/RecentPostsCards.tsx new file mode 100644 index 000000000..d1578cf25 --- /dev/null +++ b/nextjs/src/components/RecentPostsCards.tsx @@ -0,0 +1,102 @@ +import Link from 'next/link'; +import Image from 'next/image'; +import PropTypes from 'prop-types'; + +function RecentPostsCards({ recentPosts }) { + return ( + <> + {recentPosts.tutorials.map((post) => ( +
    +
    + + + {post.post_title} + + +
    +
    +

    + {post.post_title} +

    +

    + {post.post_excerpt} +

    +
    +
    + ))} + {recentPosts.post.map((post) => ( +
    +
    + + + {post.post_title} + + +
    +
    +

    + {post.post_title} +

    +

    + {post.post_excerpt} +

    +
    +
    + ))} + {recentPosts.podcasts.map((post) => ( +
    +
    + + + {post.post_title} + + +
    +
    +

    + {post.post_title} +

    +

    + {post.post_excerpt} +

    +
    +
    + ))} + + ); +} +RecentPostsCards.propTypes = { + recentPosts: PropTypes.object.isRequired, +}; + +export default RecentPostsCards; diff --git a/nextjs/src/components/RecentPostsList.tsx b/nextjs/src/components/RecentPostsList.tsx new file mode 100644 index 000000000..498d5fb94 --- /dev/null +++ b/nextjs/src/components/RecentPostsList.tsx @@ -0,0 +1,26 @@ +import Link from 'next/link'; + +import PropTypes from 'prop-types'; + +function RecentPostsList({ posts }) { + return ( +
    + {posts.map((post) => ( + + ))} +
    + ); +} +RecentPostsList.propTypes = { + recentPosts: PropTypes.array.isRequired, +}; + +export default RecentPostsList; diff --git a/nextjs/src/components/User/ProfileCard.tsx b/nextjs/src/components/User/ProfileCard.tsx new file mode 100644 index 000000000..93b50de52 --- /dev/null +++ b/nextjs/src/components/User/ProfileCard.tsx @@ -0,0 +1,36 @@ +import Link from 'next/link'; + +import { useUser } from '@/utils/auth/useUser'; + +export default function UserSignin() { + const { user, logout }: { user: any; logout: any } = useUser(); + + if (!user) { + return ( +
    +

    You must be signed in to access this page.

    + + + + Signin + + +
    + ); + } + return ( +
    +

    You're signed in. Email: {user.email}

    + +
    + ); +} diff --git a/nextjs/src/components/UserSignin.tsx b/nextjs/src/components/UserSignin.tsx new file mode 100644 index 000000000..3e7d469f1 --- /dev/null +++ b/nextjs/src/components/UserSignin.tsx @@ -0,0 +1,150 @@ +import { useState } from 'react'; + +import dynamic from 'next/dynamic'; +import Link from 'next/link'; + +import { useUser } from '@/utils/auth/useUser'; +import Drip from '@/components/global/icons/Drip'; +import AJLogo from './global/icons/AJLogo'; +import AJLogoLeft from './global/icons/AJLogoLeft'; +import { sign } from 'crypto'; + +const FirebaseAuth = dynamic(() => import('@/components/FirebaseAuth'), { + ssr: false, + loading: () =>

    Playing with yarn...

    , +}); + +export default function UserSignin() { + const { user, logout }: { user: any; logout: any } = useUser(); + const [signin, setSignIn] = useState(false); + + return ( + <> + <> +
    +
    +
    +
    + {' '} +
    setSignIn(false)} + > + Sign Up +
    +
    +
    + {signin ? ( + + ) : ( + + )} +
    +
    +
    setSignIn(true)} + > + Sign In +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + + +

    + Please choose a password. +

    +
    +
    + + + Forgot Password? + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + ); +} diff --git a/nextjs/src/components/global/icons/AJLogo.tsx b/nextjs/src/components/global/icons/AJLogo.tsx new file mode 100644 index 000000000..79c3a83aa --- /dev/null +++ b/nextjs/src/components/global/icons/AJLogo.tsx @@ -0,0 +1,141 @@ +export default function AJLogo({ className = 'block w-12 h-12' }) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/nextjs/src/components/global/icons/AJLogoLeft.tsx b/nextjs/src/components/global/icons/AJLogoLeft.tsx new file mode 100644 index 000000000..f0bff2071 --- /dev/null +++ b/nextjs/src/components/global/icons/AJLogoLeft.tsx @@ -0,0 +1,139 @@ +export default function AJLogoLeft({ className = 'block w-12 h-12' }) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/nextjs/src/components/global/icons/Blog.tsx b/nextjs/src/components/global/icons/Blog.tsx new file mode 100644 index 000000000..33c80a419 --- /dev/null +++ b/nextjs/src/components/global/icons/Blog.tsx @@ -0,0 +1,194 @@ +export default function Blog() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/nextjs/src/components/global/icons/Community.tsx b/nextjs/src/components/global/icons/Community.tsx new file mode 100644 index 000000000..9315160df --- /dev/null +++ b/nextjs/src/components/global/icons/Community.tsx @@ -0,0 +1,46 @@ +export default function Community() { + return ( + + + + + + + + + + + + + + + + + + + ); +} diff --git a/nextjs/src/components/global/icons/Courses.tsx b/nextjs/src/components/global/icons/Courses.tsx new file mode 100644 index 000000000..a2c30da61 --- /dev/null +++ b/nextjs/src/components/global/icons/Courses.tsx @@ -0,0 +1,46 @@ +export default function Courses() { + return ( + + + + + + + + + + + + + + + + + + + ); +} diff --git a/nextjs/src/components/global/icons/Drip.tsx b/nextjs/src/components/global/icons/Drip.tsx new file mode 100644 index 000000000..b38be3ae2 --- /dev/null +++ b/nextjs/src/components/global/icons/Drip.tsx @@ -0,0 +1,10 @@ +export default function Drip() { + return ( + + + + ); +} diff --git a/nextjs/src/components/global/icons/Podcasts.tsx b/nextjs/src/components/global/icons/Podcasts.tsx new file mode 100644 index 000000000..73ebd1510 --- /dev/null +++ b/nextjs/src/components/global/icons/Podcasts.tsx @@ -0,0 +1,356 @@ +export default function Podcasts() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/nextjs/src/components/global/icons/Tutorials.tsx b/nextjs/src/components/global/icons/Tutorials.tsx new file mode 100644 index 000000000..5c6872eb2 --- /dev/null +++ b/nextjs/src/components/global/icons/Tutorials.tsx @@ -0,0 +1,46 @@ +export default function Tutorials() { + return ( + + + + + + + + + + + + + + + + + + + ); +} diff --git a/nextjs/src/components/global/logos/SloganNunito.tsx b/nextjs/src/components/global/logos/SloganNunito.tsx new file mode 100644 index 000000000..5e7fad237 --- /dev/null +++ b/nextjs/src/components/global/logos/SloganNunito.tsx @@ -0,0 +1,13 @@ +export default function TitleNunito({ + className = 'block w-12 h-12', + fill = '#FFF', +}) { + return ( + + + + ); +} diff --git a/nextjs/src/components/global/logos/TitleLogo.tsx b/nextjs/src/components/global/logos/TitleLogo.tsx new file mode 100644 index 000000000..8dff71892 --- /dev/null +++ b/nextjs/src/components/global/logos/TitleLogo.tsx @@ -0,0 +1,35 @@ +import AJLogo from '../icons/AJLogo'; +import AJLogoLeft from '../icons/AJLogoLeft'; +import SloganNunito from './SloganNunito'; +import TitleNunito from './TitleNunito'; + +export default function TitleSloganLogo({ + titleClassName = 'block w-48 h-12', + titleFill = 'white', + ajClassName = 'block w-12 h-12', + ajFaceStandard = true, +}) { + return ( +
    + {!ajFaceStandard ? ( +
    + +
    + ) : ( + <> + )} +
    +
    + +
    +
    + {ajFaceStandard ? ( +
    + +
    + ) : ( + <> + )} +
    + ); +} diff --git a/nextjs/src/components/global/logos/TitleNunito.tsx b/nextjs/src/components/global/logos/TitleNunito.tsx new file mode 100644 index 000000000..308a62425 --- /dev/null +++ b/nextjs/src/components/global/logos/TitleNunito.tsx @@ -0,0 +1,17 @@ +export default function TitleNunito({ + className = 'block w-12 h-12', + fill = '#FFF', +}) { + return ( + + + + ); +} diff --git a/nextjs/src/components/global/logos/TitleSloganLogo.tsx b/nextjs/src/components/global/logos/TitleSloganLogo.tsx new file mode 100644 index 000000000..a7c58dbb5 --- /dev/null +++ b/nextjs/src/components/global/logos/TitleSloganLogo.tsx @@ -0,0 +1,40 @@ +import AJLogo from '../icons/AJLogo'; +import AJLogoLeft from '../icons/AJLogoLeft'; +import SloganNunito from './SloganNunito'; +import TitleNunito from './TitleNunito'; + +export default function TitleSloganLogo({ + titleClassName = 'block w-64 h-12', + titleFill = 'white', + sloganClassName = 'block w-64 h-12', + sloganFill = 'white', + ajClassName = 'block w-16 h-16', + ajFaceStandard = true, +}) { + return ( +
    + {!ajFaceStandard ? ( +
    + +
    + ) : ( + <> + )} +
    +
    + +
    +
    + +
    +
    + {ajFaceStandard ? ( +
    + +
    + ) : ( + <> + )} +
    + ); +} diff --git a/nextjs/src/config/firebase.ts b/nextjs/src/config/firebase.ts new file mode 100644 index 000000000..611469dd6 --- /dev/null +++ b/nextjs/src/config/firebase.ts @@ -0,0 +1,23 @@ +export const serviceAccountKey = { + type: process.env.FIREBASE_SERVICE_TYPE, + projectId: process.env.FIREBASE_SERVICE_PROJECT_ID, + privateKeyId: process.env.FIREBASE_SERVICE_PRIVATE_KEY_ID, + privateKey: Buffer.from(`${process.env.FIREBASE_SERVICE_PRIVATE_KEY}`,'base64').toString(), + clientEmail: process.env.FIREBASE_SERVICE_CLIENT_EMAIL, + clientOd: process.env.FIREBASE_SERVICE_CLIENT_ID, + authUri: process.env.FIREBASE_SERVICE_AUTH_URI, + tokenUri: process.env.FIREBASE_SERVICE_TOKEN_URI, + authProviderX509CertUrl: process.env.FIREBASE_SERVICE_AUTH_PROVIDER_X509_CERT_URL, + clientX509CertUrl: process.env.FIREBASE_SERVICE_CLIENT_509_CERT_URL, +}; + +export const config = { + apiKey: process.env.NEXT_PUBLIC_FB_CONFIG_APIKEY, + authDomain: process.env.NEXT_PUBLIC_FB_CONFIG_AUTHDOMAIN, + databaseURL: process.env.NEXT_PUBLIC_FB_CONFIG_DATABASEURL, + projectId: process.env.NEXT_PUBLIC_FB_CONFIG_PROJECTID, + storageBucket: process.env.NEXT_PUBLIC_FB_CONFIG_STORAGEBUCKET, + messagingSenderId: process.env.NEXT_PUBLIC_FB_CONFIG_MESSAGINGSENDERID, + appId: process.env.NEXT_PUBLIC_FB_CONFIG_APPID, + measurementId: process.env.NEXT_PUBLIC_FB_CONFIG_MEASUREMENTID, +}; diff --git a/nextjs/src/fonts/HennyPenny-Regular.ttf b/nextjs/src/fonts/HennyPenny-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..77083fbcbb8f8ea146aef56d936fd5cd6ff0f4df GIT binary patch literal 80500 zcmb5W2b>($nJ-$Ms;j%JtE#K3bIv)Z>FMd|o}6KR;it7sKd&r@BYNd*A!LcVSwm>Qqfl z^%wqMJO>kC7^Z@M#2C}o-#2vqjpy&j1k8gN<~OztjWjZi@^>&n&1)DYc&~3Lmh9mE z=dUq=;63=Q&7;jdSuTUO_GFP-`6?=S%&hU@QaIk3-;1>r~_Z-;+{ zOS_j>@rfsLaQ&MwxwbsFwi}aUQuuop;5xayrKH`={5KZS
    lfV;cc%lTJ=(>3Wi`=X})ejfYpOODE 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 { + const { setOverlayMenuActive, overlayMenuActive } = props; + + return ( +
    +
    +
    +
    + + + + + +
    + + +
    + + +
    + +
    + ); +}; diff --git a/nextjs/src/layout/AppTopbar.tsx b/nextjs/src/layout/AppTopbar.tsx new file mode 100644 index 000000000..8f5b2c9f4 --- /dev/null +++ b/nextjs/src/layout/AppTopbar.tsx @@ -0,0 +1,280 @@ +import { useState } from 'react'; +import Link from 'next/link'; +import ActiveLink from '@/components/ActiveLink'; +import { Transition } from '@headlessui/react'; +import OutsideClick from '@/components/OutsideClick'; +import TitleLogo from '@/components/global/logos/TitleLogo'; + +export const AppTopbar = (props) => { + const { setOverlayMenuActive, overlayMenuActive } = props; + + const [userMenu, setUserMenu] = useState(false); + + return ( + + ); +}; diff --git a/nextjs/src/pages/[...permalink].tsx b/nextjs/src/pages/[...permalink].tsx new file mode 100644 index 000000000..4e9d756fe --- /dev/null +++ b/nextjs/src/pages/[...permalink].tsx @@ -0,0 +1,130 @@ +import Head from 'next/head'; +import DefaultErrorPage from 'next/error'; +import { useRouter } from 'next/router'; + +import admin from '@/utils/firebaseAdmin'; + +import renderToString from 'next-mdx-remote/render-to-string'; +import hydrate from 'next-mdx-remote/hydrate'; +import parse from 'remark-parse'; +import mdx from 'remark-mdx'; + +import RecentPostsList from '@/components/RecentPostsList'; + +export default function Post({ post, markdown, recentPosts }) { + const router = useRouter(); + if (router.isFallback) { + return

    Loading ...

    ; + } + + if (!post) { + return ( + <> + + + + + + ); + } + + const content = hydrate(markdown); + return ( +
    +
    +

    {post.post_title}

    +
    + {content} +
    +
    +
    +
    +

    + Recent Posts +

    + +

    + Recent Tutorials +

    + +

    + Recent Podcasts +

    + +
    +
    +
    + ); +} + +export async function getStaticPaths() { + const POSTS = []; + ['post', 'tutorials', 'podcasts'].forEach(async (postType) => { + const posts = await admin + .firestore() + .collection(postType === 'post' ? 'posts' : postType) + .orderBy('post_publish_datetime', 'desc') + .get(); + for (const doc of posts.docs) { + POSTS.push({ + params: { + permalink: doc.data().post_permalink.substring(1).split('/'), + }, + }); + } + }); + return { + paths: POSTS, + fallback: true, + }; +} + +export async function getStaticProps({ params }) { + const { permalink } = params; + + const posts = await admin + .firestore() + .collection(permalink.length > 1 ? `${permalink[0]}` : 'posts') + .where('post_permalink', '==', `/${permalink.join('/')}`) + .get(); + + let postData; + for (const doc of posts.docs) { + postData = doc.data(); + } + const post = posts.docs.length > 0 ? postData : null; + const markdown = post + ? await renderToString(postData.post_content, { + mdxOptions: { + remarkPlugins: [parse, mdx], + }, + }) + : null; + + const recentPosts = { post: [], tutorials: [], podcasts: [] }; + await Promise.all( + Object.keys(recentPosts).map(async (postType) => { + const posts = await admin + .firestore() + .collection(postType === 'post' ? 'posts' : postType) + .orderBy('post_publish_datetime', 'desc') + .limit(3) + .get(); + for (const doc of posts.docs) { + recentPosts[postType].push(doc.data()); + } + }) + ); + + return { + props: { + post, + markdown, + recentPosts, + }, + // Next.js will attempt to re-generate the page: + // - When a request comes in + // - At most once every second + revalidate: 1, // In seconds + }; +} diff --git a/nextjs/src/pages/_app.tsx b/nextjs/src/pages/_app.tsx new file mode 100644 index 000000000..c79e4d0a5 --- /dev/null +++ b/nextjs/src/pages/_app.tsx @@ -0,0 +1,80 @@ +import '../styles/globals.css'; +import { useState } from 'react'; +import { Transition } from '@headlessui/react'; +import router from 'next/router'; + +import { AppTopbar } from '../layout/AppTopbar'; +import { AppMenu } from '../layout/AppMenu'; + +import OutsideClick from '@/components/OutsideClick'; + +function MyApp({ Component, pageProps }) { + const [overlayMenuActive, setOverlayMenuActive] = useState(false); + + let menuClick = false; + + const onSidebarClick = () => { + menuClick = true; + }; + const onMenuItemClick = (event) => { + if (!event.item.items) { + setOverlayMenuActive(false); + } + }; + const onShowMenuButton = (event) => { + console.log(event); + }; + + router.events.on('routeChangeComplete', () => setOverlayMenuActive(false)); + + return ( + <> +
    +
    +
    + +
    +
    + +
    + +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + ); +} + +export default MyApp; diff --git a/nextjs/src/pages/_document.tsx b/nextjs/src/pages/_document.tsx new file mode 100644 index 000000000..4cb9d6e6b --- /dev/null +++ b/nextjs/src/pages/_document.tsx @@ -0,0 +1,137 @@ +import Document, { Html, Head, Main, NextScript } from 'next/document'; + +class MyDocument extends Document { + static async getInitialProps(ctx) { + const initialProps = await Document.getInitialProps(ctx); + return { ...initialProps }; + } + + render() { + return ( + + + + + + + + + + + + + + + {/* Icons */} + + + + + + + + + + + + + + + + {/* Socials */} + + + + + + + + + + + + + +
    + + + + ); + } +} + +export default MyDocument; diff --git a/nextjs/src/pages/admin/[type].tsx b/nextjs/src/pages/admin/[type].tsx new file mode 100644 index 000000000..49ce740b8 --- /dev/null +++ b/nextjs/src/pages/admin/[type].tsx @@ -0,0 +1,57 @@ +import Head from 'next/head'; +import dynamic from 'next/dynamic'; +import { withRouter } from 'next/router'; + +import AdminMenu from '@/components/Admin/AdminMenu'; +import AdminTopBar from '@/components/Admin/AdminTopBar'; + +const EditPosts = dynamic(() => import('@/components/Admin/EditPosts'), { + ssr: false, + loading: () =>

    Climbing a tree...

    , +}); + +function AdminDashboard({ router }) { + const path = `/${router.asPath.substring( + router.asPath.lastIndexOf('/') + 1 + )}`; + return ( + <> + + + {`Admin-${path.substr(1).substr(0, 1).toUpperCase()}${path.substr( + 2 + )} | CodingCatDev`} + + + + +
    + +
    + +
    +
    + {router.asPath === path ? ( +
    +

    + Dashboard +

    +

    Show some welcoming things here.

    +
    + ) : ( +
    + +
    + )} +
    +
    +
    +
    + + ); +} + +export default withRouter(AdminDashboard); diff --git a/nextjs/src/pages/admin/[type]/[id].tsx b/nextjs/src/pages/admin/[type]/[id].tsx new file mode 100644 index 000000000..41c962e48 --- /dev/null +++ b/nextjs/src/pages/admin/[type]/[id].tsx @@ -0,0 +1,40 @@ +import Head from 'next/head'; +import dynamic from 'next/dynamic'; +import { withRouter } from 'next/router'; + +import AdminMenu from '@/components/Admin/AdminMenu'; +import AdminTopBar from '@/components/Admin/AdminTopBar'; + +const EditPost = dynamic(() => import('@/components/Admin/EditPost'), { + ssr: false, + loading: () =>

    Chasing a mouse...

    , +}); + +function AdminDashboard({ router }) { + return ( + <> + + {`Edit ${router.query.type}| CodingCatDev`} + + + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + ); +} + +export default withRouter(AdminDashboard); diff --git a/nextjs/src/pages/admin/index.tsx b/nextjs/src/pages/admin/index.tsx new file mode 100644 index 000000000..e4392c7c0 --- /dev/null +++ b/nextjs/src/pages/admin/index.tsx @@ -0,0 +1,64 @@ +import Head from 'next/head'; +import dynamic from 'next/dynamic'; +import { withRouter } from 'next/router'; + +import AdminMenu from '@/components/Admin/AdminMenu'; +import AdminTopBar from '@/components/Admin/AdminTopBar'; + +const EditPosts = dynamic(() => import('@/components/Admin/EditPosts'), { + ssr: false, + loading: () =>

    Climbing a tree...

    , +}); + +function AdminDashboard({ router }) { + const path = `/${router.asPath.substring( + router.asPath.lastIndexOf('/') + 1 + )}`; + return ( +
    + + + {`${path.substr(1).substr(0, 1).toUpperCase()}${path.substr(2)}`} | + CodingCatDev + + + + +
    + <> +
    + +
    + +
    +
    + {router.asPath === path ? ( +
    +

    + Dashboard +

    +

    + Show some welcoming things here. +

    +
    + ) : ( +
    + +
    + )} +
    +
    +
    +
    + +
    + +
    +
    + ); +} + +export default withRouter(AdminDashboard); diff --git a/nextjs/pages/api/.gitkeep b/nextjs/src/pages/api/.gitkeep similarity index 100% rename from nextjs/pages/api/.gitkeep rename to nextjs/src/pages/api/.gitkeep diff --git a/nextjs/src/pages/blog.tsx b/nextjs/src/pages/blog.tsx new file mode 100644 index 000000000..5bd29ba10 --- /dev/null +++ b/nextjs/src/pages/blog.tsx @@ -0,0 +1,43 @@ +import Head from 'next/head'; +import PostsCards from '@/components/PostsCards'; + +import admin from '@/utils/firebaseAdmin'; + +export default function Blog({ posts }) { + return ( +
    + + Blog | CodingCatDev + + +
    + +
    + +
    +
    + ); +} + +export async function getStaticProps() { + const postDocs = await admin + .firestore() + .collection('posts') + .orderBy('post_publish_datetime', 'desc') + .get(); + + const posts = []; + for (const doc of postDocs.docs) { + posts.push(doc.data()); + } + + return { + props: { + posts, + }, + // Next.js will attempt to re-generate the page: + // - When a request comes in + // - At most once every second + revalidate: 1, // In seconds + }; +} diff --git a/nextjs/src/pages/community.tsx b/nextjs/src/pages/community.tsx new file mode 100644 index 000000000..1e141c4f6 --- /dev/null +++ b/nextjs/src/pages/community.tsx @@ -0,0 +1,17 @@ +import Head from 'next/head'; + +export default function Tutorials() { + return ( +
    + + Community | CodingCatDev + + +
    + Welcome to the community page! +
    + +
    +
    + ); +} diff --git a/nextjs/src/pages/courses.tsx b/nextjs/src/pages/courses.tsx new file mode 100644 index 000000000..df583d170 --- /dev/null +++ b/nextjs/src/pages/courses.tsx @@ -0,0 +1,17 @@ +import Head from 'next/head'; + +export default function Courses() { + return ( +
    + + Courses | CodingCatDev + + +
    + Courses coming soon +
    + +
    +
    + ); +} diff --git a/nextjs/src/pages/design/atoms.tsx b/nextjs/src/pages/design/atoms.tsx new file mode 100644 index 000000000..3ca4d7650 --- /dev/null +++ b/nextjs/src/pages/design/atoms.tsx @@ -0,0 +1,116 @@ +import Head from 'next/head'; +import AJLogo from '../../components/global/icons/AJLogo'; + +export default function Blog({ posts }) { + return ( + <> + + Design | CodingCatDev + + +
    +
    +
    +

    Atoms

    +

    + +

    +
    +
    + {/* Typography */} +
    +
    +
    Typography
    +
    +
    +

    Henny Penny

    +
    +
    Henny Penny
    +
    Henny Penny
    +

    Henny Penny

    +

    Henny Penny

    +

    Henny Penny

    +

    Henny Penny

    +
    +
    +
    +

    Nunito

    +
    +

    + The quick brown fox jumps over the lazy dog. +

    +

    + The quick brown fox jumps over the lazy dog. +

    +

    + The quick brown fox jumps over the lazy dog. +

    +

    + The quick brown fox jumps over the lazy dog. +

    +

    + The quick brown fox jumps over the lazy dog. +

    +

    + The quick brown fox jumps over the lazy dog. +

    +
    +
    +
    + + {/* Typography */} +
    +
    +
    Spacing
    +
    +
    +
    +

    h-1

    +
    +

    h-2

    +
    +

    h-3

    +
    +

    h-4

    +
    +

    h-5

    +
    +

    h-6

    +
    +

    h-8

    +
    +

    h-10

    +
    +

    h-12

    +
    +

    h-16

    +
    +

    h-20

    +
    +

    h-24

    +
    +

    h-32

    +
    +

    h-40

    +
    +

    h-48

    +
    +

    h-56

    +
    +

    h-64

    +
    +
    +
    +
    +

    Nunito

    +
    +

    + The quick brown fox jumps over the lazy dog. +

    +
    +
    +
    +
    + + ); +} diff --git a/nextjs/src/pages/design/components.tsx b/nextjs/src/pages/design/components.tsx new file mode 100644 index 000000000..5f225035d --- /dev/null +++ b/nextjs/src/pages/design/components.tsx @@ -0,0 +1,40 @@ +import Head from 'next/head'; +import AJLogo from '@/components/global/icons/AJLogo'; +import TitleSloganLogo from '@/components/global/logos/TitleSloganLogo'; +import TitleLogo from '@/components/global/logos/TitleLogo'; + +export default function Blog({ posts }) { + return ( + <> + + Design | CodingCatDev + + +
    +
    +
    +

    Components

    +

    + +

    +
    +
    + + {/* Logos */} +
    +
    +
    Logos
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + + ); +} diff --git a/nextjs/src/pages/design/index.tsx b/nextjs/src/pages/design/index.tsx new file mode 100644 index 000000000..66e6613d2 --- /dev/null +++ b/nextjs/src/pages/design/index.tsx @@ -0,0 +1,25 @@ +import Head from 'next/head'; +import Link from 'next/link'; + +export default function Blog({ posts }) { + return ( +
    + + Design | CodingCatDev + + +
    + + Atoms + +
    +
    + + Components + +
    + +
    +
    + ); +} diff --git a/nextjs/src/pages/index.tsx b/nextjs/src/pages/index.tsx new file mode 100644 index 000000000..433bc5be7 --- /dev/null +++ b/nextjs/src/pages/index.tsx @@ -0,0 +1,50 @@ +import Head from 'next/head'; +import admin from '@/utils/firebaseAdmin'; + +import RecentPostsCards from '@/components/RecentPostsCards'; +import Intro from '@/components/Home/Intro'; + +export default function Home({ recentPosts }) { + return ( +
    + + CodingCatDev + +
    + +
    +
    + +
    + +
    +
    + ); +} + +export async function getStaticProps({ params }) { + const recentPosts = { post: [], tutorials: [], podcasts: [] }; + await Promise.all( + Object.keys(recentPosts).map(async (postType) => { + const posts = await admin + .firestore() + .collection(postType === 'post' ? 'posts' : postType) + .orderBy('post_publish_datetime', 'desc') + .limit(3) + .get(); + for (const doc of posts.docs) { + recentPosts[postType].push(doc.data()); + } + }) + ); + + return { + props: { + recentPosts, + }, + // Next.js will attempt to re-generate the page: + // - When a request comes in + // - At most once every second + revalidate: 1, // In seconds + }; +} diff --git a/nextjs/src/pages/podcasts.tsx b/nextjs/src/pages/podcasts.tsx new file mode 100644 index 000000000..d06af26c9 --- /dev/null +++ b/nextjs/src/pages/podcasts.tsx @@ -0,0 +1,42 @@ +import Head from 'next/head'; +import PostsCards from '@/components/PostsCards'; +import admin from '@/utils/firebaseAdmin'; + +export default function Podcasts({ posts }) { + return ( +
    + + Podcasts | CodingCatDev + + +
    + +
    + +
    +
    + ); +} + +export async function getStaticProps() { + const postDocs = await admin + .firestore() + .collection('podcasts') + .orderBy('post_publish_datetime', 'desc') + .get(); + + const posts = []; + for (const doc of postDocs.docs) { + posts.push(doc.data()); + } + + return { + props: { + posts, + }, + // Next.js will attempt to re-generate the page: + // - When a request comes in + // - At most once every second + revalidate: 1, // In seconds + }; +} diff --git a/nextjs/src/pages/signin.tsx b/nextjs/src/pages/signin.tsx new file mode 100644 index 000000000..3711c3d2c --- /dev/null +++ b/nextjs/src/pages/signin.tsx @@ -0,0 +1,24 @@ +import Head from 'next/head'; +import dynamic from 'next/dynamic'; + +const FirebaseAuth = dynamic(() => import('@/components/FirebaseAuth'), { + ssr: false, + loading: () =>

    Playing with yarn...

    , +}); + +export default function Signin() { + return ( +
    + + Signin | CodingCatDev + + + +
    + +
    + +
    +
    + ); +} diff --git a/nextjs/src/pages/tutorials.tsx b/nextjs/src/pages/tutorials.tsx new file mode 100644 index 000000000..41b4cd32d --- /dev/null +++ b/nextjs/src/pages/tutorials.tsx @@ -0,0 +1,42 @@ +import Head from 'next/head'; +import PostsCards from '@/components/PostsCards'; +import admin from '@/utils/firebaseAdmin'; + +export default function Tutorials({ posts }) { + return ( + <> + + Tutorials | CodingCatDev + + +
    + +
    + +
    + + ); +} + +export async function getStaticProps() { + const postDocs = await admin + .firestore() + .collection('tutorials') + .orderBy('post_publish_datetime', 'desc') + .get(); + + const posts = []; + for (const doc of postDocs.docs) { + posts.push(doc.data()); + } + + return { + props: { + posts, + }, + // Next.js will attempt to re-generate the page: + // - When a request comes in + // - At most once every second + revalidate: 1, // In seconds + }; +} diff --git a/nextjs/src/pages/user/profile.tsx b/nextjs/src/pages/user/profile.tsx new file mode 100644 index 000000000..e7977a4d8 --- /dev/null +++ b/nextjs/src/pages/user/profile.tsx @@ -0,0 +1,25 @@ +import Head from 'next/head'; +import dynamic from 'next/dynamic'; + +const ProfileCard = dynamic(() => import('@/components/User/ProfileCard'), { + ssr: false, + loading: () =>

    Chasing my tail..

    , +}); + +export default function Profile() { + return ( +
    + + Profile | CodingCatDev + + +
    +
    + +
    +
    + +
    +
    + ); +} diff --git a/nextjs/src/services/api.ts b/nextjs/src/services/api.ts new file mode 100644 index 000000000..f185418dc --- /dev/null +++ b/nextjs/src/services/api.ts @@ -0,0 +1,57 @@ +import firebase from 'firebase/app'; +import 'firebase/firestore'; +import 'firebase/auth'; + +import initFirebase from '@/utils/initFirebase'; +import { docData, collection, collectionData } from 'rxfire/firestore'; +import { map } from 'rxjs/operators'; +initFirebase(); +const firestore = firebase.firestore(); + +/* POST */ + +export const postDataObservable = (id: string) => { + return docData(firestore.doc(id)); +}; + +export const postsDataObservable = (post_type: string, limit: number) => { + if (limit && limit > 0) { + return collectionData( + firestore.collection(post_type).limit(limit).orderBy('updatedAt', 'desc') + ); + } else { + return collectionData( + firestore.collection(post_type).orderBy('updatedAt', 'desc') + ); + } +}; + +export const postUpdate = (id: string, post_content: string) => { + firestore.doc(id).set({ post_content }, { merge: true }); +}; + +/* POSTS */ + +export const postsObservable = (post_type: string, limit: number = null) => { + if (limit && limit > 0) { + return collection( + firestore.collection(post_type).limit(limit).orderBy('updatedAt', 'desc') + ).pipe( + map((docs) => + docs.map((d) => { + return { ...d.data(), id: d.id }; + }) + ) + ); + } else { + return collection( + firestore.collection(post_type).orderBy('updatedAt', 'desc') + ).pipe( + map((docs) => + docs.map((d) => { + return { ...d.data(), id: d.id }; + }) + ) + ); + } +}; diff --git a/nextjs/src/styles/globals.css b/nextjs/src/styles/globals.css new file mode 100644 index 000000000..d49bb8f37 --- /dev/null +++ b/nextjs/src/styles/globals.css @@ -0,0 +1,42 @@ +@import 'tailwindcss/base'; +@import 'tailwindcss/components'; +@import 'tailwindcss/utilities'; + +@layer base { + @font-face { + font-family: nunito; + font-style: normal; + font-weight: 600; + src: url(../../node_modules/typeface-nunito-sans/files/nunito-sans-latin-600.woff); + } + @font-face { + font-family: Henny Penny; + font-style: normal; + font-weight: 400; + src: url(../fonts/HennyPenny-Regular.ttf); + } + h1 { + @apply leading-loose text-7xl font-heading; + } + h2 { + @apply text-6xl leading-loose font-heading; + } + h3 { + @apply text-5xl leading-loose font-heading; + } + h4 { + @apply text-4xl leading-loose font-heading; + } + h5 { + @apply text-3xl leading-loose font-heading; + } + h6 { + @apply text-2xl leading-loose font-heading; + } +} + +@layer components { + .vertical-text-clip { + @apply text-transparent bg-clip-text bg-gradient-to-b from-ccd-purples-800 via-ccd-purples-400 to-ccd-reds-500; + } +} diff --git a/nextjs/src/utils/auth/firebaseAdmin.ts b/nextjs/src/utils/auth/firebaseAdmin.ts new file mode 100644 index 000000000..b53ba7b9f --- /dev/null +++ b/nextjs/src/utils/auth/firebaseAdmin.ts @@ -0,0 +1,24 @@ +import * as admin from 'firebase-admin' + +export const verifyIdToken = (token) => { + const firebasePrivateKey = process.env.FIREBASE_PRIVATE_KEY + + if (!admin.apps.length) { + admin.initializeApp({ + credential: admin.credential.cert({ + projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, + clientEmail: process.env.FIREBASE_CLIENT_EMAIL, + // https://stackoverflow.com/a/41044630/1332513 + privateKey: firebasePrivateKey.replace(/\\n/g, '\n'), + }), + databaseURL: process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL, + }) + } + + return admin + .auth() + .verifyIdToken(token) + .catch((error) => { + throw error + }) +} diff --git a/nextjs/src/utils/auth/mapUserData.ts b/nextjs/src/utils/auth/mapUserData.ts new file mode 100644 index 000000000..ff29018c4 --- /dev/null +++ b/nextjs/src/utils/auth/mapUserData.ts @@ -0,0 +1,9 @@ +export const mapUserData = async (user) => { + const { uid, email } = user + const token = await user.getIdToken(true) + return { + id: uid, + email, + token, + } +} diff --git a/nextjs/src/utils/auth/useUser.tsx b/nextjs/src/utils/auth/useUser.tsx new file mode 100644 index 000000000..3b991f8e2 --- /dev/null +++ b/nextjs/src/utils/auth/useUser.tsx @@ -0,0 +1,65 @@ +import { useEffect, useState } from 'react'; +import { useRouter } from 'next/router'; +import firebase from 'firebase/app'; +import 'firebase/auth'; +import initFirebase from '../initFirebase'; +import { + removeUserCookie, + setUserCookie, + getUserFromCookie, +} from './userCookies'; +import { mapUserData } from './mapUserData'; + +initFirebase(); + +const useUser = () => { + const [user, setUser] = useState(); + const router = useRouter(); + + const logout = async () => { + return firebase + .auth() + .signOut() + .then(() => { + // Sign-out successful. + router.push('/'); + }) + .catch((e) => { + console.error(e); + }); + }; + + useEffect(() => { + // Firebase updates the id token every hour, this + // makes sure the react state and the cookie are + // both kept up to date + const cancelAuthListener = firebase + .auth() + .onIdTokenChanged(async (user) => { + if (user) { + const userData = await mapUserData(user); + setUserCookie(userData); + setUser(userData as any); + } else { + removeUserCookie(); + setUser(null); + } + }); + + const userFromCookie = getUserFromCookie(); + if (!userFromCookie) { + return; + } + setUser(userFromCookie); + + return () => { + cancelAuthListener(); + }; + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return { user, logout }; +}; + +export { useUser }; diff --git a/nextjs/src/utils/auth/userCookies.ts b/nextjs/src/utils/auth/userCookies.ts new file mode 100644 index 000000000..776f02ff4 --- /dev/null +++ b/nextjs/src/utils/auth/userCookies.ts @@ -0,0 +1,19 @@ +import cookies from 'js-cookie' + +export const getUserFromCookie = () => { + const cookie = cookies.get('auth') + if (!cookie) { + return + } + return JSON.parse(cookie) +} + +export const setUserCookie = (user) => { + cookies.set('auth', user, { + // firebase id tokens expire in one hour + // set cookie expiry to match + expires: 1 / 24, + }) +} + +export const removeUserCookie = () => cookies.remove('auth') diff --git a/nextjs/src/utils/firebaseAdmin.ts b/nextjs/src/utils/firebaseAdmin.ts new file mode 100644 index 000000000..988627093 --- /dev/null +++ b/nextjs/src/utils/firebaseAdmin.ts @@ -0,0 +1,13 @@ +import * as admin from 'firebase-admin'; + +import { serviceAccountKey, config } from '@/config/firebase'; + +if (admin.apps.length === 0) { + admin.initializeApp({ + credential: admin.credential.cert(serviceAccountKey), + databaseURL: config.databaseURL, + storageBucket: config.storageBucket, + }); +} + +export default admin; diff --git a/nextjs/src/utils/initFirebase.ts b/nextjs/src/utils/initFirebase.ts new file mode 100644 index 000000000..1cd692237 --- /dev/null +++ b/nextjs/src/utils/initFirebase.ts @@ -0,0 +1,19 @@ +import firebase from 'firebase/app' + +const config = { + apiKey: process.env.NEXT_PUBLIC_FB_CONFIG_APIKEY, + authDomain: process.env.NEXT_PUBLIC_FB_CONFIG_AUTHDOMAIN, + databaseURL: process.env.NEXT_PUBLIC_FB_CONFIG_DATABASEURL, + projectId: process.env.NEXT_PUBLIC_FB_CONFIG_PROJECTID, + storageBucket: process.env.NEXT_PUBLIC_FB_CONFIG_STORAGEBUCKET, + messagingSenderId: process.env.NEXT_PUBLIC_FB_CONFIG_MESSAGINGSENDERID, + appId: process.env.NEXT_PUBLIC_FB_CONFIG_APPID, + measurementId: process.env.NEXT_PUBLIC_FB_CONFIG_MEASUREMENTID +} + + +export default function initFirebase() { + if (!firebase.apps.length) { + firebase.initializeApp(config) + } +} diff --git a/nextjs/styles/globals.css b/nextjs/styles/globals.css deleted file mode 100644 index 962045c44..000000000 --- a/nextjs/styles/globals.css +++ /dev/null @@ -1,10 +0,0 @@ -/* purgecss start ignore */ -@tailwind base; -@tailwind components; -/* purgecss end ignore */ -@tailwind utilities; - -@font-face { - font-family: nunito; - src: url(../node_modules/typeface-nunito-sans/files/nunito-sans-latin-600.woff); -} diff --git a/nextjs/tailwind.config.js b/nextjs/tailwind.config.js index 5d3610b32..0333ad907 100644 --- a/nextjs/tailwind.config.js +++ b/nextjs/tailwind.config.js @@ -1,134 +1,134 @@ module.exports = { - purge: [], + purge: ['./src/**/*.{js,mdx,jsx,tsx}', './next.config.js'], darkMode: false, // or 'media' or 'class' theme: { fontFamily: { - sans: ["nunito"], - serif: ["nunito"], - mono: ["nunito"], + sans: ['nunito', 'ui-sans-serif'], + serif: ['nunito', 'ui-serif'], + mono: ['nunito', 'ui-monospace'], + heading: ['Henny Penny', 'nunito'], }, + // boxShadow: { + // 'b-lg': { + // '--tw-shadow': + // '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);', + // 'box-shadow': + // 'var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);', + // }, + // }, extend: { colors: { - "ccd-primary": { - "050": "#EFE4F4", - 100: "#D7BCE3", - 200: "#BD8FD1", - 300: "#A362BE", - 400: "#8F41B0", - 500: "#7B1FA2", - 600: "#731B9A", - 700: "#681790", - 800: "#5E1286", - 900: "#4B0A75", + 'ccd-basics': { + '050': '#FBFBFB', + 100: '#F1F1F1', + 200: '#DCDCDC', + 300: '#B3AFB5', + 400: '#7F7982', + 500: '#6E6B70', + 600: '#333034', + 700: '#1E1D1F', + 800: '#141214', + 900: '#171717', }, - "ccd-secondary": { - "050": "#FFEBEC", - 100: "#FFCDCF", - 200: "#FFACAF", - 300: "#FF8B8F", - 400: "#FF7277", - 500: "#FF595F", - 600: "#FF5157", - 700: "#FF484D", - 800: "#FF3E43", - 900: "#FF2E32", + 'ccd-purples': { + '050': '#EFE4F4', + 100: '#D7BCE3', + 200: '#BD8FD1', + 300: '#A362BE', + 400: '#8F41B0', + 500: '#7B1FA2', + 600: '#731B9A', + 700: '#681790', + 800: '#5E1286', + 900: '#4B0A75', }, - "ccd-social": { - twitter: "#1da1f1", - discord: "#7289da", - github: "#23292d", - youtube: "#ff0000", - slack: "#e01e5a", - linkedin: "#1173b0", - facebook: "#4166b2", - instagram: "#f00574", - hackernews: "#ff6500", - reddit: "#ff4500", + 'ccd-reds': { + '050': '#FFEBEC', + 100: '#FFCDCF', + 200: '#FFACAF', + 300: '#FF8B8F', + 400: '#FF7277', + 500: '#FF595F', + 600: '#FF5157', + 700: '#FF484D', + 800: '#FF3E43', + 900: '#FF2E32', + }, + 'ccd-yellows': { + '050': '#FFFCF6', + 100: '#FEFAED', + 200: '#FEF1D1', + 300: '#FDE9B5', + 400: '#FBD97E', + 500: '#F9C846', + 600: '#E0B43F', + 700: '#CDA438', + 800: '#BA9532', + 900: '#9A7B28', + }, + 'ccd-blues': { + '050': '#F2FEFF', + 100: '#E6FDFF', + 200: '#BFF9FE', + 300: '#FDE9B5', + 400: '#4DEFFD', + 500: '#00E8FC', + 600: '#00D1E3', + 700: '#008B97', + 800: '#00464C', + 900: '#03272B', + }, + 'ccd-greens': { + '050': '#F5FDF9', + 100: '#EAFBF2', + 200: '#CBF5E0', + 300: '#ABEFCD', + 400: '#6CE4A7', + 500: '#2DD881', + 600: '#29C274', + 700: '#1B824D', + 800: '#14613A', + 900: '#0E462A', + }, + 'ccd-lime-greens': { + '050': '#FCFEF9', + 100: '#FAFEF2', + 200: '#F2FCDF', + 300: '#E9F9CC', + 400: '#D9F5A6', + 500: '#C9F180', + 600: '#B5D973', + 700: '#86A949', + 800: '#637C35', + 900: '#42561E', + }, + + 'ccd-social': { + twitter: '#1da1f1', + discord: '#7289da', + github: '#23292d', + youtube: '#ff0000', + slack: '#e01e5a', + linkedin: '#1173b0', + facebook: '#4166b2', + instagram: '#f00574', + hackernews: '#ff6500', + reddit: '#ff4500', }, }, }, - transform: { - // defaults to this value - none: "none", - }, - transformOrigin: { - // defaults to these values - t: "top", - tr: "top right", - r: "right", - br: "bottom right", - b: "bottom", - bl: "bottom left", - l: "left", - tl: "top left", - }, - translate: { - // defaults to {} - "1/2": "50%", - full: "100%", - "right-up": ["100%", "-100%"], - "3d": ["40px", "-60px", "-130px"], - }, - scale: { - // defaults to {} - 90: "0.9", - 100: "1", - 110: "1.1", - "-100": "-1", - "stretched-x": ["2", "0.5"], - "stretched-y": ["0.5", "2"], - "3d": ["0.5", "1", "2"], - }, - rotate: { - // defaults to {} - 90: "90deg", - 180: "180deg", - 270: "270deg", - "3d": ["0", "1", "0.5", "45deg"], - }, - skew: { - // defaults to {} - "-5": "-5deg", - 5: "5deg", - }, - perspective: { - // defaults to {} - none: "none", - 250: "250px", - 500: "500px", - 750: "750px", - 1000: "1000px", - }, - perspectiveOrigin: { - // defaults to these values - t: "top", - tr: "top right", - r: "right", - br: "bottom right", - b: "bottom", - bl: "bottom left", - l: "left", - tl: "top left", - }, - }, - variants: { - // all the following default to ['responsive'] - transform: ["responsive"], - transformOrigin: ["responsive"], - translate: ["responsive"], - scale: ["responsive"], - rotate: ["responsive"], - skew: ["responsive"], - perspective: ["responsive"], - perspectiveOrigin: ["responsive"], - transformStyle: ["responsive"], - backfaceVisibility: ["responsive"], - transformBox: ["responsive"], + customForms: (theme) => ({ + default: { + 'input, textarea, multiselect': { + // backgroundColor: theme('colors.gray.200'), + // color: theme('colors.gray.200'), + }, + }, + }), }, plugins: [ - require("tailwindcss-transforms")({ - "3d": false, // defaults to false - }), - require("tailwindcss-animatecss"), + require('@tailwindcss/typography'), + // require('@tailwindcss/forms'), + require('@tailwindcss/custom-forms'), ], }; diff --git a/nextjs/tsconfig.json b/nextjs/tsconfig.json index 35d51eac9..3604dda33 100644 --- a/nextjs/tsconfig.json +++ b/nextjs/tsconfig.json @@ -1,14 +1,11 @@ { "compilerOptions": { "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": false, + "strictNullChecks": false, "forceConsistentCasingInFileNames": true, "noEmit": true, "esModuleInterop": true, @@ -16,14 +13,17 @@ "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve" + "jsx": "preserve", + "baseUrl": ".", + "paths": { + "@/components/*": ["src/components/*"], + "@/config/*": ["src/config/*"], + "@/layout/*": ["src/layout/*"], + "@/pages/*": ["src/pages/*"], + "@/services/*": ["src/services/*"], + "@/utils/*": ["src/utils/*"] + } }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx" - ], - "exclude": [ - "node_modules" - ] + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..fe114ec4e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "stylelint-config-recommended": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz", + "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==", + "dev": true + } + } +} diff --git a/remoteconfig.template.json b/remoteconfig.template.json new file mode 100644 index 000000000..e69de29bb diff --git a/storage.rules b/storage.rules new file mode 100644 index 000000000..4eda34fdf --- /dev/null +++ b/storage.rules @@ -0,0 +1,8 @@ +rules_version = '2'; +service firebase.storage { + match /b/{bucket}/o { + match /{allPaths=**} { + allow read, write: if request.auth!=null; + } + } +} From 2377630ce5d7a6cda3720173bd21ed73f4bf49de Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Thu, 14 Jan 2021 10:39:15 -0500 Subject: [PATCH 5/7] removing build, will add to github --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 07312fda3..9a9b1d404 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,7 @@ "dependencies": {}, "husky": { "hooks": { - "pre-commit": "npm run lint", - "pre-push": "npm run build" + "pre-commit": "npm run lint" } }, "devDependencies": { From 7ba6f027d2f396adb9bdd7d77da7f6ac5ffa4232 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Thu, 14 Jan 2021 10:39:42 -0500 Subject: [PATCH 6/7] add dev build command --- .github/workflows/dev-main-build.yml | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/dev-main-build.yml diff --git a/.github/workflows/dev-main-build.yml b/.github/workflows/dev-main-build.yml new file mode 100644 index 000000000..91eb7bc00 --- /dev/null +++ b/.github/workflows/dev-main-build.yml @@ -0,0 +1,31 @@ +name: dev-main-build + +on: + push: + branches: [ dev ] + paths: 'frontend/main' + pull_request: + branches: [ dev ] + paths: 'frontend/main' + + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + - name: Setup Node.js environment + uses: actions/setup-node@v2.1.4 + with: + node-version: 12 + - run: npm install + - run: npm run build \ No newline at end of file From 3b34684d81948c1c63efaecd3b939785d6678a48 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Thu, 14 Jan 2021 10:41:53 -0500 Subject: [PATCH 7/7] add tsc check to commit --- frontend/admin/package.json | 2 +- frontend/main/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/admin/package.json b/frontend/admin/package.json index e832934a4..b5b1ff50a 100644 --- a/frontend/admin/package.json +++ b/frontend/admin/package.json @@ -10,7 +10,7 @@ "analyze": "cross-env ANALYZE=true next build", "analyze:server": "cross-env BUNDLE_ANALYZE=server next build", "analyze:browser": "cross-env BUNDLE_ANALYZE=browser next build", - "lint": "eslint . --quiet --ext .ts,.tsx" + "lint": "eslint . --quiet --ext .ts,.tsx && tsc --noEmit" }, "dependencies": { "@emotion/cache": "^11.1.3", diff --git a/frontend/main/package.json b/frontend/main/package.json index 23276cc5a..149ceaca7 100644 --- a/frontend/main/package.json +++ b/frontend/main/package.json @@ -10,7 +10,7 @@ "analyze": "cross-env ANALYZE=true next build", "analyze:server": "cross-env BUNDLE_ANALYZE=server next build", "analyze:browser": "cross-env BUNDLE_ANALYZE=browser next build", - "lint": "eslint . --quiet --ext .ts,.tsx" + "lint": "eslint . --quiet --ext .ts,.tsx && tsc --noEmit" }, "dependencies": { "@babel/core": "^7.12.10",